@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,74 @@
1
+ import { jsonSchema as s } from "../../core/json-schema.js";
2
+ const defaultPageSize = 25;
3
+ const eventSchema = s.object({
4
+ historyId: { type: ["string", "null"] },
5
+ labelIds: s.array(s.string()),
6
+ messageId: s.string(),
7
+ messageTimestamp: s.string(),
8
+ sender: s.string(),
9
+ subject: s.string(),
10
+ threadId: s.string(),
11
+ to: s.string(),
12
+ }, {
13
+ additionalProperties: false,
14
+ required: ["messageId", "threadId", "historyId", "labelIds", "subject", "sender", "to", "messageTimestamp"],
15
+ });
16
+ export const snapshot = {
17
+ configInputs: [
18
+ {
19
+ handle: "includeDrafts",
20
+ jsonSchema: s.boolean(),
21
+ nullable: false,
22
+ value: false,
23
+ description: "Also trigger on draft messages.",
24
+ },
25
+ {
26
+ handle: "includeSpamAndTrash",
27
+ jsonSchema: s.boolean(),
28
+ nullable: false,
29
+ value: false,
30
+ description: "Also trigger on messages in SPAM and TRASH.",
31
+ },
32
+ {
33
+ handle: "labelNamesOrIds",
34
+ jsonSchema: s.array(s.string({ minLength: 1 })),
35
+ nullable: false,
36
+ description: "Only trigger on messages carrying all of these labels, referenced by name or ID.",
37
+ value: [],
38
+ },
39
+ {
40
+ handle: "maxMessagesPerPoll",
41
+ jsonSchema: s.integer({ maximum: 100, minimum: 1 }),
42
+ nullable: false,
43
+ value: defaultPageSize,
44
+ },
45
+ {
46
+ handle: "readStatus",
47
+ jsonSchema: s.stringEnum(["Read", "Unread", "All"]),
48
+ nullable: false,
49
+ value: "All",
50
+ },
51
+ {
52
+ handle: "search",
53
+ jsonSchema: s.string(),
54
+ nullable: false,
55
+ description: "Gmail search-syntax query the message must match.",
56
+ value: "",
57
+ },
58
+ {
59
+ handle: "sender",
60
+ jsonSchema: s.string(),
61
+ nullable: false,
62
+ description: "Only trigger on messages whose sender matches this address or name.",
63
+ value: "",
64
+ },
65
+ ],
66
+ definitionVersion: 2,
67
+ description: "Polls the Gmail mailbox and triggers when a new message is received.",
68
+ displayName: "New Message Received",
69
+ key: "gmail.on_message_received",
70
+ name: "on_message_received",
71
+ outputs: [{ handle: "events", jsonSchema: s.array(eventSchema), nullable: false }],
72
+ provider: "gmail",
73
+ type: "poll",
74
+ };
@@ -0,0 +1,232 @@
1
+ import { eventsPollOutputs, maximumPollEventsPerPage, PermanentPollError, PollConnectionError, TransientPollError, } from "../../triggers/common/poll.js";
2
+ import { snapshot } from "./trigger-on-message-received.definition.js";
3
+ export const gmailMessageReceived = {
4
+ buildOutputs: eventsPollOutputs,
5
+ snapshot,
6
+ async poll(context) {
7
+ const config = resolveConfig(context.config);
8
+ if (context.checkpoint === null)
9
+ return { checkpoint: { historyId: await profileHistoryId(context) }, events: [] };
10
+ const checkpoint = readCheckpoint(context.checkpoint);
11
+ const labels = await labelIds(context, config.labelNamesOrIds);
12
+ const budget = Math.min(config.maxMessagesPerPoll, maximumPollEventsPerPage);
13
+ const { candidates, lastPage } = await listMessages(context, checkpoint, labels, budget);
14
+ const offset = checkpoint.messageOffset ?? 0;
15
+ const end = Math.min(offset + budget, candidates.length);
16
+ // History pages count records, so consume all messages before advancing the page token.
17
+ const next = end < candidates.length
18
+ ? {
19
+ checkpoint: { historyId: checkpoint.historyId, pageToken: checkpoint.pageToken, messageOffset: end },
20
+ hasMore: true,
21
+ }
22
+ : nextCheckpoint(checkpoint.historyId, lastPage);
23
+ const events = [];
24
+ let filtered = 0;
25
+ for (const candidate of candidates.slice(offset, end)) {
26
+ const message = await messageMetadata(context, candidate.id);
27
+ if (message == null)
28
+ continue;
29
+ if (!(await matches(context, message, config, labels))) {
30
+ filtered += 1;
31
+ continue;
32
+ }
33
+ events.push(event(message));
34
+ }
35
+ return {
36
+ checkpoint: next.checkpoint,
37
+ events,
38
+ filtered,
39
+ ...(next.hasMore ? { hasMore: true } : {}),
40
+ };
41
+ },
42
+ };
43
+ function resolveConfig(value) {
44
+ return {
45
+ includeDrafts: value.includeDrafts,
46
+ includeSpamAndTrash: value.includeSpamAndTrash,
47
+ labelNamesOrIds: value.labelNamesOrIds,
48
+ maxMessagesPerPoll: value.maxMessagesPerPoll,
49
+ readStatus: value.readStatus,
50
+ search: value.search.trim(),
51
+ sender: value.sender.trim(),
52
+ };
53
+ }
54
+ async function profileHistoryId(context) {
55
+ const result = await get(context, "/users/me/profile");
56
+ success(result, "profile fetch");
57
+ const historyId = record(result.data)?.historyId;
58
+ if (typeof historyId != "string" || historyId.length == 0)
59
+ throw new TransientPollError("Gmail profile historyId is missing.");
60
+ return historyId;
61
+ }
62
+ function readCheckpoint(value) {
63
+ const checkpoint = record(value);
64
+ if (typeof checkpoint?.historyId != "string" || checkpoint.historyId.length == 0) {
65
+ throw new PermanentPollError("Gmail checkpoint historyId is missing; recreate the Trigger.");
66
+ }
67
+ if (checkpoint.messageOffset !== undefined &&
68
+ (!Number.isInteger(checkpoint.messageOffset) || checkpoint.messageOffset < 0)) {
69
+ throw new PermanentPollError("Gmail checkpoint messageOffset is invalid; recreate the Trigger.");
70
+ }
71
+ return {
72
+ historyId: checkpoint.historyId,
73
+ ...(typeof checkpoint.pageToken == "string" ? { pageToken: checkpoint.pageToken } : {}),
74
+ messageOffset: checkpoint.messageOffset,
75
+ };
76
+ }
77
+ async function labelIds(context, configured) {
78
+ if (configured.length == 0)
79
+ return [];
80
+ const result = await get(context, "/users/me/labels");
81
+ success(result, "labels list");
82
+ const labels = record(result.data)?.labels;
83
+ const byId = new Set();
84
+ const byName = new Map();
85
+ if (Array.isArray(labels)) {
86
+ for (const value of labels) {
87
+ const label = record(value);
88
+ if (typeof label?.id != "string" || label.id.length == 0)
89
+ continue;
90
+ byId.add(label.id);
91
+ if (typeof label.name == "string" && label.name.length > 0)
92
+ byName.set(label.name.toLowerCase(), label.id);
93
+ }
94
+ }
95
+ return [
96
+ ...new Set(configured.map((value) => {
97
+ const id = byId.has(value) ? value : byName.get(value.toLowerCase());
98
+ if (id == null)
99
+ throw new PermanentPollError(`Gmail label "${value}" does not exist.`);
100
+ return id;
101
+ })),
102
+ ];
103
+ }
104
+ async function listMessages(context, checkpoint, labels, maxMessages) {
105
+ const candidates = new Map();
106
+ const result = await get(context, "/users/me/history", {
107
+ historyTypes: "messageAdded",
108
+ labelId: labels[0],
109
+ maxResults: maxMessages,
110
+ pageToken: checkpoint.pageToken,
111
+ startHistoryId: checkpoint.historyId,
112
+ });
113
+ if (result.status == 404)
114
+ throw new PermanentPollError("Gmail history checkpoint expired; recreate the Trigger.");
115
+ success(result, "history list");
116
+ const lastPage = (record(result.data) ?? {});
117
+ for (const history of lastPage.history ?? []) {
118
+ for (const added of history.messagesAdded ?? []) {
119
+ const id = added.message?.id;
120
+ if (id != null && id.length > 0 && !candidates.has(id))
121
+ candidates.set(id, { id });
122
+ }
123
+ }
124
+ return { candidates: [...candidates.values()], lastPage };
125
+ }
126
+ function nextCheckpoint(historyId, page) {
127
+ if (page.nextPageToken)
128
+ return { checkpoint: { historyId, pageToken: page.nextPageToken }, hasMore: true };
129
+ if (!page.historyId)
130
+ throw new TransientPollError("Gmail history response historyId is missing.");
131
+ return { checkpoint: { historyId: page.historyId }, hasMore: false };
132
+ }
133
+ async function messageMetadata(context, id) {
134
+ const result = await get(context, `/users/me/messages/${encodeURIComponent(id)}`, {
135
+ format: "metadata",
136
+ });
137
+ if (result.status == 404)
138
+ return null;
139
+ success(result, "message metadata fetch");
140
+ return record(result.data) ?? null;
141
+ }
142
+ async function matches(context, message, config, requiredLabels) {
143
+ const labels = message.labelIds ?? [];
144
+ if (labels.includes("SENT") && !labels.includes("INBOX"))
145
+ return false;
146
+ if (!config.includeSpamAndTrash && (labels.includes("SPAM") || labels.includes("TRASH")))
147
+ return false;
148
+ if (!config.includeDrafts && labels.includes("DRAFT"))
149
+ return false;
150
+ if (config.readStatus == "Unread" && !labels.includes("UNREAD"))
151
+ return false;
152
+ if (config.readStatus == "Read" && labels.includes("UNREAD"))
153
+ return false;
154
+ if (!requiredLabels.every((label) => labels.includes(label)))
155
+ return false;
156
+ const query = searchQuery(config);
157
+ return query.length == 0 || (await matchesQuery(context, message, query, config.includeSpamAndTrash));
158
+ }
159
+ function searchQuery(config) {
160
+ const query = config.search.length == 0 ? [] : [config.search];
161
+ const sender = config.sender.replaceAll('"', "").trim();
162
+ if (sender.length > 0)
163
+ query.push(`from:${/\s/.test(sender) ? `"${sender}"` : sender}`);
164
+ return query.join(" ");
165
+ }
166
+ async function matchesQuery(context, message, query, includeSpamAndTrash) {
167
+ const messageId = header(message.payload?.headers ?? [], "Message-ID")
168
+ .replace(/^</, "")
169
+ .replace(/>$/, "");
170
+ if (messageId.length == 0)
171
+ return false;
172
+ const result = await get(context, "/users/me/messages", {
173
+ includeSpamTrash: includeSpamAndTrash ? "true" : undefined,
174
+ q: `${query} rfc822msgid:${messageId}`,
175
+ });
176
+ success(result, "query match");
177
+ const messages = record(result.data)?.messages;
178
+ return Array.isArray(messages) && messages.some((value) => record(value)?.id === message.id);
179
+ }
180
+ function event(message) {
181
+ const headers = message.payload?.headers ?? [];
182
+ return {
183
+ dedupeKey: message.id,
184
+ payload: {
185
+ historyId: message.historyId ?? null,
186
+ labelIds: message.labelIds ?? [],
187
+ messageId: message.id,
188
+ messageTimestamp: timestamp(message.internalDate, header(headers, "Date")),
189
+ sender: header(headers, "From"),
190
+ subject: header(headers, "Subject"),
191
+ threadId: message.threadId ?? "",
192
+ to: header(headers, "To"),
193
+ },
194
+ };
195
+ }
196
+ async function get(context, endpoint, query = {}) {
197
+ try {
198
+ return await context.connector.execute({
199
+ endpoint,
200
+ method: "GET",
201
+ query: Object.fromEntries(Object.entries(query).filter((entry) => entry[1] != null)),
202
+ }, context.signal);
203
+ }
204
+ catch (cause) {
205
+ throw new TransientPollError(`Gmail proxy request to ${endpoint} failed.`, { cause });
206
+ }
207
+ }
208
+ function success(result, operation) {
209
+ if (result.status >= 200 && result.status < 300)
210
+ return;
211
+ if (result.status == 401 || result.status == 403)
212
+ throw new PollConnectionError(`Gmail ${operation} rejected the Connection.`);
213
+ throw new TransientPollError(`Gmail ${operation} failed with status ${result.status}.`);
214
+ }
215
+ function header(headers, name) {
216
+ return headers.find((value) => value.name.toLowerCase() == name.toLowerCase())?.value ?? "";
217
+ }
218
+ function timestamp(internalDate, fallback) {
219
+ const epoch = internalDate == null ? Number.NaN : Number(internalDate);
220
+ if (Number.isFinite(epoch)) {
221
+ const date = new Date(epoch);
222
+ if (!Number.isNaN(date.getTime()))
223
+ return date.toISOString();
224
+ }
225
+ const parsed = Date.parse(fallback);
226
+ return Number.isNaN(parsed) ? "" : new Date(parsed).toISOString();
227
+ }
228
+ function record(value) {
229
+ return value != null && typeof value == "object" && !Array.isArray(value)
230
+ ? value
231
+ : undefined;
232
+ }
@@ -1,6 +1,6 @@
1
1
  import { compactObject, objectArray, optionalBooleanOrNull, optionalIntegerOrNull, optionalObjectArray, optionalRecord as asOptionalObject, optionalScalarString, optionalString as optionalNonEmptyString, optionalStringOrNull, requiredRecord, } from "../../core/cast.js";
2
- import { defineGoogleProviderExecutors, googleBearerProxyAuth, googleServiceAccountValidator } from "../google-auth.js";
3
- import { googleJsonRequest } from "../google-runtime.js";
2
+ import { defineGoogleProviderExecutors, googleBearerProxyAuth, googleServiceAccountValidator, } from "../googledrive/runtime-auth.js";
3
+ import { googleJsonRequest } from "../googledrive/runtime-request.js";
4
4
  import { defineProviderProxy, ProviderRequestError } from "../provider-runtime.js";
5
5
  import { googleAnalyticsOAuthScopes } from "./scopes.js";
6
6
  const service = "google_analytics";
@@ -1,5 +1,10 @@
1
+ import { googleIdentityScopes } from "../googleads/scopes.js";
1
2
  export const googleAnalyticsReadonlyScope = "https://www.googleapis.com/auth/analytics.readonly";
2
3
  export const googleAnalyticsEditScope = "https://www.googleapis.com/auth/analytics.edit";
3
4
  export const googleAnalyticsReadScopes = [googleAnalyticsReadonlyScope];
4
5
  export const googleAnalyticsWriteScopes = [googleAnalyticsEditScope];
5
- export const googleAnalyticsOAuthScopes = [googleAnalyticsReadonlyScope, googleAnalyticsEditScope];
6
+ export const googleAnalyticsOAuthScopes = [
7
+ googleAnalyticsReadonlyScope,
8
+ googleAnalyticsEditScope,
9
+ ...googleIdentityScopes,
10
+ ];
@@ -1,6 +1,6 @@
1
1
  import { booleanString, compactObject, optionalBoolean, optionalInteger as asOptionalInteger, requiredRecord, } from "../../core/cast.js";
2
- import { defineGoogleProviderExecutors, googleBearerProxyAuth, googleServiceAccountValidator } from "../google-auth.js";
3
- import { googleJsonRequest, googleRequest } from "../google-runtime.js";
2
+ import { defineGoogleProviderExecutors, googleBearerProxyAuth, googleServiceAccountValidator, } from "../googledrive/runtime-auth.js";
3
+ import { googleJsonRequest, googleRequest } from "../googledrive/runtime-request.js";
4
4
  import { defineProviderProxy, ProviderRequestError } from "../provider-runtime.js";
5
5
  import { googleBigQueryOAuthScopes } from "./scopes.js";
6
6
  const bigQueryApiBaseUrl = "https://bigquery.googleapis.com/bigquery/v2";
@@ -1,3 +1,4 @@
1
+ import { googleIdentityScopes } from "../googleads/scopes.js";
1
2
  export const bigQueryScope = "https://www.googleapis.com/auth/bigquery";
2
3
  export const bigQueryReadOnlyScope = "https://www.googleapis.com/auth/bigquery.readonly";
3
4
  export const bigQueryInsertDataScope = "https://www.googleapis.com/auth/bigquery.insertdata";
@@ -14,4 +15,5 @@ export const googleBigQueryOAuthScopes = [
14
15
  bigQueryInsertDataScope,
15
16
  devStorageReadOnlyScope,
16
17
  devStorageReadWriteScope,
18
+ ...googleIdentityScopes,
17
19
  ];
@@ -1,6 +1,6 @@
1
1
  import { compactObject, optionalNumber, optionalRecord as asOptionalObject, optionalString as asOptionalString, pickOptionalInteger, pickOptionalString as pickNonEmptyString, } from "../../core/cast.js";
2
- import { defineGoogleProviderExecutors, googleBearerProxyAuth, googleServiceAccountValidator } from "../google-auth.js";
3
- import { googleJsonRequest, googleRequest } from "../google-runtime.js";
2
+ import { defineGoogleProviderExecutors, googleBearerProxyAuth, googleServiceAccountValidator, } from "../googledrive/runtime-auth.js";
3
+ import { googleJsonRequest, googleRequest } from "../googledrive/runtime-request.js";
4
4
  import { defineProviderProxy, ProviderRequestError } from "../provider-runtime.js";
5
5
  import { googleSearchConsoleOAuthScopes } from "./scopes.js";
6
6
  const service = "google_search_console";
@@ -1,3 +1,4 @@
1
+ import { googleIdentityScopes } from "../googleads/scopes.js";
1
2
  export const googleSearchConsoleReadonlyScope = "https://www.googleapis.com/auth/webmasters.readonly";
2
3
  export const googleSearchConsoleFullScope = "https://www.googleapis.com/auth/webmasters";
3
4
  export const googleSearchConsoleReadScopes = [googleSearchConsoleReadonlyScope];
@@ -5,4 +6,5 @@ export const googleSearchConsoleWriteScopes = [googleSearchConsoleFullScope];
5
6
  export const googleSearchConsoleOAuthScopes = [
6
7
  googleSearchConsoleReadonlyScope,
7
8
  googleSearchConsoleFullScope,
9
+ ...googleIdentityScopes,
8
10
  ];
@@ -1,6 +1,6 @@
1
1
  import { createHash } from "node:crypto";
2
2
  import { compactObject, objectArray, optionalBoolean, optionalRecord, optionalScalarString, optionalString, } from "../../core/cast.js";
3
- import { googleJsonRequest, googleRequest } from "../google-runtime.js";
3
+ import { googleJsonRequest, googleRequest } from "../googledrive/runtime-request.js";
4
4
  import { defineProviderExecutors, defineProviderProxy, ProviderRequestError, requireOAuthCredential, requiredInputString, } from "../provider-runtime.js";
5
5
  import { googleAdsScope } from "./scopes.js";
6
6
  export const googleAdsApiBaseUrl = "https://googleads.googleapis.com/v22";
@@ -1,5 +1,3 @@
1
1
  export declare const googleAdsScope = "https://www.googleapis.com/auth/adwords";
2
- export declare const googleOpenIdScope = "openid";
3
- export declare const googleEmailScope = "email";
4
- export declare const googleProfileScope = "profile";
2
+ export declare const googleIdentityScopes: string[];
5
3
  export declare const googleAdsOAuthScopes: string[];
@@ -1,5 +1,3 @@
1
1
  export const googleAdsScope = "https://www.googleapis.com/auth/adwords";
2
- export const googleOpenIdScope = "openid";
3
- export const googleEmailScope = "email";
4
- export const googleProfileScope = "profile";
5
- export const googleAdsOAuthScopes = [googleAdsScope, googleOpenIdScope, googleEmailScope, googleProfileScope];
2
+ export const googleIdentityScopes = ["openid", "email", "profile"];
3
+ export const googleAdsOAuthScopes = [googleAdsScope, ...googleIdentityScopes];
@@ -1,4 +1,6 @@
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
  import type { ProviderActionHandlers } from "../provider-runtime.ts";
3
5
  import type { OAuthProviderContext } from "../provider-runtime.ts";
4
6
  type GooglecalendarRuntimeDeps = OAuthProviderContext;
@@ -7,4 +9,5 @@ export declare const googlecalendarActionHandlers: ProviderActionHandlers<"googl
7
9
  export declare const executors: ProviderExecutors;
8
10
  export declare const proxy: ProviderProxyExecutor;
9
11
  export declare const credentialValidators: CredentialValidators;
12
+ export declare const triggers: readonly (IntegrationDefinition | PollDefinition)[];
10
13
  export {};
@@ -1,9 +1,10 @@
1
1
  import { compactObject, optionalString, pickOptionalBoolean, pickOptionalInteger, pickOptionalString, requiredRecord, } from "../../core/cast.js";
2
- import { defineGoogleProviderExecutors, googleBearerProxyAuth, googleServiceAccountValidator } from "../google-auth.js";
2
+ import { defineGoogleProviderExecutors, googleBearerProxyAuth, googleServiceAccountValidator, } from "../googledrive/runtime-auth.js";
3
3
  import { combineProviderActionHandlers, defineProviderProxy, ProviderRequestError } from "../provider-runtime.js";
4
4
  import { googlecalendarEventActionHandlers } from "./runtime-events.js";
5
5
  import { googlecalendarApiBaseUrl, googlecalendarJsonRequest, googlecalendarRequest, resolveCalendarId, resolveRuleId, resolveSettingId, } from "./runtime-shared.js";
6
6
  import { googlecalendarOAuthScopes } from "./scopes.js";
7
+ import { googleCalendarEventChanged } from "./trigger-on-event-changed.js";
7
8
  function asObject(value) {
8
9
  return requiredRecord(value, "object input", (message) => new ProviderRequestError(400, message));
9
10
  }
@@ -566,3 +567,4 @@ function asRecord(value) {
566
567
  }
567
568
  return value;
568
569
  }
570
+ export const triggers = [googleCalendarEventChanged];
@@ -1,5 +1,5 @@
1
1
  import { optionalRecord, optionalString as asOptionalString, pickOptionalString } from "../../core/cast.js";
2
- import { providerUserAgent, ProviderRequestError } from "../provider-runtime.js";
2
+ import { providerUserAgent, ProviderRequestError, withRetryAfterSeconds } from "../provider-runtime.js";
3
3
  export const googlecalendarApiBaseUrl = "https://www.googleapis.com/calendar/v3";
4
4
  const service = "googlecalendar";
5
5
  const googleDefaultRequestTimeoutMs = 30_000;
@@ -142,7 +142,7 @@ async function assertGoogleResponse(response) {
142
142
  return;
143
143
  }
144
144
  const { message, details } = await extractGoogleError(response);
145
- throw new ProviderRequestError(response.status, message, details);
145
+ throw new ProviderRequestError(response.status, message, withRetryAfterSeconds(response, details));
146
146
  }
147
147
  async function extractGoogleError(response) {
148
148
  const rawText = await response.text().catch(() => "");
@@ -1,3 +1,4 @@
1
+ import { googleIdentityScopes } from "../googleads/scopes.js";
1
2
  export const googleCalendarReadonlyScope = "https://www.googleapis.com/auth/calendar.readonly";
2
3
  export const googleCalendarEventsScope = "https://www.googleapis.com/auth/calendar.events";
3
4
  export const googleCalendarCalendarsScope = "https://www.googleapis.com/auth/calendar.calendars";
@@ -22,4 +23,5 @@ export const googlecalendarOAuthScopes = [
22
23
  googleCalendarSettingsReadonlyScope,
23
24
  googleCalendarAclsScope,
24
25
  googleCalendarAclsReadonlyScope,
26
+ ...googleIdentityScopes,
25
27
  ];
@@ -0,0 +1,2 @@
1
+ import type { PollDefinition } from "../../triggers/common/poll.ts";
2
+ export declare const googleCalendarEventChanged: PollDefinition;
@@ -0,0 +1,4 @@
1
+ import type { TriggerKeySnapshot } from "../../triggers/common/types.ts";
2
+ export declare const snapshot: TriggerKeySnapshot & {
3
+ readonly type: "poll";
4
+ };
@@ -0,0 +1,74 @@
1
+ import { jsonSchema as s } from "../../core/json-schema.js";
2
+ const changes = ["created", "updated", "cancelled"];
3
+ const eventSchema = s.object({
4
+ attendeeEmails: s.array(s.string()),
5
+ calendarId: s.string(),
6
+ changeType: s.stringEnum(changes),
7
+ created: { type: ["string", "null"] },
8
+ creatorEmail: { type: ["string", "null"] },
9
+ description: { type: ["string", "null"] },
10
+ end: { type: ["object", "null"] },
11
+ eventId: s.string(),
12
+ eventType: { type: ["string", "null"] },
13
+ htmlLink: { type: ["string", "null"] },
14
+ isAllDay: s.boolean(),
15
+ location: { type: ["string", "null"] },
16
+ organizerEmail: { type: ["string", "null"] },
17
+ recurringEventId: { type: ["string", "null"] },
18
+ start: { type: ["object", "null"] },
19
+ status: s.string(),
20
+ summary: { type: ["string", "null"] },
21
+ updated: { type: ["string", "null"] },
22
+ }, {
23
+ additionalProperties: false,
24
+ required: [
25
+ "changeType",
26
+ "calendarId",
27
+ "eventId",
28
+ "status",
29
+ "summary",
30
+ "description",
31
+ "location",
32
+ "htmlLink",
33
+ "start",
34
+ "end",
35
+ "isAllDay",
36
+ "organizerEmail",
37
+ "creatorEmail",
38
+ "attendeeEmails",
39
+ "recurringEventId",
40
+ "eventType",
41
+ "created",
42
+ "updated",
43
+ ],
44
+ });
45
+ export const snapshot = {
46
+ configInputs: [
47
+ {
48
+ handle: "calendarId",
49
+ jsonSchema: s.string({ maxLength: 1024, minLength: 1 }),
50
+ nullable: false,
51
+ },
52
+ {
53
+ handle: "changes",
54
+ jsonSchema: s.array(s.stringEnum(changes), { minItems: 1, uniqueItems: true }),
55
+ nullable: false,
56
+ value: changes,
57
+ },
58
+ { handle: "matchTerm", jsonSchema: s.string(), nullable: false, value: "" },
59
+ {
60
+ handle: "maxEventsPerPoll",
61
+ jsonSchema: s.integer({ maximum: 500, minimum: 1 }),
62
+ nullable: false,
63
+ value: 100,
64
+ },
65
+ ],
66
+ definitionVersion: 2,
67
+ description: "Polls a Google Calendar and triggers when an event is created, updated or cancelled.",
68
+ displayName: "Event Changed",
69
+ key: "googlecalendar.on_event_changed",
70
+ name: "on_event_changed",
71
+ outputs: [{ handle: "events", jsonSchema: s.array(eventSchema), nullable: false }],
72
+ provider: "googlecalendar",
73
+ type: "poll",
74
+ };