@wix/agent-skills 1.36.0 → 1.36.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/package.json +8 -3
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-manage/SKILL.md +3 -3
- package/skills/wix-manage/references/cms/cms-data-items-crud.md +78 -1
- package/skills/wix-manage/references/google-ads/create-performance-max-campaign.md +11 -11
- package/skills/wix-manage/references/marketing/create-and-publish-social-post.md +20 -51
- package/skills/wix-manage/references/marketing/generate-and-publish-marketing-plan.md +4 -4
- package/skills/wix-base44-connector/SKILL.md +0 -437
- package/skills/wix-base44-connector/references/CAPABILITY_MAP.md +0 -78
- package/skills/wix-base44-connector/scripts/utils.cjs +0 -466
- package/skills/wix-export/SKILL.md +0 -83
- package/skills/wix-harmony-editor/.publish-manifest.json +0 -8
- package/skills/wix-harmony-editor/COPY-SITE.md +0 -494
- package/skills/wix-harmony-editor/SKILL.md +0 -317
- package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +0 -249
- package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +0 -225
- package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +0 -89
- package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +0 -76
- package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +0 -212
- package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +0 -44
- package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +0 -45
- package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +0 -53
- package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +0 -76
- package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +0 -16
- package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +0 -150
- package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +0 -27
- package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +0 -56
- package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +0 -211
- package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +0 -29
- package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +0 -92
- package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +0 -56
- package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +0 -73
- package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +0 -67
- package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +0 -102
- package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +0 -40
- package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +0 -191
- package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +0 -61
- package/skills/wix-harmony-editor/scripts/launch.sh +0 -359
- package/skills/wix-headless/SKILL.md +0 -151
- package/skills/wix-headless/references/AI_FEATURES.md +0 -178
- package/skills/wix-headless/references/CAPABILITIES.md +0 -117
- package/skills/wix-headless/references/CONTENT.md +0 -36
- package/skills/wix-headless/references/DESIGN.md +0 -55
- package/skills/wix-headless/references/DISCOVERY.md +0 -80
- package/skills/wix-headless/references/DOC_DISCOVERY.md +0 -43
- package/skills/wix-headless/references/FEEDBACK.md +0 -129
- package/skills/wix-headless/references/IMAGE_GENERATION.md +0 -80
- package/skills/wix-headless/references/SDK_HANDOFF.md +0 -108
- package/skills/wix-headless/references/SEED.md +0 -74
- package/skills/wix-headless/references/SETUP.md +0 -60
- package/skills/wix-headless/references/astro.md +0 -98
- package/skills/wix-headless/references/inline-recipes/experience-donations.md +0 -102
- package/skills/wix-headless/references/inline-recipes/experience-store.md +0 -49
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-blog.md +0 -196
- package/skills/wix-headless/references/inline-recipes/how-to-code-a-store.md +0 -590
- package/skills/wix-headless/references/inline-recipes/how-to-code-bookings.md +0 -279
- package/skills/wix-headless/references/inline-recipes/how-to-code-cms.md +0 -163
- package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +0 -146
- package/skills/wix-headless/references/inline-recipes/how-to-code-events.md +0 -203
- package/skills/wix-headless/references/inline-recipes/how-to-code-forms.md +0 -696
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-astro.md +0 -124
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-custom-login.md +0 -160
- package/skills/wix-headless/references/inline-recipes/how-to-code-members-non-astro.md +0 -118
- package/skills/wix-headless/references/inline-recipes/how-to-code-portfolio.md +0 -132
- package/skills/wix-headless/references/inline-recipes/how-to-code-pricing-plans.md +0 -126
- package/skills/wix-headless/references/inline-recipes/how-to-code-rentals.md +0 -254
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-orders.md +0 -191
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurant-reservations.md +0 -213
- package/skills/wix-headless/references/inline-recipes/how-to-code-restaurants.md +0 -161
- package/skills/wix-headless/references/inline-recipes/setup-blog.md +0 -175
- package/skills/wix-headless/references/inline-recipes/setup-bookings.md +0 -232
- package/skills/wix-headless/references/inline-recipes/setup-cms.md +0 -200
- package/skills/wix-headless/references/inline-recipes/setup-donations.md +0 -15
- package/skills/wix-headless/references/inline-recipes/setup-events.md +0 -196
- package/skills/wix-headless/references/inline-recipes/setup-forms.md +0 -288
- package/skills/wix-headless/references/inline-recipes/setup-online-store.md +0 -214
- package/skills/wix-headless/references/inline-recipes/setup-portfolio.md +0 -155
- package/skills/wix-headless/references/inline-recipes/setup-pricing-plans.md +0 -229
- package/skills/wix-headless/references/inline-recipes/setup-rentals.md +0 -254
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-experiences.md +0 -73
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-orders.md +0 -197
- package/skills/wix-headless/references/inline-recipes/setup-restaurant-reservations.md +0 -136
- package/skills/wix-headless/references/inline-recipes/setup-restaurants.md +0 -152
- package/skills/wix-headless/references/managed/AUTHENTICATION.md +0 -71
- package/skills/wix-headless/references/managed/CONNECT.md +0 -74
- package/skills/wix-headless/references/managed/CREATE.md +0 -149
- package/skills/wix-headless/references/managed/DEPLOYMENT.md +0 -104
- package/skills/wix-headless/references/non-astro.md +0 -59
- package/skills/wix-headless/references/self-managed/AUTHENTICATION.md +0 -22
- package/skills/wix-headless/references/self-managed/DEPLOYMENT.md +0 -15
- package/skills/wix-headless/references/stripe/AUTHENTICATION.md +0 -55
- package/skills/wix-headless/references/stripe/DEPLOYMENT.md +0 -71
- package/skills/wix-headless/scripts/bootstrap.mjs +0 -156
- package/skills/wix-headless-replatform/.publish-manifest.json +0 -8
- package/skills/wix-headless-replatform/SKILL.md +0 -116
- package/skills/wix-headless-replatform/agents/openai.yaml +0 -6
- package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +0 -43
- package/skills/wix-headless-replatform/references/extraction-schema.md +0 -187
- package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +0 -137
- package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +0 -41
- package/skills/wix-headless-replatform/references/output-contract.md +0 -93
- package/skills/wix-headless-replatform/references/post-build-gap-contract.md +0 -125
- package/skills/wix-headless-replatform/references/qa-checklist.md +0 -83
- package/skills/wix-headless-replatform/references/safety.md +0 -19
- package/skills/wix-headless-replatform/references/ui-normalization-contract.md +0 -70
- package/skills/wix-headless-replatform/references/workflow.md +0 -157
- package/skills/wix-headless-replatform/registry/README.md +0 -20
- package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +0 -28
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +0 -54
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +0 -60
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +0 -48
- package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +0 -21
- package/skills/wix-headless-replatform/registry/registry.json +0 -36
- package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +0 -32
- package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +0 -62
- package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +0 -64
- package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +0 -42
- package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +0 -73
- package/skills/wix-headless-replatform/schemas/build-plan.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/candidate.schema.json +0 -19
- package/skills/wix-headless-replatform/schemas/common.schema.json +0 -33
- package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/decision-request.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +0 -28
- package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +0 -34
- package/skills/wix-headless-replatform/schemas/final-report.schema.json +0 -10
- package/skills/wix-headless-replatform/schemas/foundation.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/metadata.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +0 -17
- package/skills/wix-headless-replatform/schemas/page-capture.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +0 -33
- package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +0 -11
- package/skills/wix-headless-replatform/schemas/unit.schema.json +0 -40
- package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +0 -844
- package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +0 -163
- package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +0 -42
- package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +0 -228
- package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +0 -87
- package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +0 -505
- package/skills/wix-headless-replatform/scripts/discover-urls.mjs +0 -142
- package/skills/wix-headless-replatform/scripts/extract-assets.mjs +0 -140
- package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +0 -637
- package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +0 -1903
- package/skills/wix-headless-replatform/scripts/extract-page.mjs +0 -2461
- package/skills/wix-headless-replatform/scripts/extract-seo.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +0 -63
- package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +0 -126
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +0 -180
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +0 -98
- package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +0 -103
- package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +0 -176
- package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +0 -261
- package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +0 -342
- package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +0 -140
- package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +0 -22
- package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +0 -143
- package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +0 -288
- package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +0 -266
- package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +0 -111
- package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +0 -570
- package/skills/wix-headless-replatform/scripts/lib/common.mjs +0 -329
- package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +0 -121
- package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +0 -282
- package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +0 -61
- package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +0 -374
- package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +0 -243
- package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +0 -1139
- package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +0 -326
- package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +0 -184
- package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +0 -396
- package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +0 -168
- package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +0 -10
- package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +0 -194
- package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +0 -348
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +0 -141
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +0 -43
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +0 -18
- package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +0 -64
- package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +0 -31
- package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +0 -358
- package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +0 -25
- package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +0 -39
- package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +0 -107
- package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +0 -96
- package/skills/wix-headless-replatform/scripts/site-clone.mjs +0 -658
- package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +0 -29
- package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +0 -669
- package/skills/wix-headless-replatform/scripts/visual-qa.mjs +0 -370
- package/skills/wix-import/SKILL.md +0 -90
- package/skills/wix-replatform/.publish-manifest.json +0 -8
- package/skills/wix-replatform/CLI.md +0 -162
- package/skills/wix-replatform/README.md +0 -52
- package/skills/wix-replatform/SKILL.md +0 -238
- package/skills/wix-replatform/console/account.css +0 -1
- package/skills/wix-replatform/console/app.css +0 -1
- package/skills/wix-replatform/console/app.js +0 -117
- package/skills/wix-replatform/console/index.html +0 -4
- package/skills/wix-replatform/console/json.css +0 -11
- package/skills/wix-replatform/lib/agent-adapters/index.js +0 -71
- package/skills/wix-replatform/lib/app-page-routing.js +0 -75
- package/skills/wix-replatform/lib/artifact-freshness.js +0 -225
- package/skills/wix-replatform/lib/blocked-data-requests.js +0 -427
- package/skills/wix-replatform/lib/census-reconciliation.js +0 -426
- package/skills/wix-replatform/lib/completion-report.js +0 -1580
- package/skills/wix-replatform/lib/config-env.js +0 -133
- package/skills/wix-replatform/lib/confirmed-pictures.js +0 -212
- package/skills/wix-replatform/lib/dependency-readiness.js +0 -423
- package/skills/wix-replatform/lib/dependency-recovery.js +0 -21
- package/skills/wix-replatform/lib/destination-choice.js +0 -163
- package/skills/wix-replatform/lib/destination-handoff.js +0 -62
- package/skills/wix-replatform/lib/destination-http.js +0 -81
- package/skills/wix-replatform/lib/destination-route.js +0 -98
- package/skills/wix-replatform/lib/destination.js +0 -919
- package/skills/wix-replatform/lib/discovered-census.js +0 -231
- package/skills/wix-replatform/lib/discovered-set-status.js +0 -255
- package/skills/wix-replatform/lib/document-url-guard.js +0 -203
- package/skills/wix-replatform/lib/entity-qa-attestation.js +0 -339
- package/skills/wix-replatform/lib/entity-verification.js +0 -18
- package/skills/wix-replatform/lib/execution-capability.js +0 -120
- package/skills/wix-replatform/lib/execution-log.js +0 -170
- package/skills/wix-replatform/lib/execution-manifest.js +0 -203
- package/skills/wix-replatform/lib/execution-state.js +0 -195
- package/skills/wix-replatform/lib/expectations-ledger.js +0 -96
- package/skills/wix-replatform/lib/generated-plugin-handoff.js +0 -140
- package/skills/wix-replatform/lib/import-readiness-contract.js +0 -23
- package/skills/wix-replatform/lib/import-recovery.js +0 -1107
- package/skills/wix-replatform/lib/imported-redirect-targets.js +0 -608
- package/skills/wix-replatform/lib/internal-link-reconciliation.js +0 -166
- package/skills/wix-replatform/lib/link-audit.js +0 -173
- package/skills/wix-replatform/lib/link-census.js +0 -194
- package/skills/wix-replatform/lib/link-plan.js +0 -148
- package/skills/wix-replatform/lib/link-verification.js +0 -274
- package/skills/wix-replatform/lib/link-write-journal.js +0 -42
- package/skills/wix-replatform/lib/local-state.js +0 -1481
- package/skills/wix-replatform/lib/member-completion.js +0 -658
- package/skills/wix-replatform/lib/member-crosswalk.js +0 -69
- package/skills/wix-replatform/lib/member-outcome-registry.js +0 -265
- package/skills/wix-replatform/lib/migration-completion.js +0 -311
- package/skills/wix-replatform/lib/operator-identity.js +0 -47
- package/skills/wix-replatform/lib/orchestration-decisions.js +0 -248
- package/skills/wix-replatform/lib/orchestration-preflight.js +0 -525
- package/skills/wix-replatform/lib/orchestration-router.js +0 -698
- package/skills/wix-replatform/lib/orchestration-state.js +0 -631
- package/skills/wix-replatform/lib/order-reference-readiness.js +0 -30
- package/skills/wix-replatform/lib/payments-outcome-registry.js +0 -200
- package/skills/wix-replatform/lib/plugin-cms-fallback.js +0 -618
- package/skills/wix-replatform/lib/preservation-approval-stamp.js +0 -54
- package/skills/wix-replatform/lib/product-media-deferral.js +0 -96
- package/skills/wix-replatform/lib/progress-log.js +0 -240
- package/skills/wix-replatform/lib/progress-log.sh +0 -140
- package/skills/wix-replatform/lib/read-back-approval.js +0 -184
- package/skills/wix-replatform/lib/read-back-comparison.js +0 -136
- package/skills/wix-replatform/lib/read-back-contract.js +0 -243
- package/skills/wix-replatform/lib/read-back-extract.js +0 -118
- package/skills/wix-replatform/lib/read-back-gate.js +0 -734
- package/skills/wix-replatform/lib/read-back-reads.js +0 -94
- package/skills/wix-replatform/lib/read-back-state.js +0 -107
- package/skills/wix-replatform/lib/read-back-summary.js +0 -81
- package/skills/wix-replatform/lib/rerun-conflicts.js +0 -334
- package/skills/wix-replatform/lib/run-controller.js +0 -401
- package/skills/wix-replatform/lib/seo-outcome-registry.js +0 -45
- package/skills/wix-replatform/lib/setup-verification.js +0 -148
- package/skills/wix-replatform/lib/source-access.js +0 -231
- package/skills/wix-replatform/lib/source-coverage.js +0 -1130
- package/skills/wix-replatform/lib/source-secrets.js +0 -277
- package/skills/wix-replatform/lib/structured-link-patch.js +0 -59
- package/skills/wix-replatform/lib/task-state.js +0 -110
- package/skills/wix-replatform/lib/url-preservation-report.js +0 -319
- package/skills/wix-replatform/lib/url-preservation-state.js +0 -739
- package/skills/wix-replatform/lib/url-redirect-plan.js +0 -728
- package/skills/wix-replatform/lib/url-verification.js +0 -315
- package/skills/wix-replatform/lib/user-action-effects.js +0 -42
- package/skills/wix-replatform/lib/user-actions.js +0 -264
- package/skills/wix-replatform/lib/website-handoff.js +0 -1220
- package/skills/wix-replatform/lib/wix-client-callers.js +0 -54
- package/skills/wix-replatform/lib/wix-dashboard-url.js +0 -35
- package/skills/wix-replatform/lib/write-verification-state.js +0 -92
- package/skills/wix-replatform/lib/write-verification.js +0 -274
- package/skills/wix-replatform/resources/rp-destination/SKILL.md +0 -137
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +0 -357
- package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +0 -47
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +0 -1369
- package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +0 -70
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +0 -482
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +0 -442
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/mint-token.sh +0 -64
- package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +0 -112
- package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +0 -143
- package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +0 -244
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +0 -3158
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +0 -947
- package/skills/wix-replatform/resources/rp-mapper/lib/mapping-resolve.js +0 -217
- package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +0 -303
- package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +0 -88
- package/skills/wix-replatform/resources/rp-mapper/scripts/resolve-mapping.js +0 -148
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +0 -378
- package/skills/wix-replatform/resources/rp-preflight/SKILL.md +0 -40
- package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +0 -55
- package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +0 -60
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +0 -89
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +0 -36
- package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +0 -123
- package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +0 -124
- package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +0 -522
- package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +0 -56
- package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +0 -91
- package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +0 -255
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +0 -253
- package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +0 -44
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +0 -481
- package/skills/wix-replatform/resources/rp-source-csv/lib/canonical-record.js +0 -136
- 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 +0 -310
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-layout.js +0 -1081
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-parse.js +0 -618
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +0 -969
- package/skills/wix-replatform/resources/rp-source-csv/source-schema.example.json +0 -196
- package/skills/wix-replatform/resources/rp-source-csv/vendors/bigcommerce.json +0 -66
- package/skills/wix-replatform/resources/rp-source-csv/vendors/magento.json +0 -60
- package/skills/wix-replatform/resources/rp-source-csv/vendors/shopify.json +0 -95
- package/skills/wix-replatform/resources/rp-source-csv/vendors/woocommerce.json +0 -82
- package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +0 -66
- package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +0 -153
- package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +0 -394
- package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +0 -200
- package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +0 -34
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +0 -44
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +0 -1470
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +0 -446
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +0 -474
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +0 -879
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +0 -426
- package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +0 -24
- package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +0 -18
- package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +0 -40
- package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +0 -76
- package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +0 -51
- package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +0 -35
- package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +0 -20
- package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +0 -18
- package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +0 -31
- package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +0 -21
- package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +0 -21
- package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +0 -30
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +0 -150
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +0 -36
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +0 -48
- package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +0 -20
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +0 -6
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +0 -8
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +0 -12
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +0 -6
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +0 -73
- package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +0 -13
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +0 -693
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +0 -283
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +0 -191
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +0 -115
- package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +0 -201
- package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +0 -146
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +0 -970
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +0 -73
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +0 -115
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +0 -91
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +0 -440
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +0 -125
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +0 -252
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +0 -183
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +0 -333
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +0 -426
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +0 -400
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +0 -633
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +0 -1127
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +0 -194
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +0 -100
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +0 -157
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +0 -234
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +0 -101
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +0 -755
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +0 -1074
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +0 -149
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +0 -25
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +0 -444
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +0 -186
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +0 -1422
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +0 -343
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +0 -680
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +0 -272
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +0 -373
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +0 -101
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +0 -81
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +0 -128
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +0 -18
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +0 -104
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +0 -44
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +0 -49
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +0 -94
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +0 -863
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +0 -52
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +0 -161
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +0 -180
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +0 -286
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +0 -79
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +0 -120
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +0 -128
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +0 -88
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +0 -80
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +0 -46
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +0 -55
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +0 -99
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +0 -55
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +0 -160
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +0 -81
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +0 -60
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +0 -74
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +0 -75
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +0 -60
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +0 -44
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +0 -57
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +0 -141
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +0 -54
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +0 -158
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +0 -97
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +0 -86
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +0 -90
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +0 -51
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +0 -103
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +0 -2409
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +0 -273
- package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +0 -11
- package/skills/wix-replatform/resources/rp-source-wordpress/source-schema.example.json +0 -71
- package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +0 -13
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +0 -1046
- package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +0 -36
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +0 -57
- package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +0 -322
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +0 -70
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +0 -29
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +0 -83
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +0 -95
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +0 -66
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +0 -332
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +0 -181
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +0 -130
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +0 -180
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +0 -161
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +0 -25
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +0 -67
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +0 -204
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +0 -27
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +0 -275
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +0 -105
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +0 -77
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +0 -297
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +0 -44
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +0 -171
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +0 -182
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +0 -129
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +0 -192
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +0 -123
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +0 -85
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +0 -112
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +0 -191
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +0 -164
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +0 -462
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +0 -122
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +0 -98
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +0 -86
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +0 -128
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +0 -38
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +0 -107
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +0 -89
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +0 -118
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +0 -93
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +0 -86
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +0 -56
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +0 -121
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +0 -134
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +0 -50
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +0 -87
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +0 -130
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +0 -1418
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +0 -24
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +0 -75
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +0 -23
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +0 -82
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +0 -77
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +0 -205
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +0 -41
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +0 -46
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +0 -137
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +0 -133
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +0 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +0 -36
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +0 -71
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +0 -67
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +0 -72
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +0 -74
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +0 -69
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +0 -61
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +0 -109
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +0 -148
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +0 -91
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +0 -79
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +0 -32
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +0 -49
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +0 -103
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +0 -203
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +0 -42
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +0 -81
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +0 -241
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +0 -118
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +0 -111
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +0 -79
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +0 -221
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +0 -84
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +0 -178
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +0 -87
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +0 -106
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +0 -94
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +0 -113
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +0 -65
- package/skills/wix-replatform/resources/rp-target-wix/lib/audit-summary.js +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +0 -165
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +0 -60
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +0 -201
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +0 -306
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +0 -229
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +0 -55
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +0 -715
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +0 -567
- package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +0 -73
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +0 -194
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +0 -133
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +0 -150
- package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +0 -491
- package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +0 -104
- package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +0 -673
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +0 -835
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +0 -119
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +0 -566
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +0 -249
- package/skills/wix-replatform/resources/rp-target-wix/lib/ndjson.js +0 -260
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +0 -63
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +0 -187
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +0 -64
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +0 -1027
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +0 -90
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +0 -420
- package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +0 -177
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +0 -151
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +0 -723
- package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +0 -353
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +0 -1437
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +0 -354
- package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +0 -134
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +0 -221
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +0 -248
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +0 -321
- package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +0 -231
- package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +0 -28
- package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +0 -14
- package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +0 -34
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +0 -388
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +0 -255
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +0 -6041
- package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +0 -3
- package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +0 -150
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +0 -69
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge.js +0 -100
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +0 -112
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +0 -484
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +0 -318
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +0 -2831
- package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +0 -318
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +0 -83
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +0 -243
- package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +0 -94
- package/skills/wix-replatform/scripts/artifact-freshness.js +0 -76
- package/skills/wix-replatform/scripts/census-reconciliation.js +0 -25
- package/skills/wix-replatform/scripts/cms-fallback.js +0 -89
- package/skills/wix-replatform/scripts/discovered-census.js +0 -26
- package/skills/wix-replatform/scripts/discovered-set-status.js +0 -33
- package/skills/wix-replatform/scripts/entity-qa-attestation.js +0 -130
- package/skills/wix-replatform/scripts/execution-health-check.js +0 -415
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +0 -43
- package/skills/wix-replatform/scripts/execution-state-prepare.js +0 -128
- package/skills/wix-replatform/scripts/expectations-ledger.js +0 -44
- package/skills/wix-replatform/scripts/import-contract-verify.js +0 -183
- package/skills/wix-replatform/scripts/internal-link-audit.js +0 -90
- package/skills/wix-replatform/scripts/item-seo-tags-verify.js +0 -205
- package/skills/wix-replatform/scripts/migration-completion.js +0 -76
- package/skills/wix-replatform/scripts/orchestration-preflight.js +0 -67
- package/skills/wix-replatform/scripts/orchestration-route.js +0 -77
- package/skills/wix-replatform/scripts/orchestration-state.js +0 -381
- package/skills/wix-replatform/scripts/read-back-gate.js +0 -175
- package/skills/wix-replatform/scripts/replatform-console.js +0 -146
- package/skills/wix-replatform/scripts/replatform.js +0 -436
- package/skills/wix-replatform/scripts/source-secrets.js +0 -77
- package/skills/wix-replatform/scripts/url-redirects.js +0 -286
- package/skills/wix-replatform/scripts/user-action.js +0 -58
- package/skills/wix-replatform/scripts/website-handoff-generate.js +0 -64
- package/skills/wix-replatform/scripts/wix-dashboard-url.js +0 -54
- package/skills/wix-replatform/scripts/wix-destination.js +0 -143
- package/skills/wix-replatform/scripts/wix-headless-scaffold.js +0 -762
- package/skills/wix-vibe-headless/SKILL.md +0 -183
- package/skills/wix-vibe-headless/install/deploy.cjs +0 -221
- package/skills/wix-vibe-headless/install/pin-agents-md.cjs +0 -35
- package/skills/wix-vibe-headless/platforms/README.md +0 -26
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed-with-install.md +0 -127
- package/skills/wix-vibe-headless/platforms/base44-ecom-light-seed.md +0 -121
- package/skills/wix-vibe-headless/platforms/base44-ecom-light.md +0 -87
- package/skills/wix-vibe-headless/platforms/base44.md +0 -148
- package/skills/wix-vibe-headless/platforms/generic.md +0 -132
- package/skills/wix-vibe-headless/references/_shared/nav/nav.tanstack.js +0 -30
- package/skills/wix-vibe-headless/references/_shared/routing.md +0 -86
- package/skills/wix-vibe-headless/references/blog/INSTRUCTIONS.md +0 -270
- package/skills/wix-vibe-headless/references/blog/app/components/PostCard.jsx +0 -43
- package/skills/wix-vibe-headless/references/blog/app/components/PostChips.jsx +0 -25
- package/skills/wix-vibe-headless/references/blog/app/components/PostGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/blog/app/context/TaxonomyContext.jsx +0 -35
- package/skills/wix-vibe-headless/references/blog/app/hooks/usePostDetail.js +0 -38
- package/skills/wix-vibe-headless/references/blog/app/pages/Blog.jsx +0 -40
- package/skills/wix-vibe-headless/references/blog/app/pages/CategoryPage.jsx +0 -54
- package/skills/wix-vibe-headless/references/blog/app/pages/PostDetail.jsx +0 -65
- package/skills/wix-vibe-headless/references/blog/app/pages/TagPage.jsx +0 -50
- package/skills/wix-vibe-headless/references/blog/app/rest/wix-blog.js +0 -217
- package/skills/wix-vibe-headless/references/blog/seed/SEED.md +0 -99
- package/skills/wix-vibe-headless/references/blog/seed/seed-blog.cjs +0 -269
- package/skills/wix-vibe-headless/references/bookings/INSTRUCTIONS.md +0 -342
- package/skills/wix-vibe-headless/references/bookings/app/components/BookingForm.jsx +0 -65
- package/skills/wix-vibe-headless/references/bookings/app/components/RentalDurationPicker.jsx +0 -67
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceCard.jsx +0 -47
- package/skills/wix-vibe-headless/references/bookings/app/components/ServiceGrid.jsx +0 -13
- package/skills/wix-vibe-headless/references/bookings/app/components/SlotPicker.jsx +0 -126
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useRentalDuration.js +0 -128
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServiceDetail.js +0 -110
- package/skills/wix-vibe-headless/references/bookings/app/hooks/useServices.js +0 -58
- package/skills/wix-vibe-headless/references/bookings/app/lib/serviceFacts.js +0 -95
- package/skills/wix-vibe-headless/references/bookings/app/pages/ServiceDetail.jsx +0 -94
- package/skills/wix-vibe-headless/references/bookings/app/pages/Services.jsx +0 -89
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-checkout.js +0 -148
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-rentals.js +0 -250
- package/skills/wix-vibe-headless/references/bookings/app/rest/wix-bookings-services.js +0 -300
- package/skills/wix-vibe-headless/references/bookings/seed/SEED.md +0 -154
- package/skills/wix-vibe-headless/references/bookings/seed/seed-bookings.cjs +0 -333
- package/skills/wix-vibe-headless/references/bookings/seed/seed-rentals.cjs +0 -267
- package/skills/wix-vibe-headless/references/cms/INSTRUCTIONS.md +0 -178
- package/skills/wix-vibe-headless/references/cms/app/collection.config.js +0 -31
- package/skills/wix-vibe-headless/references/cms/app/lib/wixImage.js +0 -18
- package/skills/wix-vibe-headless/references/cms/app/rest/wix-cms.js +0 -231
- package/skills/wix-vibe-headless/references/cms/seed/SEED.md +0 -145
- package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +0 -88
- package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +0 -112
- package/skills/wix-vibe-headless/references/donations/seed/SEED.md +0 -11
- package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +0 -258
- package/skills/wix-vibe-headless/references/events/INSTRUCTIONS.md +0 -267
- package/skills/wix-vibe-headless/references/events/app/components/CategoryFilter.jsx +0 -23
- package/skills/wix-vibe-headless/references/events/app/components/EventCard.jsx +0 -43
- package/skills/wix-vibe-headless/references/events/app/components/EventGrid.jsx +0 -13
- package/skills/wix-vibe-headless/references/events/app/components/EventRegistration.jsx +0 -29
- package/skills/wix-vibe-headless/references/events/app/components/RsvpForm.jsx +0 -57
- package/skills/wix-vibe-headless/references/events/app/components/TicketPicker.jsx +0 -78
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventDetail.js +0 -27
- package/skills/wix-vibe-headless/references/events/app/hooks/useEventsList.js +0 -54
- package/skills/wix-vibe-headless/references/events/app/hooks/useRsvpForm.js +0 -40
- package/skills/wix-vibe-headless/references/events/app/hooks/useTicketing.js +0 -81
- package/skills/wix-vibe-headless/references/events/app/pages/EventDetail.jsx +0 -48
- package/skills/wix-vibe-headless/references/events/app/pages/Events.jsx +0 -36
- package/skills/wix-vibe-headless/references/events/app/rest/wix-events-browse.js +0 -136
- package/skills/wix-vibe-headless/references/events/app/rest/wix-events-registration.js +0 -187
- package/skills/wix-vibe-headless/references/events/seed/SEED.md +0 -103
- package/skills/wix-vibe-headless/references/events/seed/seed-events.cjs +0 -251
- package/skills/wix-vibe-headless/references/forms/INSTRUCTIONS.md +0 -487
- package/skills/wix-vibe-headless/references/forms/app/hooks/useWixForm.js +0 -425
- package/skills/wix-vibe-headless/references/forms/app/lib/wix-form-schema-utils.js +0 -187
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms-submissions.js +0 -238
- package/skills/wix-vibe-headless/references/forms/app/rest/wix-forms.js +0 -108
- package/skills/wix-vibe-headless/references/forms/seed/SEED.md +0 -1836
- package/skills/wix-vibe-headless/references/members/INSTRUCTIONS.md +0 -328
- package/skills/wix-vibe-headless/references/members/app/components/LoginForm.jsx +0 -101
- package/skills/wix-vibe-headless/references/members/app/components/MemberMenu.jsx +0 -33
- package/skills/wix-vibe-headless/references/members/app/components/RequireAuth.jsx +0 -21
- package/skills/wix-vibe-headless/references/members/app/components/SocialButtons.jsx +0 -29
- package/skills/wix-vibe-headless/references/members/app/context/MemberContext.jsx +0 -54
- package/skills/wix-vibe-headless/references/members/app/hooks/useLoginForm.js +0 -77
- package/skills/wix-vibe-headless/references/members/app/pages/Account.jsx +0 -36
- package/skills/wix-vibe-headless/references/members/app/pages/Callback.jsx +0 -32
- package/skills/wix-vibe-headless/references/members/app/pages/Login.jsx +0 -35
- package/skills/wix-vibe-headless/references/members/app/rest/wix-members-auth.js +0 -390
- package/skills/wix-vibe-headless/references/members/install/Register.jsx +0 -22
- package/skills/wix-vibe-headless/references/members/seed/SEED.md +0 -21
- package/skills/wix-vibe-headless/references/portfolio/INSTRUCTIONS.md +0 -270
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionCard.jsx +0 -31
- package/skills/wix-vibe-headless/references/portfolio/app/components/CollectionGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectCard.jsx +0 -39
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectGrid.jsx +0 -15
- package/skills/wix-vibe-headless/references/portfolio/app/components/ProjectMedia.jsx +0 -29
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useCollectionProjects.js +0 -35
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/usePortfolioGallery.js +0 -27
- package/skills/wix-vibe-headless/references/portfolio/app/hooks/useProjectDetail.js +0 -25
- package/skills/wix-vibe-headless/references/portfolio/app/pages/CollectionPage.jsx +0 -39
- package/skills/wix-vibe-headless/references/portfolio/app/pages/Portfolio.jsx +0 -27
- package/skills/wix-vibe-headless/references/portfolio/app/pages/ProjectDetail.jsx +0 -60
- package/skills/wix-vibe-headless/references/portfolio/app/rest/wix-portfolio.js +0 -223
- package/skills/wix-vibe-headless/references/portfolio/seed/SEED.md +0 -90
- package/skills/wix-vibe-headless/references/portfolio/seed/seed-portfolio.cjs +0 -236
- package/skills/wix-vibe-headless/references/pricing-plans/INSTRUCTIONS.md +0 -280
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/OrderCard.jsx +0 -35
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanCard.jsx +0 -48
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanGrid.jsx +0 -16
- package/skills/wix-vibe-headless/references/pricing-plans/app/components/PlanPrice.jsx +0 -35
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/useMyPlans.js +0 -25
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlanDetail.js +0 -28
- package/skills/wix-vibe-headless/references/pricing-plans/app/hooks/usePlans.js +0 -30
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/MyPlans.jsx +0 -30
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/PlanDetail.jsx +0 -53
- package/skills/wix-vibe-headless/references/pricing-plans/app/pages/Plans.jsx +0 -28
- package/skills/wix-vibe-headless/references/pricing-plans/app/rest/wix-pricing-plans.js +0 -157
- package/skills/wix-vibe-headless/references/pricing-plans/seed/SEED.md +0 -82
- package/skills/wix-vibe-headless/references/pricing-plans/seed/seed-pricing-plans.cjs +0 -251
- package/skills/wix-vibe-headless/references/rentals/INSTRUCTIONS.md +0 -13
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +0 -290
- package/skills/wix-vibe-headless/references/restaurants/app/components/ItemDialog.jsx +0 -81
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuItemCard.jsx +0 -71
- package/skills/wix-vibe-headless/references/restaurants/app/components/MenuList.jsx +0 -43
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartButton.jsx +0 -21
- package/skills/wix-vibe-headless/references/restaurants/app/components/OrderCartDrawer.jsx +0 -72
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +0 -66
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useItemOrder.js +0 -32
- package/skills/wix-vibe-headless/references/restaurants/app/hooks/useReservation.js +0 -73
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Menu.jsx +0 -28
- package/skills/wix-vibe-headless/references/restaurants/app/pages/Reservations.jsx +0 -102
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-menu.js +0 -224
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +0 -218
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-reservations.js +0 -107
- package/skills/wix-vibe-headless/references/restaurants/seed/SEED.md +0 -176
- package/skills/wix-vibe-headless/references/restaurants/seed/seed-restaurants.cjs +0 -452
- package/skills/wix-vibe-headless/references/shared/app/components/WixManageBanner.jsx +0 -56
- package/skills/wix-vibe-headless/references/shared/app/lib/nav.js +0 -9
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +0 -185
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-config.js +0 -8
- package/skills/wix-vibe-headless/references/storefront/INSTRUCTIONS.md +0 -471
- package/skills/wix-vibe-headless/references/storefront/app/components/CartButton.jsx +0 -20
- package/skills/wix-vibe-headless/references/storefront/app/components/CartDrawer.jsx +0 -167
- package/skills/wix-vibe-headless/references/storefront/app/context/CartContext.jsx +0 -83
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductCard.js +0 -104
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useProductDetail.js +0 -163
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useShop.js +0 -83
- package/skills/wix-vibe-headless/references/storefront/app/hooks/useVariantOptions.js +0 -76
- package/skills/wix-vibe-headless/references/storefront/app/lib/storeImage.js +0 -64
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-cart.js +0 -176
- package/skills/wix-vibe-headless/references/storefront/app/rest/wix-store-catalog.js +0 -218
- package/skills/wix-vibe-headless/references/storefront/seed/SEED.md +0 -174
- package/skills/wix-vibe-headless/references/storefront/seed/seed-store.cjs +0 -546
|
@@ -1,673 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const crypto = require('node:crypto');
|
|
4
|
-
|
|
5
|
-
// The Data Extension Schema (DES) path for the three objects the supported-target matrix
|
|
6
|
-
// admits -- eCommerce ORDER (shipped first), stores PRODUCT, and CRM CONTACT on the default
|
|
7
|
-
// Contacts V5 surface -- and nothing else. Checkout, Bookings, Booking Services and every nested
|
|
8
|
-
// order subrecord are refused before any network call: add one only when a mapping needs it and
|
|
9
|
-
// it has been verified live the way the order path was. The legacy Contacts V4 path is a
|
|
10
|
-
// different API (CRM Extended Fields) and lives in contact-extended-fields.js; the two surfaces
|
|
11
|
-
// are never mixed.
|
|
12
|
-
//
|
|
13
|
-
// Contacts caveat: the DES supported-objects table still omits contacts, so the V5 contact target
|
|
14
|
-
// is marked `requiresLiveVerification`. The transport fails closed with CONTACTS_V5_DES_UNVERIFIED
|
|
15
|
-
// when the gating List call is refused, and never falls back to V4.
|
|
16
|
-
//
|
|
17
|
-
// WHY A MERGE HELPER EXISTS AT ALL. Re-checked against the live schema 2026-09-03: Update Data
|
|
18
|
-
// Extension Schema is a PUT that, in the API's own words, "updates a user-defined data extension
|
|
19
|
-
// schema, OVERRIDING the existing data". `jsonSchema` is required and replaces what was there. So
|
|
20
|
-
// a setup step that PUTs only the fields the migration needs DELETES every field the merchant
|
|
21
|
-
// created. Merging is not a refinement of this contract, it is the contract -- and the failure it
|
|
22
|
-
// prevents is silent, permanent and on the merchant's own data.
|
|
23
|
-
//
|
|
24
|
-
// The rest of the shape, same re-check:
|
|
25
|
-
// * List is GET /schema-service/v1/schemas?fqdn=&namespaces=&fields=ARCHIVED, and it returns
|
|
26
|
-
// GLOBAL and user-defined schemas together, so the `_user_fields` one must be selected by
|
|
27
|
-
// namespace rather than by position.
|
|
28
|
-
// * Archived fields are hidden unless `fields=ARCHIVED` is requested. A key that collides with
|
|
29
|
-
// an archived field cannot be reused, so the read must ask for them or the collision check is
|
|
30
|
-
// blind.
|
|
31
|
-
// * Update requires `id` and the CURRENT `revision`; id, fqdn and namespace are immutable.
|
|
32
|
-
// * The namespace carries a byte budget: `maxLimitBytes` (10,000 observed) against
|
|
33
|
-
// `currentSizeBytes`, shared with whatever the merchant already stores there.
|
|
34
|
-
// * The eCommerce order object does NOT support filtering (the supported-objects table says so
|
|
35
|
-
// for `wix.ecom.*.order`), so `x-wix-filterable` is refused for it rather than passed through.
|
|
36
|
-
|
|
37
|
-
const SCHEMA_SERVICE = 'https://www.wixapis.com/schema-service/v1/schemas';
|
|
38
|
-
|
|
39
|
-
const USER_FIELDS_NAMESPACE = '_user_fields';
|
|
40
|
-
|
|
41
|
-
// The supported target matrix, no more. `supportsFiltering` follows the DES
|
|
42
|
-
// supported-objects table (Products: yes; Orders: no). Contacts are absent from that table, so
|
|
43
|
-
// filtering is treated as unsupported rather than assumed.
|
|
44
|
-
const CONTACTS_FQDN = 'wix.contacts.*.contact';
|
|
45
|
-
const SUPPORTED_TARGETS = {
|
|
46
|
-
'wix.ecom.*.order': { targetRef: 'ecom/order', supportsFiltering: false },
|
|
47
|
-
'wix.stores.catalog.*.product': { targetRef: 'stores/product', supportsFiltering: true },
|
|
48
|
-
[CONTACTS_FQDN]: { targetRef: 'crm/contact', supportsFiltering: false, contactWriteSurface: 'contacts-v5', requiresLiveVerification: true },
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
// Known DES objects that are deliberately OUT of this phase. Named so the refusal says why.
|
|
52
|
-
const OUT_OF_SCOPE_TARGETS = new Set([
|
|
53
|
-
'wix.ecom.*.checkout',
|
|
54
|
-
'wix.bookings.*.booking',
|
|
55
|
-
'wix.bookings.services.*.service',
|
|
56
|
-
]);
|
|
57
|
-
|
|
58
|
-
// Deliberately just `string`. The full Wix JSON Schema type and format table has not been
|
|
59
|
-
// re-verified for this slice, and shipping a guessed type list is how an unsupported type reaches
|
|
60
|
-
// a live setup call. Widening this set means reading the JSON Schema article first.
|
|
61
|
-
const VERIFIED_FIELD_TYPES = new Set(['string']);
|
|
62
|
-
|
|
63
|
-
// Same reasoning as the type set: the format table has not been re-verified, so nothing is
|
|
64
|
-
// accepted until it is. The two order invoice fields are plain strings and need no format.
|
|
65
|
-
const VERIFIED_STRING_FORMATS = new Set();
|
|
66
|
-
|
|
67
|
-
const PERMISSION_IDENTITIES = new Set(['apps', 'owning-app', 'users', 'users-of-users']);
|
|
68
|
-
|
|
69
|
-
const PERMISSION_PRESETS = {
|
|
70
|
-
// A migration-owned field is not visitor-facing: `users-of-users` is site visitors, and this
|
|
71
|
-
// data exists for the merchant and the migration, so it is left out.
|
|
72
|
-
'migration-internal': { read: ['apps', 'users'], write: ['users'] },
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
function fail(errors, code, detail) {
|
|
76
|
-
errors.push({ code, detail });
|
|
77
|
-
return errors;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function validateExtendedFieldIntent(field, { fqdn } = {}) {
|
|
81
|
-
const errors = [];
|
|
82
|
-
if (!field || typeof field !== 'object') {
|
|
83
|
-
return { valid: false, errors: fail([], 'field-not-an-object', 'a field intent must be an object') };
|
|
84
|
-
}
|
|
85
|
-
if (!field.key || typeof field.key !== 'string') {
|
|
86
|
-
fail(errors, 'missing-field-key', 'a field intent needs a key');
|
|
87
|
-
} else if (!/^[A-Za-z][A-Za-z0-9_]*$/.test(field.key)) {
|
|
88
|
-
fail(errors, 'invalid-field-key', `"${field.key}" is not a usable JSON Schema property name`);
|
|
89
|
-
}
|
|
90
|
-
if (!field.fieldType) {
|
|
91
|
-
fail(errors, 'missing-field-type', `field "${field.key}" has no fieldType`);
|
|
92
|
-
} else if (!VERIFIED_FIELD_TYPES.has(field.fieldType)) {
|
|
93
|
-
fail(errors, 'unverified-field-type', `fieldType "${field.fieldType}" is not verified for this slice; only ${[...VERIFIED_FIELD_TYPES].join(', ')} is`);
|
|
94
|
-
}
|
|
95
|
-
if (field.format) {
|
|
96
|
-
if (field.fieldType !== 'string') {
|
|
97
|
-
fail(errors, 'format-type-mismatch', `format "${field.format}" cannot apply to fieldType "${field.fieldType}"`);
|
|
98
|
-
} else if (!VERIFIED_STRING_FORMATS.has(field.format)) {
|
|
99
|
-
// Accepting any string as a format let an unsupported one reach a live setup call.
|
|
100
|
-
fail(errors, 'unverified-field-format', `format "${field.format}" is not verified for this slice`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
if (field.filterable === true) {
|
|
104
|
-
const target = SUPPORTED_TARGETS[fqdn];
|
|
105
|
-
if (!target || target.supportsFiltering === false) {
|
|
106
|
-
fail(errors, 'filterable-unsupported-target', `${fqdn || 'this target'} does not support filtering, so x-wix-filterable cannot be requested`);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
// LIVE-VERIFIED 2026-09-04: the API rejects a string field with no `maxLength` --
|
|
110
|
-
// `MANDATORY_FIELD_MISSING: <key>.maxLength`. It is required, not optional, so a field intent
|
|
111
|
-
// without one cannot be provisioned at all.
|
|
112
|
-
if (field.fieldType === 'string' && field.maxLength === undefined) {
|
|
113
|
-
fail(errors, 'missing-max-length', `field "${field.key}" needs a maxLength; the API rejects a string field without one`);
|
|
114
|
-
}
|
|
115
|
-
if (field.maxLength !== undefined && (!Number.isInteger(field.maxLength) || field.maxLength < 1)) {
|
|
116
|
-
fail(errors, 'invalid-max-length', `field "${field.key}" has a non-positive maxLength`);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const permissions = resolvePermissions(field);
|
|
120
|
-
if (!permissions) {
|
|
121
|
-
fail(errors, 'unknown-permissions-preset', `field "${field.key}" names no known permissionsPreset and supplies no explicit permissions`);
|
|
122
|
-
} else {
|
|
123
|
-
for (const identity of [...(permissions.read || []), ...(permissions.write || [])]) {
|
|
124
|
-
if (!PERMISSION_IDENTITIES.has(identity)) {
|
|
125
|
-
fail(errors, 'unknown-permission-identity', `"${identity}" is not a permission identity`);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
// Reading as a visitor without reading as a user is incoherent, and the asymmetry is how a
|
|
129
|
-
// field ends up visible on a storefront but invisible to the merchant who owns it.
|
|
130
|
-
if ((permissions.read || []).includes('users-of-users') && !(permissions.read || []).includes('users')) {
|
|
131
|
-
fail(errors, 'visitor-read-without-user-read', `field "${field.key}" grants users-of-users read without users read`);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
return { valid: errors.length === 0, errors };
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
function resolvePermissions(field) {
|
|
139
|
-
if (field.permissions) return field.permissions;
|
|
140
|
-
if (field.permissionsPreset) return PERMISSION_PRESETS[field.permissionsPreset] || null;
|
|
141
|
-
return null;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
function buildExtendedFieldSchemaProperty(field) {
|
|
145
|
-
const property = { type: field.fieldType };
|
|
146
|
-
if (field.maxLength !== undefined) property.maxLength = field.maxLength;
|
|
147
|
-
if (field.format) property.format = field.format;
|
|
148
|
-
if (field.description) property.description = field.description;
|
|
149
|
-
const permissions = resolvePermissions(field);
|
|
150
|
-
if (permissions) property['x-wix-permissions'] = { read: [...permissions.read], write: [...permissions.write] };
|
|
151
|
-
if (field.pii === true) property['x-wix-pii'] = true;
|
|
152
|
-
if (field.filterable === true) property['x-wix-filterable'] = true;
|
|
153
|
-
// Business Manager lists these as toggleable order columns, so the KEY becomes the column
|
|
154
|
-
// heading unless something friendlier is supplied. `replatformSourceInvoiceFileId` is not a
|
|
155
|
-
// heading a merchant should have to read.
|
|
156
|
-
//
|
|
157
|
-
// LIVE-VERIFIED 2026-09-05: the display keyword is plain JSON Schema `title`/`description`.
|
|
158
|
-
// The `x-wix-display` object the docs' own vocabulary defines -- with `label`, `hint` and
|
|
159
|
-
// `placeholder` -- is REJECTED outright by the schema service:
|
|
160
|
-
// `UNKNOWN_KEYWORD_AT_THIS_LEVEL: <field>.x-wix-display.label`. Do not reinstate it from the
|
|
161
|
-
// documentation; it does not work on a user-defined schema.
|
|
162
|
-
if (field.displayName) property.title = field.displayName;
|
|
163
|
-
if (field.hint) property.description = field.hint;
|
|
164
|
-
return property;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
function buildDataExtensionSchema({ fields = [] } = {}) {
|
|
168
|
-
const properties = {};
|
|
169
|
-
for (const field of fields) properties[field.key] = buildExtendedFieldSchemaProperty(field);
|
|
170
|
-
return { type: 'object', additionalProperties: false, properties };
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
function validateDataExtensionSchemaRequirement(requirement) {
|
|
174
|
-
const errors = [];
|
|
175
|
-
if (!requirement || requirement.kind !== 'extendedFieldSchema') {
|
|
176
|
-
fail(errors, 'not-an-extended-field-requirement', 'requirement.kind must be "extendedFieldSchema"');
|
|
177
|
-
return { valid: false, errors };
|
|
178
|
-
}
|
|
179
|
-
if (requirement.schemaKind !== 'data-extension-schema') {
|
|
180
|
-
fail(errors, 'unsupported-schema-kind', `this helper implements data-extension-schema only, not "${requirement.schemaKind}"`);
|
|
181
|
-
}
|
|
182
|
-
const target = SUPPORTED_TARGETS[requirement.fqdn];
|
|
183
|
-
if (!target) {
|
|
184
|
-
const why = OUT_OF_SCOPE_TARGETS.has(requirement.fqdn)
|
|
185
|
-
? 'it is a known Data Extension Schema object but outside the supported target matrix'
|
|
186
|
-
: 'it is not a verified Data Extension Schema target';
|
|
187
|
-
fail(errors, 'unsupported-target-object', `${requirement.fqdn} is refused: ${why}`);
|
|
188
|
-
} else if (requirement.extensionPoint) {
|
|
189
|
-
// Nested subrecord fields need an extension point nobody has verified yet.
|
|
190
|
-
fail(errors, 'unsupported-target-object', `${requirement.fqdn} extension point "${requirement.extensionPoint}" is a nested subrecord, which this phase does not provision`);
|
|
191
|
-
}
|
|
192
|
-
if (requirement.targetRef && target && requirement.targetRef !== target.targetRef) {
|
|
193
|
-
fail(errors, 'target-ref-mismatch', `targetRef "${requirement.targetRef}" does not match ${requirement.fqdn} (${target.targetRef})`);
|
|
194
|
-
}
|
|
195
|
-
// Surfaces must not be mixed: a DES requirement is the V5 contact surface or no contact at all.
|
|
196
|
-
if (requirement.contactWriteSurface !== undefined) {
|
|
197
|
-
if (requirement.fqdn !== CONTACTS_FQDN) {
|
|
198
|
-
fail(errors, 'contact-surface-on-non-contact', `contactWriteSurface is only meaningful for ${CONTACTS_FQDN}`);
|
|
199
|
-
} else if (requirement.contactWriteSurface !== 'contacts-v5') {
|
|
200
|
-
fail(errors, 'contact-surface-mismatch', `a data-extension-schema contact requirement is the contacts-v5 surface; "${requirement.contactWriteSurface}" belongs to crm-contact-extended-field`);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
// A migration-owned field belongs in the site-owner namespace. An app namespace would need a
|
|
204
|
-
// declared app-defined schema dependency, and this slice creates no app.
|
|
205
|
-
if (requirement.namespace !== USER_FIELDS_NAMESPACE) {
|
|
206
|
-
fail(errors, 'namespace-not-user-fields', `migration-owned fields live in ${USER_FIELDS_NAMESPACE}, not "${requirement.namespace}"`);
|
|
207
|
-
}
|
|
208
|
-
if (!Array.isArray(requirement.fields) || requirement.fields.length === 0) {
|
|
209
|
-
fail(errors, 'no-fields-declared', 'a requirement with no fields provisions nothing');
|
|
210
|
-
} else {
|
|
211
|
-
for (const field of requirement.fields) {
|
|
212
|
-
const result = validateExtendedFieldIntent(field, { fqdn: requirement.fqdn });
|
|
213
|
-
for (const error of result.errors) errors.push(error);
|
|
214
|
-
const expectedWritePath = `extendedFields.namespaces.${requirement.namespace}.${field.key}`;
|
|
215
|
-
if (field.writePath && field.writePath !== expectedWritePath) {
|
|
216
|
-
fail(errors, 'write-path-mismatch', `field "${field.key}" declares writePath "${field.writePath}" but its value lands at "${expectedWritePath}"`);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
return { valid: errors.length === 0, errors };
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
function buildListDataExtensionSchemasRequest({ fqdn, namespace = USER_FIELDS_NAMESPACE, includeArchived = true } = {}) {
|
|
224
|
-
const params = new URLSearchParams();
|
|
225
|
-
params.set('fqdn', fqdn);
|
|
226
|
-
if (namespace) params.append('namespaces', namespace);
|
|
227
|
-
// Archived fields are hidden by default, and an archived key cannot be reused -- so the
|
|
228
|
-
// collision check is only meaningful when they are requested.
|
|
229
|
-
if (includeArchived) params.append('fields', 'ARCHIVED');
|
|
230
|
-
return { method: 'GET', url: `${SCHEMA_SERVICE}?${params.toString()}` };
|
|
231
|
-
}
|
|
232
|
-
|
|
233
|
-
// List returns global schemas alongside user-defined ones. Selecting by position would merge the
|
|
234
|
-
// migration's fields into somebody else's schema.
|
|
235
|
-
function selectUserFieldsSchema(response, { fqdn, namespace = USER_FIELDS_NAMESPACE } = {}) {
|
|
236
|
-
const schemas = (response && response.dataExtensionSchemas) || [];
|
|
237
|
-
return schemas.find((schema) => schema.fqdn === fqdn && schema.namespace === namespace) || null;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
function archivedKeys(jsonSchema) {
|
|
241
|
-
const properties = (jsonSchema && jsonSchema.properties) || {};
|
|
242
|
-
return Object.keys(properties).filter((key) => properties[key] && properties[key]['x-wix-archived'] === true);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
function detectDataExtensionSchemaBreakingChanges(existingJsonSchema, fields = []) {
|
|
246
|
-
const existing = (existingJsonSchema && existingJsonSchema.properties) || {};
|
|
247
|
-
const archived = new Set(archivedKeys(existingJsonSchema));
|
|
248
|
-
const changes = [];
|
|
249
|
-
|
|
250
|
-
for (const field of fields) {
|
|
251
|
-
if (archived.has(field.key)) {
|
|
252
|
-
changes.push({ code: 'archived-key-collision', key: field.key, detail: `"${field.key}" exists as an archived field and its key cannot be reused` });
|
|
253
|
-
continue;
|
|
254
|
-
}
|
|
255
|
-
const current = existing[field.key];
|
|
256
|
-
if (!current) continue;
|
|
257
|
-
|
|
258
|
-
if (current.type !== field.fieldType) {
|
|
259
|
-
changes.push({ code: 'field-type-change', key: field.key, detail: `"${field.key}" exists as ${current.type} and the requirement asks for ${field.fieldType}` });
|
|
260
|
-
}
|
|
261
|
-
if (field.pii === true && current['x-wix-pii'] !== true) {
|
|
262
|
-
changes.push({ code: 'pii-added-to-existing-field', key: field.key, detail: `"${field.key}" already exists without a PII classification, which cannot be added afterwards` });
|
|
263
|
-
}
|
|
264
|
-
if (typeof current.maxLength === 'number' && typeof field.maxLength === 'number' && field.maxLength < current.maxLength) {
|
|
265
|
-
changes.push({ code: 'validation-tightened', key: field.key, detail: `"${field.key}" would narrow maxLength from ${current.maxLength} to ${field.maxLength}, which can invalidate stored values` });
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
return { breaking: changes.length > 0, changes };
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// The merge. Every existing property survives untouched -- including archived ones and anything
|
|
272
|
-
// the merchant added -- and only absent keys are introduced.
|
|
273
|
-
function mergeDataExtensionSchema(existingJsonSchema, fields = []) {
|
|
274
|
-
const existing = (existingJsonSchema && existingJsonSchema.properties) || {};
|
|
275
|
-
const merged = { ...existing };
|
|
276
|
-
const added = [];
|
|
277
|
-
const unchanged = [];
|
|
278
|
-
const relabelled = [];
|
|
279
|
-
|
|
280
|
-
for (const field of fields) {
|
|
281
|
-
if (Object.prototype.hasOwnProperty.call(existing, field.key)) {
|
|
282
|
-
// The field is already there. Its TYPE and constraints stay exactly as stored -- changing
|
|
283
|
-
// those is a breaking change and is refused elsewhere -- but display metadata is
|
|
284
|
-
// presentation only, and a label added after the field was created must still reach it.
|
|
285
|
-
// Without this the merge could never improve a column heading it had already written.
|
|
286
|
-
const wanted = buildExtendedFieldSchemaProperty(field);
|
|
287
|
-
const current = existing[field.key];
|
|
288
|
-
const displayOf = (property) => JSON.stringify([property.title || null, property.description || null]);
|
|
289
|
-
if ((wanted.title || wanted.description) && displayOf(current) !== displayOf(wanted)) {
|
|
290
|
-
merged[field.key] = { ...current, ...(wanted.title ? { title: wanted.title } : {}), ...(wanted.description ? { description: wanted.description } : {}) };
|
|
291
|
-
relabelled.push(field.key);
|
|
292
|
-
} else {
|
|
293
|
-
unchanged.push(field.key);
|
|
294
|
-
}
|
|
295
|
-
continue;
|
|
296
|
-
}
|
|
297
|
-
merged[field.key] = buildExtendedFieldSchemaProperty(field);
|
|
298
|
-
added.push(field.key);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
const preserved = Object.keys(existing);
|
|
302
|
-
// Carry the WHOLE existing schema forward and touch only `properties`. Rebuilding it from
|
|
303
|
-
// `type` + `properties` dropped every other top-level keyword -- `required`, `$schema`, `$id`,
|
|
304
|
-
// `title` -- and forced `additionalProperties: false` over whatever was there. Since Update is
|
|
305
|
-
// a PUT that overrides stored data, that is the same clobber this merge exists to prevent, one
|
|
306
|
-
// level up from the fields.
|
|
307
|
-
const base = existingJsonSchema ? { ...existingJsonSchema } : {};
|
|
308
|
-
base.properties = merged;
|
|
309
|
-
if (base.type === undefined) base.type = 'object';
|
|
310
|
-
if (base.additionalProperties === undefined) base.additionalProperties = false;
|
|
311
|
-
return {
|
|
312
|
-
jsonSchema: base,
|
|
313
|
-
added,
|
|
314
|
-
unchanged,
|
|
315
|
-
relabelled,
|
|
316
|
-
preserved,
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
function buildCreateDataExtensionSchemaRequest({ fqdn, namespace = USER_FIELDS_NAMESPACE, jsonSchema }) {
|
|
321
|
-
return {
|
|
322
|
-
method: 'POST',
|
|
323
|
-
url: SCHEMA_SERVICE,
|
|
324
|
-
body: { dataExtensionSchema: { fqdn, namespace, jsonSchema } },
|
|
325
|
-
};
|
|
326
|
-
}
|
|
327
|
-
|
|
328
|
-
function buildUpdateDataExtensionSchemaRequest({ schemaId, revision, mergedSchema }) {
|
|
329
|
-
if (!schemaId) throw new Error('updating a data extension schema needs its id');
|
|
330
|
-
if (revision === undefined || revision === null || revision === '') {
|
|
331
|
-
// Without the current revision the PUT either fails or clobbers a concurrent change.
|
|
332
|
-
throw new Error('updating a data extension schema needs the CURRENT revision; the API uses it to reject conflicting changes');
|
|
333
|
-
}
|
|
334
|
-
if (!mergedSchema || !mergedSchema.properties) {
|
|
335
|
-
throw new Error('updating a data extension schema needs the full merged jsonSchema; this PUT overrides whatever is stored');
|
|
336
|
-
}
|
|
337
|
-
return {
|
|
338
|
-
method: 'PUT',
|
|
339
|
-
url: SCHEMA_SERVICE,
|
|
340
|
-
body: { dataExtensionSchema: { id: schemaId, revision: String(revision), jsonSchema: mergedSchema } },
|
|
341
|
-
};
|
|
342
|
-
}
|
|
343
|
-
|
|
344
|
-
// One decision function, so the caller cannot accidentally skip the collision or budget checks.
|
|
345
|
-
function planDataExtensionSchemaProvisioning({ requirement, existingSchema = null, approvedBreakingChanges = false } = {}) {
|
|
346
|
-
const validation = validateDataExtensionSchemaRequirement(requirement);
|
|
347
|
-
if (!validation.valid) {
|
|
348
|
-
return { action: 'blocked', blocking: validation.errors, request: null };
|
|
349
|
-
}
|
|
350
|
-
|
|
351
|
-
const fields = requirement.fields;
|
|
352
|
-
if (!existingSchema) {
|
|
353
|
-
const jsonSchema = buildDataExtensionSchema({ fields });
|
|
354
|
-
// No schema yet means no listed `maxLimitBytes` to check against, so the create path uses the
|
|
355
|
-
// limit observed on the live API. Without this an oversized first schema reached POST.
|
|
356
|
-
const budget = checkSizeBudget({ maxLimitBytes: OBSERVED_NAMESPACE_MAX_LIMIT_BYTES, currentSizeBytes: 0 }, jsonSchema);
|
|
357
|
-
if (budget) {
|
|
358
|
-
return { action: 'blocked', blocking: [budget], request: null };
|
|
359
|
-
}
|
|
360
|
-
return {
|
|
361
|
-
action: 'create',
|
|
362
|
-
blocking: [],
|
|
363
|
-
added: fields.map((field) => field.key),
|
|
364
|
-
unchanged: [],
|
|
365
|
-
preserved: [],
|
|
366
|
-
jsonSchema,
|
|
367
|
-
request: buildCreateDataExtensionSchemaRequest({ fqdn: requirement.fqdn, namespace: requirement.namespace, jsonSchema }),
|
|
368
|
-
};
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
const breaking = detectDataExtensionSchemaBreakingChanges(existingSchema.jsonSchema, fields);
|
|
372
|
-
if (breaking.breaking && approvedBreakingChanges !== true) {
|
|
373
|
-
return {
|
|
374
|
-
action: 'blocked',
|
|
375
|
-
blocking: breaking.changes.map((change) => ({ code: change.code, detail: change.detail })),
|
|
376
|
-
request: null,
|
|
377
|
-
};
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
const merged = mergeDataExtensionSchema(existingSchema.jsonSchema, fields);
|
|
381
|
-
|
|
382
|
-
// Idempotency: a repeated run with the same requirements changes nothing.
|
|
383
|
-
if (merged.added.length === 0 && merged.relabelled.length === 0) {
|
|
384
|
-
return { action: 'noop', blocking: [], added: [], unchanged: merged.unchanged, relabelled: [], preserved: merged.preserved, jsonSchema: merged.jsonSchema, request: null };
|
|
385
|
-
}
|
|
386
|
-
|
|
387
|
-
const budget = checkSizeBudget(existingSchema, merged.jsonSchema);
|
|
388
|
-
if (budget) {
|
|
389
|
-
return { action: 'blocked', blocking: [budget], request: null };
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
return {
|
|
393
|
-
action: 'update',
|
|
394
|
-
blocking: [],
|
|
395
|
-
added: merged.added,
|
|
396
|
-
unchanged: merged.unchanged,
|
|
397
|
-
relabelled: merged.relabelled,
|
|
398
|
-
preserved: merged.preserved,
|
|
399
|
-
jsonSchema: merged.jsonSchema,
|
|
400
|
-
request: buildUpdateDataExtensionSchemaRequest({
|
|
401
|
-
schemaId: existingSchema.id,
|
|
402
|
-
revision: existingSchema.revision,
|
|
403
|
-
mergedSchema: merged.jsonSchema,
|
|
404
|
-
}),
|
|
405
|
-
};
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
// The `_user_fields` namespace limit observed on the live Data Extension Schema API (2026-09-03).
|
|
409
|
-
// Used only when there is no existing schema whose listed `maxLimitBytes` could be read instead.
|
|
410
|
-
const OBSERVED_NAMESPACE_MAX_LIMIT_BYTES = 10000;
|
|
411
|
-
|
|
412
|
-
// The namespace is a shared byte budget, so the migration's fields can be refused by what the
|
|
413
|
-
// merchant already stores. Better to say so at setup than to fail mid-import.
|
|
414
|
-
function checkSizeBudget(existingSchema, mergedJsonSchema) {
|
|
415
|
-
const limit = Number(existingSchema.maxLimitBytes);
|
|
416
|
-
if (!Number.isFinite(limit) || limit <= 0) return null;
|
|
417
|
-
const projected = Buffer.byteLength(JSON.stringify(mergedJsonSchema), 'utf8');
|
|
418
|
-
if (projected > limit) {
|
|
419
|
-
return {
|
|
420
|
-
// Code `schema-budget-exceeded`. The fix is to route excess fields to CMS,
|
|
421
|
-
// never to guess which fields to drop.
|
|
422
|
-
code: 'schema-budget-exceeded',
|
|
423
|
-
detail: `the merged schema is about ${projected} bytes against a ${limit}-byte namespace limit (currently ${existingSchema.currentSizeBytes} bytes used)`,
|
|
424
|
-
};
|
|
425
|
-
}
|
|
426
|
-
return null;
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
// Step 7: re-read and record evidence. A create/update that reported success but did not produce
|
|
430
|
-
// the field is the case this catches.
|
|
431
|
-
// What a receipt has to have checked for its contract stamp to mean anything.
|
|
432
|
-
//
|
|
433
|
-
// This used to compare `property.type` and nothing else, while the stamp hashed maxLength,
|
|
434
|
-
// format, PII, filterability and permissions. So a schema could carry the right keys and types
|
|
435
|
-
// with WRONG permissions -- visitor-readable, say -- and the receipt would still say the private
|
|
436
|
-
// invoice contract passed. The `noop` path made that reachable without anyone tampering: an
|
|
437
|
-
// existing schema with matching keys is never rewritten, only verified.
|
|
438
|
-
//
|
|
439
|
-
// Presentation is deliberately absent, exactly as it is from the hash: `title` and `description`
|
|
440
|
-
// are the merchant's column headings and changing one must not invalidate receipts in flight.
|
|
441
|
-
function comparableProperty(property) {
|
|
442
|
-
if (!property || typeof property !== 'object') return null;
|
|
443
|
-
const permissions = property['x-wix-permissions'];
|
|
444
|
-
return {
|
|
445
|
-
type: property.type,
|
|
446
|
-
maxLength: property.maxLength,
|
|
447
|
-
format: property.format,
|
|
448
|
-
pii: property['x-wix-pii'] === true,
|
|
449
|
-
filterable: property['x-wix-filterable'] === true,
|
|
450
|
-
permissions: permissions
|
|
451
|
-
? { read: [...(permissions.read || [])].sort(), write: [...(permissions.write || [])].sort() }
|
|
452
|
-
: null,
|
|
453
|
-
};
|
|
454
|
-
}
|
|
455
|
-
|
|
456
|
-
// A field intent, expressed the same way, so the two can be compared directly.
|
|
457
|
-
function expectedComparableProperty(field) {
|
|
458
|
-
return comparableProperty(buildExtendedFieldSchemaProperty(field));
|
|
459
|
-
}
|
|
460
|
-
|
|
461
|
-
function describeFieldMismatch(field, property) {
|
|
462
|
-
const expected = expectedComparableProperty(field);
|
|
463
|
-
const actual = comparableProperty(property);
|
|
464
|
-
if (!actual) return 'the field is not on the schema';
|
|
465
|
-
const differences = [];
|
|
466
|
-
for (const aspect of ['type', 'maxLength', 'format', 'pii', 'filterable', 'permissions']) {
|
|
467
|
-
// An aspect the requirement does not state must be ABSENT from the schema, not merely
|
|
468
|
-
// unexamined. The stamp hashes the empty value just as it hashes a set one, so a `format` the
|
|
469
|
-
// requirement never asked for is a constraint outside the contract the receipt describes --
|
|
470
|
-
// and it can reject writes the contract says are fine.
|
|
471
|
-
if (JSON.stringify(expected[aspect]) !== JSON.stringify(actual[aspect])) {
|
|
472
|
-
differences.push(`${aspect}: expected ${JSON.stringify(expected[aspect])}, schema has ${JSON.stringify(actual[aspect])}`);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
return differences.length > 0 ? differences.join('; ') : null;
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
function verifyDataExtensionSchemaFields({ schema, fields = [], contractVersion = null } = {}) {
|
|
479
|
-
const properties = (schema && schema.jsonSchema && schema.jsonSchema.properties) || {};
|
|
480
|
-
const verified = [];
|
|
481
|
-
const missing = [];
|
|
482
|
-
const mismatched = [];
|
|
483
|
-
for (const field of fields) {
|
|
484
|
-
const property = properties[field.key];
|
|
485
|
-
if (!property) {
|
|
486
|
-
missing.push(field.key);
|
|
487
|
-
continue;
|
|
488
|
-
}
|
|
489
|
-
const difference = describeFieldMismatch(field, property);
|
|
490
|
-
if (difference) {
|
|
491
|
-
// Present but not what was asked for. Reported apart from `missing`, because "the field is
|
|
492
|
-
// not there" and "the field is there and readable by the wrong people" are different
|
|
493
|
-
// problems and only one of them is fixed by provisioning again.
|
|
494
|
-
mismatched.push({ key: field.key, difference });
|
|
495
|
-
continue;
|
|
496
|
-
}
|
|
497
|
-
verified.push({
|
|
498
|
-
key: field.key,
|
|
499
|
-
fieldType: property.type,
|
|
500
|
-
maxLength: property.maxLength,
|
|
501
|
-
writePath: `extendedFields.namespaces.${schema.namespace}.${field.key}`,
|
|
502
|
-
});
|
|
503
|
-
}
|
|
504
|
-
return {
|
|
505
|
-
verified,
|
|
506
|
-
missing,
|
|
507
|
-
mismatched,
|
|
508
|
-
passed: missing.length === 0 && mismatched.length === 0,
|
|
509
|
-
evidence: {
|
|
510
|
-
schemaId: schema && schema.id,
|
|
511
|
-
fqdn: schema && schema.fqdn,
|
|
512
|
-
namespace: schema && schema.namespace,
|
|
513
|
-
revision: schema && schema.revision,
|
|
514
|
-
verifiedAt: null,
|
|
515
|
-
},
|
|
516
|
-
// Which contract this receipt was made against. A receipt that verified an earlier set of
|
|
517
|
-
// fields is structurally identical to one that verified the current set; without this a
|
|
518
|
-
// consumer cannot tell them apart, which is how a two-of-three receipt read as provisioned.
|
|
519
|
-
contractVersion: contractVersion || null,
|
|
520
|
-
};
|
|
521
|
-
}
|
|
522
|
-
|
|
523
|
-
// The writer-side guard: generated import code may write an extended field only
|
|
524
|
-
// after setup verification passed for that exact field.
|
|
525
|
-
// The executor persists `{schemaVersion, verifications: [...]}` -- one entry per requirement --
|
|
526
|
-
// while a single verification result is `{passed, verified}`. This accepted only the latter, so
|
|
527
|
-
// handing it the actual on-disk receipt refused every write as unprovisioned. Both shapes are
|
|
528
|
-
// normalized here, because the caller reading a file should not have to know which one it holds.
|
|
529
|
-
function normalizeSetupVerification(setupVerification) {
|
|
530
|
-
if (!setupVerification) return [];
|
|
531
|
-
if (Array.isArray(setupVerification.verifications)) return setupVerification.verifications;
|
|
532
|
-
if (Array.isArray(setupVerification)) return setupVerification;
|
|
533
|
-
return [setupVerification];
|
|
534
|
-
}
|
|
535
|
-
|
|
536
|
-
// The contract version for an extendedFieldSchema requirement, computed from the requirement
|
|
537
|
-
// itself so ANY producer of one stamps the same value for the same contract.
|
|
538
|
-
//
|
|
539
|
-
// It lives here rather than in a domain adapter because the shipped producer is generic:
|
|
540
|
-
// `domain-knowledge.js` copies `setupRequirements` out of whatever entity it is summarising and
|
|
541
|
-
// knows nothing about invoices. While the stamp existed only on the invoice adapter, the real path
|
|
542
|
-
// emitted unstamped requirements and the writer refused every invoice — the guard worked and the
|
|
543
|
-
// chain did not reach it.
|
|
544
|
-
//
|
|
545
|
-
// Hashed over what a CONSUMER'S BEHAVIOUR depends on: where the fields live, what they are called,
|
|
546
|
-
// their types and caps, whether they are PII or filterable, and who may read and write them. A
|
|
547
|
-
// permission or format change alters whether storing a value is safe, so it must invalidate a
|
|
548
|
-
// receipt; labels and hints are presentation and deliberately excluded, so improving a column
|
|
549
|
-
// heading does not invalidate every receipt in flight.
|
|
550
|
-
function extendedFieldContractVersion(requirement) {
|
|
551
|
-
if (!requirement || !Array.isArray(requirement.fields)) return null;
|
|
552
|
-
// The legacy V4 contact path has no fqdn/key/fieldType to hash; it stamps its own material.
|
|
553
|
-
if (requirement.schemaKind === 'crm-contact-extended-field') {
|
|
554
|
-
// eslint-disable-next-line global-require
|
|
555
|
-
return require('./contact-extended-fields.js').contactExtendedFieldContractVersion(requirement);
|
|
556
|
-
}
|
|
557
|
-
const material = [
|
|
558
|
-
requirement.fqdn || '',
|
|
559
|
-
requirement.namespace || '',
|
|
560
|
-
...requirement.fields.map((field) => [
|
|
561
|
-
field.key,
|
|
562
|
-
field.fieldType,
|
|
563
|
-
field.maxLength,
|
|
564
|
-
field.format || '',
|
|
565
|
-
field.pii === true ? 'pii' : '',
|
|
566
|
-
field.filterable === true ? 'filterable' : '',
|
|
567
|
-
JSON.stringify(resolvePermissions(field) || null),
|
|
568
|
-
field.writePath || '',
|
|
569
|
-
].join(':')).sort(),
|
|
570
|
-
].join('|');
|
|
571
|
-
return crypto.createHash('sha256').update(material).digest('hex').slice(0, 16);
|
|
572
|
-
}
|
|
573
|
-
|
|
574
|
-
function stampRequirement(requirement) {
|
|
575
|
-
if (!requirement || requirement.kind !== 'extendedFieldSchema') return requirement;
|
|
576
|
-
return { ...requirement, contractVersion: extendedFieldContractVersion(requirement) };
|
|
577
|
-
}
|
|
578
|
-
|
|
579
|
-
function validateExtendedFieldWriterReferences({ writePaths = [], setupVerification = null, contractVersion = null } = {}) {
|
|
580
|
-
const errors = [];
|
|
581
|
-
const results = normalizeSetupVerification(setupVerification);
|
|
582
|
-
|
|
583
|
-
// Provenance, not just shape. A receipt made against an older contract passes every structural
|
|
584
|
-
// check and still leaves fields unprovisioned, so the caller states which contract it is
|
|
585
|
-
// writing under and a receipt from any other one is refused.
|
|
586
|
-
// A path counts only if the entry that verified it is ITSELF stamped with the contract being
|
|
587
|
-
// written. Checking the receipt as a whole was not enough: the paths were unioned across every
|
|
588
|
-
// entry, so one stamped-but-empty verification legitimised an unstamped entry that supplied all
|
|
589
|
-
// of them. A receipt is a bag of independent claims, and provenance belongs to each claim rather
|
|
590
|
-
// than to the bag.
|
|
591
|
-
//
|
|
592
|
-
// One setup receipt covers several targets (an Order contract and a Product contract, say), so
|
|
593
|
-
// an entry stamped with a DIFFERENT contract is another requirement's claim, not a conflict: it
|
|
594
|
-
// is ignored rather than rejected. Only the entries on the writer's own contract count, and
|
|
595
|
-
// only their paths -- paths are never unioned across contracts. A receipt with no entry on this
|
|
596
|
-
// contract is refused, naming the stale contract when one is present.
|
|
597
|
-
let accepted = results;
|
|
598
|
-
if (contractVersion) {
|
|
599
|
-
accepted = results.filter((result) => result && result.contractVersion === contractVersion);
|
|
600
|
-
if (results.length > 0 && accepted.length === 0) {
|
|
601
|
-
const others = results.filter((result) => result && result.contractVersion);
|
|
602
|
-
if (others.length > 0) {
|
|
603
|
-
fail(errors, 'setup-receipt-contract-mismatch',
|
|
604
|
-
`no verification was produced against contract ${contractVersion} (the receipt has ${others.map((r) => r.contractVersion).join(', ')}); re-run setup`);
|
|
605
|
-
} else {
|
|
606
|
-
fail(errors, 'setup-receipt-unstamped',
|
|
607
|
-
'no verification in the receipt carries this contract version, so none of it can be shown to match the fields being written; re-run setup');
|
|
608
|
-
}
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
const verified = new Set(accepted.flatMap((result) => ((result && result.verified) || []).map((entry) => entry.writePath)));
|
|
612
|
-
// Every verification on this contract must have passed: one failed requirement invalidates the
|
|
613
|
-
// fields it was responsible for, and they are not distinguishable from here.
|
|
614
|
-
const passed = accepted.length > 0 && accepted.every((result) => result && result.passed === true);
|
|
615
|
-
for (const writePath of writePaths) {
|
|
616
|
-
if (!passed) {
|
|
617
|
-
fail(errors, 'writes-before-verified-setup', `"${writePath}" would be written before setup verification passed`);
|
|
618
|
-
continue;
|
|
619
|
-
}
|
|
620
|
-
if (!verified.has(writePath)) {
|
|
621
|
-
fail(errors, 'write-path-not-verified', `"${writePath}" is not among the fields setup verified`);
|
|
622
|
-
}
|
|
623
|
-
}
|
|
624
|
-
return { valid: errors.length === 0, errors };
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
// Revision-conflict recovery. Update carries the listed revision; a concurrent
|
|
628
|
-
// merchant or app edit between List and Update makes it stale. Wix answers a stale revision with a
|
|
629
|
-
// 409 (other revisioned services name it INVALID_REVISION), so either signal counts. Anything else
|
|
630
|
-
// is a real failure and is not retried here.
|
|
631
|
-
const MAX_SCHEMA_WRITE_ATTEMPTS = 3;
|
|
632
|
-
const CONFLICT_EXHAUSTED_CODE = 'EXTENDED_FIELD_SCHEMA_CONFLICT_EXHAUSTED';
|
|
633
|
-
const CONTACTS_V5_UNVERIFIED_CODE = 'CONTACTS_V5_DES_UNVERIFIED';
|
|
634
|
-
|
|
635
|
-
function isRevisionConflict(error) {
|
|
636
|
-
if (!error) return false;
|
|
637
|
-
if (error.status === 409) return true;
|
|
638
|
-
const text = [error.code, error.applicationErrorCode, error.message].filter(Boolean).join(' ');
|
|
639
|
-
return /INVALID_REVISION|REVISION_MISMATCH|revision.*(conflict|stale|mismatch)/i.test(text);
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
module.exports = {
|
|
643
|
-
SCHEMA_SERVICE,
|
|
644
|
-
CONTACTS_FQDN,
|
|
645
|
-
OUT_OF_SCOPE_TARGETS,
|
|
646
|
-
MAX_SCHEMA_WRITE_ATTEMPTS,
|
|
647
|
-
OBSERVED_NAMESPACE_MAX_LIMIT_BYTES,
|
|
648
|
-
CONFLICT_EXHAUSTED_CODE,
|
|
649
|
-
CONTACTS_V5_UNVERIFIED_CODE,
|
|
650
|
-
isRevisionConflict,
|
|
651
|
-
USER_FIELDS_NAMESPACE,
|
|
652
|
-
SUPPORTED_TARGETS,
|
|
653
|
-
VERIFIED_FIELD_TYPES,
|
|
654
|
-
VERIFIED_STRING_FORMATS,
|
|
655
|
-
PERMISSION_PRESETS,
|
|
656
|
-
validateExtendedFieldIntent,
|
|
657
|
-
buildExtendedFieldSchemaProperty,
|
|
658
|
-
buildDataExtensionSchema,
|
|
659
|
-
validateDataExtensionSchemaRequirement,
|
|
660
|
-
buildListDataExtensionSchemasRequest,
|
|
661
|
-
selectUserFieldsSchema,
|
|
662
|
-
archivedKeys,
|
|
663
|
-
detectDataExtensionSchemaBreakingChanges,
|
|
664
|
-
mergeDataExtensionSchema,
|
|
665
|
-
buildCreateDataExtensionSchemaRequest,
|
|
666
|
-
buildUpdateDataExtensionSchemaRequest,
|
|
667
|
-
planDataExtensionSchemaProvisioning,
|
|
668
|
-
verifyDataExtensionSchemaFields,
|
|
669
|
-
normalizeSetupVerification,
|
|
670
|
-
extendedFieldContractVersion,
|
|
671
|
-
stampRequirement,
|
|
672
|
-
validateExtendedFieldWriterReferences,
|
|
673
|
-
};
|