@jskit-ai/connectors-catalog 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (399) hide show
  1. package/README.md +192 -0
  2. package/docs/ai-upstream-notices.md +51 -0
  3. package/docs/ai.md +191 -0
  4. package/docs/airtable.md +130 -0
  5. package/docs/algolia.md +190 -0
  6. package/docs/amazon-redshift.md +229 -0
  7. package/docs/amplitude.md +210 -0
  8. package/docs/apify.md +162 -0
  9. package/docs/apollo-io.md +200 -0
  10. package/docs/asana.md +126 -0
  11. package/docs/ashby.md +188 -0
  12. package/docs/atlassian.md +224 -0
  13. package/docs/attention.md +162 -0
  14. package/docs/aws-athena.md +150 -0
  15. package/docs/aws-credentials.md +75 -0
  16. package/docs/aws-s3.md +193 -0
  17. package/docs/bigquery.md +146 -0
  18. package/docs/brevo.md +122 -0
  19. package/docs/calendly.md +158 -0
  20. package/docs/canva.md +191 -0
  21. package/docs/chargebee.md +192 -0
  22. package/docs/clay.md +194 -0
  23. package/docs/clickhouse.md +242 -0
  24. package/docs/confidence-exp.md +74 -0
  25. package/docs/confidence-flags.md +75 -0
  26. package/docs/confidence-oauth.md +137 -0
  27. package/docs/contentful.md +123 -0
  28. package/docs/databricks.md +180 -0
  29. package/docs/dbt-semantic-layer.md +175 -0
  30. package/docs/elevenlabs.md +102 -0
  31. package/docs/figma.md +132 -0
  32. package/docs/firebase-cloud-messaging.md +262 -0
  33. package/docs/firecrawl.md +137 -0
  34. package/docs/fireflies.md +95 -0
  35. package/docs/fireworks-ai.md +53 -0
  36. package/docs/gatewayapi.md +113 -0
  37. package/docs/gemini-enterprise.md +224 -0
  38. package/docs/github-api.md +133 -0
  39. package/docs/gitlab-api.md +138 -0
  40. package/docs/gmail.md +133 -0
  41. package/docs/gong.md +205 -0
  42. package/docs/google-ads.md +156 -0
  43. package/docs/google-analytics.md +202 -0
  44. package/docs/google-docs.md +105 -0
  45. package/docs/google-drive.md +108 -0
  46. package/docs/google-maps-platform.md +208 -0
  47. package/docs/google-oauth.md +123 -0
  48. package/docs/google-search-console.md +124 -0
  49. package/docs/google-sheets.md +94 -0
  50. package/docs/google-slides.md +95 -0
  51. package/docs/granola.md +178 -0
  52. package/docs/hex.md +161 -0
  53. package/docs/heygen.md +124 -0
  54. package/docs/hubspot.md +142 -0
  55. package/docs/incident-io.md +118 -0
  56. package/docs/inngest.md +178 -0
  57. package/docs/klipy.md +149 -0
  58. package/docs/lexware.md +144 -0
  59. package/docs/lightspeed.md +193 -0
  60. package/docs/linear.md +137 -0
  61. package/docs/linkedin.md +196 -0
  62. package/docs/logo-dev.md +152 -0
  63. package/docs/mailgun.md +153 -0
  64. package/docs/mapbox.md +174 -0
  65. package/docs/microsoft-excel.md +97 -0
  66. package/docs/microsoft-fabric.md +249 -0
  67. package/docs/microsoft-oauth.md +143 -0
  68. package/docs/microsoft-onedrive.md +76 -0
  69. package/docs/microsoft-onenote.md +75 -0
  70. package/docs/microsoft-outlook.md +90 -0
  71. package/docs/microsoft-powerpoint.md +119 -0
  72. package/docs/microsoft-sharepoint.md +75 -0
  73. package/docs/microsoft-teams.md +72 -0
  74. package/docs/microsoft-word.md +119 -0
  75. package/docs/miro.md +117 -0
  76. package/docs/n8n.md +169 -0
  77. package/docs/notion.md +137 -0
  78. package/docs/oura.md +161 -0
  79. package/docs/paddle.md +168 -0
  80. package/docs/perplexity.md +85 -0
  81. package/docs/pipedrive.md +120 -0
  82. package/docs/polar.md +63 -0
  83. package/docs/posthog.md +227 -0
  84. package/docs/prestashop.md +151 -0
  85. package/docs/replicate.md +60 -0
  86. package/docs/resend.md +153 -0
  87. package/docs/salesforce.md +234 -0
  88. package/docs/sanity.md +122 -0
  89. package/docs/semrush.md +276 -0
  90. package/docs/sentry.md +112 -0
  91. package/docs/sevdesk.md +107 -0
  92. package/docs/shopify.md +206 -0
  93. package/docs/slack.md +257 -0
  94. package/docs/snowflake.md +271 -0
  95. package/docs/storyblok.md +130 -0
  96. package/docs/stripe.md +77 -0
  97. package/docs/supabase.md +51 -0
  98. package/docs/tally.md +105 -0
  99. package/docs/telegram.md +165 -0
  100. package/docs/tiktok.md +201 -0
  101. package/docs/twilio.md +284 -0
  102. package/docs/twitch.md +428 -0
  103. package/docs/wave.md +440 -0
  104. package/docs/wix.md +1249 -0
  105. package/docs/wiz.md +177 -0
  106. package/docs/woocommerce.md +400 -0
  107. package/docs/wordpress-com.md +358 -0
  108. package/docs/wordpress-self-hosted.md +252 -0
  109. package/docs/workday.md +292 -0
  110. package/docs/x-twitter.md +188 -0
  111. package/docs/xero.md +429 -0
  112. package/docs/zoho-books.md +214 -0
  113. package/docs/zoho-crm.md +192 -0
  114. package/package.json +153 -0
  115. package/patterns/ai-connections/PATTERN.md +84 -0
  116. package/patterns/ai-connections/example/ai-model.js +11 -0
  117. package/patterns/ai-connections/example/perplexity-answer.js +29 -0
  118. package/patterns/api-key-connection/PATTERN.md +368 -0
  119. package/patterns/api-key-connection/example/connections.js +18 -0
  120. package/patterns/api-key-connection/example/integrations.json +19 -0
  121. package/patterns/assistant-mcp/PATTERN.md +110 -0
  122. package/patterns/assistant-mcp/example/integrations.json +13 -0
  123. package/patterns/assistant-mcp-oauth/PATTERN.md +235 -0
  124. package/patterns/assistant-mcp-oauth/example/integrations.json +102 -0
  125. package/patterns/aws-storage-queries/PATTERN.md +169 -0
  126. package/patterns/aws-storage-queries/example/formats/data-formats.js +35 -0
  127. package/patterns/aws-storage-queries/example/formats/package-lock.json +49 -0
  128. package/patterns/aws-storage-queries/example/formats/package.json +12 -0
  129. package/patterns/aws-storage-queries/example/formats/verify-formats.mjs +37 -0
  130. package/patterns/aws-storage-queries/example/integrations.json +38 -0
  131. package/patterns/aws-storage-queries/example/s3-transfer.js +34 -0
  132. package/patterns/event-delivery/PATTERN.md +151 -0
  133. package/patterns/event-delivery/example/integrations.json +17 -0
  134. package/patterns/firebase-messaging/PATTERN.md +156 -0
  135. package/patterns/firebase-messaging/example/server/notifications.js +23 -0
  136. package/patterns/google-ads-search/PATTERN.md +92 -0
  137. package/patterns/google-ads-search/example/ads-setup.js +25 -0
  138. package/patterns/oauth-connection/PATTERN.md +724 -0
  139. package/patterns/oauth-connection/example/integrations.json +20 -0
  140. package/patterns/paddle-catalogue/PATTERN.md +78 -0
  141. package/patterns/paddle-catalogue/example/create-products.js +38 -0
  142. package/patterns/public-image/PATTERN.md +84 -0
  143. package/patterns/public-image/example/integrations.json +13 -0
  144. package/patterns/public-image/example/logo-url.js +16 -0
  145. package/patterns/redshift-queries/PATTERN.md +150 -0
  146. package/patterns/redshift-queries/example/integrations.json +33 -0
  147. package/patterns/source-scanning/PATTERN.md +83 -0
  148. package/patterns/source-scanning/example/source-scanner.js +13 -0
  149. package/src/client/firebase-cloud-messaging.js +10 -0
  150. package/src/client/google-analytics.js +72 -0
  151. package/src/client/google-maps-platform.js +39 -0
  152. package/src/client/logo-dev.js +36 -0
  153. package/src/server/ai.js +46 -0
  154. package/src/server/airtable.js +67 -0
  155. package/src/server/algolia.js +63 -0
  156. package/src/server/amazon-redshift.js +96 -0
  157. package/src/server/amplitude.js +31 -0
  158. package/src/server/apify.js +68 -0
  159. package/src/server/apollo-io.js +85 -0
  160. package/src/server/asana.js +64 -0
  161. package/src/server/ashby.js +61 -0
  162. package/src/server/atlassian.js +32 -0
  163. package/src/server/attention.js +93 -0
  164. package/src/server/aws-athena.js +82 -0
  165. package/src/server/aws-s3.js +49 -0
  166. package/src/server/awsTransport.js +75 -0
  167. package/src/server/bigquery.js +97 -0
  168. package/src/server/brevo.js +97 -0
  169. package/src/server/calendly.js +77 -0
  170. package/src/server/canva.js +13 -0
  171. package/src/server/chargebee.js +88 -0
  172. package/src/server/clay.js +78 -0
  173. package/src/server/clickhouse.js +66 -0
  174. package/src/server/confidence.js +29 -0
  175. package/src/server/contentful.js +40 -0
  176. package/src/server/databricks.js +55 -0
  177. package/src/server/dbt-semantic-layer.js +95 -0
  178. package/src/server/elevenlabs.js +81 -0
  179. package/src/server/figma.js +24 -0
  180. package/src/server/firebase-cloud-messaging.js +111 -0
  181. package/src/server/firecrawl.js +70 -0
  182. package/src/server/fireflies.js +31 -0
  183. package/src/server/fireworks-ai.js +16 -0
  184. package/src/server/gatewayapi.js +48 -0
  185. package/src/server/gemini-enterprise.js +47 -0
  186. package/src/server/github-api.js +90 -0
  187. package/src/server/gitlab-api.js +67 -0
  188. package/src/server/gmail.js +60 -0
  189. package/src/server/gong.js +52 -0
  190. package/src/server/google-ads-search.js +134 -0
  191. package/src/server/google-ads.js +80 -0
  192. package/src/server/google-docs.js +36 -0
  193. package/src/server/google-drive.js +71 -0
  194. package/src/server/google-maps-platform.js +90 -0
  195. package/src/server/google-search-console.js +31 -0
  196. package/src/server/google-sheets.js +60 -0
  197. package/src/server/google-slides.js +36 -0
  198. package/src/server/google.js +61 -0
  199. package/src/server/granola.js +115 -0
  200. package/src/server/graphqlOperation.js +15 -0
  201. package/src/server/hex.js +29 -0
  202. package/src/server/heygen.js +54 -0
  203. package/src/server/hubspot.js +85 -0
  204. package/src/server/incident-io.js +68 -0
  205. package/src/server/inngest.js +86 -0
  206. package/src/server/jsonOperation.js +34 -0
  207. package/src/server/klipy.js +34 -0
  208. package/src/server/lexware.js +59 -0
  209. package/src/server/lightspeed.js +82 -0
  210. package/src/server/linear.js +52 -0
  211. package/src/server/linkedin.js +74 -0
  212. package/src/server/mailgun.js +76 -0
  213. package/src/server/mapbox.js +46 -0
  214. package/src/server/mcpRegistration.js +41 -0
  215. package/src/server/mcpTransport.js +60 -0
  216. package/src/server/microsoft-excel.js +67 -0
  217. package/src/server/microsoft-fabric.js +81 -0
  218. package/src/server/microsoft-onedrive.js +58 -0
  219. package/src/server/microsoft-onenote.js +52 -0
  220. package/src/server/microsoft-outlook.js +58 -0
  221. package/src/server/microsoft-powerpoint.js +5 -0
  222. package/src/server/microsoft-sharepoint.js +46 -0
  223. package/src/server/microsoft-teams.js +29 -0
  224. package/src/server/microsoft-word.js +5 -0
  225. package/src/server/microsoft.js +88 -0
  226. package/src/server/miro.js +29 -0
  227. package/src/server/n8n.js +78 -0
  228. package/src/server/notion.js +76 -0
  229. package/src/server/oura.js +48 -0
  230. package/src/server/paddle.js +83 -0
  231. package/src/server/perplexity.js +15 -0
  232. package/src/server/pipedrive.js +95 -0
  233. package/src/server/polar.js +20 -0
  234. package/src/server/posthog.js +44 -0
  235. package/src/server/prestashop.js +42 -0
  236. package/src/server/replicate.js +42 -0
  237. package/src/server/resend.js +93 -0
  238. package/src/server/salesforce.js +84 -0
  239. package/src/server/sanity.js +31 -0
  240. package/src/server/semrush.js +359 -0
  241. package/src/server/sentry.js +30 -0
  242. package/src/server/sevdesk.js +20 -0
  243. package/src/server/shopify.js +99 -0
  244. package/src/server/slack.js +143 -0
  245. package/src/server/snowflake.js +139 -0
  246. package/src/server/storyblok.js +49 -0
  247. package/src/server/stripe.js +13 -0
  248. package/src/server/supabase.js +13 -0
  249. package/src/server/tally.js +78 -0
  250. package/src/server/telegram.js +55 -0
  251. package/src/server/tiktok.js +86 -0
  252. package/src/server/twilio.js +90 -0
  253. package/src/server/twitch.js +409 -0
  254. package/src/server/wave.js +520 -0
  255. package/src/server/wix.js +1048 -0
  256. package/src/server/wiz.js +117 -0
  257. package/src/server/woocommerce.js +412 -0
  258. package/src/server/wordpress-com.js +236 -0
  259. package/src/server/wordpress-self-hosted.js +134 -0
  260. package/src/server/workday.js +136 -0
  261. package/src/server/x-twitter.js +110 -0
  262. package/src/server/xero.js +397 -0
  263. package/src/server/zoho-books.js +90 -0
  264. package/src/server/zoho-crm.js +89 -0
  265. package/src/server/zohoOAuth.js +21 -0
  266. package/src/shared/ai-models.json +8049 -0
  267. package/src/shared/ai.js +63 -0
  268. package/src/shared/algolia.js +29 -0
  269. package/src/shared/amazon-redshift.js +51 -0
  270. package/src/shared/amplitude.js +28 -0
  271. package/src/shared/atlassian.js +43 -0
  272. package/src/shared/aws.js +72 -0
  273. package/src/shared/canva.js +66 -0
  274. package/src/shared/chargebee.js +26 -0
  275. package/src/shared/clickhouse.js +38 -0
  276. package/src/shared/confidence.js +28 -0
  277. package/src/shared/databricks.js +33 -0
  278. package/src/shared/dbt-semantic-layer.js +32 -0
  279. package/src/shared/definitions.js +140 -0
  280. package/src/shared/figma.js +21 -0
  281. package/src/shared/firebase-cloud-messaging.js +45 -0
  282. package/src/shared/gemini-enterprise.js +33 -0
  283. package/src/shared/gong.js +33 -0
  284. package/src/shared/google-ads-search.js +31 -0
  285. package/src/shared/google-ads.js +28 -0
  286. package/src/shared/google-maps-platform.js +28 -0
  287. package/src/shared/google.js +133 -0
  288. package/src/shared/granola.js +25 -0
  289. package/src/shared/hex.js +28 -0
  290. package/src/shared/inngest.js +35 -0
  291. package/src/shared/lightspeed.js +75 -0
  292. package/src/shared/linkedin.js +27 -0
  293. package/src/shared/logo-dev.js +21 -0
  294. package/src/shared/mapbox.js +38 -0
  295. package/src/shared/mcp.js +92 -0
  296. package/src/shared/microsoft-fabric.js +47 -0
  297. package/src/shared/microsoft.js +231 -0
  298. package/src/shared/miro.js +27 -0
  299. package/src/shared/oura.js +23 -0
  300. package/src/shared/posthog.js +33 -0
  301. package/src/shared/prestashop.js +23 -0
  302. package/src/shared/salesforce.js +36 -0
  303. package/src/shared/semrush.js +24 -0
  304. package/src/shared/shopify.js +51 -0
  305. package/src/shared/siteUrl.js +12 -0
  306. package/src/shared/slack.js +88 -0
  307. package/src/shared/snowflake.js +55 -0
  308. package/src/shared/tiktok.js +22 -0
  309. package/src/shared/tokens.js +747 -0
  310. package/src/shared/twilio.js +41 -0
  311. package/src/shared/twitch.js +49 -0
  312. package/src/shared/wave.js +52 -0
  313. package/src/shared/wix.js +40 -0
  314. package/src/shared/wiz.js +41 -0
  315. package/src/shared/wordpress-com.js +30 -0
  316. package/src/shared/wordpress.js +69 -0
  317. package/src/shared/workday.js +50 -0
  318. package/src/shared/x-twitter.js +19 -0
  319. package/src/shared/xero.js +46 -0
  320. package/src/shared/zoho-books.js +39 -0
  321. package/src/shared/zoho-crm.js +43 -0
  322. package/src/shared/zoho-regions.js +12 -0
  323. package/test/ai.test.js +136 -0
  324. package/test/airtable.test.js +125 -0
  325. package/test/algolia.test.js +207 -0
  326. package/test/amazon-redshift.test.js +272 -0
  327. package/test/amplitude.test.js +239 -0
  328. package/test/apify.test.js +93 -0
  329. package/test/apollo-io.test.js +125 -0
  330. package/test/asana.test.js +99 -0
  331. package/test/ashby.test.js +97 -0
  332. package/test/atlassian.test.js +249 -0
  333. package/test/attention.test.js +79 -0
  334. package/test/aws.test.js +405 -0
  335. package/test/brevo.test.js +71 -0
  336. package/test/calendly.test.js +136 -0
  337. package/test/canva.test.js +258 -0
  338. package/test/chargebee.test.js +195 -0
  339. package/test/clickhouse.test.js +278 -0
  340. package/test/confidence.test.js +205 -0
  341. package/test/databricks.test.js +253 -0
  342. package/test/dbt-semantic-layer.test.js +221 -0
  343. package/test/designMcp.test.js +336 -0
  344. package/test/elevenlabs.test.js +52 -0
  345. package/test/firebase-cloud-messaging.test.js +242 -0
  346. package/test/firecrawl.test.js +66 -0
  347. package/test/gemini-enterprise.test.js +218 -0
  348. package/test/github-api.test.js +167 -0
  349. package/test/gitlab-api.test.js +160 -0
  350. package/test/gong.test.js +192 -0
  351. package/test/google-ads.test.js +350 -0
  352. package/test/google-maps-platform.test.js +191 -0
  353. package/test/google.test.js +710 -0
  354. package/test/granola.test.js +240 -0
  355. package/test/hex.test.js +253 -0
  356. package/test/heygen.test.js +121 -0
  357. package/test/hubspot.test.js +103 -0
  358. package/test/inngest.test.js +219 -0
  359. package/test/lightspeed.test.js +250 -0
  360. package/test/linear.test.js +146 -0
  361. package/test/linkedin.test.js +243 -0
  362. package/test/logo-dev.test.js +79 -0
  363. package/test/mailgun.test.js +107 -0
  364. package/test/mapbox.test.js +181 -0
  365. package/test/mcp.test.js +227 -0
  366. package/test/microsoft-fabric.test.js +258 -0
  367. package/test/microsoft.test.js +554 -0
  368. package/test/n8nOAuth.test.js +188 -0
  369. package/test/notionOAuth.test.js +183 -0
  370. package/test/oura.test.js +211 -0
  371. package/test/paddleCatalogue.test.js +51 -0
  372. package/test/paddlePermissions.test.js +101 -0
  373. package/test/perplexityComposition.test.js +39 -0
  374. package/test/pipedriveOAuth.test.js +140 -0
  375. package/test/posthog.test.js +200 -0
  376. package/test/prestashop.test.js +207 -0
  377. package/test/resend.test.js +163 -0
  378. package/test/salesforce.test.js +276 -0
  379. package/test/semrush.test.js +479 -0
  380. package/test/sentry.test.js +35 -0
  381. package/test/shopify.test.js +247 -0
  382. package/test/slack.test.js +320 -0
  383. package/test/snowflake.test.js +391 -0
  384. package/test/tally.test.js +75 -0
  385. package/test/telegram.test.js +58 -0
  386. package/test/tiktok.test.js +243 -0
  387. package/test/tokens.test.js +1079 -0
  388. package/test/twilio.test.js +221 -0
  389. package/test/twitch.test.js +573 -0
  390. package/test/wave.test.js +678 -0
  391. package/test/wix.test.js +1099 -0
  392. package/test/wiz.test.js +185 -0
  393. package/test/wordpress-com.test.js +469 -0
  394. package/test/wordpress.test.js +660 -0
  395. package/test/workday.test.js +314 -0
  396. package/test/x-twitter.test.js +256 -0
  397. package/test/xero.test.js +700 -0
  398. package/test/zoho-books.test.js +253 -0
  399. package/test/zoho-crm.test.js +223 -0
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/).