@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.
Files changed (461) hide show
  1. package/assets/open-connector/catalog/apps/aisa.json +1946 -56
  2. package/assets/open-connector/catalog/apps/akta.json +1181 -0
  3. package/assets/open-connector/catalog/apps/asana.json +110 -0
  4. package/assets/open-connector/catalog/apps/calendly.json +103 -0
  5. package/assets/open-connector/catalog/apps/clickup.json +104 -0
  6. package/assets/open-connector/catalog/apps/cloro.json +9289 -0
  7. package/assets/open-connector/catalog/apps/contextdev.json +20670 -0
  8. package/assets/open-connector/catalog/apps/deepseek.json +177 -0
  9. package/assets/open-connector/catalog/apps/defillama.json +23747 -0
  10. package/assets/open-connector/catalog/apps/fireflies.json +103 -0
  11. package/assets/open-connector/catalog/apps/fundable.json +7926 -0
  12. package/assets/open-connector/catalog/apps/intercom.json +110 -0
  13. package/assets/open-connector/catalog/apps/jira.json +110 -0
  14. package/assets/open-connector/catalog/apps/keenable.json +235 -0
  15. package/assets/open-connector/catalog/apps/kolsprite_mcp.json +1227 -0
  16. package/assets/open-connector/catalog/apps/litescrape.json +52514 -0
  17. package/assets/open-connector/catalog/apps/magichour.json +5926 -0
  18. package/assets/open-connector/catalog/apps/minimax.json +24 -14
  19. package/assets/open-connector/catalog/apps/notion.json +731 -76
  20. package/assets/open-connector/catalog/apps/octen.json +5248 -0
  21. package/assets/open-connector/catalog/apps/openrouter.json +10 -0
  22. package/assets/open-connector/catalog/apps/orbit.json +3574 -0
  23. package/assets/open-connector/catalog/apps/pandadoc.json +68 -0
  24. package/assets/open-connector/catalog/apps/pipedrive.json +86 -0
  25. package/assets/open-connector/catalog/apps/ploid.json +9802 -0
  26. package/assets/open-connector/catalog/apps/resend.json +100 -0
  27. package/assets/open-connector/catalog/apps/salesforce.json +2487 -119
  28. package/assets/open-connector/catalog/apps/saperly.json +7056 -0
  29. package/assets/open-connector/catalog/apps/search1api.json +2382 -0
  30. package/assets/open-connector/catalog/apps/sentry.json +129 -0
  31. package/assets/open-connector/catalog/apps/slackbot.json +230 -1
  32. package/assets/open-connector/catalog/apps/surf.json +11378 -0
  33. package/assets/open-connector/catalog/apps/tally.json +113 -0
  34. package/assets/open-connector/catalog/apps/tinyfish.json +6154 -0
  35. package/assets/open-connector/catalog/apps/typeform.json +90 -1
  36. package/assets/open-connector/catalog/apps/vaquill.json +5944 -0
  37. package/assets/open-connector/catalog/apps/vercel.json +110 -0
  38. package/assets/open-connector/catalog/apps/weixin_store.json +1256 -7
  39. package/assets/open-connector/catalog/apps/zoom.json +112 -0
  40. package/assets/open-connector/catalog/apps-index.json +1 -1
  41. package/package.json +1 -1
  42. package/src/core/json-schema.d.ts +11 -3
  43. package/src/core/json-schema.js +13 -3
  44. package/src/providers/action-contracts.generated.d.ts +23 -6
  45. package/src/providers/aisa/executors.js +238 -6
  46. package/src/providers/aisa/firecrawl-actions.d.ts +9 -0
  47. package/src/providers/aisa/firecrawl-actions.js +115 -0
  48. package/src/providers/akta/actions.d.ts +9 -0
  49. package/src/providers/akta/actions.js +420 -0
  50. package/src/providers/akta/executors.d.ts +4 -0
  51. package/src/providers/akta/executors.js +103 -0
  52. package/src/providers/asana/executors.d.ts +2 -0
  53. package/src/providers/asana/executors.js +2 -0
  54. package/src/providers/asana/trigger-on-task-event.d.ts +2 -0
  55. package/src/providers/asana/trigger-on-task-event.definition.d.ts +4 -0
  56. package/src/providers/asana/trigger-on-task-event.definition.js +42 -0
  57. package/src/providers/asana/trigger-on-task-event.js +160 -0
  58. package/src/providers/calendly/executors.d.ts +2 -0
  59. package/src/providers/calendly/executors.js +2 -0
  60. package/src/providers/calendly/trigger-on-booking-event.d.ts +2 -0
  61. package/src/providers/calendly/trigger-on-booking-event.definition.d.ts +5 -0
  62. package/src/providers/calendly/trigger-on-booking-event.definition.js +42 -0
  63. package/src/providers/calendly/trigger-on-booking-event.js +144 -0
  64. package/src/providers/clickup/executors.d.ts +2 -0
  65. package/src/providers/clickup/executors.js +2 -0
  66. package/src/providers/clickup/trigger-on-task-event.d.ts +2 -0
  67. package/src/providers/clickup/trigger-on-task-event.definition.d.ts +4 -0
  68. package/src/providers/clickup/trigger-on-task-event.definition.js +41 -0
  69. package/src/providers/clickup/trigger-on-task-event.js +94 -0
  70. package/src/providers/cloro/actions.d.ts +12 -0
  71. package/src/providers/cloro/actions.js +155 -0
  72. package/src/providers/cloro/executors.d.ts +4 -0
  73. package/src/providers/cloro/executors.js +67 -0
  74. package/src/providers/cloro/inputs.d.ts +10 -0
  75. package/src/providers/cloro/inputs.js +680 -0
  76. package/src/providers/contextdev/actions.d.ts +14 -0
  77. package/src/providers/contextdev/actions.js +647 -0
  78. package/src/providers/contextdev/executors.d.ts +4 -0
  79. package/src/providers/contextdev/executors.js +109 -0
  80. package/src/providers/contextdev/files.d.ts +3 -0
  81. package/src/providers/contextdev/files.js +49 -0
  82. package/src/providers/contextdev/input-schemas.d.ts +49 -0
  83. package/src/providers/contextdev/input-schemas.js +3082 -0
  84. package/src/providers/contextdev/output-schemas.d.ts +49 -0
  85. package/src/providers/contextdev/output-schemas.js +1599 -0
  86. package/src/providers/deepseek/executors.d.ts +0 -5
  87. package/src/providers/deepseek/executors.js +38 -25
  88. package/src/providers/defillama/actions.d.ts +24 -0
  89. package/src/providers/defillama/actions.js +24 -0
  90. package/src/providers/defillama/dimensions-definitions.d.ts +2 -0
  91. package/src/providers/defillama/dimensions-definitions.js +1387 -0
  92. package/src/providers/defillama/ecosystem-definitions.d.ts +2 -0
  93. package/src/providers/defillama/ecosystem-definitions.js +758 -0
  94. package/src/providers/defillama/equities-definitions.d.ts +2 -0
  95. package/src/providers/defillama/equities-definitions.js +733 -0
  96. package/src/providers/defillama/executors.d.ts +4 -0
  97. package/src/providers/defillama/executors.js +196 -0
  98. package/src/providers/defillama/markets-definitions.d.ts +2 -0
  99. package/src/providers/defillama/markets-definitions.js +624 -0
  100. package/src/providers/defillama/shared-schemas.d.ts +71 -0
  101. package/src/providers/defillama/shared-schemas.js +157 -0
  102. package/src/providers/defillama/tvl-definitions.d.ts +2 -0
  103. package/src/providers/defillama/tvl-definitions.js +546 -0
  104. package/src/providers/defillama/yields-definitions.d.ts +2 -0
  105. package/src/providers/defillama/yields-definitions.js +766 -0
  106. package/src/providers/feishu_app_bot/trigger-on-event.js +2 -0
  107. package/src/providers/fireflies/executors.d.ts +2 -0
  108. package/src/providers/fireflies/executors.js +2 -0
  109. package/src/providers/fireflies/trigger-on-meeting-ready.d.ts +2 -0
  110. package/src/providers/fireflies/trigger-on-meeting-ready.definition.d.ts +4 -0
  111. package/src/providers/fireflies/trigger-on-meeting-ready.definition.js +44 -0
  112. package/src/providers/fireflies/trigger-on-meeting-ready.js +60 -0
  113. package/src/providers/fundable/actions.d.ts +8 -0
  114. package/src/providers/fundable/actions.js +1515 -0
  115. package/src/providers/fundable/executors.d.ts +4 -0
  116. package/src/providers/fundable/executors.js +74 -0
  117. package/src/providers/gmail/message.d.ts +1 -6
  118. package/src/providers/gmail/message.js +1 -1
  119. package/src/providers/intercom/executors.d.ts +2 -0
  120. package/src/providers/intercom/executors.js +2 -0
  121. package/src/providers/intercom/trigger-on-conversation-event.d.ts +2 -0
  122. package/src/providers/intercom/trigger-on-conversation-event.definition.d.ts +4 -0
  123. package/src/providers/intercom/trigger-on-conversation-event.definition.js +42 -0
  124. package/src/providers/intercom/trigger-on-conversation-event.js +23 -0
  125. package/src/providers/jira/executors.d.ts +2 -0
  126. package/src/providers/jira/executors.js +2 -0
  127. package/src/providers/jira/trigger-on-issue-event.d.ts +2 -0
  128. package/src/providers/jira/trigger-on-issue-event.definition.d.ts +4 -0
  129. package/src/providers/jira/trigger-on-issue-event.definition.js +44 -0
  130. package/src/providers/jira/trigger-on-issue-event.js +116 -0
  131. package/src/providers/jira/trigger-resource.d.ts +4 -0
  132. package/src/providers/jira/trigger-resource.js +141 -0
  133. package/src/providers/keenable/executors.d.ts +4 -0
  134. package/src/providers/keenable/executors.js +20 -0
  135. package/src/providers/keenable/runtime.d.ts +26 -0
  136. package/src/providers/keenable/runtime.js +89 -0
  137. package/src/providers/kolsprite_mcp/actions.d.ts +2 -0
  138. package/src/providers/kolsprite_mcp/actions.js +519 -0
  139. package/src/providers/kolsprite_mcp/executors.d.ts +4 -0
  140. package/src/providers/kolsprite_mcp/executors.js +89 -0
  141. package/src/providers/litescrape/actions.d.ts +12 -0
  142. package/src/providers/litescrape/actions.js +124 -0
  143. package/src/providers/litescrape/airbnb-schemas.d.ts +2 -0
  144. package/src/providers/litescrape/airbnb-schemas.js +72 -0
  145. package/src/providers/litescrape/aliexpress-schemas.d.ts +2 -0
  146. package/src/providers/litescrape/aliexpress-schemas.js +52 -0
  147. package/src/providers/litescrape/amazon-schemas.d.ts +2 -0
  148. package/src/providers/litescrape/amazon-schemas.js +358 -0
  149. package/src/providers/litescrape/apartments-schemas.d.ts +2 -0
  150. package/src/providers/litescrape/apartments-schemas.js +45 -0
  151. package/src/providers/litescrape/apple-schemas.d.ts +2 -0
  152. package/src/providers/litescrape/apple-schemas.js +215 -0
  153. package/src/providers/litescrape/ashby-schemas.d.ts +2 -0
  154. package/src/providers/litescrape/ashby-schemas.js +82 -0
  155. package/src/providers/litescrape/baidu-schemas.d.ts +2 -0
  156. package/src/providers/litescrape/baidu-schemas.js +31 -0
  157. package/src/providers/litescrape/bestbuy-schemas.d.ts +2 -0
  158. package/src/providers/litescrape/bestbuy-schemas.js +56 -0
  159. package/src/providers/litescrape/bing-schemas.d.ts +2 -0
  160. package/src/providers/litescrape/bing-schemas.js +315 -0
  161. package/src/providers/litescrape/brave-schemas.d.ts +2 -0
  162. package/src/providers/litescrape/brave-schemas.js +101 -0
  163. package/src/providers/litescrape/copilot-schemas.d.ts +2 -0
  164. package/src/providers/litescrape/copilot-schemas.js +590 -0
  165. package/src/providers/litescrape/duckduckgo-schemas.d.ts +2 -0
  166. package/src/providers/litescrape/duckduckgo-schemas.js +64 -0
  167. package/src/providers/litescrape/ebay-schemas.d.ts +2 -0
  168. package/src/providers/litescrape/ebay-schemas.js +300 -0
  169. package/src/providers/litescrape/etsy-schemas.d.ts +2 -0
  170. package/src/providers/litescrape/etsy-schemas.js +52 -0
  171. package/src/providers/litescrape/eventbrite-schemas.d.ts +2 -0
  172. package/src/providers/litescrape/eventbrite-schemas.js +43 -0
  173. package/src/providers/litescrape/executors.d.ts +4 -0
  174. package/src/providers/litescrape/executors.js +138 -0
  175. package/src/providers/litescrape/facebook-schemas.d.ts +2 -0
  176. package/src/providers/litescrape/facebook-schemas.js +283 -0
  177. package/src/providers/litescrape/glassdoor-schemas.d.ts +2 -0
  178. package/src/providers/litescrape/glassdoor-schemas.js +147 -0
  179. package/src/providers/litescrape/google-schemas.d.ts +2 -0
  180. package/src/providers/litescrape/google-schemas.js +1686 -0
  181. package/src/providers/litescrape/homedepot-schemas.d.ts +2 -0
  182. package/src/providers/litescrape/homedepot-schemas.js +58 -0
  183. package/src/providers/litescrape/homes-schemas.d.ts +2 -0
  184. package/src/providers/litescrape/homes-schemas.js +45 -0
  185. package/src/providers/litescrape/ikea-schemas.d.ts +2 -0
  186. package/src/providers/litescrape/ikea-schemas.js +56 -0
  187. package/src/providers/litescrape/indeed-schemas.d.ts +2 -0
  188. package/src/providers/litescrape/indeed-schemas.js +141 -0
  189. package/src/providers/litescrape/instagram-schemas.d.ts +2 -0
  190. package/src/providers/litescrape/instagram-schemas.js +234 -0
  191. package/src/providers/litescrape/kroger-schemas.d.ts +2 -0
  192. package/src/providers/litescrape/kroger-schemas.js +62 -0
  193. package/src/providers/litescrape/levels-schemas.d.ts +2 -0
  194. package/src/providers/litescrape/levels-schemas.js +153 -0
  195. package/src/providers/litescrape/naver-schemas.d.ts +2 -0
  196. package/src/providers/litescrape/naver-schemas.js +107 -0
  197. package/src/providers/litescrape/realtor-schemas.d.ts +2 -0
  198. package/src/providers/litescrape/realtor-schemas.js +47 -0
  199. package/src/providers/litescrape/redfin-schemas.d.ts +2 -0
  200. package/src/providers/litescrape/redfin-schemas.js +112 -0
  201. package/src/providers/litescrape/shared.d.ts +9 -0
  202. package/src/providers/litescrape/shared.js +1 -0
  203. package/src/providers/litescrape/sprouts-schemas.d.ts +2 -0
  204. package/src/providers/litescrape/sprouts-schemas.js +72 -0
  205. package/src/providers/litescrape/target-schemas.d.ts +2 -0
  206. package/src/providers/litescrape/target-schemas.js +56 -0
  207. package/src/providers/litescrape/tiktok-schemas.d.ts +2 -0
  208. package/src/providers/litescrape/tiktok-schemas.js +625 -0
  209. package/src/providers/litescrape/tools.d.ts +2 -0
  210. package/src/providers/litescrape/tools.js +88 -0
  211. package/src/providers/litescrape/tripadvisor-schemas.d.ts +2 -0
  212. package/src/providers/litescrape/tripadvisor-schemas.js +119 -0
  213. package/src/providers/litescrape/walmart-schemas.d.ts +2 -0
  214. package/src/providers/litescrape/walmart-schemas.js +52 -0
  215. package/src/providers/litescrape/wayfair-schemas.d.ts +2 -0
  216. package/src/providers/litescrape/wayfair-schemas.js +52 -0
  217. package/src/providers/litescrape/web-schemas.d.ts +2 -0
  218. package/src/providers/litescrape/web-schemas.js +463 -0
  219. package/src/providers/litescrape/wholefoods-schemas.d.ts +2 -0
  220. package/src/providers/litescrape/wholefoods-schemas.js +56 -0
  221. package/src/providers/litescrape/x-schemas.d.ts +2 -0
  222. package/src/providers/litescrape/x-schemas.js +128 -0
  223. package/src/providers/litescrape/yahoo-schemas.d.ts +2 -0
  224. package/src/providers/litescrape/yahoo-schemas.js +234 -0
  225. package/src/providers/litescrape/yandex-schemas.d.ts +2 -0
  226. package/src/providers/litescrape/yandex-schemas.js +179 -0
  227. package/src/providers/litescrape/yelp-schemas.d.ts +2 -0
  228. package/src/providers/litescrape/yelp-schemas.js +130 -0
  229. package/src/providers/litescrape/youtube-schemas.d.ts +2 -0
  230. package/src/providers/litescrape/youtube-schemas.js +128 -0
  231. package/src/providers/litescrape/zillow-schemas.d.ts +2 -0
  232. package/src/providers/litescrape/zillow-schemas.js +128 -0
  233. package/src/providers/litescrape/ziprecruiter-schemas.d.ts +2 -0
  234. package/src/providers/litescrape/ziprecruiter-schemas.js +96 -0
  235. package/src/providers/magichour/actions.d.ts +22 -0
  236. package/src/providers/magichour/actions.js +308 -0
  237. package/src/providers/magichour/audio-schemas.d.ts +2 -0
  238. package/src/providers/magichour/audio-schemas.js +54 -0
  239. package/src/providers/magichour/executors.d.ts +4 -0
  240. package/src/providers/magichour/executors.js +115 -0
  241. package/src/providers/magichour/image-schemas.d.ts +2 -0
  242. package/src/providers/magichour/image-schemas.js +443 -0
  243. package/src/providers/magichour/project-schemas.d.ts +8 -0
  244. package/src/providers/magichour/project-schemas.js +65 -0
  245. package/src/providers/magichour/shared-schemas.d.ts +8 -0
  246. package/src/providers/magichour/shared-schemas.js +18 -0
  247. package/src/providers/magichour/utility-schemas.d.ts +11 -0
  248. package/src/providers/magichour/utility-schemas.js +150 -0
  249. package/src/providers/magichour/video-schemas.d.ts +2 -0
  250. package/src/providers/magichour/video-schemas.js +629 -0
  251. package/src/providers/magichour/voices.d.ts +1 -0
  252. package/src/providers/magichour/voices.js +1268 -0
  253. package/src/providers/minimax/executors.js +19 -4
  254. package/src/providers/minimax/text-models.d.ts +2 -0
  255. package/src/providers/minimax/text-models.js +34 -0
  256. package/src/providers/moneyforward_mcp/manifest.d.ts +0 -2
  257. package/src/providers/moneyforward_mcp/manifest.js +1 -1
  258. package/src/providers/notion/executors.js +36 -3
  259. package/src/providers/octen/actions.d.ts +6 -0
  260. package/src/providers/octen/actions.js +919 -0
  261. package/src/providers/octen/executors.d.ts +4 -0
  262. package/src/providers/octen/executors.js +125 -0
  263. package/src/providers/octen/inputs.d.ts +2 -0
  264. package/src/providers/octen/inputs.js +2434 -0
  265. package/src/providers/octen/research.d.ts +1 -0
  266. package/src/providers/octen/research.js +86 -0
  267. package/src/providers/openrouter/executors.js +7 -4
  268. package/src/providers/orbit/actions.d.ts +2 -0
  269. package/src/providers/orbit/actions.js +3030 -0
  270. package/src/providers/orbit/executors.d.ts +4 -0
  271. package/src/providers/orbit/executors.js +106 -0
  272. package/src/providers/orbit/routes.d.ts +9 -0
  273. package/src/providers/orbit/routes.js +170 -0
  274. package/src/providers/pandadoc/executors.d.ts +2 -0
  275. package/src/providers/pandadoc/executors.js +2 -0
  276. package/src/providers/pandadoc/trigger-on-document-event.d.ts +2 -0
  277. package/src/providers/pandadoc/trigger-on-document-event.definition.d.ts +4 -0
  278. package/src/providers/pandadoc/trigger-on-document-event.definition.js +33 -0
  279. package/src/providers/pandadoc/trigger-on-document-event.js +96 -0
  280. package/src/providers/pipedrive/executors.d.ts +2 -0
  281. package/src/providers/pipedrive/executors.js +2 -0
  282. package/src/providers/pipedrive/trigger-on-crm-event.d.ts +2 -0
  283. package/src/providers/pipedrive/trigger-on-crm-event.definition.d.ts +4 -0
  284. package/src/providers/pipedrive/trigger-on-crm-event.definition.js +30 -0
  285. package/src/providers/pipedrive/trigger-on-crm-event.js +101 -0
  286. package/src/providers/ploid/actions.d.ts +16 -0
  287. package/src/providers/ploid/actions.js +23 -0
  288. package/src/providers/ploid/endpoints.json +8440 -0
  289. package/src/providers/ploid/executors.d.ts +4 -0
  290. package/src/providers/ploid/executors.js +119 -0
  291. package/src/providers/provider-runtime.d.ts +13 -0
  292. package/src/providers/provider-runtime.js +37 -4
  293. package/src/providers/registry.generated.js +17 -0
  294. package/src/providers/resend/executors.d.ts +2 -0
  295. package/src/providers/resend/executors.js +2 -0
  296. package/src/providers/resend/trigger-on-email-event.d.ts +2 -0
  297. package/src/providers/resend/trigger-on-email-event.definition.d.ts +4 -0
  298. package/src/providers/resend/trigger-on-email-event.definition.js +37 -0
  299. package/src/providers/resend/trigger-on-email-event.js +125 -0
  300. package/src/providers/salesforce/chatter-routes.d.ts +107 -0
  301. package/src/providers/salesforce/chatter-routes.js +140 -0
  302. package/src/providers/salesforce/context.d.ts +2 -2
  303. package/src/providers/salesforce/context.js +7 -4
  304. package/src/providers/salesforce/executors.js +10 -0
  305. package/src/providers/salesforce/runtime-approvals.d.ts +2 -0
  306. package/src/providers/salesforce/runtime-approvals.js +52 -0
  307. package/src/providers/salesforce/runtime-base.js +14 -3
  308. package/src/providers/salesforce/runtime-chatter.d.ts +2 -0
  309. package/src/providers/salesforce/runtime-chatter.js +78 -0
  310. package/src/providers/salesforce/runtime-knowledge.d.ts +2 -0
  311. package/src/providers/salesforce/runtime-knowledge.js +34 -0
  312. package/src/providers/salesforce/runtime-leads.d.ts +2 -0
  313. package/src/providers/salesforce/runtime-leads.js +117 -0
  314. package/src/providers/salesforce/runtime-platform.d.ts +2 -0
  315. package/src/providers/salesforce/runtime-platform.js +67 -0
  316. package/src/providers/saperly/actions.d.ts +17 -0
  317. package/src/providers/saperly/actions.js +869 -0
  318. package/src/providers/saperly/executors.d.ts +4 -0
  319. package/src/providers/saperly/executors.js +113 -0
  320. package/src/providers/saperly/schemas.d.ts +33 -0
  321. package/src/providers/saperly/schemas.js +601 -0
  322. package/src/providers/search1api/actions.d.ts +2 -0
  323. package/src/providers/search1api/actions.js +39 -0
  324. package/src/providers/search1api/executors.d.ts +4 -0
  325. package/src/providers/search1api/executors.js +72 -0
  326. package/src/providers/search1api/runtime.d.ts +3 -0
  327. package/src/providers/search1api/runtime.js +44 -0
  328. package/src/providers/search1api/schemas.d.ts +3 -0
  329. package/src/providers/search1api/schemas.js +1834 -0
  330. package/src/providers/sentry/executors.d.ts +2 -0
  331. package/src/providers/sentry/executors.js +2 -0
  332. package/src/providers/sentry/trigger-on-issue-alert.d.ts +2 -0
  333. package/src/providers/sentry/trigger-on-issue-alert.definition.d.ts +4 -0
  334. package/src/providers/sentry/trigger-on-issue-alert.definition.js +64 -0
  335. package/src/providers/sentry/trigger-on-issue-alert.js +80 -0
  336. package/src/providers/sf_express/runtime.d.ts +0 -16
  337. package/src/providers/sf_express/runtime.js +2 -2
  338. package/src/providers/slack/runtime.d.ts +6 -1
  339. package/src/providers/slack/runtime.js +21 -0
  340. package/src/providers/slackbot/actions.js +17 -1
  341. package/src/providers/slackbot/executors.d.ts +2 -0
  342. package/src/providers/slackbot/executors.js +5 -1
  343. package/src/providers/slackbot/trigger-on-event.d.ts +2 -0
  344. package/src/providers/slackbot/trigger-on-event.definition.d.ts +4 -0
  345. package/src/providers/slackbot/trigger-on-event.definition.js +57 -0
  346. package/src/providers/slackbot/trigger-on-event.js +23 -0
  347. package/src/providers/surf/actions.d.ts +21 -0
  348. package/src/providers/surf/actions.js +26 -0
  349. package/src/providers/surf/discovery-definitions.d.ts +2 -0
  350. package/src/providers/surf/discovery-definitions.js +871 -0
  351. package/src/providers/surf/equity-definitions.d.ts +2 -0
  352. package/src/providers/surf/equity-definitions.js +322 -0
  353. package/src/providers/surf/executors.d.ts +4 -0
  354. package/src/providers/surf/executors.js +131 -0
  355. package/src/providers/surf/market-definitions.d.ts +2 -0
  356. package/src/providers/surf/market-definitions.js +885 -0
  357. package/src/providers/surf/onchain-definitions.d.ts +2 -0
  358. package/src/providers/surf/onchain-definitions.js +901 -0
  359. package/src/providers/surf/prediction-definitions.d.ts +2 -0
  360. package/src/providers/surf/prediction-definitions.js +683 -0
  361. package/src/providers/surf/shared-schemas.d.ts +18 -0
  362. package/src/providers/surf/shared-schemas.js +37 -0
  363. package/src/providers/tally/executors.d.ts +2 -0
  364. package/src/providers/tally/executors.js +2 -0
  365. package/src/providers/tally/trigger-on-form-response.d.ts +2 -0
  366. package/src/providers/tally/trigger-on-form-response.definition.d.ts +4 -0
  367. package/src/providers/tally/trigger-on-form-response.definition.js +54 -0
  368. package/src/providers/tally/trigger-on-form-response.js +166 -0
  369. package/src/providers/tinyfish/actions.d.ts +6 -0
  370. package/src/providers/tinyfish/actions.js +19 -0
  371. package/src/providers/tinyfish/agent-actions.d.ts +2 -0
  372. package/src/providers/tinyfish/agent-actions.js +268 -0
  373. package/src/providers/tinyfish/data-actions.d.ts +2 -0
  374. package/src/providers/tinyfish/data-actions.js +186 -0
  375. package/src/providers/tinyfish/data-schemas.d.ts +7 -0
  376. package/src/providers/tinyfish/data-schemas.js +103 -0
  377. package/src/providers/tinyfish/endpoints.d.ts +14 -0
  378. package/src/providers/tinyfish/endpoints.js +1 -0
  379. package/src/providers/tinyfish/executors.d.ts +4 -0
  380. package/src/providers/tinyfish/executors.js +133 -0
  381. package/src/providers/tinyfish/management-actions.d.ts +2 -0
  382. package/src/providers/tinyfish/management-actions.js +524 -0
  383. package/src/providers/tinyfish/monitor-schemas.d.ts +5 -0
  384. package/src/providers/tinyfish/monitor-schemas.js +65 -0
  385. package/src/providers/tinyfish/research-schemas.d.ts +6 -0
  386. package/src/providers/tinyfish/research-schemas.js +71 -0
  387. package/src/providers/trello/executors.js +5 -2
  388. package/src/providers/typeform/executors.d.ts +2 -0
  389. package/src/providers/typeform/executors.js +2 -0
  390. package/src/providers/typeform/trigger-on-form-response.d.ts +2 -0
  391. package/src/providers/typeform/trigger-on-form-response.definition.d.ts +4 -0
  392. package/src/providers/typeform/trigger-on-form-response.definition.js +40 -0
  393. package/src/providers/typeform/trigger-on-form-response.js +68 -0
  394. package/src/providers/vaquill/actions.d.ts +13 -0
  395. package/src/providers/vaquill/actions.js +529 -0
  396. package/src/providers/vaquill/executors.d.ts +4 -0
  397. package/src/providers/vaquill/executors.js +141 -0
  398. package/src/providers/vaquill/schemas.d.ts +67 -0
  399. package/src/providers/vaquill/schemas.js +4953 -0
  400. package/src/providers/vercel/executors.d.ts +2 -0
  401. package/src/providers/vercel/executors.js +2 -0
  402. package/src/providers/vercel/trigger-on-deployment-event.d.ts +2 -0
  403. package/src/providers/vercel/trigger-on-deployment-event.definition.d.ts +5 -0
  404. package/src/providers/vercel/trigger-on-deployment-event.definition.js +41 -0
  405. package/src/providers/vercel/trigger-on-deployment-event.js +102 -0
  406. package/src/providers/weixin_bot/runtime.d.ts +0 -1
  407. package/src/providers/weixin_bot/runtime.js +1 -1
  408. package/src/providers/weixin_store/access-token.d.ts +3 -3
  409. package/src/providers/weixin_store/access-token.js +15 -7
  410. package/src/providers/weixin_store/executors.js +214 -1
  411. package/src/providers/zoom/executors.d.ts +2 -0
  412. package/src/providers/zoom/executors.js +2 -0
  413. package/src/providers/zoom/trigger-on-recording-ready.d.ts +2 -0
  414. package/src/providers/zoom/trigger-on-recording-ready.definition.d.ts +4 -0
  415. package/src/providers/zoom/trigger-on-recording-ready.definition.js +44 -0
  416. package/src/providers/zoom/trigger-on-recording-ready.js +39 -0
  417. package/src/server/api/action-example.js +12 -1
  418. package/src/server/api/pattern-example.js +35 -1
  419. package/src/server/api/trigger-routes.js +1 -1
  420. package/src/server/connect-app.js +1 -0
  421. package/src/triggers/common/integration.d.ts +15 -3
  422. package/src/triggers/common/integration.js +5 -0
  423. package/src/triggers/common/proxy.d.ts +7 -0
  424. package/src/triggers/managed-webhook.d.ts +13 -0
  425. package/src/triggers/managed-webhook.js +48 -0
  426. package/src/triggers/request.d.ts +5 -1
  427. package/src/triggers/request.js +2 -0
  428. package/src/triggers/resources.d.ts +8 -2
  429. package/src/triggers/resources.js +31 -0
  430. package/src/triggers/signature.d.ts +3 -3
  431. package/src/triggers/signature.js +4 -6
  432. package/src/triggers/sources/configuration-schema.d.ts +5 -0
  433. package/src/triggers/sources/configuration-schema.js +118 -0
  434. package/src/triggers/sources/configuration.d.ts +115 -0
  435. package/src/triggers/sources/configuration.js +1 -0
  436. package/src/triggers/sources/definition.d.ts +61 -0
  437. package/src/triggers/sources/definition.js +3 -0
  438. package/src/triggers/sources/feishu-demands.d.ts +6 -0
  439. package/src/triggers/sources/feishu-demands.js +24 -0
  440. package/src/triggers/sources/feishu-events.d.ts +19 -0
  441. package/src/triggers/sources/feishu-events.js +108 -0
  442. package/src/triggers/sources/feishu.d.ts +3 -0
  443. package/src/triggers/sources/feishu.js +85 -0
  444. package/src/triggers/sources/fireflies.d.ts +3 -0
  445. package/src/triggers/sources/fireflies.js +100 -0
  446. package/src/triggers/sources/intercom.d.ts +3 -0
  447. package/src/triggers/sources/intercom.js +86 -0
  448. package/src/triggers/sources/jira.d.ts +3 -0
  449. package/src/triggers/sources/jira.js +120 -0
  450. package/src/triggers/sources/operation.d.ts +42 -0
  451. package/src/triggers/sources/operation.js +146 -0
  452. package/src/triggers/sources/sentry.d.ts +3 -0
  453. package/src/triggers/sources/sentry.js +125 -0
  454. package/src/triggers/sources/signature.d.ts +1 -0
  455. package/src/triggers/sources/signature.js +10 -0
  456. package/src/triggers/sources/slack.d.ts +3 -0
  457. package/src/triggers/sources/slack.js +127 -0
  458. package/src/triggers/sources/zoom.d.ts +3 -0
  459. package/src/triggers/sources/zoom.js +113 -0
  460. package/src/triggers/trigger-runner.d.ts +2 -0
  461. package/src/triggers/trigger-runner.js +52 -16
@@ -0,0 +1,160 @@
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 { bytes, verifyHexHmac } from "../../triggers/signature.js";
5
+ import { snapshot } from "./trigger-on-task-event.definition.js";
6
+ export const asanaTaskEvent = {
7
+ snapshot,
8
+ initialState: { checkpoint: null, subscription: {} },
9
+ async reconcile(context) {
10
+ const projectId = String(context.config.projectId);
11
+ const selected = context.config.eventTypes;
12
+ if (selected.includes("task.field_changed") && typeof context.config.customFieldId != "string")
13
+ throw new PermanentIntegrationError("Select a custom field for task field changes.");
14
+ const project = await webhookRequest(context, {
15
+ endpoint: `/projects/${encodeURIComponent(projectId)}`,
16
+ method: "GET",
17
+ query: { opt_fields: "workspace.gid" },
18
+ });
19
+ if (!isJsonObject(project.data) ||
20
+ !isJsonObject(project.data.data) ||
21
+ !isJsonObject(project.data.data.workspace) ||
22
+ typeof project.data.data.workspace.gid != "string")
23
+ throw new TransientIntegrationError("Asana returned no project workspace.");
24
+ const workspace = project.data.data.workspace.gid;
25
+ const remove = async (id) => {
26
+ await webhookRequest(context, { endpoint: `/webhooks/${encodeURIComponent(id)}`, method: "DELETE" });
27
+ };
28
+ return reconcileManagedWebhook(context, {
29
+ async find() {
30
+ const found = [];
31
+ const query = {
32
+ workspace,
33
+ resource: projectId,
34
+ limit: 100,
35
+ opt_fields: "gid,target,resource.gid",
36
+ };
37
+ const seen = new Set();
38
+ for (let page = 0; page < 100; page++) {
39
+ const response = await webhookRequest(context, { endpoint: "/webhooks", method: "GET", query });
40
+ if (!isJsonObject(response.data) || !Array.isArray(response.data.data))
41
+ throw new TransientIntegrationError("Asana returned an invalid webhook list.");
42
+ for (const item of response.data.data) {
43
+ if (!isJsonObject(item) || typeof item.target != "string" || typeof item.gid != "string")
44
+ throw new TransientIntegrationError("Asana returned an invalid webhook.");
45
+ if (item.target != context.endpointUrl)
46
+ continue;
47
+ if (!isJsonObject(item.resource) || item.resource.gid != projectId)
48
+ throw new PermanentIntegrationError("Asana webhook project does not match.");
49
+ found.push({
50
+ id: item.gid,
51
+ secret: context.state?.subscription.hookId == item.gid && typeof context.state.subscription.secret == "string"
52
+ ? context.state.subscription.secret
53
+ : "",
54
+ });
55
+ }
56
+ const next = response.data.next_page;
57
+ if (next == null)
58
+ break;
59
+ if (!isJsonObject(next) || typeof next.offset != "string" || seen.has(next.offset))
60
+ throw new TransientIntegrationError("Asana webhook pagination did not advance.");
61
+ seen.add(next.offset);
62
+ query.offset = next.offset;
63
+ if (page == 99)
64
+ throw new PermanentIntegrationError("The Asana webhook list exceeds 10000 entries.");
65
+ }
66
+ if (found.length == 1 && !found[0].secret && context.active) {
67
+ // Recover the unique owned orphan by deleting it before recreating its unreadable secret.
68
+ await remove(found[0].id);
69
+ await context.state.saveSubscription({}, context.now);
70
+ return [];
71
+ }
72
+ return found;
73
+ },
74
+ async create() {
75
+ const response = await webhookRequest(context, {
76
+ endpoint: "/webhooks",
77
+ method: "POST",
78
+ body: {
79
+ data: {
80
+ resource: projectId,
81
+ target: context.endpointUrl,
82
+ filters: [
83
+ { resource_type: "task", action: "added" },
84
+ { resource_type: "task", action: "changed", fields: ["completed", "custom_fields"] },
85
+ ],
86
+ },
87
+ },
88
+ });
89
+ if (!isJsonObject(response.data) ||
90
+ !isJsonObject(response.data.data) ||
91
+ typeof response.data.data.gid != "string" ||
92
+ typeof response.data["X-Hook-Secret"] != "string" ||
93
+ !response.data["X-Hook-Secret"])
94
+ throw new TransientIntegrationError("Asana webhook creation returned no identity or signing secret.");
95
+ return { id: response.data.data.gid, secret: response.data["X-Hook-Secret"] };
96
+ },
97
+ remove,
98
+ });
99
+ },
100
+ async receive(context) {
101
+ const secret = context.state?.subscription.secret;
102
+ if (typeof secret != "string")
103
+ return { outcome: "respond", status: 503, body: "", contentType: "text/plain" };
104
+ if (!(await verifyHexHmac(secret, [context.rawBody], context.header("x-hook-signature"))))
105
+ return { outcome: "respond", status: 401, body: "", contentType: "text/plain" };
106
+ const payload = context.payload;
107
+ if (!isJsonObject(payload) || !Array.isArray(payload.events))
108
+ return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
109
+ const events = [];
110
+ const identities = [];
111
+ const selected = context.config.eventTypes;
112
+ for (const item of payload.events) {
113
+ if (!isJsonObject(item) || !isJsonObject(item.resource) || item.resource.resource_type != "task")
114
+ continue;
115
+ if (typeof item.resource.gid != "string" || typeof item.created_at != "string")
116
+ return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
117
+ let event;
118
+ if (item.action == "added" && isJsonObject(item.parent) && item.parent.gid == context.config.projectId)
119
+ event = "task.added";
120
+ if (item.action == "changed" && isJsonObject(item.change)) {
121
+ if (item.change.field == "completed")
122
+ event = "task.completed";
123
+ if (item.change.field == "custom_fields" &&
124
+ isJsonObject(item.change.new_value) &&
125
+ item.change.new_value.gid == context.config.customFieldId)
126
+ event = "task.field_changed";
127
+ }
128
+ if (!event || !selected.includes(event))
129
+ continue;
130
+ const response = await context.connector.execute({
131
+ endpoint: `/tasks/${encodeURIComponent(item.resource.gid)}`,
132
+ method: "GET",
133
+ query: { opt_fields: "gid,name,completed,memberships.project.gid,custom_fields" },
134
+ }, context.signal);
135
+ if (response.status == 404)
136
+ continue;
137
+ if (response.status < 200 || response.status >= 300)
138
+ throw new TransientIntegrationError(`Asana task lookup failed (HTTP ${response.status}).`);
139
+ if (!isJsonObject(response.data) ||
140
+ !isJsonObject(response.data.data) ||
141
+ !Array.isArray(response.data.data.memberships))
142
+ throw new TransientIntegrationError("Asana returned invalid task details.");
143
+ const task = response.data.data;
144
+ if (!task.memberships.some((member) => isJsonObject(member) && isJsonObject(member.project) && member.project.gid == context.config.projectId))
145
+ continue;
146
+ if (event == "task.completed" && task.completed !== true)
147
+ continue;
148
+ events.push({ event, task, change: item });
149
+ identities.push(JSON.stringify(item));
150
+ }
151
+ if (!events.length)
152
+ return { outcome: "ignored", reason: "No matching project task changes." };
153
+ const digest = await crypto.subtle.digest("SHA-256", bytes(JSON.stringify(identities.sort())));
154
+ return {
155
+ outcome: "event",
156
+ dedupeKey: Array.from(new Uint8Array(digest), (value) => value.toString(16).padStart(2, "0")).join(""),
157
+ outputs: { projectId: context.config.projectId, events },
158
+ };
159
+ },
160
+ };
@@ -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 { defineBearerProviderExecutors, defineProviderProxy } from "../provider-runtime.js";
2
2
  import { calendlyActionHandlers, calendlyApiOrigin, validateCalendlyCredential } from "./runtime.js";
3
+ import { calendlyBookingEvent } from "./trigger-on-booking-event.js";
3
4
  const service = "calendly";
4
5
  export const executors = defineBearerProviderExecutors(service, calendlyActionHandlers);
5
6
  export const proxy = defineProviderProxy({
@@ -15,3 +16,4 @@ export const credentialValidators = {
15
16
  return validateCalendlyCredential(input.accessToken, fetcher, signal);
16
17
  },
17
18
  };
19
+ export const triggers = [calendlyBookingEvent];
@@ -0,0 +1,2 @@
1
+ import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
2
+ export declare const calendlyBookingEvent: IntegrationDefinition;
@@ -0,0 +1,5 @@
1
+ import type { TriggerKeySnapshot } from "../../triggers/common/types.ts";
2
+ export declare const events: readonly ["invitee.created", "invitee.canceled"];
3
+ export declare const snapshot: TriggerKeySnapshot & {
4
+ readonly type: "integration";
5
+ };
@@ -0,0 +1,42 @@
1
+ import { jsonSchema as s } from "../../core/json-schema.js";
2
+ export const events = ["invitee.created", "invitee.canceled"];
3
+ export const snapshot = {
4
+ key: "calendly.on_booking_event",
5
+ provider: "calendly",
6
+ name: "on_booking_event",
7
+ displayName: "Booking Created or Canceled",
8
+ description: "Receives bookings and cancellations, preserving reschedule links. Requires a Personal Access Token connection.",
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: "scope",
19
+ jsonSchema: { type: "string", enum: ["user", "organization"], title: "Scope" },
20
+ nullable: false,
21
+ value: "user",
22
+ },
23
+ {
24
+ handle: "eventTypes",
25
+ jsonSchema: {
26
+ type: "array",
27
+ items: { type: "string", enum: events },
28
+ minItems: 1,
29
+ uniqueItems: true,
30
+ title: "Events",
31
+ },
32
+ nullable: false,
33
+ value: events,
34
+ },
35
+ ],
36
+ outputs: [
37
+ { handle: "event", jsonSchema: { type: "string", enum: events }, nullable: false },
38
+ { handle: "inviteeUri", jsonSchema: s.string(), nullable: false },
39
+ { handle: "createdAt", jsonSchema: s.string(), nullable: false },
40
+ { handle: "body", jsonSchema: { type: "object" }, nullable: false },
41
+ ],
42
+ };
@@ -0,0 +1,144 @@
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 { bytes, verifyHexHmac } from "../../triggers/signature.js";
5
+ import { snapshot } from "./trigger-on-booking-event.definition.js";
6
+ function webhookId(uri) {
7
+ if (typeof uri != "string" || !uri.startsWith("https://api.calendly.com/webhook_subscriptions/"))
8
+ throw new TransientIntegrationError("Calendly returned an invalid subscription URI.");
9
+ const id = uri.slice("https://api.calendly.com/webhook_subscriptions/".length);
10
+ if (!id || id.includes("/") || id.includes("?") || id.includes("#"))
11
+ throw new TransientIntegrationError("Calendly returned an invalid subscription identity.");
12
+ return id;
13
+ }
14
+ export const calendlyBookingEvent = {
15
+ snapshot,
16
+ initialState: { checkpoint: null, subscription: {} },
17
+ async reconcile(context) {
18
+ // OAuth subscriptions use the application signing key; signing_key cannot override it.
19
+ if (context.connector.authType != "api_key")
20
+ throw new PermanentIntegrationError("Calendly Triggers require a Personal Access Token connection. OAuth application signing keys are not configured by this deployment.");
21
+ const current = await webhookRequest(context, { endpoint: "/users/me", method: "GET" });
22
+ if (!isJsonObject(current.data) ||
23
+ !isJsonObject(current.data.resource) ||
24
+ typeof current.data.resource.uri != "string" ||
25
+ typeof current.data.resource.current_organization != "string")
26
+ throw new TransientIntegrationError("Calendly returned an invalid current user.");
27
+ const organization = current.data.resource.current_organization;
28
+ const user = current.data.resource.uri;
29
+ const scope = String(context.config.scope);
30
+ const query = { organization, scope, count: 100 };
31
+ if (scope == "user")
32
+ query.user = user;
33
+ return reconcileManagedWebhook(context, {
34
+ async find() {
35
+ const found = [];
36
+ const seen = new Set();
37
+ for (let page = 0; page < 100; page++) {
38
+ const result = await webhookRequest(context, {
39
+ endpoint: "/webhook_subscriptions",
40
+ method: "GET",
41
+ query,
42
+ });
43
+ if (!isJsonObject(result.data) ||
44
+ !Array.isArray(result.data.collection) ||
45
+ !isJsonObject(result.data.pagination))
46
+ throw new TransientIntegrationError("Calendly returned an invalid webhook page.");
47
+ for (const item of result.data.collection) {
48
+ if (!isJsonObject(item) || typeof item.callback_url != "string")
49
+ throw new TransientIntegrationError("Calendly returned an invalid webhook.");
50
+ if (item.callback_url != context.endpointUrl)
51
+ continue;
52
+ if (item.organization != organization || item.scope != scope || (scope == "user" && item.user != user))
53
+ throw new PermanentIntegrationError("Calendly webhook scope differs from this subscription.");
54
+ if (context.active && item.state != "active")
55
+ throw new PermanentIntegrationError("Calendly disabled this webhook. Restore it or remove the owned webhook before retrying.");
56
+ if (context.active &&
57
+ (!Array.isArray(item.events) ||
58
+ item.events.length != context.config.eventTypes.length ||
59
+ !context.config.eventTypes.every((event) => item.events.includes(event))))
60
+ throw new PermanentIntegrationError("Calendly webhook events differ from this subscription. Remove the owned webhook before retrying.");
61
+ found.push({ id: webhookId(item.uri), secret: context.callbackSecret });
62
+ }
63
+ const next = result.data.pagination.next_page_token;
64
+ if (next == null)
65
+ return found;
66
+ if (typeof next != "string" || !next || seen.has(next))
67
+ throw new TransientIntegrationError("Calendly webhook pagination did not advance.");
68
+ seen.add(next);
69
+ query.page_token = next;
70
+ }
71
+ throw new PermanentIntegrationError("The Calendly webhook list exceeds 10000 entries.");
72
+ },
73
+ async create() {
74
+ const body = {
75
+ url: context.endpointUrl,
76
+ events: context.config.eventTypes,
77
+ organization,
78
+ scope,
79
+ signing_key: context.callbackSecret,
80
+ };
81
+ if (scope == "user")
82
+ body.user = user;
83
+ const result = await webhookRequest(context, {
84
+ endpoint: "/webhook_subscriptions",
85
+ method: "POST",
86
+ body,
87
+ });
88
+ if (!isJsonObject(result.data) || !isJsonObject(result.data.resource))
89
+ throw new TransientIntegrationError("Calendly webhook creation returned no resource.");
90
+ return { id: webhookId(result.data.resource.uri), secret: context.callbackSecret };
91
+ },
92
+ async remove(id) {
93
+ await webhookRequest(context, {
94
+ endpoint: `/webhook_subscriptions/${encodeURIComponent(id)}`,
95
+ method: "DELETE",
96
+ });
97
+ },
98
+ });
99
+ },
100
+ async receive(context) {
101
+ const parts = context
102
+ .header("calendly-webhook-signature")
103
+ ?.split(",")
104
+ .map((part) => part.trim()) ?? [];
105
+ const timestamps = parts.filter((part) => part.startsWith("t="));
106
+ const timestamp = timestamps[0]?.slice(2);
107
+ let valid = false;
108
+ if (timestamps.length == 1 &&
109
+ timestamp &&
110
+ Number.isInteger(Number(timestamp)) &&
111
+ Math.abs(context.now.getTime() / 1000 - Number(timestamp)) <= 180) {
112
+ for (const part of parts) {
113
+ if (part.startsWith("v1=") &&
114
+ (await verifyHexHmac(context.callbackSecret, [bytes(`${timestamp}.`), context.rawBody], part.slice(3)))) {
115
+ valid = true;
116
+ break;
117
+ }
118
+ }
119
+ }
120
+ if (!valid)
121
+ return { outcome: "respond", status: 401, body: "", contentType: "text/plain" };
122
+ const body = context.payload;
123
+ if (!isJsonObject(body) ||
124
+ typeof body.event != "string" ||
125
+ !context.config.eventTypes.includes(body.event))
126
+ return { outcome: "ignored", reason: "Calendly event does not match." };
127
+ if (!isJsonObject(body.payload) ||
128
+ typeof body.payload.uri != "string" ||
129
+ !body.payload.uri ||
130
+ typeof body.created_at != "string" ||
131
+ !body.created_at)
132
+ return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
133
+ return {
134
+ outcome: "event",
135
+ dedupeKey: JSON.stringify([body.event, body.payload.uri, body.created_at]),
136
+ outputs: {
137
+ event: body.event,
138
+ inviteeUri: body.payload.uri,
139
+ createdAt: body.created_at,
140
+ body: body.payload,
141
+ },
142
+ };
143
+ },
144
+ };
@@ -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, ProviderRequestError } from "../provider-runtime.js";
2
2
  import { clickupActionHandlers, clickupApiOrigin, validateClickupCredential } from "./runtime.js";
3
+ import { clickupTaskEvent } from "./trigger-on-task-event.js";
3
4
  const service = "clickup";
4
5
  export const executors = defineProviderExecutors({
5
6
  service,
@@ -52,3 +53,4 @@ export const credentialValidators = {
52
53
  return validateClickupCredential(input.accessToken, "oauth2", fetcher, signal);
53
54
  },
54
55
  };
56
+ export const triggers = [clickupTaskEvent];
@@ -0,0 +1,2 @@
1
+ import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
2
+ export declare const clickupTaskEvent: IntegrationDefinition;
@@ -0,0 +1,4 @@
1
+ import type { TriggerKeySnapshot } from "../../triggers/common/types.ts";
2
+ export declare const snapshot: TriggerKeySnapshot & {
3
+ readonly type: "integration";
4
+ };
@@ -0,0 +1,41 @@
1
+ import { jsonSchema as s } from "../../core/json-schema.js";
2
+ const events = ["taskCreated", "taskStatusUpdated", "taskCommentPosted"];
3
+ export const snapshot = {
4
+ key: "clickup.on_task_event",
5
+ provider: "clickup",
6
+ name: "on_task_event",
7
+ displayName: "Task Event",
8
+ description: "Receives task creation, status changes, and new comments in a ClickUp Workspace or List.",
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: "workspaceId",
19
+ jsonSchema: { type: "string", pattern: "^[0-9]+$", title: "Workspace ID" },
20
+ nullable: false,
21
+ },
22
+ { handle: "listId", jsonSchema: { type: "string", pattern: "^[0-9]+$", title: "List ID" }, nullable: true },
23
+ {
24
+ handle: "eventTypes",
25
+ jsonSchema: {
26
+ type: "array",
27
+ items: { type: "string", enum: events },
28
+ minItems: 1,
29
+ uniqueItems: true,
30
+ title: "Events",
31
+ },
32
+ nullable: false,
33
+ value: events,
34
+ },
35
+ ],
36
+ outputs: [
37
+ { handle: "event", jsonSchema: { type: "string", enum: events }, nullable: false },
38
+ { handle: "taskId", jsonSchema: s.string(), nullable: false },
39
+ { handle: "body", jsonSchema: { type: "object" }, nullable: false },
40
+ ],
41
+ };
@@ -0,0 +1,94 @@
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 } from "./trigger-on-task-event.definition.js";
6
+ function webhook(value) {
7
+ if (!isJsonObject(value) ||
8
+ typeof value.id != "string" ||
9
+ !value.id ||
10
+ typeof value.secret != "string" ||
11
+ !value.secret)
12
+ throw new TransientIntegrationError("ClickUp returned an invalid webhook identity or secret.");
13
+ return { id: value.id, secret: value.secret };
14
+ }
15
+ export const clickupTaskEvent = {
16
+ snapshot,
17
+ initialState: { checkpoint: null, subscription: {} },
18
+ async reconcile(context) {
19
+ const endpoint = `/team/${encodeURIComponent(String(context.config.workspaceId))}/webhook`;
20
+ const location = context.config.listId == null ? {} : { list_id: Number(context.config.listId) };
21
+ return reconcileManagedWebhook(context, {
22
+ async find() {
23
+ const result = await webhookRequest(context, { endpoint, method: "GET" });
24
+ if (!isJsonObject(result.data) || !Array.isArray(result.data.webhooks))
25
+ throw new TransientIntegrationError("ClickUp returned an invalid webhook list.");
26
+ return result.data.webhooks
27
+ .filter((item) => {
28
+ if (!isJsonObject(item) || typeof item.endpoint != "string")
29
+ throw new TransientIntegrationError("ClickUp returned an invalid webhook.");
30
+ if (item.endpoint !== context.endpointUrl)
31
+ return false;
32
+ if (context.active && String(item.list_id ?? "") !== String(context.config.listId ?? ""))
33
+ throw new PermanentIntegrationError("The ClickUp webhook no longer matches the configured List. Remove the subscription before recreating it.");
34
+ return true;
35
+ })
36
+ .map(webhook);
37
+ },
38
+ async create() {
39
+ const result = await webhookRequest(context, {
40
+ endpoint,
41
+ method: "POST",
42
+ body: { endpoint: context.endpointUrl, events: context.config.eventTypes, ...location },
43
+ });
44
+ if (!isJsonObject(result.data) || !isJsonObject(result.data.webhook))
45
+ throw new TransientIntegrationError("ClickUp webhook creation returned no webhook.");
46
+ return webhook(result.data.webhook);
47
+ },
48
+ async align(id) {
49
+ await webhookRequest(context, {
50
+ endpoint: `/webhook/${encodeURIComponent(id)}`,
51
+ method: "PUT",
52
+ body: {
53
+ endpoint: context.endpointUrl,
54
+ events: context.config.eventTypes,
55
+ status: "active",
56
+ },
57
+ });
58
+ },
59
+ async remove(id) {
60
+ await webhookRequest(context, {
61
+ endpoint: `/webhook/${encodeURIComponent(id)}`,
62
+ method: "DELETE",
63
+ });
64
+ },
65
+ });
66
+ },
67
+ async receive(context) {
68
+ const secret = context.state?.subscription.secret;
69
+ if (typeof secret != "string")
70
+ return { outcome: "respond", status: 503, body: "", contentType: "text/plain" };
71
+ if (!(await verifyHexHmac(secret, [context.rawBody], context.header("x-signature"))))
72
+ return { outcome: "respond", status: 401, body: "", contentType: "text/plain" };
73
+ const body = context.payload;
74
+ if (!isJsonObject(body) ||
75
+ body.webhook_id != context.state?.subscription.hookId ||
76
+ typeof body.event != "string" ||
77
+ !context.config.eventTypes.includes(body.event))
78
+ return { outcome: "ignored", reason: "ClickUp subscription or event does not match." };
79
+ if (typeof body.task_id != "string" ||
80
+ !body.task_id ||
81
+ (body.history_items != null &&
82
+ (!Array.isArray(body.history_items) ||
83
+ body.history_items.some((item) => !isJsonObject(item) || typeof item.id != "string" || !item.id))))
84
+ return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
85
+ const historyIds = body.history_items?.map((item) => item.id).sort() ?? [];
86
+ if (historyIds.length == 0 && body.event != "taskCreated")
87
+ return { outcome: "respond", status: 400, body: "", contentType: "text/plain" };
88
+ return {
89
+ outcome: "event",
90
+ dedupeKey: JSON.stringify([body.webhook_id, body.event, historyIds.length ? historyIds : body.task_id]),
91
+ outputs: { event: body.event, taskId: body.task_id, body },
92
+ };
93
+ },
94
+ };
@@ -0,0 +1,12 @@
1
+ import type { ActionDefinition } from "../../core/types.ts";
2
+ export interface CloroEndpoint {
3
+ action: ActionDefinition;
4
+ path: string;
5
+ method: "GET" | "POST" | "DELETE";
6
+ timeoutMs?: number;
7
+ arrayField?: string;
8
+ }
9
+ declare const endpoints: CloroEndpoint[];
10
+ export declare const cloroActions: ActionDefinition[];
11
+ export declare const cloroEndpointByName: Map<string, (typeof endpoints)[number]>;
12
+ export {};