@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.
- package/README.md +192 -0
- package/docs/ai-upstream-notices.md +51 -0
- package/docs/ai.md +191 -0
- package/docs/airtable.md +130 -0
- package/docs/algolia.md +190 -0
- package/docs/amazon-redshift.md +229 -0
- package/docs/amplitude.md +210 -0
- package/docs/apify.md +162 -0
- package/docs/apollo-io.md +200 -0
- package/docs/asana.md +126 -0
- package/docs/ashby.md +188 -0
- package/docs/atlassian.md +224 -0
- package/docs/attention.md +162 -0
- package/docs/aws-athena.md +150 -0
- package/docs/aws-credentials.md +75 -0
- package/docs/aws-s3.md +193 -0
- package/docs/bigquery.md +146 -0
- package/docs/brevo.md +122 -0
- package/docs/calendly.md +158 -0
- package/docs/canva.md +191 -0
- package/docs/chargebee.md +192 -0
- package/docs/clay.md +194 -0
- package/docs/clickhouse.md +242 -0
- package/docs/confidence-exp.md +74 -0
- package/docs/confidence-flags.md +75 -0
- package/docs/confidence-oauth.md +137 -0
- package/docs/contentful.md +123 -0
- package/docs/databricks.md +180 -0
- package/docs/dbt-semantic-layer.md +175 -0
- package/docs/elevenlabs.md +102 -0
- package/docs/figma.md +132 -0
- package/docs/firebase-cloud-messaging.md +262 -0
- package/docs/firecrawl.md +137 -0
- package/docs/fireflies.md +95 -0
- package/docs/fireworks-ai.md +53 -0
- package/docs/gatewayapi.md +113 -0
- package/docs/gemini-enterprise.md +224 -0
- package/docs/github-api.md +133 -0
- package/docs/gitlab-api.md +138 -0
- package/docs/gmail.md +133 -0
- package/docs/gong.md +205 -0
- package/docs/google-ads.md +156 -0
- package/docs/google-analytics.md +202 -0
- package/docs/google-docs.md +105 -0
- package/docs/google-drive.md +108 -0
- package/docs/google-maps-platform.md +208 -0
- package/docs/google-oauth.md +123 -0
- package/docs/google-search-console.md +124 -0
- package/docs/google-sheets.md +94 -0
- package/docs/google-slides.md +95 -0
- package/docs/granola.md +178 -0
- package/docs/hex.md +161 -0
- package/docs/heygen.md +124 -0
- package/docs/hubspot.md +142 -0
- package/docs/incident-io.md +118 -0
- package/docs/inngest.md +178 -0
- package/docs/klipy.md +149 -0
- package/docs/lexware.md +144 -0
- package/docs/lightspeed.md +193 -0
- package/docs/linear.md +137 -0
- package/docs/linkedin.md +196 -0
- package/docs/logo-dev.md +152 -0
- package/docs/mailgun.md +153 -0
- package/docs/mapbox.md +174 -0
- package/docs/microsoft-excel.md +97 -0
- package/docs/microsoft-fabric.md +249 -0
- package/docs/microsoft-oauth.md +143 -0
- package/docs/microsoft-onedrive.md +76 -0
- package/docs/microsoft-onenote.md +75 -0
- package/docs/microsoft-outlook.md +90 -0
- package/docs/microsoft-powerpoint.md +119 -0
- package/docs/microsoft-sharepoint.md +75 -0
- package/docs/microsoft-teams.md +72 -0
- package/docs/microsoft-word.md +119 -0
- package/docs/miro.md +117 -0
- package/docs/n8n.md +169 -0
- package/docs/notion.md +137 -0
- package/docs/oura.md +161 -0
- package/docs/paddle.md +168 -0
- package/docs/perplexity.md +85 -0
- package/docs/pipedrive.md +120 -0
- package/docs/polar.md +63 -0
- package/docs/posthog.md +227 -0
- package/docs/prestashop.md +151 -0
- package/docs/replicate.md +60 -0
- package/docs/resend.md +153 -0
- package/docs/salesforce.md +234 -0
- package/docs/sanity.md +122 -0
- package/docs/semrush.md +276 -0
- package/docs/sentry.md +112 -0
- package/docs/sevdesk.md +107 -0
- package/docs/shopify.md +206 -0
- package/docs/slack.md +257 -0
- package/docs/snowflake.md +271 -0
- package/docs/storyblok.md +130 -0
- package/docs/stripe.md +77 -0
- package/docs/supabase.md +51 -0
- package/docs/tally.md +105 -0
- package/docs/telegram.md +165 -0
- package/docs/tiktok.md +201 -0
- package/docs/twilio.md +284 -0
- package/docs/twitch.md +428 -0
- package/docs/wave.md +440 -0
- package/docs/wix.md +1249 -0
- package/docs/wiz.md +177 -0
- package/docs/woocommerce.md +400 -0
- package/docs/wordpress-com.md +358 -0
- package/docs/wordpress-self-hosted.md +252 -0
- package/docs/workday.md +292 -0
- package/docs/x-twitter.md +188 -0
- package/docs/xero.md +429 -0
- package/docs/zoho-books.md +214 -0
- package/docs/zoho-crm.md +192 -0
- package/package.json +153 -0
- package/patterns/ai-connections/PATTERN.md +84 -0
- package/patterns/ai-connections/example/ai-model.js +11 -0
- package/patterns/ai-connections/example/perplexity-answer.js +29 -0
- package/patterns/api-key-connection/PATTERN.md +368 -0
- package/patterns/api-key-connection/example/connections.js +18 -0
- package/patterns/api-key-connection/example/integrations.json +19 -0
- package/patterns/assistant-mcp/PATTERN.md +110 -0
- package/patterns/assistant-mcp/example/integrations.json +13 -0
- package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
- package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
- package/patterns/aws-storage-queries/PATTERN.md +169 -0
- package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
- package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
- package/patterns/aws-storage-queries/example/formats/package.json +12 -0
- package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
- package/patterns/aws-storage-queries/example/integrations.json +38 -0
- package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
- package/patterns/event-delivery/PATTERN.md +151 -0
- package/patterns/event-delivery/example/integrations.json +17 -0
- package/patterns/firebase-messaging/PATTERN.md +156 -0
- package/patterns/firebase-messaging/example/server/notifications.js +23 -0
- package/patterns/google-ads-search/PATTERN.md +92 -0
- package/patterns/google-ads-search/example/ads-setup.js +25 -0
- package/patterns/oauth-connection/PATTERN.md +724 -0
- package/patterns/oauth-connection/example/integrations.json +20 -0
- package/patterns/paddle-catalogue/PATTERN.md +78 -0
- package/patterns/paddle-catalogue/example/create-products.js +38 -0
- package/patterns/public-image/PATTERN.md +84 -0
- package/patterns/public-image/example/integrations.json +13 -0
- package/patterns/public-image/example/logo-url.js +16 -0
- package/patterns/redshift-queries/PATTERN.md +150 -0
- package/patterns/redshift-queries/example/integrations.json +33 -0
- package/patterns/source-scanning/PATTERN.md +83 -0
- package/patterns/source-scanning/example/source-scanner.js +13 -0
- package/src/client/firebase-cloud-messaging.js +10 -0
- package/src/client/google-analytics.js +72 -0
- package/src/client/google-maps-platform.js +39 -0
- package/src/client/logo-dev.js +36 -0
- package/src/server/ai.js +46 -0
- package/src/server/airtable.js +67 -0
- package/src/server/algolia.js +63 -0
- package/src/server/amazon-redshift.js +96 -0
- package/src/server/amplitude.js +31 -0
- package/src/server/apify.js +68 -0
- package/src/server/apollo-io.js +85 -0
- package/src/server/asana.js +64 -0
- package/src/server/ashby.js +61 -0
- package/src/server/atlassian.js +32 -0
- package/src/server/attention.js +93 -0
- package/src/server/aws-athena.js +82 -0
- package/src/server/aws-s3.js +49 -0
- package/src/server/awsTransport.js +75 -0
- package/src/server/bigquery.js +97 -0
- package/src/server/brevo.js +97 -0
- package/src/server/calendly.js +77 -0
- package/src/server/canva.js +13 -0
- package/src/server/chargebee.js +88 -0
- package/src/server/clay.js +78 -0
- package/src/server/clickhouse.js +66 -0
- package/src/server/confidence.js +29 -0
- package/src/server/contentful.js +40 -0
- package/src/server/databricks.js +55 -0
- package/src/server/dbt-semantic-layer.js +95 -0
- package/src/server/elevenlabs.js +81 -0
- package/src/server/figma.js +24 -0
- package/src/server/firebase-cloud-messaging.js +111 -0
- package/src/server/firecrawl.js +70 -0
- package/src/server/fireflies.js +31 -0
- package/src/server/fireworks-ai.js +16 -0
- package/src/server/gatewayapi.js +48 -0
- package/src/server/gemini-enterprise.js +47 -0
- package/src/server/github-api.js +90 -0
- package/src/server/gitlab-api.js +67 -0
- package/src/server/gmail.js +60 -0
- package/src/server/gong.js +52 -0
- package/src/server/google-ads-search.js +134 -0
- package/src/server/google-ads.js +80 -0
- package/src/server/google-docs.js +36 -0
- package/src/server/google-drive.js +71 -0
- package/src/server/google-maps-platform.js +90 -0
- package/src/server/google-search-console.js +31 -0
- package/src/server/google-sheets.js +60 -0
- package/src/server/google-slides.js +36 -0
- package/src/server/google.js +61 -0
- package/src/server/granola.js +115 -0
- package/src/server/graphqlOperation.js +15 -0
- package/src/server/hex.js +29 -0
- package/src/server/heygen.js +54 -0
- package/src/server/hubspot.js +85 -0
- package/src/server/incident-io.js +68 -0
- package/src/server/inngest.js +86 -0
- package/src/server/jsonOperation.js +34 -0
- package/src/server/klipy.js +34 -0
- package/src/server/lexware.js +59 -0
- package/src/server/lightspeed.js +82 -0
- package/src/server/linear.js +52 -0
- package/src/server/linkedin.js +74 -0
- package/src/server/mailgun.js +76 -0
- package/src/server/mapbox.js +46 -0
- package/src/server/mcpRegistration.js +41 -0
- package/src/server/mcpTransport.js +60 -0
- package/src/server/microsoft-excel.js +67 -0
- package/src/server/microsoft-fabric.js +81 -0
- package/src/server/microsoft-onedrive.js +58 -0
- package/src/server/microsoft-onenote.js +52 -0
- package/src/server/microsoft-outlook.js +58 -0
- package/src/server/microsoft-powerpoint.js +5 -0
- package/src/server/microsoft-sharepoint.js +46 -0
- package/src/server/microsoft-teams.js +29 -0
- package/src/server/microsoft-word.js +5 -0
- package/src/server/microsoft.js +88 -0
- package/src/server/miro.js +29 -0
- package/src/server/n8n.js +78 -0
- package/src/server/notion.js +76 -0
- package/src/server/oura.js +48 -0
- package/src/server/paddle.js +83 -0
- package/src/server/perplexity.js +15 -0
- package/src/server/pipedrive.js +95 -0
- package/src/server/polar.js +20 -0
- package/src/server/posthog.js +44 -0
- package/src/server/prestashop.js +42 -0
- package/src/server/replicate.js +42 -0
- package/src/server/resend.js +93 -0
- package/src/server/salesforce.js +84 -0
- package/src/server/sanity.js +31 -0
- package/src/server/semrush.js +359 -0
- package/src/server/sentry.js +30 -0
- package/src/server/sevdesk.js +20 -0
- package/src/server/shopify.js +99 -0
- package/src/server/slack.js +143 -0
- package/src/server/snowflake.js +139 -0
- package/src/server/storyblok.js +49 -0
- package/src/server/stripe.js +13 -0
- package/src/server/supabase.js +13 -0
- package/src/server/tally.js +78 -0
- package/src/server/telegram.js +55 -0
- package/src/server/tiktok.js +86 -0
- package/src/server/twilio.js +90 -0
- package/src/server/twitch.js +409 -0
- package/src/server/wave.js +520 -0
- package/src/server/wix.js +1048 -0
- package/src/server/wiz.js +117 -0
- package/src/server/woocommerce.js +412 -0
- package/src/server/wordpress-com.js +236 -0
- package/src/server/wordpress-self-hosted.js +134 -0
- package/src/server/workday.js +136 -0
- package/src/server/x-twitter.js +110 -0
- package/src/server/xero.js +397 -0
- package/src/server/zoho-books.js +90 -0
- package/src/server/zoho-crm.js +89 -0
- package/src/server/zohoOAuth.js +21 -0
- package/src/shared/ai-models.json +8049 -0
- package/src/shared/ai.js +63 -0
- package/src/shared/algolia.js +29 -0
- package/src/shared/amazon-redshift.js +51 -0
- package/src/shared/amplitude.js +28 -0
- package/src/shared/atlassian.js +43 -0
- package/src/shared/aws.js +72 -0
- package/src/shared/canva.js +66 -0
- package/src/shared/chargebee.js +26 -0
- package/src/shared/clickhouse.js +38 -0
- package/src/shared/confidence.js +28 -0
- package/src/shared/databricks.js +33 -0
- package/src/shared/dbt-semantic-layer.js +32 -0
- package/src/shared/definitions.js +140 -0
- package/src/shared/figma.js +21 -0
- package/src/shared/firebase-cloud-messaging.js +45 -0
- package/src/shared/gemini-enterprise.js +33 -0
- package/src/shared/gong.js +33 -0
- package/src/shared/google-ads-search.js +31 -0
- package/src/shared/google-ads.js +28 -0
- package/src/shared/google-maps-platform.js +28 -0
- package/src/shared/google.js +133 -0
- package/src/shared/granola.js +25 -0
- package/src/shared/hex.js +28 -0
- package/src/shared/inngest.js +35 -0
- package/src/shared/lightspeed.js +75 -0
- package/src/shared/linkedin.js +27 -0
- package/src/shared/logo-dev.js +21 -0
- package/src/shared/mapbox.js +38 -0
- package/src/shared/mcp.js +92 -0
- package/src/shared/microsoft-fabric.js +47 -0
- package/src/shared/microsoft.js +231 -0
- package/src/shared/miro.js +27 -0
- package/src/shared/oura.js +23 -0
- package/src/shared/posthog.js +33 -0
- package/src/shared/prestashop.js +23 -0
- package/src/shared/salesforce.js +36 -0
- package/src/shared/semrush.js +24 -0
- package/src/shared/shopify.js +51 -0
- package/src/shared/siteUrl.js +12 -0
- package/src/shared/slack.js +88 -0
- package/src/shared/snowflake.js +55 -0
- package/src/shared/tiktok.js +22 -0
- package/src/shared/tokens.js +747 -0
- package/src/shared/twilio.js +41 -0
- package/src/shared/twitch.js +49 -0
- package/src/shared/wave.js +52 -0
- package/src/shared/wix.js +40 -0
- package/src/shared/wiz.js +41 -0
- package/src/shared/wordpress-com.js +30 -0
- package/src/shared/wordpress.js +69 -0
- package/src/shared/workday.js +50 -0
- package/src/shared/x-twitter.js +19 -0
- package/src/shared/xero.js +46 -0
- package/src/shared/zoho-books.js +39 -0
- package/src/shared/zoho-crm.js +43 -0
- package/src/shared/zoho-regions.js +12 -0
- package/test/ai.test.js +136 -0
- package/test/airtable.test.js +125 -0
- package/test/algolia.test.js +207 -0
- package/test/amazon-redshift.test.js +272 -0
- package/test/amplitude.test.js +239 -0
- package/test/apify.test.js +93 -0
- package/test/apollo-io.test.js +125 -0
- package/test/asana.test.js +99 -0
- package/test/ashby.test.js +97 -0
- package/test/atlassian.test.js +249 -0
- package/test/attention.test.js +79 -0
- package/test/aws.test.js +405 -0
- package/test/brevo.test.js +71 -0
- package/test/calendly.test.js +136 -0
- package/test/canva.test.js +258 -0
- package/test/chargebee.test.js +195 -0
- package/test/clickhouse.test.js +278 -0
- package/test/confidence.test.js +205 -0
- package/test/databricks.test.js +253 -0
- package/test/dbt-semantic-layer.test.js +221 -0
- package/test/designMcp.test.js +336 -0
- package/test/elevenlabs.test.js +52 -0
- package/test/firebase-cloud-messaging.test.js +242 -0
- package/test/firecrawl.test.js +66 -0
- package/test/gemini-enterprise.test.js +218 -0
- package/test/github-api.test.js +167 -0
- package/test/gitlab-api.test.js +160 -0
- package/test/gong.test.js +192 -0
- package/test/google-ads.test.js +350 -0
- package/test/google-maps-platform.test.js +191 -0
- package/test/google.test.js +710 -0
- package/test/granola.test.js +240 -0
- package/test/hex.test.js +253 -0
- package/test/heygen.test.js +121 -0
- package/test/hubspot.test.js +103 -0
- package/test/inngest.test.js +219 -0
- package/test/lightspeed.test.js +250 -0
- package/test/linear.test.js +146 -0
- package/test/linkedin.test.js +243 -0
- package/test/logo-dev.test.js +79 -0
- package/test/mailgun.test.js +107 -0
- package/test/mapbox.test.js +181 -0
- package/test/mcp.test.js +227 -0
- package/test/microsoft-fabric.test.js +258 -0
- package/test/microsoft.test.js +554 -0
- package/test/n8nOAuth.test.js +188 -0
- package/test/notionOAuth.test.js +183 -0
- package/test/oura.test.js +211 -0
- package/test/paddleCatalogue.test.js +51 -0
- package/test/paddlePermissions.test.js +101 -0
- package/test/perplexityComposition.test.js +39 -0
- package/test/pipedriveOAuth.test.js +140 -0
- package/test/posthog.test.js +200 -0
- package/test/prestashop.test.js +207 -0
- package/test/resend.test.js +163 -0
- package/test/salesforce.test.js +276 -0
- package/test/semrush.test.js +479 -0
- package/test/sentry.test.js +35 -0
- package/test/shopify.test.js +247 -0
- package/test/slack.test.js +320 -0
- package/test/snowflake.test.js +391 -0
- package/test/tally.test.js +75 -0
- package/test/telegram.test.js +58 -0
- package/test/tiktok.test.js +243 -0
- package/test/tokens.test.js +1079 -0
- package/test/twilio.test.js +221 -0
- package/test/twitch.test.js +573 -0
- package/test/wave.test.js +678 -0
- package/test/wix.test.js +1099 -0
- package/test/wiz.test.js +185 -0
- package/test/wordpress-com.test.js +469 -0
- package/test/wordpress.test.js +660 -0
- package/test/workday.test.js +314 -0
- package/test/x-twitter.test.js +256 -0
- package/test/xero.test.js +700 -0
- package/test/zoho-books.test.js +253 -0
- 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.
|