@wix/agent-skills 1.33.0 → 1.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -0
- package/package.json +2 -2
- package/skills/wix-app/references/DASHBOARD_PAGE.md +1 -1
- package/skills/wix-export/SKILL.md +83 -0
- package/skills/wix-harmony-editor/.publish-manifest.json +8 -0
- package/skills/wix-harmony-editor/COPY-SITE.md +494 -0
- package/skills/wix-harmony-editor/SKILL.md +317 -0
- package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +249 -0
- package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +225 -0
- package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +89 -0
- package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +76 -0
- package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +212 -0
- package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +44 -0
- package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +45 -0
- package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +53 -0
- package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +76 -0
- package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +16 -0
- package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +150 -0
- package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +27 -0
- package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +56 -0
- package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +211 -0
- package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +29 -0
- package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +92 -0
- package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +56 -0
- package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +73 -0
- package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +67 -0
- package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +102 -0
- package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +40 -0
- package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +191 -0
- package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +61 -0
- package/skills/wix-harmony-editor/scripts/launch.sh +359 -0
- package/skills/wix-headless/SKILL.md +7 -2
- package/skills/wix-headless/references/CAPABILITIES.md +6 -1
- package/skills/wix-headless/references/DISCOVERY.md +2 -1
- package/skills/wix-headless/references/SDK_HANDOFF.md +6 -1
- package/skills/wix-headless/references/SEED.md +3 -2
- package/skills/wix-headless/references/SETUP.md +1 -0
- package/skills/wix-headless/references/inline-recipes/experience-donations.md +102 -0
- package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +146 -0
- package/skills/wix-headless/references/inline-recipes/setup-donations.md +15 -0
- package/skills/wix-headless/references/managed/CREATE.md +1 -1
- package/skills/wix-headless-kit/SKILL.md +110 -21
- package/skills/wix-headless-kit/guides/api-run.md +15 -13
- package/skills/wix-headless-kit/guides/existing-site.md +31 -0
- package/skills/wix-headless-kit/guides/migration.md +49 -17
- package/skills/wix-headless-kit/install/agents-md.mjs +1 -1
- package/skills/wix-headless-kit/install/context.mjs +61 -6
- package/skills/wix-headless-kit/install/pins.json +1 -1
- package/skills/wix-headless-kit/install/setup.mjs +107 -12
- package/skills/wix-headless-replatform/.publish-manifest.json +8 -0
- package/skills/wix-headless-replatform/SKILL.md +116 -0
- package/skills/wix-headless-replatform/agents/openai.yaml +6 -0
- package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +43 -0
- package/skills/wix-headless-replatform/references/extraction-schema.md +187 -0
- package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +137 -0
- package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +41 -0
- package/skills/wix-headless-replatform/references/output-contract.md +93 -0
- package/skills/wix-headless-replatform/references/post-build-gap-contract.md +125 -0
- package/skills/wix-headless-replatform/references/qa-checklist.md +83 -0
- package/skills/wix-headless-replatform/references/safety.md +19 -0
- package/skills/wix-headless-replatform/references/ui-normalization-contract.md +70 -0
- package/skills/wix-headless-replatform/references/workflow.md +157 -0
- package/skills/wix-headless-replatform/registry/README.md +20 -0
- package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +28 -0
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +54 -0
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +60 -0
- package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +48 -0
- package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +21 -0
- package/skills/wix-headless-replatform/registry/registry.json +36 -0
- package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +32 -0
- package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +62 -0
- package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +64 -0
- package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +42 -0
- package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +73 -0
- package/skills/wix-headless-replatform/schemas/build-plan.schema.json +10 -0
- package/skills/wix-headless-replatform/schemas/candidate.schema.json +19 -0
- package/skills/wix-headless-replatform/schemas/common.schema.json +33 -0
- package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +10 -0
- package/skills/wix-headless-replatform/schemas/decision-request.schema.json +10 -0
- package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +28 -0
- package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +34 -0
- package/skills/wix-headless-replatform/schemas/final-report.schema.json +10 -0
- package/skills/wix-headless-replatform/schemas/foundation.schema.json +11 -0
- package/skills/wix-headless-replatform/schemas/metadata.schema.json +11 -0
- package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +17 -0
- package/skills/wix-headless-replatform/schemas/page-capture.schema.json +11 -0
- package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +33 -0
- package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +11 -0
- package/skills/wix-headless-replatform/schemas/unit.schema.json +40 -0
- package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +844 -0
- package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +163 -0
- package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +42 -0
- package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +228 -0
- package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +87 -0
- package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +505 -0
- package/skills/wix-headless-replatform/scripts/discover-urls.mjs +142 -0
- package/skills/wix-headless-replatform/scripts/extract-assets.mjs +140 -0
- package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +637 -0
- package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +1903 -0
- package/skills/wix-headless-replatform/scripts/extract-page.mjs +2461 -0
- package/skills/wix-headless-replatform/scripts/extract-seo.mjs +25 -0
- package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +63 -0
- package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +126 -0
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +180 -0
- package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +98 -0
- package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +103 -0
- package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +176 -0
- package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +261 -0
- package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +25 -0
- package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +342 -0
- package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +140 -0
- package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +22 -0
- package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +143 -0
- package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +288 -0
- package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +266 -0
- package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +111 -0
- package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +570 -0
- package/skills/wix-headless-replatform/scripts/lib/common.mjs +329 -0
- package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +121 -0
- package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +282 -0
- package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +61 -0
- package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +374 -0
- package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +243 -0
- package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +1139 -0
- package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +326 -0
- package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +184 -0
- package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +396 -0
- package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +168 -0
- package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +10 -0
- package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +194 -0
- package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +348 -0
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +141 -0
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +43 -0
- package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +18 -0
- package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +64 -0
- package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +31 -0
- package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +358 -0
- package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +25 -0
- package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +39 -0
- package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +107 -0
- package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +96 -0
- package/skills/wix-headless-replatform/scripts/site-clone.mjs +658 -0
- package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +29 -0
- package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +669 -0
- package/skills/wix-headless-replatform/scripts/visual-qa.mjs +370 -0
- package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +37 -24
- package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +49 -23
- package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +6 -5
- package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +5 -5
- package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +4 -4
- package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +7 -3
- package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +2 -2
- package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +12 -9
- package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +49 -23
- package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +6 -5
- package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +5 -5
- package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +4 -4
- package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +7 -3
- package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +2 -2
- package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +12 -9
- package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
- package/skills/wix-headless-templates/donations/rest/donate.ts +7 -3
- package/skills/wix-headless-templates/donations/seed/SEED.md +12 -7
- package/skills/wix-headless-templates/donations/tests/donation-contract.test.mjs +71 -0
- package/skills/wix-headless-templates/donations/tests/donation-form.test.cjs +137 -0
- package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +28 -14
- package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +87 -5
- package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +9 -1
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +33 -4
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +100 -5
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +101 -15
- package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +35 -1
- package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +87 -5
- package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +9 -1
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +33 -4
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +100 -5
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +101 -15
- package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +35 -1
- package/skills/wix-headless-templates/restaurants/rest/ordering.ts +91 -14
- package/skills/wix-import/SKILL.md +90 -0
- package/skills/wix-manage/SKILL.md +38 -10
- package/skills/wix-manage/references/automations/actions.md +11 -11
- package/skills/wix-manage/references/automations/activation-status.md +6 -9
- package/skills/wix-manage/references/automations/api-catalog.md +48 -32
- package/skills/wix-manage/references/automations/automation-model.md +97 -22
- package/skills/wix-manage/references/automations/bracket-expressions.md +7 -7
- package/skills/wix-manage/references/automations/build-and-manage-automations.md +140 -309
- package/skills/wix-manage/references/automations/conditions.md +187 -0
- package/skills/wix-manage/references/automations/schemas-and-scheduling.md +191 -0
- package/skills/wix-manage/references/automations/special-actions.md +210 -0
- package/skills/wix-manage/references/automations/triggers.md +47 -10
- package/skills/wix-manage/references/automations/validation-and-verification.md +320 -0
- package/skills/wix-manage/references/custom-apps/use-app-tools.md +124 -0
- package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +2 -1
- package/skills/wix-manage/references/dashboard-navigation/routes.json +249 -0
- package/skills/wix-manage/references/donations/create-and-update-donation-campaigns.md +139 -0
- package/skills/wix-manage/references/events/create-wix-event.md +136 -73
- package/skills/wix-manage/references/events/events-dashboard-navigation.md +81 -0
- package/skills/wix-manage/references/events/manage-event-guests.md +366 -0
- package/skills/wix-manage/references/events/manage-event-tickets.md +293 -0
- package/skills/wix-manage/references/events/manage-wix-events.md +313 -55
- package/skills/wix-manage/references/sites/manage-oauth-apps.md +1 -0
- package/skills/wix-manage/references/sites/upload-static-site.md +127 -8
- package/skills/wix-manage/references/stores/update-product-with-options.md +58 -2
- package/skills/wix-replatform/.publish-manifest.json +5 -5
- package/skills/wix-replatform/CLI.md +162 -0
- package/skills/wix-replatform/README.md +52 -0
- package/skills/wix-replatform/SKILL.md +229 -684
- package/skills/wix-replatform/console/account.css +1 -0
- package/skills/wix-replatform/console/app.css +1 -0
- package/skills/wix-replatform/console/app.js +117 -0
- package/skills/wix-replatform/console/index.html +4 -0
- package/skills/wix-replatform/console/json.css +11 -0
- package/skills/wix-replatform/lib/agent-adapters/index.js +71 -0
- package/skills/wix-replatform/lib/app-page-routing.js +75 -0
- package/skills/wix-replatform/lib/artifact-freshness.js +11 -1
- package/skills/wix-replatform/lib/blocked-data-requests.js +427 -0
- package/skills/wix-replatform/lib/census-reconciliation.js +426 -0
- package/skills/wix-replatform/lib/completion-report.js +1393 -13
- package/skills/wix-replatform/lib/config-env.js +85 -11
- package/skills/wix-replatform/lib/confirmed-pictures.js +212 -0
- package/skills/wix-replatform/lib/dependency-readiness.js +423 -0
- package/skills/wix-replatform/lib/dependency-recovery.js +21 -0
- package/skills/wix-replatform/lib/destination-choice.js +163 -0
- package/skills/wix-replatform/lib/destination-handoff.js +62 -0
- package/skills/wix-replatform/lib/destination-http.js +81 -0
- package/skills/wix-replatform/lib/destination-route.js +98 -0
- package/skills/wix-replatform/lib/destination.js +919 -0
- package/skills/wix-replatform/lib/discovered-census.js +231 -0
- package/skills/wix-replatform/lib/discovered-set-status.js +255 -0
- package/skills/wix-replatform/lib/document-url-guard.js +203 -0
- package/skills/wix-replatform/lib/entity-qa-attestation.js +339 -0
- package/skills/wix-replatform/lib/entity-verification.js +18 -0
- package/skills/wix-replatform/lib/execution-capability.js +120 -0
- package/skills/wix-replatform/lib/execution-log.js +170 -0
- package/skills/wix-replatform/lib/execution-manifest.js +20 -2
- package/skills/wix-replatform/lib/execution-state.js +22 -0
- package/skills/wix-replatform/lib/expectations-ledger.js +96 -0
- package/skills/wix-replatform/lib/generated-plugin-handoff.js +140 -0
- package/skills/wix-replatform/lib/import-readiness-contract.js +23 -0
- package/skills/wix-replatform/lib/import-recovery.js +800 -6
- package/skills/wix-replatform/lib/imported-redirect-targets.js +608 -0
- package/skills/wix-replatform/lib/internal-link-reconciliation.js +166 -0
- package/skills/wix-replatform/lib/link-audit.js +173 -0
- package/skills/wix-replatform/lib/link-census.js +194 -0
- package/skills/wix-replatform/lib/link-plan.js +148 -0
- package/skills/wix-replatform/lib/link-verification.js +274 -0
- package/skills/wix-replatform/lib/link-write-journal.js +42 -0
- package/skills/wix-replatform/lib/local-state.js +869 -30
- package/skills/wix-replatform/lib/member-completion.js +658 -0
- package/skills/wix-replatform/lib/member-crosswalk.js +69 -0
- package/skills/wix-replatform/lib/member-outcome-registry.js +265 -0
- package/skills/wix-replatform/lib/migration-completion.js +311 -0
- package/skills/wix-replatform/lib/operator-identity.js +47 -0
- package/skills/wix-replatform/lib/orchestration-decisions.js +248 -0
- package/skills/wix-replatform/lib/orchestration-preflight.js +401 -19
- package/skills/wix-replatform/lib/orchestration-router.js +608 -32
- package/skills/wix-replatform/lib/orchestration-state.js +188 -12
- package/skills/wix-replatform/lib/order-reference-readiness.js +30 -0
- package/skills/wix-replatform/lib/payments-outcome-registry.js +200 -0
- package/skills/wix-replatform/lib/plugin-cms-fallback.js +618 -0
- package/skills/wix-replatform/lib/preservation-approval-stamp.js +54 -0
- package/skills/wix-replatform/lib/product-media-deferral.js +96 -0
- package/skills/wix-replatform/lib/progress-log.js +19 -3
- package/skills/wix-replatform/lib/read-back-approval.js +184 -0
- package/skills/wix-replatform/lib/read-back-comparison.js +136 -0
- package/skills/wix-replatform/lib/read-back-contract.js +243 -0
- package/skills/wix-replatform/lib/read-back-extract.js +118 -0
- package/skills/wix-replatform/lib/read-back-gate.js +734 -0
- package/skills/wix-replatform/lib/read-back-reads.js +94 -0
- package/skills/wix-replatform/lib/read-back-state.js +107 -0
- package/skills/wix-replatform/lib/read-back-summary.js +81 -0
- package/skills/wix-replatform/lib/rerun-conflicts.js +334 -0
- package/skills/wix-replatform/lib/run-controller.js +401 -0
- package/skills/wix-replatform/lib/seo-outcome-registry.js +45 -0
- package/skills/wix-replatform/lib/setup-verification.js +148 -0
- package/skills/wix-replatform/lib/source-access.js +231 -0
- package/skills/wix-replatform/lib/source-coverage.js +1130 -0
- package/skills/wix-replatform/lib/source-secrets.js +277 -0
- package/skills/wix-replatform/lib/structured-link-patch.js +59 -0
- package/skills/wix-replatform/lib/task-state.js +110 -0
- package/skills/wix-replatform/lib/url-preservation-report.js +319 -0
- package/skills/wix-replatform/lib/url-preservation-state.js +349 -1
- package/skills/wix-replatform/lib/url-redirect-plan.js +728 -0
- package/skills/wix-replatform/lib/url-verification.js +315 -0
- package/skills/wix-replatform/lib/user-action-effects.js +42 -0
- package/skills/wix-replatform/lib/user-actions.js +264 -0
- package/skills/wix-replatform/lib/website-handoff.js +1220 -0
- package/skills/wix-replatform/lib/wix-client-callers.js +54 -0
- package/skills/wix-replatform/lib/wix-dashboard-url.js +35 -0
- package/skills/wix-replatform/lib/write-verification-state.js +92 -0
- package/skills/wix-replatform/lib/write-verification.js +274 -0
- package/skills/wix-replatform/resources/rp-destination/SKILL.md +137 -0
- package/skills/wix-replatform/resources/rp-discovery/SKILL.md +189 -16
- package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +47 -0
- package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +869 -29
- package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +70 -0
- package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +195 -29
- package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +442 -0
- package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +112 -0
- package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +143 -0
- package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +244 -0
- package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +2082 -38
- package/skills/wix-replatform/resources/rp-mapper/SKILL.md +528 -11
- package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +303 -0
- package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +88 -0
- package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +6 -5
- package/skills/wix-replatform/resources/rp-preflight/SKILL.md +40 -0
- package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +55 -0
- package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +60 -0
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +89 -0
- package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +36 -0
- package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +123 -0
- package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +124 -0
- package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +522 -0
- package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +56 -0
- package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +91 -0
- package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +255 -0
- package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +80 -10
- package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +44 -0
- package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +3 -0
- package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
- package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +21 -1
- package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +66 -0
- package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +153 -0
- package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +394 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +200 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +34 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +44 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +1470 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +446 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +474 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +879 -0
- package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +426 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +24 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +18 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +40 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +76 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +51 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +35 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +20 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +18 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +31 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +21 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +21 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +30 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +150 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +36 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +48 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +20 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +8 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +6 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +8 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +8 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +12 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +6 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +13 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +13 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +73 -0
- package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +13 -0
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +693 -0
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +283 -0
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +191 -0
- package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +115 -0
- package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +201 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +146 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +736 -22
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +73 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +115 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +91 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +440 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +125 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +252 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +183 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +333 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +426 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +400 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +633 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +1127 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +194 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +100 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +157 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +234 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +101 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +755 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +1074 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +149 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +25 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +204 -9
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +186 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +1422 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +343 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +262 -26
- package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +272 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +373 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +101 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +81 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +128 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +18 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +104 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +44 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +49 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +94 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +863 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +52 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +161 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +180 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +286 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +79 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +120 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +128 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +88 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +80 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +46 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +55 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +99 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +55 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +160 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +81 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +60 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +74 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +75 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +60 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +44 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +57 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +141 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +54 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +158 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +97 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +86 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +90 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +51 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +103 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +1668 -33
- package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +273 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +11 -0
- package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +13 -0
- package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +446 -32
- package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +36 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +38 -2
- package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +322 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +70 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -9
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +42 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +54 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +66 -10
- package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +38 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +332 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +75 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +181 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +130 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +180 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +161 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +15 -4
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +39 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +47 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +7 -1
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +204 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +17 -4
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +159 -15
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +80 -12
- package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +48 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +306 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +30 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +171 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +182 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +129 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +192 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +123 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +60 -12
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +112 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +191 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +140 -13
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +383 -18
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +122 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +98 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +86 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +128 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +38 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +73 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +107 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +89 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +118 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +93 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +86 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +56 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +121 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +134 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +41 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +50 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +87 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +130 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +914 -24
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +41 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -4
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +45 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +41 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +119 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -3
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +41 -7
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +82 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +77 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +165 -13
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +41 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +46 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +137 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +133 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +7 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +36 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +71 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +67 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +72 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +74 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +69 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +61 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +28 -1
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +109 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +73 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +148 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +91 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +79 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +32 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +49 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +103 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +203 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +27 -10
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +119 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +111 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +52 -8
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +214 -10
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +93 -13
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +111 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +52 -10
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +145 -14
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +84 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +178 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +87 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +106 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +64 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +119 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +94 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +113 -0
- package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +65 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +165 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +60 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +201 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +306 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +229 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +55 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +715 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +567 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +73 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +194 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +133 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +13 -4
- package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +491 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +104 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +673 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +453 -2
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +119 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +566 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +249 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +63 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +187 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +64 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +1027 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +90 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +420 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +177 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +151 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +723 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +353 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +1437 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +354 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +134 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +221 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +248 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +86 -3
- package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +231 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +28 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +14 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +34 -0
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +166 -15
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +19 -2
- package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +4079 -257
- package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +3 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +150 -0
- package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +40 -2
- package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +6 -1
- package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +148 -8
- package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +83 -15
- package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1119 -215
- package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +318 -0
- package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +2 -2
- package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +106 -4
- package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +94 -0
- package/skills/wix-replatform/scripts/census-reconciliation.js +25 -0
- package/skills/wix-replatform/scripts/cms-fallback.js +89 -0
- package/skills/wix-replatform/scripts/discovered-census.js +26 -0
- package/skills/wix-replatform/scripts/discovered-set-status.js +33 -0
- package/skills/wix-replatform/scripts/entity-qa-attestation.js +130 -0
- package/skills/wix-replatform/scripts/execution-health-check.js +415 -0
- package/skills/wix-replatform/scripts/execution-manifest-validate.js +1 -1
- package/skills/wix-replatform/scripts/execution-state-prepare.js +1 -1
- package/skills/wix-replatform/scripts/expectations-ledger.js +44 -0
- package/skills/wix-replatform/scripts/import-contract-verify.js +183 -0
- package/skills/wix-replatform/scripts/internal-link-audit.js +90 -0
- package/skills/wix-replatform/scripts/item-seo-tags-verify.js +205 -0
- package/skills/wix-replatform/scripts/migration-completion.js +76 -0
- package/skills/wix-replatform/scripts/orchestration-preflight.js +21 -2
- package/skills/wix-replatform/scripts/orchestration-route.js +32 -1
- package/skills/wix-replatform/scripts/orchestration-state.js +146 -10
- package/skills/wix-replatform/scripts/read-back-gate.js +175 -0
- package/skills/wix-replatform/scripts/replatform-console.js +146 -0
- package/skills/wix-replatform/scripts/replatform.js +436 -0
- package/skills/wix-replatform/scripts/source-secrets.js +77 -0
- package/skills/wix-replatform/scripts/url-redirects.js +286 -0
- package/skills/wix-replatform/scripts/user-action.js +58 -0
- package/skills/wix-replatform/scripts/website-handoff-generate.js +64 -0
- package/skills/wix-replatform/scripts/wix-dashboard-url.js +54 -0
- package/skills/wix-replatform/scripts/wix-destination.js +143 -0
- package/skills/wix-replatform/scripts/wix-headless-scaffold.js +762 -0
- package/skills/wix-vibe-headless/SKILL.md +7 -3
- package/skills/wix-vibe-headless/install/deploy.cjs +61 -34
- package/skills/wix-vibe-headless/platforms/base44.md +1 -0
- package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +88 -0
- package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +112 -0
- package/skills/wix-vibe-headless/references/donations/seed/SEED.md +11 -0
- package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +258 -0
- package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -2
- package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +4 -1
- package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +67 -3
- package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +4 -3
- package/skills/wix-manage/references/custom-apps/use-app-skills-and-app-tools.md +0 -208
- package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +0 -330
package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// The hosted checkout's thank-you island — wire as-is on /donate/thank-you (mount client:only: it
|
|
2
2
|
// reads the browser URL). It owns the honesty rules: landing here with `?orderId=` is Wix's
|
|
3
3
|
// success redirect, so it thanks the donor; the order's facts (name, amount, order number, paid or
|
|
4
|
-
//
|
|
4
|
+
// unconfirmed) appear only when the order could be read; a direct visit with no order id gets a neutral
|
|
5
5
|
// thank-you and a link back — never an invented receipt, never "paid" unless the order says PAID.
|
|
6
6
|
import { useDonationReceipt } from "../../hooks/donations/useDonationReceipt";
|
|
7
7
|
|
|
@@ -17,7 +17,8 @@ export default function DonationReceipt({ campaignsHref = "/donate", className =
|
|
|
17
17
|
if (!orderId) {
|
|
18
18
|
return (
|
|
19
19
|
<div className={className}>
|
|
20
|
-
<h1 className="text-2xl font-semibold tracking-tight">
|
|
20
|
+
<h1 className="text-2xl font-semibold tracking-tight">Your support matters</h1>
|
|
21
|
+
<p className="mt-3 text-sm text-muted-foreground">This page alone is not a payment confirmation. Explore a campaign to give, or check your checkout confirmation if you just returned.</p>
|
|
21
22
|
<a href={campaignsHref} className="mt-6 inline-block text-sm text-foreground underline">
|
|
22
23
|
See the campaigns
|
|
23
24
|
</a>
|
|
@@ -29,15 +30,15 @@ export default function DonationReceipt({ campaignsHref = "/donate", className =
|
|
|
29
30
|
<div className={className} aria-busy={loading}>
|
|
30
31
|
{receipt?.orderNumber && <p className="eyebrow">Order {receipt.orderNumber}</p>}
|
|
31
32
|
<h1 className="mt-2 text-2xl font-semibold tracking-tight">
|
|
32
|
-
{receipt?.donorFirstName ? `Thank you, ${receipt.donorFirstName}` : "Thank you for your donation"}
|
|
33
|
+
{receipt?.donorFirstName ? `Thank you, ${receipt.donorFirstName}` : receipt ? "Thank you for your support" : loading ? "Checking your donation" : "Your support matters"}
|
|
33
34
|
</h1>
|
|
34
35
|
{receipt && (
|
|
35
36
|
<p className="mt-3 text-sm text-muted-foreground">
|
|
36
37
|
{receipt.amount ? `Your donation of ${receipt.amount} ` : "Your donation "}
|
|
37
|
-
{receipt.paid ? "has been received." : "is
|
|
38
|
+
{receipt.paid ? "has been received." : "is not confirmed as paid. Please check your checkout confirmation."}
|
|
38
39
|
</p>
|
|
39
40
|
)}
|
|
40
|
-
{!receipt && !loading && <p className="mt-3 text-sm text-muted-foreground">
|
|
41
|
+
{!receipt && !loading && <p className="mt-3 text-sm text-muted-foreground">Donation details could not be verified here. If you completed checkout, check its confirmation before trying again.</p>}
|
|
41
42
|
<a href={campaignsHref} className="mt-6 inline-block text-sm text-muted-foreground underline">
|
|
42
43
|
Back to campaigns
|
|
43
44
|
</a>
|
|
@@ -33,14 +33,14 @@ export default function GoalProgress({ goal, className = "", compact = false }:
|
|
|
33
33
|
{goal.target}
|
|
34
34
|
</span>
|
|
35
35
|
</p>
|
|
36
|
-
<p className="text-sm font-semibold text-foreground">{goal.percent}%</p>
|
|
36
|
+
{goal.raised && <p className="text-sm font-semibold text-foreground">{goal.percent}%</p>}
|
|
37
37
|
</div>
|
|
38
|
-
<div className="mt-2 h-2 w-full overflow-hidden rounded-control bg-secondary" role="progressbar" aria-valuemin={0} aria-valuemax={100} aria-valuenow={width} aria-label="Progress toward the goal">
|
|
38
|
+
{goal.raised && <div className="mt-2 h-2 w-full overflow-hidden rounded-control bg-secondary" role="progressbar" aria-valuemin={0} aria-valuemax={100} aria-valuenow={width} aria-label="Progress toward the goal">
|
|
39
39
|
<div className="h-full rounded-control bg-primary transition-[width]" style={{ width: `${width}%` }} />
|
|
40
|
-
</div>
|
|
41
|
-
{(!compact || timeLeft) && (
|
|
40
|
+
</div>}
|
|
41
|
+
{((!compact && goal.raised) || timeLeft) && (
|
|
42
42
|
<p className="mt-2 flex justify-between text-xs text-muted-foreground">
|
|
43
|
-
{!compact && <span>{goal.donationCount === 1 ? "1 donation" : `${goal.donationCount} donations`}</span>}
|
|
43
|
+
{!compact && goal.raised && <span>{goal.donationCount === 1 ? "1 donation" : `${goal.donationCount} donations`}</span>}
|
|
44
44
|
{timeLeft && <span>{timeLeft}</span>}
|
|
45
45
|
</p>
|
|
46
46
|
)}
|
|
@@ -33,16 +33,16 @@ function siteCurrency(): Promise<string> {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/** The campaign's currency: the metrics' when a donation exists, else the site's. */
|
|
36
|
-
async function currencyFor(metrics: Raw[]): Promise<string> {
|
|
36
|
+
async function currencyFor(metrics: Raw[] | null): Promise<string> {
|
|
37
37
|
return currencyOf(metrics) || (await siteCurrency());
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
async function metricsOf(campaignId: string): Promise<Raw[]> {
|
|
40
|
+
async function metricsOf(campaignId: string): Promise<Raw[] | null> {
|
|
41
41
|
try {
|
|
42
42
|
const res: Raw = await campaignsApi.getDonationCampaignMetrics(campaignId);
|
|
43
43
|
return (res?.currencyMetricsList ?? []) as Raw[];
|
|
44
44
|
} catch {
|
|
45
|
-
return
|
|
45
|
+
return null; // unavailable is not a successfully-read zero total
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -72,7 +72,7 @@ export async function fetchCampaign(campaignId: string): Promise<CampaignDetail
|
|
|
72
72
|
throw e;
|
|
73
73
|
}
|
|
74
74
|
if (!raw || isArchived(raw)) return null; // an archived campaign is reachable by id but never shows a form
|
|
75
|
-
const metrics = await metricsOf(campaignId);
|
|
75
|
+
const metrics = raw.campaignGoal ? await metricsOf(campaignId) : [];
|
|
76
76
|
return toDetail(raw, metrics, await currencyFor(metrics), imgSrc);
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -47,10 +47,14 @@ export async function donationCheckoutUrl(campaignId: string, input: DonationInp
|
|
|
47
47
|
const cart: Raw = await cartV2Api.createCart(cartBody(campaignId, input) as any);
|
|
48
48
|
cartId = cartIdOf(cart);
|
|
49
49
|
} catch (e) {
|
|
50
|
-
throw checkoutError(e);
|
|
50
|
+
throw checkoutError(e, "cart");
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const session: Raw = await redirects.createRedirectSession(redirectBody(cartId, campaignId, site, paths) as any);
|
|
54
|
+
return redirectUrl(session);
|
|
55
|
+
} catch (e) {
|
|
56
|
+
throw checkoutError(e, "redirect", cartId);
|
|
51
57
|
}
|
|
52
|
-
const session: Raw = await redirects.createRedirectSession(redirectBody(cartId, campaignId, site, paths) as any);
|
|
53
|
-
return redirectUrl(session);
|
|
54
58
|
}
|
|
55
59
|
|
|
56
60
|
/**
|
|
@@ -154,9 +154,9 @@ export function createDonationStore(campaign: CampaignDetail, { origin, paths }:
|
|
|
154
154
|
// stays "submitting" — the browser is leaving for the hosted checkout
|
|
155
155
|
} catch (e) {
|
|
156
156
|
submitting = false;
|
|
157
|
-
error =
|
|
157
|
+
error = "We couldn't open checkout. Please try again.";
|
|
158
158
|
emit();
|
|
159
|
-
throw e;
|
|
159
|
+
throw e; // the caller retains the original API status/body; never replace the cause
|
|
160
160
|
}
|
|
161
161
|
},
|
|
162
162
|
};
|
|
@@ -163,7 +163,7 @@ export function toGoal(campaignGoal: Raw | null | undefined, metrics: Raw[] | nu
|
|
|
163
163
|
const ended = hasEnd && end!.getTime() < now.getTime();
|
|
164
164
|
const left = hasEnd && !ended ? end!.getTime() - now.getTime() : 0;
|
|
165
165
|
return {
|
|
166
|
-
raised: m.totalAmount ? formatMoney(m.totalAmount, currency) : formatAmount(0, currency),
|
|
166
|
+
raised: metrics == null ? "" : m.totalAmount ? formatMoney(m.totalAmount, currency) : formatAmount(0, currency),
|
|
167
167
|
target: formatMoney(campaignGoal.targetAmount, currency),
|
|
168
168
|
raisedAmount,
|
|
169
169
|
targetAmount,
|
|
@@ -360,12 +360,16 @@ export function toInput(options: DonationOptions, sel: DonationSelection): Donat
|
|
|
360
360
|
*/
|
|
361
361
|
export function donationLineItem(campaignId: string, input: DonationInput): Raw {
|
|
362
362
|
if (!campaignId) throw new Error("A campaign id is required to donate.");
|
|
363
|
+
if ((typeof input.amount !== "number" && typeof input.amount !== "string") || String(input.amount).trim() === "") throw new Error("Enter a positive donation amount.");
|
|
364
|
+
const amount = Number(input.amount);
|
|
365
|
+
if (!Number.isFinite(amount) || amount <= 0) throw new Error("Enter a positive donation amount.");
|
|
366
|
+
if (!FREQUENCIES.includes(input.frequency)) throw new Error("Choose a supported donation frequency.");
|
|
363
367
|
return {
|
|
364
368
|
quantity: 1,
|
|
365
369
|
catalogReference: {
|
|
366
370
|
appId: DONATIONS_APP_ID,
|
|
367
371
|
catalogItemId: campaignId,
|
|
368
|
-
options: { amount
|
|
372
|
+
options: { amount, ...(input.frequency !== "ONE_TIME" ? { frequency: input.frequency } : {}), ...(input.coverFee ? { donorCoveringFees: true } : {}) },
|
|
369
373
|
},
|
|
370
374
|
};
|
|
371
375
|
}
|
|
@@ -424,13 +428,12 @@ export function redirectUrl(session: Raw | null | undefined): string {
|
|
|
424
428
|
return url;
|
|
425
429
|
}
|
|
426
430
|
|
|
427
|
-
/**
|
|
428
|
-
export function checkoutError(e: unknown): Error {
|
|
429
|
-
const
|
|
430
|
-
if (
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
return e instanceof Error ? e : new Error(msg || "Checkout couldn't start — please try again.");
|
|
431
|
+
/** Preserve diagnostic status/body/cause; payment setup must not be guessed from a generic failure. */
|
|
432
|
+
export function checkoutError(e: unknown, stage?: "cart" | "redirect", cartId?: string): Error & { stage?: string; cartId?: string } {
|
|
433
|
+
const error: Error & { stage?: string; cartId?: string } = e instanceof Error ? e : new Error(String(e) || "Checkout couldn't start — please try again.", { cause: e });
|
|
434
|
+
if (stage) error.stage = stage;
|
|
435
|
+
if (cartId) error.cartId = cartId;
|
|
436
|
+
return error;
|
|
434
437
|
}
|
|
435
438
|
|
|
436
439
|
// ---- the receipt ----------------------------------------------------------------------------------
|
package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
// donations (goal reached / expired) it renders `children` — your closing message — or nothing.
|
|
9
9
|
// The redirect itself is useDonation → donationCheckoutUrl; nothing here builds a URL or marks
|
|
10
10
|
// anything paid.
|
|
11
|
-
import type
|
|
11
|
+
import { useId, type ReactNode } from "react";
|
|
12
12
|
import { useDonation, type UseDonationOptions } from "../../hooks/donations/useDonation";
|
|
13
13
|
import type { CampaignDetail } from "../../wix/donations/types";
|
|
14
14
|
|
|
@@ -23,7 +23,7 @@ export interface DonateFormProps {
|
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
const choice = (selected: boolean) =>
|
|
26
|
-
`cursor-pointer rounded-md border px-4 py-3 text-sm transition-colors ${
|
|
26
|
+
`relative block cursor-pointer rounded-md border px-4 py-3 text-sm transition-colors focus-within:outline-2 focus-within:outline-offset-2 focus-within:outline-primary ${
|
|
27
27
|
selected ? "border-primary bg-primary text-primary-foreground" : "border-border bg-background text-foreground hover:bg-secondary"
|
|
28
28
|
}`;
|
|
29
29
|
|
|
@@ -36,10 +36,10 @@ export default function DonateForm({
|
|
|
36
36
|
}: DonateFormProps) {
|
|
37
37
|
const d = useDonation(campaign, options);
|
|
38
38
|
const o = campaign.options;
|
|
39
|
+
const fid = `donate-${campaign.id}-${useId()}`;
|
|
39
40
|
if (!d.available) return children ? <>{children}</> : null;
|
|
40
41
|
|
|
41
42
|
const show = (field: keyof typeof d.messages) => (d.showErrors && d.messages[field] ? d.messages[field] : null);
|
|
42
|
-
const fid = `donate-${campaign.id}`;
|
|
43
43
|
|
|
44
44
|
return (
|
|
45
45
|
<form
|
|
@@ -47,43 +47,65 @@ export default function DonateForm({
|
|
|
47
47
|
noValidate
|
|
48
48
|
onSubmit={(e) => {
|
|
49
49
|
e.preventDefault();
|
|
50
|
-
|
|
50
|
+
const form = e.currentTarget;
|
|
51
|
+
void d.donate().then(() => {
|
|
52
|
+
if (!d.valid) {
|
|
53
|
+
// Wait for the store's validation state to render; do not steal focus while typing.
|
|
54
|
+
requestAnimationFrame(() => form.querySelector<HTMLElement>('[aria-invalid="true"]')?.focus());
|
|
55
|
+
}
|
|
56
|
+
}).catch((error) => {
|
|
57
|
+
// The store shows a recoverable message; keep safe diagnostics, not donor data or tokens.
|
|
58
|
+
console.error("Donation checkout failed", {
|
|
59
|
+
stage: error?.stage ?? "checkout",
|
|
60
|
+
status: error?.status,
|
|
61
|
+
code: error?.body?.details?.applicationError?.code ?? error?.details?.applicationError?.code ?? error?.body?.code,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
51
64
|
}}
|
|
52
65
|
>
|
|
53
66
|
{o.frequencies.length > 1 && (
|
|
54
|
-
<fieldset>
|
|
67
|
+
<fieldset disabled={d.submitting}>
|
|
55
68
|
<legend className="eyebrow mb-2">How often</legend>
|
|
56
|
-
<div className="grid grid-cols-2 gap-2 sm:grid-cols-4"
|
|
69
|
+
<div className="grid grid-cols-2 gap-2 sm:grid-cols-4">
|
|
57
70
|
{o.frequencies.map((f) => (
|
|
58
|
-
<
|
|
71
|
+
<label key={f.value} className={choice(d.frequency === f.value)}>
|
|
72
|
+
<input type="radio" name={`${fid}-frequency`} value={f.value} checked={d.frequency === f.value}
|
|
73
|
+
onChange={() => d.setFrequency(f.value)} className="sr-only"
|
|
74
|
+
aria-invalid={!!show("frequency")} aria-describedby={show("frequency") ? `${fid}-frequency-error` : undefined} />
|
|
59
75
|
{f.label}
|
|
60
|
-
</
|
|
76
|
+
</label>
|
|
61
77
|
))}
|
|
62
78
|
</div>
|
|
63
|
-
{show("frequency") && <p className="mt-2 text-sm text-destructive" role="alert">{show("frequency")}</p>}
|
|
79
|
+
{show("frequency") && <p id={`${fid}-frequency-error`} className="mt-2 text-sm text-destructive" role="alert">{show("frequency")}</p>}
|
|
64
80
|
</fieldset>
|
|
65
81
|
)}
|
|
66
82
|
|
|
67
83
|
{(o.presets.length > 0 || o.customAmount.enabled) && (
|
|
68
|
-
<fieldset>
|
|
84
|
+
<fieldset disabled={d.submitting}>
|
|
69
85
|
<legend className="eyebrow mb-2">Amount</legend>
|
|
70
|
-
<div className="grid grid-cols-2 gap-2 sm:grid-cols-3"
|
|
86
|
+
<div className="grid grid-cols-2 gap-2 sm:grid-cols-3">
|
|
71
87
|
{o.presets.map((p) => {
|
|
72
88
|
const selected = !d.customMode && d.presetAmount === p.amount;
|
|
73
89
|
return (
|
|
74
|
-
<
|
|
90
|
+
<label key={p.amount} className={`${choice(selected)} text-left`}>
|
|
91
|
+
<input type="radio" name={`${fid}-amount-choice`} value={p.amount} checked={selected}
|
|
92
|
+
onChange={() => d.selectPreset(p.amount)} className="sr-only"
|
|
93
|
+
aria-invalid={!!show("amount")} aria-describedby={show("amount") ? `${fid}-amount-error` : undefined} />
|
|
75
94
|
<span className="block text-base font-semibold">{p.label}</span>
|
|
76
95
|
{p.impact && <span className={`mt-0.5 block text-xs ${selected ? "opacity-80" : "text-muted-foreground"}`}>{p.impact}</span>}
|
|
77
|
-
</
|
|
96
|
+
</label>
|
|
78
97
|
);
|
|
79
98
|
})}
|
|
80
99
|
{o.customAmount.enabled && o.presets.length > 0 && (
|
|
81
|
-
<
|
|
100
|
+
<label className={choice(d.customMode)}>
|
|
101
|
+
<input type="radio" name={`${fid}-amount-choice`} value="custom" checked={d.customMode}
|
|
102
|
+
onChange={() => d.selectCustom()} className="sr-only"
|
|
103
|
+
aria-invalid={!!show("amount")} aria-describedby={show("amount") ? `${fid}-amount-error` : undefined} />
|
|
82
104
|
Other amount
|
|
83
|
-
</
|
|
105
|
+
</label>
|
|
84
106
|
)}
|
|
85
107
|
</div>
|
|
86
|
-
{show("amount") && <p className="mt-2 text-sm text-destructive" role="alert">{show("amount")}</p>}
|
|
108
|
+
{show("amount") && <p id={`${fid}-amount-error`} className="mt-2 text-sm text-destructive" role="alert">{show("amount")}</p>}
|
|
87
109
|
{d.customMode && (
|
|
88
110
|
<div className="mt-3">
|
|
89
111
|
<label htmlFor={`${fid}-amount`} className="sr-only">
|
|
@@ -95,19 +117,20 @@ export default function DonateForm({
|
|
|
95
117
|
id={`${fid}-amount`}
|
|
96
118
|
inputMode="decimal"
|
|
97
119
|
autoComplete="off"
|
|
98
|
-
className="w-
|
|
120
|
+
className="min-w-0 flex-1 bg-transparent py-3 text-base text-foreground outline-none focus-visible:ring-2 focus-visible:ring-primary"
|
|
99
121
|
placeholder={o.customAmount.minLabel ? `${o.customAmount.minLabel} or more` : "Enter an amount"}
|
|
100
122
|
value={d.customAmount}
|
|
101
123
|
onChange={(e) => d.setCustomAmount(e.target.value)}
|
|
102
124
|
aria-invalid={!!show("customAmount")}
|
|
125
|
+
aria-describedby={show("customAmount") || o.customAmount.minLabel || o.customAmount.maxLabel ? `${fid}-custom-help` : undefined}
|
|
103
126
|
/>
|
|
104
127
|
</div>
|
|
105
128
|
{(o.customAmount.minLabel || o.customAmount.maxLabel) && !show("customAmount") && (
|
|
106
|
-
<p className="mt-1 text-xs text-muted-foreground">
|
|
129
|
+
<p id={`${fid}-custom-help`} className="mt-1 text-xs text-muted-foreground">
|
|
107
130
|
{[o.customAmount.minLabel && `Minimum ${o.customAmount.minLabel}`, o.customAmount.maxLabel && `Maximum ${o.customAmount.maxLabel}`].filter(Boolean).join(" · ")}
|
|
108
131
|
</p>
|
|
109
132
|
)}
|
|
110
|
-
{show("customAmount") && <p className="mt-1 text-sm text-destructive" role="alert">{show("customAmount")}</p>}
|
|
133
|
+
{show("customAmount") && <p id={`${fid}-custom-help`} className="mt-1 text-sm text-destructive" role="alert">{show("customAmount")}</p>}
|
|
111
134
|
</div>
|
|
112
135
|
)}
|
|
113
136
|
</fieldset>
|
|
@@ -115,7 +138,7 @@ export default function DonateForm({
|
|
|
115
138
|
|
|
116
139
|
{o.askCoverFee && (
|
|
117
140
|
<label className="flex items-start gap-3 text-sm text-foreground">
|
|
118
|
-
<input type="checkbox" className="mt-0.5" checked={d.coverFee} onChange={(e) => d.setCoverFee(e.target.checked)} />
|
|
141
|
+
<input type="checkbox" className="mt-0.5" checked={d.coverFee} disabled={d.submitting} onChange={(e) => d.setCoverFee(e.target.checked)} />
|
|
119
142
|
<span>
|
|
120
143
|
{d.feeLabel ? `Add ${d.feeLabel} to cover the processing fees` : "Cover the processing fees (2.9%)"}
|
|
121
144
|
{d.frequency && d.frequency !== "ONE_TIME" && <span className="text-muted-foreground"> — on every payment</span>}
|
|
@@ -132,14 +155,17 @@ export default function DonateForm({
|
|
|
132
155
|
id={`${fid}-note`}
|
|
133
156
|
rows={3}
|
|
134
157
|
maxLength={o.commentMaxLength}
|
|
135
|
-
className="w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground outline-none"
|
|
158
|
+
className="w-full rounded-md border border-border bg-background px-3 py-2 text-sm text-foreground outline-none focus-visible:ring-2 focus-visible:ring-primary"
|
|
136
159
|
value={d.note}
|
|
137
160
|
onChange={(e) => d.setNote(e.target.value)}
|
|
161
|
+
disabled={d.submitting}
|
|
162
|
+
aria-invalid={!!show("note")}
|
|
163
|
+
aria-describedby={`${fid}-note-hint${show("note") ? ` ${fid}-note-error` : ""}`}
|
|
138
164
|
/>
|
|
139
|
-
<p className="mt-1 text-right text-xs text-muted-foreground">
|
|
165
|
+
<p id={`${fid}-note-hint`} className="mt-1 text-right text-xs text-muted-foreground">
|
|
140
166
|
{d.note.length}/{o.commentMaxLength}
|
|
141
167
|
</p>
|
|
142
|
-
{show("note") && <p className="text-sm text-destructive" role="alert">{show("note")}</p>}
|
|
168
|
+
{show("note") && <p id={`${fid}-note-error`} className="text-sm text-destructive" role="alert">{show("note")}</p>}
|
|
143
169
|
</div>
|
|
144
170
|
)}
|
|
145
171
|
|
package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// The hosted checkout's thank-you island — wire as-is on /donate/thank-you (mount client:only: it
|
|
2
2
|
// reads the browser URL). It owns the honesty rules: landing here with `?orderId=` is Wix's
|
|
3
3
|
// success redirect, so it thanks the donor; the order's facts (name, amount, order number, paid or
|
|
4
|
-
//
|
|
4
|
+
// unconfirmed) appear only when the order could be read; a direct visit with no order id gets a neutral
|
|
5
5
|
// thank-you and a link back — never an invented receipt, never "paid" unless the order says PAID.
|
|
6
6
|
import { useDonationReceipt } from "../../hooks/donations/useDonationReceipt";
|
|
7
7
|
|
|
@@ -17,7 +17,8 @@ export default function DonationReceipt({ campaignsHref = "/donate", className =
|
|
|
17
17
|
if (!orderId) {
|
|
18
18
|
return (
|
|
19
19
|
<div className={className}>
|
|
20
|
-
<h1 className="text-2xl font-semibold tracking-tight">
|
|
20
|
+
<h1 className="text-2xl font-semibold tracking-tight">Your support matters</h1>
|
|
21
|
+
<p className="mt-3 text-sm text-muted-foreground">This page alone is not a payment confirmation. Explore a campaign to give, or check your checkout confirmation if you just returned.</p>
|
|
21
22
|
<a href={campaignsHref} className="mt-6 inline-block text-sm text-foreground underline">
|
|
22
23
|
See the campaigns
|
|
23
24
|
</a>
|
|
@@ -29,15 +30,15 @@ export default function DonationReceipt({ campaignsHref = "/donate", className =
|
|
|
29
30
|
<div className={className} aria-busy={loading}>
|
|
30
31
|
{receipt?.orderNumber && <p className="eyebrow">Order {receipt.orderNumber}</p>}
|
|
31
32
|
<h1 className="mt-2 text-2xl font-semibold tracking-tight">
|
|
32
|
-
{receipt?.donorFirstName ? `Thank you, ${receipt.donorFirstName}` : "Thank you for your donation"}
|
|
33
|
+
{receipt?.donorFirstName ? `Thank you, ${receipt.donorFirstName}` : receipt ? "Thank you for your support" : loading ? "Checking your donation" : "Your support matters"}
|
|
33
34
|
</h1>
|
|
34
35
|
{receipt && (
|
|
35
36
|
<p className="mt-3 text-sm text-muted-foreground">
|
|
36
37
|
{receipt.amount ? `Your donation of ${receipt.amount} ` : "Your donation "}
|
|
37
|
-
{receipt.paid ? "has been received." : "is
|
|
38
|
+
{receipt.paid ? "has been received." : "is not confirmed as paid. Please check your checkout confirmation."}
|
|
38
39
|
</p>
|
|
39
40
|
)}
|
|
40
|
-
{!receipt && !loading && <p className="mt-3 text-sm text-muted-foreground">
|
|
41
|
+
{!receipt && !loading && <p className="mt-3 text-sm text-muted-foreground">Donation details could not be verified here. If you completed checkout, check its confirmation before trying again.</p>}
|
|
41
42
|
<a href={campaignsHref} className="mt-6 inline-block text-sm text-muted-foreground underline">
|
|
42
43
|
Back to campaigns
|
|
43
44
|
</a>
|
package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx
CHANGED
|
@@ -33,14 +33,14 @@ export default function GoalProgress({ goal, className = "", compact = false }:
|
|
|
33
33
|
{goal.target}
|
|
34
34
|
</span>
|
|
35
35
|
</p>
|
|
36
|
-
<p className="text-sm font-semibold text-foreground">{goal.percent}%</p>
|
|
36
|
+
{goal.raised && <p className="text-sm font-semibold text-foreground">{goal.percent}%</p>}
|
|
37
37
|
</div>
|
|
38
|
-
<div className="mt-2 h-2 w-full overflow-hidden rounded-control bg-secondary" role="progressbar" aria-valuemin={0} aria-valuemax={100} aria-valuenow={width} aria-label="Progress toward the goal">
|
|
38
|
+
{goal.raised && <div className="mt-2 h-2 w-full overflow-hidden rounded-control bg-secondary" role="progressbar" aria-valuemin={0} aria-valuemax={100} aria-valuenow={width} aria-label="Progress toward the goal">
|
|
39
39
|
<div className="h-full rounded-control bg-primary transition-[width]" style={{ width: `${width}%` }} />
|
|
40
|
-
</div>
|
|
41
|
-
{(!compact || timeLeft) && (
|
|
40
|
+
</div>}
|
|
41
|
+
{((!compact && goal.raised) || timeLeft) && (
|
|
42
42
|
<p className="mt-2 flex justify-between text-xs text-muted-foreground">
|
|
43
|
-
{!compact && <span>{goal.donationCount === 1 ? "1 donation" : `${goal.donationCount} donations`}</span>}
|
|
43
|
+
{!compact && goal.raised && <span>{goal.donationCount === 1 ? "1 donation" : `${goal.donationCount} donations`}</span>}
|
|
44
44
|
{timeLeft && <span>{timeLeft}</span>}
|
|
45
45
|
</p>
|
|
46
46
|
)}
|
|
@@ -33,16 +33,16 @@ function siteCurrency(): Promise<string> {
|
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
/** The campaign's currency: the metrics' when a donation exists, else the site's. */
|
|
36
|
-
async function currencyFor(metrics: Raw[]): Promise<string> {
|
|
36
|
+
async function currencyFor(metrics: Raw[] | null): Promise<string> {
|
|
37
37
|
return currencyOf(metrics) || (await siteCurrency());
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
async function metricsOf(campaignId: string): Promise<Raw[]> {
|
|
40
|
+
async function metricsOf(campaignId: string): Promise<Raw[] | null> {
|
|
41
41
|
try {
|
|
42
42
|
const res: Raw = await campaignsApi.getDonationCampaignMetrics(campaignId);
|
|
43
43
|
return (res?.currencyMetricsList ?? []) as Raw[];
|
|
44
44
|
} catch {
|
|
45
|
-
return
|
|
45
|
+
return null; // unavailable is not a successfully-read zero total
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -72,7 +72,7 @@ export async function fetchCampaign(campaignId: string): Promise<CampaignDetail
|
|
|
72
72
|
throw e;
|
|
73
73
|
}
|
|
74
74
|
if (!raw || isArchived(raw)) return null; // an archived campaign is reachable by id but never shows a form
|
|
75
|
-
const metrics = await metricsOf(campaignId);
|
|
75
|
+
const metrics = raw.campaignGoal ? await metricsOf(campaignId) : [];
|
|
76
76
|
return toDetail(raw, metrics, await currencyFor(metrics), imgSrc);
|
|
77
77
|
}
|
|
78
78
|
|
|
@@ -47,10 +47,14 @@ export async function donationCheckoutUrl(campaignId: string, input: DonationInp
|
|
|
47
47
|
const cart: Raw = await cartV2Api.createCart(cartBody(campaignId, input) as any);
|
|
48
48
|
cartId = cartIdOf(cart);
|
|
49
49
|
} catch (e) {
|
|
50
|
-
throw checkoutError(e);
|
|
50
|
+
throw checkoutError(e, "cart");
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const session: Raw = await redirects.createRedirectSession(redirectBody(cartId, campaignId, site, paths) as any);
|
|
54
|
+
return redirectUrl(session);
|
|
55
|
+
} catch (e) {
|
|
56
|
+
throw checkoutError(e, "redirect", cartId);
|
|
51
57
|
}
|
|
52
|
-
const session: Raw = await redirects.createRedirectSession(redirectBody(cartId, campaignId, site, paths) as any);
|
|
53
|
-
return redirectUrl(session);
|
|
54
58
|
}
|
|
55
59
|
|
|
56
60
|
/**
|
|
@@ -154,9 +154,9 @@ export function createDonationStore(campaign: CampaignDetail, { origin, paths }:
|
|
|
154
154
|
// stays "submitting" — the browser is leaving for the hosted checkout
|
|
155
155
|
} catch (e) {
|
|
156
156
|
submitting = false;
|
|
157
|
-
error =
|
|
157
|
+
error = "We couldn't open checkout. Please try again.";
|
|
158
158
|
emit();
|
|
159
|
-
throw e;
|
|
159
|
+
throw e; // the caller retains the original API status/body; never replace the cause
|
|
160
160
|
}
|
|
161
161
|
},
|
|
162
162
|
};
|
|
@@ -163,7 +163,7 @@ export function toGoal(campaignGoal: Raw | null | undefined, metrics: Raw[] | nu
|
|
|
163
163
|
const ended = hasEnd && end!.getTime() < now.getTime();
|
|
164
164
|
const left = hasEnd && !ended ? end!.getTime() - now.getTime() : 0;
|
|
165
165
|
return {
|
|
166
|
-
raised: m.totalAmount ? formatMoney(m.totalAmount, currency) : formatAmount(0, currency),
|
|
166
|
+
raised: metrics == null ? "" : m.totalAmount ? formatMoney(m.totalAmount, currency) : formatAmount(0, currency),
|
|
167
167
|
target: formatMoney(campaignGoal.targetAmount, currency),
|
|
168
168
|
raisedAmount,
|
|
169
169
|
targetAmount,
|
|
@@ -360,12 +360,16 @@ export function toInput(options: DonationOptions, sel: DonationSelection): Donat
|
|
|
360
360
|
*/
|
|
361
361
|
export function donationLineItem(campaignId: string, input: DonationInput): Raw {
|
|
362
362
|
if (!campaignId) throw new Error("A campaign id is required to donate.");
|
|
363
|
+
if ((typeof input.amount !== "number" && typeof input.amount !== "string") || String(input.amount).trim() === "") throw new Error("Enter a positive donation amount.");
|
|
364
|
+
const amount = Number(input.amount);
|
|
365
|
+
if (!Number.isFinite(amount) || amount <= 0) throw new Error("Enter a positive donation amount.");
|
|
366
|
+
if (!FREQUENCIES.includes(input.frequency)) throw new Error("Choose a supported donation frequency.");
|
|
363
367
|
return {
|
|
364
368
|
quantity: 1,
|
|
365
369
|
catalogReference: {
|
|
366
370
|
appId: DONATIONS_APP_ID,
|
|
367
371
|
catalogItemId: campaignId,
|
|
368
|
-
options: { amount
|
|
372
|
+
options: { amount, ...(input.frequency !== "ONE_TIME" ? { frequency: input.frequency } : {}), ...(input.coverFee ? { donorCoveringFees: true } : {}) },
|
|
369
373
|
},
|
|
370
374
|
};
|
|
371
375
|
}
|
|
@@ -424,13 +428,12 @@ export function redirectUrl(session: Raw | null | undefined): string {
|
|
|
424
428
|
return url;
|
|
425
429
|
}
|
|
426
430
|
|
|
427
|
-
/**
|
|
428
|
-
export function checkoutError(e: unknown): Error {
|
|
429
|
-
const
|
|
430
|
-
if (
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
return e instanceof Error ? e : new Error(msg || "Checkout couldn't start — please try again.");
|
|
431
|
+
/** Preserve diagnostic status/body/cause; payment setup must not be guessed from a generic failure. */
|
|
432
|
+
export function checkoutError(e: unknown, stage?: "cart" | "redirect", cartId?: string): Error & { stage?: string; cartId?: string } {
|
|
433
|
+
const error: Error & { stage?: string; cartId?: string } = e instanceof Error ? e : new Error(String(e) || "Checkout couldn't start — please try again.", { cause: e });
|
|
434
|
+
if (stage) error.stage = stage;
|
|
435
|
+
if (cartId) error.cartId = cartId;
|
|
436
|
+
return error;
|
|
434
437
|
}
|
|
435
438
|
|
|
436
439
|
// ---- the receipt ----------------------------------------------------------------------------------
|
|
@@ -26,17 +26,17 @@ function siteCurrency(): Promise<string> {
|
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
/** The campaign's currency: the metrics' when a donation exists, else the site's. */
|
|
29
|
-
async function currencyFor(metrics: Raw[]): Promise<string> {
|
|
29
|
+
async function currencyFor(metrics: Raw[] | null): Promise<string> {
|
|
30
30
|
return currencyOf(metrics) || (await siteCurrency());
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
// GET /donation-campaigns/v2/donation-campaigns/{id}/metrics → { currencyMetricsList: [{ currencyCode, donationCount, totalAmount }] }
|
|
34
|
-
async function metricsOf(campaignId: string): Promise<Raw[]> {
|
|
34
|
+
async function metricsOf(campaignId: string): Promise<Raw[] | null> {
|
|
35
35
|
try {
|
|
36
36
|
const res = await wixRequest<Raw>(`${BASE}/${campaignId}/metrics`, { method: "GET" });
|
|
37
37
|
return (res?.currencyMetricsList ?? []) as Raw[];
|
|
38
38
|
} catch {
|
|
39
|
-
return
|
|
39
|
+
return null; // unavailable is not a successfully-read zero total
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -65,7 +65,7 @@ export async function fetchCampaign(campaignId: string): Promise<CampaignDetail
|
|
|
65
65
|
throw e;
|
|
66
66
|
}
|
|
67
67
|
if (!raw || isArchived(raw)) return null; // an archived campaign is reachable by id but never shows a form
|
|
68
|
-
const metrics = await metricsOf(campaignId);
|
|
68
|
+
const metrics = raw.campaignGoal ? await metricsOf(campaignId) : [];
|
|
69
69
|
return toDetail(raw, metrics, await currencyFor(metrics), imgSrc);
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -42,10 +42,14 @@ export async function donationCheckoutUrl(campaignId: string, input: DonationInp
|
|
|
42
42
|
const res = await wixRequest<Raw>("/ecom/v2/carts", { body: cartBody(campaignId, input) });
|
|
43
43
|
cartId = cartIdOf(res);
|
|
44
44
|
} catch (e) {
|
|
45
|
-
throw checkoutError(e);
|
|
45
|
+
throw checkoutError(e, "cart");
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const session = await wixRequest<Raw>("/headless/v1/redirect-session", { body: redirectBody(cartId, campaignId, site, paths) });
|
|
49
|
+
return redirectUrl(session);
|
|
50
|
+
} catch (e) {
|
|
51
|
+
throw checkoutError(e, "redirect", cartId);
|
|
46
52
|
}
|
|
47
|
-
const session = await wixRequest<Raw>("/headless/v1/redirect-session", { body: redirectBody(cartId, campaignId, site, paths) });
|
|
48
|
-
return redirectUrl(session);
|
|
49
53
|
}
|
|
50
54
|
|
|
51
55
|
/**
|
|
@@ -10,10 +10,14 @@ if needed, creates the campaigns, verifies each reads back, then attaches cover
|
|
|
10
10
|
node <SKILL_ROOT>/templates/donations/seed/seed-donations.mjs plan.json
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
`plan.json` is plain data — write it from the brief.
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
13
|
+
`plan.json` is plain data — write it from the brief. Read existing campaigns and confirm the target
|
|
14
|
+
site and proposed changes before seeding. For a new setup, default to one approved cause; add more
|
|
15
|
+
only when the brief names them. Suggest a small set of amounts and custom-giving rules for approval;
|
|
16
|
+
do not invent impact claims, a goal or a deadline just to exercise form branches. Configure recurring
|
|
17
|
+
giving, notes and fee coverage as intended by the owner. A frontend-only request never reseeds.
|
|
18
|
+
The example below illustrates fields, not organization facts or mandatory settings.
|
|
19
|
+
For ongoing campaign edits, use the [management recipe](../../../wix-manage/references/donations/create-and-update-donation-campaigns.md).
|
|
20
|
+
Every campaign gets a cover image — the default is an
|
|
17
21
|
`imagePrompt` (AI-generated, ~1 Wix AI credit per image, account-billed): brand-contextual — subject,
|
|
18
22
|
mood, palette, lighting — always ending "no text, no watermarks"; a real subject of the cause, not
|
|
19
23
|
abstract decoration. For an asset the user supplied use `imageMediaId` (a file already in the site's Media Manager, such as one the user uploaded there: used as it is, no copy; a `static.wixstatic.com/media/<file id>` URL of a site file counts as one), `imagePath` (a file on this machine) or
|
|
@@ -72,9 +76,10 @@ images only (`imagePath` / `imageUrl`) — never an `imagePrompt` beside supplie
|
|
|
72
76
|
|
|
73
77
|
## What the seed cannot do — tell the owner
|
|
74
78
|
|
|
75
|
-
- **
|
|
76
|
-
Payments).
|
|
77
|
-
|
|
79
|
+
- **Accepting real payments needs a payments-capable plan and a connected eligible provider**
|
|
80
|
+
(dashboard → Accept Payments). Creating a campaign, cart or redirect session is not proof that a
|
|
81
|
+
charge can succeed. Do not blame malformed cart options on premium. Recurring frequencies also
|
|
82
|
+
need a provider that supports recurring payments.
|
|
78
83
|
- The result JSON's `installed` field says whether each app install succeeded; a Donations install that
|
|
79
84
|
is refused through the installer API is added from the dashboard's App Market instead.
|
|
80
85
|
- Cover images: the update's Image shape and field-mask requirement were inferred from the SDK, not
|