@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
@@ -0,0 +1,24 @@
1
+ import { defineOAuthProviderExecutors, defineProviderProxy } from "../provider-runtime.js";
2
+ import { futunnActions } from "./actions.js";
3
+ import { executeFutunnAction } from "./runtime.js";
4
+ import { futunnApiBaseUrl } from "./transport.js";
5
+ const service = "futunn";
6
+ function createHandler(actionName) {
7
+ return (input, context) => executeFutunnAction({
8
+ actionName,
9
+ input,
10
+ accessToken: context.accessToken,
11
+ signal: context.signal,
12
+ }, context.fetcher);
13
+ }
14
+ const handlers = Object.fromEntries(futunnActions.map((action) => [action.name, createHandler(action.name)]));
15
+ export const executors = defineOAuthProviderExecutors(service, handlers);
16
+ export const proxy = defineProviderProxy({
17
+ service,
18
+ baseUrl: futunnApiBaseUrl,
19
+ auth: { type: "oauth_bearer" },
20
+ skipDnsValidation: true,
21
+ customizeRequest({ headers }) {
22
+ headers.set("accept", "application/json");
23
+ },
24
+ });
@@ -0,0 +1,3 @@
1
+ import type { FutunnActionInput } from "./transport.ts";
2
+ export declare function isFutunnResearchAction(name: string): boolean;
3
+ export declare function executeFutunnResearchAction(input: FutunnActionInput, fetcher: typeof fetch): Promise<unknown>;
@@ -0,0 +1,133 @@
1
+ import { optionalNumber, optionalRecord } from "../../core/cast.js";
2
+ import { ProviderRequestError, requiredInputString, requiredResponseRecord } from "../provider-runtime.js";
3
+ import { futunnResearchActions } from "./actions.research.js";
4
+ import { readFutunnData, readFutunnList, requestFutunn } from "./transport.js";
5
+ const researchNames = new Set(futunnResearchActions.map((action) => action.name));
6
+ export function isFutunnResearchAction(name) {
7
+ return researchNames.has(name);
8
+ }
9
+ export async function executeFutunnResearchAction(input, fetcher) {
10
+ const v = input.input;
11
+ const request = (path, query, body, allowNoData = false) => requestFutunn(input, fetcher, path, query, body, allowNoData);
12
+ const securityPath = (suffix) => `/api/v1.0/quote/${encodeURIComponent(requiredInputString(v.symbol, "symbol"))}/${suffix}`;
13
+ switch (input.actionName) {
14
+ case "search_news":
15
+ case "search_community": {
16
+ const news = input.actionName === "search_news";
17
+ const envelope = await request(`/api/v1.0/quote/${news ? "find-news" : "find-community"}`, {
18
+ symbol: v.keyword,
19
+ size: v.size,
20
+ [news ? "news_type" : "community_type"]: v.type,
21
+ sort_type: v.sortType,
22
+ lang: v.language,
23
+ });
24
+ return { items: readFutunnList(readFutunnData(envelope), "search results") };
25
+ }
26
+ case "get_security_info": {
27
+ const data = requiredResponseRecord(readFutunnData(await request("/api/v1.0/quote/stock-basicinfo", {}, { code_list: v.symbols })), "Futunn security info");
28
+ return { securities: readFutunnList(data.basic_list, "basic_list") };
29
+ }
30
+ case "get_market_state": {
31
+ const data = requiredResponseRecord(readFutunnData(await request("/api/v1.0/quote/market-state", {}, {
32
+ code_list: v.symbols,
33
+ is_contain_ba: v.includePreAfterMarket,
34
+ is_contain_overnight: v.includeOvernight,
35
+ is_need_crypto_multi_broker: v.includeCryptoBrokers,
36
+ })), "Futunn market state");
37
+ return { states: readFutunnList(data.market_state_list, "market_state_list") };
38
+ }
39
+ case "screen_stocks": {
40
+ const envelope = await request("/api/v1.0/quote/stock-screen", {}, {
41
+ screen_queries: v.screenQueries,
42
+ retrieve_queries: v.retrieveQueries,
43
+ sort: v.sort,
44
+ sorts: v.sorts,
45
+ next_key: v.nextKey,
46
+ limit: v.limit,
47
+ watchlist_stock_ids: v.watchlistStockIds,
48
+ holding_stock_ids: v.holdingStockIds,
49
+ user_stock_list_mode: v.userStockListMode,
50
+ });
51
+ const data = requiredResponseRecord(readFutunnData(envelope), "Futunn screening data");
52
+ return {
53
+ items: readFutunnList(data.items, "screening items"),
54
+ pagination: optionalRecord(envelope.pagination) ?? null,
55
+ };
56
+ }
57
+ case "get_financial_statements": {
58
+ const envelope = await request(securityPath("financials/statements"), {
59
+ statement_type: v.statementType,
60
+ financial_type: v.financialType,
61
+ currency_code: v.currencyCode,
62
+ next_key: v.nextKey,
63
+ limit: v.limit,
64
+ }, undefined, true);
65
+ const noData = envelope.ret_code === -10;
66
+ const data = noData ? null : requiredResponseRecord(readFutunnData(envelope), "Futunn financial statements");
67
+ return {
68
+ reports: data === null ? [] : readFutunnList(data.report_list, "report_list"),
69
+ pagination: optionalRecord(envelope.pagination) ?? null,
70
+ noData,
71
+ };
72
+ }
73
+ case "get_revenue_breakdown": {
74
+ const envelope = await request(securityPath("financials/revenue-breakdown"), { date: v.date, financial_type: v.financialType, currency_code: v.currencyCode }, undefined, true);
75
+ const noData = envelope.ret_code === -10;
76
+ return {
77
+ revenue: noData ? null : requiredResponseRecord(readFutunnData(envelope), "Futunn revenue breakdown"),
78
+ noData,
79
+ };
80
+ }
81
+ case "get_operational_efficiency": {
82
+ const envelope = await request(securityPath("company/operational-efficiency"), {
83
+ limit: v.limit,
84
+ financial_type: v.financialType,
85
+ currency_code: v.currencyCode,
86
+ next_key: v.nextKey,
87
+ }, undefined, true);
88
+ const noData = envelope.ret_code === -10;
89
+ return {
90
+ efficiency: noData ? null : requiredResponseRecord(readFutunnData(envelope), "Futunn operational efficiency"),
91
+ pagination: optionalRecord(envelope.pagination) ?? null,
92
+ noData,
93
+ };
94
+ }
95
+ case "get_valuation":
96
+ return {
97
+ valuation: requiredResponseRecord(readFutunnData(await request(securityPath("valuation/detail"), {
98
+ valuation_type: v.valuationType,
99
+ interval_type: v.intervalType,
100
+ })), "Futunn valuation"),
101
+ };
102
+ case "get_capital_flow": {
103
+ const data = requiredResponseRecord(readFutunnData(await request(securityPath("capital-flow"), { section: v.section })), "Futunn capital flow");
104
+ return {
105
+ flows: readFutunnList(data.flow_list, "flow_list"),
106
+ lastValidTime: optionalNumber(data.last_valid_time) ?? null,
107
+ };
108
+ }
109
+ case "get_capital_flow_history": {
110
+ const envelope = await request(securityPath("capital-flow/history"), {
111
+ period_type: v.periodType,
112
+ start: v.start,
113
+ end: v.end,
114
+ count: v.count,
115
+ });
116
+ const data = requiredResponseRecord(readFutunnData(envelope), "Futunn capital flow history");
117
+ return {
118
+ flows: readFutunnList(data.flow_list, "flow_list"),
119
+ pagination: optionalRecord(envelope.pagination) ?? null,
120
+ };
121
+ }
122
+ case "get_capital_distribution": {
123
+ const envelope = await request(securityPath("capital-distribution"), {}, undefined, true);
124
+ const noData = envelope.ret_code === -10;
125
+ return {
126
+ distribution: noData ? null : requiredResponseRecord(readFutunnData(envelope), "Futunn capital distribution"),
127
+ noData,
128
+ };
129
+ }
130
+ default:
131
+ throw new ProviderRequestError(400, `Unknown Futunn research action: ${input.actionName}`);
132
+ }
133
+ }
@@ -0,0 +1,3 @@
1
+ import type { FutunnActionInput } from "./transport.ts";
2
+ export declare function isFutunnTradingAction(name: string): boolean;
3
+ export declare function executeFutunnTradingAction(input: FutunnActionInput, fetcher: typeof fetch): Promise<unknown>;
@@ -0,0 +1,39 @@
1
+ import { optionalBoolean, optionalString } from "../../core/cast.js";
2
+ import { ProviderRequestError, requiredInputString, requiredResponseRecord } from "../provider-runtime.js";
3
+ import { futunnTradingActions } from "./actions.trading.js";
4
+ import { readFutunnData, readFutunnList, requestFutunn } from "./transport.js";
5
+ const tradingNames = new Set(futunnTradingActions.map((action) => action.name));
6
+ export function isFutunnTradingAction(name) {
7
+ return tradingNames.has(name);
8
+ }
9
+ const listEndpoints = {
10
+ list_open_orders: { path: "orders", field: "orders", history: false },
11
+ list_history_orders: { path: "orders_history", field: "orders", history: true },
12
+ list_today_deals: { path: "order_fills", field: "order_fills", history: false },
13
+ list_history_deals: { path: "fills_history", field: "order_fills", history: true },
14
+ };
15
+ export async function executeFutunnTradingAction(input, fetcher) {
16
+ const v = input.input;
17
+ const path = `/api/v1.0/accounts/${encodeURIComponent(requiredInputString(v.accountId, "accountId"))}`;
18
+ if (input.actionName === "get_order_details") {
19
+ const envelope = await requestFutunn(input, fetcher, `${path}/orders/detail`, {}, { exchange: v.exchange, order_ids: v.orderIds });
20
+ return { orders: readFutunnList(readFutunnData(envelope), "order details") };
21
+ }
22
+ const endpoint = listEndpoints[input.actionName];
23
+ if (!endpoint)
24
+ throw new ProviderRequestError(400, `Unknown Futunn trading action: ${input.actionName}`);
25
+ const envelope = await requestFutunn(input, fetcher, `${path}/${endpoint.path}`, {
26
+ trd_market: v.market,
27
+ page_flag: v.pageFlag ?? "",
28
+ page_size: v.pageSize,
29
+ code: endpoint.history ? v.code : undefined,
30
+ start: endpoint.history ? v.start : undefined,
31
+ end: endpoint.history ? v.end : undefined,
32
+ });
33
+ const data = requiredResponseRecord(readFutunnData(envelope), "Futunn account records");
34
+ return {
35
+ [endpoint.field === "orders" ? "orders" : "deals"]: readFutunnList(data[endpoint.field], endpoint.field),
36
+ pageFlag: optionalString(data.page_flag) ?? null,
37
+ completed: optionalBoolean(data.completed) ?? null,
38
+ };
39
+ }
@@ -0,0 +1,2 @@
1
+ import type { FutunnActionInput } from "./transport.ts";
2
+ export declare function executeFutunnAction(input: FutunnActionInput, fetcher: typeof fetch): Promise<unknown>;
@@ -0,0 +1,50 @@
1
+ import { optionalNumber } from "../../core/cast.js";
2
+ import { requiredInputString, requiredResponseRecord } from "../provider-runtime.js";
3
+ import { executeFutunnResearchAction, isFutunnResearchAction } from "./runtime-research.js";
4
+ import { executeFutunnTradingAction, isFutunnTradingAction } from "./runtime-trading.js";
5
+ import { readFutunnData, readFutunnList, requestFutunn } from "./transport.js";
6
+ export async function executeFutunnAction(input, fetcher) {
7
+ const values = input.input;
8
+ const request = (path, query, body) => requestFutunn(input, fetcher, path, query, body).then(readFutunnData);
9
+ if (isFutunnResearchAction(input.actionName))
10
+ return executeFutunnResearchAction(input, fetcher);
11
+ if (isFutunnTradingAction(input.actionName))
12
+ return executeFutunnTradingAction(input, fetcher);
13
+ switch (input.actionName) {
14
+ case "get_market_snapshot": {
15
+ const data = requiredResponseRecord(await request("/api/v1.0/quote/snapshot", {}, { code_list: values.symbols }), "Futunn snapshot data");
16
+ return { snapshots: readFutunnList(data.snapshot_list, "snapshot_list") };
17
+ }
18
+ case "get_history_kline": {
19
+ const data = requiredResponseRecord(await request(`/api/v1.0/quote/${encodeURIComponent(requiredInputString(values.symbol, "symbol"))}/history-kline`, {
20
+ start: values.start,
21
+ end: values.end,
22
+ ktype: values.ktype,
23
+ autype: values.autype,
24
+ num: values.num,
25
+ extended_time: values.extendedTime,
26
+ }), "Futunn history data");
27
+ return {
28
+ bars: readFutunnList(data.kline_list, "kline_list"),
29
+ nextTime: optionalNumber(data.next_time) ?? null,
30
+ volumePrecision: optionalNumber(data.volume_precision) ?? null,
31
+ };
32
+ }
33
+ case "list_trading_days": {
34
+ const data = requiredResponseRecord(await request("/api/v1.0/quote/trading-days", values), "Futunn calendar data");
35
+ return { tradingDays: readFutunnList(data.trading_days, "trading_days") };
36
+ }
37
+ case "list_accounts": {
38
+ const data = requiredResponseRecord(await request("/api/v1.0/accounts/authorized_trd_accs"), "Futunn account data");
39
+ return { accounts: readFutunnList(data.accounts, "accounts") };
40
+ }
41
+ case "get_account_funds":
42
+ return {
43
+ funds: requiredResponseRecord(await request(`/api/v1.0/accounts/${encodeURIComponent(requiredInputString(values.accountId, "accountId"))}/funds`, { currency: values.currency }), "Futunn funds"),
44
+ };
45
+ case "list_positions":
46
+ return {
47
+ positions: readFutunnList(await request(`/api/v1.0/accounts/${encodeURIComponent(requiredInputString(values.accountId, "accountId"))}/positions`, { code: values.code, pl_ratio_min: values.plRatioMin, pl_ratio_max: values.plRatioMax }), "positions"),
48
+ };
49
+ }
50
+ }
@@ -0,0 +1,11 @@
1
+ export interface FutunnActionInput {
2
+ actionName: string;
3
+ input: Record<string, unknown>;
4
+ accessToken: string;
5
+ signal?: AbortSignal;
6
+ }
7
+ export declare const futunnApiBaseUrl = "https://webapi.futunn.com";
8
+ export declare function readFutunnResponse(response: Response, allowNoData?: boolean): Promise<Record<string, unknown>>;
9
+ export declare function requestFutunn(input: FutunnActionInput, fetcher: typeof fetch, path: string, query?: Record<string, unknown>, body?: unknown, allowNoData?: boolean): Promise<Record<string, unknown>>;
10
+ export declare function readFutunnList(value: unknown, label: string): unknown[];
11
+ export declare function readFutunnData(envelope: Record<string, unknown>): unknown;
@@ -0,0 +1,76 @@
1
+ import { optionalRecord, optionalString } from "../../core/cast.js";
2
+ import { ProviderRequestError, providerUserAgent, requiredResponseRecord, runProviderRequest, } from "../provider-runtime.js";
3
+ export const futunnApiBaseUrl = "https://webapi.futunn.com";
4
+ export async function readFutunnResponse(response, allowNoData = false) {
5
+ let payload;
6
+ try {
7
+ payload = JSON.parse(await response.text(), (key, value, context) => {
8
+ // Preserve the source decimal text of uint64 trading account IDs during JSON parsing.
9
+ if (key !== "account_id" || typeof value !== "number")
10
+ return value;
11
+ if (!Number.isInteger(value))
12
+ throw new Error("Invalid Futunn account ID");
13
+ if (Number.isSafeInteger(value))
14
+ return String(value);
15
+ if (!context?.source)
16
+ throw new Error("Futunn account ID source is unavailable");
17
+ return BigInt(context.source).toString();
18
+ });
19
+ }
20
+ catch {
21
+ throw new ProviderRequestError(response.ok ? 502 : response.status, "Futunn returned invalid JSON");
22
+ }
23
+ const envelope = requiredResponseRecord(payload, "Futunn response");
24
+ if (response.ok && allowNoData && envelope.ret_code === -10)
25
+ return envelope;
26
+ const error = optionalRecord(envelope.error);
27
+ if (!response.ok ||
28
+ envelope.s === "error" ||
29
+ (envelope.ret_code !== undefined && envelope.ret_code !== 0) ||
30
+ envelope.error) {
31
+ const message = optionalString(envelope.errmsg) ??
32
+ optionalString(envelope.ret_msg) ??
33
+ optionalString(envelope.error_description) ??
34
+ optionalString(error?.message) ??
35
+ optionalString(envelope.error) ??
36
+ "request failed";
37
+ const code = envelope.errcode ?? envelope.ret_code ?? error?.code;
38
+ throw new ProviderRequestError(response.ok ? 502 : response.status, `Futunn${code === undefined ? "" : ` (${String(code)})`}: ${message}`);
39
+ }
40
+ return envelope;
41
+ }
42
+ export async function requestFutunn(input, fetcher, path, query = {}, body, allowNoData = false) {
43
+ const url = new URL(path, futunnApiBaseUrl);
44
+ for (const [key, value] of Object.entries(query)) {
45
+ if (value !== undefined)
46
+ url.searchParams.set(key, String(value));
47
+ }
48
+ return runProviderRequest({ label: "Futunn", signal: input.signal }, async (signal) => {
49
+ const response = await fetcher(url, {
50
+ method: body === undefined ? "GET" : "POST",
51
+ headers: {
52
+ authorization: `Bearer ${input.accessToken}`,
53
+ accept: "application/json",
54
+ "content-type": "application/json",
55
+ "user-agent": providerUserAgent,
56
+ },
57
+ body: body === undefined ? undefined : JSON.stringify(body),
58
+ signal,
59
+ redirect: "manual",
60
+ });
61
+ const envelope = await readFutunnResponse(response, allowNoData);
62
+ if (envelope.s === "ok" || envelope.ret_code === 0 || (allowNoData && envelope.ret_code === -10))
63
+ return envelope;
64
+ throw new ProviderRequestError(502, "Futunn response is missing its success envelope");
65
+ });
66
+ }
67
+ export function readFutunnList(value, label) {
68
+ if (!Array.isArray(value))
69
+ throw new ProviderRequestError(502, `Futunn ${label} must be an array`);
70
+ return value;
71
+ }
72
+ export function readFutunnData(envelope) {
73
+ if (envelope.ret_code === -10)
74
+ return null;
75
+ return envelope.s === "ok" ? envelope.d : envelope.data;
76
+ }
@@ -202,7 +202,7 @@ function buildGildataMcpInput(serverType, apiKey, fetcher, parentSignal, request
202
202
  }
203
203
  return response;
204
204
  },
205
- redirect: "error",
205
+ redirect: "manual",
206
206
  terminateSession: true,
207
207
  signal: parentSignal,
208
208
  requestTimeoutMs,
@@ -1,4 +1,7 @@
1
1
  import type { CredentialValidators, ProviderExecutors, ProviderProxyExecutor } from "../../core/types.ts";
2
+ import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
3
+ import type { PollDefinition } from "../../triggers/common/poll.ts";
2
4
  export declare const executors: ProviderExecutors;
3
5
  export declare const proxy: ProviderProxyExecutor;
4
6
  export declare const credentialValidators: CredentialValidators;
7
+ export declare const triggers: readonly (IntegrationDefinition | PollDefinition)[];
@@ -6,6 +6,8 @@ import { releaseActionHandlers } from "./runtime-release.js";
6
6
  import { repositoryActionHandlers } from "./runtime-repository.js";
7
7
  import { searchActionHandlers } from "./runtime-search.js";
8
8
  import { githubApiBaseUrl, githubApiVersion, githubDefaultAcceptHeader, githubRequestJson } from "./runtime-shared.js";
9
+ import { githubRepoEvent } from "./trigger-on-repo-event.js";
10
+ import { githubPullRequestListener } from "./trigger-watch-pull-request.js";
9
11
  const service = "github";
10
12
  export const executors = defineProviderExecutors({
11
13
  service,
@@ -57,3 +59,7 @@ async function validateGitHubToken(accessToken, fetcher) {
57
59
  },
58
60
  };
59
61
  }
62
+ export const triggers = [
63
+ githubRepoEvent,
64
+ githubPullRequestListener,
65
+ ];
@@ -0,0 +1,2 @@
1
+ import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
2
+ export declare const githubRepoEvent: IntegrationDefinition;
@@ -0,0 +1,4 @@
1
+ import type { TriggerKeySnapshot } from "../../triggers/common/types.ts";
2
+ export declare const snapshot: TriggerKeySnapshot & {
3
+ readonly type: "integration";
4
+ };
@@ -0,0 +1,94 @@
1
+ import { jsonSchema as s } from "../../core/json-schema.js";
2
+ const events = [
3
+ "*",
4
+ "branch_protection_configuration",
5
+ "branch_protection_rule",
6
+ "check_run",
7
+ "check_suite",
8
+ "code_scanning_alert",
9
+ "commit_comment",
10
+ "create",
11
+ "custom_property_values",
12
+ "delete",
13
+ "dependabot_alert",
14
+ "deploy_key",
15
+ "deployment",
16
+ "deployment_status",
17
+ "discussion",
18
+ "discussion_comment",
19
+ "fork",
20
+ "gollum",
21
+ "issue_comment",
22
+ "issue_dependencies",
23
+ "issues",
24
+ "label",
25
+ "member",
26
+ "meta",
27
+ "milestone",
28
+ "package",
29
+ "page_build",
30
+ "project",
31
+ "project_card",
32
+ "project_column",
33
+ "public",
34
+ "pull_request",
35
+ "pull_request_review",
36
+ "pull_request_review_comment",
37
+ "pull_request_review_thread",
38
+ "push",
39
+ "registry_package",
40
+ "release",
41
+ "repository",
42
+ "repository_advisory",
43
+ "repository_import",
44
+ "repository_ruleset",
45
+ "repository_vulnerability_alert",
46
+ "secret_scanning_alert",
47
+ "secret_scanning_alert_location",
48
+ "secret_scanning_scan",
49
+ "security_and_analysis",
50
+ "star",
51
+ "status",
52
+ "sub_issues",
53
+ "team_add",
54
+ "watch",
55
+ "workflow_job",
56
+ "workflow_run",
57
+ ];
58
+ export const snapshot = {
59
+ configInputs: [
60
+ {
61
+ handle: "events",
62
+ jsonSchema: s.array(s.stringEnum(events), { minItems: 1, uniqueItems: true }),
63
+ nullable: false,
64
+ },
65
+ { handle: "insecureSsl", jsonSchema: s.boolean(), nullable: false, value: false },
66
+ {
67
+ handle: "owner",
68
+ jsonSchema: s.string({ pattern: "^[a-zA-Z0-9](?:[a-zA-Z0-9]|-(?=[a-zA-Z0-9])){0,38}$" }),
69
+ nullable: false,
70
+ },
71
+ {
72
+ handle: "repo",
73
+ jsonSchema: s.string({ pattern: "^(?!\\.{1,2}$)[a-zA-Z0-9._-]{1,100}$" }),
74
+ nullable: false,
75
+ },
76
+ ],
77
+ definitionVersion: 2,
78
+ description: "Triggers when selected GitHub webhook events occur in a repository.",
79
+ displayName: "Repository Event",
80
+ endpoint: {
81
+ body: { allowArray: false, allowEmpty: false, formats: ["json"] },
82
+ methods: ["POST"],
83
+ successStatus: 202,
84
+ },
85
+ key: "github.on_repo_event",
86
+ name: "on_repo_event",
87
+ outputs: [
88
+ { handle: "body", jsonSchema: { type: "object" }, nullable: false },
89
+ { handle: "deliveryId", jsonSchema: s.string(), nullable: false },
90
+ { handle: "event", jsonSchema: s.string(), nullable: false },
91
+ ],
92
+ provider: "github",
93
+ type: "integration",
94
+ };
@@ -0,0 +1,168 @@
1
+ import { IntegrationConnectionError, PermanentIntegrationError, TransientIntegrationError, } from "../../triggers/common/integration.js";
2
+ import { verifyHexHmac } from "../../triggers/signature.js";
3
+ import { snapshot } from "./trigger-on-repo-event.definition.js";
4
+ export const githubRepoEvent = {
5
+ initialState: { checkpoint: null, subscription: {} },
6
+ snapshot,
7
+ async receive(context) {
8
+ const signature = context.header("x-hub-signature-256");
9
+ if (!signature?.startsWith("sha256=") ||
10
+ !(await verifyHexHmac(context.callbackSecret, [context.rawBody], signature.slice(7)))) {
11
+ return { body: "", contentType: "text/plain", outcome: "respond", status: 404 };
12
+ }
13
+ const event = context.header("x-github-event")?.trim();
14
+ if (!event)
15
+ return { outcome: "ignored", reason: "GitHub event header is missing." };
16
+ if (event == "ping")
17
+ return { outcome: "ignored", reason: "GitHub ping handshake." };
18
+ const config = resolveConfig(context.config);
19
+ if (!config.events.includes("*") && !config.events.includes(event)) {
20
+ return { outcome: "ignored", reason: "GitHub event is not subscribed." };
21
+ }
22
+ const deliveryId = context.header("x-github-delivery") ?? "";
23
+ return {
24
+ dedupeKey: deliveryId.length == 0 ? undefined : deliveryId,
25
+ outcome: "event",
26
+ outputs: { body: context.payload, deliveryId, event },
27
+ };
28
+ },
29
+ async reconcile(context) {
30
+ const state = requireState(context.state);
31
+ const config = resolveConfig(context.config);
32
+ let hookId = subscriptionId(state);
33
+ if (!context.active) {
34
+ if (hookId == null)
35
+ hookId = await findByUrl(context, config);
36
+ if (hookId != null) {
37
+ const result = await request(context, "hook delete", {
38
+ endpoint: `${endpoint(config)}/${hookId}`,
39
+ method: "DELETE",
40
+ });
41
+ if (result.status != 404)
42
+ success(result, "hook delete");
43
+ }
44
+ await state.saveSubscription({}, later(context.now));
45
+ return { outcome: "ready" };
46
+ }
47
+ const desired = body(context.endpointUrl, context.callbackSecret, config);
48
+ if (hookId == null) {
49
+ const result = await request(context, "hook create", {
50
+ body: desired,
51
+ endpoint: endpoint(config),
52
+ method: "POST",
53
+ });
54
+ if (result.status == 201)
55
+ hookId = id(result.data);
56
+ else if (result.status == 422) {
57
+ hookId = await findByUrl(context, config);
58
+ if (hookId == null)
59
+ throw new PermanentIntegrationError("GitHub rejected the webhook configuration.");
60
+ }
61
+ else {
62
+ success(result, "hook create");
63
+ throw new TransientIntegrationError(`GitHub hook create returned unexpected status ${result.status}.`);
64
+ }
65
+ }
66
+ await state.saveSubscription({ hookId }, context.now);
67
+ const aligned = await request(context, "hook update", {
68
+ body: desired,
69
+ endpoint: `${endpoint(config)}/${hookId}`,
70
+ method: "PATCH",
71
+ });
72
+ if (aligned.status == 404) {
73
+ await state.saveSubscription({}, context.now);
74
+ return { outcome: "pending" };
75
+ }
76
+ success(aligned, "hook update");
77
+ await state.saveSubscription({ hookId }, later(context.now));
78
+ return { outcome: "ready" };
79
+ },
80
+ };
81
+ function resolveConfig(value) {
82
+ return {
83
+ events: [...new Set(value.events)],
84
+ insecureSsl: value.insecureSsl,
85
+ owner: value.owner,
86
+ repo: value.repo,
87
+ };
88
+ }
89
+ function endpoint(config) {
90
+ return `/repos/${encodeURIComponent(config.owner)}/${encodeURIComponent(config.repo)}/hooks`;
91
+ }
92
+ function body(url, secret, config) {
93
+ return {
94
+ active: true,
95
+ config: { content_type: "json", insecure_ssl: config.insecureSsl ? "1" : "0", secret, url },
96
+ events: config.events,
97
+ name: "web",
98
+ };
99
+ }
100
+ async function findByUrl(context, config) {
101
+ for (let page = 1; page <= 10; page += 1) {
102
+ const result = await request(context, "hook list", {
103
+ endpoint: endpoint(config),
104
+ method: "GET",
105
+ query: { page, per_page: 100 },
106
+ });
107
+ if (result.status == 404)
108
+ return null;
109
+ success(result, "hook list");
110
+ const hooks = Array.isArray(result.data) ? result.data : [];
111
+ for (const hook of hooks) {
112
+ const value = record(hook);
113
+ if (record(value?.config)?.url === context.endpointUrl &&
114
+ (typeof value?.id == "number" || typeof value?.id == "string")) {
115
+ return String(value.id);
116
+ }
117
+ }
118
+ if (hooks.length < 100)
119
+ return null;
120
+ }
121
+ return null;
122
+ }
123
+ async function request(context, operation, value) {
124
+ try {
125
+ return await context.connector.execute(value, context.signal);
126
+ }
127
+ catch (cause) {
128
+ if (cause instanceof IntegrationConnectionError)
129
+ throw cause;
130
+ throw new TransientIntegrationError(`GitHub ${operation} request failed.`, { cause });
131
+ }
132
+ }
133
+ function success(result, operation) {
134
+ if (result.status >= 200 && result.status < 300)
135
+ return;
136
+ const message = record(result.data)?.message;
137
+ if (result.status == 403 && typeof message == "string" && /rate limit/i.test(message)) {
138
+ throw new TransientIntegrationError(`GitHub ${operation} was rate limited.`);
139
+ }
140
+ if ([401, 403].includes(result.status))
141
+ throw new IntegrationConnectionError(`GitHub ${operation} rejected the Connection.`);
142
+ if ([404, 422].includes(result.status))
143
+ throw new PermanentIntegrationError(`GitHub ${operation} rejected the subscription.`);
144
+ throw new TransientIntegrationError(`GitHub ${operation} failed with status ${result.status}.`);
145
+ }
146
+ function id(data) {
147
+ const value = record(data)?.id;
148
+ if (typeof value != "number" && typeof value != "string")
149
+ throw new TransientIntegrationError("GitHub hook response is missing its ID.");
150
+ return String(value);
151
+ }
152
+ function requireState(value) {
153
+ if (value == null)
154
+ throw new PermanentIntegrationError("GitHub Integration state is missing.");
155
+ return value;
156
+ }
157
+ function subscriptionId(state) {
158
+ const value = state.subscription.hookId;
159
+ return typeof value == "string" && value.length > 0 ? value : null;
160
+ }
161
+ function later(now) {
162
+ return new Date(now.getTime() + 30 * 24 * 60 * 60 * 1_000);
163
+ }
164
+ function record(value) {
165
+ return value != null && typeof value == "object" && !Array.isArray(value)
166
+ ? value
167
+ : undefined;
168
+ }
@@ -0,0 +1,2 @@
1
+ import type { IntegrationDefinition } from "../../triggers/common/integration.ts";
2
+ export declare const githubPullRequestListener: IntegrationDefinition;