@oomol-lab/open-connector 1.9.1 → 1.9.2
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/assets/open-connector/catalog/apps/aisa.json +1946 -56
- package/assets/open-connector/catalog/apps/akta.json +1181 -0
- package/assets/open-connector/catalog/apps/asana.json +110 -0
- package/assets/open-connector/catalog/apps/calendly.json +103 -0
- package/assets/open-connector/catalog/apps/clickup.json +104 -0
- package/assets/open-connector/catalog/apps/cloro.json +9289 -0
- package/assets/open-connector/catalog/apps/contextdev.json +20670 -0
- package/assets/open-connector/catalog/apps/deepseek.json +177 -0
- package/assets/open-connector/catalog/apps/defillama.json +23747 -0
- package/assets/open-connector/catalog/apps/fireflies.json +103 -0
- package/assets/open-connector/catalog/apps/fundable.json +7926 -0
- package/assets/open-connector/catalog/apps/intercom.json +110 -0
- package/assets/open-connector/catalog/apps/jira.json +110 -0
- package/assets/open-connector/catalog/apps/keenable.json +235 -0
- package/assets/open-connector/catalog/apps/kolsprite_mcp.json +1227 -0
- package/assets/open-connector/catalog/apps/litescrape.json +52514 -0
- package/assets/open-connector/catalog/apps/magichour.json +5926 -0
- package/assets/open-connector/catalog/apps/minimax.json +24 -14
- package/assets/open-connector/catalog/apps/notion.json +731 -76
- package/assets/open-connector/catalog/apps/octen.json +5248 -0
- package/assets/open-connector/catalog/apps/openrouter.json +10 -0
- package/assets/open-connector/catalog/apps/orbit.json +3574 -0
- package/assets/open-connector/catalog/apps/pandadoc.json +68 -0
- package/assets/open-connector/catalog/apps/pipedrive.json +86 -0
- package/assets/open-connector/catalog/apps/ploid.json +9802 -0
- package/assets/open-connector/catalog/apps/resend.json +100 -0
- package/assets/open-connector/catalog/apps/salesforce.json +2487 -119
- package/assets/open-connector/catalog/apps/saperly.json +7056 -0
- package/assets/open-connector/catalog/apps/search1api.json +2382 -0
- package/assets/open-connector/catalog/apps/sentry.json +129 -0
- package/assets/open-connector/catalog/apps/slackbot.json +230 -1
- package/assets/open-connector/catalog/apps/surf.json +11378 -0
- package/assets/open-connector/catalog/apps/tally.json +113 -0
- package/assets/open-connector/catalog/apps/tinyfish.json +6154 -0
- package/assets/open-connector/catalog/apps/typeform.json +90 -1
- package/assets/open-connector/catalog/apps/vaquill.json +5944 -0
- package/assets/open-connector/catalog/apps/vercel.json +110 -0
- package/assets/open-connector/catalog/apps/weixin_store.json +1256 -7
- package/assets/open-connector/catalog/apps/zoom.json +112 -0
- package/assets/open-connector/catalog/apps-index.json +1 -1
- package/package.json +1 -1
- package/src/core/json-schema.d.ts +11 -3
- package/src/core/json-schema.js +13 -3
- package/src/providers/action-contracts.generated.d.ts +23 -6
- package/src/providers/aisa/executors.js +238 -6
- package/src/providers/aisa/firecrawl-actions.d.ts +9 -0
- package/src/providers/aisa/firecrawl-actions.js +115 -0
- package/src/providers/akta/actions.d.ts +9 -0
- package/src/providers/akta/actions.js +420 -0
- package/src/providers/akta/executors.d.ts +4 -0
- package/src/providers/akta/executors.js +103 -0
- package/src/providers/asana/executors.d.ts +2 -0
- package/src/providers/asana/executors.js +2 -0
- package/src/providers/asana/trigger-on-task-event.d.ts +2 -0
- package/src/providers/asana/trigger-on-task-event.definition.d.ts +4 -0
- package/src/providers/asana/trigger-on-task-event.definition.js +42 -0
- package/src/providers/asana/trigger-on-task-event.js +160 -0
- package/src/providers/calendly/executors.d.ts +2 -0
- package/src/providers/calendly/executors.js +2 -0
- package/src/providers/calendly/trigger-on-booking-event.d.ts +2 -0
- package/src/providers/calendly/trigger-on-booking-event.definition.d.ts +5 -0
- package/src/providers/calendly/trigger-on-booking-event.definition.js +42 -0
- package/src/providers/calendly/trigger-on-booking-event.js +144 -0
- package/src/providers/clickup/executors.d.ts +2 -0
- package/src/providers/clickup/executors.js +2 -0
- package/src/providers/clickup/trigger-on-task-event.d.ts +2 -0
- package/src/providers/clickup/trigger-on-task-event.definition.d.ts +4 -0
- package/src/providers/clickup/trigger-on-task-event.definition.js +41 -0
- package/src/providers/clickup/trigger-on-task-event.js +94 -0
- package/src/providers/cloro/actions.d.ts +12 -0
- package/src/providers/cloro/actions.js +155 -0
- package/src/providers/cloro/executors.d.ts +4 -0
- package/src/providers/cloro/executors.js +67 -0
- package/src/providers/cloro/inputs.d.ts +10 -0
- package/src/providers/cloro/inputs.js +680 -0
- package/src/providers/contextdev/actions.d.ts +14 -0
- package/src/providers/contextdev/actions.js +647 -0
- package/src/providers/contextdev/executors.d.ts +4 -0
- package/src/providers/contextdev/executors.js +109 -0
- package/src/providers/contextdev/files.d.ts +3 -0
- package/src/providers/contextdev/files.js +49 -0
- package/src/providers/contextdev/input-schemas.d.ts +49 -0
- package/src/providers/contextdev/input-schemas.js +3082 -0
- package/src/providers/contextdev/output-schemas.d.ts +49 -0
- package/src/providers/contextdev/output-schemas.js +1599 -0
- package/src/providers/deepseek/executors.d.ts +0 -5
- package/src/providers/deepseek/executors.js +38 -25
- package/src/providers/defillama/actions.d.ts +24 -0
- package/src/providers/defillama/actions.js +24 -0
- package/src/providers/defillama/dimensions-definitions.d.ts +2 -0
- package/src/providers/defillama/dimensions-definitions.js +1387 -0
- package/src/providers/defillama/ecosystem-definitions.d.ts +2 -0
- package/src/providers/defillama/ecosystem-definitions.js +758 -0
- package/src/providers/defillama/equities-definitions.d.ts +2 -0
- package/src/providers/defillama/equities-definitions.js +733 -0
- package/src/providers/defillama/executors.d.ts +4 -0
- package/src/providers/defillama/executors.js +196 -0
- package/src/providers/defillama/markets-definitions.d.ts +2 -0
- package/src/providers/defillama/markets-definitions.js +624 -0
- package/src/providers/defillama/shared-schemas.d.ts +71 -0
- package/src/providers/defillama/shared-schemas.js +157 -0
- package/src/providers/defillama/tvl-definitions.d.ts +2 -0
- package/src/providers/defillama/tvl-definitions.js +546 -0
- package/src/providers/defillama/yields-definitions.d.ts +2 -0
- package/src/providers/defillama/yields-definitions.js +766 -0
- package/src/providers/feishu_app_bot/trigger-on-event.js +2 -0
- package/src/providers/fireflies/executors.d.ts +2 -0
- package/src/providers/fireflies/executors.js +2 -0
- package/src/providers/fireflies/trigger-on-meeting-ready.d.ts +2 -0
- package/src/providers/fireflies/trigger-on-meeting-ready.definition.d.ts +4 -0
- package/src/providers/fireflies/trigger-on-meeting-ready.definition.js +44 -0
- package/src/providers/fireflies/trigger-on-meeting-ready.js +60 -0
- package/src/providers/fundable/actions.d.ts +8 -0
- package/src/providers/fundable/actions.js +1515 -0
- package/src/providers/fundable/executors.d.ts +4 -0
- package/src/providers/fundable/executors.js +74 -0
- package/src/providers/gmail/message.d.ts +1 -6
- package/src/providers/gmail/message.js +1 -1
- package/src/providers/intercom/executors.d.ts +2 -0
- package/src/providers/intercom/executors.js +2 -0
- package/src/providers/intercom/trigger-on-conversation-event.d.ts +2 -0
- package/src/providers/intercom/trigger-on-conversation-event.definition.d.ts +4 -0
- package/src/providers/intercom/trigger-on-conversation-event.definition.js +42 -0
- package/src/providers/intercom/trigger-on-conversation-event.js +23 -0
- package/src/providers/jira/executors.d.ts +2 -0
- package/src/providers/jira/executors.js +2 -0
- package/src/providers/jira/trigger-on-issue-event.d.ts +2 -0
- package/src/providers/jira/trigger-on-issue-event.definition.d.ts +4 -0
- package/src/providers/jira/trigger-on-issue-event.definition.js +44 -0
- package/src/providers/jira/trigger-on-issue-event.js +116 -0
- package/src/providers/jira/trigger-resource.d.ts +4 -0
- package/src/providers/jira/trigger-resource.js +141 -0
- package/src/providers/keenable/executors.d.ts +4 -0
- package/src/providers/keenable/executors.js +20 -0
- package/src/providers/keenable/runtime.d.ts +26 -0
- package/src/providers/keenable/runtime.js +89 -0
- package/src/providers/kolsprite_mcp/actions.d.ts +2 -0
- package/src/providers/kolsprite_mcp/actions.js +519 -0
- package/src/providers/kolsprite_mcp/executors.d.ts +4 -0
- package/src/providers/kolsprite_mcp/executors.js +89 -0
- package/src/providers/litescrape/actions.d.ts +12 -0
- package/src/providers/litescrape/actions.js +124 -0
- package/src/providers/litescrape/airbnb-schemas.d.ts +2 -0
- package/src/providers/litescrape/airbnb-schemas.js +72 -0
- package/src/providers/litescrape/aliexpress-schemas.d.ts +2 -0
- package/src/providers/litescrape/aliexpress-schemas.js +52 -0
- package/src/providers/litescrape/amazon-schemas.d.ts +2 -0
- package/src/providers/litescrape/amazon-schemas.js +358 -0
- package/src/providers/litescrape/apartments-schemas.d.ts +2 -0
- package/src/providers/litescrape/apartments-schemas.js +45 -0
- package/src/providers/litescrape/apple-schemas.d.ts +2 -0
- package/src/providers/litescrape/apple-schemas.js +215 -0
- package/src/providers/litescrape/ashby-schemas.d.ts +2 -0
- package/src/providers/litescrape/ashby-schemas.js +82 -0
- package/src/providers/litescrape/baidu-schemas.d.ts +2 -0
- package/src/providers/litescrape/baidu-schemas.js +31 -0
- package/src/providers/litescrape/bestbuy-schemas.d.ts +2 -0
- package/src/providers/litescrape/bestbuy-schemas.js +56 -0
- package/src/providers/litescrape/bing-schemas.d.ts +2 -0
- package/src/providers/litescrape/bing-schemas.js +315 -0
- package/src/providers/litescrape/brave-schemas.d.ts +2 -0
- package/src/providers/litescrape/brave-schemas.js +101 -0
- package/src/providers/litescrape/copilot-schemas.d.ts +2 -0
- package/src/providers/litescrape/copilot-schemas.js +590 -0
- package/src/providers/litescrape/duckduckgo-schemas.d.ts +2 -0
- package/src/providers/litescrape/duckduckgo-schemas.js +64 -0
- package/src/providers/litescrape/ebay-schemas.d.ts +2 -0
- package/src/providers/litescrape/ebay-schemas.js +300 -0
- package/src/providers/litescrape/etsy-schemas.d.ts +2 -0
- package/src/providers/litescrape/etsy-schemas.js +52 -0
- package/src/providers/litescrape/eventbrite-schemas.d.ts +2 -0
- package/src/providers/litescrape/eventbrite-schemas.js +43 -0
- package/src/providers/litescrape/executors.d.ts +4 -0
- package/src/providers/litescrape/executors.js +138 -0
- package/src/providers/litescrape/facebook-schemas.d.ts +2 -0
- package/src/providers/litescrape/facebook-schemas.js +283 -0
- package/src/providers/litescrape/glassdoor-schemas.d.ts +2 -0
- package/src/providers/litescrape/glassdoor-schemas.js +147 -0
- package/src/providers/litescrape/google-schemas.d.ts +2 -0
- package/src/providers/litescrape/google-schemas.js +1686 -0
- package/src/providers/litescrape/homedepot-schemas.d.ts +2 -0
- package/src/providers/litescrape/homedepot-schemas.js +58 -0
- package/src/providers/litescrape/homes-schemas.d.ts +2 -0
- package/src/providers/litescrape/homes-schemas.js +45 -0
- package/src/providers/litescrape/ikea-schemas.d.ts +2 -0
- package/src/providers/litescrape/ikea-schemas.js +56 -0
- package/src/providers/litescrape/indeed-schemas.d.ts +2 -0
- package/src/providers/litescrape/indeed-schemas.js +141 -0
- package/src/providers/litescrape/instagram-schemas.d.ts +2 -0
- package/src/providers/litescrape/instagram-schemas.js +234 -0
- package/src/providers/litescrape/kroger-schemas.d.ts +2 -0
- package/src/providers/litescrape/kroger-schemas.js +62 -0
- package/src/providers/litescrape/levels-schemas.d.ts +2 -0
- package/src/providers/litescrape/levels-schemas.js +153 -0
- package/src/providers/litescrape/naver-schemas.d.ts +2 -0
- package/src/providers/litescrape/naver-schemas.js +107 -0
- package/src/providers/litescrape/realtor-schemas.d.ts +2 -0
- package/src/providers/litescrape/realtor-schemas.js +47 -0
- package/src/providers/litescrape/redfin-schemas.d.ts +2 -0
- package/src/providers/litescrape/redfin-schemas.js +112 -0
- package/src/providers/litescrape/shared.d.ts +9 -0
- package/src/providers/litescrape/shared.js +1 -0
- package/src/providers/litescrape/sprouts-schemas.d.ts +2 -0
- package/src/providers/litescrape/sprouts-schemas.js +72 -0
- package/src/providers/litescrape/target-schemas.d.ts +2 -0
- package/src/providers/litescrape/target-schemas.js +56 -0
- package/src/providers/litescrape/tiktok-schemas.d.ts +2 -0
- package/src/providers/litescrape/tiktok-schemas.js +625 -0
- package/src/providers/litescrape/tools.d.ts +2 -0
- package/src/providers/litescrape/tools.js +88 -0
- package/src/providers/litescrape/tripadvisor-schemas.d.ts +2 -0
- package/src/providers/litescrape/tripadvisor-schemas.js +119 -0
- package/src/providers/litescrape/walmart-schemas.d.ts +2 -0
- package/src/providers/litescrape/walmart-schemas.js +52 -0
- package/src/providers/litescrape/wayfair-schemas.d.ts +2 -0
- package/src/providers/litescrape/wayfair-schemas.js +52 -0
- package/src/providers/litescrape/web-schemas.d.ts +2 -0
- package/src/providers/litescrape/web-schemas.js +463 -0
- package/src/providers/litescrape/wholefoods-schemas.d.ts +2 -0
- package/src/providers/litescrape/wholefoods-schemas.js +56 -0
- package/src/providers/litescrape/x-schemas.d.ts +2 -0
- package/src/providers/litescrape/x-schemas.js +128 -0
- package/src/providers/litescrape/yahoo-schemas.d.ts +2 -0
- package/src/providers/litescrape/yahoo-schemas.js +234 -0
- package/src/providers/litescrape/yandex-schemas.d.ts +2 -0
- package/src/providers/litescrape/yandex-schemas.js +179 -0
- package/src/providers/litescrape/yelp-schemas.d.ts +2 -0
- package/src/providers/litescrape/yelp-schemas.js +130 -0
- package/src/providers/litescrape/youtube-schemas.d.ts +2 -0
- package/src/providers/litescrape/youtube-schemas.js +128 -0
- package/src/providers/litescrape/zillow-schemas.d.ts +2 -0
- package/src/providers/litescrape/zillow-schemas.js +128 -0
- package/src/providers/litescrape/ziprecruiter-schemas.d.ts +2 -0
- package/src/providers/litescrape/ziprecruiter-schemas.js +96 -0
- package/src/providers/magichour/actions.d.ts +22 -0
- package/src/providers/magichour/actions.js +308 -0
- package/src/providers/magichour/audio-schemas.d.ts +2 -0
- package/src/providers/magichour/audio-schemas.js +54 -0
- package/src/providers/magichour/executors.d.ts +4 -0
- package/src/providers/magichour/executors.js +115 -0
- package/src/providers/magichour/image-schemas.d.ts +2 -0
- package/src/providers/magichour/image-schemas.js +443 -0
- package/src/providers/magichour/project-schemas.d.ts +8 -0
- package/src/providers/magichour/project-schemas.js +65 -0
- package/src/providers/magichour/shared-schemas.d.ts +8 -0
- package/src/providers/magichour/shared-schemas.js +18 -0
- package/src/providers/magichour/utility-schemas.d.ts +11 -0
- package/src/providers/magichour/utility-schemas.js +150 -0
- package/src/providers/magichour/video-schemas.d.ts +2 -0
- package/src/providers/magichour/video-schemas.js +629 -0
- package/src/providers/magichour/voices.d.ts +1 -0
- package/src/providers/magichour/voices.js +1268 -0
- package/src/providers/minimax/executors.js +19 -4
- package/src/providers/minimax/text-models.d.ts +2 -0
- package/src/providers/minimax/text-models.js +34 -0
- package/src/providers/moneyforward_mcp/manifest.d.ts +0 -2
- package/src/providers/moneyforward_mcp/manifest.js +1 -1
- package/src/providers/notion/executors.js +36 -3
- package/src/providers/octen/actions.d.ts +6 -0
- package/src/providers/octen/actions.js +919 -0
- package/src/providers/octen/executors.d.ts +4 -0
- package/src/providers/octen/executors.js +125 -0
- package/src/providers/octen/inputs.d.ts +2 -0
- package/src/providers/octen/inputs.js +2434 -0
- package/src/providers/octen/research.d.ts +1 -0
- package/src/providers/octen/research.js +86 -0
- package/src/providers/openrouter/executors.js +7 -4
- package/src/providers/orbit/actions.d.ts +2 -0
- package/src/providers/orbit/actions.js +3030 -0
- package/src/providers/orbit/executors.d.ts +4 -0
- package/src/providers/orbit/executors.js +106 -0
- package/src/providers/orbit/routes.d.ts +9 -0
- package/src/providers/orbit/routes.js +170 -0
- package/src/providers/pandadoc/executors.d.ts +2 -0
- package/src/providers/pandadoc/executors.js +2 -0
- package/src/providers/pandadoc/trigger-on-document-event.d.ts +2 -0
- package/src/providers/pandadoc/trigger-on-document-event.definition.d.ts +4 -0
- package/src/providers/pandadoc/trigger-on-document-event.definition.js +33 -0
- package/src/providers/pandadoc/trigger-on-document-event.js +96 -0
- package/src/providers/pipedrive/executors.d.ts +2 -0
- package/src/providers/pipedrive/executors.js +2 -0
- package/src/providers/pipedrive/trigger-on-crm-event.d.ts +2 -0
- package/src/providers/pipedrive/trigger-on-crm-event.definition.d.ts +4 -0
- package/src/providers/pipedrive/trigger-on-crm-event.definition.js +30 -0
- package/src/providers/pipedrive/trigger-on-crm-event.js +101 -0
- package/src/providers/ploid/actions.d.ts +16 -0
- package/src/providers/ploid/actions.js +23 -0
- package/src/providers/ploid/endpoints.json +8440 -0
- package/src/providers/ploid/executors.d.ts +4 -0
- package/src/providers/ploid/executors.js +119 -0
- package/src/providers/provider-runtime.d.ts +13 -0
- package/src/providers/provider-runtime.js +37 -4
- package/src/providers/registry.generated.js +17 -0
- package/src/providers/resend/executors.d.ts +2 -0
- package/src/providers/resend/executors.js +2 -0
- package/src/providers/resend/trigger-on-email-event.d.ts +2 -0
- package/src/providers/resend/trigger-on-email-event.definition.d.ts +4 -0
- package/src/providers/resend/trigger-on-email-event.definition.js +37 -0
- package/src/providers/resend/trigger-on-email-event.js +125 -0
- package/src/providers/salesforce/chatter-routes.d.ts +107 -0
- package/src/providers/salesforce/chatter-routes.js +140 -0
- package/src/providers/salesforce/context.d.ts +2 -2
- package/src/providers/salesforce/context.js +7 -4
- package/src/providers/salesforce/executors.js +10 -0
- package/src/providers/salesforce/runtime-approvals.d.ts +2 -0
- package/src/providers/salesforce/runtime-approvals.js +52 -0
- package/src/providers/salesforce/runtime-base.js +14 -3
- package/src/providers/salesforce/runtime-chatter.d.ts +2 -0
- package/src/providers/salesforce/runtime-chatter.js +78 -0
- package/src/providers/salesforce/runtime-knowledge.d.ts +2 -0
- package/src/providers/salesforce/runtime-knowledge.js +34 -0
- package/src/providers/salesforce/runtime-leads.d.ts +2 -0
- package/src/providers/salesforce/runtime-leads.js +117 -0
- package/src/providers/salesforce/runtime-platform.d.ts +2 -0
- package/src/providers/salesforce/runtime-platform.js +67 -0
- package/src/providers/saperly/actions.d.ts +17 -0
- package/src/providers/saperly/actions.js +869 -0
- package/src/providers/saperly/executors.d.ts +4 -0
- package/src/providers/saperly/executors.js +113 -0
- package/src/providers/saperly/schemas.d.ts +33 -0
- package/src/providers/saperly/schemas.js +601 -0
- package/src/providers/search1api/actions.d.ts +2 -0
- package/src/providers/search1api/actions.js +39 -0
- package/src/providers/search1api/executors.d.ts +4 -0
- package/src/providers/search1api/executors.js +72 -0
- package/src/providers/search1api/runtime.d.ts +3 -0
- package/src/providers/search1api/runtime.js +44 -0
- package/src/providers/search1api/schemas.d.ts +3 -0
- package/src/providers/search1api/schemas.js +1834 -0
- package/src/providers/sentry/executors.d.ts +2 -0
- package/src/providers/sentry/executors.js +2 -0
- package/src/providers/sentry/trigger-on-issue-alert.d.ts +2 -0
- package/src/providers/sentry/trigger-on-issue-alert.definition.d.ts +4 -0
- package/src/providers/sentry/trigger-on-issue-alert.definition.js +64 -0
- package/src/providers/sentry/trigger-on-issue-alert.js +80 -0
- package/src/providers/sf_express/runtime.d.ts +0 -16
- package/src/providers/sf_express/runtime.js +2 -2
- package/src/providers/slack/runtime.d.ts +6 -1
- package/src/providers/slack/runtime.js +21 -0
- package/src/providers/slackbot/actions.js +17 -1
- package/src/providers/slackbot/executors.d.ts +2 -0
- package/src/providers/slackbot/executors.js +5 -1
- package/src/providers/slackbot/trigger-on-event.d.ts +2 -0
- package/src/providers/slackbot/trigger-on-event.definition.d.ts +4 -0
- package/src/providers/slackbot/trigger-on-event.definition.js +57 -0
- package/src/providers/slackbot/trigger-on-event.js +23 -0
- package/src/providers/surf/actions.d.ts +21 -0
- package/src/providers/surf/actions.js +26 -0
- package/src/providers/surf/discovery-definitions.d.ts +2 -0
- package/src/providers/surf/discovery-definitions.js +871 -0
- package/src/providers/surf/equity-definitions.d.ts +2 -0
- package/src/providers/surf/equity-definitions.js +322 -0
- package/src/providers/surf/executors.d.ts +4 -0
- package/src/providers/surf/executors.js +131 -0
- package/src/providers/surf/market-definitions.d.ts +2 -0
- package/src/providers/surf/market-definitions.js +885 -0
- package/src/providers/surf/onchain-definitions.d.ts +2 -0
- package/src/providers/surf/onchain-definitions.js +901 -0
- package/src/providers/surf/prediction-definitions.d.ts +2 -0
- package/src/providers/surf/prediction-definitions.js +683 -0
- package/src/providers/surf/shared-schemas.d.ts +18 -0
- package/src/providers/surf/shared-schemas.js +37 -0
- package/src/providers/tally/executors.d.ts +2 -0
- package/src/providers/tally/executors.js +2 -0
- package/src/providers/tally/trigger-on-form-response.d.ts +2 -0
- package/src/providers/tally/trigger-on-form-response.definition.d.ts +4 -0
- package/src/providers/tally/trigger-on-form-response.definition.js +54 -0
- package/src/providers/tally/trigger-on-form-response.js +166 -0
- package/src/providers/tinyfish/actions.d.ts +6 -0
- package/src/providers/tinyfish/actions.js +19 -0
- package/src/providers/tinyfish/agent-actions.d.ts +2 -0
- package/src/providers/tinyfish/agent-actions.js +268 -0
- package/src/providers/tinyfish/data-actions.d.ts +2 -0
- package/src/providers/tinyfish/data-actions.js +186 -0
- package/src/providers/tinyfish/data-schemas.d.ts +7 -0
- package/src/providers/tinyfish/data-schemas.js +103 -0
- package/src/providers/tinyfish/endpoints.d.ts +14 -0
- package/src/providers/tinyfish/endpoints.js +1 -0
- package/src/providers/tinyfish/executors.d.ts +4 -0
- package/src/providers/tinyfish/executors.js +133 -0
- package/src/providers/tinyfish/management-actions.d.ts +2 -0
- package/src/providers/tinyfish/management-actions.js +524 -0
- package/src/providers/tinyfish/monitor-schemas.d.ts +5 -0
- package/src/providers/tinyfish/monitor-schemas.js +65 -0
- package/src/providers/tinyfish/research-schemas.d.ts +6 -0
- package/src/providers/tinyfish/research-schemas.js +71 -0
- package/src/providers/trello/executors.js +5 -2
- package/src/providers/typeform/executors.d.ts +2 -0
- package/src/providers/typeform/executors.js +2 -0
- package/src/providers/typeform/trigger-on-form-response.d.ts +2 -0
- package/src/providers/typeform/trigger-on-form-response.definition.d.ts +4 -0
- package/src/providers/typeform/trigger-on-form-response.definition.js +40 -0
- package/src/providers/typeform/trigger-on-form-response.js +68 -0
- package/src/providers/vaquill/actions.d.ts +13 -0
- package/src/providers/vaquill/actions.js +529 -0
- package/src/providers/vaquill/executors.d.ts +4 -0
- package/src/providers/vaquill/executors.js +141 -0
- package/src/providers/vaquill/schemas.d.ts +67 -0
- package/src/providers/vaquill/schemas.js +4953 -0
- package/src/providers/vercel/executors.d.ts +2 -0
- package/src/providers/vercel/executors.js +2 -0
- package/src/providers/vercel/trigger-on-deployment-event.d.ts +2 -0
- package/src/providers/vercel/trigger-on-deployment-event.definition.d.ts +5 -0
- package/src/providers/vercel/trigger-on-deployment-event.definition.js +41 -0
- package/src/providers/vercel/trigger-on-deployment-event.js +102 -0
- package/src/providers/weixin_bot/runtime.d.ts +0 -1
- package/src/providers/weixin_bot/runtime.js +1 -1
- package/src/providers/weixin_store/access-token.d.ts +3 -3
- package/src/providers/weixin_store/access-token.js +15 -7
- package/src/providers/weixin_store/executors.js +214 -1
- package/src/providers/zoom/executors.d.ts +2 -0
- package/src/providers/zoom/executors.js +2 -0
- package/src/providers/zoom/trigger-on-recording-ready.d.ts +2 -0
- package/src/providers/zoom/trigger-on-recording-ready.definition.d.ts +4 -0
- package/src/providers/zoom/trigger-on-recording-ready.definition.js +44 -0
- package/src/providers/zoom/trigger-on-recording-ready.js +39 -0
- package/src/server/api/action-example.js +12 -1
- package/src/server/api/pattern-example.js +35 -1
- package/src/server/api/trigger-routes.js +1 -1
- package/src/server/connect-app.js +1 -0
- package/src/triggers/common/integration.d.ts +15 -3
- package/src/triggers/common/integration.js +5 -0
- package/src/triggers/common/proxy.d.ts +7 -0
- package/src/triggers/managed-webhook.d.ts +13 -0
- package/src/triggers/managed-webhook.js +48 -0
- package/src/triggers/request.d.ts +5 -1
- package/src/triggers/request.js +2 -0
- package/src/triggers/resources.d.ts +8 -2
- package/src/triggers/resources.js +31 -0
- package/src/triggers/signature.d.ts +3 -3
- package/src/triggers/signature.js +4 -6
- package/src/triggers/sources/configuration-schema.d.ts +5 -0
- package/src/triggers/sources/configuration-schema.js +118 -0
- package/src/triggers/sources/configuration.d.ts +115 -0
- package/src/triggers/sources/configuration.js +1 -0
- package/src/triggers/sources/definition.d.ts +61 -0
- package/src/triggers/sources/definition.js +3 -0
- package/src/triggers/sources/feishu-demands.d.ts +6 -0
- package/src/triggers/sources/feishu-demands.js +24 -0
- package/src/triggers/sources/feishu-events.d.ts +19 -0
- package/src/triggers/sources/feishu-events.js +108 -0
- package/src/triggers/sources/feishu.d.ts +3 -0
- package/src/triggers/sources/feishu.js +85 -0
- package/src/triggers/sources/fireflies.d.ts +3 -0
- package/src/triggers/sources/fireflies.js +100 -0
- package/src/triggers/sources/intercom.d.ts +3 -0
- package/src/triggers/sources/intercom.js +86 -0
- package/src/triggers/sources/jira.d.ts +3 -0
- package/src/triggers/sources/jira.js +120 -0
- package/src/triggers/sources/operation.d.ts +42 -0
- package/src/triggers/sources/operation.js +146 -0
- package/src/triggers/sources/sentry.d.ts +3 -0
- package/src/triggers/sources/sentry.js +125 -0
- package/src/triggers/sources/signature.d.ts +1 -0
- package/src/triggers/sources/signature.js +10 -0
- package/src/triggers/sources/slack.d.ts +3 -0
- package/src/triggers/sources/slack.js +127 -0
- package/src/triggers/sources/zoom.d.ts +3 -0
- package/src/triggers/sources/zoom.js +113 -0
- package/src/triggers/trigger-runner.d.ts +2 -0
- package/src/triggers/trigger-runner.js +52 -16
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
|
|
2
|
+
import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
|
|
2
3
|
export declare const executors: ProviderExecutors;
|
|
3
4
|
export declare const proxy: ProviderProxyExecutor;
|
|
4
5
|
export declare const credentialValidators: CredentialValidators;
|
|
6
|
+
export declare const triggers: readonly IntegrationDefinition[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defineProviderExecutors, defineProviderProxy, requireApiKeyCredential } from "../provider-runtime.js";
|
|
2
2
|
import { readVercelTeamScope, validateVercelCredential, vercelActionHandlers, vercelApiBaseUrl } from "./runtime.js";
|
|
3
|
+
import { vercelDeploymentEvent } from "./trigger-on-deployment-event.js";
|
|
3
4
|
const service = "vercel";
|
|
4
5
|
const vercelProxyUserAgent = "oomol-connector/1.0 (+https://oomol.com)";
|
|
5
6
|
export const executors = defineProviderExecutors({
|
|
@@ -29,3 +30,4 @@ export const credentialValidators = {
|
|
|
29
30
|
return validateVercelCredential(input, fetcher);
|
|
30
31
|
},
|
|
31
32
|
};
|
|
33
|
+
export const triggers = [vercelDeploymentEvent];
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsonSchema as s } from "../../core/json-schema.js";
|
|
2
|
+
export const events = ["deployment.ready", "deployment.error"];
|
|
3
|
+
export const snapshot = {
|
|
4
|
+
key: "vercel.on_deployment_event",
|
|
5
|
+
provider: "vercel",
|
|
6
|
+
name: "on_deployment_event",
|
|
7
|
+
displayName: "Deployment Ready or Failed",
|
|
8
|
+
description: "Receives successful and failed deployments for a Vercel project.",
|
|
9
|
+
definitionVersion: 2,
|
|
10
|
+
type: "integration",
|
|
11
|
+
endpoint: {
|
|
12
|
+
methods: ["POST"],
|
|
13
|
+
body: { formats: ["json"], allowArray: false, allowEmpty: false },
|
|
14
|
+
successStatus: 200,
|
|
15
|
+
},
|
|
16
|
+
configInputs: [
|
|
17
|
+
{
|
|
18
|
+
handle: "teamId",
|
|
19
|
+
jsonSchema: { type: "string", minLength: 1, maxLength: 256, title: "Team ID" },
|
|
20
|
+
nullable: false,
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
handle: "projectId",
|
|
24
|
+
jsonSchema: { type: "string", minLength: 1, maxLength: 256, title: "Project ID" },
|
|
25
|
+
nullable: false,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
handle: "environment",
|
|
29
|
+
jsonSchema: { type: "string", enum: ["all", "production", "preview"], title: "Environment" },
|
|
30
|
+
nullable: false,
|
|
31
|
+
value: "all",
|
|
32
|
+
},
|
|
33
|
+
],
|
|
34
|
+
outputs: [
|
|
35
|
+
{ handle: "event", jsonSchema: { type: "string", enum: events }, nullable: false },
|
|
36
|
+
{ handle: "deliveryId", jsonSchema: s.string(), nullable: false },
|
|
37
|
+
{ handle: "deploymentId", jsonSchema: s.string(), nullable: false },
|
|
38
|
+
{ handle: "projectId", jsonSchema: s.string(), nullable: false },
|
|
39
|
+
{ handle: "body", jsonSchema: { type: "object" }, nullable: false },
|
|
40
|
+
],
|
|
41
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { PermanentIntegrationError, TransientIntegrationError } from "../../triggers/common/integration.js";
|
|
2
|
+
import { isJsonObject } from "../../triggers/common/json.js";
|
|
3
|
+
import { reconcileManagedWebhook, webhookRequest } from "../../triggers/managed-webhook.js";
|
|
4
|
+
import { verifyHexHmac } from "../../triggers/signature.js";
|
|
5
|
+
import { snapshot, events } from "./trigger-on-deployment-event.definition.js";
|
|
6
|
+
export const vercelDeploymentEvent = {
|
|
7
|
+
snapshot,
|
|
8
|
+
initialState: { checkpoint: null, subscription: {} },
|
|
9
|
+
async reconcile(context) {
|
|
10
|
+
const query = { teamId: String(context.config.teamId) };
|
|
11
|
+
const remove = async (id) => {
|
|
12
|
+
await webhookRequest(context, { endpoint: `/v1/webhooks/${encodeURIComponent(id)}`, method: "DELETE", query });
|
|
13
|
+
};
|
|
14
|
+
return reconcileManagedWebhook(context, {
|
|
15
|
+
async find() {
|
|
16
|
+
const result = await webhookRequest(context, { endpoint: "/v1/webhooks", method: "GET", query });
|
|
17
|
+
if (!Array.isArray(result.data) ||
|
|
18
|
+
result.data.some((item) => !isJsonObject(item) || typeof item.url != "string" || typeof item.id != "string"))
|
|
19
|
+
throw new TransientIntegrationError("Vercel returned an invalid webhook list.");
|
|
20
|
+
const matches = result.data.filter((item) => isJsonObject(item) && item.url == context.endpointUrl);
|
|
21
|
+
if (matches.length > 1)
|
|
22
|
+
throw new PermanentIntegrationError("Multiple Vercel webhooks match this subscription. Remove duplicates before retrying.");
|
|
23
|
+
const found = [];
|
|
24
|
+
for (const item of matches) {
|
|
25
|
+
const id = item.id;
|
|
26
|
+
if (item.ownerId != context.config.teamId ||
|
|
27
|
+
!Array.isArray(item.projectIds) ||
|
|
28
|
+
item.projectIds.length != 1 ||
|
|
29
|
+
item.projectIds[0] != context.config.projectId ||
|
|
30
|
+
!Array.isArray(item.events) ||
|
|
31
|
+
item.events.length != events.length ||
|
|
32
|
+
!events.every((event) => item.events.includes(event)))
|
|
33
|
+
throw new PermanentIntegrationError("The Vercel webhook scope differs from this subscription. Restore its project and event settings.");
|
|
34
|
+
const state = context.state;
|
|
35
|
+
if (state.subscription.hookId == id && typeof state.subscription.secret == "string") {
|
|
36
|
+
found.push({ id, secret: state.subscription.secret });
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
// Vercel only returns the secret on creation. Remove the owned orphan before recreating it.
|
|
40
|
+
await remove(id);
|
|
41
|
+
await state.saveSubscription({}, context.now);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return found;
|
|
45
|
+
},
|
|
46
|
+
async create() {
|
|
47
|
+
const result = await webhookRequest(context, {
|
|
48
|
+
endpoint: "/v1/webhooks",
|
|
49
|
+
method: "POST",
|
|
50
|
+
query,
|
|
51
|
+
body: { url: context.endpointUrl, events: [...events], projectIds: [context.config.projectId] },
|
|
52
|
+
});
|
|
53
|
+
const data = result.data;
|
|
54
|
+
if (!isJsonObject(data) ||
|
|
55
|
+
typeof data.id != "string" ||
|
|
56
|
+
!data.id ||
|
|
57
|
+
typeof data.secret != "string" ||
|
|
58
|
+
!data.secret)
|
|
59
|
+
throw new TransientIntegrationError("Vercel webhook creation returned no identity or secret.");
|
|
60
|
+
return { id: data.id, secret: data.secret };
|
|
61
|
+
},
|
|
62
|
+
remove,
|
|
63
|
+
});
|
|
64
|
+
},
|
|
65
|
+
async receive(context) {
|
|
66
|
+
const secret = context.state?.subscription.secret;
|
|
67
|
+
if (typeof secret != "string")
|
|
68
|
+
return { outcome: "respond", status: 503, body: "", contentType: "text/plain" };
|
|
69
|
+
if (!(await verifyHexHmac(secret, [context.rawBody], context.header("x-vercel-signature"), "SHA-1")))
|
|
70
|
+
return { outcome: "respond", status: 401, body: "", contentType: "text/plain" };
|
|
71
|
+
const body = context.payload;
|
|
72
|
+
if (!isJsonObject(body) || typeof body.type != "string" || !events.includes(body.type))
|
|
73
|
+
return { outcome: "ignored", reason: "Vercel event does not match." };
|
|
74
|
+
const payload = body.payload;
|
|
75
|
+
if (!isJsonObject(payload) ||
|
|
76
|
+
!isJsonObject(payload.team) ||
|
|
77
|
+
payload.team.id != context.config.teamId ||
|
|
78
|
+
!isJsonObject(payload.project) ||
|
|
79
|
+
payload.project.id != context.config.projectId)
|
|
80
|
+
return { outcome: "ignored", reason: "Vercel project or Team does not match." };
|
|
81
|
+
if ((context.config.environment == "production" && payload.target != "production") ||
|
|
82
|
+
(context.config.environment == "preview" && payload.target !== null))
|
|
83
|
+
return { outcome: "ignored", reason: "Vercel environment does not match." };
|
|
84
|
+
if (typeof body.id != "string" ||
|
|
85
|
+
!body.id ||
|
|
86
|
+
!isJsonObject(payload.deployment) ||
|
|
87
|
+
typeof payload.deployment.id != "string" ||
|
|
88
|
+
!payload.deployment.id)
|
|
89
|
+
return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
|
|
90
|
+
return {
|
|
91
|
+
outcome: "event",
|
|
92
|
+
dedupeKey: body.id,
|
|
93
|
+
outputs: {
|
|
94
|
+
event: body.type,
|
|
95
|
+
deliveryId: body.id,
|
|
96
|
+
deploymentId: payload.deployment.id,
|
|
97
|
+
projectId: payload.project.id,
|
|
98
|
+
body: payload,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
},
|
|
102
|
+
};
|
|
@@ -17,5 +17,4 @@ export interface WeixinRequestOptions {
|
|
|
17
17
|
type WeixinBotActionHandler = (input: Record<string, unknown>, context: WeixinBotContext) => Promise<Record<string, unknown>>;
|
|
18
18
|
export declare const weixinBotActionHandlers: ProviderActionHandlers<"weixin_bot", WeixinBotActionHandler>;
|
|
19
19
|
export declare function requestWeixin(options: WeixinRequestOptions): Promise<Record<string, unknown>>;
|
|
20
|
-
export declare function parseWeixinJson(text: string): unknown;
|
|
21
20
|
export {};
|
|
@@ -137,7 +137,7 @@ function readTypingStatus(value) {
|
|
|
137
137
|
return status;
|
|
138
138
|
throw new ProviderRequestError(400, "status must be typing or cancel");
|
|
139
139
|
}
|
|
140
|
-
|
|
140
|
+
function parseWeixinJson(text) {
|
|
141
141
|
const losslessIds = new Set(["message_id", "msg_id", "svr_id"]);
|
|
142
142
|
let output = "";
|
|
143
143
|
let position = 0;
|
|
@@ -44,9 +44,9 @@ export declare function readWechatErrcode(record: Record<string, unknown> | unde
|
|
|
44
44
|
export declare function isWechatTokenError(errcode: number | null): boolean;
|
|
45
45
|
/**
|
|
46
46
|
* Map a failed WeChat API call to the shared provider error. Rate limits
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
47
|
+
* and invitation quotas become 429; missing permissions and policy bans become
|
|
48
|
+
* 403; duplicate/cooperation-capacity conflicts become 409; absent promotion
|
|
49
|
+
* products become 404. Documented input errors become 400; other failures 502.
|
|
50
50
|
*/
|
|
51
51
|
export declare function normalizeWechatApiError(result: WechatApiResult): ProviderRequestError;
|
|
52
52
|
export {};
|
|
@@ -12,7 +12,9 @@ const accessTokenRefreshSkewMs = 120_000;
|
|
|
12
12
|
* input, so they map to 400 instead of an upstream failure.
|
|
13
13
|
*/
|
|
14
14
|
const wechatInvalidInputErrcodes = new Set([
|
|
15
|
-
9401020, 9700234, 10020017, 10020059, 10020060, 10020062, 10020063, 10020087, 10020094, 10020127, 10020504,
|
|
15
|
+
9401020, 9700234, 10020017, 10020059, 10020060, 10020062, 10020063, 10020087, 10020094, 10020127, 10020504, 10021069,
|
|
16
|
+
10023000, 10023001, 10024003, 10023100, 10023102, 10023104, 10023105, 10023106, 10023107, 10023108, 10023109,
|
|
17
|
+
10023110, 10023111, 10023112, 10023113, 10023116, 10023117, 10023121,
|
|
16
18
|
]);
|
|
17
19
|
const accessTokenCache = new Map();
|
|
18
20
|
const accessTokenInFlight = new Map();
|
|
@@ -133,9 +135,9 @@ export function isWechatTokenError(errcode) {
|
|
|
133
135
|
}
|
|
134
136
|
/**
|
|
135
137
|
* Map a failed WeChat API call to the shared provider error. Rate limits
|
|
136
|
-
*
|
|
137
|
-
*
|
|
138
|
-
*
|
|
138
|
+
* and invitation quotas become 429; missing permissions and policy bans become
|
|
139
|
+
* 403; duplicate/cooperation-capacity conflicts become 409; absent promotion
|
|
140
|
+
* products become 404. Documented input errors become 400; other failures 502.
|
|
139
141
|
*/
|
|
140
142
|
export function normalizeWechatApiError(result) {
|
|
141
143
|
const errcode = readWechatErrcode(result.record);
|
|
@@ -147,11 +149,17 @@ export function normalizeWechatApiError(result) {
|
|
|
147
149
|
// A bare HTTP 403 with no errcode envelope is the store's optional IP whitelist rejecting the caller.
|
|
148
150
|
message = `${message}. If the store has an IP whitelist configured (微信小店后台 → 服务市场 → 经营工具 → 自研 → IP 白名单), add this runtime's public egress IP to it and try again.`;
|
|
149
151
|
}
|
|
150
|
-
if (result.status === 429 || errcode === 45009 || errcode === 45011) {
|
|
152
|
+
if (result.status === 429 || errcode === 45009 || errcode === 45011 || errcode === 10020510 || errcode === 10023002) {
|
|
151
153
|
return new ProviderRequestError(429, message, result.record);
|
|
152
154
|
}
|
|
153
|
-
if (errcode === 48001) {
|
|
154
|
-
return new ProviderRequestError(403, message, result.record);
|
|
155
|
+
if (errcode === 48001 || errcode === 10023007 || errcode === 10023114 || errcode === 10023115) {
|
|
156
|
+
return new ProviderRequestError(403, message, result.record, "provider_error");
|
|
157
|
+
}
|
|
158
|
+
if (errcode === 10023003 || errcode === 10023004 || errcode === 10023006) {
|
|
159
|
+
return new ProviderRequestError(409, message, result.record);
|
|
160
|
+
}
|
|
161
|
+
if (errcode === 10023103) {
|
|
162
|
+
return new ProviderRequestError(404, message, result.record);
|
|
155
163
|
}
|
|
156
164
|
if (errcode !== null && ((errcode >= 40000 && errcode < 50000) || wechatInvalidInputErrcodes.has(errcode))) {
|
|
157
165
|
return new ProviderRequestError(400, message, result.record);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { compactObject, objectArray, optionalBoolean, optionalInteger, optionalRecord, optionalString, positiveInteger, } from "../../core/cast.js";
|
|
1
|
+
import { compactObject, objectArray, optionalBoolean, optionalInteger, optionalNumber, optionalRecord, optionalString, positiveInteger, } from "../../core/cast.js";
|
|
2
2
|
import { createProviderFetch, defineProviderExecutors, providerInputError, providerUserAgent, readTransitFileInput, requireCustomCredential, requiredInputString, runProviderRequest, } from "../provider-runtime.js";
|
|
3
3
|
import { getWechatAccessToken, isWechatTokenError, normalizeWechatApiError, parseWechatJson, readWechatErrcode, readWeixinStoreCredential, } from "./access-token.js";
|
|
4
4
|
const service = "weixin_store";
|
|
@@ -35,6 +35,219 @@ const deliveryProductFieldMap = {
|
|
|
35
35
|
productCnt: "product_cnt",
|
|
36
36
|
};
|
|
37
37
|
const weixinStoreActionHandlers = {
|
|
38
|
+
async list_league_promoter_products(input, context) {
|
|
39
|
+
const talentAppid = requiredInputString(input.talentAppid, "talentAppid");
|
|
40
|
+
const dataType = positiveInteger(input.dataType, "dataType", providerInputError);
|
|
41
|
+
const pageIndex = positiveInteger(input.pageIndex ?? 1, "pageIndex", providerInputError);
|
|
42
|
+
const pageSize = positiveInteger(input.pageSize ?? 20, "pageSize", providerInputError);
|
|
43
|
+
if (![1, 2].includes(dataType) || !Number.isSafeInteger(pageIndex) || pageSize > 20) {
|
|
44
|
+
throw providerInputError("dataType must be 1 or 2, pageIndex a safe positive integer, and pageSize at most 20");
|
|
45
|
+
}
|
|
46
|
+
return callWechatApi(context, {
|
|
47
|
+
method: "POST",
|
|
48
|
+
path: "/channels/ec/league/talent/getproductdatalist",
|
|
49
|
+
body: { talent_appid: talentAppid, get_data_type: dataType, page_index: pageIndex, page_size: pageSize },
|
|
50
|
+
});
|
|
51
|
+
},
|
|
52
|
+
async list_product_promotion_talents(input, context) {
|
|
53
|
+
const productId = positiveInteger(input.productId, "productId", providerInputError);
|
|
54
|
+
const promotionPlanId = positiveInteger(input.promotionPlanId, "promotionPlanId", providerInputError);
|
|
55
|
+
const pageIndex = positiveInteger(input.pageIndex ?? 1, "pageIndex", providerInputError);
|
|
56
|
+
const pageSize = positiveInteger(input.pageSize ?? 10, "pageSize", providerInputError);
|
|
57
|
+
if (![productId, promotionPlanId, pageIndex].every(Number.isSafeInteger) || pageSize > 10) {
|
|
58
|
+
throw providerInputError("Ids and pageIndex must be safe positive integers; pageSize must be at most 10");
|
|
59
|
+
}
|
|
60
|
+
return callWechatApi(context, {
|
|
61
|
+
method: "POST",
|
|
62
|
+
path: "/channels/ec/league/promotion/talent/list",
|
|
63
|
+
body: compactObject({
|
|
64
|
+
product_id: productId,
|
|
65
|
+
promotion_plan_id: promotionPlanId,
|
|
66
|
+
page_index: pageIndex,
|
|
67
|
+
page_size: pageSize,
|
|
68
|
+
talent_appid: input.talentAppid === undefined ? undefined : requiredInputString(input.talentAppid, "talentAppid"),
|
|
69
|
+
}),
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
get_product_audit_strategy(_input, context) {
|
|
73
|
+
return callWechatApi(context, { method: "POST", path: "/channels/ec/product/auditstrategy/get", body: {} });
|
|
74
|
+
},
|
|
75
|
+
async list_product_promotion_plans(input, context) {
|
|
76
|
+
const productId = positiveInteger(input.productId, "productId", providerInputError);
|
|
77
|
+
const pageIndex = positiveInteger(input.pageIndex ?? 1, "pageIndex", providerInputError);
|
|
78
|
+
const pageSize = positiveInteger(input.pageSize ?? 20, "pageSize", providerInputError);
|
|
79
|
+
const type = input.promotionPlanType === undefined
|
|
80
|
+
? undefined
|
|
81
|
+
: positiveInteger(input.promotionPlanType, "promotionPlanType", providerInputError);
|
|
82
|
+
if (![productId, pageIndex].every(Number.isSafeInteger) ||
|
|
83
|
+
pageSize > 20 ||
|
|
84
|
+
(type !== undefined && ![100, 200, 300].includes(type))) {
|
|
85
|
+
throw providerInputError("Ids and pageIndex must be safe positive integers, pageSize at most 20, and promotionPlanType 100, 200 or 300");
|
|
86
|
+
}
|
|
87
|
+
return callWechatApi(context, {
|
|
88
|
+
method: "POST",
|
|
89
|
+
path: "/channels/ec/league/promotion/plan/list",
|
|
90
|
+
body: compactObject({
|
|
91
|
+
product_id: productId,
|
|
92
|
+
page_index: pageIndex,
|
|
93
|
+
page_size: pageSize,
|
|
94
|
+
promotion_plan_type: type,
|
|
95
|
+
}),
|
|
96
|
+
});
|
|
97
|
+
},
|
|
98
|
+
async list_league_products(input, context) {
|
|
99
|
+
const pageIndex = positiveInteger(input.pageIndex ?? 1, "pageIndex", providerInputError);
|
|
100
|
+
const pageSize = positiveInteger(input.pageSize ?? 20, "pageSize", providerInputError);
|
|
101
|
+
const productId = input.productId === undefined ? undefined : positiveInteger(input.productId, "productId", providerInputError);
|
|
102
|
+
if (!Number.isSafeInteger(pageIndex) ||
|
|
103
|
+
pageSize > 100 ||
|
|
104
|
+
pageSize * pageIndex > 5000 ||
|
|
105
|
+
(productId !== undefined && !Number.isSafeInteger(productId))) {
|
|
106
|
+
throw providerInputError("Product id must be safe, pageSize at most 100, and pageSize multiplied by pageIndex at most 5000");
|
|
107
|
+
}
|
|
108
|
+
if (input.needTotalNum !== undefined && typeof input.needTotalNum !== "boolean") {
|
|
109
|
+
throw providerInputError("needTotalNum must be a boolean");
|
|
110
|
+
}
|
|
111
|
+
return callWechatApi(context, {
|
|
112
|
+
method: "POST",
|
|
113
|
+
path: "/channels/ec/league/item/list/get",
|
|
114
|
+
body: compactObject({
|
|
115
|
+
page_index: pageIndex,
|
|
116
|
+
page_size: pageSize,
|
|
117
|
+
product_id: productId,
|
|
118
|
+
need_total_num: input.needTotalNum,
|
|
119
|
+
}),
|
|
120
|
+
});
|
|
121
|
+
},
|
|
122
|
+
async get_league_plan(input, context) {
|
|
123
|
+
const type = positiveInteger(input.type, "type", providerInputError);
|
|
124
|
+
const productId = positiveInteger(input.productId, "productId", providerInputError);
|
|
125
|
+
const promotionPlanId = input.promotionPlanId === undefined
|
|
126
|
+
? undefined
|
|
127
|
+
: positiveInteger(input.promotionPlanId, "promotionPlanId", providerInputError);
|
|
128
|
+
if (![100, 300].includes(type) ||
|
|
129
|
+
!Number.isSafeInteger(productId) ||
|
|
130
|
+
(promotionPlanId !== undefined && !Number.isSafeInteger(promotionPlanId))) {
|
|
131
|
+
throw providerInputError("type must be 100 or 300 and ids must be safe positive integers");
|
|
132
|
+
}
|
|
133
|
+
return callWechatApi(context, {
|
|
134
|
+
method: "POST",
|
|
135
|
+
path: "/channels/ec/league/item/get",
|
|
136
|
+
body: compactObject({ type, product_id: productId, promotion_plan_id: promotionPlanId }),
|
|
137
|
+
});
|
|
138
|
+
},
|
|
139
|
+
async invite_league_promoter(input, context) {
|
|
140
|
+
if ((input.promoterId !== undefined) === (input.finderId !== undefined)) {
|
|
141
|
+
throw providerInputError("Supply exactly one of promoterId or finderId");
|
|
142
|
+
}
|
|
143
|
+
return callWechatApi(context, {
|
|
144
|
+
method: "POST",
|
|
145
|
+
path: "/channels/ec/league/promoter/add",
|
|
146
|
+
body: input.promoterId !== undefined
|
|
147
|
+
? { promoter_id: requiredInputString(input.promoterId, "promoterId") }
|
|
148
|
+
: { finder_id: requiredInputString(input.finderId, "finderId") },
|
|
149
|
+
});
|
|
150
|
+
},
|
|
151
|
+
async update_league_plan(input, context) {
|
|
152
|
+
const type = positiveInteger(input.type, "type", providerInputError);
|
|
153
|
+
const productId = positiveInteger(input.productId, "productId", providerInputError);
|
|
154
|
+
const promotionPlanId = positiveInteger(input.promotionPlanId, "promotionPlanId", providerInputError);
|
|
155
|
+
const operateType = positiveInteger(input.operateType, "operateType", providerInputError);
|
|
156
|
+
if (![100, 300].includes(type) ||
|
|
157
|
+
![productId, promotionPlanId].every(Number.isSafeInteger) ||
|
|
158
|
+
![1, 2, 4].includes(operateType)) {
|
|
159
|
+
throw providerInputError("type must be 100 or 300, ids safe positive integers, and operateType 1, 2 or 4");
|
|
160
|
+
}
|
|
161
|
+
const ratio = optionalNumber(input.ratio);
|
|
162
|
+
if (operateType === 1
|
|
163
|
+
? ratio === undefined || !Number.isFinite(ratio) || ratio < 0 || ratio > 90
|
|
164
|
+
: input.ratio !== undefined) {
|
|
165
|
+
throw providerInputError("ratio must be between 0 and 90 for operateType 1 and omitted for operateType 2 or 4");
|
|
166
|
+
}
|
|
167
|
+
if (input.exclusiveInfo !== undefined || input.exclusive_info !== undefined) {
|
|
168
|
+
throw providerInputError("Audience and timing edits are not supported by this action");
|
|
169
|
+
}
|
|
170
|
+
return callWechatApi(context, {
|
|
171
|
+
method: "POST",
|
|
172
|
+
path: "/channels/ec/league/item/upd",
|
|
173
|
+
body: compactObject({
|
|
174
|
+
type,
|
|
175
|
+
product_id: productId,
|
|
176
|
+
promotion_plan_id: promotionPlanId,
|
|
177
|
+
operate_type: operateType,
|
|
178
|
+
ratio,
|
|
179
|
+
}),
|
|
180
|
+
});
|
|
181
|
+
},
|
|
182
|
+
async list_league_promoters(input, context) {
|
|
183
|
+
const pageIndex = positiveInteger(input.pageIndex ?? 1, "pageIndex", providerInputError);
|
|
184
|
+
const pageSize = positiveInteger(input.pageSize ?? 20, "pageSize", providerInputError);
|
|
185
|
+
if (!Number.isSafeInteger(pageIndex) || pageSize > 20) {
|
|
186
|
+
throw providerInputError("pageIndex must be a safe positive integer and pageSize must be at most 20");
|
|
187
|
+
}
|
|
188
|
+
return callWechatApi(context, {
|
|
189
|
+
method: "POST",
|
|
190
|
+
path: "/channels/ec/league/promoter/list/get",
|
|
191
|
+
body: { page_index: pageIndex, page_size: pageSize },
|
|
192
|
+
});
|
|
193
|
+
},
|
|
194
|
+
async get_league_promoter(input, context) {
|
|
195
|
+
if ((input.talentAppid !== undefined) === (input.talentSearchKey !== undefined)) {
|
|
196
|
+
throw providerInputError("Supply exactly one of talentAppid or talentSearchKey");
|
|
197
|
+
}
|
|
198
|
+
return callWechatApi(context, {
|
|
199
|
+
method: "POST",
|
|
200
|
+
path: "/channels/ec/league/promoter/get",
|
|
201
|
+
body: input.talentAppid !== undefined
|
|
202
|
+
? { talent_appid: requiredInputString(input.talentAppid, "talentAppid") }
|
|
203
|
+
: { talent_search_key: requiredInputString(input.talentSearchKey, "talentSearchKey") },
|
|
204
|
+
});
|
|
205
|
+
},
|
|
206
|
+
async get_compass_product_data(input, context) {
|
|
207
|
+
const date = requiredInputString(input.date, "date");
|
|
208
|
+
const parsed = /^\d{8}$/.test(date)
|
|
209
|
+
? new Date(`${date.slice(0, 4)}-${date.slice(4, 6)}-${date.slice(6, 8)}T00:00:00Z`)
|
|
210
|
+
: new Date(Number.NaN);
|
|
211
|
+
const today = new Intl.DateTimeFormat("en-CA", {
|
|
212
|
+
timeZone: "Asia/Shanghai",
|
|
213
|
+
year: "numeric",
|
|
214
|
+
month: "2-digit",
|
|
215
|
+
day: "2-digit",
|
|
216
|
+
})
|
|
217
|
+
.format(new Date())
|
|
218
|
+
.replaceAll("-", "");
|
|
219
|
+
if (!Number.isFinite(parsed.getTime()) ||
|
|
220
|
+
parsed.toISOString().slice(0, 10).replaceAll("-", "") !== date ||
|
|
221
|
+
date >= today) {
|
|
222
|
+
throw providerInputError("date must be a valid YYYYMMDD date, yesterday or earlier in Asia/Shanghai");
|
|
223
|
+
}
|
|
224
|
+
const productId = positiveInteger(input.productId, "productId", providerInputError);
|
|
225
|
+
if (!Number.isSafeInteger(productId)) {
|
|
226
|
+
throw providerInputError("productId must be a safe positive integer");
|
|
227
|
+
}
|
|
228
|
+
return callWechatApi(context, {
|
|
229
|
+
method: "POST",
|
|
230
|
+
path: "/channels/ec/compass/shop/product/data/get",
|
|
231
|
+
body: { ds: date, product_id: productId },
|
|
232
|
+
});
|
|
233
|
+
},
|
|
234
|
+
async get_product_restricted_info(input, context) {
|
|
235
|
+
if (!Array.isArray(input.productIds) || input.productIds.length < 1 || input.productIds.length > 50) {
|
|
236
|
+
throw providerInputError("productIds must contain 1 to 50 product ids");
|
|
237
|
+
}
|
|
238
|
+
const productIds = input.productIds.map((value) => {
|
|
239
|
+
const id = positiveInteger(value, "productIds", providerInputError);
|
|
240
|
+
if (!Number.isSafeInteger(id)) {
|
|
241
|
+
throw providerInputError("productIds must contain only safe positive integers");
|
|
242
|
+
}
|
|
243
|
+
return id;
|
|
244
|
+
});
|
|
245
|
+
return callWechatApi(context, {
|
|
246
|
+
method: "POST",
|
|
247
|
+
path: "/channels/ec/product/getproductrestrictedinfo",
|
|
248
|
+
body: { product_ids: productIds },
|
|
249
|
+
});
|
|
250
|
+
},
|
|
38
251
|
async upload_qualification_image(input, context) {
|
|
39
252
|
const file = await readTransitFileInput(input.file, context);
|
|
40
253
|
if (file.sizeBytes > 2 * 1024 * 1024) {
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
|
|
2
|
+
import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
|
|
2
3
|
export declare const executors: ProviderExecutors;
|
|
3
4
|
export declare const proxy: ProviderProxyExecutor;
|
|
4
5
|
export declare const credentialValidators: CredentialValidators;
|
|
6
|
+
export declare const triggers: readonly IntegrationDefinition[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defineOAuthProviderExecutors, defineProviderProxy } from "../provider-runtime.js";
|
|
2
2
|
import { fetchZoomCurrentAccount, zoomActionHandlers, zoomApiBaseUrl } from "./runtime.js";
|
|
3
|
+
import { zoomRecordingReady } from "./trigger-on-recording-ready.js";
|
|
3
4
|
const service = "zoom";
|
|
4
5
|
export const executors = defineOAuthProviderExecutors(service, zoomActionHandlers);
|
|
5
6
|
export const proxy = defineProviderProxy({
|
|
@@ -13,3 +14,4 @@ export const credentialValidators = {
|
|
|
13
14
|
return fetchZoomCurrentAccount(input.accessToken, input.metadata, fetcher, signal);
|
|
14
15
|
},
|
|
15
16
|
};
|
|
17
|
+
export const triggers = [zoomRecordingReady];
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export const snapshot = {
|
|
2
|
+
key: "zoom.on_recording_ready",
|
|
3
|
+
provider: "zoom",
|
|
4
|
+
name: "on_recording_ready",
|
|
5
|
+
displayName: "Cloud Recording Ready",
|
|
6
|
+
description: "Receives completed cloud recordings hosted by the connected Zoom user through a verified application event source.",
|
|
7
|
+
definitionVersion: 2,
|
|
8
|
+
type: "integration",
|
|
9
|
+
endpoint: {
|
|
10
|
+
methods: ["POST"],
|
|
11
|
+
body: { formats: ["json"], allowArray: false, allowEmpty: false },
|
|
12
|
+
successStatus: 200,
|
|
13
|
+
},
|
|
14
|
+
configInputs: [
|
|
15
|
+
{
|
|
16
|
+
handle: "sourceId",
|
|
17
|
+
jsonSchema: { type: "string", pattern: "^source_[0-9a-f]{32}$", title: "Event source" },
|
|
18
|
+
nullable: false,
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
handle: "eventTypes",
|
|
22
|
+
jsonSchema: {
|
|
23
|
+
type: "array",
|
|
24
|
+
items: {
|
|
25
|
+
type: "string",
|
|
26
|
+
enum: ["recording.completed"],
|
|
27
|
+
},
|
|
28
|
+
minItems: 1,
|
|
29
|
+
maxItems: 1,
|
|
30
|
+
uniqueItems: true,
|
|
31
|
+
title: "Events",
|
|
32
|
+
},
|
|
33
|
+
nullable: false,
|
|
34
|
+
value: ["recording.completed"],
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
outputs: [
|
|
38
|
+
{ handle: "event", jsonSchema: { type: "string" }, nullable: false },
|
|
39
|
+
{ handle: "deliveryId", jsonSchema: { type: "string" }, nullable: false },
|
|
40
|
+
{ handle: "accountId", jsonSchema: { type: "string" }, nullable: false },
|
|
41
|
+
{ handle: "meetingUuid", jsonSchema: { type: "string" }, nullable: false },
|
|
42
|
+
{ handle: "body", jsonSchema: { type: "object" }, nullable: false },
|
|
43
|
+
],
|
|
44
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { PermanentIntegrationError } from "../../triggers/common/integration.js";
|
|
2
|
+
import { isJsonObject } from "../../triggers/common/json.js";
|
|
3
|
+
import { webhookRequest } from "../../triggers/managed-webhook.js";
|
|
4
|
+
import { zoomApplication } from "../../triggers/sources/zoom.js";
|
|
5
|
+
import { snapshot } from "./trigger-on-recording-ready.definition.js";
|
|
6
|
+
export const zoomRecordingReady = {
|
|
7
|
+
snapshot,
|
|
8
|
+
eventSource: "zoom",
|
|
9
|
+
source: zoomApplication,
|
|
10
|
+
async sourceIdentity(context) {
|
|
11
|
+
const result = await webhookRequest(context, { method: "GET", endpoint: "/users/me" });
|
|
12
|
+
if (!context.connector.providerAccountId ||
|
|
13
|
+
!isJsonObject(result.data) ||
|
|
14
|
+
typeof result.data.id !== "string" ||
|
|
15
|
+
!result.data.id ||
|
|
16
|
+
typeof result.data.account_id !== "string" ||
|
|
17
|
+
!result.data.account_id)
|
|
18
|
+
throw new PermanentIntegrationError("Zoom did not return a verified user and account identity.");
|
|
19
|
+
return {
|
|
20
|
+
accountId: context.connector.providerAccountId,
|
|
21
|
+
userId: result.data.id,
|
|
22
|
+
zoomAccountId: result.data.account_id,
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
receive(context) {
|
|
26
|
+
if (context.eventSourceId !== context.config.sourceId)
|
|
27
|
+
return { outcome: "respond", status: 404, body: "", contentType: "text/plain" };
|
|
28
|
+
const payload = context.payload;
|
|
29
|
+
if (!isJsonObject(payload) ||
|
|
30
|
+
typeof payload.deliveryId !== "string" ||
|
|
31
|
+
!payload.deliveryId ||
|
|
32
|
+
!isJsonObject(payload.body))
|
|
33
|
+
throw new PermanentIntegrationError("Invalid shared Zoom event.");
|
|
34
|
+
return { outcome: "event", dedupeKey: payload.deliveryId, outputs: payload };
|
|
35
|
+
},
|
|
36
|
+
async reconcile() {
|
|
37
|
+
throw new PermanentIntegrationError("This deployment does not support shared Zoom event sources.");
|
|
38
|
+
},
|
|
39
|
+
};
|
|
@@ -33,6 +33,14 @@ export function buildExampleInput(schema) {
|
|
|
33
33
|
}
|
|
34
34
|
}
|
|
35
35
|
}
|
|
36
|
+
// De Morgan's law exposes positive choices encoded as not(allOf(not(...))).
|
|
37
|
+
if (isSchemaObject(seedSchema.not) && Array.isArray(seedSchema.not.allOf)) {
|
|
38
|
+
const members = seedSchema.not.allOf;
|
|
39
|
+
if (members.length > 0 && members.every((member) => isSchemaObject(member) && isSchemaObject(member.not))) {
|
|
40
|
+
const choices = members.map((member) => member.not);
|
|
41
|
+
seedRequirementBranches({ ...seedSchema, not: undefined, anyOf: choices }, properties, input);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
36
44
|
applyConditionalRequirements(seedSchema, seedSchema, input);
|
|
37
45
|
return input;
|
|
38
46
|
}
|
|
@@ -293,7 +301,10 @@ function stringExample(schema) {
|
|
|
293
301
|
const minLength = typeof schema.minLength === "number" && schema.minLength > 0 ? schema.minLength : 0;
|
|
294
302
|
const maxLength = typeof schema.maxLength === "number" ? schema.maxLength : undefined;
|
|
295
303
|
if (typeof schema.format === "string") {
|
|
296
|
-
|
|
304
|
+
const formatted = formatStringExample(schema.format, minLength, maxLength);
|
|
305
|
+
if (new Validator(schema, "2020-12").validate(formatted).valid) {
|
|
306
|
+
return formatted;
|
|
307
|
+
}
|
|
297
308
|
}
|
|
298
309
|
if (typeof schema.pattern === "string") {
|
|
299
310
|
const sample = samplePattern(schema.pattern, { minLength });
|