@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,113 @@
1
+ # GatewayAPI
2
+
3
+ Import `gatewayApiProvider` from
4
+ `@jskit-ai/connectors-catalog/server/gatewayapi`.
5
+ Connection verification reads credit/currency without sending. Explicit application operations send single or batched SMS/RCS through the current Messaging API.
6
+
7
+ ## Configure access
8
+
9
+ 1. Sign into the intended Global or EU GatewayAPI account. In the left menu,
10
+ choose **API → API Keys → ADD API KEY** and give the credential a name.
11
+ Copy its API token into backend Env as `GATEWAYAPI_TOKEN`.
12
+ [Dashboard instructions](https://gatewayapi.com/help-center/webhooks-and-api-keys/).
13
+ 2. Save provider `gatewayapi`, mode `shared` or `assistant`, `scopes: []`, and
14
+ authentication `{ "method": "api-key", "secretRef": "env:GATEWAYAPI_TOKEN" }`.
15
+ 3. Set `settings.region` to `global` (default) or `eu`, matching the platform
16
+ that issued the token. The form labels this **API domain** and limits it to
17
+ `gatewayapi.com` and `gatewayapi.eu`. The EU platform uses a different host;
18
+ changing hosts requires verification again.
19
+ [Platform routing](https://gatewayapi.com/docs/apis/legacy/rest/).
20
+ 4. In Vibe64 enter `env:GATEWAYAPI_TOKEN` as **API key reference**, click
21
+ **Save configuration**, then **Set credential in Env**. Store the real token
22
+ as `GATEWAYAPI_TOKEN` and return to connect. CLI apps call `connectApiKey`.
23
+ Requests use `Authorization: Token <token>`.
24
+ A legacy OAuth key/secret pair is a different credential. No webhook or
25
+ callback registration is needed for this read operation.
26
+ [Token authentication](https://gatewayapi.com/docs/authentication/).
27
+
28
+ ## Runtime and AI composition
29
+
30
+ `balance.read` accepts no operation inputs and reads `GET /rest/me`. The result
31
+ contains the integer account `id`, string `credit` and string `currency`.
32
+ Retain credit as a decimal string when displaying or processing it; avoid
33
+ rounding through binary floating-point arithmetic in financial workflows.
34
+ [Balance endpoint](https://gatewayapi.com/docs/apis/prices-balance/).
35
+
36
+ Use the [API-key pattern](../patterns/api-key-connection/PATTERN.md) with the file
37
+ store. `messages.send` submits a single message and `messages.sendBatch` accepts 1–1000 `messages`. Each needs sender, integer recipient (international country code, no plus), message and an app-owned reference. Optional label and normal/urgent priority are supported. Sender is 3–11 alphanumeric or 3–15 numeric characters. Save each returned msg_id and reference: HTTP acceptance is not delivery. Batches preserve individual receipts; do not automatically retry an uncertain send. RCS routing and SMS fallback depend on the account, approved agent and recipient.
38
+
39
+ ## Automation and application ownership
40
+
41
+ The documented bootstrap creates an account and provides dashboard token
42
+ management. This research does not establish a public API for creating the
43
+ initial account or issuing tokens. An AI can prepare Env references, configuration
44
+ and library wiring after the account owner supplies access.
45
+
46
+ Keys in one account can share its credit and limits. Use the
47
+ provider's account arrangements and explicit spending controls when provisioning
48
+ independent pools; selecting Global versus EU is a hosting choice, not a quota
49
+ partition. The application owner supplies its authorized key through private Env.
50
+
51
+ Replace the Env token on rotation and revoke the obsolete token in the dashboard.
52
+ Local disconnect removes local state only. Tests cover both fixed hosts, verified
53
+ state across restarts, changed-region re-verification and provider errors, using
54
+ simulated HTTP and no message delivery.
55
+
56
+ ## Delivery and inbound replies: application-owned webhook
57
+
58
+ Official API checked 13 September 2026:
59
+ [Messaging API](https://gatewayapi.com/docs/message/overview/) and
60
+ [OpenAPI](https://messaging.gatewayapi.com/openapi.json).
61
+ Messaging requests use `messaging.gatewayapi.com` or `.eu`; balance reads use
62
+ the existing account host. Sending is billed by GatewayAPI. Check sender
63
+ registration, destination restrictions and credits in the account; arrange an
64
+ approved RCS agent with GatewayAPI before expecting RCS delivery. Urgent SMS
65
+ may have a higher price. The current API chooses the transport, not the app.
66
+
67
+ 1. Add a public HTTPS route to the generated application, for example
68
+ `/integrations/gatewayapi/webhook`. Preserve its raw request bytes.
69
+ 2. In the matching Global/EU dashboard open API webhook settings, create the
70
+ callback, paste that application URL, select delivery/incoming events and
71
+ configure a private authentication/signature secret. Save the same secret
72
+ in application Env as `GATEWAYAPI_WEBHOOK_SECRET` (not the API token).
73
+ 3. Current Messaging callbacks use **Signature: v1=<HMAC-SHA256 hex>**. This
74
+ differs from the legacy REST `X-Gwapi-Signature` JWT described by older
75
+ guidance, including the current Lovable page. Do not mix verifiers.
76
+ 4. Use `verifyGatewayApiEvent` below, then transactionally persist each event
77
+ once using `event_id` as a unique key. For delivery events verify `msg_id`,
78
+ recipient and reference against an app-owned send record. Inbound messages
79
+ have no existing send reference; route them only to the configured leased
80
+ number or RCS agent. Never authorize them through arbitrary claimed users.
81
+ 5. Acknowledge with 2xx after persistence, promptly (within 5 seconds). Provider
82
+ retries must not create duplicate inbox messages or repeated side effects.
83
+ Apply your retention/replay policy to timestamp and stored event IDs; do not
84
+ discard legitimate delayed delivery simply using a tiny timestamp window.
85
+ 6. Incoming SMS needs the required leased number/keyword and callback routing;
86
+ RCS inbound needs agent configuration. The app owns these provider steps.
87
+
88
+ ```js
89
+ import { verifyGatewayApiEvent } from "@jskit-ai/connectors-catalog/server/gatewayapi";
90
+ const event = verifyGatewayApiEvent({ rawBody, signature: request.headers.signature,
91
+ secret: process.env.GATEWAYAPI_WEBHOOK_SECRET });
92
+ // Your framework validates destination ownership and atomically inserts event_id.
93
+ // Only after that transaction commits, acknowledge the callback.
94
+ ```
95
+
96
+ The verifier authenticates up to 1 MiB of raw bytes and checks the common event
97
+ envelope. It does not store, deduplicate or apply business state transitions.
98
+ Unknown valid event types should be persisted/ignored safely; native status
99
+ and text/location/file payloads remain available in `event`. Avoid fetching
100
+ untrusted file URLs automatically. The current API offers no status polling;
101
+ keep webhook history if the app needs delivery reporting.
102
+
103
+ CLI apps use identical configuration, Env and these optional Node exports.
104
+ Other frameworks use native HTTP and HMAC-SHA256 verification of raw bytes;
105
+ no Vibe64 service is required. Disconnect does not remove provider webhooks;
106
+ deactivate them in GatewayAPI when retiring the application.
107
+
108
+ **LIMITATIONS:** no automatic webhook registration, number leasing, RCS agent
109
+ approval or editor assistant attachment. Example: sending a booking reminder
110
+ is provided; its delivered badge needs the app's webhook route and durable event
111
+ store. That is also the ownership described in Lovable's connector guidance.
112
+ Advanced RCS cards and an inbox UI are not supplied. Tests use controlled HTTP
113
+ and signed callback fixtures, not real messages or provider provisioning.
@@ -0,0 +1,224 @@
1
+ # Gemini Enterprise
2
+
3
+ Initial fragment: Google OAuth, engine metadata and document search. The editor
4
+ and CLI use the same file, validation and runtime. Saving configuration makes no
5
+ Google requests. These operations use the connected Google account's permissions;
6
+ shared and assistant ownership do not establish an identity for each app user.
7
+
8
+ ## Configuration
9
+
10
+ ```json
11
+ {
12
+ "schemaVersion": 1,
13
+ "registrations": {
14
+ "google-search": {
15
+ "source": "own",
16
+ "clientId": "example.apps.googleusercontent.com",
17
+ "clientSecretRef": "env:GEMINI_ENTERPRISE_SECRET",
18
+ "callbackUrlRef": "env:GEMINI_ENTERPRISE_CALLBACK"
19
+ }
20
+ },
21
+ "integrations": {
22
+ "enterprise-search": {
23
+ "provider": "gemini-enterprise",
24
+ "displayName": "Company search",
25
+ "accountMode": "shared",
26
+ "settings": {
27
+ "projectId": "my-gcp-project",
28
+ "location": "global",
29
+ "engineId": "my-search-engine"
30
+ },
31
+ "scopes": ["https://www.googleapis.com/auth/cloud-platform"],
32
+ "authentication": { "method": "oauth2", "registrationRef": "google-search" }
33
+ }
34
+ }
35
+ }
36
+ ```
37
+
38
+ `projectId` is the project identifier, not a numeric project number. `engineId`
39
+ is 1–63 lowercase letters, digits, underscores or hyphens, starting with a letter
40
+ or digit. `location` defaults to `global` and supports `us` and `eu`. The engine
41
+ must already exist under `default_collection`; searches use
42
+ `default_serving_config`. Other collections, serving configurations and locations
43
+ are not included in this fragment. The editor renders location as a select to
44
+ prevent unsupported values. The display name only labels this connection.
45
+
46
+ The captured Cloud Platform permission is broad. Both implemented operations
47
+ require it locally, while Google separately checks IAM and source permissions.
48
+ The implementation exposes no resource writes despite the scope. Narrower Google
49
+ scope variants and per-user connections are not yet provided. The host's
50
+ `authorize` callback must control access to the shared connection and its results.
51
+ Never accept a shared subject or application ID directly from an untrusted caller.
52
+
53
+ ## Provider setup: clicks and responsibilities
54
+
55
+ 1. Sign into [Google Cloud Console](https://console.cloud.google.com/) using the
56
+ account authorized to administer the target project. Select the project in
57
+ the top project picker. Confirm the project ID and billing with its owner.
58
+ 2. Open **APIs & Services → Library**, search for **Discovery Engine API**, open
59
+ it and click **Enable** if needed. This is `discoveryengine.googleapis.com`.
60
+ 3. Open **Gemini Enterprise → Apps**. Select the existing search app. If an
61
+ appropriate app does not exist, use **Create app**, choose the search setup,
62
+ enter its name, review the generated app ID, select its location and click
63
+ **Create**. Configure the intended data stores separately. Use Google's
64
+ [app creation instructions](https://docs.cloud.google.com/gemini/enterprise/docs/create-app)
65
+ for the applicable edition. Copy the engine/app ID and location, not its title.
66
+ Importing source content, configuring identities and any required licenses are
67
+ separate prerequisites; creating an OAuth client does not complete them.
68
+ 4. In **IAM & Admin**, have the project administrator create or select a role
69
+ with `discoveryengine.engines.get` and
70
+ `discoveryengine.servingConfigs.search`, and grant it to the Google account
71
+ that will connect. Apply the intended source permissions as well. Avoid
72
+ granting project Owner merely to make connection checking pass.
73
+ 5. Open **Google Auth Platform**. Configure **Branding**, **Audience** and
74
+ **Data Access** for this application's actual users. Add
75
+ `https://www.googleapis.com/auth/cloud-platform`. For an external application
76
+ in testing, add the connecting account under test users. Publishing or
77
+ verification, and organization restrictions, remain operator/provider work.
78
+ 6. Open **Clients → Create Client**, choose **Web application**, give it a name
79
+ and add the exact backend callback under **Authorized redirect URIs**. Click
80
+ **Create** and securely save the displayed client ID and secret. Enter only
81
+ the ID and secret reference in the integration file. Google documents this
82
+ confidential flow in its [web-server OAuth guide](https://developers.google.com/identity/protocols/oauth2/web-server).
83
+ 7. In Vibe64, copy **Suggested callback URL** into the Google redirect URI
84
+ registration. **Save configuration**, then use the Env links for the secret
85
+ and callback references. For the example above, set `GEMINI_ENTERPRISE_SECRET`
86
+ and `GEMINI_ENTERPRISE_CALLBACK` in the
87
+ application's server environment. The callback handler must already exist
88
+ and call the shared connection service; a value in a file creates no route.
89
+ 8. Save the configuration. In the application, start OAuth, choose the intended
90
+ Google account and approve access. The runtime verifies `engine.get` before
91
+ storing the connection. A successful metadata check does not prove search
92
+ permission, source ingestion, relevance or app-user access isolation.
93
+
94
+ Google describes [engine access](https://docs.cloud.google.com/gemini/enterprise/docs/reference/rest/v1/projects.locations.collections.engines/get),
95
+ [search permissions](https://docs.cloud.google.com/gemini/enterprise/docs/reference/rest/v1/projects.locations.collections.engines.servingConfigs/search)
96
+ and [source access control](https://docs.cloud.google.com/generative-ai-app-builder/docs/data-source-access-control)
97
+ separately. This fragment sends the shared account's OAuth token; it supplies no
98
+ caller-selected source identity, impersonation header or Workforce Identity token.
99
+
100
+ ## Application ownership, callbacks and capacity
101
+
102
+ The application owner creates the provider registration and stores its secret
103
+ in the application's private Env. Public Vibe64, Vibe64 Online and CLI users use
104
+ this same ownership model. The configuration file holds the client ID and Env
105
+ references; the editor does not own the application's grants.
106
+
107
+ Register the exact callback implemented by the application. For a hosted project,
108
+ start with its assigned application URL and append the implemented callback path.
109
+ Save that same URL through the application's callback Env reference. On a domain
110
+ or host change, update both the provider registration and callback Env if the URL
111
+ changes. Preserve the application's identity and persistent grant store when
112
+ moving it; neither a new editor URL nor a new hosting address creates a new owner.
113
+ See the [callback guide](../../connectors-core/docs/oauth-callbacks.md) and
114
+ [application setup command](../../connectors-core/docs/setup-command.md).
115
+
116
+ Record the target engine's Google Cloud project as well as the registration's
117
+ project. Two client IDs in one project do not isolate project quotas. Engine
118
+ consumption and billing depend on the project hosting that engine; changing the
119
+ OAuth registration does not move the engine's costs or capacity. The application
120
+ owner supplies the registration and target-project permissions needed for its
121
+ own users and resources.
122
+
123
+ ## AI-assisted provisioning
124
+
125
+ An authorized AI can prepare JSON, IAM role definitions and API enablement steps,
126
+ and can use Google resource APIs/CLI for permitted project and engine operations.
127
+ For example, the engine [create API](https://docs.cloud.google.com/gemini/enterprise/docs/reference/rest/v1/projects.locations.collections.engines/create)
128
+ exists. Provisioning must be explicitly authorized; this adapter exposes no such
129
+ write operation. It can inspect supplied identifiers and help troubleshoot
130
+ configuration without reading documents.
131
+
132
+ Plan on operator setup for the standard Google Auth Platform web clients,
133
+ branding/audience, verification, billing and source-identity decisions. This
134
+ fragment provides no OAuth-client provisioning API or claim that an AI can
135
+ complete those controls unattended. Prepare an application-owned registration
136
+ and callback for each independent application; hosted and installed editors use
137
+ the same ownership model. Copying IDs does not duplicate user consent or source
138
+ permissions. Keep secrets out of chat, examples and source control.
139
+
140
+ ## Runtime and CLI wiring
141
+
142
+ ```js
143
+ import { geminiEnterpriseProvider } from "@jskit-ai/connectors-catalog/server/gemini-enterprise";
144
+ // Include geminiEnterpriseProvider in createConnectionService({ providers, ... }).
145
+ const page = await connections.invoke({
146
+ context,
147
+ integrationId: "enterprise-search",
148
+ operation: "search",
149
+ input: { query: "holiday policy", pageSize: 10 }
150
+ });
151
+ ```
152
+
153
+ The app supplies configuration loading, reference resolution, authorization,
154
+ encrypted file storage and callback routes, as described in the core package.
155
+ `engine.get` accepts no input. `search` accepts a required nonempty `query`
156
+ (adapter limit 4096 characters), `pageSize` 1–25 (default 10) and an optional
157
+ `pageToken` (adapter limit 16000 characters). Reuse the same query and page size
158
+ when requesting the next page. No automatic pagination occurs. The 25-result
159
+ limit works across Google's documented search data types.
160
+
161
+ The runtime uses Google's standard authorization and token endpoints with S256
162
+ PKCE, offline consent and confidential client authentication. API requests use
163
+ `discoveryengine.googleapis.com`, `us-discoveryengine.googleapis.com` or
164
+ `eu-discoveryengine.googleapis.com` according to the configured location; see
165
+ [Google's locations](https://docs.cloud.google.com/gemini/enterprise/docs/locations).
166
+ Engine changes require reconnection. OAuth refresh, local disconnect, cancellation
167
+ and bounded transport errors are owned by the existing core service.
168
+
169
+ The original JSON search envelope is returned, including result document fields,
170
+ attribution and pagination. Empty protobuf JSON result arrays may be omitted.
171
+ A provider `redirectUri` is returned as data and is never followed; the consuming
172
+ app must decide how to present it. Treat document text, URLs and snippets as
173
+ untrusted content. See [SearchResponse](https://docs.cloud.google.com/gemini/enterprise/docs/reference/rest/v1/SearchResponse)
174
+ and [SearchResult](https://docs.cloud.google.com/gemini/enterprise/docs/reference/rest/v1/SearchResult).
175
+
176
+ No standalone answer API, chat sessions, ingestion, API-key search, service accounts,
177
+ Workforce Identity Federation, per-user Google identity, widget or application
178
+ login is implemented here. Disconnect removes the local grant; it does not call
179
+ Google's revocation endpoint. Controlled fixtures cover protocol and file/UI
180
+ behavior; real IAM, licenses, consent, source ACLs and search quality are untested.
181
+
182
+ ## Optional snippets and cited summaries
183
+
184
+ The search operation now accepts the documented `contentSearchSpec` subset:
185
+
186
+ ```js
187
+ const result = await connections.invoke({ context, integrationId: "enterprise-search",
188
+ operation: "search", input: { query: "How do I request leave?", pageSize: 10,
189
+ contentSearchSpec: {
190
+ snippetSpec: { returnSnippet: true },
191
+ summarySpec: { summaryResultCount: 3, includeCitations: true }
192
+ }
193
+ }
194
+ });
195
+ // Render result.summary.summaryText as escaped text/sanitized Markdown.
196
+ // Keep the returned result order: Google's [1] citation refers to result 1.
197
+ // Show summarySkippedReasons when no summary was generated.
198
+ ```
199
+
200
+ Summary count is 1–10. Citation inclusion and filters for adversarial,
201
+ non-summary and low-relevance queries default true for this option. Omitting
202
+ `summarySpec` does not request generation; verification never requests it.
203
+ The engine's Google project pays applicable search/generation costs. The app
204
+ must authorize that use and source disclosure. A shared connection does not
205
+ provide per-visitor source ACLs. Do not pass a visitor's email as an invented
206
+ impersonation identity or assume administrator-visible documents are public.
207
+
208
+ Snippets are in document-derived fields; preserve their status, source links
209
+ and attribution. If Google cannot provide a snippet, display that absence.
210
+ The app may instead send permitted snippets to its own chosen native AI
211
+ library, with its own credentials and data-sharing policy. This connector
212
+ neither chooses that library nor operates an inference gateway.
213
+
214
+ Other frameworks POST the same JSON body to the region's Discovery Engine
215
+ search endpoint using the application's stored OAuth grant. The administrator
216
+ still owns ingestion, source permissions and licensing. JSKIT is optional.
217
+
218
+ Checked against [Google ContentSearchSpec](https://docs.cloud.google.com/gemini/enterprise/docs/reference/rest/v1/ContentSearchSpec)
219
+ on 13 September 2026. **LIMITATIONS:** no source provisioning, per-user source
220
+ identity, standalone chat UI or editor assistant attachment. Example: an
221
+ internal app can answer leave-policy questions with Google citations, but
222
+ configuring it does not import company files or grant every employee access.
223
+ Controlled fixtures prove request/response handling; real ACLs, licensing,
224
+ relevance and summary quality remain untested.
@@ -0,0 +1,133 @@
1
+ # GitHub API
2
+
3
+ Import `githubApiProvider` from `@jskit-ai/connectors-catalog/server/github-api`.
4
+ This GitHub.com adapter supports personal access tokens (PAT) and an
5
+ application-owned OAuth app. GitHub App installation tokens and Enterprise
6
+ Server hosts are not implemented here. It does not replace the editor's repository login.
7
+
8
+ ## Set up access
9
+
10
+ 1. Open your GitHub **Settings → Developer settings → Personal access tokens →
11
+ Fine-grained tokens**.
12
+ 2. Choose **Generate new token**. Enter its name, expiration, and resource owner.
13
+ 3. Select the repositories the application needs. Metadata read access covers
14
+ the repository-list operation. Add Contents read for file/commit/release access, Actions read for workflow runs, Issues read/write and Pull requests read/write only as needed for the app operations.
15
+ 4. Complete any organization approval or account verification. A pending token
16
+ may identify its user without accessing the intended private repositories.
17
+ 5. Generate/copy the token, then keep it outside source as `GITHUB_API_KEY`.
18
+ Configure provider `github-api`, account mode `shared` or `assistant`, empty
19
+ `scopes`, and the `api-key` secret reference `env:GITHUB_API_KEY`.
20
+ 6. Call `connectApiKey`, then list repositories to check the intended access.
21
+ See [GitHub PAT management](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens).
22
+
23
+ ## Runtime and AI composition
24
+
25
+ `account.read` calls `GET /user`. `repositories.list` calls `GET /user/repos`
26
+ with `per_page` (1–100, default 30), `page` (starting at 1), `sort` and `direction`.
27
+ The caller advances the page number. The library returns the response array;
28
+ it does not expose the HTTP Link header. A short page indicates completion;
29
+ a full final page can be followed by an empty one.
30
+
31
+ Requests use Bearer authentication, a User-Agent, GitHub's JSON media type and
32
+ API version `2026-03-10`. See [Authenticated user](https://docs.github.com/en/rest/users/users#get-the-authenticated-user)
33
+ and [Repositories](https://docs.github.com/en/rest/repos/repos#list-repositories-for-the-authenticated-user).
34
+ Apply the [API-key source pattern](../patterns/api-key-connection/PATTERN.md)
35
+ with this provider. The application supplies its own repository-access policy.
36
+
37
+ ## Provisioning automation and capacity
38
+
39
+ An AI can prepare token settings and library configuration, then use approved
40
+ API access. Ordinary PAT issuance remains a console action in this guide; no
41
+ automated equivalent was verified. A GitHub App manifest is a different future
42
+ registration flow and must not be described as an installed PAT feature.
43
+
44
+ Two PATs issued by one user share relevant user limits. The application owner
45
+ supplies its authorized PAT through private Env; separate tokens or application
46
+ names do not create independent capacity. GitHub Apps are a separate option for
47
+ installation-based distribution, requiring their own adapter and permissions.
48
+
49
+ Tests use simulated API responses and real temporary runtime files to verify
50
+ headers, paging, restart, rotation, disconnect and owner isolation.
51
+
52
+ ## OAuth setup
53
+
54
+ Open GitHub Settings > Developer settings > OAuth Apps > New OAuth App. Set the
55
+ name and application homepage, and copy Vibe64's Suggested callback URL into
56
+ Authorization callback URL. Register the app, copy Client ID, and generate a
57
+ client secret. Save configuration and follow the Env links for client secret
58
+ and callback references. The application owns the callback route and grants.
59
+ Use shared ownership for an administrator connection or per-user ownership for
60
+ connections started inside each application's account screen. This connects API
61
+ access; the framework still owns application login and account linking.
62
+
63
+ The captured scope choices are available; request only required permissions.
64
+ Optional offline_access requests expiring access with refresh credentials on
65
+ GitHub.com. The adapter normalizes comma-separated returned scopes without
66
+ changing authorization-request scope formatting. OAuth API requests retain the
67
+ same GitHub headers as PAT requests. Disconnect is local; revoke authorization
68
+ in GitHub separately. The app's OAuth registration, secret and provider quotas
69
+ are not supplied by Vibe64.
70
+
71
+ Focused OAuth fixtures cover confidential S256 exchange, cancellation,
72
+ denial, replay, refresh rotation, file restart, PAT coexistence, per-user and
73
+ application isolation, non-expiring grants and malformed scope responses.
74
+ Controlled editor review covers OAuth/PAT switching, connection controls and
75
+ the per-user setup boundary. No live GitHub consent or generated app was tested.
76
+
77
+ ## Repository and collaboration operations
78
+
79
+ All targeted operations require `owner` and `repo`. The application authorizes
80
+ these values against its allowed repositories before invoking the shared
81
+ connection; a valid shared token alone must not authorize an arbitrary visitor.
82
+
83
+ | Operation | Additional inputs and result |
84
+ |---|---|
85
+ | `repositories.get` | Repository metadata |
86
+ | `branches.list`, `commits.list`, `releases.list` | `page`, `per_page`; arrays |
87
+ | `workflows.runs` | Pagination; workflow_runs and total_count |
88
+ | `contents.get` | Repository-relative `path`, optional branch/tag/commit `ref`; file envelope or directory entries |
89
+ | `issues.list`, `pulls.list` | Pagination and open/closed/all `state` |
90
+ | `issues.get`, `pulls.get` | `number`; full issue/PR including body/state |
91
+ | `issues.comments`, `pulls.reviews` | `number` and pagination; comments/review states |
92
+ | `issues.create` | `title`, optional `body`; created issue |
93
+ | `issues.update`, `pulls.update` | `number` and at least one of title/body/state |
94
+ | `pulls.create` | title/head/base, optional body/draft; created PR |
95
+
96
+ Page size is 1–100, default 30. Follow pages until a short/empty result. GitHub's
97
+ issue list also includes pull requests: filter entries with `pull_request` if
98
+ the app wants issues only. PR head/base refer to existing branches; this does
99
+ not create commits or synchronize code. Creation is not retried automatically
100
+ on uncertain network outcomes; reconcile against the repository before retrying.
101
+
102
+ Small file content is returned in GitHub's base64 envelope. Decode only when
103
+ `encoding === "base64"`; large files may have unavailable content, and directory
104
+ listing has provider limits. Do not blindly fetch a returned download URL with
105
+ the account token. Display unavailable/large-file state or use the native GitHub
106
+ file/media API with the correct resource policy. Never treat Markdown as trusted
107
+ HTML. Review and workflow status are provider data, not proof it is safe to merge.
108
+
109
+ ```js
110
+ const issue = await connections.invoke({ context, integrationId: "github",
111
+ operation: "issues.create", input: { owner: "my-org", repo: "feedback",
112
+ title: "Booking feedback", body: "The app-authorized feedback text" } });
113
+ // Persist issue.number/html_url with the originating app record.
114
+ ```
115
+
116
+ CLI users use the same JSON, Env and optional Node provider. Other frameworks
117
+ use native HTTP with their OAuth grant/PAT against the documented
118
+ [issues](https://docs.github.com/en/rest/issues/issues),
119
+ [pulls](https://docs.github.com/en/rest/pulls/pulls),
120
+ [contents](https://docs.github.com/en/rest/repos/contents) and
121
+ [workflow runs](https://docs.github.com/en/rest/actions/workflow-runs) endpoints.
122
+ OAuth `repo` covers private repository operations; `public_repo` can cover
123
+ public-only writes. Fine-grained PAT permissions are configured in GitHub,
124
+ not granted by an empty local scopes array. Account verification alone does
125
+ not establish access to a selected repository.
126
+
127
+ **LIMITATIONS:** no GitHub App installation flow, Enterprise Server API host,
128
+ repository synchronization, automatic merges or editor assistant attachment.
129
+ Example: the generated app can create a feedback issue and show PR review
130
+ status; adding this connector does not sync the app's source or let the editor
131
+ assistant inspect GitHub. Branch creation, file writes and workflow dispatch
132
+ remain native app operations beyond this subset. Existing OAuth/PAT UI and
133
+ private configuration are shared across these operations.
@@ -0,0 +1,138 @@
1
+ # GitLab API
2
+
3
+ Import `gitlabApiProvider` from `@jskit-ai/connectors-catalog/server/gitlab-api`.
4
+ This fragment supports access tokens and confidential OAuth using a configured
5
+ HTTPS GitLab origin (GitLab.com by default). CI job tokens, subpath installations
6
+ and DPoP proof generation are not implemented. Configuration and connection
7
+ screens were reviewed with simulated setup responses; no live GitLab access
8
+ or generated application was used.
9
+
10
+ ## Configure an access token
11
+
12
+ Set **Instance URL** to the HTTPS origin of the trusted GitLab server that issued
13
+ the token; leave `https://gitlab.com` for GitLab.com. This destination receives
14
+ the credential. Do not include a path, query, fragment or URL credentials.
15
+
16
+ 1. On that GitLab instance, open your avatar and choose **Edit profile**.
17
+ 2. Select **Access → Personal access tokens → Generate token → Legacy token**.
18
+ 3. Enter a name, optional description and expiration date. Select `read_api`
19
+ for projects and `read_user` for the profile verifier.
20
+ 4. Generate the token and copy it while visible. Save it in backend Env as
21
+ `GITLAB_API_KEY`.
22
+ 5. Save provider `gitlab-api`, mode `shared` or `assistant`, `scopes: []`, and
23
+ authentication `{ "method": "api-key", "secretRef": "env:GITLAB_API_KEY" }`.
24
+ 6. Verify with `connectApiKey`. Rotate or revoke through the token list's menu;
25
+ update Env when rotating. [Token instructions](https://docs.gitlab.com/user/profile/personal_access_tokens/),
26
+ [scope meanings](https://docs.gitlab.com/security/tokens/access_token_scopes/).
27
+
28
+ ## Runtime and AI composition
29
+
30
+ The API origin comes from `settings.instanceUrl`, defaulting to
31
+ `https://gitlab.com`. Token requests use `PRIVATE-TOKEN`; OAuth uses Bearer.
32
+ `profile.read` calls `/api/v4/user`. `projects.list` calls `/api/v4/projects`
33
+ with `per_page` (1–100, default 20), `page` (starting at 1), and fixed true
34
+ `membership` and `simple` flags. It returns a compact array of member projects.
35
+ Continue numbered pages until a short/empty page. This fragment does not expose
36
+ response pagination headers or support traversing beyond the provider's offset
37
+ pagination ceiling. [Projects API](https://docs.gitlab.com/api/projects/).
38
+
39
+ Compose the [API-key pattern](../patterns/api-key-connection/PATTERN.md); no
40
+ Git repository clone or application generation is required. Files hold portable
41
+ configuration and private runtime metadata separately.
42
+
43
+ ## Automation and application registrations
44
+
45
+ An AI can prepare a token-creation URL with name, description and scopes already
46
+ filled; the user still creates the personal token. GitLab documents administrator
47
+ token provisioning for self-managed systems and separate service-account token
48
+ APIs, but those privileges must not be inferred for ordinary GitLab.com users.
49
+ The setup guide above links these supported alternatives.
50
+
51
+ The application owner supplies its authorized personal key through private Env.
52
+ Two keys owned by one user do not establish separate capacity. OAuth registration
53
+ is another credential mode. Tests cover profile validation, restricted project
54
+ queries, pagination, file persistence, rotation, isolation and provider errors.
55
+ ## Configure OAuth
56
+
57
+ 1. Set **Instance URL** to your trusted GitLab HTTPS origin. On that same
58
+ instance, open `/user_settings/applications` to register an application.
59
+ 2. Give it a recognizable name, keep **Confidential** selected, and register
60
+ the exact **Suggested callback URL** shown for this project. Choose
61
+ `read_user` and `read_api` for this fragment's profile and project reads.
62
+ [GitLab application registration](https://docs.gitlab.com/integration/oauth_provider/).
63
+ 3. Select **OAuth** in the connector form. Copy the registration's Application
64
+ ID into **Client ID**. Keep the secret and callback as Env references;
65
+ save configuration, then use **Set credential in Env** for the secret
66
+ and callback values. The callback value must equal the registered URL.
67
+ 4. Choose **One shared account** for a project business account, or
68
+ **Each app user's own account** when individuals authorize their own access.
69
+ Shared setup uses **Connect account** after the app backend is running.
70
+ Per-user setup requires the application's own authenticated connection screen;
71
+ the editor does not connect all users on their behalf.
72
+ 5. The app implements the callback with the shared
73
+ [OAuth connection pattern](../patterns/oauth-connection/PATTERN.md), binds it
74
+ to its authenticated user and completes the original attempt. Its backend
75
+ owns the tokens and refresh lifecycle. Laravel uses its own framework;
76
+ this JavaScript runtime does not introduce a Vibe64 dependency.
77
+ 6. Verify the profile. After changing the instance, client or callback,
78
+ reconnect. **Disconnect** removes the local connection; revoke the grant
79
+ in GitLab as well when provider-side revocation is intended.
80
+
81
+ Refresh includes the original redirect URI and uses the shared runtime's token
82
+ rotation. Changing `settings.instanceUrl` invalidates the existing connection
83
+ before credentials can be sent to the new origin. OAuth grant handling is
84
+ separate from the editor's Git repository authentication.
85
+
86
+ ## Project content and collaboration
87
+
88
+ All targeted operations take `project`: a numeric ID as a string or full
89
+ `group/subgroup/project` path. The entire path is URL-encoded as one project
90
+ identifier. The app must authorize this target for its caller before using a
91
+ shared connection. Item `iid` is the issue/MR's project-local number, not its
92
+ global `id`.
93
+
94
+ | Operation | Additional inputs |
95
+ |---|---|
96
+ | `projects.get` | None; full project metadata |
97
+ | `branches.list`, `commits.list`, `pipelines.list` | `page`, `per_page` |
98
+ | `files.get` | `filePath`, `ref` (branch/tag/commit); base64 file envelope |
99
+ | `issues.list` | Pagination, opened/closed/all `state`, optional `search` |
100
+ | `mergeRequests.list` | Pagination, opened/closed/merged/all `state` |
101
+ | `issues.get`, `mergeRequests.get` | `iid`; full content |
102
+ | `issues.notes`, `mergeRequests.notes` | `iid` and pagination; comments |
103
+ | `issues.create` | `title`, optional `description` |
104
+ | `mergeRequests.create` | `title`, `source_branch`, `target_branch`, optional `description` |
105
+ | `issues.update`, `mergeRequests.update` | `iid`, at least one title/description/state_event (close/reopen) |
106
+
107
+ Reads use `read_api` and profile verification `read_user`. **Writes need `api`
108
+ and the appropriate project role**. Select that scope in OAuth and reconnect;
109
+ for a token, issue the appropriate token in GitLab and update private Env.
110
+ Local configuration cannot expand a token's provider permissions. No operation
111
+ writes during verification. Existing source/target branches are required for
112
+ MR creation; this connector does not create commits, merge or run pipelines.
113
+
114
+ ```js
115
+ const issue = await connections.invoke({ context, integrationId: "gitlab",
116
+ operation: "issues.create", input: { project: "team/feedback",
117
+ title: "Booking feedback", description: "App-authorized feedback" } });
118
+ // Store issue.iid and web_url against the initiating app record.
119
+ ```
120
+
121
+ Page size defaults to 20 and is bounded to 100. Continue until a short/empty
122
+ page, respecting the instance's offset limits. Decode files only with a supported
123
+ encoding and handle provider size limits. Treat Markdown as untrusted content.
124
+ A write may succeed before a network failure: no automatic replay occurs;
125
+ reconcile with the project's issue/MR list before retrying.
126
+
127
+ CLI users use the same configuration and Env with the optional Node runtime.
128
+ Other frameworks use native HTTP and their own grants against GitLab's
129
+ [issues](https://docs.gitlab.com/api/issues/),
130
+ [merge requests](https://docs.gitlab.com/api/merge_requests/) and
131
+ [repository files](https://docs.gitlab.com/api/repository_files/) APIs.
132
+
133
+ **LIMITATIONS:** no source synchronization, automatic merges, pipeline execution,
134
+ file writes or editor assistant attachment. CI tokens, DPoP and subpath instances
135
+ remain unsupported. Example: an app can create feedback issues and show MR
136
+ comments and pipeline status; it does not push its own code or start CI jobs.
137
+ Controlled tests cover content, writes and OAuth/token lifecycle; live GitLab
138
+ and generated-app execution remain untested.