@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/wiz.md
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
# Wiz source scanning
|
|
2
|
+
|
|
3
|
+
Wiz is a project source scanner. Its initial runtime runs an installed Wiz v1 CLI
|
|
4
|
+
against a host-authorised directory and returns a policy verdict plus the report.
|
|
5
|
+
It works independently of application generation, an editor database or a managed
|
|
6
|
+
gateway. It does not connect each application's customer to a personal Wiz account.
|
|
7
|
+
|
|
8
|
+
## Configuration shared by the CLI and editor
|
|
9
|
+
|
|
10
|
+
```json
|
|
11
|
+
{
|
|
12
|
+
"schemaVersion": 1,
|
|
13
|
+
"registrations": {
|
|
14
|
+
"wiz-own": {
|
|
15
|
+
"source": "own",
|
|
16
|
+
"grantType": "client_credentials",
|
|
17
|
+
"clientId": "your-wiz-service-account-id",
|
|
18
|
+
"clientSecretRef": "env:WIZ_CLIENT_SECRET"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
"integrations": {
|
|
22
|
+
"security": {
|
|
23
|
+
"provider": "wiz",
|
|
24
|
+
"displayName": "Workspace source scan",
|
|
25
|
+
"accountMode": "shared",
|
|
26
|
+
"scopes": [],
|
|
27
|
+
"authentication": { "method": "oauth2", "registrationRef": "wiz-own" },
|
|
28
|
+
"settings": {
|
|
29
|
+
"tokenUrl": "https://auth.app.wiz.io/oauth/token",
|
|
30
|
+
"byPolicyHits": "BLOCK"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The optional `settings.policies` string contains comma-separated policy names.
|
|
38
|
+
Omit it to use tenant defaults. `byPolicyHits` accepts `BLOCK`, `AUDIT` or
|
|
39
|
+
`DISABLED`. It controls reported findings, not whether a blocking verdict passes.
|
|
40
|
+
The form stores the display name, service-account ID, secret reference, endpoint,
|
|
41
|
+
policy names and findings filter in ordinary JSON. It also preserves the captured
|
|
42
|
+
Auth0 endpoint `https://auth.wiz.io/oauth/token`, but execution in that mode
|
|
43
|
+
explicitly fails: a compatible CLI authentication mapping has not been verified.
|
|
44
|
+
No arbitrary token URL is accepted or silently substituted.
|
|
45
|
+
|
|
46
|
+
## Manual provider setup
|
|
47
|
+
|
|
48
|
+
1. Sign into your [Wiz portal](https://app.wiz.io/) with permission to create a
|
|
49
|
+
service account. Open **Settings → Access Management → Service Accounts**;
|
|
50
|
+
some portal layouts show **Service Accounts** directly under Settings.
|
|
51
|
+
2. Select **Add Service Account**. Enter a meaningful name and select the Wiz
|
|
52
|
+
projects this account is allowed to scan. Use the account type approved by
|
|
53
|
+
your Wiz administrator for CLI scanning.
|
|
54
|
+
3. Grant `create:security_scans`. Add `read:scan_policies` if the operator needs
|
|
55
|
+
to inspect the relevant policies. These are permissions on the Wiz account;
|
|
56
|
+
the empty local `scopes` array does not grant them.
|
|
57
|
+
4. Create the account, copy its **Client ID** and **Client Secret** from the
|
|
58
|
+
credential dialog, then finish. Store the secret value in the worker's
|
|
59
|
+
environment; put only its reference in source.
|
|
60
|
+
5. Confirm the tenant token endpoint with your Wiz administrator. Select Cognito
|
|
61
|
+
in this runtime. An Auth0 tenant needs the remaining compatible-runner work.
|
|
62
|
+
6. Ask the administrator for any existing CI/CD policy names that must apply.
|
|
63
|
+
Enter those names exactly, separated by commas, or leave the field blank.
|
|
64
|
+
7. Install an approved Wiz v1 CLI on a Linux/macOS scan worker. Use its absolute
|
|
65
|
+
executable path in host configuration. This library never downloads a binary
|
|
66
|
+
or installs scanner dependencies while handling a scan request.
|
|
67
|
+
8. Save the JSON through the CLI or editor. Compose the scanner below and invoke
|
|
68
|
+
a scan explicitly. Saving the form does not verify credentials or start scans.
|
|
69
|
+
|
|
70
|
+
Portal credential navigation is documented in the
|
|
71
|
+
[ServiceNow Wiz setup guide](https://www.servicenow.com/docs/r/servicenow-platform/service-graph-connectors/sgc-cmdb-wiz-setup.html).
|
|
72
|
+
Use the scanner permissions above, rather than that integration's inventory-read
|
|
73
|
+
permissions. Wiz's own [Azure extension](https://marketplace.visualstudio.com/items?itemName=WizCloud.wiz-task)
|
|
74
|
+
documents the CLI service-account permissions. Tenant-specific documentation and
|
|
75
|
+
entitlements still require a Wiz login.
|
|
76
|
+
|
|
77
|
+
## Runtime and ownership
|
|
78
|
+
|
|
79
|
+
Import `createWizScanner` from `@jskit-ai/connectors-catalog/server/wiz`. It is a
|
|
80
|
+
separate runtime; do not pass its definition to `createConnectionService` and
|
|
81
|
+
manufacture an HTTP Connected receipt.
|
|
82
|
+
|
|
83
|
+
```js
|
|
84
|
+
const scanner = createWizScanner({
|
|
85
|
+
configuration,
|
|
86
|
+
executable: installedWizCliPath,
|
|
87
|
+
authorize,
|
|
88
|
+
resolveReference,
|
|
89
|
+
resolveScanTarget,
|
|
90
|
+
timeoutMs: 600_000
|
|
91
|
+
});
|
|
92
|
+
const result = await scanner.scan({ context, integrationId: "security", signal });
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
The host's `authorize(context, request)` checks `source.scan` access and returns
|
|
96
|
+
trusted `applicationId` and `subjectId`. Rejecting returns no identity. Those IDs
|
|
97
|
+
must come from the CLI's established local authority or the server's authenticated
|
|
98
|
+
workspace/project policy, never from browser assertions.
|
|
99
|
+
|
|
100
|
+
`resolveScanTarget(owner, { integrationId, signal })` then supplies
|
|
101
|
+
`{ directory, revision }`: an absolute directory containing an immutable snapshot
|
|
102
|
+
and its revision identifier. The returned result retains this revision so the host
|
|
103
|
+
can mark findings stale after source changes. Creating and releasing the snapshot
|
|
104
|
+
belongs to the host. Symlink access, source mounts, outbound networking, disk and
|
|
105
|
+
resource limits belong to that worker's sandbox; a realpath check is not a sandbox.
|
|
106
|
+
|
|
107
|
+
`resolveReference(reference, owner)` retrieves the client secret. A scan resolves
|
|
108
|
+
it again, so rotation does not require a persisted token grant. The CLI receives
|
|
109
|
+
the account ID and secret through its isolated environment, never command-line
|
|
110
|
+
arguments. It uses a private temporary HOME/cache and working directory, avoiding
|
|
111
|
+
implicit use of the project's `.wiz` configuration. Only host-supplied PATH,
|
|
112
|
+
proxy and CA variables may be added. The application/agent environment is not
|
|
113
|
+
copied into the child process.
|
|
114
|
+
|
|
115
|
+
The runtime's deadline and AbortSignal terminate the POSIX process group and wait
|
|
116
|
+
for process closure before deleting temporary state. Windows applications can
|
|
117
|
+
dispatch to a Linux scan worker; this initial runtime does not implement a native
|
|
118
|
+
Windows process-tree controller. The scanner may contact Wiz and publish findings
|
|
119
|
+
to its portal. Running it is therefore a deliberate provider operation, not local
|
|
120
|
+
configuration validation. Cancellation does not retract already submitted data.
|
|
121
|
+
|
|
122
|
+
The returned value contains `provider`, `integrationId`, `revision`, `policyStatus`
|
|
123
|
+
and `report`. `policyStatus` is `passed`, `warning` or `blocked`; these describe Wiz
|
|
124
|
+
policy results, not a claim that the source is vulnerability-free. The report is
|
|
125
|
+
sensitive source/security data. Present only to authorised readers; escape report
|
|
126
|
+
text and validate any links before rendering. Raw CLI stdout/stderr are not exposed.
|
|
127
|
+
|
|
128
|
+
Authentication failure, runner failure, timeout and cancellation are errors.
|
|
129
|
+
A successful exit without a readable report, unsupported verdict, oversized
|
|
130
|
+
report, symlink output or inconsistent failure exit cannot produce a passed result.
|
|
131
|
+
The report limit defaults to 16 MiB, with a configurable maximum of 64 MiB.
|
|
132
|
+
There are no automatic retries. A new scan is a separate explicit operation.
|
|
133
|
+
|
|
134
|
+
## Application ownership and custom domains
|
|
135
|
+
|
|
136
|
+
**Provider callback: not applicable.** Service-account CLI authentication has no
|
|
137
|
+
browser redirect. Do not register `https://connect.vibe64.dev/oauth/wiz/callback`
|
|
138
|
+
or each customer's VPS/custom domain as a Wiz callback for this mode.
|
|
139
|
+
|
|
140
|
+
The application or scanning workflow owner supplies an authorized Wiz service
|
|
141
|
+
account scoped to the intended Wiz projects. Store its credentials in private
|
|
142
|
+
worker Env and enforce permission to scan the selected source directory. Public
|
|
143
|
+
Vibe64 and Online do not supply a universal scanning credential. The runtime
|
|
144
|
+
rejects managed registration assignments; there is no hosted universal scan
|
|
145
|
+
endpoint.
|
|
146
|
+
|
|
147
|
+
Separate service-account names or credentials do not prove independent scan
|
|
148
|
+
capacity, billing or tenant quotas. Establish the permitted service/tenant/project
|
|
149
|
+
arrangement with Wiz before promising isolation or offering scans for arbitrary
|
|
150
|
+
customers. The supported path today uses the customer's own Wiz account. An app's
|
|
151
|
+
custom domain does not alter that account or the worker's stable application ID.
|
|
152
|
+
|
|
153
|
+
Workspace connection availability and granting access to everyone are host-owned
|
|
154
|
+
policies. A project-local JSON slot does not automatically confer workspace-wide
|
|
155
|
+
access. Vibe64's workspace scanner orchestration, automatic scan inclusion,
|
|
156
|
+
findings display/aggregation, stale-result UI and connection removal propagation
|
|
157
|
+
remain unfinished. The initial editor surface edits the configuration only.
|
|
158
|
+
|
|
159
|
+
## Automation feasibility and proof
|
|
160
|
+
|
|
161
|
+
AI can author and validate the JSON, wire the runtime, prepare a worker command
|
|
162
|
+
and use an already authorised service account to scan. There is no verified public
|
|
163
|
+
API in this packet for creating Wiz tenants, obtaining a licence, or silently
|
|
164
|
+
provisioning the two platform service accounts. An operator must establish those
|
|
165
|
+
accounts and permissions. Any future provisioning automation should use the
|
|
166
|
+
tenant's documented API and a separately authorised administrative identity.
|
|
167
|
+
|
|
168
|
+
The command/report contract was checked against Wiz's own Azure extension 0.5.15
|
|
169
|
+
(v1 task) and the official Linux CLI v1.74.0-96726fc, built 7 September 2026.
|
|
170
|
+
The runner uses the extension's `--assist-migration` report mode; CLI help accepted
|
|
171
|
+
that flag and rejected a deliberately unknown flag. Tests use a controlled
|
|
172
|
+
executable to exercise real subprocess creation, flags, environment, file reports,
|
|
173
|
+
policy outcomes, ownership, credential rotation, cancellation and cleanup.
|
|
174
|
+
No provider scan, authentication, real tenant or generated application was run.
|
|
175
|
+
Live compatibility, actual permissions/policies and portal delivery still need
|
|
176
|
+
an authorised Wiz account. Auth0 and host workspace workflows
|
|
177
|
+
remain open.
|
|
@@ -0,0 +1,400 @@
|
|
|
1
|
+
# WooCommerce
|
|
2
|
+
|
|
3
|
+
Import `woocommerceProvider` from `@jskit-ai/connectors-catalog/server/woocommerce`.
|
|
4
|
+
This connector manages products, categories, variations, orders, customers, coupons
|
|
5
|
+
and refunds through REST v3, reads store reports, and supplies a webhook signature verifier. The generated app owns its
|
|
6
|
+
interface, authorization and event processing. Payment checkout and shopper login
|
|
7
|
+
are separate application features.
|
|
8
|
+
|
|
9
|
+
## Manual setup
|
|
10
|
+
|
|
11
|
+
1. Sign into the store dashboard. Open **WooCommerce → Settings → Advanced →
|
|
12
|
+
REST API → Add key**.
|
|
13
|
+
2. Enter a description, select the intended WordPress user and choose **Read**
|
|
14
|
+
for lookup or **Read/Write** for management operations. Choose **Generate API key**.
|
|
15
|
+
3. Copy the consumer key and the once-shown consumer secret. Store the secret
|
|
16
|
+
in the backend environment as `WOOCOMMERCE_CONSUMER_SECRET`.
|
|
17
|
+
4. In the editor enter **Store URL**, **Consumer key** and **Consumer secret
|
|
18
|
+
reference** (`env:WOOCOMMERCE_CONSUMER_SECRET`). Save configuration.
|
|
19
|
+
|
|
20
|
+
The key's access also depends on the selected user's permissions. Revoke it
|
|
21
|
+
from the REST API key list when access should end.
|
|
22
|
+
[WooCommerce authentication](https://developer.woocommerce.com/docs/apis/rest-api/authentication/).
|
|
23
|
+
|
|
24
|
+
Use the final HTTPS site address before `/wp-json`, retaining an installation
|
|
25
|
+
subdirectory. Under **Settings → Permalinks**, use a pretty permalink structure;
|
|
26
|
+
the default plain structure does not support these REST routes.
|
|
27
|
+
[REST API requirements](https://developer.woocommerce.com/docs/apis/rest-api/).
|
|
28
|
+
|
|
29
|
+
## Portable configuration and runtime
|
|
30
|
+
|
|
31
|
+
```json
|
|
32
|
+
{
|
|
33
|
+
"schemaVersion": 1,
|
|
34
|
+
"registrations": {},
|
|
35
|
+
"integrations": {
|
|
36
|
+
"store": {
|
|
37
|
+
"provider": "woocommerce",
|
|
38
|
+
"displayName": "Store catalogue",
|
|
39
|
+
"accountMode": "shared",
|
|
40
|
+
"scopes": [],
|
|
41
|
+
"authentication": {
|
|
42
|
+
"method": "api-key",
|
|
43
|
+
"secretRef": "env:WOOCOMMERCE_CONSUMER_SECRET"
|
|
44
|
+
},
|
|
45
|
+
"settings": {
|
|
46
|
+
"siteUrl": "https://merchant.example/store/",
|
|
47
|
+
"consumerKey": "ck_example123"
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
The key identifier is saved in source; its matching secret is resolved outside
|
|
55
|
+
source. CLI and editor use the same schema. Compose the
|
|
56
|
+
[API-key pattern](../patterns/api-key-connection/PATTERN.md) with
|
|
57
|
+
`providers: [woocommerceProvider]` and the encrypted file connection store.
|
|
58
|
+
Both configuration and runtime state use text files, without an editor or
|
|
59
|
+
database dependency. The application authorizes access to the shared store.
|
|
60
|
+
|
|
61
|
+
```js
|
|
62
|
+
await connections.connectApiKey({ context, integrationId: "store" });
|
|
63
|
+
const products = await connections.invoke({
|
|
64
|
+
context, integrationId: "store", operation: "products.list",
|
|
65
|
+
input: { page: 1, per_page: 25, stock_status: "instock" }
|
|
66
|
+
});
|
|
67
|
+
const orders = await connections.invoke({
|
|
68
|
+
context, integrationId: "store", operation: "orders.list",
|
|
69
|
+
input: { page: 1, per_page: 10, status: "processing" }
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Verification reads authenticated `GET /wp-json/wc/v3/products`. An empty array
|
|
74
|
+
is valid; an error object is not. This is not the public Store API, and product
|
|
75
|
+
access does not establish order permission. The product operation accepts
|
|
76
|
+
`page`, `per_page`, `search`, `status`, `sku` and `stock_status`.
|
|
77
|
+
[Products](https://developer.woocommerce.com/docs/apis/rest-api/v3/products/).
|
|
78
|
+
|
|
79
|
+
`orders.list` reads `/wp-json/wc/v3/orders` and accepts `page`, `per_page`,
|
|
80
|
+
`search`, `status` and `customer` (including zero for guest orders). Currency
|
|
81
|
+
totals remain strings in the provider response.
|
|
82
|
+
[Orders](https://developer.woocommerce.com/docs/apis/rest-api/v3/orders/).
|
|
83
|
+
|
|
84
|
+
Both operations default to page 1, ten records and status `any`. The fragment
|
|
85
|
+
bounds page size to 1–100 and page to 1–100000; search is limited to 500
|
|
86
|
+
characters. It returns one response array without exposing pagination headers
|
|
87
|
+
or traversing pages. Product/order links and image URLs are returned as data
|
|
88
|
+
and never fetched automatically. The application decides what to display and
|
|
89
|
+
whether to request another page.
|
|
90
|
+
|
|
91
|
+
Credentials use Basic authentication only in the header, and redirects fail.
|
|
92
|
+
If a proxy strips Authorization, correct that forwarding configuration; this
|
|
93
|
+
adapter has no query-string credential fallback. A changed site, path or key
|
|
94
|
+
identifier requires verification again. Environment rotation changes the
|
|
95
|
+
secret binding. Disconnect removes the local connection record, not the store
|
|
96
|
+
key.
|
|
97
|
+
|
|
98
|
+
The configured HTTPS address may use a private host or nondefault port for
|
|
99
|
+
operator-owned stores. URL validation rejects embedded credentials, query,
|
|
100
|
+
fragment and parent-path segments; it is not a DNS or SSRF filter. Only trusted
|
|
101
|
+
configuration editors may choose the credential destination. The hosting
|
|
102
|
+
application owns outbound-network restrictions. Operation input cannot replace
|
|
103
|
+
that destination, and credentials are restricted to its exact origin.
|
|
104
|
+
|
|
105
|
+
## Automation and application ownership
|
|
106
|
+
|
|
107
|
+
An AI can prepare configuration and runtime wiring. WooCommerce also documents
|
|
108
|
+
an owner-consent flow at `/wc-auth/v1/authorize`, with application name, scope,
|
|
109
|
+
correlation ID, return URL and HTTPS callback URL. Credentials arrive by a
|
|
110
|
+
separate POST to the callback; the browser's success return is insufficient.
|
|
111
|
+
That bootstrap is not implemented by this fragment.
|
|
112
|
+
[Application authentication](https://developer.woocommerce.com/docs/apis/rest-api/authentication/).
|
|
113
|
+
|
|
114
|
+
For manual setup, each customer supplies its own store key. There is no global
|
|
115
|
+
OAuth registration in this flow. Separate application keys give connections distinct revocation and
|
|
116
|
+
audit identities. They do not establish separate hosting capacity. Application
|
|
117
|
+
usage limits belong in its backend; store infrastructure remains shared
|
|
118
|
+
unless its owner separates it. Do not promise a new quota merely from a new key.
|
|
119
|
+
|
|
120
|
+
Manual Basic authentication needs no callback and is independent of the editor
|
|
121
|
+
VM's domain. An eventual consent implementation must route the credential POST
|
|
122
|
+
to its application backend, authenticate and correlate its bootstrap,
|
|
123
|
+
then return the browser to the correct project. Store address changes require
|
|
124
|
+
configuration updates; redirects do not migrate authenticated requests.
|
|
125
|
+
|
|
126
|
+
## Focused proof and limits
|
|
127
|
+
|
|
128
|
+
The WordPress-family suite uses simulated HTTP and actual encrypted JSON files.
|
|
129
|
+
It covers Basic headers, restart, rotation, ownership, disconnect, changed
|
|
130
|
+
destinations, subdirectories, validation, pagination and failure responses.
|
|
131
|
+
Editor checks cover required fields, invalid URLs/identifiers, raw-secret
|
|
132
|
+
rejection, setup links and save/reload. Live signup, consent, store operations
|
|
133
|
+
and sample-app generation are excluded. Controlled operation tests cover native
|
|
134
|
+
write bodies, validation, identity mismatches, uncertain writes and webhook
|
|
135
|
+
signatures. Custom order statuses and the automatic key-consent flow are not
|
|
136
|
+
implemented. Expanded/compact configuration and lifecycle checks passed; the
|
|
137
|
+
latest compact pass also checks refund and reporting guidance. The isolated
|
|
138
|
+
installed-package suite passed 26/26 with controlled HTTP and file storage.
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
## Store record discovery
|
|
142
|
+
|
|
143
|
+
Use `customers.list({ page, per_page, search, email })` or
|
|
144
|
+
`coupons.list({ page, per_page, search, code })` for explicit pages. Individual
|
|
145
|
+
`products.get`, `orders.get`, `customers.get` and `coupons.get` accept `{ id }`.
|
|
146
|
+
They call the corresponding `/wp-json/wc/v3/{resource}/{id}` endpoint beneath
|
|
147
|
+
the configured store path. Native addresses, prices and coupon amounts are
|
|
148
|
+
preserved; decimal money stays text. Unknown/mismatched record IDs are rejected.
|
|
149
|
+
No linked address is fetched and no next page is requested automatically.
|
|
150
|
+
|
|
151
|
+
The selected WordPress user's permissions govern these reads. A successful
|
|
152
|
+
product verification does not prove access to customers or coupons. Keep the
|
|
153
|
+
consumer secret in server Env and authorize each visitor's resource access in
|
|
154
|
+
your app; the store administrator key is not a visitor session. Other frameworks
|
|
155
|
+
use the same Basic-auth credentials and native REST routes. The management and
|
|
156
|
+
webhook operations are described below.
|
|
157
|
+
|
|
158
|
+
Sources: [Customers](https://developer.woocommerce.com/docs/apis/rest-api/v3/customers/),
|
|
159
|
+
[Coupons](https://developer.woocommerce.com/docs/apis/rest-api/v3/coupons/).
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
## Coupon changes
|
|
163
|
+
|
|
164
|
+
For writes, generate a **Read/Write** key in WooCommerce > Settings > Advanced >
|
|
165
|
+
REST API under the intended store administrator, then replace the matching Env
|
|
166
|
+
secret and configured consumer key. Read-only keys remain suitable for lookup.
|
|
167
|
+
Your backend authorizes promotion management and reviews the changes before
|
|
168
|
+
calling `coupons.create` or `coupons.update`. Updates require `id`; creation
|
|
169
|
+
requires `code`. Both accept native discount type, decimal amount, min/max spend,
|
|
170
|
+
usage limits, product/category inclusion/exclusion, email restrictions and flags.
|
|
171
|
+
Explicit false, empty description and empty restriction lists are preserved.
|
|
172
|
+
|
|
173
|
+
Creation POSTs JSON to `/wp-json/wc/v3/coupons`; updates PUT only supplied fields
|
|
174
|
+
to `/wp-json/wc/v3/coupons/{id}`. Use decimal strings, never floating-point money.
|
|
175
|
+
Percentage validation on updates without a supplied type remains WooCommerce's
|
|
176
|
+
responsibility: retrieve the existing coupon when reviewing such changes.
|
|
177
|
+
Free shipping requires the store's compatible shipping method. An uncertain
|
|
178
|
+
response must be reconciled using coupon code/ID before a deliberate retry.
|
|
179
|
+
No automatic retry, expiry editing, metadata editing or promotion UI is provided
|
|
180
|
+
by these operations. Coupon removal uses the separate coupons.delete operation. The application owns those presentation and
|
|
181
|
+
workflow decisions; other frameworks send the same native REST payloads.
|
|
182
|
+
|
|
183
|
+
|
|
184
|
+
## Order status changes
|
|
185
|
+
|
|
186
|
+
`orders.update({ id, status, customer_note })` PUTs only supplied fields to
|
|
187
|
+
`/wp-json/wc/v3/orders/{id}`. Use a Read/Write key and explicitly authorize the
|
|
188
|
+
order manager. Read the order and review its current state before changing it;
|
|
189
|
+
no revision-based concurrency guarantee is supplied. An empty customer_note
|
|
190
|
+
clears the customer's checkout note; it is not a private staff annotation.
|
|
191
|
+
|
|
192
|
+
Status changes can trigger WooCommerce/plugin emails and stock-related actions.
|
|
193
|
+
Marking an order completed is not a payment request, and setting refunded does
|
|
194
|
+
not itself issue a gateway refund. This operation does not accept set_paid or
|
|
195
|
+
transaction_id; use a separately reviewed payment/refund workflow where needed.
|
|
196
|
+
On an uncertain result, reread the order before deciding whether to retry.
|
|
197
|
+
|
|
198
|
+
Reference: [WooCommerce orders](https://developer.woocommerce.com/docs/apis/rest-api/v3/orders/).
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
### Customer profiles and addresses
|
|
202
|
+
|
|
203
|
+
Grant **Read/Write** in WooCommerce → Settings → Advanced → REST API when
|
|
204
|
+
creating the project's key for customer changes. `customers.create` requires
|
|
205
|
+
`email` and accepts `username`, `first_name`, `last_name`, `billing` and `shipping`.
|
|
206
|
+
`customers.update` requires the store customer `id` and accepts email, names and
|
|
207
|
+
partial billing/shipping addresses. Omitted fields remain omitted; an empty
|
|
208
|
+
address field explicitly clears that field. Postal codes stay strings.
|
|
209
|
+
These use native POST/PUT `/wp-json/wc/v3/customers` routes, with `/{id}` for updates.
|
|
210
|
+
See [WooCommerce customer API](https://developer.woocommerce.com/docs/apis/rest-api/v3/customers/).
|
|
211
|
+
|
|
212
|
+
The generated app must authorize access to each customer record. A store
|
|
213
|
+
customer record does not log someone into the generated app. Store account
|
|
214
|
+
creation and notifications follow WooCommerce configuration/plugins. Password
|
|
215
|
+
management, role changes and arbitrary customer metadata are not exposed by
|
|
216
|
+
these operations. The store handles duplicate emails and account validation.
|
|
217
|
+
After an uncertain create response, look up the email before retrying; the
|
|
218
|
+
connector does not automatically replay writes. Read the current record before
|
|
219
|
+
editing it; these operations do not provide optimistic concurrency control.
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
### Product prices and inventory
|
|
223
|
+
|
|
224
|
+
`products.create` requires `name` and an explicit `status` (choose `draft` for
|
|
225
|
+
review). `products.update` requires `id` and only sends supplied changes.
|
|
226
|
+
Both support simple/variable product types, descriptions, SKU, decimal-string
|
|
227
|
+
regular/sale prices, stock management, absolute stock quantities, stock status,
|
|
228
|
+
backorders, flags, existing category IDs and existing media attachment IDs.
|
|
229
|
+
These use native POST/PUT product routes; see the
|
|
230
|
+
[product API](https://developer.woocommerce.com/docs/apis/rest-api/v3/products/).
|
|
231
|
+
Use a Read/Write key, selected under WooCommerce → Settings → Advanced → REST API.
|
|
232
|
+
|
|
233
|
+
An empty price clears it; zero, negative stock, false flags and empty category
|
|
234
|
+
lists are preserved. Stock writes replace quantities, not increment them. Your
|
|
235
|
+
app must review concurrent sales before overwriting inventory; this connector
|
|
236
|
+
has no locking or inventory ledger. Publishing and updates affect the live store.
|
|
237
|
+
Image uploads, external image fetching, grouped/external product configuration,
|
|
238
|
+
download delivery and arbitrary metadata are not provided by these operations.
|
|
239
|
+
HTML descriptions need appropriate sanitization when rendered by your app.
|
|
240
|
+
After uncertain writes, retrieve the product or search its SKU before retrying.
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
### Existing product variations
|
|
244
|
+
|
|
245
|
+
List with `variations.list({ product_id, page, per_page })`, then use
|
|
246
|
+
`variations.get({ product_id, id })` or `variations.update` with both IDs.
|
|
247
|
+
The connector retains the native attributes and price. Updates accept decimal
|
|
248
|
+
regular/sale prices, SKU, publication status, boolean stock management, absolute
|
|
249
|
+
quantity, stock status and backorder policy. These use the store's native
|
|
250
|
+
`products/{product_id}/variations/{id}` routes; see
|
|
251
|
+
[variation API](https://developer.woocommerce.com/docs/apis/rest-api/v3/product-variations/).
|
|
252
|
+
|
|
253
|
+
Use Read/Write credentials for changes. Check whether stock belongs to the parent
|
|
254
|
+
or variation before changing it. This update currently accepts boolean
|
|
255
|
+
`manage_stock`, not the provider's `parent` sentinel. Custom named attributes can be configured on the parent and selected on each
|
|
256
|
+
variation; global attribute taxonomy administration is not exposed. The app owns
|
|
257
|
+
selection, authorization and review; updates can immediately change availability
|
|
258
|
+
and prices at checkout. Pages are bounded and must be requested individually.
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
### Removing records
|
|
262
|
+
|
|
263
|
+
Products, orders and coupons expose `.delete({ id, force })`: explicitly choose
|
|
264
|
+
`false` for trash or `true` for permanent removal. Customers and variations
|
|
265
|
+
require `force: true` because they do not support trash. Variation deletion also
|
|
266
|
+
requires `product_id`; customer deletion accepts `reassign` for posts owned by
|
|
267
|
+
the removed WordPress user. Review that user's content before deleting them.
|
|
268
|
+
|
|
269
|
+
Use Read/Write credentials and require app authorization and confirmation of the
|
|
270
|
+
exact record and effect. Deleting an order does not refund a payment. Permanent
|
|
271
|
+
removal cannot be undone through this connector; removal may affect storefront
|
|
272
|
+
availability and plugin behaviour. A failed request is not replayed automatically.
|
|
273
|
+
Reconcile uncertain outcomes by retrieving the record before trying again.
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
### Creating a size/colour catalogue
|
|
277
|
+
|
|
278
|
+
1. Call `products.create` with `type: "variable"`, `status: "draft"` and named
|
|
279
|
+
`attributes`, for example `{ name: "Size", variation: true, visible: true,
|
|
280
|
+
options: ["S", "M"] }`. Keep the returned parent ID.
|
|
281
|
+
2. Call `variations.create` with that `product_id`, explicit `status`, decimal
|
|
282
|
+
price and `attributes: [{ name: "Size", option: "M" }]`. Create only the
|
|
283
|
+
combinations the administrator requests. The connector never fans out writes.
|
|
284
|
+
3. Review parent and variation records before publishing them through updates.
|
|
285
|
+
The store remains authoritative about attribute compatibility and purchasability.
|
|
286
|
+
|
|
287
|
+
Attribute arrays are replacements; retain other options when updating a parent.
|
|
288
|
+
Only custom named attributes are currently supported for writes, not global
|
|
289
|
+
attribute-ID administration. This is not an atomic catalogue transaction: preserve
|
|
290
|
+
successful IDs and reconcile failures before retrying subsequent creation calls.
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
### Creating an order record
|
|
294
|
+
|
|
295
|
+
`orders.create` requires an explicit `customer_id` (0 for a guest), `status`
|
|
296
|
+
(`pending` or `on-hold`) and 1–100 `line_items`, each with `product_id`, positive
|
|
297
|
+
`quantity` and optional `variation_id`. It also accepts billing/shipping addresses,
|
|
298
|
+
`customer_note` and coupon codes through `coupon_lines`. The response is the native
|
|
299
|
+
order, including its ID and decimal total. See the
|
|
300
|
+
[order API](https://developer.woocommerce.com/docs/apis/rest-api/v3/orders/).
|
|
301
|
+
|
|
302
|
+
Use a Read/Write key and authorize the customer/order on your backend. Pass the
|
|
303
|
+
intended order addresses explicitly; do not assume selecting a customer copies
|
|
304
|
+
all address data. This is order administration, not a cart or payment checkout.
|
|
305
|
+
It does not charge a card, set a paid flag, verify stock reservations or quote
|
|
306
|
+
shipping. Gateway checkout, shipping-rate selection, fee lines and manual
|
|
307
|
+
total overrides remain outside this operation. Store plugins and status changes
|
|
308
|
+
can trigger emails or stock effects. Inspect WooCommerce's returned totals and
|
|
309
|
+
store configuration before presenting an order as ready for payment.
|
|
310
|
+
|
|
311
|
+
Save the returned order ID. On a timeout or uncertain write, reconcile the store's
|
|
312
|
+
orders for the customer before retrying; there is no atomic idempotency guarantee.
|
|
313
|
+
|
|
314
|
+
|
|
315
|
+
### Receiving store events
|
|
316
|
+
|
|
317
|
+
Create a project-owned HTTPS receiver before enabling notifications. In the store,
|
|
318
|
+
open **WooCommerce → Settings → Advanced → Webhooks → Add webhook**. Choose a
|
|
319
|
+
name, topic and delivery URL. Enter a distinct random signing secret, save the
|
|
320
|
+
same value in the app's Env (for example `WOOCOMMERCE_WEBHOOK_SECRET`), then set
|
|
321
|
+
Active and save. See [webhook setup](https://woocommerce.com/document/webhooks/).
|
|
322
|
+
To stop deliveries, pause/delete the webhook there; disconnecting an API key in
|
|
323
|
+
the app does not remove store webhooks. Inspect **WooCommerce → Status → Logs**
|
|
324
|
+
for delivery failures.
|
|
325
|
+
|
|
326
|
+
Import `verifyWooCommerceWebhook` from `@jskit-ai/connectors-catalog/server/woocommerce`.
|
|
327
|
+
Pass the exact incoming bytes as `rawBody`, the single `X-WC-Webhook-Signature`
|
|
328
|
+
header as `signature`, and the route's Env signing `secret`. It returns true or
|
|
329
|
+
throws `connector_webhook_invalid`. It supports the default SHA-256 algorithm
|
|
330
|
+
and a 2 MiB body limit; enforce that limit while reading the request too.
|
|
331
|
+
Verify before JSON parsing or side effects. Do not stringify a parsed body to
|
|
332
|
+
reconstruct signed bytes.
|
|
333
|
+
|
|
334
|
+
The signature covers the body, not topic/source/delivery headers, and has no
|
|
335
|
+
signed timestamp. Bind the receiver and secret to the configured store; do not
|
|
336
|
+
select credentials or grant authorization from supplied headers. Persist
|
|
337
|
+
idempotent processing in the generated app, and reconcile current resource state
|
|
338
|
+
when event ordering matters. A valid signature alone does not prevent replay.
|
|
339
|
+
The initial activation ping is separate and unsigned; acknowledge it without
|
|
340
|
+
processing a business event. Native frameworks implement the same base64
|
|
341
|
+
HMAC-SHA256 check with constant-time comparison. Provider code reference:
|
|
342
|
+
[WooCommerce webhook implementation](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/class-wc-webhook.php).
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
### Product categories
|
|
346
|
+
|
|
347
|
+
Use `categories.list` with page/per_page/search and optional `parent` and
|
|
348
|
+
`hide_empty`; `categories.get` needs `id`. Create requires `name`; update requires
|
|
349
|
+
`id` and supplied changes. Supported fields are name, slug, description, parent,
|
|
350
|
+
display, menu_order and an existing image ID. Parent 0 selects the root.
|
|
351
|
+
Use returned category IDs in product category arrays. The store validates deeper
|
|
352
|
+
hierarchy cycles and taxonomy constraints. Routes are
|
|
353
|
+
`/wp-json/wc/v3/products/categories[/{id}]`.
|
|
354
|
+
|
|
355
|
+
A Read/Write key is required for changes. `categories.delete({ id, force: true })`
|
|
356
|
+
is permanent; the app must review affected catalogue organization first. The
|
|
357
|
+
operation does not delete products. Image uploads and external image retrieval
|
|
358
|
+
are outside this operation. Store navigation and category archives can change
|
|
359
|
+
immediately. Reference:
|
|
360
|
+
[WooCommerce categories](https://developer.woocommerce.com/docs/apis/rest-api/v3/product-categories/).
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
### Sales and resource reports
|
|
364
|
+
|
|
365
|
+
Use `reports.sales` or `reports.topSellers` with either `period` (week, month,
|
|
366
|
+
last_month, year) or a complete `date_min`/`date_max` YYYY-MM-DD range.
|
|
367
|
+
`reports.orders`, `reports.products`, `reports.customers` and `reports.coupons`
|
|
368
|
+
return native resource-summary counts. Read permissions are sufficient only when
|
|
369
|
+
the key's WordPress user also has reporting capabilities. A product probe does
|
|
370
|
+
not prove report access. These operations retain native response values; the app
|
|
371
|
+
owns charting, comparisons, exports and choosing the store's reporting period.
|
|
372
|
+
|
|
373
|
+
Sales responses retain decimal strings and per-period buckets. WooCommerce's
|
|
374
|
+
aggregate refund figure and bucket refunds can use different date semantics;
|
|
375
|
+
do not assume they reconcile identically. These REST v3 reports are not a clone
|
|
376
|
+
of every WooCommerce Analytics dashboard. Reference:
|
|
377
|
+
[WooCommerce reports](https://developer.woocommerce.com/docs/apis/rest-api/v3/reports/).
|
|
378
|
+
|
|
379
|
+
|
|
380
|
+
### Refunds
|
|
381
|
+
|
|
382
|
+
Read `refunds.list({ order_id, page, per_page })` or `refunds.get({ order_id, id })`.
|
|
383
|
+
`refunds.create` requires order_id, decimal-string amount, reason, and explicit
|
|
384
|
+
boolean api_refund/api_restock. With api_refund true, WooCommerce asks the order's
|
|
385
|
+
payment gateway to return money; false records a manual refund only. Confirm the
|
|
386
|
+
returned refunded_payment value and reconcile with the gateway when uncertain.
|
|
387
|
+
|
|
388
|
+
Restocking requires selected original order-line IDs with quantities and decimal
|
|
389
|
+
refund_total values. These are order-line IDs, not product IDs. Review remaining
|
|
390
|
+
refundable amounts/quantities before submitting. The top-level amount takes
|
|
391
|
+
precedence over line totals; your app must reconcile the requested amounts.
|
|
392
|
+
Tax allocation, fee/shipping refund lines and server-computed refund totals are
|
|
393
|
+
not exposed by this operation. Native routes are orders/{order_id}/refunds.
|
|
394
|
+
|
|
395
|
+
Use Read/Write credentials and a gateway that supports API refunds. The app owns
|
|
396
|
+
refund authorization and confirmation. Requests are sent once; after timeout or
|
|
397
|
+
failure, inspect existing refunds and gateway history before retrying. Refunds
|
|
398
|
+
can trigger store notifications and stock changes. This connector does not
|
|
399
|
+
reverse gateway transfers or supply cross-system idempotency. See
|
|
400
|
+
[WooCommerce refunds](https://developer.woocommerce.com/docs/apis/rest-api/v3/order-refunds/).
|