@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,629 @@
1
+ import { booleanString, compactObject, objectArray, optionalBoolean, optionalNumber, optionalRawString, optionalRecord, optionalString, optionalStringArray, requiredStringArray, } from "../../core/cast.js";
2
+ import { defineProviderExecutors, defineProviderProxy, providerInputError, ProviderRequestError, requiredInputString, requireCustomCredential, } from "../provider-runtime.js";
3
+ import { createZerotierContext, parseZerotierApiVersion, requireZerotierApiVersion, validateZerotierCredential, zerotierAuthorizationHeader, zerotierList, zerotierOrgId, zerotierPathSegment, zerotierRequest, zerotierResult, zerotierStatus, zerotierV1BaseUrl, zerotierV2BaseUrl, } from "./runtime.js";
4
+ const service = "zerotier";
5
+ /** Read a required ID from the action input as one encoded path segment. */
6
+ const id = (input, field) => zerotierPathSegment(requiredInputString(input[field], field), field);
7
+ const iamResourcePath = (input) => {
8
+ const resourceType = requiredInputString(input.resourceType, "resourceType");
9
+ if (resourceType !== "org" && resourceType !== "network-group" && resourceType !== "network") {
10
+ throw providerInputError('resourceType must be "org", "network-group", or "network".');
11
+ }
12
+ return `/${resourceType}/${id(input, "resourceId")}/iam`;
13
+ };
14
+ export const zerotierActionHandlers = {
15
+ // ── Shared actions (dispatch on the connection's apiVersion) ──────────────
16
+ async list_networks(input, ctx) {
17
+ if (ctx.apiVersion === "v2") {
18
+ const payload = await zerotierRequest(ctx, {
19
+ path: "/network",
20
+ query: {
21
+ "org-id": zerotierOrgId(ctx, input),
22
+ stats: booleanString(input.stats),
23
+ "permission-check": optionalStringArray(input.permissionCheck),
24
+ },
25
+ });
26
+ return zerotierList(payload);
27
+ }
28
+ // v1 GET /network takes no filters, so dropping these would widen the result
29
+ // past the scope the caller asked for. The connection orgId is a v2-only
30
+ // default and is deliberately not checked here.
31
+ if (input.orgId !== undefined || input.stats !== undefined || input.permissionCheck !== undefined) {
32
+ throw providerInputError("orgId, stats, and permissionCheck are v2 only; v1 GET /network lists every network the token can access.");
33
+ }
34
+ return zerotierList(await zerotierRequest(ctx, { path: "/network" }));
35
+ },
36
+ async get_network(input, ctx) {
37
+ return zerotierResult(await zerotierRequest(ctx, { path: `/network/${id(input, "networkId")}` }));
38
+ },
39
+ async create_network(input, ctx) {
40
+ if (ctx.apiVersion === "v2") {
41
+ const groupId = optionalString(input.networkGroupId);
42
+ if (!groupId) {
43
+ throw providerInputError("networkGroupId is required for v2 (the network group the network is created under).");
44
+ }
45
+ const body = compactObject({
46
+ name: requiredInputString(input.name, "name"),
47
+ description: optionalRawString(input.description),
48
+ config: input.config,
49
+ });
50
+ return zerotierResult(await zerotierRequest(ctx, {
51
+ method: "POST",
52
+ path: `/network-group/${zerotierPathSegment(groupId, "networkGroupId")}/network`,
53
+ body,
54
+ }));
55
+ }
56
+ if (input.networkGroupId !== undefined) {
57
+ throw providerInputError("networkGroupId is v2 only; v1 networks have no network group.");
58
+ }
59
+ const config = { ...optionalRecord(input.config) };
60
+ if (input.name !== undefined) {
61
+ config.name = input.name;
62
+ }
63
+ return zerotierResult(await zerotierRequest(ctx, {
64
+ method: "POST",
65
+ path: "/network",
66
+ body: compactObject({ config, description: optionalRawString(input.description) }),
67
+ }));
68
+ },
69
+ async update_network(input, ctx) {
70
+ const networkId = id(input, "networkId");
71
+ if (ctx.apiVersion === "v2") {
72
+ const body = compactObject({
73
+ name: optionalRawString(input.name),
74
+ description: optionalRawString(input.description),
75
+ config: input.config,
76
+ });
77
+ return zerotierResult(await zerotierRequest(ctx, { method: "POST", path: `/network/${networkId}`, body }));
78
+ }
79
+ const config = { ...optionalRecord(input.config) };
80
+ if (input.name !== undefined) {
81
+ config.name = input.name;
82
+ }
83
+ return zerotierResult(await zerotierRequest(ctx, {
84
+ method: "POST",
85
+ path: `/network/${networkId}`,
86
+ body: compactObject({ config, description: optionalRawString(input.description) }),
87
+ }));
88
+ },
89
+ async delete_network(input, ctx) {
90
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/network/${id(input, "networkId")}` }));
91
+ },
92
+ async list_members(input, ctx) {
93
+ return zerotierList(await zerotierRequest(ctx, { path: `/network/${id(input, "networkId")}/member` }));
94
+ },
95
+ async get_member(input, ctx) {
96
+ return zerotierResult(await zerotierRequest(ctx, {
97
+ path: `/network/${id(input, "networkId")}/member/${id(input, "memberId")}`,
98
+ }));
99
+ },
100
+ async update_member(input, ctx) {
101
+ const path = `/network/${id(input, "networkId")}/member/${id(input, "memberId")}`;
102
+ if (ctx.apiVersion === "v2") {
103
+ // The v2 member update body has no authorization field; dropping it would
104
+ // report a de-authorization that never happened.
105
+ if (input.authorized !== undefined) {
106
+ throw providerInputError("authorized is not supported by the v2 member update; use authorize_member or deauthorize_member.");
107
+ }
108
+ if (input.ipAssignments !== undefined) {
109
+ throw providerInputError("ipAssignments is v1 only; use ipv4Assignments/ipv6Assignments on v2.");
110
+ }
111
+ return zerotierResult(await zerotierRequest(ctx, {
112
+ method: "POST",
113
+ path,
114
+ body: compactObject({
115
+ name: optionalRawString(input.name),
116
+ description: optionalRawString(input.description),
117
+ activeBridge: optionalBoolean(input.activeBridge),
118
+ noAutoAssignIps: optionalBoolean(input.noAutoAssignIps),
119
+ ipv4Assignments: optionalStringArray(input.ipv4Assignments),
120
+ ipv6Assignments: optionalStringArray(input.ipv6Assignments),
121
+ }),
122
+ }));
123
+ }
124
+ if (input.ipv4Assignments !== undefined || input.ipv6Assignments !== undefined) {
125
+ throw providerInputError("ipv4Assignments/ipv6Assignments are v2 only; use ipAssignments on v1.");
126
+ }
127
+ const config = compactObject({
128
+ authorized: optionalBoolean(input.authorized),
129
+ activeBridge: optionalBoolean(input.activeBridge),
130
+ noAutoAssignIps: optionalBoolean(input.noAutoAssignIps),
131
+ ipAssignments: optionalStringArray(input.ipAssignments),
132
+ });
133
+ return zerotierResult(await zerotierRequest(ctx, {
134
+ method: "POST",
135
+ path,
136
+ body: compactObject({
137
+ name: optionalRawString(input.name),
138
+ description: optionalRawString(input.description),
139
+ config,
140
+ }),
141
+ }));
142
+ },
143
+ async delete_member(input, ctx) {
144
+ const networkId = id(input, "networkId");
145
+ const memberId = requiredInputString(input.memberId, "memberId");
146
+ const memberSegment = zerotierPathSegment(memberId, "memberId");
147
+ if (ctx.apiVersion === "v2") {
148
+ return zerotierStatus(await zerotierRequest(ctx, {
149
+ method: "DELETE",
150
+ path: `/network/${networkId}/member`,
151
+ body: [{ deviceId: memberId }],
152
+ }));
153
+ }
154
+ return zerotierStatus(await zerotierRequest(ctx, {
155
+ method: "DELETE",
156
+ path: `/network/${networkId}/member/${memberSegment}`,
157
+ }));
158
+ },
159
+ async authorize_member(input, ctx) {
160
+ const path = `/network/${id(input, "networkId")}/member/${id(input, "memberId")}`;
161
+ if (ctx.apiVersion === "v2") {
162
+ return zerotierResult(await zerotierRequest(ctx, { method: "POST", path: `${path}/authorize`, body: {} }));
163
+ }
164
+ return zerotierResult(await zerotierRequest(ctx, { method: "POST", path, body: { config: { authorized: true } } }));
165
+ },
166
+ async deauthorize_member(input, ctx) {
167
+ const path = `/network/${id(input, "networkId")}/member/${id(input, "memberId")}`;
168
+ if (ctx.apiVersion === "v2") {
169
+ return zerotierResult(await zerotierRequest(ctx, { method: "POST", path: `${path}/de-authorize`, body: {} }));
170
+ }
171
+ return zerotierResult(await zerotierRequest(ctx, { method: "POST", path, body: { config: { authorized: false } } }));
172
+ },
173
+ async get_org(input, ctx) {
174
+ if (ctx.apiVersion === "v2") {
175
+ const orgId = zerotierOrgId(ctx, input);
176
+ if (!orgId) {
177
+ throw providerInputError("orgId is required for v2 (no credential orgId configured either).");
178
+ }
179
+ return zerotierResult(await zerotierRequest(ctx, { path: `/org/${zerotierPathSegment(orgId, "orgId")}` }));
180
+ }
181
+ // The connection orgId is a v2-only default, so v1 reads the current user's org unless the input names one.
182
+ const orgId = optionalString(input.orgId);
183
+ return zerotierResult(await zerotierRequest(ctx, { path: orgId ? `/org/${zerotierPathSegment(orgId, "orgId")}` : "/org" }));
184
+ },
185
+ // ── v1-only actions (Legacy Central, api.zerotier.com) ────────────────────
186
+ async get_status(input, ctx) {
187
+ requireZerotierApiVersion(ctx, "v1");
188
+ return zerotierResult(await zerotierRequest(ctx, { path: "/status" }));
189
+ },
190
+ async get_random_token(input, ctx) {
191
+ requireZerotierApiVersion(ctx, "v1");
192
+ return zerotierResult(await zerotierRequest(ctx, { path: "/randomToken" }));
193
+ },
194
+ async list_org_members(input, ctx) {
195
+ requireZerotierApiVersion(ctx, "v1");
196
+ return zerotierList(await zerotierRequest(ctx, { path: `/org/${id(input, "orgId")}/user` }));
197
+ },
198
+ async list_invitations(input, ctx) {
199
+ requireZerotierApiVersion(ctx, "v1");
200
+ return zerotierList(await zerotierRequest(ctx, { path: "/org-invitation" }));
201
+ },
202
+ async create_invitation(input, ctx) {
203
+ requireZerotierApiVersion(ctx, "v1");
204
+ return zerotierResult(await zerotierRequest(ctx, {
205
+ method: "POST",
206
+ path: "/org-invitation",
207
+ body: { email: requiredInputString(input.email, "email") },
208
+ }));
209
+ },
210
+ async get_invitation(input, ctx) {
211
+ requireZerotierApiVersion(ctx, "v1");
212
+ return zerotierResult(await zerotierRequest(ctx, { path: `/org-invitation/${id(input, "invitationId")}` }));
213
+ },
214
+ async accept_invitation(input, ctx) {
215
+ requireZerotierApiVersion(ctx, "v1");
216
+ return zerotierResult(await zerotierRequest(ctx, { method: "POST", path: `/org-invitation/${id(input, "invitationId")}`, body: {} }));
217
+ },
218
+ async decline_invitation(input, ctx) {
219
+ requireZerotierApiVersion(ctx, "v1");
220
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/org-invitation/${id(input, "invitationId")}` }));
221
+ },
222
+ async get_user(input, ctx) {
223
+ requireZerotierApiVersion(ctx, "v1");
224
+ return zerotierResult(await zerotierRequest(ctx, { path: `/user/${id(input, "userId")}` }));
225
+ },
226
+ async update_user(input, ctx) {
227
+ requireZerotierApiVersion(ctx, "v1");
228
+ return zerotierResult(await zerotierRequest(ctx, {
229
+ method: "POST",
230
+ path: `/user/${id(input, "userId")}`,
231
+ body: compactObject({
232
+ displayName: optionalRawString(input.displayName),
233
+ smsNumber: optionalRawString(input.smsNumber),
234
+ }),
235
+ }));
236
+ },
237
+ async delete_user(input, ctx) {
238
+ requireZerotierApiVersion(ctx, "v1");
239
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/user/${id(input, "userId")}` }));
240
+ },
241
+ async add_user_token(input, ctx) {
242
+ requireZerotierApiVersion(ctx, "v1");
243
+ return zerotierResult(await zerotierRequest(ctx, {
244
+ method: "POST",
245
+ path: `/user/${id(input, "userId")}/token`,
246
+ body: {
247
+ tokenName: requiredInputString(input.tokenName, "tokenName"),
248
+ token: requiredInputString(input.token, "token"),
249
+ },
250
+ }));
251
+ },
252
+ async delete_user_token(input, ctx) {
253
+ requireZerotierApiVersion(ctx, "v1");
254
+ return zerotierStatus(await zerotierRequest(ctx, {
255
+ method: "DELETE",
256
+ path: `/user/${id(input, "userId")}/token/${id(input, "tokenName")}`,
257
+ }));
258
+ },
259
+ async set_network_user_permissions(input, ctx) {
260
+ requireZerotierApiVersion(ctx, "v1");
261
+ return zerotierResult(await zerotierRequest(ctx, {
262
+ method: "POST",
263
+ path: `/network/${id(input, "networkId")}/users`,
264
+ body: {
265
+ id: requiredInputString(input.userId, "userId"),
266
+ r: input.read === true,
267
+ a: input.authorize === true,
268
+ m: input.modify === true,
269
+ d: input.delete === true,
270
+ },
271
+ }));
272
+ },
273
+ // ── v2-only actions (New Central, central.zerotier.com) ───────────────────
274
+ async list_orgs(input, ctx) {
275
+ requireZerotierApiVersion(ctx, "v2");
276
+ const payload = await zerotierRequest(ctx, {
277
+ path: "/org",
278
+ query: {
279
+ "permission-check": optionalStringArray(input.permissionCheck),
280
+ latest: optionalStringArray(input.latest),
281
+ stats: booleanString(input.stats),
282
+ },
283
+ });
284
+ return zerotierList(payload);
285
+ },
286
+ async list_network_groups(input, ctx) {
287
+ requireZerotierApiVersion(ctx, "v2");
288
+ const payload = await zerotierRequest(ctx, {
289
+ path: "/network-group",
290
+ query: {
291
+ "org-id": zerotierOrgId(ctx, input),
292
+ stats: booleanString(input.stats),
293
+ "permission-check": optionalStringArray(input.permissionCheck),
294
+ },
295
+ });
296
+ return zerotierList(payload);
297
+ },
298
+ async get_network_group(input, ctx) {
299
+ requireZerotierApiVersion(ctx, "v2");
300
+ return zerotierResult(await zerotierRequest(ctx, { path: `/network-group/${id(input, "networkGroupId")}` }));
301
+ },
302
+ async create_network_group(input, ctx) {
303
+ requireZerotierApiVersion(ctx, "v2");
304
+ return zerotierResult(await zerotierRequest(ctx, {
305
+ method: "POST",
306
+ path: `/org/${id(input, "orgId")}/network-group`,
307
+ body: compactObject({
308
+ name: requiredInputString(input.name, "name"),
309
+ description: optionalRawString(input.description),
310
+ }),
311
+ }));
312
+ },
313
+ async update_network_group(input, ctx) {
314
+ requireZerotierApiVersion(ctx, "v2");
315
+ return zerotierResult(await zerotierRequest(ctx, {
316
+ method: "POST",
317
+ path: `/network-group/${id(input, "networkGroupId")}`,
318
+ body: compactObject({
319
+ name: optionalRawString(input.name),
320
+ description: optionalRawString(input.description),
321
+ }),
322
+ }));
323
+ },
324
+ async delete_network_group(input, ctx) {
325
+ requireZerotierApiVersion(ctx, "v2");
326
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/network-group/${id(input, "networkGroupId")}` }));
327
+ },
328
+ async list_network_group_networks(input, ctx) {
329
+ requireZerotierApiVersion(ctx, "v2");
330
+ const payload = await zerotierRequest(ctx, {
331
+ path: `/network-group/${id(input, "networkGroupId")}/network`,
332
+ query: {
333
+ stats: booleanString(input.stats),
334
+ "permission-check": optionalStringArray(input.permissionCheck),
335
+ },
336
+ });
337
+ return zerotierList(payload);
338
+ },
339
+ async get_iam(input, ctx) {
340
+ requireZerotierApiVersion(ctx, "v2");
341
+ return zerotierList(await zerotierRequest(ctx, { path: iamResourcePath(input) }));
342
+ },
343
+ async add_iam(input, ctx) {
344
+ requireZerotierApiVersion(ctx, "v2");
345
+ return zerotierStatus(await zerotierRequest(ctx, {
346
+ method: "POST",
347
+ path: iamResourcePath(input),
348
+ body: [
349
+ {
350
+ principal: requiredInputString(input.principal, "principal"),
351
+ roles: requiredStringArray(input.roles, "roles", providerInputError),
352
+ },
353
+ ],
354
+ }));
355
+ },
356
+ async replace_iam(input, ctx) {
357
+ requireZerotierApiVersion(ctx, "v2");
358
+ return zerotierStatus(await zerotierRequest(ctx, {
359
+ method: "PUT",
360
+ path: iamResourcePath(input),
361
+ body: objectArray(input.assignments, "assignments", providerInputError),
362
+ }));
363
+ },
364
+ async remove_iam(input, ctx) {
365
+ requireZerotierApiVersion(ctx, "v2");
366
+ return zerotierStatus(await zerotierRequest(ctx, {
367
+ method: "DELETE",
368
+ path: iamResourcePath(input),
369
+ body: [
370
+ {
371
+ principal: requiredInputString(input.principal, "principal"),
372
+ roles: requiredStringArray(input.roles, "roles", providerInputError),
373
+ },
374
+ ],
375
+ }));
376
+ },
377
+ async get_org_iam_tree(input, ctx) {
378
+ requireZerotierApiVersion(ctx, "v2");
379
+ return zerotierResult(await zerotierRequest(ctx, { path: `/org/${id(input, "orgId")}/iam-tree` }));
380
+ },
381
+ async search_principals(input, ctx) {
382
+ requireZerotierApiVersion(ctx, "v2");
383
+ const payload = await zerotierRequest(ctx, {
384
+ path: `/org/${id(input, "orgId")}/principal`,
385
+ query: {
386
+ search: requiredInputString(input.search, "search"),
387
+ "principal-type": optionalStringArray(input.principalType),
388
+ },
389
+ });
390
+ return zerotierList(payload);
391
+ },
392
+ async invite_users(input, ctx) {
393
+ requireZerotierApiVersion(ctx, "v2");
394
+ return zerotierResult(await zerotierRequest(ctx, {
395
+ method: "POST",
396
+ path: `/org/${id(input, "orgId")}/invite-users`,
397
+ body: { emails: requiredStringArray(input.emails, "emails", providerInputError) },
398
+ }));
399
+ },
400
+ async get_org_subscription(input, ctx) {
401
+ requireZerotierApiVersion(ctx, "v2");
402
+ return zerotierResult(await zerotierRequest(ctx, { path: `/org/${id(input, "orgId")}/subscription` }));
403
+ },
404
+ async list_service_accounts(input, ctx) {
405
+ requireZerotierApiVersion(ctx, "v2");
406
+ return zerotierList(await zerotierRequest(ctx, { path: `/org/${id(input, "orgId")}/service-account` }));
407
+ },
408
+ async create_service_account(input, ctx) {
409
+ requireZerotierApiVersion(ctx, "v2");
410
+ return zerotierResult(await zerotierRequest(ctx, {
411
+ method: "POST",
412
+ path: `/org/${id(input, "orgId")}/service-account`,
413
+ body: compactObject({
414
+ id: requiredInputString(input.id, "id"),
415
+ name: requiredInputString(input.name, "name"),
416
+ description: optionalRawString(input.description),
417
+ }),
418
+ }));
419
+ },
420
+ async get_service_account(input, ctx) {
421
+ requireZerotierApiVersion(ctx, "v2");
422
+ return zerotierResult(await zerotierRequest(ctx, { path: `/service-account/${id(input, "serviceAccountId")}` }));
423
+ },
424
+ async update_service_account(input, ctx) {
425
+ requireZerotierApiVersion(ctx, "v2");
426
+ return zerotierResult(await zerotierRequest(ctx, {
427
+ method: "POST",
428
+ path: `/service-account/${id(input, "serviceAccountId")}`,
429
+ body: compactObject({
430
+ name: optionalRawString(input.name),
431
+ description: optionalRawString(input.description),
432
+ }),
433
+ }));
434
+ },
435
+ async delete_service_account(input, ctx) {
436
+ requireZerotierApiVersion(ctx, "v2");
437
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/service-account/${id(input, "serviceAccountId")}` }));
438
+ },
439
+ async create_api_key(input, ctx) {
440
+ requireZerotierApiVersion(ctx, "v2");
441
+ return zerotierResult(await zerotierRequest(ctx, {
442
+ method: "POST",
443
+ path: `/service-account/${id(input, "serviceAccountId")}/api-key`,
444
+ body: compactObject({
445
+ expires: requiredInputString(input.expires, "expires"),
446
+ description: optionalRawString(input.description),
447
+ }),
448
+ }));
449
+ },
450
+ async get_api_key(input, ctx) {
451
+ requireZerotierApiVersion(ctx, "v2");
452
+ return zerotierResult(await zerotierRequest(ctx, { path: `/api-key/${id(input, "apiKeyId")}` }));
453
+ },
454
+ async update_api_key(input, ctx) {
455
+ requireZerotierApiVersion(ctx, "v2");
456
+ return zerotierResult(await zerotierRequest(ctx, {
457
+ method: "POST",
458
+ path: `/api-key/${id(input, "apiKeyId")}`,
459
+ body: compactObject({ description: optionalRawString(input.description) }),
460
+ }));
461
+ },
462
+ async delete_api_key(input, ctx) {
463
+ requireZerotierApiVersion(ctx, "v2");
464
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/api-key/${id(input, "apiKeyId")}` }));
465
+ },
466
+ async list_webhooks(input, ctx) {
467
+ requireZerotierApiVersion(ctx, "v2");
468
+ return zerotierList(await zerotierRequest(ctx, { path: `/org/${id(input, "orgId")}/webhook` }));
469
+ },
470
+ async create_webhook(input, ctx) {
471
+ requireZerotierApiVersion(ctx, "v2");
472
+ return zerotierResult(await zerotierRequest(ctx, {
473
+ method: "POST",
474
+ path: `/org/${id(input, "orgId")}/webhook`,
475
+ body: compactObject({
476
+ url: requiredInputString(input.url, "url"),
477
+ eventList: requiredStringArray(input.eventList, "eventList", providerInputError),
478
+ description: optionalRawString(input.description),
479
+ }),
480
+ }));
481
+ },
482
+ async get_webhook(input, ctx) {
483
+ requireZerotierApiVersion(ctx, "v2");
484
+ return zerotierResult(await zerotierRequest(ctx, { path: `/webhook/${id(input, "webhookId")}` }));
485
+ },
486
+ async update_webhook(input, ctx) {
487
+ requireZerotierApiVersion(ctx, "v2");
488
+ return zerotierResult(await zerotierRequest(ctx, {
489
+ method: "POST",
490
+ path: `/webhook/${id(input, "webhookId")}`,
491
+ body: compactObject({
492
+ url: optionalString(input.url),
493
+ eventList: optionalStringArray(input.eventList),
494
+ description: optionalRawString(input.description),
495
+ }),
496
+ }));
497
+ },
498
+ async delete_webhook(input, ctx) {
499
+ requireZerotierApiVersion(ctx, "v2");
500
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/webhook/${id(input, "webhookId")}` }));
501
+ },
502
+ async rotate_webhook_secret(input, ctx) {
503
+ requireZerotierApiVersion(ctx, "v2");
504
+ return zerotierResult(await zerotierRequest(ctx, {
505
+ method: "POST",
506
+ path: `/webhook/${id(input, "webhookId")}/rotate-secret`,
507
+ body: compactObject({ overlapHours: optionalNumber(input.overlapHours) }),
508
+ }));
509
+ },
510
+ async delete_webhook_secret(input, ctx) {
511
+ requireZerotierApiVersion(ctx, "v2");
512
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/webhook-secret/${id(input, "webhookSecretId")}` }));
513
+ },
514
+ async check_permissions(input, ctx) {
515
+ requireZerotierApiVersion(ctx, "v2");
516
+ return zerotierList(await zerotierRequest(ctx, { method: "POST", path: "/user/check-permissions", body: input.checks ?? [] }));
517
+ },
518
+ async update_current_user(input, ctx) {
519
+ requireZerotierApiVersion(ctx, "v2");
520
+ return zerotierResult(await zerotierRequest(ctx, {
521
+ method: "POST",
522
+ path: "/user",
523
+ body: compactObject({
524
+ firstName: optionalRawString(input.firstName),
525
+ lastName: optionalRawString(input.lastName),
526
+ }),
527
+ }));
528
+ },
529
+ async delete_current_user(input, ctx) {
530
+ requireZerotierApiVersion(ctx, "v2");
531
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: "/user" }));
532
+ },
533
+ async add_members(input, ctx) {
534
+ requireZerotierApiVersion(ctx, "v2");
535
+ return zerotierList(await zerotierRequest(ctx, {
536
+ method: "POST",
537
+ path: `/network/${id(input, "networkId")}/member`,
538
+ body: objectArray(input.members, "members", providerInputError),
539
+ }));
540
+ },
541
+ async remove_members(input, ctx) {
542
+ requireZerotierApiVersion(ctx, "v2");
543
+ const body = requiredStringArray(input.deviceIds, "deviceIds", providerInputError).map((deviceId) => ({
544
+ deviceId,
545
+ }));
546
+ return zerotierStatus(await zerotierRequest(ctx, { method: "DELETE", path: `/network/${id(input, "networkId")}/member`, body }));
547
+ },
548
+ async authorize_members(input, ctx) {
549
+ requireZerotierApiVersion(ctx, "v2");
550
+ return zerotierStatus(await zerotierRequest(ctx, {
551
+ method: "POST",
552
+ path: `/network/${id(input, "networkId")}/member/authorize`,
553
+ body: requiredStringArray(input.deviceIds, "deviceIds", providerInputError),
554
+ }));
555
+ },
556
+ async deauthorize_members(input, ctx) {
557
+ requireZerotierApiVersion(ctx, "v2");
558
+ return zerotierStatus(await zerotierRequest(ctx, {
559
+ method: "POST",
560
+ path: `/network/${id(input, "networkId")}/member/de-authorize`,
561
+ body: requiredStringArray(input.deviceIds, "deviceIds", providerInputError),
562
+ }));
563
+ },
564
+ async reject_members(input, ctx) {
565
+ requireZerotierApiVersion(ctx, "v2");
566
+ return zerotierStatus(await zerotierRequest(ctx, {
567
+ method: "POST",
568
+ path: `/network/${id(input, "networkId")}/member/reject`,
569
+ body: requiredStringArray(input.deviceIds, "deviceIds", providerInputError),
570
+ }));
571
+ },
572
+ async reject_member(input, ctx) {
573
+ requireZerotierApiVersion(ctx, "v2");
574
+ return zerotierResult(await zerotierRequest(ctx, {
575
+ method: "POST",
576
+ path: `/network/${id(input, "networkId")}/member/${id(input, "memberId")}/reject`,
577
+ body: {},
578
+ }));
579
+ },
580
+ async get_flow_rules(input, ctx) {
581
+ requireZerotierApiVersion(ctx, "v2");
582
+ return zerotierResult(await zerotierRequest(ctx, { path: `/network/${id(input, "networkId")}/flow-rule`, beta: true }));
583
+ },
584
+ async update_flow_rules(input, ctx) {
585
+ requireZerotierApiVersion(ctx, "v2");
586
+ return zerotierResult(await zerotierRequest(ctx, {
587
+ method: "POST",
588
+ path: `/network/${id(input, "networkId")}/flow-rule`,
589
+ body: compactObject({
590
+ kind: requiredInputString(input.kind, "kind"),
591
+ config: input.config,
592
+ }),
593
+ beta: true,
594
+ }));
595
+ },
596
+ };
597
+ export const executors = defineProviderExecutors({
598
+ service,
599
+ handlers: zerotierActionHandlers,
600
+ async createContext(context, fetcher) {
601
+ const credential = await requireCustomCredential(context, service);
602
+ return createZerotierContext(credential.values, fetcher, context.signal);
603
+ },
604
+ fallbackMessage: "ZeroTier request failed",
605
+ });
606
+ export const proxy = defineProviderProxy({
607
+ service,
608
+ baseUrl: async (context) => {
609
+ const credential = await requireCustomCredential(context, service);
610
+ return parseZerotierApiVersion(credential.values.apiVersion) === "v2" ? zerotierV2BaseUrl : zerotierV1BaseUrl;
611
+ },
612
+ auth: { type: "none" },
613
+ async customizeRequest({ context, headers }) {
614
+ const credential = await requireCustomCredential(context, service);
615
+ const apiKey = optionalString(credential.values.apiKey);
616
+ if (!apiKey) {
617
+ throw new ProviderRequestError(401, "Configure zerotier apiKey first.");
618
+ }
619
+ headers.set("authorization", zerotierAuthorizationHeader({ apiVersion: parseZerotierApiVersion(credential.values.apiVersion), apiKey }));
620
+ if (!headers.has("accept")) {
621
+ headers.set("accept", "application/json");
622
+ }
623
+ },
624
+ });
625
+ export const credentialValidators = {
626
+ async customCredential(input, { fetcher, signal }) {
627
+ return validateZerotierCredential(input.values, fetcher, signal);
628
+ },
629
+ };
@@ -0,0 +1,54 @@
1
+ import type { CredentialValidationResult } from "../../core/types.ts";
2
+ type ZerotierApiVersion = "v1" | "v2";
3
+ export interface ZerotierActionContext {
4
+ apiVersion: ZerotierApiVersion;
5
+ apiKey: string;
6
+ orgId?: string;
7
+ fetcher: typeof fetch;
8
+ signal?: AbortSignal;
9
+ }
10
+ /** Legacy Central base URL; requests authenticate with `Authorization: token <key>`. */
11
+ export declare const zerotierV1BaseUrl = "https://api.zerotier.com/api/v1";
12
+ /** New Central base URL; requests authenticate with `Authorization: Bearer <key>`. */
13
+ export declare const zerotierV2BaseUrl = "https://central.zerotier.com/api/v2";
14
+ export declare function parseZerotierApiVersion(value: unknown): ZerotierApiVersion;
15
+ export declare function createZerotierContext(values: Record<string, string>, fetcher: typeof fetch, signal?: AbortSignal): ZerotierActionContext;
16
+ /**
17
+ * Encode one ID as a single path segment. encodeURIComponent leaves "." and
18
+ * ".." intact and new URL() collapses them, so memberId ".." would turn
19
+ * delete_member into DELETE /network/{id}; reject dot segments and separators.
20
+ */
21
+ export declare function zerotierPathSegment(value: string, field: string): string;
22
+ export declare function zerotierAuthorizationHeader(credential: Pick<ZerotierActionContext, "apiVersion" | "apiKey">): string;
23
+ interface ZerotierRequestOptions {
24
+ method?: string;
25
+ /** API path relative to the versioned base URL, e.g. "/network". */
26
+ path: string;
27
+ query?: Record<string, string | string[] | undefined>;
28
+ body?: unknown;
29
+ /** Hit /api/v2beta instead of /api/v2 (v2 only). */
30
+ beta?: boolean;
31
+ }
32
+ /** Run one ZeroTier Central API request and return the parsed JSON payload, or null for empty bodies. */
33
+ export declare function zerotierRequest(context: ZerotierActionContext, options: ZerotierRequestOptions): Promise<unknown>;
34
+ /** Require a specific ZeroTier API version on the connection. */
35
+ export declare function requireZerotierApiVersion(context: ZerotierActionContext, version: ZerotierApiVersion): void;
36
+ /**
37
+ * Wrap a ZeroTier array response into the action list envelope. v2 list
38
+ * endpoints answer `{ items, stats? }`; the aggregate `stats` requested with
39
+ * `stats=true` is kept next to the items.
40
+ */
41
+ export declare function zerotierList(payload: unknown): Record<string, unknown>;
42
+ /** Wrap a ZeroTier object response into the action single-resource envelope. */
43
+ export declare function zerotierResult(payload: unknown): Record<string, unknown>;
44
+ /** Wrap a mutating ZeroTier response that may have an empty body. */
45
+ export declare function zerotierStatus(payload: unknown): Record<string, unknown>;
46
+ /** Organization ID from the action input, falling back to the connection's orgId field. */
47
+ export declare function zerotierOrgId(context: ZerotierActionContext, input: Record<string, unknown>): string | undefined;
48
+ /**
49
+ * Verify a ZeroTier credential against the API generation it selects: v1 calls
50
+ * GET /status on Legacy Central, v2 calls GET /org on New Central (plus
51
+ * GET /org/{orgId} when the configured orgId is not in that list).
52
+ */
53
+ export declare function validateZerotierCredential(values: Record<string, string>, fetcher: typeof fetch, signal?: AbortSignal): Promise<CredentialValidationResult>;
54
+ export {};