@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
@@ -1 +1,125 @@
1
+ export declare const oauthCompletionStrings: {
2
+ en: {
3
+ badge: string;
4
+ title: string;
5
+ body: string;
6
+ closeButton: string;
7
+ autoClose: string;
8
+ manualClose: string;
9
+ checkingTitle: string;
10
+ checking: string;
11
+ signIn: string;
12
+ login: string;
13
+ retry: string;
14
+ missing: string;
15
+ retrying: string;
16
+ waiting: string;
17
+ failed: string;
18
+ network: string;
19
+ notFound: string;
20
+ forbidden: string;
21
+ };
22
+ "zh-CN": {
23
+ badge: string;
24
+ title: string;
25
+ body: string;
26
+ closeButton: string;
27
+ autoClose: string;
28
+ manualClose: string;
29
+ checkingTitle: string;
30
+ checking: string;
31
+ signIn: string;
32
+ login: string;
33
+ retry: string;
34
+ missing: string;
35
+ retrying: string;
36
+ waiting: string;
37
+ failed: string;
38
+ network: string;
39
+ notFound: string;
40
+ forbidden: string;
41
+ };
42
+ "zh-TW": {
43
+ badge: string;
44
+ title: string;
45
+ body: string;
46
+ closeButton: string;
47
+ autoClose: string;
48
+ manualClose: string;
49
+ checkingTitle: string;
50
+ checking: string;
51
+ signIn: string;
52
+ login: string;
53
+ retry: string;
54
+ missing: string;
55
+ retrying: string;
56
+ waiting: string;
57
+ failed: string;
58
+ network: string;
59
+ notFound: string;
60
+ forbidden: string;
61
+ };
62
+ ja: {
63
+ badge: string;
64
+ title: string;
65
+ body: string;
66
+ closeButton: string;
67
+ autoClose: string;
68
+ manualClose: string;
69
+ checkingTitle: string;
70
+ checking: string;
71
+ signIn: string;
72
+ login: string;
73
+ retry: string;
74
+ missing: string;
75
+ retrying: string;
76
+ waiting: string;
77
+ failed: string;
78
+ network: string;
79
+ notFound: string;
80
+ forbidden: string;
81
+ };
82
+ fr: {
83
+ badge: string;
84
+ title: string;
85
+ body: string;
86
+ closeButton: string;
87
+ autoClose: string;
88
+ manualClose: string;
89
+ checkingTitle: string;
90
+ checking: string;
91
+ signIn: string;
92
+ login: string;
93
+ retry: string;
94
+ missing: string;
95
+ retrying: string;
96
+ waiting: string;
97
+ failed: string;
98
+ network: string;
99
+ notFound: string;
100
+ forbidden: string;
101
+ };
102
+ ru: {
103
+ badge: string;
104
+ title: string;
105
+ body: string;
106
+ closeButton: string;
107
+ autoClose: string;
108
+ manualClose: string;
109
+ checkingTitle: string;
110
+ checking: string;
111
+ signIn: string;
112
+ login: string;
113
+ retry: string;
114
+ missing: string;
115
+ retrying: string;
116
+ waiting: string;
117
+ failed: string;
118
+ network: string;
119
+ notFound: string;
120
+ forbidden: string;
121
+ };
122
+ };
123
+ export declare const oauthCompletionStyles = "\n:root {\n --background: hsl(0 0% 100%);\n --foreground: hsl(222.2 84% 4.9%);\n --card: hsl(0 0% 100%);\n --card-foreground: hsl(222.2 84% 4.9%);\n --muted: hsl(210 40% 96.1%);\n --muted-foreground: hsl(215.4 16.3% 46.9%);\n --border: hsl(214.3 31.8% 91.4%);\n --primary: hsl(222.2 47.4% 11.2%);\n --primary-foreground: hsl(210 40% 98%);\n --ring: hsl(222.2 84% 4.9%);\n}\n* {\n box-sizing: border-box;\n}\nbody {\n min-height: 100vh;\n margin: 0;\n display: grid;\n place-items: center;\n padding: 24px;\n background: var(--background);\n color: var(--foreground);\n font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n}\n.card {\n width: min(100%, 420px);\n padding: 24px;\n border: 1px solid var(--border);\n border-radius: 12px;\n background: var(--card);\n color: var(--card-foreground);\n box-shadow: 0 1px 2px hsl(222.2 84% 4.9% / 0.04), 0 12px 32px hsl(222.2 84% 4.9% / 0.08);\n}\n.header {\n display: flex;\n flex-direction: column;\n gap: 8px;\n}\n.badge {\n width: fit-content;\n display: inline-flex;\n align-items: center;\n border: 1px solid transparent;\n border-radius: 999px;\n padding: 2px 10px;\n background: var(--primary);\n color: var(--primary-foreground);\n font-size: 12px;\n font-weight: 600;\n line-height: 20px;\n}\nh1 {\n margin: 0;\n font-size: 20px;\n line-height: 28px;\n font-weight: 600;\n}\np {\n margin: 0;\n color: var(--muted-foreground);\n font-size: 14px;\n line-height: 22px;\n}\ncode {\n border-radius: 6px;\n background: var(--muted);\n padding: 2px 6px;\n color: var(--foreground);\n font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", monospace;\n font-size: 13px;\n}\n.actions {\n display: flex;\n align-items: center;\n justify-content: space-between;\n gap: 12px;\n flex-wrap: wrap;\n margin-top: 24px;\n}\n.button {\n appearance: none;\n border: 1px solid var(--border);\n border-radius: 8px;\n background: var(--card);\n color: var(--foreground);\n padding: 8px 14px;\n font: inherit;\n font-size: 14px;\n font-weight: 500;\n line-height: 20px;\n cursor: pointer;\n}\n.button:focus-visible {\n outline: 2px solid var(--ring);\n outline-offset: 2px;\n}\n.button:hover {\n background: var(--muted);\n}\n.close-note {\n font-size: 12px;\n line-height: 18px;\n}\n\n[hidden]{display:none!important}\n.button:disabled{opacity:.5;cursor:wait}\na.button{text-decoration:none}\n.actions{justify-content:flex-start}\n";
124
+ export declare const oauthCompletionLocaleScript = "const pick=()=>{try{const stored=localStorage.getItem(\"oomol-connect.lang\");if(Object.hasOwn(STR,stored))return stored;}catch{}const langs=navigator.languages&&navigator.languages.length?navigator.languages:[navigator.language||\"en\"];for(const raw of langs){const l=String(raw).toLowerCase();if(l.startsWith(\"zh\"))return (!l.includes(\"hans\")&&(l.includes(\"tw\")||l.includes(\"hk\")||l.includes(\"mo\")||l.includes(\"hant\")))?\"zh-TW\":\"zh-CN\";const primary=l.split(\"-\")[0];if(STR[raw])return raw;if(STR[primary])return primary;}return \"en\";};";
1
125
  export declare function renderOAuthCompletionPage(service: string): string;
@@ -3,7 +3,7 @@ const oauthCompletedType = "oauth.completed";
3
3
  // Client-side translations. English is also the server-rendered default in the
4
4
  // markup below, so the page stays meaningful without JavaScript. The copy stays
5
5
  // host-neutral because this runtime can be embedded by more than one product.
6
- const oauthCompletionStrings = {
6
+ export const oauthCompletionStrings = {
7
7
  en: {
8
8
  badge: "Connected",
9
9
  title: "Connection complete",
@@ -11,44 +11,121 @@ const oauthCompletionStrings = {
11
11
  closeButton: "Close window",
12
12
  autoClose: "Automatically closing in %N% seconds.",
13
13
  manualClose: "You can now close this window.",
14
+ checkingTitle: "Completing connection",
15
+ checking: "Checking your Console session…",
16
+ signIn: "Open Console to sign in",
17
+ login: "Sign in to Console, then check again. Use the same browser and Console address where you started authorization.",
18
+ retry: "Check again",
19
+ missing: "The authorization request is missing. Return to the initiating client.",
20
+ retrying: "The connection could not be checked yet. Retrying…",
21
+ waiting: "Waiting for authorization to be confirmed…",
22
+ failed: "Authorization could not be completed. Return to the initiating client.",
23
+ network: "Could not reach Connect. Check your connection and try again.",
24
+ notFound: "This request was not found or has expired. Return to the initiating client.",
25
+ forbidden: "Synchronization was rejected. Check that OOMOL_CONNECT_ORIGIN matches your Console address.",
14
26
  },
15
27
  "zh-CN": {
16
28
  badge: "已连接",
17
29
  title: "连接完成",
18
- body: "关闭此窗口,然后回到刚才的应用继续。",
30
+ body: "连接已就绪,可以返回刚才的应用继续使用。",
19
31
  closeButton: "关闭窗口",
20
32
  autoClose: "%N% 秒后自动关闭。",
21
33
  manualClose: "现在可以手动关闭此窗口。",
34
+ checkingTitle: "正在完成连接",
35
+ checking: "正在检查控制台登录状态…",
36
+ signIn: "打开控制台登录",
37
+ login: "请登录控制台后重新检查,使用发起授权时的浏览器和控制台地址。",
38
+ retry: "重新检查",
39
+ missing: "缺少授权请求信息,请返回发起授权的应用。",
40
+ retrying: "暂时无法确认连接,正在重试…",
41
+ waiting: "正在等待授权结果确认…",
42
+ failed: "授权未能完成,请返回发起授权的应用查看。",
43
+ network: "无法连接到 Connect,请检查网络后重试。",
44
+ notFound: "授权请求不存在或已过期,请返回发起授权的应用。",
45
+ forbidden: "同步请求被拒绝,请检查 OOMOL_CONNECT_ORIGIN 是否与控制台地址一致。",
22
46
  },
23
47
  "zh-TW": {
24
48
  badge: "已連線",
25
49
  title: "連線完成",
26
- body: "關閉此視窗,然後回到剛才的應用繼續。",
50
+ body: "連線已就緒,可以返回剛才的應用繼續使用。",
27
51
  closeButton: "關閉視窗",
28
52
  autoClose: "%N% 秒後自動關閉。",
29
53
  manualClose: "現在可以手動關閉此視窗。",
54
+ checkingTitle: "正在完成連線",
55
+ checking: "正在檢查控制台登入狀態…",
56
+ signIn: "開啟控制台登入",
57
+ login: "請登入控制台後重新檢查,使用發起授權時的瀏覽器和控制台位址。",
58
+ retry: "重新檢查",
59
+ missing: "缺少授權請求資訊,請返回發起授權的應用。",
60
+ retrying: "暫時無法確認連線,正在重試…",
61
+ waiting: "正在等待授權結果確認…",
62
+ failed: "授權未能完成,請返回發起授權的應用查看。",
63
+ network: "無法連線至 Connect,請檢查網路後重試。",
64
+ notFound: "授權請求不存在或已過期,請返回發起授權的應用。",
65
+ forbidden: "同步請求遭拒,請檢查 OOMOL_CONNECT_ORIGIN 是否與控制台位址一致。",
30
66
  },
31
67
  ja: {
32
68
  badge: "接続済み",
33
69
  title: "接続が完了しました",
34
- body: "このウィンドウを閉じて、元のアプリに戻って続行してください。",
70
+ body: "元のアプリに戻って続行できます。",
35
71
  closeButton: "ウィンドウを閉じる",
36
72
  autoClose: "%N% 秒後に自動的に閉じます。",
37
73
  manualClose: "このウィンドウを閉じても問題ありません。",
74
+ checkingTitle: "接続を完了しています",
75
+ checking: "コンソールのログイン状態を確認しています…",
76
+ signIn: "コンソールにログイン",
77
+ login: "認可を開始したブラウザーとコンソールのアドレスでログインし、再確認してください。",
78
+ retry: "再確認",
79
+ missing: "認可リクエストがありません。元のアプリに戻ってください。",
80
+ retrying: "接続を確認できません。再試行しています…",
81
+ waiting: "認可結果を確認しています…",
82
+ failed: "認可を完了できませんでした。元のアプリで確認してください。",
83
+ network: "Connect に接続できません。ネットワークを確認して再試行してください。",
84
+ notFound: "リクエストが見つからないか期限切れです。元のアプリに戻ってください。",
85
+ forbidden: "同期が拒否されました。OOMOL_CONNECT_ORIGIN とコンソールのアドレスを確認してください。",
86
+ },
87
+ fr: {
88
+ badge: "Connecté",
89
+ title: "Connexion terminée",
90
+ body: "Vous pouvez revenir à l’application de départ.",
91
+ closeButton: "Fermer la fenêtre",
92
+ autoClose: "Fermeture automatique dans %N% secondes.",
93
+ manualClose: "Vous pouvez fermer cette fenêtre.",
94
+ checkingTitle: "Finalisation de la connexion",
95
+ checking: "Vérification de la session Console…",
96
+ signIn: "Se connecter à la Console",
97
+ login: "Connectez-vous à la Console avec le navigateur et l’adresse utilisés au départ, puis réessayez.",
98
+ retry: "Vérifier à nouveau",
99
+ missing: "La demande d’autorisation est absente. Revenez à l’application de départ.",
100
+ retrying: "Vérification impossible pour le moment. Nouvelle tentative…",
101
+ waiting: "En attente de confirmation de l’autorisation…",
102
+ failed: "L’autorisation a échoué. Consultez l’application de départ.",
103
+ network: "Connect est inaccessible. Vérifiez votre connexion et réessayez.",
104
+ notFound: "Cette demande est introuvable ou expirée. Revenez à l’application de départ.",
105
+ forbidden: "Synchronisation refusée. Vérifiez que OOMOL_CONNECT_ORIGIN correspond à l’adresse de la Console.",
106
+ },
107
+ ru: {
108
+ badge: "Подключено",
109
+ title: "Подключение завершено",
110
+ body: "Можно вернуться в исходное приложение.",
111
+ closeButton: "Закрыть окно",
112
+ autoClose: "Автоматическое закрытие через %N% сек.",
113
+ manualClose: "Теперь можно закрыть это окно.",
114
+ checkingTitle: "Завершение подключения",
115
+ checking: "Проверка сеанса консоли…",
116
+ signIn: "Войти в консоль",
117
+ login: "Войдите в консоль в том же браузере и по тому же адресу, где началась авторизация, затем повторите проверку.",
118
+ retry: "Проверить снова",
119
+ missing: "Запрос авторизации отсутствует. Вернитесь в исходное приложение.",
120
+ retrying: "Пока не удалось проверить подключение. Повторяем…",
121
+ waiting: "Ожидание подтверждения авторизации…",
122
+ failed: "Не удалось завершить авторизацию. Проверьте исходное приложение.",
123
+ network: "Нет связи с Connect. Проверьте сеть и повторите попытку.",
124
+ notFound: "Запрос не найден или истёк. Вернитесь в исходное приложение.",
125
+ forbidden: "Синхронизация отклонена. Проверьте соответствие OOMOL_CONNECT_ORIGIN адресу консоли.",
38
126
  },
39
127
  };
40
- export function renderOAuthCompletionPage(service) {
41
- const payload = scriptJson({
42
- type: oauthCompletedType,
43
- service,
44
- });
45
- return `<!doctype html>
46
- <html lang="en">
47
- <head>
48
- <meta charset="utf-8">
49
- <meta name="viewport" content="width=device-width, initial-scale=1">
50
- <title>Connection complete</title>
51
- <style>
128
+ export const oauthCompletionStyles = `
52
129
  :root {
53
130
  --background: hsl(0 0% 100%);
54
131
  --foreground: hsl(222.2 84% 4.9%);
@@ -153,7 +230,25 @@ code {
153
230
  font-size: 12px;
154
231
  line-height: 18px;
155
232
  }
156
- </style>
233
+
234
+ [hidden]{display:none!important}
235
+ .button:disabled{opacity:.5;cursor:wait}
236
+ a.button{text-decoration:none}
237
+ .actions{justify-content:flex-start}
238
+ `;
239
+ export const oauthCompletionLocaleScript = `const pick=()=>{try{const stored=localStorage.getItem("oomol-connect.lang");if(Object.hasOwn(STR,stored))return stored;}catch{}const langs=navigator.languages&&navigator.languages.length?navigator.languages:[navigator.language||"en"];for(const raw of langs){const l=String(raw).toLowerCase();if(l.startsWith("zh"))return (!l.includes("hans")&&(l.includes("tw")||l.includes("hk")||l.includes("mo")||l.includes("hant")))?"zh-TW":"zh-CN";const primary=l.split("-")[0];if(STR[raw])return raw;if(STR[primary])return primary;}return "en";};`;
240
+ export function renderOAuthCompletionPage(service) {
241
+ const payload = scriptJson({
242
+ type: oauthCompletedType,
243
+ service,
244
+ });
245
+ return `<!doctype html>
246
+ <html lang="en">
247
+ <head>
248
+ <meta charset="utf-8">
249
+ <meta name="viewport" content="width=device-width, initial-scale=1">
250
+ <title>Connection complete</title>
251
+ <style>${oauthCompletionStyles}</style>
157
252
  </head>
158
253
  <body>
159
254
  <main class="card" role="status" aria-live="polite">
@@ -170,7 +265,7 @@ code {
170
265
  <script>(()=>{
171
266
  const STR=${scriptJson(oauthCompletionStrings)};
172
267
  if("BroadcastChannel" in window){const channel=new BroadcastChannel(${scriptJson(oauthCompletionChannelName)});channel.postMessage(${payload});channel.close();}
173
- const pick=()=>{const langs=navigator.languages&&navigator.languages.length?navigator.languages:[navigator.language||"en"];for(const raw of langs){const l=String(raw).toLowerCase();if(l.startsWith("zh"))return (!l.includes("hans")&&(l.includes("tw")||l.includes("hk")||l.includes("mo")||l.includes("hant")))?"zh-TW":"zh-CN";const primary=l.split("-")[0];if(STR[raw])return raw;if(STR[primary])return primary;}return "en";};
268
+ ${oauthCompletionLocaleScript}
174
269
  const t=STR[pick()]||STR.en;
175
270
  document.documentElement.lang=pick();
176
271
  for(const el of document.querySelectorAll("[data-t]")){const key=el.getAttribute("data-t");if(t[key]!=null)el.textContent=t[key];}
@@ -1,5 +1,6 @@
1
1
  import { z } from "zod";
2
2
  import { jsonSchema } from "../../core/json-schema.js";
3
+ import { triggerOperationSchema } from "../../triggers/request.js";
3
4
  import { actionInputMaxDepth, idempotencyKeyMaxBytes, idempotencyRetentionHours, } from "../actions/action-idempotency.js";
4
5
  import { oauthConnectionInput, apiKeyConnectionInput, customConnectionInput } from "./connection-input.js";
5
6
  import { policyRequestMaxBytes, policyRuleListMaxItems, policyRuleMaxBytes } from "./policy-input.js";
@@ -18,7 +19,10 @@ const errorResponseSchema = jsonSchema.object({
18
19
  description: "Standard error response.",
19
20
  });
20
21
  const actionResultMetaSchema = jsonSchema.object({
21
- executionId: jsonSchema.string({ description: "Action execution identifier." }),
22
+ executionId: jsonSchema.string({ description: "Local action execution identifier." }),
23
+ remoteExecutionId: jsonSchema.string({
24
+ description: "SaaS execution identifier when available; distinct from the local executionId.",
25
+ }),
22
26
  actionId: jsonSchema.string({ description: "Executed action identifier." }),
23
27
  auditPersisted: jsonSchema.boolean({ description: "Whether the run audit record was stored." }),
24
28
  }, {
@@ -27,6 +31,9 @@ const actionResultMetaSchema = jsonSchema.object({
27
31
  });
28
32
  const actionFailureMetaSchema = jsonSchema.object({
29
33
  executionId: jsonSchema.string({ description: "Execution identifier when action execution began." }),
34
+ remoteExecutionId: jsonSchema.string({
35
+ description: "SaaS execution identifier when the remote failure supplies one.",
36
+ }),
30
37
  actionId: jsonSchema.string({ description: "Requested action identifier." }),
31
38
  auditPersisted: jsonSchema.boolean({ description: "Whether the run audit record was stored." }),
32
39
  }, {
@@ -42,6 +49,9 @@ const oauthClientConfigRequestSchema = jsonSchema.object({
42
49
  minItems: 1,
43
50
  description: "Non-empty provider-declared scope subset to request. Omit to use every provider default.",
44
51
  }),
52
+ redirectUri: jsonSchema.string({
53
+ description: "Absolute redirect URI registered with the provider instead of the runtime callback, such as a native app's custom scheme. Must not carry user info or a fragment; javascript, vbscript, data, file, blob, and about schemes are rejected. Omit or send an empty string to use the runtime callback.",
54
+ }),
45
55
  extra: {
46
56
  type: "object",
47
57
  additionalProperties: { type: "string" },
@@ -56,6 +66,7 @@ const oauthClientConfigRequestSchema = jsonSchema.object({
56
66
  required: ["clientId"],
57
67
  description: "User-provided OAuth app client configuration.",
58
68
  });
69
+ const saasExecutionDescription = "SaaS connections execute remotely after local policy and input validation, using the selected account without local credentials or fallback. SaaS execution POSTs have a 300-second budget and a 64 MiB decoded JSON envelope limit. Responses retain the local executionId and add remoteExecutionId when available. Cancellation or a failed response does not guarantee that remote side effects were undone. ";
59
70
  const actionIdempotencyDescription = `Requests with the same Idempotency-Key, action, input, effective connection, and stored runtime token identity replay the original HTTP status and body of completed successes and failures during the ${idempotencyRetentionHours}-hour replay window. ` +
60
71
  "Requests that are still in progress, or whose outcome is uncertain, are not automatically dispatched again. " +
61
72
  "Duplicate suppression does not guarantee exactly-once execution by the provider.";
@@ -67,6 +78,13 @@ const actionIdParameter = {
67
78
  };
68
79
  const namedConnectionDescription = "Named connection. Same fact as MCP connectionName; HTTP alias, connectionName, and x-oo-connector-alias are equivalent. Defaults to default.";
69
80
  const namedConnectionParameters = [
81
+ {
82
+ name: "x-oo-connector-app-id",
83
+ in: "header",
84
+ required: false,
85
+ schema: jsonSchema.string(),
86
+ description: "Stable connection ID. If an alias is also supplied it must identify the same connection. Unknown IDs never select the default account.",
87
+ },
70
88
  {
71
89
  name: "x-oo-connector-alias",
72
90
  in: "header",
@@ -103,6 +121,9 @@ const idempotencyKeyParameter = {
103
121
  const idempotencyConflictDescription = "For idempotency, idempotency_request_in_progress means the original request is still running or its outcome is uncertain, while idempotency_key_conflict means the key was reused for a different action, input, effective connection, or stored runtime token. Other runtime conflicts may return their own error code with the same status.";
104
122
  const runtimeConnectionProperties = {
105
123
  id: jsonSchema.string({ description: "Stable local connection identifier." }),
124
+ providerAccountId: jsonSchema.string({
125
+ description: "Provider account identity from the stored credential profile.",
126
+ }),
106
127
  service: jsonSchema.string({ description: "Provider service identifier." }),
107
128
  status: { type: "string", enum: ["active", "disconnected"] },
108
129
  alias: jsonSchema.string({ description: namedConnectionDescription }),
@@ -259,6 +280,61 @@ export function createOpenApiDocument(providers, options = {}) {
259
280
  "/api/files/{fileId}": createTransitFilePath(),
260
281
  "/v1/actions/{actionId}": runPath,
261
282
  "/v1/proxy/{service}": createProxyPath(),
283
+ "/v1/providers/{service}/trigger-permissions": runtimeGetOperation("Triggers", "Read provider-native Trigger permission guidance.", {
284
+ data: { type: "array", items: { type: "object", additionalProperties: true } },
285
+ parameters: [{ name: "service", in: "path", required: true, schema: jsonSchema.string() }],
286
+ errorStatuses: [401, 404],
287
+ }),
288
+ "/v1/providers/{service}/triggers/{triggerId}/execute": {
289
+ post: {
290
+ tags: ["Triggers"],
291
+ summary: "Execute a registered Provider Trigger operation.",
292
+ description: "Requires independent Trigger grants. Stateful operations require a persistent runtime token and native local connection; remote state and credentials stay server-owned.",
293
+ parameters: [
294
+ { name: "service", in: "path", required: true, schema: jsonSchema.string() },
295
+ { name: "triggerId", in: "path", required: true, schema: jsonSchema.string() },
296
+ ...namedConnectionParameters,
297
+ ],
298
+ requestBody: { required: true, content: { "application/json": { schema: triggerOperationSchema() } } },
299
+ responses: {
300
+ 200: jsonResponse(runtimeSuccessSchema({})),
301
+ 400: jsonResponse(runtimeFailureSchema()),
302
+ 401: jsonResponse(runtimeFailureSchema()),
303
+ 403: jsonResponse(runtimeFailureSchema()),
304
+ 404: jsonResponse(runtimeFailureSchema()),
305
+ 409: jsonResponse(runtimeFailureSchema()),
306
+ 413: jsonResponse(runtimeFailureSchema()),
307
+ 501: jsonResponse(runtimeFailureSchema()),
308
+ 503: jsonResponse(runtimeFailureSchema()),
309
+ },
310
+ },
311
+ },
312
+ "/api/trigger-subscriptions": getOperation("Triggers", "List owned subscriptions and cleanup status without secrets.", { type: "array", items: { type: "object", additionalProperties: true } }),
313
+ "/api/trigger-subscriptions/{id}/cancel": {
314
+ post: {
315
+ tags: ["Triggers"],
316
+ summary: "Cancel a subscription with retained original credentials.",
317
+ parameters: [{ name: "id", in: "path", required: true, schema: jsonSchema.string() }],
318
+ responses: {
319
+ 200: jsonResponse(jsonSchema.object({ ok: jsonSchema.boolean() })),
320
+ 404: jsonResponse(errorResponseSchema),
321
+ 409: jsonResponse(errorResponseSchema),
322
+ 503: jsonResponse(errorResponseSchema),
323
+ },
324
+ },
325
+ },
326
+ "/api/trigger-subscriptions/{id}/abandon": {
327
+ post: {
328
+ tags: ["Triggers"],
329
+ summary: "Explicitly abandon automatic cleanup; retain the uncleaned remote-resource record.",
330
+ parameters: [{ name: "id", in: "path", required: true, schema: jsonSchema.string() }],
331
+ responses: {
332
+ 200: jsonResponse(jsonSchema.object({ ok: jsonSchema.boolean() })),
333
+ 404: jsonResponse(errorResponseSchema),
334
+ 409: jsonResponse(errorResponseSchema),
335
+ },
336
+ },
337
+ },
262
338
  "/api/runs": createRunsPath(),
263
339
  "/api/runs/{id}": createRunDetailPath(),
264
340
  "/mcp": createMcpPath(),
@@ -284,7 +360,11 @@ export function createOpenApiDocument(providers, options = {}) {
284
360
  { name: "Access", description: "Runtime execution policy and bearer tokens for /v1 and MCP clients." },
285
361
  { name: "Files", description: "Local temporary file transit for provider actions." },
286
362
  { name: "Runs", description: "Local action execution and recent run history." },
287
- { name: "Proxy", description: "Provider API proxy requests through local credentials." },
363
+ {
364
+ name: "Triggers",
365
+ description: "Registered provider Trigger operations and owned remote subscription cleanup.",
366
+ },
367
+ { name: "Proxy", description: "Provider API proxy requests using the selected local or SaaS connection." },
288
368
  { name: "MCP", description: "Stateless MCP POST endpoint and tool metadata." },
289
369
  ],
290
370
  paths,
@@ -416,6 +496,9 @@ export function createOpenApiDocument(providers, options = {}) {
416
496
  }),
417
497
  ConnectionSummary: jsonSchema.object({
418
498
  id: jsonSchema.string({ description: "Stable local connection identifier." }),
499
+ providerAccountId: jsonSchema.string({
500
+ description: "Provider account identity from the stored credential profile.",
501
+ }),
419
502
  service: jsonSchema.string({ description: "Provider service identifier." }),
420
503
  authType: jsonSchema.string({ description: "Connection authentication type." }),
421
504
  configured: jsonSchema.boolean({ description: "Whether the provider is connected." }),
@@ -457,8 +540,11 @@ export function createOpenApiDocument(providers, options = {}) {
457
540
  }),
458
541
  clientId: jsonSchema.nullable(jsonSchema.string({ description: "Configured OAuth client id." })),
459
542
  expectedRedirectUri: jsonSchema.string({
460
- description: "Callback URL to configure in the provider OAuth app.",
543
+ description: "Callback URL to configure in the provider OAuth app: the configured override, else the runtime callback.",
461
544
  }),
545
+ redirectUri: jsonSchema.nullable(jsonSchema.string({
546
+ description: "Configured redirect URI override, or null when the runtime callback is used.",
547
+ })),
462
548
  auth: jsonSchema.unknownObject("Provider OAuth capability metadata."),
463
549
  requestedScopes: jsonSchema.nullable(jsonSchema.array(jsonSchema.string(), {
464
550
  description: "Configured scope subset, or null when provider defaults are used.",
@@ -473,6 +559,7 @@ export function createOpenApiDocument(providers, options = {}) {
473
559
  "customClientAvailable",
474
560
  "clientId",
475
561
  "expectedRedirectUri",
562
+ "redirectUri",
476
563
  "auth",
477
564
  "requestedScopes",
478
565
  "effectiveScopes",
@@ -486,6 +573,7 @@ export function createOpenApiDocument(providers, options = {}) {
486
573
  allowedActions: policyRuleArraySchema("Action allow rules applied to this stored runtime token."),
487
574
  blockedActions: policyRuleArraySchema("Action block rules applied to this stored runtime token."),
488
575
  allowedProxies: policyRuleArraySchema("Provider proxies explicitly granted to this token. An empty list grants no proxy access."),
576
+ allowedTriggers: policyRuleArraySchema("Trigger IDs explicitly granted to this token. Omit or leave empty to deny all Trigger operations."),
489
577
  allowedConnections: connectionIdArraySchema("Stable connection IDs granted to this stored runtime token. An empty list is unrestricted connection access. IDs are opaque values returned by the connection APIs. Virtual no_auth connections do not require grants."),
490
578
  createdAt: jsonSchema.string({ description: "Creation timestamp." }),
491
579
  lastUsedAt: jsonSchema.string({ description: "Last successful use timestamp." }),
@@ -497,6 +585,7 @@ export function createOpenApiDocument(providers, options = {}) {
497
585
  "blockedActions",
498
586
  "allowedProxies",
499
587
  "allowedConnections",
588
+ "allowedTriggers",
500
589
  "createdAt",
501
590
  ],
502
591
  description: "Runtime API token summary. Plaintext tokens and token hashes are not returned.",
@@ -506,6 +595,7 @@ export function createOpenApiDocument(providers, options = {}) {
506
595
  allowedActions: policyRuleArraySchema("Optional action allow rules for the new token."),
507
596
  blockedActions: policyRuleArraySchema("Optional action block rules for the new token."),
508
597
  allowedProxies: policyRuleArraySchema("Optional provider proxy grants for the new token. Omit or leave empty to deny proxy access."),
598
+ allowedTriggers: policyRuleArraySchema("Trigger IDs explicitly granted to this token. Omit or leave empty to deny all Trigger operations."),
509
599
  allowedConnections: connectionIdArraySchema("Optional stable connection IDs granted to the new token. Omit or leave empty for unrestricted connection access. A non-empty list matches exact opaque IDs returned by the connection APIs. Virtual no_auth connections do not require grants."),
510
600
  }, {
511
601
  required: ["name"],
@@ -515,10 +605,11 @@ export function createOpenApiDocument(providers, options = {}) {
515
605
  allowedActions: policyRuleArraySchema("Action allow rules for this token."),
516
606
  blockedActions: policyRuleArraySchema("Action block rules for this token."),
517
607
  allowedProxies: policyRuleArraySchema("Provider proxies explicitly granted to this token. An empty list grants no proxy access."),
608
+ allowedTriggers: policyRuleArraySchema("Trigger IDs explicitly granted to this token. Omit or leave empty to deny all Trigger operations."),
518
609
  allowedConnections: connectionIdArraySchema("Stable connection IDs granted to this stored token. An empty list is unrestricted connection access. A non-empty list matches exact opaque IDs returned by the connection APIs. Virtual no_auth connections do not require grants."),
519
610
  }, {
520
611
  required: ["allowedActions", "blockedActions", "allowedProxies", "allowedConnections"],
521
- description: "Complete replacement of one stored runtime token's action, proxy, and connection permissions.",
612
+ description: "Complete replacement of one stored runtime token's Action, Trigger, proxy, and connection permissions.",
522
613
  }),
523
614
  PolicyRules: policyRulesSchema(),
524
615
  RuntimePolicyState: jsonSchema.object({
@@ -775,7 +866,7 @@ function createRuntimePolicyPath() {
775
866
  },
776
867
  put: {
777
868
  tags: ["Access"],
778
- summary: "Replace the persisted Runtime action and proxy policy.",
869
+ summary: "Replace the persisted Runtime Action, Trigger, and proxy policy.",
779
870
  description: `Deployment policy remains read-only. Block rules take precedence and non-empty allowlists intersect. Policy request bodies must not exceed ${policyRequestMaxBytes} bytes.`,
780
871
  requestBody: {
781
872
  required: true,
@@ -799,6 +890,8 @@ function policyRulesSchema() {
799
890
  allowedActions: policyRuleArraySchema("Action allow rules."),
800
891
  blockedActions: policyRuleArraySchema("Action block rules."),
801
892
  allowedProxies: policyRuleArraySchema("Proxy service allow rules."),
893
+ allowedTriggers: policyRuleArraySchema("Trigger allow rules. Non-empty allowlists intersect across policy layers."),
894
+ blockedTriggers: policyRuleArraySchema("Trigger block rules override all grants."),
802
895
  blockedProxies: policyRuleArraySchema("Proxy service block rules."),
803
896
  }, {
804
897
  required: ["allowedActions", "blockedActions", "allowedProxies", "blockedProxies"],
@@ -939,6 +1032,7 @@ function createRunPath() {
939
1032
  tags: ["Runs"],
940
1033
  summary: "Execute a runtime action.",
941
1034
  description: "Use the action catalog to discover provider-specific input and output schemas. For a compact strongly typed OpenAPI document for one action, request /openapi.json?actionId=<actionId>. " +
1035
+ saasExecutionDescription +
942
1036
  actionIdempotencyDescription,
943
1037
  parameters: [actionIdParameter, idempotencyKeyParameter, ...namedConnectionParameters],
944
1038
  requestBody: actionRunBody(jsonSchema.unknownObject("Action input matching the catalog schema. Omitted input is treated as {}."), "Generic action run creation request."),
@@ -951,7 +1045,7 @@ function createProxyPath() {
951
1045
  post: {
952
1046
  tags: ["Proxy"],
953
1047
  summary: "Proxy one provider API request.",
954
- description: "For providers with a local proxy executor, forwards a provider-relative HTTP request and applies stored provider credentials locally.",
1048
+ description: "Executes through the selected connection. Local connections use the local provider proxy; SaaS connections use the project proxy without loading local credentials. SaaS accepts GET/POST/PUT/PATCH/DELETE, primitive query values, string non-authentication headers and JSON/text bodies only; accessGrant and unknown fields are rejected. SaaS execution has a 300-second POST budget and a 64 MiB decoded JSON envelope limit, preserves the upstream status inside data.status, and supplies distinct local executionId and remoteExecutionId in meta. Failed or cancelled calls are never automatically replayed; remote side effects may have completed.",
955
1049
  parameters: [
956
1050
  {
957
1051
  name: "service",
@@ -968,7 +1062,7 @@ function createProxyPath() {
968
1062
  schema: jsonSchema.object({
969
1063
  endpoint: jsonSchema.string({ description: "Provider-relative path beginning with /." }),
970
1064
  method: jsonSchema.string({
971
- description: "HTTP method: DELETE, GET, HEAD, PATCH, POST, or PUT.",
1065
+ description: "HTTP method: DELETE, GET, HEAD, PATCH, POST, or PUT. SaaS connections reject HEAD.",
972
1066
  }),
973
1067
  query: {
974
1068
  type: "object",
@@ -998,7 +1092,7 @@ function createProxyPath() {
998
1092
  description: "Provider response headers.",
999
1093
  },
1000
1094
  bodyEncoding: jsonSchema.string({
1001
- description: "Present as base64 when the provider response is binary.",
1095
+ description: "Present as base64 when a local provider response is binary. SaaS proxy supports JSON/text responses and omits this field.",
1002
1096
  }),
1003
1097
  data: jsonSchema.unknown("Provider response payload."),
1004
1098
  }, {
@@ -1014,6 +1108,9 @@ function createProxyPath() {
1014
1108
  429: jsonResponse(runtimeFailureSchema()),
1015
1109
  500: jsonResponse(runtimeFailureSchema()),
1016
1110
  501: jsonResponse(runtimeFailureSchema()),
1111
+ 502: jsonResponse(runtimeFailureSchema()),
1112
+ 503: jsonResponse(runtimeFailureSchema()),
1113
+ 504: jsonResponse(runtimeFailureSchema()),
1017
1114
  },
1018
1115
  },
1019
1116
  };
@@ -1082,6 +1179,9 @@ function createOAuthAuthorizationPath() {
1082
1179
  minItems: 1,
1083
1180
  description: "Optional non-empty provider-declared scope subset to request.",
1084
1181
  }),
1182
+ redirectUri: jsonSchema.string({
1183
+ description: "Optional redirect URI registered with the connection-scoped OAuth app instead of the runtime callback. Same rules as OAuthClientConfigRequest.redirectUri.",
1184
+ }),
1085
1185
  authorizationOptionIds: jsonSchema.array(jsonSchema.string(), {
1086
1186
  description: "Optional provider authorization option ids selected for this connection.",
1087
1187
  }),
@@ -1216,6 +1316,10 @@ function actionRunResponses(output) {
1216
1316
  413: jsonResponse(failure, "The provider response exceeded the runtime size limit, or the upstream answered 413."),
1217
1317
  429: jsonResponse(failure),
1218
1318
  500: jsonResponse(failure),
1319
+ 501: jsonResponse(failure),
1320
+ 502: jsonResponse(failure, "SaaS upstream, protocol or response size failure; execution may have completed."),
1321
+ 503: jsonResponse(failure, "SaaS project credentials or execution are unavailable."),
1322
+ 504: jsonResponse(failure, "SaaS execution timed out; execution may have completed."),
1219
1323
  };
1220
1324
  }
1221
1325
  function createConnectionUpsertRequestSchema() {
@@ -1240,7 +1344,7 @@ function createConcreteRunOperation(action) {
1240
1344
  return {
1241
1345
  tags: ["Runs"],
1242
1346
  summary: `Execute ${action.id}.`,
1243
- description: `${action.description} ${actionIdempotencyDescription}`,
1347
+ description: `${action.description} ${saasExecutionDescription}${actionIdempotencyDescription}`,
1244
1348
  parameters: [actionIdParameter, idempotencyKeyParameter, ...namedConnectionParameters],
1245
1349
  requestBody: actionRunBody(action.inputSchema, `Run creation request for ${action.id}. Omitted input is treated as {}.`),
1246
1350
  responses: actionRunResponses(action.outputSchema),
@@ -1339,11 +1443,11 @@ function connectionManagementPaths() {
1339
1443
  scopes: jsonSchema.optional(jsonSchema.stringArray("Provider scopes the connector requests.")),
1340
1444
  authorizationOptions: jsonSchema.optional(jsonSchema.array(authorizationOption)),
1341
1445
  })),
1342
- oauthClient: jsonSchema.optional(jsonSchema.object("OAuth client configuration state; present when the provider supports OAuth.", {
1446
+ oauthClient: jsonSchema.optional(jsonSchema.object("Default OAuth source configuration; present when the provider supports OAuth.", {
1343
1447
  configured: jsonSchema.boolean(),
1344
- customClientAvailable: jsonSchema.boolean("Whether connections may carry their own OAuth client."),
1345
- expectedRedirectUri: jsonSchema.string("Callback URL to register with the provider."),
1346
- missingFields: jsonSchema.stringArray("Required client inputs absent from the stored configuration."),
1448
+ customClientAvailable: jsonSchema.boolean("Whether connections may carry their own OAuth client; false for a SaaS default source."),
1449
+ expectedRedirectUri: jsonSchema.string("Callback URL: the SaaS provider config callback for a SaaS source; otherwise the local override or runtime callback."),
1450
+ missingFields: jsonSchema.stringArray("Required local client inputs absent from storage; empty for a SaaS source."),
1347
1451
  })),
1348
1452
  });
1349
1453
  const parameter = (name) => ({ name, in: "path", required: true, schema: { type: "string" } });
@@ -1369,8 +1473,8 @@ function connectionManagementPaths() {
1369
1473
  "/v1/connection-requests/{connectionRequestId}": runtimeGetOperation("Connections", "Get an OAuth authorization result.", {
1370
1474
  data: request,
1371
1475
  parameters: [parameter("connectionRequestId")],
1372
- errorStatuses: [401, 403, 404],
1373
- description: "Requires the initiating management principal. A consumed callback does not remove the result. Responses use Cache-Control: private, no-store.",
1476
+ errorStatuses: [401, 403, 404, 409, 429, 502, 503, 504],
1477
+ description: "Requires the initiating management principal. An explicit valid administrator Bearer token advances SaaS authorization; cookie-only and unauthenticated local GET requests only read stored results. Console uses same-origin POST /api/oauth/connection-requests/{id}/sync with X-OpenConnector-Request: sync. A consumed callback does not remove the result. Responses use Cache-Control: private, no-store.",
1374
1478
  }),
1375
1479
  };
1376
1480
  for (const reconnect of [false, true]) {
@@ -1397,6 +1501,10 @@ function connectionManagementPaths() {
1397
1501
  403: jsonResponse(runtimeFailureSchema()),
1398
1502
  404: jsonResponse(runtimeFailureSchema()),
1399
1503
  409: jsonResponse(runtimeFailureSchema()),
1504
+ 429: jsonResponse(runtimeFailureSchema()),
1505
+ 502: jsonResponse(runtimeFailureSchema()),
1506
+ 503: jsonResponse(runtimeFailureSchema()),
1507
+ 504: jsonResponse(runtimeFailureSchema()),
1400
1508
  },
1401
1509
  },
1402
1510
  };