@wix/agent-skills 1.31.1 → 1.32.0
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 +4 -12
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +39 -15
- package/skills/wix-app/references/BACKEND_API.md +1 -1
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +11 -8
- package/skills/wix-app/references/SDK_MODULE_MAP.md +1 -1
- package/skills/wix-app/references/STORES_VERSIONING.md +24 -2
- package/skills/wix-app/references/dashboard-page/DATA_SOURCES.md +9 -13
- package/skills/wix-app/references/dashboard-page/IMAGE_RENDERING.md +61 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +54 -64
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +14 -21
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONTRACT.md +37 -30
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +43 -29
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +40 -39
- package/skills/wix-app/references/editor-react-component/PARTS.md +8 -6
- package/skills/wix-app/references/editor-react-component/PROPS-VS-CSS.md +22 -2
- package/skills/wix-app/scripts/scan-a11y-eslint.cjs +39 -16
- package/skills/wix-app/scripts/sdk-curated.json +45 -0
- package/skills/wix-app/scripts/sdk-lookup.cjs +1180 -0
- package/skills/wix-base44-connector/SKILL.md +4 -2
- package/skills/wix-base44-connector/scripts/utils.cjs +5 -2
- package/skills/wix-headless-kit/SKILL.md +20 -8
- package/skills/wix-headless-kit/guides/api-run.md +92 -68
- package/skills/wix-headless-kit/guides/existing-site.md +6 -0
- package/skills/wix-headless-kit/install/AGENTS.md +3 -2
- package/skills/wix-headless-kit/install/attach.mjs +32 -27
- package/skills/wix-headless-kit/install/background.mjs +32 -0
- package/skills/wix-headless-kit/install/bootstrap.mjs +28 -11
- package/skills/wix-headless-kit/install/check.mjs +2 -2
- package/skills/wix-headless-kit/install/context.mjs +49 -5
- package/skills/wix-headless-kit/install/deploy.mjs +33 -8
- package/skills/wix-headless-kit/install/env-ignore.mjs +16 -0
- package/skills/wix-headless-kit/install/install.mjs +95 -0
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-headless-kit/install/proc.mjs +46 -0
- package/skills/wix-headless-kit/install/setup.mjs +16 -25
- package/skills/wix-headless-kit/install/templates.mjs +2 -2
- package/skills/wix-headless-templates/blog/app/components/blog/RichContent.tsx +3 -2
- package/skills/wix-headless-templates/blog/project/package-lock.json +1287 -1299
- package/skills/wix-headless-templates/blog/project/package.json +1 -1
- package/skills/wix-headless-templates/blog/project/src/components/blog/RichContent.tsx +3 -2
- package/skills/wix-headless-templates/blog/rest/authors.ts +5 -5
- package/skills/wix-headless-templates/blog/rest/comments.ts +4 -4
- package/skills/wix-headless-templates/blog/rest/post-likes.ts +3 -3
- package/skills/wix-headless-templates/blog/rest/posts.ts +4 -4
- package/skills/wix-headless-templates/blog/rest/taxonomy.ts +5 -5
- package/skills/wix-headless-templates/blog/seed/seed-blog.mjs +2 -1
- package/skills/wix-headless-templates/bookings/rest/booking.ts +4 -4
- package/skills/wix-headless-templates/bookings/rest/services.ts +4 -4
- package/skills/wix-headless-templates/bookings/seed/seed-bookings.mjs +2 -1
- package/skills/wix-headless-templates/cms/rest/collections.ts +3 -3
- package/skills/wix-headless-templates/cms/rest/items.ts +4 -4
- package/skills/wix-headless-templates/cms/seed/seed-cms.mjs +2 -1
- package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
- package/skills/wix-headless-templates/donations/rest/donate.ts +3 -3
- package/skills/wix-headless-templates/donations/seed/seed-donations.mjs +2 -1
- package/skills/wix-headless-templates/events/rest/events.ts +4 -4
- package/skills/wix-headless-templates/events/rest/orders.ts +4 -4
- package/skills/wix-headless-templates/events/rest/registration.ts +4 -4
- package/skills/wix-headless-templates/events/seed/seed-events.mjs +2 -1
- package/skills/wix-headless-templates/faq/rest/faq.ts +4 -4
- package/skills/wix-headless-templates/faq/seed/seed-faq.mjs +2 -1
- package/skills/wix-headless-templates/forms/rest/forms.ts +4 -4
- package/skills/wix-headless-templates/forms/rest/submissions.ts +4 -4
- package/skills/wix-headless-templates/forms/seed/seed-forms.mjs +2 -1
- package/skills/wix-headless-templates/members/rest/auth.ts +3 -3
- package/skills/wix-headless-templates/members/rest/members.ts +4 -4
- package/skills/wix-headless-templates/members/seed/seed-members.mjs +2 -1
- package/skills/wix-headless-templates/portfolio/rest/portfolio.ts +4 -4
- package/skills/wix-headless-templates/portfolio/seed/seed-portfolio.mjs +2 -1
- package/skills/wix-headless-templates/pricing-plans/rest/plan-access.ts +3 -3
- package/skills/wix-headless-templates/pricing-plans/rest/plans.ts +4 -4
- package/skills/wix-headless-templates/pricing-plans/rest/purchase.ts +3 -3
- package/skills/wix-headless-templates/pricing-plans/seed/seed-pricing-plans.mjs +2 -1
- package/skills/wix-headless-templates/rentals/rest/rentals.ts +4 -4
- package/skills/wix-headless-templates/rentals/seed/seed-rentals.mjs +2 -1
- package/skills/wix-headless-templates/restaurants/rest/menu.ts +4 -4
- package/skills/wix-headless-templates/restaurants/rest/ordering.ts +5 -5
- package/skills/wix-headless-templates/restaurants/rest/reservations.ts +4 -4
- package/skills/wix-headless-templates/restaurants/seed/seed-restaurants.mjs +2 -1
- package/skills/wix-headless-templates/shared/capabilities/site-search/rest/search.ts +4 -4
- package/skills/wix-headless-templates/shared/capabilities/site-search/seed/install.mjs +6 -4
- package/skills/wix-headless-templates/shared/seed/main.mjs +15 -0
- package/skills/wix-headless-templates/shared/seed/wix-cli.mjs +43 -11
- package/skills/wix-headless-templates/storefront/INSTRUCTIONS.md +1 -1
- package/skills/wix-headless-templates/storefront/rest/cart.ts +5 -5
- package/skills/wix-headless-templates/storefront/rest/catalog.ts +5 -5
- package/skills/wix-headless-templates/storefront/seed/SEED.md +27 -9
- package/skills/wix-headless-templates/storefront/seed/seed-store.mjs +2 -1
- package/skills/wix-manage/SKILL.md +31 -9
- package/skills/wix-manage/references/app-installation/install-wix-apps.md +5 -1
- package/skills/wix-manage/references/app-installation/list-installed-apps.md +19 -9
- package/skills/wix-manage/references/automations/actions.md +134 -0
- package/skills/wix-manage/references/automations/activation-status.md +64 -48
- package/skills/wix-manage/references/automations/api-catalog.md +213 -77
- package/skills/wix-manage/references/automations/automation-model.md +199 -0
- package/skills/wix-manage/references/automations/bracket-expressions.md +132 -0
- package/skills/wix-manage/references/automations/build-and-manage-automations.md +305 -26
- package/skills/wix-manage/references/automations/triggers.md +190 -0
- package/skills/wix-manage/references/bookings/booking-service-policy-setup.md +3 -0
- package/skills/wix-manage/references/bookings/external-calendar-integration.md +3 -0
- package/skills/wix-manage/references/bookings/multi-resource-service-creation.md +3 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +11 -2
- package/skills/wix-manage/references/cms/cms-publishing-flow.md +63 -16
- package/skills/wix-manage/references/collaborators/manage-site-collaborators.md +128 -0
- package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +3 -1
- package/skills/wix-manage/references/forms/read-forms-and-submissions.md +277 -0
- package/skills/wix-manage/references/forms/update-form.md +8 -0
- package/skills/wix-manage/references/pricing-plans/create-and-update-pricing-plans.md +3 -0
- package/skills/wix-manage/references/restaurants/wix-restaurants-setup.md +3 -0
- package/skills/wix-manage/references/seo/manage-url-redirects.md +33 -4
- package/skills/wix-manage/references/sites/create-headless-site.md +16 -50
- package/skills/wix-manage/references/sites/manage-oauth-apps.md +4 -4
- package/skills/wix-manage/references/sites/read-site-context.md +4 -0
- package/skills/wix-manage/references/sites/upload-static-site.md +368 -261
- package/skills/wix-manage/references/stores/add-store-pages-to-site.md +3 -0
- package/skills/wix-manage/references/stores/change-store-currency.md +3 -0
- package/skills/wix-manage/references/stores/create-product-catalog-v3.md +3 -0
- package/skills/wix-manage/references/stores/find-products-query-and-search-catalog-v3.md +3 -0
- package/skills/wix-manage/references/stores/update-product-with-options.md +192 -22
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +3 -3
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
// A plan without a numeric price is malformed and never returned (plans-core `planAmount`).
|
|
6
6
|
// Porting: keep the path, keep the body, port the core once.
|
|
7
7
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/pricing-plans/plans-v3/query-plans.md
|
|
8
|
-
import { wixRequest } from "
|
|
9
|
-
import { imgSrc } from "
|
|
10
|
-
import { plansQuery, toDetail, toSummaries, type FormatOptions, type Raw } from "
|
|
11
|
-
import type { PlanDetail, PlanSummary } from "
|
|
8
|
+
import { wixRequest } from "../../shared/rest/client.js";
|
|
9
|
+
import { imgSrc } from "../../shared/rest/media.js";
|
|
10
|
+
import { plansQuery, toDetail, toSummaries, type FormatOptions, type Raw } from "../app/wix/pricing-plans/plans-core.js";
|
|
11
|
+
import type { PlanDetail, PlanSummary } from "../app/wix/pricing-plans/types.js";
|
|
12
12
|
|
|
13
13
|
export type { FormatOptions };
|
|
14
14
|
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
// order form, and payment itself, so a visitor token starts it. Never create the order yourself,
|
|
5
5
|
// never hand-build a checkout URL.
|
|
6
6
|
// docs: https://dev.wix.com/docs/api-reference/business-management/headless/redirects/create-redirect-session.md
|
|
7
|
-
import { wixRequest } from "
|
|
8
|
-
import { purchaseBody, redirectUrl, type PurchaseOptions } from "
|
|
9
|
-
import type { Raw } from "
|
|
7
|
+
import { wixRequest } from "../../shared/rest/client.js";
|
|
8
|
+
import { purchaseBody, redirectUrl, type PurchaseOptions } from "../app/wix/pricing-plans/purchase-core.js";
|
|
9
|
+
import type { Raw } from "../app/wix/pricing-plans/plans-core.js";
|
|
10
10
|
|
|
11
11
|
export type { PurchaseOptions };
|
|
12
12
|
|
|
@@ -23,6 +23,7 @@
|
|
|
23
23
|
import { setSiteCurrency } from "../../shared/seed/site.mjs";
|
|
24
24
|
import { seedSiteId } from "../../shared/seed/site-context.mjs";
|
|
25
25
|
import { wixToken } from "../../shared/seed/wix-cli.mjs";
|
|
26
|
+
import { isMain } from "../../shared/seed/main.mjs";
|
|
26
27
|
import { readFileSync } from "node:fs";
|
|
27
28
|
import { randomUUID } from "node:crypto";
|
|
28
29
|
|
|
@@ -283,7 +284,7 @@ export async function setupPricingPlans(ctx, { plans = [], currency } = {}) {
|
|
|
283
284
|
|
|
284
285
|
// ---- CLI entry ----------------------------------------------------------------------------------
|
|
285
286
|
|
|
286
|
-
const invokedDirectly =
|
|
287
|
+
const invokedDirectly = isMain(import.meta.url);
|
|
287
288
|
if (invokedDirectly) {
|
|
288
289
|
const planPath = process.argv[2];
|
|
289
290
|
if (!planPath) {
|
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/bookings/bookings/bookings-writer-v2/create-booking.md
|
|
11
11
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/create-cart.md
|
|
12
12
|
// docs: https://dev.wix.com/docs/api-reference/business-management/headless/redirects/create-redirect-session.md
|
|
13
|
-
import { wixRequest } from "
|
|
14
|
-
import { imgSrc } from "
|
|
13
|
+
import { wixRequest } from "../../shared/rest/client.js";
|
|
14
|
+
import { imgSrc } from "../../shared/rest/media.js";
|
|
15
15
|
import {
|
|
16
16
|
FALLBACK_FIELDS,
|
|
17
17
|
RENTALS_APP_ID,
|
|
@@ -42,8 +42,8 @@ import {
|
|
|
42
42
|
toSummary,
|
|
43
43
|
type Raw,
|
|
44
44
|
type StartWindow,
|
|
45
|
-
} from "
|
|
46
|
-
import type { EndOption, RentalDetail, RentalFormField, RentalQuote, RentalResult, RentalSummary, StartOption } from "
|
|
45
|
+
} from "../app/wix/rentals/rentals-core.js";
|
|
46
|
+
import type { EndOption, RentalDetail, RentalFormField, RentalQuote, RentalResult, RentalSummary, StartOption } from "../app/wix/rentals/types.js";
|
|
47
47
|
|
|
48
48
|
export { RENTALS_APP_ID, RENTALS_FORM_ID, RENTALS_PAGE_SIZE, dailyEndOptions, defaultTimeZone };
|
|
49
49
|
|
|
@@ -26,6 +26,7 @@ import { readFileSync } from "node:fs";
|
|
|
26
26
|
import { resolveItemImages } from "../../shared/seed/images.mjs";
|
|
27
27
|
import { seedSiteId } from "../../shared/seed/site-context.mjs";
|
|
28
28
|
import { wixToken } from "../../shared/seed/wix-cli.mjs";
|
|
29
|
+
import { isMain } from "../../shared/seed/main.mjs";
|
|
29
30
|
|
|
30
31
|
const API = "https://www.wixapis.com";
|
|
31
32
|
/** The Wix Rentals app: the service's immutable appId, the catalog filter, the cart's appId. */
|
|
@@ -301,7 +302,7 @@ export async function setupRentals(ctx, { resourceTypes = [], rentals = [], curr
|
|
|
301
302
|
|
|
302
303
|
// ---- CLI entry ----------------------------------------------------------------------------------
|
|
303
304
|
|
|
304
|
-
const invokedDirectly =
|
|
305
|
+
const invokedDirectly = isMain(import.meta.url);
|
|
305
306
|
if (invokedDirectly) {
|
|
306
307
|
const planPath = process.argv[2];
|
|
307
308
|
if (!planPath) {
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/menus/menus/list-menus.md
|
|
8
8
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/menus/items/items/list-items.md
|
|
9
9
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/ecommerce-settings/get-ecommerce-settings.md
|
|
10
|
-
import { wixRequest } from "
|
|
11
|
-
import { imgSrc } from "
|
|
10
|
+
import { wixRequest } from "../../shared/rest/client.js";
|
|
11
|
+
import { imgSrc } from "../../shared/rest/media.js";
|
|
12
12
|
import {
|
|
13
13
|
anyLabels,
|
|
14
14
|
assembleMenus,
|
|
@@ -19,8 +19,8 @@ import {
|
|
|
19
19
|
nextCursor,
|
|
20
20
|
toSiteMoney,
|
|
21
21
|
type Raw,
|
|
22
|
-
} from "
|
|
23
|
-
import type { MenuData, SiteMoney } from "
|
|
22
|
+
} from "../app/wix/restaurants/menu-core.js";
|
|
23
|
+
import type { MenuData, SiteMoney } from "../app/wix/restaurants/types.js";
|
|
24
24
|
|
|
25
25
|
const get = (path: string, query?: Record<string, string | readonly string[]>) => wixRequest<Raw>(path, { method: "GET", query });
|
|
26
26
|
|
|
@@ -12,10 +12,10 @@
|
|
|
12
12
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/fulfillment-methods/list-fulfillment-methods.md
|
|
13
13
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/add-line-items-to-current-cart.md
|
|
14
14
|
// docs: https://dev.wix.com/docs/api-reference/business-management/headless/redirects/create-redirect-session.md
|
|
15
|
-
import { WixApiError, wixRequest } from "
|
|
16
|
-
import { imgSrc } from "
|
|
15
|
+
import { WixApiError, wixRequest } from "../../shared/rest/client.js";
|
|
16
|
+
import { imgSrc } from "../../shared/rest/media.js";
|
|
17
17
|
import { fetchSiteMoney } from "./menu.js";
|
|
18
|
-
import { initialSelection, nextCursor, validateSelection, type Raw } from "
|
|
18
|
+
import { initialSelection, nextCursor, validateSelection, type Raw } from "../app/wix/restaurants/menu-core.js";
|
|
19
19
|
import {
|
|
20
20
|
RESTAURANTS_ORDERS_APP_ID,
|
|
21
21
|
assertOrderAdded,
|
|
@@ -29,8 +29,8 @@ import {
|
|
|
29
29
|
toFulfillmentMethods,
|
|
30
30
|
toMenuOrderingMap,
|
|
31
31
|
toOrderCart,
|
|
32
|
-
} from "
|
|
33
|
-
import type { FulfillmentMethodInfo, MenuItem, MenuOrderingInfo, OrderCart, OrderSelection, OrderingStatus } from "
|
|
32
|
+
} from "../app/wix/restaurants/ordering-core.js";
|
|
33
|
+
import type { FulfillmentMethodInfo, MenuItem, MenuOrderingInfo, OrderCart, OrderSelection, OrderingStatus } from "../app/wix/restaurants/types.js";
|
|
34
34
|
|
|
35
35
|
export { RESTAURANTS_ORDERS_APP_ID };
|
|
36
36
|
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/reservations/reservations/create-held-reservation.md
|
|
10
10
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/reservations/reservations/reserve-reservation.md
|
|
11
11
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/reservations/reservations/create-reservation.md
|
|
12
|
-
import { wixRequest } from "
|
|
13
|
-
import { availableSlots, reservationBody, reserveeBody, toConfirmation, toHold, toLocations } from "
|
|
14
|
-
import type { Raw } from "
|
|
12
|
+
import { wixRequest } from "../../shared/rest/client.js";
|
|
13
|
+
import { availableSlots, reservationBody, reserveeBody, toConfirmation, toHold, toLocations } from "../app/wix/restaurants/reservations-core.js";
|
|
14
|
+
import type { Raw } from "../app/wix/restaurants/menu-core.js";
|
|
15
15
|
import type {
|
|
16
16
|
ReservationConfirmation,
|
|
17
17
|
ReservationFormConfig,
|
|
@@ -19,7 +19,7 @@ import type {
|
|
|
19
19
|
ReservationLocationInfo,
|
|
20
20
|
ReservationReservee,
|
|
21
21
|
ReservationSlot,
|
|
22
|
-
} from "
|
|
22
|
+
} from "../app/wix/restaurants/types.js";
|
|
23
23
|
|
|
24
24
|
const RESERVATIONS = "/table-reservations/reservations/v1";
|
|
25
25
|
|
|
@@ -28,6 +28,7 @@ import { readFileSync } from "node:fs";
|
|
|
28
28
|
import { resolveItemImages } from "../../shared/seed/images.mjs";
|
|
29
29
|
import { seedSiteId } from "../../shared/seed/site-context.mjs";
|
|
30
30
|
import { wixToken } from "../../shared/seed/wix-cli.mjs";
|
|
31
|
+
import { isMain } from "../../shared/seed/main.mjs";
|
|
31
32
|
|
|
32
33
|
const API = "https://www.wixapis.com";
|
|
33
34
|
const MENUS_APP_ID = "b278a256-2757-4f19-9313-c05c783bec92";
|
|
@@ -560,7 +561,7 @@ export async function setupRestaurants(ctx, plan) {
|
|
|
560
561
|
|
|
561
562
|
// ---- CLI entry ----------------------------------------------------------------------------------
|
|
562
563
|
|
|
563
|
-
const invokedDirectly =
|
|
564
|
+
const invokedDirectly = isMain(import.meta.url);
|
|
564
565
|
if (invokedDirectly) {
|
|
565
566
|
const planPath = process.argv[2];
|
|
566
567
|
if (!planPath) {
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
// a literal body per function. Every call here answers a visitor token (observed live). Porting:
|
|
5
5
|
// keep the paths, keep the bodies, port the core once.
|
|
6
6
|
// docs: https://dev.wix.com/docs/api-reference/business-management/site-search/wix-site-search/search.md
|
|
7
|
-
import { wixRequest } from "
|
|
8
|
-
import { imgSrc } from "
|
|
7
|
+
import { wixRequest } from "../../../rest/client.js";
|
|
8
|
+
import { imgSrc } from "../../../rest/media.js";
|
|
9
9
|
import { siteSearchPlan } from "./site-search-config.generated.js";
|
|
10
10
|
import {
|
|
11
11
|
GROUP_LIMIT,
|
|
@@ -23,8 +23,8 @@ import {
|
|
|
23
23
|
toSearchAll,
|
|
24
24
|
toSuggestGroups,
|
|
25
25
|
type Raw,
|
|
26
|
-
} from "
|
|
27
|
-
import type { SearchAllResult, SearchOptions, SearchPage, SiteSearchConfig, SuggestGroup } from "
|
|
26
|
+
} from "../app/wix/site-search/search-core.js";
|
|
27
|
+
import type { SearchAllResult, SearchOptions, SearchPage, SiteSearchConfig, SuggestGroup } from "../app/wix/site-search/types.js";
|
|
28
28
|
|
|
29
29
|
/** The plan's siteSearch entry resolved — types in order, routes, labels. */
|
|
30
30
|
export const config: SiteSearchConfig = resolveConfig(siteSearchPlan);
|
|
@@ -11,10 +11,10 @@
|
|
|
11
11
|
// (searchAll("<a seeded title word>")) and expect a non-empty group before wiring the UI. Zero
|
|
12
12
|
// documents after a minute means the app is not installed or the content is not visible to the
|
|
13
13
|
// index (hidden products, drafts), not that the query is wrong.
|
|
14
|
-
import { execFileSync } from "node:child_process";
|
|
15
14
|
import { seedSiteId } from "../../../seed/site-context.mjs";
|
|
16
15
|
import { existsSync, readFileSync } from "node:fs";
|
|
17
16
|
import { installSiteSearch } from "../../../seed/site.mjs";
|
|
17
|
+
import { wixToken } from "../../../seed/wix-cli.mjs";
|
|
18
18
|
|
|
19
19
|
function flag(name) {
|
|
20
20
|
const i = process.argv.indexOf(`--${name}`);
|
|
@@ -29,9 +29,11 @@ if (!siteId) {
|
|
|
29
29
|
console.log(JSON.stringify({ error: "no site: pass --site <siteId> or run in a folder with wix.config.json" }));
|
|
30
30
|
process.exit(1);
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
let token;
|
|
33
|
+
try {
|
|
34
|
+
token = wixToken(siteId);
|
|
35
|
+
} catch (e) {
|
|
36
|
+
console.log(JSON.stringify({ error: String(e.message).slice(0, 400) }));
|
|
35
37
|
process.exit(1);
|
|
36
38
|
}
|
|
37
39
|
try {
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Whether a seed module is the script node was started with (`node seed-<vertical>.mjs plan.json`)
|
|
2
|
+
// rather than imported. Compares real paths, so Windows backslashes, relative invocations and
|
|
3
|
+
// symlinked folders all match (node reports the module's real path in import.meta.url).
|
|
4
|
+
import { realpathSync } from "node:fs";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import { fileURLToPath } from "node:url";
|
|
7
|
+
|
|
8
|
+
export function isMain(moduleUrl) {
|
|
9
|
+
if (!process.argv[1]) return false;
|
|
10
|
+
try {
|
|
11
|
+
return realpathSync(resolve(process.argv[1])) === realpathSync(fileURLToPath(moduleUrl));
|
|
12
|
+
} catch {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
@@ -1,28 +1,60 @@
|
|
|
1
1
|
// The Wix CLI the seeds call for a site token and for `wix env pull`.
|
|
2
2
|
//
|
|
3
|
-
// Order: the project's own copy (node_modules
|
|
3
|
+
// Order: the project's own copy (node_modules/@wix/cli, installed with the template's lock), then
|
|
4
4
|
// a `wix` on PATH, then `npx -y @wix/cli@<pinned>` — which installs the CLI before running it, 20 to
|
|
5
5
|
// 60 s and a wall of npm output on a fresh machine. The first two take under two seconds.
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
//
|
|
7
|
+
// On Windows `wix` and `npx` are .cmd shims, which Node starts only through a shell (ENOENT
|
|
8
|
+
// without one, EINVAL for an explicit .cmd since Node 20.12). There the CLI's own JS entry, and
|
|
9
|
+
// npm's npx entry beside node.exe, run through node directly.
|
|
10
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
11
|
+
import { delimiter, dirname, join } from "node:path";
|
|
8
12
|
import { execFileSync, spawnSync } from "node:child_process";
|
|
9
13
|
|
|
10
14
|
// The CLI version the fallback installs; equal to `@wix/cli` in wix-headless-kit/install/pins.json.
|
|
11
15
|
const WIX_CLI_VERSION = "1.1.258";
|
|
16
|
+
const isWin = process.platform === "win32";
|
|
17
|
+
|
|
18
|
+
// The JS file a @wix/cli install runs (package.json `bin`), or null.
|
|
19
|
+
function cliEntry(pkgDir) {
|
|
20
|
+
try {
|
|
21
|
+
const { bin } = JSON.parse(readFileSync(join(pkgDir, "package.json"), "utf8"));
|
|
22
|
+
const rel = typeof bin === "string" ? bin : bin?.wix;
|
|
23
|
+
return rel && existsSync(join(pkgDir, rel)) ? join(pkgDir, rel) : null;
|
|
24
|
+
} catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function viaNpx() {
|
|
30
|
+
const pkg = `@wix/cli@${WIX_CLI_VERSION}`;
|
|
31
|
+
if (!isWin) return { file: "npx", prefix: ["-y", pkg] };
|
|
32
|
+
const js = join(dirname(process.execPath), "node_modules", "npm", "bin", "npx-cli.js");
|
|
33
|
+
if (existsSync(js)) return { file: process.execPath, prefix: [js, "-y", pkg] };
|
|
34
|
+
return { file: "npx.cmd", prefix: ["-y", pkg], shell: true };
|
|
35
|
+
}
|
|
12
36
|
|
|
13
37
|
export function resolveWixCli(cwd = process.cwd()) {
|
|
14
|
-
const bin = process.platform === "win32" ? "wix.cmd" : "wix";
|
|
15
|
-
const local = join(cwd, "node_modules", ".bin", bin);
|
|
16
38
|
// The project's copy counts only once its install has finished: the seed runs beside a detached
|
|
17
39
|
// npm install, and mid-install the .bin shim can exist before the package it points at does
|
|
18
40
|
// (seen live: "Cannot find module node_modules/.bin/wix"). npm writes node_modules/.package-lock.json
|
|
19
41
|
// last, the same marker the kit's install step syncs on.
|
|
20
|
-
const
|
|
21
|
-
|
|
42
|
+
const pkgDir = join(cwd, "node_modules", "@wix", "cli");
|
|
43
|
+
const installed = existsSync(join(cwd, "node_modules", ".package-lock.json")) && existsSync(join(pkgDir, "package.json"));
|
|
44
|
+
if (installed) {
|
|
45
|
+
const local = join(cwd, "node_modules", ".bin", "wix");
|
|
46
|
+
if (!isWin && existsSync(local)) return { file: local, prefix: [] };
|
|
47
|
+
const entry = isWin && cliEntry(pkgDir);
|
|
48
|
+
if (entry) return { file: process.execPath, prefix: [entry] };
|
|
49
|
+
}
|
|
22
50
|
for (const dir of (process.env.PATH ?? "").split(delimiter)) {
|
|
23
|
-
if (dir
|
|
51
|
+
if (!dir) continue;
|
|
52
|
+
if (!isWin && existsSync(join(dir, "wix"))) return { file: join(dir, "wix"), prefix: [] };
|
|
53
|
+
// A global npm install on Windows: wix.cmd in the prefix, the package beside it.
|
|
54
|
+
const entry = isWin && existsSync(join(dir, "wix.cmd")) && cliEntry(join(dir, "node_modules", "@wix", "cli"));
|
|
55
|
+
if (entry) return { file: process.execPath, prefix: [entry] };
|
|
24
56
|
}
|
|
25
|
-
return
|
|
57
|
+
return viaNpx();
|
|
26
58
|
}
|
|
27
59
|
|
|
28
60
|
/**
|
|
@@ -32,7 +64,7 @@ export function resolveWixCli(cwd = process.cwd()) {
|
|
|
32
64
|
*/
|
|
33
65
|
export function wixToken(siteId, cwd = process.cwd()) {
|
|
34
66
|
const cli = resolveWixCli(cwd);
|
|
35
|
-
const out = execFileSync(cli.file, [...cli.prefix, "token", "--site", siteId], { encoding: "utf8", cwd });
|
|
67
|
+
const out = execFileSync(cli.file, [...cli.prefix, "token", "--site", siteId], { encoding: "utf8", cwd, shell: cli.shell, windowsHide: true });
|
|
36
68
|
// An older CLI starts its "update available" box on the token's own line, so a line split is
|
|
37
69
|
// not enough: the token is the first long run of token characters.
|
|
38
70
|
const token = out.match(/[A-Za-z0-9._-]{40,}/)?.[0];
|
|
@@ -43,5 +75,5 @@ export function wixToken(siteId, cwd = process.cwd()) {
|
|
|
43
75
|
/** Runs a Wix CLI command synchronously; same return shape as spawnSync. */
|
|
44
76
|
export function runWix(args, { cwd = process.cwd(), ...opts } = {}) {
|
|
45
77
|
const cli = resolveWixCli(cwd);
|
|
46
|
-
return spawnSync(cli.file, [...cli.prefix, ...args], { cwd, ...opts });
|
|
78
|
+
return spawnSync(cli.file, [...cli.prefix, ...args], { cwd, shell: cli.shell, windowsHide: true, ...opts });
|
|
47
79
|
}
|
|
@@ -264,7 +264,7 @@ import { seoTags } from "@wix/seo";
|
|
|
264
264
|
export const wixMetadata = {
|
|
265
265
|
appDefId: WIX_APPS.checkoutAndOrders.id,
|
|
266
266
|
pageIdentifier: WIX_APPS.checkoutAndOrders.categoryPageMetadata.pageIdentifier,
|
|
267
|
-
identifiers: { slug: WIX_APPS.checkoutAndOrders.categoryPageMetadata.identifiers.
|
|
267
|
+
identifiers: { slug: WIX_APPS.checkoutAndOrders.categoryPageMetadata.identifiers.collection },
|
|
268
268
|
};
|
|
269
269
|
|
|
270
270
|
const slug = Astro.params.slug!;
|
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
// All calls run with the visitor token: the cart is the token's (see ../shared/client).
|
|
7
7
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/add-line-items-to-current-cart.md
|
|
8
8
|
// docs: https://dev.wix.com/docs/api-reference/business-management/headless/redirects/create-redirect-session.md
|
|
9
|
-
import { WixApiError, wixRequest } from "
|
|
10
|
-
import { imgSrc } from "
|
|
11
|
-
import { EMPTY_TOTALS, WIX_STORES_APP_ID, addOptions, assertAdded, assertCheckoutable, cartErrorMessage, rawId, summaryTotals, toCart } from "
|
|
12
|
-
import type { Raw } from "
|
|
13
|
-
import type { Cart } from "
|
|
9
|
+
import { WixApiError, wixRequest } from "../../shared/rest/client.js";
|
|
10
|
+
import { imgSrc } from "../../shared/rest/media.js";
|
|
11
|
+
import { EMPTY_TOTALS, WIX_STORES_APP_ID, addOptions, assertAdded, assertCheckoutable, cartErrorMessage, rawId, summaryTotals, toCart } from "../app/wix/storefront/cart-core.js";
|
|
12
|
+
import type { Raw } from "../app/wix/storefront/catalog-core.js";
|
|
13
|
+
import type { Cart } from "../app/wix/storefront/types.js";
|
|
14
14
|
|
|
15
15
|
const CART = "/ecom/v2/carts/current";
|
|
16
16
|
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
// Porting: keep the paths, keep the bodies, port the core once.
|
|
6
6
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/products-v3/search-products.md
|
|
7
7
|
// docs: https://dev.wix.com/docs/api-reference/business-solutions/stores/catalog-v3/categories/get-category-by-slug.md
|
|
8
|
-
import { WixApiError, wixRequest } from "
|
|
9
|
-
import { imgSrc, mediaKey } from "
|
|
8
|
+
import { WixApiError, wixRequest } from "../../shared/rest/client.js";
|
|
9
|
+
import { imgSrc, mediaKey } from "../../shared/rest/media.js";
|
|
10
10
|
import {
|
|
11
11
|
CATALOG_SORTS,
|
|
12
12
|
DETAIL_FIELDS,
|
|
@@ -29,9 +29,9 @@ import {
|
|
|
29
29
|
type CatalogSort,
|
|
30
30
|
type FacetSelection,
|
|
31
31
|
type Raw,
|
|
32
|
-
} from "
|
|
33
|
-
import { WIX_STORES_APP_ID } from "
|
|
34
|
-
import type { Category, Facet, FacetData, ProductDetail, ProductSummary, VariantInventory } from "
|
|
32
|
+
} from "../app/wix/storefront/catalog-core.js";
|
|
33
|
+
import { WIX_STORES_APP_ID } from "../app/wix/storefront/cart-core.js";
|
|
34
|
+
import type { Category, Facet, FacetData, ProductDetail, ProductSummary, VariantInventory } from "../app/wix/storefront/types.js";
|
|
35
35
|
|
|
36
36
|
export { CATALOG_SORTS, choiceAvailability, resolveVariant, sellingPrice, type CatalogSearchOptions, type CatalogSort, type FacetSelection };
|
|
37
37
|
|
|
@@ -99,7 +99,7 @@ to a file if you want it later). `.seed-exit` and `seed-result.json` are written
|
|
|
99
99
|
create only; an existing category keeps what it has.
|
|
100
100
|
- `quantity` — tracked stock, a non-negative integer. For stock that isn't counted (made to
|
|
101
101
|
order, print on demand, unlimited) use `"inStock": true` **instead** of `quantity`; sending
|
|
102
|
-
both is rejected.
|
|
102
|
+
both is rejected. A product with no stock given, drafted or the user's own, is `"inStock": true`.
|
|
103
103
|
Right after the bulk create, a product's own stock summary can still read `OUT_OF_STOCK`
|
|
104
104
|
while its inventory items are already stocked; the items are what a buyer's add is checked
|
|
105
105
|
against. A product **without options** can still end up with no item (a create that ran while
|
|
@@ -107,16 +107,18 @@ to a file if you want it later). `.seed-exit` and `seed-result.json` are written
|
|
|
107
107
|
Inventory Items call (`productId`, its single `variantId`, and `inStock: true` or the
|
|
108
108
|
`quantity`), where `ALREADY_EXISTS` means the item is already there. A seed made call by call
|
|
109
109
|
reads the items (Query Inventory Items) and creates only the missing ones.
|
|
110
|
-
- `currency` — 3-letter ISO code. Set it **only when the
|
|
111
|
-
currency ("prices in euros") or a price written with its unit ("9
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
110
|
+
- `currency` — 3-letter ISO code. Set it **only when the user names one**, in the brief or on their
|
|
111
|
+
own pages: a sentence about currency ("prices in euros") or a price written with its unit ("9
|
|
112
|
+
dollars", "$9", "€20"). On a site this run created it is set without asking; a store the user
|
|
113
|
+
already runs is asked first. Do **not** infer it from a language, a country, or an address — an
|
|
114
|
+
unrequested switch silently reprices the whole catalog. The seed applies it before creating
|
|
115
|
+
anything, because a product's price is stored in the site currency at create time. For a few
|
|
116
|
+
seconds afterwards product reads can still report the old currency; that lag is
|
|
115
117
|
expected and self-resolves, so don't re-verify it or retry.
|
|
116
118
|
|
|
117
119
|
**Default to 3 products** when you draft the catalog yourself — the seed shows the shape, not a
|
|
118
|
-
full inventory; the owner adds the rest in the dashboard.
|
|
119
|
-
UI**: give at least one product a color option and put one product on sale — truthfully to the
|
|
120
|
+
full inventory; the owner adds the rest in the dashboard. The closing names drafted products as
|
|
121
|
+
placeholders. **Make those 3 exercise the shipped UI**: give at least one product a color option and put one product on sale — truthfully to the
|
|
120
122
|
business (a ceramics studio has glaze colors; a bakery doesn't). When the brief mentions gift
|
|
121
123
|
wrap, engraving, a message card, pre-orders, or "coming soon" stock, seed ONE product with that
|
|
122
124
|
modifier and ONE pre-order item so the surfaces exist to design against; never add them to a
|
|
@@ -143,7 +145,8 @@ a new site (a dozen products: "Baseball Cap", "Ceramic Flower Vase", "Crew T-Shi
|
|
|
143
145
|
live shop lists them next to the owner's, so they are never silent: the result's `preexisting[]` names
|
|
144
146
|
every product the plan did not name (`{ id, name, slug }`), and the closing message says so with the
|
|
145
147
|
Manage products link (`dashboardProductsUrl` in the result) so the owner removes them there if they
|
|
146
|
-
want to.
|
|
148
|
+
want to. After a currency change their prices keep the same numbers in the new currency, and the
|
|
149
|
+
closing says so. Categories are idempotent by name — a re-run reuses "Donuts" instead of creating a second one.
|
|
147
150
|
|
|
148
151
|
**Images are confirmed, not assumed.** `imagesAttached` counts the attaches the API reported as
|
|
149
152
|
successful; `imageFailures: [{ name, error }]` names the products left without an image and why.
|
|
@@ -161,6 +164,8 @@ duplicated. Never hand-patch ids to "fill the gap".
|
|
|
161
164
|
|
|
162
165
|
Two things this module does not seed (dashboard-only — tell the merchant): **SKUs** and
|
|
163
166
|
**subscription plans** (the storefront renders them when the merchant adds them).
|
|
167
|
+
Shipping isn't seeded either; when the brief asks for it, `wix-manage`'s
|
|
168
|
+
`references/ecommerce/ecom-shipping.md` sets it up.
|
|
164
169
|
|
|
165
170
|
## Escape hatch — individual functions
|
|
166
171
|
|
|
@@ -169,6 +174,19 @@ ordering: `installStoresApp`, `readAllProducts`, `bulkCreateProducts`,
|
|
|
169
174
|
`createCategories(ctx, names, details?)`, `addProductsToCategories`, `attachProductImages` — plus
|
|
170
175
|
`makeCtx()` for the auth context.
|
|
171
176
|
|
|
177
|
+
A seed made call by call sends the body `bulkCreateProducts` builds
|
|
178
|
+
(`POST /stores/v3/bulk/products-with-inventory/create`); the description is rich-text nodes, as
|
|
179
|
+
`mkDesc` turns them out:
|
|
180
|
+
|
|
181
|
+
```json
|
|
182
|
+
{ "returnEntity": true, "products": [{
|
|
183
|
+
"name": "Hearth Candle", "productType": "PHYSICAL", "physicalProperties": {},
|
|
184
|
+
"description": { "nodes": [{ "type": "PARAGRAPH", "id": "d0", "paragraphData": {},
|
|
185
|
+
"nodes": [{ "type": "TEXT", "id": "", "textData": { "text": "Hand-poured soy wax.", "decorations": [] } }] }] },
|
|
186
|
+
"variantsInfo": { "variants": [{ "price": { "actualPrice": { "amount": "28" } },
|
|
187
|
+
"physicalProperties": {}, "inventoryItem": { "inStock": true } }] } }] }
|
|
188
|
+
```
|
|
189
|
+
|
|
172
190
|
## Reference
|
|
173
191
|
|
|
174
192
|
If a call returns an unexpected shape or you need an operation this module doesn't cover, read
|
|
@@ -32,6 +32,7 @@ import { readFileSync } from "node:fs";
|
|
|
32
32
|
import { resolveItemImages, resolveItemImagesDetailed } from "../../shared/seed/images.mjs";
|
|
33
33
|
import { seedSiteId } from "../../shared/seed/site-context.mjs";
|
|
34
34
|
import { wixToken } from "../../shared/seed/wix-cli.mjs";
|
|
35
|
+
import { isMain } from "../../shared/seed/main.mjs";
|
|
35
36
|
|
|
36
37
|
const API = "https://www.wixapis.com";
|
|
37
38
|
const STORES_APP_ID = "215238eb-22a5-4c36-9e7b-e7c08025e04e";
|
|
@@ -854,7 +855,7 @@ export async function setupStore(ctx, { products = [], categories = {}, category
|
|
|
854
855
|
|
|
855
856
|
// ---- CLI entry ----------------------------------------------------------------------------------
|
|
856
857
|
|
|
857
|
-
const invokedDirectly =
|
|
858
|
+
const invokedDirectly = isMain(import.meta.url);
|
|
858
859
|
if (invokedDirectly) {
|
|
859
860
|
const planPath = process.argv[2];
|
|
860
861
|
if (!planPath) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: wix-manage
|
|
3
|
-
description: "REST recipes to configure and manage a Wix site's business solutions — stores, bookings, payments, CMS, and more. Open the matching recipe for the exact endpoint, method, and payload before calling — never guess a Wix API, never write Wix dashboard URL from memory. Routes to: automations, stores, bookings, get-paid, CMS, contacts, forms, media, app-installation, custom-apps, pricing-plans, restaurants, ricos rich-content, sites, blog, calendar, domains, events, site-properties, ecommerce, marketing, google-ads, google-business-profile, analytics, accessibility, seo, dashboard-navigation."
|
|
3
|
+
description: "REST recipes to configure and manage a Wix site's business solutions — stores, bookings, payments, CMS, and more. Open the matching recipe for the exact endpoint, method, and payload before calling — never guess a Wix API, never write Wix dashboard URL from memory. Routes to: automations, stores, bookings, get-paid, CMS, contacts, forms, media, app-installation, custom-apps, pricing-plans, restaurants, ricos rich-content, sites, collaborators, blog, calendar, domains, events, site-properties, ecommerce, marketing, google-ads, google-business-profile, analytics, accessibility, seo, dashboard-navigation."
|
|
4
4
|
compatibility: Requires Wix REST API access (API key or OAuth).
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -47,7 +47,7 @@ Lists all apps installed on a site using Apps Installer API. Useful for verifyin
|
|
|
47
47
|
Read and update SEO titles and tags at the right level. For "change my site's SEO title", clarify homepage, specific page, or page-type pattern before discovery or writes; site-level tags accept meta tags only, never titles. Discover item IDs and pattern variables, read before every full-replace write, and report resolved tags with their sources.
|
|
48
48
|
|
|
49
49
|
### [Manage URL Redirects on a Wix Site](references/seo/manage-url-redirects.md)
|
|
50
|
-
"Retrieve, create, and delete URL redirects on a Wix site using the public SEO Redirects API. Covers exact and group redirects, language-scoped redirects for multilingual sites,
|
|
50
|
+
"Retrieve, create, and delete URL redirects on a Wix site using the public SEO Redirects API. Covers exact and group redirects, language-scoped redirects for multilingual sites, bulk creates of up to 100 and bulk deletes of up to 500, and the change flow for a redirect that already exists. This API has no query, search, or update method: List Redirects is the only read-many. Redirects do not chain, so creating one that points at a path another redirect starts from permanently deletes that other redirect; list and check before every write."
|
|
51
51
|
|
|
52
52
|
### [Generate and Read a Wix Site's Content Plan](references/seo/manage-content-plan.md)
|
|
53
53
|
Generate an SEO content plan and read its blog post topics, or troubleshoot an existing content plan flow stuck at KEYWORD_RESEARCH while polling GetContentPlanFlow. Use this recipe for both generation and stalled-flow questions: it explains the intentional pause, the Create Content Plan release request, missing flow IDs, and the exact public API paths and response fields.
|
|
@@ -252,8 +252,11 @@ Routes discounts, coupons, sales and bundles to promotion recipes, and visual pr
|
|
|
252
252
|
### [Update Form](references/forms/update-form.md)
|
|
253
253
|
"Changes a Wix form that already exists, with Form Schemas v4 `PATCH` — add a field to my form, add a dropdown, make a field required or optional, rename a label, reorder or retire a question. Covers reading the form back for its `revision` (and the required `namespace` query parameter), the whole-form body that a `PATCH` needs, the wholesale `formFields` replace that silently soft-deletes anything you omit, changing a field's component type in place, retiring a field that already has submissions, and the read-back that proves what was stored. Use whenever the form exists and the request changes what it collects; use Create Form when there is no form yet."
|
|
254
254
|
|
|
255
|
+
### [Read Forms and Submissions](references/forms/read-forms-and-submissions.md)
|
|
256
|
+
"Reads a site's Wix forms and the submissions visitors sent to them — what forms do I have, find a form by name, show the latest submissions, who filled in my contact form, how many submissions did I get last week, submissions from one contact, unread submissions. Covers finding the form's namespace instead of guessing it, where that namespace goes on each read, the Form Schemas and Form Submissions endpoints (and the look-alike URLs that 404), forms hidden from a default listing, the closed list of submission fields you can filter and sort by, date ranges, cursor paging, totals per form, and reading answers by field. Read-only; changing a form is Update Form, building one is Create Form."
|
|
257
|
+
|
|
255
258
|
### [Forms Dashboard Navigation](references/forms/forms-dashboard-navigation.md)
|
|
256
|
-
"Builds direct links to Wix Forms dashboard pages on manage.wix.com. The paths are not guessable and appear in no API reference, so take them from here: under `https://manage.wix.com/dashboard/{metaSiteId}/`, the forms list is `wix-forms`, a form's builder is `wix-forms/form/{formId}`, and that form's submissions are `wix-forms/form/{formId}/submissions` — there is no site-wide submissions page, and nothing lives under `contacts/forms`, `forms`, `form-builder` or `wix-forms-and-payments` (the legacy app). Also standalone forms, and
|
|
259
|
+
"Builds direct links to Wix Forms dashboard pages on manage.wix.com. The paths are not guessable and appear in no API reference, so take them from here: under `https://manage.wix.com/dashboard/{metaSiteId}/`, the forms list is `wix-forms`, a form's builder is `wix-forms/form/{formId}`, and that form's submissions are `wix-forms/form/{formId}/submissions` — there is no site-wide submissions page, and nothing lives under `contacts/forms`, `forms`, `form-builder` or `wix-forms-and-payments` (the legacy app). Also standalone forms, and the dashboard link for each Forms entity; reading forms and submissions is Read Forms and Submissions."
|
|
257
260
|
|
|
258
261
|
---
|
|
259
262
|
|
|
@@ -390,13 +393,20 @@ Authoritative recipe for hand-authoring valid Ricos rich-content JSON (the richC
|
|
|
390
393
|
|
|
391
394
|
---
|
|
392
395
|
|
|
396
|
+
## Collaborators
|
|
397
|
+
|
|
398
|
+
### [Manage Site Collaborators](references/collaborators/manage-site-collaborators.md)
|
|
399
|
+
Manages who has access to a Wix site as a collaborator (contributor) — finds the site's current collaborators, invites someone, removes a collaborator, and resends or revokes a pending collaborator invite. Use when the user wants to give someone access to the site, take it away, or follow up on an invitation that has not been accepted.
|
|
400
|
+
|
|
401
|
+
---
|
|
402
|
+
|
|
393
403
|
## Sites
|
|
394
404
|
|
|
395
405
|
### [Create Site from Template](references/sites/create-site-from-template.md)
|
|
396
406
|
Creates new Wix sites from templates using account-level APIs. Covers template search, site creation, and publishing. Not for headless sites.
|
|
397
407
|
|
|
398
408
|
### [Create Headless Site](references/sites/create-headless-site.md)
|
|
399
|
-
Creates a Wix Headless site
|
|
409
|
+
Creates a Wix Headless website: a site in the user's Wix account whose frontend is files uploaded to Wix hosting, with the Wix business backend behind it through APIs. The site is created and its pages put live by Upload a Website or HTML Files; a Wix Business Solution (a store, blog, bookings and more) is then integrated into it by the Wix Headless kit, from its cold start.
|
|
400
410
|
|
|
401
411
|
### [Manage OAuth Apps](references/sites/manage-oauth-apps.md)
|
|
402
412
|
Create, read, update, and query OAuth apps for a Wix headless site. Each OAuth app's id is the client_id a frontend uses to mint anonymous visitor tokens and call Wix APIs.
|
|
@@ -417,7 +427,7 @@ Drive the Wix Site Import agent to migrate an existing store or site from anothe
|
|
|
417
427
|
"Builds direct links to the account-level sites pages on manage.wix.com — the My Sites list (all sites in the account) and each site's own dashboard. Pairs the site list with the Query Sites read API. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."
|
|
418
428
|
|
|
419
429
|
### [Upload a Website or HTML Files](references/sites/upload-static-site.md)
|
|
420
|
-
Publish
|
|
430
|
+
Publish HTML, CSS, JavaScript or a static build as a Wix Headless website; inspect its deployed files and edit them on the same site and URL. Covers file and ZIP uploads, selective additions, replacements and deletions while preserving other files, full-site replacement, authenticated and anonymous publishing, verification, and connecting a Wix business backend. Use for files the user supplies or pages you create for them. Not for migrating a live site from another platform by URL or CSV (use Site Import), embedding code in an editor-built Wix site, or uploading assets to Media Manager.
|
|
421
431
|
|
|
422
432
|
---
|
|
423
433
|
|
|
@@ -445,7 +455,7 @@ Query and list products from a Wix Store using the Catalog V1 Query Products end
|
|
|
445
455
|
Manages pre-order settings for product variants using V3 Inventory API. Covers enabling/disabling pre-orders, setting messages, configuring limits, and handling trackQuantity requirements.
|
|
446
456
|
|
|
447
457
|
### [Update Product with Options (Catalog V3)](references/stores/update-product-with-options.md)
|
|
448
|
-
|
|
458
|
+
Start here for existing Catalog V3 product updates, including digital products that fail at add-to-cart with ITEM_NOT_FOUND_IN_CATALOG. Includes name lookup, Get Product, and PATCH in one flow, plus importing a supplied PDF and attaching it to the existing variant. Covers options, variant prices and SKUs, product visibility (hide/unhide through `visible`, never delete), description edits that preserve Rich Content, and revision-based updates. Read another recipe only for a field or operation this flow does not cover.
|
|
449
459
|
|
|
450
460
|
### [Stores Dashboard Navigation](references/stores/stores-dashboard-navigation.md)
|
|
451
461
|
"Builds direct links to Wix Stores and eCommerce dashboard pages on manage.wix.com — products list, edit a specific product, categories, inventory, orders list, a specific order, abandoned checkouts, gift cards, shipping and tax settings. Pairs each main Stores/eCommerce entity with its read API so you can fetch an entity and hand back a 'view it in your dashboard' link. Use when the user asks where something is in the Wix dashboard, wants a direct link to a dashboard page, or you need a dashboard URL to include with the result of an API operation."
|
|
@@ -454,16 +464,28 @@ Modifies existing products and variants using Catalog V3 Products API. Covers ad
|
|
|
454
464
|
## Automations
|
|
455
465
|
|
|
456
466
|
### [Build and Manage Wix Automations](references/automations/build-and-manage-automations.md)
|
|
457
|
-
|
|
467
|
+
Inspect Wix automations and their on/off status, create linear automations from the site’s installed triggers and actions, and turn automations on or off on request.
|
|
458
468
|
|
|
459
469
|
<details>
|
|
460
470
|
<summary>Internal skills (loaded on demand by Build and Manage Wix Automations — do NOT use directly)</summary>
|
|
461
471
|
|
|
462
472
|
- [Automations API Catalog](references/automations/api-catalog.md)
|
|
463
|
-
Discover
|
|
473
|
+
Discover site-specific triggers and actions, authenticate public Automation API calls, and choose the API for validation, persistence or catalog lookups.
|
|
474
|
+
|
|
475
|
+
- [Automations Graph and Data Model](references/automations/automation-model.md)
|
|
476
|
+
Assemble builder-editable automation graphs with valid node relationships, namespaces and ancestor data access.
|
|
477
|
+
|
|
478
|
+
- [Automations Trigger Configuration](references/automations/triggers.md)
|
|
479
|
+
Select and configure automation triggers, trigger filters and event payload schemas using the site catalog.
|
|
480
|
+
|
|
481
|
+
- [Automations Action Configuration](references/automations/actions.md)
|
|
482
|
+
Configure app-defined automation actions from their input schemas and preserve supported existing action mappings.
|
|
483
|
+
|
|
484
|
+
- [Automations Mapping Expressions](references/automations/bracket-expressions.md)
|
|
485
|
+
Write builder-compatible automation mapping expressions, literals and data references.
|
|
464
486
|
|
|
465
487
|
- [Automations Activation Status](references/automations/activation-status.md)
|
|
466
|
-
Read an automation’s current ACTIVE or INACTIVE status and
|
|
488
|
+
Read an automation’s current ACTIVE or INACTIVE status, and activate or deactivate it when the user asks.
|
|
467
489
|
|
|
468
490
|
</details>
|
|
469
491
|
|