@wix/agent-skills 1.16.3 → 1.18.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/package.json +1 -1
- package/skills/wix-app/SKILL.md +115 -12
- package/skills/wix-app/references/APP_MARKET_REVIEW.md +1 -1
- package/skills/wix-app/references/BACKEND_API.md +18 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +6 -0
- package/skills/wix-app/references/DASHBOARD_MODAL.md +10 -2
- package/skills/wix-app/references/DASHBOARD_PAGE.md +32 -70
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +145 -127
- package/skills/wix-app/references/SITE_PLUGIN.md +14 -2
- package/skills/wix-app/references/WIX_PATTERNS_DOCS.md +74 -68
- package/skills/wix-app/references/backend-event/COMMON-EVENTS.md +2 -2
- package/skills/wix-app/references/dashboard-page/COLLECTION_TOOLKIT.md +79 -0
- package/skills/wix-app/references/dashboard-page/ENTITY_PAGE_TOOLKIT.md +73 -0
- package/skills/wix-app/references/dashboard-page/PATTERNS_BUNDLE_READING.md +52 -0
- package/skills/wix-app/references/dashboard-page/UX_SUCCESS_MODEL.md +184 -0
- package/skills/wix-app/references/editor-react-component/ACCESSIBILITY.md +182 -99
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +94 -49
- package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +16 -6
- package/skills/wix-app/references/editor-react-component/BROWSER-SUPPORT.md +56 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONTRACT.md +275 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-PREVIEW.md +35 -40
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +167 -445
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +56 -29
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +53 -158
- package/skills/wix-app/references/editor-react-component/EDITOR-EXTENSION-CONFIGURATION.md +78 -0
- package/skills/wix-app/references/editor-react-component/FUNCTION-HANDLERS.md +42 -134
- package/skills/wix-app/references/editor-react-component/MANIFEST-ERRORS.md +11 -3
- package/skills/wix-app/references/editor-react-component/PARTS.md +46 -24
- package/skills/wix-app/references/editor-react-component/PROPS-VS-CSS.md +63 -179
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +79 -163
- package/skills/wix-app/references/editor-react-component/SITE-CONTEXT-HOOKS.md +36 -21
- package/skills/wix-app/references/editor-react-component/SSR.md +30 -99
- package/skills/wix-base44-connector/SKILL.md +156 -50
- package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +78 -0
- package/skills/wix-base44-connector/scripts/utils.js +239 -45
- package/skills/wix-headless/entry/bootstrap.mjs +9 -2
- package/skills/wix-headless/entry/skill.md +1 -1
- package/skills/wix-headless/references/CAPABILITIES.md +9 -1
- package/skills/wix-headless/references/DESIGN.md +1 -0
- package/skills/wix-headless/references/DISCOVERY.md +2 -1
- package/skills/wix-headless/references/IMAGE_GENERATION.md +1 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +5 -2
- package/skills/wix-headless/references/SEED.md +2 -1
- package/skills/wix-headless/references/SETUP.md +1 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +2 -2
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +68 -31
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +26 -10
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +8 -8
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +10 -8
- package/skills/wix-headless/references/inline-recipes/how-to-code-rentals.md +254 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +27 -24
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +13 -0
- package/skills/wix-headless/references/inline-recipes/setup-rentals.md +254 -0
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +5 -0
- package/skills/wix-headless/references/non-astro.md +1 -1
- package/skills/wix-headless-fast/SKILL.md +166 -0
- package/skills/wix-headless-fast/entry/skill.md +99 -0
- package/skills/wix-headless-fast/install/deploy.mjs +433 -0
- package/skills/wix-headless-fast/install/fast-path.mjs +141 -0
- package/skills/wix-headless-fast/references/blog/INSTRUCTIONS.md +137 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/BlogFeedView.tsx +137 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/PostView.tsx +113 -0
- package/skills/wix-headless-fast/references/blog/app/components/blog/RichContent.tsx +42 -0
- package/skills/wix-headless-fast/references/blog/app/hooks/blog/useBlogFeed.ts +123 -0
- package/skills/wix-headless-fast/references/blog/app/hooks/blog/usePost.ts +70 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/posts.ts +99 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/taxonomy.ts +76 -0
- package/skills/wix-headless-fast/references/blog/app/wix/blog/types.ts +62 -0
- package/skills/wix-headless-fast/references/blog/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/blog/app-astro/pages/blog/[...slug].astro +99 -0
- package/skills/wix-headless-fast/references/blog/app-astro/pages/blog.astro +24 -0
- package/skills/wix-headless-fast/references/blog/lock/astro/package-lock.json +16156 -0
- package/skills/wix-headless-fast/references/blog/seed/SEED.md +72 -0
- package/skills/wix-headless-fast/references/blog/seed/seed-blog.mjs +287 -0
- package/skills/wix-headless-fast/references/bookings/INSTRUCTIONS.md +129 -0
- package/skills/wix-headless-fast/references/bookings/app/components/bookings/ServiceBookingView.tsx +143 -0
- package/skills/wix-headless-fast/references/bookings/app/components/bookings/ServicesView.tsx +119 -0
- package/skills/wix-headless-fast/references/bookings/app/hooks/bookings/useBookingFlow.ts +138 -0
- package/skills/wix-headless-fast/references/bookings/app/hooks/bookings/useServices.ts +54 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/booking.ts +206 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/services.ts +96 -0
- package/skills/wix-headless-fast/references/bookings/app/wix/bookings/types.ts +70 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/pages/services/[slug].astro +76 -0
- package/skills/wix-headless-fast/references/bookings/app-astro/pages/services.astro +22 -0
- package/skills/wix-headless-fast/references/bookings/lock/astro/package-lock.json +11962 -0
- package/skills/wix-headless-fast/references/bookings/seed/SEED.md +61 -0
- package/skills/wix-headless-fast/references/bookings/seed/seed-bookings.mjs +302 -0
- package/skills/wix-headless-fast/references/cms/INSTRUCTIONS.md +179 -0
- package/skills/wix-headless-fast/references/cms/app/hooks/cms/useCollection.ts +83 -0
- package/skills/wix-headless-fast/references/cms/app/hooks/cms/useItem.ts +57 -0
- package/skills/wix-headless-fast/references/cms/app/wix/cms/items.ts +151 -0
- package/skills/wix-headless-fast/references/cms/app/wix/cms/types.ts +75 -0
- package/skills/wix-headless-fast/references/cms/app-astro/layouts/SiteLayout.astro +41 -0
- package/skills/wix-headless-fast/references/cms/lock/astro/package-lock.json +11262 -0
- package/skills/wix-headless-fast/references/cms/seed/SEED.md +103 -0
- package/skills/wix-headless-fast/references/cms/seed/seed-cms.mjs +324 -0
- package/skills/wix-headless-fast/references/events/INSTRUCTIONS.md +149 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventConfirmationView.tsx +66 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventRegistrationView.tsx +176 -0
- package/skills/wix-headless-fast/references/events/app/components/events/EventsView.tsx +118 -0
- package/skills/wix-headless-fast/references/events/app/hooks/events/useEventRegistration.ts +117 -0
- package/skills/wix-headless-fast/references/events/app/hooks/events/useEvents.ts +59 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/events.ts +136 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/registration.ts +128 -0
- package/skills/wix-headless-fast/references/events/app/wix/events/types.ts +61 -0
- package/skills/wix-headless-fast/references/events/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/event-confirmation.astro +12 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/events/[slug].astro +80 -0
- package/skills/wix-headless-fast/references/events/app-astro/pages/events.astro +21 -0
- package/skills/wix-headless-fast/references/events/lock/astro/package-lock.json +11884 -0
- package/skills/wix-headless-fast/references/events/seed/SEED.md +86 -0
- package/skills/wix-headless-fast/references/events/seed/seed-events.mjs +276 -0
- package/skills/wix-headless-fast/references/forms/INSTRUCTIONS.md +150 -0
- package/skills/wix-headless-fast/references/forms/app/hooks/forms/useWixForm.ts +317 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/forms.ts +269 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/submissions.ts +231 -0
- package/skills/wix-headless-fast/references/forms/app/wix/forms/types.ts +135 -0
- package/skills/wix-headless-fast/references/forms/lock/astro/package-lock.json +10593 -0
- package/skills/wix-headless-fast/references/forms/seed/SEED.md +108 -0
- package/skills/wix-headless-fast/references/forms/seed/seed-forms.mjs +320 -0
- package/skills/wix-headless-fast/references/members/INSTRUCTIONS.md +63 -0
- package/skills/wix-headless-fast/references/members/app/components/members/AccountView.tsx +60 -0
- package/skills/wix-headless-fast/references/members/app/components/members/LoginForm.tsx +155 -0
- package/skills/wix-headless-fast/references/members/app/components/members/MemberMenu.tsx +78 -0
- package/skills/wix-headless-fast/references/members/app/components/members/RequireAuth.tsx +47 -0
- package/skills/wix-headless-fast/references/members/app/hooks/members/useMember.ts +66 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/auth.ts +88 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/client.ts +53 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/member-store.ts +122 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/members.ts +50 -0
- package/skills/wix-headless-fast/references/members/app/wix/members/types.ts +21 -0
- package/skills/wix-headless-fast/references/members/app-astro/layouts/SiteLayout.astro +42 -0
- package/skills/wix-headless-fast/references/members/app-astro/pages/account.astro +10 -0
- package/skills/wix-headless-fast/references/members/app-astro/pages/login.astro +11 -0
- package/skills/wix-headless-fast/references/members/lock/astro/package-lock.json +10329 -0
- package/skills/wix-headless-fast/references/members/seed/SEED.md +39 -0
- package/skills/wix-headless-fast/references/members/seed/seed-members.mjs +94 -0
- package/skills/wix-headless-fast/references/portfolio/INSTRUCTIONS.md +134 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/CollectionProjectsView.tsx +110 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/CollectionsView.tsx +90 -0
- package/skills/wix-headless-fast/references/portfolio/app/components/portfolio/ProjectDetailView.tsx +115 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useCollectionProjects.ts +59 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useCollections.ts +39 -0
- package/skills/wix-headless-fast/references/portfolio/app/hooks/portfolio/useProjectDetail.ts +58 -0
- package/skills/wix-headless-fast/references/portfolio/app/wix/portfolio/portfolio.ts +165 -0
- package/skills/wix-headless-fast/references/portfolio/app/wix/portfolio/types.ts +55 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/layouts/SiteLayout.astro +40 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/portfolio/[slug].astro +30 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/portfolio.astro +21 -0
- package/skills/wix-headless-fast/references/portfolio/app-astro/pages/projects/[slug].astro +29 -0
- package/skills/wix-headless-fast/references/portfolio/lock/astro/package-lock.json +10197 -0
- package/skills/wix-headless-fast/references/portfolio/seed/SEED.md +78 -0
- package/skills/wix-headless-fast/references/portfolio/seed/seed-portfolio.mjs +258 -0
- package/skills/wix-headless-fast/references/pricing-plans/INSTRUCTIONS.md +133 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/components/pricing-plans/PlanDetailView.tsx +58 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/components/pricing-plans/PlansView.tsx +126 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/hooks/pricing-plans/usePlanPurchase.ts +37 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/hooks/pricing-plans/usePlans.ts +39 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/plans.ts +75 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/purchase.ts +45 -0
- package/skills/wix-headless-fast/references/pricing-plans/app/wix/pricing-plans/types.ts +30 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/layouts/SiteLayout.astro +41 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/pages/plans/[slug].astro +40 -0
- package/skills/wix-headless-fast/references/pricing-plans/app-astro/pages/plans.astro +21 -0
- package/skills/wix-headless-fast/references/pricing-plans/lock/astro/package-lock.json +11226 -0
- package/skills/wix-headless-fast/references/pricing-plans/seed/SEED.md +71 -0
- package/skills/wix-headless-fast/references/pricing-plans/seed/seed-pricing-plans.mjs +279 -0
- package/skills/wix-headless-fast/references/restaurants/INSTRUCTIONS.md +165 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/MenuView.tsx +142 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/OrderCartButton.tsx +26 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/OrderCartDrawer.tsx +121 -0
- package/skills/wix-headless-fast/references/restaurants/app/components/restaurants/ReservationView.tsx +155 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useMenus.ts +55 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useOrderCart.ts +43 -0
- package/skills/wix-headless-fast/references/restaurants/app/hooks/restaurants/useReservation.ts +177 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/menu.ts +165 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/order-store.ts +103 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/ordering.ts +254 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/reservations.ts +146 -0
- package/skills/wix-headless-fast/references/restaurants/app/wix/restaurants/types.ts +168 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/layouts/SiteLayout.astro +47 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/pages/menu.astro +22 -0
- package/skills/wix-headless-fast/references/restaurants/app-astro/pages/reservations.astro +12 -0
- package/skills/wix-headless-fast/references/restaurants/lock/astro/package-lock.json +12560 -0
- package/skills/wix-headless-fast/references/restaurants/seed/SEED.md +81 -0
- package/skills/wix-headless-fast/references/restaurants/seed/seed-restaurants.mjs +479 -0
- package/skills/wix-headless-fast/references/shared/CONTENT.md +22 -0
- package/skills/wix-headless-fast/references/shared/CUSTOM_OPERATIONS.md +73 -0
- package/skills/wix-headless-fast/references/shared/DESIGN.md +26 -0
- package/skills/wix-headless-fast/references/shared/app/styles/global.css +52 -0
- package/skills/wix-headless-fast/references/shared/app/wix/config.ts +15 -0
- package/skills/wix-headless-fast/references/shared/app/wix/media.ts +27 -0
- package/skills/wix-headless-fast/references/shared/app/wix/money.ts +24 -0
- package/skills/wix-headless-fast/references/shared/app/wix/sdk.ts +76 -0
- package/skills/wix-headless-fast/references/shared/capabilities/media-upload/app/wix/media-upload/client.ts +46 -0
- package/skills/wix-headless-fast/references/shared/capabilities/media-upload/app-astro/pages/api/wix/media-upload.ts +46 -0
- package/skills/wix-headless-fast/references/shared/seed/images.mjs +145 -0
- package/skills/wix-headless-fast/references/storefront/INSTRUCTIONS.md +149 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartButton.tsx +26 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/CartDrawer.tsx +121 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductCard.tsx +100 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductDetailView.tsx +130 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ProductGrid.tsx +48 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/ShopView.tsx +66 -0
- package/skills/wix-headless-fast/references/storefront/app/components/storefront/VariantPicker.tsx +103 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useCart.ts +48 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useProductDetail.ts +140 -0
- package/skills/wix-headless-fast/references/storefront/app/hooks/storefront/useShop.ts +80 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart-store.ts +101 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/cart.ts +221 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/catalog.ts +215 -0
- package/skills/wix-headless-fast/references/storefront/app/wix/storefront/types.ts +109 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/layouts/SiteLayout.astro +46 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/pages/products/[slug].astro +56 -0
- package/skills/wix-headless-fast/references/storefront/app-astro/pages/shop.astro +23 -0
- package/skills/wix-headless-fast/references/storefront/lock/astro/package-lock.json +12247 -0
- package/skills/wix-headless-fast/references/storefront/seed/SEED.md +85 -0
- package/skills/wix-headless-fast/references/storefront/seed/seed-store.mjs +415 -0
- package/skills/wix-manage/SKILL.md +28 -2
- package/skills/wix-manage/references/bookings/booking-system-integration-gaps.md +20 -13
- package/skills/wix-manage/references/bookings/end-to-end-booking-flow.md +24 -11
- package/skills/wix-manage/references/cms/cms-ecommerce-catalog-integration.md +5 -5
- package/skills/wix-manage/references/google-ads/manage-campaign-success-guide.md +141 -0
- package/skills/wix-manage/references/google-business-profile/connect-google-business-profile.md +134 -0
- package/skills/wix-manage/references/google-business-profile/manage-google-business-profile-locations.md +182 -0
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +3 -0
- package/skills/wix-manage/references/seo/manage-seo-tags.md +315 -0
- package/skills/wix-manage/references/seo/manage-url-redirects.md +250 -0
- package/skills/wix-manage/references/sites/query-sites.md +72 -161
- package/skills/wix-manage/references/stores/create-product-catalog-v3.md +21 -6
- package/skills/wix-manage/references/stores/update-product-with-options.md +83 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +5 -6
- package/skills/wix-vibe-headless/SKILL.md +18 -4
- package/skills/wix-vibe-headless/install/deploy.cjs +12 -4
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +2 -1
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +16 -10
- package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +13 -8
- package/skills/wix-vibe-headless/platforms/base44.md +27 -62
- package/skills/wix-vibe-headless/platforms/generic.md +6 -3
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +45 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/RentalDurationPicker.jsx +67 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useRentalDuration.js +128 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +5 -3
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-checkout.js +9 -8
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-rentals.js +250 -0
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-services.js +12 -5
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +41 -0
- package/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.js +267 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +6 -3
- package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +470 -0
- package/skills/wix-vibe-headless/references/forms/app/hooks/useWixForm.js +425 -0
- package/skills/wix-vibe-headless/references/forms/app/lib/wix-form-schema-utils.js +187 -0
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms-submissions.js +238 -0
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms.js +108 -0
- package/skills/wix-vibe-headless/references/forms/seed/SEED.md +1762 -0
- package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +13 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +4 -1
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +23 -11
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +1 -1
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +29 -31
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +152 -92
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +37 -38
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +2 -2
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +15 -8
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +37 -0
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +35 -35
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +18 -6
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +30 -7
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +46 -10
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +0 -172
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +0 -143
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +0 -516
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +0 -225
- package/skills/wix-app/references/editor-react-component/EDIT-FLOW.md +0 -6
- package/skills/wix-app/references/editor-react-component/REACT-PATTERNS.md +0 -95
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +0 -110
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +0 -51
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +0 -49
- package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +0 -92
- package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +0 -139
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Manage Google Business Profile Locations for a Wix Site"
|
|
3
|
+
description: Import Google Business Profile locations into the authenticated Wix site, list and query them with or without live Google data, update Wix-side and Google-side details through the correct method for each, create a new Google listing, check whether a profile is actually live on Google, and remove a location from Wix or delete its Google listing. Checks the site's Google connection first and reports a missing one as a setup step, warns before destructive or Google-visible writes, and respects Google's shared rate budget.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Manage Google Business Profile Locations for a Wix Site
|
|
7
|
+
|
|
8
|
+
Use the public **Google Business Profile Locations API** to manage the
|
|
9
|
+
authenticated Wix site's Business Profile locations — the entries that decide
|
|
10
|
+
how the business appears on Google Search and Maps. The REST requests do not
|
|
11
|
+
contain a site ID — the site comes from the caller's authorization context.
|
|
12
|
+
Use the site the environment already supplies; if no site is selected, list
|
|
13
|
+
the user's sites once and auto-select the only one, or ask the user to choose
|
|
14
|
+
by site name when several are available. Never invent a site ID or ask the
|
|
15
|
+
user to type one.
|
|
16
|
+
|
|
17
|
+
> **Unconnected-site fast path — read first.** Read the connection once. Treat
|
|
18
|
+
> `NEVER_CONNECTED`, `NEEDS_RECONNECT`, or a single
|
|
19
|
+
> `CONNECTION_NOT_FOUND`/not-found response from that connection check as the
|
|
20
|
+
> same setup state. Query Wix-only GBP locations once to answer what the site
|
|
21
|
+
> already has, report the result, explain the connect → account selection →
|
|
22
|
+
> unimported-location selection → bulk-create flow, and stop — after that one
|
|
23
|
+
> query the **next action is the final response**, with no other tool call. Do
|
|
24
|
+
> not call a Google-backed location method, probe for Business Profile
|
|
25
|
+
> accounts, guess an endpoint, or make further API probes or documentation
|
|
26
|
+
> searches until the connection is `VALID`. A `403` or `PERMISSION_DENIED` is
|
|
27
|
+
> terminal: the **next action is the final response** explaining it. Stop
|
|
28
|
+
> without the Wix-only query, documentation search, or any other tool call.
|
|
29
|
+
|
|
30
|
+
The API is a live view onto Google, not a copy: most calls make a real Google
|
|
31
|
+
request, with Google's latency and rate limits. A location's ID is Google's
|
|
32
|
+
opaque location ID and is what identifies it everywhere.
|
|
33
|
+
|
|
34
|
+
## Direct calls for the unconnected-site path
|
|
35
|
+
|
|
36
|
+
Use these request shapes directly; do not search the API reference before
|
|
37
|
+
calling them.
|
|
38
|
+
|
|
39
|
+
| Method | Call |
|
|
40
|
+
|---|---|
|
|
41
|
+
| **Get Connection** | `GET https://www.wixapis.com/gbp/v1/connection` — no body or parameters |
|
|
42
|
+
| **Query GBP Locations** | `POST https://www.wixapis.com/gbp/v1/locations/query` with body below |
|
|
43
|
+
|
|
44
|
+
```json
|
|
45
|
+
{ "query": { "paging": { "limit": 100 } } }
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Make **Get Connection** first, then branch before making any other call:
|
|
49
|
+
|
|
50
|
+
- `403` or `PERMISSION_DENIED` — stop. The next action is the final response;
|
|
51
|
+
explain that the current Wix identity cannot inspect the site's GBP state.
|
|
52
|
+
Do not query locations, inspect installed apps, search documentation, or try
|
|
53
|
+
another endpoint.
|
|
54
|
+
- `NEVER_CONNECTED`, `NEEDS_RECONNECT`, or `CONNECTION_NOT_FOUND` — make one
|
|
55
|
+
**Query GBP Locations** call, report the Wix-stored result, explain the future
|
|
56
|
+
import steps, and stop. The next action is the final response.
|
|
57
|
+
- `VALID` — proceed with the requested Google-backed flow.
|
|
58
|
+
|
|
59
|
+
Do not call **List GBP Accounts** or another Google-backed method until the
|
|
60
|
+
connection is `VALID` — account discovery requires the connection, and its
|
|
61
|
+
request shape is not the locations query. Never guess an endpoint that is not
|
|
62
|
+
in the table above or in the loaded reference.
|
|
63
|
+
|
|
64
|
+
## Check the connection first
|
|
65
|
+
|
|
66
|
+
Google-backed methods require a Google connection, established through the
|
|
67
|
+
**Google Business Profile Connection API** (see the connect recipe). Before
|
|
68
|
+
Google-backed work, call **Get Connection**:
|
|
69
|
+
|
|
70
|
+
- `VALID` — proceed.
|
|
71
|
+
- `NEVER_CONNECTED` or `NEEDS_RECONNECT` — report a setup step, not an error,
|
|
72
|
+
and offer to run the connect flow. Do not retry location calls until the
|
|
73
|
+
connection is `VALID`.
|
|
74
|
+
|
|
75
|
+
Wix-only reads and deletes still work without active Google credentials:
|
|
76
|
+
**Get GBP Location**, **Query GBP Locations**, **Update Location**,
|
|
77
|
+
**Delete Location**, and **Bulk Delete Locations**.
|
|
78
|
+
|
|
79
|
+
## Import locations
|
|
80
|
+
|
|
81
|
+
Importing registers listings that already exist at Google; it never creates
|
|
82
|
+
one. Each step narrows the next:
|
|
83
|
+
|
|
84
|
+
1. Call **List GBP Accounts**. One Google login can hold several Business
|
|
85
|
+
Profile accounts, so present the list and let the owner pick — never assume
|
|
86
|
+
the first one.
|
|
87
|
+
2. Call **List Unimported Locations** with the chosen `accountId`. It returns
|
|
88
|
+
only what the site hasn't imported yet, so re-running never offers
|
|
89
|
+
duplicates.
|
|
90
|
+
3. Let the owner select which locations to import, and confirm before writing.
|
|
91
|
+
4. Call **Bulk Create Locations** with the selected locations, supplying `id`
|
|
92
|
+
and `accountId` on each.
|
|
93
|
+
5. Inspect every `results[].itemMetadata.error`. The call reports per-item
|
|
94
|
+
failures instead of aborting, so a `200` does not mean every location
|
|
95
|
+
imported. Report failures explicitly.
|
|
96
|
+
|
|
97
|
+
Repeat steps 2–5 per account if the owner wants locations from more than one.
|
|
98
|
+
|
|
99
|
+
## List and query locations
|
|
100
|
+
|
|
101
|
+
Choose by whether live Google data is needed:
|
|
102
|
+
|
|
103
|
+
- **Just the site's locations:** call **Query GBP Locations**. Wix-stored rows
|
|
104
|
+
only — fast, no Google round-trip, no Google rate limit. Use it for counts,
|
|
105
|
+
ID lookups, and anything driven by `id`, `googleLocationId`, or `accountId`.
|
|
106
|
+
- **Locations with live business details:** call **Query Google Locations**
|
|
107
|
+
(or **Get Google Location** for one). Each row is hydrated with a live
|
|
108
|
+
Google fetch. Check each row for `googleError` — one location failing at
|
|
109
|
+
Google does not fail the request or break paging, so render it as a
|
|
110
|
+
per-location problem, not an empty result.
|
|
111
|
+
|
|
112
|
+
## Update the correct side
|
|
113
|
+
|
|
114
|
+
Wix stores almost nothing; the method name tells you which side a write
|
|
115
|
+
reaches. Check before calling anything destructive:
|
|
116
|
+
|
|
117
|
+
| Method | Wix row | Google listing |
|
|
118
|
+
|---|---|---|
|
|
119
|
+
| **Create Location**, **Bulk Create Locations** | created | untouched (imports an existing listing) |
|
|
120
|
+
| **Create Google Location** | created | **created** |
|
|
121
|
+
| **Update Location** | updated | untouched (writes Wix-stored fields only) |
|
|
122
|
+
| **Update Google Location** | untouched | **updated** |
|
|
123
|
+
| **Delete Location**, **Bulk Delete Locations** | deleted | untouched |
|
|
124
|
+
| **Delete Google Location** | deleted | **deleted** |
|
|
125
|
+
|
|
126
|
+
- **Update Location** is not the way to edit a Business Profile — it writes
|
|
127
|
+
only Wix-stored fields. To change Google-owned data (title, address, hours,
|
|
128
|
+
categories), call **Update Google Location**, and confirm with the owner
|
|
129
|
+
first: the change is publicly visible on Google.
|
|
130
|
+
- To create a brand-new Google listing, call **Create Google Location** after
|
|
131
|
+
explicit confirmation. Use the API's reference-data methods (address schema,
|
|
132
|
+
category and region suggestions) rather than inventing values.
|
|
133
|
+
- Google allows roughly 10 profile edits per minute per Business Profile, and
|
|
134
|
+
the budget is shared across every write method. Pace the profile as a whole
|
|
135
|
+
and treat a `429` as worth retrying after a delay, not as a rejection.
|
|
136
|
+
|
|
137
|
+
## Remove a location
|
|
138
|
+
|
|
139
|
+
Decide first whether the owner is removing it from Wix or deleting the real
|
|
140
|
+
Google listing — these are different operations and one is irreversible.
|
|
141
|
+
Confirm which they mean before calling anything:
|
|
142
|
+
|
|
143
|
+
- **Un-import from Wix, leave Google alone:** call **Delete Location**, or
|
|
144
|
+
**Bulk Delete Locations** for several. Inspect every
|
|
145
|
+
`results[].itemMetadata` entry — the bulk call can partially succeed.
|
|
146
|
+
- **Delete the Google listing as well:** call **Delete Google Location** once
|
|
147
|
+
per location; there is no bulk Google delete. Require explicit confirmation
|
|
148
|
+
naming the location — the listing disappears from Google Search and Maps.
|
|
149
|
+
- If **Delete Google Location** returns `LOCATION_DB_PERSIST_FAILED`, Google
|
|
150
|
+
deleted the listing but Wix didn't record it. The error payload carries the
|
|
151
|
+
location ID; call **Delete Location** with it to reconcile.
|
|
152
|
+
|
|
153
|
+
## Check whether a profile is actually live
|
|
154
|
+
|
|
155
|
+
A location existing in Wix does not mean it appears on Google — verification
|
|
156
|
+
can be pending, the profile suspended, or ownership contested. Call
|
|
157
|
+
**Get Voice of Merchant** for the location and act on what Google reports:
|
|
158
|
+
wait, verify, comply, or resolve the conflict.
|
|
159
|
+
|
|
160
|
+
## Recovery rules
|
|
161
|
+
|
|
162
|
+
- **`FAILED_PRECONDITION` with `CONNECTION_NOT_FOUND`:** the site has no
|
|
163
|
+
usable Google connection. Report the setup step and offer the connect flow;
|
|
164
|
+
do not retry the same call.
|
|
165
|
+
- **`GOOGLE_API_CALL_FAILED`:** read the carried Google code and description.
|
|
166
|
+
Some failures are permanent (profile suspended, field not editable) —
|
|
167
|
+
retrying will not help; explain instead.
|
|
168
|
+
- **Per-row `googleError` on hydrating reads:** report it per location and
|
|
169
|
+
continue with the rest of the page.
|
|
170
|
+
- **Rate limited (`429`):** wait, then retry; interleaved writes share one
|
|
171
|
+
budget per profile.
|
|
172
|
+
- **Permission denied:** stop after the first `403` or `PERMISSION_DENIED`.
|
|
173
|
+
Do not retry with other locations, request shapes, or sites, and do not
|
|
174
|
+
search for an alternate API or method. Deleting locations requires the
|
|
175
|
+
site's `GBP_ADMIN` role.
|
|
176
|
+
|
|
177
|
+
The same API also covers reviews and replies, photos and bulk media uploads,
|
|
178
|
+
attributes, verification, performance insights, and location admins — load the
|
|
179
|
+
specific public method reference needed before constructing a request so field
|
|
180
|
+
names, filters, permissions, and errors come from the live contract. Once a
|
|
181
|
+
connection state or typed error selects a branch above, do not search or browse
|
|
182
|
+
for an alternate API, method, or request shape.
|
|
@@ -359,6 +359,8 @@ Build the request from `item.channel` (`name` + the `accountId` from STEP 4b), `
|
|
|
359
359
|
- Otherwise, build it from the STEP 3 table row for your channel + `type`: the text field (`caption` for Instagram/Facebook/LinkedIn/X, `description` for YouTube/Pinterest/GBP/TikTok), the media (`mediaWrapper`, or `imageUrl`/`videoUrl` for a single item), and any channel-specific IDs from the STEP 4b account object, plus `title` where the channel uses one.
|
|
360
360
|
- Instagram and story types require media.
|
|
361
361
|
|
|
362
|
+
**Attribution (always set this).** Set `item.consumerInfo` to `{ "name": "wix-skills-social" }` on **every** create-draft call, for every channel. `consumerInfo.name` identifies what created the post — the Social Media Marketing dashboard sets `social-marketing`, and this recipe sets `wix-skills-social`. Set it on the draft: `name` is applied on creation only, and Update Item ignores it.
|
|
363
|
+
|
|
362
364
|
**Idempotency (retry safety).** Set a stable, caller-defined `item.referenceId` on the draft. The Publisher enforces its uniqueness — a second item created/published with the same `referenceId` is rejected with `REFERENCE_ID_ALREADY_EXIST` instead of posting a duplicate. So if a create or publish call times out, retry with the **same** `referenceId` rather than risk double-posting.
|
|
363
365
|
|
|
364
366
|
**Example — Instagram image post:**
|
|
@@ -368,6 +370,7 @@ Build the request from `item.channel` (`name` + the `accountId` from STEP 4b), `
|
|
|
368
370
|
"item": {
|
|
369
371
|
"channel": { "name": "INSTAGRAM", "accountId": "17841405822304914" },
|
|
370
372
|
"type": "POST",
|
|
373
|
+
"consumerInfo": { "name": "wix-skills-social" },
|
|
371
374
|
"instagramPost": {
|
|
372
375
|
"imageUrl": "https://static.wixstatic.com/media/cf2434_4b3a2d8eb7f54bc89c0d4524430a2af3~mv2.jpg",
|
|
373
376
|
"caption": "Summer collection just dropped! Shop the look now. #summerstyle #newarrivals"
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "Manage a Wix Site's SEO Tags"
|
|
3
|
+
description: Read and update the SEO tags of a Wix site at the right level — site-wide tags, page-type patterns, or one item's tags. Discover item IDs and pattern variables instead of inventing them, read before every full-replace write, and report resolved tags with the source each one came from.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Manage a Wix Site's SEO Tags
|
|
7
|
+
|
|
8
|
+
Use the public **SEO APIs** to read and write the titles, descriptions, social
|
|
9
|
+
share tags, canonical links, structured data, and indexing directives of the
|
|
10
|
+
authenticated Wix site. The API selects the site from the caller's
|
|
11
|
+
authorization context; never ask for or send a site ID.
|
|
12
|
+
|
|
13
|
+
Writing tags requires the **Manage SEO Settings** permission. Reading tags or
|
|
14
|
+
listing pattern variables does not prove that the caller can write.
|
|
15
|
+
|
|
16
|
+
## The one rule that must never be skipped
|
|
17
|
+
|
|
18
|
+
**Every write replaces the target's tags in full, so a Get always immediately
|
|
19
|
+
precedes a Set.** There is no partial update: sending only the tag the user
|
|
20
|
+
asked about deletes every other tag that item, pattern, or site had. So before
|
|
21
|
+
any Set, call the matching Get for that exact target, merge the requested change
|
|
22
|
+
into the tags it returns, and send the complete set back.
|
|
23
|
+
|
|
24
|
+
Never write from the user's request alone, and never skip the Get because the
|
|
25
|
+
change looks small, because a list call already returned something, or because
|
|
26
|
+
the target looks empty. The Set response returns the updated tags and
|
|
27
|
+
`resolvedTags`, so report the outcome from that response instead of issuing
|
|
28
|
+
another read.
|
|
29
|
+
|
|
30
|
+
## Choose the level
|
|
31
|
+
|
|
32
|
+
Wix combines tags from several sources, where a more specific source wins.
|
|
33
|
+
Match the user's request to the level that owns the change:
|
|
34
|
+
|
|
35
|
+
| User intent | Level | API |
|
|
36
|
+
|---|---|---|
|
|
37
|
+
| "Change my site's default social image", site verification tags, site-wide indexing | Site | **Site SEO Tags** |
|
|
38
|
+
| "All my product/blog/event pages should be titled like X" — a convention for every item of a page type | Pattern | **SEO Patterns** |
|
|
39
|
+
| "Change the title of this page/product/post" — one specific item | Item | **Item SEO Tags** |
|
|
40
|
+
|
|
41
|
+
Work at the level that matches the change. Writing the same title onto many
|
|
42
|
+
items is the same outcome as one pattern and much harder to undo. If the user's
|
|
43
|
+
words fit more than one level, ask one short question before writing. An
|
|
44
|
+
explicit request to change a specific tag at a clear level is already
|
|
45
|
+
confirmation to make that write.
|
|
46
|
+
|
|
47
|
+
All three APIs live under the **SEO** category of the Wix REST API reference.
|
|
48
|
+
The request shapes are in the section below — construct requests from them. The
|
|
49
|
+
reference article URLs follow this pattern (for edge cases not covered here):
|
|
50
|
+
|
|
51
|
+
`https://dev.wix.com/docs/api-reference/business-management/seo/{api}/` + method slug
|
|
52
|
+
|
|
53
|
+
| Level | API slug | Methods (slug) |
|
|
54
|
+
|---|---|---|
|
|
55
|
+
| Site | `site-seo-tags-v1` | Get Site SEO Tags (`get-site-seo-tags`), Set Site SEO Tags (`set-site-seo-tags`) |
|
|
56
|
+
| Pattern | `seo-pattern-v1` | Get SEO Pattern (`get-seo-pattern`), List SEO Patterns (`list-seo-patterns`), List SEO Pattern Variables (`list-seo-pattern-variables`), Create SEO Pattern (`create-seo-pattern`), Set SEO Pattern (`set-seo-pattern`), Reset SEO Pattern To Default (`reset-seo-pattern-to-default`) |
|
|
57
|
+
| Item | `item-seo-tags-v1` | Get Item SEO Tags (`get-item-seo-tags`), List Item SEO Tags (`list-item-seo-tags`), Set Item SEO Tags (`set-item-seo-tags`), Bulk Set Item SEO Tags (`bulk-set-item-seo-tags`), Reset Item SEO Tags To Default (`reset-item-seo-tags-to-default`) |
|
|
58
|
+
|
|
59
|
+
## REST request and response shapes
|
|
60
|
+
|
|
61
|
+
Use these shapes directly — do not go looking for them in the docs first.
|
|
62
|
+
|
|
63
|
+
Build requests from the shapes below. Do not search the API schemas or read
|
|
64
|
+
the reference article to construct them.
|
|
65
|
+
|
|
66
|
+
### Set Item SEO Tags — `PATCH /item-seo-tags/{itemType}/{itemId}`
|
|
67
|
+
|
|
68
|
+
```json
|
|
69
|
+
{
|
|
70
|
+
"itemSeoTags": {
|
|
71
|
+
"tags": [
|
|
72
|
+
{ "type": "title", "children": "Page title here" },
|
|
73
|
+
{ "type": "meta", "props": { "name": "description", "content": "Description here" } }
|
|
74
|
+
]
|
|
75
|
+
},
|
|
76
|
+
"fieldMask": "tags"
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Get Item SEO Tags — `GET /item-seo-tags/{itemType}/{itemId}`
|
|
81
|
+
|
|
82
|
+
No request body. Returns `itemSeoTags` with `tags`, `resolvedTags`,
|
|
83
|
+
`hasOverride`, `publishStatus`, and `hostPageId`.
|
|
84
|
+
|
|
85
|
+
### List Item SEO Tags — `GET /item-seo-tags/{itemType}?paging.limit=100`
|
|
86
|
+
|
|
87
|
+
No request body. Returns `itemSeoTagsList[]` and `pagingMetadata` with cursors.
|
|
88
|
+
|
|
89
|
+
### Set Site SEO Tags — `PATCH /site-seo-tags`
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
{
|
|
93
|
+
"siteSeoTags": {
|
|
94
|
+
"tags": [
|
|
95
|
+
{ "type": "meta", "props": { "name": "google-site-verification", "content": "token" } }
|
|
96
|
+
]
|
|
97
|
+
},
|
|
98
|
+
"fieldMask": "tags"
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Set SEO Pattern — `PATCH /seo-patterns/{pageType}`
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"seoPattern": {
|
|
107
|
+
"pattern": {
|
|
108
|
+
"tags": [
|
|
109
|
+
{ "type": "title", "children": "{{item.name}} | {{site.name}}" }
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"fieldMask": "pattern"
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
### Common rules across all shapes
|
|
118
|
+
|
|
119
|
+
A tag is `{type, props, children}`: `title` and `script` carry their text in
|
|
120
|
+
`children`; `meta` and `link` carry theirs in `props` (`name`/`content` for a
|
|
121
|
+
meta tag, `rel`/`href` for a link).
|
|
122
|
+
|
|
123
|
+
`fieldMask` over REST is a comma-separated **string** (`"fieldMask": "tags"`);
|
|
124
|
+
the SDK takes an **array** (`fieldMask: ["tags"]`). Sending an array to REST
|
|
125
|
+
returns `INVALID_FIELD_MASK`. `publish` is a boolean.
|
|
126
|
+
|
|
127
|
+
`resolvedTags` in any Get or Set response is an array of
|
|
128
|
+
`{tag, source, inheritedTag}`. `source` is one of `TAG_SOURCE_SITE`,
|
|
129
|
+
`TAG_SOURCE_DEFAULT_PATTERN`, `TAG_SOURCE_USER_PATTERN`, `TAG_SOURCE_HOST_PAGE`,
|
|
130
|
+
`TAG_SOURCE_ITEM`, or `TAG_SOURCE_UNSPECIFIED`. `inheritedTag` appears only when
|
|
131
|
+
this source replaced a value a lower source had set.
|
|
132
|
+
|
|
133
|
+
All paths are relative to `https://www.wixapis.com/promote/seo/v1`.
|
|
134
|
+
|
|
135
|
+
## Discover, never invent
|
|
136
|
+
|
|
137
|
+
- An item is addressed by an **item type and item ID together**, not by URL.
|
|
138
|
+
Common item types: `STATIC_PAGE`, `STORES_PRODUCT`, `STORES_CATEGORY`,
|
|
139
|
+
`BLOG_POST`, `BLOG_CATEGORY`, `BOOKINGS_SERVICE`, `EVENTS_PAGE`,
|
|
140
|
+
`PORTFOLIO_PROJECTS`, `PORTFOLIO_COLLECTIONS`, `RESTAURANTS_MENU_PAGE`.
|
|
141
|
+
- To find an item's ID when the user refers to it by name (e.g. a product
|
|
142
|
+
name), use Search Products v3: `POST /stores/v3/products/search`
|
|
143
|
+
to get the product ID, then use that ID as the `itemId` with item type
|
|
144
|
+
`STORES_PRODUCT`. Do not call List Item SEO Tags and scan through all items
|
|
145
|
+
to match by name — use the vertical API.
|
|
146
|
+
- Never fabricate an item ID. If you cannot find the item through its vertical
|
|
147
|
+
API or List Item SEO Tags, ask the user.
|
|
148
|
+
- Item types exist on a site only when the business solution providing them is
|
|
149
|
+
installed. The authoritative list of supported item types is in the
|
|
150
|
+
`UNSUPPORTED_ITEM_TYPE` error message; do not hardcode one beyond the common
|
|
151
|
+
values listed above.
|
|
152
|
+
- Before writing a pattern, call **List SEO Pattern Variables** for the page
|
|
153
|
+
type and build the pattern only from returned variables. Never invent a
|
|
154
|
+
variable name.
|
|
155
|
+
- Dynamic Wix Data pages are addressed by `pageId`; addressing a pattern by
|
|
156
|
+
collection name is not supported.
|
|
157
|
+
|
|
158
|
+
## The write sequence
|
|
159
|
+
|
|
160
|
+
Exactly three calls, in this order, with no extra probing:
|
|
161
|
+
|
|
162
|
+
1. **Get** the current tags or pattern for the target. Required — see the rule
|
|
163
|
+
above.
|
|
164
|
+
2. **Set** the complete merged set, naming only the changed fields in the field
|
|
165
|
+
mask.
|
|
166
|
+
3. Report from the **Set response**, which returns the updated tags and
|
|
167
|
+
`resolvedTags`. Do not issue a verification read: the write response is the
|
|
168
|
+
confirmation. Read again only to check a static page's published revision
|
|
169
|
+
after `publish: true`, or when the user asks about a target you have not read
|
|
170
|
+
in this session.
|
|
171
|
+
|
|
172
|
+
To remove an item's own tags so it inherits again, call **Reset Item SEO Tags To
|
|
173
|
+
Default** (or **Reset SEO Pattern To Default**) — never set an empty list to
|
|
174
|
+
mean "reset".
|
|
175
|
+
|
|
176
|
+
## Worked example: set a product's SEO title and description
|
|
177
|
+
|
|
178
|
+
The user asks: *"Set the SEO title of my product 'Handmade Mug' to 'Handmade
|
|
179
|
+
Ceramic Mug | Studio Shop' and its description to 'A stoneware mug.'"*
|
|
180
|
+
|
|
181
|
+
**Step 1 — find the product ID.** Search Products v3 by name:
|
|
182
|
+
|
|
183
|
+
```
|
|
184
|
+
POST https://www.wixapis.com/stores/v3/products/search
|
|
185
|
+
{ "search": { "search": { "expression": "Handmade Mug" } } }
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
```json
|
|
189
|
+
{ "products": [{ "id": "a1b2c3d4-...", "name": "Handmade Mug", ... }] }
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
Take `products[0].id`. The item type is `STORES_PRODUCT`. Do not use Query
|
|
193
|
+
Products with a `name` filter — `name` is not filterable and returns 400.
|
|
194
|
+
|
|
195
|
+
**Step 2 — read the current tags.**
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
GET https://www.wixapis.com/promote/seo/v1/item-seo-tags/STORES_PRODUCT/{productId}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
```json
|
|
202
|
+
{
|
|
203
|
+
"itemSeoTags": {
|
|
204
|
+
"tags": [],
|
|
205
|
+
"hasOverride": false,
|
|
206
|
+
"resolvedTags": [
|
|
207
|
+
{ "tag": { "type": "title", "children": "Handmade Mug | My Site" },
|
|
208
|
+
"source": "TAG_SOURCE_DEFAULT_PATTERN" }
|
|
209
|
+
]
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
`tags` is empty because the item has no overrides yet. `resolvedTags` shows
|
|
215
|
+
what the page currently renders with and where each tag comes from.
|
|
216
|
+
|
|
217
|
+
**Step 3 — merge and write.** Take the full `tags` array from step 2, replace
|
|
218
|
+
or add the title and description, and send the complete set back:
|
|
219
|
+
|
|
220
|
+
```json
|
|
221
|
+
PATCH /item-seo-tags/STORES_PRODUCT/{productId}
|
|
222
|
+
{
|
|
223
|
+
"itemSeoTags": {
|
|
224
|
+
"tags": [
|
|
225
|
+
{ "type": "title", "children": "Handmade Ceramic Mug | Studio Shop" },
|
|
226
|
+
{ "type": "meta", "props": { "name": "description", "content": "A stoneware mug." } }
|
|
227
|
+
]
|
|
228
|
+
},
|
|
229
|
+
"fieldMask": "tags"
|
|
230
|
+
}
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
**Step 4 — report from the response.** The Set response returns the updated
|
|
234
|
+
`tags` and `resolvedTags`. Report each resolved tag with its source. Do not
|
|
235
|
+
issue another Get — the write response is the confirmation.
|
|
236
|
+
|
|
237
|
+
## Common agent mistakes — do not make these
|
|
238
|
+
|
|
239
|
+
- **Searching the API schemas or reading the reference article before the first
|
|
240
|
+
call.** The request shapes are in this recipe. If you get a 400, compare your
|
|
241
|
+
request against the shapes in this recipe — do not go to the docs.
|
|
242
|
+
- **Searching for the SEO endpoints through API spec tools.** The shapes are
|
|
243
|
+
above; searching wastes a turn.
|
|
244
|
+
- **Sending `fieldMask` as an array over REST.** Over REST it is a
|
|
245
|
+
comma-separated string: `"fieldMask": "tags"`. The SDK's `["tags"]` array
|
|
246
|
+
returns `INVALID_FIELD_MASK`.
|
|
247
|
+
- **Guessing the item type.** Use the values in the Discover section. A store
|
|
248
|
+
product is `STORES_PRODUCT`, not `StoresProduct`, `product`, or `Product`.
|
|
249
|
+
|
|
250
|
+
- **Issuing a verification Get after a successful Set.** The Set response
|
|
251
|
+
already carries `resolvedTags`. A second read is redundant.
|
|
252
|
+
- **Using Products v1 or filtering by `name` on Query Products.** Both return
|
|
253
|
+
400. Use Search Products v3: `POST /stores/v3/products/search` with
|
|
254
|
+
`{"search":{"search":{"expression":"..."}}}`.
|
|
255
|
+
- **Calling List Item SEO Tags expecting product names.** List returns IDs
|
|
256
|
+
and tags, not names. Use Search Products to find the ID by name first.
|
|
257
|
+
- **Retrying a 400 with a different request shape without checking why.** A 400
|
|
258
|
+
means the shape was wrong. Compare against the shapes in this recipe, fix the
|
|
259
|
+
mismatch, send once. Three retries with guessed shapes is three wasted calls.
|
|
260
|
+
|
|
261
|
+
Tags can currently be written only for the site's primary language: leave
|
|
262
|
+
`language` unset on every write. There is no revision checking — the last write
|
|
263
|
+
wins and dashboard edits write to the same data, so read immediately before
|
|
264
|
+
writing.
|
|
265
|
+
|
|
266
|
+
**Static pages** keep a draft and a published revision: a write updates the
|
|
267
|
+
draft unless `publish` is `true`, and `publish: true` updates only the
|
|
268
|
+
published revision. Say clearly which revision the change reached. Item types
|
|
269
|
+
that are always live, such as store products, need no publish step.
|
|
270
|
+
|
|
271
|
+
## Bulk writes
|
|
272
|
+
|
|
273
|
+
To set tags on many items, call **Bulk Set Item SEO Tags** once, not Set in a
|
|
274
|
+
loop. Expected per-item failures (invalid tags, item not found) fail only that
|
|
275
|
+
entry and are reported on that entry's `itemMetadata.error`; map results back
|
|
276
|
+
to the request with `originalIndex` and retry only the failed entries. Report
|
|
277
|
+
partial failures truthfully — never present a partially failed bulk write as a
|
|
278
|
+
success.
|
|
279
|
+
|
|
280
|
+
## Present results
|
|
281
|
+
|
|
282
|
+
- When reporting what a page will render with, use the `resolvedTags` already
|
|
283
|
+
returned by the last Get or Set — not a fresh call — and name the source of
|
|
284
|
+
each tag (site, default pattern, user pattern, host page, or the item
|
|
285
|
+
itself). Naming the source of each reported tag is required, not optional.
|
|
286
|
+
`hasOverride: false` does not mean built-in defaults — the item may inherit
|
|
287
|
+
from a customized pattern or the site.
|
|
288
|
+
- `resolvedTags` excludes tags added by site code or apps at render time, so
|
|
289
|
+
present it as what Wix manages, not a literal copy of the rendered page head.
|
|
290
|
+
|
|
291
|
+
|
|
292
|
+
## Recovery rules
|
|
293
|
+
|
|
294
|
+
- **Permission denied:** stop after the first `403` or `PERMISSION_DENIED`. Do
|
|
295
|
+
not retry with another item, level, request shape, or site. Explain that the
|
|
296
|
+
current Wix identity lacks **Manage SEO Settings** and must be reconnected or
|
|
297
|
+
authorized. Never imply that a successful read means the write ran.
|
|
298
|
+
- **`UNSUPPORTED_ITEM_TYPE`:** the error message lists the item types the API
|
|
299
|
+
supports; use it to redirect the request rather than retrying blindly.
|
|
300
|
+
- **`ITEM_NOT_FOUND`:** re-discover the item ID; do not guess a new one.
|
|
301
|
+
- **Invalid tags:** tags are validated before anything is saved, so nothing
|
|
302
|
+
changed; fix the tag and resend the same complete set.
|
|
303
|
+
- **`400` on a request you built from this recipe:** compare the request you
|
|
304
|
+
sent against the shapes in this recipe's "REST request and response shapes"
|
|
305
|
+
section. Fix the mismatch — a wrong nesting level, a missing wrapper key, or
|
|
306
|
+
`fieldMask` sent as an array instead of a string — and send again. Never
|
|
307
|
+
resend the same shape, and never walk through variations hoping one is
|
|
308
|
+
accepted.
|
|
309
|
+
- **Setting tags for `EVENTS_PAGE` items:** not supported yet, although reading
|
|
310
|
+
them is; say so instead of retrying.
|
|
311
|
+
|
|
312
|
+
This recipe is self-contained for the common flows: request shapes, field
|
|
313
|
+
masks, tag structure, `resolvedTags` format, discovery, and error handling are
|
|
314
|
+
all above. Do not read the method's reference article and do not search the
|
|
315
|
+
API schemas — build every request from this recipe alone.
|