@wix/agent-skills 1.15.1 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -7
- package/package.json +1 -1
- package/skills/wix-app/SKILL.md +4 -1
- package/skills/wix-app/references/APP_TOOLS.md +134 -0
- package/skills/wix-app/references/CUSTOM_ELEMENT_WIDGET.md +1 -1
- package/skills/wix-app/references/DASHBOARD_PAGE.md +0 -10
- package/skills/wix-app/references/DATA_COLLECTION.md +1 -1
- package/skills/wix-app/references/EDITOR_REACT_COMPONENT.md +42 -8
- package/skills/wix-app/references/SERVICE_PLUGIN.md +12 -10
- package/skills/wix-app/references/app-tools/TOOLS.md +75 -0
- package/skills/wix-app/references/dashboard-page/DASHBOARD_API.md +2 -2
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW-REFERENCE.md +172 -0
- package/skills/wix-app/references/editor-react-component/A11Y-REVIEW.md +143 -0
- package/skills/wix-app/references/editor-react-component/ANIMATED-COMPONENTS.md +23 -2
- package/skills/wix-app/references/editor-react-component/BRANDED-COMPONENTS.md +29 -0
- package/skills/wix-app/references/editor-react-component/COMPONENT-API.md +1 -1
- package/skills/wix-app/references/editor-react-component/COMPONENT-CONFIGURATION.md +60 -0
- package/skills/wix-app/references/editor-react-component/CSS-GUIDELINES.md +27 -2
- package/skills/wix-app/references/editor-react-component/DESIGN-STATES.md +5 -3
- package/skills/wix-app/references/editor-react-component/DIRECTIONALITY.md +24 -7
- package/skills/wix-app/references/editor-react-component/PARTS.md +15 -2
- package/skills/wix-app/references/editor-react-component/REACT-GUIDELINES.md +2 -3
- package/skills/wix-app/references/editor-react-component/SITE-CONTEXT-HOOKS.md +187 -0
- package/skills/wix-app/references/service-plugin/BOOKINGS-STAFF-SORTING.md +13 -9
- package/skills/wix-app/references/service-plugin/DISCOUNT-TRIGGERS.md +4 -0
- package/skills/wix-app/references/service-plugin/GIFT-CARDS.md +4 -0
- package/skills/wix-app/references/service-plugin/PAYMENT-SETTINGS.md +3 -1
- package/skills/wix-app/references/service-plugin/SHIPPING-RATES.md +4 -0
- package/skills/wix-app/references/service-plugin/TOOLS_PROVIDER.md +54 -0
- package/skills/wix-app/references/stores/QUERY.md +32 -0
- package/skills/wix-app/scripts/scan-a11y-code.cjs +777 -0
- package/skills/wix-app/scripts/scan-a11y-eslint.cjs +201 -0
- package/skills/wix-docs/SKILL.md +35 -3
- package/skills/wix-headless/SKILL.md +3 -1
- package/skills/wix-headless/references/CAPABILITIES.md +16 -3
- package/skills/wix-headless/references/CONTENT.md +36 -0
- package/skills/wix-headless/references/DESIGN.md +54 -0
- package/skills/wix-headless/references/DISCOVERY.md +24 -0
- package/skills/wix-headless/references/IMAGE_GENERATION.md +10 -0
- package/skills/wix-headless/references/SDK_HANDOFF.md +1 -1
- package/skills/wix-headless/references/SEED.md +1 -1
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +3 -2
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +560 -102
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +210 -143
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +32 -23
- package/skills/wix-headless/references/managed/CONNECT.md +1 -1
- package/skills/wix-headless/references/managed/CREATE.md +14 -0
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +25 -0
- package/skills/wix-manage/SKILL.md +130 -7
- package/skills/wix-manage/references/accessibility/scan-site-accessibility.md +98 -0
- package/skills/wix-manage/references/analytics/analytics-dashboard-navigation.md +40 -0
- package/skills/wix-manage/references/app-installation/app-installation-dashboard-navigation.md +28 -0
- package/skills/wix-manage/references/blog/blog-dashboard-navigation.md +56 -0
- package/skills/wix-manage/references/blog/how-to-create-blog-posts.md +31 -6
- package/skills/wix-manage/references/bookings/booking-service-policy-setup.md +3 -1
- package/skills/wix-manage/references/bookings/bookings-dashboard-navigation.md +63 -0
- package/skills/wix-manage/references/bookings/diagnose-availability-issues.md +10 -1
- package/skills/wix-manage/references/cms/cms-dashboard-navigation.md +44 -0
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +31 -3
- package/skills/wix-manage/references/cms/cms-publishing-flow.md +287 -0
- package/skills/wix-manage/references/cms/cms-schema-management.md +27 -1
- package/skills/wix-manage/references/contacts/contacts-dashboard-navigation.md +46 -0
- package/skills/wix-manage/references/contacts/create-a-contact.md +82 -0
- package/skills/wix-manage/references/contacts/update-a-contact.md +119 -0
- package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +82 -0
- package/skills/wix-manage/references/dashboard-navigation/routes.json +1733 -0
- package/skills/wix-manage/references/domains/domains-dashboard-navigation.md +32 -0
- package/skills/wix-manage/references/ecommerce/ecom-pricing.md +4 -4
- package/skills/wix-manage/references/ecommerce/ecom-shipping.md +1 -1
- package/skills/wix-manage/references/ecommerce/gift-cards/ecom-gift-cards-goal-sell-gift-cards.md +338 -0
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-create-discount-rule.md +42 -78
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-bundle-and-save.md +1 -1
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-stock-mover.md +1 -1
- package/skills/wix-manage/references/ecommerce/pricing-promotions/ecom-pricing-flow-upsell-boost.md +1 -1
- package/skills/wix-manage/references/ecommerce/recommend-ecommerce-strategy.md +90 -92
- package/skills/wix-manage/references/events/create-wix-event.md +176 -0
- package/skills/wix-manage/references/events/manage-wix-events.md +174 -0
- package/skills/wix-manage/references/forms/forms-dashboard-navigation.md +44 -0
- package/skills/wix-manage/references/get-paid/get-paid-dashboard-navigation.md +52 -0
- package/skills/wix-manage/references/google-ads/billing-and-payment.md +80 -0
- package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +212 -0
- package/skills/wix-manage/references/google-ads/get-campaign-suggestions.md +110 -0
- package/skills/wix-manage/references/google-ads/google-ads-dashboard-navigation.md +25 -0
- package/skills/wix-manage/references/google-ads/install-and-create-account.md +155 -0
- package/skills/wix-manage/references/google-ads/manage-campaign-lifecycle.md +63 -0
- package/skills/wix-manage/references/google-ads/query-campaign-analytics.md +155 -0
- package/skills/wix-manage/references/marketing/marketing-dashboard-navigation.md +52 -0
- package/skills/wix-manage/references/pricing-plans/create-and-update-pricing-plans.md +99 -1
- package/skills/wix-manage/references/pricing-plans/pricing-plans-dashboard-navigation.md +45 -0
- package/skills/wix-manage/references/restaurants/restaurants-dashboard-navigation.md +68 -0
- package/skills/wix-manage/references/restaurants/wix-restaurants-setup.md +94 -125
- package/skills/wix-manage/references/site-properties/change-payment-currency-site-properties.md +48 -9
- package/skills/wix-manage/references/site-properties/site-properties-dashboard-navigation.md +31 -0
- package/skills/wix-manage/references/sites/create-headless-site.md +52 -0
- package/skills/wix-manage/references/sites/create-site-from-template.md +2 -25
- package/skills/wix-manage/references/sites/site-import.md +217 -192
- package/skills/wix-manage/references/sites/sites-dashboard-navigation.md +29 -0
- package/skills/wix-manage/references/stores/add-store-pages-to-site.md +17 -1
- package/skills/wix-manage/references/stores/find-products-query-and-search-catalog-v3.md +26 -8
- package/skills/wix-manage/references/stores/stores-dashboard-navigation.md +65 -0
- package/skills/wix-manage/references/stores/update-product-with-options.md +39 -7
- package/skills/wix-replatform/.publish-manifest.json +8 -0
- package/skills/wix-replatform/SKILL.md +693 -0
- package/skills/wix-replatform/lib/artifact-freshness.js +215 -0
- package/skills/wix-replatform/lib/completion-report.js +200 -0
- package/skills/wix-replatform/lib/config-env.js +59 -0
- package/skills/wix-replatform/lib/execution-manifest.js +185 -0
- package/skills/wix-replatform/lib/execution-state.js +173 -0
- package/skills/wix-replatform/lib/import-recovery.js +313 -0
- package/skills/wix-replatform/lib/local-state.js +642 -0
- package/skills/wix-replatform/lib/orchestration-preflight.js +143 -0
- package/skills/wix-replatform/lib/orchestration-router.js +122 -0
- package/skills/wix-replatform/lib/orchestration-state.js +455 -0
- package/skills/wix-replatform/lib/progress-log.js +224 -0
- package/skills/wix-replatform/lib/progress-log.sh +140 -0
- package/skills/wix-replatform/lib/url-preservation-state.js +391 -0
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +184 -0
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +529 -0
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +316 -0
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +64 -0
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +1114 -0
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +430 -0
- package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +217 -0
- package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +148 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +378 -0
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +183 -0
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +478 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +136 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fingerprint.js +310 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +1081 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +618 -0
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +949 -0
- package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +196 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +66 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +60 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +95 -0
- package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +82 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +256 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +249 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +444 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +774 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +71 -0
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +632 -0
- package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +330 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +21 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +39 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +36 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +35 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +131 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +21 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +97 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +528 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +53 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +84 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +25 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +37 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +90 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +64 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +141 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +384 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +260 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +238 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +237 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +238 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +2219 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +31 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +100 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +107 -0
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +344 -0
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +250 -0
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1927 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +83 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +141 -0
- package/skills/wix-replatform/scripts/artifact-freshness.js +76 -0
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +43 -0
- package/skills/wix-replatform/scripts/execution-state-prepare.js +128 -0
- package/skills/wix-replatform/scripts/orchestration-preflight.js +48 -0
- package/skills/wix-replatform/scripts/orchestration-route.js +46 -0
- package/skills/wix-replatform/scripts/orchestration-state.js +245 -0
- package/skills/wix-vibe-headless/SKILL.md +49 -25
- package/skills/wix-vibe-headless/install/deploy.cjs +156 -0
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +34 -0
- package/skills/wix-vibe-headless/platforms/README.md +8 -4
- package/skills/wix-vibe-headless/platforms/base44.md +111 -101
- package/skills/wix-vibe-headless/platforms/generic.md +99 -64
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +226 -119
- package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +43 -0
- package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +25 -0
- package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +35 -0
- package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +38 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +40 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +54 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +65 -0
- package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +50 -0
- package/skills/wix-vibe-headless/references/blog/seed/SEED.md +103 -0
- package/skills/wix-vibe-headless/references/blog/seed/seed-blog.js +270 -0
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +256 -149
- package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +65 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +47 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +13 -0
- package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +126 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +108 -0
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +58 -0
- package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +95 -0
- package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +94 -0
- package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +89 -0
- package/skills/wix-vibe-headless/references/bookings/{wix-bookings-checkout.js → app/rest/wix-bookings-checkout.js} +1 -1
- package/skills/wix-vibe-headless/references/bookings/{wix-bookings-services.js → app/rest/wix-bookings-services.js} +87 -11
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +117 -0
- package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.js +333 -0
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +168 -147
- package/skills/wix-vibe-headless/references/cms/app/collection.config.js +31 -0
- package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +18 -0
- package/skills/wix-vibe-headless/references/cms/{wix-cms.js → app/rest/wix-cms.js} +47 -2
- package/skills/wix-vibe-headless/references/cms/seed/SEED.md +145 -0
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +223 -131
- package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +23 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +43 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +13 -0
- package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +29 -0
- package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +57 -0
- package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +78 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +27 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +54 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +40 -0
- package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +81 -0
- package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +48 -0
- package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +36 -0
- package/skills/wix-vibe-headless/references/events/{wix-events-browse.js → app/rest/wix-events-browse.js} +1 -1
- package/skills/wix-vibe-headless/references/events/seed/SEED.md +107 -0
- package/skills/wix-vibe-headless/references/events/seed/seed-events.js +251 -0
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +272 -188
- package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +101 -0
- package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +33 -0
- package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +21 -0
- package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +29 -0
- package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +54 -0
- package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +77 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +36 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +32 -0
- package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +35 -0
- package/skills/wix-vibe-headless/references/members/{wix-members-auth.js → app/rest/wix-members-auth.js} +6 -3
- package/skills/wix-vibe-headless/references/members/install/Register.jsx +22 -0
- package/skills/wix-vibe-headless/references/members/seed/SEED.md +22 -0
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +229 -104
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +31 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +39 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +15 -0
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +29 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +35 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +27 -0
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +25 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +39 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +27 -0
- package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +60 -0
- package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +94 -0
- package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.js +236 -0
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +236 -117
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +35 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +48 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +16 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +35 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +25 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +28 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +30 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +30 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +53 -0
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +28 -0
- package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +86 -0
- package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.js +251 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +244 -124
- package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +81 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +71 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +43 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +21 -0
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +60 -0
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +63 -0
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +32 -0
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +73 -0
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +28 -0
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +102 -0
- package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +180 -0
- package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.js +452 -0
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +56 -0
- package/skills/wix-vibe-headless/references/shared/{wix-client.js → app/rest/wix-client.js} +6 -8
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +8 -0
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +259 -157
- package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +20 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +150 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductCard.jsx +167 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGallery.jsx +51 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/ProductGrid.jsx +54 -0
- package/skills/wix-vibe-headless/references/storefront/app/components/VariantPicker.jsx +119 -0
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +71 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +109 -0
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +98 -0
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +27 -0
- package/skills/wix-vibe-headless/references/storefront/app/pages/ProductDetail.jsx +139 -0
- package/skills/wix-vibe-headless/references/storefront/app/pages/Shop.jsx +75 -0
- package/skills/wix-vibe-headless/references/storefront/{wix-store-cart.js → app/rest/wix-store-cart.js} +1 -1
- package/skills/wix-vibe-headless/references/storefront/{wix-store-catalog.js → app/rest/wix-store-catalog.js} +20 -1
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +111 -0
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.js +338 -0
- /package/skills/wix-vibe-headless/references/blog/{wix-blog.js → app/rest/wix-blog.js} +0 -0
- /package/skills/wix-vibe-headless/references/events/{wix-events-registration.js → app/rest/wix-events-registration.js} +0 -0
- /package/skills/wix-vibe-headless/references/portfolio/{wix-portfolio.js → app/rest/wix-portfolio.js} +0 -0
- /package/skills/wix-vibe-headless/references/pricing-plans/{wix-pricing-plans.js → app/rest/wix-pricing-plans.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-menu.js → app/rest/wix-restaurants-menu.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-ordering.js → app/rest/wix-restaurants-ordering.js} +0 -0
- /package/skills/wix-vibe-headless/references/restaurants/{wix-restaurants-reservations.js → app/rest/wix-restaurants-reservations.js} +0 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"domain": "members",
|
|
4
|
+
"entity": "member",
|
|
5
|
+
"displayName": "Site Member",
|
|
6
|
+
"target": {
|
|
7
|
+
"classification": "native-plus-cms",
|
|
8
|
+
"nativeEntity": "Member",
|
|
9
|
+
"verifiedFqdn": null,
|
|
10
|
+
"idPolicy": "server-assigned",
|
|
11
|
+
"crosswalkRequired": true
|
|
12
|
+
},
|
|
13
|
+
"sourceAliases": [
|
|
14
|
+
{ "sourceSystem": "wordpress", "sourceEntity": "user", "routes": ["/wp/v2/users"], "confidence": "medium" },
|
|
15
|
+
{ "sourceSystem": "woocommerce", "sourceEntity": "customer", "routes": ["/wc/v3/customers"], "confidence": "medium" },
|
|
16
|
+
{ "sourceSystem": "wix", "sourceEntity": "member", "routes": ["Members APIs"], "confidence": "high" }
|
|
17
|
+
],
|
|
18
|
+
"preferredWrite": {
|
|
19
|
+
"surface": "Members V1",
|
|
20
|
+
"endpoint": "POST /members/v1/members",
|
|
21
|
+
"writerId": "createMember",
|
|
22
|
+
"verification": "verified-live",
|
|
23
|
+
"importSafe": false,
|
|
24
|
+
"bulk": false
|
|
25
|
+
},
|
|
26
|
+
"safeModeContactFields": [
|
|
27
|
+
{
|
|
28
|
+
"kind": "email",
|
|
29
|
+
"targetPath": "member.loginEmail",
|
|
30
|
+
"source": "target-schema",
|
|
31
|
+
"notes": "Members V1 login email in the create-member request body."
|
|
32
|
+
}
|
|
33
|
+
],
|
|
34
|
+
"fallbacks": [
|
|
35
|
+
{ "classification": "crm", "when": "Use Contacts for person records that do not need login identity." },
|
|
36
|
+
{ "classification": "cms", "when": "Use for author profiles or member metadata not represented by Members APIs." }
|
|
37
|
+
],
|
|
38
|
+
"reliability": { "status": "unreliable", "flags": ["IMPORT_UNRELIABLE"] },
|
|
39
|
+
"pitfalls": [
|
|
40
|
+
{ "code": "passwords-never-imported", "severity": "warning", "summary": "Passwords are NOT imported — project decision (2026-08-03), not just an API gap. Members keep account/profile/contact linkage; they set a new password via reset. Never propose hash import." },
|
|
41
|
+
{ "code": "activation-via-forgot-password", "severity": "warning", "summary": "Activation (decided 2026-08-03): passwordless members complete the standard forgot-password flow (confirmed). Delivery = post-import automation (label-added trigger, owner-branded email, label applied in API waves). Never mass-send Send Set Password Email — its link dies in 3h." },
|
|
42
|
+
{ "code": "serial-create-only", "severity": "warning", "summary": "No bulk member create; documented >=1s spacing per Create Member call (10k members ~ 3h serial floor). Plan throughput and resume via loginEmail crosswalk." },
|
|
43
|
+
{ "code": "chronology-server-controlled", "severity": "warning", "summary": "Original createdDate and lastLoginDate are not writable as native member chronology." }
|
|
44
|
+
],
|
|
45
|
+
"mappingGuidance": [
|
|
46
|
+
"Split author, customer, contact, and login-member roles before selecting targets.",
|
|
47
|
+
"Create Member sends no email and does not fire the signup automations trigger (source-confirmed) — silent import is the default; the only member-facing email is the explicit Send Set Password Email call, which is per-member, interactive-mode, owner-approved only."
|
|
48
|
+
],
|
|
49
|
+
"setupRequirements": ["Activation is decided end-to-end: no credential import; post-import the owner creates ONE dashboard automation (label-added trigger → branded email directing members to Log in → Forgot password), then the importer applies the label in API waves for rate control and re-targeting. Enable the automation only after the import window (AUTO-02 pause choreography)."],
|
|
50
|
+
"evidence": [
|
|
51
|
+
{ "type": "repo-research", "path": "research/import-api-suitability/orders-contacts-members.md" }
|
|
52
|
+
]
|
|
53
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://wix.com/replatform/domain-knowledge.schema.json",
|
|
4
|
+
"title": "RePlatform Wix Domain Knowledge Entity",
|
|
5
|
+
"type": "object",
|
|
6
|
+
"additionalProperties": true,
|
|
7
|
+
"required": [
|
|
8
|
+
"schemaVersion",
|
|
9
|
+
"domain",
|
|
10
|
+
"entity",
|
|
11
|
+
"displayName",
|
|
12
|
+
"target",
|
|
13
|
+
"sourceAliases",
|
|
14
|
+
"preferredWrite",
|
|
15
|
+
"reliability",
|
|
16
|
+
"pitfalls",
|
|
17
|
+
"mappingGuidance",
|
|
18
|
+
"evidence"
|
|
19
|
+
],
|
|
20
|
+
"properties": {
|
|
21
|
+
"schemaVersion": { "const": 1 },
|
|
22
|
+
"domain": { "type": "string", "minLength": 1 },
|
|
23
|
+
"entity": { "type": "string", "minLength": 1 },
|
|
24
|
+
"displayName": { "type": "string", "minLength": 1 },
|
|
25
|
+
"target": {
|
|
26
|
+
"type": "object",
|
|
27
|
+
"required": ["classification", "idPolicy", "crosswalkRequired"],
|
|
28
|
+
"properties": {
|
|
29
|
+
"classification": {
|
|
30
|
+
"enum": [
|
|
31
|
+
"native",
|
|
32
|
+
"cms",
|
|
33
|
+
"native-plus-cms",
|
|
34
|
+
"setup-config",
|
|
35
|
+
"skip-by-default",
|
|
36
|
+
"unsupported-native-gap"
|
|
37
|
+
]
|
|
38
|
+
},
|
|
39
|
+
"nativeEntity": { "type": ["string", "null"] },
|
|
40
|
+
"verifiedFqdn": { "type": ["string", "null"] },
|
|
41
|
+
"idPolicy": {
|
|
42
|
+
"enum": ["client-assigned", "server-assigned", "natural-key", "not-applicable"]
|
|
43
|
+
},
|
|
44
|
+
"crosswalkRequired": { "type": "boolean" }
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"preferredWrite": {
|
|
48
|
+
"type": "object",
|
|
49
|
+
"required": ["surface", "endpoint", "writerId", "verification", "importSafe", "bulk"],
|
|
50
|
+
"properties": {
|
|
51
|
+
"surface": { "type": "string" },
|
|
52
|
+
"endpoint": { "type": ["string", "null"] },
|
|
53
|
+
"writerId": { "type": ["string", "null"] },
|
|
54
|
+
"verification": {
|
|
55
|
+
"enum": ["verified-live", "docs", "source-review", "internal-only", "unverified", "none"]
|
|
56
|
+
},
|
|
57
|
+
"importSafe": { "type": "boolean" },
|
|
58
|
+
"bulk": { "type": "boolean" }
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
"reliability": {
|
|
62
|
+
"type": "object",
|
|
63
|
+
"required": ["status", "flags"],
|
|
64
|
+
"properties": {
|
|
65
|
+
"status": { "enum": ["reliable", "partially-reliable", "unreliable", "unknown"] },
|
|
66
|
+
"flags": { "type": "array", "items": { "type": "string" } }
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
"safeModeContactFields": {
|
|
70
|
+
"type": "array",
|
|
71
|
+
"items": {
|
|
72
|
+
"type": "object",
|
|
73
|
+
"required": ["kind", "targetPath", "source"],
|
|
74
|
+
"properties": {
|
|
75
|
+
"kind": { "enum": ["email", "phone"] },
|
|
76
|
+
"targetPath": { "type": "string", "minLength": 1 },
|
|
77
|
+
"source": { "type": "string", "minLength": 1 },
|
|
78
|
+
"notes": { "type": "string" }
|
|
79
|
+
},
|
|
80
|
+
"additionalProperties": true
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"domain": "stores",
|
|
4
|
+
"displayName": "Wix Stores",
|
|
5
|
+
"ownerHint": "Stores Catalog, Inventory, Coupons, Tags, and merchandising domain owners",
|
|
6
|
+
"wixAppsRequired": ["Wix Stores"],
|
|
7
|
+
"defaultImportOrder": ["category", "product-tag", "product", "inventory-item", "coupon"],
|
|
8
|
+
"sharedPitfalls": [
|
|
9
|
+
{
|
|
10
|
+
"code": "catalog-version-required",
|
|
11
|
+
"severity": "blocker",
|
|
12
|
+
"summary": "Catalog V3 only — Catalog V1 is unsupported. Confirm catalogVersion is V3_CATALOG (GET /stores/v3/provision/version) before any Stores write; V1_CATALOG halts the run, it is never mapped or coded around."
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"evidence": [
|
|
16
|
+
{
|
|
17
|
+
"type": "repo-research",
|
|
18
|
+
"path": "research/import-api-suitability/stores-catalog-inventory.md"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"type": "repo-research",
|
|
22
|
+
"path": "research/source-entity-import-suitability-wordpress-woocommerce-wix.md"
|
|
23
|
+
}
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"domain": "stores",
|
|
4
|
+
"entity": "category",
|
|
5
|
+
"displayName": "Stores Category",
|
|
6
|
+
"target": {
|
|
7
|
+
"classification": "native",
|
|
8
|
+
"nativeEntity": "Stores Category",
|
|
9
|
+
"verifiedFqdn": null,
|
|
10
|
+
"idPolicy": "server-assigned",
|
|
11
|
+
"crosswalkRequired": true
|
|
12
|
+
},
|
|
13
|
+
"sourceAliases": [
|
|
14
|
+
{ "sourceSystem": "woocommerce", "sourceEntity": "product_category", "routes": ["/wc/v3/products/categories"], "confidence": "high" },
|
|
15
|
+
{ "sourceSystem": "wix", "sourceEntity": "storesCategory", "routes": ["Catalog V3 Categories", "V1 collections"], "confidence": "high" }
|
|
16
|
+
],
|
|
17
|
+
"preferredWrite": {
|
|
18
|
+
"surface": "Categories",
|
|
19
|
+
"endpoint": "POST /categories/v1/categories",
|
|
20
|
+
"writerId": "createStoresCategory",
|
|
21
|
+
"verification": "verified-live",
|
|
22
|
+
"importSafe": true,
|
|
23
|
+
"bulk": false
|
|
24
|
+
},
|
|
25
|
+
"fallbacks": [
|
|
26
|
+
{ "classification": "cms", "when": "Use only for source taxonomy metadata or hierarchy details not represented by Stores categories." }
|
|
27
|
+
],
|
|
28
|
+
"reliability": { "status": "reliable", "flags": [] },
|
|
29
|
+
"pitfalls": [
|
|
30
|
+
{ "code": "tree-reference-top-level", "severity": "blocker", "summary": "Pass Stores treeReference as a top-level sibling of category." }
|
|
31
|
+
],
|
|
32
|
+
"mappingGuidance": ["Preserve hierarchy where the target category tree supports it; create before products."],
|
|
33
|
+
"setupRequirements": ["Wix Stores app"],
|
|
34
|
+
"evidence": [
|
|
35
|
+
{ "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"domain": "stores",
|
|
4
|
+
"entity": "coupon",
|
|
5
|
+
"displayName": "Stores Coupon",
|
|
6
|
+
"target": {
|
|
7
|
+
"classification": "native-plus-cms",
|
|
8
|
+
"nativeEntity": "Stores Coupon",
|
|
9
|
+
"verifiedFqdn": null,
|
|
10
|
+
"idPolicy": "server-assigned",
|
|
11
|
+
"crosswalkRequired": true
|
|
12
|
+
},
|
|
13
|
+
"sourceAliases": [
|
|
14
|
+
{ "sourceSystem": "woocommerce", "sourceEntity": "coupon", "routes": ["/wc/v3/coupons"], "confidence": "high" },
|
|
15
|
+
{ "sourceSystem": "wix", "sourceEntity": "coupon", "routes": ["Coupons API"], "confidence": "high" }
|
|
16
|
+
],
|
|
17
|
+
"preferredWrite": {
|
|
18
|
+
"surface": "Coupons",
|
|
19
|
+
"endpoint": "POST /stores/v2/coupons",
|
|
20
|
+
"writerId": "createCoupon",
|
|
21
|
+
"verification": "unverified",
|
|
22
|
+
"importSafe": true,
|
|
23
|
+
"bulk": false
|
|
24
|
+
},
|
|
25
|
+
"fallbacks": [
|
|
26
|
+
{ "classification": "cms", "when": "Use for unsupported source constraints, audit detail, or manual setup notes." }
|
|
27
|
+
],
|
|
28
|
+
"reliability": { "status": "partially-reliable", "flags": [] },
|
|
29
|
+
"pitfalls": [
|
|
30
|
+
{ "code": "constraint-coverage", "severity": "warning", "summary": "Source coupon constraints may be narrower or differently modeled in Wix." }
|
|
31
|
+
],
|
|
32
|
+
"mappingGuidance": ["Prefer native coupons and record unsupported conditions as CMS shadow fields or setup gaps."],
|
|
33
|
+
"setupRequirements": ["Wix Stores app"],
|
|
34
|
+
"evidence": [
|
|
35
|
+
{ "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
|
|
36
|
+
]
|
|
37
|
+
}
|
package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"domain": "stores",
|
|
4
|
+
"entity": "inventory-item",
|
|
5
|
+
"displayName": "Stores Inventory Item",
|
|
6
|
+
"target": {
|
|
7
|
+
"classification": "native",
|
|
8
|
+
"nativeEntity": "Stores Inventory Item",
|
|
9
|
+
"verifiedFqdn": null,
|
|
10
|
+
"idPolicy": "server-assigned",
|
|
11
|
+
"crosswalkRequired": true
|
|
12
|
+
},
|
|
13
|
+
"sourceAliases": [
|
|
14
|
+
{ "sourceSystem": "woocommerce", "sourceEntity": "product_variation_inventory", "routes": ["/wc/v3/products", "/wc/v3/products/{productId}/variations"], "confidence": "medium" },
|
|
15
|
+
{ "sourceSystem": "wix", "sourceEntity": "inventoryItem", "routes": ["Stores Inventory APIs"], "confidence": "high" }
|
|
16
|
+
],
|
|
17
|
+
"preferredWrite": {
|
|
18
|
+
"surface": "Stores Inventory V3",
|
|
19
|
+
"endpoint": "POST /stores/v3/inventory-items",
|
|
20
|
+
"writerId": "createInventoryItem",
|
|
21
|
+
"verification": "unverified",
|
|
22
|
+
"importSafe": true,
|
|
23
|
+
"bulk": false
|
|
24
|
+
},
|
|
25
|
+
"fallbacks": [
|
|
26
|
+
{ "classification": "cms", "when": "Use for source stock history or multi-location detail not represented by the selected target inventory plan." }
|
|
27
|
+
],
|
|
28
|
+
"reliability": { "status": "partially-reliable", "flags": [] },
|
|
29
|
+
"pitfalls": [
|
|
30
|
+
{ "code": "product-first", "severity": "blocker", "summary": "Inventory requires target product and variant IDs." },
|
|
31
|
+
{ "code": "bis-side-effects", "severity": "warning", "summary": "Avoid stock transitions that trigger Back in Stock notifications on live stores." }
|
|
32
|
+
],
|
|
33
|
+
"mappingGuidance": ["Create products first, then create or update inventory per variant."],
|
|
34
|
+
"setupRequirements": ["SCOPE.STORES.INVENTORY_ITEM_WRITE"],
|
|
35
|
+
"evidence": [
|
|
36
|
+
{ "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
|
|
37
|
+
]
|
|
38
|
+
}
|
package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"domain": "stores",
|
|
4
|
+
"entity": "product-tag",
|
|
5
|
+
"displayName": "Stores Product Tag",
|
|
6
|
+
"target": {
|
|
7
|
+
"classification": "native",
|
|
8
|
+
"nativeEntity": "Wix Tag",
|
|
9
|
+
"verifiedFqdn": "wix.stores.catalog.v3.product",
|
|
10
|
+
"idPolicy": "server-assigned",
|
|
11
|
+
"crosswalkRequired": true
|
|
12
|
+
},
|
|
13
|
+
"sourceAliases": [
|
|
14
|
+
{ "sourceSystem": "woocommerce", "sourceEntity": "product_tag", "routes": ["/wc/v3/products/tags"], "confidence": "high" },
|
|
15
|
+
{ "sourceSystem": "wix", "sourceEntity": "productTag", "routes": ["Tags API scoped to product FQDN"], "confidence": "high" }
|
|
16
|
+
],
|
|
17
|
+
"preferredWrite": {
|
|
18
|
+
"surface": "Tags",
|
|
19
|
+
"endpoint": "POST /tags/v1/tags",
|
|
20
|
+
"writerId": null,
|
|
21
|
+
"verification": "unverified",
|
|
22
|
+
"importSafe": true,
|
|
23
|
+
"bulk": false
|
|
24
|
+
},
|
|
25
|
+
"fallbacks": [
|
|
26
|
+
{ "classification": "cms", "when": "Use only for source tag metadata not represented by Wix Tags." }
|
|
27
|
+
],
|
|
28
|
+
"reliability": { "status": "partially-reliable", "flags": [] },
|
|
29
|
+
"pitfalls": [
|
|
30
|
+
{ "code": "fqdn-required", "severity": "blocker", "summary": "Use the verified product FQDN and resolve tag IDs before attaching them to products." }
|
|
31
|
+
],
|
|
32
|
+
"mappingGuidance": ["Create tags before products; attach tag IDs through product publicTags when supported."],
|
|
33
|
+
"setupRequirements": ["Wix Stores app"],
|
|
34
|
+
"evidence": [
|
|
35
|
+
{ "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" }
|
|
36
|
+
]
|
|
37
|
+
}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": 1,
|
|
3
|
+
"domain": "stores",
|
|
4
|
+
"entity": "product",
|
|
5
|
+
"displayName": "Stores Product",
|
|
6
|
+
"target": {
|
|
7
|
+
"classification": "native-plus-cms",
|
|
8
|
+
"nativeEntity": "Stores Product",
|
|
9
|
+
"verifiedFqdn": "wix.stores.catalog.v3.product",
|
|
10
|
+
"idPolicy": "server-assigned",
|
|
11
|
+
"crosswalkRequired": true
|
|
12
|
+
},
|
|
13
|
+
"sourceAliases": [
|
|
14
|
+
{ "sourceSystem": "woocommerce", "sourceEntity": "product", "routes": ["/wc/v3/products"], "confidence": "high" },
|
|
15
|
+
{ "sourceSystem": "wix", "sourceEntity": "storesProduct", "routes": ["Stores Catalog V1 Products", "Stores Catalog V3 Products"], "confidence": "high" }
|
|
16
|
+
],
|
|
17
|
+
"preferredWrite": {
|
|
18
|
+
"surface": "Stores Catalog V3 Products",
|
|
19
|
+
"endpoint": "POST /stores/v3/products",
|
|
20
|
+
"writerId": "createStoresProduct",
|
|
21
|
+
"verification": "verified-live",
|
|
22
|
+
"importSafe": true,
|
|
23
|
+
"bulk": false
|
|
24
|
+
},
|
|
25
|
+
"fieldContracts": [
|
|
26
|
+
{
|
|
27
|
+
"domain": "stores",
|
|
28
|
+
"entity": "product",
|
|
29
|
+
"surface": "catalog-v3",
|
|
30
|
+
"operation": "createProduct",
|
|
31
|
+
"path": "product.subscriptionDetails",
|
|
32
|
+
"verificationLevel": "live-create-and-readback",
|
|
33
|
+
"lastVerified": "2026-07-26",
|
|
34
|
+
"verifiedBy": "migration-20260726-01",
|
|
35
|
+
"requiredPaths": [
|
|
36
|
+
"product.subscriptionDetails.allowOneTimePurchases",
|
|
37
|
+
"product.subscriptionDetails.subscriptions[]",
|
|
38
|
+
"product.subscriptionDetails.subscriptions[].title",
|
|
39
|
+
"product.subscriptionDetails.subscriptions[].description",
|
|
40
|
+
"product.subscriptionDetails.subscriptions[].frequency",
|
|
41
|
+
"product.subscriptionDetails.subscriptions[].interval",
|
|
42
|
+
"product.subscriptionDetails.subscriptions[].autoRenewal"
|
|
43
|
+
],
|
|
44
|
+
"constraints": [
|
|
45
|
+
{
|
|
46
|
+
"path": "product.subscriptionDetails.subscriptions[].description",
|
|
47
|
+
"maxLength": 60,
|
|
48
|
+
"source": "live-validation"
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
"path": "product.subscriptionDetails.subscriptions[].frequency",
|
|
52
|
+
"enum": ["DAY", "WEEK", "MONTH", "YEAR"],
|
|
53
|
+
"source": "live-create"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
"path": "product.subscriptionDetails.subscriptions[].interval",
|
|
57
|
+
"minimum": 1,
|
|
58
|
+
"integer": true,
|
|
59
|
+
"source": "live-create"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"readback": {
|
|
63
|
+
"product.subscriptionDetails": "returned-after-create",
|
|
64
|
+
"product.subscriptionDetails.subscriptions[].id": "server-assigned",
|
|
65
|
+
"product.subscriptionDetails.subscriptions[].title": "preserved",
|
|
66
|
+
"product.subscriptionDetails.subscriptions[].description": "preserved",
|
|
67
|
+
"product.subscriptionDetails.subscriptions[].frequency": "preserved",
|
|
68
|
+
"product.subscriptionDetails.subscriptions[].interval": "preserved",
|
|
69
|
+
"product.subscriptionDetails.subscriptions[].autoRenewal": "preserved"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"fallbacks": [
|
|
74
|
+
{ "classification": "cms", "when": "Use for plugin rules, source-only metadata, or catalog semantics that do not fit product extended fields." }
|
|
75
|
+
],
|
|
76
|
+
"reliability": { "status": "partially-reliable", "flags": [] },
|
|
77
|
+
"pitfalls": [
|
|
78
|
+
{ "code": "catalog-v3-normalization", "severity": "blocker", "summary": "Normalize V1/simple product fields into Catalog V3 product and variant shapes before create." },
|
|
79
|
+
{ "code": "variant-matrix-two-pass", "severity": "warning", "summary": "Full variable product matrices require a post-create option-choice and variant pass." }
|
|
80
|
+
],
|
|
81
|
+
"mappingGuidance": [
|
|
82
|
+
"Create categories, tags, and media references before products when the source uses them.",
|
|
83
|
+
"Preserve recurring offers natively via product.subscriptionDetails.subscriptions[] when the source exposes clear cadence data; live create coverage was verified on July 26, 2026, while patch/update coverage remains unverified."
|
|
84
|
+
],
|
|
85
|
+
"setupRequirements": ["Wix Stores app", "Product data extension schema when source-only product fields are preserved natively."],
|
|
86
|
+
"evidence": [
|
|
87
|
+
{ "type": "repo-research", "path": "research/import-api-suitability/stores-catalog-inventory.md" },
|
|
88
|
+
{ "type": "repo-research", "path": "research/source-entity-import-suitability-wordpress-woocommerce-wix.md" }
|
|
89
|
+
]
|
|
90
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('fs');
|
|
4
|
+
|
|
5
|
+
function createBucket() {
|
|
6
|
+
return {
|
|
7
|
+
total: 0,
|
|
8
|
+
ok: 0,
|
|
9
|
+
created: 0,
|
|
10
|
+
updated: 0,
|
|
11
|
+
skipped: 0,
|
|
12
|
+
failed: 0,
|
|
13
|
+
retried: 0,
|
|
14
|
+
throttled: 0,
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
function statusOf(event) {
|
|
19
|
+
return event.status || event.resultStatus || event.result || 'unknown';
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function entityOf(event) {
|
|
23
|
+
return event.entity || event.entityKey || event.sourceEntity || 'unknown';
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function summarizeAuditEvents(events, { runId } = {}) {
|
|
27
|
+
if (!runId) {
|
|
28
|
+
throw new Error('summarizeAuditEvents requires runId; append-only audit logs may contain multiple attempts.');
|
|
29
|
+
}
|
|
30
|
+
const summary = {};
|
|
31
|
+
for (const event of events) {
|
|
32
|
+
if (!event || event.runId !== runId) continue;
|
|
33
|
+
const entity = entityOf(event);
|
|
34
|
+
const status = statusOf(event);
|
|
35
|
+
if (!summary[entity]) summary[entity] = createBucket();
|
|
36
|
+
summary[entity].total += 1;
|
|
37
|
+
if (Object.prototype.hasOwnProperty.call(summary[entity], status)) {
|
|
38
|
+
summary[entity][status] += 1;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return summary;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function readAuditNdjson(filePath) {
|
|
45
|
+
const text = fs.readFileSync(filePath, 'utf8').trim();
|
|
46
|
+
if (!text) return [];
|
|
47
|
+
return text.split('\n').filter(Boolean).map((line, index) => {
|
|
48
|
+
try {
|
|
49
|
+
return JSON.parse(line);
|
|
50
|
+
} catch (error) {
|
|
51
|
+
throw new Error(`Invalid audit JSON at line ${index + 1}: ${error.message}`);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function summarizeAuditFile(filePath, options) {
|
|
57
|
+
return summarizeAuditEvents(readAuditNdjson(filePath), options);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
module.exports = {
|
|
61
|
+
summarizeAuditEvents,
|
|
62
|
+
summarizeAuditFile,
|
|
63
|
+
readAuditNdjson,
|
|
64
|
+
};
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const fs = require('node:fs');
|
|
4
|
+
const path = require('node:path');
|
|
5
|
+
const { readEntityByRef } = require('./domain-knowledge.js');
|
|
6
|
+
|
|
7
|
+
const SCHEMA_VERSION = 1;
|
|
8
|
+
|
|
9
|
+
function normalizePathPresence(verifiedPaths = []) {
|
|
10
|
+
return verifiedPaths
|
|
11
|
+
.filter((entry) => entry && entry.path && entry.present !== false)
|
|
12
|
+
.map((entry) => entry.path);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
function createContractLedgerProposalFromStoresVerification(artifact) {
|
|
16
|
+
if (!artifact || typeof artifact !== 'object') {
|
|
17
|
+
throw new Error('verification artifact is required');
|
|
18
|
+
}
|
|
19
|
+
if (artifact.command !== 'stores subscription-create') {
|
|
20
|
+
throw new Error(`unsupported verification command: ${artifact.command || '<missing>'}`);
|
|
21
|
+
}
|
|
22
|
+
const verifiedPaths = normalizePathPresence(artifact.verifiedPaths);
|
|
23
|
+
return {
|
|
24
|
+
schemaVersion: SCHEMA_VERSION,
|
|
25
|
+
proposalId: `stores-product-subscription-create-${(artifact.timestamp || new Date().toISOString()).slice(0, 10)}`,
|
|
26
|
+
status: artifact.status === 'passed' ? 'proposed' : 'blocked',
|
|
27
|
+
sourceVerification: {
|
|
28
|
+
command: artifact.command,
|
|
29
|
+
artifactPath: artifact.artifactPath || null,
|
|
30
|
+
targetSiteIdentifier: artifact.targetSiteIdentifier || null,
|
|
31
|
+
timestamp: artifact.timestamp || null,
|
|
32
|
+
probeRecordId: artifact.probeRecordId || null,
|
|
33
|
+
},
|
|
34
|
+
targetRef: 'stores/product',
|
|
35
|
+
fieldContract: {
|
|
36
|
+
domain: 'stores',
|
|
37
|
+
entity: 'product',
|
|
38
|
+
surface: 'catalog-v3',
|
|
39
|
+
operation: 'createProduct',
|
|
40
|
+
path: 'product.subscriptionDetails',
|
|
41
|
+
verificationLevel: 'live-create-and-readback',
|
|
42
|
+
lastVerified: artifact.timestamp ? artifact.timestamp.slice(0, 10) : null,
|
|
43
|
+
verifiedBy: artifact.targetSiteIdentifier || artifact.sourceRunId || 'live-verification',
|
|
44
|
+
requiredPaths: verifiedPaths.filter((entry) => entry !== 'product.subscriptionDetails.subscriptions[].id'),
|
|
45
|
+
constraints: Array.isArray(artifact.constraintsDiscovered)
|
|
46
|
+
? artifact.constraintsDiscovered.map((constraint) => ({ ...constraint }))
|
|
47
|
+
: [],
|
|
48
|
+
readback: {
|
|
49
|
+
'product.subscriptionDetails': verifiedPaths.includes('product.subscriptionDetails') ? 'returned-after-create' : 'unverified',
|
|
50
|
+
'product.subscriptionDetails.subscriptions[].id': verifiedPaths.includes('product.subscriptionDetails.subscriptions[].id') ? 'server-assigned' : 'unverified',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function proposalKey(proposal) {
|
|
57
|
+
const contract = proposal && proposal.fieldContract;
|
|
58
|
+
return [
|
|
59
|
+
proposal && proposal.targetRef,
|
|
60
|
+
contract && contract.surface,
|
|
61
|
+
contract && contract.operation,
|
|
62
|
+
contract && contract.path,
|
|
63
|
+
].join('|');
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function contractKey(contract, entity) {
|
|
67
|
+
return [
|
|
68
|
+
`${contract.domain || (entity && entity.domain)}/${contract.entity || (entity && entity.entity)}`,
|
|
69
|
+
contract.surface,
|
|
70
|
+
contract.operation,
|
|
71
|
+
contract.path,
|
|
72
|
+
].join('|');
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
function promotedContractForProposal(domainsDir, proposal) {
|
|
76
|
+
if (!proposal || !proposal.targetRef || !proposal.fieldContract) return null;
|
|
77
|
+
const entity = readEntityByRef(domainsDir, proposal.targetRef);
|
|
78
|
+
return (entity.fieldContracts || []).find((contract) => contractKey(contract, entity) === proposalKey(proposal)) || null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function isProposalPromoted(domainsDir, proposal) {
|
|
82
|
+
let promoted;
|
|
83
|
+
try {
|
|
84
|
+
promoted = promotedContractForProposal(domainsDir, proposal);
|
|
85
|
+
} catch (error) {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
if (!promoted) return false;
|
|
89
|
+
const expected = proposal.fieldContract || {};
|
|
90
|
+
return promoted.verificationLevel === expected.verificationLevel;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function readJsonIfExists(filePath) {
|
|
94
|
+
if (!filePath || !fs.existsSync(filePath)) return null;
|
|
95
|
+
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function writeProposal(filePath, proposal) {
|
|
99
|
+
fs.mkdirSync(path.dirname(filePath), { recursive: true });
|
|
100
|
+
fs.writeFileSync(filePath, `${JSON.stringify(proposal, null, 2)}\n`);
|
|
101
|
+
return proposal;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
function validateContractPromotion({ domainsDir, verificationArtifacts = [], proposalArtifacts = [] } = {}) {
|
|
105
|
+
const errors = [];
|
|
106
|
+
const proposals = proposalArtifacts
|
|
107
|
+
.map((artifactPath) => ({ artifactPath, proposal: readJsonIfExists(artifactPath) }))
|
|
108
|
+
.filter((entry) => entry.proposal);
|
|
109
|
+
const proposalsByVerification = new Map();
|
|
110
|
+
for (const { proposal, artifactPath } of proposals) {
|
|
111
|
+
const sourcePath = proposal.sourceVerification && proposal.sourceVerification.artifactPath;
|
|
112
|
+
if (sourcePath) proposalsByVerification.set(path.resolve(sourcePath), { proposal, artifactPath });
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
for (const artifactPath of verificationArtifacts) {
|
|
116
|
+
const artifact = readJsonIfExists(artifactPath);
|
|
117
|
+
if (!artifact || artifact.status !== 'passed') continue;
|
|
118
|
+
if (artifact.command !== 'stores subscription-create') continue;
|
|
119
|
+
const proposalEntry = proposalsByVerification.get(path.resolve(artifactPath));
|
|
120
|
+
if (!proposalEntry) {
|
|
121
|
+
errors.push(`${artifactPath}: passed verification is missing contract-ledger proposal`);
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
const { proposal } = proposalEntry;
|
|
125
|
+
if (proposal.status === 'deferred' || proposal.deferralReason) continue;
|
|
126
|
+
if (!isProposalPromoted(domainsDir, proposal)) {
|
|
127
|
+
errors.push(`${proposalEntry.artifactPath}: proposal is not promoted into shared target ledger`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
return { ok: errors.length === 0, errors };
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
module.exports = {
|
|
135
|
+
SCHEMA_VERSION,
|
|
136
|
+
createContractLedgerProposalFromStoresVerification,
|
|
137
|
+
promotedContractForProposal,
|
|
138
|
+
isProposalPromoted,
|
|
139
|
+
validateContractPromotion,
|
|
140
|
+
writeProposal,
|
|
141
|
+
};
|