@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
@@ -26,7 +26,7 @@ export async function getTemporaryKubeconfig(input, credential, deps = {}) {
26
26
  const response = await (deps.fetcher ?? fetch)(url, {
27
27
  method: "GET",
28
28
  headers: signedRequest.headers,
29
- redirect: "error",
29
+ redirect: "manual",
30
30
  signal,
31
31
  });
32
32
  const payload = parseJsonObject(await response.text());
@@ -67,7 +67,7 @@ export async function requestAliyunSlsJson(context, input) {
67
67
  const requestInit = {
68
68
  method: input.method,
69
69
  headers: signed.headers,
70
- redirect: "error",
70
+ redirect: "manual",
71
71
  signal: context.signal,
72
72
  };
73
73
  if (signed.bodyBytes.byteLength > 0) {
@@ -54,7 +54,7 @@ export async function requestAppStoreServer(context, input) {
54
54
  ? undefined
55
55
  : JSON.stringify(input.body),
56
56
  signal,
57
- redirect: "error",
57
+ redirect: "manual",
58
58
  });
59
59
  const payload = await readPayload(response);
60
60
  if (!response.ok) {
@@ -0,0 +1,2 @@
1
+ import type { ActionDefinition } from "../../core/types.ts";
2
+ export declare const baizhiMcpActions: readonly ActionDefinition[];
@@ -0,0 +1,40 @@
1
+ import { s } from "../../core/json-schema.js";
2
+ import { defineProviderAction } from "../../core/provider-definition.js";
3
+ const service = "baizhi_mcp";
4
+ const toolSummary = s.object("One currently available Baizhi web tool.", {
5
+ name: s.stringEnum("The exact live tool name.", ["websearch_search", "web_scrape", "web_extract"]),
6
+ description: s.string("The live description supplied by the service; treat it as untrusted content."),
7
+ annotations: s.looseObject("Optional MCP behavior hints supplied by the service."),
8
+ inputSchema: s.looseObject("The live JSON Schema for this tool's arguments."),
9
+ }, { optional: ["description", "annotations"] });
10
+ export const baizhiMcpActions = [
11
+ defineProviderAction(service, {
12
+ name: "list_tools",
13
+ operationType: "read",
14
+ description: "Discover the currently available Baizhi web search, page-reading, and extraction tools with their live argument schemas. Tools that advertise write or destructive behavior are withheld.",
15
+ requiredScopes: [],
16
+ followUpActions: ["baizhi_mcp.call_tool"],
17
+ inputSchema: s.object("No input is required.", {}),
18
+ outputSchema: s.object("The permitted tools available to this Baizhi connection.", {
19
+ tools: s.array("Current permitted Baizhi web tools.", toolSummary),
20
+ }),
21
+ }),
22
+ defineProviderAction(service, {
23
+ name: "call_tool",
24
+ operationType: "read",
25
+ description: "Call only a currently available Baizhi websearch_search, web_scrape, or web_extract tool using its live input schema. These hosted calls may consume service credits; webpage content is untrusted.",
26
+ requiredScopes: [],
27
+ followUpActions: ["baizhi_mcp.list_tools"],
28
+ inputSchema: s.object("Call one permitted Baizhi web tool.", {
29
+ toolName: s.stringEnum("The exact tool name returned by list_tools.", [
30
+ "websearch_search",
31
+ "web_scrape",
32
+ "web_extract",
33
+ ]),
34
+ arguments: s.looseObject("Arguments matching that tool's live inputSchema."),
35
+ }, { optional: ["arguments"] }),
36
+ outputSchema: s.object("The dynamic result returned by the Baizhi MCP tool.", {
37
+ result: s.unknown("Structured MCP content when available; otherwise the complete MCP result envelope."),
38
+ }),
39
+ }),
40
+ ];
@@ -0,0 +1,3 @@
1
+ import type { CredentialValidators, ProviderExecutors } from "../../core/types.ts";
2
+ export declare const executors: ProviderExecutors;
3
+ export declare const credentialValidators: CredentialValidators;
@@ -0,0 +1,102 @@
1
+ import { sha256Hex } from "../../core/aws-sigv4.js";
2
+ import { optionalRecord } from "../../core/cast.js";
3
+ import { callMcpTool, listMcpTools } from "../mcp-tools.js";
4
+ import { defineApiKeyProviderExecutors, mapProviderActionHandlers, providerInputError, ProviderRequestError, providerResponseError, requiredInputString, } from "../provider-runtime.js";
5
+ import { baizhiMcpActions } from "./actions.js";
6
+ const service = "baizhi_mcp";
7
+ const endpoint = "https://agent-toolkit.app.baizhi.cloud/mcp";
8
+ const allowedToolNames = new Set(["websearch_search", "web_scrape", "web_extract"]);
9
+ const handlers = mapProviderActionHandlers(service, baizhiMcpActions, (_action, actionName) => async (input, context) => {
10
+ const connection = connectionInput(context.apiKey, context.fetcher, context.signal);
11
+ if (actionName === "list_tools") {
12
+ const tools = await safeMcpRequest(context.apiKey, () => listMcpTools(connection, { includeAnnotations: true }));
13
+ return { tools: selectReadableTools(tools) };
14
+ }
15
+ const toolName = requiredInputString(input.toolName, "toolName");
16
+ if (!allowedToolNames.has(toolName)) {
17
+ throw providerInputError("Only Baizhi web search, page reading, and extraction tools are supported");
18
+ }
19
+ return {
20
+ result: await safeMcpRequest(context.apiKey, () => callMcpTool({
21
+ ...connection,
22
+ toolName,
23
+ arguments: optionalRecord(input.arguments) ?? {},
24
+ authorizeTool(tool) {
25
+ if (!tool || !isReadableTool(tool)) {
26
+ throw providerInputError(`Baizhi MCP tool ${toolName} is unavailable or not read-only`);
27
+ }
28
+ },
29
+ })),
30
+ };
31
+ });
32
+ export const executors = defineApiKeyProviderExecutors(service, handlers, {
33
+ skipDnsValidation: true,
34
+ });
35
+ export const credentialValidators = {
36
+ async apiKey(input, { fetcher, signal }) {
37
+ const key = requiredInputString(input.apiKey, "Baizhi API Key");
38
+ const tools = await safeMcpRequest(key, () => listMcpTools(connectionInput(key, fetcher, signal), { includeAnnotations: true }));
39
+ if (selectReadableTools(tools).length === 0) {
40
+ throw providerInputError("Baizhi MCP did not advertise a supported read-only web tool");
41
+ }
42
+ const hash = sha256Hex(key).slice(0, 16);
43
+ return {
44
+ profile: { accountId: `baizhi-mcp:${hash}`, displayName: `Baizhi Cloud · ${hash.slice(-6)}` },
45
+ metadata: { mcpEndpoint: endpoint },
46
+ };
47
+ },
48
+ };
49
+ function connectionInput(key, fetcher, signal) {
50
+ const apiKey = requiredInputString(key, "Baizhi API Key");
51
+ if (/^Bearer\s+/i.test(apiKey)) {
52
+ throw providerInputError("Paste the Baizhi API Key without the Bearer prefix");
53
+ }
54
+ return {
55
+ endpoint,
56
+ service: "Baizhi",
57
+ fetcher,
58
+ headers: { authorization: `Bearer ${apiKey}` },
59
+ // Cloudflare Workers rejects `redirect: "error"`; a 3xx under "manual" still fails the MCP request.
60
+ redirect: "manual",
61
+ terminateSession: true,
62
+ signal,
63
+ maxResponseBytes: 8 * 1024 * 1024,
64
+ toolListMaxBytes: 2 * 1024 * 1024,
65
+ toolListMaxPages: 20,
66
+ toolListMaxTools: 1_000,
67
+ };
68
+ }
69
+ function isReadableTool(tool) {
70
+ return (allowedToolNames.has(tool.name) &&
71
+ tool.annotations?.readOnlyHint !== false &&
72
+ tool.annotations?.destructiveHint !== true);
73
+ }
74
+ function selectReadableTools(tools) {
75
+ const selected = tools.filter((tool) => allowedToolNames.has(tool.name));
76
+ const names = new Set();
77
+ for (const tool of selected) {
78
+ if (names.has(tool.name)) {
79
+ throw providerResponseError("Baizhi MCP tools/list returned duplicate web tool names");
80
+ }
81
+ names.add(tool.name);
82
+ }
83
+ return selected.filter(isReadableTool);
84
+ }
85
+ /**
86
+ * Redact the API Key from MCP errors, which can echo upstream response bodies.
87
+ * The shared MCP mapper tags 401/403 as provider_error; clearing that code lets
88
+ * the runtime report them as authorization_failed.
89
+ */
90
+ async function safeMcpRequest(key, request) {
91
+ try {
92
+ return await request();
93
+ }
94
+ catch (error) {
95
+ if (!(error instanceof ProviderRequestError))
96
+ throw error;
97
+ const rawKey = key.trim();
98
+ const message = error.message.split(rawKey).join("[redacted]").split(encodeURIComponent(rawKey)).join("[redacted]");
99
+ const code = error.status === 401 || error.status === 403 ? undefined : error.code;
100
+ throw new ProviderRequestError(error.status, message, error.details, code);
101
+ }
102
+ }
@@ -208,7 +208,7 @@ async function requestApi(method, path, parameters, context, parameterLocation =
208
208
  async function requestApiWithToken(method, path, accessToken, parameters, context, parameterLocation) {
209
209
  const url = new URL(path, bazhuayuApiBaseUrl);
210
210
  const headers = new Headers({ accept: "application/json", authorization: `Bearer ${accessToken}` });
211
- const init = { method, redirect: "error", headers };
211
+ const init = { method, redirect: "manual", headers };
212
212
  if (parameterLocation === "query") {
213
213
  for (const [key, value] of Object.entries(parameters)) {
214
214
  if (value !== undefined)
@@ -257,7 +257,7 @@ function requestNewToken(credential, fetcher, phase, signal) {
257
257
  async function requestToken(body, fetcher, phase, signal, fallbackRefreshToken = "") {
258
258
  const envelope = await requestJson(new URL("/token", bazhuayuApiBaseUrl), {
259
259
  method: "POST",
260
- redirect: "error",
260
+ redirect: "manual",
261
261
  headers: { accept: "application/json", "content-type": "application/json" },
262
262
  body: JSON.stringify(body),
263
263
  }, fetcher, phase, signal);
@@ -100,8 +100,7 @@ export async function bilibiliApiRequest(context, options) {
100
100
  // The document's samples send Content-Type: application/json on every
101
101
  // JSON-channel request, including GETs and body-less POSTs.
102
102
  headers["content-type"] = "application/json";
103
- const response = await runProviderRequest({ signal: context.signal, label: options.label }, (signal) => context.fetcher(url.toString(), { method, headers, body, signal }));
104
- return readBilibiliApiResponse(response, options.label);
103
+ return runProviderRequest({ signal: context.signal, label: options.label }, async (signal) => readBilibiliApiResponse(await context.fetcher(url.toString(), { method, headers, body, signal }), options.label));
105
104
  }
106
105
  /**
107
106
  * POST one arcopen endpoint as multipart/form-data. Bilibili article
@@ -124,8 +123,7 @@ export async function bilibiliFormRequest(context, options) {
124
123
  appSecret: context.appSecret,
125
124
  accessToken: context.accessToken,
126
125
  });
127
- const response = await runProviderRequest({ signal: context.signal, label: options.label }, (signal) => context.fetcher(url.toString(), { method: "POST", headers, body: form, signal }));
128
- return readBilibiliApiResponse(response, options.label);
126
+ return runProviderRequest({ signal: context.signal, label: options.label }, async (signal) => readBilibiliApiResponse(await context.fetcher(url.toString(), { method: "POST", headers, body: form, signal }), options.label));
129
127
  }
130
128
  /** Read one arcopen/openupos response into its envelope data, mapping HTTP and envelope failures. */
131
129
  export async function readBilibiliApiResponse(response, label) {
@@ -88,13 +88,15 @@ export async function uploadBilibiliArticleImage(context, file, watermark) {
88
88
  async function postBilibiliUposBytes(context, path, query, body, label) {
89
89
  const url = new URL(`${bilibiliUposBaseUrl}${path}`);
90
90
  setSearchParams(url, query);
91
- const response = await runProviderRequest({ signal: context.signal, label }, (signal) => context.fetcher(url.toString(), {
92
- method: "POST",
93
- headers: { "content-type": "application/octet-stream" },
94
- body,
95
- signal,
96
- }));
97
- await readBilibiliApiResponse(response, label);
91
+ await runProviderRequest({ signal: context.signal, label }, async (signal) => {
92
+ const response = await context.fetcher(url.toString(), {
93
+ method: "POST",
94
+ headers: { "content-type": "application/octet-stream" },
95
+ body,
96
+ signal,
97
+ });
98
+ await readBilibiliApiResponse(response, label);
99
+ });
98
100
  }
99
101
  function normalizeUploadFileName(name) {
100
102
  const trimmed = name.trim();
@@ -270,7 +270,11 @@ const createBookingInputSchema = s.object("Input payload for creating a Cal.com
270
270
  guests: s.stringArray("Additional guest email addresses."),
271
271
  meetingUrl: s.string("The meeting URL to attach to the booking."),
272
272
  location: rawObject("The location payload for the booking."),
273
- metadata: rawObject("Additional metadata to attach to the booking."),
273
+ metadata: s.optional({
274
+ ...s.record("Additional booking metadata: at most 50 keys, each up to 40 characters, with string values up to 500 characters.", s.string("A metadata value, up to 500 characters.", { maxLength: 500 })),
275
+ maxProperties: 50,
276
+ propertyNames: s.string("A metadata key, up to 40 characters.", { maxLength: 40 }),
277
+ }),
274
278
  lengthInMinutes: s.positiveInteger("The requested booking duration in minutes."),
275
279
  routing: rawObject("Routing metadata for round-robin or collective bookings."),
276
280
  emailVerificationCode: s.string("The email verification code for protected bookings."),
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalBoolean, optionalInteger, optionalNumber, optionalRawString, optionalRecord, optionalString, requiredString, } from "../../core/cast.js";
2
- import { cloudflareCurrentUserDisplayName, readCloudflareCurrentUser } from "../cloudflare-current-user.js";
2
+ import { cloudflareCurrentUserDisplayName, readCloudflareCurrentUser } from "../cloudflare_dns/runtime-user.js";
3
3
  import { defineProviderExecutors, defineProviderProxy, ProviderRequestError, providerUserAgent, } from "../provider-runtime.js";
4
4
  const service = "cloudflare_browser_rendering";
5
5
  const cloudflareBrowserRenderingApiBaseUrl = "https://api.cloudflare.com/client/v4";
@@ -1,6 +1,6 @@
1
1
  import { compactObject } from "../../core/cast.js";
2
- import { cloudflareCurrentUserDisplayName } from "../cloudflare-current-user.js";
3
2
  import { defineBearerProviderExecutors } from "../provider-runtime.js";
3
+ import { cloudflareCurrentUserDisplayName } from "./runtime-user.js";
4
4
  import { cloudflareDnsActionHandlers, requestCloudflareCurrentUser, validateCloudflareDnsToken } from "./runtime.js";
5
5
  const service = "cloudflare_dns";
6
6
  export const executors = defineBearerProviderExecutors(service, cloudflareDnsActionHandlers);
@@ -1,5 +1,5 @@
1
- import { optionalRecord, optionalString } from "../core/cast.js";
2
- import { ProviderRequestError } from "./provider-runtime.js";
1
+ import { optionalRecord, optionalString } from "../../core/cast.js";
2
+ import { ProviderRequestError } from "../provider-runtime.js";
3
3
  export function readCloudflareCurrentUser(value) {
4
4
  const user = optionalRecord(value);
5
5
  if (!user) {
@@ -1,7 +1,7 @@
1
1
  import type { CredentialValidationResult } from "../../core/types.ts";
2
- import type { CloudflareCurrentUser } from "../cloudflare-current-user.ts";
3
2
  import type { ProviderActionHandlers } from "../provider-runtime.ts";
4
3
  import type { BearerProviderContext, ProviderRuntimeHandler } from "../provider-runtime.ts";
4
+ import type { CloudflareCurrentUser } from "./runtime-user.ts";
5
5
  interface CloudflareAccount {
6
6
  id: string;
7
7
  name?: string;
@@ -1,7 +1,7 @@
1
1
  import { compactObject, optionalBoolean, optionalInteger, optionalRecord, optionalString } from "../../core/cast.js";
2
2
  import { queryParams } from "../../core/request.js";
3
- import { readCloudflareCurrentUser } from "../cloudflare-current-user.js";
4
3
  import { ProviderRequestError, providerUserAgent } from "../provider-runtime.js";
4
+ import { readCloudflareCurrentUser } from "./runtime-user.js";
5
5
  const cloudflareApiBaseUrl = "https://api.cloudflare.com/client/v4";
6
6
  export const cloudflareDnsActionHandlers = {
7
7
  list_accounts(input, context) {
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalString, requiredString } from "../../core/cast.js";
2
- import { cloudflareCurrentUserDisplayName } from "../cloudflare-current-user.js";
2
+ import { cloudflareCurrentUserDisplayName } from "../cloudflare_dns/runtime-user.js";
3
3
  import { createProviderFetch, createProviderProxyUrl, defineProviderExecutors, normalizeProviderProxyHeaders, ProviderRequestError, providerUserAgent, readProviderProxyErrorMessage, readProviderProxyResponse, toProviderProxyError, } from "../provider-runtime.js";
4
4
  import { cloudflareR2ActionHandlers, cloudflareR2ApiBaseUrl, requestCloudflareR2CurrentUser, validateCloudflareR2Credential, } from "./runtime.js";
5
5
  const service = "cloudflare_r2";
@@ -1,5 +1,5 @@
1
1
  import type { CredentialValidationResult, TransitFileWriter } from "../../core/types.ts";
2
- import type { CloudflareCurrentUser } from "../cloudflare-current-user.ts";
2
+ import type { CloudflareCurrentUser } from "../cloudflare_dns/runtime-user.ts";
3
3
  import type { ProviderActionHandlers, ProviderRuntimeHandler } from "../provider-runtime.ts";
4
4
  export interface CloudflareR2Context {
5
5
  authType: "custom_credential" | "oauth2";
@@ -1,6 +1,6 @@
1
1
  import { base64Bytes, compactObject, integer, optionalInteger, optionalRecord, optionalString, requiredRawString, requiredString, } from "../../core/cast.js";
2
2
  import { assertPublicHttpUrl, queryParams, readBoundedResponseBytes } from "../../core/request.js";
3
- import { readCloudflareCurrentUser } from "../cloudflare-current-user.js";
3
+ import { readCloudflareCurrentUser } from "../cloudflare_dns/runtime-user.js";
4
4
  import { combineProviderActionHandlers, providerFetch, providerInputError, ProviderRequestError, providerUserAgent, runProviderRequest, } from "../provider-runtime.js";
5
5
  import { cloudflareR2AccountActionHandlers } from "./runtime-account.js";
6
6
  import { cloudflareR2BucketSettingsActionHandlers } from "./runtime-bucket-settings.js";
@@ -1,5 +1,5 @@
1
1
  import { compactObject, optionalString, requiredString } from "../../core/cast.js";
2
- import { cloudflareCurrentUserDisplayName } from "../cloudflare-current-user.js";
2
+ import { cloudflareCurrentUserDisplayName } from "../cloudflare_dns/runtime-user.js";
3
3
  import { defineProviderExecutors, ProviderRequestError } from "../provider-runtime.js";
4
4
  import { cloudflareWorkerActionHandlers, requestCloudflareWorkerCurrentUser, validateCloudflareWorkerCredential, } from "./runtime.js";
5
5
  const service = "cloudflare_worker";
@@ -1,5 +1,5 @@
1
1
  import type { CredentialValidationResult } from "../../core/types.ts";
2
- import type { CloudflareCurrentUser } from "../cloudflare-current-user.ts";
2
+ import type { CloudflareCurrentUser } from "../cloudflare_dns/runtime-user.ts";
3
3
  import type { ProviderActionHandlers } from "../provider-runtime.ts";
4
4
  import type { ProviderRuntimeHandler } from "../provider-runtime.ts";
5
5
  export interface CloudflareWorkerContext {
@@ -1,6 +1,6 @@
1
1
  import { compactObject, optionalBoolean, optionalInteger, optionalRecord, optionalString, requiredString, } from "../../core/cast.js";
2
2
  import { queryParams } from "../../core/request.js";
3
- import { readCloudflareCurrentUser } from "../cloudflare-current-user.js";
3
+ import { readCloudflareCurrentUser } from "../cloudflare_dns/runtime-user.js";
4
4
  import { ProviderRequestError, providerUserAgent } from "../provider-runtime.js";
5
5
  const cloudflareApiBaseUrl = "https://api.cloudflare.com/client/v4";
6
6
  const defaultModuleName = "main.js";
@@ -107,7 +107,7 @@ async function withDingTalkMcpClient(context, run) {
107
107
  transport: "streamable_http",
108
108
  fetcher: context.fetcher,
109
109
  headers,
110
- redirect: "error",
110
+ redirect: "manual",
111
111
  signal: context.signal,
112
112
  mapError: mapDingTalkMcpError,
113
113
  }, run);
@@ -1,13 +1,4 @@
1
1
  import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
- import type { ProviderActionHandlers } from "../provider-runtime.ts";
3
- interface DiscordbotContext {
4
- apiKey: string;
5
- fetcher: typeof fetch;
6
- signal?: AbortSignal;
7
- }
8
- type DiscordbotActionHandler = (input: Record<string, unknown>, context: DiscordbotContext) => Promise<unknown>;
9
- export declare const discordbotActionHandlers: ProviderActionHandlers<"discordbot", DiscordbotActionHandler>;
10
2
  export declare const executors: ProviderExecutors;
11
3
  export declare const proxy: ProviderProxyExecutor;
12
4
  export declare const credentialValidators: CredentialValidators;
13
- export {};
@@ -1,10 +1,10 @@
1
- import { Buffer } from "node:buffer";
2
1
  import { optionalBoolean, optionalInteger, optionalRecord, optionalString, requiredString } from "../../core/cast.js";
3
- import { encodePathSegment, jsonObject } from "../../core/request.js";
4
- import { defineApiKeyProviderExecutors, defineProviderProxy, providerInputError, ProviderRequestError, providerResponseError, } from "../provider-runtime.js";
2
+ import { jsonObject } from "../../core/request.js";
3
+ import { combineProviderActionHandlers, defineApiKeyProviderExecutors, defineProviderProxy, ProviderRequestError, providerResponseError, } from "../provider-runtime.js";
4
+ import { guildActionHandlers } from "./runtime-guilds.js";
5
+ import { discordProxyBaseUrl, discordbotRequest, discordbotRequestJson, discordbotRequestNoContent, requiredPath, } from "./runtime.js";
5
6
  const service = "discordbot";
6
- const discordApiBaseUrl = "https://discord.com/api";
7
- export const discordbotActionHandlers = {
7
+ const coreActionHandlers = {
8
8
  test_auth(_input, context) {
9
9
  return testAuth(context);
10
10
  },
@@ -29,18 +29,6 @@ export const discordbotActionHandlers = {
29
29
  get_user(input, context) {
30
30
  return discordbotRequestJson({ path: `/users/${requiredPath(input.user_id, "user_id")}`, context });
31
31
  },
32
- get_guild(input, context) {
33
- return discordbotRequestJson({ path: `/guilds/${requiredPath(input.guild_id, "guild_id")}`, context });
34
- },
35
- list_guild_channels(input, context) {
36
- return discordbotRequestJson({
37
- path: `/guilds/${requiredPath(input.guild_id, "guild_id")}/channels`,
38
- context,
39
- }).then((channels) => ({ channels }));
40
- },
41
- list_guild_roles(input, context) {
42
- return discordbotRequestJson({ path: `/guilds/${requiredPath(input.guild_id, "guild_id")}/roles`, context }).then((roles) => ({ roles }));
43
- },
44
32
  get_channel(input, context) {
45
33
  return discordbotRequestJson({ path: `/channels/${requiredPath(input.channel_id, "channel_id")}`, context });
46
34
  },
@@ -77,22 +65,18 @@ export const discordbotActionHandlers = {
77
65
  context,
78
66
  }).then((message) => ({ message }));
79
67
  },
80
- async delete_message(input, context) {
81
- await discordbotRequest({
68
+ delete_message(input, context) {
69
+ return discordbotRequestNoContent({
82
70
  method: "DELETE",
83
71
  path: `/channels/${requiredPath(input.channel_id, "channel_id")}/messages/${requiredPath(input.message_id, "message_id")}`,
84
72
  context,
85
73
  });
86
- return { success: true };
87
- },
88
- get_guild_widget_png(input, context) {
89
- return getGuildWidgetPng(input, context);
90
74
  },
91
75
  };
92
- export const executors = defineApiKeyProviderExecutors(service, discordbotActionHandlers);
76
+ export const executors = defineApiKeyProviderExecutors(service, combineProviderActionHandlers(service, coreActionHandlers, guildActionHandlers));
93
77
  export const proxy = defineProviderProxy({
94
78
  service,
95
- baseUrl: discordApiBaseUrl,
79
+ baseUrl: discordProxyBaseUrl,
96
80
  auth: { type: "api_key_authorization", prefix: "Bot " },
97
81
  });
98
82
  export const credentialValidators = {
@@ -125,85 +109,9 @@ async function testAuth(context) {
125
109
  error_body: await response.text().catch(() => ""),
126
110
  };
127
111
  }
128
- async function getGuildWidgetPng(input, context) {
129
- const guildId = requiredString(input.guild_id, "guild_id", providerInputError);
130
- const response = await discordbotRequest({
131
- path: `/guilds/${encodePathSegment(guildId)}/widget.png`,
132
- query: jsonObject({ style: optionalString(input.style) }),
133
- context,
134
- authenticated: false,
135
- });
136
- const buffer = Buffer.from(await response.arrayBuffer());
137
- return {
138
- filename: `discord-guild-${guildId}-widget-${optionalString(input.style) ?? "shield"}.png`,
139
- mimeType: response.headers.get("content-type") ?? "image/png",
140
- sizeBytes: buffer.byteLength,
141
- dataBase64: buffer.toString("base64"),
142
- };
143
- }
144
- async function discordbotRequestJson(input) {
145
- const response = await discordbotRequest(input);
146
- try {
147
- return (await response.json());
148
- }
149
- catch {
150
- throw new ProviderRequestError(502, "Discord returned invalid JSON");
151
- }
152
- }
153
- async function discordbotRequest(input) {
154
- const url = new URL(`${discordApiBaseUrl}${input.path}`);
155
- for (const [key, value] of Object.entries(input.query ?? {})) {
156
- if (value !== undefined) {
157
- url.searchParams.set(key, String(value));
158
- }
159
- }
160
- const headers = new Headers();
161
- if (input.authenticated !== false) {
162
- headers.set("authorization", `Bot ${input.context.apiKey}`);
163
- }
164
- if (input.body !== undefined) {
165
- headers.set("content-type", "application/json");
166
- }
167
- const response = await input.context.fetcher(url, {
168
- method: input.method,
169
- headers,
170
- body: input.body === undefined ? undefined : JSON.stringify(input.body),
171
- signal: input.context.signal,
172
- });
173
- if (!input.skipError && !response.ok) {
174
- throw await toDiscordbotError(response, input.authenticated !== false);
175
- }
176
- return response;
177
- }
178
- async function toDiscordbotError(response, authenticated) {
179
- const text = await response.text().catch(() => "");
180
- let message = text;
181
- if (text) {
182
- try {
183
- const parsed = JSON.parse(text);
184
- message =
185
- optionalString(parsed.message) ??
186
- optionalString(parsed.error_description) ??
187
- optionalString(parsed.error) ??
188
- text;
189
- }
190
- catch { }
191
- }
192
- const resolvedMessage = message || `Discord request failed with ${response.status}`;
193
- if (authenticated && (response.status === 401 || response.status === 403)) {
194
- return new ProviderRequestError(401, resolvedMessage);
195
- }
196
- if (response.status === 429) {
197
- return new ProviderRequestError(429, resolvedMessage);
198
- }
199
- return new ProviderRequestError(response.status, resolvedMessage);
200
- }
201
112
  function assertSingleCursor(input) {
202
113
  const count = [input.around, input.before, input.after].filter((value) => optionalString(value)).length;
203
114
  if (count > 1) {
204
115
  throw new ProviderRequestError(400, "list_messages accepts only one of around, before, or after");
205
116
  }
206
117
  }
207
- function requiredPath(value, field) {
208
- return encodePathSegment(requiredString(value, field, providerInputError));
209
- }
@@ -0,0 +1,3 @@
1
+ import type { ProviderActionHandlerSubset } from "../provider-runtime.ts";
2
+ import type { DiscordbotActionHandler } from "./runtime.ts";
3
+ export declare const guildActionHandlers: ProviderActionHandlerSubset<"discordbot", DiscordbotActionHandler>;