@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
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
|
|
2
|
+
export declare const credentialValidators: CredentialValidators;
|
|
3
|
+
export declare const executors: ProviderExecutors;
|
|
4
|
+
export declare const proxy: ProviderProxyExecutor;
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { optionalRecord, optionalString, looseArray } from "../../core/cast.js";
|
|
2
|
+
import { downloadUploadSource, requiredResponseRecord, isAbortLikeError, runProviderRequest, ProviderRequestError, providerInputError, providerResponseError, defineApiKeyProviderExecutors, defineProviderProxy, } from "../provider-runtime.js";
|
|
3
|
+
import { orbitActions } from "./actions.js";
|
|
4
|
+
import { orbitRoutes } from "./routes.js";
|
|
5
|
+
const baseUrl = "https://api.orbitsearch.com";
|
|
6
|
+
async function request(apiKey, name, input, fetcher, parentSignal) {
|
|
7
|
+
const route = orbitRoutes[name];
|
|
8
|
+
let path = route.path;
|
|
9
|
+
const data = { ...input };
|
|
10
|
+
for (const field of route.pathFields) {
|
|
11
|
+
path = path.replace(`{${field}}`, encodeURIComponent(String(data[field])));
|
|
12
|
+
delete data[field];
|
|
13
|
+
}
|
|
14
|
+
const url = new URL(path, baseUrl);
|
|
15
|
+
for (const field of route.queryFields) {
|
|
16
|
+
if (data[field] !== undefined)
|
|
17
|
+
url.searchParams.set(field, String(data[field]));
|
|
18
|
+
delete data[field];
|
|
19
|
+
}
|
|
20
|
+
const idempotencyKey = optionalString(data.idempotencyKey);
|
|
21
|
+
delete data.idempotencyKey;
|
|
22
|
+
let body = route.body ? JSON.stringify(data) : undefined;
|
|
23
|
+
if (name === "detect_faces") {
|
|
24
|
+
const file = await downloadUploadSource({
|
|
25
|
+
url: String(data.imageUrl),
|
|
26
|
+
fieldName: "imageUrl",
|
|
27
|
+
fetcher,
|
|
28
|
+
maximumBytes: 25 * 1024 * 1024,
|
|
29
|
+
signal: parentSignal,
|
|
30
|
+
});
|
|
31
|
+
const mime = file.contentType?.split(";")[0]?.trim().toLowerCase();
|
|
32
|
+
if (!mime || !["image/jpeg", "image/png", "image/webp"].includes(mime))
|
|
33
|
+
throw providerInputError("imageUrl must return a JPG, PNG or WebP image");
|
|
34
|
+
const form = new FormData();
|
|
35
|
+
form.append("image", new Blob([new Uint8Array(file.bytes)], { type: mime }), `image.${mime === "image/jpeg" ? "jpg" : mime.split("/")[1]}`);
|
|
36
|
+
body = form;
|
|
37
|
+
}
|
|
38
|
+
return runProviderRequest({ label: "Orbit", signal: parentSignal }, async (signal) => {
|
|
39
|
+
const headers = new Headers({ authorization: `Bearer ${apiKey}`, accept: "application/json" });
|
|
40
|
+
if (body !== undefined && !(body instanceof FormData))
|
|
41
|
+
headers.set("content-type", "application/json");
|
|
42
|
+
if (idempotencyKey !== undefined)
|
|
43
|
+
headers.set("Idempotency-Key", idempotencyKey);
|
|
44
|
+
const response = await fetcher(url, { method: route.method, headers, body, signal });
|
|
45
|
+
const payload = await response.json().catch((error) => {
|
|
46
|
+
if (isAbortLikeError(error))
|
|
47
|
+
throw error;
|
|
48
|
+
return undefined;
|
|
49
|
+
});
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
const error = optionalRecord(optionalRecord(payload)?.error);
|
|
52
|
+
const code = optionalString(error?.code);
|
|
53
|
+
const message = optionalString(error?.message);
|
|
54
|
+
const detail = [code, message].filter(Boolean).join(": ");
|
|
55
|
+
throw new ProviderRequestError(response.status, `Orbit request failed (${response.status})${detail ? `: ${detail}` : ""}`, undefined, code === "invalid_api_key"
|
|
56
|
+
? "authorization_failed"
|
|
57
|
+
: code === "missing_api_key_scope"
|
|
58
|
+
? "authorization_failed"
|
|
59
|
+
: "provider_error");
|
|
60
|
+
}
|
|
61
|
+
return requiredResponseRecord(payload, "Orbit response");
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
async function execute(actionName, values, context) {
|
|
65
|
+
const { apiKey, fetcher } = context;
|
|
66
|
+
const data = values;
|
|
67
|
+
if (actionName === "get_batch_enrichment") {
|
|
68
|
+
const results = [];
|
|
69
|
+
for (const requestId of data.request_ids) {
|
|
70
|
+
results.push(await request(apiKey, "get_enrichment", { request_id: requestId }, fetcher, context.signal));
|
|
71
|
+
}
|
|
72
|
+
const status = results.some((result) => result.status !== "completed" && result.status !== "failed")
|
|
73
|
+
? "running"
|
|
74
|
+
: results.some((result) => result.status === "failed")
|
|
75
|
+
? "completed_with_errors"
|
|
76
|
+
: "completed";
|
|
77
|
+
return { status, results };
|
|
78
|
+
}
|
|
79
|
+
const result = await request(apiKey, actionName, data, fetcher, context.signal);
|
|
80
|
+
if (actionName === "batch_enrich") {
|
|
81
|
+
const children = looseArray(result.results);
|
|
82
|
+
const requestIds = children.map((child) => optionalString(optionalRecord(child)?.request_id));
|
|
83
|
+
if (!children.length || requestIds.some((id) => !id))
|
|
84
|
+
throw providerResponseError("Orbit batch response is missing child request IDs");
|
|
85
|
+
return { ...result, request_ids: requestIds };
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
export const credentialValidators = {
|
|
90
|
+
async apiKey(input, { fetcher, signal }) {
|
|
91
|
+
await request(input.apiKey, "quote_population", {
|
|
92
|
+
population: { kind: "company", id: "1441", name: "Google" },
|
|
93
|
+
profile_depth: "partial",
|
|
94
|
+
}, fetcher, signal);
|
|
95
|
+
return { profile: { displayName: "Orbit API Key" }, grantedScopes: [], metadata: { apiBaseUrl: baseUrl } };
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
export const executors = defineApiKeyProviderExecutors("orbit", Object.fromEntries(orbitActions.map((action) => [action.name, (values, context) => execute(action.name, values, context)])));
|
|
99
|
+
export const proxy = defineProviderProxy({
|
|
100
|
+
service: "orbit",
|
|
101
|
+
baseUrl: baseUrl,
|
|
102
|
+
auth: { type: "api_key_authorization", prefix: "Bearer " },
|
|
103
|
+
customizeRequest({ headers }) {
|
|
104
|
+
headers.set("accept", "application/json");
|
|
105
|
+
},
|
|
106
|
+
});
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
export const orbitRoutes = {
|
|
2
|
+
search: {
|
|
3
|
+
path: "/v3/search",
|
|
4
|
+
method: "POST",
|
|
5
|
+
pathFields: [],
|
|
6
|
+
queryFields: [],
|
|
7
|
+
body: true,
|
|
8
|
+
},
|
|
9
|
+
get_search: {
|
|
10
|
+
path: "/v3/search/{search_id}",
|
|
11
|
+
method: "GET",
|
|
12
|
+
pathFields: ["search_id"],
|
|
13
|
+
queryFields: [],
|
|
14
|
+
body: false,
|
|
15
|
+
},
|
|
16
|
+
quote_population: {
|
|
17
|
+
path: "/v3/search/populations/quote",
|
|
18
|
+
method: "POST",
|
|
19
|
+
pathFields: [],
|
|
20
|
+
queryFields: [],
|
|
21
|
+
body: true,
|
|
22
|
+
},
|
|
23
|
+
search_population: {
|
|
24
|
+
path: "/v3/search/populations",
|
|
25
|
+
method: "POST",
|
|
26
|
+
pathFields: [],
|
|
27
|
+
queryFields: [],
|
|
28
|
+
body: true,
|
|
29
|
+
},
|
|
30
|
+
batch_enrich: {
|
|
31
|
+
path: "/v3/enrich",
|
|
32
|
+
method: "POST",
|
|
33
|
+
pathFields: [],
|
|
34
|
+
queryFields: [],
|
|
35
|
+
body: true,
|
|
36
|
+
},
|
|
37
|
+
read_profile: {
|
|
38
|
+
path: "/v3/enrich/{profile_id}",
|
|
39
|
+
method: "GET",
|
|
40
|
+
pathFields: ["profile_id"],
|
|
41
|
+
queryFields: ["format"],
|
|
42
|
+
body: false,
|
|
43
|
+
},
|
|
44
|
+
enrich_profile: {
|
|
45
|
+
path: "/v3/enrich/{profile_id}",
|
|
46
|
+
method: "POST",
|
|
47
|
+
pathFields: ["profile_id"],
|
|
48
|
+
queryFields: [],
|
|
49
|
+
body: true,
|
|
50
|
+
},
|
|
51
|
+
get_enrichment: {
|
|
52
|
+
path: "/v3/enrich/requests/{request_id}",
|
|
53
|
+
method: "GET",
|
|
54
|
+
pathFields: ["request_id"],
|
|
55
|
+
queryFields: [],
|
|
56
|
+
body: false,
|
|
57
|
+
},
|
|
58
|
+
create_watcher: {
|
|
59
|
+
path: "/v3/watchers",
|
|
60
|
+
method: "POST",
|
|
61
|
+
pathFields: [],
|
|
62
|
+
queryFields: [],
|
|
63
|
+
body: true,
|
|
64
|
+
},
|
|
65
|
+
list_watchers: {
|
|
66
|
+
path: "/v3/watchers",
|
|
67
|
+
method: "GET",
|
|
68
|
+
pathFields: [],
|
|
69
|
+
queryFields: [],
|
|
70
|
+
body: false,
|
|
71
|
+
},
|
|
72
|
+
get_watcher: {
|
|
73
|
+
path: "/v3/watchers/{watcher_id}",
|
|
74
|
+
method: "GET",
|
|
75
|
+
pathFields: ["watcher_id"],
|
|
76
|
+
queryFields: [],
|
|
77
|
+
body: false,
|
|
78
|
+
},
|
|
79
|
+
update_watcher: {
|
|
80
|
+
path: "/v3/watchers/{watcher_id}",
|
|
81
|
+
method: "PATCH",
|
|
82
|
+
pathFields: ["watcher_id"],
|
|
83
|
+
queryFields: [],
|
|
84
|
+
body: true,
|
|
85
|
+
},
|
|
86
|
+
delete_watcher: {
|
|
87
|
+
path: "/v3/watchers/{watcher_id}",
|
|
88
|
+
method: "DELETE",
|
|
89
|
+
pathFields: ["watcher_id"],
|
|
90
|
+
queryFields: [],
|
|
91
|
+
body: false,
|
|
92
|
+
},
|
|
93
|
+
list_watcher_runs: {
|
|
94
|
+
path: "/v3/watchers/{watcher_id}/runs",
|
|
95
|
+
method: "GET",
|
|
96
|
+
pathFields: ["watcher_id"],
|
|
97
|
+
queryFields: ["limit"],
|
|
98
|
+
body: false,
|
|
99
|
+
},
|
|
100
|
+
create_webhook: {
|
|
101
|
+
path: "/v3/webhooks",
|
|
102
|
+
method: "POST",
|
|
103
|
+
pathFields: [],
|
|
104
|
+
queryFields: [],
|
|
105
|
+
body: true,
|
|
106
|
+
},
|
|
107
|
+
list_webhooks: {
|
|
108
|
+
path: "/v3/webhooks",
|
|
109
|
+
method: "GET",
|
|
110
|
+
pathFields: [],
|
|
111
|
+
queryFields: [],
|
|
112
|
+
body: false,
|
|
113
|
+
},
|
|
114
|
+
delete_webhook: {
|
|
115
|
+
path: "/v3/webhooks/{webhook_id}",
|
|
116
|
+
method: "DELETE",
|
|
117
|
+
pathFields: ["webhook_id"],
|
|
118
|
+
queryFields: [],
|
|
119
|
+
body: false,
|
|
120
|
+
},
|
|
121
|
+
test_webhook: {
|
|
122
|
+
path: "/v3/webhooks/{webhook_id}/test",
|
|
123
|
+
method: "POST",
|
|
124
|
+
pathFields: ["webhook_id"],
|
|
125
|
+
queryFields: [],
|
|
126
|
+
body: true,
|
|
127
|
+
},
|
|
128
|
+
detect_faces: {
|
|
129
|
+
path: "/v3/faces/detect",
|
|
130
|
+
method: "POST",
|
|
131
|
+
pathFields: [],
|
|
132
|
+
queryFields: [],
|
|
133
|
+
body: true,
|
|
134
|
+
},
|
|
135
|
+
search_face_index: {
|
|
136
|
+
path: "/v3/faces/index-search",
|
|
137
|
+
method: "POST",
|
|
138
|
+
pathFields: [],
|
|
139
|
+
queryFields: [],
|
|
140
|
+
body: true,
|
|
141
|
+
},
|
|
142
|
+
bulk_search: {
|
|
143
|
+
path: "/v3/search/bulk",
|
|
144
|
+
method: "POST",
|
|
145
|
+
pathFields: [],
|
|
146
|
+
queryFields: [],
|
|
147
|
+
body: true,
|
|
148
|
+
},
|
|
149
|
+
get_bulk_search: {
|
|
150
|
+
path: "/v3/search/bulk/{job_id}",
|
|
151
|
+
method: "GET",
|
|
152
|
+
pathFields: ["job_id"],
|
|
153
|
+
queryFields: [],
|
|
154
|
+
body: false,
|
|
155
|
+
},
|
|
156
|
+
get_bulk_results: {
|
|
157
|
+
path: "/v3/search/bulk/{job_id}/results",
|
|
158
|
+
method: "GET",
|
|
159
|
+
pathFields: ["job_id"],
|
|
160
|
+
queryFields: ["offset"],
|
|
161
|
+
body: false,
|
|
162
|
+
},
|
|
163
|
+
cancel_bulk_search: {
|
|
164
|
+
path: "/v3/search/bulk/{job_id}/cancel",
|
|
165
|
+
method: "POST",
|
|
166
|
+
pathFields: ["job_id"],
|
|
167
|
+
queryFields: [],
|
|
168
|
+
body: false,
|
|
169
|
+
},
|
|
170
|
+
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { CredentialValidators, ProviderProxyExecutor } from "../../core/types.ts";
|
|
2
|
+
import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
|
|
2
3
|
import { executors } from "./runtime.ts";
|
|
3
4
|
export { executors };
|
|
4
5
|
export declare const proxy: ProviderProxyExecutor;
|
|
5
6
|
export declare const credentialValidators: CredentialValidators;
|
|
7
|
+
export declare const triggers: readonly IntegrationDefinition[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defineProviderProxy } from "../provider-runtime.js";
|
|
2
2
|
import { executors, pandadocApiBaseUrl, validatePandadocCredential } from "./runtime.js";
|
|
3
|
+
import { pandadocDocumentEvent } from "./trigger-on-document-event.js";
|
|
3
4
|
export { executors };
|
|
4
5
|
const service = "pandadoc";
|
|
5
6
|
export const proxy = defineProviderProxy({
|
|
@@ -15,3 +16,4 @@ export const credentialValidators = {
|
|
|
15
16
|
return validatePandadocCredential({ apiKey: input.apiKey, ...input.values }, fetcher);
|
|
16
17
|
},
|
|
17
18
|
};
|
|
19
|
+
export const triggers = [pandadocDocumentEvent];
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { jsonSchema as s } from "../../core/json-schema.js";
|
|
2
|
+
export const snapshot = {
|
|
3
|
+
key: "pandadoc.on_document_event",
|
|
4
|
+
provider: "pandadoc",
|
|
5
|
+
name: "on_document_event",
|
|
6
|
+
displayName: "Document Status Changed",
|
|
7
|
+
description: "Receives document status changes in the connected workspace, optionally only when the entire document is completed.",
|
|
8
|
+
definitionVersion: 2,
|
|
9
|
+
type: "integration",
|
|
10
|
+
endpoint: { methods: ["POST"], body: { formats: ["json"], allowArray: true, allowEmpty: false }, successStatus: 200 },
|
|
11
|
+
configInputs: [
|
|
12
|
+
{
|
|
13
|
+
handle: "completedOnly",
|
|
14
|
+
jsonSchema: { type: "boolean", title: "Completed documents only" },
|
|
15
|
+
nullable: false,
|
|
16
|
+
value: true,
|
|
17
|
+
},
|
|
18
|
+
],
|
|
19
|
+
outputs: [
|
|
20
|
+
{
|
|
21
|
+
handle: "events",
|
|
22
|
+
nullable: false,
|
|
23
|
+
jsonSchema: {
|
|
24
|
+
type: "array",
|
|
25
|
+
items: {
|
|
26
|
+
type: "object",
|
|
27
|
+
properties: { event: s.string(), data: { type: "object" } },
|
|
28
|
+
required: ["event", "data"],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
],
|
|
33
|
+
};
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { 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 { bytes, verifyHexHmac } from "../../triggers/signature.js";
|
|
5
|
+
import { snapshot } from "./trigger-on-document-event.definition.js";
|
|
6
|
+
function webhook(value) {
|
|
7
|
+
if (!isJsonObject(value) ||
|
|
8
|
+
typeof value.uuid != "string" ||
|
|
9
|
+
!value.uuid ||
|
|
10
|
+
typeof value.shared_key != "string" ||
|
|
11
|
+
!value.shared_key)
|
|
12
|
+
throw new TransientIntegrationError("PandaDoc returned an invalid webhook identity or shared key.");
|
|
13
|
+
return { id: value.uuid, secret: value.shared_key };
|
|
14
|
+
}
|
|
15
|
+
export const pandadocDocumentEvent = {
|
|
16
|
+
snapshot,
|
|
17
|
+
initialState: { checkpoint: null, subscription: {} },
|
|
18
|
+
async reconcile(context) {
|
|
19
|
+
const endpoint = "/public/v1/webhook-subscriptions";
|
|
20
|
+
return reconcileManagedWebhook(context, {
|
|
21
|
+
async find() {
|
|
22
|
+
const found = [];
|
|
23
|
+
const result = await webhookRequest(context, { endpoint, method: "GET" });
|
|
24
|
+
if (!isJsonObject(result.data) || !Array.isArray(result.data.items))
|
|
25
|
+
throw new TransientIntegrationError("PandaDoc returned an invalid webhook list.");
|
|
26
|
+
for (const item of result.data.items) {
|
|
27
|
+
if (!isJsonObject(item) || typeof item.url != "string")
|
|
28
|
+
throw new TransientIntegrationError("PandaDoc returned an invalid webhook.");
|
|
29
|
+
if (item.url == context.endpointUrl)
|
|
30
|
+
found.push(webhook(item));
|
|
31
|
+
}
|
|
32
|
+
return found;
|
|
33
|
+
},
|
|
34
|
+
async create() {
|
|
35
|
+
const result = await webhookRequest(context, {
|
|
36
|
+
endpoint,
|
|
37
|
+
method: "POST",
|
|
38
|
+
body: {
|
|
39
|
+
name: "OOMOL document status",
|
|
40
|
+
url: context.endpointUrl,
|
|
41
|
+
active: true,
|
|
42
|
+
triggers: ["document_state_changed"],
|
|
43
|
+
payload: ["metadata"],
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
return webhook(result.data);
|
|
47
|
+
},
|
|
48
|
+
async align(id) {
|
|
49
|
+
await webhookRequest(context, {
|
|
50
|
+
endpoint: `${endpoint}/${encodeURIComponent(id)}`,
|
|
51
|
+
method: "PATCH",
|
|
52
|
+
body: { url: context.endpointUrl, active: true, triggers: ["document_state_changed"], payload: ["metadata"] },
|
|
53
|
+
});
|
|
54
|
+
},
|
|
55
|
+
async remove(id) {
|
|
56
|
+
await webhookRequest(context, { endpoint: `${endpoint}/${encodeURIComponent(id)}`, method: "DELETE" });
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
},
|
|
60
|
+
async receive(context) {
|
|
61
|
+
const secret = context.state?.subscription.secret;
|
|
62
|
+
if (typeof secret != "string")
|
|
63
|
+
return { outcome: "respond", status: 503, body: "", contentType: "text/plain" };
|
|
64
|
+
if (!(await verifyHexHmac(secret, [context.rawBody], context.query("signature"))))
|
|
65
|
+
return { outcome: "respond", status: 401, body: "", contentType: "text/plain" };
|
|
66
|
+
if (!Array.isArray(context.payload))
|
|
67
|
+
return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
|
|
68
|
+
const events = [];
|
|
69
|
+
const identities = [];
|
|
70
|
+
for (const item of context.payload) {
|
|
71
|
+
if (!isJsonObject(item) || item.event != "document_state_changed")
|
|
72
|
+
continue;
|
|
73
|
+
const data = item.data;
|
|
74
|
+
if (!isJsonObject(data) ||
|
|
75
|
+
typeof data.id != "string" ||
|
|
76
|
+
!data.id ||
|
|
77
|
+
typeof data.status != "string" ||
|
|
78
|
+
typeof data.date_modified != "string" ||
|
|
79
|
+
!data.date_modified)
|
|
80
|
+
return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
|
|
81
|
+
if (context.config.completedOnly === true && data.status != "document.completed")
|
|
82
|
+
continue;
|
|
83
|
+
events.push(item);
|
|
84
|
+
identities.push(JSON.stringify([data.id, data.status, data.date_modified]));
|
|
85
|
+
}
|
|
86
|
+
if (!events.length)
|
|
87
|
+
return { outcome: "ignored", reason: "No matching document status changes." };
|
|
88
|
+
// Derive deduplication identity from the signed body, not an unsigned delivery header.
|
|
89
|
+
const digest = await crypto.subtle.digest("SHA-256", bytes(JSON.stringify(identities.sort())));
|
|
90
|
+
return {
|
|
91
|
+
outcome: "event",
|
|
92
|
+
dedupeKey: Array.from(new Uint8Array(digest), (value) => value.toString(16).padStart(2, "0")).join(""),
|
|
93
|
+
outputs: { events },
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
};
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { CredentialValidators, ProviderProxyExecutor } from "../../core/types.ts";
|
|
2
|
+
import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
|
|
2
3
|
import { executors } from "./runtime.ts";
|
|
3
4
|
export { executors };
|
|
4
5
|
export declare const credentialValidators: CredentialValidators;
|
|
5
6
|
export declare const proxy: ProviderProxyExecutor;
|
|
7
|
+
export declare const triggers: readonly IntegrationDefinition[];
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { defineProviderProxy } from "../provider-runtime.js";
|
|
2
2
|
import { executors, validatePipedriveCredential } from "./runtime.js";
|
|
3
|
+
import { pipedriveCrmEvent } from "./trigger-on-crm-event.js";
|
|
3
4
|
export { executors };
|
|
4
5
|
const service = "pipedrive";
|
|
5
6
|
const apiOrigin = "https://api.pipedrive.com";
|
|
@@ -13,3 +14,4 @@ export const proxy = defineProviderProxy({
|
|
|
13
14
|
baseUrl: apiOrigin,
|
|
14
15
|
auth: { type: "api_key_header", name: "x-api-token" },
|
|
15
16
|
});
|
|
17
|
+
export const triggers = [pipedriveCrmEvent];
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsonSchema as s } from "../../core/json-schema.js";
|
|
2
|
+
const events = ["deal.created", "deal.stage_changed", "deal.status_changed", "person.created"];
|
|
3
|
+
export const snapshot = {
|
|
4
|
+
key: "pipedrive.on_crm_event",
|
|
5
|
+
provider: "pipedrive",
|
|
6
|
+
name: "on_crm_event",
|
|
7
|
+
displayName: "Deal or Contact Event",
|
|
8
|
+
description: "Receives new deals or contacts, or actual changes to a deal stage or status using Pipedrive Webhooks v2.",
|
|
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: "eventType",
|
|
19
|
+
jsonSchema: { type: "string", enum: events, title: "Event" },
|
|
20
|
+
nullable: false,
|
|
21
|
+
value: "deal.created",
|
|
22
|
+
},
|
|
23
|
+
],
|
|
24
|
+
outputs: [
|
|
25
|
+
{ handle: "event", jsonSchema: { type: "string", enum: events }, nullable: false },
|
|
26
|
+
{ handle: "deliveryId", jsonSchema: s.string(), nullable: false },
|
|
27
|
+
{ handle: "objectId", jsonSchema: s.string(), nullable: false },
|
|
28
|
+
{ handle: "body", jsonSchema: { type: "object" }, nullable: false },
|
|
29
|
+
],
|
|
30
|
+
};
|
|
@@ -0,0 +1,101 @@
|
|
|
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 { sameSecret } from "../../triggers/signature.js";
|
|
5
|
+
import { basicAuthorizationHeader } from "../provider-runtime.js";
|
|
6
|
+
import { snapshot } from "./trigger-on-crm-event.definition.js";
|
|
7
|
+
export const pipedriveCrmEvent = {
|
|
8
|
+
snapshot,
|
|
9
|
+
initialState: { checkpoint: null, subscription: {} },
|
|
10
|
+
async reconcile(context) {
|
|
11
|
+
const current = await webhookRequest(context, { endpoint: "/v1/users/me", method: "GET" });
|
|
12
|
+
if (!isJsonObject(current.data) ||
|
|
13
|
+
current.data.success !== true ||
|
|
14
|
+
!isJsonObject(current.data.data) ||
|
|
15
|
+
!["string", "number"].includes(typeof current.data.data.company_id))
|
|
16
|
+
throw new TransientIntegrationError("Pipedrive returned no account identity.");
|
|
17
|
+
const companyId = String(current.data.data.company_id);
|
|
18
|
+
const event = String(context.config.eventType);
|
|
19
|
+
const entity = event == "person.created" ? "person" : "deal";
|
|
20
|
+
const action = event.endsWith(".created") ? "create" : "change";
|
|
21
|
+
const result = await reconcileManagedWebhook(context, {
|
|
22
|
+
async find() {
|
|
23
|
+
const response = await webhookRequest(context, { endpoint: "/v1/webhooks", method: "GET" });
|
|
24
|
+
if (!isJsonObject(response.data) || response.data.success !== true || !Array.isArray(response.data.data))
|
|
25
|
+
throw new TransientIntegrationError("Pipedrive returned an invalid webhook list.");
|
|
26
|
+
const found = [];
|
|
27
|
+
for (const item of response.data.data) {
|
|
28
|
+
if (!isJsonObject(item) || typeof item.subscription_url != "string")
|
|
29
|
+
throw new TransientIntegrationError("Pipedrive returned an invalid webhook.");
|
|
30
|
+
if (item.subscription_url != context.endpointUrl)
|
|
31
|
+
continue;
|
|
32
|
+
if (!["number", "string"].includes(typeof item.id) ||
|
|
33
|
+
item.event_object != entity ||
|
|
34
|
+
item.event_action != action ||
|
|
35
|
+
item.version != "2.0")
|
|
36
|
+
throw new PermanentIntegrationError("Pipedrive webhook event settings differ from this subscription.");
|
|
37
|
+
found.push({ id: String(item.id), secret: context.callbackSecret });
|
|
38
|
+
}
|
|
39
|
+
return found;
|
|
40
|
+
},
|
|
41
|
+
async create() {
|
|
42
|
+
const response = await webhookRequest(context, {
|
|
43
|
+
endpoint: "/v1/webhooks",
|
|
44
|
+
method: "POST",
|
|
45
|
+
body: {
|
|
46
|
+
subscription_url: context.endpointUrl,
|
|
47
|
+
event_action: action,
|
|
48
|
+
event_object: entity,
|
|
49
|
+
version: "2.0",
|
|
50
|
+
http_auth_user: "oomol",
|
|
51
|
+
http_auth_password: context.callbackSecret,
|
|
52
|
+
},
|
|
53
|
+
});
|
|
54
|
+
if (!isJsonObject(response.data) ||
|
|
55
|
+
response.data.success !== true ||
|
|
56
|
+
!isJsonObject(response.data.data) ||
|
|
57
|
+
!["number", "string"].includes(typeof response.data.data.id))
|
|
58
|
+
throw new TransientIntegrationError("Pipedrive webhook creation returned no identity.");
|
|
59
|
+
return { id: String(response.data.data.id), secret: context.callbackSecret };
|
|
60
|
+
},
|
|
61
|
+
async remove(id) {
|
|
62
|
+
await webhookRequest(context, { endpoint: `/v1/webhooks/${encodeURIComponent(id)}`, method: "DELETE" });
|
|
63
|
+
},
|
|
64
|
+
});
|
|
65
|
+
if (context.active)
|
|
66
|
+
await context.state.saveSubscription({ ...context.state.subscription, companyId }, new Date(context.now.getTime() + 86_400_000));
|
|
67
|
+
return result;
|
|
68
|
+
},
|
|
69
|
+
receive(context) {
|
|
70
|
+
const expected = basicAuthorizationHeader(`oomol:${context.callbackSecret}`);
|
|
71
|
+
if (!sameSecret(context.header("authorization"), expected))
|
|
72
|
+
return { outcome: "respond", status: 401, body: "", contentType: "text/plain" };
|
|
73
|
+
const companyId = context.state?.subscription.companyId;
|
|
74
|
+
if (typeof companyId != "string")
|
|
75
|
+
return { outcome: "respond", status: 503, body: "", contentType: "text/plain" };
|
|
76
|
+
const body = context.payload;
|
|
77
|
+
if (!isJsonObject(body) || !isJsonObject(body.meta) || !isJsonObject(body.data))
|
|
78
|
+
return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
|
|
79
|
+
const meta = body.meta;
|
|
80
|
+
if (meta.version != "2.0" ||
|
|
81
|
+
String(meta.company_id) != companyId ||
|
|
82
|
+
String(meta.webhook_id) != context.state?.subscription.hookId)
|
|
83
|
+
return { outcome: "ignored", reason: "Pipedrive subscription or company does not match." };
|
|
84
|
+
const event = String(context.config.eventType);
|
|
85
|
+
if (meta.entity != (event == "person.created" ? "person" : "deal") ||
|
|
86
|
+
meta.action != (event.endsWith(".created") ? "create" : "change"))
|
|
87
|
+
return { outcome: "ignored", reason: "Pipedrive event does not match." };
|
|
88
|
+
if (!event.endsWith(".created")) {
|
|
89
|
+
const field = event == "deal.stage_changed" ? "stage_id" : "status";
|
|
90
|
+
if (!isJsonObject(body.previous) || !(field in body.previous) || body.previous[field] === body.data[field])
|
|
91
|
+
return { outcome: "ignored", reason: "The selected deal field did not change." };
|
|
92
|
+
}
|
|
93
|
+
if (typeof meta.id != "string" || !meta.id || !["number", "string"].includes(typeof meta.entity_id))
|
|
94
|
+
return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
|
|
95
|
+
return {
|
|
96
|
+
outcome: "event",
|
|
97
|
+
dedupeKey: meta.id,
|
|
98
|
+
outputs: { event, deliveryId: meta.id, objectId: String(meta.entity_id), body },
|
|
99
|
+
};
|
|
100
|
+
},
|
|
101
|
+
};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ActionDefinition, JsonSchema } from "../../core/types.ts";
|
|
2
|
+
export interface PloidEndpoint {
|
|
3
|
+
name: string;
|
|
4
|
+
method: string;
|
|
5
|
+
path: string;
|
|
6
|
+
pathKeys: string[];
|
|
7
|
+
queryKeys: string[];
|
|
8
|
+
operationType: ActionDefinition["operationType"];
|
|
9
|
+
description: string;
|
|
10
|
+
inputSchema: JsonSchema;
|
|
11
|
+
outputSchema: JsonSchema;
|
|
12
|
+
}
|
|
13
|
+
declare const ploidEndpoints: PloidEndpoint[];
|
|
14
|
+
export declare const ploidEndpointByName: Map<string, (typeof ploidEndpoints)[number]>;
|
|
15
|
+
export declare const ploidActions: ActionDefinition[];
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineProviderAction } from "../../core/provider-definition.js";
|
|
2
|
+
import definitions from "./endpoints.json" with { type: "json" };
|
|
3
|
+
const actionLifecycles = {
|
|
4
|
+
start_dataset: { startActionId: "ploid.start_dataset", statusActionId: "ploid.get_dataset" },
|
|
5
|
+
};
|
|
6
|
+
const actionFollowUps = {
|
|
7
|
+
sync_people_search: ["ploid.get_set"],
|
|
8
|
+
get_person: ["ploid.get_person_run"],
|
|
9
|
+
create_dataset: ["ploid.get_dataset"],
|
|
10
|
+
start_dataset: ["ploid.get_dataset"],
|
|
11
|
+
};
|
|
12
|
+
const ploidEndpoints = definitions;
|
|
13
|
+
export const ploidEndpointByName = new Map(ploidEndpoints.map((endpoint) => [endpoint.name, endpoint]));
|
|
14
|
+
export const ploidActions = ploidEndpoints.map((endpoint) => defineProviderAction("ploid", {
|
|
15
|
+
name: endpoint.name,
|
|
16
|
+
description: endpoint.description,
|
|
17
|
+
operationType: endpoint.operationType,
|
|
18
|
+
requiredScopes: [],
|
|
19
|
+
inputSchema: endpoint.inputSchema,
|
|
20
|
+
outputSchema: endpoint.outputSchema,
|
|
21
|
+
asyncLifecycle: actionLifecycles[endpoint.name],
|
|
22
|
+
followUpActions: actionFollowUps[endpoint.name],
|
|
23
|
+
}));
|