@oomol-lab/open-connector 1.6.5 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (495) hide show
  1. package/README.md +4 -0
  2. package/assets/open-connector/catalog/apps/airtable.json +134 -0
  3. package/assets/open-connector/catalog/apps/aisa.json +6985 -319
  4. package/assets/open-connector/catalog/apps/baizhi_mcp.json +135 -0
  5. package/assets/open-connector/catalog/apps/cal.json +24 -6
  6. package/assets/open-connector/catalog/apps/discordbot.json +2888 -248
  7. package/assets/open-connector/catalog/apps/drawio_mcp.json +192 -0
  8. package/assets/open-connector/catalog/apps/enormail.json +411 -0
  9. package/assets/open-connector/catalog/apps/feishu_app_bot.json +158 -0
  10. package/assets/open-connector/catalog/apps/firecrawl.json +176 -32
  11. package/assets/open-connector/catalog/apps/framejet.json +273 -0
  12. package/assets/open-connector/catalog/apps/futunn.json +2967 -0
  13. package/assets/open-connector/catalog/apps/github.json +275 -0
  14. package/assets/open-connector/catalog/apps/gitlab.json +125 -0
  15. package/assets/open-connector/catalog/apps/gmail.json +376 -0
  16. package/assets/open-connector/catalog/apps/google_analytics.json +4 -1
  17. package/assets/open-connector/catalog/apps/google_bigquery.json +4 -1
  18. package/assets/open-connector/catalog/apps/google_search_console.json +4 -1
  19. package/assets/open-connector/catalog/apps/googlecalendar.json +210 -1
  20. package/assets/open-connector/catalog/apps/googlechat.json +694 -7
  21. package/assets/open-connector/catalog/apps/googledocs.json +4 -1
  22. package/assets/open-connector/catalog/apps/googledrive.json +479 -0
  23. package/assets/open-connector/catalog/apps/googlesheets.json +148 -1
  24. package/assets/open-connector/catalog/apps/granola.json +23 -0
  25. package/assets/open-connector/catalog/apps/hithink_finance.json +6 -3
  26. package/assets/open-connector/catalog/apps/indexed.json +1115 -0
  27. package/assets/open-connector/catalog/apps/keepa.json +3534 -987
  28. package/assets/open-connector/catalog/apps/linear.json +133 -0
  29. package/assets/open-connector/catalog/apps/linear_mcp.json +510 -0
  30. package/assets/open-connector/catalog/apps/moneyforward_mcp.json +1432 -0
  31. package/assets/open-connector/catalog/apps/notion.json +588 -1
  32. package/assets/open-connector/catalog/apps/notion_mcp.json +490 -0
  33. package/assets/open-connector/catalog/apps/odoo.json +619 -0
  34. package/assets/open-connector/catalog/apps/one_drive.json +185 -0
  35. package/assets/open-connector/catalog/apps/outlook.json +212 -8
  36. package/assets/open-connector/catalog/apps/outlook_calendar.json +23 -2
  37. package/assets/open-connector/catalog/apps/postiz.json +334 -0
  38. package/assets/open-connector/catalog/apps/proworkflow.json +529 -0
  39. package/assets/open-connector/catalog/apps/sellersprite_mcp.json +2 -1
  40. package/assets/open-connector/catalog/apps/shopify.json +282 -0
  41. package/assets/open-connector/catalog/apps/slack.json +405 -0
  42. package/assets/open-connector/catalog/apps/slackbot.json +214 -0
  43. package/assets/open-connector/catalog/apps/spotify.json +46 -43
  44. package/assets/open-connector/catalog/apps/stripe.json +96 -0
  45. package/assets/open-connector/catalog/apps/telegram.json +138 -0
  46. package/assets/open-connector/catalog/apps/tencent_docs.json +3 -0
  47. package/assets/open-connector/catalog/apps/weixin_store.json +543 -2
  48. package/assets/open-connector/catalog/apps/wisburg.json +1528 -0
  49. package/assets/open-connector/catalog/apps/woocommerce.json +127 -0
  50. package/assets/open-connector/catalog/apps/youtube.json +4 -1
  51. package/assets/open-connector/catalog/apps/zendesk.json +152 -0
  52. package/assets/open-connector/catalog/apps/zerotier.json +3319 -0
  53. package/assets/open-connector/catalog/apps-index.json +1 -1
  54. package/assets/open-connector/migrations/0014_saas_project.sql +55 -0
  55. package/assets/open-connector/migrations/0015_saas_cleanup_runtime.sql +8 -0
  56. package/assets/open-connector/migrations/0016_trigger_policy.sql +1 -0
  57. package/assets/open-connector/migrations/0017_trigger_subscriptions.sql +17 -0
  58. package/assets/open-connector/migrations/postgresql/0014_saas_project.sql +55 -0
  59. package/assets/open-connector/migrations/postgresql/0015_saas_cleanup_runtime.sql +8 -0
  60. package/assets/open-connector/migrations/postgresql/0016_trigger_policy.sql +1 -0
  61. package/assets/open-connector/migrations/postgresql/0017_trigger_subscriptions.sql +17 -0
  62. package/package.json +2 -2
  63. package/src/connection-service.d.ts +40 -7
  64. package/src/connection-service.js +60 -18
  65. package/src/core/action-policy.d.ts +8 -1
  66. package/src/core/action-policy.js +51 -0
  67. package/src/core/cast.d.ts +13 -0
  68. package/src/core/cast.js +18 -1
  69. package/src/core/guarded-fetch.d.ts +11 -3
  70. package/src/core/guarded-fetch.js +19 -7
  71. package/src/core/provider-scenarios.js +67 -13
  72. package/src/core/remote-http.d.ts +33 -0
  73. package/src/core/remote-http.js +104 -0
  74. package/src/core/request.d.ts +1 -0
  75. package/src/core/request.js +11 -1
  76. package/src/core/types.d.ts +5 -1
  77. package/src/marketplace/marketplace-service.d.ts +0 -1
  78. package/src/marketplace/marketplace-service.js +80 -92
  79. package/src/mcp.js +26 -9
  80. package/src/oauth/oauth-client-config-service.d.ts +16 -1
  81. package/src/oauth/oauth-client-config-service.js +59 -3
  82. package/src/oauth/oauth-flow-service.d.ts +14 -1
  83. package/src/oauth/oauth-flow-service.js +14 -6
  84. package/src/providers/17track/runtime.js +1 -1
  85. package/src/providers/action-contracts.generated.d.ts +20 -6
  86. package/src/providers/aifinmarket/runtime.js +1 -1
  87. package/src/providers/airtable/executors.d.ts +3 -0
  88. package/src/providers/airtable/executors.js +2 -0
  89. package/src/providers/airtable/trigger-on-record-changed.d.ts +2 -0
  90. package/src/providers/airtable/trigger-on-record-changed.definition.d.ts +4 -0
  91. package/src/providers/airtable/trigger-on-record-changed.definition.js +54 -0
  92. package/src/providers/airtable/trigger-on-record-changed.js +235 -0
  93. package/src/providers/aisa/executors.js +912 -50
  94. package/src/providers/aliyun_ack/runtime.js +1 -1
  95. package/src/providers/aliyun_sls/runtime.js +1 -1
  96. package/src/providers/app_store_server/runtime-helpers.js +1 -1
  97. package/src/providers/baizhi_mcp/actions.d.ts +2 -0
  98. package/src/providers/baizhi_mcp/actions.js +40 -0
  99. package/src/providers/baizhi_mcp/executors.d.ts +3 -0
  100. package/src/providers/baizhi_mcp/executors.js +102 -0
  101. package/src/providers/bazhuayu/runtime.js +2 -2
  102. package/src/providers/bilibili/runtime.js +2 -4
  103. package/src/providers/bilibili/upload.js +9 -7
  104. package/src/providers/cal/actions.js +5 -1
  105. package/src/providers/cloudflare_browser_rendering/executors.js +1 -1
  106. package/src/providers/cloudflare_dns/executors.js +1 -1
  107. package/src/providers/{cloudflare-current-user.js → cloudflare_dns/runtime-user.js} +2 -2
  108. package/src/providers/cloudflare_dns/runtime.d.ts +1 -1
  109. package/src/providers/cloudflare_dns/runtime.js +1 -1
  110. package/src/providers/cloudflare_r2/executors.js +1 -1
  111. package/src/providers/cloudflare_r2/runtime.d.ts +1 -1
  112. package/src/providers/cloudflare_r2/runtime.js +1 -1
  113. package/src/providers/cloudflare_worker/executors.js +1 -1
  114. package/src/providers/cloudflare_worker/runtime.d.ts +1 -1
  115. package/src/providers/cloudflare_worker/runtime.js +1 -1
  116. package/src/providers/dingtalk_mcp/runtime.js +1 -1
  117. package/src/providers/discordbot/executors.d.ts +0 -9
  118. package/src/providers/discordbot/executors.js +9 -101
  119. package/src/providers/discordbot/runtime-guilds.d.ts +3 -0
  120. package/src/providers/discordbot/runtime-guilds.js +464 -0
  121. package/src/providers/discordbot/runtime.d.ts +42 -0
  122. package/src/providers/discordbot/runtime.js +124 -0
  123. package/src/providers/drawio_mcp/executors.d.ts +3 -0
  124. package/src/providers/drawio_mcp/executors.js +19 -0
  125. package/src/providers/drawio_mcp/runtime.d.ts +8 -0
  126. package/src/providers/drawio_mcp/runtime.js +175 -0
  127. package/src/providers/enormail/executors.d.ts +4 -0
  128. package/src/providers/enormail/executors.js +97 -0
  129. package/src/providers/fastmoss_mcp/executors.js +2 -2
  130. package/src/providers/feishu_app_bot/executors.d.ts +3 -0
  131. package/src/providers/feishu_app_bot/executors.js +2 -0
  132. package/src/providers/feishu_app_bot/trigger-config.d.ts +1 -0
  133. package/src/providers/feishu_app_bot/trigger-config.js +10 -0
  134. package/src/providers/feishu_app_bot/trigger-on-event.d.ts +2 -0
  135. package/src/providers/feishu_app_bot/trigger-on-event.definition.d.ts +4 -0
  136. package/src/providers/feishu_app_bot/trigger-on-event.definition.js +63 -0
  137. package/src/providers/feishu_app_bot/trigger-on-event.js +29 -0
  138. package/src/providers/feishu_app_bot/trigger-subscriptions.d.ts +5 -0
  139. package/src/providers/feishu_app_bot/trigger-subscriptions.js +70 -0
  140. package/src/providers/finchina/executors.js +1 -1
  141. package/src/providers/framejet/executors.d.ts +4 -0
  142. package/src/providers/framejet/executors.js +19 -0
  143. package/src/providers/framejet/runtime.d.ts +16 -0
  144. package/src/providers/framejet/runtime.js +148 -0
  145. package/src/providers/futunn/actions.d.ts +2 -0
  146. package/src/providers/futunn/actions.js +152 -0
  147. package/src/providers/futunn/actions.research.d.ts +2 -0
  148. package/src/providers/futunn/actions.research.js +423 -0
  149. package/src/providers/futunn/actions.trading.d.ts +2 -0
  150. package/src/providers/futunn/actions.trading.js +204 -0
  151. package/src/providers/futunn/executors.d.ts +3 -0
  152. package/src/providers/futunn/executors.js +24 -0
  153. package/src/providers/futunn/runtime-research.d.ts +3 -0
  154. package/src/providers/futunn/runtime-research.js +133 -0
  155. package/src/providers/futunn/runtime-trading.d.ts +3 -0
  156. package/src/providers/futunn/runtime-trading.js +39 -0
  157. package/src/providers/futunn/runtime.d.ts +2 -0
  158. package/src/providers/futunn/runtime.js +50 -0
  159. package/src/providers/futunn/transport.d.ts +11 -0
  160. package/src/providers/futunn/transport.js +76 -0
  161. package/src/providers/gildata/executors.js +1 -1
  162. package/src/providers/github/executors.d.ts +3 -0
  163. package/src/providers/github/executors.js +6 -0
  164. package/src/providers/github/trigger-on-repo-event.d.ts +2 -0
  165. package/src/providers/github/trigger-on-repo-event.definition.d.ts +4 -0
  166. package/src/providers/github/trigger-on-repo-event.definition.js +94 -0
  167. package/src/providers/github/trigger-on-repo-event.js +168 -0
  168. package/src/providers/github/trigger-watch-pull-request.d.ts +2 -0
  169. package/src/providers/github/trigger-watch-pull-request.definition.d.ts +4 -0
  170. package/src/providers/github/trigger-watch-pull-request.definition.js +49 -0
  171. package/src/providers/github/trigger-watch-pull-request.js +106 -0
  172. package/src/providers/gitlab/executors.d.ts +3 -0
  173. package/src/providers/gitlab/executors.js +2 -0
  174. package/src/providers/gitlab/trigger-on-project-event.d.ts +2 -0
  175. package/src/providers/gitlab/trigger-on-project-event.definition.d.ts +5 -0
  176. package/src/providers/gitlab/trigger-on-project-event.definition.js +63 -0
  177. package/src/providers/gitlab/trigger-on-project-event.js +186 -0
  178. package/src/providers/gmail/executors.d.ts +3 -0
  179. package/src/providers/gmail/executors.js +5 -3
  180. package/src/providers/gmail/message.d.ts +6 -8
  181. package/src/providers/gmail/message.js +4 -0
  182. package/src/providers/gmail/scopes.d.ts +32 -0
  183. package/src/providers/gmail/scopes.js +37 -0
  184. package/src/providers/gmail/trigger-on-message-received.d.ts +2 -0
  185. package/src/providers/gmail/trigger-on-message-received.definition.d.ts +4 -0
  186. package/src/providers/gmail/trigger-on-message-received.definition.js +74 -0
  187. package/src/providers/gmail/trigger-on-message-received.js +232 -0
  188. package/src/providers/google_analytics/executors.js +2 -2
  189. package/src/providers/google_analytics/scopes.js +6 -1
  190. package/src/providers/google_bigquery/executors.js +2 -2
  191. package/src/providers/google_bigquery/scopes.js +2 -0
  192. package/src/providers/google_search_console/executors.js +2 -2
  193. package/src/providers/google_search_console/scopes.js +2 -0
  194. package/src/providers/googleads/executors.js +1 -1
  195. package/src/providers/googleads/scopes.d.ts +1 -3
  196. package/src/providers/googleads/scopes.js +2 -4
  197. package/src/providers/googlecalendar/executors.d.ts +3 -0
  198. package/src/providers/googlecalendar/executors.js +3 -1
  199. package/src/providers/googlecalendar/runtime-shared.js +2 -2
  200. package/src/providers/googlecalendar/scopes.js +2 -0
  201. package/src/providers/googlecalendar/trigger-on-event-changed.d.ts +2 -0
  202. package/src/providers/googlecalendar/trigger-on-event-changed.definition.d.ts +4 -0
  203. package/src/providers/googlecalendar/trigger-on-event-changed.definition.js +74 -0
  204. package/src/providers/googlecalendar/trigger-on-event-changed.js +233 -0
  205. package/src/providers/googlechat/executors.d.ts +1 -3
  206. package/src/providers/googlechat/executors.js +219 -28
  207. package/src/providers/googlechat/members.d.ts +55 -0
  208. package/src/providers/googlechat/members.js +293 -0
  209. package/src/providers/googlechat/runtime.d.ts +16 -0
  210. package/src/providers/googlechat/runtime.js +25 -0
  211. package/src/providers/googlechat/scopes.d.ts +22 -3
  212. package/src/providers/googlechat/scopes.js +30 -7
  213. package/src/providers/googledocs/executors.js +1 -1
  214. package/src/providers/googledrive/executors.d.ts +3 -0
  215. package/src/providers/googledrive/executors.js +9 -2
  216. package/src/providers/{google-auth.d.ts → googledrive/runtime-auth.d.ts} +2 -2
  217. package/src/providers/{google-auth.js → googledrive/runtime-auth.js} +3 -3
  218. package/src/providers/googledrive/runtime-collaboration.js +1 -1
  219. package/src/providers/{google-runtime.d.ts → googledrive/runtime-request.d.ts} +1 -1
  220. package/src/providers/{google-runtime.js → googledrive/runtime-request.js} +2 -2
  221. package/src/providers/googledrive/trigger-changes.d.ts +12 -0
  222. package/src/providers/googledrive/trigger-changes.definition.d.ts +7 -0
  223. package/src/providers/googledrive/trigger-changes.definition.js +101 -0
  224. package/src/providers/googledrive/trigger-changes.js +452 -0
  225. package/src/providers/googledrive/trigger-on-file-change.d.ts +2 -0
  226. package/src/providers/googledrive/trigger-on-file-change.definition.d.ts +4 -0
  227. package/src/providers/googledrive/trigger-on-file-change.definition.js +77 -0
  228. package/src/providers/googledrive/trigger-on-file-change.js +258 -0
  229. package/src/providers/googleforms/executors.js +2 -2
  230. package/src/providers/googleforms/scopes.d.ts +0 -3
  231. package/src/providers/googleforms/scopes.js +2 -6
  232. package/src/providers/googlemeet/executors.js +2 -2
  233. package/src/providers/googlemeet/scopes.d.ts +0 -3
  234. package/src/providers/googlemeet/scopes.js +2 -6
  235. package/src/providers/googlesheets/executors.d.ts +3 -0
  236. package/src/providers/googlesheets/executors.js +3 -1
  237. package/src/providers/googlesheets/scopes.js +2 -0
  238. package/src/providers/googlesheets/trigger-on-row-added.d.ts +2 -0
  239. package/src/providers/googlesheets/trigger-on-row-added.definition.d.ts +4 -0
  240. package/src/providers/googlesheets/trigger-on-row-added.definition.js +54 -0
  241. package/src/providers/googlesheets/trigger-on-row-added.js +234 -0
  242. package/src/providers/googleslides/executors.js +2 -2
  243. package/src/providers/googleslides/scopes.d.ts +0 -3
  244. package/src/providers/googleslides/scopes.js +2 -6
  245. package/src/providers/googletasks/executors.js +2 -2
  246. package/src/providers/googletasks/scopes.d.ts +0 -3
  247. package/src/providers/googletasks/scopes.js +2 -6
  248. package/src/providers/granola/actions.js +2 -0
  249. package/src/providers/granola/runtime-mcp.js +2 -0
  250. package/src/providers/granola/runtime.js +2 -2
  251. package/src/providers/hithink_finance/runtime.js +1 -1
  252. package/src/providers/indexed/executors.d.ts +4 -0
  253. package/src/providers/indexed/executors.js +16 -0
  254. package/src/providers/indexed/runtime.d.ts +26 -0
  255. package/src/providers/indexed/runtime.js +129 -0
  256. package/src/providers/indiegogo/executors.js +1 -1
  257. package/src/providers/investoday_mcp/executors.js +2 -2
  258. package/src/providers/iyunbiao/runtime.js +2 -2
  259. package/src/providers/keepa/actions.d.ts +1 -1
  260. package/src/providers/keepa/actions.js +371 -149
  261. package/src/providers/keepa/deal-attributes.d.ts +1 -0
  262. package/src/providers/keepa/deal-attributes.js +26 -0
  263. package/src/providers/keepa/runtime.js +212 -18
  264. package/src/providers/kingdee/executors.js +1 -1
  265. package/src/providers/kingdee/runtime.js +2 -2
  266. package/src/providers/kuaidi100/runtime.js +1 -1
  267. package/src/providers/linear/executors.d.ts +3 -0
  268. package/src/providers/linear/executors.js +14 -9
  269. package/src/providers/linear/trigger-on-issue-changed.d.ts +2 -0
  270. package/src/providers/linear/trigger-on-issue-changed.definition.d.ts +5 -0
  271. package/src/providers/linear/trigger-on-issue-changed.definition.js +43 -0
  272. package/src/providers/linear/trigger-on-issue-changed.js +215 -0
  273. package/src/providers/linear_mcp/actions.d.ts +47 -0
  274. package/src/providers/linear_mcp/actions.js +102 -0
  275. package/src/providers/linear_mcp/endpoints.d.ts +3 -0
  276. package/src/providers/linear_mcp/endpoints.js +3 -0
  277. package/src/providers/linear_mcp/executors.d.ts +3 -0
  278. package/src/providers/linear_mcp/executors.js +9 -0
  279. package/src/providers/linear_mcp/runtime-mcp.d.ts +15 -0
  280. package/src/providers/linear_mcp/runtime-mcp.js +238 -0
  281. package/src/providers/lingxing_mcp/runtime.js +1 -1
  282. package/src/providers/mcdonalds_cn_mcp/runtime.js +1 -1
  283. package/src/providers/metabase/mcp-runtime.js +1 -1
  284. package/src/providers/moneyforward_mcp/executors.d.ts +3 -0
  285. package/src/providers/moneyforward_mcp/executors.js +11 -0
  286. package/src/providers/moneyforward_mcp/manifest.d.ts +31 -0
  287. package/src/providers/moneyforward_mcp/manifest.js +204 -0
  288. package/src/providers/moneyforward_mcp/runtime.d.ts +18 -0
  289. package/src/providers/moneyforward_mcp/runtime.js +296 -0
  290. package/src/providers/notion/executors.d.ts +3 -0
  291. package/src/providers/notion/executors.js +41 -3
  292. package/src/providers/notion/trigger-on-database-page-event.d.ts +2 -0
  293. package/src/providers/notion/trigger-on-database-page-event.definition.d.ts +4 -0
  294. package/src/providers/notion/trigger-on-database-page-event.definition.js +63 -0
  295. package/src/providers/notion/trigger-on-database-page-event.js +293 -0
  296. package/src/providers/notion_mcp/endpoints.d.ts +3 -0
  297. package/src/providers/notion_mcp/endpoints.js +3 -0
  298. package/src/providers/notion_mcp/executors.d.ts +3 -0
  299. package/src/providers/notion_mcp/executors.js +176 -0
  300. package/src/providers/notion_mcp/mcp-response.d.ts +86 -0
  301. package/src/providers/notion_mcp/mcp-response.js +314 -0
  302. package/src/providers/odoo/executors.d.ts +3 -0
  303. package/src/providers/odoo/executors.js +32 -0
  304. package/src/providers/odoo/runtime.d.ts +16 -0
  305. package/src/providers/odoo/runtime.js +140 -0
  306. package/src/providers/one_drive/executors.d.ts +3 -0
  307. package/src/providers/one_drive/executors.js +2 -0
  308. package/src/providers/one_drive/trigger-on-item-changed.d.ts +2 -0
  309. package/src/providers/one_drive/trigger-on-item-changed.definition.d.ts +4 -0
  310. package/src/providers/one_drive/trigger-on-item-changed.definition.js +63 -0
  311. package/src/providers/one_drive/trigger-on-item-changed.js +214 -0
  312. package/src/providers/outlook/executors.d.ts +3 -0
  313. package/src/providers/outlook/executors.js +29 -6
  314. package/src/providers/outlook/microsoft-graph.js +17 -6
  315. package/src/providers/outlook/trigger-on-message-received.d.ts +2 -0
  316. package/src/providers/outlook/trigger-on-message-received.definition.d.ts +4 -0
  317. package/src/providers/outlook/trigger-on-message-received.definition.js +93 -0
  318. package/src/providers/outlook/trigger-on-message-received.js +226 -0
  319. package/src/providers/outlook_calendar/executors.js +30 -7
  320. package/src/providers/patsnap_mcp/executors.js +2 -2
  321. package/src/providers/postiz/executors.d.ts +4 -0
  322. package/src/providers/postiz/executors.js +83 -0
  323. package/src/providers/provider-loader.d.ts +5 -0
  324. package/src/providers/provider-loader.js +4 -0
  325. package/src/providers/provider-runtime.d.ts +15 -0
  326. package/src/providers/provider-runtime.js +57 -4
  327. package/src/providers/proworkflow/executors.d.ts +4 -0
  328. package/src/providers/proworkflow/executors.js +135 -0
  329. package/src/providers/registry.generated.js +14 -0
  330. package/src/providers/scrape_creators/catalog.js +1 -1
  331. package/src/providers/scrape_creators/runtime.js +1 -1
  332. package/src/providers/sellersprite_mcp/executors.js +2 -2
  333. package/src/providers/sellersprite_mcp/official-actions.js +3 -2
  334. package/src/providers/sentry/runtime.js +6 -7
  335. package/src/providers/shopify/executors.d.ts +3 -0
  336. package/src/providers/shopify/executors.js +2 -0
  337. package/src/providers/shopify/trigger-on-shop-event.d.ts +2 -0
  338. package/src/providers/shopify/trigger-on-shop-event.definition.d.ts +4 -0
  339. package/src/providers/shopify/trigger-on-shop-event.definition.js +214 -0
  340. package/src/providers/shopify/trigger-on-shop-event.js +165 -0
  341. package/src/providers/slack/actions.js +52 -3
  342. package/src/providers/slack/executors.d.ts +3 -0
  343. package/src/providers/slack/executors.js +2 -0
  344. package/src/providers/slack/runtime.js +58 -21
  345. package/src/providers/slack/trigger-on-message-posted.d.ts +2 -0
  346. package/src/providers/slack/trigger-on-message-posted.definition.d.ts +4 -0
  347. package/src/providers/slack/trigger-on-message-posted.definition.js +80 -0
  348. package/src/providers/slack/trigger-on-message-posted.js +176 -0
  349. package/src/providers/slickdeals/runtime.js +1 -1
  350. package/src/providers/sorftime_mcp/executors.js +2 -2
  351. package/src/providers/spotify/runtime.js +15 -4
  352. package/src/providers/stripe/executors.d.ts +3 -0
  353. package/src/providers/stripe/executors.js +2 -0
  354. package/src/providers/stripe/trigger-on-event.d.ts +2 -0
  355. package/src/providers/stripe/trigger-on-event.definition.d.ts +4 -0
  356. package/src/providers/stripe/trigger-on-event.definition.js +43 -0
  357. package/src/providers/stripe/trigger-on-event.js +212 -0
  358. package/src/providers/telegram/executors.d.ts +3 -0
  359. package/src/providers/telegram/executors.js +2 -0
  360. package/src/providers/telegram/trigger-on-update.d.ts +2 -0
  361. package/src/providers/telegram/trigger-on-update.definition.d.ts +5 -0
  362. package/src/providers/telegram/trigger-on-update.definition.js +78 -0
  363. package/src/providers/telegram/trigger-on-update.js +141 -0
  364. package/src/providers/tikhub/bounded-response.d.ts +1 -1
  365. package/src/providers/tikhub/bounded-response.js +8 -34
  366. package/src/providers/tikhub/endpoint-catalog.js +1 -1
  367. package/src/providers/tikhub/runtime.js +2 -2
  368. package/src/providers/tongdaxin/executors.js +79 -15
  369. package/src/providers/uspto/executors.js +1 -1
  370. package/src/providers/waffo/executors.js +1 -1
  371. package/src/providers/waffo/runtime.js +1 -1
  372. package/src/providers/wecom_mcp/runtime.js +1 -1
  373. package/src/providers/weixin_store/access-token.d.ts +2 -1
  374. package/src/providers/weixin_store/access-token.js +15 -4
  375. package/src/providers/weixin_store/executors.js +97 -12
  376. package/src/providers/wisburg/executors.d.ts +4 -0
  377. package/src/providers/wisburg/executors.js +13 -0
  378. package/src/providers/wisburg/runtime.d.ts +12 -0
  379. package/src/providers/wisburg/runtime.js +133 -0
  380. package/src/providers/woocommerce/executors.d.ts +3 -0
  381. package/src/providers/woocommerce/executors.js +2 -0
  382. package/src/providers/woocommerce/trigger-on-store-event.d.ts +2 -0
  383. package/src/providers/woocommerce/trigger-on-store-event.definition.d.ts +4 -0
  384. package/src/providers/woocommerce/trigger-on-store-event.definition.js +55 -0
  385. package/src/providers/woocommerce/trigger-on-store-event.js +179 -0
  386. package/src/providers/xydc_mcp/executors.js +2 -2
  387. package/src/providers/youtube/executors.js +1 -1
  388. package/src/providers/youtube/runtime.js +1 -1
  389. package/src/providers/zendesk/executors.d.ts +3 -0
  390. package/src/providers/zendesk/executors.js +2 -0
  391. package/src/providers/zendesk/trigger-on-event.d.ts +2 -0
  392. package/src/providers/zendesk/trigger-on-event.definition.d.ts +5 -0
  393. package/src/providers/zendesk/trigger-on-event.definition.js +101 -0
  394. package/src/providers/zendesk/trigger-on-event.js +188 -0
  395. package/src/providers/zerotier/executors.d.ts +9 -0
  396. package/src/providers/zerotier/executors.js +629 -0
  397. package/src/providers/zerotier/runtime.d.ts +54 -0
  398. package/src/providers/zerotier/runtime.js +207 -0
  399. package/src/saas/saas-cleanup-service.d.ts +26 -0
  400. package/src/saas/saas-cleanup-service.js +124 -0
  401. package/src/saas/saas-client.d.ts +86 -0
  402. package/src/saas/saas-client.js +369 -0
  403. package/src/saas/saas-execution-service.d.ts +15 -0
  404. package/src/saas/saas-execution-service.js +21 -0
  405. package/src/saas/saas-oauth-service.d.ts +25 -0
  406. package/src/saas/saas-oauth-service.js +197 -0
  407. package/src/saas/saas-project-service.d.ts +61 -0
  408. package/src/saas/saas-project-service.js +211 -0
  409. package/src/server/actions/action-idempotency.d.ts +1 -0
  410. package/src/server/actions/action-idempotency.js +1 -0
  411. package/src/server/actions/action-runner.d.ts +7 -0
  412. package/src/server/actions/action-runner.js +43 -7
  413. package/src/server/actions/run-log-summary.js +9 -0
  414. package/src/server/api/auth.d.ts +1 -0
  415. package/src/server/api/auth.js +13 -2
  416. package/src/server/api/cache-policy.js +4 -1
  417. package/src/server/api/connection-input.d.ts +7 -1
  418. package/src/server/api/connection-input.js +7 -1
  419. package/src/server/api/connection-routes.d.ts +3 -1
  420. package/src/server/api/connection-routes.js +21 -3
  421. package/src/server/api/http-utils.d.ts +4 -3
  422. package/src/server/api/oauth-completion-page.d.ts +124 -0
  423. package/src/server/api/oauth-completion-page.js +113 -18
  424. package/src/server/api/openapi.js +123 -15
  425. package/src/server/api/policy-input.js +6 -0
  426. package/src/server/api/runtime-api.d.ts +18 -3
  427. package/src/server/api/runtime-api.js +36 -5
  428. package/src/server/api/saas-completion-page.d.ts +2 -0
  429. package/src/server/api/saas-completion-page.js +103 -0
  430. package/src/server/connect-app.d.ts +5 -0
  431. package/src/server/connect-app.js +50 -0
  432. package/src/server/connect-server.d.ts +12 -0
  433. package/src/server/connect-server.js +157 -15
  434. package/src/server/connector-runtime.d.ts +3 -1
  435. package/src/server/connector-runtime.js +5 -2
  436. package/src/server/files/transit-files.js +16 -7
  437. package/src/server/proxy/proxy-runner.d.ts +5 -1
  438. package/src/server/proxy/proxy-runner.js +72 -26
  439. package/src/server/storage/connection-request-store.d.ts +41 -1
  440. package/src/server/storage/connection-request-store.js +245 -20
  441. package/src/server/storage/connection-store.d.ts +16 -0
  442. package/src/server/storage/connection-store.js +119 -0
  443. package/src/server/storage/node-runtime-database.js +3 -3
  444. package/src/server/storage/{postgres-migrations.d.ts → postgres/migrations.d.ts} +2 -2
  445. package/src/server/storage/{postgres-migrations.js → postgres/migrations.js} +1 -1
  446. package/src/server/storage/postgres/runtime-store.d.ts +43 -0
  447. package/src/server/storage/{postgres-runtime-store.js → postgres/runtime-store.js} +59 -94
  448. package/src/server/storage/runtime-database.d.ts +4 -0
  449. package/src/server/storage/runtime-sql.d.ts +1 -1
  450. package/src/server/storage/runtime-sql.js +2 -1
  451. package/src/server/storage/runtime-store.d.ts +1 -0
  452. package/src/server/storage/runtime-token-service.d.ts +2 -0
  453. package/src/server/storage/runtime-token-service.js +3 -0
  454. package/src/server/storage/saas-project-store.d.ts +77 -0
  455. package/src/server/storage/saas-project-store.js +273 -0
  456. package/src/server/storage/{sqlite-runtime-store.d.ts → sqlite/runtime-store.d.ts} +21 -25
  457. package/src/server/storage/{sqlite-runtime-store.js → sqlite/runtime-store.js} +100 -115
  458. package/src/server/storage/trigger-store.d.ts +16 -0
  459. package/src/server/storage/trigger-store.js +96 -0
  460. package/src/triggers/common/config.d.ts +2 -0
  461. package/src/triggers/common/config.js +17 -0
  462. package/src/triggers/common/configOptions.d.ts +13 -0
  463. package/src/triggers/common/configOptions.js +1 -0
  464. package/src/triggers/common/encoding.d.ts +3 -0
  465. package/src/triggers/common/encoding.js +19 -0
  466. package/src/triggers/common/integration.d.ts +115 -0
  467. package/src/triggers/common/integration.js +31 -0
  468. package/src/triggers/common/json.d.ts +6 -0
  469. package/src/triggers/common/json.js +91 -0
  470. package/src/triggers/common/poll.d.ts +41 -0
  471. package/src/triggers/common/poll.js +15 -0
  472. package/src/triggers/common/proxy.d.ts +14 -0
  473. package/src/triggers/common/proxy.js +1 -0
  474. package/src/triggers/common/types.d.ts +42 -0
  475. package/src/triggers/common/types.js +1 -0
  476. package/src/triggers/maintenance.d.ts +40 -0
  477. package/src/triggers/maintenance.js +120 -0
  478. package/src/triggers/metadata.d.ts +8 -0
  479. package/src/triggers/metadata.js +1 -0
  480. package/src/triggers/request.d.ts +33 -0
  481. package/src/triggers/request.js +52 -0
  482. package/src/triggers/resources.d.ts +12 -0
  483. package/src/triggers/resources.js +121 -0
  484. package/src/triggers/signature.d.ts +4 -0
  485. package/src/triggers/signature.js +48 -0
  486. package/src/triggers/store.d.ts +29 -0
  487. package/src/triggers/store.js +1 -0
  488. package/src/triggers/subscriptions.d.ts +22 -0
  489. package/src/triggers/subscriptions.js +220 -0
  490. package/src/triggers/trigger-runner.d.ts +34 -0
  491. package/src/triggers/trigger-runner.js +169 -0
  492. package/src/providers/sentry/scopes.d.ts +0 -1
  493. package/src/providers/sentry/scopes.js +0 -7
  494. package/src/server/storage/postgres-runtime-store.d.ts +0 -39
  495. /package/src/providers/{cloudflare-current-user.d.ts → cloudflare_dns/runtime-user.d.ts} +0 -0
@@ -10,9 +10,14 @@ export function readRuntimePolicyRules(body) {
10
10
  blockedActions: readRules(body.blockedActions, "blockedActions", "action"),
11
11
  allowedProxies: readRules(body.allowedProxies, "allowedProxies", "proxy"),
12
12
  blockedProxies: readRules(body.blockedProxies, "blockedProxies", "proxy"),
13
+ allowedTriggers: readRules(body.allowedTriggers, "allowedTriggers", "action", true),
14
+ blockedTriggers: readRules(body.blockedTriggers, "blockedTriggers", "action", true),
13
15
  };
14
16
  }
15
17
  export function readTokenPolicy(body, allowOmitted = false) {
18
+ if (body.blockedTriggers !== undefined) {
19
+ throw invalidInput("Token policy does not support Trigger block rules.");
20
+ }
16
21
  if (body.blockedProxies !== undefined) {
17
22
  throw invalidInput("Token policy does not support proxy block rules.");
18
23
  }
@@ -20,6 +25,7 @@ export function readTokenPolicy(body, allowOmitted = false) {
20
25
  allowedActions: readRules(body.allowedActions, "allowedActions", "action", allowOmitted),
21
26
  blockedActions: readRules(body.blockedActions, "blockedActions", "action", allowOmitted),
22
27
  allowedProxies: readRules(body.allowedProxies, "allowedProxies", "proxy", allowOmitted),
28
+ allowedTriggers: readRules(body.allowedTriggers, "allowedTriggers", "action", true),
23
29
  allowedConnections: readConnectionIds(body.allowedConnections, "allowedConnections", allowOmitted),
24
30
  };
25
31
  }
@@ -3,8 +3,9 @@ import type { ConnectionError, ConnectionSummary, ManagedConnectionSummary } fro
3
3
  import type { ProviderAuthSetup } from "../../core/provider-setup.ts";
4
4
  import type { ExecutionResult, ProviderScenario } from "../../core/types.ts";
5
5
  import type { OAuthClientConfigSummary } from "../../oauth/oauth-client-config-service.ts";
6
+ import type { TriggerPermission } from "../../triggers/metadata.ts";
6
7
  import type { Context } from "hono";
7
- type RuntimeStatus = 400 | 401 | 402 | 403 | 404 | 409 | 413 | 429 | 500 | 501;
8
+ export type RuntimeStatus = 400 | 401 | 402 | 403 | 404 | 409 | 413 | 429 | 500 | 501 | 502 | 503 | 504;
8
9
  export type RuntimeResponseMeta = Record<string, unknown>;
9
10
  export interface RuntimeSuccessEnvelope<TData> {
10
11
  success: true;
@@ -54,6 +55,7 @@ export interface RuntimeActionMetadata {
54
55
  }
55
56
  export interface RuntimeConnectedApp {
56
57
  id: string;
58
+ providerAccountId: string;
57
59
  service: string;
58
60
  status: "active" | "disconnected";
59
61
  alias: string;
@@ -74,6 +76,9 @@ export interface RuntimeFailureInput {
74
76
  export interface RuntimeActionResultInput {
75
77
  actionId: string;
76
78
  executionId: string;
79
+ remoteExecutionId?: string;
80
+ failureStatus?: RuntimeStatus;
81
+ retryAfter?: string;
77
82
  auditPersisted: boolean;
78
83
  result: ExecutionResult;
79
84
  }
@@ -100,7 +105,13 @@ export declare function serializeRuntimeFailure(input: RuntimeFailureInput): Run
100
105
  export declare function serializeRuntimeActionResult(input: RuntimeActionResultInput): RuntimeActionHttpResult;
101
106
  /** Validate an action response decoded from persistent storage. */
102
107
  export declare function parseRuntimeActionHttpResult(value: unknown): RuntimeActionHttpResult;
103
- /** Write a newly serialized or replayed action response. */
108
+ /**
109
+ * Write a newly serialized or replayed action response; runtime failures,
110
+ * including proxy failures, go through here as well. A 429 whose provider
111
+ * details carry `retryAfterSeconds` also answers with the `Retry-After`
112
+ * header, so HTTP callers pace on the provider's own hint; the body keeps it,
113
+ * which is what an idempotent replay re-emits the header from.
114
+ */
104
115
  export declare function writeRuntimeActionHttpResult(context: Context, result: RuntimeActionHttpResult): Response;
105
116
  export declare function mapConnectionErrorStatus(error: ConnectionError): 400 | 404 | 409;
106
117
  /**
@@ -129,8 +140,12 @@ export interface RuntimeProviderSetup {
129
140
  interface RuntimeOAuthClientSetup {
130
141
  configured: boolean;
131
142
  customClientAvailable: boolean;
143
+ /** Redirect URI to register with the provider: the configured override, else the runtime callback. */
132
144
  expectedRedirectUri: string;
133
145
  missingFields: string[];
134
146
  }
135
- export declare function serializeRuntimeProviderSetup(provider: RuntimeProviderDefinition, oauth?: OAuthClientConfigSummary): RuntimeProviderSetup;
147
+ export declare function serializeRuntimeProviderSetup(provider: RuntimeProviderDefinition, oauth?: Pick<OAuthClientConfigSummary, "configured" | "customClientAvailable" | "expectedRedirectUri" | "missingFields">): RuntimeProviderSetup;
148
+ export declare function serializeRuntimeTriggerPermissions(provider: RuntimeProviderDefinition): (TriggerPermission & {
149
+ requiredScopes: readonly string[];
150
+ })[];
136
151
  export {};
@@ -1,4 +1,4 @@
1
- import { optionalInteger, optionalRecord, requiredRecord } from "../../core/cast.js";
1
+ import { optionalInteger, optionalString, optionalRecord, requiredRecord } from "../../core/cast.js";
2
2
  import { describeProviderAuth } from "../../core/provider-setup.js";
3
3
  export function serializeRuntimeProvider(provider) {
4
4
  return {
@@ -37,6 +37,7 @@ export function serializeRuntimeAction(action) {
37
37
  export function serializeRuntimeConnectedApp(connection) {
38
38
  return {
39
39
  id: connection.id,
40
+ providerAccountId: connection.profile.accountId,
40
41
  service: connection.service,
41
42
  status: connection.configured ? "active" : "disconnected",
42
43
  alias: connection.connectionName,
@@ -91,7 +92,7 @@ export function serializeRuntimeFailure(input) {
91
92
  /** Build the persistable HTTP response for a completed action execution. */
92
93
  export function serializeRuntimeActionResult(input) {
93
94
  const { actionId, executionId, auditPersisted, result } = input;
94
- const meta = { executionId, actionId, auditPersisted };
95
+ const meta = { executionId, actionId, auditPersisted, remoteExecutionId: input.remoteExecutionId };
95
96
  if (result.ok) {
96
97
  return {
97
98
  status: 200,
@@ -104,10 +105,10 @@ export function serializeRuntimeActionResult(input) {
104
105
  };
105
106
  }
106
107
  return serializeRuntimeFailure({
107
- status: mapExecutionErrorStatus(result.error?.code, result.error?.details),
108
+ status: input.failureStatus ?? mapExecutionErrorStatus(result.error?.code, result.error?.details),
108
109
  errorCode: result.error?.code ?? "provider_error",
109
110
  message: result.error?.message ?? "Action execution failed.",
110
- data: result.error?.details ?? null,
111
+ data: input.retryAfter ? { details: { retryAfter: input.retryAfter } } : (result.error?.details ?? null),
111
112
  meta,
112
113
  });
113
114
  }
@@ -128,10 +129,31 @@ export function parseRuntimeActionHttpResult(value) {
128
129
  }
129
130
  throw invalid("status and body envelope do not match");
130
131
  }
131
- /** Write a newly serialized or replayed action response. */
132
+ /**
133
+ * Write a newly serialized or replayed action response; runtime failures,
134
+ * including proxy failures, go through here as well. A 429 whose provider
135
+ * details carry `retryAfterSeconds` also answers with the `Retry-After`
136
+ * header, so HTTP callers pace on the provider's own hint; the body keeps it,
137
+ * which is what an idempotent replay re-emits the header from.
138
+ */
132
139
  export function writeRuntimeActionHttpResult(context, result) {
140
+ const retryAfter = optionalString(optionalRecord(optionalRecord(result.body.data)?.details)?.retryAfter);
141
+ if (result.status === 429 && retryAfter && (/^\d+$/.test(retryAfter) || Number.isFinite(Date.parse(retryAfter))))
142
+ context.header("Retry-After", retryAfter);
143
+ const retryAfterSeconds = readRuntimeRetryAfterSeconds(result);
144
+ if (retryAfterSeconds !== undefined) {
145
+ context.header("Retry-After", String(retryAfterSeconds));
146
+ }
133
147
  return context.json(result.body, result.status);
134
148
  }
149
+ function readRuntimeRetryAfterSeconds(result) {
150
+ if (result.status !== 429) {
151
+ return undefined;
152
+ }
153
+ const seconds = optionalInteger(optionalRecord(optionalRecord(result.body.data)?.details)?.retryAfterSeconds);
154
+ // A safe integer is what keeps String() in plain delay-seconds digits: 1e21 would print as "1e+21".
155
+ return seconds !== undefined && Number.isSafeInteger(seconds) && seconds >= 0 ? seconds : undefined;
156
+ }
135
157
  export function mapConnectionErrorStatus(error) {
136
158
  if (error.code === "unknown_service" || error.code === "connection_not_found") {
137
159
  return 404;
@@ -191,6 +213,9 @@ function isRuntimeStatus(value) {
191
213
  value === 409 ||
192
214
  value === 413 ||
193
215
  value === 429 ||
216
+ value === 502 ||
217
+ value === 503 ||
218
+ value === 504 ||
194
219
  value === 500 ||
195
220
  value === 501);
196
221
  }
@@ -231,3 +256,9 @@ export function serializeRuntimeProviderSetup(provider, oauth) {
231
256
  : undefined,
232
257
  };
233
258
  }
259
+ export function serializeRuntimeTriggerPermissions(provider) {
260
+ return (provider.triggerPermissions ?? []).map((permission) => ({
261
+ ...permission,
262
+ requiredScopes: permission.providerPermissions,
263
+ }));
264
+ }
@@ -0,0 +1,2 @@
1
+ /** The initial GET contains no account data and performs no authorization synchronization. */
2
+ export declare function renderSaasCompletionPage(): string;
@@ -0,0 +1,103 @@
1
+ import { oauthCompletionStrings, oauthCompletionStyles, oauthCompletionLocaleScript } from "./oauth-completion-page.js";
2
+ /** The initial GET contains no account data and performs no authorization synchronization. */
3
+ export function renderSaasCompletionPage() {
4
+ return `<!doctype html>
5
+ <html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Complete connection</title>
7
+ <style>${oauthCompletionStyles}</style></head>
8
+ <body><main class="card" aria-live="polite">
9
+ <div class="header"><span id="badge" class="badge" hidden></span>
10
+ <h1 id="title">Completing connection</h1><p id="status" role="status">Checking your Console session…</p></div>
11
+ <div class="actions"><a id="login" class="button" href="/" target="_blank" rel="noopener" hidden>Open Console to sign in</a>
12
+ <button id="retry" class="button" type="button">Check again</button>
13
+ <button id="close" class="button" type="button" hidden>Close window</button>
14
+ <p id="note" class="close-note" hidden></p></div></main>
15
+ <script>
16
+ const STR = ${JSON.stringify(oauthCompletionStrings).replaceAll("<", "\\u003c")};
17
+ ${oauthCompletionLocaleScript}
18
+ const language = pick();
19
+ const t = STR[language] || STR.en;
20
+ document.documentElement.lang = language;
21
+ document.title = t.checkingTitle;
22
+ const title = document.getElementById('title');
23
+ const status = document.getElementById('status');
24
+ const login = document.getElementById('login');
25
+ const close = document.getElementById('close');
26
+ const badge = document.getElementById('badge');
27
+ const note = document.getElementById('note');
28
+ title.textContent = t.checkingTitle;
29
+ status.textContent = t.checking;
30
+ login.textContent = t.signIn;
31
+ close.textContent = t.closeButton;
32
+ const tryClose = () => { window.close(); note.textContent = t.manualClose; };
33
+ close.addEventListener('click', tryClose);
34
+ const button = document.getElementById('retry');
35
+ button.textContent = t.retry;
36
+ const request = new URL(location.href).searchParams.get('request');
37
+ let timer;
38
+ let busy = false;
39
+ let terminal = false;
40
+ let failures = 0;
41
+ async function sync() {
42
+ if (busy || terminal) return;
43
+ clearTimeout(timer);
44
+ if (!request) { status.textContent = t.missing; button.hidden = true; return; }
45
+ busy = true;
46
+ button.disabled = true;
47
+ try {
48
+ const session = await fetch('/api/auth/session', { credentials: 'same-origin', cache: 'no-store' });
49
+ if (!session.ok || !(await session.json()).authenticated) {
50
+ status.textContent = t.login; login.hidden = false;
51
+ return;
52
+ }
53
+ login.hidden = true;
54
+ const response = await fetch('/api/oauth/connection-requests/' + encodeURIComponent(request) + '/sync', {
55
+ method: 'POST', credentials: 'same-origin', cache: 'no-store',
56
+ headers: { 'Content-Type': 'application/json', 'X-OpenConnector-Request': 'sync' }, body: '{}'
57
+ });
58
+ if (!response.ok) {
59
+ if ([401, 403, 404].includes(response.status)) { status.textContent = response.status === 401 ? t.login : response.status === 403 ? t.forbidden : t.notFound; login.hidden = response.status !== 401; return; }
60
+ status.textContent = t.retrying;
61
+ const retry = response.headers.get('Retry-After');
62
+ const retryMs = retry ? (/^\\d+$/.test(retry) ? Number(retry) * 1000 : Date.parse(retry) - Date.now()) : 0;
63
+ timer = setTimeout(sync, Math.max(2000, Math.min(30000, 2000 * 2 ** Math.min(failures++, 4)), Number.isFinite(retryMs) ? retryMs : 0));
64
+ return;
65
+ }
66
+ failures = 0;
67
+ const result = await response.json();
68
+ if (result.request.status === 'connected') {
69
+ terminal = true;
70
+ document.title = title.textContent = t.title;
71
+ status.textContent = t.body;
72
+ badge.textContent = t.badge;
73
+ badge.hidden = false;
74
+ button.hidden = true;
75
+ login.hidden = true;
76
+ close.hidden = false;
77
+ const message = { type: 'oauth.completed', service: result.request.service };
78
+ if (typeof BroadcastChannel !== 'undefined') { const channel = new BroadcastChannel('oomol-connect-oauth'); channel.postMessage(message); channel.close(); }
79
+ if (window.opener) window.opener.postMessage(message, location.origin);
80
+ if (result.returnUri) { location.assign(result.returnUri); return; }
81
+ note.hidden = false;
82
+ note.textContent = t.autoClose.replace('%N%', '2');
83
+ setTimeout(tryClose, 2000);
84
+ return;
85
+ }
86
+ if (result.request.status === 'failed' || result.request.status === 'expired') {
87
+ terminal = true;
88
+ status.textContent = result.request.status === 'expired' ? t.notFound : t.failed;
89
+ button.hidden = true;
90
+ close.hidden = false;
91
+ if (result.returnUri) location.assign(result.returnUri);
92
+ return;
93
+ }
94
+ status.textContent = t.waiting;
95
+ timer = setTimeout(sync, 2000);
96
+ } catch {
97
+ status.textContent = t.network;
98
+ } finally { busy = false; button.disabled = false; }
99
+ }
100
+ button.addEventListener('click', sync);
101
+ sync();
102
+ </script></body></html>`;
103
+ }
@@ -7,6 +7,8 @@ import type { ITransitFileService } from "./files/transit-file-store.ts";
7
7
  import type { ISecretCodec } from "./secrets/secret-codec-core.ts";
8
8
  import type { RuntimeDatabase } from "./storage/runtime-database.ts";
9
9
  import type { Hono } from "hono";
10
+ import { SaasCleanupService } from "../saas/saas-cleanup-service.ts";
11
+ import { TriggerMaintenance } from "../triggers/maintenance.ts";
10
12
  export interface ConnectAppOptions {
11
13
  catalog: CatalogStore;
12
14
  providerLoader: IProviderLoader;
@@ -14,6 +16,7 @@ export interface ConnectAppOptions {
14
16
  transitFiles: ITransitFileService;
15
17
  uploadTransitFile?: (request: Request) => Promise<TransitFileUpload>;
16
18
  publicOrigin: string;
19
+ configuredOrigin?: string;
17
20
  secretCodec: ISecretCodec;
18
21
  adminToken?: string;
19
22
  runtimeToken?: string;
@@ -27,6 +30,8 @@ export interface ConnectAppOptions {
27
30
  serveDocumentation?: boolean;
28
31
  }
29
32
  export interface ConnectApp {
33
+ saasCleanup: SaasCleanupService;
34
+ triggerMaintenance: TriggerMaintenance;
30
35
  app: Hono;
31
36
  runtimeAuthConfigured: boolean;
32
37
  }
@@ -1,12 +1,34 @@
1
1
  import { ConnectionService } from "../connection-service.js";
2
+ import { ActionPolicyService as ExecutionPolicyService } from "../core/action-policy.js";
2
3
  import { MarketplaceService } from "../marketplace/marketplace-service.js";
3
4
  import { OAuthClientConfigService } from "../oauth/oauth-client-config-service.js";
4
5
  import { OAuthCredentialRefreshService } from "../oauth/oauth-credential-refresh-service.js";
5
6
  import { OAuthFlowService } from "../oauth/oauth-flow-service.js";
7
+ import { SaasCleanupService } from "../saas/saas-cleanup-service.js";
8
+ import { SaasClient } from "../saas/saas-client.js";
9
+ import { SaasExecutionService } from "../saas/saas-execution-service.js";
10
+ import { SaasOAuthService } from "../saas/saas-oauth-service.js";
11
+ import { SaasProjectService } from "../saas/saas-project-service.js";
12
+ import { TriggerMaintenance } from "../triggers/maintenance.js";
13
+ import { TriggerRunner } from "../triggers/trigger-runner.js";
6
14
  import { ActionRunner } from "./actions/action-runner.js";
7
15
  import { ConnectServer } from "./connect-server.js";
8
16
  import { RuntimeTokenService } from "./storage/runtime-token-service.js";
9
17
  export async function createConnectApp(options) {
18
+ const saasClient = new SaasClient();
19
+ const saasProject = new SaasProjectService({
20
+ catalog: options.catalog,
21
+ store: options.runtimeDatabase.saasProjectStore,
22
+ secretCodec: options.secretCodec,
23
+ configuredOrigin: options.configuredOrigin,
24
+ client: saasClient,
25
+ });
26
+ const saasOAuth = new SaasOAuthService({
27
+ projects: saasProject,
28
+ requests: options.runtimeDatabase.connectionRequestStore,
29
+ client: saasClient,
30
+ });
31
+ const saas = new SaasExecutionService({ projects: saasProject, client: saasClient });
10
32
  const marketplace = new MarketplaceService({
11
33
  catalog: options.catalog,
12
34
  store: options.runtimeDatabase.marketplaceStore,
@@ -36,11 +58,33 @@ export async function createConnectApp(options) {
36
58
  providerLoader: options.providerLoader,
37
59
  connections,
38
60
  runs: options.runtimeDatabase.runLogStore,
61
+ saas,
39
62
  transitFiles: options.transitFiles,
40
63
  logger: options.logger,
41
64
  marketplace,
42
65
  });
66
+ const triggers = new TriggerRunner({
67
+ catalog: options.catalog,
68
+ providerLoader: options.providerLoader,
69
+ connections,
70
+ store: options.runtimeDatabase.triggerStore,
71
+ });
72
+ const triggerMaintenance = new TriggerMaintenance({
73
+ store: options.runtimeDatabase.triggerStore,
74
+ runner: triggers,
75
+ tokens: options.runtimeDatabase.runtimeTokenStore,
76
+ runtimePolicy: options.runtimeDatabase.runtimePolicyStore,
77
+ deploymentPolicy: options.actionPolicy ?? new ExecutionPolicyService(),
78
+ logger: options.logger,
79
+ });
43
80
  return {
81
+ triggerMaintenance,
82
+ saasCleanup: new SaasCleanupService({
83
+ store: options.runtimeDatabase.saasProjectStore,
84
+ requests: options.runtimeDatabase.connectionRequestStore,
85
+ client: saasClient,
86
+ logger: options.logger,
87
+ }),
44
88
  app: new ConnectServer({
45
89
  catalog: options.catalog,
46
90
  publicOrigin: options.publicOrigin,
@@ -55,8 +99,11 @@ export async function createConnectApp(options) {
55
99
  requests: options.runtimeDatabase.connectionRequestStore,
56
100
  secretCodec: options.secretCodec,
57
101
  isCustomClientConfigAllowed,
102
+ saasOAuth,
58
103
  }),
59
104
  actions,
105
+ triggers,
106
+ triggerMaintenance,
60
107
  idempotency: options.runtimeDatabase.idempotencyStore,
61
108
  transitFiles: options.transitFiles,
62
109
  uploadTransitFile: options.uploadTransitFile,
@@ -73,6 +120,9 @@ export async function createConnectApp(options) {
73
120
  actionPolicy: options.actionPolicy,
74
121
  logger: options.logger,
75
122
  marketplace,
123
+ saas,
124
+ saasProject,
125
+ saasOAuth,
76
126
  compressApiResponses: options.compressApiResponses,
77
127
  serveDocumentation: options.serveDocumentation,
78
128
  }).createApp(),
@@ -4,6 +4,11 @@ import type { ActionSearchIndexProvider } from "../core/action-search.ts";
4
4
  import type { RuntimeLogger, TransitFileUpload } from "../core/types.ts";
5
5
  import type { MarketplaceService } from "../marketplace/marketplace-service.ts";
6
6
  import type { IProviderLoader } from "../providers/provider-loader.ts";
7
+ import type { SaasExecutionService } from "../saas/saas-execution-service.ts";
8
+ import type { SaasOAuthService } from "../saas/saas-oauth-service.ts";
9
+ import type { SaasProjectService } from "../saas/saas-project-service.ts";
10
+ import type { TriggerMaintenance } from "../triggers/maintenance.ts";
11
+ import type { TriggerRunner } from "../triggers/trigger-runner.ts";
7
12
  import type { LocalAuthOptions } from "./api/auth.ts";
8
13
  import type { ITransitFileService } from "./files/transit-file-store.ts";
9
14
  import type { IIdempotencyStore } from "./storage/idempotency-store.ts";
@@ -33,6 +38,8 @@ export interface IConnectServerOptions {
33
38
  oauthFlow: OAuthFlowService;
34
39
  runtimeTokens: RuntimeTokenService;
35
40
  actions: ActionRunner;
41
+ triggers?: TriggerRunner;
42
+ triggerMaintenance?: TriggerMaintenance;
36
43
  idempotency: IIdempotencyStore;
37
44
  transitFiles: ITransitFileService;
38
45
  uploadTransitFile?: (request: Request) => Promise<TransitFileUpload>;
@@ -45,6 +52,9 @@ export interface IConnectServerOptions {
45
52
  compressApiResponses?: boolean;
46
53
  serveDocumentation?: boolean;
47
54
  marketplace?: MarketplaceService;
55
+ saasProject?: SaasProjectService;
56
+ saas?: SaasExecutionService;
57
+ saasOAuth?: SaasOAuthService;
48
58
  }
49
59
  /**
50
60
  * Local single-user HTTP server for catalog browsing, credential management,
@@ -78,6 +88,8 @@ export declare class ConnectServer {
78
88
  private searchRuntimeActions;
79
89
  private serializeSearchResults;
80
90
  private getRuntimeAction;
91
+ private getRuntimeTriggerPermissions;
92
+ private executeRuntimeTrigger;
81
93
  private createRuntimeActionRun;
82
94
  private executeRuntimeAction;
83
95
  private createRuntimeProxyRequest;