@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,148 @@
|
|
|
1
|
+
import { createHmac } from "node:crypto";
|
|
2
|
+
import { optionalIntegerOrNull, optionalRecord, optionalString } from "../../core/cast.js";
|
|
3
|
+
import { readBoundedResponseBytes } from "../../core/request.js";
|
|
4
|
+
import { providerInputError, providerResponseError, providerUserAgent, readProviderErrorTextBody, ProviderRequestError, requiredInputString, requiredResponseRecord, runProviderRequest, } from "../provider-runtime.js";
|
|
5
|
+
export const framejetApiBaseUrl = "https://framejet.dev";
|
|
6
|
+
// A capture may wait for slow pages, page steps and goal mode, so it gets more than the default budget.
|
|
7
|
+
// The proxy shares this budget, since GET /v1/take is the capture endpoint on both paths.
|
|
8
|
+
export const framejetCaptureTimeoutMs = 90_000;
|
|
9
|
+
const framejetCaptureParams = ["format", "full_page", "width", "height", "dpr", "clean", "delay", "actions"];
|
|
10
|
+
// Framejet caps each value at 200 characters, which the schema enforces, and the joined list at 1000.
|
|
11
|
+
const framejetMaxValuesLength = 1000;
|
|
12
|
+
export const framejetActionHandlers = {
|
|
13
|
+
take_screenshot(input, context) {
|
|
14
|
+
return takeFramejetScreenshot(input, context);
|
|
15
|
+
},
|
|
16
|
+
create_signed_url(input, context) {
|
|
17
|
+
return createFramejetSignedUrl(input, context);
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Check a key against GET /v1/me, which does not spend a screenshot.
|
|
22
|
+
*/
|
|
23
|
+
export async function validateFramejetApiKey(apiKey, fetcher, signal) {
|
|
24
|
+
const key = requiredInputString(apiKey, "apiKey");
|
|
25
|
+
await runProviderRequest({ signal, label: "Framejet" }, async (requestSignal) => {
|
|
26
|
+
const response = await fetcher(new URL("/v1/me", framejetApiBaseUrl), {
|
|
27
|
+
headers: framejetHeaders(key),
|
|
28
|
+
signal: requestSignal,
|
|
29
|
+
});
|
|
30
|
+
if (!response.ok) {
|
|
31
|
+
const error = await readFramejetError(response);
|
|
32
|
+
// A rejected key is a field error on the connect form, not a reconnect prompt.
|
|
33
|
+
throw response.status === 401 || response.status === 403 ? providerInputError(error.message) : error;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
return {
|
|
37
|
+
profile: {
|
|
38
|
+
accountId: "api_key",
|
|
39
|
+
displayName: "Framejet API Key",
|
|
40
|
+
},
|
|
41
|
+
grantedScopes: [],
|
|
42
|
+
metadata: {
|
|
43
|
+
apiBaseUrl: framejetApiBaseUrl,
|
|
44
|
+
validationEndpoint: "/v1/me",
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
async function takeFramejetScreenshot(input, context) {
|
|
49
|
+
const transitFiles = context.transitFiles;
|
|
50
|
+
if (!transitFiles) {
|
|
51
|
+
throw new ProviderRequestError(500, "take_screenshot requires transit file storage");
|
|
52
|
+
}
|
|
53
|
+
const query = buildFramejetQuery(input, ["goal", "values", "cache"]);
|
|
54
|
+
if ([...(query.get("values") ?? "")].length > framejetMaxValuesLength) {
|
|
55
|
+
throw providerInputError(`values must total at most ${framejetMaxValuesLength} characters, including the | separators`);
|
|
56
|
+
}
|
|
57
|
+
const url = new URL("/v1/take", framejetApiBaseUrl);
|
|
58
|
+
url.search = query.toString();
|
|
59
|
+
return runProviderRequest({ signal: context.signal, label: "Framejet", timeoutMs: framejetCaptureTimeoutMs }, async (signal) => {
|
|
60
|
+
const response = await context.fetcher(url, { headers: framejetHeaders(context.apiKey), signal });
|
|
61
|
+
if (!response.ok) {
|
|
62
|
+
throw await readFramejetError(response);
|
|
63
|
+
}
|
|
64
|
+
const bytes = await readBoundedResponseBytes(response, {
|
|
65
|
+
maxBytes: transitFiles.maxBytes,
|
|
66
|
+
fieldName: "Framejet screenshot",
|
|
67
|
+
createError: (message) => new ProviderRequestError(413, message),
|
|
68
|
+
});
|
|
69
|
+
const mimeType = response.headers.get("content-type")?.split(";")[0]?.trim() || "image/png";
|
|
70
|
+
const name = mimeType === "image/jpeg" ? "framejet-screenshot.jpg" : "framejet-screenshot.png";
|
|
71
|
+
const upload = await transitFiles.create(new File([Uint8Array.from(bytes)], name, { type: mimeType }));
|
|
72
|
+
return {
|
|
73
|
+
file: {
|
|
74
|
+
fileId: upload.fileId,
|
|
75
|
+
downloadUrl: upload.downloadUrl,
|
|
76
|
+
sizeBytes: upload.sizeBytes,
|
|
77
|
+
name: upload.name,
|
|
78
|
+
mimeType: upload.mimeType,
|
|
79
|
+
},
|
|
80
|
+
cache: response.headers.get("x-framejet-cache") === "HIT" ? "HIT" : "MISS",
|
|
81
|
+
remaining: optionalIntegerOrNull(response.headers.get("x-framejet-remaining")),
|
|
82
|
+
};
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
async function createFramejetSignedUrl(input, context) {
|
|
86
|
+
const signingKey = await runProviderRequest({ signal: context.signal, label: "Framejet" }, async (signal) => {
|
|
87
|
+
const response = await context.fetcher(new URL("/v1/signing-key", framejetApiBaseUrl), {
|
|
88
|
+
headers: framejetHeaders(context.apiKey),
|
|
89
|
+
signal,
|
|
90
|
+
});
|
|
91
|
+
if (!response.ok) {
|
|
92
|
+
throw await readFramejetError(response);
|
|
93
|
+
}
|
|
94
|
+
return requiredResponseRecord(await response.json(), "Framejet signing key response");
|
|
95
|
+
});
|
|
96
|
+
const keyId = optionalString(signingKey.key_id);
|
|
97
|
+
const secret = optionalString(signingKey.signing_secret);
|
|
98
|
+
if (!keyId || !secret) {
|
|
99
|
+
throw providerResponseError("Framejet signing key response is missing key_id or signing_secret");
|
|
100
|
+
}
|
|
101
|
+
const query = buildFramejetQuery(input, []);
|
|
102
|
+
query.set("key_id", keyId);
|
|
103
|
+
if (typeof input.expires_in === "number") {
|
|
104
|
+
query.set("expires", String(Math.floor(Date.now() / 1000) + input.expires_in));
|
|
105
|
+
}
|
|
106
|
+
// Framejet verifies the exact bytes before "&sig=", so sign the query string exactly as it is sent.
|
|
107
|
+
const signed = query.toString();
|
|
108
|
+
const sig = createHmac("sha256", secret).update(signed).digest("hex");
|
|
109
|
+
return { signed_url: `${framejetApiBaseUrl}/v1/take?${signed}&sig=${sig}` };
|
|
110
|
+
}
|
|
111
|
+
function buildFramejetQuery(input, extraParams) {
|
|
112
|
+
const query = new URLSearchParams({ url: requiredInputString(input.url, "url") });
|
|
113
|
+
for (const name of [...framejetCaptureParams, ...extraParams]) {
|
|
114
|
+
const raw = input[name];
|
|
115
|
+
const value = Array.isArray(raw) ? raw.join("|") : raw;
|
|
116
|
+
if (value === undefined || value === null || value === "") {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
query.set(name, String(value));
|
|
120
|
+
}
|
|
121
|
+
return query;
|
|
122
|
+
}
|
|
123
|
+
function framejetHeaders(apiKey) {
|
|
124
|
+
return {
|
|
125
|
+
"user-agent": providerUserAgent,
|
|
126
|
+
"x-api-key": apiKey,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Map a failed Framejet response for both actions and the proxy, so a spent quota reads the same on either path.
|
|
131
|
+
*/
|
|
132
|
+
export async function readFramejetError(response) {
|
|
133
|
+
const text = (await readProviderErrorTextBody(response, "Framejet error response")).trim();
|
|
134
|
+
let payload;
|
|
135
|
+
try {
|
|
136
|
+
payload = optionalRecord(JSON.parse(text));
|
|
137
|
+
}
|
|
138
|
+
catch {
|
|
139
|
+
payload = undefined;
|
|
140
|
+
}
|
|
141
|
+
const message = optionalString(payload?.error) ?? (text || `Framejet request failed with status ${response.status}`);
|
|
142
|
+
const code = optionalString(payload?.code);
|
|
143
|
+
const fullMessage = code ? `${message} (${code})` : message;
|
|
144
|
+
// 402 is Framejet's monthly quota; every other status maps through the shared convention.
|
|
145
|
+
return response.status === 402
|
|
146
|
+
? new ProviderRequestError(402, fullMessage, payload, "insufficient_credit")
|
|
147
|
+
: new ProviderRequestError(response.status, fullMessage, payload);
|
|
148
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { s } from "../../core/json-schema.js";
|
|
2
|
+
import { defineProviderAction } from "../../core/provider-definition.js";
|
|
3
|
+
import { futunnResearchActions } from "./actions.research.js";
|
|
4
|
+
import { futunnTradingActions } from "./actions.trading.js";
|
|
5
|
+
const symbol = s.nonEmptyString("Security code with market prefix, for example US.AAPL or HK.00700.");
|
|
6
|
+
const accountId = s.nonEmptyString("Trading account ID returned by list_accounts, kept as a decimal string.", {
|
|
7
|
+
pattern: "^[0-9]+$",
|
|
8
|
+
});
|
|
9
|
+
const date = s.string("Date in YYYY-MM-DD format in the market timezone.", { format: "date" });
|
|
10
|
+
const snapshot = s.looseObject("Market snapshot with additional category-specific fields.", {
|
|
11
|
+
code: symbol,
|
|
12
|
+
last_price: s.number("Latest traded price."),
|
|
13
|
+
update_time: s.integer("Quote update timestamp in milliseconds."),
|
|
14
|
+
volume: s.number("Trading volume in shares or contracts."),
|
|
15
|
+
});
|
|
16
|
+
const bar = s.looseObject("Historical candlestick with additional provider fields.", {
|
|
17
|
+
time_key: s.integer("Candlestick timestamp in milliseconds."),
|
|
18
|
+
open: s.number("Opening price."),
|
|
19
|
+
close: s.number("Closing price."),
|
|
20
|
+
high: s.number("Highest price."),
|
|
21
|
+
low: s.number("Lowest price."),
|
|
22
|
+
volume: s.number("Trading volume before applying volumePrecision."),
|
|
23
|
+
});
|
|
24
|
+
const tradingDay = s.looseObject("Trading day and session details.", {
|
|
25
|
+
time: date,
|
|
26
|
+
trade_date_type: s.string("Session type, such as WHOLE or MORNING."),
|
|
27
|
+
trade_second: s.integer("Total trading seconds in the session."),
|
|
28
|
+
});
|
|
29
|
+
const position = s.looseObject("Position details with additional provider fields.", {
|
|
30
|
+
code: symbol,
|
|
31
|
+
stock_name: s.string("Security name."),
|
|
32
|
+
qty: s.string("Position quantity as a decimal string."),
|
|
33
|
+
cost_price: s.string("Position cost price as a decimal string."),
|
|
34
|
+
cost_price_valid: s.boolean("Whether the cost price is valid."),
|
|
35
|
+
pl_val: s.string("Profit or loss as a decimal string."),
|
|
36
|
+
pl_val_valid: s.boolean("Whether the profit or loss value is valid."),
|
|
37
|
+
});
|
|
38
|
+
const quoteScope = ["quote:read"];
|
|
39
|
+
const tradeScope = ["trade:read"];
|
|
40
|
+
export const futunnActions = [
|
|
41
|
+
...futunnResearchActions,
|
|
42
|
+
...futunnTradingActions,
|
|
43
|
+
defineProviderAction("futunn", {
|
|
44
|
+
name: "get_market_snapshot",
|
|
45
|
+
operationType: "read",
|
|
46
|
+
description: "Get real-time market snapshots and valuation metrics for up to 400 securities.",
|
|
47
|
+
requiredScopes: quoteScope,
|
|
48
|
+
inputSchema: s.requiredObject("Securities to query.", {
|
|
49
|
+
symbols: s.array("Security codes to query.", symbol, { minItems: 1, maxItems: 400 }),
|
|
50
|
+
}),
|
|
51
|
+
outputSchema: s.requiredObject("Market snapshot results.", {
|
|
52
|
+
snapshots: s.array("Market snapshots with prices, volume, valuation and category-specific fields.", snapshot),
|
|
53
|
+
}),
|
|
54
|
+
}),
|
|
55
|
+
defineProviderAction("futunn", {
|
|
56
|
+
name: "get_history_kline",
|
|
57
|
+
operationType: "read",
|
|
58
|
+
description: "Get a page of historical candlesticks, retaining the next-page timestamp and volume precision.",
|
|
59
|
+
requiredScopes: quoteScope,
|
|
60
|
+
inputSchema: s.object("Historical candlestick query.", {
|
|
61
|
+
symbol,
|
|
62
|
+
start: date,
|
|
63
|
+
end: s.nonEmptyString("End date in YYYY-MM-DD format, or the previous nextTime converted to a string for pagination."),
|
|
64
|
+
ktype: s.withEnum(s.integer("Candlestick interval: 1=1min, 2=day, 3=week, 4=month, 5=year, 6=5min, 7=15min, 8=30min, 9=60min. Default 2."), [1, 2, 3, 4, 5, 6, 7, 8, 9]),
|
|
65
|
+
autype: s.withEnum(s.integer("Price adjustment: 0=none, 1=forward (default), 2=backward."), [0, 1, 2]),
|
|
66
|
+
num: s.integer("Number of bars requested; default and maximum 370.", {
|
|
67
|
+
minimum: 1,
|
|
68
|
+
maximum: 370,
|
|
69
|
+
}),
|
|
70
|
+
extendedTime: s.withEnum(s.integer("Extended session: 0=default, 1=US pre/after market, 2=US overnight."), [0, 1, 2]),
|
|
71
|
+
}, { optional: ["start", "ktype", "autype", "num", "extendedTime"] }),
|
|
72
|
+
outputSchema: s.requiredObject("Historical candlesticks and pagination metadata.", {
|
|
73
|
+
bars: s.array("Historical candlesticks in upstream order.", bar),
|
|
74
|
+
nextTime: s.nullable(s.integer("Next page end timestamp in milliseconds, or null when absent.")),
|
|
75
|
+
volumePrecision: s.nullable(s.integer("Divide bar volumes by 10 to this power; null when the provider omits precision.")),
|
|
76
|
+
}),
|
|
77
|
+
}),
|
|
78
|
+
defineProviderAction("futunn", {
|
|
79
|
+
name: "list_trading_days",
|
|
80
|
+
operationType: "read",
|
|
81
|
+
description: "List trading days for a market within an inclusive date range.",
|
|
82
|
+
requiredScopes: quoteScope,
|
|
83
|
+
inputSchema: s.requiredObject("Market and date range.", {
|
|
84
|
+
market: s.stringEnum("Market to query.", [
|
|
85
|
+
"HK",
|
|
86
|
+
"US",
|
|
87
|
+
"SH",
|
|
88
|
+
"SZ",
|
|
89
|
+
"BJ",
|
|
90
|
+
"SG",
|
|
91
|
+
"JP",
|
|
92
|
+
"KR",
|
|
93
|
+
"CA",
|
|
94
|
+
"AU",
|
|
95
|
+
"JP_FUTURE",
|
|
96
|
+
"SG_FUTURE",
|
|
97
|
+
]),
|
|
98
|
+
start: date,
|
|
99
|
+
end: date,
|
|
100
|
+
}),
|
|
101
|
+
outputSchema: s.requiredObject("Trading calendar results.", {
|
|
102
|
+
tradingDays: s.array("Trading dates with session type and trading seconds.", tradingDay),
|
|
103
|
+
}),
|
|
104
|
+
}),
|
|
105
|
+
defineProviderAction("futunn", {
|
|
106
|
+
name: "list_accounts",
|
|
107
|
+
operationType: "read",
|
|
108
|
+
description: "List trading accounts authorized by the connected user.",
|
|
109
|
+
requiredScopes: tradeScope,
|
|
110
|
+
inputSchema: s.requiredObject("Authorized account query.", {}),
|
|
111
|
+
outputSchema: s.requiredObject("Authorized trading accounts.", {
|
|
112
|
+
accounts: s.array("Authorized accounts; numeric account_id values are returned as lossless decimal strings.", s.looseObject("Authorized account details.", {
|
|
113
|
+
account_id: s.string("Trading account ID as a lossless decimal string."),
|
|
114
|
+
security_firm: s.string("Broker identifier."),
|
|
115
|
+
acc_type: s.string("Account type, such as cash or margin."),
|
|
116
|
+
})),
|
|
117
|
+
}),
|
|
118
|
+
}),
|
|
119
|
+
defineProviderAction("futunn", {
|
|
120
|
+
name: "get_account_funds",
|
|
121
|
+
operationType: "read",
|
|
122
|
+
description: "Get account assets, cash, buying power and margin balances in the requested currency.",
|
|
123
|
+
requiredScopes: tradeScope,
|
|
124
|
+
inputSchema: s.requiredObject("Account funds query.", {
|
|
125
|
+
accountId,
|
|
126
|
+
currency: s.nonEmptyString("Display currency, for example USD or HKD; ignored by account types that do not support conversion."),
|
|
127
|
+
}),
|
|
128
|
+
outputSchema: s.requiredObject("Account fund balances.", {
|
|
129
|
+
funds: s.looseObject("Account balances; monetary amounts retain upstream decimal strings.", {
|
|
130
|
+
total_assets: s.string("Total net assets."),
|
|
131
|
+
cash: s.string("Cash balance."),
|
|
132
|
+
power: s.string("Maximum buying power."),
|
|
133
|
+
currency: s.string("Display currency."),
|
|
134
|
+
}),
|
|
135
|
+
}),
|
|
136
|
+
}),
|
|
137
|
+
defineProviderAction("futunn", {
|
|
138
|
+
name: "list_positions",
|
|
139
|
+
operationType: "read",
|
|
140
|
+
description: "List account positions, optionally filtered by security code and profit/loss ratio.",
|
|
141
|
+
requiredScopes: tradeScope,
|
|
142
|
+
inputSchema: s.object("Account position query.", {
|
|
143
|
+
accountId,
|
|
144
|
+
code: symbol,
|
|
145
|
+
plRatioMin: s.string("Minimum profit/loss percentage as a decimal string, for example 10."),
|
|
146
|
+
plRatioMax: s.string("Maximum profit/loss percentage as a decimal string, for example 20."),
|
|
147
|
+
}, { optional: ["code", "plRatioMin", "plRatioMax"] }),
|
|
148
|
+
outputSchema: s.requiredObject("Account position results.", {
|
|
149
|
+
positions: s.array("Positions with upstream quantities, prices and profit/loss decimal strings.", position),
|
|
150
|
+
}),
|
|
151
|
+
}),
|
|
152
|
+
];
|