@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
|
@@ -10,9 +10,14 @@ export function readRuntimePolicyRules(body) {
|
|
|
10
10
|
blockedActions: readRules(body.blockedActions, "blockedActions", "action"),
|
|
11
11
|
allowedProxies: readRules(body.allowedProxies, "allowedProxies", "proxy"),
|
|
12
12
|
blockedProxies: readRules(body.blockedProxies, "blockedProxies", "proxy"),
|
|
13
|
+
allowedTriggers: readRules(body.allowedTriggers, "allowedTriggers", "action", true),
|
|
14
|
+
blockedTriggers: readRules(body.blockedTriggers, "blockedTriggers", "action", true),
|
|
13
15
|
};
|
|
14
16
|
}
|
|
15
17
|
export function readTokenPolicy(body, allowOmitted = false) {
|
|
18
|
+
if (body.blockedTriggers !== undefined) {
|
|
19
|
+
throw invalidInput("Token policy does not support Trigger block rules.");
|
|
20
|
+
}
|
|
16
21
|
if (body.blockedProxies !== undefined) {
|
|
17
22
|
throw invalidInput("Token policy does not support proxy block rules.");
|
|
18
23
|
}
|
|
@@ -20,6 +25,7 @@ export function readTokenPolicy(body, allowOmitted = false) {
|
|
|
20
25
|
allowedActions: readRules(body.allowedActions, "allowedActions", "action", allowOmitted),
|
|
21
26
|
blockedActions: readRules(body.blockedActions, "blockedActions", "action", allowOmitted),
|
|
22
27
|
allowedProxies: readRules(body.allowedProxies, "allowedProxies", "proxy", allowOmitted),
|
|
28
|
+
allowedTriggers: readRules(body.allowedTriggers, "allowedTriggers", "action", true),
|
|
23
29
|
allowedConnections: readConnectionIds(body.allowedConnections, "allowedConnections", allowOmitted),
|
|
24
30
|
};
|
|
25
31
|
}
|
|
@@ -3,8 +3,9 @@ import type { ConnectionError, ConnectionSummary, ManagedConnectionSummary } fro
|
|
|
3
3
|
import type { ProviderAuthSetup } from "../../core/provider-setup.ts";
|
|
4
4
|
import type { ExecutionResult, ProviderScenario } from "../../core/types.ts";
|
|
5
5
|
import type { OAuthClientConfigSummary } from "../../oauth/oauth-client-config-service.ts";
|
|
6
|
+
import type { TriggerPermission } from "../../triggers/metadata.ts";
|
|
6
7
|
import type { Context } from "hono";
|
|
7
|
-
type RuntimeStatus = 400 | 401 | 402 | 403 | 404 | 409 | 413 | 429 | 500 | 501;
|
|
8
|
+
export type RuntimeStatus = 400 | 401 | 402 | 403 | 404 | 409 | 413 | 429 | 500 | 501 | 502 | 503 | 504;
|
|
8
9
|
export type RuntimeResponseMeta = Record<string, unknown>;
|
|
9
10
|
export interface RuntimeSuccessEnvelope<TData> {
|
|
10
11
|
success: true;
|
|
@@ -54,6 +55,7 @@ export interface RuntimeActionMetadata {
|
|
|
54
55
|
}
|
|
55
56
|
export interface RuntimeConnectedApp {
|
|
56
57
|
id: string;
|
|
58
|
+
providerAccountId: string;
|
|
57
59
|
service: string;
|
|
58
60
|
status: "active" | "disconnected";
|
|
59
61
|
alias: string;
|
|
@@ -74,6 +76,9 @@ export interface RuntimeFailureInput {
|
|
|
74
76
|
export interface RuntimeActionResultInput {
|
|
75
77
|
actionId: string;
|
|
76
78
|
executionId: string;
|
|
79
|
+
remoteExecutionId?: string;
|
|
80
|
+
failureStatus?: RuntimeStatus;
|
|
81
|
+
retryAfter?: string;
|
|
77
82
|
auditPersisted: boolean;
|
|
78
83
|
result: ExecutionResult;
|
|
79
84
|
}
|
|
@@ -100,7 +105,13 @@ export declare function serializeRuntimeFailure(input: RuntimeFailureInput): Run
|
|
|
100
105
|
export declare function serializeRuntimeActionResult(input: RuntimeActionResultInput): RuntimeActionHttpResult;
|
|
101
106
|
/** Validate an action response decoded from persistent storage. */
|
|
102
107
|
export declare function parseRuntimeActionHttpResult(value: unknown): RuntimeActionHttpResult;
|
|
103
|
-
/**
|
|
108
|
+
/**
|
|
109
|
+
* Write a newly serialized or replayed action response; runtime failures,
|
|
110
|
+
* including proxy failures, go through here as well. A 429 whose provider
|
|
111
|
+
* details carry `retryAfterSeconds` also answers with the `Retry-After`
|
|
112
|
+
* header, so HTTP callers pace on the provider's own hint; the body keeps it,
|
|
113
|
+
* which is what an idempotent replay re-emits the header from.
|
|
114
|
+
*/
|
|
104
115
|
export declare function writeRuntimeActionHttpResult(context: Context, result: RuntimeActionHttpResult): Response;
|
|
105
116
|
export declare function mapConnectionErrorStatus(error: ConnectionError): 400 | 404 | 409;
|
|
106
117
|
/**
|
|
@@ -129,8 +140,12 @@ export interface RuntimeProviderSetup {
|
|
|
129
140
|
interface RuntimeOAuthClientSetup {
|
|
130
141
|
configured: boolean;
|
|
131
142
|
customClientAvailable: boolean;
|
|
143
|
+
/** Redirect URI to register with the provider: the configured override, else the runtime callback. */
|
|
132
144
|
expectedRedirectUri: string;
|
|
133
145
|
missingFields: string[];
|
|
134
146
|
}
|
|
135
|
-
export declare function serializeRuntimeProviderSetup(provider: RuntimeProviderDefinition, oauth?: OAuthClientConfigSummary): RuntimeProviderSetup;
|
|
147
|
+
export declare function serializeRuntimeProviderSetup(provider: RuntimeProviderDefinition, oauth?: Pick<OAuthClientConfigSummary, "configured" | "customClientAvailable" | "expectedRedirectUri" | "missingFields">): RuntimeProviderSetup;
|
|
148
|
+
export declare function serializeRuntimeTriggerPermissions(provider: RuntimeProviderDefinition): (TriggerPermission & {
|
|
149
|
+
requiredScopes: readonly string[];
|
|
150
|
+
})[];
|
|
136
151
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { optionalInteger, optionalRecord, requiredRecord } from "../../core/cast.js";
|
|
1
|
+
import { optionalInteger, optionalString, optionalRecord, requiredRecord } from "../../core/cast.js";
|
|
2
2
|
import { describeProviderAuth } from "../../core/provider-setup.js";
|
|
3
3
|
export function serializeRuntimeProvider(provider) {
|
|
4
4
|
return {
|
|
@@ -37,6 +37,7 @@ export function serializeRuntimeAction(action) {
|
|
|
37
37
|
export function serializeRuntimeConnectedApp(connection) {
|
|
38
38
|
return {
|
|
39
39
|
id: connection.id,
|
|
40
|
+
providerAccountId: connection.profile.accountId,
|
|
40
41
|
service: connection.service,
|
|
41
42
|
status: connection.configured ? "active" : "disconnected",
|
|
42
43
|
alias: connection.connectionName,
|
|
@@ -91,7 +92,7 @@ export function serializeRuntimeFailure(input) {
|
|
|
91
92
|
/** Build the persistable HTTP response for a completed action execution. */
|
|
92
93
|
export function serializeRuntimeActionResult(input) {
|
|
93
94
|
const { actionId, executionId, auditPersisted, result } = input;
|
|
94
|
-
const meta = { executionId, actionId, auditPersisted };
|
|
95
|
+
const meta = { executionId, actionId, auditPersisted, remoteExecutionId: input.remoteExecutionId };
|
|
95
96
|
if (result.ok) {
|
|
96
97
|
return {
|
|
97
98
|
status: 200,
|
|
@@ -104,10 +105,10 @@ export function serializeRuntimeActionResult(input) {
|
|
|
104
105
|
};
|
|
105
106
|
}
|
|
106
107
|
return serializeRuntimeFailure({
|
|
107
|
-
status: mapExecutionErrorStatus(result.error?.code, result.error?.details),
|
|
108
|
+
status: input.failureStatus ?? mapExecutionErrorStatus(result.error?.code, result.error?.details),
|
|
108
109
|
errorCode: result.error?.code ?? "provider_error",
|
|
109
110
|
message: result.error?.message ?? "Action execution failed.",
|
|
110
|
-
data: result.error?.details ?? null,
|
|
111
|
+
data: input.retryAfter ? { details: { retryAfter: input.retryAfter } } : (result.error?.details ?? null),
|
|
111
112
|
meta,
|
|
112
113
|
});
|
|
113
114
|
}
|
|
@@ -128,10 +129,31 @@ export function parseRuntimeActionHttpResult(value) {
|
|
|
128
129
|
}
|
|
129
130
|
throw invalid("status and body envelope do not match");
|
|
130
131
|
}
|
|
131
|
-
/**
|
|
132
|
+
/**
|
|
133
|
+
* Write a newly serialized or replayed action response; runtime failures,
|
|
134
|
+
* including proxy failures, go through here as well. A 429 whose provider
|
|
135
|
+
* details carry `retryAfterSeconds` also answers with the `Retry-After`
|
|
136
|
+
* header, so HTTP callers pace on the provider's own hint; the body keeps it,
|
|
137
|
+
* which is what an idempotent replay re-emits the header from.
|
|
138
|
+
*/
|
|
132
139
|
export function writeRuntimeActionHttpResult(context, result) {
|
|
140
|
+
const retryAfter = optionalString(optionalRecord(optionalRecord(result.body.data)?.details)?.retryAfter);
|
|
141
|
+
if (result.status === 429 && retryAfter && (/^\d+$/.test(retryAfter) || Number.isFinite(Date.parse(retryAfter))))
|
|
142
|
+
context.header("Retry-After", retryAfter);
|
|
143
|
+
const retryAfterSeconds = readRuntimeRetryAfterSeconds(result);
|
|
144
|
+
if (retryAfterSeconds !== undefined) {
|
|
145
|
+
context.header("Retry-After", String(retryAfterSeconds));
|
|
146
|
+
}
|
|
133
147
|
return context.json(result.body, result.status);
|
|
134
148
|
}
|
|
149
|
+
function readRuntimeRetryAfterSeconds(result) {
|
|
150
|
+
if (result.status !== 429) {
|
|
151
|
+
return undefined;
|
|
152
|
+
}
|
|
153
|
+
const seconds = optionalInteger(optionalRecord(optionalRecord(result.body.data)?.details)?.retryAfterSeconds);
|
|
154
|
+
// A safe integer is what keeps String() in plain delay-seconds digits: 1e21 would print as "1e+21".
|
|
155
|
+
return seconds !== undefined && Number.isSafeInteger(seconds) && seconds >= 0 ? seconds : undefined;
|
|
156
|
+
}
|
|
135
157
|
export function mapConnectionErrorStatus(error) {
|
|
136
158
|
if (error.code === "unknown_service" || error.code === "connection_not_found") {
|
|
137
159
|
return 404;
|
|
@@ -191,6 +213,9 @@ function isRuntimeStatus(value) {
|
|
|
191
213
|
value === 409 ||
|
|
192
214
|
value === 413 ||
|
|
193
215
|
value === 429 ||
|
|
216
|
+
value === 502 ||
|
|
217
|
+
value === 503 ||
|
|
218
|
+
value === 504 ||
|
|
194
219
|
value === 500 ||
|
|
195
220
|
value === 501);
|
|
196
221
|
}
|
|
@@ -231,3 +256,9 @@ export function serializeRuntimeProviderSetup(provider, oauth) {
|
|
|
231
256
|
: undefined,
|
|
232
257
|
};
|
|
233
258
|
}
|
|
259
|
+
export function serializeRuntimeTriggerPermissions(provider) {
|
|
260
|
+
return (provider.triggerPermissions ?? []).map((permission) => ({
|
|
261
|
+
...permission,
|
|
262
|
+
requiredScopes: permission.providerPermissions,
|
|
263
|
+
}));
|
|
264
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { oauthCompletionStrings, oauthCompletionStyles, oauthCompletionLocaleScript } from "./oauth-completion-page.js";
|
|
2
|
+
/** The initial GET contains no account data and performs no authorization synchronization. */
|
|
3
|
+
export function renderSaasCompletionPage() {
|
|
4
|
+
return `<!doctype html>
|
|
5
|
+
<html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
+
<title>Complete connection</title>
|
|
7
|
+
<style>${oauthCompletionStyles}</style></head>
|
|
8
|
+
<body><main class="card" aria-live="polite">
|
|
9
|
+
<div class="header"><span id="badge" class="badge" hidden></span>
|
|
10
|
+
<h1 id="title">Completing connection</h1><p id="status" role="status">Checking your Console session…</p></div>
|
|
11
|
+
<div class="actions"><a id="login" class="button" href="/" target="_blank" rel="noopener" hidden>Open Console to sign in</a>
|
|
12
|
+
<button id="retry" class="button" type="button">Check again</button>
|
|
13
|
+
<button id="close" class="button" type="button" hidden>Close window</button>
|
|
14
|
+
<p id="note" class="close-note" hidden></p></div></main>
|
|
15
|
+
<script>
|
|
16
|
+
const STR = ${JSON.stringify(oauthCompletionStrings).replaceAll("<", "\\u003c")};
|
|
17
|
+
${oauthCompletionLocaleScript}
|
|
18
|
+
const language = pick();
|
|
19
|
+
const t = STR[language] || STR.en;
|
|
20
|
+
document.documentElement.lang = language;
|
|
21
|
+
document.title = t.checkingTitle;
|
|
22
|
+
const title = document.getElementById('title');
|
|
23
|
+
const status = document.getElementById('status');
|
|
24
|
+
const login = document.getElementById('login');
|
|
25
|
+
const close = document.getElementById('close');
|
|
26
|
+
const badge = document.getElementById('badge');
|
|
27
|
+
const note = document.getElementById('note');
|
|
28
|
+
title.textContent = t.checkingTitle;
|
|
29
|
+
status.textContent = t.checking;
|
|
30
|
+
login.textContent = t.signIn;
|
|
31
|
+
close.textContent = t.closeButton;
|
|
32
|
+
const tryClose = () => { window.close(); note.textContent = t.manualClose; };
|
|
33
|
+
close.addEventListener('click', tryClose);
|
|
34
|
+
const button = document.getElementById('retry');
|
|
35
|
+
button.textContent = t.retry;
|
|
36
|
+
const request = new URL(location.href).searchParams.get('request');
|
|
37
|
+
let timer;
|
|
38
|
+
let busy = false;
|
|
39
|
+
let terminal = false;
|
|
40
|
+
let failures = 0;
|
|
41
|
+
async function sync() {
|
|
42
|
+
if (busy || terminal) return;
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
if (!request) { status.textContent = t.missing; button.hidden = true; return; }
|
|
45
|
+
busy = true;
|
|
46
|
+
button.disabled = true;
|
|
47
|
+
try {
|
|
48
|
+
const session = await fetch('/api/auth/session', { credentials: 'same-origin', cache: 'no-store' });
|
|
49
|
+
if (!session.ok || !(await session.json()).authenticated) {
|
|
50
|
+
status.textContent = t.login; login.hidden = false;
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
login.hidden = true;
|
|
54
|
+
const response = await fetch('/api/oauth/connection-requests/' + encodeURIComponent(request) + '/sync', {
|
|
55
|
+
method: 'POST', credentials: 'same-origin', cache: 'no-store',
|
|
56
|
+
headers: { 'Content-Type': 'application/json', 'X-OpenConnector-Request': 'sync' }, body: '{}'
|
|
57
|
+
});
|
|
58
|
+
if (!response.ok) {
|
|
59
|
+
if ([401, 403, 404].includes(response.status)) { status.textContent = response.status === 401 ? t.login : response.status === 403 ? t.forbidden : t.notFound; login.hidden = response.status !== 401; return; }
|
|
60
|
+
status.textContent = t.retrying;
|
|
61
|
+
const retry = response.headers.get('Retry-After');
|
|
62
|
+
const retryMs = retry ? (/^\\d+$/.test(retry) ? Number(retry) * 1000 : Date.parse(retry) - Date.now()) : 0;
|
|
63
|
+
timer = setTimeout(sync, Math.max(2000, Math.min(30000, 2000 * 2 ** Math.min(failures++, 4)), Number.isFinite(retryMs) ? retryMs : 0));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
failures = 0;
|
|
67
|
+
const result = await response.json();
|
|
68
|
+
if (result.request.status === 'connected') {
|
|
69
|
+
terminal = true;
|
|
70
|
+
document.title = title.textContent = t.title;
|
|
71
|
+
status.textContent = t.body;
|
|
72
|
+
badge.textContent = t.badge;
|
|
73
|
+
badge.hidden = false;
|
|
74
|
+
button.hidden = true;
|
|
75
|
+
login.hidden = true;
|
|
76
|
+
close.hidden = false;
|
|
77
|
+
const message = { type: 'oauth.completed', service: result.request.service };
|
|
78
|
+
if (typeof BroadcastChannel !== 'undefined') { const channel = new BroadcastChannel('oomol-connect-oauth'); channel.postMessage(message); channel.close(); }
|
|
79
|
+
if (window.opener) window.opener.postMessage(message, location.origin);
|
|
80
|
+
if (result.returnUri) { location.assign(result.returnUri); return; }
|
|
81
|
+
note.hidden = false;
|
|
82
|
+
note.textContent = t.autoClose.replace('%N%', '2');
|
|
83
|
+
setTimeout(tryClose, 2000);
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (result.request.status === 'failed' || result.request.status === 'expired') {
|
|
87
|
+
terminal = true;
|
|
88
|
+
status.textContent = result.request.status === 'expired' ? t.notFound : t.failed;
|
|
89
|
+
button.hidden = true;
|
|
90
|
+
close.hidden = false;
|
|
91
|
+
if (result.returnUri) location.assign(result.returnUri);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
status.textContent = t.waiting;
|
|
95
|
+
timer = setTimeout(sync, 2000);
|
|
96
|
+
} catch {
|
|
97
|
+
status.textContent = t.network;
|
|
98
|
+
} finally { busy = false; button.disabled = false; }
|
|
99
|
+
}
|
|
100
|
+
button.addEventListener('click', sync);
|
|
101
|
+
sync();
|
|
102
|
+
</script></body></html>`;
|
|
103
|
+
}
|
|
@@ -7,6 +7,8 @@ import type { ITransitFileService } from "./files/transit-file-store.ts";
|
|
|
7
7
|
import type { ISecretCodec } from "./secrets/secret-codec-core.ts";
|
|
8
8
|
import type { RuntimeDatabase } from "./storage/runtime-database.ts";
|
|
9
9
|
import type { Hono } from "hono";
|
|
10
|
+
import { SaasCleanupService } from "../saas/saas-cleanup-service.ts";
|
|
11
|
+
import { TriggerMaintenance } from "../triggers/maintenance.ts";
|
|
10
12
|
export interface ConnectAppOptions {
|
|
11
13
|
catalog: CatalogStore;
|
|
12
14
|
providerLoader: IProviderLoader;
|
|
@@ -14,6 +16,7 @@ export interface ConnectAppOptions {
|
|
|
14
16
|
transitFiles: ITransitFileService;
|
|
15
17
|
uploadTransitFile?: (request: Request) => Promise<TransitFileUpload>;
|
|
16
18
|
publicOrigin: string;
|
|
19
|
+
configuredOrigin?: string;
|
|
17
20
|
secretCodec: ISecretCodec;
|
|
18
21
|
adminToken?: string;
|
|
19
22
|
runtimeToken?: string;
|
|
@@ -27,6 +30,8 @@ export interface ConnectAppOptions {
|
|
|
27
30
|
serveDocumentation?: boolean;
|
|
28
31
|
}
|
|
29
32
|
export interface ConnectApp {
|
|
33
|
+
saasCleanup: SaasCleanupService;
|
|
34
|
+
triggerMaintenance: TriggerMaintenance;
|
|
30
35
|
app: Hono;
|
|
31
36
|
runtimeAuthConfigured: boolean;
|
|
32
37
|
}
|
|
@@ -1,12 +1,34 @@
|
|
|
1
1
|
import { ConnectionService } from "../connection-service.js";
|
|
2
|
+
import { ActionPolicyService as ExecutionPolicyService } from "../core/action-policy.js";
|
|
2
3
|
import { MarketplaceService } from "../marketplace/marketplace-service.js";
|
|
3
4
|
import { OAuthClientConfigService } from "../oauth/oauth-client-config-service.js";
|
|
4
5
|
import { OAuthCredentialRefreshService } from "../oauth/oauth-credential-refresh-service.js";
|
|
5
6
|
import { OAuthFlowService } from "../oauth/oauth-flow-service.js";
|
|
7
|
+
import { SaasCleanupService } from "../saas/saas-cleanup-service.js";
|
|
8
|
+
import { SaasClient } from "../saas/saas-client.js";
|
|
9
|
+
import { SaasExecutionService } from "../saas/saas-execution-service.js";
|
|
10
|
+
import { SaasOAuthService } from "../saas/saas-oauth-service.js";
|
|
11
|
+
import { SaasProjectService } from "../saas/saas-project-service.js";
|
|
12
|
+
import { TriggerMaintenance } from "../triggers/maintenance.js";
|
|
13
|
+
import { TriggerRunner } from "../triggers/trigger-runner.js";
|
|
6
14
|
import { ActionRunner } from "./actions/action-runner.js";
|
|
7
15
|
import { ConnectServer } from "./connect-server.js";
|
|
8
16
|
import { RuntimeTokenService } from "./storage/runtime-token-service.js";
|
|
9
17
|
export async function createConnectApp(options) {
|
|
18
|
+
const saasClient = new SaasClient();
|
|
19
|
+
const saasProject = new SaasProjectService({
|
|
20
|
+
catalog: options.catalog,
|
|
21
|
+
store: options.runtimeDatabase.saasProjectStore,
|
|
22
|
+
secretCodec: options.secretCodec,
|
|
23
|
+
configuredOrigin: options.configuredOrigin,
|
|
24
|
+
client: saasClient,
|
|
25
|
+
});
|
|
26
|
+
const saasOAuth = new SaasOAuthService({
|
|
27
|
+
projects: saasProject,
|
|
28
|
+
requests: options.runtimeDatabase.connectionRequestStore,
|
|
29
|
+
client: saasClient,
|
|
30
|
+
});
|
|
31
|
+
const saas = new SaasExecutionService({ projects: saasProject, client: saasClient });
|
|
10
32
|
const marketplace = new MarketplaceService({
|
|
11
33
|
catalog: options.catalog,
|
|
12
34
|
store: options.runtimeDatabase.marketplaceStore,
|
|
@@ -36,11 +58,33 @@ export async function createConnectApp(options) {
|
|
|
36
58
|
providerLoader: options.providerLoader,
|
|
37
59
|
connections,
|
|
38
60
|
runs: options.runtimeDatabase.runLogStore,
|
|
61
|
+
saas,
|
|
39
62
|
transitFiles: options.transitFiles,
|
|
40
63
|
logger: options.logger,
|
|
41
64
|
marketplace,
|
|
42
65
|
});
|
|
66
|
+
const triggers = new TriggerRunner({
|
|
67
|
+
catalog: options.catalog,
|
|
68
|
+
providerLoader: options.providerLoader,
|
|
69
|
+
connections,
|
|
70
|
+
store: options.runtimeDatabase.triggerStore,
|
|
71
|
+
});
|
|
72
|
+
const triggerMaintenance = new TriggerMaintenance({
|
|
73
|
+
store: options.runtimeDatabase.triggerStore,
|
|
74
|
+
runner: triggers,
|
|
75
|
+
tokens: options.runtimeDatabase.runtimeTokenStore,
|
|
76
|
+
runtimePolicy: options.runtimeDatabase.runtimePolicyStore,
|
|
77
|
+
deploymentPolicy: options.actionPolicy ?? new ExecutionPolicyService(),
|
|
78
|
+
logger: options.logger,
|
|
79
|
+
});
|
|
43
80
|
return {
|
|
81
|
+
triggerMaintenance,
|
|
82
|
+
saasCleanup: new SaasCleanupService({
|
|
83
|
+
store: options.runtimeDatabase.saasProjectStore,
|
|
84
|
+
requests: options.runtimeDatabase.connectionRequestStore,
|
|
85
|
+
client: saasClient,
|
|
86
|
+
logger: options.logger,
|
|
87
|
+
}),
|
|
44
88
|
app: new ConnectServer({
|
|
45
89
|
catalog: options.catalog,
|
|
46
90
|
publicOrigin: options.publicOrigin,
|
|
@@ -55,8 +99,11 @@ export async function createConnectApp(options) {
|
|
|
55
99
|
requests: options.runtimeDatabase.connectionRequestStore,
|
|
56
100
|
secretCodec: options.secretCodec,
|
|
57
101
|
isCustomClientConfigAllowed,
|
|
102
|
+
saasOAuth,
|
|
58
103
|
}),
|
|
59
104
|
actions,
|
|
105
|
+
triggers,
|
|
106
|
+
triggerMaintenance,
|
|
60
107
|
idempotency: options.runtimeDatabase.idempotencyStore,
|
|
61
108
|
transitFiles: options.transitFiles,
|
|
62
109
|
uploadTransitFile: options.uploadTransitFile,
|
|
@@ -73,6 +120,9 @@ export async function createConnectApp(options) {
|
|
|
73
120
|
actionPolicy: options.actionPolicy,
|
|
74
121
|
logger: options.logger,
|
|
75
122
|
marketplace,
|
|
123
|
+
saas,
|
|
124
|
+
saasProject,
|
|
125
|
+
saasOAuth,
|
|
76
126
|
compressApiResponses: options.compressApiResponses,
|
|
77
127
|
serveDocumentation: options.serveDocumentation,
|
|
78
128
|
}).createApp(),
|
|
@@ -4,6 +4,11 @@ import type { ActionSearchIndexProvider } from "../core/action-search.ts";
|
|
|
4
4
|
import type { RuntimeLogger, TransitFileUpload } from "../core/types.ts";
|
|
5
5
|
import type { MarketplaceService } from "../marketplace/marketplace-service.ts";
|
|
6
6
|
import type { IProviderLoader } from "../providers/provider-loader.ts";
|
|
7
|
+
import type { SaasExecutionService } from "../saas/saas-execution-service.ts";
|
|
8
|
+
import type { SaasOAuthService } from "../saas/saas-oauth-service.ts";
|
|
9
|
+
import type { SaasProjectService } from "../saas/saas-project-service.ts";
|
|
10
|
+
import type { TriggerMaintenance } from "../triggers/maintenance.ts";
|
|
11
|
+
import type { TriggerRunner } from "../triggers/trigger-runner.ts";
|
|
7
12
|
import type { LocalAuthOptions } from "./api/auth.ts";
|
|
8
13
|
import type { ITransitFileService } from "./files/transit-file-store.ts";
|
|
9
14
|
import type { IIdempotencyStore } from "./storage/idempotency-store.ts";
|
|
@@ -33,6 +38,8 @@ export interface IConnectServerOptions {
|
|
|
33
38
|
oauthFlow: OAuthFlowService;
|
|
34
39
|
runtimeTokens: RuntimeTokenService;
|
|
35
40
|
actions: ActionRunner;
|
|
41
|
+
triggers?: TriggerRunner;
|
|
42
|
+
triggerMaintenance?: TriggerMaintenance;
|
|
36
43
|
idempotency: IIdempotencyStore;
|
|
37
44
|
transitFiles: ITransitFileService;
|
|
38
45
|
uploadTransitFile?: (request: Request) => Promise<TransitFileUpload>;
|
|
@@ -45,6 +52,9 @@ export interface IConnectServerOptions {
|
|
|
45
52
|
compressApiResponses?: boolean;
|
|
46
53
|
serveDocumentation?: boolean;
|
|
47
54
|
marketplace?: MarketplaceService;
|
|
55
|
+
saasProject?: SaasProjectService;
|
|
56
|
+
saas?: SaasExecutionService;
|
|
57
|
+
saasOAuth?: SaasOAuthService;
|
|
48
58
|
}
|
|
49
59
|
/**
|
|
50
60
|
* Local single-user HTTP server for catalog browsing, credential management,
|
|
@@ -78,6 +88,8 @@ export declare class ConnectServer {
|
|
|
78
88
|
private searchRuntimeActions;
|
|
79
89
|
private serializeSearchResults;
|
|
80
90
|
private getRuntimeAction;
|
|
91
|
+
private getRuntimeTriggerPermissions;
|
|
92
|
+
private executeRuntimeTrigger;
|
|
81
93
|
private createRuntimeActionRun;
|
|
82
94
|
private executeRuntimeAction;
|
|
83
95
|
private createRuntimeProxyRequest;
|