@jskit-ai/connectors-catalog 0.1.1

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 (399) hide show
  1. package/README.md +192 -0
  2. package/docs/ai-upstream-notices.md +51 -0
  3. package/docs/ai.md +191 -0
  4. package/docs/airtable.md +130 -0
  5. package/docs/algolia.md +190 -0
  6. package/docs/amazon-redshift.md +229 -0
  7. package/docs/amplitude.md +210 -0
  8. package/docs/apify.md +162 -0
  9. package/docs/apollo-io.md +200 -0
  10. package/docs/asana.md +126 -0
  11. package/docs/ashby.md +188 -0
  12. package/docs/atlassian.md +224 -0
  13. package/docs/attention.md +162 -0
  14. package/docs/aws-athena.md +150 -0
  15. package/docs/aws-credentials.md +75 -0
  16. package/docs/aws-s3.md +193 -0
  17. package/docs/bigquery.md +146 -0
  18. package/docs/brevo.md +122 -0
  19. package/docs/calendly.md +158 -0
  20. package/docs/canva.md +191 -0
  21. package/docs/chargebee.md +192 -0
  22. package/docs/clay.md +194 -0
  23. package/docs/clickhouse.md +242 -0
  24. package/docs/confidence-exp.md +74 -0
  25. package/docs/confidence-flags.md +75 -0
  26. package/docs/confidence-oauth.md +137 -0
  27. package/docs/contentful.md +123 -0
  28. package/docs/databricks.md +180 -0
  29. package/docs/dbt-semantic-layer.md +175 -0
  30. package/docs/elevenlabs.md +102 -0
  31. package/docs/figma.md +132 -0
  32. package/docs/firebase-cloud-messaging.md +262 -0
  33. package/docs/firecrawl.md +137 -0
  34. package/docs/fireflies.md +95 -0
  35. package/docs/fireworks-ai.md +53 -0
  36. package/docs/gatewayapi.md +113 -0
  37. package/docs/gemini-enterprise.md +224 -0
  38. package/docs/github-api.md +133 -0
  39. package/docs/gitlab-api.md +138 -0
  40. package/docs/gmail.md +133 -0
  41. package/docs/gong.md +205 -0
  42. package/docs/google-ads.md +156 -0
  43. package/docs/google-analytics.md +202 -0
  44. package/docs/google-docs.md +105 -0
  45. package/docs/google-drive.md +108 -0
  46. package/docs/google-maps-platform.md +208 -0
  47. package/docs/google-oauth.md +123 -0
  48. package/docs/google-search-console.md +124 -0
  49. package/docs/google-sheets.md +94 -0
  50. package/docs/google-slides.md +95 -0
  51. package/docs/granola.md +178 -0
  52. package/docs/hex.md +161 -0
  53. package/docs/heygen.md +124 -0
  54. package/docs/hubspot.md +142 -0
  55. package/docs/incident-io.md +118 -0
  56. package/docs/inngest.md +178 -0
  57. package/docs/klipy.md +149 -0
  58. package/docs/lexware.md +144 -0
  59. package/docs/lightspeed.md +193 -0
  60. package/docs/linear.md +137 -0
  61. package/docs/linkedin.md +196 -0
  62. package/docs/logo-dev.md +152 -0
  63. package/docs/mailgun.md +153 -0
  64. package/docs/mapbox.md +174 -0
  65. package/docs/microsoft-excel.md +97 -0
  66. package/docs/microsoft-fabric.md +249 -0
  67. package/docs/microsoft-oauth.md +143 -0
  68. package/docs/microsoft-onedrive.md +76 -0
  69. package/docs/microsoft-onenote.md +75 -0
  70. package/docs/microsoft-outlook.md +90 -0
  71. package/docs/microsoft-powerpoint.md +119 -0
  72. package/docs/microsoft-sharepoint.md +75 -0
  73. package/docs/microsoft-teams.md +72 -0
  74. package/docs/microsoft-word.md +119 -0
  75. package/docs/miro.md +117 -0
  76. package/docs/n8n.md +169 -0
  77. package/docs/notion.md +137 -0
  78. package/docs/oura.md +161 -0
  79. package/docs/paddle.md +168 -0
  80. package/docs/perplexity.md +85 -0
  81. package/docs/pipedrive.md +120 -0
  82. package/docs/polar.md +63 -0
  83. package/docs/posthog.md +227 -0
  84. package/docs/prestashop.md +151 -0
  85. package/docs/replicate.md +60 -0
  86. package/docs/resend.md +153 -0
  87. package/docs/salesforce.md +234 -0
  88. package/docs/sanity.md +122 -0
  89. package/docs/semrush.md +276 -0
  90. package/docs/sentry.md +112 -0
  91. package/docs/sevdesk.md +107 -0
  92. package/docs/shopify.md +206 -0
  93. package/docs/slack.md +257 -0
  94. package/docs/snowflake.md +271 -0
  95. package/docs/storyblok.md +130 -0
  96. package/docs/stripe.md +77 -0
  97. package/docs/supabase.md +51 -0
  98. package/docs/tally.md +105 -0
  99. package/docs/telegram.md +165 -0
  100. package/docs/tiktok.md +201 -0
  101. package/docs/twilio.md +284 -0
  102. package/docs/twitch.md +428 -0
  103. package/docs/wave.md +440 -0
  104. package/docs/wix.md +1249 -0
  105. package/docs/wiz.md +177 -0
  106. package/docs/woocommerce.md +400 -0
  107. package/docs/wordpress-com.md +358 -0
  108. package/docs/wordpress-self-hosted.md +252 -0
  109. package/docs/workday.md +292 -0
  110. package/docs/x-twitter.md +188 -0
  111. package/docs/xero.md +429 -0
  112. package/docs/zoho-books.md +214 -0
  113. package/docs/zoho-crm.md +192 -0
  114. package/package.json +153 -0
  115. package/patterns/ai-connections/PATTERN.md +84 -0
  116. package/patterns/ai-connections/example/ai-model.js +11 -0
  117. package/patterns/ai-connections/example/perplexity-answer.js +29 -0
  118. package/patterns/api-key-connection/PATTERN.md +368 -0
  119. package/patterns/api-key-connection/example/connections.js +18 -0
  120. package/patterns/api-key-connection/example/integrations.json +19 -0
  121. package/patterns/assistant-mcp/PATTERN.md +110 -0
  122. package/patterns/assistant-mcp/example/integrations.json +13 -0
  123. package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
  124. package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
  125. package/patterns/aws-storage-queries/PATTERN.md +169 -0
  126. package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
  127. package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
  128. package/patterns/aws-storage-queries/example/formats/package.json +12 -0
  129. package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
  130. package/patterns/aws-storage-queries/example/integrations.json +38 -0
  131. package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
  132. package/patterns/event-delivery/PATTERN.md +151 -0
  133. package/patterns/event-delivery/example/integrations.json +17 -0
  134. package/patterns/firebase-messaging/PATTERN.md +156 -0
  135. package/patterns/firebase-messaging/example/server/notifications.js +23 -0
  136. package/patterns/google-ads-search/PATTERN.md +92 -0
  137. package/patterns/google-ads-search/example/ads-setup.js +25 -0
  138. package/patterns/oauth-connection/PATTERN.md +724 -0
  139. package/patterns/oauth-connection/example/integrations.json +20 -0
  140. package/patterns/paddle-catalogue/PATTERN.md +78 -0
  141. package/patterns/paddle-catalogue/example/create-products.js +38 -0
  142. package/patterns/public-image/PATTERN.md +84 -0
  143. package/patterns/public-image/example/integrations.json +13 -0
  144. package/patterns/public-image/example/logo-url.js +16 -0
  145. package/patterns/redshift-queries/PATTERN.md +150 -0
  146. package/patterns/redshift-queries/example/integrations.json +33 -0
  147. package/patterns/source-scanning/PATTERN.md +83 -0
  148. package/patterns/source-scanning/example/source-scanner.js +13 -0
  149. package/src/client/firebase-cloud-messaging.js +10 -0
  150. package/src/client/google-analytics.js +72 -0
  151. package/src/client/google-maps-platform.js +39 -0
  152. package/src/client/logo-dev.js +36 -0
  153. package/src/server/ai.js +46 -0
  154. package/src/server/airtable.js +67 -0
  155. package/src/server/algolia.js +63 -0
  156. package/src/server/amazon-redshift.js +96 -0
  157. package/src/server/amplitude.js +31 -0
  158. package/src/server/apify.js +68 -0
  159. package/src/server/apollo-io.js +85 -0
  160. package/src/server/asana.js +64 -0
  161. package/src/server/ashby.js +61 -0
  162. package/src/server/atlassian.js +32 -0
  163. package/src/server/attention.js +93 -0
  164. package/src/server/aws-athena.js +82 -0
  165. package/src/server/aws-s3.js +49 -0
  166. package/src/server/awsTransport.js +75 -0
  167. package/src/server/bigquery.js +97 -0
  168. package/src/server/brevo.js +97 -0
  169. package/src/server/calendly.js +77 -0
  170. package/src/server/canva.js +13 -0
  171. package/src/server/chargebee.js +88 -0
  172. package/src/server/clay.js +78 -0
  173. package/src/server/clickhouse.js +66 -0
  174. package/src/server/confidence.js +29 -0
  175. package/src/server/contentful.js +40 -0
  176. package/src/server/databricks.js +55 -0
  177. package/src/server/dbt-semantic-layer.js +95 -0
  178. package/src/server/elevenlabs.js +81 -0
  179. package/src/server/figma.js +24 -0
  180. package/src/server/firebase-cloud-messaging.js +111 -0
  181. package/src/server/firecrawl.js +70 -0
  182. package/src/server/fireflies.js +31 -0
  183. package/src/server/fireworks-ai.js +16 -0
  184. package/src/server/gatewayapi.js +48 -0
  185. package/src/server/gemini-enterprise.js +47 -0
  186. package/src/server/github-api.js +90 -0
  187. package/src/server/gitlab-api.js +67 -0
  188. package/src/server/gmail.js +60 -0
  189. package/src/server/gong.js +52 -0
  190. package/src/server/google-ads-search.js +134 -0
  191. package/src/server/google-ads.js +80 -0
  192. package/src/server/google-docs.js +36 -0
  193. package/src/server/google-drive.js +71 -0
  194. package/src/server/google-maps-platform.js +90 -0
  195. package/src/server/google-search-console.js +31 -0
  196. package/src/server/google-sheets.js +60 -0
  197. package/src/server/google-slides.js +36 -0
  198. package/src/server/google.js +61 -0
  199. package/src/server/granola.js +115 -0
  200. package/src/server/graphqlOperation.js +15 -0
  201. package/src/server/hex.js +29 -0
  202. package/src/server/heygen.js +54 -0
  203. package/src/server/hubspot.js +85 -0
  204. package/src/server/incident-io.js +68 -0
  205. package/src/server/inngest.js +86 -0
  206. package/src/server/jsonOperation.js +34 -0
  207. package/src/server/klipy.js +34 -0
  208. package/src/server/lexware.js +59 -0
  209. package/src/server/lightspeed.js +82 -0
  210. package/src/server/linear.js +52 -0
  211. package/src/server/linkedin.js +74 -0
  212. package/src/server/mailgun.js +76 -0
  213. package/src/server/mapbox.js +46 -0
  214. package/src/server/mcpRegistration.js +41 -0
  215. package/src/server/mcpTransport.js +60 -0
  216. package/src/server/microsoft-excel.js +67 -0
  217. package/src/server/microsoft-fabric.js +81 -0
  218. package/src/server/microsoft-onedrive.js +58 -0
  219. package/src/server/microsoft-onenote.js +52 -0
  220. package/src/server/microsoft-outlook.js +58 -0
  221. package/src/server/microsoft-powerpoint.js +5 -0
  222. package/src/server/microsoft-sharepoint.js +46 -0
  223. package/src/server/microsoft-teams.js +29 -0
  224. package/src/server/microsoft-word.js +5 -0
  225. package/src/server/microsoft.js +88 -0
  226. package/src/server/miro.js +29 -0
  227. package/src/server/n8n.js +78 -0
  228. package/src/server/notion.js +76 -0
  229. package/src/server/oura.js +48 -0
  230. package/src/server/paddle.js +83 -0
  231. package/src/server/perplexity.js +15 -0
  232. package/src/server/pipedrive.js +95 -0
  233. package/src/server/polar.js +20 -0
  234. package/src/server/posthog.js +44 -0
  235. package/src/server/prestashop.js +42 -0
  236. package/src/server/replicate.js +42 -0
  237. package/src/server/resend.js +93 -0
  238. package/src/server/salesforce.js +84 -0
  239. package/src/server/sanity.js +31 -0
  240. package/src/server/semrush.js +359 -0
  241. package/src/server/sentry.js +30 -0
  242. package/src/server/sevdesk.js +20 -0
  243. package/src/server/shopify.js +99 -0
  244. package/src/server/slack.js +143 -0
  245. package/src/server/snowflake.js +139 -0
  246. package/src/server/storyblok.js +49 -0
  247. package/src/server/stripe.js +13 -0
  248. package/src/server/supabase.js +13 -0
  249. package/src/server/tally.js +78 -0
  250. package/src/server/telegram.js +55 -0
  251. package/src/server/tiktok.js +86 -0
  252. package/src/server/twilio.js +90 -0
  253. package/src/server/twitch.js +409 -0
  254. package/src/server/wave.js +520 -0
  255. package/src/server/wix.js +1048 -0
  256. package/src/server/wiz.js +117 -0
  257. package/src/server/woocommerce.js +412 -0
  258. package/src/server/wordpress-com.js +236 -0
  259. package/src/server/wordpress-self-hosted.js +134 -0
  260. package/src/server/workday.js +136 -0
  261. package/src/server/x-twitter.js +110 -0
  262. package/src/server/xero.js +397 -0
  263. package/src/server/zoho-books.js +90 -0
  264. package/src/server/zoho-crm.js +89 -0
  265. package/src/server/zohoOAuth.js +21 -0
  266. package/src/shared/ai-models.json +8049 -0
  267. package/src/shared/ai.js +63 -0
  268. package/src/shared/algolia.js +29 -0
  269. package/src/shared/amazon-redshift.js +51 -0
  270. package/src/shared/amplitude.js +28 -0
  271. package/src/shared/atlassian.js +43 -0
  272. package/src/shared/aws.js +72 -0
  273. package/src/shared/canva.js +66 -0
  274. package/src/shared/chargebee.js +26 -0
  275. package/src/shared/clickhouse.js +38 -0
  276. package/src/shared/confidence.js +28 -0
  277. package/src/shared/databricks.js +33 -0
  278. package/src/shared/dbt-semantic-layer.js +32 -0
  279. package/src/shared/definitions.js +140 -0
  280. package/src/shared/figma.js +21 -0
  281. package/src/shared/firebase-cloud-messaging.js +45 -0
  282. package/src/shared/gemini-enterprise.js +33 -0
  283. package/src/shared/gong.js +33 -0
  284. package/src/shared/google-ads-search.js +31 -0
  285. package/src/shared/google-ads.js +28 -0
  286. package/src/shared/google-maps-platform.js +28 -0
  287. package/src/shared/google.js +133 -0
  288. package/src/shared/granola.js +25 -0
  289. package/src/shared/hex.js +28 -0
  290. package/src/shared/inngest.js +35 -0
  291. package/src/shared/lightspeed.js +75 -0
  292. package/src/shared/linkedin.js +27 -0
  293. package/src/shared/logo-dev.js +21 -0
  294. package/src/shared/mapbox.js +38 -0
  295. package/src/shared/mcp.js +92 -0
  296. package/src/shared/microsoft-fabric.js +47 -0
  297. package/src/shared/microsoft.js +231 -0
  298. package/src/shared/miro.js +27 -0
  299. package/src/shared/oura.js +23 -0
  300. package/src/shared/posthog.js +33 -0
  301. package/src/shared/prestashop.js +23 -0
  302. package/src/shared/salesforce.js +36 -0
  303. package/src/shared/semrush.js +24 -0
  304. package/src/shared/shopify.js +51 -0
  305. package/src/shared/siteUrl.js +12 -0
  306. package/src/shared/slack.js +88 -0
  307. package/src/shared/snowflake.js +55 -0
  308. package/src/shared/tiktok.js +22 -0
  309. package/src/shared/tokens.js +747 -0
  310. package/src/shared/twilio.js +41 -0
  311. package/src/shared/twitch.js +49 -0
  312. package/src/shared/wave.js +52 -0
  313. package/src/shared/wix.js +40 -0
  314. package/src/shared/wiz.js +41 -0
  315. package/src/shared/wordpress-com.js +30 -0
  316. package/src/shared/wordpress.js +69 -0
  317. package/src/shared/workday.js +50 -0
  318. package/src/shared/x-twitter.js +19 -0
  319. package/src/shared/xero.js +46 -0
  320. package/src/shared/zoho-books.js +39 -0
  321. package/src/shared/zoho-crm.js +43 -0
  322. package/src/shared/zoho-regions.js +12 -0
  323. package/test/ai.test.js +136 -0
  324. package/test/airtable.test.js +125 -0
  325. package/test/algolia.test.js +207 -0
  326. package/test/amazon-redshift.test.js +272 -0
  327. package/test/amplitude.test.js +239 -0
  328. package/test/apify.test.js +93 -0
  329. package/test/apollo-io.test.js +125 -0
  330. package/test/asana.test.js +99 -0
  331. package/test/ashby.test.js +97 -0
  332. package/test/atlassian.test.js +249 -0
  333. package/test/attention.test.js +79 -0
  334. package/test/aws.test.js +405 -0
  335. package/test/brevo.test.js +71 -0
  336. package/test/calendly.test.js +136 -0
  337. package/test/canva.test.js +258 -0
  338. package/test/chargebee.test.js +195 -0
  339. package/test/clickhouse.test.js +278 -0
  340. package/test/confidence.test.js +205 -0
  341. package/test/databricks.test.js +253 -0
  342. package/test/dbt-semantic-layer.test.js +221 -0
  343. package/test/designMcp.test.js +336 -0
  344. package/test/elevenlabs.test.js +52 -0
  345. package/test/firebase-cloud-messaging.test.js +242 -0
  346. package/test/firecrawl.test.js +66 -0
  347. package/test/gemini-enterprise.test.js +218 -0
  348. package/test/github-api.test.js +167 -0
  349. package/test/gitlab-api.test.js +160 -0
  350. package/test/gong.test.js +192 -0
  351. package/test/google-ads.test.js +350 -0
  352. package/test/google-maps-platform.test.js +191 -0
  353. package/test/google.test.js +710 -0
  354. package/test/granola.test.js +240 -0
  355. package/test/hex.test.js +253 -0
  356. package/test/heygen.test.js +121 -0
  357. package/test/hubspot.test.js +103 -0
  358. package/test/inngest.test.js +219 -0
  359. package/test/lightspeed.test.js +250 -0
  360. package/test/linear.test.js +146 -0
  361. package/test/linkedin.test.js +243 -0
  362. package/test/logo-dev.test.js +79 -0
  363. package/test/mailgun.test.js +107 -0
  364. package/test/mapbox.test.js +181 -0
  365. package/test/mcp.test.js +227 -0
  366. package/test/microsoft-fabric.test.js +258 -0
  367. package/test/microsoft.test.js +554 -0
  368. package/test/n8nOAuth.test.js +188 -0
  369. package/test/notionOAuth.test.js +183 -0
  370. package/test/oura.test.js +211 -0
  371. package/test/paddleCatalogue.test.js +51 -0
  372. package/test/paddlePermissions.test.js +101 -0
  373. package/test/perplexityComposition.test.js +39 -0
  374. package/test/pipedriveOAuth.test.js +140 -0
  375. package/test/posthog.test.js +200 -0
  376. package/test/prestashop.test.js +207 -0
  377. package/test/resend.test.js +163 -0
  378. package/test/salesforce.test.js +276 -0
  379. package/test/semrush.test.js +479 -0
  380. package/test/sentry.test.js +35 -0
  381. package/test/shopify.test.js +247 -0
  382. package/test/slack.test.js +320 -0
  383. package/test/snowflake.test.js +391 -0
  384. package/test/tally.test.js +75 -0
  385. package/test/telegram.test.js +58 -0
  386. package/test/tiktok.test.js +243 -0
  387. package/test/tokens.test.js +1079 -0
  388. package/test/twilio.test.js +221 -0
  389. package/test/twitch.test.js +573 -0
  390. package/test/wave.test.js +678 -0
  391. package/test/wix.test.js +1099 -0
  392. package/test/wiz.test.js +185 -0
  393. package/test/wordpress-com.test.js +469 -0
  394. package/test/wordpress.test.js +660 -0
  395. package/test/workday.test.js +314 -0
  396. package/test/x-twitter.test.js +256 -0
  397. package/test/xero.test.js +700 -0
  398. package/test/zoho-books.test.js +253 -0
  399. package/test/zoho-crm.test.js +223 -0
@@ -0,0 +1,140 @@
1
+ import { aiDefinition } from "./ai.js";
2
+ export { aiDefinition } from "./ai.js";
3
+ import { wizDefinition } from "./wiz.js";
4
+ export { wizDefinition } from "./wiz.js";
5
+ import { shopifyDefinition } from "./shopify.js";
6
+ export { shopifyDefinition } from "./shopify.js";
7
+ import { workdayDefinition } from "./workday.js";
8
+ export { workdayDefinition } from "./workday.js";
9
+ import { geminiEnterpriseDefinition } from "./gemini-enterprise.js";
10
+ export { geminiEnterpriseDefinition } from "./gemini-enterprise.js";
11
+ import { snowflakeDefinition } from "./snowflake.js";
12
+ export { snowflakeDefinition } from "./snowflake.js";
13
+ import { wixDefinition } from "./wix.js";
14
+ export { wixDefinition } from "./wix.js";
15
+ import { tiktokDefinition } from "./tiktok.js";
16
+ export { tiktokDefinition } from "./tiktok.js";
17
+ import { xTwitterDefinition } from "./x-twitter.js";
18
+ export { xTwitterDefinition } from "./x-twitter.js";
19
+ import { linkedinDefinition } from "./linkedin.js";
20
+ export { linkedinDefinition } from "./linkedin.js";
21
+ import { googleAdsDefinition } from "./google-ads.js";
22
+ export { googleAdsDefinition } from "./google-ads.js";
23
+ import { salesforceDefinition } from "./salesforce.js";
24
+ export { salesforceDefinition } from "./salesforce.js";
25
+ import { firebaseCloudMessagingDefinition } from "./firebase-cloud-messaging.js";
26
+ export { firebaseCloudMessagingDefinition } from "./firebase-cloud-messaging.js";
27
+ import { dbtSemanticLayerDefinition } from "./dbt-semantic-layer.js";
28
+ export { dbtSemanticLayerDefinition } from "./dbt-semantic-layer.js";
29
+ import { microsoftFabricDefinition } from "./microsoft-fabric.js";
30
+ import { databricksDefinition } from "./databricks.js";
31
+ export { databricksDefinition } from "./databricks.js";
32
+ import { lightspeedDefinition } from "./lightspeed.js";
33
+ export { lightspeedDefinition } from "./lightspeed.js";
34
+ import { confidenceFlagsDefinition, confidenceExpDefinition } from "./confidence.js";
35
+ export { confidenceFlagsDefinition, confidenceExpDefinition } from "./confidence.js";
36
+ import { hexDefinition } from "./hex.js";
37
+ export { hexDefinition } from "./hex.js";
38
+ import { granolaDefinition } from "./granola.js";
39
+ export { granolaDefinition } from "./granola.js";
40
+ import { zohoBooksDefinition } from "./zoho-books.js";
41
+ export { zohoBooksDefinition } from "./zoho-books.js";
42
+ import { zohoCrmDefinition } from "./zoho-crm.js";
43
+ export { zohoCrmDefinition } from "./zoho-crm.js";
44
+ import { waveDefinition } from "./wave.js";
45
+ export { waveDefinition } from "./wave.js";
46
+ import { semrushDefinition } from "./semrush.js";
47
+ export * from "./semrush.js";
48
+ import { xeroDefinition } from "./xero.js";
49
+ export { xeroDefinition } from "./xero.js";
50
+ import { amazonRedshiftDefinition } from "./amazon-redshift.js";
51
+ export { amazonRedshiftDefinition } from "./amazon-redshift.js";
52
+ import { awsS3Definition, awsAthenaDefinition } from "./aws.js";
53
+ export { awsS3Definition, awsAthenaDefinition } from "./aws.js";
54
+ import { slackDefinition } from "./slack.js";
55
+ export { slackDefinition } from "./slack.js";
56
+ import { figmaDefinition } from "./figma.js";
57
+ import { prestashopDefinition } from "./prestashop.js";
58
+ import { clickhouseDefinition } from "./clickhouse.js";
59
+ import { twitchDefinition } from "./twitch.js";
60
+ export * from "./twitch.js";
61
+ export * from "./clickhouse.js";
62
+ export * from "./prestashop.js";
63
+ import { miroDefinition } from "./miro.js";
64
+ export * from "./figma.js";
65
+ export * from "./miro.js";
66
+ import { canvaDefinition } from "./canva.js";
67
+ export * from "./canva.js";
68
+ import { atlassianDefinition } from "./atlassian.js";
69
+ export * from "./atlassian.js";
70
+ import { amplitudeDefinition } from "./amplitude.js";
71
+ import { wordpressComDefinition } from "./wordpress-com.js";
72
+ import { n8nDefinition, sanityDefinition } from "./mcp.js";
73
+ import { inngestDefinition } from "./inngest.js";
74
+ export * from "./inngest.js";
75
+ export * from "./mcp.js";
76
+ import { googleDefinitions } from "./google.js";
77
+ import { tokenDefinitions } from "./tokens.js";
78
+ import { microsoftDefinitions } from "./microsoft.js";
79
+ import { ouraDefinition } from "./oura.js";
80
+ import { algoliaDefinition } from "./algolia.js";
81
+ import { twilioDefinition } from "./twilio.js";
82
+ import { gongDefinition } from "./gong.js";
83
+ import { posthogDefinition } from "./posthog.js";
84
+ import { chargebeeDefinition } from "./chargebee.js";
85
+ import { mapboxDefinition } from "./mapbox.js";
86
+ import { logoDevDefinition } from "./logo-dev.js";
87
+ import { googleMapsPlatformDefinition } from "./google-maps-platform.js";
88
+ import { woocommerceDefinition, wordpressSelfHostedDefinition } from "./wordpress.js";
89
+ export * from "./wordpress-com.js";
90
+ export * from "./google.js";
91
+ export * from "./tokens.js";
92
+ export * from "./microsoft.js";
93
+ export * from "./oura.js";
94
+ export * from "./algolia.js";
95
+ export * from "./twilio.js";
96
+ export * from "./gong.js";
97
+ export * from "./posthog.js";
98
+ export * from "./chargebee.js";
99
+ export * from "./mapbox.js";
100
+ export * from "./logo-dev.js";
101
+ export * from "./google-maps-platform.js";
102
+ export * from "./wordpress.js";
103
+ const resendDefinition = Object.freeze({
104
+ id: "resend", name: "Resend", description: "Send transactional email and manage contact segments and draft broadcasts.",
105
+ accountModes: ["shared", "assistant"], authenticationMethods: ["api-key"], scopes: [],
106
+ setup: {
107
+ url: "https://resend.com/docs/create-an-api-key",
108
+ steps: [
109
+ "Open API Keys in your Resend dashboard and choose Create API key.",
110
+ "Name the key and select Full access: this connector checks access by listing domains. Sending access cannot perform that check. Full access also permits changes to Resend resources, so keep this key on your application's backend.",
111
+ "Create the key and copy its value before closing; Resend shows the value only once. If you lose it, create a replacement.",
112
+ "Enter env:RESEND_API_KEY in API key reference and save the configuration. Choose Set credential in Env, paste the copied key as the RESEND_API_KEY value, and save it there. Return here and choose Connect / Verify when the application setup is ready.",
113
+ "Open Domains in Resend, choose Add domain, enter the sender domain and copy the displayed SPF/DKIM DNS records into your DNS host. Return to Resend and verify until the domain is verified; use a From address on that domain. Connecting only lists domains and cannot prove inbox delivery.",
114
+ "For marketing, open Contacts and create a Segment (older guides call these Audiences). Add only opted-in contacts; contacts.create requires an explicit unsubscribed value, and contacts.update can unsubscribe them. segments.list/create and contacts.list/get/addSegment/removeSegment support the same workflow in your app.",
115
+ "Prepare your HTML in the app or Resend Broadcasts editor; include {{{RESEND_UNSUBSCRIBE_URL}}} as the unsubscribe link. broadcasts.create always creates a draft. Use broadcasts.get/update to review its segment, sender and content; test with a segment containing only your own addresses before an explicitly authorized broadcasts.send. Sending affects the whole selected segment.",
116
+ "LIMITATIONS: no embedded visual campaign builder, hosted-template catalogue, automation engine, inbound mail, attachment handling, delivery webhook processor or automatic editor-tool attachment. For example, an app can save a newsletter draft and send it to a reviewed segment; the app or Resend dashboard supplies preview, scheduling and analytics. Transactional emails.send remains plain text with an app-owned idempotency key.",
117
+ "No OAuth app registration or callback URL is needed. Connection verification lists domains without sending email. Sending from your own domain additionally requires adding and verifying it in Resend."
118
+ ]
119
+ }
120
+ });
121
+
122
+ const firecrawlDefinition = Object.freeze({
123
+ id: "firecrawl", name: "Firecrawl", description: "Search, map, scrape and extract web content; run bounded site crawls.",
124
+ accountModes: ["shared", "assistant"], authenticationMethods: ["api-key"], scopes: [],
125
+ setup: {
126
+ url: "https://docs.firecrawl.dev/introduction",
127
+ steps: [
128
+ "Open https://www.firecrawl.dev/app/api-keys and sign in. Select the team that will pay for this application and check its available credits.",
129
+ "Open API Keys and create or copy a key for that team.",
130
+ "Enter env:FIRECRAWL_API_KEY as the API key reference and Save configuration. Follow Set credential in Env, save the real key as FIRECRAWL_API_KEY, then return here and choose Connect account or Verify again. Check connection reads saved status. Keep the key out of source and browser code.",
131
+ "Verification reads remaining team credits without scraping. A valid key with zero credits can connect, but does not promise a successful scrape. Scraping is a separate, authorized operation that consumes credits. Correct invalid keys or team access before retrying a failed connection.",
132
+ "Search, mapping, extraction and crawling use your team credits. Crawls require an explicit page limit. Save the returned job ID, check its status, follow returned result pages and inspect crawl errors; starting a crawl is not a completed import. Your app owns scheduling and saved content.",
133
+ "To rotate a key, use the team API Keys page, update Env and verify again before revoking the previous key. Disconnect only removes this application connection; revoke the key in Firecrawl separately. No OAuth app ID, secret or callback is required. This setup uses your team credits; Vibe64 does not supply a managed subscription."
134
+ ]
135
+ }
136
+ });
137
+
138
+ const connectorDefinitions = Object.freeze([aiDefinition, wizDefinition, shopifyDefinition, workdayDefinition, geminiEnterpriseDefinition, snowflakeDefinition, wixDefinition, tiktokDefinition, xTwitterDefinition, linkedinDefinition, googleAdsDefinition,
139
+ salesforceDefinition, firebaseCloudMessagingDefinition, resendDefinition, firecrawlDefinition, ...googleDefinitions, ...tokenDefinitions, ...microsoftDefinitions, ouraDefinition, algoliaDefinition, twilioDefinition, gongDefinition, posthogDefinition, chargebeeDefinition, mapboxDefinition, logoDevDefinition, googleMapsPlatformDefinition, woocommerceDefinition, wordpressSelfHostedDefinition, wordpressComDefinition, n8nDefinition, sanityDefinition, inngestDefinition, amplitudeDefinition, atlassianDefinition, canvaDefinition, figmaDefinition, miroDefinition, prestashopDefinition, clickhouseDefinition, twitchDefinition, slackDefinition, awsS3Definition, awsAthenaDefinition, amazonRedshiftDefinition, xeroDefinition, semrushDefinition, waveDefinition, zohoCrmDefinition, zohoBooksDefinition, granolaDefinition, hexDefinition, confidenceFlagsDefinition, confidenceExpDefinition, lightspeedDefinition, databricksDefinition, microsoftFabricDefinition, dbtSemanticLayerDefinition]);
140
+ export { connectorDefinitions, resendDefinition, firecrawlDefinition };
@@ -0,0 +1,21 @@
1
+ const figmaDefinition = Object.freeze({
2
+ id: "figma", name: "Figma", description: "Discover and call Figma's remote design tools through the assistant owner's account.",
3
+ accountModes: ["assistant"], authenticationMethods: ["oauth2"],
4
+ scopes: [{ value: "mcp:connect", label: "Use Figma MCP tools", recommended: true }],
5
+ setup: {
6
+ url: "https://developers.figma.com/docs/figma-mcp-server/",
7
+ clientRegistrationEndpoint: "https://api.figma.com/v1/oauth/mcp/register",
8
+ steps: [
9
+ "Open Figma's MCP guide and follow the new-client waitlist link. Figma currently requires approval for clients outside its catalogue.",
10
+ "After approval, confirm the suggested callback is the exact route your application will serve. Use the OAuth client registration section below to copy the endpoint and request body into your HTTP client. Send one POST with Content-Type application/json. CLI users can call registerFigmaClient; do not repeat registration for every connection.",
11
+ "Copy client_id from the successful response into Client ID and save configuration. Use Set credential in Env to store client_secret under the displayed Client secret reference. Use Set callback in Env to save the exact registered callback. Keep the registration response private.",
12
+ "Save, begin authorization, sign into Figma and review its consent screen. A personal access token cannot replace this MCP OAuth registration.",
13
+ "The host must authorize each tool and its arguments. The MCP permission can expose write tools; listing a tool does not authorize an edit.",
14
+ "Use a Figma file/frame link to identify the allowed file and node. The assistant host consumes returned design text/images and chooses its framework; connecting alone does not generate screens. Vibe64 coding-assistant attachment is deferred.",
15
+ "Remote MCP is the supported mode for both installed and hosted Vibe64. Desktop MCP must run beside the consuming desktop client; a VPS localhost address points to the VPS, not your laptop. Do not enter a desktop localhost URL as the hosted remote endpoint.",
16
+ "Disconnect removes the local grant; it does not undo design edits or revoke all provider access. This uses Figma's remote server. Desktop MCP, app-user login and automatic assistant attachment are separate capabilities."
17
+ ]
18
+ }
19
+ });
20
+
21
+ export { figmaDefinition };
@@ -0,0 +1,45 @@
1
+ import { createSchema } from "json-rest-schema";
2
+
3
+ const firebaseMessagingScope = "https://www.googleapis.com/auth/firebase.messaging";
4
+ const firebaseProjectId = { type: "string", required: true, noTrim: true, minLength: 6, maxLength: 30,
5
+ validator: (value) => /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/u.test(value) || "Enter the Firebase project ID, without a URL or project number." };
6
+ const common = {
7
+ projectId: firebaseProjectId,
8
+ clientMode: { type: "string", enum: ["server", "web"], defaultTo: "server" }
9
+ };
10
+ const serverSettings = createSchema(common);
11
+ const webSettings = createSchema({ ...common,
12
+ apiKey: { type: "string", required: true, noTrim: true, pattern: "^AIza[0-9A-Za-z_-]{35}$" },
13
+ appId: { type: "string", required: true, noTrim: true, pattern: "^1:[1-9][0-9]{0,19}:web:[a-f0-9]{16,64}$" },
14
+ vapidKey: { type: "string", required: true, noTrim: true,
15
+ validator: (value) => /^B[A-Za-z0-9_-]{85}[AEIMQUYcgkosw048]$/u.test(value) || "Enter the public Web Push certificate key from Firebase, not a private key." }
16
+ });
17
+ const firebaseCloudMessagingDefinition = Object.freeze({
18
+ id: "firebase-cloud-messaging", name: "Firebase Cloud Messaging", description: "Send notifications to mobile and browser installations, tokens or topics.",
19
+ accountModes: ["shared", "assistant"], authenticationMethods: ["service-account"],
20
+ serviceAccountReferenceLabel: "Service-account JSON reference",
21
+ serviceAccountReferenceHint: "Store the complete service-account JSON in Env, then enter its reference. It stays on the server and is never included in the browser configuration.",
22
+ scopes: [{ value: firebaseMessagingScope, label: "Validate and send Firebase messages", recommended: true }],
23
+ permissionsHint: "Firebase IAM controls which projects this service account can send to. Sending to an audience also requires your application's authorization.",
24
+ settingsSchema: (settings = {}) => settings.clientMode === "web" ? webSettings : serverSettings,
25
+ settingsFields: [
26
+ { name: "projectId", label: "Firebase project ID", placeholder: "my-notifications-app", hint: "The project receiving messages. Usually project_id in your JSON; cross-project access requires an IAM grant on this target project." },
27
+ { name: "clientMode", label: "Client setup", items: [{ value: "server", title: "Server or native only" }, { value: "web", title: "Include web push" }],
28
+ hint: "Existing mobile/browser targets need server credentials. Include web push to configure browser registration too." },
29
+ { name: "apiKey", label: "Firebase API key", placeholder: "AIzaSyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", hint: "Public API key from the Firebase web app configuration. This value is visible in your published app." },
30
+ { name: "appId", label: "Firebase App ID", placeholder: "1:123456789012:web:abcdef1234567890", hint: "Public appId from the same Firebase project and web app." },
31
+ { name: "vapidKey", label: "Web Push VAPID key", placeholder: "BEl62...", hint: "Public key from Project settings > Cloud Messaging > Web Push certificates. Never paste the private VAPID key." }
32
+ ],
33
+ setup: { url: "https://firebase.google.com/docs/cloud-messaging/send/v1-api", steps: [
34
+ "Open the target Firebase project. In Project settings > General, copy its project ID. Enable Firebase Cloud Messaging API (HTTP v1) if disabled.",
35
+ "In Project settings > Service accounts, click Generate new private key, then Generate key. Keep the complete downloaded JSON private. Alternatively use Google Cloud IAM & Admin > Service Accounts > your sender > Keys > Add key > Create new key > JSON; grant the sender Firebase Cloud Messaging API Admin on the target project. If your organization prohibits keys, ask its administrator; do not use an unrelated key.",
36
+ "Enter the Firebase project ID and env:FIREBASE_SERVICE_ACCOUNT in Service-account JSON reference, then Save configuration. Follow Set credential in Env and store the complete downloaded JSON as FIREBASE_SERVICE_ACCOUNT, not its filename or path. Return here and choose Connect account / Verify again. Check connection only reads saved status. Verification makes a validate-only request; it does not deliver a notification.",
37
+ "For web push, select Include web push. Under Project settings > General > Your apps, select your Web app, or click the Web icon and Register app with a nickname. Firebase Hosting is optional. From SDK setup and configuration, copy apiKey into Firebase API key and appId into Firebase App ID. These values are public.",
38
+ "Open Project settings > Cloud Messaging > Web configuration > Web Push certificates. Generate or select a key pair and copy only its public key.",
39
+ "The app must still register a service worker, request browser notification permission and associate installations with authorized app users. A new custom domain needs its own browser registration.",
40
+ "The app must upload each registration to its authenticated backend with a timestamp and associate it with that user/device. On connector_recipient_unregistered, remove only that recipient association; on connector_message_invalid, check the payload first and do not blindly delete tokens. A send receipt is acceptance, not proof the device displayed a notification. Editor coding-assistant attachment is deferred.",
41
+ "Save again after changing web settings and verify the connection. For permission failures, check the enabled API, target project ID and sender IAM access. Disconnect removes the local connection, not the Google private key: rotate or delete that key in Google Cloud IAM > Service Accounts > your sender > Keys, and update Env when rotating. No browser OAuth callback or login feature is involved. Separate Firebase projects provide separate project quotas; service accounts in one project do not."
42
+ ] }
43
+ });
44
+
45
+ export { firebaseCloudMessagingDefinition, firebaseMessagingScope, firebaseProjectId };
@@ -0,0 +1,33 @@
1
+ import { createSchema } from "json-rest-schema";
2
+
3
+ const geminiEnterpriseScope = "https://www.googleapis.com/auth/cloud-platform";
4
+ const geminiEnterpriseDefinition = Object.freeze({
5
+ id: "gemini-enterprise", name: "Gemini Enterprise", categories: ["Google", "Productivity"],
6
+ description: "Search documents in a configured Gemini Enterprise engine.",
7
+ accountModes: ["shared", "assistant"], authenticationMethods: ["oauth2"],
8
+ oauthClientAuthenticationMethods: ["client_secret_post", "client_secret_basic"],
9
+ settingsSchema: createSchema({
10
+ projectId: { type: "string", required: true, noTrim: true, minLength: 6, maxLength: 30,
11
+ validator: (value) => /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/u.test(value) || "Enter the Google Cloud project ID, without a URL or project number." },
12
+ location: { type: "string", enum: ["global", "us", "eu"], defaultTo: "global" },
13
+ engineId: { type: "string", required: true, noTrim: true, minLength: 1, maxLength: 63,
14
+ validator: (value) => /^[a-z0-9][a-z0-9_-]*$/u.test(value) || "Enter the engine ID, starting with a lowercase letter or digit and using only lowercase letters, digits, hyphens or underscores." }
15
+ }),
16
+ settingsFields: [
17
+ { name: "projectId", label: "GCP project ID", placeholder: "my-gcp-project", hint: "The Google Cloud project where the Gemini Enterprise app lives." },
18
+ { name: "location", label: "Location", items: [{ value: "global", title: "Global" }, { value: "us", title: "United States" }, { value: "eu", title: "European Union" }],
19
+ hint: "Match the engine's location. The runtime uses the corresponding Google API endpoint." },
20
+ { name: "engineId", label: "Engine ID", placeholder: "my-search-engine", hint: "The existing search app identifier in default_collection, not its display name or full resource path." }
21
+ ],
22
+ scopes: [{ value: geminiEnterpriseScope, label: "Cloud Platform (full access)", recommended: true }],
23
+ permissionsHint: "Google IAM and source permissions apply to the connected Google account. Shared access uses that same account for every authorized caller; it does not provide each app user's own search identity.",
24
+ setup: { url: "https://docs.cloud.google.com/gemini/enterprise/docs/authentication", steps: [
25
+ "In Google Cloud, select the project, enable the Discovery Engine API and create or select a Gemini Enterprise search app. Copy its project ID, location and engine ID.",
26
+ "Grant the connecting Google account discoveryengine.engines.get and discoveryengine.servingConfigs.search on the target resources. Configure source access and any required Gemini Enterprise license separately.",
27
+ "Open Google Auth Platform. Configure Branding and Audience; in Data Access add https://www.googleapis.com/auth/cloud-platform. Under Clients > Create Client choose Web application. Copy the Suggested callback URL shown here into Authorized redirect URIs, then create the client. Use the application hosting address, not the editor address.",
28
+ "Enter the client ID here and keep the Client secret reference and Callback URL reference as Env references. Save configuration, then follow the Env links to store the secret and the same suggested callback under their referenced names. The application backend must implement this callback. Add the connecting account as a test user while the Google OAuth app is in testing.",
29
+ "Search can request document snippets and a Google-generated summary with citations. The app explicitly enables summaries and its Google project pays for them. Missing snippets or a skipped summary must be shown as unavailable, not an invented answer. Every authorized caller uses this shared account; the app must restrict who can see those sources.",
30
+ "Connect and choose the Google account granted access to the engine. Verification reads engine metadata; searching still requires search and source permissions. If access fails, check project ID, engine ID, location, API enablement and IAM. Disconnect removes the local grant; remove Google account consent separately to revoke provider access. If the application domain changes, update both Google redirect registration and callback Env."
31
+ ] }
32
+ });
33
+ export { geminiEnterpriseDefinition, geminiEnterpriseScope };
@@ -0,0 +1,33 @@
1
+ import { createSchema } from "json-rest-schema";
2
+
3
+ const gongDefinition = Object.freeze({
4
+ id: "gong", name: "Gong", description: "Read company calls, transcripts, conversation statistics and linked CRM context.",
5
+ accountModes: ["shared", "assistant"], authenticationMethods: ["api-key"], scopes: [],
6
+ apiKeyReferenceLabel: "Access key secret reference",
7
+ settingsSchema: createSchema({
8
+ accessKey: { type: "string", required: true, minLength: 1, maxLength: 512,
9
+ validator: (value) => !/[:\s\p{Cc}]/u.test(value) || "Enter the access key without spaces, control characters or colons." },
10
+ apiBaseUrl: { type: "string", defaultTo: "https://api.gong.io", maxLength: 2048,
11
+ validator: (value) => /^https:\/\/(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)?api\.gong\.io\/?$/u.test(value) ||
12
+ "Use https://api.gong.io or your company's https://<company>.api.gong.io address, without a path or query." }
13
+ }),
14
+ settingsFields: [
15
+ { name: "accessKey", label: "Access key", hint: "Copy the access key identifier from Gong's API settings. Store its secret separately." },
16
+ { name: "apiBaseUrl", label: "API base URL (optional)", placeholder: "https://api.gong.io",
17
+ hint: "Copy the API base URL from Gong's API settings. Leave empty to use https://api.gong.io." }
18
+ ],
19
+ setup: {
20
+ url: "https://help.gong.io/docs/receive-access-to-the-api",
21
+ steps: [
22
+ "Sign into Gong as a technical administrator. Open Admin center, Settings, then API under Ecosystem.",
23
+ "Click + Get API key. Enter Key name; TTL (days) and Trusted IPs are optional. For Trusted IPs, use the application backend’s outbound addresses. Click Get API key.",
24
+ "Copy the identifier into Access key here. Enter env:GONG_ACCESS_SECRET in Access key secret reference and Save configuration. Choose Set credential in Env, paste the one-time secret as GONG_ACCESS_SECRET, and save there before closing Gong’s dialog with Done.",
25
+ "If Gong provides a company API base URL, copy it here. Otherwise keep the default URL.",
26
+ "Save configuration and choose Connect account. Your application verifies the company user list; this is a shared company credential, not individual user login. No OAuth app or callback is required.",
27
+ "Call reads require existing recordings and appropriate company API access. Transcripts and analysis can be unavailable or still processing. Select call IDs or a date range in the app; its access policy must protect company recordings and CRM fields from unauthorized visitors.",
28
+ "Linked deal context comes from the CRM data already connected to Gong; this does not configure CRM synchronization. Media URLs are requested only explicitly and expire after eight hours. The app must keep these URLs private and must never send the Gong Basic credential to a media URL.",
29
+ "For a lost secret, create a replacement and update Env. Disconnect only removes local connection state. To revoke in Gong, open the key row’s actions, Edit, Delete, acknowledge I understand, then Delete API. Other systems using that key will lose access too."
30
+ ]
31
+ }
32
+ });
33
+ export { gongDefinition };
@@ -0,0 +1,31 @@
1
+ import { createSchema } from "json-rest-schema";
2
+ import { validateSchemaPayload } from "@jskit-ai/kernel/shared/validators";
3
+
4
+ const id = { type: "string", required: true, validator: value => /^[0-9]{1,20}$/.test(value) || "Use a numeric Google ID." };
5
+ const text = (max) => ({ type: "string", required: true, minLength: 1, maxLength: max,
6
+ validator: value => !/[\p{Cc}\p{Cf}]/u.test(value) || "Use plain text without control characters." });
7
+ const list = (item, min, max) => ({ type: "array", required: true, items: item,
8
+ validator: values => values.length >= min && values.length <= max || `Provide ${min}–${max} values.` });
9
+ const micros = { type: "string", required: true, validator: value => /^[1-9][0-9]{0,11}$/.test(value) || "Use a positive integer string of at most 12 digits." };
10
+ const googleAdsSearchFields = {
11
+ customerId: { ...id, validator: value => /^[0-9]{10}$/.test(value) || "Use a ten-digit customer ID." },
12
+ nonPolitical: { type: "boolean", required: true, validator: value => value === true || "This Search recipe supports only non-political advertising." },
13
+ name: text(100), currency: { type: "string", required: true, validator: value => /^[A-Z]{3}$/.test(value) || "Use the uppercase account currency code." },
14
+ dailyBudgetMicros: micros, maxCpcMicros: micros,
15
+ finalUrl: { ...text(2048), validator: value => {
16
+ try { const url = new URL(value); return url.protocol === "https:" && !url.username && !url.password && !url.hash || "Use the public HTTPS landing page."; }
17
+ catch { return "Use the public HTTPS landing page."; }
18
+ } },
19
+ conversionActionId: id,
20
+ locationIds: list(id, 1, 10), languageId: id,
21
+ keywords: list(text(80), 1, 20),
22
+ headlines: list(text(30), 3, 15), descriptions: list(text(90), 2, 4)
23
+ };
24
+ const schema = createSchema(googleAdsSearchFields);
25
+ function validateGoogleAdsSearchPlan(input) {
26
+ for (const key of ["customerId", "name", "currency", "dailyBudgetMicros", "maxCpcMicros", "finalUrl", "conversionActionId", "languageId"]) {
27
+ if (typeof input?.[key] !== "string") throw new Error(`Search plan ${key} must be a string.`);
28
+ }
29
+ return validateSchemaPayload({ schema, mode: "replace" }, input, { statusCode: 422 });
30
+ }
31
+ export { googleAdsSearchFields, validateGoogleAdsSearchPlan };
@@ -0,0 +1,28 @@
1
+ import { createSchema } from "json-rest-schema";
2
+
3
+ const common = {
4
+ loginCustomerId: { type: "string", noTrim: true, minLength: 10, maxLength: 10,
5
+ validator: (value) => /^[0-9]{10}$/u.test(value) || "Enter the manager's 10-digit customer ID without hyphens." }
6
+ };
7
+ const googleAdsDefinition = Object.freeze({
8
+ id: "google-ads", name: "Google Ads", description: "Discover advertising accounts, prepare reviewed Search campaigns and read Google Ads reports.",
9
+ categories: ["Google", "Marketing"], accountModes: ["shared", "per-user", "assistant"], authenticationMethods: ["oauth2"],
10
+ settingsSchema: createSchema(common),
11
+ settingsFields: [
12
+ { name: "loginCustomerId", label: "Manager customer ID (optional)", placeholder: "1234567890",
13
+ hint: "Use the manager through which this app accesses client accounts, without hyphens. Direct account access can leave this blank." }
14
+ ],
15
+ scopes: [{ value: "https://www.googleapis.com/auth/adwords", label: "Access Google Ads accounts", recommended: true }],
16
+ permissionsHint: "This Google permission can authorize campaign changes. Search management uses separate reviewed operations; your application must authorize each account and spending decision. This is not application login.",
17
+ setup: { url: "https://developers.google.com/google-ads/api/docs/get-started/make-first-call", steps: [
18
+ "Select your Google Cloud project, open APIs & Services > Library and enable Google Ads API. Open its Overview page and review API access level. Test access only permits test accounts; use Upgrade access level to apply for production access.",
19
+ "In Google Auth Platform, configure Branding and Audience, adding test users while testing. In Data Access add https://www.googleapis.com/auth/adwords. Complete the applicable consent publishing and verification requirements.",
20
+ "Open Clients, create a Web application client and add this project's exact Suggested callback URL to Authorized redirect URIs. Your application backend must implement that callback.",
21
+ "Copy Client ID here and Save configuration. Use Set credential in Env to save the client secret under its referenced key, and save the same callback URL under the callback reference. Google Ads no longer requires a developer token.",
22
+ "If access goes through a manager, enter its 10-digit customer ID without hyphens. Leave it blank for direct access. The person consenting must already have access to the intended Ads accounts.",
23
+ "For Search campaigns, save and connect this shared account, then open Google Ads Search campaigns below. Load the client account and website goal, prepare and save the plan, validate it, and explicitly create it paused. Verify tags, billing and advertiser requirements before the separate launch approval. Disconnecting does not pause running ads.",
24
+ "Choose Connect account for a shared project account. Individual users connect inside the application's own account screen. Verification lists directly accessible accounts; it does not prove access to every child account. Disconnect removes local access; revoke Google consent separately when intended."
25
+ ] }
26
+ });
27
+
28
+ export { googleAdsDefinition };
@@ -0,0 +1,28 @@
1
+ import { createSchema } from "json-rest-schema";
2
+ import { secretReference } from "@jskit-ai/connectors-core/shared/configuration";
3
+
4
+ const googleMapsPlatformDefinition = Object.freeze({
5
+ id: "google-maps-platform", name: "Google Maps Platform", description: "Geocode addresses, find places, compute routes and configure browser maps.",
6
+ accountModes: ["shared", "assistant"], authenticationMethods: ["api-key"], scopes: [],
7
+ apiKeyReferenceLabel: "Server API key reference",
8
+ verificationFields: [{ name: "address", required: true, label: "Verification address",
9
+ hint: "Enter an address or plus code. Connecting performs one geocoding request and can incur provider usage charges." }],
10
+ apiKeyReferenceHint: "Reference a server key authorized for Geocoding API. Verification performs one geocoding request using an address you supply and can incur provider usage charges.",
11
+ settingsSchema: createSchema({ browserKeyRef: { ...secretReference, required: false }, mapId: { type: "string", maxLength: 100, validator: value => /^[A-Za-z0-9_-]+$/.test(value) || "Use the map ID from Google Cloud." } }),
12
+ settingsFields: [{ name: "mapId", label: "Map ID (optional)", hint: "Public JavaScript map ID for advanced markers. Create it in Google Maps Platform > Map management. DEMO_MAP_ID is only for development." }, { name: "browserKeyRef", label: "Browser API key reference (optional)", placeholder: "env:GOOGLE_MAPS_BROWSER_KEY",
13
+ hint: "A separate key for browser maps. Restrict it to the actual application websites and APIs. Backend verification does not verify this key." }],
14
+ setup: {
15
+ url: "https://developers.google.com/maps/documentation/geocoding/guides-v3/get-api-key",
16
+ steps: [
17
+ "Select a Google Cloud project with billing and enable Geocoding API. Open APIs & Services > Credentials > Create credentials > API key for server geocoding.",
18
+ "Restrict the server key to Geocoding API and the backend's outbound IPs. Enter env:GOOGLE_MAPS_SERVER_KEY in Server API key reference, Save configuration, then Set credential in Env. Save the real key as GOOGLE_MAPS_SERVER_KEY.",
19
+ "For places and routes, also enable Places API (New) and Routes API in Library, then add them to the server key API restrictions. Place names/address/location use billable data fields; set quotas and review current pricing. Geocoding verification does not test these additional APIs.",
20
+ "For browser maps, enable Maps JavaScript API. Open Google Maps Platform > Map management > Create map ID, select JavaScript and copy the ID into Map ID. The app loads Google's SDK with its separate browser key and gives the map container a height. Advanced markers require a map ID.",
21
+ "For browser maps, create a separate key restricted to the required browser APIs and Websites, including the actual preview and custom domains. Enter env:GOOGLE_MAPS_BROWSER_KEY in Browser API key reference and save that value separately in Env. The app publishes this browser key; never publish the server key.",
22
+ "Save configuration, enter Verification address, then Connect account. This performs one potentially billable geocoding request. It verifies only the server key, not browser maps. No OAuth registration or callback is needed.",
23
+ "Update Env when replacing a key. Disconnect removes local connection state; delete or restrict the key in Google Cloud to revoke provider access. Check existing usage before deleting a key used by other applications."
24
+ ]
25
+ }
26
+ });
27
+
28
+ export { googleMapsPlatformDefinition };
@@ -0,0 +1,133 @@
1
+ import { createSchema } from "json-rest-schema";
2
+ const scope = (name) => name.startsWith("https:") ? name : `https://www.googleapis.com/auth/${name}`;
3
+ function definition(id, name, api, description, recommended, permissions, verificationFields = [], setupNotes = []) {
4
+ return Object.freeze({
5
+ id, name, description, verificationFields, categories: ["Google", "Productivity"],
6
+ accountModes: ["shared", "per-user", "assistant"], authenticationMethods: ["oauth2"],
7
+ scopes: permissions.map(([value, label, required = false]) => ({ value: scope(value), label,
8
+ recommended: Array.isArray(recommended) ? recommended.includes(value) : value === recommended, ...(required ? { required: true } : {}) })),
9
+ setup: {
10
+ url: "https://developers.google.com/identity/protocols/oauth2/web-server",
11
+ steps: [
12
+ `In Google Cloud, select the project for this application. Open APIs & Services > Library, search for ${api}, open it and choose Enable.`,
13
+ "Open Google Auth Platform > Branding. If setup has not started, choose Get Started; enter the app name, support email and contact email, choose the audience, review the policy and finish with Create.",
14
+ "Choose External if people outside your Google Workspace organization will connect. During testing, open Audience > Test users > Add users, enter the allowed Google accounts and Save. Internal is only for your organization. External Testing refresh tokens for these API permissions expire after seven days; reconnect during testing. Public release also requires completing the applicable Google review.",
15
+ "For an external app, open Data Access > Add or Remove Scopes. Add the permissions selected in this integration and Save. Sensitive or restricted scopes can require Google verification before public use; creating a client does not complete that review.",
16
+ ...setupNotes,
17
+ "Open Clients > Create Client. Choose Web application and name it. Under Authorized redirect URIs, choose Add URI and paste the application callback shown here, then Create. The editor dashboard URL is not the callback.",
18
+ "Copy the Client ID into this form and copy or download the full client secret immediately; Google only shows it at creation. Save configuration, then use Set credential in Env to put the secret value in the variable named by Client secret reference. If lost, open Clients, select this client and Add Secret; save the new value before disabling the old secret.",
19
+ "Use Set callback in Env to save the same application callback URL. If a Configured callback URL is shown, preserve it unless intentionally changing both Env and Google. Scheme, path, case and trailing slash must match exactly.",
20
+ "For a shared account, return here and check or connect the account once the application runtime is ready. For per-user connections, each person authorizes inside your application. Saving this registration neither connects every user nor installs the callback route."
21
+ ]
22
+ }
23
+ });
24
+ }
25
+
26
+ const gmailDefinition = definition("gmail", "Gmail", "Gmail API", "Read and search mail, manage drafts and labels, and explicitly send messages.", ["gmail.readonly", "gmail.send", "gmail.compose", "gmail.modify"], [
27
+ ["gmail.readonly", "Read messages", true], ["gmail.send", "Send messages"], ["gmail.compose", "Manage drafts and send messages"],
28
+ ["gmail.modify", "Read and modify messages"], ["gmail.labels", "Manage labels"], ["gmail.metadata", "Read message headers and labels"],
29
+ ["gmail.insert", "Insert messages"], ["gmail.settings.basic", "Manage basic mail settings"], ["gmail.settings.sharing", "Manage sharing settings"],
30
+ ["https://mail.google.com/", "Full mailbox access including permanent deletion"],
31
+ ["gmail.addons.current.message.readonly", "Read the current add-on message"], ["gmail.addons.current.message.action", "Act on the current add-on message"],
32
+ ["gmail.addons.current.message.metadata", "Read the current add-on message headers"], ["gmail.addons.current.action.compose", "Compose from an add-on"]
33
+ ], [], [
34
+ "For inbox reading, retain Read messages (gmail.readonly) and deselect optional sending or editing permissions your application does not use. Gmail read access is restricted: check Google's restricted-scope review and server-data security assessment requirements before public release.",
35
+ "Read messages gives full bodies, search and attachments. Send messages permits sending; Manage drafts and send messages permits drafts; Read and modify messages permits marking read, archiving and moving mail to trash. Adding permission requires reconnecting. Connect only reads the mailbox profile and never sends or edits mail.",
36
+ "The app builds MIME messages with its framework, renders mail safely and authorizes each mailbox user. A send receipt is not proof of delivery. No automatic retry occurs after an uncertain send; check Sent before retrying. No background sync or permanent-delete operation is supplied.",
37
+ "Leave Manage sharing settings unselected: its operations require a Workspace service account with domain-wide delegation, which this Web application connection does not configure. Add-on permissions apply only to an actual Gmail add-on; they do not replace mailbox permissions."
38
+ ]);
39
+ const googleDriveDefinition = definition("google-drive", "Google Drive", "Google Drive API", "Find files, upload and download content, and manage basic file metadata.", ["drive.file", "drive.appdata", "drive.appfolder", "drive.readonly"], [
40
+ ["drive.metadata.readonly", "Read file metadata"], ["drive.file", "Manage files selected for this application", true], ["drive.readonly", "Read and download files"],
41
+ ["drive", "Manage all Drive files"], ["drive.metadata", "Manage file metadata"], ["drive.appdata", "Manage application data"],
42
+ ["drive.appfolder", "Manage this application’s Drive folder data"],
43
+ ["drive.apps.readonly", "Read installed Drive apps"], ["drive.meet.readonly", "Read Meet-created files"],
44
+ ["drive.photos.readonly", "Read photos"], ["drive.scripts", "Manage Apps Script files"],
45
+ ["drive.activity", "Read and add file activity"], ["drive.activity.readonly", "Read file activity"]
46
+ ], [], [
47
+ "Select only the file access your application needs. With drive.file, users must select or open files through your application's file-picker flow, or the application must create them. Pasting an existing file ID alone does not grant access. App-data permissions do not grant access to ordinary Drive files.",
48
+ "The app can upload files up to 5 MB and download/export up to 8 MiB with this adapter. Google Docs/Sheets/Slides require export to a supported MIME type; ordinary stored files use download. Larger or resumable transfers need the framework's native client.",
49
+ "Use file capabilities and sharing access before offering writes. Uploading with an existing file ID replaces its content and name; moving a file to trash is an explicit metadata update. The app owns file selection, safe rendering and ambiguous-transfer reconciliation. No sync service or embedded Google Picker is installed.",
50
+ "Broad Drive read or management permissions are restricted scopes. Review Google's verification and server-data security assessment requirements before public release. An empty file list with drive.file can mean no files have yet been shared with this application."
51
+ ]);
52
+ const drivePermissions = [["drive.file", "Access files selected for this application"], ["drive.readonly", "Read Drive files"], ["drive", "Manage Drive files"]];
53
+ const googleSheetsDefinition = definition("google-sheets", "Google Sheets", "Google Sheets API", "Create spreadsheets, read and write ranges, and apply native batch updates.", "drive.file", [
54
+ ["spreadsheets.readonly", "Read spreadsheets"], ["spreadsheets", "Manage spreadsheets"],
55
+ ["drive.metadata.readonly", "Read Drive file metadata (does not grant spreadsheet content access)"], ...drivePermissions
56
+ ], [{ name: "spreadsheetId", required: false, label: "Spreadsheet ID (optional)", hint: "Leave blank for create-first access with drive.file and Drive API enabled. Otherwise copy the ID between /spreadsheets/d/ and /edit, not the gid tab number; the account and app must have access." }], [
57
+ "For create-first access, retain Access files selected for this application (drive.file) and also enable Google Drive API in APIs & Services > Library. Leave Spreadsheet ID blank: verification reads accessible Drive metadata and accepts an empty list. It does not create a spreadsheet or prove Sheets API is enabled.",
58
+ "With drive.file, the app can create and edit its own spreadsheets. An existing file needs Google Picker or an app-open grant; pasting an ID alone does not grant access. For spreadsheets.readonly-only or spreadsheets-only access, supply an accessible Spreadsheet ID. Adding write permissions requires reconnecting.",
59
+ "Value writes default to RAW so untrusted strings are not interpreted as formulas. Choose USER_ENTERED explicitly for formulas and locale-dependent parsing. Ranges use A1 notation; quote sheet titles with spaces. Appending finds the next row in the table, not necessarily the requested start cell; uncertain writes are never automatically retried.",
60
+ "The app can create spreadsheets, update or append rows, clear values, and send bounded native batch requests for sheets and formatting. Clear preserves formatting. The app owns conflict handling, file selection and its data UI; this form installs neither a spreadsheet editor nor editor-assistant tools."
61
+ ]);
62
+ const googleDocsDefinition = definition("google-docs", "Google Docs", "Google Docs API", "Create documents, read tabs and edit content with native batch requests.", "drive.file", [
63
+ ["documents.readonly", "Read documents"], ["documents", "Manage documents"], ...drivePermissions
64
+ ], [{ name: "documentId", required: false, label: "Document ID (optional)", hint: "Leave blank for create-first access with drive.file and Drive API enabled. To verify an existing document, copy its ID between /document/d/ and /edit; the account and this app must have access." }], [
65
+ "For create-first access, retain Access files selected for this application (drive.file) and also enable Google Drive API in APIs & Services > Library. Leave Document ID blank: connection checks accessible Drive metadata and accepts an empty list; it does not create a document or prove Docs API is enabled.",
66
+ "With drive.file the app can create and edit its own documents. For existing files, use Google Picker or an app-open flow to grant this application access; pasting an ID alone does not grant access. Picker wiring belongs to the app.",
67
+ "For documents.readonly-only or documents-only access, supply an accessible Document ID for verification. Manage documents enables writing documents accessible to the account; adding permissions requires reconnecting. Broad Drive permissions can require restricted-scope review.",
68
+ "Create a blank document, then insert content with documents.batchUpdate. The app owns tab IDs, UTF-16 text indices, formatting requests and revision conflict handling. No editor-assistant attachment or visual document editor is installed by this form."
69
+ ]);
70
+ const googleSlidesDefinition = definition("google-slides", "Google Slides", "Google Slides API", "Create and edit presentations, read pages and obtain preview thumbnails.", "drive.file", [
71
+ ["presentations.readonly", "Read presentations"], ["presentations", "Manage presentations"],
72
+ ["spreadsheets.readonly", "Read linked spreadsheets"], ["spreadsheets", "Manage linked spreadsheets"], ...drivePermissions
73
+ ], [{ name: "presentationId", required: false, label: "Presentation ID (optional)", hint: "Leave blank for create-first access with drive.file and Drive API enabled. Otherwise copy the ID between /presentation/d/ and /edit; this is not a slide object ID. The account and app must have access." }], [
74
+ "For create-first access, retain Access files selected for this application (drive.file) and enable Google Drive API as well as Google Slides API in APIs & Services > Library. Leave Presentation ID blank: verification reads Drive metadata and accepts an empty list; it neither creates a deck nor proves Slides API is enabled.",
75
+ "The app can create and edit its own decks with drive.file. Existing decks need an app-open or Google Picker grant; a pasted ID alone is insufficient. For presentations.readonly-only or presentations-only access, supply an accessible Presentation ID. Additional permissions require reconnecting; spreadsheet permissions alone do not grant deck access.",
76
+ "Create a blank presentation, then use native batch requests to add slides, text, images or formatting. The app owns object IDs, positions, linked-chart access and revision conflict handling. Images must be reachable by Google; thumbnails return temporary URLs that should not be logged or stored as permanent public assets.",
77
+ "No slide designer, template catalogue, embedded Picker or editor-assistant attachment is installed. Copying, sharing, exporting or deleting the whole deck uses the separate Drive API. An uncertain create or edit is not automatically retried."
78
+ ]);
79
+ const googleSearchConsoleDefinition = definition("google-search-console", "Google Search Console", "Google Search Console API", "Query search performance, inspect indexed URLs and manage sitemaps.", "webmasters.readonly", [
80
+ ["webmasters.readonly", "Read Search Console properties"], ["webmasters", "Manage Search Console properties"],
81
+ ["siteverification", "Manage website ownership through Site Verification"],
82
+ ["siteverification.verify_only", "Verify new website ownership through Site Verification"]
83
+ ], [], [
84
+ "The connecting Google account needs access to the intended Search Console property. A property owner can open that property, choose Settings > Users and permissions > Add user, enter the account email, choose the appropriate role and save.",
85
+ "To add a property, open Search Console > property selector > Add property. Domain properties require your DNS provider's TXT record; URL-prefix properties offer verification methods such as an HTML file or tag. Follow Google's displayed instructions and Verify, or have an existing owner add this account. An OAuth grant does not verify domain ownership.",
86
+ "Search performance uses finalized Pacific-time dates and top rows, not a complete traffic export. URL inspection reports Google's indexed snapshot, not a live page test or request for indexing. Use the exact property identifier returned by the connection.",
87
+ "To submit or remove sitemaps, select Manage Search Console properties (webmasters), add the scope in Data Access and reconnect. The app must publish a real sitemap URL first. Submission does not create the file, guarantee indexing or change DNS; deletion removes its Search Console entry, not the hosted file.",
88
+ "Keep Read Search Console properties for the initial check, which lists accessible properties. Site Verification permissions alone do not authorize that check or create property access. An empty result can mean this Google account has no properties."
89
+ ]);
90
+ const googleAnalyticsDefinition = Object.freeze({
91
+ id: "google-analytics", name: "Google Analytics", description: "Configure website tracking with your public GA4 Measurement ID.",
92
+ categories: ["Google", "Marketing"], configurationOnly: true,
93
+ accountModes: ["shared"], authenticationMethods: ["none"], scopes: [],
94
+ authenticationLabels: { none: "Public configuration · no credentials" },
95
+ authenticationHint: "Your application loads the Google tag. This does not grant access to Analytics reports.",
96
+ settingsSchema: createSchema({ measurementId: {
97
+ type: "string", required: true, minLength: 3, maxLength: 64,
98
+ validator: (value) => /^G-[A-Z0-9]+$/u.test(value) || "Enter the GA4 web stream Measurement ID beginning G-."
99
+ } }),
100
+ settingsFields: [{ name: "measurementId", label: "Measurement ID", required: true,
101
+ hint: "Public: this value will be visible in your published application. Copy it from your GA4 web stream." }],
102
+ setup: {
103
+ url: "https://support.google.com/analytics/answer/9304153",
104
+ steps: [
105
+ "Sign into Google Analytics and select this application's GA4 property. You need Editor or higher access at property level. If you need a new account or property, follow the Provider setup guide first.",
106
+ "Open Admin > Data collection and modification > Data streams, then the Web tab and the application's stream. If none exists, choose Add stream > Web, enter the application website URL and stream name, review enhanced measurement and choose Create stream.",
107
+ "Copy the Measurement ID beginning G- from Stream details into Measurement ID here and save. Use the web stream's measurement identifier, not its numeric property ID or a Google Ads identifier.",
108
+ "No OAuth client, API key, Env secret or callback URL is needed. This identifier is public and does not grant access to Analytics reports.",
109
+ "Ask your application's framework to install the Google tag using this setting, respecting existing tracking and consent behavior. Saving this configuration does not install tracking or verify event delivery.",
110
+ "Choose one tracking owner: an existing Google tag/Tag Manager, or the optional JSKIT browser helper. Do not install both. For manual SPA page views, turn off Page changes based on browser history events in the web stream’s Enhanced measurement settings as well as automatic page-view sending in code.",
111
+ "The app decides consent before loading tracking and calls page views on completed navigation. For conversions, emit an event such as generate_lead and mark it as a key event in Analytics Admin > Data display > Events. Never send email addresses, message text or sensitive URL parameters.",
112
+ "Removing this configuration disables tracking after the app’s next configuration reload or deployment; already-loaded pages need cleanup or reload. It does not erase historical Analytics data."
113
+ ]
114
+ }
115
+ });
116
+ const bigqueryDefinition = Object.freeze({ ...definition("bigquery", "BigQuery", "BigQuery API", "Configure the query project, run queries and retrieve results.", "bigquery", [
117
+ ["bigquery.readonly", "Read BigQuery data and metadata"], ["bigquery", "Manage BigQuery data"],
118
+ ["cloud-platform.read-only", "Read Google Cloud resources"], ["cloud-platform", "Manage Google Cloud resources"]
119
+ ], [], [
120
+ "In the project that will run queries, open IAM & Admin > IAM > Grant access. Add the connecting Google account and grant BigQuery Job User when it must create query jobs. OAuth consent alone does not grant project or dataset access.",
121
+ "In BigQuery Studio, select the intended dataset in Explorer, choose Sharing > Permissions > Add principal, and grant only the needed dataset role, such as BigQuery Data Viewer for reading data and metadata. A dataset administrator must make this grant. Repeat for any source dataset the authorized queries use.",
122
+ "Enter the execution and billing project ID below. Dataset/table discovery uses that configured project; use a separate integration slot to browse another project. Your app must set the query location and a maximum bytes billed limit when needed, and authorize each job before inspecting or cancelling it.",
123
+ "Connect only lists accessible projects; it does not run a billable query or prove table access. Cancellation is a request, not a guarantee that execution or charges stopped; inspect job status afterwards."
124
+ ]),
125
+ settingsSchema: createSchema({ projectId: {
126
+ type: "string", required: true, minLength: 6, maxLength: 30,
127
+ validator: (value) => /^[a-z][a-z0-9-]{4,28}[a-z0-9]$/u.test(value) || "Enter the Google Cloud project ID, not its number or URL."
128
+ } }),
129
+ settingsFields: [{ name: "projectId", label: "Google Cloud project ID", required: true,
130
+ hint: "The project that runs and is billed for queries. It can differ from the project containing your datasets. The initial connection check only lists accessible projects." }]
131
+ });
132
+ const googleDefinitions = Object.freeze([gmailDefinition, googleDriveDefinition, googleSheetsDefinition, googleDocsDefinition, googleSlidesDefinition, googleSearchConsoleDefinition, googleAnalyticsDefinition, bigqueryDefinition]);
133
+ export { gmailDefinition, googleDriveDefinition, googleSheetsDefinition, googleDocsDefinition, googleSlidesDefinition, googleSearchConsoleDefinition, googleAnalyticsDefinition, bigqueryDefinition, googleDefinitions };
@@ -0,0 +1,25 @@
1
+ const granolaDefinition = Object.freeze({
2
+ id: "granola", name: "Granola", description: "Read meeting notes with an API key or connect the assistant owner through Granola MCP OAuth.",
3
+ accountModes: ["shared", "assistant"], authenticationMethods: ["api-key", "oauth2"], scopes: [
4
+ { value: "openid", label: "Identify the connected Granola account", recommended: true, authenticationMethods: ["oauth2"] },
5
+ { value: "profile", label: "Read account profile", recommended: true, authenticationMethods: ["oauth2"] },
6
+ { value: "email", label: "Read account email", recommended: true, authenticationMethods: ["oauth2"] },
7
+ { value: "offline_access", label: "Refresh access without repeating sign-in", recommended: true, authenticationMethods: ["oauth2"] }
8
+ ],
9
+ setup: { urlByAuthentication: { oauth2: "https://docs.granola.ai/help-center/sharing/integrations/mcp" }, clientRegistrationEndpoint: "https://mcp-auth.granola.ai/oauth2/register", url: "https://docs.granola.ai/help-center/sharing/integrations/granola-api", steps: [
10
+ "API key: In the Granola desktop app, open Settings, Connectors, API keys, then Create new key. Choose the note access scopes and Generate API Key.",
11
+ "For an admin-owned workspace key, use Settings, Connectors, Workspace API keys, then Create new key. Both key types require a Business or Enterprise plan.",
12
+ "Enter env:GRANOLA_API_KEY in API key reference and Save configuration. Choose Set credential in Env, paste the grn_ key as GRANOLA_API_KEY, and save there. Note permissions are chosen in Granola; editing this file grants no additional access.",
13
+ "Shared mode deliberately shares the key's accessible notes. Assistant mode uses its owner's connection. For MCP tools, select OAuth instead; an API key cannot authenticate MCP.",
14
+ "Return and choose Connect account. Your application verifies the key by listing accessible notes; an empty list is valid. Notes still being processed may be absent. No OAuth registration or callback is needed for API-key mode.",
15
+ "For replacement, create a new key and update Env before retiring the old key. Disconnect removes local state. To revoke provider access, return to the personal or Workspace API keys page, select Revoke on that key and confirm."
16
+ ], stepsByAuthentication: { oauth2: [
17
+ "OAuth / MCP: Use a Granola account with meeting notes and select Assistant access. Free accounts can access personal notes from the last 30 days; some tools require a paid plan. Select OAuth and keep the account identity and refresh permissions selected.",
18
+ "Confirm the Suggested callback URL is the exact route your application or assistant host will serve. Choose Register client and connect to create the client and save its credentials privately in development Env. CLI users can call registerGranolaClient; the manual endpoint/request remains available. Register once for this host, not once per connection.",
19
+ "If registering manually, copy client_id into Client ID and Save configuration. Choose Set credential in Env for client_secret and Set callback in Env for the exact registered callback. Automatic registration saves these values for you; inspect Env before retrying an uncertain registration. Keep the response private.",
20
+ "Return, save and choose Connect account. Sign into Granola in the browser and approve access. MCP verification lists tools without reading a meeting. Select the intended active workspace in Granola; MCP does not merge workspaces. The host must authorize tool calls before executing them.",
21
+ "Disconnect removes the local OAuth grant. This does not promise provider-wide revocation. For help removing provider access, contact Granola at hey@granola.so. Changing your API key does not revoke an MCP OAuth connection."
22
+ ] } }
23
+ });
24
+
25
+ export { granolaDefinition };
@@ -0,0 +1,28 @@
1
+ import { createSchema } from "json-rest-schema";
2
+
3
+ const hexHosts = Object.freeze({ standard: "app.hex.tech", eu: "eu.hex.tech", hipaa: "hc.hex.tech" });
4
+ const hexEndpointField = { type: "string", enum: Object.keys(hexHosts), defaultTo: "standard" };
5
+ const hexDefinition = Object.freeze({
6
+ id: "hex", name: "Hex", description: "Search projects and use Hex Threads through the assistant owner's MCP connection.",
7
+ accountModes: ["assistant"], authenticationMethods: ["oauth2"],
8
+ scopes: [
9
+ { value: "openid", label: "Identify the connected Hex account", recommended: true },
10
+ { value: "profile", label: "Read account profile", recommended: true },
11
+ { value: "email", label: "Read account email", recommended: true },
12
+ { value: "offline_access", label: "Refresh access without repeating sign-in", recommended: true }
13
+ ],
14
+ settingsSchema: createSchema({ endpoint: hexEndpointField }),
15
+ settingsFields: [{ name: "endpoint", label: "Hex workspace endpoint", hint: "Use the endpoint where your Hex workspace lives; register the OAuth client at that endpoint.",
16
+ items: [{ value: "standard", title: "Standard (app.hex.tech)" }, { value: "eu", title: "Europe (eu.hex.tech)" }, { value: "hipaa", title: "HIPAA (hc.hex.tech)" }] }],
17
+ setup: { clientRegistrationEndpoint: (settings) => `https://auth.${hexHosts[settings.endpoint || "standard"]}/oauth2/register`, url: "https://learn.hex.tech/docs/api-integrations/mcp-server", steps: [
18
+ "Confirm your Hex workspace has MCP access and your role is Explorer or higher. Hex currently requires a Team or Enterprise plan.",
19
+ "Choose Standard, Europe or HIPAA in Hex workspace endpoint to match where you sign into Hex. Confirm the Suggested callback URL is the exact route your assistant host will serve. Keep the identity, profile, email and refresh permissions selected.",
20
+ "Choose Register client and connect to create the client for this endpoint and save its credentials privately in development Env. Alternatively copy the endpoint/request from OAuth client registration into your HTTP client. CLI users can call registerHexClient. Register once per host and endpoint; inspect Env before retrying uncertain registration.",
21
+ "For manual registration, copy client_id from the registration response into Client ID and Save configuration. Choose Set credential in Env to store client_secret under the displayed Client secret reference. Choose Set callback in Env to save the exact registered callback. A personal or workspace API token cannot replace these OAuth credentials.",
22
+ "Return, save and choose Connect account. Sign into Hex, select the intended workspace when prompted and approve consent. Verification lists tools without starting a Thread or editing a project.",
23
+ "The host must authorize each tool and its arguments. Identity scopes are not read-only tool permissions; Thread tools can run analysis and consume credits; project editing tools require Editor or higher and the appropriate project permission.",
24
+ "Single-tenant custom Hex domains require separate endpoint verification and are not supported by this initial adapter. Changing endpoint requires a new matching registration and reconnection. Disconnect removes this local grant; the Hex workspace API-access switch and personal-token revocation do not disable MCP access. Saving does not register a client or attach tools."
25
+ ] }
26
+ });
27
+
28
+ export { hexDefinition, hexHosts, hexEndpointField };