@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,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,74 @@
1
+ import { optionalRecord, optionalString } from "../../core/cast.js";
2
+ import { requiredResponseRecord, runProviderRequest, ProviderRequestError, providerInputError, defineApiKeyProviderExecutors, defineProviderProxy, } from "../provider-runtime.js";
3
+ import { fundableActions } from "./actions.js";
4
+ import { fundableRoutes } from "./actions.js";
5
+ const fundableApiBaseUrl = "https://www.tryfundable.ai/api/v1";
6
+ async function requestFundable(path, method, parameters, apiKey, fetcher, validating = false, parentSignal) {
7
+ const url = new URL(`${fundableApiBaseUrl}${path}`);
8
+ if (method === "GET") {
9
+ for (const [key, value] of Object.entries(parameters)) {
10
+ if (value !== undefined)
11
+ url.searchParams.set(key, String(value));
12
+ }
13
+ }
14
+ return runProviderRequest({ label: "fundable", signal: parentSignal }, async (signal) => {
15
+ const headers = new Headers({ accept: "application/json", authorization: `Bearer ${apiKey}` });
16
+ if (method === "POST")
17
+ headers.set("content-type", "application/json");
18
+ const response = await fetcher(url.toString(), {
19
+ method,
20
+ headers,
21
+ body: method === "POST" ? JSON.stringify(parameters) : undefined,
22
+ signal,
23
+ });
24
+ const text = await response.text();
25
+ let payload;
26
+ try {
27
+ payload = JSON.parse(text);
28
+ }
29
+ catch {
30
+ throw new ProviderRequestError(response.ok ? 502 : response.status, response.ok ? "fundable returned malformed JSON" : `fundable request failed (${response.status})`, undefined, "provider_error");
31
+ }
32
+ const object = optionalRecord(payload);
33
+ if (!response.ok || object?.success === false || object?.error != null) {
34
+ const error = optionalRecord(object?.error);
35
+ const code = optionalString(error?.code);
36
+ const message = optionalString(error?.message) ??
37
+ optionalString(object?.error) ??
38
+ optionalString(object?.message) ??
39
+ `fundable request failed (${response.status})`;
40
+ const detail = code ? `${code}: ${message}` : message;
41
+ if (code === "INVALID_API_KEY" || code === "INACTIVE_API_KEY") {
42
+ throw new ProviderRequestError(validating ? 400 : 409, detail, undefined, validating ? "invalid_input" : "authorization_failed");
43
+ }
44
+ throw new ProviderRequestError(response.ok ? 502 : response.status, detail, undefined, "provider_error");
45
+ }
46
+ return requiredResponseRecord(payload, "Fundable response");
47
+ });
48
+ }
49
+ async function execute(actionName, values, context) {
50
+ const { apiKey, fetcher } = context;
51
+ const route = fundableRoutes[actionName];
52
+ if (!route)
53
+ throw providerInputError("Unknown action route");
54
+ const path = route.path.replace("{id}", encodeURIComponent(String(values.id)));
55
+ const parameters = { ...values };
56
+ if (route.path.includes("{id}"))
57
+ delete parameters.id;
58
+ return requestFundable(path, route.method, parameters, apiKey, fetcher, undefined, context.signal);
59
+ }
60
+ export const credentialValidators = {
61
+ async apiKey(input, { fetcher, signal }) {
62
+ await requestFundable("/industry/search", "GET", { name: "software" }, input.apiKey, fetcher, true, signal);
63
+ return { profile: { displayName: "Fundable API Key" }, grantedScopes: [], metadata: {} };
64
+ },
65
+ };
66
+ export const executors = defineApiKeyProviderExecutors("fundable", Object.fromEntries(fundableActions.map((action) => [action.name, (values, context) => execute(action.name, values, context)])));
67
+ export const proxy = defineProviderProxy({
68
+ service: "fundable",
69
+ baseUrl: fundableApiBaseUrl,
70
+ auth: { type: "api_key_authorization", prefix: "Bearer " },
71
+ customizeRequest({ headers }) {
72
+ headers.set("accept", "application/json");
73
+ },
74
+ });
@@ -2,7 +2,7 @@ export interface GmailMessageHeader {
2
2
  name: string;
3
3
  value: string;
4
4
  }
5
- export interface GmailMessagePart {
5
+ interface GmailMessagePart {
6
6
  partId?: string;
7
7
  mimeType?: string;
8
8
  filename?: string;
@@ -80,11 +80,6 @@ export interface GmailReplyHeaders {
80
80
  export declare function resolveReplyHeaders(resource: GmailMessageResource): GmailReplyHeaders;
81
81
  /** Gmail requires a reply's subject to match its target after ordinary Re: prefixes. */
82
82
  export declare function assertMatchingReplySubject(subject: string, targetSubject: string): void;
83
- interface GmailBodyContent {
84
- body: string;
85
- isHtml: boolean;
86
- }
87
- export declare function extractBodyContent(payload: GmailMessagePart | null): GmailBodyContent;
88
83
  export declare function normalizeThreadId(value: unknown): string;
89
84
  export declare function normalizeMessageId(value: unknown): string;
90
85
  interface RecipientsInput {
@@ -171,7 +171,7 @@ function parseAddressList(value) {
171
171
  function firstAddress(value) {
172
172
  return parseAddressList(value)[0] ?? "";
173
173
  }
174
- export function extractBodyContent(payload) {
174
+ function extractBodyContent(payload) {
175
175
  return extractPartBody(payload, true);
176
176
  }
177
177
  function extractPartBody(payload, isBodyRoot) {
@@ -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, requireOAuthCredential } from "../provider-runtime.js";
2
2
  import { intercomActionHandlers, intercomAllowedApiBaseUrls, intercomApiVersion, resolveIntercomApiBaseUrl, validateIntercomOAuthCredential, } from "./runtime.js";
3
+ import { intercomConversationEvents } from "./trigger-on-conversation-event.js";
3
4
  const service = "intercom";
4
5
  export const executors = defineProviderExecutors({
5
6
  service,
@@ -32,3 +33,4 @@ export const credentialValidators = {
32
33
  return validateIntercomOAuthCredential(input, fetcher, signal);
33
34
  },
34
35
  };
36
+ export const triggers = [intercomConversationEvents];
@@ -0,0 +1,2 @@
1
+ import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
2
+ export declare const intercomConversationEvents: 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,42 @@
1
+ import { s } from "../../core/json-schema.js";
2
+ export const snapshot = {
3
+ key: "intercom.on_conversation_event",
4
+ provider: "intercom",
5
+ name: "on_conversation_event",
6
+ displayName: "Customer Conversation or Ticket",
7
+ description: "Receives customer conversations, customer replies and new tickets from a verified Intercom application event source. Administrator replies are excluded.",
8
+ definitionVersion: 2,
9
+ type: "integration",
10
+ endpoint: {
11
+ methods: ["POST"],
12
+ body: { formats: ["json"], allowArray: false, allowEmpty: false },
13
+ successStatus: 200,
14
+ },
15
+ configInputs: [
16
+ {
17
+ handle: "sourceId",
18
+ jsonSchema: { type: "string", pattern: "^source_[0-9a-f]{32}$", title: "Event source" },
19
+ nullable: false,
20
+ },
21
+ {
22
+ handle: "eventTypes",
23
+ jsonSchema: {
24
+ type: "array",
25
+ items: { type: "string", enum: ["conversation.user.created", "conversation.user.replied", "ticket.created"] },
26
+ minItems: 1,
27
+ maxItems: 3,
28
+ uniqueItems: true,
29
+ title: "Events",
30
+ },
31
+ nullable: false,
32
+ value: ["conversation.user.created", "conversation.user.replied", "ticket.created"],
33
+ },
34
+ ],
35
+ outputs: [
36
+ { handle: "event", jsonSchema: s.string(), nullable: false },
37
+ { handle: "deliveryId", jsonSchema: s.string(), nullable: false },
38
+ { handle: "workspaceId", jsonSchema: s.string(), nullable: false },
39
+ { handle: "objectId", jsonSchema: s.string(), nullable: false },
40
+ { handle: "body", jsonSchema: s.object({}, { additionalProperties: true }), nullable: false },
41
+ ],
42
+ };
@@ -0,0 +1,23 @@
1
+ import { PermanentIntegrationError } from "../../triggers/common/integration.js";
2
+ import { isJsonObject } from "../../triggers/common/json.js";
3
+ import { intercomApplication } from "../../triggers/sources/intercom.js";
4
+ import { snapshot } from "./trigger-on-conversation-event.definition.js";
5
+ export const intercomConversationEvents = {
6
+ snapshot,
7
+ eventSource: "intercom",
8
+ source: intercomApplication,
9
+ receive(context) {
10
+ if (context.eventSourceId !== context.config.sourceId)
11
+ return { outcome: "respond", status: 404, body: "", contentType: "text/plain" };
12
+ const payload = context.payload;
13
+ if (!isJsonObject(payload) ||
14
+ typeof payload.deliveryId !== "string" ||
15
+ !payload.deliveryId ||
16
+ !isJsonObject(payload.body))
17
+ throw new PermanentIntegrationError("Invalid shared Intercom event.");
18
+ return { outcome: "event", dedupeKey: payload.deliveryId, outputs: payload };
19
+ },
20
+ async reconcile() {
21
+ throw new PermanentIntegrationError("This deployment does not support shared Intercom event sources.");
22
+ },
23
+ };
@@ -1,4 +1,5 @@
1
1
  import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
2
3
  import type { ProviderActionHandlers } from "../provider-runtime.ts";
3
4
  type JiraActionContext = {
4
5
  accessToken: string;
@@ -22,4 +23,5 @@ export declare const credentialValidators: CredentialValidators;
22
23
  * suffix this provider speaks, so a pasted API URL is not double-appended.
23
24
  */
24
25
  export declare function normalizeJiraServerApiBaseUrl(value: unknown, allowPrivateNetwork?: boolean): string;
26
+ export declare const triggers: readonly IntegrationDefinition[];
25
27
  export {};
@@ -1,6 +1,7 @@
1
1
  import { compactObject, optionalBoolean, optionalInteger as asOptionalInteger, optionalRecord as asOptionalObject, optionalString as asOptionalString, optionalStringArray, } from "../../core/cast.js";
2
2
  import { assertPublicHttpUrl, isPrivateNetworkAccessAllowed } from "../../core/request.js";
3
3
  import { createProviderFetch, ProviderRequestError, defineProviderExecutors, defineProviderProxy, providerUserAgent, } from "../provider-runtime.js";
4
+ import { jiraIssueEvents } from "./trigger-on-issue-event.js";
4
5
  const jiraApiOrigin = "https://api.atlassian.com";
5
6
  const jiraAccessibleResourcesUrl = "https://api.atlassian.com/oauth/token/accessible-resources";
6
7
  const jiraCurrentUserPath = "/myself";
@@ -944,3 +945,4 @@ function trimLeadingSlash(value) {
944
945
  }
945
946
  return value.slice(index);
946
947
  }
948
+ export const triggers = [jiraIssueEvents];
@@ -0,0 +1,2 @@
1
+ import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
2
+ export declare const jiraIssueEvents: 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,44 @@
1
+ export const snapshot = {
2
+ key: "jira.on_issue_event",
3
+ provider: "jira",
4
+ name: "on_issue_event",
5
+ displayName: "Issue or Comment Event",
6
+ description: "Receives Jira Cloud issue creation, issue updates and new comments through a shared project webhook with automatic renewal.",
7
+ definitionVersion: 2,
8
+ type: "integration",
9
+ endpoint: {
10
+ methods: ["POST"],
11
+ body: { formats: ["json"], allowArray: false, allowEmpty: false },
12
+ successStatus: 200,
13
+ },
14
+ configInputs: [
15
+ {
16
+ handle: "sourceId",
17
+ jsonSchema: { type: "string", pattern: "^source_[0-9a-f]{32}$", title: "Event source" },
18
+ nullable: false,
19
+ },
20
+ {
21
+ handle: "eventTypes",
22
+ jsonSchema: {
23
+ type: "array",
24
+ items: {
25
+ type: "string",
26
+ enum: ["jira:issue_created", "jira:issue_updated", "comment_created"],
27
+ },
28
+ minItems: 1,
29
+ maxItems: 3,
30
+ uniqueItems: true,
31
+ title: "Events",
32
+ },
33
+ nullable: false,
34
+ value: ["jira:issue_created", "jira:issue_updated", "comment_created"],
35
+ },
36
+ ],
37
+ outputs: [
38
+ { handle: "event", jsonSchema: { type: "string" }, nullable: false },
39
+ { handle: "deliveryId", jsonSchema: { type: "string" }, nullable: false },
40
+ { handle: "cloudId", jsonSchema: { type: "string" }, nullable: false },
41
+ { handle: "issueId", jsonSchema: { type: "string" }, nullable: false },
42
+ { handle: "body", jsonSchema: { type: "object" }, nullable: false },
43
+ ],
44
+ };
@@ -0,0 +1,116 @@
1
+ import { jwtVerify } from "jose";
2
+ import { IntegrationConnectionError } from "../../triggers/common/integration.js";
3
+ import { PermanentIntegrationError } from "../../triggers/common/integration.js";
4
+ import { isJsonObject } from "../../triggers/common/json.js";
5
+ import { webhookRequest } from "../../triggers/managed-webhook.js";
6
+ import { jiraProject } from "../../triggers/sources/jira.js";
7
+ import { snapshot } from "./trigger-on-issue-event.definition.js";
8
+ import { reconcileJiraResource, requireJiraCloud, jiraEvents } from "./trigger-resource.js";
9
+ export const jiraIssueEvents = {
10
+ snapshot,
11
+ eventSource: "jira",
12
+ source: jiraProject,
13
+ resources: { reconcile: reconcileJiraResource },
14
+ async sourceIdentity(context) {
15
+ const cloudId = requireJiraCloud(context.connector);
16
+ const project = context.config.projectId ?? context.config.project;
17
+ if (typeof project !== "string" || !project || project.length > 256)
18
+ throw new PermanentIntegrationError("Choose a Jira project.");
19
+ const [projectResult, userResult, siteResult] = await Promise.all([
20
+ webhookRequest(context, { method: "GET", endpoint: `/project/${encodeURIComponent(project)}` }),
21
+ webhookRequest(context, { method: "GET", endpoint: "/myself" }),
22
+ webhookRequest(context, { method: "GET", endpoint: "/serverInfo" }),
23
+ ]);
24
+ const item = projectResult.data, user = userResult.data, site = siteResult.data;
25
+ if (!isJsonObject(item) ||
26
+ typeof item.id !== "string" ||
27
+ !/^\d+$/.test(item.id) ||
28
+ typeof item.key !== "string" ||
29
+ !isJsonObject(user) ||
30
+ typeof user.accountId !== "string" ||
31
+ !isJsonObject(site) ||
32
+ typeof site.baseUrl !== "string")
33
+ throw new PermanentIntegrationError("Jira did not return a verified project, user and site.");
34
+ const url = new URL(site.baseUrl);
35
+ if (url.protocol !== "https:" || url.username || url.password)
36
+ throw new PermanentIntegrationError("Invalid Jira Cloud site URL.");
37
+ return {
38
+ accountId: context.connector.providerAccountId,
39
+ cloudId,
40
+ userId: user.accountId,
41
+ projectId: item.id,
42
+ projectKey: item.key,
43
+ siteUrl: url.origin,
44
+ };
45
+ },
46
+ async sourceReceive(context) {
47
+ const cloudId = requireJiraCloud(context.connector);
48
+ if (context.config.cloudId !== cloudId)
49
+ throw new IntegrationConnectionError("The Jira connection belongs to another site.");
50
+ const authorization = context.headers.authorization ?? "";
51
+ if (!authorization.startsWith("Bearer "))
52
+ return { outcome: "unauthorized" };
53
+ try {
54
+ await jwtVerify(authorization.slice(7), new TextEncoder().encode(context.connector.oauthClientConfig.clientSecret), { algorithms: ["HS256"], currentDate: context.now, requiredClaims: ["exp"] });
55
+ }
56
+ catch {
57
+ return { outcome: "unauthorized" };
58
+ }
59
+ let payload;
60
+ try {
61
+ payload = JSON.parse(context.rawBody);
62
+ }
63
+ catch {
64
+ return { outcome: "unauthorized" };
65
+ }
66
+ if (!isJsonObject(payload) ||
67
+ typeof payload.webhookEvent !== "string" ||
68
+ !jiraEvents.includes(payload.webhookEvent))
69
+ return { outcome: "ignored" };
70
+ if (!Array.isArray(payload.matchedWebhookIds) || !payload.matchedWebhookIds.includes(context.config.webhookId))
71
+ return { outcome: "ignored" };
72
+ const issue = payload.issue;
73
+ if (!isJsonObject(issue) ||
74
+ typeof issue.id !== "string" ||
75
+ typeof issue.self !== "string" ||
76
+ !isJsonObject(issue.fields) ||
77
+ !isJsonObject(issue.fields.project) ||
78
+ issue.fields.project.id !== context.config.projectId)
79
+ return { outcome: "ignored" };
80
+ let issueUrl;
81
+ try {
82
+ issueUrl = new URL(issue.self);
83
+ }
84
+ catch {
85
+ return { outcome: "ignored" };
86
+ }
87
+ if (issueUrl.origin !== context.config.siteUrl)
88
+ return { outcome: "ignored" };
89
+ const id = context.headers["x-atlassian-webhook-identifier"];
90
+ if (!id || id.length > 256)
91
+ return { outcome: "unauthorized" };
92
+ if (payload.webhookEvent === "comment_created" &&
93
+ (!isJsonObject(payload.comment) || typeof payload.comment.id !== "string"))
94
+ return { outcome: "unauthorized" };
95
+ return {
96
+ outcome: "event",
97
+ id,
98
+ type: payload.webhookEvent,
99
+ payload: { event: payload.webhookEvent, deliveryId: id, cloudId, issueId: issue.id, body: payload },
100
+ };
101
+ },
102
+ receive(context) {
103
+ if (context.eventSourceId !== context.config.sourceId)
104
+ return { outcome: "respond", status: 404, body: "", contentType: "text/plain" };
105
+ const payload = context.payload;
106
+ if (!isJsonObject(payload) ||
107
+ typeof payload.deliveryId !== "string" ||
108
+ !payload.deliveryId ||
109
+ !isJsonObject(payload.body))
110
+ throw new PermanentIntegrationError("Invalid shared Jira event.");
111
+ return { outcome: "event", dedupeKey: payload.deliveryId, outputs: payload };
112
+ },
113
+ async reconcile() {
114
+ throw new PermanentIntegrationError("This deployment does not support shared Jira event sources.");
115
+ },
116
+ };
@@ -0,0 +1,4 @@
1
+ import type { IntegrationReconcileContext, IntegrationReconcileResult } from "../../triggers/common/integration.ts";
2
+ export declare const jiraEvents: string[];
3
+ export declare function requireJiraCloud(connector: IntegrationReconcileContext["connector"]): string;
4
+ export declare function reconcileJiraResource(context: IntegrationReconcileContext): Promise<IntegrationReconcileResult>;
@@ -0,0 +1,141 @@
1
+ import { IntegrationConnectionError, PermanentIntegrationError, TransientIntegrationError, } from "../../triggers/common/integration.js";
2
+ import { isJsonObject } from "../../triggers/common/json.js";
3
+ import { webhookRequest } from "../../triggers/managed-webhook.js";
4
+ export const jiraEvents = ["jira:issue_created", "jira:issue_updated", "comment_created"];
5
+ const day = 86_400_000;
6
+ export function requireJiraCloud(connector) {
7
+ const cloudId = /^jira:([^:]+)(?::|$)/.exec(connector.providerAccountId ?? "")?.[1];
8
+ if (connector.authType !== "oauth2" || !cloudId || !connector.oauthClientConfig?.clientSecret)
9
+ throw new IntegrationConnectionError("Jira Cloud OAuth and the matching application client secret are required. Reconnect with webhook permissions.");
10
+ return cloudId;
11
+ }
12
+ async function webhooks(context) {
13
+ const items = [];
14
+ let startAt = 0;
15
+ for (;;) {
16
+ const { data } = await webhookRequest(context, {
17
+ method: "GET",
18
+ endpoint: "/webhook",
19
+ query: { startAt, maxResults: 100 },
20
+ });
21
+ if (!isJsonObject(data) || !Array.isArray(data.values) || typeof data.isLast !== "boolean")
22
+ throw new TransientIntegrationError("Invalid Jira webhook page.");
23
+ for (const item of data.values) {
24
+ if (!isJsonObject(item) ||
25
+ !Number.isSafeInteger(item.id) ||
26
+ Number(item.id) <= 0 ||
27
+ typeof item.url !== "string" ||
28
+ typeof item.jqlFilter !== "string" ||
29
+ !Array.isArray(item.events) ||
30
+ !item.events.every((event) => typeof event === "string") ||
31
+ typeof item.expirationDate !== "string")
32
+ throw new TransientIntegrationError("Invalid Jira webhook record.");
33
+ const expiresAt = Date.parse(item.expirationDate);
34
+ if (!Number.isFinite(expiresAt))
35
+ throw new TransientIntegrationError("Invalid Jira webhook expiration.");
36
+ items.push({
37
+ id: Number(item.id),
38
+ url: item.url,
39
+ jqlFilter: item.jqlFilter,
40
+ events: item.events,
41
+ expiresAt,
42
+ });
43
+ }
44
+ if (data.isLast)
45
+ return items;
46
+ if (data.values.length === 0 || data.startAt !== startAt)
47
+ throw new TransientIntegrationError("Invalid Jira webhook pagination.");
48
+ startAt += data.values.length;
49
+ }
50
+ }
51
+ export async function reconcileJiraResource(context) {
52
+ requireJiraCloud(context.connector);
53
+ const { projectId } = context.config;
54
+ if (typeof projectId !== "string" || !/^\d+$/.test(projectId))
55
+ throw new PermanentIntegrationError("A verified Jira project ID is required.");
56
+ let endpoint;
57
+ try {
58
+ endpoint = new URL(context.endpointUrl);
59
+ }
60
+ catch {
61
+ throw new PermanentIntegrationError("A public HTTPS callback URL is required.");
62
+ }
63
+ if (endpoint.protocol !== "https:" || endpoint.username || endpoint.password || endpoint.hash)
64
+ throw new PermanentIntegrationError("Jira requires a public HTTPS callback without credentials or a fragment.");
65
+ const now = context.now.getTime();
66
+ const state = context.state;
67
+ const saved = state.subscription;
68
+ if (context.active &&
69
+ typeof saved.checkedAt === "number" &&
70
+ typeof saved.expiresAt === "number" &&
71
+ saved.checkedAt + day > now &&
72
+ saved.expiresAt - 7 * day > now)
73
+ return { outcome: "ready" };
74
+ const save = (value) => state.saveSubscription(value, new Date(now + day));
75
+ let all = await webhooks(context);
76
+ const own = () => {
77
+ const matches = all.filter((item) => item.url === endpoint.href);
78
+ if (matches.length > 1)
79
+ throw new PermanentIntegrationError("Multiple Jira webhooks use this source callback. Resolve the duplicate subscriptions before retrying.");
80
+ return matches[0];
81
+ };
82
+ let hook = own();
83
+ if (!context.active) {
84
+ if (hook)
85
+ await webhookRequest(context, { method: "DELETE", endpoint: "/webhook", body: { webhookIds: [hook.id] } });
86
+ else if (saved.creating === true)
87
+ throw new PermanentIntegrationError("Jira registration is still uncertain. Confirm the remote webhook before cleanup.", "trigger_subscription_uncertain");
88
+ await save({});
89
+ return { outcome: "ready" };
90
+ }
91
+ if (!hook) {
92
+ if (saved.creating === true)
93
+ throw new PermanentIntegrationError("Jira registration is uncertain and no matching webhook is visible. Retry after checking Jira; do not create another source.", "trigger_subscription_uncertain");
94
+ if (all.length >= 5)
95
+ throw new PermanentIntegrationError("Jira OAuth webhook quota reached: five subscriptions per application, user and site. Remove an unused subscription, then retry.", "trigger_quota_exceeded");
96
+ await save({ creating: true });
97
+ const result = await context.connector.execute({
98
+ method: "POST",
99
+ endpoint: "/webhook",
100
+ body: { url: endpoint.href, webhooks: [{ jqlFilter: `project = ${projectId}`, events: jiraEvents }] },
101
+ }, context.signal);
102
+ context.signal?.throwIfAborted();
103
+ if (result.status < 200 || result.status >= 300) {
104
+ if (result.status >= 400 && result.status < 500)
105
+ await save({});
106
+ const message = `Jira webhook registration failed (HTTP ${result.status}). Check OAuth scopes, callback domain and webhook quota.`;
107
+ if (result.status === 429 || result.status >= 500)
108
+ throw new TransientIntegrationError(message);
109
+ throw new PermanentIntegrationError(message);
110
+ }
111
+ const results = isJsonObject(result.data) ? result.data.webhookRegistrationResult : undefined;
112
+ if (!Array.isArray(results) || results.length !== 1 || !isJsonObject(results[0]))
113
+ throw new TransientIntegrationError("Jira registration returned no confirmed webhook ID.");
114
+ const created = results[0];
115
+ if (Array.isArray(created.errors) && created.errors.length) {
116
+ await save({});
117
+ throw new PermanentIntegrationError(`Jira rejected the webhook: ${created.errors.filter((value) => typeof value === "string").join("; ")}`);
118
+ }
119
+ if (!Number.isSafeInteger(created.createdWebhookId) || Number(created.createdWebhookId) <= 0)
120
+ throw new TransientIntegrationError("Jira registration returned no confirmed webhook ID.");
121
+ await save({ creating: true, webhookId: Number(created.createdWebhookId) });
122
+ all = await webhooks(context);
123
+ hook = own();
124
+ if (!hook || hook.id !== created.createdWebhookId)
125
+ throw new TransientIntegrationError("The newly registered Jira webhook is not yet visible.");
126
+ }
127
+ if (hook.jqlFilter !== `project = ${projectId}` ||
128
+ hook.events.length !== jiraEvents.length ||
129
+ !jiraEvents.every((event) => hook.events.includes(event)))
130
+ throw new PermanentIntegrationError("The Jira webhook no longer matches this source's project and events. Remove the source subscription before recreating it.");
131
+ if (hook.expiresAt - 7 * day <= now) {
132
+ await webhookRequest(context, { method: "PUT", endpoint: "/webhook/refresh", body: { webhookIds: [hook.id] } });
133
+ const previousId = hook.id;
134
+ all = await webhooks(context);
135
+ hook = own();
136
+ if (!hook || hook.id !== previousId || hook.expiresAt - 7 * day <= now)
137
+ throw new TransientIntegrationError("Jira did not confirm the renewed webhook expiration.");
138
+ }
139
+ await save({ webhookId: hook.id, expiresAt: hook.expiresAt, checkedAt: now });
140
+ return { outcome: "ready" };
141
+ }
@@ -0,0 +1,4 @@
1
+ import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const proxy: ProviderProxyExecutor;
4
+ export declare const credentialValidators: CredentialValidators;
@@ -0,0 +1,20 @@
1
+ import { defineProviderExecutors, defineProviderProxy } from "../provider-runtime.js";
2
+ import { createKeenableContext, keenableActionHandlers, keenableApiBaseUrl, keenableAppTitle, validateKeenableCredential, } from "./runtime.js";
3
+ const service = "keenable";
4
+ export const executors = defineProviderExecutors({
5
+ service,
6
+ handlers: keenableActionHandlers,
7
+ createContext: createKeenableContext,
8
+ skipDnsValidation: true,
9
+ });
10
+ export const proxy = defineProviderProxy({
11
+ service,
12
+ baseUrl: keenableApiBaseUrl,
13
+ auth: { type: "optional_api_key_header", name: "X-API-Key" },
14
+ skipDnsValidation: true,
15
+ customizeRequest({ headers }) {
16
+ if (!headers.has("x-keenable-title"))
17
+ headers.set("x-keenable-title", keenableAppTitle);
18
+ },
19
+ });
20
+ export const credentialValidators = { apiKey: validateKeenableCredential };
@@ -0,0 +1,26 @@
1
+ import type { CredentialValidationResult, ExecutionContext } from "../../core/types.ts";
2
+ import type { ProviderFetch } from "../provider-runtime.ts";
3
+ export declare const keenableApiBaseUrl = "https://api.keenable.ai";
4
+ /** Keenable requires keyless callers to name their app in the X-Keenable-Title header. */
5
+ export declare const keenableAppTitle = "OpenConnector";
6
+ interface KeenableContext {
7
+ apiKey?: string;
8
+ fetcher: ProviderFetch;
9
+ signal?: AbortSignal;
10
+ }
11
+ type KeenableActionHandler = (input: Record<string, unknown>, context: KeenableContext) => Promise<unknown>;
12
+ export declare const keenableActionHandlers: Record<string, KeenableActionHandler>;
13
+ /**
14
+ * Build the action context. A no_auth connection has no key and uses the keyless endpoints.
15
+ */
16
+ export declare function createKeenableContext(context: ExecutionContext, fetcher: ProviderFetch): Promise<KeenableContext>;
17
+ /**
18
+ * Validate a key through a one-result search on the keyed endpoint.
19
+ */
20
+ export declare function validateKeenableCredential(input: {
21
+ apiKey: string;
22
+ }, options: {
23
+ fetcher: ProviderFetch;
24
+ signal?: AbortSignal;
25
+ }): Promise<CredentialValidationResult>;
26
+ export {};