@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
package/docs/hex.md
ADDED
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Hex assistant connection
|
|
2
|
+
|
|
3
|
+
Import `hexProvider` and `registerHexClient` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/hex`. This initial library connects an
|
|
5
|
+
assistant owner to remote MCP and exposes `tools.list` and `tools.call`.
|
|
6
|
+
It reuses the OAuth state, refresh and encrypted file-store implementations.
|
|
7
|
+
|
|
8
|
+
## Provider setup
|
|
9
|
+
|
|
10
|
+
1. Check the intended Hex workspace endpoint and account. Hex documents MCP on
|
|
11
|
+
Team and Enterprise plans with an Explorer or higher role.
|
|
12
|
+
2. Choose Standard, Europe or HIPAA in the Vibe64 **Hex workspace endpoint**
|
|
13
|
+
field. Single-tenant custom Hex domains are not supported by this fragment.
|
|
14
|
+
3. Confirm **Suggested callback URL** is the route your host will serve. Choose
|
|
15
|
+
**Register client and connect** to register at the selected fixed authority.
|
|
16
|
+
The public editor saves the ID in project configuration and the secret, callback
|
|
17
|
+
and recovery ID in development Env, then starts the app-owned setup command.
|
|
18
|
+
Existing Env values are not replaced. Alternatively in
|
|
19
|
+
**OAuth client registration**, copy the endpoint and JSON request body into
|
|
20
|
+
your HTTP client and send one POST with Content-Type application/json.
|
|
21
|
+
This endpoint changes with the selected Hex region. Register once; the
|
|
22
|
+
provider guide does not establish a developer-console creation screen.
|
|
23
|
+
4. For manual registration, copy `client_id` into **Client ID** and **Save configuration**. Choose
|
|
24
|
+
**Set credential in Env** to save `client_secret` under the displayed reference.
|
|
25
|
+
Choose **Set callback in Env** to save the same callback used for registration.
|
|
26
|
+
Return to the form after saving Env. Keep the full registration response private.
|
|
27
|
+
5. Select identity/profile/email/refresh permissions and save configuration.
|
|
28
|
+
Saving does not register a client or connect the account. The host must open
|
|
29
|
+
`beginAuthorization`'s URL and complete the callback under the same owner.
|
|
30
|
+
6. In the provider browser flow, sign in, choose the workspace when prompted
|
|
31
|
+
and approve consent. Verification discovers tools without starting a Thread.
|
|
32
|
+
|
|
33
|
+
Hex documents project search, Thread creation/retrieval/continuation and project editing tools. Editing requires Editor or higher and the specific project permission.
|
|
34
|
+
Its workspace API-access switch does not revoke MCP access. Sensitive data
|
|
35
|
+
connection controls live under **Settings → Integrations → Configure sensitive
|
|
36
|
+
data connections for external integrations**, or the data source's **Access**
|
|
37
|
+
tab. These settings remain under the workspace administrator's control.
|
|
38
|
+
[Hex MCP guide](https://learn.hex.tech/docs/api-integrations/mcp-server).
|
|
39
|
+
|
|
40
|
+
## Explicit registration and automation
|
|
41
|
+
|
|
42
|
+
Public metadata was rechecked on 12 September 2026 for all three endpoints. The
|
|
43
|
+
resource is `https://<host>/mcp`; its issuer is `https://auth.<host>`. The issuer
|
|
44
|
+
advertises `/oauth2/authorize`, `/oauth2/token` and `/oauth2/register`, S256,
|
|
45
|
+
code/refresh grants and `client_secret_post` authentication among its options.
|
|
46
|
+
Its scopes are `openid`, `profile`, `email` and `offline_access`.
|
|
47
|
+
[Standard resource metadata](https://app.hex.tech/.well-known/oauth-protected-resource/mcp),
|
|
48
|
+
[standard OAuth metadata](https://auth.app.hex.tech/.well-known/oauth-authorization-server),
|
|
49
|
+
[EU metadata](https://auth.eu.hex.tech/.well-known/oauth-authorization-server),
|
|
50
|
+
[HIPAA metadata](https://auth.hc.hex.tech/.well-known/oauth-authorization-server).
|
|
51
|
+
|
|
52
|
+
After the setup caller has authorization to create a provider client:
|
|
53
|
+
|
|
54
|
+
```js
|
|
55
|
+
const registration = await registerHexClient({
|
|
56
|
+
endpoint: "standard",
|
|
57
|
+
clientName: "My assistant",
|
|
58
|
+
callbackUrl: "https://assistant.example/connections/hex/callback",
|
|
59
|
+
scopes: ["openid", "profile", "email", "offline_access"]
|
|
60
|
+
});
|
|
61
|
+
// Persist registration.clientSecret through the existing secret owner.
|
|
62
|
+
// Save registration.clientId in configuration; never log the whole result.
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
The helper uses the MCP SDK with one exact callback, code/refresh grants and
|
|
66
|
+
`client_secret_post`. It validates returned client and redirect metadata and
|
|
67
|
+
returns `clientId`, `clientSecret` and any `clientSecretExpiresAt`. HTTPS and
|
|
68
|
+
HTTP loopback callbacks are accepted; credentials, query and fragment are not.
|
|
69
|
+
The host owns authorization to invoke this helper and storing its result.
|
|
70
|
+
|
|
71
|
+
An AI with an authorized setup API can prepare configuration and call this
|
|
72
|
+
helper. It cannot complete human consent, change provider entitlements or
|
|
73
|
+
promise registration acceptance from metadata alone. No live registration was
|
|
74
|
+
performed. Failed or interrupted registration must not be automatically retried;
|
|
75
|
+
the provider might already have created a client. The equivalent manual HTTP
|
|
76
|
+
operation is a JSON POST to the selected issuer's `/oauth2/register` with the
|
|
77
|
+
helper's `client_name`, `redirect_uris`, `token_endpoint_auth_method`,
|
|
78
|
+
`grant_types`, `response_types` and space-delimited `scope` fields.
|
|
79
|
+
|
|
80
|
+
## Portable configuration and runtime
|
|
81
|
+
|
|
82
|
+
```json
|
|
83
|
+
{
|
|
84
|
+
"schemaVersion": 1,
|
|
85
|
+
"registrations": {
|
|
86
|
+
"hex": {
|
|
87
|
+
"source": "own",
|
|
88
|
+
"clientId": "assigned-client-id",
|
|
89
|
+
"clientSecretRef": "env:HEX_CLIENT_SECRET",
|
|
90
|
+
"callbackUrlRef": "env:HEX_CALLBACK_URL"
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
"integrations": {
|
|
94
|
+
"analysis": {
|
|
95
|
+
"provider": "hex",
|
|
96
|
+
"accountMode": "assistant",
|
|
97
|
+
"scopes": ["openid", "profile", "email", "offline_access"],
|
|
98
|
+
"authentication": { "method": "oauth2", "registrationRef": "hex" },
|
|
99
|
+
"settings": { "endpoint": "standard" }
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
CLI and UI validate the same configuration. `endpoint` defaults to `standard`;
|
|
106
|
+
`eu` and `hipaa` select their respective fixed MCP/issuer pair. No arbitrary
|
|
107
|
+
provider URL is accepted. Changing endpoint invalidates a pending attempt and
|
|
108
|
+
requires reconnecting an existing grant. Configuration stores references;
|
|
109
|
+
runtime grants and attempts use the host-selected file store.
|
|
110
|
+
|
|
111
|
+
Compose the existing `oauth-connection` and `assistant-mcp-oauth` patterns with
|
|
112
|
+
this provider. Both operations require granted `openid`. All four permissions
|
|
113
|
+
are selected initially; profile/email/refresh can be omitted. Identity scopes
|
|
114
|
+
are not a read-only tool boundary. The host must authorize the exact tool name,
|
|
115
|
+
arguments, workspace and intended effect. Obtain argument schemas from
|
|
116
|
+
`tools.list`, which accepts an explicit cursor; do not guess Thread fields.
|
|
117
|
+
`tools.call` preserves the result and `isError` flag. Listing tools does not
|
|
118
|
+
grant permission to run an analysis or consume credits.
|
|
119
|
+
|
|
120
|
+
The library does not automatically poll a Thread, fetch all discovery pages,
|
|
121
|
+
retry a call or attach tools to an AI. The host schedules any explicit follow-up
|
|
122
|
+
read and displays its status. Disconnect removes the local grant, not provider
|
|
123
|
+
work already accepted. OAuth here does not implement login to an application.
|
|
124
|
+
|
|
125
|
+
## Connection ownership and callbacks
|
|
126
|
+
|
|
127
|
+
This fragment is for an explicitly configured assistant host. That host owns its
|
|
128
|
+
client registration, callback, private credentials and grants; it may be an
|
|
129
|
+
application-owned assistant or an opt-in editor tool. Merely adding the provider
|
|
130
|
+
to a project does not authorize the editor's coding assistant. It does not supply
|
|
131
|
+
published app-user login. The host's callback may differ from the published app's
|
|
132
|
+
domain, but it must match that host's real route and registered redirect URI.
|
|
133
|
+
|
|
134
|
+
Register this host's actual callback for the selected Standard, Europe or HIPAA
|
|
135
|
+
endpoint. Its selected endpoint and credentials belong to this connection; keep
|
|
136
|
+
runtime records bound to that owner. Update registration and callback Env when
|
|
137
|
+
the actual callback changes. Separate clients do not establish separate Hex
|
|
138
|
+
workspace credits or capacity. Provider accounts, plans and workspace permissions
|
|
139
|
+
still apply. Selecting the HIPAA endpoint is a routing choice, not a compliance
|
|
140
|
+
certification for JSKIT, Vibe64 or a generated application. The explicit registration and controlled connection UI have been reviewed.
|
|
141
|
+
The explicit Register client and connect action supports DCR; ordinary Connect
|
|
142
|
+
does not silently create another registration.
|
|
143
|
+
|
|
144
|
+
## Focused verification and limits
|
|
145
|
+
|
|
146
|
+
The controlled tests exercise selected endpoints, PKCE/resource binding,
|
|
147
|
+
registration request/response validation, file restart and encryption, refresh,
|
|
148
|
+
owner and tool policy, consent/permission failures, pagination, redacted errors
|
|
149
|
+
and interruption without replay. Browser proof covers endpoint/permission and
|
|
150
|
+
reference persistence. Live registrations, consent, actual Hex tool calls,
|
|
151
|
+
single-tenant hosts, provider billing and real generated applications are not
|
|
152
|
+
part of that proof. The separate Hex REST API/token mode is not implemented.
|
|
153
|
+
|
|
154
|
+
**LIMITATIONS:** Editor coding-assistant attachment and notebook/Thread widgets
|
|
155
|
+
are deferred. For example an app-owned MCP host can call Hex project or Thread
|
|
156
|
+
tools after its own permission checks, but adding this form does not let Vibe64
|
|
157
|
+
Codex/OpenCode analyze the workspace. The app owns tool discovery/schema use,
|
|
158
|
+
status polling, output rendering, sensitive data policy and credit approval.
|
|
159
|
+
Single-tenant custom hosts, REST/token mode and live Hex execution remain outside
|
|
160
|
+
this adapter. Other frameworks use their native MCP client and the same project
|
|
161
|
+
configuration/Env; they do not need JSKIT or a Node sidecar.
|
package/docs/heygen.md
ADDED
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# HeyGen
|
|
2
|
+
|
|
3
|
+
Import `heygenProvider` from `@jskit-ai/connectors-catalog/server/heygen`.
|
|
4
|
+
This fragment uses the v3 API to read the current profile and voice catalogue.
|
|
5
|
+
|
|
6
|
+
## Configure access
|
|
7
|
+
|
|
8
|
+
1. Sign into the intended HeyGen account. Open the
|
|
9
|
+
[API dashboard](https://app.heygen.com/home?from=&nav=API), also linked from
|
|
10
|
+
the provider guide, and generate an API key.
|
|
11
|
+
2. Restrict the key to `account:read` for profile verification and `voices:read`
|
|
12
|
+
for voice listing. Copy it into backend Env as `HEYGEN_API_KEY`. API-key billing and
|
|
13
|
+
subscription OAuth are separate arrangements; use a key for the REST mode.
|
|
14
|
+
[Key setup](https://developers.heygen.com/docs/api-key).
|
|
15
|
+
3. Save provider `heygen`, mode `shared` or `assistant`, `scopes: []`, and
|
|
16
|
+
authentication `{ "method": "api-key", "secretRef": "env:HEYGEN_API_KEY" }`.
|
|
17
|
+
4. In the screen, Save configuration, choose Set credential in Env, save the
|
|
18
|
+
actual key as `HEYGEN_API_KEY`, then return and choose Connect account.
|
|
19
|
+
CLI applications run `connectApiKey`. The verifier calls `GET /v3/users/me`, which returns
|
|
20
|
+
profile and billing fields under `data`. Replace the provider key in Env
|
|
21
|
+
when rotating it; local disconnect does not revoke remote access.
|
|
22
|
+
[Profile endpoint](https://developers.heygen.com/reference/get-current-user).
|
|
23
|
+
|
|
24
|
+
## Runtime and AI composition
|
|
25
|
+
|
|
26
|
+
`profile.read` accepts no inputs. `voices.list` reads `GET /v3/voices` and
|
|
27
|
+
accepts `limit` (1–100, default 20), `token`, `type` (`public` by default or
|
|
28
|
+
`private`), `engine`, `language` and `gender` (`male` or `female`). Pass the
|
|
29
|
+
returned `next_token` as `token` when `has_more` is true. These calls use
|
|
30
|
+
`x-api-key` against `https://api.heygen.com`; neither creates speech or video.
|
|
31
|
+
[Voice endpoint](https://developers.heygen.com/reference/list-voices).
|
|
32
|
+
|
|
33
|
+
Use the [API-key pattern](../patterns/api-key-connection/PATTERN.md) with this
|
|
34
|
+
provider and the private JSON store. AI-written applications can select voice
|
|
35
|
+
IDs from the catalogue; generation, consent to cloning, billing and job handling
|
|
36
|
+
remain additional application work. No arbitrary endpoint is accepted as input.
|
|
37
|
+
|
|
38
|
+
## Automation and application ownership
|
|
39
|
+
|
|
40
|
+
The verified key bootstrap is the API dashboard. An AI can prepare JSON and
|
|
41
|
+
library composition afterwards; this pass does not establish a key-creation API.
|
|
42
|
+
The application owner supplies its key through private Env and arranges provider
|
|
43
|
+
billing/capacity. Two named keys alone do not create independent budgets.
|
|
44
|
+
Subscription provisioning remains provider-owned. Browser OAuth is available through the separate MCP mode below.
|
|
45
|
+
|
|
46
|
+
Tests cover profile verification, voice filters, paging, defaults, private-file
|
|
47
|
+
restart, key replacement, isolation, disconnect and provider errors. They use
|
|
48
|
+
simulated responses and do not create media or access a real HeyGen account.
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
## MCP OAuth connection
|
|
52
|
+
|
|
53
|
+
The captured Lovable chat connection opened HeyGen OAuth. The current
|
|
54
|
+
[MCP guide](https://developers.heygen.com/mcp/overview) still describes browser
|
|
55
|
+
OAuth at `https://mcp.heygen.com/mcp/v1/`, drawing on the connected account's
|
|
56
|
+
plan. The same provider now exposes that path as OAuth with `tools.list` and
|
|
57
|
+
`tools.call`. The runtime rejects cross-method operations before refresh or
|
|
58
|
+
transport. Neither current authentication mode is retired.
|
|
59
|
+
|
|
60
|
+
On 2026-09-12, the MCP host's authorization-server metadata redirected to
|
|
61
|
+
`https://api2.heygen.com/.well-known/oauth-authorization-server`. That published
|
|
62
|
+
metadata advertises issuer `https://api2.heygen.com`, authorization/token/client
|
|
63
|
+
registration at `/v1/oauth/authorize`, `/v1/oauth/token`, `/v1/oauth/register`,
|
|
64
|
+
S256, code/refresh grants, resource indicators and identity scopes `openid`,
|
|
65
|
+
`profile`, `email`. It supports confidential and public client authentication.
|
|
66
|
+
The protected-resource metadata identifies `https://mcp.heygen.com` as the
|
|
67
|
+
OAuth resource, distinct from the transport endpoint's `/mcp/v1/` path. The
|
|
68
|
+
adapter uses that root resource in authorization and token requests and reuses
|
|
69
|
+
the existing MCP transport and method-specific connection lifecycle. No live
|
|
70
|
+
client was registered or account connected during this inspection.
|
|
71
|
+
|
|
72
|
+
To configure the OAuth assistant connection:
|
|
73
|
+
|
|
74
|
+
1. Select Assistant access and OAuth. Keep `openid`, `profile`, `email` selected.
|
|
75
|
+
2. Confirm Suggested callback URL is the route the host will serve. Choose
|
|
76
|
+
Register client and connect: the public editor invokes the fixed-authority
|
|
77
|
+
helper and saves ID, secret and callback in project configuration/private Env.
|
|
78
|
+
Manual fallback: send one POST to the displayed endpoint with its JSON body
|
|
79
|
+
and Content-Type application/json. CLI users can call
|
|
80
|
+
`registerHeyGenClient({ clientName, callbackUrl })`, exported beside the provider.
|
|
81
|
+
3. For manual registration, copy `client_id` into Client ID and Save configuration. Use Set credential in
|
|
82
|
+
Env to save `client_secret` under the displayed reference; use Set callback
|
|
83
|
+
in Env to save the exact registered callback. Keep the response private.
|
|
84
|
+
4. Return, save and Connect account. Sign into HeyGen and approve consent.
|
|
85
|
+
Verification lists tools and creates no media. The host must authorize each
|
|
86
|
+
tool name and arguments; tools can incur credits and change or delete content.
|
|
87
|
+
5. Reconnect repeats consent. Disconnect removes local state, does not undo work
|
|
88
|
+
and does not promise provider-wide revocation.
|
|
89
|
+
|
|
90
|
+
The application/assistant host owns its registration, callback, Env and grants.
|
|
91
|
+
There is no Vibe64 gateway. Ordinary Connect never silently registers a client;
|
|
92
|
+
the explicit Register client and connect action uses the existing helper. Metadata
|
|
93
|
+
advertises a revocation endpoint, but this adapter's Disconnect remains local;
|
|
94
|
+
no provider-wide revocation claim is made. Both credential instruction screens were rendered and reviewed with controlled
|
|
95
|
+
connection fixtures on 2026-09-12. Live provider authorization remains untested.
|
|
96
|
+
|
|
97
|
+
[API-key permission mapping](https://developers.heygen.com/docs/api-key-permissions)
|
|
98
|
+
confirms the read scopes required by this REST fragment. Provider keys and MCP
|
|
99
|
+
grants remain distinct; do not send one credential type to the other service.
|
|
100
|
+
|
|
101
|
+
## Media tools and limits
|
|
102
|
+
|
|
103
|
+
Use `tools.list` to obtain the connected account's current tool names and input
|
|
104
|
+
schemas; the [MCP guide](https://developers.heygen.com/mcp/overview) describes
|
|
105
|
+
video creation/status, avatars, speech and translation (reviewed 2026-09-13).
|
|
106
|
+
The host invokes `tools.call` with the discovered schema, checks `isError`, and
|
|
107
|
+
polls the corresponding status tool for asynchronous work. API-key profile/voice
|
|
108
|
+
reads are not a substitute for these OAuth media tools. Identity scopes do not
|
|
109
|
+
make tool calls read-only: the application must authorize the exact tool and
|
|
110
|
+
arguments before calling, and confirm chargeable/destructive operations. Do not
|
|
111
|
+
retry an uncertain creation blindly; reconcile its session/job ID first.
|
|
112
|
+
|
|
113
|
+
**LIMITATIONS:** No editor-assistant attachment, video editor, automatic media-job
|
|
114
|
+
worker or API-key media generation is included. Example: an authorized MCP host
|
|
115
|
+
can submit a video request and retrieve its status, but this form alone does not
|
|
116
|
+
make Codex create a video or render progress. The app owns polling, downloads,
|
|
117
|
+
user consent, content rights and credit limits. Fixtures prove transport and
|
|
118
|
+
host policy, not actual media generation or current plan entitlement.
|
|
119
|
+
|
|
120
|
+
CLI Node applications use the same exported provider and registration helper,
|
|
121
|
+
JSON and Env without Vibe64. Other frameworks use their native MCP/OAuth client
|
|
122
|
+
with those same project-owned configuration values; no JSKIT runtime or Node
|
|
123
|
+
sidecar is required. Select tools from discovery rather than hard-coding this
|
|
124
|
+
module's example catalogue as permanent provider API contracts.
|
package/docs/hubspot.md
ADDED
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# HubSpot
|
|
2
|
+
|
|
3
|
+
Import `hubspotProvider` from `@jskit-ai/connectors-catalog/server/hubspot`.
|
|
4
|
+
The adapter manages contacts, deals and their relationships using a private/static token or a project-owned OAuth
|
|
5
|
+
registration. Each-user connections are isolated by application subject identity.
|
|
6
|
+
|
|
7
|
+
## Configure access through the console
|
|
8
|
+
|
|
9
|
+
1. As a HubSpot super admin, select the account that owns the CRM data.
|
|
10
|
+
2. Open **Development → Legacy apps → Create legacy app → Private**.
|
|
11
|
+
3. In **Basic Info**, enter an identifying name and description.
|
|
12
|
+
4. Open **Scopes → Add new scope**, find `crm.objects.contacts.read`, select
|
|
13
|
+
it, and click **Update**. For writes add `crm.objects.contacts.write`; for deals/pipelines add
|
|
14
|
+
`crm.objects.deals.read`, and for deal writes/relationships add
|
|
15
|
+
`crm.objects.deals.write`. Match the selected permissions in configuration.
|
|
16
|
+
5. Click **Create app**, then **Continue creating**. Open the app's **Auth** tab
|
|
17
|
+
and use **Show token → Copy**. Store the token in backend Env.
|
|
18
|
+
6. In `integrations.json`, use provider `hubspot`, mode `shared` or `assistant`,
|
|
19
|
+
`scopes: ["crm.objects.contacts.read"]`, and authentication `{ "method": "api-key", "secretRef":
|
|
20
|
+
"env:HUBSPOT_API_KEY" }`. Verify through `connectApiKey`.
|
|
21
|
+
7. Use the Auth tab to rotate/revoke the token and update its Env value.
|
|
22
|
+
[Private-app console guide](https://developers.hubspot.com/docs/apps/legacy-apps/private-apps/overview).
|
|
23
|
+
|
|
24
|
+
## Runtime and AI composition
|
|
25
|
+
|
|
26
|
+
`contacts.list` calls `GET https://api.hubapi.com/crm/objects/2026-09/contacts`
|
|
27
|
+
with a Bearer token. Inputs: `limit` (1–100, default 20), optional `after`,
|
|
28
|
+
and `archived` (default false). Results include `results` and optional
|
|
29
|
+
`paging.next.after`, which the caller passes to the next request. This operation
|
|
30
|
+
also verifies the credential. See the [contacts contract](https://developers.hubspot.com/docs/api-reference/latest/crm/objects/contacts/guide).
|
|
31
|
+
|
|
32
|
+
Compose the [API-key pattern](../patterns/api-key-connection/PATTERN.md) with
|
|
33
|
+
this provider. A new-platform static token uses the same authentication mechanism;
|
|
34
|
+
OAuth consent and refresh use the existing connection lifecycle.
|
|
35
|
+
|
|
36
|
+
## Provisioning automation and quota separation
|
|
37
|
+
|
|
38
|
+
HubSpot's current developer platform supports CLI provisioning after account
|
|
39
|
+
authentication. An AI can prepare distinct app UIDs, scopes and configuration,
|
|
40
|
+
then use the documented `hs project create` and upload workflow. Choose private
|
|
41
|
+
distribution/static authentication for one account, or an appropriate OAuth
|
|
42
|
+
distribution for multiple accounts. Operator account authorization and installation
|
|
43
|
+
still occur. The legacy console route above is available without requiring this
|
|
44
|
+
developer-project workflow.
|
|
45
|
+
[CLI app creation](https://developers.hubspot.com/docs/apps/developer-platform/build-apps/create-an-app),
|
|
46
|
+
[authentication modes](https://developers.hubspot.com/docs/apps/developer-platform/build-apps/authentication/overview).
|
|
47
|
+
|
|
48
|
+
Create a private app and credentials for the application owner. Private-app burst
|
|
49
|
+
limits may be app-specific while daily limits are account-wide; two private apps
|
|
50
|
+
in one account therefore do not fully isolate capacity. Application usage must
|
|
51
|
+
respect both boundaries. Tests simulate pagination, file persistence, key rotation,
|
|
52
|
+
cross-app isolation, bad credentials and rate limits. No CRM account was contacted.
|
|
53
|
+
|
|
54
|
+
## OAuth registration and project setup
|
|
55
|
+
|
|
56
|
+
1. Follow the [developer-project guide](https://developers.hubspot.com/docs/apps/developer-platform/build-apps/create-an-app)
|
|
57
|
+
to authenticate HubSpot CLI and run `hs project create`. Select App and OAuth.
|
|
58
|
+
2. Configure `src/app/app-hsmeta.json`: `config.auth.type` is `oauth`,
|
|
59
|
+
`redirectUrls` contains this project's exact Suggested callback URL, and
|
|
60
|
+
`requiredScopes` includes `oauth` and `crm.objects.contacts.read`. Upload with
|
|
61
|
+
`hs project upload`. The callback belongs to the application backend.
|
|
62
|
+
3. Run `hs project open`, choose the app under Project Components, and open
|
|
63
|
+
**Auth → Client credentials**. Copy Client ID into the integration form.
|
|
64
|
+
Save configuration, use **Set credential in Env** for the client secret, and
|
|
65
|
+
**Set callback in Env** for the exact registered callback.
|
|
66
|
+
4. Keep both permissions selected. Shared access connects from project settings;
|
|
67
|
+
per-user access connects from the application's account screen. Application
|
|
68
|
+
login is separate. Tokens and refresh credentials stay in its private store.
|
|
69
|
+
5. Disconnect deletes the local grant. Remove the installation in HubSpot
|
|
70
|
+
separately when provider access must end. No provider-wide revocation is
|
|
71
|
+
implemented here.
|
|
72
|
+
|
|
73
|
+
Private OAuth distribution is limited to ten allowlisted HubSpot accounts; use
|
|
74
|
+
HubSpot's marketplace distribution process for broader distribution. See the
|
|
75
|
+
[authentication overview](https://developers.hubspot.com/docs/apps/developer-platform/build-apps/authentication/overview).
|
|
76
|
+
The normal installation is account-level: a per-user local grant does not promise
|
|
77
|
+
that HubSpot restricts records to that person's ownership. The app must enforce
|
|
78
|
+
business authorization. See [app access configuration](https://developers.hubspot.com/docs/apps/developer-platform/build-apps/app-configuration).
|
|
79
|
+
|
|
80
|
+
The [current token API](https://developers.hubspot.com/docs/api-reference/latest/authentication/manage-oauth-tokens)
|
|
81
|
+
uses `https://api.hubspot.com/oauth/2026-09/token` for code and refresh exchanges.
|
|
82
|
+
Client credentials are form-body values; the documented confidential flow does
|
|
83
|
+
not use PKCE. Authorization opens `https://app.hubspot.com/oauth/authorize`.
|
|
84
|
+
The adapter converts the response's `scopes` array into the shared runtime's
|
|
85
|
+
permission format and rejects malformed grants. Missing contact permission
|
|
86
|
+
prevents contact reads even after refresh. There is no central token gateway.
|
|
87
|
+
|
|
88
|
+
Three OAuth cases and two API-key cases passed with controlled fixtures. Both
|
|
89
|
+
credential screens were rendered and reviewed on 2026-09-12. No live installation,
|
|
90
|
+
CRM request or generated-app execution is claimed.
|
|
91
|
+
|
|
92
|
+
## Lead-to-deal workflow
|
|
93
|
+
|
|
94
|
+
The current [contact](https://developers.hubspot.com/docs/api-reference/latest/crm/objects/contacts/guide),
|
|
95
|
+
[deal](https://developers.hubspot.com/docs/api-reference/latest/crm/objects/deals/guide),
|
|
96
|
+
[association](https://developers.hubspot.com/docs/api-reference/latest/crm/associations/associate-records/guide)
|
|
97
|
+
and [pipeline](https://developers.hubspot.com/docs/api-reference/latest/crm/pipelines/guide)
|
|
98
|
+
contracts were reviewed 2026-09-13. Operations use the documented 2026-09 routes.
|
|
99
|
+
|
|
100
|
+
`contacts` and `deals` each expose `.list`, `.get`, `.create`, `.update`.
|
|
101
|
+
Lists accept limit/after, archived, comma-separated properties and associations;
|
|
102
|
+
get takes numeric-string `id` plus those read fields except limit/after. Writes
|
|
103
|
+
accept a `properties` object of 1–100 string values, at most 100KB. Empty string
|
|
104
|
+
clears a value. Contact creation requires email, firstname or lastname. Deal
|
|
105
|
+
creation requires dealname and the internal dealstage ID; set pipeline when the
|
|
106
|
+
account has multiple pipelines. `.update` requires `id` and does not replace
|
|
107
|
+
unspecified properties. HubSpot validates property types and business rules.
|
|
108
|
+
|
|
109
|
+
`pipelines.list` returns deal pipeline/stage IDs. `deals.associateContact` takes
|
|
110
|
+
numeric-string `dealId` and `contactId`, creating the default unlabeled relation.
|
|
111
|
+
It requires both contact and deal write permissions. Object reads/writes require
|
|
112
|
+
the corresponding `crm.objects.contacts|deals.read|write` scope. Update provider
|
|
113
|
+
permissions and consent as needed; ticking this screen cannot grant provider access.
|
|
114
|
+
|
|
115
|
+
```js
|
|
116
|
+
// `connection`, `context` and integrationId come from the app-owned runtime.
|
|
117
|
+
const call = (operation, input = {}) => connection.invoke({ context, integrationId, operation, input });
|
|
118
|
+
const pipelines = await call("pipelines.list");
|
|
119
|
+
// Select the intended pipeline and stage from returned IDs; never assume a label.
|
|
120
|
+
const pipeline = pipelines.results.find(item => item.id === selectedPipelineId);
|
|
121
|
+
const contact = await call("contacts.create", { properties: { email: customer.email, firstname: customer.name } });
|
|
122
|
+
const deal = await call("deals.create", { properties: {
|
|
123
|
+
dealname: "Grooming booking", pipeline: pipeline.id, dealstage: selectedStageId, amount: "80.00"
|
|
124
|
+
} });
|
|
125
|
+
await call("deals.associateContact", { contactId: contact.id, dealId: deal.id });
|
|
126
|
+
// On the app's authorized booking-confirmed event:
|
|
127
|
+
await call("deals.update", { id: deal.id, properties: { dealstage: confirmedStageId } });
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
The application owns triggering events, record access checks and duplicate
|
|
131
|
+
prevention. Persist returned IDs; reconcile partial/uncertain writes instead of
|
|
132
|
+
blindly retrying creation. The library performs no hidden workflow or sync.
|
|
133
|
+
CLI JSKIT apps use the same JSON/Env and exported provider without the editor;
|
|
134
|
+
other frameworks use their native HTTP/HubSpot client with the same project
|
|
135
|
+
configuration and operation sequence. Keys and tokens stay server-side.
|
|
136
|
+
|
|
137
|
+
**LIMITATIONS:** No CRM dashboard, workflow designer/engine, webhook receiver,
|
|
138
|
+
bulk import/sync, custom association labels, company/ticket API or archive/delete
|
|
139
|
+
operations. Example: a booking app can create a linked deal and advance its stage,
|
|
140
|
+
but it must supply the trigger and cannot import an entire CRM automatically.
|
|
141
|
+
Editor-assistant attachment is deferred. Fixture success does not prove live CRM
|
|
142
|
+
installation, property availability, subscription features or generated-app use.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
# incident.io
|
|
2
|
+
|
|
3
|
+
Import `incidentIoProvider` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/incident-io`.
|
|
5
|
+
The adapter reads and manages incidents, follow-ups and catalogue entries,
|
|
6
|
+
resolves alerts and reads schedules using an organization's API key.
|
|
7
|
+
|
|
8
|
+
## Configure access
|
|
9
|
+
|
|
10
|
+
1. Select the intended incident.io organization. Open **Settings**, then
|
|
11
|
+
**API keys**, and create a key named for this application.
|
|
12
|
+
2. Grant `viewer` access to the relevant incidents. Review account and team
|
|
13
|
+
permissions before creating the key; for writes add Create incidents / Edit incidents, for alert/schedule
|
|
14
|
+
reads choose View on-call resources / Read schedules, and for catalogue
|
|
15
|
+
access choose View catalog / Manage catalog. Inspect each permission
|
|
16
|
+
scopes badge: follow-up writes require `follow_ups.create` and
|
|
17
|
+
`follow_ups.update`; alert resolution requires `alerts.resolve`. Restrict
|
|
18
|
+
team-scoped permissions to intended teams. The token cannot exceed your
|
|
19
|
+
own authority.
|
|
20
|
+
3. Copy its value into backend Env as `INCIDENT_IO_API_KEY`.
|
|
21
|
+
4. Save provider `incident-io`, mode `shared` or `assistant`, `scopes: []`,
|
|
22
|
+
authentication
|
|
23
|
+
`{ "method": "api-key", "secretRef": "env:INCIDENT_IO_API_KEY" }`.
|
|
24
|
+
5. In the form Save configuration, choose Set credential in Env and store the
|
|
25
|
+
key, then return to Connect account. CLI apps run `connectApiKey`. It verifies incident access by reading the list, not by
|
|
26
|
+
creating an incident. Manage or revoke the provider key from API keys;
|
|
27
|
+
local disconnect does not revoke it remotely.
|
|
28
|
+
[API introduction](https://docs.incident.io/api-reference/introduction).
|
|
29
|
+
|
|
30
|
+
## Runtime and AI composition
|
|
31
|
+
|
|
32
|
+
`incidents.list` uses `GET https://api.incident.io/v2/incidents` with Bearer
|
|
33
|
+
authorization. Inputs are `page_size` (1–500, default 25), optional `after`,
|
|
34
|
+
and `sort_by` (`created_at_newest_first`, the default, or
|
|
35
|
+
`created_at_oldest_first`). The response retains incident records and optional
|
|
36
|
+
`pagination_meta`. Pass its `after` value for the next page; absence of paging
|
|
37
|
+
metadata is valid. The fragment does not implement all server-side filters.
|
|
38
|
+
[Endpoint schema](https://docs.incident.io/openapi/tags/incidents-v2.json).
|
|
39
|
+
|
|
40
|
+
The [API-key pattern](../patterns/api-key-connection/PATTERN.md) supplies
|
|
41
|
+
configuration, connection-service and JSON file-store composition for CLI or
|
|
42
|
+
editor consumers. The application decides which users can read its shared
|
|
43
|
+
incident data.
|
|
44
|
+
|
|
45
|
+
## Automation and application ownership
|
|
46
|
+
|
|
47
|
+
After an administrator creates a bootstrap key with `api_keys_manage`, an AI
|
|
48
|
+
can provision additional keys through `POST /v1/api_keys`. Supply a name,
|
|
49
|
+
account `role_names`, and any intended team IDs/team roles. The caller may
|
|
50
|
+
delegate only a subset of its own authority; the API cannot delegate
|
|
51
|
+
`api_keys_manage`. Capture the returned secret in the backend environment.
|
|
52
|
+
Key creation is an administrative action, not part of connection verification.
|
|
53
|
+
[Key API schema](https://docs.incident.io/openapi/tags/api-keys-v1.json).
|
|
54
|
+
|
|
55
|
+
Application keys can be provisioned and revoked independently, but shared
|
|
56
|
+
provider limits may still apply. Renaming keys is insufficient proof of isolated
|
|
57
|
+
capacity. The application owner supplies its authorized key through private Env.
|
|
58
|
+
|
|
59
|
+
Tests cover ordering, paging, omitted metadata, malformed results, restart,
|
|
60
|
+
rotation, isolation and 401/403/429 failures without live incident access.
|
|
61
|
+
|
|
62
|
+
## Incident recovery and catalogue operations
|
|
63
|
+
|
|
64
|
+
Contracts reviewed 2026-09-13 from the provider's OpenAPI:
|
|
65
|
+
[incidents](https://docs.incident.io/openapi/tags/incidents-v2.json),
|
|
66
|
+
[follow-ups](https://docs.incident.io/openapi/tags/follow-ups-v2.json),
|
|
67
|
+
[alerts](https://docs.incident.io/openapi/tags/alerts-v2.json),
|
|
68
|
+
[schedules](https://docs.incident.io/openapi/tags/schedules-v2.json),
|
|
69
|
+
[catalogue](https://docs.incident.io/openapi/tags/catalog-v3.json).
|
|
70
|
+
|
|
71
|
+
- `incidents.get({id})`, `.create({idempotency_key, visibility, name?, summary?,
|
|
72
|
+
severity_id?, incident_status_id?, incident_type_id?, mode?})`; mode defaults
|
|
73
|
+
to standard. Set public/private visibility explicitly. Standard incidents can
|
|
74
|
+
create Slack announcements. Retain the event's idempotency key across retries.
|
|
75
|
+
- `incidents.update({id, incident, notify_incident_channel})` edits only supplied
|
|
76
|
+
name, summary, severity_id or incident_status_id. The notification choice is
|
|
77
|
+
mandatory. Copy status/severity IDs from your account's records/API, not labels.
|
|
78
|
+
- `followUps.list({incident_id?, incident_mode?, assignee_team_id?})`, `.get({id})`,
|
|
79
|
+
`.create({incident_id,title,description?,assignee_id?,assignee_team_id?,
|
|
80
|
+
follow_up_category_id?,follow_up_priority_option_id?})`; `.update` takes `id`,
|
|
81
|
+
required current title and status, plus those optional editable fields.
|
|
82
|
+
Status is outstanding/completed/deleted/not_doing. Fetch the current record
|
|
83
|
+
before updating; this is the provider's PUT contract, not a partial PATCH.
|
|
84
|
+
- `alerts.list({page_size?,after?})` (maximum 50), `.get({id})`, `.resolve({id})`.
|
|
85
|
+
Already-resolved alerts are a provider no-op. Externally resolved sources can
|
|
86
|
+
return 422; resolve those in their source system. Private alerts need provider
|
|
87
|
+
permission and may otherwise appear as 404.
|
|
88
|
+
- `schedules.list({page_size?,after?})` caps pages at 25 to retain next_shifts;
|
|
89
|
+
`.get({id})` reads a schedule. No rota creation or override management.
|
|
90
|
+
- `catalog.types()`, `.list({catalog_type_id,page_size?,after?,identifier?})`
|
|
91
|
+
(maximum 250), `.get({id})`, `.create({catalog_type_id,name,attribute_values,
|
|
92
|
+
external_id?})`, `.update({id,name,attribute_values,external_id?})`.
|
|
93
|
+
Bind attribute IDs to `{value:{literal:"..."}}` or
|
|
94
|
+
`{array_value:[{literal:"..."}]}`. Maximum 250 attributes / 100KB, with up to
|
|
95
|
+
100 array values. Fetch existing values and send the intended full map when
|
|
96
|
+
updating. Matching external_id/catalog_type_id on creation can update an
|
|
97
|
+
existing entry; authorize that target first. Provider schemas determine which
|
|
98
|
+
attribute IDs/types are valid.
|
|
99
|
+
|
|
100
|
+
For example, an app receives its own outage event, creates an incident with a
|
|
101
|
+
stable idempotency key, assigns a follow-up, reads the next on-call shift and
|
|
102
|
+
updates the recovery summary. After recovery it explicitly resolves an eligible
|
|
103
|
+
alert and marks the follow-up completed. All triggers, authorization, correlation
|
|
104
|
+
IDs and retry/reconciliation decisions belong to that app. The connector performs
|
|
105
|
+
one requested operation at a time; verification never creates incidents.
|
|
106
|
+
|
|
107
|
+
The UI, CLI and AI-written Node apps use the same JSON/Env and exported runtime.
|
|
108
|
+
Other frameworks use their native HTTP client with the same configuration and
|
|
109
|
+
provider contracts. No editor or JSKIT process is required in their deployment.
|
|
110
|
+
No OAuth registration/callback is needed. AI may prepare configuration and key
|
|
111
|
+
provisioning after an authorized bootstrap key; the owner supplies initial access.
|
|
112
|
+
|
|
113
|
+
**LIMITATIONS:** No incident dashboard, scheduling/paging engine, alert ingestion,
|
|
114
|
+
workflow engine, webhook receiver, postmortem importer, custom-field/role editing,
|
|
115
|
+
catalogue schema editing or bulk synchronizer. Example: an app can show the next
|
|
116
|
+
shift and resolve an alert, but cannot generate a rota or start monitoring servers
|
|
117
|
+
just by connecting. Editor-assistant attachment is deferred. Fixture tests do not
|
|
118
|
+
prove live delivery, role entitlement or provider-side workflow effects.
|