@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 @@
|
|
|
1
|
+
export declare const keepaDealAttributeNames: readonly ["material", "type", "manufacturer", "brand", "model", "color", "size", "unitType", "scent", "itemForm", "pattern", "style", "itemTypeKeyword", "targetAudienceKeyword", "edition", "format", "author", "binding", "languages", "brandStoreName", "brandStoreUrlName", "websiteDisplayGroup", "websiteDisplayGroupName", "salesRankDisplayGroup"];
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export const keepaDealAttributeNames = [
|
|
2
|
+
"material",
|
|
3
|
+
"type",
|
|
4
|
+
"manufacturer",
|
|
5
|
+
"brand",
|
|
6
|
+
"model",
|
|
7
|
+
"color",
|
|
8
|
+
"size",
|
|
9
|
+
"unitType",
|
|
10
|
+
"scent",
|
|
11
|
+
"itemForm",
|
|
12
|
+
"pattern",
|
|
13
|
+
"style",
|
|
14
|
+
"itemTypeKeyword",
|
|
15
|
+
"targetAudienceKeyword",
|
|
16
|
+
"edition",
|
|
17
|
+
"format",
|
|
18
|
+
"author",
|
|
19
|
+
"binding",
|
|
20
|
+
"languages",
|
|
21
|
+
"brandStoreName",
|
|
22
|
+
"brandStoreUrlName",
|
|
23
|
+
"websiteDisplayGroup",
|
|
24
|
+
"websiteDisplayGroupName",
|
|
25
|
+
"salesRankDisplayGroup",
|
|
26
|
+
];
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { compactObject, optionalRawString, optionalRecord, rawStringOrNull } from "../../core/cast.js";
|
|
2
|
-
import { createProviderTimeout, isAbortLikeError, ProviderRequestError, providerUserAgent, readProviderTextBody, requiredInputString, } from "../provider-runtime.js";
|
|
2
|
+
import { createProviderTimeout, isAbortLikeError, providerInputError, ProviderRequestError, providerUserAgent, readProviderTextBody, requiredInputString, } from "../provider-runtime.js";
|
|
3
3
|
import { keepaDealPriceTypes as dealPriceTypes, keepaHistoryTypes as historyTypes } from "./actions.js";
|
|
4
|
+
import { keepaDealAttributeNames } from "./deal-attributes.js";
|
|
4
5
|
export const keepaApiBaseUrl = "https://api.keepa.com";
|
|
5
6
|
const keepaTimeStartMinutes = 21_564_000;
|
|
6
7
|
const keepaDefaultTimeoutMs = 120_000;
|
|
@@ -211,6 +212,137 @@ export const keepaActionHandlers = {
|
|
|
211
212
|
meta: normalizeMeta(payload),
|
|
212
213
|
};
|
|
213
214
|
},
|
|
215
|
+
async search_products(input, context) {
|
|
216
|
+
const marketplace = requireMarketplace(input.marketplace);
|
|
217
|
+
const payload = await requestKeepaAction(context, {
|
|
218
|
+
path: "/search",
|
|
219
|
+
query: {
|
|
220
|
+
domain: marketplaceDomainIdByCode[marketplace],
|
|
221
|
+
type: "product",
|
|
222
|
+
term: requiredInputString(input.term, "term"),
|
|
223
|
+
...(input.asinsOnly === true ? { "asins-only": 1 } : {}),
|
|
224
|
+
...buildStatsQuery(input),
|
|
225
|
+
...(typeof input.updateHours === "number" ? { update: input.updateHours } : {}),
|
|
226
|
+
...(input.includeHistory === false ? { history: 0 } : {}),
|
|
227
|
+
...(input.includeRating === true ? { rating: 1 } : {}),
|
|
228
|
+
},
|
|
229
|
+
});
|
|
230
|
+
const products = readObjectArray(payload.products).map(normalizeProductSnapshot);
|
|
231
|
+
return {
|
|
232
|
+
marketplace,
|
|
233
|
+
asins: input.asinsOnly === true ? readStringArray(payload.asinList) : products.map((product) => product.asin),
|
|
234
|
+
products,
|
|
235
|
+
meta: normalizeMeta(payload),
|
|
236
|
+
};
|
|
237
|
+
},
|
|
238
|
+
async lookup_categories(input, context) {
|
|
239
|
+
const marketplace = requireMarketplace(input.marketplace);
|
|
240
|
+
const categoryIds = readIntegerArray(input.categoryIds);
|
|
241
|
+
if (categoryIds.includes(0) && categoryIds.length !== 1) {
|
|
242
|
+
throw providerInputError("root category lookup must use categoryIds [0] alone");
|
|
243
|
+
}
|
|
244
|
+
const payload = await requestKeepaAction(context, {
|
|
245
|
+
path: "/category",
|
|
246
|
+
query: {
|
|
247
|
+
domain: marketplaceDomainIdByCode[marketplace],
|
|
248
|
+
category: categoryIds.join(","),
|
|
249
|
+
parents: input.includeParents === true ? 1 : 0,
|
|
250
|
+
},
|
|
251
|
+
});
|
|
252
|
+
return {
|
|
253
|
+
marketplace,
|
|
254
|
+
categories: objectMapValues(payload.categories),
|
|
255
|
+
categoryParents: objectMapValues(payload.categoryParents),
|
|
256
|
+
meta: normalizeMeta(payload),
|
|
257
|
+
};
|
|
258
|
+
},
|
|
259
|
+
async find_sellers(input, context) {
|
|
260
|
+
const marketplace = requireMarketplace(input.marketplace);
|
|
261
|
+
const filters = optionalRecord(input.filters);
|
|
262
|
+
if (!filters)
|
|
263
|
+
throw providerInputError("filters must be an object");
|
|
264
|
+
if (!Object.keys(filters).some((key) => !["page", "perPage", "sort", "minMatch"].includes(key))) {
|
|
265
|
+
throw providerInputError("Seller Finder requires at least one business filter");
|
|
266
|
+
}
|
|
267
|
+
const page = typeof filters.page === "number" ? filters.page : 0;
|
|
268
|
+
const perPage = filters.perPage === 0 ? 100 : typeof filters.perPage === "number" ? filters.perPage : 50;
|
|
269
|
+
if (page > 0 && page * perPage >= 10_000) {
|
|
270
|
+
throw providerInputError("Seller Finder page starts beyond the 10000-result limit");
|
|
271
|
+
}
|
|
272
|
+
const payload = await requestKeepaAction(context, {
|
|
273
|
+
path: "/sellerquery",
|
|
274
|
+
query: { domain: marketplaceDomainIdByCode[marketplace] },
|
|
275
|
+
body: filters,
|
|
276
|
+
});
|
|
277
|
+
return {
|
|
278
|
+
marketplace,
|
|
279
|
+
sellerIds: readStringArray(payload.sellerIdList),
|
|
280
|
+
totalResults: asNullableInteger(payload.totalResults),
|
|
281
|
+
meta: normalizeMeta(payload),
|
|
282
|
+
};
|
|
283
|
+
},
|
|
284
|
+
async get_most_rated_sellers(input, context) {
|
|
285
|
+
const marketplace = requireMarketplace(input.marketplace);
|
|
286
|
+
const payload = await requestKeepaAction(context, {
|
|
287
|
+
path: "/topseller",
|
|
288
|
+
query: { domain: marketplaceDomainIdByCode[marketplace] },
|
|
289
|
+
});
|
|
290
|
+
const window = windowList(readStringArray(payload.sellerIdList), input);
|
|
291
|
+
return { marketplace, sellerIds: window.items, ...window.info, meta: normalizeMeta(payload) };
|
|
292
|
+
},
|
|
293
|
+
async get_seller_storefront(input, context) {
|
|
294
|
+
const marketplace = requireMarketplace(input.marketplace);
|
|
295
|
+
const sellerId = requiredInputString(input.sellerId, "sellerId");
|
|
296
|
+
const payload = await requestKeepaAction(context, {
|
|
297
|
+
path: "/seller",
|
|
298
|
+
query: { domain: marketplaceDomainIdByCode[marketplace], seller: sellerId, storefront: 1 },
|
|
299
|
+
});
|
|
300
|
+
const seller = optionalRecord(optionalRecord(payload.sellers)?.[sellerId]);
|
|
301
|
+
const asins = readStringArray(seller?.asinList);
|
|
302
|
+
const lastSeen = Array.isArray(seller?.asinListLastSeen) ? seller.asinListLastSeen : [];
|
|
303
|
+
const window = windowList(asins.map((asin, index) => ({ asin, lastSeen: asNullableInteger(lastSeen[index]) })), input);
|
|
304
|
+
const { asinList: _asinList, asinListLastSeen: _asinListLastSeen, ...sellerWithoutList } = seller ?? {};
|
|
305
|
+
return {
|
|
306
|
+
marketplace,
|
|
307
|
+
seller: seller ? normalizeSeller(sellerId, sellerWithoutList) : null,
|
|
308
|
+
items: window.items,
|
|
309
|
+
...window.info,
|
|
310
|
+
meta: normalizeMeta(payload),
|
|
311
|
+
};
|
|
312
|
+
},
|
|
313
|
+
async get_lightning_deal(input, context) {
|
|
314
|
+
const marketplace = requireMarketplace(input.marketplace);
|
|
315
|
+
const payload = await requestKeepaAction(context, {
|
|
316
|
+
path: "/lightningdeal",
|
|
317
|
+
query: {
|
|
318
|
+
domain: marketplaceDomainIdByCode[marketplace],
|
|
319
|
+
asin: requiredInputString(input.asin, "asin"),
|
|
320
|
+
...(typeof input.state === "string" ? { state: input.state } : {}),
|
|
321
|
+
},
|
|
322
|
+
});
|
|
323
|
+
return {
|
|
324
|
+
marketplace,
|
|
325
|
+
lightningDeals: readObjectArray(payload.lightningDeals),
|
|
326
|
+
meta: normalizeMeta(payload),
|
|
327
|
+
};
|
|
328
|
+
},
|
|
329
|
+
async list_lightning_deals(input, context) {
|
|
330
|
+
const marketplace = requireMarketplace(input.marketplace);
|
|
331
|
+
const payload = await requestKeepaAction(context, {
|
|
332
|
+
path: "/lightningdeal",
|
|
333
|
+
query: {
|
|
334
|
+
domain: marketplaceDomainIdByCode[marketplace],
|
|
335
|
+
...(typeof input.state === "string" ? { state: input.state } : {}),
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
const window = windowList(readObjectArray(payload.lightningDeals), input);
|
|
339
|
+
return {
|
|
340
|
+
marketplace,
|
|
341
|
+
lightningDeals: window.items,
|
|
342
|
+
...window.info,
|
|
343
|
+
meta: normalizeMeta(payload),
|
|
344
|
+
};
|
|
345
|
+
},
|
|
214
346
|
};
|
|
215
347
|
export async function validateKeepaCredential(apiKey, fetcher, signal) {
|
|
216
348
|
const payload = await requestKeepa({
|
|
@@ -232,39 +364,80 @@ export async function validateKeepaCredential(apiKey, fetcher, signal) {
|
|
|
232
364
|
},
|
|
233
365
|
};
|
|
234
366
|
}
|
|
367
|
+
function requestKeepaAction(context, input) {
|
|
368
|
+
return requestKeepa({ ...input, context, phase: "execute" });
|
|
369
|
+
}
|
|
235
370
|
function buildProductQuery(input, marketplace, history) {
|
|
236
|
-
const asins = readAsinArray(input.asins);
|
|
237
|
-
|
|
371
|
+
const asins = input.asins === undefined ? [] : readAsinArray(input.asins);
|
|
372
|
+
const codes = readStringArray(input.codes).map((code) => code.trim());
|
|
373
|
+
if ((asins.length === 0) === (codes.length === 0)) {
|
|
374
|
+
throw providerInputError("provide either asins or codes");
|
|
375
|
+
}
|
|
376
|
+
const itemCount = asins.length || codes.length;
|
|
377
|
+
if (typeof input.offers === "number" && itemCount > 20) {
|
|
378
|
+
throw providerInputError("offers can only be requested for up to 20 ASINs or product codes");
|
|
379
|
+
}
|
|
380
|
+
if (input.codeLimit !== undefined && codes.length === 0) {
|
|
381
|
+
throw providerInputError("codeLimit requires codes");
|
|
382
|
+
}
|
|
383
|
+
if (input.onlyLiveOffers === true && typeof input.offers !== "number") {
|
|
384
|
+
throw providerInputError("onlyLiveOffers requires offers");
|
|
385
|
+
}
|
|
386
|
+
if (input.includeStock === true && typeof input.offers !== "number") {
|
|
387
|
+
throw providerInputError("includeStock requires offers");
|
|
388
|
+
}
|
|
238
389
|
return {
|
|
239
|
-
asin: asins.join(","),
|
|
390
|
+
...(asins.length > 0 ? { asin: asins.join(",") } : { code: codes.join(",") }),
|
|
240
391
|
domain: marketplaceDomainIdByCode[marketplace],
|
|
241
392
|
history: history ? 1 : 0,
|
|
242
|
-
...(
|
|
393
|
+
...buildStatsQuery(input),
|
|
394
|
+
...(typeof input.codeLimit === "number" ? { "code-limit": input.codeLimit } : {}),
|
|
243
395
|
...(typeof input.updateHours === "number" ? { update: input.updateHours } : {}),
|
|
244
396
|
...(typeof input.offers === "number" ? { offers: input.offers } : {}),
|
|
245
397
|
...(input.onlyLiveOffers === true ? { "only-live-offers": 1 } : {}),
|
|
246
398
|
...(input.includeBuyBox === true ? { buybox: 1 } : {}),
|
|
247
399
|
...(input.includeRating === true ? { rating: 1 } : {}),
|
|
400
|
+
...(input.includeVideos === true ? { videos: 1 } : {}),
|
|
401
|
+
...(input.includeAPlus === true ? { aplus: 1 } : {}),
|
|
402
|
+
...(input.includeStock === true ? { stock: 1 } : {}),
|
|
403
|
+
...(input.includeHistoricalVariations === true ? { "historical-variations": 1 } : {}),
|
|
248
404
|
};
|
|
249
405
|
}
|
|
406
|
+
function buildStatsQuery(input) {
|
|
407
|
+
const range = optionalRecord(input.statsRange);
|
|
408
|
+
if (input.statsDays !== undefined && range) {
|
|
409
|
+
throw providerInputError("statsDays and statsRange are mutually exclusive");
|
|
410
|
+
}
|
|
411
|
+
if (range) {
|
|
412
|
+
const start = typeof range.start === "number" ? range.start : Date.parse(String(range.start));
|
|
413
|
+
const end = typeof range.end === "number" ? range.end : Date.parse(String(range.end));
|
|
414
|
+
if (typeof range.start !== typeof range.end || start >= end) {
|
|
415
|
+
throw providerInputError("statsRange requires matching types and start before end");
|
|
416
|
+
}
|
|
417
|
+
return { stats: `${range.start},${range.end}` };
|
|
418
|
+
}
|
|
419
|
+
return typeof input.statsDays === "number" ? { stats: input.statsDays } : {};
|
|
420
|
+
}
|
|
250
421
|
function buildDealRequest(input, marketplace, priceType) {
|
|
251
422
|
const metricDefinition = keepaMetricByType.get(priceType);
|
|
252
423
|
if (!metricDefinition) {
|
|
253
|
-
throw
|
|
424
|
+
throw providerInputError(`unsupported deal price type: ${priceType}`);
|
|
254
425
|
}
|
|
255
426
|
const sortName = typeof input.sortBy === "string" && input.sortBy in dealSortTypeByName
|
|
256
427
|
? input.sortBy
|
|
257
428
|
: "newest";
|
|
258
429
|
const sortType = dealSortTypeByName[sortName];
|
|
259
430
|
if (sortType === 1 && input.invertSort === true) {
|
|
260
|
-
throw
|
|
431
|
+
throw providerInputError("newest deal sorting cannot be inverted");
|
|
261
432
|
}
|
|
262
433
|
const ranges = {
|
|
263
434
|
currentRange: readOptionalIntegerArray(input.currentRange),
|
|
264
435
|
deltaRange: readOptionalIntegerArray(input.deltaRange),
|
|
265
436
|
deltaPercentRange: readOptionalIntegerArray(input.deltaPercentRange),
|
|
437
|
+
deltaLastRange: readOptionalIntegerArray(input.deltaLastRange),
|
|
266
438
|
salesRankRange: readOptionalIntegerArray(input.salesRankRange),
|
|
267
439
|
};
|
|
440
|
+
const attributes = Object.fromEntries(keepaDealAttributeNames.map((name) => [name, readOptionalStringArray(input[name])]));
|
|
268
441
|
return compactObject({
|
|
269
442
|
page: typeof input.page === "number" ? input.page : 0,
|
|
270
443
|
domainId: marketplaceDomainIdByCode[marketplace],
|
|
@@ -274,13 +447,17 @@ function buildDealRequest(input, marketplace, priceType) {
|
|
|
274
447
|
isLowest: input.isLowestEver === true,
|
|
275
448
|
isLowest90: input.isLowest90Days === true,
|
|
276
449
|
isLowestOffer: input.isLowestOffer === true,
|
|
450
|
+
isHighest: input.isHighest === true,
|
|
277
451
|
isBackInStock: input.isBackInStock === true,
|
|
278
452
|
isOutOfStock: input.isOutOfStock === true,
|
|
279
453
|
hasReviews: input.hasReviews === true,
|
|
280
454
|
isPrimeExclusive: input.isPrimeExclusive === true,
|
|
281
455
|
mustHaveAmazonOffer: input.mustHaveAmazonOffer === true,
|
|
282
456
|
mustNotHaveAmazonOffer: input.mustNotHaveAmazonOffer === true,
|
|
283
|
-
filterErotic:
|
|
457
|
+
filterErotic: typeof input.filterErotic === "boolean" ? input.filterErotic : undefined,
|
|
458
|
+
singleVariation: input.singleVariation === true,
|
|
459
|
+
isRisers: input.isRisers === true,
|
|
460
|
+
warehouseConditions: readOptionalIntegerArray(input.warehouseConditions),
|
|
284
461
|
isRangeEnabled: Object.values(ranges).some((value) => value !== undefined),
|
|
285
462
|
isFilterEnabled: [
|
|
286
463
|
input.isLowestEver,
|
|
@@ -292,16 +469,38 @@ function buildDealRequest(input, marketplace, priceType) {
|
|
|
292
469
|
input.isPrimeExclusive,
|
|
293
470
|
input.mustHaveAmazonOffer,
|
|
294
471
|
input.mustNotHaveAmazonOffer,
|
|
472
|
+
input.isHighest,
|
|
473
|
+
input.singleVariation,
|
|
474
|
+
input.isRisers,
|
|
475
|
+
input.warehouseConditions,
|
|
295
476
|
input.minimumRating,
|
|
296
477
|
input.titleSearch,
|
|
297
|
-
|
|
478
|
+
...Object.values(attributes),
|
|
479
|
+
].some((value) => value !== undefined && value !== false) || input.filterErotic !== undefined,
|
|
298
480
|
includeCategories: readOptionalIntegerArray(input.includeCategories),
|
|
299
481
|
excludeCategories: readOptionalIntegerArray(input.excludeCategories),
|
|
300
|
-
titleSearch:
|
|
482
|
+
titleSearch: typeof input.titleSearch === "string" ? input.titleSearch : undefined,
|
|
301
483
|
minRating: typeof input.minimumRating === "number" ? input.minimumRating : undefined,
|
|
302
484
|
...ranges,
|
|
485
|
+
...attributes,
|
|
303
486
|
});
|
|
304
487
|
}
|
|
488
|
+
function windowList(items, input) {
|
|
489
|
+
const offset = typeof input.offset === "number" ? input.offset : 0;
|
|
490
|
+
const limit = input.limit === null ? null : typeof input.limit === "number" ? input.limit : 100;
|
|
491
|
+
const result = items.slice(offset, limit === null ? undefined : offset + limit);
|
|
492
|
+
const next = offset + result.length;
|
|
493
|
+
const hasMore = next < items.length;
|
|
494
|
+
return {
|
|
495
|
+
items: result,
|
|
496
|
+
info: {
|
|
497
|
+
totalAvailable: items.length,
|
|
498
|
+
returnedCount: result.length,
|
|
499
|
+
hasMore,
|
|
500
|
+
nextOffset: hasMore ? next : null,
|
|
501
|
+
},
|
|
502
|
+
};
|
|
503
|
+
}
|
|
305
504
|
async function requestKeepa(input) {
|
|
306
505
|
const url = new URL(input.path, keepaApiBaseUrl);
|
|
307
506
|
url.searchParams.set("key", input.context.apiKey);
|
|
@@ -617,14 +816,6 @@ function validateCategorySearchTerm(term) {
|
|
|
617
816
|
throw new ProviderRequestError(400, "each category search keyword must contain at least three characters");
|
|
618
817
|
}
|
|
619
818
|
}
|
|
620
|
-
function assertProductRequestRules(input, asins) {
|
|
621
|
-
if (typeof input.offers === "number" && asins.length > 20) {
|
|
622
|
-
throw new ProviderRequestError(400, "offers can only be requested for up to 20 ASINs");
|
|
623
|
-
}
|
|
624
|
-
if (input.onlyLiveOffers === true && typeof input.offers !== "number") {
|
|
625
|
-
throw new ProviderRequestError(400, "onlyLiveOffers requires offers");
|
|
626
|
-
}
|
|
627
|
-
}
|
|
628
819
|
function requireInputObject(value, fieldName) {
|
|
629
820
|
const object = optionalRecord(value);
|
|
630
821
|
if (!object) {
|
|
@@ -683,6 +874,9 @@ function readIntegerArray(value) {
|
|
|
683
874
|
function readOptionalIntegerArray(value) {
|
|
684
875
|
return Array.isArray(value) ? readIntegerArray(value) : undefined;
|
|
685
876
|
}
|
|
877
|
+
function readOptionalStringArray(value) {
|
|
878
|
+
return Array.isArray(value) ? readStringArray(value) : undefined;
|
|
879
|
+
}
|
|
686
880
|
function objectMapValues(value) {
|
|
687
881
|
const object = optionalRecord(value);
|
|
688
882
|
if (!object) {
|
|
@@ -26,7 +26,7 @@ export const proxy = defineProviderProxy({
|
|
|
26
26
|
allowedEndpoint: isBusinessEndpoint,
|
|
27
27
|
allowPrivateNetwork: isPrivateNetworkAccessAllowed,
|
|
28
28
|
sensitiveHeaders: ["kdservice-sessionid"],
|
|
29
|
-
redirect: "
|
|
29
|
+
redirect: "manual",
|
|
30
30
|
async customizeRequest({ context, fetcher, headers }) {
|
|
31
31
|
const values = (await requireCustomCredential(context, service)).values;
|
|
32
32
|
const kingdee = readCredential(values);
|
|
@@ -57,7 +57,7 @@ export async function login(credential, fetcher, parentSignal) {
|
|
|
57
57
|
return runProviderRequest({ label: "Kingdee login", signal: parentSignal }, async (signal) => {
|
|
58
58
|
const response = await fetcher(new URL("Kingdee.BOS.WebApi.ServicesStub.AuthService.LoginByAppSecret.common.kdsvc", credential.baseUrl), {
|
|
59
59
|
method: "POST",
|
|
60
|
-
redirect: "
|
|
60
|
+
redirect: "manual",
|
|
61
61
|
signal,
|
|
62
62
|
headers: { "content-type": "application/json", accept: "application/json" },
|
|
63
63
|
body: JSON.stringify({
|
|
@@ -111,7 +111,7 @@ async function execute(action, input, context) {
|
|
|
111
111
|
const response = await context.fetcher(new URL(`Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.${kingdeeMethods[action]}.common.kdsvc`, context.credential.baseUrl), {
|
|
112
112
|
method: "POST",
|
|
113
113
|
signal,
|
|
114
|
-
redirect: "
|
|
114
|
+
redirect: "manual",
|
|
115
115
|
headers: { "content-type": "application/json", "kdservice-sessionid": sessionId },
|
|
116
116
|
body: JSON.stringify(body),
|
|
117
117
|
});
|
|
@@ -150,7 +150,7 @@ function withKuaidi100Client(context, phase, run) {
|
|
|
150
150
|
transport: "streamable_http",
|
|
151
151
|
fetcher: context.fetcher,
|
|
152
152
|
headers: { responseFormat: "json", "user-agent": providerUserAgent },
|
|
153
|
-
redirect: "
|
|
153
|
+
redirect: "manual",
|
|
154
154
|
signal: context.signal,
|
|
155
155
|
mapError: (error) => mapKuaidi100McpError(error, phase),
|
|
156
156
|
}, run);
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
|
|
2
|
+
import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
|
|
3
|
+
import type { PollDefinition } from "../../triggers/common/poll.ts";
|
|
2
4
|
import type { ProviderActionHandlers } from "../provider-runtime.ts";
|
|
3
5
|
interface LinearActionContext {
|
|
4
6
|
authorization: string;
|
|
@@ -10,4 +12,5 @@ export declare const executors: ProviderExecutors;
|
|
|
10
12
|
export declare const proxy: ProviderProxyExecutor;
|
|
11
13
|
export declare const credentialValidators: CredentialValidators;
|
|
12
14
|
export declare function fetchLinearViewer(authorization: string, fetcher: typeof fetch): Promise<Record<string, unknown>>;
|
|
15
|
+
export declare const triggers: readonly (IntegrationDefinition | PollDefinition)[];
|
|
13
16
|
export {};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { compactObject, optionalBoolean } from "../../core/cast.js";
|
|
2
|
-
import { createProviderFetch, createProviderProxyUrl, defineProviderExecutors, normalizeProviderProxyHeaders, ProviderRequestError, providerUserAgent, readProviderProxyErrorMessage, readProviderProxyResponse, toProviderProxyError, } from "../provider-runtime.js";
|
|
2
|
+
import { createProviderFetch, createProviderProxyUrl, defineProviderExecutors, normalizeProviderProxyHeaders, ProviderRequestError, providerUserAgent, readProviderProxyErrorMessage, readProviderProxyResponse, toProviderProxyError, withRetryAfterSeconds, } from "../provider-runtime.js";
|
|
3
|
+
import { linearIssueChanged } from "./trigger-on-issue-changed.js";
|
|
3
4
|
const linearApiBaseUrl = "https://api.linear.app";
|
|
4
5
|
const linearGraphqlUrl = "https://api.linear.app/graphql";
|
|
5
6
|
const linearFetch = createProviderFetch({ skipDnsValidation: true });
|
|
@@ -697,8 +698,8 @@ export const linearActionHandlers = {
|
|
|
697
698
|
async list_linear_issues(input, context) {
|
|
698
699
|
const assigneeId = await resolveAssigneeFilterId(context, getOptionalString(input.assignee_id));
|
|
699
700
|
const payload = await linearGraphqlOperation(context, `
|
|
700
|
-
query ListLinearIssues($after: String, $first: Int, $filter: IssueFilter) {
|
|
701
|
-
issues(after: $after, first: $first, includeArchived:
|
|
701
|
+
query ListLinearIssues($after: String, $first: Int, $filter: IssueFilter, $includeArchived: Boolean, $orderBy: PaginationOrderBy) {
|
|
702
|
+
issues(after: $after, first: $first, includeArchived: $includeArchived, filter: $filter, orderBy: $orderBy) {
|
|
702
703
|
nodes {
|
|
703
704
|
${issueFields}
|
|
704
705
|
}
|
|
@@ -710,7 +711,9 @@ export const linearActionHandlers = {
|
|
|
710
711
|
`, {
|
|
711
712
|
after: getOptionalString(input.after),
|
|
712
713
|
first: getOptionalNumber(input.first),
|
|
713
|
-
filter: buildIssuesFilter(getOptionalString(input.project_id), assigneeId),
|
|
714
|
+
filter: buildIssuesFilter(getOptionalString(input.project_id), assigneeId, getOptionalString(input.updated_after)),
|
|
715
|
+
includeArchived: optionalBoolean(input.include_archived) ?? false,
|
|
716
|
+
orderBy: getOptionalString(input.order_by),
|
|
714
717
|
});
|
|
715
718
|
return {
|
|
716
719
|
issues: (payload.issues?.nodes ?? []).map(mapIssueSummary),
|
|
@@ -1051,7 +1054,7 @@ export const proxy = async (input, context) => {
|
|
|
1051
1054
|
const response = await linearFetch(url, init);
|
|
1052
1055
|
if (!response.ok) {
|
|
1053
1056
|
const text = await readProviderProxyErrorMessage(response, "");
|
|
1054
|
-
throw new ProviderRequestError(response.status, text || `linear request failed with HTTP ${response.status}
|
|
1057
|
+
throw new ProviderRequestError(response.status, text || `linear request failed with HTTP ${response.status}`, withRetryAfterSeconds(response));
|
|
1055
1058
|
}
|
|
1056
1059
|
return { ok: true, response: await readProviderProxyResponse(response) };
|
|
1057
1060
|
}
|
|
@@ -1117,7 +1120,7 @@ async function linearGraphqlRequest(authorization, fetcher, query, variables) {
|
|
|
1117
1120
|
});
|
|
1118
1121
|
const body = await readJson(response);
|
|
1119
1122
|
if (!response.ok) {
|
|
1120
|
-
throwLinearHttpError(response.status, body);
|
|
1123
|
+
throwLinearHttpError(response.status, body, withRetryAfterSeconds(response));
|
|
1121
1124
|
}
|
|
1122
1125
|
return body;
|
|
1123
1126
|
}
|
|
@@ -1454,10 +1457,11 @@ async function resolveAssigneeFilterId(context, assigneeId) {
|
|
|
1454
1457
|
const viewer = await fetchLinearViewer(context.authorization, context.fetcher);
|
|
1455
1458
|
return String(viewer.id);
|
|
1456
1459
|
}
|
|
1457
|
-
function buildIssuesFilter(projectId, assigneeId) {
|
|
1460
|
+
function buildIssuesFilter(projectId, assigneeId, updatedAfter) {
|
|
1458
1461
|
const filter = compactObject({
|
|
1459
1462
|
project: projectId ? { id: { eq: projectId } } : undefined,
|
|
1460
1463
|
assignee: assigneeId ? { id: { eq: assigneeId } } : undefined,
|
|
1464
|
+
updatedAt: updatedAfter ? { gte: updatedAfter } : undefined,
|
|
1461
1465
|
});
|
|
1462
1466
|
return Object.keys(filter).length > 0 ? filter : undefined;
|
|
1463
1467
|
}
|
|
@@ -1800,7 +1804,7 @@ async function readJson(response) {
|
|
|
1800
1804
|
};
|
|
1801
1805
|
}
|
|
1802
1806
|
}
|
|
1803
|
-
function throwLinearHttpError(status, body) {
|
|
1807
|
+
function throwLinearHttpError(status, body, details) {
|
|
1804
1808
|
const message = extractErrorMessage(body);
|
|
1805
1809
|
if (status === 400) {
|
|
1806
1810
|
throw new ProviderRequestError(400, message);
|
|
@@ -1809,7 +1813,7 @@ function throwLinearHttpError(status, body) {
|
|
|
1809
1813
|
throw new ProviderRequestError(401, message);
|
|
1810
1814
|
}
|
|
1811
1815
|
if (status === 429) {
|
|
1812
|
-
throw new ProviderRequestError(429, message);
|
|
1816
|
+
throw new ProviderRequestError(429, message, details);
|
|
1813
1817
|
}
|
|
1814
1818
|
throw new ProviderRequestError(502, message, status >= 500 ? 500 : status);
|
|
1815
1819
|
}
|
|
@@ -1901,3 +1905,4 @@ function asOptionalObject(value) {
|
|
|
1901
1905
|
}
|
|
1902
1906
|
return value;
|
|
1903
1907
|
}
|
|
1908
|
+
export const triggers = [linearIssueChanged];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { jsonSchema as s } from "../../core/json-schema.js";
|
|
2
|
+
export const uuidPattern = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$";
|
|
3
|
+
const issueSchema = s.object({
|
|
4
|
+
id: s.string(),
|
|
5
|
+
identifier: s.string(),
|
|
6
|
+
title: s.string(),
|
|
7
|
+
url: s.string(),
|
|
8
|
+
teamId: s.string(),
|
|
9
|
+
createdAt: s.string(),
|
|
10
|
+
updatedAt: s.string(),
|
|
11
|
+
state: s.object({ id: s.string(), name: s.string(), type: s.string() }, { additionalProperties: false, required: ["id", "name", "type"] }),
|
|
12
|
+
}, {
|
|
13
|
+
additionalProperties: false,
|
|
14
|
+
required: ["id", "identifier", "title", "url", "teamId", "createdAt", "updatedAt", "state"],
|
|
15
|
+
});
|
|
16
|
+
export const snapshot = {
|
|
17
|
+
configInputs: [
|
|
18
|
+
{
|
|
19
|
+
handle: "teamId",
|
|
20
|
+
jsonSchema: { ...s.string({ pattern: uuidPattern }), title: "Team ID" },
|
|
21
|
+
nullable: false,
|
|
22
|
+
description: "Linear Team UUID. Use Copy model UUID in Linear to find it.",
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
handle: "stateIds",
|
|
26
|
+
jsonSchema: {
|
|
27
|
+
...s.array(s.string({ pattern: uuidPattern }), { uniqueItems: true, maxItems: 50 }),
|
|
28
|
+
title: "Issue statuses",
|
|
29
|
+
},
|
|
30
|
+
nullable: false,
|
|
31
|
+
value: [],
|
|
32
|
+
description: "Choose statuses from the selected Team. Empty means all statuses. Matches the current status, not every transition into it.",
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
definitionVersion: 2,
|
|
36
|
+
description: "Watches new and updated issues in a Linear team with periodic checks. Starts from now without running existing issues. Reports observed current states, not deletions or every intermediate status change.",
|
|
37
|
+
displayName: "Issue Created or Updated",
|
|
38
|
+
key: "linear.on_issue_changed",
|
|
39
|
+
name: "on_issue_changed",
|
|
40
|
+
outputs: [{ handle: "events", jsonSchema: s.array(issueSchema), nullable: false }],
|
|
41
|
+
provider: "linear",
|
|
42
|
+
type: "poll",
|
|
43
|
+
};
|