@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/sentry.md
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Sentry
|
|
2
|
+
|
|
3
|
+
Import `sentryProvider` and `registerSentryClient` from
|
|
4
|
+
`@jskit-ai/connectors-catalog/server/sentry`.
|
|
5
|
+
|
|
6
|
+
The connector uses Sentry's hosted MCP service for an explicitly composed
|
|
7
|
+
assistant. It does not configure SDK event ingestion, a DSN or application login.
|
|
8
|
+
Vibe64 coding-assistant attachment remains deferred. Saving this configuration
|
|
9
|
+
alone does not give editor chat access to Sentry.
|
|
10
|
+
|
|
11
|
+
## Configure access
|
|
12
|
+
|
|
13
|
+
1. Open the intended organization in Sentry. Copy its slug from the URL, then
|
|
14
|
+
open Project Settings and copy the project slug if restricting to one project.
|
|
15
|
+
Use slugs, not display names or numeric IDs. Organization selection is required;
|
|
16
|
+
project selection is recommended.
|
|
17
|
+
2. Make the assistant host serve its own HTTPS OAuth callback. In Vibe64, enter
|
|
18
|
+
it in **Suggested callback URL**, then choose **Register client and connect**.
|
|
19
|
+
From a trusted backend or CLI instead, call `registerSentryClient` with `clientName`, `callbackUrl`
|
|
20
|
+
and `scopes` (start with `org:read`). It registers at
|
|
21
|
+
`https://mcp.sentry.dev/oauth/register`. Registration is an explicit action;
|
|
22
|
+
inspect an uncertain result before retrying.
|
|
23
|
+
3. Store the returned client ID in the portable registration and the secret in
|
|
24
|
+
private Env. Set the exact callback in Env too. Select OAuth and assistant
|
|
25
|
+
ownership, with `settings.organizationSlug` and optional `settings.projectSlug`.
|
|
26
|
+
This is registration with the MCP service, not a Sentry REST OAuth application.
|
|
27
|
+
4. Connect through the application's OAuth flow and review Sentry's consent.
|
|
28
|
+
The configuration offers organization read and project/team/event write scopes.
|
|
29
|
+
Sentry's granted MCP skills and account permissions also determine the tools
|
|
30
|
+
available. A configured scope does not independently grant access.
|
|
31
|
+
5. Reconnect when access expires or the selected resource changes. Local
|
|
32
|
+
disconnect removes the saved grant; provider-side permissions remain separate.
|
|
33
|
+
|
|
34
|
+
The same portable configuration is usable without the editor:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"schemaVersion": 1,
|
|
39
|
+
"registrations": {
|
|
40
|
+
"sentry-client": {
|
|
41
|
+
"source": "own",
|
|
42
|
+
"clientId": "REPLACE_WITH_REGISTERED_CLIENT_ID",
|
|
43
|
+
"clientSecretRef": "env:SENTRY_CLIENT_SECRET",
|
|
44
|
+
"callbackUrlRef": "env:SENTRY_CALLBACK_URL"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"integrations": {
|
|
48
|
+
"debugging": {
|
|
49
|
+
"provider": "sentry",
|
|
50
|
+
"accountMode": "assistant",
|
|
51
|
+
"scopes": ["org:read"],
|
|
52
|
+
"authentication": { "method": "oauth2", "registrationRef": "sentry-client" },
|
|
53
|
+
"settings": { "organizationSlug": "your-org", "projectSlug": "your-project" }
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Supply the actual client secret and callback through the application's Env.
|
|
60
|
+
Compose `createConnectionService` with this configuration, `sentryProvider`,
|
|
61
|
+
the application's encrypted store, reference resolver and authorization callback.
|
|
62
|
+
Use `beginAuthorization` and `completeAuthorization` for the browser round trip;
|
|
63
|
+
invoke `tools.list`/`tools.call` only under the owning application's authenticated
|
|
64
|
+
context. The CLI/operator also needs a backend capable of receiving the callback.
|
|
65
|
+
|
|
66
|
+
## Runtime and ownership
|
|
67
|
+
|
|
68
|
+
`tools.list` discovers available tool schemas, with an explicit optional cursor.
|
|
69
|
+
`tools.call` takes `name` and `arguments`; the host must authorize that exact
|
|
70
|
+
request before provider traffic. Do not hardcode tool availability from examples.
|
|
71
|
+
The selected resource is
|
|
72
|
+
`https://mcp.sentry.dev/mcp/{organizationSlug}[/{projectSlug}]` for both OAuth and
|
|
73
|
+
MCP requests. The provider constrains that resource; the application still owns
|
|
74
|
+
caller authorization and review of any triage or write operation.
|
|
75
|
+
|
|
76
|
+
The application owns tokens, encrypted persistence, callback execution and
|
|
77
|
+
refresh. CLI applications use the ordinary connection service without Vibe64.
|
|
78
|
+
Other frameworks consume the same configuration and Env names using their native
|
|
79
|
+
OAuth/MCP libraries, without importing JavaScript or running a Node sidecar.
|
|
80
|
+
The editor's subscription does not supply a Sentry account or quota.
|
|
81
|
+
|
|
82
|
+
## Pre-release configuration change
|
|
83
|
+
|
|
84
|
+
The previous Sentry REST fragment used `api-key` and `organizations.list`.
|
|
85
|
+
Replace that declaration with the MCP OAuth registration and assistant mode
|
|
86
|
+
above, set the intended organization/project, and connect again. A personal
|
|
87
|
+
Sentry token is not the MCP OAuth client secret. Replace REST operation calls
|
|
88
|
+
with explicit MCP discovery and authorized tool calls. No alias or automatic
|
|
89
|
+
conversion retains the old connection; remove its local record through its
|
|
90
|
+
owning application and review whether its old Env token is still used elsewhere.
|
|
91
|
+
|
|
92
|
+
## Verification and limitations
|
|
93
|
+
|
|
94
|
+
Two focused tests cover resource and registration validation. Seven OAuth/MCP
|
|
95
|
+
tests cover consent, PKCE, encrypted persistence, refresh, owner/resource
|
|
96
|
+
isolation, issue details, exact tool authorization, errors and cancellation;
|
|
97
|
+
those seven also pass through installed public package exports. Public editor
|
|
98
|
+
registration has a passing owner/Env test, and phone/desktop browser checks cover
|
|
99
|
+
registration, consent cancellation, reconnect, reload and disconnect. All use
|
|
100
|
+
controlled fixtures; live tool schemas, consent and account behavior are unverified.
|
|
101
|
+
The previous REST organization probe is replaced without a compatibility alias.
|
|
102
|
+
|
|
103
|
+
The official repository also documents a remote `Sentry-Bearer` token alternative,
|
|
104
|
+
distinct from OAuth `Bearer`. That alternative is not implemented here yet.
|
|
105
|
+
|
|
106
|
+
Sources: [hosted MCP instructions](https://mcp.sentry.dev/),
|
|
107
|
+
[official implementation](https://github.com/getsentry/sentry-mcp/blob/main/packages/mcp-cloudflare/src/server/index.ts),
|
|
108
|
+
[resource binding](https://github.com/getsentry/sentry-mcp/blob/main/packages/mcp-cloudflare/src/server/protected-resource-metadata.ts),
|
|
109
|
+
[OAuth metadata](https://github.com/getsentry/sentry-mcp/blob/main/packages/mcp-cloudflare/src/server/authorization-server-metadata.ts),
|
|
110
|
+
[scope definitions](https://github.com/getsentry/sentry-mcp/blob/main/packages/mcp-core/src/scopes.ts).
|
|
111
|
+
Public discovery requests returned HTTP 403 from the development environment;
|
|
112
|
+
source evidence does not establish successful live consent.
|
package/docs/sevdesk.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Sevdesk
|
|
2
|
+
|
|
3
|
+
Import `sevdeskProvider` from `@jskit-ai/connectors-catalog/server/sevdesk`.
|
|
4
|
+
This fragment verifies an account API token and lists contacts, including people
|
|
5
|
+
by default. Vibe64 labels its credential field **API token reference**.
|
|
6
|
+
|
|
7
|
+
## Provider setup
|
|
8
|
+
|
|
9
|
+
1. Sign into the intended sevdesk account with permission to view its API token.
|
|
10
|
+
Open **Erweiterungen → Integrationen**.
|
|
11
|
+
2. Find **API-Token für Integrationen** near the top. Choose **Einblenden**,
|
|
12
|
+
enter your password, then copy the revealed token. Some plans also expose
|
|
13
|
+
**Erweiterungen → API**, with the same reveal/password step.
|
|
14
|
+
3. Store the value as `SEVDESK_API_TOKEN` in the backend environment. Add
|
|
15
|
+
Sevdesk in Vibe64 and enter `env:SEVDESK_API_TOKEN` in **API token reference**.
|
|
16
|
+
The portable file contains that reference, never the revealed token.
|
|
17
|
+
|
|
18
|
+
This retrieves an existing credential; it is not a new OAuth-app registration.
|
|
19
|
+
[Provider token instructions](https://hilfe.sevdesk.de/de/articles/9374740-wo-finde-ich-meinen-api-token-in-sevdesk).
|
|
20
|
+
|
|
21
|
+
## Configuration and library calls
|
|
22
|
+
|
|
23
|
+
```json
|
|
24
|
+
{
|
|
25
|
+
"schemaVersion": 1,
|
|
26
|
+
"registrations": {},
|
|
27
|
+
"integrations": {
|
|
28
|
+
"contacts": {
|
|
29
|
+
"provider": "sevdesk",
|
|
30
|
+
"displayName": "Business contacts",
|
|
31
|
+
"accountMode": "shared",
|
|
32
|
+
"scopes": [],
|
|
33
|
+
"authentication": { "method": "api-key", "secretRef": "env:SEVDESK_API_TOKEN" }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The shared authentication method is named `api-key`; this provider's UI and
|
|
40
|
+
documentation call its value a token. Compose `providers: [sevdeskProvider]`
|
|
41
|
+
using the [API-key pattern](../patterns/api-key-connection/PATTERN.md), an
|
|
42
|
+
application authorization policy and the file connection store. CLI and editor
|
|
43
|
+
use the same configuration. Runtime connection records remain text files
|
|
44
|
+
outside exported source, with no database requirement.
|
|
45
|
+
|
|
46
|
+
```js
|
|
47
|
+
await connections.connectApiKey({ context, integrationId: "contacts" });
|
|
48
|
+
const page = await connections.invoke({
|
|
49
|
+
context, integrationId: "contacts", operation: "contacts.list",
|
|
50
|
+
input: { limit: 100, offset: 0, countAll: true }
|
|
51
|
+
});
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The provider requires the token directly in `Authorization`, without a Bearer
|
|
55
|
+
prefix. Requests use `GET https://my.sevdesk.de/api/v1/Contact`.
|
|
56
|
+
`limit` accepts 1–1000; `offset` skips records; `countAll: true` asks for a
|
|
57
|
+
`total`, which the provider can return as a numeric string. The collection is
|
|
58
|
+
in `objects`. With `depth: 1`, contacts include organizations and people;
|
|
59
|
+
the provider's normal depth-zero listing includes organizations only.
|
|
60
|
+
Its API documentation identifies credentials with administrator users.
|
|
61
|
+
[API documentation](https://api.sevdesk.de/).
|
|
62
|
+
|
|
63
|
+
This fragment defaults to `limit: 100`, `offset: 0`, `countAll: false` and
|
|
64
|
+
`depth: 1`. An application can explicitly choose `depth: 0`. Integer pagination
|
|
65
|
+
is required and the local offset cap is 1000000. Results preserve provider
|
|
66
|
+
fields, accept empty collections and validate `total` when present. Request
|
|
67
|
+
subsequent offsets explicitly; no background crawl occurs. Text searches,
|
|
68
|
+
embedded related objects and writes are not implemented.
|
|
69
|
+
|
|
70
|
+
Requests stay on the fixed HTTPS origin and reject redirects. A changed token
|
|
71
|
+
is resolved on the next call; invalid credentials require verification again.
|
|
72
|
+
Disconnect removes local state and does not revoke the provider token or delete
|
|
73
|
+
its owning user. Account/user lifecycle changes belong in the provider console.
|
|
74
|
+
The application must authorize access to this shared directory; reading a
|
|
75
|
+
contact does not sign that person into the application.
|
|
76
|
+
|
|
77
|
+
## Automation and application ownership
|
|
78
|
+
|
|
79
|
+
An AI can write the config, environment reference, library composition and
|
|
80
|
+
contact-list code. The reviewed documents describe a password-confirmed token
|
|
81
|
+
reveal, not a public API for provisioning accounts or generating these tokens.
|
|
82
|
+
Keep that initial step with the account owner; do not fabricate a creation or
|
|
83
|
+
rotation endpoint.
|
|
84
|
+
|
|
85
|
+
The application owns its token and private Env reference. Two
|
|
86
|
+
references to one token still access one account. Do not promise separate
|
|
87
|
+
provider credentials or quota merely by changing those names, and do not create
|
|
88
|
+
provider users solely as an assumed quota workaround. Customer-owned
|
|
89
|
+
connections use each customer's authorized token. Provider limits and any
|
|
90
|
+
independent-capacity arrangement need confirmation. The application enforces
|
|
91
|
+
its own usage limits. No callback URL is
|
|
92
|
+
used, so editor VM and app hosting domains do not affect this flow.
|
|
93
|
+
|
|
94
|
+
## Focused evidence
|
|
95
|
+
|
|
96
|
+
Tests use simulated HTTP replies and real temporary encrypted JSON storage.
|
|
97
|
+
They cover raw authorization, page defaults, explicit organization-only reads,
|
|
98
|
+
numeric-string totals, invalid inputs/envelopes, restart, rotation, ownership
|
|
99
|
+
and disconnect. Editor automation verifies the token label, reference-only
|
|
100
|
+
storage and save/reload. Live provider use, account creation and sample-app
|
|
101
|
+
generation are excluded.
|
|
102
|
+
|
|
103
|
+
## Existing-scope closeout — 13 September 2026
|
|
104
|
+
|
|
105
|
+
Contact listing only, including people by default (`depth: 1`), explicit organization-only depth, bounded offset pagination and numeric-string totals. The project supplies its existing raw API token through Env. No contact detail/search/create/update/delete, related-object expansion, invoices, orders, vouchers or bookkeeping operations are implemented. There is no OAuth/app registration, application-user login, token-issuance automation, automatic pagination/retry or remote token revocation. Applications still own their UI, authorization and pagination; disconnect removes local connection state. Deferred work is the missing contact/accounting operations and their validation, permissions, setup guidance and tests. No live Sevdesk account, provider-console login or generated-app run was tested.
|
|
106
|
+
|
|
107
|
+
Three selected source tests and the same three installed-package tests passed on September 13. They cover credential verification, encrypted file restart, rotation, isolation, disconnect, pagination/depth/totals and redacted invalid-input/provider failures. Existing shared business-token UI evidence is retained; no fresh browser run or form change is claimed.
|
package/docs/shopify.md
ADDED
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# Shopify
|
|
2
|
+
|
|
3
|
+
The initial runtime connects an existing store, lists products, and creates,
|
|
4
|
+
updates or deletes one product per call. It uses GraphQL Admin API **2026-07**.
|
|
5
|
+
It does not generate a storefront or activate a store. The portable assistant
|
|
6
|
+
policy includes the captured lifecycle, variant, discount and price-rule choices;
|
|
7
|
+
those choices do not claim that the corresponding provider operation exists yet.
|
|
8
|
+
|
|
9
|
+
## Configuration and ownership
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"schemaVersion": 1,
|
|
14
|
+
"registrations": {
|
|
15
|
+
"shopify-own": {
|
|
16
|
+
"source": "own",
|
|
17
|
+
"grantType": "client_credentials",
|
|
18
|
+
"clientId": "your-shopify-client-id",
|
|
19
|
+
"clientSecretRef": "env:SHOPIFY_CLIENT_SECRET"
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"integrations": {
|
|
23
|
+
"shopify": {
|
|
24
|
+
"provider": "shopify",
|
|
25
|
+
"displayName": "Company store",
|
|
26
|
+
"accountMode": "shared",
|
|
27
|
+
"authentication": { "method": "oauth2", "registrationRef": "shopify-own" },
|
|
28
|
+
"settings": { "shopDomain": "your-store.myshopify.com" },
|
|
29
|
+
"scopes": ["read_products", "write_products"],
|
|
30
|
+
"assistantPolicy": {
|
|
31
|
+
"enabled": true,
|
|
32
|
+
"defaultPermission": "ask",
|
|
33
|
+
"actions": { "products.list": "always", "products.delete": "never" }
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Keep the secret value in the application's environment, with the same reference
|
|
41
|
+
used by CLI and editor. For an existing Admin API access token, replace
|
|
42
|
+
`authentication` with `{ "method": "api-key", "secretRef": "env:SHOPIFY_ADMIN_TOKEN" }`
|
|
43
|
+
and remove the unused registration. Storefront tokens, App Automation Tokens,
|
|
44
|
+
client secrets and Customer Account tokens are different credentials.
|
|
45
|
+
|
|
46
|
+
The store is a shared account. Authorize each application user before mapping to
|
|
47
|
+
its stable shared subject. Neither token mode authenticates shoppers or enforces
|
|
48
|
+
each staff member's individual Shopify role. A per-staff installation needs
|
|
49
|
+
Shopify online access tokens and its separate consent flow, still unfinished here.
|
|
50
|
+
An assistant must use a service composed with `executionMode: "assistant"`;
|
|
51
|
+
`accountMode` describes whose connection is used, not who invoked the operation.
|
|
52
|
+
|
|
53
|
+
## Manual setup: app and store in the same organization
|
|
54
|
+
|
|
55
|
+
1. Sign into the [Dev Dashboard](https://dev.shopify.com/) with permission to
|
|
56
|
+
create apps and install them on the target store. Select the organization that
|
|
57
|
+
owns the store. Both app and store must appear in this organization.
|
|
58
|
+
2. Open **Apps → Create app**. Choose the Dev Dashboard creation option, enter
|
|
59
|
+
your application name and create it. An existing app can be selected instead.
|
|
60
|
+
3. Open **Versions → Create a version**. Set the application URL to your actual
|
|
61
|
+
app entry point. Configure the app's access scopes: `read_products` for the
|
|
62
|
+
reader, `write_products` when product changes are required. Release the version.
|
|
63
|
+
A write scope includes reads; the runtime accepts either for product listing.
|
|
64
|
+
4. Install the released app on the intended store and approve its scopes. Update
|
|
65
|
+
the installation when changing scopes; editing local JSON alone grants nothing.
|
|
66
|
+
5. Open the app's **Settings → Credentials**. Copy **Client ID** into the portable
|
|
67
|
+
registration. Put **Client secret** in Env and set its reference in the form.
|
|
68
|
+
6. Find the store's permanent `*.myshopify.com` address and enter it without
|
|
69
|
+
`https://`, paths, ports or a custom storefront domain.
|
|
70
|
+
7. Select **App in your Shopify organization** in the editor. Save configuration.
|
|
71
|
+
The backend or trusted CLI calls `connectClientCredentials` to acquire a token
|
|
72
|
+
and verify a product read before reporting Connected.
|
|
73
|
+
8. Keep the shared subject and application/environment identity stable. The
|
|
74
|
+
runtime persists encrypted connection state and obtains another grant before
|
|
75
|
+
the documented 24-hour token expires. No callback URL is used in this mode.
|
|
76
|
+
|
|
77
|
+
If Shopify reports `shop_not_permitted`, correct ownership/distribution. Installing
|
|
78
|
+
an app on another merchant's store does not make client credentials applicable.
|
|
79
|
+
See [organization authentication](https://shopify.dev/docs/apps/build/authentication-authorization/client-credentials-grant)
|
|
80
|
+
and [credential locations](https://shopify.dev/docs/apps/build/authentication-authorization/manage-credentials).
|
|
81
|
+
|
|
82
|
+
## Manual setup: existing Admin API token
|
|
83
|
+
|
|
84
|
+
For a legacy custom app created in Shopify admin before January 2026, open the
|
|
85
|
+
store's **Settings → Apps and sales channels → Develop apps**, select the app,
|
|
86
|
+
review its Admin API scopes and installation, and use its existing Admin API token.
|
|
87
|
+
If the secret cannot be revealed again, follow Shopify's credential recovery or
|
|
88
|
+
replacement procedure; do not assume the editor can retrieve it. New apps use the
|
|
89
|
+
Dev Dashboard flow instead. See [legacy custom apps](https://shopify.dev/docs/apps/build/authentication-authorization/legacy/admin-custom-apps).
|
|
90
|
+
|
|
91
|
+
Choose **Existing Admin API access token**, enter the secret's Env reference and
|
|
92
|
+
the permanent store domain, and save. The app/CLI calls `connectApiKey`; it performs
|
|
93
|
+
a product read before persisting Connected. Token rotation is read from the same
|
|
94
|
+
reference on subsequent requests. The scopes in configuration limit permitted
|
|
95
|
+
operations locally; Shopify remains the authority for the token's actual rights.
|
|
96
|
+
|
|
97
|
+
## Application registrations, callbacks and domains
|
|
98
|
+
|
|
99
|
+
Shopify's word *online* describes a staff-user access token. It is unrelated to
|
|
100
|
+
the Vibe64 Online product.
|
|
101
|
+
|
|
102
|
+
The application owner creates its Shopify app in the Dev Dashboard, configures
|
|
103
|
+
its distribution, access scopes and application URL, and completes any required
|
|
104
|
+
review. Follow the app/version/release steps above and store its client secret
|
|
105
|
+
in the application's private Env. Public distribution, custom distribution and
|
|
106
|
+
organization-only apps are not interchangeable.
|
|
107
|
+
|
|
108
|
+
The supported client-credentials flow does not require a callback. Merchant
|
|
109
|
+
consent is a separate unfinished flow: it needs the application's actual allowed
|
|
110
|
+
redirect URI, signed Shopify callback validation and the appropriate installation
|
|
111
|
+
lifecycle. Online staff sessions are also unfinished in this adapter. Follow
|
|
112
|
+
Shopify's [authentication guide](https://shopify.dev/docs/apps/build/authentication-authorization)
|
|
113
|
+
and official libraries; do not substitute a generic OAuth callback without
|
|
114
|
+
Shopify's required verification.
|
|
115
|
+
|
|
116
|
+
For that consent flow, changing the callback domain requires updating the app's
|
|
117
|
+
registration and Env. Retain the application's identity and persistent state
|
|
118
|
+
when moving hosts. A token remains bound to its shop and registration; changing
|
|
119
|
+
provider registrations requires a new installation/grant.
|
|
120
|
+
|
|
121
|
+
GraphQL Admin quotas are scoped to an **app/store pair**. Separate registrations
|
|
122
|
+
do not remove store resource limits, Shopify plans or review requirements.
|
|
123
|
+
[API limits](https://shopify.dev/docs/api/usage/limits).
|
|
124
|
+
|
|
125
|
+
## Store creation and claiming
|
|
126
|
+
|
|
127
|
+
For an ordinary partner handover: Dev Dashboard **Stores → Create store → Client
|
|
128
|
+
transfer store**, enter the name and country/region, then create it. To hand over,
|
|
129
|
+
open the **Client transfer** tab, use the store's **⋯ → Transfer store**, enter the
|
|
130
|
+
client email and submit. The client accepts ownership and selects a plan in
|
|
131
|
+
Shopify. Only perform those external actions with the owner's authorization.
|
|
132
|
+
|
|
133
|
+
This is a distinct host lifecycle, not a GraphQL product mutation. Shopify places
|
|
134
|
+
installation restrictions on client transfer stores; dev stores cannot be
|
|
135
|
+
transferred. A transfer also moves the store out of the original organization,
|
|
136
|
+
so organization-only client credentials cannot be assumed to remain usable.
|
|
137
|
+
Vibe64's automatic create/claim workflow and any commercial Shopify arrangement
|
|
138
|
+
are not delivered by this fragment. Do not promise Lovable's trial terms.
|
|
139
|
+
See [client transfer stores](https://shopify.dev/docs/apps/build/stores/client-transfer-stores).
|
|
140
|
+
|
|
141
|
+
## Runtime and assistant authorization
|
|
142
|
+
|
|
143
|
+
Import `shopifyProvider` from `@jskit-ai/connectors-catalog/server/shopify` and
|
|
144
|
+
compose it with `createConnectionService`, the shared file store and a trusted
|
|
145
|
+
reference resolver. Supported provider operations:
|
|
146
|
+
|
|
147
|
+
| Operation | Input | Result |
|
|
148
|
+
|---|---|---|
|
|
149
|
+
| `products.list` | `first` 1–100 (20 default), optional opaque `after`, Shopify search `query` | GraphQL envelope with product nodes and page cursor |
|
|
150
|
+
| `products.create` | `product.title`; optional descriptionHtml, vendor, productType, status, tags | Confirmed product and empty userErrors; defaults to DRAFT |
|
|
151
|
+
| `products.update` | `product.id` (Product GID) plus one or more supported product fields | Confirmed updated product |
|
|
152
|
+
| `products.delete` | `input.id` (Product GID) | Confirmed deletedProductId; synchronous request |
|
|
153
|
+
|
|
154
|
+
No raw GraphQL or caller-supplied destination is accepted. Product IDs are GraphQL
|
|
155
|
+
GIDs, not numbers. Product status does not publish it to sales channels. Price and
|
|
156
|
+
SKU changes belong to variants and are not accepted by these product mutations.
|
|
157
|
+
Mutations are not automatically retried. A timeout may leave a completed Shopify
|
|
158
|
+
change: inspect the store before retrying, particularly after creation.
|
|
159
|
+
|
|
160
|
+
For assistant execution, compose the same service with `executionMode: "assistant"`.
|
|
161
|
+
The existing `authorize(context, request)` callback still verifies application
|
|
162
|
+
access and returns the trusted `applicationId` and `subjectId`. When
|
|
163
|
+
`request.assistantPermission.decision === "ask"`, it must also verify the human's
|
|
164
|
+
approval for that exact action/input and return `approved: true`. No such result
|
|
165
|
+
means `connector_approval_required`; `never` or disabled access stops before any
|
|
166
|
+
credential lookup or provider request. `always` still requires application access.
|
|
167
|
+
The host owns its approval UI, decision persistence, expiry and single-use checks.
|
|
168
|
+
Never copy `approved`, execution mode or owner identity from a browser request.
|
|
169
|
+
|
|
170
|
+
`authorizeAssistantAction({ context, integrationId, action: "claim", input })`
|
|
171
|
+
allows a host to apply the same policy before its own lifecycle operation. It
|
|
172
|
+
performs authorization only, never store creation, claiming or API calls. Use
|
|
173
|
+
`invoke` for the implemented product operations. The lifecycle host must still
|
|
174
|
+
validate its input and satisfy workspace policy. There is no new approval database.
|
|
175
|
+
|
|
176
|
+
The shared form offers access enablement, **Manage all permissions** and all
|
|
177
|
+
captured action choices. Changing the default resets individual overrides; choices
|
|
178
|
+
are `ask`, `always`, `never`. The policy lives outside credential settings, so a
|
|
179
|
+
policy edit does not invalidate a store grant. Workspace-level availability and
|
|
180
|
+
the actual editor assistant tool wiring remain separate unfinished host work.
|
|
181
|
+
|
|
182
|
+
## Automation feasibility and verification
|
|
183
|
+
|
|
184
|
+
AI can author/validate the portable file, wire the shared runtime and file store,
|
|
185
|
+
prepare Shopify app configuration, and perform supported product operations
|
|
186
|
+
through the application's authorized server. CLI/deployment automation can update
|
|
187
|
+
an existing app after an operator establishes its organization and credentials.
|
|
188
|
+
An App Automation Token authenticates Shopify CLI automation; it is not the
|
|
189
|
+
Admin API token used by this runtime.
|
|
190
|
+
|
|
191
|
+
Account/organization creation, merchant consent, review, billing, store transfer
|
|
192
|
+
and any partner agreement require the appropriate human/provider process. A public
|
|
193
|
+
API for silently provisioning both platform apps or reproducing Lovable's special
|
|
194
|
+
create/claim arrangement has not been established. Do not invent one.
|
|
195
|
+
|
|
196
|
+
Local fixture tests cover organization grants and renewal, existing tokens,
|
|
197
|
+
encryption/restart, product operations and bounds, scopes, ownership and store
|
|
198
|
+
isolation, assistant decisions, error responses and cancellation. They make no
|
|
199
|
+
live Shopify calls. A credentialed store is still required to prove installation,
|
|
200
|
+
actual product access, provider quotas and account-specific permissions. The full
|
|
201
|
+
merchant-consent, managed, variant/discount and store lifecycle flows remain open.
|
|
202
|
+
|
|
203
|
+
Operation references: [products](https://shopify.dev/docs/api/admin-graphql/latest/queries/products),
|
|
204
|
+
[productCreate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productCreate),
|
|
205
|
+
[productUpdate](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productUpdate),
|
|
206
|
+
[productDelete](https://shopify.dev/docs/api/admin-graphql/latest/mutations/productDelete).
|