@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
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { s } from "../../core/json-schema.js";
|
|
2
2
|
import { defineProviderAction } from "../../core/provider-definition.js";
|
|
3
|
+
import { keepaDealAttributeNames } from "./deal-attributes.js";
|
|
3
4
|
const service = "keepa";
|
|
4
5
|
export const keepaMarketplaces = ["US", "GB", "DE", "FR", "JP", "CA", "IT", "ES", "IN", "MX", "BR"];
|
|
6
|
+
const keepaStandardMarketplaces = keepaMarketplaces.filter((marketplace) => marketplace !== "BR");
|
|
5
7
|
export const keepaHistoryTypes = [
|
|
6
8
|
"AMAZON",
|
|
7
9
|
"NEW",
|
|
@@ -51,29 +53,55 @@ export const keepaDealPriceTypes = [
|
|
|
51
53
|
"LIGHTNING_DEAL",
|
|
52
54
|
"WAREHOUSE",
|
|
53
55
|
"NEW_FBA",
|
|
56
|
+
"BUY_BOX_SHIPPING",
|
|
54
57
|
"USED_NEW_SHIPPING",
|
|
55
58
|
"USED_VERY_GOOD_SHIPPING",
|
|
56
59
|
"USED_GOOD_SHIPPING",
|
|
57
60
|
"USED_ACCEPTABLE_SHIPPING",
|
|
58
|
-
"COLLECTIBLE_NEW_SHIPPING",
|
|
59
|
-
"COLLECTIBLE_VERY_GOOD_SHIPPING",
|
|
60
|
-
"COLLECTIBLE_GOOD_SHIPPING",
|
|
61
|
-
"COLLECTIBLE_ACCEPTABLE_SHIPPING",
|
|
62
61
|
"REFURBISHED_SHIPPING",
|
|
63
62
|
"BUY_BOX_USED_SHIPPING",
|
|
64
63
|
"PRIME_EXCL",
|
|
65
64
|
];
|
|
66
65
|
const marketplaceSchema = s.stringEnum("Amazon marketplace code using Keepa's official AmazonLocale names.", keepaMarketplaces);
|
|
67
|
-
const
|
|
68
|
-
|
|
66
|
+
const standardMarketplaceSchema = s.stringEnum("Amazon marketplace supported by this Keepa endpoint (Brazil is unavailable).", keepaStandardMarketplaces);
|
|
67
|
+
const asinSchema = s.string("A 10-character Amazon ASIN.", {
|
|
68
|
+
minLength: 10,
|
|
69
|
+
maxLength: 10,
|
|
70
|
+
pattern: "^[A-Za-z0-9]{10}$",
|
|
69
71
|
});
|
|
70
72
|
const asinsSchema = s.array("Amazon ASINs to request.", asinSchema, {
|
|
71
73
|
minItems: 1,
|
|
72
74
|
maxItems: 100,
|
|
73
75
|
});
|
|
76
|
+
const codesSchema = s.array("UPC, EAN, GTIN, or ISBN-13 codes; keep leading zeroes.", s.string("One numeric product code, kept as a string.", { pattern: "^[0-9]{8,14}$" }), { minItems: 1, maxItems: 100 });
|
|
77
|
+
const statsRangeSchema = s.requiredObject("UTC statistics interval.", {
|
|
78
|
+
start: s.anyOf("Interval start, as ISO 8601 UTC text or Unix milliseconds.", [
|
|
79
|
+
s.dateTime("ISO 8601 UTC start time."),
|
|
80
|
+
s.nonNegativeInteger("Unix milliseconds at interval start."),
|
|
81
|
+
]),
|
|
82
|
+
end: s.anyOf("Interval end, as ISO 8601 UTC text or Unix milliseconds.", [
|
|
83
|
+
s.dateTime("ISO 8601 UTC end time."),
|
|
84
|
+
s.nonNegativeInteger("Unix milliseconds at interval end."),
|
|
85
|
+
]),
|
|
86
|
+
});
|
|
87
|
+
const windowInputFields = {
|
|
88
|
+
offset: s.nonNegativeInteger("Zero-based offset into this response's full upstream list."),
|
|
89
|
+
limit: s.nullable(s.positiveInteger("Maximum entries returned; null returns all remaining entries.")),
|
|
90
|
+
};
|
|
91
|
+
const windowOutputFields = {
|
|
92
|
+
totalAvailable: s.nonNegativeInteger("Number of entries in this upstream response."),
|
|
93
|
+
returnedCount: s.nonNegativeInteger("Number of entries in this response window."),
|
|
94
|
+
hasMore: s.boolean("Whether this upstream response contains more entries after the window."),
|
|
95
|
+
nextOffset: s.nullable(s.nonNegativeInteger("Next local offset, when more entries exist.")),
|
|
96
|
+
};
|
|
74
97
|
const productRequestOptionalFields = {
|
|
98
|
+
codes: codesSchema,
|
|
99
|
+
codeLimit: s.positiveInteger("Maximum products returned for each product code."),
|
|
75
100
|
statsDays: s.positiveInteger("Number of recent days used for Keepa summary statistics at no additional token cost."),
|
|
76
|
-
|
|
101
|
+
statsRange: statsRangeSchema,
|
|
102
|
+
updateHours: s.integer("Refresh when older than these hours; zero forces refresh and -1 disables refresh.", {
|
|
103
|
+
minimum: -1,
|
|
104
|
+
}),
|
|
77
105
|
offers: s.integer("Number of marketplace offers to include; values from 20 through 100 may increase token cost and limit the request to 20 ASINs.", {
|
|
78
106
|
minimum: 20,
|
|
79
107
|
maximum: 100,
|
|
@@ -81,18 +109,24 @@ const productRequestOptionalFields = {
|
|
|
81
109
|
onlyLiveOffers: s.boolean("Whether to omit historical offers when offers are requested, reducing response size."),
|
|
82
110
|
includeBuyBox: s.boolean("Whether to include Keepa buy box data; this may consume two additional tokens per product when offers are not requested."),
|
|
83
111
|
includeRating: s.boolean("Whether to include existing rating and review-count history in the product payload."),
|
|
112
|
+
includeVideos: s.boolean("Whether to include existing product video metadata."),
|
|
113
|
+
includeAPlus: s.boolean("Whether to include existing A+ content."),
|
|
114
|
+
includeStock: s.boolean("Whether to include stock history with requested offers; may cost extra tokens."),
|
|
115
|
+
includeHistoricalVariations: s.boolean("Whether to include historical and out-of-stock variations; may cost extra tokens."),
|
|
84
116
|
};
|
|
85
|
-
const responseMetaSchema = s.
|
|
86
|
-
timestamp: s.
|
|
87
|
-
tokensLeft: s.
|
|
88
|
-
refillInMs: s.
|
|
89
|
-
refillRatePerMinute: s.
|
|
90
|
-
tokensConsumed: s.
|
|
91
|
-
processingTimeMs: s.
|
|
117
|
+
const responseMetaSchema = s.requiredObject("Keepa request and token-budget metadata.", {
|
|
118
|
+
timestamp: s.nullable(s.integer("Keepa server response time in Unix epoch milliseconds.")),
|
|
119
|
+
tokensLeft: s.nullable(s.integer("Tokens remaining after this request.")),
|
|
120
|
+
refillInMs: s.nullable(s.integer("Milliseconds until Keepa next refills tokens.")),
|
|
121
|
+
refillRatePerMinute: s.nullable(s.integer("Number of Keepa tokens refilled per minute.")),
|
|
122
|
+
tokensConsumed: s.nullable(s.integer("Tokens consumed by this request.")),
|
|
123
|
+
processingTimeMs: s.nullable(s.integer("Server-side processing time in milliseconds.")),
|
|
92
124
|
});
|
|
125
|
+
const nullableStringSchema = (description) => s.nullable(s.string(description));
|
|
126
|
+
const nullableIntegerSchema = (description) => s.nullable(s.integer(description));
|
|
93
127
|
const namedIntegerValuesSchema = s.record("Values keyed by official Keepa Product.CsvType name.", s.nullable(s.integer("A Keepa price, rank, count, rating, or metadata value; price values use the marketplace's smallest currency unit.")));
|
|
94
128
|
const namedBooleanValuesSchema = s.record("Boolean values keyed by official Keepa Product.CsvType name.", s.boolean("A Keepa statistic flag."));
|
|
95
|
-
const productStatsSchema = s.
|
|
129
|
+
const productStatsSchema = s.requiredObject("Named Keepa product statistics.", {
|
|
96
130
|
current: namedIntegerValuesSchema,
|
|
97
131
|
average: namedIntegerValuesSchema,
|
|
98
132
|
average30Days: namedIntegerValuesSchema,
|
|
@@ -104,37 +138,37 @@ const productStatsSchema = s.object("Named Keepa product statistics.", {
|
|
|
104
138
|
isLowest90Days: namedBooleanValuesSchema,
|
|
105
139
|
raw: s.looseObject("The complete Keepa stats object."),
|
|
106
140
|
});
|
|
107
|
-
const productSnapshotSchema = s.
|
|
141
|
+
const productSnapshotSchema = s.requiredObject("A normalized Keepa product snapshot.", {
|
|
108
142
|
asin: s.string("Amazon ASIN."),
|
|
109
|
-
domainId:
|
|
110
|
-
title:
|
|
111
|
-
brand:
|
|
112
|
-
manufacturer:
|
|
113
|
-
productGroup:
|
|
114
|
-
parentAsin:
|
|
115
|
-
rootCategory:
|
|
143
|
+
domainId: nullableIntegerSchema("Keepa Amazon locale identifier."),
|
|
144
|
+
title: nullableStringSchema("Amazon product title."),
|
|
145
|
+
brand: nullableStringSchema("Product brand."),
|
|
146
|
+
manufacturer: nullableStringSchema("Product manufacturer."),
|
|
147
|
+
productGroup: nullableStringSchema("Amazon product group."),
|
|
148
|
+
parentAsin: nullableStringSchema("Parent ASIN when this product is a variation."),
|
|
149
|
+
rootCategory: nullableIntegerSchema("Root Amazon category node identifier."),
|
|
116
150
|
categories: s.array("Amazon category node identifiers assigned to the product.", s.integer("One Amazon category node identifier.")),
|
|
117
151
|
imageUrls: s.array("Resolved Amazon image URLs derived from Keepa image metadata.", s.string("One Amazon media image URL.")),
|
|
118
|
-
monthlySold:
|
|
119
|
-
lastUpdate:
|
|
152
|
+
monthlySold: nullableIntegerSchema("Estimated monthly sold count when available."),
|
|
153
|
+
lastUpdate: nullableIntegerSchema("Last product update in Keepa Time minutes."),
|
|
120
154
|
stats: s.nullable(productStatsSchema),
|
|
121
155
|
raw: s.looseObject("The complete Keepa product object."),
|
|
122
156
|
});
|
|
123
|
-
const productSnapshotOutputSchema = s.
|
|
157
|
+
const productSnapshotOutputSchema = s.requiredObject("Keepa product snapshot response.", {
|
|
124
158
|
marketplace: marketplaceSchema,
|
|
125
159
|
priceValuesUseMinorUnits: s.literal(true, {
|
|
126
160
|
description: "Whether price integers remain in the marketplace's smallest currency unit.",
|
|
127
161
|
}),
|
|
128
162
|
products: s.array("Products returned by Keepa.", productSnapshotSchema),
|
|
129
163
|
meta: responseMetaSchema,
|
|
130
|
-
}
|
|
131
|
-
const historyPointSchema = s.
|
|
164
|
+
});
|
|
165
|
+
const historyPointSchema = s.requiredObject("One normalized Keepa history data point.", {
|
|
132
166
|
keepaTime: s.integer("Original Keepa Time value in minutes."),
|
|
133
167
|
timestamp: s.dateTime("UTC timestamp converted from Keepa Time."),
|
|
134
168
|
value: s.integer("History value; price values use the marketplace's smallest currency unit and -1 represents no offer."),
|
|
135
|
-
shipping: s.
|
|
169
|
+
shipping: s.nullable(s.integer("Shipping amount in the marketplace's smallest currency unit when this history type records it separately.")),
|
|
136
170
|
});
|
|
137
|
-
const historySeriesSchema = s.
|
|
171
|
+
const historySeriesSchema = s.requiredObject("One named Keepa product history series.", {
|
|
138
172
|
type: s.stringEnum("Official Keepa Product.CsvType name.", keepaHistoryTypes),
|
|
139
173
|
index: s.integer("Official Keepa Product.CsvType array index."),
|
|
140
174
|
unit: s.stringEnum("Unit interpretation for values in this series; lower sales-rank values indicate better rank.", [
|
|
@@ -147,57 +181,47 @@ const historySeriesSchema = s.object("One named Keepa product history series.",
|
|
|
147
181
|
includesShipping: s.boolean("Whether each raw point contains a separate shipping value after the main value."),
|
|
148
182
|
points: s.array("Chronological history points.", historyPointSchema),
|
|
149
183
|
});
|
|
150
|
-
const monthlySoldHistoryPointSchema = s.
|
|
184
|
+
const monthlySoldHistoryPointSchema = s.requiredObject("One historical Amazon bought-in-past-month value.", {
|
|
151
185
|
keepaTime: s.integer("Original Keepa Time value in minutes."),
|
|
152
186
|
timestamp: s.dateTime("UTC timestamp converted from Keepa Time."),
|
|
153
187
|
value: s.integer("Amazon's bought-in-past-month value observed by Keepa; this is not a sales estimate."),
|
|
154
188
|
});
|
|
155
|
-
const couponHistoryPointSchema = s.
|
|
189
|
+
const couponHistoryPointSchema = s.requiredObject("One historical Keepa coupon observation.", {
|
|
156
190
|
keepaTime: s.integer("Original Keepa Time value in minutes."),
|
|
157
191
|
timestamp: s.dateTime("UTC timestamp converted from Keepa Time."),
|
|
158
192
|
oneTimeCoupon: s.integer("One-time coupon discount: zero means unavailable, positive values use the marketplace's smallest currency unit, and negative values are percentage discounts."),
|
|
159
193
|
subscribeAndSaveCoupon: s.integer("Subscribe-and-Save coupon discount: zero means unavailable, positive values use the marketplace's smallest currency unit, and negative values are percentage discounts."),
|
|
160
194
|
});
|
|
161
|
-
const salesRankHistorySchema = s.
|
|
195
|
+
const salesRankHistorySchema = s.requiredObject("One Amazon subcategory sales-rank history.", {
|
|
162
196
|
categoryId: s.integer("Amazon subcategory node ID."),
|
|
163
|
-
points: s.array("Chronological sales-rank observations; lower values indicate better rank.", s.
|
|
197
|
+
points: s.array("Chronological sales-rank observations; lower values indicate better rank.", s.requiredObject("One historical sales-rank observation.", {
|
|
164
198
|
keepaTime: s.integer("Original Keepa Time value in minutes."),
|
|
165
199
|
timestamp: s.dateTime("UTC timestamp converted from Keepa Time."),
|
|
166
200
|
value: s.integer("Amazon sales rank; lower values indicate better rank."),
|
|
167
201
|
})),
|
|
168
202
|
});
|
|
169
|
-
const productHistorySchema = s.
|
|
203
|
+
const productHistorySchema = s.requiredObject("Normalized Keepa history for one product.", {
|
|
170
204
|
asin: s.string("Amazon ASIN."),
|
|
171
|
-
title:
|
|
172
|
-
brand:
|
|
205
|
+
title: nullableStringSchema("Amazon product title."),
|
|
206
|
+
brand: nullableStringSchema("Product brand."),
|
|
173
207
|
series: s.array("Named Keepa history series.", historySeriesSchema),
|
|
174
208
|
monthlySoldHistory: s.array("Historical Amazon bought-in-past-month values returned by Keepa.", monthlySoldHistoryPointSchema),
|
|
175
209
|
couponHistory: s.array("Historical coupon observations returned by Keepa.", couponHistoryPointSchema),
|
|
176
210
|
salesRankHistory: s.array("Sales-rank histories grouped by Amazon subcategory.", salesRankHistorySchema),
|
|
177
211
|
raw: s.looseObject("The complete Keepa product object including raw history arrays."),
|
|
178
212
|
});
|
|
179
|
-
const productHistoryOutputSchema = s.
|
|
213
|
+
const productHistoryOutputSchema = s.requiredObject("Keepa product history response.", {
|
|
180
214
|
marketplace: marketplaceSchema,
|
|
181
215
|
priceValuesUseMinorUnits: s.literal(true, {
|
|
182
216
|
description: "Whether price integers remain in the marketplace's smallest currency unit.",
|
|
183
217
|
}),
|
|
184
218
|
products: s.array("Products and normalized histories returned by Keepa.", productHistorySchema),
|
|
185
219
|
meta: responseMetaSchema,
|
|
186
|
-
}, "Keepa product history response.");
|
|
187
|
-
const productFinderSortRuleSchema = {
|
|
188
|
-
type: "array",
|
|
189
|
-
prefixItems: [
|
|
190
|
-
s.nonEmptyString("Official Product Finder field name used for sorting."),
|
|
191
|
-
s.stringEnum("Sort direction.", ["asc", "desc"]),
|
|
192
|
-
],
|
|
193
|
-
items: false,
|
|
194
|
-
minItems: 2,
|
|
195
|
-
maxItems: 2,
|
|
196
|
-
description: "One official Keepa Product Finder sort rule.",
|
|
197
|
-
};
|
|
198
|
-
const productFinderSortSchema = s.array("Product Finder sort rules in priority order.", productFinderSortRuleSchema, {
|
|
199
|
-
minItems: 1,
|
|
200
220
|
});
|
|
221
|
+
const productFinderSortSchema = s.array("Product Finder sort rules in priority order.", s.tuple([
|
|
222
|
+
s.nonEmptyString("Official Product Finder field name used for sorting."),
|
|
223
|
+
s.stringEnum("Sort direction.", ["asc", "desc"]),
|
|
224
|
+
], { description: "One official Keepa Product Finder sort rule." }), { minItems: 1 });
|
|
201
225
|
const productFinderFiltersSchema = s.looseObject("Official Keepa ProductFinderRequest fields. Unknown official fields are preserved for forward compatibility.", {
|
|
202
226
|
title: s.nonEmptyString("Case-insensitive product title search text."),
|
|
203
227
|
brand: s.stringArray("Brands to include.", {
|
|
@@ -248,50 +272,46 @@ const productFinderFiltersSchema = s.looseObject("Official Keepa ProductFinderRe
|
|
|
248
272
|
hasMainVideo: s.boolean("Whether products must include a main video."),
|
|
249
273
|
sort: productFinderSortSchema,
|
|
250
274
|
page: s.nonNegativeInteger("Zero-based Product Finder result page."),
|
|
251
|
-
perPage: s.integer("Number of ASINs requested per Product Finder page.", {
|
|
252
|
-
minimum:
|
|
275
|
+
perPage: s.integer("Number of ASINs requested per Product Finder page, from 50 to 10000.", {
|
|
276
|
+
minimum: 50,
|
|
277
|
+
maximum: 10_000,
|
|
253
278
|
}),
|
|
254
279
|
});
|
|
255
280
|
const categorySchema = s.looseObject("One category object returned by Keepa.", {
|
|
256
|
-
catId:
|
|
257
|
-
domainId:
|
|
258
|
-
name:
|
|
259
|
-
parent:
|
|
281
|
+
catId: nullableIntegerSchema("Amazon category node identifier."),
|
|
282
|
+
domainId: nullableIntegerSchema("Keepa Amazon locale identifier."),
|
|
283
|
+
name: nullableStringSchema("Amazon category name."),
|
|
284
|
+
parent: nullableIntegerSchema("Parent category node identifier."),
|
|
260
285
|
children: s.nullable(s.array("Child category node identifiers.", s.integer("One child category node identifier."))),
|
|
261
|
-
productCount:
|
|
262
|
-
sellerCount:
|
|
263
|
-
});
|
|
264
|
-
const dealRangeSchema =
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
s.integer("Range upper bound; some Keepa ranges accept -1 as an open upper bound."),
|
|
269
|
-
],
|
|
270
|
-
items: false,
|
|
271
|
-
minItems: 2,
|
|
272
|
-
maxItems: 2,
|
|
273
|
-
description: "Inclusive two-value range.",
|
|
274
|
-
};
|
|
286
|
+
productCount: nullableIntegerSchema("Estimated product count."),
|
|
287
|
+
sellerCount: nullableIntegerSchema("Estimated distinct seller count."),
|
|
288
|
+
});
|
|
289
|
+
const dealRangeSchema = s.tuple([
|
|
290
|
+
s.integer("Range lower bound."),
|
|
291
|
+
s.integer("Range upper bound; some Keepa ranges accept -1 as an open upper bound."),
|
|
292
|
+
], { description: "Inclusive two-value range." });
|
|
275
293
|
const getTokenStatusAction = defineProviderAction(service, {
|
|
276
294
|
name: "get_token_status",
|
|
277
295
|
operationType: "read",
|
|
278
296
|
description: "Retrieve Keepa token availability and refill information without consuming tokens.",
|
|
279
297
|
requiredScopes: [],
|
|
280
|
-
inputSchema: s.
|
|
281
|
-
outputSchema: s.
|
|
298
|
+
inputSchema: s.requiredObject("Input for retrieving Keepa token status.", {}),
|
|
299
|
+
outputSchema: s.requiredObject("Current Keepa token status.", {
|
|
282
300
|
meta: responseMetaSchema,
|
|
283
|
-
}
|
|
301
|
+
}),
|
|
284
302
|
});
|
|
285
303
|
const getProductSnapshotAction = defineProviderAction(service, {
|
|
286
304
|
name: "get_product_snapshot",
|
|
287
305
|
operationType: "read",
|
|
288
306
|
description: "Retrieve current Keepa product metadata and named statistics for one or more Amazon ASINs.",
|
|
289
307
|
requiredScopes: [],
|
|
290
|
-
inputSchema:
|
|
308
|
+
inputSchema: s.object("Input for retrieving Keepa product snapshots.", {
|
|
291
309
|
marketplace: marketplaceSchema,
|
|
292
310
|
asins: asinsSchema,
|
|
293
311
|
...productRequestOptionalFields,
|
|
294
|
-
},
|
|
312
|
+
}, {
|
|
313
|
+
optional: ["asins", ...Object.keys(productRequestOptionalFields)],
|
|
314
|
+
}),
|
|
295
315
|
outputSchema: productSnapshotOutputSchema,
|
|
296
316
|
});
|
|
297
317
|
const getProductHistoryAction = defineProviderAction(service, {
|
|
@@ -299,13 +319,15 @@ const getProductHistoryAction = defineProviderAction(service, {
|
|
|
299
319
|
operationType: "read",
|
|
300
320
|
description: "Retrieve named Keepa price, rank, offer-count, rating, review, monthly-sales, and coupon history for Amazon ASINs.",
|
|
301
321
|
requiredScopes: [],
|
|
302
|
-
inputSchema:
|
|
322
|
+
inputSchema: s.object("Input for retrieving Keepa product history.", {
|
|
303
323
|
marketplace: marketplaceSchema,
|
|
304
324
|
asins: asinsSchema,
|
|
305
325
|
days: s.positiveInteger("Limit all returned history to the most recent number of 24-hour periods."),
|
|
306
326
|
historyTypes: s.array("Keepa CSV history series to include in `series`; this does not suppress monthlySoldHistory, couponHistory, or salesRankHistory when Keepa returns them.", s.stringEnum("One official Keepa Product.CsvType name.", keepaHistoryTypes), { minItems: 1 }),
|
|
307
327
|
...productRequestOptionalFields,
|
|
308
|
-
},
|
|
328
|
+
}, {
|
|
329
|
+
optional: ["asins", "days", "historyTypes", ...Object.keys(productRequestOptionalFields)],
|
|
330
|
+
}),
|
|
309
331
|
outputSchema: productHistoryOutputSchema,
|
|
310
332
|
});
|
|
311
333
|
const findProductsAction = defineProviderAction(service, {
|
|
@@ -313,62 +335,79 @@ const findProductsAction = defineProviderAction(service, {
|
|
|
313
335
|
operationType: "read",
|
|
314
336
|
description: "Find Amazon ASINs with Keepa Product Finder filters using official ProductFinderRequest field names.",
|
|
315
337
|
requiredScopes: [],
|
|
316
|
-
inputSchema: s.
|
|
338
|
+
inputSchema: s.object("Input for finding products in the Keepa catalog.", {
|
|
317
339
|
marketplace: marketplaceSchema,
|
|
318
340
|
filters: productFinderFiltersSchema,
|
|
319
|
-
|
|
320
|
-
|
|
341
|
+
includeSearchInsights: s.boolean("Include charged, query-wide Search Insights statistics."),
|
|
342
|
+
}, { optional: ["includeSearchInsights"] }),
|
|
343
|
+
outputSchema: s.requiredObject("Keepa Product Finder results.", {
|
|
321
344
|
marketplace: marketplaceSchema,
|
|
322
345
|
asins: s.array("Matching Amazon ASINs.", s.string("One Amazon ASIN.")),
|
|
323
|
-
totalResults: s.
|
|
346
|
+
totalResults: s.nullable(s.integer("Estimated total number of matching products.")),
|
|
347
|
+
searchInsights: s.nullable(s.looseObject("Query-wide Search Insights returned when requested.")),
|
|
324
348
|
meta: responseMetaSchema,
|
|
325
|
-
}
|
|
349
|
+
}),
|
|
326
350
|
});
|
|
327
351
|
const searchCategoriesAction = defineProviderAction(service, {
|
|
328
352
|
name: "search_categories",
|
|
329
353
|
operationType: "read",
|
|
330
354
|
description: "Search Keepa Amazon categories by name so category IDs can be used in product and best-seller queries.",
|
|
331
355
|
requiredScopes: [],
|
|
332
|
-
inputSchema: s.
|
|
333
|
-
marketplace:
|
|
356
|
+
inputSchema: s.object("Input for searching Keepa categories.", {
|
|
357
|
+
marketplace: standardMarketplaceSchema,
|
|
334
358
|
term: s.nonEmptyString("Space-separated category keywords; each keyword must contain at least three characters."),
|
|
335
359
|
includeParents: s.boolean("Whether Keepa should include the parent tree for each category."),
|
|
336
|
-
}, ["
|
|
337
|
-
outputSchema: s.
|
|
338
|
-
marketplace:
|
|
360
|
+
}, { optional: ["includeParents"] }),
|
|
361
|
+
outputSchema: s.requiredObject("Keepa category search results.", {
|
|
362
|
+
marketplace: standardMarketplaceSchema,
|
|
339
363
|
categories: s.array("Matching categories.", categorySchema),
|
|
340
364
|
categoryParents: s.array("Parent categories returned when requested.", categorySchema),
|
|
341
365
|
meta: responseMetaSchema,
|
|
342
|
-
}
|
|
366
|
+
}),
|
|
343
367
|
});
|
|
344
368
|
const getBestSellersAction = defineProviderAction(service, {
|
|
345
369
|
name: "get_best_sellers",
|
|
346
370
|
operationType: "read",
|
|
347
371
|
description: "Retrieve Keepa's ordered Amazon best-seller ASIN list for a category node or website display group.",
|
|
348
372
|
requiredScopes: [],
|
|
349
|
-
inputSchema: s.
|
|
350
|
-
marketplace:
|
|
373
|
+
inputSchema: s.object("Input for retrieving Keepa best sellers.", {
|
|
374
|
+
marketplace: standardMarketplaceSchema,
|
|
351
375
|
category: s.anyOf("Amazon category node ID or Keepa website display group name.", [
|
|
352
376
|
s.nonNegativeInteger("Amazon category node ID."),
|
|
353
377
|
s.nonEmptyString("Keepa website display group name."),
|
|
354
378
|
]),
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
379
|
+
range: s.anyOf("Sales-rank averaging interval: 0, 30, 90 or 180 days.", [
|
|
380
|
+
s.literal(0, { description: "Current rank." }),
|
|
381
|
+
s.literal(30, { description: "30-day average rank." }),
|
|
382
|
+
s.literal(90, { description: "90-day average rank." }),
|
|
383
|
+
s.literal(180, { description: "180-day average rank." }),
|
|
384
|
+
]),
|
|
385
|
+
month: s.integer("Historical month from 1 to 12; requires year.", {
|
|
386
|
+
minimum: 1,
|
|
387
|
+
maximum: 12,
|
|
388
|
+
}),
|
|
389
|
+
year: s.integer("Four-digit year for a historical month; requires month."),
|
|
390
|
+
variations: s.boolean("Return all variations instead of one representative."),
|
|
391
|
+
sublist: s.boolean("Use subcategory rank instead of primary rank."),
|
|
392
|
+
...windowInputFields,
|
|
393
|
+
}, { optional: ["range", "month", "year", "variations", "sublist", "offset", "limit"] }),
|
|
394
|
+
outputSchema: s.requiredObject("Keepa best-seller results.", {
|
|
395
|
+
marketplace: standardMarketplaceSchema,
|
|
396
|
+
categoryId: s.nullable(s.integer("Amazon category node ID resolved by Keepa.")),
|
|
397
|
+
lastUpdate: s.nullable(s.integer("Best-seller list update time in Keepa Time minutes.")),
|
|
360
398
|
asins: s.array("Ordered Amazon ASINs, starting with the product having the lowest sales rank.", s.string("One Amazon ASIN.")),
|
|
361
|
-
|
|
399
|
+
...windowOutputFields,
|
|
400
|
+
raw: s.looseObject("Keepa bestSellersList metadata without the full ASIN list."),
|
|
362
401
|
meta: responseMetaSchema,
|
|
363
|
-
}
|
|
402
|
+
}),
|
|
364
403
|
});
|
|
365
404
|
const findDealsAction = defineProviderAction(service, {
|
|
366
405
|
name: "find_deals",
|
|
367
406
|
operationType: "read",
|
|
368
407
|
description: "Find recently changed Amazon products with Keepa deal filters and bounded pagination.",
|
|
369
408
|
requiredScopes: [],
|
|
370
|
-
inputSchema: s.
|
|
371
|
-
marketplace:
|
|
409
|
+
inputSchema: s.object("Input for finding Keepa deals.", {
|
|
410
|
+
marketplace: standardMarketplaceSchema,
|
|
372
411
|
priceType: s.stringEnum("Keepa price or rank type whose change defines the deal.", keepaDealPriceTypes),
|
|
373
412
|
page: s.nonNegativeInteger("Zero-based deal result page; each page contains at most 150 deals."),
|
|
374
413
|
dateRange: s.integer("Change interval: 0 for one day, 1 for one week, 2 for one month, or 3 for 90 days.", {
|
|
@@ -385,6 +424,7 @@ const findDealsAction = defineProviderAction(service, {
|
|
|
385
424
|
deltaRange: dealRangeSchema,
|
|
386
425
|
deltaPercentRange: dealRangeSchema,
|
|
387
426
|
salesRankRange: dealRangeSchema,
|
|
427
|
+
deltaLastRange: dealRangeSchema,
|
|
388
428
|
titleSearch: s.nonEmptyString("Case-insensitive title keywords that must all appear in the product title."),
|
|
389
429
|
minimumRating: s.integer("Minimum product rating multiplied by 10.", {
|
|
390
430
|
minimum: 0,
|
|
@@ -401,45 +441,252 @@ const findDealsAction = defineProviderAction(service, {
|
|
|
401
441
|
isPrimeExclusive: s.boolean("Whether to include only Prime Exclusive products."),
|
|
402
442
|
mustHaveAmazonOffer: s.boolean("Whether products must have an offer sold and fulfilled by Amazon."),
|
|
403
443
|
mustNotHaveAmazonOffer: s.boolean("Whether products must not have an offer sold and fulfilled by Amazon."),
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
444
|
+
isHighest: s.boolean("Whether the selected value must be the highest since tracking began."),
|
|
445
|
+
singleVariation: s.boolean("Return one randomly chosen variation per matching family."),
|
|
446
|
+
isRisers: s.boolean("Include only products whose price rose in the selected interval."),
|
|
447
|
+
filterErotic: s.boolean("Exclude adult items when true."),
|
|
448
|
+
warehouseConditions: s.array("Amazon Warehouse condition codes.", s.integer("One condition code.")),
|
|
449
|
+
...Object.fromEntries(keepaDealAttributeNames.map((name) => [
|
|
450
|
+
name,
|
|
451
|
+
s.stringArray(`Values for the official ${name} deal attribute filter.`, {
|
|
452
|
+
itemDescription: `One ${name} value.`,
|
|
453
|
+
}),
|
|
454
|
+
])),
|
|
455
|
+
}, {
|
|
456
|
+
optional: [
|
|
457
|
+
"page",
|
|
458
|
+
"dateRange",
|
|
459
|
+
"includeCategories",
|
|
460
|
+
"excludeCategories",
|
|
461
|
+
"currentRange",
|
|
462
|
+
"deltaRange",
|
|
463
|
+
"deltaPercentRange",
|
|
464
|
+
"salesRankRange",
|
|
465
|
+
"deltaLastRange",
|
|
466
|
+
"titleSearch",
|
|
467
|
+
"minimumRating",
|
|
468
|
+
"sortBy",
|
|
469
|
+
"invertSort",
|
|
470
|
+
"isLowestEver",
|
|
471
|
+
"isLowest90Days",
|
|
472
|
+
"isLowestOffer",
|
|
473
|
+
"isBackInStock",
|
|
474
|
+
"isOutOfStock",
|
|
475
|
+
"hasReviews",
|
|
476
|
+
"isPrimeExclusive",
|
|
477
|
+
"mustHaveAmazonOffer",
|
|
478
|
+
"mustNotHaveAmazonOffer",
|
|
479
|
+
"isHighest",
|
|
480
|
+
"singleVariation",
|
|
481
|
+
"isRisers",
|
|
482
|
+
"filterErotic",
|
|
483
|
+
"warehouseConditions",
|
|
484
|
+
...keepaDealAttributeNames,
|
|
485
|
+
],
|
|
486
|
+
}),
|
|
487
|
+
outputSchema: s.requiredObject("Keepa deal search results.", {
|
|
488
|
+
marketplace: standardMarketplaceSchema,
|
|
407
489
|
deals: s.array("Deal records returned by Keepa.", s.looseObject("One Keepa deal record.", {
|
|
408
|
-
asin:
|
|
409
|
-
title:
|
|
490
|
+
asin: nullableStringSchema("Amazon ASIN."),
|
|
491
|
+
title: nullableStringSchema("Amazon product title."),
|
|
410
492
|
})),
|
|
411
493
|
categoryIds: s.array("Root category IDs represented in the results.", s.integer("One root category ID.")),
|
|
412
494
|
categoryNames: s.array("Root category names represented in the results.", s.string("One root category name.")),
|
|
413
495
|
categoryCount: s.array("Deal counts aligned with categoryIds and categoryNames.", s.integer("Deal count for one root category.")),
|
|
414
496
|
raw: s.looseObject("The complete Keepa deals response object."),
|
|
415
497
|
meta: responseMetaSchema,
|
|
416
|
-
}
|
|
498
|
+
}),
|
|
417
499
|
});
|
|
418
500
|
const getSellerSnapshotAction = defineProviderAction(service, {
|
|
419
501
|
name: "get_seller_snapshot",
|
|
420
502
|
operationType: "read",
|
|
421
503
|
description: "Retrieve compact Keepa marketplace seller profiles, ratings, category statistics, brands, and competitors.",
|
|
422
504
|
requiredScopes: [],
|
|
423
|
-
inputSchema: s.
|
|
424
|
-
marketplace:
|
|
505
|
+
inputSchema: s.requiredObject("Input for retrieving Keepa seller snapshots.", {
|
|
506
|
+
marketplace: standardMarketplaceSchema,
|
|
425
507
|
sellerIds: s.array("Amazon marketplace seller IDs.", s.nonEmptyString("One Amazon seller ID."), {
|
|
426
508
|
minItems: 1,
|
|
427
509
|
maxItems: 100,
|
|
428
510
|
}),
|
|
429
|
-
}
|
|
430
|
-
outputSchema: s.
|
|
431
|
-
marketplace:
|
|
511
|
+
}),
|
|
512
|
+
outputSchema: s.requiredObject("Keepa seller snapshot results.", {
|
|
513
|
+
marketplace: standardMarketplaceSchema,
|
|
432
514
|
sellers: s.array("Seller profiles returned by Keepa.", s.looseObject("One normalized Keepa seller profile.", {
|
|
433
515
|
sellerId: s.string("Amazon seller ID."),
|
|
434
|
-
sellerName:
|
|
435
|
-
currentRating:
|
|
516
|
+
sellerName: nullableStringSchema("Amazon seller display name."),
|
|
517
|
+
currentRating: nullableIntegerSchema("Current seller rating percentage."),
|
|
436
518
|
ratingCount: s.nullable(s.array("Rating counts for the last 30, 90, and 365 days and lifetime.", s.integer("One seller rating count."))),
|
|
437
|
-
hasFba: s.
|
|
438
|
-
shipsFromChina: s.
|
|
519
|
+
hasFba: s.nullable(s.boolean("Whether Keepa has observed current FBA listings.")),
|
|
520
|
+
shipsFromChina: s.nullable(s.boolean("Whether Keepa identifies the seller as shipping from China.")),
|
|
439
521
|
raw: s.looseObject("The complete Keepa seller object."),
|
|
440
522
|
})),
|
|
441
523
|
meta: responseMetaSchema,
|
|
442
|
-
}
|
|
524
|
+
}),
|
|
525
|
+
});
|
|
526
|
+
const lightningStateSchema = s.stringEnum("Official Keepa lightning deal state.", [
|
|
527
|
+
"AVAILABLE",
|
|
528
|
+
"WAITLIST",
|
|
529
|
+
"SOLDOUT",
|
|
530
|
+
"WAITLISTFULL",
|
|
531
|
+
"EXPIRED",
|
|
532
|
+
"SUPPRESSED",
|
|
533
|
+
]);
|
|
534
|
+
const sellerFinderFiltersSchema = s.looseObject("Official Seller Finder selection fields; other official filters are preserved.", {
|
|
535
|
+
search: s.nonEmptyString("Text query for seller discovery."),
|
|
536
|
+
sellerName: s.nonEmptyString("Seller display name to match."),
|
|
537
|
+
businessName: s.nonEmptyString("Registered business name to match."),
|
|
538
|
+
addressCountry: s.stringArray("Seller business country codes.", {
|
|
539
|
+
itemDescription: "One country code.",
|
|
540
|
+
}),
|
|
541
|
+
currentRating_gte: s.integer("Minimum current seller rating percentage."),
|
|
542
|
+
currentRatingCount_gte: s.integer("Minimum current seller rating count."),
|
|
543
|
+
totalStorefrontAsins_gte: s.integer("Minimum observed storefront ASIN count."),
|
|
544
|
+
brands: s.stringArray("Brands sold by the merchant.", { itemDescription: "One brand." }),
|
|
545
|
+
rootCategories_include: s.array("Root category IDs to include.", s.integer("One root category ID.")),
|
|
546
|
+
competitorSellerIds: s.stringArray("Seller IDs whose listing competitors should be found.", {
|
|
547
|
+
itemDescription: "One seller ID.",
|
|
548
|
+
}),
|
|
549
|
+
page: s.nonNegativeInteger("Zero-based seller result page."),
|
|
550
|
+
perPage: s.anyOf("Seller IDs per page; zero means 100, otherwise from 50 to 10000.", [
|
|
551
|
+
s.literal(0, { description: "Use Keepa's 100-seller page shortcut." }),
|
|
552
|
+
s.integer("Seller IDs requested per page.", { minimum: 50, maximum: 10_000 }),
|
|
553
|
+
]),
|
|
554
|
+
sort: s.array("Up to three seller sort rules.", s.tuple([
|
|
555
|
+
s.nonEmptyString("Official Seller Finder field name."),
|
|
556
|
+
s.stringEnum("Ascending or descending order.", ["asc", "desc"]),
|
|
557
|
+
], { description: "One seller sort rule." }), { maxItems: 3 }),
|
|
558
|
+
});
|
|
559
|
+
const searchProductsAction = defineProviderAction(service, {
|
|
560
|
+
name: "search_products",
|
|
561
|
+
operationType: "read",
|
|
562
|
+
description: "Search Amazon products by keyword in Amazon result order, without fetching more details.",
|
|
563
|
+
requiredScopes: [],
|
|
564
|
+
inputSchema: s.object("Input for Keepa keyword product search.", {
|
|
565
|
+
marketplace: standardMarketplaceSchema,
|
|
566
|
+
term: s.nonEmptyString("Amazon product search terms."),
|
|
567
|
+
asinsOnly: s.boolean("Return only ordered ASINs instead of product objects."),
|
|
568
|
+
statsDays: s.positiveInteger("Recent days for free product statistics."),
|
|
569
|
+
statsRange: statsRangeSchema,
|
|
570
|
+
updateHours: s.integer("Refresh threshold in hours; zero can cost extra tokens.", {
|
|
571
|
+
minimum: 0,
|
|
572
|
+
}),
|
|
573
|
+
includeHistory: s.boolean("Include available product price history."),
|
|
574
|
+
includeRating: s.boolean("Include existing rating and review history, possibly at extra cost."),
|
|
575
|
+
}, {
|
|
576
|
+
optional: ["asinsOnly", "statsDays", "statsRange", "updateHours", "includeHistory", "includeRating"],
|
|
577
|
+
}),
|
|
578
|
+
outputSchema: s.requiredObject("Ordered Keepa keyword search results.", {
|
|
579
|
+
marketplace: standardMarketplaceSchema,
|
|
580
|
+
asins: s.array("Ordered matching ASINs.", s.string("One ASIN.")),
|
|
581
|
+
products: s.array("Product objects when ASIN-only mode is disabled.", productSnapshotSchema),
|
|
582
|
+
meta: responseMetaSchema,
|
|
583
|
+
}),
|
|
584
|
+
});
|
|
585
|
+
const lookupCategoriesAction = defineProviderAction(service, {
|
|
586
|
+
name: "lookup_categories",
|
|
587
|
+
operationType: "read",
|
|
588
|
+
description: "Look up up to ten Amazon category IDs and optionally their parent tree; ID zero lists roots.",
|
|
589
|
+
requiredScopes: [],
|
|
590
|
+
inputSchema: s.object("Input for Keepa category lookup.", {
|
|
591
|
+
marketplace: standardMarketplaceSchema,
|
|
592
|
+
categoryIds: s.array("Category IDs, or a sole zero to list roots.", s.nonNegativeInteger("One category ID."), {
|
|
593
|
+
minItems: 1,
|
|
594
|
+
maxItems: 10,
|
|
595
|
+
}),
|
|
596
|
+
includeParents: s.boolean("Include parent categories up to the root."),
|
|
597
|
+
}, { optional: ["includeParents"] }),
|
|
598
|
+
outputSchema: s.requiredObject("Keepa category lookup results.", {
|
|
599
|
+
marketplace: standardMarketplaceSchema,
|
|
600
|
+
categories: s.array("Matched categories.", categorySchema),
|
|
601
|
+
categoryParents: s.array("Parent categories when requested.", categorySchema),
|
|
602
|
+
meta: responseMetaSchema,
|
|
603
|
+
}),
|
|
604
|
+
});
|
|
605
|
+
const findSellersAction = defineProviderAction(service, {
|
|
606
|
+
name: "find_sellers",
|
|
607
|
+
operationType: "read",
|
|
608
|
+
description: "Find seller IDs by official Seller Finder criteria without fetching seller profiles.",
|
|
609
|
+
requiredScopes: [],
|
|
610
|
+
inputSchema: s.requiredObject("Input for Keepa Seller Finder.", {
|
|
611
|
+
marketplace: standardMarketplaceSchema,
|
|
612
|
+
filters: sellerFinderFiltersSchema,
|
|
613
|
+
}),
|
|
614
|
+
outputSchema: s.requiredObject("Keepa Seller Finder results.", {
|
|
615
|
+
marketplace: standardMarketplaceSchema,
|
|
616
|
+
sellerIds: s.array("Ordered seller IDs in this upstream result page.", s.string("One seller ID.")),
|
|
617
|
+
totalResults: s.nullable(s.integer("Total sellers matched across pages.")),
|
|
618
|
+
meta: responseMetaSchema,
|
|
619
|
+
}),
|
|
620
|
+
});
|
|
621
|
+
const getMostRatedSellersAction = defineProviderAction(service, {
|
|
622
|
+
name: "get_most_rated_sellers",
|
|
623
|
+
operationType: "read",
|
|
624
|
+
description: "Get seller IDs ordered by rating count, with a local result window; each window fetches and pays for the full upstream list.",
|
|
625
|
+
requiredScopes: [],
|
|
626
|
+
inputSchema: s.object("Input for most rated sellers.", {
|
|
627
|
+
marketplace: standardMarketplaceSchema,
|
|
628
|
+
...windowInputFields,
|
|
629
|
+
}, { optional: ["offset", "limit"] }),
|
|
630
|
+
outputSchema: s.requiredObject("Most rated sellers result window.", {
|
|
631
|
+
marketplace: standardMarketplaceSchema,
|
|
632
|
+
sellerIds: s.array("Seller IDs ordered by rating count.", s.string("One seller ID.")),
|
|
633
|
+
...windowOutputFields,
|
|
634
|
+
meta: responseMetaSchema,
|
|
635
|
+
}),
|
|
636
|
+
});
|
|
637
|
+
const getSellerStorefrontAction = defineProviderAction(service, {
|
|
638
|
+
name: "get_seller_storefront",
|
|
639
|
+
operationType: "read",
|
|
640
|
+
description: "Inspect one seller's observed storefront ASINs and aligned last-seen times; the list can be incomplete.",
|
|
641
|
+
requiredScopes: [],
|
|
642
|
+
inputSchema: s.object("Input for one seller storefront.", {
|
|
643
|
+
marketplace: standardMarketplaceSchema,
|
|
644
|
+
sellerId: s.nonEmptyString("One Amazon seller ID that does not contain commas.", { pattern: "^[^,]+$" }),
|
|
645
|
+
...windowInputFields,
|
|
646
|
+
}, { optional: ["offset", "limit"] }),
|
|
647
|
+
outputSchema: s.requiredObject("Observed seller storefront window.", {
|
|
648
|
+
marketplace: standardMarketplaceSchema,
|
|
649
|
+
seller: s.nullable(s.looseObject("Seller profile without full storefront arrays.")),
|
|
650
|
+
items: s.array("Observed ASIN and last-seen pairs.", s.requiredObject("One storefront listing observation.", {
|
|
651
|
+
asin: s.string("Amazon ASIN."),
|
|
652
|
+
lastSeen: s.nullable(s.integer("Last observed Keepa Time minute.")),
|
|
653
|
+
})),
|
|
654
|
+
...windowOutputFields,
|
|
655
|
+
meta: responseMetaSchema,
|
|
656
|
+
}),
|
|
657
|
+
});
|
|
658
|
+
const getLightningDealAction = defineProviderAction(service, {
|
|
659
|
+
name: "get_lightning_deal",
|
|
660
|
+
operationType: "read",
|
|
661
|
+
description: "Get lightning deals for a required ASIN, avoiding the costly full-list request.",
|
|
662
|
+
requiredScopes: [],
|
|
663
|
+
inputSchema: s.object("Input for one product's lightning deal.", {
|
|
664
|
+
marketplace: standardMarketplaceSchema,
|
|
665
|
+
asin: asinSchema,
|
|
666
|
+
state: lightningStateSchema,
|
|
667
|
+
}, { optional: ["state"] }),
|
|
668
|
+
outputSchema: s.requiredObject("Lightning deals for one ASIN.", {
|
|
669
|
+
marketplace: standardMarketplaceSchema,
|
|
670
|
+
lightningDeals: s.array("Lightning deal objects.", s.looseObject("One upstream lightning deal.")),
|
|
671
|
+
meta: responseMetaSchema,
|
|
672
|
+
}),
|
|
673
|
+
});
|
|
674
|
+
const listLightningDealsAction = defineProviderAction(service, {
|
|
675
|
+
name: "list_lightning_deals",
|
|
676
|
+
operationType: "read",
|
|
677
|
+
description: "List lightning deals with a local result window; Keepa charges 500 tokens for each full upstream request, regardless of window size.",
|
|
678
|
+
requiredScopes: [],
|
|
679
|
+
inputSchema: s.object("Input for the full Keepa lightning deal list.", {
|
|
680
|
+
marketplace: standardMarketplaceSchema,
|
|
681
|
+
state: lightningStateSchema,
|
|
682
|
+
...windowInputFields,
|
|
683
|
+
}, { optional: ["state", "offset", "limit"] }),
|
|
684
|
+
outputSchema: s.requiredObject("Lightning deal result window.", {
|
|
685
|
+
marketplace: standardMarketplaceSchema,
|
|
686
|
+
lightningDeals: s.array("Lightning deals in this local window.", s.looseObject("One upstream lightning deal.")),
|
|
687
|
+
...windowOutputFields,
|
|
688
|
+
meta: responseMetaSchema,
|
|
689
|
+
}),
|
|
443
690
|
});
|
|
444
691
|
export const keepaActions = [
|
|
445
692
|
getTokenStatusAction,
|
|
@@ -450,36 +697,11 @@ export const keepaActions = [
|
|
|
450
697
|
getBestSellersAction,
|
|
451
698
|
findDealsAction,
|
|
452
699
|
getSellerSnapshotAction,
|
|
700
|
+
searchProductsAction,
|
|
701
|
+
lookupCategoriesAction,
|
|
702
|
+
findSellersAction,
|
|
703
|
+
getMostRatedSellersAction,
|
|
704
|
+
getSellerStorefrontAction,
|
|
705
|
+
getLightningDealAction,
|
|
706
|
+
listLightningDealsAction,
|
|
453
707
|
];
|
|
454
|
-
function withProductRequestRules(schema) {
|
|
455
|
-
return {
|
|
456
|
-
...schema,
|
|
457
|
-
allOf: [
|
|
458
|
-
{
|
|
459
|
-
if: {
|
|
460
|
-
required: ["offers"],
|
|
461
|
-
},
|
|
462
|
-
then: {
|
|
463
|
-
properties: {
|
|
464
|
-
asins: {
|
|
465
|
-
maxItems: 20,
|
|
466
|
-
},
|
|
467
|
-
},
|
|
468
|
-
},
|
|
469
|
-
},
|
|
470
|
-
{
|
|
471
|
-
if: {
|
|
472
|
-
required: ["onlyLiveOffers"],
|
|
473
|
-
properties: {
|
|
474
|
-
onlyLiveOffers: {
|
|
475
|
-
const: true,
|
|
476
|
-
},
|
|
477
|
-
},
|
|
478
|
-
},
|
|
479
|
-
then: {
|
|
480
|
-
required: ["offers"],
|
|
481
|
-
},
|
|
482
|
-
},
|
|
483
|
-
],
|
|
484
|
-
};
|
|
485
|
-
}
|