integrate-sdk 0.9.31-dev.0 → 0.9.43-dev.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 (290) hide show
  1. package/dist/adapters/auto-routes.js +216 -0
  2. package/dist/adapters/base-handler.js +216 -0
  3. package/dist/adapters/index.js +618 -87
  4. package/dist/adapters/nextjs.js +216 -0
  5. package/dist/adapters/solid-start.js +618 -87
  6. package/dist/adapters/svelte-kit.js +618 -87
  7. package/dist/index.d.ts +1 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3483 -445
  10. package/dist/oauth.js +216 -0
  11. package/dist/server.js +3542 -457
  12. package/dist/src/client.d.ts +55 -1
  13. package/dist/src/client.d.ts.map +1 -1
  14. package/dist/src/index.d.ts +118 -0
  15. package/dist/src/index.d.ts.map +1 -1
  16. package/dist/src/integrations/alpaca-client.d.ts +64 -0
  17. package/dist/src/integrations/alpaca-client.d.ts.map +1 -0
  18. package/dist/src/integrations/alpaca.d.ts +22 -0
  19. package/dist/src/integrations/alpaca.d.ts.map +1 -0
  20. package/dist/src/integrations/astronomer-client.d.ts +80 -0
  21. package/dist/src/integrations/astronomer-client.d.ts.map +1 -0
  22. package/dist/src/integrations/astronomer.d.ts +14 -0
  23. package/dist/src/integrations/astronomer.d.ts.map +1 -0
  24. package/dist/src/integrations/attio-client.d.ts +17 -0
  25. package/dist/src/integrations/attio-client.d.ts.map +1 -0
  26. package/dist/src/integrations/attio.d.ts +15 -0
  27. package/dist/src/integrations/attio.d.ts.map +1 -0
  28. package/dist/src/integrations/auth0-client.d.ts +55 -0
  29. package/dist/src/integrations/auth0-client.d.ts.map +1 -0
  30. package/dist/src/integrations/auth0.d.ts +22 -0
  31. package/dist/src/integrations/auth0.d.ts.map +1 -0
  32. package/dist/src/integrations/aws-client.d.ts +26 -0
  33. package/dist/src/integrations/aws-client.d.ts.map +1 -0
  34. package/dist/src/integrations/aws.d.ts +28 -0
  35. package/dist/src/integrations/aws.d.ts.map +1 -0
  36. package/dist/src/integrations/betterstack-client.d.ts +62 -0
  37. package/dist/src/integrations/betterstack-client.d.ts.map +1 -0
  38. package/dist/src/integrations/betterstack.d.ts +14 -0
  39. package/dist/src/integrations/betterstack.d.ts.map +1 -0
  40. package/dist/src/integrations/binance-client.d.ts +54 -0
  41. package/dist/src/integrations/binance-client.d.ts.map +1 -0
  42. package/dist/src/integrations/binance.d.ts +22 -0
  43. package/dist/src/integrations/binance.d.ts.map +1 -0
  44. package/dist/src/integrations/canva-client.d.ts +70 -0
  45. package/dist/src/integrations/canva-client.d.ts.map +1 -0
  46. package/dist/src/integrations/canva.d.ts +20 -0
  47. package/dist/src/integrations/canva.d.ts.map +1 -0
  48. package/dist/src/integrations/clerk-client.d.ts +66 -0
  49. package/dist/src/integrations/clerk-client.d.ts.map +1 -0
  50. package/dist/src/integrations/clerk.d.ts +14 -0
  51. package/dist/src/integrations/clerk.d.ts.map +1 -0
  52. package/dist/src/integrations/clickup-client.d.ts +5 -0
  53. package/dist/src/integrations/clickup-client.d.ts.map +1 -0
  54. package/dist/src/integrations/clickup.d.ts +13 -0
  55. package/dist/src/integrations/clickup.d.ts.map +1 -0
  56. package/dist/src/integrations/cloudflare-client.d.ts +69 -0
  57. package/dist/src/integrations/cloudflare-client.d.ts.map +1 -0
  58. package/dist/src/integrations/cloudflare.d.ts +23 -0
  59. package/dist/src/integrations/cloudflare.d.ts.map +1 -0
  60. package/dist/src/integrations/convex-client.d.ts +21 -0
  61. package/dist/src/integrations/convex-client.d.ts.map +1 -0
  62. package/dist/src/integrations/convex.d.ts +9 -0
  63. package/dist/src/integrations/convex.d.ts.map +1 -0
  64. package/dist/src/integrations/databricks-client.d.ts +40 -0
  65. package/dist/src/integrations/databricks-client.d.ts.map +1 -0
  66. package/dist/src/integrations/databricks.d.ts +27 -0
  67. package/dist/src/integrations/databricks.d.ts.map +1 -0
  68. package/dist/src/integrations/datadog-client.d.ts +9 -0
  69. package/dist/src/integrations/datadog-client.d.ts.map +1 -0
  70. package/dist/src/integrations/datadog.d.ts +30 -0
  71. package/dist/src/integrations/datadog.d.ts.map +1 -0
  72. package/dist/src/integrations/discord-client.d.ts +44 -0
  73. package/dist/src/integrations/discord-client.d.ts.map +1 -0
  74. package/dist/src/integrations/discord.d.ts +19 -0
  75. package/dist/src/integrations/discord.d.ts.map +1 -0
  76. package/dist/src/integrations/etoro-client.d.ts +10 -0
  77. package/dist/src/integrations/etoro-client.d.ts.map +1 -0
  78. package/dist/src/integrations/etoro.d.ts +10 -0
  79. package/dist/src/integrations/etoro.d.ts.map +1 -0
  80. package/dist/src/integrations/excel.d.ts +1 -1
  81. package/dist/src/integrations/facebook-client.d.ts +61 -0
  82. package/dist/src/integrations/facebook-client.d.ts.map +1 -0
  83. package/dist/src/integrations/facebook.d.ts +22 -0
  84. package/dist/src/integrations/facebook.d.ts.map +1 -0
  85. package/dist/src/integrations/ga4-client.d.ts +9 -0
  86. package/dist/src/integrations/ga4-client.d.ts.map +1 -0
  87. package/dist/src/integrations/ga4.d.ts +13 -0
  88. package/dist/src/integrations/ga4.d.ts.map +1 -0
  89. package/dist/src/integrations/gcal-client.d.ts +6 -0
  90. package/dist/src/integrations/gcal-client.d.ts.map +1 -1
  91. package/dist/src/integrations/gcal.d.ts +1 -1
  92. package/dist/src/integrations/gcal.d.ts.map +1 -1
  93. package/dist/src/integrations/gchat-client.d.ts +12 -0
  94. package/dist/src/integrations/gchat-client.d.ts.map +1 -0
  95. package/dist/src/integrations/gchat.d.ts +15 -0
  96. package/dist/src/integrations/gchat.d.ts.map +1 -0
  97. package/dist/src/integrations/gcontacts-client.d.ts +14 -0
  98. package/dist/src/integrations/gcontacts-client.d.ts.map +1 -0
  99. package/dist/src/integrations/gcontacts.d.ts +22 -0
  100. package/dist/src/integrations/gcontacts.d.ts.map +1 -0
  101. package/dist/src/integrations/gdocs-client.d.ts +22 -0
  102. package/dist/src/integrations/gdocs-client.d.ts.map +1 -1
  103. package/dist/src/integrations/gdocs.d.ts +1 -1
  104. package/dist/src/integrations/gdocs.d.ts.map +1 -1
  105. package/dist/src/integrations/gdrive.d.ts +1 -1
  106. package/dist/src/integrations/github-client.d.ts +4 -0
  107. package/dist/src/integrations/github-client.d.ts.map +1 -1
  108. package/dist/src/integrations/github.d.ts +1 -1
  109. package/dist/src/integrations/github.d.ts.map +1 -1
  110. package/dist/src/integrations/gitlab-client.d.ts +5 -0
  111. package/dist/src/integrations/gitlab-client.d.ts.map +1 -0
  112. package/dist/src/integrations/gitlab.d.ts +20 -0
  113. package/dist/src/integrations/gitlab.d.ts.map +1 -0
  114. package/dist/src/integrations/gmail-client.d.ts +18 -0
  115. package/dist/src/integrations/gmail-client.d.ts.map +1 -1
  116. package/dist/src/integrations/gmail.d.ts +1 -1
  117. package/dist/src/integrations/gmail.d.ts.map +1 -1
  118. package/dist/src/integrations/gmeet-client.d.ts +10 -0
  119. package/dist/src/integrations/gmeet-client.d.ts.map +1 -0
  120. package/dist/src/integrations/gmeet.d.ts +19 -0
  121. package/dist/src/integrations/gmeet.d.ts.map +1 -0
  122. package/dist/src/integrations/gsheets-client.d.ts +10 -0
  123. package/dist/src/integrations/gsheets-client.d.ts.map +1 -1
  124. package/dist/src/integrations/gsheets.d.ts +1 -1
  125. package/dist/src/integrations/gsheets.d.ts.map +1 -1
  126. package/dist/src/integrations/gslides-client.d.ts +8 -0
  127. package/dist/src/integrations/gslides-client.d.ts.map +1 -1
  128. package/dist/src/integrations/gslides.d.ts +1 -1
  129. package/dist/src/integrations/gslides.d.ts.map +1 -1
  130. package/dist/src/integrations/gtasks-client.d.ts +16 -0
  131. package/dist/src/integrations/gtasks-client.d.ts.map +1 -0
  132. package/dist/src/integrations/gtasks.d.ts +22 -0
  133. package/dist/src/integrations/gtasks.d.ts.map +1 -0
  134. package/dist/src/integrations/instagram-client.d.ts +74 -0
  135. package/dist/src/integrations/instagram-client.d.ts.map +1 -0
  136. package/dist/src/integrations/instagram.d.ts +24 -0
  137. package/dist/src/integrations/instagram.d.ts.map +1 -0
  138. package/dist/src/integrations/library-metadata.d.ts.map +1 -1
  139. package/dist/src/integrations/linkedin-client.d.ts +6 -0
  140. package/dist/src/integrations/linkedin-client.d.ts.map +1 -0
  141. package/dist/src/integrations/linkedin.d.ts +15 -0
  142. package/dist/src/integrations/linkedin.d.ts.map +1 -0
  143. package/dist/src/integrations/mailchimp-client.d.ts +5 -0
  144. package/dist/src/integrations/mailchimp-client.d.ts.map +1 -0
  145. package/dist/src/integrations/mailchimp.d.ts +13 -0
  146. package/dist/src/integrations/mailchimp.d.ts.map +1 -0
  147. package/dist/src/integrations/monday-client.d.ts +44 -0
  148. package/dist/src/integrations/monday-client.d.ts.map +1 -0
  149. package/dist/src/integrations/monday.d.ts +19 -0
  150. package/dist/src/integrations/monday.d.ts.map +1 -0
  151. package/dist/src/integrations/neon-client.d.ts +89 -0
  152. package/dist/src/integrations/neon-client.d.ts.map +1 -0
  153. package/dist/src/integrations/neon.d.ts +13 -0
  154. package/dist/src/integrations/neon.d.ts.map +1 -0
  155. package/dist/src/integrations/onedrive-client.d.ts +16 -0
  156. package/dist/src/integrations/onedrive-client.d.ts.map +1 -1
  157. package/dist/src/integrations/onedrive.d.ts +1 -1
  158. package/dist/src/integrations/onedrive.d.ts.map +1 -1
  159. package/dist/src/integrations/outlook.d.ts +1 -1
  160. package/dist/src/integrations/outlook.d.ts.map +1 -1
  161. package/dist/src/integrations/paper-client.d.ts +24 -0
  162. package/dist/src/integrations/paper-client.d.ts.map +1 -0
  163. package/dist/src/integrations/paper.d.ts +22 -0
  164. package/dist/src/integrations/paper.d.ts.map +1 -0
  165. package/dist/src/integrations/phantom-client.d.ts +9 -0
  166. package/dist/src/integrations/phantom-client.d.ts.map +1 -0
  167. package/dist/src/integrations/phantom.d.ts +13 -0
  168. package/dist/src/integrations/phantom.d.ts.map +1 -0
  169. package/dist/src/integrations/planetscale-client.d.ts +5 -0
  170. package/dist/src/integrations/planetscale-client.d.ts.map +1 -0
  171. package/dist/src/integrations/planetscale.d.ts +14 -0
  172. package/dist/src/integrations/planetscale.d.ts.map +1 -0
  173. package/dist/src/integrations/planner-client.d.ts +17 -0
  174. package/dist/src/integrations/planner-client.d.ts.map +1 -0
  175. package/dist/src/integrations/planner.d.ts +13 -0
  176. package/dist/src/integrations/planner.d.ts.map +1 -0
  177. package/dist/src/integrations/postman-client.d.ts +34 -0
  178. package/dist/src/integrations/postman-client.d.ts.map +1 -0
  179. package/dist/src/integrations/postman.d.ts +14 -0
  180. package/dist/src/integrations/postman.d.ts.map +1 -0
  181. package/dist/src/integrations/powerpoint-client.d.ts +8 -0
  182. package/dist/src/integrations/powerpoint-client.d.ts.map +1 -1
  183. package/dist/src/integrations/powerpoint.d.ts +1 -1
  184. package/dist/src/integrations/powerpoint.d.ts.map +1 -1
  185. package/dist/src/integrations/reddit-client.d.ts +5 -0
  186. package/dist/src/integrations/reddit-client.d.ts.map +1 -0
  187. package/dist/src/integrations/reddit.d.ts +13 -0
  188. package/dist/src/integrations/reddit.d.ts.map +1 -0
  189. package/dist/src/integrations/redis-client.d.ts +67 -0
  190. package/dist/src/integrations/redis-client.d.ts.map +1 -0
  191. package/dist/src/integrations/redis.d.ts +18 -0
  192. package/dist/src/integrations/redis.d.ts.map +1 -0
  193. package/dist/src/integrations/resend-client.d.ts +5 -0
  194. package/dist/src/integrations/resend-client.d.ts.map +1 -0
  195. package/dist/src/integrations/resend.d.ts +9 -0
  196. package/dist/src/integrations/resend.d.ts.map +1 -0
  197. package/dist/src/integrations/salesforce-client.d.ts +43 -0
  198. package/dist/src/integrations/salesforce-client.d.ts.map +1 -0
  199. package/dist/src/integrations/salesforce.d.ts +25 -0
  200. package/dist/src/integrations/salesforce.d.ts.map +1 -0
  201. package/dist/src/integrations/sharepoint-client.d.ts +15 -0
  202. package/dist/src/integrations/sharepoint-client.d.ts.map +1 -0
  203. package/dist/src/integrations/sharepoint.d.ts +15 -0
  204. package/dist/src/integrations/sharepoint.d.ts.map +1 -0
  205. package/dist/src/integrations/shopify-client.d.ts +31 -0
  206. package/dist/src/integrations/shopify-client.d.ts.map +1 -0
  207. package/dist/src/integrations/shopify.d.ts +16 -0
  208. package/dist/src/integrations/shopify.d.ts.map +1 -0
  209. package/dist/src/integrations/stripe-client.d.ts +12 -0
  210. package/dist/src/integrations/stripe-client.d.ts.map +1 -1
  211. package/dist/src/integrations/stripe.d.ts +1 -1
  212. package/dist/src/integrations/stripe.d.ts.map +1 -1
  213. package/dist/src/integrations/supabase-client.d.ts +63 -0
  214. package/dist/src/integrations/supabase-client.d.ts.map +1 -0
  215. package/dist/src/integrations/supabase.d.ts +26 -0
  216. package/dist/src/integrations/supabase.d.ts.map +1 -0
  217. package/dist/src/integrations/teams-client.d.ts +16 -0
  218. package/dist/src/integrations/teams-client.d.ts.map +1 -0
  219. package/dist/src/integrations/teams.d.ts +24 -0
  220. package/dist/src/integrations/teams.d.ts.map +1 -0
  221. package/dist/src/integrations/threads-client.d.ts +16 -0
  222. package/dist/src/integrations/threads-client.d.ts.map +1 -0
  223. package/dist/src/integrations/threads.d.ts +15 -0
  224. package/dist/src/integrations/threads.d.ts.map +1 -0
  225. package/dist/src/integrations/tiktok-client.d.ts +7 -0
  226. package/dist/src/integrations/tiktok-client.d.ts.map +1 -0
  227. package/dist/src/integrations/tiktok.d.ts +15 -0
  228. package/dist/src/integrations/tiktok.d.ts.map +1 -0
  229. package/dist/src/integrations/tldraw-client.d.ts +5 -0
  230. package/dist/src/integrations/tldraw-client.d.ts.map +1 -0
  231. package/dist/src/integrations/tldraw.d.ts +9 -0
  232. package/dist/src/integrations/tldraw.d.ts.map +1 -0
  233. package/dist/src/integrations/trello-client.d.ts +16 -0
  234. package/dist/src/integrations/trello-client.d.ts.map +1 -0
  235. package/dist/src/integrations/trello.d.ts +10 -0
  236. package/dist/src/integrations/trello.d.ts.map +1 -0
  237. package/dist/src/integrations/typeform-client.d.ts +13 -0
  238. package/dist/src/integrations/typeform-client.d.ts.map +1 -0
  239. package/dist/src/integrations/typeform.d.ts +15 -0
  240. package/dist/src/integrations/typeform.d.ts.map +1 -0
  241. package/dist/src/integrations/upstash-client.d.ts +28 -0
  242. package/dist/src/integrations/upstash-client.d.ts.map +1 -0
  243. package/dist/src/integrations/upstash.d.ts +18 -0
  244. package/dist/src/integrations/upstash.d.ts.map +1 -0
  245. package/dist/src/integrations/webflow-client.d.ts +78 -0
  246. package/dist/src/integrations/webflow-client.d.ts.map +1 -0
  247. package/dist/src/integrations/webflow.d.ts +20 -0
  248. package/dist/src/integrations/webflow.d.ts.map +1 -0
  249. package/dist/src/integrations/whatsapp-client.d.ts +22 -0
  250. package/dist/src/integrations/whatsapp-client.d.ts.map +1 -1
  251. package/dist/src/integrations/whatsapp.d.ts +1 -1
  252. package/dist/src/integrations/whatsapp.d.ts.map +1 -1
  253. package/dist/src/integrations/wix-client.d.ts +27 -0
  254. package/dist/src/integrations/wix-client.d.ts.map +1 -0
  255. package/dist/src/integrations/wix.d.ts +16 -0
  256. package/dist/src/integrations/wix.d.ts.map +1 -0
  257. package/dist/src/integrations/word-client.d.ts +8 -0
  258. package/dist/src/integrations/word-client.d.ts.map +1 -1
  259. package/dist/src/integrations/word.d.ts +1 -1
  260. package/dist/src/integrations/word.d.ts.map +1 -1
  261. package/dist/src/integrations/workday-client.d.ts +18 -0
  262. package/dist/src/integrations/workday-client.d.ts.map +1 -0
  263. package/dist/src/integrations/workday.d.ts +24 -0
  264. package/dist/src/integrations/workday.d.ts.map +1 -0
  265. package/dist/src/integrations/workos-client.d.ts +75 -0
  266. package/dist/src/integrations/workos-client.d.ts.map +1 -0
  267. package/dist/src/integrations/workos.d.ts +14 -0
  268. package/dist/src/integrations/workos.d.ts.map +1 -0
  269. package/dist/src/integrations/xero-client.d.ts +14 -0
  270. package/dist/src/integrations/xero-client.d.ts.map +1 -0
  271. package/dist/src/integrations/xero.d.ts +15 -0
  272. package/dist/src/integrations/xero.d.ts.map +1 -0
  273. package/dist/src/integrations/youtube.d.ts +1 -1
  274. package/dist/src/integrations/youtube.d.ts.map +1 -1
  275. package/dist/src/integrations/zapier-client.d.ts +41 -0
  276. package/dist/src/integrations/zapier-client.d.ts.map +1 -0
  277. package/dist/src/integrations/zapier.d.ts +20 -0
  278. package/dist/src/integrations/zapier.d.ts.map +1 -0
  279. package/dist/src/integrations/zoom-client.d.ts +42 -0
  280. package/dist/src/integrations/zoom-client.d.ts.map +1 -0
  281. package/dist/src/integrations/zoom.d.ts +23 -0
  282. package/dist/src/integrations/zoom.d.ts.map +1 -0
  283. package/dist/src/oauth/manager.d.ts +44 -0
  284. package/dist/src/oauth/manager.d.ts.map +1 -1
  285. package/dist/src/oauth/refresh.d.ts +124 -0
  286. package/dist/src/oauth/refresh.d.ts.map +1 -0
  287. package/dist/src/server.d.ts +54 -0
  288. package/dist/src/server.d.ts.map +1 -1
  289. package/index.ts +52 -0
  290. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -818,18 +818,42 @@ var INTEGRATION_LIBRARY_METADATA = {
818
818
  description: "Manage Airtable bases, tables, and records",
819
819
  category: "Business"
820
820
  },
821
+ aws: {
822
+ description: "Inspect AWS accounts and resources with SigV4 (control-plane APIs)",
823
+ category: "Infrastructure"
824
+ },
825
+ attio: {
826
+ description: "Manage Attio people, companies, tasks, and CRM records",
827
+ category: "Business"
828
+ },
821
829
  calcom: {
822
830
  description: "Manage Cal.com bookings and schedules",
823
831
  category: "Business"
824
832
  },
833
+ canva: {
834
+ description: "List and create Canva designs, manage folders, and export assets",
835
+ category: "Productivity"
836
+ },
837
+ cloudflare: {
838
+ description: "Manage Cloudflare zones, DNS, CDN cache, and Workers",
839
+ category: "Infrastructure"
840
+ },
825
841
  cursor: {
826
842
  description: "Manage Cursor Cloud Agents and background tasks",
827
843
  category: "Engineering"
828
844
  },
845
+ databricks: {
846
+ description: "Run Databricks jobs, list clusters and SQL warehouses, and inspect workspace paths",
847
+ category: "Engineering"
848
+ },
829
849
  figma: {
830
850
  description: "Access Figma files, comments, and components",
831
851
  category: "Engineering"
832
852
  },
853
+ facebook: {
854
+ description: "Manage Facebook Page posts, comments, reactions, and insights via the Graph API",
855
+ category: "Social Media"
856
+ },
833
857
  github: {
834
858
  description: "Manage GitHub repos, issues, and pull requests",
835
859
  category: "Engineering"
@@ -842,10 +866,26 @@ var INTEGRATION_LIBRARY_METADATA = {
842
866
  description: "Manage Google Calendar events and schedules",
843
867
  category: "Productivity"
844
868
  },
869
+ gtasks: {
870
+ description: "Manage Google Tasks lists and to-dos",
871
+ category: "Productivity"
872
+ },
873
+ gmeet: {
874
+ description: "Create Google Meet links and manage meeting events via Calendar",
875
+ category: "Communication"
876
+ },
877
+ gcontacts: {
878
+ description: "List, search, create, update, and delete Google Contacts via the People API",
879
+ category: "Communication"
880
+ },
845
881
  hubspot: {
846
882
  description: "Manage HubSpot contacts, deals, and tickets",
847
883
  category: "Business"
848
884
  },
885
+ instagram: {
886
+ description: "Instagram Graph API — media, comments, insights, stories, and publishing",
887
+ category: "Social Media"
888
+ },
849
889
  intercom: {
850
890
  description: "Manage Intercom contacts and conversations",
851
891
  category: "Business"
@@ -862,6 +902,10 @@ var INTEGRATION_LIBRARY_METADATA = {
862
902
  description: "Manage OneDrive files, folders, and sharing",
863
903
  category: "Storage"
864
904
  },
905
+ planner: {
906
+ description: "Manage Microsoft Planner plans, buckets, and tasks",
907
+ category: "Productivity"
908
+ },
865
909
  outlook: {
866
910
  description: "Manage Outlook mail, calendars, and contacts",
867
911
  category: "Communication"
@@ -870,18 +914,38 @@ var INTEGRATION_LIBRARY_METADATA = {
870
914
  description: "Manage Polar products, orders, and subscriptions",
871
915
  category: "Finance"
872
916
  },
917
+ phantom: {
918
+ description: "Build Phantom mobile browse universal links and deeplink provider documentation (Solana)",
919
+ category: "Other"
920
+ },
873
921
  posthog: {
874
922
  description: "Read PostHog organizations, projects, insights, and feature flags",
875
923
  category: "Analytics"
876
924
  },
925
+ postman: {
926
+ description: "Manage Postman workspaces, collections, and environments via the Postman API",
927
+ category: "Engineering"
928
+ },
877
929
  ramp: {
878
930
  description: "Manage Ramp corporate cards, bills, and spend",
879
931
  category: "Business"
880
932
  },
933
+ resend: {
934
+ description: "Send email and manage domains with the Resend API",
935
+ category: "Communication"
936
+ },
937
+ mailchimp: {
938
+ description: "Manage Mailchimp audiences, members, and campaigns",
939
+ category: "Communication"
940
+ },
881
941
  railway: {
882
942
  description: "Manage Railway workspaces, projects, services, deployments, variables, domains, and volumes",
883
943
  category: "Infrastructure"
884
944
  },
945
+ supabase: {
946
+ description: "Manage Supabase organizations, projects, Postgres, API keys, secrets, and branches",
947
+ category: "Infrastructure"
948
+ },
885
949
  sentry: {
886
950
  description: "Monitor Sentry errors, issues, releases, and projects",
887
951
  category: "Engineering"
@@ -890,6 +954,14 @@ var INTEGRATION_LIBRARY_METADATA = {
890
954
  description: "Manage Netlify sites, deploys, builds, and environment variables",
891
955
  category: "Infrastructure"
892
956
  },
957
+ redis: {
958
+ description: "Manage Redis Cloud subscriptions, databases, async tasks, and audit logs",
959
+ category: "Infrastructure"
960
+ },
961
+ upstash: {
962
+ description: "Use Upstash Redis REST, QStash messaging, and related HTTP APIs",
963
+ category: "Infrastructure"
964
+ },
893
965
  jira: {
894
966
  description: "Manage Jira issues, projects, sprints, and boards",
895
967
  category: "Engineering"
@@ -926,6 +998,10 @@ var INTEGRATION_LIBRARY_METADATA = {
926
998
  description: "Manage Vercel projects, deployments, and domains",
927
999
  category: "Infrastructure"
928
1000
  },
1001
+ workos: {
1002
+ description: "Manage WorkOS organizations, users, directory sync, and AuthKit",
1003
+ category: "Infrastructure"
1004
+ },
929
1005
  whatsapp: {
930
1006
  description: "Send WhatsApp messages and templates",
931
1007
  category: "Communication"
@@ -934,6 +1010,14 @@ var INTEGRATION_LIBRARY_METADATA = {
934
1010
  description: "Search and access YouTube videos and channels",
935
1011
  category: "Social Media"
936
1012
  },
1013
+ zoom: {
1014
+ description: "Manage Zoom user profile and meetings",
1015
+ category: "Communication"
1016
+ },
1017
+ reddit: {
1018
+ description: "Browse subreddits, search posts, submit content, and vote on Reddit",
1019
+ category: "Social Media"
1020
+ },
937
1021
  powerpoint: {
938
1022
  description: "Manage PowerPoint presentations and sharing",
939
1023
  category: "Productivity"
@@ -950,17 +1034,149 @@ var INTEGRATION_LIBRARY_METADATA = {
950
1034
  description: "Manage Dropbox files, folders, and sharing",
951
1035
  category: "Storage"
952
1036
  },
1037
+ paper: {
1038
+ description: "Create, update, and export Dropbox Paper documents",
1039
+ category: "Productivity"
1040
+ },
953
1041
  granola: {
954
1042
  description: "List and read Granola meeting notes and folders",
955
1043
  category: "Productivity"
956
1044
  },
1045
+ alpaca: {
1046
+ description: "Trade equities with Alpaca: account, orders, positions, and market clock",
1047
+ category: "Finance"
1048
+ },
1049
+ binance: {
1050
+ description: "Read Binance Spot prices, order books, and account data with read-only API keys",
1051
+ category: "Finance"
1052
+ },
957
1053
  mercury: {
958
1054
  description: "Manage Mercury bank accounts, cards, and transactions",
959
1055
  category: "Finance"
960
1056
  },
1057
+ monday: {
1058
+ description: "Manage Monday.com boards, items, columns, and updates",
1059
+ category: "Productivity"
1060
+ },
961
1061
  zendesk: {
962
1062
  description: "Manage Zendesk tickets, users, and help center content",
963
1063
  category: "Business"
1064
+ },
1065
+ wix: {
1066
+ description: "Manage Wix site stores, products, and e-commerce orders via REST",
1067
+ category: "Business"
1068
+ },
1069
+ astronomer: {
1070
+ description: "Manage Apache Airflow DAGs and deployments on Astronomer",
1071
+ category: "Engineering"
1072
+ },
1073
+ auth0: {
1074
+ description: "Manage Auth0 users, applications, and tenant configuration",
1075
+ category: "Infrastructure"
1076
+ },
1077
+ betterstack: {
1078
+ description: "Monitor uptime, logs, and incident alerts with BetterStack",
1079
+ category: "Engineering"
1080
+ },
1081
+ clerk: {
1082
+ description: "Manage Clerk users, organizations, and authentication",
1083
+ category: "Infrastructure"
1084
+ },
1085
+ clickup: {
1086
+ description: "Manage ClickUp tasks, lists, spaces, and workspaces",
1087
+ category: "Productivity"
1088
+ },
1089
+ convex: {
1090
+ description: "Run Convex functions, manage tables, and query your app backend",
1091
+ category: "Engineering"
1092
+ },
1093
+ datadog: {
1094
+ description: "Monitor Datadog metrics, logs, dashboards, and alerts",
1095
+ category: "Engineering"
1096
+ },
1097
+ discord: {
1098
+ description: "Send messages and manage Discord channels and servers",
1099
+ category: "Communication"
1100
+ },
1101
+ etoro: {
1102
+ description: "Read eToro portfolio data and market instruments",
1103
+ category: "Finance"
1104
+ },
1105
+ ga4: {
1106
+ description: "Read Google Analytics 4 reports, properties, and events",
1107
+ category: "Analytics"
1108
+ },
1109
+ gchat: {
1110
+ description: "Send messages and manage Google Chat spaces and memberships",
1111
+ category: "Communication"
1112
+ },
1113
+ gitlab: {
1114
+ description: "Manage GitLab repositories, issues, and merge requests",
1115
+ category: "Engineering"
1116
+ },
1117
+ linkedin: {
1118
+ description: "Post updates and manage LinkedIn profile and company pages",
1119
+ category: "Social Media"
1120
+ },
1121
+ neon: {
1122
+ description: "Manage Neon Postgres projects, branches, and databases",
1123
+ category: "Infrastructure"
1124
+ },
1125
+ planetscale: {
1126
+ description: "Manage PlanetScale databases, branches, and schema changes",
1127
+ category: "Infrastructure"
1128
+ },
1129
+ salesforce: {
1130
+ description: "Manage Salesforce accounts, contacts, opportunities, and cases",
1131
+ category: "Business"
1132
+ },
1133
+ sharepoint: {
1134
+ description: "Manage SharePoint sites, lists, documents, and permissions",
1135
+ category: "Productivity"
1136
+ },
1137
+ shopify: {
1138
+ description: "Manage Shopify products, orders, customers, and inventory",
1139
+ category: "Business"
1140
+ },
1141
+ teams: {
1142
+ description: "Send messages and manage Microsoft Teams channels and meetings",
1143
+ category: "Communication"
1144
+ },
1145
+ threads: {
1146
+ description: "Post and manage content on Threads (Meta)",
1147
+ category: "Social Media"
1148
+ },
1149
+ tiktok: {
1150
+ description: "Manage TikTok videos, account info, and creator analytics",
1151
+ category: "Social Media"
1152
+ },
1153
+ tldraw: {
1154
+ description: "Create and manage tldraw collaborative whiteboards",
1155
+ category: "Productivity"
1156
+ },
1157
+ trello: {
1158
+ description: "Manage Trello boards, lists, and cards",
1159
+ category: "Productivity"
1160
+ },
1161
+ typeform: {
1162
+ description: "Create and manage Typeform surveys and responses",
1163
+ category: "Business"
1164
+ },
1165
+ webflow: {
1166
+ description: "Manage Webflow sites, collections, and CMS content",
1167
+ category: "Engineering"
1168
+ },
1169
+ workday: {
1170
+ description: "Read Workday HR data including workers, organizations, and pay",
1171
+ category: "Business"
1172
+ },
1173
+ xero: {
1174
+ description: "Manage Xero invoices, contacts, and accounting data",
1175
+ category: "Finance"
1176
+ },
1177
+ zapier: {
1178
+ description: "Trigger and manage Zapier automation workflows",
1179
+ category: "Engineering"
964
1180
  }
965
1181
  };
966
1182
  function integrationLibraryPresentationFields(integration) {
@@ -1551,6 +1767,146 @@ async function fetchNotionEmail(accessToken) {
1551
1767
  }
1552
1768
  }
1553
1769
 
1770
+ // src/oauth/refresh.ts
1771
+ class RefreshRejectedError extends Error {
1772
+ provider;
1773
+ constructor(provider, message) {
1774
+ super(message ?? `OAuth refresh rejected (invalid_grant) for ${provider}`);
1775
+ this.name = "RefreshRejectedError";
1776
+ this.provider = provider;
1777
+ }
1778
+ }
1779
+
1780
+ class RefreshTransientError extends Error {
1781
+ provider;
1782
+ constructor(provider, message) {
1783
+ super(message);
1784
+ this.name = "RefreshTransientError";
1785
+ this.provider = provider;
1786
+ }
1787
+ }
1788
+ var DEFAULT_REFRESH_WINDOW_MS = 2 * 60 * 1000;
1789
+ function shouldRefreshToken(tokenData, windowMs = DEFAULT_REFRESH_WINDOW_MS) {
1790
+ if (!tokenData || !tokenData.refreshToken || !tokenData.expiresAt) {
1791
+ return false;
1792
+ }
1793
+ const expiresAtMs = Date.parse(tokenData.expiresAt);
1794
+ if (Number.isNaN(expiresAtMs)) {
1795
+ return false;
1796
+ }
1797
+ return expiresAtMs - Date.now() <= windowMs;
1798
+ }
1799
+ async function refreshViaMcp(opts) {
1800
+ const url = new URL("/oauth/refresh", opts.serverUrl);
1801
+ const body = {
1802
+ provider: opts.provider,
1803
+ refresh_token: opts.refreshToken,
1804
+ client_id: opts.clientId
1805
+ };
1806
+ if (opts.clientSecret) {
1807
+ body.client_secret = opts.clientSecret;
1808
+ }
1809
+ if (opts.subdomain) {
1810
+ body.subdomain = opts.subdomain;
1811
+ }
1812
+ if (opts.extraConfig) {
1813
+ for (const [key, value] of Object.entries(opts.extraConfig)) {
1814
+ if (body[key] === undefined) {
1815
+ body[key] = value;
1816
+ }
1817
+ }
1818
+ }
1819
+ const headers = { "Content-Type": "application/json" };
1820
+ if (opts.apiKey) {
1821
+ headers["X-API-KEY"] = opts.apiKey;
1822
+ }
1823
+ let response;
1824
+ try {
1825
+ response = await fetch(url.toString(), {
1826
+ method: "POST",
1827
+ headers,
1828
+ body: JSON.stringify(body),
1829
+ signal: opts.signal
1830
+ });
1831
+ } catch (err) {
1832
+ throw new RefreshTransientError(opts.provider, `Network error refreshing ${opts.provider} token: ${err.message}`);
1833
+ }
1834
+ if (response.status === 401) {
1835
+ let parsed = {};
1836
+ try {
1837
+ parsed = await response.json();
1838
+ } catch {}
1839
+ if (parsed.error === "invalid_grant") {
1840
+ throw new RefreshRejectedError(opts.provider);
1841
+ }
1842
+ throw new RefreshTransientError(opts.provider, `Refresh endpoint returned 401`);
1843
+ }
1844
+ if (!response.ok) {
1845
+ let text = "";
1846
+ try {
1847
+ text = await response.text();
1848
+ } catch {}
1849
+ throw new RefreshTransientError(opts.provider, `Refresh endpoint returned ${response.status}: ${text || "<no body>"}`);
1850
+ }
1851
+ let result;
1852
+ try {
1853
+ result = await response.json();
1854
+ } catch (err) {
1855
+ throw new RefreshTransientError(opts.provider, `Malformed refresh response: ${err.message}`);
1856
+ }
1857
+ if (!result.accessToken) {
1858
+ throw new RefreshTransientError(opts.provider, `Refresh response missing access_token`);
1859
+ }
1860
+ if (!result.refreshToken) {
1861
+ result.refreshToken = opts.refreshToken;
1862
+ }
1863
+ return result;
1864
+ }
1865
+ async function resolveAccessToken(opts) {
1866
+ const { provider, currentTokens, force = false } = opts;
1867
+ const needsRefresh = force || shouldRefreshToken(currentTokens, opts.windowMs);
1868
+ if (!needsRefresh || !currentTokens.refreshToken) {
1869
+ return currentTokens.accessToken;
1870
+ }
1871
+ try {
1872
+ const refreshed = await refreshViaMcp({
1873
+ provider,
1874
+ refreshToken: currentTokens.refreshToken,
1875
+ clientId: opts.providerOAuth.clientId,
1876
+ clientSecret: opts.providerOAuth.clientSecret,
1877
+ subdomain: opts.providerOAuth.subdomain,
1878
+ extraConfig: opts.providerOAuth.extraConfig,
1879
+ serverUrl: opts.serverUrl,
1880
+ apiKey: opts.apiKey
1881
+ });
1882
+ const updated = {
1883
+ ...currentTokens,
1884
+ accessToken: refreshed.accessToken,
1885
+ refreshToken: refreshed.refreshToken ?? currentTokens.refreshToken,
1886
+ tokenType: refreshed.tokenType || currentTokens.tokenType,
1887
+ expiresIn: refreshed.expiresIn ?? currentTokens.expiresIn,
1888
+ expiresAt: refreshed.expiresAt ?? currentTokens.expiresAt,
1889
+ scopes: refreshed.scopes && refreshed.scopes.length > 0 ? refreshed.scopes : currentTokens.scopes
1890
+ };
1891
+ if (opts.setProviderToken) {
1892
+ try {
1893
+ await opts.setProviderToken(provider, updated, updated.email, opts.context);
1894
+ } catch {}
1895
+ }
1896
+ return updated.accessToken;
1897
+ } catch (err) {
1898
+ if (err instanceof RefreshRejectedError) {
1899
+ if (opts.setProviderToken) {
1900
+ try {
1901
+ await opts.setProviderToken(provider, null, currentTokens.email, opts.context);
1902
+ } catch {}
1903
+ }
1904
+ throw err;
1905
+ }
1906
+ return currentTokens.accessToken;
1907
+ }
1908
+ }
1909
+
1554
1910
  // src/oauth/manager.ts
1555
1911
  var logger4 = createLogger("OAuth");
1556
1912
 
@@ -1566,7 +1922,10 @@ class OAuthManager {
1566
1922
  removeTokenCallback;
1567
1923
  indexedDBStorage;
1568
1924
  skipLocalStorage = false;
1569
- constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks) {
1925
+ providerOAuth = {};
1926
+ mcpServerUrl;
1927
+ mcpApiKey;
1928
+ constructor(oauthApiBase, flowConfig, apiBaseUrl, tokenCallbacks, refreshConfig) {
1570
1929
  this.oauthApiBase = oauthApiBase;
1571
1930
  this.apiBaseUrl = apiBaseUrl;
1572
1931
  this.windowManager = new OAuthWindowManager;
@@ -1578,6 +1937,9 @@ class OAuthManager {
1578
1937
  this.getTokenCallback = tokenCallbacks?.getProviderToken;
1579
1938
  this.setTokenCallback = tokenCallbacks?.setProviderToken;
1580
1939
  this.removeTokenCallback = tokenCallbacks?.removeProviderToken;
1940
+ this.providerOAuth = refreshConfig?.providers ?? {};
1941
+ this.mcpServerUrl = refreshConfig?.mcpServerUrl;
1942
+ this.mcpApiKey = refreshConfig?.apiKey;
1581
1943
  this.indexedDBStorage = new IndexedDBStorage;
1582
1944
  this.cleanupExpiredPendingAuths();
1583
1945
  }
@@ -1787,7 +2149,9 @@ class OAuthManager {
1787
2149
  try {
1788
2150
  const tokenData = await this.getTokenCallback(provider, email, context);
1789
2151
  if (tokenData) {
1790
- this.providerTokens.set(provider, tokenData);
2152
+ const refreshed = await this.maybeRefreshTokenData(provider, tokenData, context);
2153
+ this.providerTokens.set(provider, refreshed);
2154
+ return refreshed;
1791
2155
  }
1792
2156
  return tokenData;
1793
2157
  } catch (error) {
@@ -1827,6 +2191,59 @@ class OAuthManager {
1827
2191
  }
1828
2192
  await this.saveProviderToken(provider, tokenData, tokenEmail, context);
1829
2193
  }
2194
+ configureTokenRefresh(refreshConfig) {
2195
+ if (refreshConfig.providers) {
2196
+ this.providerOAuth = refreshConfig.providers;
2197
+ }
2198
+ if (refreshConfig.mcpServerUrl !== undefined) {
2199
+ this.mcpServerUrl = refreshConfig.mcpServerUrl;
2200
+ }
2201
+ if (refreshConfig.apiKey !== undefined) {
2202
+ this.mcpApiKey = refreshConfig.apiKey;
2203
+ }
2204
+ }
2205
+ async maybeRefreshTokenData(provider, tokenData, context) {
2206
+ const credentials = this.providerOAuth[provider];
2207
+ const serverUrl = this.mcpServerUrl;
2208
+ if (!credentials || !serverUrl) {
2209
+ return tokenData;
2210
+ }
2211
+ if (!shouldRefreshToken(tokenData)) {
2212
+ return tokenData;
2213
+ }
2214
+ try {
2215
+ const newAccessToken = await resolveAccessToken({
2216
+ provider,
2217
+ currentTokens: tokenData,
2218
+ providerOAuth: {
2219
+ clientId: credentials.clientId,
2220
+ clientSecret: credentials.clientSecret,
2221
+ subdomain: credentials.config?.subdomain
2222
+ },
2223
+ serverUrl,
2224
+ apiKey: this.mcpApiKey,
2225
+ setProviderToken: this.setTokenCallback,
2226
+ context
2227
+ });
2228
+ if (newAccessToken === tokenData.accessToken) {
2229
+ return tokenData;
2230
+ }
2231
+ if (this.getTokenCallback) {
2232
+ try {
2233
+ const reloaded = await this.getTokenCallback(provider, tokenData.email, context);
2234
+ if (reloaded) {
2235
+ return reloaded;
2236
+ }
2237
+ } catch {}
2238
+ }
2239
+ return { ...tokenData, accessToken: newAccessToken };
2240
+ } catch (err) {
2241
+ if (err instanceof RefreshRejectedError) {
2242
+ throw err;
2243
+ }
2244
+ return tokenData;
2245
+ }
2246
+ }
1830
2247
  clearProviderToken(provider) {
1831
2248
  this.providerTokens.delete(provider);
1832
2249
  if (!this.setTokenCallback && !this.removeTokenCallback && !this.skipLocalStorage) {
@@ -2285,10 +2702,26 @@ class MCPClientBase {
2285
2702
  };
2286
2703
  this.onReauthRequired = config.onReauthRequired;
2287
2704
  this.maxReauthRetries = config.maxReauthRetries ?? 1;
2705
+ const refreshProviders = {};
2706
+ for (const integration of this.integrations) {
2707
+ const oauth = integration?.oauth;
2708
+ if (oauth?.clientId && oauth?.provider) {
2709
+ refreshProviders[oauth.provider] = {
2710
+ clientId: oauth.clientId,
2711
+ clientSecret: oauth.clientSecret,
2712
+ config: oauth.config
2713
+ };
2714
+ }
2715
+ }
2716
+ const mcpServerUrl = config.serverUrl;
2288
2717
  this.oauthManager = new OAuthManager(oauthApiBase, config.oauthFlow, this.apiBaseUrl, {
2289
2718
  getProviderToken: config.getProviderToken,
2290
2719
  setProviderToken: config.setProviderToken,
2291
2720
  removeProviderToken: config.removeProviderToken
2721
+ }, {
2722
+ providers: refreshProviders,
2723
+ mcpServerUrl,
2724
+ apiKey: config.apiKey
2292
2725
  });
2293
2726
  this.setSessionToken(config.sessionToken || this.loadSessionTokenFromStorage());
2294
2727
  for (const integration of this.integrations) {
@@ -2349,56 +2782,8 @@ class MCPClientBase {
2349
2782
  }
2350
2783
  }
2351
2784
  const integrationIds = this.integrations.map((i) => i.id);
2352
- if (integrationIds.includes("github")) {
2353
- this.github = this.createIntegrationProxy("github");
2354
- }
2355
- if (integrationIds.includes("gmail")) {
2356
- this.gmail = this.createIntegrationProxy("gmail");
2357
- }
2358
- if (integrationIds.includes("notion")) {
2359
- this.notion = this.createIntegrationProxy("notion");
2360
- }
2361
- if (integrationIds.includes("slack")) {
2362
- this.slack = this.createIntegrationProxy("slack");
2363
- }
2364
- if (integrationIds.includes("linear")) {
2365
- this.linear = this.createIntegrationProxy("linear");
2366
- }
2367
- if (integrationIds.includes("railway")) {
2368
- this.railway = this.createIntegrationProxy("railway");
2369
- }
2370
- if (integrationIds.includes("vercel")) {
2371
- this.vercel = this.createIntegrationProxy("vercel");
2372
- }
2373
- if (integrationIds.includes("zendesk")) {
2374
- this.zendesk = this.createIntegrationProxy("zendesk");
2375
- }
2376
- if (integrationIds.includes("stripe")) {
2377
- this.stripe = this.createIntegrationProxy("stripe");
2378
- }
2379
- if (integrationIds.includes("gcal")) {
2380
- this.gcal = this.createIntegrationProxy("gcal");
2381
- }
2382
- if (integrationIds.includes("outlook")) {
2383
- this.outlook = this.createIntegrationProxy("outlook");
2384
- }
2385
- if (integrationIds.includes("airtable")) {
2386
- this.airtable = this.createIntegrationProxy("airtable");
2387
- }
2388
- if (integrationIds.includes("todoist")) {
2389
- this.todoist = this.createIntegrationProxy("todoist");
2390
- }
2391
- if (integrationIds.includes("gdocs")) {
2392
- this.gdocs = this.createIntegrationProxy("gdocs");
2393
- }
2394
- if (integrationIds.includes("gsheets")) {
2395
- this.gsheets = this.createIntegrationProxy("gsheets");
2396
- }
2397
- if (integrationIds.includes("gslides")) {
2398
- this.gslides = this.createIntegrationProxy("gslides");
2399
- }
2400
- if (integrationIds.includes("posthog")) {
2401
- this.posthog = this.createIntegrationProxy("posthog");
2785
+ for (const id of integrationIds) {
2786
+ this[id] = this.createIntegrationProxy(id);
2402
2787
  }
2403
2788
  this.server = this.createServerProxy();
2404
2789
  this.trigger = new TriggerClient({
@@ -4115,6 +4500,7 @@ var GITHUB_TOOLS = [
4115
4500
  "github_create_repo",
4116
4501
  "github_list_branches",
4117
4502
  "github_create_branch",
4503
+ "github_get_authenticated_user",
4118
4504
  "github_get_user",
4119
4505
  "github_list_commits",
4120
4506
  "github_get_commit",
@@ -4178,14 +4564,16 @@ function githubIntegration(config = {}) {
4178
4564
  // src/integrations/gmail.ts
4179
4565
  var logger10 = createLogger("Gmail");
4180
4566
  var GMAIL_TOOLS = [
4181
- "gmail_send_message",
4182
- "gmail_list_messages",
4567
+ "gmail_create_draft",
4568
+ "gmail_get_attachment",
4183
4569
  "gmail_get_message",
4184
- "gmail_search_messages",
4185
- "gmail_reply_message",
4186
- "gmail_list_threads",
4187
4570
  "gmail_get_thread",
4571
+ "gmail_list_messages",
4572
+ "gmail_list_threads",
4188
4573
  "gmail_modify_message",
4574
+ "gmail_reply_message",
4575
+ "gmail_search_messages",
4576
+ "gmail_send_message",
4189
4577
  "gmail_trash_message"
4190
4578
  ];
4191
4579
  function gmailIntegration(config = {}) {
@@ -4346,8 +4734,48 @@ function slackIntegration(config = {}) {
4346
4734
  }
4347
4735
  };
4348
4736
  }
4737
+ // src/integrations/discord.ts
4738
+ var logger13 = createLogger("Discord");
4739
+ var DISCORD_TOOLS = [
4740
+ "discord_get_current_user",
4741
+ "discord_list_my_guilds",
4742
+ "discord_get_guild",
4743
+ "discord_list_guild_channels",
4744
+ "discord_get_channel",
4745
+ "discord_send_message",
4746
+ "discord_list_messages",
4747
+ "discord_edit_message",
4748
+ "discord_delete_message"
4749
+ ];
4750
+ function discordIntegration(config = {}) {
4751
+ const oauth = {
4752
+ provider: "discord",
4753
+ clientId: config.clientId ?? getEnv("DISCORD_CLIENT_ID"),
4754
+ clientSecret: config.clientSecret ?? getEnv("DISCORD_CLIENT_SECRET"),
4755
+ scopes: config.scopes ?? ["identify", "email", "guilds", "bot", "applications.commands"],
4756
+ redirectUri: config.redirectUri,
4757
+ config: {
4758
+ ...config
4759
+ }
4760
+ };
4761
+ return {
4762
+ id: "discord",
4763
+ name: "Discord",
4764
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/discord.png",
4765
+ description: "Send and manage Discord messages; list guilds and channels (bot token required on server for channel APIs)",
4766
+ category: "Communication",
4767
+ tools: [...DISCORD_TOOLS],
4768
+ oauth,
4769
+ async onInit(_client) {
4770
+ logger13.debug("Discord integration initialized");
4771
+ },
4772
+ async onAfterConnect(_client) {
4773
+ logger13.debug("Discord integration connected");
4774
+ }
4775
+ };
4776
+ }
4349
4777
  // src/integrations/linear.ts
4350
- var logger13 = createLogger("Linear");
4778
+ var logger14 = createLogger("Linear");
4351
4779
  var LINEAR_TOOLS = [
4352
4780
  "linear_create_issue",
4353
4781
  "linear_list_issues",
@@ -4402,15 +4830,15 @@ function linearIntegration(config = {}) {
4402
4830
  tools: [...LINEAR_TOOLS],
4403
4831
  oauth,
4404
4832
  async onInit(_client) {
4405
- logger13.debug("Linear integration initialized");
4833
+ logger14.debug("Linear integration initialized");
4406
4834
  },
4407
4835
  async onAfterConnect(_client) {
4408
- logger13.debug("Linear integration connected");
4836
+ logger14.debug("Linear integration connected");
4409
4837
  }
4410
4838
  };
4411
4839
  }
4412
4840
  // src/integrations/railway.ts
4413
- var logger14 = createLogger("Railway");
4841
+ var logger15 = createLogger("Railway");
4414
4842
  var RAILWAY_SCOPES = [
4415
4843
  "openid",
4416
4844
  "profile",
@@ -4515,15 +4943,15 @@ function railwayIntegration(config = {}) {
4515
4943
  tools: [...RAILWAY_TOOLS],
4516
4944
  oauth,
4517
4945
  async onInit(_client) {
4518
- logger14.debug("Railway integration initialized");
4946
+ logger15.debug("Railway integration initialized");
4519
4947
  },
4520
4948
  async onAfterConnect(_client) {
4521
- logger14.debug("Railway integration connected");
4949
+ logger15.debug("Railway integration connected");
4522
4950
  }
4523
4951
  };
4524
4952
  }
4525
4953
  // src/integrations/vercel.ts
4526
- var logger15 = createLogger("Vercel");
4954
+ var logger16 = createLogger("Vercel");
4527
4955
  var VERCEL_TOOLS = [
4528
4956
  "vercel_list_projects",
4529
4957
  "vercel_get_project",
@@ -4566,15 +4994,15 @@ function vercelIntegration(config = {}) {
4566
4994
  tools: [...VERCEL_TOOLS],
4567
4995
  oauth,
4568
4996
  async onInit(_client) {
4569
- logger15.debug("Vercel integration initialized");
4997
+ logger16.debug("Vercel integration initialized");
4570
4998
  },
4571
4999
  async onAfterConnect(_client) {
4572
- logger15.debug("Vercel integration connected");
5000
+ logger16.debug("Vercel integration connected");
4573
5001
  }
4574
5002
  };
4575
5003
  }
4576
5004
  // src/integrations/zendesk.ts
4577
- var logger16 = createLogger("Zendesk");
5005
+ var logger17 = createLogger("Zendesk");
4578
5006
  var ZENDESK_TOOLS = [
4579
5007
  "zendesk_list_tickets",
4580
5008
  "zendesk_get_ticket",
@@ -4623,15 +5051,15 @@ function zendeskIntegration(config = {}) {
4623
5051
  tools: [...ZENDESK_TOOLS],
4624
5052
  oauth,
4625
5053
  async onInit(_client) {
4626
- logger16.debug("Zendesk integration initialized");
5054
+ logger17.debug("Zendesk integration initialized");
4627
5055
  },
4628
5056
  async onAfterConnect(_client) {
4629
- logger16.debug("Zendesk integration connected");
5057
+ logger17.debug("Zendesk integration connected");
4630
5058
  }
4631
5059
  };
4632
5060
  }
4633
5061
  // src/integrations/stripe.ts
4634
- var logger17 = createLogger("Stripe");
5062
+ var logger18 = createLogger("Stripe");
4635
5063
  var STRIPE_TOOLS = [
4636
5064
  "stripe_list_customers",
4637
5065
  "stripe_get_customer",
@@ -4650,6 +5078,7 @@ var STRIPE_TOOLS = [
4650
5078
  "stripe_update_subscription",
4651
5079
  "stripe_cancel_subscription",
4652
5080
  "stripe_list_invoices",
5081
+ "stripe_get_invoice",
4653
5082
  "stripe_create_invoice",
4654
5083
  "stripe_finalize_invoice",
4655
5084
  "stripe_pay_invoice",
@@ -4687,27 +5116,28 @@ function stripeIntegration(config = {}) {
4687
5116
  tools: [...STRIPE_TOOLS],
4688
5117
  oauth,
4689
5118
  async onInit(_client) {
4690
- logger17.debug("Stripe integration initialized");
5119
+ logger18.debug("Stripe integration initialized");
4691
5120
  },
4692
5121
  async onAfterConnect(_client) {
4693
- logger17.debug("Stripe integration connected");
5122
+ logger18.debug("Stripe integration connected");
4694
5123
  }
4695
5124
  };
4696
5125
  }
4697
5126
  // src/integrations/gcal.ts
4698
- var logger18 = createLogger("Google Calendar");
5127
+ var logger19 = createLogger("Google Calendar");
4699
5128
  var GCAL_TOOLS = [
4700
- "gcal_list_calendars",
4701
- "gcal_get_calendar",
4702
- "gcal_list_events",
4703
- "gcal_get_event",
5129
+ "gcal_create_calendar",
4704
5130
  "gcal_create_event",
4705
- "gcal_update_event",
5131
+ "gcal_delete_calendar",
4706
5132
  "gcal_delete_event",
5133
+ "gcal_freebusy",
5134
+ "gcal_get_calendar",
5135
+ "gcal_get_event",
4707
5136
  "gcal_list_attendees",
5137
+ "gcal_list_calendars",
5138
+ "gcal_list_events",
4708
5139
  "gcal_quick_add",
4709
- "gcal_create_calendar",
4710
- "gcal_delete_calendar"
5140
+ "gcal_update_event"
4711
5141
  ];
4712
5142
  function gcalIntegration(config = {}) {
4713
5143
  const oauth = {
@@ -4728,41 +5158,127 @@ function gcalIntegration(config = {}) {
4728
5158
  tools: [...GCAL_TOOLS],
4729
5159
  oauth,
4730
5160
  async onInit(_client) {
4731
- logger18.debug("Google Calendar integration initialized");
5161
+ logger19.debug("Google Calendar integration initialized");
4732
5162
  },
4733
5163
  async onAfterConnect(_client) {
4734
- logger18.debug("Google Calendar integration connected");
5164
+ logger19.debug("Google Calendar integration connected");
4735
5165
  }
4736
5166
  };
4737
5167
  }
4738
- // src/integrations/outlook.ts
4739
- var logger19 = createLogger("Outlook");
4740
- var OUTLOOK_TOOLS = [
4741
- "outlook_list_messages",
4742
- "outlook_get_message",
4743
- "outlook_send_message",
4744
- "outlook_search_messages",
4745
- "outlook_reply_message",
4746
- "outlook_reply_all_message",
4747
- "outlook_forward_message",
4748
- "outlook_delete_message",
4749
- "outlook_move_message",
4750
- "outlook_mark_message_read",
4751
- "outlook_create_draft",
4752
- "outlook_list_mail_folders",
4753
- "outlook_list_events",
4754
- "outlook_get_event",
4755
- "outlook_create_event",
4756
- "outlook_update_event",
4757
- "outlook_delete_event",
4758
- "outlook_list_calendars",
4759
- "outlook_accept_event",
4760
- "outlook_decline_event",
4761
- "outlook_tentatively_accept_event",
4762
- "outlook_find_meeting_times",
4763
- "outlook_get_schedule",
4764
- "outlook_list_contacts",
4765
- "outlook_get_contact"
5168
+ // src/integrations/gtasks.ts
5169
+ var logger20 = createLogger("Google Tasks");
5170
+ var GTASKS_TOOLS = [
5171
+ "gtasks_clear_completed",
5172
+ "gtasks_create_task",
5173
+ "gtasks_create_tasklist",
5174
+ "gtasks_delete_task",
5175
+ "gtasks_delete_tasklist",
5176
+ "gtasks_get_task",
5177
+ "gtasks_get_tasklist",
5178
+ "gtasks_list_tasklists",
5179
+ "gtasks_list_tasks",
5180
+ "gtasks_move_task",
5181
+ "gtasks_update_task",
5182
+ "gtasks_update_tasklist"
5183
+ ];
5184
+ function gtasksIntegration(config = {}) {
5185
+ const oauth = {
5186
+ provider: "gtasks",
5187
+ clientId: config.clientId ?? getEnv("GTASKS_CLIENT_ID"),
5188
+ clientSecret: config.clientSecret ?? getEnv("GTASKS_CLIENT_SECRET"),
5189
+ scopes: config.scopes,
5190
+ optionalScopes: config.optionalScopes,
5191
+ redirectUri: config.redirectUri,
5192
+ config: {
5193
+ ...config
5194
+ }
5195
+ };
5196
+ return {
5197
+ id: "gtasks",
5198
+ name: "Google Tasks",
5199
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_tasks.webp",
5200
+ description: "Manage Google Tasks lists and to-dos synced with your Google account",
5201
+ category: "Productivity",
5202
+ tools: [...GTASKS_TOOLS],
5203
+ oauth,
5204
+ async onInit(_client) {
5205
+ logger20.debug("Google Tasks integration initialized");
5206
+ },
5207
+ async onAfterConnect(_client) {
5208
+ logger20.debug("Google Tasks integration connected");
5209
+ }
5210
+ };
5211
+ }
5212
+ // src/integrations/gcontacts.ts
5213
+ var logger21 = createLogger("Google Contacts");
5214
+ var GCONTACTS_TOOLS = [
5215
+ "gcontacts_batch_get_contacts",
5216
+ "gcontacts_copy_other_contact",
5217
+ "gcontacts_create_contact",
5218
+ "gcontacts_delete_contact",
5219
+ "gcontacts_get_person",
5220
+ "gcontacts_get_self",
5221
+ "gcontacts_list_connections",
5222
+ "gcontacts_list_other_contacts",
5223
+ "gcontacts_search_contacts",
5224
+ "gcontacts_update_contact"
5225
+ ];
5226
+ function gcontactsIntegration(config = {}) {
5227
+ const oauth = {
5228
+ provider: "gcontacts",
5229
+ clientId: config.clientId ?? getEnv("GCONTACTS_CLIENT_ID"),
5230
+ clientSecret: config.clientSecret ?? getEnv("GCONTACTS_CLIENT_SECRET"),
5231
+ scopes: config.scopes,
5232
+ optionalScopes: config.optionalScopes,
5233
+ redirectUri: config.redirectUri,
5234
+ config: {
5235
+ ...config
5236
+ }
5237
+ };
5238
+ return {
5239
+ id: "gcontacts",
5240
+ name: "Google Contacts",
5241
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/gcontacts.png",
5242
+ description: "List, search, create, update, and delete Google Contacts via the People API",
5243
+ category: "Communication",
5244
+ tools: [...GCONTACTS_TOOLS],
5245
+ oauth,
5246
+ async onInit(_client) {
5247
+ logger21.debug("Google Contacts integration initialized");
5248
+ },
5249
+ async onAfterConnect(_client) {
5250
+ logger21.debug("Google Contacts integration connected");
5251
+ }
5252
+ };
5253
+ }
5254
+ // src/integrations/outlook.ts
5255
+ var logger22 = createLogger("Outlook");
5256
+ var OUTLOOK_TOOLS = [
5257
+ "outlook_accept_event",
5258
+ "outlook_create_draft",
5259
+ "outlook_create_event",
5260
+ "outlook_decline_event",
5261
+ "outlook_delete_event",
5262
+ "outlook_delete_message",
5263
+ "outlook_find_meeting_times",
5264
+ "outlook_forward_message",
5265
+ "outlook_get_contact",
5266
+ "outlook_get_event",
5267
+ "outlook_get_message",
5268
+ "outlook_get_schedule",
5269
+ "outlook_list_calendars",
5270
+ "outlook_list_contacts",
5271
+ "outlook_list_events",
5272
+ "outlook_list_mail_folders",
5273
+ "outlook_list_messages",
5274
+ "outlook_mark_message_read",
5275
+ "outlook_move_message",
5276
+ "outlook_reply_all_message",
5277
+ "outlook_reply_message",
5278
+ "outlook_search_messages",
5279
+ "outlook_send_message",
5280
+ "outlook_tentatively_accept_event",
5281
+ "outlook_update_event"
4766
5282
  ];
4767
5283
  function outlookIntegration(config = {}) {
4768
5284
  const oauth = {
@@ -4783,15 +5299,73 @@ function outlookIntegration(config = {}) {
4783
5299
  tools: [...OUTLOOK_TOOLS],
4784
5300
  oauth,
4785
5301
  async onInit(_client) {
4786
- logger19.debug("Outlook integration initialized");
5302
+ logger22.debug("Outlook integration initialized");
5303
+ },
5304
+ async onAfterConnect(_client) {
5305
+ logger22.debug("Outlook integration connected");
5306
+ }
5307
+ };
5308
+ }
5309
+ // src/integrations/teams.ts
5310
+ var logger23 = createLogger("Teams");
5311
+ var TEAMS_SCOPES = [
5312
+ "offline_access",
5313
+ "User.Read",
5314
+ "Team.ReadBasic.All",
5315
+ "Channel.ReadBasic.All",
5316
+ "ChannelMessage.Read.All",
5317
+ "ChannelMessage.Send",
5318
+ "Chat.Read",
5319
+ "Chat.ReadWrite"
5320
+ ];
5321
+ var TEAMS_TOOLS = [
5322
+ "teams_get_channel",
5323
+ "teams_get_chat",
5324
+ "teams_get_profile",
5325
+ "teams_get_team",
5326
+ "teams_list_channel_messages",
5327
+ "teams_list_channels",
5328
+ "teams_list_chat_messages",
5329
+ "teams_list_chats",
5330
+ "teams_list_teams",
5331
+ "teams_reply_channel_message",
5332
+ "teams_send_channel_message",
5333
+ "teams_send_chat_message"
5334
+ ];
5335
+ function teamsIntegration(config = {}) {
5336
+ const oauth = {
5337
+ provider: "teams",
5338
+ clientId: config.clientId ?? getEnv("TEAMS_CLIENT_ID"),
5339
+ clientSecret: config.clientSecret ?? getEnv("TEAMS_CLIENT_SECRET"),
5340
+ scopes: config.scopes ?? [...TEAMS_SCOPES],
5341
+ optionalScopes: config.optionalScopes,
5342
+ redirectUri: config.redirectUri,
5343
+ config: {
5344
+ ...config,
5345
+ authorization_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
5346
+ token_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
5347
+ response_type: "code",
5348
+ grant_types_supported: ["authorization_code", "refresh_token"]
5349
+ }
5350
+ };
5351
+ return {
5352
+ id: "teams",
5353
+ name: "Microsoft Teams",
5354
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/teams.png",
5355
+ description: "Collaborate in Teams channels and chats using Microsoft Graph — teams, channels, messages, and profile.",
5356
+ category: "Communication",
5357
+ tools: [...TEAMS_TOOLS],
5358
+ oauth,
5359
+ async onInit(_client) {
5360
+ logger23.debug("Teams integration initialized");
4787
5361
  },
4788
5362
  async onAfterConnect(_client) {
4789
- logger19.debug("Outlook integration connected");
5363
+ logger23.debug("Teams integration connected");
4790
5364
  }
4791
5365
  };
4792
5366
  }
4793
5367
  // src/integrations/airtable.ts
4794
- var logger20 = createLogger("Airtable");
5368
+ var logger24 = createLogger("Airtable");
4795
5369
  var AIRTABLE_TOOLS = [
4796
5370
  "airtable_list_bases",
4797
5371
  "airtable_get_base",
@@ -4837,15 +5411,99 @@ function airtableIntegration(config = {}) {
4837
5411
  tools: [...AIRTABLE_TOOLS],
4838
5412
  oauth,
4839
5413
  async onInit(_client) {
4840
- logger20.debug("Airtable integration initialized");
5414
+ logger24.debug("Airtable integration initialized");
5415
+ },
5416
+ async onAfterConnect(_client) {
5417
+ logger24.debug("Airtable integration connected");
5418
+ }
5419
+ };
5420
+ }
5421
+ // src/integrations/astronomer.ts
5422
+ var logger25 = createLogger("Astronomer");
5423
+ var ASTRONOMER_TOOLS = [
5424
+ "astronomer_get_self",
5425
+ "astronomer_list_organizations",
5426
+ "astronomer_get_organization",
5427
+ "astronomer_list_workspaces",
5428
+ "astronomer_get_workspace",
5429
+ "astronomer_list_clusters",
5430
+ "astronomer_get_cluster",
5431
+ "astronomer_list_deployments",
5432
+ "astronomer_get_deployment",
5433
+ "astronomer_create_deployment",
5434
+ "astronomer_update_deployment",
5435
+ "astronomer_list_deploys",
5436
+ "astronomer_get_deploy"
5437
+ ];
5438
+ function astronomerIntegration(options = {}) {
5439
+ const apiToken = options.apiToken ?? getEnv("ASTRO_API_TOKEN") ?? getEnv("ASTRONOMER_API_TOKEN");
5440
+ if (!apiToken) {
5441
+ throw new Error("astronomerIntegration requires apiToken or ASTRO_API_TOKEN / ASTRONOMER_API_TOKEN environment variable");
5442
+ }
5443
+ return {
5444
+ id: "astronomer",
5445
+ name: "Astronomer",
5446
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/astronomer.png",
5447
+ description: "Manage Astro organizations, workspaces, deployments, clusters, and deploy history via the Astro API v1",
5448
+ category: "Infrastructure",
5449
+ tools: [...ASTRONOMER_TOOLS],
5450
+ authType: "apiKey",
5451
+ getHeaders() {
5452
+ return {
5453
+ Authorization: `Bearer ${apiToken}`
5454
+ };
5455
+ },
5456
+ async onInit(_client) {
5457
+ logger25.debug("Astronomer integration initialized");
5458
+ },
5459
+ async onAfterConnect(_client) {
5460
+ logger25.debug("Astronomer integration connected");
5461
+ }
5462
+ };
5463
+ }
5464
+ // src/integrations/betterstack.ts
5465
+ var logger26 = createLogger("BetterStack");
5466
+ var BETTERSTACK_TOOLS = [
5467
+ "betterstack_list_sources",
5468
+ "betterstack_get_source",
5469
+ "betterstack_create_source",
5470
+ "betterstack_update_source",
5471
+ "betterstack_delete_source",
5472
+ "betterstack_list_source_groups",
5473
+ "betterstack_get_source_group",
5474
+ "betterstack_update_source_group",
5475
+ "betterstack_list_collectors",
5476
+ "betterstack_list_source_metrics",
5477
+ "betterstack_ingest_logs"
5478
+ ];
5479
+ function betterstackIntegration(options = {}) {
5480
+ const apiKey = options.apiKey ?? getEnv("BETTERSTACK_API_KEY");
5481
+ if (!apiKey) {
5482
+ throw new Error("betterstackIntegration requires apiKey or BETTERSTACK_API_KEY environment variable");
5483
+ }
5484
+ return {
5485
+ id: "betterstack",
5486
+ name: "Better Stack",
5487
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/betterstack.png",
5488
+ description: "Ingest and manage log sources, collectors, and metrics with Better Stack Logs (Logtail) Telemetry API",
5489
+ category: "Infrastructure",
5490
+ tools: [...BETTERSTACK_TOOLS],
5491
+ authType: "apiKey",
5492
+ getHeaders() {
5493
+ return {
5494
+ Authorization: `Bearer ${apiKey}`
5495
+ };
5496
+ },
5497
+ async onInit(_client) {
5498
+ logger26.debug("Better Stack integration initialized");
4841
5499
  },
4842
5500
  async onAfterConnect(_client) {
4843
- logger20.debug("Airtable integration connected");
5501
+ logger26.debug("Better Stack integration connected");
4844
5502
  }
4845
5503
  };
4846
5504
  }
4847
5505
  // src/integrations/todoist.ts
4848
- var logger21 = createLogger("Todoist");
5506
+ var logger27 = createLogger("Todoist");
4849
5507
  var TODOIST_TOOLS = [
4850
5508
  "todoist_list_projects",
4851
5509
  "todoist_get_project",
@@ -4900,15 +5558,15 @@ function todoistIntegration(config = {}) {
4900
5558
  tools: [...TODOIST_TOOLS],
4901
5559
  oauth,
4902
5560
  async onInit(_client) {
4903
- logger21.debug("Todoist integration initialized");
5561
+ logger27.debug("Todoist integration initialized");
4904
5562
  },
4905
5563
  async onAfterConnect(_client) {
4906
- logger21.debug("Todoist integration connected");
5564
+ logger27.debug("Todoist integration connected");
4907
5565
  }
4908
5566
  };
4909
5567
  }
4910
5568
  // src/integrations/whatsapp.ts
4911
- var logger22 = createLogger("WhatsApp");
5569
+ var logger28 = createLogger("WhatsApp");
4912
5570
  var WHATSAPP_TOOLS = [
4913
5571
  "whatsapp_send_message",
4914
5572
  "whatsapp_reply_message",
@@ -4932,7 +5590,10 @@ var WHATSAPP_TOOLS = [
4932
5590
  "whatsapp_update_profile",
4933
5591
  "whatsapp_get_message_status",
4934
5592
  "whatsapp_create_qr_code",
4935
- "whatsapp_list_qr_codes"
5593
+ "whatsapp_update_qr_code",
5594
+ "whatsapp_list_qr_codes",
5595
+ "whatsapp_get_qr_code",
5596
+ "whatsapp_delete_qr_code"
4936
5597
  ];
4937
5598
  function whatsappIntegration(config = {}) {
4938
5599
  const oauth = {
@@ -4954,15 +5615,15 @@ function whatsappIntegration(config = {}) {
4954
5615
  tools: [...WHATSAPP_TOOLS],
4955
5616
  oauth,
4956
5617
  async onInit(_client) {
4957
- logger22.debug("WhatsApp Business integration initialized");
5618
+ logger28.debug("WhatsApp Business integration initialized");
4958
5619
  },
4959
5620
  async onAfterConnect(_client) {
4960
- logger22.debug("WhatsApp Business integration connected");
5621
+ logger28.debug("WhatsApp Business integration connected");
4961
5622
  }
4962
5623
  };
4963
5624
  }
4964
5625
  // src/integrations/calcom.ts
4965
- var logger23 = createLogger("Cal.com");
5626
+ var logger29 = createLogger("Cal.com");
4966
5627
  var CALCOM_TOOLS = [
4967
5628
  "calcom_list_bookings",
4968
5629
  "calcom_get_booking",
@@ -5038,15 +5699,15 @@ function calcomIntegration(config = {}) {
5038
5699
  tools: [...CALCOM_TOOLS],
5039
5700
  oauth,
5040
5701
  async onInit(_client) {
5041
- logger23.debug("Cal.com integration initialized");
5702
+ logger29.debug("Cal.com integration initialized");
5042
5703
  },
5043
5704
  async onAfterConnect(_client) {
5044
- logger23.debug("Cal.com integration connected");
5705
+ logger29.debug("Cal.com integration connected");
5045
5706
  }
5046
5707
  };
5047
5708
  }
5048
5709
  // src/integrations/ramp.ts
5049
- var logger24 = createLogger("Ramp");
5710
+ var logger30 = createLogger("Ramp");
5050
5711
  var RAMP_TOOLS = [
5051
5712
  "ramp_list_transactions",
5052
5713
  "ramp_get_transaction",
@@ -5078,23 +5739,26 @@ function rampIntegration(config = {}) {
5078
5739
  tools: [...RAMP_TOOLS],
5079
5740
  oauth,
5080
5741
  async onInit(_client) {
5081
- logger24.debug("Ramp integration initialized");
5742
+ logger30.debug("Ramp integration initialized");
5082
5743
  },
5083
5744
  async onAfterConnect(_client) {
5084
- logger24.debug("Ramp integration connected");
5745
+ logger30.debug("Ramp integration connected");
5085
5746
  }
5086
5747
  };
5087
5748
  }
5088
5749
  // src/integrations/onedrive.ts
5089
- var logger25 = createLogger("OneDrive");
5750
+ var logger31 = createLogger("OneDrive");
5090
5751
  var ONEDRIVE_TOOLS = [
5091
- "onedrive_list_files",
5092
- "onedrive_get_file",
5093
- "onedrive_download_file",
5094
- "onedrive_upload_file",
5752
+ "onedrive_create_folder",
5095
5753
  "onedrive_delete_file",
5754
+ "onedrive_download_file",
5755
+ "onedrive_get_file",
5756
+ "onedrive_list_files",
5757
+ "onedrive_list_permissions",
5758
+ "onedrive_remove_permission",
5096
5759
  "onedrive_search_files",
5097
- "onedrive_share_file"
5760
+ "onedrive_share_file",
5761
+ "onedrive_upload_file"
5098
5762
  ];
5099
5763
  function onedriveIntegration(config = {}) {
5100
5764
  const oauth = {
@@ -5115,15 +5779,47 @@ function onedriveIntegration(config = {}) {
5115
5779
  tools: [...ONEDRIVE_TOOLS],
5116
5780
  oauth,
5117
5781
  async onInit(_client) {
5118
- logger25.debug("OneDrive integration initialized");
5782
+ logger31.debug("OneDrive integration initialized");
5119
5783
  },
5120
5784
  async onAfterConnect(_client) {
5121
- logger25.debug("OneDrive integration connected");
5785
+ logger31.debug("OneDrive integration connected");
5122
5786
  }
5123
5787
  };
5124
5788
  }
5789
+ // src/integrations/planner.ts
5790
+ var PLANNER_TOOLS = [
5791
+ "planner_create_bucket",
5792
+ "planner_create_plan",
5793
+ "planner_create_task",
5794
+ "planner_delete_task",
5795
+ "planner_get_plan",
5796
+ "planner_get_task",
5797
+ "planner_get_task_details",
5798
+ "planner_list_buckets",
5799
+ "planner_list_group_plans",
5800
+ "planner_list_my_plans",
5801
+ "planner_list_my_tasks",
5802
+ "planner_list_plan_tasks",
5803
+ "planner_update_task"
5804
+ ];
5805
+ function plannerIntegration(config = {}) {
5806
+ const oauth = {
5807
+ provider: "planner",
5808
+ clientId: config.clientId ?? getEnv("PLANNER_CLIENT_ID"),
5809
+ clientSecret: config.clientSecret ?? getEnv("PLANNER_CLIENT_SECRET"),
5810
+ scopes: config.scopes ?? ["Tasks.ReadWrite", "Group.Read.All", "offline_access"],
5811
+ optionalScopes: config.optionalScopes,
5812
+ redirectUri: config.redirectUri
5813
+ };
5814
+ return {
5815
+ id: "planner",
5816
+ name: "Microsoft Planner",
5817
+ tools: [...PLANNER_TOOLS],
5818
+ oauth
5819
+ };
5820
+ }
5125
5821
  // src/integrations/dropbox.ts
5126
- var logger26 = createLogger("Dropbox");
5822
+ var logger32 = createLogger("Dropbox");
5127
5823
  var DROPBOX_TOOLS = [
5128
5824
  "dropbox_get_current_account",
5129
5825
  "dropbox_get_space_usage",
@@ -5165,20 +5861,79 @@ function dropboxIntegration(options = {}) {
5165
5861
  authType: "oauth",
5166
5862
  oauth,
5167
5863
  async onInit(_client) {
5168
- logger26.debug("Dropbox integration initialized");
5864
+ logger32.debug("Dropbox integration initialized");
5865
+ },
5866
+ async onAfterConnect(_client) {
5867
+ logger32.debug("Dropbox integration connected");
5868
+ }
5869
+ };
5870
+ }
5871
+ // src/integrations/paper.ts
5872
+ var logger33 = createLogger("Paper");
5873
+ var PAPER_SCOPES = [
5874
+ "account_info.read",
5875
+ "files.metadata.read",
5876
+ "files.content.read",
5877
+ "files.content.write"
5878
+ ];
5879
+ var PAPER_TOOLS = [
5880
+ "paper_create_doc",
5881
+ "paper_update_doc",
5882
+ "paper_export_doc"
5883
+ ];
5884
+ function resolveClientId(config) {
5885
+ return config.clientId ?? getEnv("PAPER_CLIENT_ID") ?? getEnv("DROPBOX_CLIENT_ID");
5886
+ }
5887
+ function resolveClientSecret(config) {
5888
+ return config.clientSecret ?? getEnv("PAPER_CLIENT_SECRET") ?? getEnv("DROPBOX_CLIENT_SECRET");
5889
+ }
5890
+ function paperIntegration(config = {}) {
5891
+ if (config.scopes !== undefined && (!Array.isArray(config.scopes) || config.scopes.some((scope) => typeof scope !== "string"))) {
5892
+ throw new Error("paperIntegration scopes must be an array of strings");
5893
+ }
5894
+ const oauth = {
5895
+ provider: "paper",
5896
+ clientId: resolveClientId(config),
5897
+ clientSecret: resolveClientSecret(config),
5898
+ scopes: config.scopes ?? [...PAPER_SCOPES],
5899
+ optionalScopes: config.optionalScopes,
5900
+ redirectUri: config.redirectUri,
5901
+ config: {
5902
+ authorization_endpoint: "https://www.dropbox.com/oauth2/authorize",
5903
+ token_endpoint: "https://api.dropboxapi.com/oauth2/token",
5904
+ response_type: "code",
5905
+ grant_types_supported: ["authorization_code", "refresh_token"]
5906
+ }
5907
+ };
5908
+ return {
5909
+ id: "paper",
5910
+ name: "Dropbox Paper",
5911
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/paper.png",
5912
+ description: "Create, update, and export Dropbox Paper documents",
5913
+ category: "Productivity",
5914
+ tools: [...PAPER_TOOLS],
5915
+ authType: "oauth",
5916
+ oauth,
5917
+ async onInit(_client) {
5918
+ logger33.debug("Paper integration initialized");
5169
5919
  },
5170
5920
  async onAfterConnect(_client) {
5171
- logger26.debug("Dropbox integration connected");
5921
+ logger33.debug("Paper integration connected");
5172
5922
  }
5173
5923
  };
5174
5924
  }
5175
5925
  // src/integrations/gdocs.ts
5176
- var logger27 = createLogger("Google Docs");
5926
+ var logger34 = createLogger("Google Docs");
5177
5927
  var GDOCS_TOOLS = [
5178
- "gdocs_list",
5179
- "gdocs_get",
5180
- "gdocs_create",
5181
5928
  "gdocs_append_text",
5929
+ "gdocs_batch_update",
5930
+ "gdocs_create",
5931
+ "gdocs_create_comment",
5932
+ "gdocs_delete",
5933
+ "gdocs_delete_comment",
5934
+ "gdocs_get",
5935
+ "gdocs_list",
5936
+ "gdocs_list_comments",
5182
5937
  "gdocs_replace_text"
5183
5938
  ];
5184
5939
  function gdocsIntegration(config = {}) {
@@ -5198,24 +5953,26 @@ function gdocsIntegration(config = {}) {
5198
5953
  tools: [...GDOCS_TOOLS],
5199
5954
  oauth,
5200
5955
  async onInit(_client) {
5201
- logger27.debug("Google Docs integration initialized");
5956
+ logger34.debug("Google Docs integration initialized");
5202
5957
  },
5203
5958
  async onAfterConnect(_client) {
5204
- logger27.debug("Google Docs integration connected");
5959
+ logger34.debug("Google Docs integration connected");
5205
5960
  }
5206
5961
  };
5207
5962
  }
5208
5963
  // src/integrations/gsheets.ts
5209
- var logger28 = createLogger("Google Sheets");
5964
+ var logger35 = createLogger("Google Sheets");
5210
5965
  var GSHEETS_TOOLS = [
5211
- "gsheets_list",
5212
- "gsheets_get",
5213
- "gsheets_get_values",
5214
- "gsheets_update_values",
5215
- "gsheets_create",
5216
5966
  "gsheets_append_values",
5967
+ "gsheets_batch_update",
5968
+ "gsheets_batch_update_values",
5217
5969
  "gsheets_clear_values",
5218
- "gsheets_batch_update_values"
5970
+ "gsheets_create",
5971
+ "gsheets_delete",
5972
+ "gsheets_get",
5973
+ "gsheets_get_values",
5974
+ "gsheets_list",
5975
+ "gsheets_update_values"
5219
5976
  ];
5220
5977
  function gsheetsIntegration(config = {}) {
5221
5978
  const oauth = {
@@ -5234,22 +5991,24 @@ function gsheetsIntegration(config = {}) {
5234
5991
  tools: [...GSHEETS_TOOLS],
5235
5992
  oauth,
5236
5993
  async onInit(_client) {
5237
- logger28.debug("Google Sheets integration initialized");
5994
+ logger35.debug("Google Sheets integration initialized");
5238
5995
  },
5239
5996
  async onAfterConnect(_client) {
5240
- logger28.debug("Google Sheets integration connected");
5997
+ logger35.debug("Google Sheets integration connected");
5241
5998
  }
5242
5999
  };
5243
6000
  }
5244
6001
  // src/integrations/gslides.ts
5245
- var logger29 = createLogger("Google Slides");
6002
+ var logger36 = createLogger("Google Slides");
5246
6003
  var GSLIDES_TOOLS = [
5247
- "gslides_list",
5248
- "gslides_get",
5249
- "gslides_get_page",
5250
- "gslides_create",
5251
6004
  "gslides_add_slide",
6005
+ "gslides_batch_update",
6006
+ "gslides_create",
6007
+ "gslides_delete",
5252
6008
  "gslides_delete_slide",
6009
+ "gslides_get",
6010
+ "gslides_get_page",
6011
+ "gslides_list",
5253
6012
  "gslides_update_text"
5254
6013
  ];
5255
6014
  function gslidesIntegration(config = {}) {
@@ -5269,15 +6028,15 @@ function gslidesIntegration(config = {}) {
5269
6028
  tools: [...GSLIDES_TOOLS],
5270
6029
  oauth,
5271
6030
  async onInit(_client) {
5272
- logger29.debug("Google Slides integration initialized");
6031
+ logger36.debug("Google Slides integration initialized");
5273
6032
  },
5274
6033
  async onAfterConnect(_client) {
5275
- logger29.debug("Google Slides integration connected");
6034
+ logger36.debug("Google Slides integration connected");
5276
6035
  }
5277
6036
  };
5278
6037
  }
5279
6038
  // src/integrations/polar.ts
5280
- var logger30 = createLogger("Polar");
6039
+ var logger37 = createLogger("Polar");
5281
6040
  var POLAR_TOOLS = [
5282
6041
  "polar_list_products",
5283
6042
  "polar_get_product",
@@ -5334,15 +6093,178 @@ function polarIntegration(config = {}) {
5334
6093
  tools: [...POLAR_TOOLS],
5335
6094
  oauth,
5336
6095
  async onInit(_client) {
5337
- logger30.debug("Polar integration initialized");
6096
+ logger37.debug("Polar integration initialized");
6097
+ },
6098
+ async onAfterConnect(_client) {
6099
+ logger37.debug("Polar integration connected");
6100
+ }
6101
+ };
6102
+ }
6103
+ // src/integrations/supabase.ts
6104
+ var logger38 = createLogger("Supabase");
6105
+ var SUPABASE_API_BASE = "https://api.supabase.com";
6106
+ var SUPABASE_TOOLS = [
6107
+ "supabase_get_profile",
6108
+ "supabase_list_organizations",
6109
+ "supabase_get_organization",
6110
+ "supabase_list_organization_projects",
6111
+ "supabase_list_projects",
6112
+ "supabase_get_project",
6113
+ "supabase_create_project",
6114
+ "supabase_update_project",
6115
+ "supabase_delete_project",
6116
+ "supabase_list_project_api_keys",
6117
+ "supabase_create_project_api_key",
6118
+ "supabase_delete_project_api_key",
6119
+ "supabase_list_project_secrets",
6120
+ "supabase_list_project_branches",
6121
+ "supabase_get_project_health",
6122
+ "supabase_get_database_postgres_config",
6123
+ "supabase_list_available_regions"
6124
+ ];
6125
+ function supabaseIntegration(config = {}) {
6126
+ const pat = config.accessToken ?? getEnv("SUPABASE_ACCESS_TOKEN");
6127
+ if (pat) {
6128
+ return {
6129
+ id: "supabase",
6130
+ name: "Supabase",
6131
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/supabase.png",
6132
+ description: "Manage Supabase organizations, projects, Postgres settings, API keys, secrets, and branches via the Management API",
6133
+ category: "Infrastructure",
6134
+ tools: [...SUPABASE_TOOLS],
6135
+ authType: "apiKey",
6136
+ getHeaders() {
6137
+ return {
6138
+ Authorization: `Bearer ${pat}`
6139
+ };
6140
+ },
6141
+ async onInit(_client) {
6142
+ logger38.debug("Supabase integration initialized (personal access token)");
6143
+ },
6144
+ async onAfterConnect(_client) {
6145
+ logger38.debug("Supabase integration connected");
6146
+ }
6147
+ };
6148
+ }
6149
+ const oauth = {
6150
+ provider: "supabase",
6151
+ clientId: config.clientId ?? getEnv("SUPABASE_CLIENT_ID"),
6152
+ clientSecret: config.clientSecret ?? getEnv("SUPABASE_CLIENT_SECRET"),
6153
+ scopes: config.scopes ?? [],
6154
+ optionalScopes: config.optionalScopes,
6155
+ redirectUri: config.redirectUri,
6156
+ config: {
6157
+ apiBaseUrl: SUPABASE_API_BASE,
6158
+ authorization_endpoint: `${SUPABASE_API_BASE}/v1/oauth/authorize`,
6159
+ token_endpoint: `${SUPABASE_API_BASE}/v1/oauth/token`,
6160
+ token_auth_method: "client_secret_basic",
6161
+ response_type: "code",
6162
+ grant_types_supported: ["authorization_code", "refresh_token"],
6163
+ code_challenge_method: "S256"
6164
+ }
6165
+ };
6166
+ return {
6167
+ id: "supabase",
6168
+ name: "Supabase",
6169
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/supabase.png",
6170
+ description: "Manage Supabase organizations, projects, Postgres settings, API keys, secrets, and branches via the Management API",
6171
+ category: "Infrastructure",
6172
+ tools: [...SUPABASE_TOOLS],
6173
+ oauth,
6174
+ async onInit(_client) {
6175
+ logger38.debug("Supabase integration initialized");
5338
6176
  },
5339
6177
  async onAfterConnect(_client) {
5340
- logger30.debug("Polar integration connected");
6178
+ logger38.debug("Supabase integration connected");
6179
+ }
6180
+ };
6181
+ }
6182
+ // src/integrations/phantom.ts
6183
+ var logger39 = createLogger("Phantom");
6184
+ var PHANTOM_TOOLS = [
6185
+ "phantom_build_browse_deeplink",
6186
+ "phantom_deeplink_provider_reference"
6187
+ ];
6188
+ function buildPhantomBrowseDeeplink(params) {
6189
+ const target = new URL(params.url);
6190
+ const ref = new URL(params.ref);
6191
+ if (target.protocol !== "https:" || ref.protocol !== "https:") {
6192
+ throw new Error("Phantom browse deeplinks require https url and ref values");
6193
+ }
6194
+ return `https://phantom.app/ul/browse/${encodeURIComponent(target.toString())}?ref=${encodeURIComponent(ref.toString())}`;
6195
+ }
6196
+ function phantomIntegration(_options = {}) {
6197
+ return {
6198
+ id: "phantom",
6199
+ name: "Phantom",
6200
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/phantom.png",
6201
+ description: "Build Phantom mobile universal links and expose provider deeplink reference data",
6202
+ category: "Other",
6203
+ tools: [...PHANTOM_TOOLS],
6204
+ async onInit(_client) {
6205
+ logger39.debug("Phantom integration initialized");
6206
+ },
6207
+ async onAfterConnect(_client) {
6208
+ logger39.debug("Phantom integration connected");
6209
+ }
6210
+ };
6211
+ }
6212
+ // src/integrations/facebook.ts
6213
+ var logger40 = createLogger("Facebook");
6214
+ var FACEBOOK_SCOPES = [
6215
+ "public_profile",
6216
+ "email",
6217
+ "pages_show_list",
6218
+ "pages_read_engagement",
6219
+ "pages_manage_posts",
6220
+ "pages_read_user_content",
6221
+ "pages_manage_engagement"
6222
+ ];
6223
+ var FACEBOOK_TOOLS = [
6224
+ "facebook_get_me",
6225
+ "facebook_list_pages",
6226
+ "facebook_list_page_posts",
6227
+ "facebook_get_object",
6228
+ "facebook_create_page_post",
6229
+ "facebook_delete_object",
6230
+ "facebook_list_comments",
6231
+ "facebook_publish_comment",
6232
+ "facebook_get_insights",
6233
+ "facebook_set_comment_visibility",
6234
+ "facebook_like_object"
6235
+ ];
6236
+ function facebookIntegration(config = {}) {
6237
+ const oauth = {
6238
+ provider: "facebook",
6239
+ clientId: config.clientId ?? getEnv("FACEBOOK_CLIENT_ID"),
6240
+ clientSecret: config.clientSecret ?? getEnv("FACEBOOK_CLIENT_SECRET"),
6241
+ scopes: config.scopes ?? [...FACEBOOK_SCOPES],
6242
+ redirectUri: config.redirectUri,
6243
+ config: {
6244
+ authorization_endpoint: "https://www.facebook.com/v18.0/dialog/oauth",
6245
+ token_endpoint: "https://graph.facebook.com/v18.0/oauth/access_token",
6246
+ response_type: "code",
6247
+ grant_types_supported: ["authorization_code"]
6248
+ }
6249
+ };
6250
+ return {
6251
+ id: "facebook",
6252
+ name: "Facebook",
6253
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/facebook.png",
6254
+ description: "Manage Facebook Page posts, comments, reactions, and insights via the Graph API",
6255
+ category: "Social Media",
6256
+ tools: [...FACEBOOK_TOOLS],
6257
+ oauth,
6258
+ async onInit(_client) {
6259
+ logger40.debug("Facebook integration initialized");
6260
+ },
6261
+ async onAfterConnect(_client) {
6262
+ logger40.debug("Facebook integration connected");
5341
6263
  }
5342
6264
  };
5343
6265
  }
5344
6266
  // src/integrations/figma.ts
5345
- var logger31 = createLogger("Figma");
6267
+ var logger41 = createLogger("Figma");
5346
6268
  var FIGMA_TOOLS = [
5347
6269
  "figma_get_file",
5348
6270
  "figma_get_file_nodes",
@@ -5408,15 +6330,15 @@ function figmaIntegration(config = {}) {
5408
6330
  tools: [...FIGMA_TOOLS],
5409
6331
  oauth,
5410
6332
  async onInit(_client) {
5411
- logger31.debug("Figma integration initialized");
6333
+ logger41.debug("Figma integration initialized");
5412
6334
  },
5413
6335
  async onAfterConnect(_client) {
5414
- logger31.debug("Figma integration connected");
6336
+ logger41.debug("Figma integration connected");
5415
6337
  }
5416
6338
  };
5417
6339
  }
5418
6340
  // src/integrations/intercom.ts
5419
- var logger32 = createLogger("Intercom");
6341
+ var logger42 = createLogger("Intercom");
5420
6342
  var INTERCOM_TOOLS = [
5421
6343
  "intercom_list_contacts",
5422
6344
  "intercom_get_contact",
@@ -5447,15 +6369,15 @@ function intercomIntegration(config = {}) {
5447
6369
  tools: [...INTERCOM_TOOLS],
5448
6370
  oauth,
5449
6371
  async onInit(_client) {
5450
- logger32.debug("Intercom integration initialized");
6372
+ logger42.debug("Intercom integration initialized");
5451
6373
  },
5452
6374
  async onAfterConnect(_client) {
5453
- logger32.debug("Intercom integration connected");
6375
+ logger42.debug("Intercom integration connected");
5454
6376
  }
5455
6377
  };
5456
6378
  }
5457
6379
  // src/integrations/hubspot.ts
5458
- var logger33 = createLogger("HubSpot");
6380
+ var logger43 = createLogger("HubSpot");
5459
6381
  var HUBSPOT_TOOLS = [
5460
6382
  "hubspot_list_contacts",
5461
6383
  "hubspot_get_contact",
@@ -5505,69 +6427,127 @@ function hubspotIntegration(config = {}) {
5505
6427
  tools: [...HUBSPOT_TOOLS],
5506
6428
  oauth,
5507
6429
  async onInit(_client) {
5508
- logger33.debug("HubSpot integration initialized");
6430
+ logger43.debug("HubSpot integration initialized");
5509
6431
  },
5510
6432
  async onAfterConnect(_client) {
5511
- logger33.debug("HubSpot integration connected");
6433
+ logger43.debug("HubSpot integration connected");
5512
6434
  }
5513
6435
  };
5514
6436
  }
5515
- // src/integrations/youtube.ts
5516
- var logger34 = createLogger("YouTube");
5517
- var YOUTUBE_TOOLS = [
5518
- "youtube_search",
5519
- "youtube_get_video",
5520
- "youtube_get_my_channel",
5521
- "youtube_get_channel",
5522
- "youtube_list_my_videos",
5523
- "youtube_get_video_rating",
5524
- "youtube_list_playlists",
5525
- "youtube_get_playlist",
5526
- "youtube_list_playlist_items",
5527
- "youtube_list_subscriptions",
5528
- "youtube_list_comments",
5529
- "youtube_list_comment_replies",
5530
- "youtube_get_captions",
5531
- "youtube_rate_video",
5532
- "youtube_subscribe",
5533
- "youtube_unsubscribe",
5534
- "youtube_add_comment",
5535
- "youtube_reply_to_comment",
5536
- "youtube_create_playlist",
5537
- "youtube_update_playlist",
5538
- "youtube_delete_playlist",
5539
- "youtube_add_to_playlist",
5540
- "youtube_remove_from_playlist",
5541
- "youtube_update_video"
6437
+ // src/integrations/instagram.ts
6438
+ var logger44 = createLogger("Instagram");
6439
+ var INSTAGRAM_SCOPES = [
6440
+ "pages_show_list",
6441
+ "pages_read_engagement",
6442
+ "instagram_basic",
6443
+ "instagram_manage_insights",
6444
+ "instagram_manage_comments",
6445
+ "instagram_content_publish"
5542
6446
  ];
5543
- function youtubeIntegration(config = {}) {
6447
+ var INSTAGRAM_TOOLS = [
6448
+ "instagram_list_pages",
6449
+ "instagram_get_profile",
6450
+ "instagram_list_media",
6451
+ "instagram_get_media",
6452
+ "instagram_list_comments",
6453
+ "instagram_reply_comment",
6454
+ "instagram_delete_comment",
6455
+ "instagram_hide_comment",
6456
+ "instagram_get_media_insights",
6457
+ "instagram_get_user_insights",
6458
+ "instagram_create_media_container",
6459
+ "instagram_publish_media",
6460
+ "instagram_list_stories",
6461
+ "instagram_list_tagged_media"
6462
+ ];
6463
+ function instagramIntegration(config = {}) {
5544
6464
  const oauth = {
5545
- provider: "youtube",
5546
- clientId: config.clientId ?? getEnv("YOUTUBE_CLIENT_ID"),
5547
- clientSecret: config.clientSecret ?? getEnv("YOUTUBE_CLIENT_SECRET"),
5548
- scopes: config.scopes,
6465
+ provider: "instagram",
6466
+ clientId: config.clientId ?? getEnv("INSTAGRAM_CLIENT_ID"),
6467
+ clientSecret: config.clientSecret ?? getEnv("INSTAGRAM_CLIENT_SECRET"),
6468
+ scopes: config.scopes ?? [...INSTAGRAM_SCOPES],
5549
6469
  optionalScopes: config.optionalScopes,
5550
6470
  redirectUri: config.redirectUri,
5551
6471
  config: {
6472
+ authorization_endpoint: "https://www.facebook.com/v21.0/dialog/oauth",
6473
+ token_endpoint: "https://graph.facebook.com/v21.0/oauth/access_token",
6474
+ response_type: "code",
6475
+ grant_types_supported: ["authorization_code", "refresh_token"],
5552
6476
  ...config
5553
6477
  }
5554
6478
  };
5555
6479
  return {
5556
- id: "youtube",
5557
- name: "YouTube",
5558
- logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/youtube.jpeg",
6480
+ id: "instagram",
6481
+ name: "Instagram",
6482
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/instagram.png",
6483
+ description: "Instagram Graph API for professional accounts — pages, media, comments, insights, stories, and publishing.",
6484
+ category: "Social Media",
6485
+ tools: [...INSTAGRAM_TOOLS],
6486
+ oauth,
6487
+ async onInit(_client) {
6488
+ logger44.debug("Instagram integration initialized");
6489
+ },
6490
+ async onAfterConnect(_client) {
6491
+ logger44.debug("Instagram integration connected");
6492
+ }
6493
+ };
6494
+ }
6495
+ // src/integrations/youtube.ts
6496
+ var logger45 = createLogger("YouTube");
6497
+ var YOUTUBE_TOOLS = [
6498
+ "youtube_add_comment",
6499
+ "youtube_add_to_playlist",
6500
+ "youtube_create_playlist",
6501
+ "youtube_delete_playlist",
6502
+ "youtube_get_captions",
6503
+ "youtube_get_channel",
6504
+ "youtube_get_my_channel",
6505
+ "youtube_get_playlist",
6506
+ "youtube_get_video",
6507
+ "youtube_get_video_rating",
6508
+ "youtube_list_comment_replies",
6509
+ "youtube_list_comments",
6510
+ "youtube_list_my_videos",
6511
+ "youtube_list_playlist_items",
6512
+ "youtube_list_playlists",
6513
+ "youtube_list_subscriptions",
6514
+ "youtube_rate_video",
6515
+ "youtube_remove_from_playlist",
6516
+ "youtube_reply_to_comment",
6517
+ "youtube_search",
6518
+ "youtube_subscribe",
6519
+ "youtube_unsubscribe",
6520
+ "youtube_update_playlist",
6521
+ "youtube_update_video"
6522
+ ];
6523
+ function youtubeIntegration(config = {}) {
6524
+ const oauth = {
6525
+ provider: "youtube",
6526
+ clientId: config.clientId ?? getEnv("YOUTUBE_CLIENT_ID"),
6527
+ clientSecret: config.clientSecret ?? getEnv("YOUTUBE_CLIENT_SECRET"),
6528
+ scopes: config.scopes,
6529
+ optionalScopes: config.optionalScopes,
6530
+ redirectUri: config.redirectUri,
6531
+ config: {
6532
+ ...config
6533
+ }
6534
+ };
6535
+ return {
6536
+ id: "youtube",
6537
+ name: "YouTube",
6538
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/youtube.jpeg",
5559
6539
  tools: [...YOUTUBE_TOOLS],
5560
6540
  oauth,
5561
6541
  async onInit(_client) {
5562
- logger34.debug("YouTube integration initialized");
6542
+ logger45.debug("YouTube integration initialized");
5563
6543
  },
5564
6544
  async onAfterConnect(_client) {
5565
- logger34.debug("YouTube integration connected");
6545
+ logger45.debug("YouTube integration connected");
5566
6546
  }
5567
6547
  };
5568
6548
  }
5569
6549
  // src/integrations/cursor.ts
5570
- var logger35 = createLogger("Cursor");
6550
+ var logger46 = createLogger("Cursor");
5571
6551
  var CURSOR_TOOLS = [
5572
6552
  "cursor_list_agents",
5573
6553
  "cursor_get_agent",
@@ -5587,15 +6567,70 @@ function cursorIntegration(_config = {}) {
5587
6567
  logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cursor.jpeg",
5588
6568
  tools: [...CURSOR_TOOLS],
5589
6569
  async onInit(_client) {
5590
- logger35.debug("Cursor integration initialized");
6570
+ logger46.debug("Cursor integration initialized");
6571
+ },
6572
+ async onAfterConnect(_client) {
6573
+ logger46.debug("Cursor integration connected");
6574
+ }
6575
+ };
6576
+ }
6577
+ // src/integrations/databricks.ts
6578
+ var logger47 = createLogger("Databricks");
6579
+ var DATABRICKS_SCOPES = ["all-apis", "offline_access"];
6580
+ var DATABRICKS_TOOLS = [
6581
+ "databricks_current_user",
6582
+ "databricks_clusters_list",
6583
+ "databricks_clusters_get",
6584
+ "databricks_jobs_list",
6585
+ "databricks_jobs_get",
6586
+ "databricks_jobs_run_now",
6587
+ "databricks_sql_warehouses_list",
6588
+ "databricks_workspace_get_status"
6589
+ ];
6590
+ function normalizeDatabricksWorkspaceHost(raw) {
6591
+ const value = (raw ?? "").trim().replace(/\/+$/, "");
6592
+ if (!value) {
6593
+ return "";
6594
+ }
6595
+ return /^https?:\/\//i.test(value) ? value : `https://${value}`;
6596
+ }
6597
+ function databricksIntegration(config = {}) {
6598
+ const host = normalizeDatabricksWorkspaceHost(config.workspaceHost ?? getEnv("DATABRICKS_WORKSPACE_HOST"));
6599
+ const placeholder = "https://workspace-host.invalid";
6600
+ const base = host || placeholder;
6601
+ const oauth = {
6602
+ provider: "databricks",
6603
+ clientId: config.clientId ?? getEnv("DATABRICKS_CLIENT_ID"),
6604
+ clientSecret: config.clientSecret ?? getEnv("DATABRICKS_CLIENT_SECRET"),
6605
+ scopes: config.scopes ?? [...DATABRICKS_SCOPES],
6606
+ redirectUri: config.redirectUri,
6607
+ config: {
6608
+ subdomain: host || undefined,
6609
+ authorization_endpoint: `${base}/oidc/v1/authorize`,
6610
+ token_endpoint: `${base}/oidc/v1/token`,
6611
+ response_type: "code",
6612
+ grant_types_supported: ["authorization_code", "refresh_token"],
6613
+ code_challenge_method: "S256"
6614
+ }
6615
+ };
6616
+ return {
6617
+ id: "databricks",
6618
+ name: "Databricks",
6619
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/databricks.png",
6620
+ description: "Run Databricks jobs, list clusters and SQL warehouses, and inspect workspace paths",
6621
+ category: "Engineering",
6622
+ tools: [...DATABRICKS_TOOLS],
6623
+ oauth,
6624
+ async onInit(_client) {
6625
+ logger47.debug("Databricks integration initialized");
5591
6626
  },
5592
6627
  async onAfterConnect(_client) {
5593
- logger35.debug("Cursor integration connected");
6628
+ logger47.debug("Databricks integration connected");
5594
6629
  }
5595
6630
  };
5596
6631
  }
5597
6632
  // src/integrations/posthog.ts
5598
- var logger36 = createLogger("PostHog");
6633
+ var logger48 = createLogger("PostHog");
5599
6634
  var DEFAULT_POSTHOG_BASE_URL = "https://us.posthog.com";
5600
6635
  var POSTHOG_SCOPES = [
5601
6636
  "openid",
@@ -5681,15 +6716,54 @@ function posthogIntegration(config = {}) {
5681
6716
  tools: [...POSTHOG_TOOLS],
5682
6717
  oauth,
5683
6718
  async onInit(_client) {
5684
- logger36.debug("PostHog integration initialized");
6719
+ logger48.debug("PostHog integration initialized");
6720
+ },
6721
+ async onAfterConnect(_client) {
6722
+ logger48.debug("PostHog integration connected");
6723
+ }
6724
+ };
6725
+ }
6726
+ // src/integrations/postman.ts
6727
+ var logger49 = createLogger("Postman");
6728
+ var POSTMAN_TOOLS = [
6729
+ "postman_get_me",
6730
+ "postman_list_workspaces",
6731
+ "postman_get_workspace",
6732
+ "postman_list_collections",
6733
+ "postman_get_collection",
6734
+ "postman_delete_collection",
6735
+ "postman_list_environments",
6736
+ "postman_get_environment",
6737
+ "postman_create_collection"
6738
+ ];
6739
+ function postmanIntegration(options = {}) {
6740
+ const apiKey = options.apiKey ?? getEnv("POSTMAN_API_KEY");
6741
+ if (!apiKey) {
6742
+ throw new Error("postmanIntegration requires apiKey or POSTMAN_API_KEY environment variable");
6743
+ }
6744
+ return {
6745
+ id: "postman",
6746
+ name: "Postman",
6747
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/postman.png",
6748
+ description: "Manage Postman workspaces, collections, and environments via the Postman API",
6749
+ category: "Engineering",
6750
+ tools: [...POSTMAN_TOOLS],
6751
+ authType: "apiKey",
6752
+ getHeaders() {
6753
+ return {
6754
+ Authorization: `Bearer ${apiKey}`
6755
+ };
6756
+ },
6757
+ async onInit(_client) {
6758
+ logger49.debug("Postman integration initialized");
5685
6759
  },
5686
6760
  async onAfterConnect(_client) {
5687
- logger36.debug("PostHog integration connected");
6761
+ logger49.debug("Postman integration connected");
5688
6762
  }
5689
6763
  };
5690
6764
  }
5691
6765
  // src/integrations/sentry.ts
5692
- var logger37 = createLogger("Sentry");
6766
+ var logger50 = createLogger("Sentry");
5693
6767
  var SENTRY_SCOPES = [
5694
6768
  "org:read",
5695
6769
  "project:read",
@@ -5738,15 +6812,89 @@ function sentryIntegration(config = {}) {
5738
6812
  tools: [...SENTRY_TOOLS],
5739
6813
  oauth,
5740
6814
  async onInit(_client) {
5741
- logger37.debug("Sentry integration initialized");
6815
+ logger50.debug("Sentry integration initialized");
6816
+ },
6817
+ async onAfterConnect(_client) {
6818
+ logger50.debug("Sentry integration connected");
6819
+ }
6820
+ };
6821
+ }
6822
+ // src/integrations/datadog.ts
6823
+ var logger51 = createLogger("Datadog");
6824
+ var DATADOG_SCOPES = [
6825
+ "monitors_read",
6826
+ "dashboards_read",
6827
+ "metrics_read",
6828
+ "logs_read_data"
6829
+ ];
6830
+ var DATADOG_TOOLS = [
6831
+ "datadog_list_monitors",
6832
+ "datadog_get_monitor",
6833
+ "datadog_list_dashboards",
6834
+ "datadog_get_dashboard",
6835
+ "datadog_search_logs"
6836
+ ];
6837
+ function normalizeSite(raw) {
6838
+ const s = (raw ?? "").trim();
6839
+ return s.length > 0 ? s : "datadoghq.com";
6840
+ }
6841
+ function datadogIntegration(config = {}) {
6842
+ const site = normalizeSite(config.site ?? getEnv("DATADOG_SITE"));
6843
+ const apiKey = config.apiKey ?? getEnv("DATADOG_API_KEY");
6844
+ const applicationKey = config.applicationKey ?? getEnv("DATADOG_APPLICATION_KEY");
6845
+ const baseFields = {
6846
+ id: "datadog",
6847
+ name: "Datadog",
6848
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/datadog.png",
6849
+ description: "List monitors and dashboards and search logs with the Datadog API",
6850
+ category: "Engineering",
6851
+ tools: [...DATADOG_TOOLS],
6852
+ async onInit(_client) {
6853
+ logger51.debug("Datadog integration initialized");
5742
6854
  },
5743
6855
  async onAfterConnect(_client) {
5744
- logger37.debug("Sentry integration connected");
6856
+ logger51.debug("Datadog integration connected");
6857
+ }
6858
+ };
6859
+ if (apiKey || applicationKey) {
6860
+ if (!apiKey || !applicationKey) {
6861
+ throw new Error("datadogIntegration: apiKey and applicationKey must both be set for API key authentication");
6862
+ }
6863
+ return {
6864
+ ...baseFields,
6865
+ authType: "apiKey",
6866
+ getHeaders() {
6867
+ return {
6868
+ "DD-API-KEY": apiKey,
6869
+ "DD-APPLICATION-KEY": applicationKey,
6870
+ "DD-SITE": site
6871
+ };
6872
+ }
6873
+ };
6874
+ }
6875
+ const clientId = config.clientId ?? getEnv("DATADOG_CLIENT_ID");
6876
+ const clientSecret = config.clientSecret ?? getEnv("DATADOG_CLIENT_SECRET");
6877
+ const oauth = {
6878
+ provider: "datadog",
6879
+ clientId,
6880
+ clientSecret,
6881
+ scopes: config.scopes ?? [...DATADOG_SCOPES],
6882
+ redirectUri: config.redirectUri,
6883
+ config: {
6884
+ authorization_endpoint: "https://app.datadoghq.com/oauth2/v1/authorize",
6885
+ token_endpoint: "https://api.datadoghq.com/oauth2/v1/token",
6886
+ response_type: "code",
6887
+ grant_types_supported: ["authorization_code", "refresh_token"],
6888
+ subdomain: site
5745
6889
  }
5746
6890
  };
6891
+ return {
6892
+ ...baseFields,
6893
+ oauth
6894
+ };
5747
6895
  }
5748
6896
  // src/integrations/netlify.ts
5749
- var logger38 = createLogger("Netlify");
6897
+ var logger52 = createLogger("Netlify");
5750
6898
  var NETLIFY_TOOLS = [
5751
6899
  "netlify_get_current_user",
5752
6900
  "netlify_list_accounts",
@@ -5809,15 +6957,145 @@ function netlifyIntegration(config = {}) {
5809
6957
  tools: [...NETLIFY_TOOLS],
5810
6958
  oauth,
5811
6959
  async onInit(_client) {
5812
- logger38.debug("Netlify integration initialized");
6960
+ logger52.debug("Netlify integration initialized");
6961
+ },
6962
+ async onAfterConnect(_client) {
6963
+ logger52.debug("Netlify integration connected");
6964
+ }
6965
+ };
6966
+ }
6967
+ // src/integrations/redis.ts
6968
+ var logger53 = createLogger("Redis Cloud");
6969
+ var REDIS_TOOLS = [
6970
+ "redis_list_subscriptions",
6971
+ "redis_get_subscription",
6972
+ "redis_list_fixed_subscriptions",
6973
+ "redis_get_fixed_subscription",
6974
+ "redis_list_databases",
6975
+ "redis_get_database",
6976
+ "redis_create_database",
6977
+ "redis_update_database",
6978
+ "redis_delete_database",
6979
+ "redis_list_essentials_databases",
6980
+ "redis_get_essentials_database",
6981
+ "redis_create_essentials_database",
6982
+ "redis_update_essentials_database",
6983
+ "redis_delete_essentials_database",
6984
+ "redis_get_task",
6985
+ "redis_list_logs"
6986
+ ];
6987
+ function encodeRedisCloudBearerToken(accountKey, secretKey) {
6988
+ const json = JSON.stringify({ account_key: accountKey, secret_key: secretKey });
6989
+ let b64;
6990
+ if (typeof Buffer !== "undefined") {
6991
+ b64 = Buffer.from(json, "utf8").toString("base64");
6992
+ } else {
6993
+ const bytes = new TextEncoder().encode(json);
6994
+ let binary = "";
6995
+ for (let i = 0;i < bytes.length; i++) {
6996
+ binary += String.fromCharCode(bytes[i]);
6997
+ }
6998
+ b64 = btoa(binary);
6999
+ }
7000
+ return `redis_cloud:${b64}`;
7001
+ }
7002
+ function redisIntegration(options = {}) {
7003
+ const accountKey = options.accountKey ?? getEnv("REDIS_CLOUD_ACCOUNT_KEY");
7004
+ const secretKey = options.secretKey ?? getEnv("REDIS_CLOUD_SECRET_KEY");
7005
+ if (!accountKey || !secretKey) {
7006
+ throw new Error("redisIntegration requires accountKey/secretKey or REDIS_CLOUD_ACCOUNT_KEY and REDIS_CLOUD_SECRET_KEY environment variables");
7007
+ }
7008
+ const bearer = encodeRedisCloudBearerToken(accountKey, secretKey);
7009
+ return {
7010
+ id: "redis",
7011
+ name: "Redis Cloud",
7012
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/redis.png",
7013
+ description: "Manage Redis Cloud subscriptions, databases, async tasks, and audit logs via the REST API",
7014
+ category: "Infrastructure",
7015
+ tools: [...REDIS_TOOLS],
7016
+ authType: "apiKey",
7017
+ getHeaders() {
7018
+ return {
7019
+ Authorization: `Bearer ${bearer}`
7020
+ };
7021
+ },
7022
+ async onInit(_client) {
7023
+ logger53.debug("Redis Cloud integration initialized");
7024
+ },
7025
+ async onAfterConnect(_client) {
7026
+ logger53.debug("Redis Cloud integration connected");
7027
+ }
7028
+ };
7029
+ }
7030
+ // src/integrations/webflow.ts
7031
+ var logger54 = createLogger("Webflow");
7032
+ var WEBFLOW_TOOLS = [
7033
+ "webflow_token_introspect",
7034
+ "webflow_get_authorized_user",
7035
+ "webflow_list_sites",
7036
+ "webflow_get_site",
7037
+ "webflow_get_site_custom_domains",
7038
+ "webflow_publish_site",
7039
+ "webflow_list_site_pages",
7040
+ "webflow_list_site_collections",
7041
+ "webflow_get_collection",
7042
+ "webflow_list_collection_items",
7043
+ "webflow_list_live_collection_items",
7044
+ "webflow_get_collection_item",
7045
+ "webflow_create_collection_items",
7046
+ "webflow_update_collection_items",
7047
+ "webflow_delete_collection_items",
7048
+ "webflow_publish_collection_items",
7049
+ "webflow_list_site_forms",
7050
+ "webflow_list_site_webhooks"
7051
+ ];
7052
+ var DEFAULT_WEBFLOW_SCOPES = [
7053
+ "authorized_user:read",
7054
+ "assets:read",
7055
+ "assets:write",
7056
+ "cms:read",
7057
+ "cms:write",
7058
+ "custom_code:read",
7059
+ "custom_code:write",
7060
+ "forms:read",
7061
+ "forms:write",
7062
+ "pages:read",
7063
+ "pages:write",
7064
+ "sites:read",
7065
+ "sites:write"
7066
+ ];
7067
+ function webflowIntegration(config = {}) {
7068
+ const oauth = {
7069
+ provider: "webflow",
7070
+ clientId: config.clientId ?? getEnv("WEBFLOW_CLIENT_ID"),
7071
+ clientSecret: config.clientSecret ?? getEnv("WEBFLOW_CLIENT_SECRET"),
7072
+ scopes: config.scopes ?? [...DEFAULT_WEBFLOW_SCOPES],
7073
+ redirectUri: config.redirectUri,
7074
+ config: {
7075
+ authorization_endpoint: "https://webflow.com/oauth/authorize",
7076
+ token_endpoint: "https://api.webflow.com/oauth/access_token",
7077
+ response_type: "code",
7078
+ grant_types_supported: ["authorization_code", "refresh_token"]
7079
+ }
7080
+ };
7081
+ return {
7082
+ id: "webflow",
7083
+ name: "Webflow",
7084
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/webflow.png",
7085
+ description: "Manage Webflow sites, CMS collections, pages, forms, and publishing",
7086
+ category: "Engineering",
7087
+ tools: [...WEBFLOW_TOOLS],
7088
+ oauth,
7089
+ async onInit(_client) {
7090
+ logger54.debug("Webflow integration initialized");
5813
7091
  },
5814
7092
  async onAfterConnect(_client) {
5815
- logger38.debug("Netlify integration connected");
7093
+ logger54.debug("Webflow integration connected");
5816
7094
  }
5817
7095
  };
5818
7096
  }
5819
7097
  // src/integrations/jira.ts
5820
- var logger39 = createLogger("Jira");
7098
+ var logger55 = createLogger("Jira");
5821
7099
  var JIRA_SCOPES = [
5822
7100
  "read:jira-work",
5823
7101
  "write:jira-work",
@@ -5862,70 +7140,920 @@ function jiraIntegration(config = {}) {
5862
7140
  tools: [...JIRA_TOOLS],
5863
7141
  oauth,
5864
7142
  async onInit(_client) {
5865
- logger39.debug("Jira integration initialized");
7143
+ logger55.debug("Jira integration initialized");
5866
7144
  },
5867
7145
  async onAfterConnect(_client) {
5868
- logger39.debug("Jira integration connected");
7146
+ logger55.debug("Jira integration connected");
5869
7147
  }
5870
7148
  };
5871
7149
  }
5872
- // src/integrations/granola.ts
5873
- var GRANOLA_TOOLS = [
5874
- "granola_list_notes",
5875
- "granola_get_note",
5876
- "granola_list_folders"
7150
+ // src/integrations/linkedin.ts
7151
+ var logger56 = createLogger("LinkedIn");
7152
+ var LINKEDIN_SCOPES = ["openid", "profile", "email", "w_member_social"];
7153
+ var LINKEDIN_TOOLS = ["linkedin_get_userinfo", "linkedin_create_post"];
7154
+ function linkedinIntegration(config = {}) {
7155
+ const oauth = {
7156
+ provider: "linkedin",
7157
+ clientId: config.clientId ?? getEnv("LINKEDIN_CLIENT_ID"),
7158
+ clientSecret: config.clientSecret ?? getEnv("LINKEDIN_CLIENT_SECRET"),
7159
+ scopes: config.scopes ?? [...LINKEDIN_SCOPES],
7160
+ optionalScopes: config.optionalScopes,
7161
+ redirectUri: config.redirectUri,
7162
+ config: {
7163
+ authorization_endpoint: "https://www.linkedin.com/oauth/v2/authorization",
7164
+ token_endpoint: "https://www.linkedin.com/oauth/v2/accessToken",
7165
+ response_type: "code",
7166
+ grant_types_supported: ["authorization_code", "refresh_token"]
7167
+ }
7168
+ };
7169
+ return {
7170
+ id: "linkedin",
7171
+ name: "LinkedIn",
7172
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/linkedin.png",
7173
+ description: "Read LinkedIn OpenID profile data and publish member posts",
7174
+ category: "Social Media",
7175
+ tools: [...LINKEDIN_TOOLS],
7176
+ oauth,
7177
+ async onInit(_client) {
7178
+ logger56.debug("LinkedIn integration initialized");
7179
+ },
7180
+ async onAfterConnect(_client) {
7181
+ logger56.debug("LinkedIn integration connected");
7182
+ }
7183
+ };
7184
+ }
7185
+ // src/integrations/threads.ts
7186
+ var logger57 = createLogger("Threads");
7187
+ var THREADS_SCOPES = [
7188
+ "threads_basic",
7189
+ "threads_content_publish",
7190
+ "threads_read_replies",
7191
+ "threads_manage_replies",
7192
+ "threads_manage_insights"
5877
7193
  ];
5878
- function granolaIntegration(options) {
5879
- if (!options.apiKey) {
5880
- throw new Error("granolaIntegration requires an apiKey");
7194
+ var THREADS_OPTIONAL_SCOPES = [
7195
+ "threads_keyword_search",
7196
+ "threads_profile_discovery",
7197
+ "threads_manage_mentions"
7198
+ ];
7199
+ var THREADS_TOOLS = [
7200
+ "threads_get_me",
7201
+ "threads_list_user_media",
7202
+ "threads_get_media",
7203
+ "threads_keyword_search",
7204
+ "threads_create_media_container",
7205
+ "threads_publish_media_container",
7206
+ "threads_get_container_status",
7207
+ "threads_list_replies",
7208
+ "threads_get_conversation",
7209
+ "threads_manage_reply",
7210
+ "threads_repost",
7211
+ "threads_delete_media"
7212
+ ];
7213
+ function threadsIntegration(config = {}) {
7214
+ const oauth = {
7215
+ provider: "threads",
7216
+ clientId: config.clientId ?? getEnv("THREADS_CLIENT_ID"),
7217
+ clientSecret: config.clientSecret ?? getEnv("THREADS_CLIENT_SECRET"),
7218
+ scopes: config.scopes ?? [...THREADS_SCOPES],
7219
+ optionalScopes: config.optionalScopes ?? [...THREADS_OPTIONAL_SCOPES],
7220
+ redirectUri: config.redirectUri,
7221
+ config: {
7222
+ authorization_endpoint: "https://threads.net/oauth/authorize",
7223
+ token_endpoint: "https://graph.threads.net/oauth/access_token",
7224
+ response_type: "code",
7225
+ grant_types_supported: ["authorization_code", "refresh_token"]
7226
+ }
7227
+ };
7228
+ return {
7229
+ id: "threads",
7230
+ name: "Threads",
7231
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/threads.png",
7232
+ description: "Publish Threads posts and manage media, replies, conversations, and keyword search",
7233
+ category: "Social Media",
7234
+ tools: [...THREADS_TOOLS],
7235
+ oauth,
7236
+ async onInit(_client) {
7237
+ logger57.debug("Threads integration initialized");
7238
+ },
7239
+ async onAfterConnect(_client) {
7240
+ logger57.debug("Threads integration connected");
7241
+ }
7242
+ };
7243
+ }
7244
+ // src/integrations/tiktok.ts
7245
+ var logger58 = createLogger("TikTok");
7246
+ var TIKTOK_SCOPES = ["user.info.basic", "video.list"];
7247
+ var TIKTOK_TOOLS = [
7248
+ "tiktok_get_user_info",
7249
+ "tiktok_list_videos",
7250
+ "tiktok_query_videos"
7251
+ ];
7252
+ function tiktokIntegration(config = {}) {
7253
+ const oauth = {
7254
+ provider: "tiktok",
7255
+ clientId: config.clientId ?? getEnv("TIKTOK_CLIENT_ID"),
7256
+ clientSecret: config.clientSecret ?? getEnv("TIKTOK_CLIENT_SECRET"),
7257
+ scopes: config.scopes ?? [...TIKTOK_SCOPES],
7258
+ optionalScopes: config.optionalScopes,
7259
+ redirectUri: config.redirectUri,
7260
+ config: {
7261
+ authorization_endpoint: "https://www.tiktok.com/v2/auth/authorize/",
7262
+ token_endpoint: "https://open.tiktokapis.com/v2/oauth/token/",
7263
+ response_type: "code",
7264
+ grant_types_supported: ["authorization_code", "refresh_token"]
7265
+ }
7266
+ };
7267
+ return {
7268
+ id: "tiktok",
7269
+ name: "TikTok",
7270
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/tiktok.png",
7271
+ description: "Read TikTok user profile data and user-authorized video metadata",
7272
+ category: "Social Media",
7273
+ tools: [...TIKTOK_TOOLS],
7274
+ oauth,
7275
+ async onInit(_client) {
7276
+ logger58.debug("TikTok integration initialized");
7277
+ },
7278
+ async onAfterConnect(_client) {
7279
+ logger58.debug("TikTok integration connected");
7280
+ }
7281
+ };
7282
+ }
7283
+ // src/integrations/trello.ts
7284
+ var logger59 = createLogger("Trello");
7285
+ var TRELLO_TOOLS = [
7286
+ "trello_get_member",
7287
+ "trello_list_boards",
7288
+ "trello_get_board",
7289
+ "trello_list_lists",
7290
+ "trello_get_list",
7291
+ "trello_list_cards",
7292
+ "trello_get_card",
7293
+ "trello_create_card",
7294
+ "trello_update_card",
7295
+ "trello_delete_card",
7296
+ "trello_add_card_comment",
7297
+ "trello_search"
7298
+ ];
7299
+ function encodeCredential(apiKey, memberToken) {
7300
+ const payload = JSON.stringify({ k: apiKey, t: memberToken });
7301
+ return `trello:${Buffer.from(payload).toString("base64url")}`;
7302
+ }
7303
+ function trelloIntegration(options = {}) {
7304
+ const apiKey = options.apiKey ?? getEnv("TRELLO_API_KEY");
7305
+ const memberToken = options.memberToken ?? getEnv("TRELLO_TOKEN");
7306
+ if (!apiKey || !memberToken) {
7307
+ throw new Error("trelloIntegration requires apiKey/memberToken or TRELLO_API_KEY/TRELLO_TOKEN");
5881
7308
  }
5882
7309
  return {
5883
- id: "granola",
5884
- name: "Granola",
5885
- tools: [...GRANOLA_TOOLS],
7310
+ id: "trello",
7311
+ name: "Trello",
7312
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/trello.png",
7313
+ description: "Manage Trello boards, lists, cards, comments, and search",
7314
+ category: "Productivity",
7315
+ tools: [...TRELLO_TOOLS],
5886
7316
  authType: "apiKey",
5887
7317
  getHeaders() {
5888
- return {
5889
- Authorization: `Bearer ${options.apiKey}`
5890
- };
7318
+ return { Authorization: `Bearer ${encodeCredential(apiKey, memberToken)}` };
7319
+ },
7320
+ async onInit(_client) {
7321
+ logger59.debug("Trello integration initialized");
7322
+ },
7323
+ async onAfterConnect(_client) {
7324
+ logger59.debug("Trello integration connected");
5891
7325
  }
5892
7326
  };
5893
7327
  }
5894
- // src/integrations/mercury.ts
5895
- var MERCURY_TOOLS = [
5896
- "mercury_get_organization",
5897
- "mercury_list_accounts",
5898
- "mercury_get_account",
5899
- "mercury_get_account_cards",
5900
- "mercury_list_account_transactions",
5901
- "mercury_get_account_transaction",
5902
- "mercury_list_account_statements",
5903
- "mercury_download_statement_pdf",
5904
- "mercury_list_transactions",
5905
- "mercury_get_transaction",
5906
- "mercury_update_transaction",
5907
- "mercury_upload_transaction_attachment",
5908
- "mercury_list_cards",
5909
- "mercury_get_card",
5910
- "mercury_create_card",
5911
- "mercury_update_card",
5912
- "mercury_freeze_card",
5913
- "mercury_unfreeze_card",
5914
- "mercury_cancel_card",
5915
- "mercury_list_categories",
5916
- "mercury_create_category",
5917
- "mercury_update_category",
5918
- "mercury_list_credit_accounts",
5919
- "mercury_list_users",
5920
- "mercury_get_user",
5921
- "mercury_list_recipients",
5922
- "mercury_get_recipient",
5923
- "mercury_create_recipient",
5924
- "mercury_update_recipient",
5925
- "mercury_list_recipient_attachments",
5926
- "mercury_upload_recipient_attachment",
5927
- "mercury_list_customers",
5928
- "mercury_get_customer",
7328
+ // src/integrations/typeform.ts
7329
+ var logger60 = createLogger("Typeform");
7330
+ var TYPEFORM_SCOPES = [
7331
+ "offline",
7332
+ "accounts:read",
7333
+ "forms:read",
7334
+ "forms:write",
7335
+ "responses:read",
7336
+ "workspaces:read"
7337
+ ];
7338
+ var TYPEFORM_TOOLS = [
7339
+ "typeform_get_me",
7340
+ "typeform_list_workspaces",
7341
+ "typeform_get_workspace",
7342
+ "typeform_list_forms",
7343
+ "typeform_get_form",
7344
+ "typeform_create_form",
7345
+ "typeform_update_form",
7346
+ "typeform_delete_form",
7347
+ "typeform_list_responses"
7348
+ ];
7349
+ function typeformIntegration(config = {}) {
7350
+ const oauth = {
7351
+ provider: "typeform",
7352
+ clientId: config.clientId ?? getEnv("TYPEFORM_CLIENT_ID"),
7353
+ clientSecret: config.clientSecret ?? getEnv("TYPEFORM_CLIENT_SECRET"),
7354
+ scopes: config.scopes ?? [...TYPEFORM_SCOPES],
7355
+ optionalScopes: config.optionalScopes,
7356
+ redirectUri: config.redirectUri,
7357
+ config: {
7358
+ authorization_endpoint: "https://api.typeform.com/oauth/authorize",
7359
+ token_endpoint: "https://api.typeform.com/oauth/token",
7360
+ response_type: "code",
7361
+ grant_types_supported: ["authorization_code", "refresh_token"]
7362
+ }
7363
+ };
7364
+ return {
7365
+ id: "typeform",
7366
+ name: "Typeform",
7367
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/typeform.png",
7368
+ description: "Manage Typeform workspaces, forms, and responses",
7369
+ category: "Productivity",
7370
+ tools: [...TYPEFORM_TOOLS],
7371
+ oauth,
7372
+ async onInit(_client) {
7373
+ logger60.debug("Typeform integration initialized");
7374
+ },
7375
+ async onAfterConnect(_client) {
7376
+ logger60.debug("Typeform integration connected");
7377
+ }
7378
+ };
7379
+ }
7380
+ // src/integrations/sharepoint.ts
7381
+ var logger61 = createLogger("SharePoint");
7382
+ var SHAREPOINT_SCOPES = ["Sites.ReadWrite.All", "Files.ReadWrite.All", "offline_access"];
7383
+ var SHAREPOINT_TOOLS = [
7384
+ "sharepoint_create_folder",
7385
+ "sharepoint_delete_item",
7386
+ "sharepoint_get_item",
7387
+ "sharepoint_get_site",
7388
+ "sharepoint_list_drives",
7389
+ "sharepoint_list_items",
7390
+ "sharepoint_search_files",
7391
+ "sharepoint_search_sites",
7392
+ "sharepoint_share_item",
7393
+ "sharepoint_update_item",
7394
+ "sharepoint_upload_file"
7395
+ ];
7396
+ function sharepointIntegration(config = {}) {
7397
+ const oauth = {
7398
+ provider: "sharepoint",
7399
+ clientId: config.clientId ?? getEnv("SHAREPOINT_CLIENT_ID"),
7400
+ clientSecret: config.clientSecret ?? getEnv("SHAREPOINT_CLIENT_SECRET"),
7401
+ scopes: config.scopes ?? [...SHAREPOINT_SCOPES],
7402
+ optionalScopes: config.optionalScopes,
7403
+ redirectUri: config.redirectUri,
7404
+ config: {
7405
+ authorization_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
7406
+ token_endpoint: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
7407
+ response_type: "code",
7408
+ grant_types_supported: ["authorization_code", "refresh_token"]
7409
+ }
7410
+ };
7411
+ return {
7412
+ id: "sharepoint",
7413
+ name: "SharePoint",
7414
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/sharepoint.png",
7415
+ description: "Search SharePoint sites and manage drives, files, folders, and sharing links",
7416
+ category: "Productivity",
7417
+ tools: [...SHAREPOINT_TOOLS],
7418
+ oauth,
7419
+ async onInit(_client) {
7420
+ logger61.debug("SharePoint integration initialized");
7421
+ },
7422
+ async onAfterConnect(_client) {
7423
+ logger61.debug("SharePoint integration connected");
7424
+ }
7425
+ };
7426
+ }
7427
+ // src/integrations/xero.ts
7428
+ var logger62 = createLogger("Xero");
7429
+ var XERO_SCOPES = [
7430
+ "openid",
7431
+ "profile",
7432
+ "email",
7433
+ "offline_access",
7434
+ "accounting.settings",
7435
+ "accounting.transactions",
7436
+ "accounting.contacts",
7437
+ "accounting.attachments"
7438
+ ];
7439
+ var XERO_TOOLS = [
7440
+ "xero_list_connections",
7441
+ "xero_get_organisation",
7442
+ "xero_list_accounts",
7443
+ "xero_list_contacts",
7444
+ "xero_get_contact",
7445
+ "xero_create_contact",
7446
+ "xero_list_invoices",
7447
+ "xero_get_invoice",
7448
+ "xero_create_invoice",
7449
+ "xero_list_bank_transactions"
7450
+ ];
7451
+ function xeroIntegration(config = {}) {
7452
+ const oauth = {
7453
+ provider: "xero",
7454
+ clientId: config.clientId ?? getEnv("XERO_CLIENT_ID"),
7455
+ clientSecret: config.clientSecret ?? getEnv("XERO_CLIENT_SECRET"),
7456
+ scopes: config.scopes ?? [...XERO_SCOPES],
7457
+ optionalScopes: config.optionalScopes,
7458
+ redirectUri: config.redirectUri,
7459
+ config: {
7460
+ authorization_endpoint: "https://login.xero.com/identity/connect/authorize",
7461
+ token_endpoint: "https://identity.xero.com/connect/token",
7462
+ response_type: "code",
7463
+ grant_types_supported: ["authorization_code", "refresh_token"]
7464
+ }
7465
+ };
7466
+ return {
7467
+ id: "xero",
7468
+ name: "Xero",
7469
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/xero.png",
7470
+ description: "Manage Xero organisations, accounts, contacts, invoices, and bank transactions",
7471
+ category: "Finance",
7472
+ tools: [...XERO_TOOLS],
7473
+ oauth,
7474
+ async onInit(_client) {
7475
+ logger62.debug("Xero integration initialized");
7476
+ },
7477
+ async onAfterConnect(_client) {
7478
+ logger62.debug("Xero integration connected");
7479
+ }
7480
+ };
7481
+ }
7482
+ // src/integrations/salesforce.ts
7483
+ var logger63 = createLogger("Salesforce");
7484
+ var SALESFORCE_TOOLS = [
7485
+ "salesforce_query",
7486
+ "salesforce_get_limits",
7487
+ "salesforce_describe_global",
7488
+ "salesforce_sobject_describe",
7489
+ "salesforce_sobject_get",
7490
+ "salesforce_sobject_create",
7491
+ "salesforce_sobject_update",
7492
+ "salesforce_sobject_delete"
7493
+ ];
7494
+ function salesforceIntegration(config = {}) {
7495
+ const oauth = {
7496
+ provider: "salesforce",
7497
+ clientId: config.clientId ?? getEnv("SALESFORCE_CLIENT_ID"),
7498
+ clientSecret: config.clientSecret ?? getEnv("SALESFORCE_CLIENT_SECRET"),
7499
+ scopes: config.scopes ?? ["api", "refresh_token", "offline_access"],
7500
+ optionalScopes: config.optionalScopes,
7501
+ redirectUri: config.redirectUri,
7502
+ config: {
7503
+ ...config,
7504
+ subdomain: config.subdomain ?? getEnv("SALESFORCE_SUBDOMAIN")
7505
+ }
7506
+ };
7507
+ return {
7508
+ id: "salesforce",
7509
+ name: "Salesforce",
7510
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/salesforce.png",
7511
+ tools: [...SALESFORCE_TOOLS],
7512
+ oauth,
7513
+ async onInit(_client) {
7514
+ logger63.debug("Salesforce integration initialized");
7515
+ },
7516
+ async onAfterConnect(_client) {
7517
+ logger63.debug("Salesforce integration connected");
7518
+ }
7519
+ };
7520
+ }
7521
+ // src/integrations/attio.ts
7522
+ var logger64 = createLogger("Attio");
7523
+ var ATTIO_SCOPES = [
7524
+ "record_permission:read-write",
7525
+ "object_configuration:read",
7526
+ "user_management:read",
7527
+ "task:read"
7528
+ ];
7529
+ var ATTIO_TOOLS = [
7530
+ "attio_get_self",
7531
+ "attio_query_people",
7532
+ "attio_get_person",
7533
+ "attio_create_person",
7534
+ "attio_update_person",
7535
+ "attio_assert_person",
7536
+ "attio_query_companies",
7537
+ "attio_get_company",
7538
+ "attio_create_company",
7539
+ "attio_update_company",
7540
+ "attio_assert_company",
7541
+ "attio_list_tasks",
7542
+ "attio_get_task"
7543
+ ];
7544
+ function attioIntegration(config = {}) {
7545
+ const oauth = {
7546
+ provider: "attio",
7547
+ clientId: config.clientId ?? getEnv("ATTIO_CLIENT_ID"),
7548
+ clientSecret: config.clientSecret ?? getEnv("ATTIO_CLIENT_SECRET"),
7549
+ scopes: config.scopes ?? [...ATTIO_SCOPES],
7550
+ optionalScopes: config.optionalScopes,
7551
+ redirectUri: config.redirectUri,
7552
+ config: {
7553
+ authorization_endpoint: "https://app.attio.com/authorize",
7554
+ token_endpoint: "https://app.attio.com/oauth/token",
7555
+ response_type: "code",
7556
+ grant_types_supported: ["authorization_code", "refresh_token"]
7557
+ }
7558
+ };
7559
+ return {
7560
+ id: "attio",
7561
+ name: "Attio",
7562
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/attio.png",
7563
+ description: "Manage Attio people, companies, records, and tasks",
7564
+ category: "Business",
7565
+ tools: [...ATTIO_TOOLS],
7566
+ oauth,
7567
+ async onInit(_client) {
7568
+ logger64.debug("Attio integration initialized");
7569
+ },
7570
+ async onAfterConnect(_client) {
7571
+ logger64.debug("Attio integration connected");
7572
+ }
7573
+ };
7574
+ }
7575
+ // src/integrations/gchat.ts
7576
+ var logger65 = createLogger("Google Chat");
7577
+ var GCHAT_SCOPES = [
7578
+ "https://www.googleapis.com/auth/chat.messages",
7579
+ "https://www.googleapis.com/auth/chat.spaces.readonly"
7580
+ ];
7581
+ var GCHAT_TOOLS = [
7582
+ "gchat_delete_message",
7583
+ "gchat_get_message",
7584
+ "gchat_get_space",
7585
+ "gchat_list_members",
7586
+ "gchat_list_messages",
7587
+ "gchat_list_spaces",
7588
+ "gchat_send_message",
7589
+ "gchat_update_message"
7590
+ ];
7591
+ function gchatIntegration(config = {}) {
7592
+ const oauth = {
7593
+ provider: "gchat",
7594
+ clientId: config.clientId ?? getEnv("GCHAT_CLIENT_ID"),
7595
+ clientSecret: config.clientSecret ?? getEnv("GCHAT_CLIENT_SECRET"),
7596
+ scopes: config.scopes ?? [...GCHAT_SCOPES],
7597
+ optionalScopes: config.optionalScopes,
7598
+ redirectUri: config.redirectUri,
7599
+ config: {
7600
+ authorization_endpoint: "https://accounts.google.com/o/oauth2/v2/auth",
7601
+ token_endpoint: "https://oauth2.googleapis.com/token",
7602
+ response_type: "code",
7603
+ grant_types_supported: ["authorization_code", "refresh_token"]
7604
+ }
7605
+ };
7606
+ return {
7607
+ id: "gchat",
7608
+ name: "Google Chat",
7609
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_chat.png",
7610
+ description: "List Google Chat spaces and manage messages and memberships",
7611
+ category: "Communication",
7612
+ tools: [...GCHAT_TOOLS],
7613
+ oauth,
7614
+ async onInit(_client) {
7615
+ logger65.debug("Google Chat integration initialized");
7616
+ },
7617
+ async onAfterConnect(_client) {
7618
+ logger65.debug("Google Chat integration connected");
7619
+ }
7620
+ };
7621
+ }
7622
+ // src/integrations/shopify.ts
7623
+ var logger66 = createLogger("Shopify");
7624
+ var SHOPIFY_SCOPES = [
7625
+ "read_products",
7626
+ "write_products",
7627
+ "read_orders",
7628
+ "write_orders",
7629
+ "read_customers",
7630
+ "write_customers",
7631
+ "read_inventory",
7632
+ "write_inventory",
7633
+ "read_content",
7634
+ "write_content",
7635
+ "read_fulfillments",
7636
+ "write_fulfillments",
7637
+ "read_analytics"
7638
+ ];
7639
+ var SHOPIFY_TOOLS = [
7640
+ "shopify_admin_graphql",
7641
+ "shopify_rest_get",
7642
+ "shopify_rest_post",
7643
+ "shopify_rest_put",
7644
+ "shopify_rest_delete",
7645
+ "shopify_get_shop"
7646
+ ];
7647
+ function shopifyIntegration(config = {}) {
7648
+ const oauth = {
7649
+ provider: "shopify",
7650
+ clientId: config.clientId ?? getEnv("SHOPIFY_CLIENT_ID"),
7651
+ clientSecret: config.clientSecret ?? getEnv("SHOPIFY_CLIENT_SECRET"),
7652
+ scopes: config.scopes ?? [...SHOPIFY_SCOPES],
7653
+ optionalScopes: config.optionalScopes,
7654
+ redirectUri: config.redirectUri,
7655
+ config: {
7656
+ authorization_endpoint: "https://shopify.oauth.placeholder/admin/oauth/authorize",
7657
+ token_endpoint: "https://shopify.oauth.placeholder/admin/oauth/access_token",
7658
+ response_type: "code",
7659
+ grant_types_supported: ["authorization_code"],
7660
+ subdomain: config.shop ?? getEnv("SHOPIFY_SHOP")
7661
+ }
7662
+ };
7663
+ return {
7664
+ id: "shopify",
7665
+ name: "Shopify",
7666
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/shopify.png",
7667
+ description: "Route-complete Shopify Admin access through GraphQL and REST tools",
7668
+ category: "Business",
7669
+ tools: [...SHOPIFY_TOOLS],
7670
+ oauth,
7671
+ async onInit(_client) {
7672
+ logger66.debug("Shopify integration initialized");
7673
+ },
7674
+ async onAfterConnect(_client) {
7675
+ logger66.debug("Shopify integration connected");
7676
+ }
7677
+ };
7678
+ }
7679
+ // src/integrations/convex.ts
7680
+ var logger67 = createLogger("Convex");
7681
+ var CONVEX_TOOLS = [
7682
+ "convex_management_token_details",
7683
+ "convex_management_list_projects",
7684
+ "convex_management_create_project",
7685
+ "convex_management_get_project",
7686
+ "convex_management_delete_project",
7687
+ "convex_management_list_deployments",
7688
+ "convex_management_list_team_deployments",
7689
+ "convex_management_get_deployment",
7690
+ "convex_management_create_deployment",
7691
+ "convex_management_update_deployment",
7692
+ "convex_management_delete_deployment",
7693
+ "convex_management_list_deployment_regions",
7694
+ "convex_management_list_deployment_classes",
7695
+ "convex_management_list_default_environment_variables",
7696
+ "convex_management_update_default_environment_variables",
7697
+ "convex_deployment_list_environment_variables",
7698
+ "convex_deployment_update_environment_variables"
7699
+ ];
7700
+ function convexIntegration(options = {}) {
7701
+ const accessToken = options.accessToken ?? getEnv("CONVEX_ACCESS_TOKEN");
7702
+ if (!accessToken) {
7703
+ throw new Error("convexIntegration requires accessToken or CONVEX_ACCESS_TOKEN");
7704
+ }
7705
+ return {
7706
+ id: "convex",
7707
+ name: "Convex",
7708
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/convex.png",
7709
+ description: "Manage Convex projects, deployments, regions, classes, and environment variables",
7710
+ category: "Infrastructure",
7711
+ tools: [...CONVEX_TOOLS],
7712
+ authType: "apiKey",
7713
+ getHeaders() {
7714
+ return { Authorization: `Bearer ${accessToken}` };
7715
+ },
7716
+ async onInit(_client) {
7717
+ logger67.debug("Convex integration initialized");
7718
+ },
7719
+ async onAfterConnect(_client) {
7720
+ logger67.debug("Convex integration connected");
7721
+ }
7722
+ };
7723
+ }
7724
+ // src/integrations/etoro.ts
7725
+ var logger68 = createLogger("eToro");
7726
+ var ETORO_TOOLS = [
7727
+ "etoro_get_identity",
7728
+ "etoro_get_portfolio",
7729
+ "etoro_search_instruments",
7730
+ "etoro_get_instrument_rates",
7731
+ "etoro_list_trade_history",
7732
+ "etoro_list_watchlists"
7733
+ ];
7734
+ function etoroIntegration(options = {}) {
7735
+ const publicApiKey = options.publicApiKey ?? getEnv("ETORO_PUBLIC_API_KEY");
7736
+ const userKey = options.userKey ?? getEnv("ETORO_USER_KEY");
7737
+ if (!publicApiKey || !userKey) {
7738
+ throw new Error("etoroIntegration requires publicApiKey/userKey or ETORO_PUBLIC_API_KEY/ETORO_USER_KEY");
7739
+ }
7740
+ return {
7741
+ id: "etoro",
7742
+ name: "eToro",
7743
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/etoro.png",
7744
+ description: "Access eToro Public API identity, portfolio, market data, trade history, and watchlists",
7745
+ category: "Finance",
7746
+ tools: [...ETORO_TOOLS],
7747
+ authType: "apiKey",
7748
+ getHeaders() {
7749
+ return {
7750
+ "X-Api-Key": publicApiKey,
7751
+ "X-User-Key": userKey
7752
+ };
7753
+ },
7754
+ async onInit(_client) {
7755
+ logger68.debug("eToro integration initialized");
7756
+ },
7757
+ async onAfterConnect(_client) {
7758
+ logger68.debug("eToro integration connected");
7759
+ }
7760
+ };
7761
+ }
7762
+ // src/integrations/alpaca.ts
7763
+ var logger69 = createLogger("Alpaca");
7764
+ var ALPACA_TOOLS = [
7765
+ "alpaca_get_account",
7766
+ "alpaca_list_positions",
7767
+ "alpaca_get_position",
7768
+ "alpaca_list_orders",
7769
+ "alpaca_get_order",
7770
+ "alpaca_create_order",
7771
+ "alpaca_cancel_order",
7772
+ "alpaca_cancel_all_orders",
7773
+ "alpaca_get_clock",
7774
+ "alpaca_get_calendar",
7775
+ "alpaca_list_assets",
7776
+ "alpaca_get_asset",
7777
+ "alpaca_get_portfolio_history"
7778
+ ];
7779
+ function alpacaIntegration(options = {}) {
7780
+ const apiKeyId = options.apiKeyId ?? getEnv("ALPACA_API_KEY_ID");
7781
+ const apiSecretKey = options.apiSecretKey ?? getEnv("ALPACA_API_SECRET_KEY");
7782
+ if (!apiKeyId || !apiSecretKey) {
7783
+ throw new Error("alpacaIntegration requires apiKeyId and apiSecretKey (or ALPACA_API_KEY_ID and ALPACA_API_SECRET_KEY)");
7784
+ }
7785
+ const environment = options.environment ?? "paper";
7786
+ return {
7787
+ id: "alpaca",
7788
+ name: "Alpaca",
7789
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/alpaca.png",
7790
+ description: "Trade US equities and crypto with Alpaca: account, orders, positions, clock, and assets",
7791
+ category: "Finance",
7792
+ tools: [...ALPACA_TOOLS],
7793
+ authType: "apiKey",
7794
+ getHeaders() {
7795
+ const headers = {
7796
+ "APCA-API-KEY-ID": apiKeyId,
7797
+ "APCA-API-SECRET-KEY": apiSecretKey
7798
+ };
7799
+ if (environment === "live") {
7800
+ headers["X-Integrate-Alpaca-Environment"] = "live";
7801
+ }
7802
+ return headers;
7803
+ },
7804
+ async onInit(_client) {
7805
+ logger69.debug("Alpaca integration initialized");
7806
+ },
7807
+ async onAfterConnect(_client) {
7808
+ logger69.debug("Alpaca integration connected");
7809
+ }
7810
+ };
7811
+ }
7812
+ // src/integrations/neon.ts
7813
+ var logger70 = createLogger("Neon");
7814
+ var NEON_TOOLS = [
7815
+ "neon_list_api_keys",
7816
+ "neon_create_api_key",
7817
+ "neon_revoke_api_key",
7818
+ "neon_list_organizations",
7819
+ "neon_list_projects",
7820
+ "neon_list_shared_projects",
7821
+ "neon_create_project",
7822
+ "neon_get_project",
7823
+ "neon_update_project",
7824
+ "neon_delete_project",
7825
+ "neon_recover_project",
7826
+ "neon_list_branches",
7827
+ "neon_create_branch",
7828
+ "neon_get_branch",
7829
+ "neon_delete_branch",
7830
+ "neon_list_operations",
7831
+ "neon_get_operation",
7832
+ "neon_get_connection_uri"
7833
+ ];
7834
+ function neonIntegration(options = {}) {
7835
+ const apiKey = options.apiKey ?? getEnv("NEON_API_KEY");
7836
+ if (!apiKey) {
7837
+ throw new Error("neonIntegration requires apiKey or NEON_API_KEY environment variable");
7838
+ }
7839
+ return {
7840
+ id: "neon",
7841
+ name: "Neon",
7842
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/neon.png",
7843
+ description: "Manage Neon Postgres projects, branches, API keys, and connection strings",
7844
+ category: "Infrastructure",
7845
+ tools: [...NEON_TOOLS],
7846
+ authType: "apiKey",
7847
+ getHeaders() {
7848
+ return {
7849
+ Authorization: `Bearer ${apiKey}`
7850
+ };
7851
+ },
7852
+ async onInit(_client) {
7853
+ logger70.debug("Neon integration initialized");
7854
+ },
7855
+ async onAfterConnect(_client) {
7856
+ logger70.debug("Neon integration connected");
7857
+ }
7858
+ };
7859
+ }
7860
+ // src/integrations/workos.ts
7861
+ var logger71 = createLogger("WorkOS");
7862
+ var WORKOS_TOOLS = [
7863
+ "workos_list_organizations",
7864
+ "workos_get_organization",
7865
+ "workos_create_organization",
7866
+ "workos_update_organization",
7867
+ "workos_list_users",
7868
+ "workos_get_user",
7869
+ "workos_list_organization_memberships",
7870
+ "workos_list_directories",
7871
+ "workos_get_directory",
7872
+ "workos_list_directory_users",
7873
+ "workos_get_directory_user"
7874
+ ];
7875
+ function workosIntegration(options = {}) {
7876
+ const apiKey = options.apiKey ?? getEnv("WORKOS_API_KEY");
7877
+ if (!apiKey) {
7878
+ throw new Error("workosIntegration requires apiKey or WORKOS_API_KEY environment variable");
7879
+ }
7880
+ return {
7881
+ id: "workos",
7882
+ name: "WorkOS",
7883
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/workos.png",
7884
+ description: "Manage WorkOS organizations, AuthKit users, memberships, and directory sync",
7885
+ category: "Infrastructure",
7886
+ tools: [...WORKOS_TOOLS],
7887
+ authType: "apiKey",
7888
+ getHeaders() {
7889
+ return {
7890
+ Authorization: `Bearer ${apiKey}`
7891
+ };
7892
+ },
7893
+ async onInit(_client) {
7894
+ logger71.debug("WorkOS integration initialized");
7895
+ },
7896
+ async onAfterConnect(_client) {
7897
+ logger71.debug("WorkOS integration connected");
7898
+ }
7899
+ };
7900
+ }
7901
+ // src/integrations/workday.ts
7902
+ var logger72 = createLogger("Workday");
7903
+ var WORKDAY_TOOLS = [
7904
+ "workday_list_workers",
7905
+ "workday_get_worker"
7906
+ ];
7907
+ function workdayIntegration(config = {}) {
7908
+ const oauth = {
7909
+ provider: "workday",
7910
+ clientId: config.clientId ?? getEnv("WORKDAY_CLIENT_ID"),
7911
+ clientSecret: config.clientSecret ?? getEnv("WORKDAY_CLIENT_SECRET"),
7912
+ scopes: config.scopes,
7913
+ redirectUri: config.redirectUri,
7914
+ config: {
7915
+ subdomain: config.subdomain ?? getEnv("WORKDAY_TENANT_DESCRIPTOR")
7916
+ }
7917
+ };
7918
+ return {
7919
+ id: "workday",
7920
+ name: "Workday",
7921
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/workday.png",
7922
+ description: "Query Workday workers via the tenant REST API",
7923
+ category: "Business",
7924
+ tools: [...WORKDAY_TOOLS],
7925
+ oauth,
7926
+ async onInit(_client) {
7927
+ logger72.debug("Workday integration initialized");
7928
+ },
7929
+ async onAfterConnect(_client) {
7930
+ logger72.debug("Workday integration connected");
7931
+ }
7932
+ };
7933
+ }
7934
+ // src/integrations/tldraw.ts
7935
+ var TLDRAW_TOOLS = [
7936
+ "tldraw_unfurl_url",
7937
+ "tldraw_create_room_snapshot",
7938
+ "tldraw_get_room_snapshot",
7939
+ "tldraw_get_published_snapshot",
7940
+ "tldraw_get_readonly_slug"
7941
+ ];
7942
+ function tldrawIntegration(options = {}) {
7943
+ const apiKey = options.apiKey ?? getEnv("TLDRAW_API_KEY");
7944
+ return {
7945
+ id: "tldraw",
7946
+ name: "tldraw",
7947
+ tools: [...TLDRAW_TOOLS],
7948
+ authType: apiKey ? "apiKey" : undefined,
7949
+ getHeaders: apiKey ? () => ({ Authorization: `Bearer ${apiKey}` }) : undefined
7950
+ };
7951
+ }
7952
+ // src/integrations/upstash.ts
7953
+ var logger73 = createLogger("Upstash");
7954
+ var UPSTASH_TOOLS = [
7955
+ "upstash_redis_run",
7956
+ "upstash_redis_get",
7957
+ "upstash_redis_set",
7958
+ "upstash_redis_del",
7959
+ "upstash_qstash_publish"
7960
+ ];
7961
+ function upstashIntegration(options = {}) {
7962
+ const redisUrl = options.redisUrl ?? getEnv("UPSTASH_REDIS_REST_URL");
7963
+ const redisToken = options.redisToken ?? getEnv("UPSTASH_REDIS_REST_TOKEN");
7964
+ const qstashToken = options.qstashToken ?? getEnv("QSTASH_TOKEN");
7965
+ const hasRedis = !!(redisUrl && redisToken);
7966
+ const onlyPartialRedis = !!redisUrl && !redisToken || !redisUrl && !!redisToken;
7967
+ if (onlyPartialRedis) {
7968
+ throw new Error("upstashIntegration requires both redisUrl and redisToken for Redis tools (or omit both for QStash-only)");
7969
+ }
7970
+ if (!hasRedis && !qstashToken) {
7971
+ throw new Error("upstashIntegration requires Redis credentials (UPSTASH_REDIS_REST_URL + UPSTASH_REDIS_REST_TOKEN) and/or QSTASH_TOKEN");
7972
+ }
7973
+ return {
7974
+ id: "upstash",
7975
+ name: "Upstash",
7976
+ logoUrl: "https://avatars.githubusercontent.com/u/74989412?s=200&v=4",
7977
+ description: "Serverless Redis (REST), QStash messaging, and HTTP APIs",
7978
+ category: "Infrastructure",
7979
+ tools: [...UPSTASH_TOOLS],
7980
+ authType: "apiKey",
7981
+ getHeaders() {
7982
+ const headers = {};
7983
+ if (hasRedis) {
7984
+ headers["X-Upstash-Redis-Rest-Url"] = redisUrl;
7985
+ headers["X-Upstash-Redis-Rest-Token"] = redisToken;
7986
+ }
7987
+ if (qstashToken) {
7988
+ headers["X-Qstash-Token"] = qstashToken;
7989
+ }
7990
+ return headers;
7991
+ },
7992
+ async onInit(_client) {
7993
+ logger73.debug("Upstash integration initialized");
7994
+ },
7995
+ async onAfterConnect(_client) {
7996
+ logger73.debug("Upstash integration connected");
7997
+ }
7998
+ };
7999
+ }
8000
+ // src/integrations/granola.ts
8001
+ var GRANOLA_TOOLS = [
8002
+ "granola_list_notes",
8003
+ "granola_get_note",
8004
+ "granola_list_folders"
8005
+ ];
8006
+ function granolaIntegration(options) {
8007
+ if (!options.apiKey) {
8008
+ throw new Error("granolaIntegration requires an apiKey");
8009
+ }
8010
+ return {
8011
+ id: "granola",
8012
+ name: "Granola",
8013
+ tools: [...GRANOLA_TOOLS],
8014
+ authType: "apiKey",
8015
+ getHeaders() {
8016
+ return {
8017
+ Authorization: `Bearer ${options.apiKey}`
8018
+ };
8019
+ }
8020
+ };
8021
+ }
8022
+ // src/integrations/mercury.ts
8023
+ var MERCURY_TOOLS = [
8024
+ "mercury_get_organization",
8025
+ "mercury_list_accounts",
8026
+ "mercury_get_account",
8027
+ "mercury_get_account_cards",
8028
+ "mercury_list_account_transactions",
8029
+ "mercury_get_account_transaction",
8030
+ "mercury_list_account_statements",
8031
+ "mercury_download_statement_pdf",
8032
+ "mercury_list_transactions",
8033
+ "mercury_get_transaction",
8034
+ "mercury_update_transaction",
8035
+ "mercury_upload_transaction_attachment",
8036
+ "mercury_list_cards",
8037
+ "mercury_get_card",
8038
+ "mercury_create_card",
8039
+ "mercury_update_card",
8040
+ "mercury_freeze_card",
8041
+ "mercury_unfreeze_card",
8042
+ "mercury_cancel_card",
8043
+ "mercury_list_categories",
8044
+ "mercury_create_category",
8045
+ "mercury_update_category",
8046
+ "mercury_list_credit_accounts",
8047
+ "mercury_list_users",
8048
+ "mercury_get_user",
8049
+ "mercury_list_recipients",
8050
+ "mercury_get_recipient",
8051
+ "mercury_create_recipient",
8052
+ "mercury_update_recipient",
8053
+ "mercury_list_recipient_attachments",
8054
+ "mercury_upload_recipient_attachment",
8055
+ "mercury_list_customers",
8056
+ "mercury_get_customer",
5929
8057
  "mercury_create_customer",
5930
8058
  "mercury_update_customer",
5931
8059
  "mercury_delete_customer",
@@ -5957,19 +8085,995 @@ var MERCURY_TOOLS = [
5957
8085
  "mercury_send_money",
5958
8086
  "mercury_request_send_money"
5959
8087
  ];
5960
- function mercuryIntegration(options) {
5961
- if (!options.apiKey) {
5962
- throw new Error("mercuryIntegration requires an apiKey");
8088
+ function mercuryIntegration(options) {
8089
+ if (!options.apiKey) {
8090
+ throw new Error("mercuryIntegration requires an apiKey");
8091
+ }
8092
+ return {
8093
+ id: "mercury",
8094
+ name: "Mercury",
8095
+ tools: [...MERCURY_TOOLS],
8096
+ authType: "apiKey",
8097
+ getHeaders() {
8098
+ return {
8099
+ Authorization: `Bearer ${options.apiKey}`
8100
+ };
8101
+ }
8102
+ };
8103
+ }
8104
+ // src/integrations/mailchimp.ts
8105
+ var MAILCHIMP_TOOLS = [
8106
+ "mailchimp_ping",
8107
+ "mailchimp_list_audiences",
8108
+ "mailchimp_get_audience",
8109
+ "mailchimp_list_members",
8110
+ "mailchimp_get_member",
8111
+ "mailchimp_add_or_update_member",
8112
+ "mailchimp_archive_member",
8113
+ "mailchimp_list_campaigns"
8114
+ ];
8115
+ function mailchimpIntegration(config = {}) {
8116
+ const oauth = {
8117
+ provider: "mailchimp",
8118
+ clientId: config.clientId ?? getEnv("MAILCHIMP_CLIENT_ID"),
8119
+ clientSecret: config.clientSecret ?? getEnv("MAILCHIMP_CLIENT_SECRET"),
8120
+ scopes: config.scopes ?? [],
8121
+ optionalScopes: config.optionalScopes,
8122
+ redirectUri: config.redirectUri
8123
+ };
8124
+ return {
8125
+ id: "mailchimp",
8126
+ name: "Mailchimp",
8127
+ tools: [...MAILCHIMP_TOOLS],
8128
+ oauth
8129
+ };
8130
+ }
8131
+ // src/integrations/aws.ts
8132
+ var logger74 = createLogger("AWS");
8133
+ var AWS_TOOLS = [
8134
+ "aws_sts_get_caller_identity",
8135
+ "aws_ec2_describe_regions",
8136
+ "aws_ec2_describe_instances",
8137
+ "aws_s3_list_buckets",
8138
+ "aws_lambda_list_functions",
8139
+ "aws_cloudformation_list_stacks",
8140
+ "aws_iam_list_account_aliases"
8141
+ ];
8142
+ function resolveCredentials(opts) {
8143
+ const c = opts.credentials;
8144
+ const accessKeyId = c?.accessKeyId ?? getEnv("AWS_ACCESS_KEY_ID");
8145
+ const secretAccessKey = c?.secretAccessKey ?? getEnv("AWS_SECRET_ACCESS_KEY");
8146
+ if (!accessKeyId || !secretAccessKey) {
8147
+ throw new Error("awsIntegration requires accessKeyId and secretAccessKey (or AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY)");
8148
+ }
8149
+ return {
8150
+ accessKeyId,
8151
+ secretAccessKey,
8152
+ sessionToken: c?.sessionToken ?? getEnv("AWS_SESSION_TOKEN"),
8153
+ region: c?.region ?? getEnv("AWS_REGION") ?? getEnv("AWS_DEFAULT_REGION")
8154
+ };
8155
+ }
8156
+ function encodeAwsCredentialsPayload(c) {
8157
+ const o = {
8158
+ accessKeyId: c.accessKeyId,
8159
+ secretAccessKey: c.secretAccessKey
8160
+ };
8161
+ if (c.sessionToken) {
8162
+ o.sessionToken = c.sessionToken;
8163
+ }
8164
+ if (c.region) {
8165
+ o.region = c.region;
8166
+ }
8167
+ return JSON.stringify(o);
8168
+ }
8169
+ function awsIntegration(options = {}) {
8170
+ const creds = resolveCredentials(options);
8171
+ return {
8172
+ id: "aws",
8173
+ name: "Amazon Web Services",
8174
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/aws.png",
8175
+ description: "Query AWS accounts and resources using SigV4 (control-plane read APIs: STS, EC2, S3, Lambda, CloudFormation, IAM).",
8176
+ category: "Infrastructure",
8177
+ tools: [...AWS_TOOLS],
8178
+ authType: "apiKey",
8179
+ getHeaders() {
8180
+ return {
8181
+ Authorization: `Bearer ${encodeAwsCredentialsPayload(creds)}`
8182
+ };
8183
+ },
8184
+ async onInit(_client) {
8185
+ logger74.debug("AWS integration initialized");
8186
+ },
8187
+ async onAfterConnect(_client) {
8188
+ logger74.debug("AWS integration connected");
8189
+ }
8190
+ };
8191
+ }
8192
+ // src/integrations/wix.ts
8193
+ var logger75 = createLogger("Wix");
8194
+ var WIX_TOOLS = [
8195
+ "wix_query_products",
8196
+ "wix_get_product",
8197
+ "wix_create_product",
8198
+ "wix_update_product",
8199
+ "wix_search_orders",
8200
+ "wix_get_order"
8201
+ ];
8202
+ function wixIntegration(options = {}) {
8203
+ const apiKey = options.apiKey ?? getEnv("WIX_API_KEY");
8204
+ const siteId = options.siteId ?? getEnv("WIX_SITE_ID");
8205
+ if (!apiKey) {
8206
+ throw new Error("wixIntegration requires apiKey or WIX_API_KEY environment variable");
8207
+ }
8208
+ if (!siteId) {
8209
+ throw new Error("wixIntegration requires siteId or WIX_SITE_ID environment variable");
8210
+ }
8211
+ return {
8212
+ id: "wix",
8213
+ name: "Wix",
8214
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/wix.png",
8215
+ description: "Manage Wix site stores, products, and e-commerce orders via REST",
8216
+ category: "Business",
8217
+ tools: [...WIX_TOOLS],
8218
+ authType: "apiKey",
8219
+ getHeaders() {
8220
+ return {
8221
+ Authorization: apiKey,
8222
+ "wix-site-id": siteId
8223
+ };
8224
+ },
8225
+ async onInit(_client) {
8226
+ logger75.debug("Wix integration initialized");
8227
+ },
8228
+ async onAfterConnect(_client) {
8229
+ logger75.debug("Wix integration connected");
8230
+ }
8231
+ };
8232
+ }
8233
+ // src/integrations/auth0.ts
8234
+ var logger76 = createLogger("Auth0");
8235
+ var AUTH0_TOOLS = [
8236
+ "auth0_list_users",
8237
+ "auth0_get_user",
8238
+ "auth0_create_user",
8239
+ "auth0_patch_user",
8240
+ "auth0_delete_user",
8241
+ "auth0_list_connections",
8242
+ "auth0_get_connection",
8243
+ "auth0_list_clients",
8244
+ "auth0_get_client",
8245
+ "auth0_create_client",
8246
+ "auth0_patch_client"
8247
+ ];
8248
+ function normalizeAuth0Domain(raw) {
8249
+ let s = raw.trim();
8250
+ s = s.replace(/^https?:\/\//i, "");
8251
+ const slash = s.indexOf("/");
8252
+ if (slash >= 0)
8253
+ s = s.slice(0, slash);
8254
+ return s.replace(/\/$/, "");
8255
+ }
8256
+ async function fetchClientCredentialsToken(params) {
8257
+ const tokenUrl = `https://${params.domain}/oauth/token`;
8258
+ const body = new URLSearchParams({
8259
+ grant_type: "client_credentials",
8260
+ client_id: params.clientId,
8261
+ client_secret: params.clientSecret,
8262
+ audience: params.audience
8263
+ });
8264
+ const res = await fetch(tokenUrl, {
8265
+ method: "POST",
8266
+ headers: { "Content-Type": "application/x-www-form-urlencoded" },
8267
+ body
8268
+ });
8269
+ const text = await res.text();
8270
+ if (!res.ok) {
8271
+ throw new Error(`Auth0 token request failed (${res.status}): ${text}`);
8272
+ }
8273
+ const data = JSON.parse(text);
8274
+ if (!data.access_token) {
8275
+ throw new Error("Auth0 token response missing access_token");
8276
+ }
8277
+ return data;
8278
+ }
8279
+ function auth0Integration(options) {
8280
+ const domain = normalizeAuth0Domain(options.domain);
8281
+ if (!domain) {
8282
+ throw new Error("auth0Integration requires domain (tenant host)");
8283
+ }
8284
+ const clientId = options.clientId ?? getEnv("AUTH0_CLIENT_ID");
8285
+ const clientSecret = options.clientSecret ?? getEnv("AUTH0_CLIENT_SECRET");
8286
+ const initialToken = options.accessToken ?? getEnv("AUTH0_ACCESS_TOKEN") ?? "";
8287
+ if (!initialToken && (!clientId || !clientSecret)) {
8288
+ throw new Error("auth0Integration requires accessToken (or AUTH0_ACCESS_TOKEN) or both clientId/clientSecret (or AUTH0_CLIENT_ID / AUTH0_CLIENT_SECRET)");
8289
+ }
8290
+ let accessToken = initialToken;
8291
+ let tokenExpiresAtMs = 0;
8292
+ async function ensureFreshToken() {
8293
+ if (!clientId || !clientSecret)
8294
+ return;
8295
+ if (accessToken && Date.now() < tokenExpiresAtMs - 60000)
8296
+ return;
8297
+ const audience = options.audience?.trim() || `https://${domain}/api/v2/`;
8298
+ const tok = await fetchClientCredentialsToken({
8299
+ domain,
8300
+ clientId,
8301
+ clientSecret,
8302
+ audience
8303
+ });
8304
+ accessToken = tok.access_token;
8305
+ const sec = typeof tok.expires_in === "number" && tok.expires_in > 0 ? tok.expires_in : 86400;
8306
+ tokenExpiresAtMs = Date.now() + sec * 1000;
8307
+ }
8308
+ return {
8309
+ id: "auth0",
8310
+ name: "Auth0",
8311
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/auth0.png",
8312
+ description: "Manage Auth0 users, connections, and applications via the Management API",
8313
+ category: "Engineering",
8314
+ tools: [...AUTH0_TOOLS],
8315
+ authType: "apiKey",
8316
+ getHeaders() {
8317
+ return {
8318
+ Authorization: `Bearer ${accessToken}`,
8319
+ "X-Auth0-Domain": domain
8320
+ };
8321
+ },
8322
+ async onInit() {
8323
+ logger76.debug("Auth0 integration initialized");
8324
+ },
8325
+ async onBeforeConnect() {
8326
+ await ensureFreshToken();
8327
+ if (!accessToken) {
8328
+ throw new Error("Auth0 access token is not configured");
8329
+ }
8330
+ },
8331
+ async onAfterConnect() {
8332
+ logger76.debug("Auth0 integration connected");
8333
+ }
8334
+ };
8335
+ }
8336
+ // src/integrations/binance.ts
8337
+ var logger77 = createLogger("Binance");
8338
+ var BINANCE_TOOLS = [
8339
+ "binance_ping",
8340
+ "binance_get_server_time",
8341
+ "binance_get_exchange_info",
8342
+ "binance_get_ticker_price",
8343
+ "binance_get_ticker_24hr",
8344
+ "binance_get_order_book",
8345
+ "binance_get_recent_trades",
8346
+ "binance_get_klines",
8347
+ "binance_get_account",
8348
+ "binance_get_open_orders",
8349
+ "binance_get_all_orders",
8350
+ "binance_get_my_trades"
8351
+ ];
8352
+ function normalizeBaseUrl(url) {
8353
+ const u = (url ?? "").trim().replace(/\/+$/, "");
8354
+ return u || "https://api.binance.com";
8355
+ }
8356
+ function binanceIntegration(options = {}) {
8357
+ const apiKey = options.apiKey ?? getEnv("BINANCE_API_KEY");
8358
+ const secret = options.secret ?? getEnv("BINANCE_SECRET_KEY");
8359
+ if (!apiKey || !secret) {
8360
+ throw new Error("binanceIntegration requires apiKey and secret (or BINANCE_API_KEY and BINANCE_SECRET_KEY environment variables)");
8361
+ }
8362
+ const baseUrl = normalizeBaseUrl(options.baseUrl);
8363
+ return {
8364
+ id: "binance",
8365
+ name: "Binance",
8366
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/binance.png",
8367
+ description: "Read Binance Spot market data and account information with API keys scoped to reading only",
8368
+ category: "Finance",
8369
+ tools: [...BINANCE_TOOLS],
8370
+ authType: "apiKey",
8371
+ getHeaders() {
8372
+ return {
8373
+ Authorization: `Bearer ${apiKey}`,
8374
+ "X-MBX-APIKEY": apiKey,
8375
+ "X-Binance-Api-Secret": secret,
8376
+ "X-Binance-Base-Url": baseUrl
8377
+ };
8378
+ },
8379
+ async onInit(_client) {
8380
+ logger77.debug("Binance integration initialized");
8381
+ },
8382
+ async onAfterConnect(_client) {
8383
+ logger77.debug("Binance integration connected");
8384
+ }
8385
+ };
8386
+ }
8387
+ // src/integrations/canva.ts
8388
+ var logger78 = createLogger("Canva");
8389
+ var CANVA_TOOLS = [
8390
+ "canva_get_me",
8391
+ "canva_get_profile",
8392
+ "canva_list_designs",
8393
+ "canva_get_design",
8394
+ "canva_get_design_export_formats",
8395
+ "canva_create_design",
8396
+ "canva_get_folder",
8397
+ "canva_list_folder_items",
8398
+ "canva_create_folder",
8399
+ "canva_update_folder",
8400
+ "canva_delete_folder",
8401
+ "canva_list_brand_templates",
8402
+ "canva_get_brand_template",
8403
+ "canva_create_export_job",
8404
+ "canva_get_export_job"
8405
+ ];
8406
+ function canvaIntegration(config = {}) {
8407
+ const oauth = {
8408
+ provider: "canva",
8409
+ clientId: config.clientId ?? getEnv("CANVA_CLIENT_ID"),
8410
+ clientSecret: config.clientSecret ?? getEnv("CANVA_CLIENT_SECRET"),
8411
+ scopes: config.scopes,
8412
+ optionalScopes: config.optionalScopes,
8413
+ redirectUri: config.redirectUri,
8414
+ config: { ...config }
8415
+ };
8416
+ return {
8417
+ id: "canva",
8418
+ name: "Canva",
8419
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/canva.png",
8420
+ description: "List and create Canva designs, manage folders, and export assets",
8421
+ category: "Productivity",
8422
+ tools: [...CANVA_TOOLS],
8423
+ oauth,
8424
+ async onInit(_client) {
8425
+ logger78.debug("Canva integration initialized");
8426
+ },
8427
+ async onAfterConnect(_client) {
8428
+ logger78.debug("Canva integration connected");
8429
+ }
8430
+ };
8431
+ }
8432
+ // src/integrations/clerk.ts
8433
+ var logger79 = createLogger("Clerk");
8434
+ var CLERK_TOOLS = [
8435
+ "clerk_list_users",
8436
+ "clerk_get_user",
8437
+ "clerk_create_user",
8438
+ "clerk_update_user",
8439
+ "clerk_delete_user",
8440
+ "clerk_list_organizations",
8441
+ "clerk_get_organization",
8442
+ "clerk_create_organization",
8443
+ "clerk_update_organization",
8444
+ "clerk_delete_organization",
8445
+ "clerk_list_sessions",
8446
+ "clerk_get_session",
8447
+ "clerk_revoke_session"
8448
+ ];
8449
+ function clerkIntegration(options = {}) {
8450
+ const secretKey = options.secretKey ?? getEnv("CLERK_SECRET_KEY");
8451
+ if (!secretKey) {
8452
+ throw new Error("clerkIntegration requires secretKey or CLERK_SECRET_KEY environment variable");
8453
+ }
8454
+ return {
8455
+ id: "clerk",
8456
+ name: "Clerk",
8457
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/clerk.png",
8458
+ description: "Manage Clerk users, organizations, and sessions via the Backend API",
8459
+ category: "Business",
8460
+ tools: [...CLERK_TOOLS],
8461
+ authType: "apiKey",
8462
+ getHeaders() {
8463
+ return {
8464
+ Authorization: `Bearer ${secretKey}`
8465
+ };
8466
+ },
8467
+ async onInit(_client) {
8468
+ logger79.debug("Clerk integration initialized");
8469
+ },
8470
+ async onAfterConnect(_client) {
8471
+ logger79.debug("Clerk integration connected");
8472
+ }
8473
+ };
8474
+ }
8475
+ // src/integrations/cloudflare.ts
8476
+ var logger80 = createLogger("Cloudflare");
8477
+ var CLOUDFLARE_TOOLS = [
8478
+ "cloudflare_verify_token",
8479
+ "cloudflare_get_user",
8480
+ "cloudflare_list_accounts",
8481
+ "cloudflare_get_account",
8482
+ "cloudflare_list_zones",
8483
+ "cloudflare_get_zone",
8484
+ "cloudflare_list_dns_records",
8485
+ "cloudflare_create_dns_record",
8486
+ "cloudflare_update_dns_record",
8487
+ "cloudflare_delete_dns_record",
8488
+ "cloudflare_purge_zone_cache",
8489
+ "cloudflare_list_worker_scripts"
8490
+ ];
8491
+ var DEFAULT_SCOPES = [
8492
+ "account:read",
8493
+ "user:read",
8494
+ "zone:read",
8495
+ "workers:read",
8496
+ "workers:write",
8497
+ "pages:write",
8498
+ "offline_access"
8499
+ ];
8500
+ function cloudflareIntegration(config = {}) {
8501
+ const apiToken = config.apiToken ?? getEnv("CLOUDFLARE_API_TOKEN");
8502
+ if (apiToken && apiToken.trim() !== "") {
8503
+ return {
8504
+ id: "cloudflare",
8505
+ name: "Cloudflare",
8506
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cloudflare.png",
8507
+ description: "Manage Cloudflare zones, DNS, cache, and Workers via the Cloudflare API",
8508
+ category: "Infrastructure",
8509
+ tools: [...CLOUDFLARE_TOOLS],
8510
+ authType: "apiKey",
8511
+ getHeaders() {
8512
+ return { Authorization: `Bearer ${apiToken.trim()}` };
8513
+ },
8514
+ async onInit(_client) {
8515
+ logger80.debug("Cloudflare integration initialized (API token)");
8516
+ },
8517
+ async onAfterConnect(_client) {
8518
+ logger80.debug("Cloudflare integration connected");
8519
+ }
8520
+ };
8521
+ }
8522
+ const oauth = {
8523
+ provider: "cloudflare",
8524
+ clientId: config.clientId ?? getEnv("CLOUDFLARE_CLIENT_ID"),
8525
+ clientSecret: config.clientSecret ?? getEnv("CLOUDFLARE_CLIENT_SECRET"),
8526
+ scopes: config.scopes?.length ? config.scopes : [...DEFAULT_SCOPES],
8527
+ redirectUri: config.redirectUri,
8528
+ config: {
8529
+ authorization_endpoint: "https://dash.cloudflare.com/oauth2/auth",
8530
+ token_endpoint: "https://dash.cloudflare.com/oauth2/token",
8531
+ response_type: "code",
8532
+ grant_types_supported: ["authorization_code", "refresh_token"]
8533
+ }
8534
+ };
8535
+ return {
8536
+ id: "cloudflare",
8537
+ name: "Cloudflare",
8538
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/cloudflare.png",
8539
+ description: "Manage Cloudflare zones, DNS, cache, and Workers via the Cloudflare API",
8540
+ category: "Infrastructure",
8541
+ tools: [...CLOUDFLARE_TOOLS],
8542
+ oauth,
8543
+ async onInit(_client) {
8544
+ logger80.debug("Cloudflare integration initialized (OAuth)");
8545
+ },
8546
+ async onAfterConnect(_client) {
8547
+ logger80.debug("Cloudflare integration connected");
8548
+ }
8549
+ };
8550
+ }
8551
+ // src/integrations/clickup.ts
8552
+ var logger81 = createLogger("ClickUp");
8553
+ var CLICKUP_TOOLS = [
8554
+ "clickup_get_authorized_user",
8555
+ "clickup_list_teams",
8556
+ "clickup_list_spaces",
8557
+ "clickup_list_folders",
8558
+ "clickup_list_lists_in_folder",
8559
+ "clickup_list_folderless_lists",
8560
+ "clickup_list_tasks",
8561
+ "clickup_get_task",
8562
+ "clickup_create_task",
8563
+ "clickup_update_task",
8564
+ "clickup_delete_task",
8565
+ "clickup_list_task_comments",
8566
+ "clickup_create_task_comment"
8567
+ ];
8568
+ function clickupIntegration(config = {}) {
8569
+ const oauth = {
8570
+ provider: "clickup",
8571
+ clientId: config.clientId ?? getEnv("CLICKUP_CLIENT_ID"),
8572
+ clientSecret: config.clientSecret ?? getEnv("CLICKUP_CLIENT_SECRET"),
8573
+ scopes: config.scopes ?? [],
8574
+ optionalScopes: config.optionalScopes,
8575
+ redirectUri: config.redirectUri,
8576
+ config: {
8577
+ authorization_endpoint: "https://app.clickup.com/api",
8578
+ token_endpoint: "https://api.clickup.com/api/v2/oauth/token"
8579
+ }
8580
+ };
8581
+ return {
8582
+ id: "clickup",
8583
+ name: "ClickUp",
8584
+ tools: [...CLICKUP_TOOLS],
8585
+ oauth,
8586
+ async onInit(_client) {
8587
+ logger81.debug("ClickUp integration initialized");
8588
+ },
8589
+ async onAfterConnect(_client) {
8590
+ logger81.debug("ClickUp integration connected");
8591
+ }
8592
+ };
8593
+ }
8594
+ // src/integrations/excel.ts
8595
+ var logger82 = createLogger("Excel");
8596
+ var EXCEL_TOOLS = [
8597
+ "excel_add_table_rows",
8598
+ "excel_add_worksheet",
8599
+ "excel_clear_range",
8600
+ "excel_create",
8601
+ "excel_create_table",
8602
+ "excel_delete",
8603
+ "excel_delete_worksheet",
8604
+ "excel_get",
8605
+ "excel_get_range",
8606
+ "excel_get_table_rows",
8607
+ "excel_get_used_range",
8608
+ "excel_list",
8609
+ "excel_list_tables",
8610
+ "excel_list_worksheets",
8611
+ "excel_share",
8612
+ "excel_update_range"
8613
+ ];
8614
+ function excelIntegration(config = {}) {
8615
+ const oauth = {
8616
+ provider: "excel",
8617
+ clientId: config.clientId ?? getEnv("EXCEL_CLIENT_ID"),
8618
+ clientSecret: config.clientSecret ?? getEnv("EXCEL_CLIENT_SECRET"),
8619
+ scopes: config.scopes,
8620
+ optionalScopes: config.optionalScopes,
8621
+ redirectUri: config.redirectUri,
8622
+ config
8623
+ };
8624
+ return {
8625
+ id: "excel",
8626
+ name: "Excel",
8627
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/excel.png",
8628
+ tools: [...EXCEL_TOOLS],
8629
+ oauth,
8630
+ async onInit(_client) {
8631
+ logger82.debug("Excel integration initialized");
8632
+ },
8633
+ async onAfterConnect(_client) {
8634
+ logger82.debug("Excel integration connected");
8635
+ }
8636
+ };
8637
+ }
8638
+ // src/integrations/ga4.ts
8639
+ var GA4_TOOLS = [
8640
+ "ga4_batch_run_reports",
8641
+ "ga4_get_property",
8642
+ "ga4_list_account_summaries",
8643
+ "ga4_run_realtime_report",
8644
+ "ga4_run_report"
8645
+ ];
8646
+ function ga4Integration(config = {}) {
8647
+ const oauth = {
8648
+ provider: "ga4",
8649
+ clientId: config.clientId ?? getEnv("GA4_CLIENT_ID"),
8650
+ clientSecret: config.clientSecret ?? getEnv("GA4_CLIENT_SECRET"),
8651
+ scopes: config.scopes ?? ["https://www.googleapis.com/auth/analytics.readonly"],
8652
+ optionalScopes: config.optionalScopes,
8653
+ redirectUri: config.redirectUri
8654
+ };
8655
+ return {
8656
+ id: "ga4",
8657
+ name: "Google Analytics 4",
8658
+ tools: [...GA4_TOOLS],
8659
+ oauth
8660
+ };
8661
+ }
8662
+ // src/integrations/gdrive.ts
8663
+ var logger83 = createLogger("Google Drive");
8664
+ var GDRIVE_TOOLS = [
8665
+ "gdrive_copy_file",
8666
+ "gdrive_create_folder",
8667
+ "gdrive_delete_file",
8668
+ "gdrive_download_file",
8669
+ "gdrive_get_about",
8670
+ "gdrive_get_file",
8671
+ "gdrive_list_files",
8672
+ "gdrive_list_permissions",
8673
+ "gdrive_move_file",
8674
+ "gdrive_remove_permission",
8675
+ "gdrive_rename_file",
8676
+ "gdrive_share_file",
8677
+ "gdrive_trash_file",
8678
+ "gdrive_upload_text_file"
8679
+ ];
8680
+ function gdriveIntegration(config = {}) {
8681
+ const oauth = {
8682
+ provider: "gdrive",
8683
+ clientId: config.clientId ?? getEnv("GDRIVE_CLIENT_ID"),
8684
+ clientSecret: config.clientSecret ?? getEnv("GDRIVE_CLIENT_SECRET"),
8685
+ scopes: config.scopes,
8686
+ optionalScopes: config.optionalScopes,
8687
+ redirectUri: config.redirectUri,
8688
+ config
8689
+ };
8690
+ return {
8691
+ id: "gdrive",
8692
+ name: "Google Drive",
8693
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_drive.png",
8694
+ tools: [...GDRIVE_TOOLS],
8695
+ oauth,
8696
+ async onInit(_client) {
8697
+ logger83.debug("Google Drive integration initialized");
8698
+ },
8699
+ async onAfterConnect(_client) {
8700
+ logger83.debug("Google Drive integration connected");
8701
+ }
8702
+ };
8703
+ }
8704
+ // src/integrations/gitlab.ts
8705
+ var logger84 = createLogger("GitLab");
8706
+ var GITLAB_TOOLS = [
8707
+ "gitlab_list_projects",
8708
+ "gitlab_list_own_projects",
8709
+ "gitlab_get_project",
8710
+ "gitlab_create_project",
8711
+ "gitlab_create_issue",
8712
+ "gitlab_list_issues",
8713
+ "gitlab_get_issue",
8714
+ "gitlab_update_issue",
8715
+ "gitlab_close_issue",
8716
+ "gitlab_create_merge_request",
8717
+ "gitlab_list_merge_requests",
8718
+ "gitlab_get_merge_request",
8719
+ "gitlab_accept_merge_request",
8720
+ "gitlab_list_branches",
8721
+ "gitlab_create_branch",
8722
+ "gitlab_list_commits",
8723
+ "gitlab_get_commit",
8724
+ "gitlab_list_issue_notes",
8725
+ "gitlab_create_issue_note",
8726
+ "gitlab_list_milestones",
8727
+ "gitlab_create_milestone",
8728
+ "gitlab_get_current_user"
8729
+ ];
8730
+ function gitlabIntegration(config = {}) {
8731
+ const oauth = {
8732
+ provider: "gitlab",
8733
+ clientId: config.clientId ?? getEnv("GITLAB_CLIENT_ID"),
8734
+ clientSecret: config.clientSecret ?? getEnv("GITLAB_CLIENT_SECRET"),
8735
+ scopes: config.scopes ?? ["read_api", "write_api", "read_user"],
8736
+ optionalScopes: config.optionalScopes,
8737
+ redirectUri: config.redirectUri,
8738
+ config: {
8739
+ apiBaseUrl: config.apiBaseUrl ?? "https://gitlab.com/api/v4/",
8740
+ ...config
8741
+ }
8742
+ };
8743
+ return {
8744
+ id: "gitlab",
8745
+ name: "GitLab",
8746
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/gitlab.png",
8747
+ description: "Manage GitLab projects, issues, merge requests, and CI/CD",
8748
+ category: "Engineering",
8749
+ tools: [...GITLAB_TOOLS],
8750
+ oauth,
8751
+ async onInit(_client) {
8752
+ logger84.debug("GitLab integration initialized");
8753
+ },
8754
+ async onAfterConnect(_client) {
8755
+ logger84.debug("GitLab integration connected");
8756
+ }
8757
+ };
8758
+ }
8759
+ // src/integrations/gmeet.ts
8760
+ var logger85 = createLogger("Google Meet");
8761
+ var GMEET_TOOLS = [
8762
+ "gmeet_add_meet_to_event",
8763
+ "gmeet_create_meeting",
8764
+ "gmeet_delete_meeting",
8765
+ "gmeet_get_meeting",
8766
+ "gmeet_list_meetings",
8767
+ "gmeet_update_meeting"
8768
+ ];
8769
+ function gmeetIntegration(config = {}) {
8770
+ const oauth = {
8771
+ provider: "gmeet",
8772
+ clientId: config.clientId ?? getEnv("GMEET_CLIENT_ID"),
8773
+ clientSecret: config.clientSecret ?? getEnv("GMEET_CLIENT_SECRET"),
8774
+ scopes: config.scopes,
8775
+ optionalScopes: config.optionalScopes,
8776
+ redirectUri: config.redirectUri,
8777
+ config: { ...config }
8778
+ };
8779
+ return {
8780
+ id: "gmeet",
8781
+ name: "Google Meet",
8782
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_meet.webp",
8783
+ description: "Create and manage Google Meet links via Calendar conference data",
8784
+ category: "Communication",
8785
+ tools: [...GMEET_TOOLS],
8786
+ oauth,
8787
+ async onInit(_client) {
8788
+ logger85.debug("Google Meet integration initialized");
8789
+ },
8790
+ async onAfterConnect(_client) {
8791
+ logger85.debug("Google Meet integration connected");
8792
+ }
8793
+ };
8794
+ }
8795
+ // src/integrations/monday.ts
8796
+ var logger86 = createLogger("Monday");
8797
+ var MONDAY_TOOLS = [
8798
+ "monday_me",
8799
+ "monday_list_workspaces",
8800
+ "monday_list_boards",
8801
+ "monday_get_board",
8802
+ "monday_list_board_items",
8803
+ "monday_next_items_page",
8804
+ "monday_get_items",
8805
+ "monday_create_item",
8806
+ "monday_update_item_columns",
8807
+ "monday_create_update",
8808
+ "monday_delete_item"
8809
+ ];
8810
+ function mondayIntegration(config = {}) {
8811
+ const oauth = {
8812
+ provider: "monday",
8813
+ clientId: config.clientId ?? getEnv("MONDAY_CLIENT_ID"),
8814
+ clientSecret: config.clientSecret ?? getEnv("MONDAY_CLIENT_SECRET"),
8815
+ scopes: config.scopes ?? [],
8816
+ redirectUri: config.redirectUri,
8817
+ config: {
8818
+ authorization_endpoint: "https://auth.monday.com/oauth2/authorize",
8819
+ token_endpoint: "https://auth.monday.com/oauth2/token",
8820
+ response_type: "code",
8821
+ grant_types_supported: ["authorization_code"]
8822
+ }
8823
+ };
8824
+ return {
8825
+ id: "monday",
8826
+ name: "Monday.com",
8827
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/monday.png",
8828
+ description: "Manage Monday.com boards, items, columns, and updates",
8829
+ category: "Productivity",
8830
+ tools: [...MONDAY_TOOLS],
8831
+ oauth,
8832
+ async onInit(_client) {
8833
+ logger86.debug("Monday.com integration initialized");
8834
+ },
8835
+ async onAfterConnect(_client) {
8836
+ logger86.debug("Monday.com integration connected");
8837
+ }
8838
+ };
8839
+ }
8840
+ // src/integrations/planetscale.ts
8841
+ var PLANETSCALE_TOOLS = [
8842
+ "planetscale_get_current_user",
8843
+ "planetscale_list_organizations",
8844
+ "planetscale_get_organization",
8845
+ "planetscale_list_databases",
8846
+ "planetscale_get_database",
8847
+ "planetscale_list_branches",
8848
+ "planetscale_get_branch",
8849
+ "planetscale_list_deploy_requests",
8850
+ "planetscale_get_deploy_request"
8851
+ ];
8852
+ function planetscaleIntegration(config = {}) {
8853
+ const oauth = {
8854
+ provider: "planetscale",
8855
+ clientId: config.clientId ?? getEnv("PLANETSCALE_CLIENT_ID"),
8856
+ clientSecret: config.clientSecret ?? getEnv("PLANETSCALE_CLIENT_SECRET"),
8857
+ scopes: config.scopes ?? ["database:read_branches", "database:read_deploy_requests", "organization:read"],
8858
+ optionalScopes: config.optionalScopes,
8859
+ redirectUri: config.redirectUri,
8860
+ config: {
8861
+ authorization_endpoint: "https://auth.planetscale.com/oauth/authorize",
8862
+ token_endpoint: "https://auth.planetscale.com/oauth/token",
8863
+ apiBaseUrl: config.apiBaseUrl ?? "https://api.planetscale.com/v1"
8864
+ }
8865
+ };
8866
+ return {
8867
+ id: "planetscale",
8868
+ name: "PlanetScale",
8869
+ category: "Infrastructure",
8870
+ tools: [...PLANETSCALE_TOOLS],
8871
+ oauth
8872
+ };
8873
+ }
8874
+ // src/integrations/powerpoint.ts
8875
+ var logger87 = createLogger("PowerPoint");
8876
+ var POWERPOINT_TOOLS = [
8877
+ "powerpoint_copy",
8878
+ "powerpoint_create",
8879
+ "powerpoint_delete",
8880
+ "powerpoint_get",
8881
+ "powerpoint_list",
8882
+ "powerpoint_share",
8883
+ "powerpoint_update_content"
8884
+ ];
8885
+ function powerpointIntegration(config = {}) {
8886
+ const oauth = {
8887
+ provider: "powerpoint",
8888
+ clientId: config.clientId ?? getEnv("POWERPOINT_CLIENT_ID"),
8889
+ clientSecret: config.clientSecret ?? getEnv("POWERPOINT_CLIENT_SECRET"),
8890
+ scopes: config.scopes,
8891
+ optionalScopes: config.optionalScopes,
8892
+ redirectUri: config.redirectUri,
8893
+ config
8894
+ };
8895
+ return {
8896
+ id: "powerpoint",
8897
+ name: "PowerPoint",
8898
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/powerpoint.png",
8899
+ tools: [...POWERPOINT_TOOLS],
8900
+ oauth,
8901
+ async onInit(_client) {
8902
+ logger87.debug("PowerPoint integration initialized");
8903
+ },
8904
+ async onAfterConnect(_client) {
8905
+ logger87.debug("PowerPoint integration connected");
8906
+ }
8907
+ };
8908
+ }
8909
+ // src/integrations/reddit.ts
8910
+ var REDDIT_TOOLS = [
8911
+ "reddit_get_me",
8912
+ "reddit_get_subreddit_about",
8913
+ "reddit_list_subreddit_posts",
8914
+ "reddit_get_post_thread",
8915
+ "reddit_search",
8916
+ "reddit_submit_post",
8917
+ "reddit_comment",
8918
+ "reddit_vote",
8919
+ "reddit_list_my_subreddits",
8920
+ "reddit_list_popular_subreddits"
8921
+ ];
8922
+ function redditIntegration(config = {}) {
8923
+ const oauth = {
8924
+ provider: "reddit",
8925
+ clientId: config.clientId ?? getEnv("REDDIT_CLIENT_ID"),
8926
+ clientSecret: config.clientSecret ?? getEnv("REDDIT_CLIENT_SECRET"),
8927
+ scopes: config.scopes ?? ["identity", "read", "submit", "vote", "mysubreddits"],
8928
+ optionalScopes: config.optionalScopes,
8929
+ redirectUri: config.redirectUri
8930
+ };
8931
+ return {
8932
+ id: "reddit",
8933
+ name: "Reddit",
8934
+ tools: [...REDDIT_TOOLS],
8935
+ oauth
8936
+ };
8937
+ }
8938
+ // src/integrations/resend.ts
8939
+ var logger88 = createLogger("Resend");
8940
+ var RESEND_TOOLS = [
8941
+ "resend_list_domains",
8942
+ "resend_get_domain",
8943
+ "resend_create_domain",
8944
+ "resend_delete_domain",
8945
+ "resend_verify_domain",
8946
+ "resend_send_email",
8947
+ "resend_get_email",
8948
+ "resend_cancel_scheduled_email"
8949
+ ];
8950
+ function resendIntegration(options = {}) {
8951
+ const apiKey = options.apiKey ?? getEnv("RESEND_API_KEY");
8952
+ if (!apiKey) {
8953
+ throw new Error("resendIntegration requires apiKey or RESEND_API_KEY");
5963
8954
  }
5964
8955
  return {
5965
- id: "mercury",
5966
- name: "Mercury",
5967
- tools: [...MERCURY_TOOLS],
8956
+ id: "resend",
8957
+ name: "Resend",
8958
+ tools: [...RESEND_TOOLS],
5968
8959
  authType: "apiKey",
5969
8960
  getHeaders() {
5970
- return {
5971
- Authorization: `Bearer ${options.apiKey}`
5972
- };
8961
+ return { Authorization: `Bearer ${apiKey}` };
8962
+ },
8963
+ async onInit(_client) {
8964
+ logger88.debug("Resend integration initialized");
8965
+ },
8966
+ async onAfterConnect(_client) {
8967
+ logger88.debug("Resend integration connected");
8968
+ }
8969
+ };
8970
+ }
8971
+ // src/integrations/word.ts
8972
+ var logger89 = createLogger("Word");
8973
+ var WORD_TOOLS = [
8974
+ "word_copy",
8975
+ "word_create",
8976
+ "word_delete",
8977
+ "word_get",
8978
+ "word_list",
8979
+ "word_share",
8980
+ "word_update_content"
8981
+ ];
8982
+ function wordIntegration(config = {}) {
8983
+ const oauth = {
8984
+ provider: "word",
8985
+ clientId: config.clientId ?? getEnv("WORD_CLIENT_ID"),
8986
+ clientSecret: config.clientSecret ?? getEnv("WORD_CLIENT_SECRET"),
8987
+ scopes: config.scopes,
8988
+ optionalScopes: config.optionalScopes,
8989
+ redirectUri: config.redirectUri,
8990
+ config
8991
+ };
8992
+ return {
8993
+ id: "word",
8994
+ name: "Word",
8995
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/word.png",
8996
+ tools: [...WORD_TOOLS],
8997
+ oauth,
8998
+ async onInit(_client) {
8999
+ logger89.debug("Word integration initialized");
9000
+ },
9001
+ async onAfterConnect(_client) {
9002
+ logger89.debug("Word integration connected");
9003
+ }
9004
+ };
9005
+ }
9006
+ // src/integrations/zapier.ts
9007
+ var logger90 = createLogger("Zapier");
9008
+ var ZAPIER_TOOLS = [
9009
+ "zapier_get_profile",
9010
+ "zapier_list_zaps",
9011
+ "zapier_list_apps",
9012
+ "zapier_list_actions",
9013
+ "zapier_list_authentications",
9014
+ "zapier_list_zap_runs"
9015
+ ];
9016
+ function zapierIntegration(config = {}) {
9017
+ const oauth = {
9018
+ provider: "zapier",
9019
+ clientId: config.clientId ?? getEnv("ZAPIER_CLIENT_ID"),
9020
+ clientSecret: config.clientSecret ?? getEnv("ZAPIER_CLIENT_SECRET"),
9021
+ scopes: config.scopes ?? [],
9022
+ redirectUri: config.redirectUri,
9023
+ config: {
9024
+ authorization_endpoint: "https://zapier.com/oauth/authorize/",
9025
+ token_endpoint: "https://zapier.com/oauth/token/",
9026
+ response_type: "code",
9027
+ grant_types_supported: ["authorization_code", "refresh_token"]
9028
+ }
9029
+ };
9030
+ return {
9031
+ id: "zapier",
9032
+ name: "Zapier",
9033
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/zapier.png",
9034
+ description: "List Zaps, browse apps, manage authentications, and inspect Zap runs via the Partner Workflow API",
9035
+ category: "Productivity",
9036
+ tools: [...ZAPIER_TOOLS],
9037
+ oauth,
9038
+ async onInit(_client) {
9039
+ logger90.debug("Zapier integration initialized");
9040
+ },
9041
+ async onAfterConnect(_client) {
9042
+ logger90.debug("Zapier integration connected");
9043
+ }
9044
+ };
9045
+ }
9046
+ // src/integrations/zoom.ts
9047
+ var logger91 = createLogger("Zoom");
9048
+ var ZOOM_TOOLS = [
9049
+ "zoom_get_user",
9050
+ "zoom_list_meetings",
9051
+ "zoom_create_meeting",
9052
+ "zoom_get_meeting",
9053
+ "zoom_update_meeting",
9054
+ "zoom_delete_meeting"
9055
+ ];
9056
+ function zoomIntegration(config = {}) {
9057
+ const oauth = {
9058
+ provider: "zoom",
9059
+ clientId: config.clientId ?? getEnv("ZOOM_CLIENT_ID"),
9060
+ clientSecret: config.clientSecret ?? getEnv("ZOOM_CLIENT_SECRET"),
9061
+ scopes: config.scopes,
9062
+ optionalScopes: config.optionalScopes,
9063
+ redirectUri: config.redirectUri,
9064
+ config: { ...config }
9065
+ };
9066
+ return {
9067
+ id: "zoom",
9068
+ name: "Zoom",
9069
+ logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/zoom.png",
9070
+ tools: [...ZOOM_TOOLS],
9071
+ oauth,
9072
+ async onInit(_client) {
9073
+ logger91.debug("Zoom integration initialized");
9074
+ },
9075
+ async onAfterConnect(_client) {
9076
+ logger91.debug("Zoom integration connected");
5973
9077
  }
5974
9078
  };
5975
9079
  }
@@ -5987,7 +9091,7 @@ function validateStepLimit(stepIndex, maxSteps) {
5987
9091
  return { valid: true };
5988
9092
  }
5989
9093
  // src/triggers/webhooks.ts
5990
- var logger40 = createLogger("Webhooks", "server");
9094
+ var logger92 = createLogger("Webhooks", "server");
5991
9095
  async function signPayload(payload, secret) {
5992
9096
  const encoder = new TextEncoder;
5993
9097
  const data = encoder.encode(JSON.stringify(payload));
@@ -6013,7 +9117,7 @@ async function deliverWebhook(webhook, payload, timeoutMs) {
6013
9117
  signal: controller.signal
6014
9118
  });
6015
9119
  if (!response.ok) {
6016
- logger40.warn(`Webhook delivery to ${webhook.url} returned ${response.status}`);
9120
+ logger92.warn(`Webhook delivery to ${webhook.url} returned ${response.status}`);
6017
9121
  }
6018
9122
  } finally {
6019
9123
  clearTimeout(timeout);
@@ -6026,7 +9130,7 @@ async function deliverWebhooks(webhooks, payload, timeoutMs) {
6026
9130
  for (let i = 0;i < results.length; i++) {
6027
9131
  const result = results[i];
6028
9132
  if (result.status === "rejected") {
6029
- logger40.warn(`Webhook delivery to ${webhooks[i].url} failed:`, result.reason);
9133
+ logger92.warn(`Webhook delivery to ${webhooks[i].url} failed:`, result.reason);
6030
9134
  }
6031
9135
  }
6032
9136
  }
@@ -6062,164 +9166,6 @@ function createSimpleIntegration(config) {
6062
9166
  onDisconnect: config.onDisconnect
6063
9167
  };
6064
9168
  }
6065
- // src/integrations/word.ts
6066
- var logger41 = createLogger("Word");
6067
- var WORD_TOOLS = [
6068
- "word_list",
6069
- "word_get",
6070
- "word_create",
6071
- "word_copy",
6072
- "word_delete",
6073
- "word_share"
6074
- ];
6075
- function wordIntegration(config = {}) {
6076
- const oauth = {
6077
- provider: "word",
6078
- clientId: config.clientId ?? getEnv("WORD_CLIENT_ID"),
6079
- clientSecret: config.clientSecret ?? getEnv("WORD_CLIENT_SECRET"),
6080
- scopes: config.scopes,
6081
- optionalScopes: config.optionalScopes,
6082
- redirectUri: config.redirectUri,
6083
- config
6084
- };
6085
- return {
6086
- id: "word",
6087
- name: "Word",
6088
- logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/word.png",
6089
- tools: [...WORD_TOOLS],
6090
- oauth,
6091
- async onInit(_client) {
6092
- logger41.debug("Word integration initialized");
6093
- },
6094
- async onAfterConnect(_client) {
6095
- logger41.debug("Word integration connected");
6096
- }
6097
- };
6098
- }
6099
-
6100
- // src/integrations/excel.ts
6101
- var logger42 = createLogger("Excel");
6102
- var EXCEL_TOOLS = [
6103
- "excel_list",
6104
- "excel_get",
6105
- "excel_create",
6106
- "excel_delete",
6107
- "excel_share",
6108
- "excel_list_worksheets",
6109
- "excel_add_worksheet",
6110
- "excel_delete_worksheet",
6111
- "excel_get_range",
6112
- "excel_update_range",
6113
- "excel_clear_range",
6114
- "excel_get_used_range",
6115
- "excel_list_tables",
6116
- "excel_create_table",
6117
- "excel_get_table_rows",
6118
- "excel_add_table_rows"
6119
- ];
6120
- function excelIntegration(config = {}) {
6121
- const oauth = {
6122
- provider: "excel",
6123
- clientId: config.clientId ?? getEnv("EXCEL_CLIENT_ID"),
6124
- clientSecret: config.clientSecret ?? getEnv("EXCEL_CLIENT_SECRET"),
6125
- scopes: config.scopes,
6126
- optionalScopes: config.optionalScopes,
6127
- redirectUri: config.redirectUri,
6128
- config
6129
- };
6130
- return {
6131
- id: "excel",
6132
- name: "Excel",
6133
- logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/excel.png",
6134
- tools: [...EXCEL_TOOLS],
6135
- oauth,
6136
- async onInit(_client) {
6137
- logger42.debug("Excel integration initialized");
6138
- },
6139
- async onAfterConnect(_client) {
6140
- logger42.debug("Excel integration connected");
6141
- }
6142
- };
6143
- }
6144
-
6145
- // src/integrations/powerpoint.ts
6146
- var logger43 = createLogger("PowerPoint");
6147
- var POWERPOINT_TOOLS = [
6148
- "powerpoint_list",
6149
- "powerpoint_get",
6150
- "powerpoint_create",
6151
- "powerpoint_copy",
6152
- "powerpoint_delete",
6153
- "powerpoint_share"
6154
- ];
6155
- function powerpointIntegration(config = {}) {
6156
- const oauth = {
6157
- provider: "powerpoint",
6158
- clientId: config.clientId ?? getEnv("POWERPOINT_CLIENT_ID"),
6159
- clientSecret: config.clientSecret ?? getEnv("POWERPOINT_CLIENT_SECRET"),
6160
- scopes: config.scopes,
6161
- optionalScopes: config.optionalScopes,
6162
- redirectUri: config.redirectUri,
6163
- config
6164
- };
6165
- return {
6166
- id: "powerpoint",
6167
- name: "PowerPoint",
6168
- logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/powerpoint.png",
6169
- tools: [...POWERPOINT_TOOLS],
6170
- oauth,
6171
- async onInit(_client) {
6172
- logger43.debug("PowerPoint integration initialized");
6173
- },
6174
- async onAfterConnect(_client) {
6175
- logger43.debug("PowerPoint integration connected");
6176
- }
6177
- };
6178
- }
6179
-
6180
- // src/integrations/gdrive.ts
6181
- var logger44 = createLogger("Google Drive");
6182
- var GDRIVE_TOOLS = [
6183
- "gdrive_list_files",
6184
- "gdrive_get_file",
6185
- "gdrive_create_folder",
6186
- "gdrive_rename_file",
6187
- "gdrive_move_file",
6188
- "gdrive_copy_file",
6189
- "gdrive_delete_file",
6190
- "gdrive_trash_file",
6191
- "gdrive_upload_text_file",
6192
- "gdrive_download_file",
6193
- "gdrive_list_permissions",
6194
- "gdrive_share_file",
6195
- "gdrive_remove_permission",
6196
- "gdrive_get_about"
6197
- ];
6198
- function gdriveIntegration(config = {}) {
6199
- const oauth = {
6200
- provider: "gdrive",
6201
- clientId: config.clientId ?? getEnv("GDRIVE_CLIENT_ID"),
6202
- clientSecret: config.clientSecret ?? getEnv("GDRIVE_CLIENT_SECRET"),
6203
- scopes: config.scopes,
6204
- optionalScopes: config.optionalScopes,
6205
- redirectUri: config.redirectUri,
6206
- config
6207
- };
6208
- return {
6209
- id: "gdrive",
6210
- name: "Google Drive",
6211
- logoUrl: "https://wdvtnli2jn3texa6.public.blob.vercel-storage.com/google_drive.png",
6212
- tools: [...GDRIVE_TOOLS],
6213
- oauth,
6214
- async onInit(_client) {
6215
- logger44.debug("Google Drive integration initialized");
6216
- },
6217
- async onAfterConnect(_client) {
6218
- logger44.debug("Google Drive integration connected");
6219
- }
6220
- };
6221
- }
6222
-
6223
9169
  // index.ts
6224
9170
  var client = createMCPClient({
6225
9171
  integrations: [
@@ -6227,18 +9173,28 @@ var client = createMCPClient({
6227
9173
  gmailIntegration(),
6228
9174
  notionIntegration(),
6229
9175
  slackIntegration(),
9176
+ discordIntegration(),
6230
9177
  linearIntegration(),
6231
9178
  vercelIntegration(),
6232
9179
  zendeskIntegration(),
6233
9180
  stripeIntegration(),
6234
9181
  gcalIntegration(),
9182
+ gmeetIntegration(),
9183
+ gtasksIntegration(),
9184
+ gcontactsIntegration(),
6235
9185
  outlookIntegration(),
9186
+ teamsIntegration(),
6236
9187
  airtableIntegration(),
9188
+ attioIntegration(),
6237
9189
  todoistIntegration(),
6238
9190
  whatsappIntegration(),
6239
9191
  calcomIntegration(),
9192
+ canvaIntegration(),
9193
+ cloudflareIntegration(),
6240
9194
  rampIntegration(),
6241
9195
  onedriveIntegration(),
9196
+ plannerIntegration(),
9197
+ sharepointIntegration(),
6242
9198
  wordIntegration(),
6243
9199
  excelIntegration(),
6244
9200
  powerpointIntegration(),
@@ -6247,79 +9203,160 @@ var client = createMCPClient({
6247
9203
  gsheetsIntegration(),
6248
9204
  gslidesIntegration(),
6249
9205
  polarIntegration(),
9206
+ facebookIntegration(),
6250
9207
  figmaIntegration(),
6251
9208
  intercomIntegration(),
6252
9209
  hubspotIntegration(),
9210
+ instagramIntegration(),
9211
+ linkedinIntegration(),
9212
+ threadsIntegration(),
9213
+ tiktokIntegration(),
9214
+ typeformIntegration(),
9215
+ xeroIntegration(),
9216
+ gchatIntegration(),
9217
+ shopifyIntegration(),
6253
9218
  youtubeIntegration(),
9219
+ zoomIntegration(),
9220
+ redditIntegration(),
6254
9221
  cursorIntegration(),
6255
9222
  posthogIntegration(),
6256
9223
  sentryIntegration(),
9224
+ datadogIntegration(),
6257
9225
  netlifyIntegration(),
6258
- jiraIntegration()
9226
+ mondayIntegration(),
9227
+ webflowIntegration(),
9228
+ jiraIntegration(),
9229
+ salesforceIntegration(),
9230
+ workdayIntegration()
6259
9231
  ],
6260
9232
  useServerConfig: true
6261
9233
  });
6262
9234
  export {
9235
+ zoomIntegration,
6263
9236
  zendeskIntegration,
9237
+ zapierIntegration,
6264
9238
  youtubeIntegration,
9239
+ xeroIntegration,
9240
+ workosIntegration,
9241
+ workdayIntegration,
9242
+ wordIntegration,
9243
+ wixIntegration,
6265
9244
  whatsappIntegration,
9245
+ webflowIntegration,
6266
9246
  vercelIntegration,
6267
9247
  validateStepLimit,
9248
+ upstashIntegration,
9249
+ typeformIntegration,
9250
+ trelloIntegration,
6268
9251
  todoistIntegration,
6269
9252
  toWebRequest,
6270
9253
  toTanStackStartHandler,
9254
+ tldrawIntegration,
9255
+ tiktokIntegration,
9256
+ threadsIntegration,
9257
+ teamsIntegration,
9258
+ supabaseIntegration,
6271
9259
  stripeIntegration,
6272
9260
  slackIntegration,
9261
+ shouldRefreshToken,
9262
+ shopifyIntegration,
9263
+ sharepointIntegration,
6273
9264
  sentryIntegration,
6274
9265
  sendCallbackToOpener,
9266
+ salesforceIntegration,
9267
+ resolveAccessToken,
9268
+ resendIntegration,
9269
+ refreshViaMcp,
9270
+ redisIntegration,
9271
+ redditIntegration,
6275
9272
  rampIntegration,
6276
9273
  railwayIntegration,
9274
+ powerpointIntegration,
9275
+ postmanIntegration,
6277
9276
  posthogIntegration,
6278
9277
  polarIntegration,
9278
+ plannerIntegration,
9279
+ planetscaleIntegration,
9280
+ phantomIntegration,
6279
9281
  parseState,
6280
9282
  parseServerError,
9283
+ paperIntegration,
6281
9284
  outlookIntegration,
6282
9285
  onedriveIntegration,
6283
9286
  notionIntegration,
6284
9287
  netlifyIntegration,
9288
+ neonIntegration,
9289
+ mondayIntegration,
6285
9290
  mercuryIntegration,
9291
+ mailchimpIntegration,
9292
+ linkedinIntegration,
6286
9293
  linearIntegration,
6287
9294
  jiraIntegration,
6288
9295
  isTokenExpiredError,
6289
9296
  isAuthorizationError,
6290
9297
  isAuthError,
6291
9298
  intercomIntegration,
9299
+ instagramIntegration,
6292
9300
  hubspotIntegration,
9301
+ gtasksIntegration,
6293
9302
  gslidesIntegration,
6294
9303
  gsheetsIntegration,
6295
9304
  granolaIntegration,
9305
+ gmeetIntegration,
6296
9306
  gmailIntegration,
9307
+ gitlabIntegration,
6297
9308
  githubIntegration,
6298
9309
  genericOAuthIntegration,
6299
9310
  generateStateWithReturnUrl,
6300
9311
  generateState,
6301
9312
  generateCodeVerifier,
6302
9313
  generateCodeChallenge,
9314
+ gdriveIntegration,
6303
9315
  gdocsIntegration,
9316
+ gcontactsIntegration,
9317
+ gchatIntegration,
6304
9318
  gcalIntegration,
9319
+ ga4Integration,
6305
9320
  fromNodeHeaders,
6306
9321
  figmaIntegration,
9322
+ facebookIntegration,
9323
+ excelIntegration,
9324
+ etoroIntegration,
9325
+ encodeRedisCloudBearerToken,
6307
9326
  dropboxIntegration,
9327
+ discordIntegration,
6308
9328
  deliverWebhooks,
9329
+ datadogIntegration,
9330
+ databricksIntegration,
6309
9331
  cursorIntegration,
6310
9332
  createTanStackOAuthHandler,
6311
9333
  createSimpleIntegration,
6312
9334
  createOAuthRedirectHandler,
6313
9335
  createNextOAuthHandler,
6314
9336
  createMCPClient,
9337
+ convexIntegration,
9338
+ cloudflareIntegration,
6315
9339
  client,
9340
+ clickupIntegration,
9341
+ clerkIntegration,
6316
9342
  clearClientCache,
9343
+ canvaIntegration,
6317
9344
  calcomIntegration,
9345
+ buildPhantomBrowseDeeplink,
9346
+ binanceIntegration,
9347
+ betterstackIntegration,
9348
+ awsIntegration,
9349
+ auth0Integration,
9350
+ attioIntegration,
9351
+ astronomerIntegration,
9352
+ alpacaIntegration,
6318
9353
  airtableIntegration,
6319
9354
  WEBHOOK_DELIVERY_TIMEOUT_MS,
6320
9355
  TriggerClient,
6321
9356
  ToolCallError,
6322
9357
  TokenExpiredError,
9358
+ RefreshTransientError,
9359
+ RefreshRejectedError,
6323
9360
  OAuthWindowManager,
6324
9361
  OAuthManager,
6325
9362
  OAuthHandler,
@@ -6329,6 +9366,7 @@ export {
6329
9366
  IntegrateSDKError,
6330
9367
  INTEGRATION_CATEGORY_ORDER,
6331
9368
  HttpSessionTransport,
9369
+ DEFAULT_REFRESH_WINDOW_MS,
6332
9370
  ConnectionError,
6333
9371
  AuthorizationError,
6334
9372
  AuthenticationError