@wix/agent-skills 1.33.1 → 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.
Files changed (616) hide show
  1. package/README.md +2 -0
  2. package/package.json +1 -1
  3. package/skills/wix-export/SKILL.md +83 -0
  4. package/skills/wix-harmony-editor/.publish-manifest.json +8 -0
  5. package/skills/wix-harmony-editor/COPY-SITE.md +494 -0
  6. package/skills/wix-harmony-editor/SKILL.md +317 -0
  7. package/skills/wix-harmony-editor/scripts/copy/build-description.mjs +249 -0
  8. package/skills/wix-harmony-editor/scripts/copy/check-description.mjs +225 -0
  9. package/skills/wix-harmony-editor/scripts/copy/check-mirror.mjs +89 -0
  10. package/skills/wix-harmony-editor/scripts/copy/compare-preview.mjs +76 -0
  11. package/skills/wix-harmony-editor/scripts/copy/deploy-description.mjs +212 -0
  12. package/skills/wix-harmony-editor/scripts/copy/desc-hash.mjs +44 -0
  13. package/skills/wix-harmony-editor/scripts/copy/editor-run.mjs +45 -0
  14. package/skills/wix-harmony-editor/scripts/copy/export-page.mjs +53 -0
  15. package/skills/wix-harmony-editor/scripts/copy/find-interactions.mjs +76 -0
  16. package/skills/wix-harmony-editor/scripts/copy/hide-scrollbars.mjs +16 -0
  17. package/skills/wix-harmony-editor/scripts/copy/import-media.mjs +150 -0
  18. package/skills/wix-harmony-editor/scripts/copy/link-url.mjs +27 -0
  19. package/skills/wix-harmony-editor/scripts/copy/lint-api.mjs +56 -0
  20. package/skills/wix-harmony-editor/scripts/copy/measure-source.mjs +211 -0
  21. package/skills/wix-harmony-editor/scripts/copy/merge-mirrors.mjs +29 -0
  22. package/skills/wix-harmony-editor/scripts/copy/mirror-site.mjs +92 -0
  23. package/skills/wix-harmony-editor/scripts/copy/mobile-stage.mjs +56 -0
  24. package/skills/wix-harmony-editor/scripts/copy/preview-widths.mjs +73 -0
  25. package/skills/wix-harmony-editor/scripts/copy/render-plate.mjs +67 -0
  26. package/skills/wix-harmony-editor/scripts/copy/serve-mirror.mjs +102 -0
  27. package/skills/wix-harmony-editor/scripts/copy/snapshot-capabilities.mjs +40 -0
  28. package/skills/wix-harmony-editor/scripts/copy/split-sections.mjs +191 -0
  29. package/skills/wix-harmony-editor/scripts/copy/upload-media-manager.mjs +61 -0
  30. package/skills/wix-harmony-editor/scripts/launch.sh +359 -0
  31. package/skills/wix-headless/SKILL.md +7 -2
  32. package/skills/wix-headless/references/CAPABILITIES.md +6 -1
  33. package/skills/wix-headless/references/DISCOVERY.md +2 -1
  34. package/skills/wix-headless/references/SDK_HANDOFF.md +6 -1
  35. package/skills/wix-headless/references/SEED.md +3 -2
  36. package/skills/wix-headless/references/SETUP.md +1 -0
  37. package/skills/wix-headless/references/inline-recipes/experience-donations.md +102 -0
  38. package/skills/wix-headless/references/inline-recipes/how-to-code-donations.md +146 -0
  39. package/skills/wix-headless/references/inline-recipes/setup-donations.md +15 -0
  40. package/skills/wix-headless/references/managed/CREATE.md +1 -1
  41. package/skills/wix-headless-kit/SKILL.md +110 -21
  42. package/skills/wix-headless-kit/guides/api-run.md +15 -13
  43. package/skills/wix-headless-kit/guides/existing-site.md +31 -0
  44. package/skills/wix-headless-kit/guides/migration.md +49 -17
  45. package/skills/wix-headless-kit/install/agents-md.mjs +1 -1
  46. package/skills/wix-headless-kit/install/context.mjs +61 -6
  47. package/skills/wix-headless-kit/install/pins.json +1 -1
  48. package/skills/wix-headless-kit/install/setup.mjs +107 -12
  49. package/skills/wix-headless-replatform/.publish-manifest.json +8 -0
  50. package/skills/wix-headless-replatform/SKILL.md +116 -0
  51. package/skills/wix-headless-replatform/agents/openai.yaml +6 -0
  52. package/skills/wix-headless-replatform/references/control-and-visual-fidelity-contract.md +43 -0
  53. package/skills/wix-headless-replatform/references/extraction-schema.md +187 -0
  54. package/skills/wix-headless-replatform/references/interaction-runtime-contract.md +137 -0
  55. package/skills/wix-headless-replatform/references/layout-blueprint-contract.md +41 -0
  56. package/skills/wix-headless-replatform/references/output-contract.md +93 -0
  57. package/skills/wix-headless-replatform/references/post-build-gap-contract.md +125 -0
  58. package/skills/wix-headless-replatform/references/qa-checklist.md +83 -0
  59. package/skills/wix-headless-replatform/references/safety.md +19 -0
  60. package/skills/wix-headless-replatform/references/ui-normalization-contract.md +70 -0
  61. package/skills/wix-headless-replatform/references/workflow.md +157 -0
  62. package/skills/wix-headless-replatform/registry/README.md +20 -0
  63. package/skills/wix-headless-replatform/registry/approvals/button/shadcn-default-ac60ef5.json +28 -0
  64. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/button.tsx +54 -0
  65. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/capabilities.json +60 -0
  66. package/skills/wix-headless-replatform/registry/items/button/shadcn-default-ac60ef5/contract.md +48 -0
  67. package/skills/wix-headless-replatform/registry/licenses/shadcn-ui-ac60ef5-MIT.txt +21 -0
  68. package/skills/wix-headless-replatform/registry/registry.json +36 -0
  69. package/skills/wix-headless-replatform/resources/rp-facelift/SKILL.md +32 -0
  70. package/skills/wix-headless-replatform/resources/rp-project-context/SKILL.md +62 -0
  71. package/skills/wix-headless-replatform/resources/rp-qa-gap-loop/SKILL.md +64 -0
  72. package/skills/wix-headless-replatform/resources/rp-source-evidence/SKILL.md +42 -0
  73. package/skills/wix-headless-replatform/resources/rp-ui-implementation/SKILL.md +73 -0
  74. package/skills/wix-headless-replatform/schemas/build-plan.schema.json +10 -0
  75. package/skills/wix-headless-replatform/schemas/candidate.schema.json +19 -0
  76. package/skills/wix-headless-replatform/schemas/common.schema.json +33 -0
  77. package/skills/wix-headless-replatform/schemas/decision-patch.schema.json +10 -0
  78. package/skills/wix-headless-replatform/schemas/decision-request.schema.json +10 -0
  79. package/skills/wix-headless-replatform/schemas/extraction-gap.schema.json +28 -0
  80. package/skills/wix-headless-replatform/schemas/extraction-manifest.schema.json +34 -0
  81. package/skills/wix-headless-replatform/schemas/final-report.schema.json +10 -0
  82. package/skills/wix-headless-replatform/schemas/foundation.schema.json +11 -0
  83. package/skills/wix-headless-replatform/schemas/metadata.schema.json +11 -0
  84. package/skills/wix-headless-replatform/schemas/observation-packet.schema.json +17 -0
  85. package/skills/wix-headless-replatform/schemas/page-capture.schema.json +11 -0
  86. package/skills/wix-headless-replatform/schemas/page-resolution.schema.json +33 -0
  87. package/skills/wix-headless-replatform/schemas/shared-chrome.schema.json +11 -0
  88. package/skills/wix-headless-replatform/schemas/unit.schema.json +40 -0
  89. package/skills/wix-headless-replatform/scripts/assemble-extraction.mjs +844 -0
  90. package/skills/wix-headless-replatform/scripts/benchmark-extraction.mjs +163 -0
  91. package/skills/wix-headless-replatform/scripts/browser-extraction-preflight.mjs +42 -0
  92. package/skills/wix-headless-replatform/scripts/build-extracted-homepage.mjs +228 -0
  93. package/skills/wix-headless-replatform/scripts/clear-wix-starter.mjs +87 -0
  94. package/skills/wix-headless-replatform/scripts/create-wix-project.mjs +505 -0
  95. package/skills/wix-headless-replatform/scripts/discover-urls.mjs +142 -0
  96. package/skills/wix-headless-replatform/scripts/extract-assets.mjs +140 -0
  97. package/skills/wix-headless-replatform/scripts/extract-design-system.mjs +637 -0
  98. package/skills/wix-headless-replatform/scripts/extract-interactions.mjs +1903 -0
  99. package/skills/wix-headless-replatform/scripts/extract-page.mjs +2461 -0
  100. package/skills/wix-headless-replatform/scripts/extract-seo.mjs +25 -0
  101. package/skills/wix-headless-replatform/scripts/extract-tokens.mjs +63 -0
  102. package/skills/wix-headless-replatform/scripts/finalize-extraction-report.mjs +126 -0
  103. package/skills/wix-headless-replatform/scripts/finalize-gap-review.mjs +180 -0
  104. package/skills/wix-headless-replatform/scripts/finalize-gap-review.test.mjs +98 -0
  105. package/skills/wix-headless-replatform/scripts/finalize-migration-website.mjs +103 -0
  106. package/skills/wix-headless-replatform/scripts/generate-control-state-contract.mjs +176 -0
  107. package/skills/wix-headless-replatform/scripts/generate-design-md.mjs +261 -0
  108. package/skills/wix-headless-replatform/scripts/generate-extraction-validators.mjs +25 -0
  109. package/skills/wix-headless-replatform/scripts/generate-invoice-download-backend.mjs +342 -0
  110. package/skills/wix-headless-replatform/scripts/generate-layout-blueprint.mjs +140 -0
  111. package/skills/wix-headless-replatform/scripts/generate-repeater-cms.mjs +22 -0
  112. package/skills/wix-headless-replatform/scripts/generate-route-plan.mjs +143 -0
  113. package/skills/wix-headless-replatform/scripts/generate-scene-contract.mjs +288 -0
  114. package/skills/wix-headless-replatform/scripts/generate-ui-normalization.mjs +266 -0
  115. package/skills/wix-headless-replatform/scripts/generate-visual-assets.mjs +111 -0
  116. package/skills/wix-headless-replatform/scripts/lib/browser-tooling.mjs +570 -0
  117. package/skills/wix-headless-replatform/scripts/lib/common.mjs +329 -0
  118. package/skills/wix-headless-replatform/scripts/lib/component-capabilities.mjs +121 -0
  119. package/skills/wix-headless-replatform/scripts/lib/component-registry.mjs +282 -0
  120. package/skills/wix-headless-replatform/scripts/lib/content-boundary.mjs +61 -0
  121. package/skills/wix-headless-replatform/scripts/lib/extraction-contract.mjs +374 -0
  122. package/skills/wix-headless-replatform/scripts/lib/extraction-detectors.mjs +243 -0
  123. package/skills/wix-headless-replatform/scripts/lib/extraction-validators.generated.mjs +1139 -0
  124. package/skills/wix-headless-replatform/scripts/lib/font-contract.mjs +326 -0
  125. package/skills/wix-headless-replatform/scripts/lib/frontend-automation-state.mjs +184 -0
  126. package/skills/wix-headless-replatform/scripts/lib/gap-analysis.mjs +396 -0
  127. package/skills/wix-headless-replatform/scripts/lib/html-extract.mjs +168 -0
  128. package/skills/wix-headless-replatform/scripts/lib/interaction-bootstrap.mjs +10 -0
  129. package/skills/wix-headless-replatform/scripts/lib/interaction-runtime.mjs +194 -0
  130. package/skills/wix-headless-replatform/scripts/lib/interaction-timeline.mjs +348 -0
  131. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/classifiers.mjs +141 -0
  132. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/geometry.mjs +43 -0
  133. package/skills/wix-headless-replatform/scripts/lib/layout-blueprint/vocabulary.mjs +18 -0
  134. package/skills/wix-headless-replatform/scripts/lib/ui-normalization.css +64 -0
  135. package/skills/wix-headless-replatform/scripts/optimize-svg.mjs +31 -0
  136. package/skills/wix-headless-replatform/scripts/post-build-gap.mjs +358 -0
  137. package/skills/wix-headless-replatform/scripts/provision-repeater-cms.mjs +25 -0
  138. package/skills/wix-headless-replatform/scripts/record-gap-decision.mjs +39 -0
  139. package/skills/wix-headless-replatform/scripts/replay-extraction.mjs +107 -0
  140. package/skills/wix-headless-replatform/scripts/resolve-home-page.mjs +96 -0
  141. package/skills/wix-headless-replatform/scripts/site-clone.mjs +658 -0
  142. package/skills/wix-headless-replatform/scripts/validate-font-contract.mjs +29 -0
  143. package/skills/wix-headless-replatform/scripts/verify-interactions.mjs +669 -0
  144. package/skills/wix-headless-replatform/scripts/visual-qa.mjs +370 -0
  145. package/skills/wix-headless-templates/donations/INSTRUCTIONS.md +37 -24
  146. package/skills/wix-headless-templates/donations/app/components/donations/DonateForm.tsx +49 -23
  147. package/skills/wix-headless-templates/donations/app/components/donations/DonationReceipt.tsx +6 -5
  148. package/skills/wix-headless-templates/donations/app/components/donations/GoalProgress.tsx +5 -5
  149. package/skills/wix-headless-templates/donations/app/wix/donations/campaigns.ts +4 -4
  150. package/skills/wix-headless-templates/donations/app/wix/donations/donate.ts +7 -3
  151. package/skills/wix-headless-templates/donations/app/wix/donations/donation-store.ts +2 -2
  152. package/skills/wix-headless-templates/donations/app/wix/donations/donations-core.ts +12 -9
  153. package/skills/wix-headless-templates/donations/project/src/components/donations/DonateForm.tsx +49 -23
  154. package/skills/wix-headless-templates/donations/project/src/components/donations/DonationReceipt.tsx +6 -5
  155. package/skills/wix-headless-templates/donations/project/src/components/donations/GoalProgress.tsx +5 -5
  156. package/skills/wix-headless-templates/donations/project/src/wix/donations/campaigns.ts +4 -4
  157. package/skills/wix-headless-templates/donations/project/src/wix/donations/donate.ts +7 -3
  158. package/skills/wix-headless-templates/donations/project/src/wix/donations/donation-store.ts +2 -2
  159. package/skills/wix-headless-templates/donations/project/src/wix/donations/donations-core.ts +12 -9
  160. package/skills/wix-headless-templates/donations/rest/campaigns.ts +4 -4
  161. package/skills/wix-headless-templates/donations/rest/donate.ts +7 -3
  162. package/skills/wix-headless-templates/donations/seed/SEED.md +12 -7
  163. package/skills/wix-headless-templates/donations/tests/donation-contract.test.mjs +71 -0
  164. package/skills/wix-headless-templates/donations/tests/donation-form.test.cjs +137 -0
  165. package/skills/wix-headless-templates/restaurants/INSTRUCTIONS.md +28 -14
  166. package/skills/wix-headless-templates/restaurants/app/components/restaurants/OrderCartDrawer.tsx +87 -5
  167. package/skills/wix-headless-templates/restaurants/app/hooks/restaurants/useOrderCart.ts +9 -1
  168. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/order-store.ts +33 -4
  169. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering-core.ts +100 -5
  170. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/ordering.ts +101 -15
  171. package/skills/wix-headless-templates/restaurants/app/wix/restaurants/types.ts +35 -1
  172. package/skills/wix-headless-templates/restaurants/project/src/components/restaurants/OrderCartDrawer.tsx +87 -5
  173. package/skills/wix-headless-templates/restaurants/project/src/hooks/restaurants/useOrderCart.ts +9 -1
  174. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/order-store.ts +33 -4
  175. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering-core.ts +100 -5
  176. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/ordering.ts +101 -15
  177. package/skills/wix-headless-templates/restaurants/project/src/wix/restaurants/types.ts +35 -1
  178. package/skills/wix-headless-templates/restaurants/rest/ordering.ts +91 -14
  179. package/skills/wix-import/SKILL.md +90 -0
  180. package/skills/wix-manage/SKILL.md +13 -3
  181. package/skills/wix-manage/references/dashboard-navigation/dashboard-navigation.md +2 -1
  182. package/skills/wix-manage/references/dashboard-navigation/routes.json +249 -0
  183. package/skills/wix-manage/references/donations/create-and-update-donation-campaigns.md +139 -0
  184. package/skills/wix-manage/references/events/events-dashboard-navigation.md +81 -0
  185. package/skills/wix-manage/references/sites/manage-oauth-apps.md +1 -0
  186. package/skills/wix-manage/references/sites/upload-static-site.md +127 -8
  187. package/skills/wix-replatform/.publish-manifest.json +5 -5
  188. package/skills/wix-replatform/CLI.md +162 -0
  189. package/skills/wix-replatform/README.md +52 -0
  190. package/skills/wix-replatform/SKILL.md +229 -684
  191. package/skills/wix-replatform/console/account.css +1 -0
  192. package/skills/wix-replatform/console/app.css +1 -0
  193. package/skills/wix-replatform/console/app.js +117 -0
  194. package/skills/wix-replatform/console/index.html +4 -0
  195. package/skills/wix-replatform/console/json.css +11 -0
  196. package/skills/wix-replatform/lib/agent-adapters/index.js +71 -0
  197. package/skills/wix-replatform/lib/app-page-routing.js +75 -0
  198. package/skills/wix-replatform/lib/artifact-freshness.js +11 -1
  199. package/skills/wix-replatform/lib/blocked-data-requests.js +427 -0
  200. package/skills/wix-replatform/lib/census-reconciliation.js +426 -0
  201. package/skills/wix-replatform/lib/completion-report.js +1393 -13
  202. package/skills/wix-replatform/lib/config-env.js +85 -11
  203. package/skills/wix-replatform/lib/confirmed-pictures.js +212 -0
  204. package/skills/wix-replatform/lib/dependency-readiness.js +423 -0
  205. package/skills/wix-replatform/lib/dependency-recovery.js +21 -0
  206. package/skills/wix-replatform/lib/destination-choice.js +163 -0
  207. package/skills/wix-replatform/lib/destination-handoff.js +62 -0
  208. package/skills/wix-replatform/lib/destination-http.js +81 -0
  209. package/skills/wix-replatform/lib/destination-route.js +98 -0
  210. package/skills/wix-replatform/lib/destination.js +919 -0
  211. package/skills/wix-replatform/lib/discovered-census.js +231 -0
  212. package/skills/wix-replatform/lib/discovered-set-status.js +255 -0
  213. package/skills/wix-replatform/lib/document-url-guard.js +203 -0
  214. package/skills/wix-replatform/lib/entity-qa-attestation.js +339 -0
  215. package/skills/wix-replatform/lib/entity-verification.js +18 -0
  216. package/skills/wix-replatform/lib/execution-capability.js +120 -0
  217. package/skills/wix-replatform/lib/execution-log.js +170 -0
  218. package/skills/wix-replatform/lib/execution-manifest.js +20 -2
  219. package/skills/wix-replatform/lib/execution-state.js +22 -0
  220. package/skills/wix-replatform/lib/expectations-ledger.js +96 -0
  221. package/skills/wix-replatform/lib/generated-plugin-handoff.js +140 -0
  222. package/skills/wix-replatform/lib/import-readiness-contract.js +23 -0
  223. package/skills/wix-replatform/lib/import-recovery.js +800 -6
  224. package/skills/wix-replatform/lib/imported-redirect-targets.js +608 -0
  225. package/skills/wix-replatform/lib/internal-link-reconciliation.js +166 -0
  226. package/skills/wix-replatform/lib/link-audit.js +173 -0
  227. package/skills/wix-replatform/lib/link-census.js +194 -0
  228. package/skills/wix-replatform/lib/link-plan.js +148 -0
  229. package/skills/wix-replatform/lib/link-verification.js +274 -0
  230. package/skills/wix-replatform/lib/link-write-journal.js +42 -0
  231. package/skills/wix-replatform/lib/local-state.js +869 -30
  232. package/skills/wix-replatform/lib/member-completion.js +658 -0
  233. package/skills/wix-replatform/lib/member-crosswalk.js +69 -0
  234. package/skills/wix-replatform/lib/member-outcome-registry.js +265 -0
  235. package/skills/wix-replatform/lib/migration-completion.js +311 -0
  236. package/skills/wix-replatform/lib/operator-identity.js +47 -0
  237. package/skills/wix-replatform/lib/orchestration-decisions.js +248 -0
  238. package/skills/wix-replatform/lib/orchestration-preflight.js +401 -19
  239. package/skills/wix-replatform/lib/orchestration-router.js +608 -32
  240. package/skills/wix-replatform/lib/orchestration-state.js +188 -12
  241. package/skills/wix-replatform/lib/order-reference-readiness.js +30 -0
  242. package/skills/wix-replatform/lib/payments-outcome-registry.js +200 -0
  243. package/skills/wix-replatform/lib/plugin-cms-fallback.js +618 -0
  244. package/skills/wix-replatform/lib/preservation-approval-stamp.js +54 -0
  245. package/skills/wix-replatform/lib/product-media-deferral.js +96 -0
  246. package/skills/wix-replatform/lib/progress-log.js +19 -3
  247. package/skills/wix-replatform/lib/read-back-approval.js +184 -0
  248. package/skills/wix-replatform/lib/read-back-comparison.js +136 -0
  249. package/skills/wix-replatform/lib/read-back-contract.js +243 -0
  250. package/skills/wix-replatform/lib/read-back-extract.js +118 -0
  251. package/skills/wix-replatform/lib/read-back-gate.js +734 -0
  252. package/skills/wix-replatform/lib/read-back-reads.js +94 -0
  253. package/skills/wix-replatform/lib/read-back-state.js +107 -0
  254. package/skills/wix-replatform/lib/read-back-summary.js +81 -0
  255. package/skills/wix-replatform/lib/rerun-conflicts.js +334 -0
  256. package/skills/wix-replatform/lib/run-controller.js +401 -0
  257. package/skills/wix-replatform/lib/seo-outcome-registry.js +45 -0
  258. package/skills/wix-replatform/lib/setup-verification.js +148 -0
  259. package/skills/wix-replatform/lib/source-access.js +231 -0
  260. package/skills/wix-replatform/lib/source-coverage.js +1130 -0
  261. package/skills/wix-replatform/lib/source-secrets.js +277 -0
  262. package/skills/wix-replatform/lib/structured-link-patch.js +59 -0
  263. package/skills/wix-replatform/lib/task-state.js +110 -0
  264. package/skills/wix-replatform/lib/url-preservation-report.js +319 -0
  265. package/skills/wix-replatform/lib/url-preservation-state.js +349 -1
  266. package/skills/wix-replatform/lib/url-redirect-plan.js +728 -0
  267. package/skills/wix-replatform/lib/url-verification.js +315 -0
  268. package/skills/wix-replatform/lib/user-action-effects.js +42 -0
  269. package/skills/wix-replatform/lib/user-actions.js +264 -0
  270. package/skills/wix-replatform/lib/website-handoff.js +1220 -0
  271. package/skills/wix-replatform/lib/wix-client-callers.js +54 -0
  272. package/skills/wix-replatform/lib/wix-dashboard-url.js +35 -0
  273. package/skills/wix-replatform/lib/write-verification-state.js +92 -0
  274. package/skills/wix-replatform/lib/write-verification.js +274 -0
  275. package/skills/wix-replatform/resources/rp-destination/SKILL.md +137 -0
  276. package/skills/wix-replatform/resources/rp-discovery/SKILL.md +189 -16
  277. package/skills/wix-replatform/resources/rp-discovery/scripts/promote-source-coverage.js +47 -0
  278. package/skills/wix-replatform/resources/rp-execute-import/SKILL.md +869 -29
  279. package/skills/wix-replatform/resources/rp-execute-import/scripts/shipping-estimate-audit.js +70 -0
  280. package/skills/wix-replatform/resources/rp-execute-setup/SKILL.md +195 -29
  281. package/skills/wix-replatform/resources/rp-execute-setup/scripts/execute-setup.js +442 -0
  282. package/skills/wix-replatform/resources/rp-execution-policy/SKILL.md +112 -0
  283. package/skills/wix-replatform/resources/rp-execution-policy/lib/coupon-currency-plan-report.js +143 -0
  284. package/skills/wix-replatform/resources/rp-execution-policy/lib/payments-report.js +244 -0
  285. package/skills/wix-replatform/resources/rp-import-codegen/SKILL.md +2082 -38
  286. package/skills/wix-replatform/resources/rp-mapper/SKILL.md +528 -11
  287. package/skills/wix-replatform/resources/rp-mapper/lib/structure-bridge-planning.js +303 -0
  288. package/skills/wix-replatform/resources/rp-mapper/scripts/coverage-reconcile.js +88 -0
  289. package/skills/wix-replatform/resources/rp-mapper/wix-business-solutions-taxonomy.md +6 -5
  290. package/skills/wix-replatform/resources/rp-preflight/SKILL.md +40 -0
  291. package/skills/wix-replatform/resources/rp-project-intake/SKILL.md +55 -0
  292. package/skills/wix-replatform/resources/rp-quick-runtime/SKILL.md +60 -0
  293. package/skills/wix-replatform/resources/rp-quick-runtime/lib/import-progress.js +89 -0
  294. package/skills/wix-replatform/resources/rp-quick-runtime/lib/limit-recovery.js +36 -0
  295. package/skills/wix-replatform/resources/rp-quick-shopify/SKILL.md +123 -0
  296. package/skills/wix-replatform/resources/rp-quick-shopify/quick-mode.json +124 -0
  297. package/skills/wix-replatform/resources/rp-quick-shopify/scripts/quick-mode.js +522 -0
  298. package/skills/wix-replatform/resources/rp-quick-woocommerce/SKILL.md +56 -0
  299. package/skills/wix-replatform/resources/rp-quick-woocommerce/quick-mode.json +91 -0
  300. package/skills/wix-replatform/resources/rp-quick-woocommerce/scripts/quick-mode.js +255 -0
  301. package/skills/wix-replatform/resources/rp-setup-discovery/SKILL.md +80 -10
  302. package/skills/wix-replatform/resources/rp-setup-discovery/scripts/quick-setup-plan.js +44 -0
  303. package/skills/wix-replatform/resources/rp-source-csv/SKILL.md +3 -0
  304. package/skills/wix-replatform/resources/rp-source-csv/lib/csv-fileset.js +0 -0
  305. package/skills/wix-replatform/resources/rp-source-csv/scripts/csv-discovery.js +21 -1
  306. package/skills/wix-replatform/resources/rp-source-inputs/SKILL.md +66 -0
  307. package/skills/wix-replatform/resources/rp-source-sfcc/SKILL.md +153 -0
  308. package/skills/wix-replatform/resources/rp-source-shopify/SKILL.md +394 -0
  309. package/skills/wix-replatform/resources/rp-source-shopify/lib/discovery-reads.js +200 -0
  310. package/skills/wix-replatform/resources/rp-source-shopify/lib/import-findings.js +34 -0
  311. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk-sqlite-worker.js +44 -0
  312. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-bulk.js +1470 -0
  313. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-cli.js +446 -0
  314. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-gift-cards.js +474 -0
  315. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-protected-fields.js +879 -0
  316. package/skills/wix-replatform/resources/rp-source-shopify/lib/shopify-session.js +426 -0
  317. package/skills/wix-replatform/resources/rp-source-shopify/queries/articles.graphql +24 -0
  318. package/skills/wix-replatform/resources/rp-source-shopify/queries/blogs.graphql +18 -0
  319. package/skills/wix-replatform/resources/rp-source-shopify/queries/collections.graphql +40 -0
  320. package/skills/wix-replatform/resources/rp-source-shopify/queries/customers.graphql +76 -0
  321. package/skills/wix-replatform/resources/rp-source-shopify/queries/delivery-profiles.graphql +51 -0
  322. package/skills/wix-replatform/resources/rp-source-shopify/queries/discounts.graphql +35 -0
  323. package/skills/wix-replatform/resources/rp-source-shopify/queries/files.graphql +20 -0
  324. package/skills/wix-replatform/resources/rp-source-shopify/queries/gift-cards.graphql +18 -0
  325. package/skills/wix-replatform/resources/rp-source-shopify/queries/inventory.graphql +31 -0
  326. package/skills/wix-replatform/resources/rp-source-shopify/queries/locations.graphql +21 -0
  327. package/skills/wix-replatform/resources/rp-source-shopify/queries/menus.graphql +21 -0
  328. package/skills/wix-replatform/resources/rp-source-shopify/queries/metaobjects.graphql +30 -0
  329. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-core.graphql +150 -0
  330. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-fulfillments.graphql +36 -0
  331. package/skills/wix-replatform/resources/rp-source-shopify/queries/orders-refunds.graphql +48 -0
  332. package/skills/wix-replatform/resources/rp-source-shopify/queries/pages.graphql +20 -0
  333. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-address.graphql +8 -0
  334. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-email.graphql +6 -0
  335. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-name.graphql +8 -0
  336. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-customers-phone.graphql +8 -0
  337. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-address.graphql +12 -0
  338. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-email.graphql +6 -0
  339. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-name.graphql +13 -0
  340. package/skills/wix-replatform/resources/rp-source-shopify/queries/probe-orders-phone.graphql +13 -0
  341. package/skills/wix-replatform/resources/rp-source-shopify/queries/products.graphql +73 -0
  342. package/skills/wix-replatform/resources/rp-source-shopify/queries/url-redirects.graphql +13 -0
  343. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-discovery.js +693 -0
  344. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-extract.js +283 -0
  345. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-gift-card-remedy.js +191 -0
  346. package/skills/wix-replatform/resources/rp-source-shopify/scripts/shopify-session-check.js +115 -0
  347. package/skills/wix-replatform/resources/rp-source-shopify/source-schema.example.json +201 -0
  348. package/skills/wix-replatform/resources/rp-source-wordpress/PLUGIN-READ-PLANS.md +146 -0
  349. package/skills/wix-replatform/resources/rp-source-wordpress/SKILL.md +736 -22
  350. package/skills/wix-replatform/resources/rp-source-wordpress/lib/blocked-data-handlers.js +73 -0
  351. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.js +115 -0
  352. package/skills/wix-replatform/resources/rp-source-wordpress/lib/checkout-field-csv-parser.test-fixture.js +91 -0
  353. package/skills/wix-replatform/resources/rp-source-wordpress/lib/coupon-discovery.js +440 -0
  354. package/skills/wix-replatform/resources/rp-source-wordpress/lib/currency-gate.js +125 -0
  355. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.js +252 -0
  356. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-source-keys.json +183 -0
  357. package/skills/wix-replatform/resources/rp-source-wordpress/lib/gateway-summary.mjs +333 -0
  358. package/skills/wix-replatform/resources/rp-source-wordpress/lib/invoice-discovery.js +426 -0
  359. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-disposition.js +400 -0
  360. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-entity-read-plan.js +633 -0
  361. package/skills/wix-replatform/resources/rp-source-wordpress/lib/plugin-knowledge.js +1127 -0
  362. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.js +194 -0
  363. package/skills/wix-replatform/resources/rp-source-wordpress/lib/refund-corroboration.json +100 -0
  364. package/skills/wix-replatform/resources/rp-source-wordpress/lib/sampled-ids-batch.js +157 -0
  365. package/skills/wix-replatform/resources/rp-source-wordpress/lib/secret-value-guard.js +234 -0
  366. package/skills/wix-replatform/resources/rp-source-wordpress/lib/store-currency.js +101 -0
  367. package/skills/wix-replatform/resources/rp-source-wordpress/lib/structure-bridge-reader.js +755 -0
  368. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.js +1074 -0
  369. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wix-wp-plugin-v2-client.test-fixture.js +149 -0
  370. package/skills/wix-replatform/resources/rp-source-wordpress/lib/woo-inventory.js +25 -0
  371. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-http.js +204 -9
  372. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-image-url.js +186 -0
  373. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-plugin-detect.js +1422 -0
  374. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-redirect-sources.js +343 -0
  375. package/skills/wix-replatform/resources/rp-source-wordpress/lib/wp-route-classifier.js +262 -26
  376. package/skills/wix-replatform/resources/rp-source-wordpress/lib/yoast-product-seo-evidence.js +272 -0
  377. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/README.md +373 -0
  378. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/advanced-custom-fields.json +101 -0
  379. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/back-in-stock-notifier-for-woocommerce.json +81 -0
  380. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/capabilities-pending-decision.json +128 -0
  381. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/cms-fallback-eligible.json +18 -0
  382. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/contact-form-7.json +104 -0
  383. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/facebook-for-woocommerce.json +44 -0
  384. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/fingerprint-aliases.json +49 -0
  385. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/free-gifts-for-woocommerce.json +94 -0
  386. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/index.json +863 -0
  387. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mailpoet.json +52 -0
  388. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/membership-for-woocommerce.json +161 -0
  389. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/mwb-bookings-for-woocommerce.json +180 -0
  390. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/no-migration-needed.json +286 -0
  391. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pricing-deals-for-woocommerce.json +79 -0
  392. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/product-extras-for-woocommerce.json +120 -0
  393. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/pw-woocommerce-gift-cards.json +128 -0
  394. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/requires-development.json +88 -0
  395. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seo-by-rank-math.json +80 -0
  396. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/seriously-simple-podcasting.json +46 -0
  397. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/strong-testimonials.json +55 -0
  398. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/subscriptions-for-woocommerce.json +99 -0
  399. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/tablepress.json +55 -0
  400. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/the-events-calendar.json +160 -0
  401. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/ti-woocommerce-wishlist.json +81 -0
  402. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-checkout-field-editor-pro.json +60 -0
  403. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-discount-rules.json +74 -0
  404. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woo-product-bundle.json +75 -0
  405. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-gift-cards.json +60 -0
  406. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-other-payment-gateway.json +44 -0
  407. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-pdf-invoices-packing-slips.json +57 -0
  408. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-product-addon.json +141 -0
  409. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/woocommerce-progressive-discounts.json +54 -0
  410. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wordpress-seo.json +158 -0
  411. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpc-composite-products.json +97 -0
  412. package/skills/wix-replatform/resources/rp-source-wordpress/plugins/wpforms-lite.json +86 -0
  413. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/capture-store-settings.js +90 -0
  414. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge-validate.js +51 -0
  415. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/plugin-knowledge.js +103 -0
  416. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-discovery.js +1668 -33
  417. package/skills/wix-replatform/resources/rp-source-wordpress/scripts/wp-plugin-inventory.js +273 -0
  418. package/skills/wix-replatform/resources/rp-source-wordpress/secret-value-patterns.v1.json +11 -0
  419. package/skills/wix-replatform/resources/rp-source-wordpress/sub-parts.json +13 -0
  420. package/skills/wix-replatform/resources/rp-target-wix/SKILL.md +446 -32
  421. package/skills/wix-replatform/resources/rp-target-wix/app-page-routing-capabilities.json +36 -0
  422. package/skills/wix-replatform/resources/rp-target-wix/domains/README.md +38 -2
  423. package/skills/wix-replatform/resources/rp-target-wix/domains/SERVICE-PLUGINS.md +322 -0
  424. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/docs-survey.json +70 -0
  425. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/domain.json +19 -9
  426. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/category.json +42 -8
  427. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/comment.json +54 -8
  428. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/post.json +66 -10
  429. package/skills/wix-replatform/resources/rp-target-wix/domains/blog/entities/tag.json +38 -7
  430. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/docs-survey.json +332 -0
  431. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/domain.json +75 -0
  432. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/booking.json +181 -0
  433. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service-add-on.json +130 -0
  434. package/skills/wix-replatform/resources/rp-target-wix/domains/bookings/entities/service.json +180 -0
  435. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/docs-survey.json +161 -0
  436. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/domain.json +15 -4
  437. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/collection.json +39 -7
  438. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/data-item.json +47 -8
  439. package/skills/wix-replatform/resources/rp-target-wix/domains/cms/entities/reference.json +7 -1
  440. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/docs-survey.json +204 -0
  441. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/domain.json +17 -4
  442. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/contact.json +159 -15
  443. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/email-subscription.json +80 -12
  444. package/skills/wix-replatform/resources/rp-target-wix/domains/crm/entities/label.json +48 -8
  445. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/docs-survey.json +306 -0
  446. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/domain.json +30 -7
  447. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/delivery-profile.json +171 -0
  448. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/discount-rule.json +182 -0
  449. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-applied-discount.json +129 -0
  450. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-invoice-document.json +192 -0
  451. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item-options.json +123 -0
  452. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-line-item.json +60 -12
  453. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-merchant-note.json +112 -0
  454. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-payment.json +191 -0
  455. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order-refund.json +140 -13
  456. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/order.json +383 -18
  457. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/pickup-location.json +122 -0
  458. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/shipping-option.json +98 -0
  459. package/skills/wix-replatform/resources/rp-target-wix/domains/ecom/entities/wishlist-item.json +86 -0
  460. package/skills/wix-replatform/resources/rp-target-wix/domains/events/docs-survey.json +128 -0
  461. package/skills/wix-replatform/resources/rp-target-wix/domains/events/domain.json +38 -0
  462. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/category.json +73 -0
  463. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/event.json +107 -0
  464. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/registration-form.json +89 -0
  465. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/rsvp.json +118 -0
  466. package/skills/wix-replatform/resources/rp-target-wix/domains/events/entities/ticket-definition.json +93 -0
  467. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/docs-survey.json +86 -0
  468. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/domain.json +56 -0
  469. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form-submission.json +121 -0
  470. package/skills/wix-replatform/resources/rp-target-wix/domains/forms/entities/form.json +134 -0
  471. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/docs-survey.json +41 -0
  472. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/domain.json +50 -0
  473. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card-product.json +87 -0
  474. package/skills/wix-replatform/resources/rp-target-wix/domains/gift-cards/entities/gift-card.json +130 -0
  475. package/skills/wix-replatform/resources/rp-target-wix/domains/index.json +914 -24
  476. package/skills/wix-replatform/resources/rp-target-wix/domains/media/docs-survey.json +41 -0
  477. package/skills/wix-replatform/resources/rp-target-wix/domains/media/domain.json +14 -4
  478. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-file.json +45 -8
  479. package/skills/wix-replatform/resources/rp-target-wix/domains/media/entities/media-folder.json +41 -7
  480. package/skills/wix-replatform/resources/rp-target-wix/domains/members/docs-survey.json +119 -0
  481. package/skills/wix-replatform/resources/rp-target-wix/domains/members/domain.json +13 -3
  482. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/badge.json +41 -7
  483. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/custom-field.json +82 -0
  484. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member-about.json +77 -0
  485. package/skills/wix-replatform/resources/rp-target-wix/domains/members/entities/member.json +165 -13
  486. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/docs-survey.json +41 -0
  487. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/domain.json +46 -0
  488. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan-order.json +137 -0
  489. package/skills/wix-replatform/resources/rp-target-wix/domains/pricing-plans/entities/plan.json +133 -0
  490. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/docs-survey.json +7 -0
  491. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/domain.json +36 -0
  492. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/amazon-shop-connect.json +71 -0
  493. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/ebay-shop-connect.json +67 -0
  494. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/google-youtube-connect.json +72 -0
  495. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/meta-catalog-connect.json +74 -0
  496. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/pinterest-catalog-connect.json +69 -0
  497. package/skills/wix-replatform/resources/rp-target-wix/domains/sales-channels/entities/tiktok-catalog-connect.json +61 -0
  498. package/skills/wix-replatform/resources/rp-target-wix/domains/schema.json +28 -1
  499. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/docs-survey.json +109 -0
  500. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/domain.json +73 -0
  501. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/item-seo-tags.json +148 -0
  502. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/seo-pattern.json +91 -0
  503. package/skills/wix-replatform/resources/rp-target-wix/domains/seo/entities/site-seo-tags.json +79 -0
  504. package/skills/wix-replatform/resources/rp-target-wix/domains/site/docs-survey.json +32 -0
  505. package/skills/wix-replatform/resources/rp-target-wix/domains/site/domain.json +49 -0
  506. package/skills/wix-replatform/resources/rp-target-wix/domains/site/entities/business-contact.json +103 -0
  507. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/docs-survey.json +203 -0
  508. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/domain.json +27 -10
  509. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/back-in-stock-request.json +119 -0
  510. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/brand.json +111 -0
  511. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/category.json +52 -8
  512. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/coupon.json +214 -10
  513. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/inventory-item.json +93 -13
  514. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-customization.json +111 -0
  515. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product-tag.json +52 -10
  516. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/product.json +145 -14
  517. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/promotion.json +84 -0
  518. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/review.json +178 -0
  519. package/skills/wix-replatform/resources/rp-target-wix/domains/stores/entities/subscription-product.json +87 -0
  520. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/docs-survey.json +106 -0
  521. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/domain.json +64 -0
  522. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/manual-tax-mapping.json +119 -0
  523. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-group.json +94 -0
  524. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-region.json +113 -0
  525. package/skills/wix-replatform/resources/rp-target-wix/domains/tax/entities/tax-settings.json +65 -0
  526. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-author-attribution.js +165 -0
  527. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-client.js +60 -0
  528. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-duplicates.js +201 -0
  529. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-ledger.js +306 -0
  530. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-report.js +229 -0
  531. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build-stage.js +55 -0
  532. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-build.js +715 -0
  533. package/skills/wix-replatform/resources/rp-target-wix/lib/blog-post-media.js +567 -0
  534. package/skills/wix-replatform/resources/rp-target-wix/lib/bulk-results.js +73 -0
  535. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-extended-fields.js +194 -0
  536. package/skills/wix-replatform/resources/rp-target-wix/lib/contact-import.js +133 -0
  537. package/skills/wix-replatform/resources/rp-target-wix/lib/contract-ledger.js +13 -4
  538. package/skills/wix-replatform/resources/rp-target-wix/lib/coupon-redemption-drift.js +491 -0
  539. package/skills/wix-replatform/resources/rp-target-wix/lib/customer-member.js +104 -0
  540. package/skills/wix-replatform/resources/rp-target-wix/lib/data-extension-schema.js +673 -0
  541. package/skills/wix-replatform/resources/rp-target-wix/lib/domain-knowledge.js +453 -2
  542. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-balance-reconciliation.js +119 -0
  543. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-build.js +566 -0
  544. package/skills/wix-replatform/resources/rp-target-wix/lib/gift-card-redemption-build.js +249 -0
  545. package/skills/wix-replatform/resources/rp-target-wix/lib/order-applied-discount-build.js +63 -0
  546. package/skills/wix-replatform/resources/rp-target-wix/lib/order-buyer.js +187 -0
  547. package/skills/wix-replatform/resources/rp-target-wix/lib/order-channel-build.js +64 -0
  548. package/skills/wix-replatform/resources/rp-target-wix/lib/order-history.js +1027 -0
  549. package/skills/wix-replatform/resources/rp-target-wix/lib/order-invoice-contract.js +90 -0
  550. package/skills/wix-replatform/resources/rp-target-wix/lib/order-payment-mapping.js +420 -0
  551. package/skills/wix-replatform/resources/rp-target-wix/lib/pricing-plan-definition.js +177 -0
  552. package/skills/wix-replatform/resources/rp-target-wix/lib/product-import.js +151 -0
  553. package/skills/wix-replatform/resources/rp-target-wix/lib/product-seo.js +723 -0
  554. package/skills/wix-replatform/resources/rp-target-wix/lib/seo-redirects.js +353 -0
  555. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-build.js +1437 -0
  556. package/skills/wix-replatform/resources/rp-target-wix/lib/shipping-option-stage.js +354 -0
  557. package/skills/wix-replatform/resources/rp-target-wix/lib/store-config-build.js +134 -0
  558. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-category-attach.js +221 -0
  559. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-inventory.js +248 -0
  560. package/skills/wix-replatform/resources/rp-target-wix/lib/stores-verification.js +86 -3
  561. package/skills/wix-replatform/resources/rp-target-wix/lib/tax-build.js +231 -0
  562. package/skills/wix-replatform/resources/rp-target-wix/lib/url-mapper-transport.js +28 -0
  563. package/skills/wix-replatform/resources/rp-target-wix/lib/value-utils.js +14 -0
  564. package/skills/wix-replatform/resources/rp-target-wix/lib/variant-correlation.js +34 -0
  565. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-build.js +166 -15
  566. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-target-spec.js +19 -2
  567. package/skills/wix-replatform/resources/rp-target-wix/lib/wix-writers.js +4079 -257
  568. package/skills/wix-replatform/resources/rp-target-wix/lib/write-verification.js +3 -0
  569. package/skills/wix-replatform/resources/rp-target-wix/scripts/docs-survey-sync.js +150 -0
  570. package/skills/wix-replatform/resources/rp-target-wix/scripts/domain-knowledge-validate.js +40 -2
  571. package/skills/wix-replatform/resources/rp-target-wix/scripts/verify-stores.js +6 -1
  572. package/skills/wix-replatform/resources/rp-telemetry/SKILL.md +148 -8
  573. package/skills/wix-replatform/resources/rp-telemetry/lib/bi-sink.js +83 -15
  574. package/skills/wix-replatform/resources/rp-telemetry/lib/telemetry-recorder.js +1119 -215
  575. package/skills/wix-replatform/resources/rp-telemetry/lib/transcript-digest.js +318 -0
  576. package/skills/wix-replatform/resources/rp-telemetry/scripts/meter-from-audit.js +2 -2
  577. package/skills/wix-replatform/resources/rp-telemetry/scripts/rp-telemetry.js +106 -4
  578. package/skills/wix-replatform/resources/rp-website-continuation/SKILL.md +94 -0
  579. package/skills/wix-replatform/scripts/census-reconciliation.js +25 -0
  580. package/skills/wix-replatform/scripts/cms-fallback.js +89 -0
  581. package/skills/wix-replatform/scripts/discovered-census.js +26 -0
  582. package/skills/wix-replatform/scripts/discovered-set-status.js +33 -0
  583. package/skills/wix-replatform/scripts/entity-qa-attestation.js +130 -0
  584. package/skills/wix-replatform/scripts/execution-health-check.js +415 -0
  585. package/skills/wix-replatform/scripts/execution-manifest-validate.js +1 -1
  586. package/skills/wix-replatform/scripts/execution-state-prepare.js +1 -1
  587. package/skills/wix-replatform/scripts/expectations-ledger.js +44 -0
  588. package/skills/wix-replatform/scripts/import-contract-verify.js +183 -0
  589. package/skills/wix-replatform/scripts/internal-link-audit.js +90 -0
  590. package/skills/wix-replatform/scripts/item-seo-tags-verify.js +205 -0
  591. package/skills/wix-replatform/scripts/migration-completion.js +76 -0
  592. package/skills/wix-replatform/scripts/orchestration-preflight.js +21 -2
  593. package/skills/wix-replatform/scripts/orchestration-route.js +32 -1
  594. package/skills/wix-replatform/scripts/orchestration-state.js +146 -10
  595. package/skills/wix-replatform/scripts/read-back-gate.js +175 -0
  596. package/skills/wix-replatform/scripts/replatform-console.js +146 -0
  597. package/skills/wix-replatform/scripts/replatform.js +436 -0
  598. package/skills/wix-replatform/scripts/source-secrets.js +77 -0
  599. package/skills/wix-replatform/scripts/url-redirects.js +286 -0
  600. package/skills/wix-replatform/scripts/user-action.js +58 -0
  601. package/skills/wix-replatform/scripts/website-handoff-generate.js +64 -0
  602. package/skills/wix-replatform/scripts/wix-dashboard-url.js +54 -0
  603. package/skills/wix-replatform/scripts/wix-destination.js +143 -0
  604. package/skills/wix-replatform/scripts/wix-headless-scaffold.js +762 -0
  605. package/skills/wix-vibe-headless/SKILL.md +7 -3
  606. package/skills/wix-vibe-headless/install/deploy.cjs +61 -34
  607. package/skills/wix-vibe-headless/platforms/base44.md +1 -0
  608. package/skills/wix-vibe-headless/references/donations/INSTRUCTIONS.md +88 -0
  609. package/skills/wix-vibe-headless/references/donations/app/rest/wix-donations.js +112 -0
  610. package/skills/wix-vibe-headless/references/donations/seed/SEED.md +11 -0
  611. package/skills/wix-vibe-headless/references/donations/tests/donations.test.mjs +258 -0
  612. package/skills/wix-vibe-headless/references/restaurants/INSTRUCTIONS.md +5 -2
  613. package/skills/wix-vibe-headless/references/restaurants/app/context/OrderCartContext.jsx +4 -1
  614. package/skills/wix-vibe-headless/references/restaurants/app/rest/wix-restaurants-ordering.js +67 -3
  615. package/skills/wix-vibe-headless/references/shared/app/rest/wix-client.js +4 -3
  616. package/skills/wix-replatform/resources/rp-target-wix/SPEC-product-reviews-and-blog-authorship.md +0 -330
@@ -1,15 +1,16 @@
1
1
  // Online-ordering rules and DTO mapping — transport-agnostic, imported by both ./ordering.ts (SDK)
2
2
  // and the REST twin in templates/restaurants/rest/ordering.ts (fetch). The restaurant cart rides
3
3
  // on the eCom current cart (Cart V2); what makes a line a RESTAURANT line is the catalogReference
4
- // built here: the Orders app id plus options { operationId, menuId, sectionId } and, exactly as
4
+ // built here: the Orders app id plus options { operationId, menuId, menuSectionId } (sectionId is
5
+ // sent too; Restaurants' checkout check reads menuSectionId) and, exactly as
5
6
  // Wix's own ordering code sends them, the visitor's choices: options.priceVariant { id,
6
7
  // formattedPrice }, options.modifierGroups [{ id, modifiers: [{ id, price, formattedPrice }] }],
7
8
  // options.specialRequests. Raw entities carry `_id` (SDK) or `id` (REST). Has its own formatMoney
8
9
  // (a copy of ../money.ts) so it stands alone when stripped. Imports are type-only except the zone
9
10
  // helpers from ./time-core (deployed beside this file).
10
- import type { FulfillmentMethodInfo, MenuItem, MenuOrderingInfo, OrderCart, OrderLine, OrderSelection, OrderingStatus, SiteMoney, WeeklyWindow } from "./types";
11
+ import type { DeliveryAddress, FulfillmentChoice, FulfillmentMethodInfo, FulfillmentTime, MenuItem, MenuOrderingInfo, OrderCart, OrderLine, OrderSelection, OrderingStatus, SiteMoney, WeeklyWindow } from "./types";
11
12
  import type { ImgSrc, Raw } from "./menu-core";
12
- import { zonedMinutes, zonedParts } from "./time-core";
13
+ import { zonedDayKey, zonedMinutes, zonedParts } from "./time-core";
13
14
 
14
15
  /** The Restaurants Orders app id — every restaurant cart line's catalogReference.appId. */
15
16
  export const RESTAURANTS_ORDERS_APP_ID = "9a5d83fd-8570-482e-81ab-cfa88942ee60";
@@ -169,6 +170,98 @@ export function toFulfillmentMethods(raws: Raw[], fulfillmentIds: string[], mone
169
170
  }));
170
171
  }
171
172
 
173
+ // ---- fulfillment choice ----------------------------------------------------------------------------------
174
+ // Restaurants reads the order's fulfillment from the cart's delivery method code, and the hosted
175
+ // checkout offers no pickup/delivery choice until one is set: "<TYPE>|ASAP" or
176
+ // "<TYPE>|<startEpochMs>|<endEpochMs>" for a scheduled slot.
177
+
178
+ /** The cart delivery-method code for a choice (no time → ASAP). */
179
+ export function fulfillmentCode(choice: Pick<FulfillmentChoice, "type" | "time">): string {
180
+ if (choice.time && choice.time.type !== choice.type) throw new Error("The chosen time is for a different fulfillment type.");
181
+ return choice.time?.code ?? `${choice.type}|ASAP`;
182
+ }
183
+
184
+ const epochMs = (iso: unknown): number => new Date(String(iso ?? "")).getTime();
185
+
186
+ /**
187
+ * The operation's time slots → FulfillmentTime[] (ASAP first, then earliest first). `asapSlots` is
188
+ * the first-available response (one ASAP entry per type), `daySlots` a per-date response; both carry
189
+ * `timeslotsPerFulfillmentType` (the API spells the type field `fulfilmentType`). The calls return
190
+ * only orderable slots (blocked ones are left out), so there is nothing to filter.
191
+ */
192
+ export function toFulfillmentTimes(asapSlots: Raw | null | undefined, daySlots: Raw | null | undefined): FulfillmentTime[] {
193
+ const out: FulfillmentTime[] = [];
194
+ const seen = new Set<string>();
195
+ for (const raw of [...((asapSlots?.timeslotsPerFulfillmentType ?? []) as Raw[]), ...((daySlots?.timeslotsPerFulfillmentType ?? []) as Raw[])]) {
196
+ const type = (raw.fulfilmentType ?? raw.fulfillmentType) === "DELIVERY" ? "DELIVERY" : "PICKUP";
197
+ const slot: Raw = raw.timeSlot ?? {};
198
+ const start = epochMs(slot.startTime), end = epochMs(slot.endTime ?? slot.startTime);
199
+ if (!Number.isFinite(start) || !Number.isFinite(end)) continue;
200
+ const asap = slot.orderSchedulingType === "ASAP";
201
+ const code = asap ? `${type}|ASAP` : `${type}|${start}|${end}`;
202
+ if (seen.has(code)) continue;
203
+ seen.add(code);
204
+ out.push({ type, code, asap, startIso: new Date(start).toISOString(), endIso: new Date(end).toISOString() });
205
+ }
206
+ return out.sort((a, b) => Number(b.asap) - Number(a.asap) || a.startIso.localeCompare(b.startIso));
207
+ }
208
+
209
+ /** The per-date slots query for a "YYYY-MM-DD" day at the restaurant (`date.day`, `date.month`, `date.year`). */
210
+ export function slotsDateQuery(dayKey: string): Record<string, string> {
211
+ const [year, month, day] = dayKey.split("-").map(Number);
212
+ return { "date.day": String(day), "date.month": String(month), "date.year": String(year) };
213
+ }
214
+
215
+ /**
216
+ * The time-slot calls' `deliveryAddress.*` query for a delivery address, so the delivery slots are
217
+ * those of the methods that deliver there ({} when there's no street or city yet).
218
+ */
219
+ export function slotsAddressQuery(address: DeliveryAddress | undefined, region: { country: string; subdivision: string }): Record<string, string> {
220
+ if (!address?.addressLine?.trim() || !address.city?.trim()) return {};
221
+ const a = fulfillmentAddress({ type: "DELIVERY", address }, region) as DeliveryAddress;
222
+ const q: Record<string, string> = {};
223
+ for (const [k, v] of Object.entries(a)) if (v) q[`deliveryAddress.${k}`] = String(v);
224
+ return q;
225
+ }
226
+
227
+ /** Today at the restaurant, "YYYY-MM-DD" (the operation's timezone; "" → the visitor's). */
228
+ export const restaurantToday = (timeZone: string, now: Date = new Date()): string => zonedDayKey(now, timeZone);
229
+
230
+ /**
231
+ * The restaurant's country and subdivision ("US-CA"), from its pickup address or its delivery
232
+ * area's center. The cart needs a country before ANY delivery method — pickup included — is
233
+ * accepted (DELIVERY_METHOD_MISSING_ADDRESS), and Wix pre-fills one only from the visitor's location.
234
+ */
235
+ export function toRestaurantRegion(rawMethods: Raw[]): { country: string; subdivision: string } {
236
+ for (const m of rawMethods) {
237
+ const a: Raw = m.pickupOptions?.address ?? m.deliveryOptions?.deliveryArea?.radiusOptions?.centerPointAddress ?? {};
238
+ if (!a.country) continue;
239
+ const sub = String(a.subdivision ?? "");
240
+ return { country: a.country, subdivision: sub && !sub.includes("-") ? `${a.country}-${sub}` : sub };
241
+ }
242
+ return { country: "", subdivision: "" };
243
+ }
244
+
245
+ /**
246
+ * The address a choice puts on the cart: the delivery address with the restaurant's country and
247
+ * subdivision filled in, or for pickup just the restaurant's country. Refuses a delivery choice
248
+ * without the fields Restaurants requires (street, city, country).
249
+ */
250
+ export function fulfillmentAddress(choice: FulfillmentChoice, region: { country: string; subdivision: string }): DeliveryAddress | { country: string; subdivision?: string } {
251
+ if (choice.type !== "DELIVERY") {
252
+ if (!region.country) throw new Error("Pickup isn't set up for online orders. Choose delivery.");
253
+ return { country: region.country, ...(region.subdivision ? { subdivision: region.subdivision } : {}) };
254
+ }
255
+ const a = choice.address;
256
+ const country = a?.country?.trim() || region.country;
257
+ const subdivision = a?.subdivision?.trim() || (country === region.country ? region.subdivision : "");
258
+ if (!a?.addressLine?.trim() || !a.city?.trim() || !country) throw new Error("Enter a delivery address: street and city.");
259
+ return { ...a, country, ...(subdivision ? { subdivision } : {}) };
260
+ }
261
+
262
+ /** The message for a delivery method the cart refused: the address is outside every delivery area. */
263
+ export const NOT_DELIVERABLE = "We don't deliver to this address. Choose pickup or another address.";
264
+
172
265
  // ---- cart --------------------------------------------------------------------------------------------------------
173
266
 
174
267
  export function toOrderLine(raw: Raw, currency: string, imgSrc: ImgSrc): OrderLine {
@@ -192,10 +285,11 @@ export function toOrderLine(raw: Raw, currency: string, imgSrc: ImgSrc): OrderLi
192
285
  export function toOrderCart(raw: Raw | null, subtotal: string, imgSrc: ImgSrc): OrderCart {
193
286
  const currency = cartCurrency(raw);
194
287
  const lines = ((raw?.lineItems ?? []) as Raw[]).map((l) => toOrderLine(l, currency, imgSrc));
195
- return { lines, itemCount: lines.reduce((n, l) => n + l.quantity, 0), subtotal, currency };
288
+ const delivery: Raw = raw?.deliveryInfo ?? {};
289
+ return { lines, itemCount: lines.reduce((n, l) => n + l.quantity, 0), subtotal, currency, fulfillmentCode: delivery.method?.code ?? "" };
196
290
  }
197
291
 
198
- /** The after-discount subtotal from a cart estimate; "" when unknown. Fees, tax, delivery resolve at checkout. */
292
+ /** The after-discount subtotal from a cart estimate; "" when unknown. Fees and tax resolve at checkout. */
199
293
  export function estimateSubtotal(estimate: Raw | null | undefined, raw: Raw): string {
200
294
  return formatMoney(estimate?.summary?.priceSummary?.subtotal, cartCurrency(raw));
201
295
  }
@@ -243,6 +337,7 @@ export function orderCatalogItem(
243
337
  options: {
244
338
  operationId: ctx.operationId,
245
339
  menuId: ctx.menuId,
340
+ menuSectionId: ctx.sectionId, // what Restaurants' checkout validates the dish against
246
341
  sectionId: ctx.sectionId,
247
342
  ...(variant ? { priceVariant: { id: variant.variantId, formattedPrice: variant.price } } : {}),
248
343
  ...(modifierGroups.length ? { modifierGroups } : {}),
@@ -4,11 +4,13 @@
4
4
  // the transport only. Copy as-is; extend by calling these exports, never by editing them. The
5
5
  // request shapes are exact and rewriting them is how carts break:
6
6
  // - the catalogReference appId is the ORDERS app (9a5d83fd-…), never the Stores id;
7
- // - options MUST carry operationId + menuId + sectionId (all three);
7
+ // - options MUST carry operationId + menuId + menuSectionId (sectionId rides along);
8
8
  // - the visitor's choices ride in options.priceVariant / options.modifierGroups /
9
- // options.specialRequests, the keys Wix's own ordering code sends (built in ordering-core).
9
+ // options.specialRequests, the keys Wix's own ordering code sends (built in ordering-core);
10
+ // - the fulfillment (pickup/delivery + time) is the cart's delivery method code, set BEFORE the
11
+ // checkout redirect: the hosted checkout has no picker for it and refuses the order without it.
10
12
  // Failures are loud: throws on a missing or paused ordering operation, an invalid selection,
11
- // unavailable lines, and an empty order at checkout — surface the message, don't swallow it.
13
+ // unavailable lines, an undeliverable address, and an empty order at checkout — surface the message.
12
14
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/operations/list-operations.md
13
15
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/menu-ordering-settings/query-menu-ordering-settings.md
14
16
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/fulfillment-methods/list-fulfillment-methods.md
@@ -17,6 +19,10 @@
17
19
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/add-line-items-to-current-cart.md
18
20
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/update-line-items.md
19
21
  // docs: https://dev.wix.com/docs/api-reference/business-management/headless/redirects/create-redirect-session.md
22
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/set-delivery-method-for-current-cart.md
23
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/update-current-cart.md
24
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/operations/calculate-available-time-slots-for-date.md
25
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/operations/calculate-first-available-time-slot-per-fulfillment-type.md
20
26
  import {
21
27
  operations as operationsModule,
22
28
  fulfillmentMethods as fulfillmentModule,
@@ -25,25 +31,33 @@ import {
25
31
  } from "@wix/restaurants";
26
32
  import { currentCartV2 } from "@wix/ecom";
27
33
  import { redirects as redirectsModule } from "@wix/redirects";
28
- import { wixModule } from "../sdk";
34
+ import { wixFetch, wixModule } from "../sdk";
29
35
  import { imgSrc } from "../media";
30
36
  import { fetchSiteMoney } from "./menu";
31
37
  import { initialSelection, nextCursor, validateSelection, type Raw } from "./menu-core";
32
38
  import {
39
+ NOT_DELIVERABLE,
33
40
  RESTAURANTS_ORDERS_APP_ID,
34
41
  assertOrderAdded,
35
42
  assertOrderCheckoutable,
36
43
  assertOrderContext,
37
44
  assertOrderable,
38
45
  estimateSubtotal,
46
+ fulfillmentAddress,
47
+ fulfillmentCode,
39
48
  orderCatalogItem,
40
49
  rawId,
41
50
  resolveOperation,
51
+ restaurantToday,
52
+ slotsAddressQuery,
53
+ slotsDateQuery,
42
54
  toFulfillmentMethods,
55
+ toFulfillmentTimes,
43
56
  toMenuOrderingMap,
44
57
  toOrderCart,
58
+ toRestaurantRegion,
45
59
  } from "./ordering-core";
46
- import type { FulfillmentMethodInfo, MenuItem, MenuOrderingInfo, OrderCart, OrderSelection, OrderingStatus } from "./types";
60
+ import type { DeliveryAddress, FulfillmentChoice, FulfillmentMethodInfo, FulfillmentTime, MenuItem, MenuOrderingInfo, OrderCart, OrderSelection, OrderingStatus } from "./types";
47
61
 
48
62
  export { RESTAURANTS_ORDERS_APP_ID };
49
63
 
@@ -98,12 +112,24 @@ export async function fetchMenuOrdering(): Promise<Record<string, MenuOrderingIn
98
112
 
99
113
  /**
100
114
  * The operation's enabled pickup/delivery methods (operation.fulfillmentIds only), fees and
101
- * minimums formatted in the site currency — for display; the buyer picks one on the hosted checkout.
115
+ * minimums formatted in the site currency — what the fulfillment picker offers.
102
116
  */
103
117
  export async function fetchFulfillmentMethods(): Promise<FulfillmentMethodInfo[]> {
104
118
  try {
105
- const [status, money] = await Promise.all([resolveOrdering(), fetchSiteMoney()]);
119
+ const [status, money, raws] = await Promise.all([resolveOrdering(), fetchSiteMoney(), listFulfillmentRaws()]);
120
+ return toFulfillmentMethods(raws, status.fulfillmentIds, money);
121
+ } catch {
122
+ return []; // ordering still works without the list (pickup ASAP)
123
+ }
124
+ }
125
+
126
+ // The operation's raw fulfillment methods (operation.fulfillmentIds only), read once per session.
127
+ let fulfillmentRawsPromise: Promise<Raw[]> | null = null;
128
+ function listFulfillmentRaws(): Promise<Raw[]> {
129
+ fulfillmentRawsPromise ??= (async () => {
130
+ const status = await resolveOrdering();
106
131
  if (!status.fulfillmentIds.length) return [];
132
+ const wanted = new Set(status.fulfillmentIds);
107
133
  const raws: Raw[] = [];
108
134
  let cursor: string | null = null;
109
135
  do {
@@ -111,10 +137,12 @@ export async function fetchFulfillmentMethods(): Promise<FulfillmentMethodInfo[]
111
137
  raws.push(...((res.fulfillmentMethods ?? []) as Raw[]));
112
138
  cursor = nextCursor(res);
113
139
  } while (cursor);
114
- return toFulfillmentMethods(raws, status.fulfillmentIds, money);
115
- } catch {
116
- return []; // display nicety — ordering still works without the list
117
- }
140
+ return raws.filter((m) => wanted.has(rawId(m)));
141
+ })().catch((e) => {
142
+ fulfillmentRawsPromise = null; // transient failure — allow a retry on the next call
143
+ throw e;
144
+ });
145
+ return fulfillmentRawsPromise;
118
146
  }
119
147
 
120
148
  // A line's attributes.image may come back absent — join the menu items' images by the line's
@@ -212,17 +240,75 @@ export async function removeOrderLine(lineItemId: string): Promise<OrderCart> {
212
240
  return readCartWithSubtotal(cart as Raw);
213
241
  }
214
242
 
243
+ // A raw Cart V2 / operations call under the SDK's auth, for the few calls this transport makes
244
+ // by path. Throws an Error carrying the API's code (`.code`).
245
+ async function wixJson(path: string, init?: RequestInit): Promise<Raw> {
246
+ const res = await wixFetch(path, { ...init, headers: { "Content-Type": "application/json", ...(init?.headers ?? {}) } });
247
+ const body: Raw = await res.json().catch(() => ({}));
248
+ if (!res.ok) {
249
+ const err = new Error(body?.message || `Request failed (${res.status})`) as Error & { code?: string };
250
+ err.code = body?.details?.applicationError?.code;
251
+ throw err;
252
+ }
253
+ return body;
254
+ }
255
+
256
+ /**
257
+ * The times the order can be fulfilled at: ASAP for each type, then the scheduled slots of `dayKey`
258
+ * ("YYYY-MM-DD" at the restaurant; default today), ASAP first. Pass the delivery `address` once the
259
+ * visitor has entered it: the delivery times are then those of the methods that deliver there (none
260
+ * when no method does). [] when there is no operation. Pass the chosen entry to setOrderFulfillment as `time`.
261
+ */
262
+ export async function fetchFulfillmentTimes(dayKey?: string, address?: DeliveryAddress): Promise<FulfillmentTime[]> {
263
+ const { operationId, timeZone } = await resolveOrdering();
264
+ if (!operationId) return [];
265
+ const base = `/restaurants-operations/v1/operations/${operationId}`;
266
+ const where = slotsAddressQuery(address, address ? toRestaurantRegion(await listFulfillmentRaws()) : { country: "", subdivision: "" });
267
+ const day = new URLSearchParams({ ...slotsDateQuery(dayKey ?? restaurantToday(timeZone)), ...where });
268
+ const first = new URLSearchParams(where).toString();
269
+ const [asap, slots] = await Promise.all([
270
+ wixJson(`${base}/first-available-time-slot-per-fulfillment-type${first ? `?${first}` : ""}`, { method: "GET" }),
271
+ wixJson(`${base}/available-time-slots-per-date?${day}`, { method: "GET" }),
272
+ ]);
273
+ return toFulfillmentTimes(asap, slots);
274
+ }
275
+
276
+ /**
277
+ * Set how and when the order is fulfilled: pickup or delivery, a time from fetchFulfillmentTimes
278
+ * (omitted → ASAP), and for delivery the address (street, city; country and subdivision default to
279
+ * the restaurant's). Pickup puts the restaurant's country on the cart, which Wix requires before
280
+ * any delivery method. Throws NOT_DELIVERABLE when the address is outside every delivery area.
281
+ */
282
+ export async function setOrderFulfillment(choice: FulfillmentChoice): Promise<OrderCart> {
283
+ const address = fulfillmentAddress(choice, toRestaurantRegion(await listFulfillmentRaws()));
284
+ await wixJson("/ecom/v2/carts/current", { method: "PATCH", body: JSON.stringify({ cart: { deliveryInfo: { address } } }) });
285
+ try {
286
+ const res = await wixJson("/ecom/v2/carts/current/set-delivery-method", { method: "POST", body: JSON.stringify({ deliveryMethod: { code: fulfillmentCode(choice) } }) });
287
+ return readCartWithSubtotal(res.cart ?? null);
288
+ } catch (e) {
289
+ if ((e as { code?: string }).code === "DELIVERY_METHOD_NOT_FOUND") {
290
+ throw new Error(choice.type === "DELIVERY" ? NOT_DELIVERABLE : "This pickup time isn't available. Choose another time.");
291
+ }
292
+ throw e;
293
+ }
294
+ }
295
+
215
296
  /**
216
297
  * Start the Wix-hosted checkout for the current order and return the URL to navigate to.
217
- * The cart's id IS the checkout id — no separate checkout-creation call. Fulfillment
218
- * (pickup/delivery + time) and payment are collected on the hosted page. Call from the
219
- * browser: the return origin must be window.location.origin (https), never a server-derived
220
- * request origin (http behind the proxy → the return redirect 403s).
298
+ * The cart's id IS the checkout id — no separate checkout-creation call. The fulfillment must be
299
+ * on the cart first (setOrderFulfillment); a cart with none gets pickup ASAP. Payment is collected
300
+ * on the hosted page. Call from the browser: the return origin must be window.location.origin
301
+ * (https), never a server-derived request origin (http behind the proxy → the return redirect 403s).
221
302
  */
222
303
  export async function orderCheckoutUrl(): Promise<string> {
223
304
  const { cart } = await cartApi.getCurrentCart();
224
305
  const raw = cart as Raw;
225
306
  assertOrderCheckoutable(raw);
307
+ if (!raw.deliveryInfo?.method?.code) {
308
+ await setOrderFulfillment({ type: "PICKUP" }).catch(() => {
309
+ throw new Error("Choose pickup or delivery before checkout.");
310
+ });
311
+ }
226
312
  const origin = typeof window !== "undefined" ? window.location.origin : "";
227
313
  const session = await redirects.createRedirectSession({
228
314
  ecomCheckout: { checkoutId: rawId(raw) },
@@ -190,7 +190,7 @@ export interface MenuOrderingInfo {
190
190
  };
191
191
  }
192
192
 
193
- /** A pickup/delivery method the operation offers (the buyer picks one on the hosted checkout). */
193
+ /** A pickup/delivery method the operation offers (display: name, fee, minimum). */
194
194
  export interface FulfillmentMethodInfo {
195
195
  id: string;
196
196
  type: "PICKUP" | "DELIVERY";
@@ -203,6 +203,38 @@ export interface FulfillmentMethodInfo {
203
203
  minOrderPriceAmount: string;
204
204
  }
205
205
 
206
+ /**
207
+ * A time the order can be fulfilled at, from the operation's time slots. `code` is what the cart's
208
+ * delivery method takes ("PICKUP|ASAP", or "PICKUP|<startMs>|<endMs>" for a scheduled slot).
209
+ */
210
+ export interface FulfillmentTime {
211
+ type: "PICKUP" | "DELIVERY";
212
+ code: string;
213
+ asap: boolean;
214
+ /** ISO start/end (equal for a point in time); render in OrderingStatus.timeZone. */
215
+ startIso: string;
216
+ endIso: string;
217
+ }
218
+
219
+ /**
220
+ * A delivery address. country (ISO-3166 alpha-2) and subdivision ("US-CA") default to the
221
+ * restaurant's when omitted — delivery is local.
222
+ */
223
+ export interface DeliveryAddress {
224
+ addressLine: string;
225
+ city: string;
226
+ postalCode?: string;
227
+ country?: string;
228
+ subdivision?: string;
229
+ }
230
+
231
+ /** The visitor's fulfillment: pickup or delivery, a time (omitted → ASAP), and the address for delivery. */
232
+ export interface FulfillmentChoice {
233
+ type: "PICKUP" | "DELIVERY";
234
+ time?: FulfillmentTime;
235
+ address?: DeliveryAddress;
236
+ }
237
+
206
238
  export interface OrderLine {
207
239
  /** The cart line id — what update/remove take (NOT the menu item id). */
208
240
  lineItemId: string;
@@ -227,6 +259,8 @@ export interface OrderCart {
227
259
  /** Formatted subtotal (after discounts) — from the cart estimate, not hand-summed. */
228
260
  subtotal: string;
229
261
  currency: string;
262
+ /** The fulfillment code set on the cart ("PICKUP|ASAP", …); "" when none is set yet. */
263
+ fulfillmentCode: string;
230
264
  }
231
265
 
232
266
  /** A custom question the owner added to the reservation form. */
@@ -2,35 +2,49 @@
2
2
  // app/wix/restaurants/ordering.ts. Same exports, same OrderCart/OrderLine DTOs; rules and mappers
3
3
  // from ordering-core (the SAME file the SDK transport uses, deployed flat next to this one). The
4
4
  // request shapes are exact and rewriting them is how carts break: the Orders app id, options
5
- // { operationId, menuId, sectionId } — all three — and the visitor's choices in
5
+ // { operationId, menuId, menuSectionId } (sectionId rides along) and the visitor's choices in
6
6
  // options.priceVariant / options.modifierGroups / options.specialRequests, the keys Wix's own
7
- // ordering sends. Failures are loud: a missing or paused operation, an invalid selection, an
8
- // unavailable line, an empty order at checkout all throw — surface the message.
7
+ // ordering sends; and the fulfillment (pickup/delivery + time) as the cart's delivery method code,
8
+ // set BEFORE the checkout redirect — the hosted checkout has no picker for it and refuses the order
9
+ // without it. Failures are loud: a missing or paused operation, an invalid selection, an
10
+ // unavailable line, an undeliverable address, an empty order at checkout all throw — surface the message.
9
11
  // All calls run with the visitor token: the cart is the token's (see ./client).
10
12
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/operations/list-operations.md
11
13
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/menu-ordering-settings/query-menu-ordering-settings.md
12
14
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/fulfillment-methods/list-fulfillment-methods.md
13
15
  // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/add-line-items-to-current-cart.md
14
16
  // docs: https://dev.wix.com/docs/api-reference/business-management/headless/redirects/create-redirect-session.md
17
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/set-delivery-method-for-current-cart.md
18
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/e-commerce/purchase-flow/cart-v2/update-current-cart.md
19
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/operations/calculate-available-time-slots-for-date.md
20
+ // docs: https://dev.wix.com/docs/api-reference/business-solutions/restaurants/online-orders/operations/calculate-first-available-time-slot-per-fulfillment-type.md
15
21
  import { WixApiError, wixRequest } from "../../shared/rest/client.js";
16
22
  import { imgSrc } from "../../shared/rest/media.js";
17
23
  import { fetchSiteMoney } from "./menu.js";
18
24
  import { initialSelection, nextCursor, validateSelection, type Raw } from "../app/wix/restaurants/menu-core.js";
19
25
  import {
26
+ NOT_DELIVERABLE,
20
27
  RESTAURANTS_ORDERS_APP_ID,
21
28
  assertOrderAdded,
22
29
  assertOrderCheckoutable,
23
30
  assertOrderContext,
24
31
  assertOrderable,
25
32
  estimateSubtotal,
33
+ fulfillmentAddress,
34
+ fulfillmentCode,
26
35
  orderCatalogItem,
27
36
  rawId,
28
37
  resolveOperation,
38
+ restaurantToday,
39
+ slotsAddressQuery,
40
+ slotsDateQuery,
29
41
  toFulfillmentMethods,
42
+ toFulfillmentTimes,
30
43
  toMenuOrderingMap,
31
44
  toOrderCart,
45
+ toRestaurantRegion,
32
46
  } from "../app/wix/restaurants/ordering-core.js";
33
- import type { FulfillmentMethodInfo, MenuItem, MenuOrderingInfo, OrderCart, OrderSelection, OrderingStatus } from "../app/wix/restaurants/types.js";
47
+ import type { DeliveryAddress, FulfillmentChoice, FulfillmentMethodInfo, FulfillmentTime, MenuItem, MenuOrderingInfo, OrderCart, OrderSelection, OrderingStatus } from "../app/wix/restaurants/types.js";
34
48
 
35
49
  export { RESTAURANTS_ORDERS_APP_ID };
36
50
 
@@ -86,8 +100,20 @@ export async function fetchMenuOrdering(): Promise<Record<string, MenuOrderingIn
86
100
  */
87
101
  export async function fetchFulfillmentMethods(): Promise<FulfillmentMethodInfo[]> {
88
102
  try {
89
- const [status, money] = await Promise.all([resolveOrdering(), fetchSiteMoney()]);
103
+ const [status, money, raws] = await Promise.all([resolveOrdering(), fetchSiteMoney(), listFulfillmentRaws()]);
104
+ return toFulfillmentMethods(raws, status.fulfillmentIds, money);
105
+ } catch {
106
+ return []; // ordering still works without the list (pickup ASAP)
107
+ }
108
+ }
109
+
110
+ // The operation's raw fulfillment methods (operation.fulfillmentIds only), read once per session.
111
+ let fulfillmentRawsPromise: Promise<Raw[]> | null = null;
112
+ function listFulfillmentRaws(): Promise<Raw[]> {
113
+ fulfillmentRawsPromise ??= (async () => {
114
+ const status = await resolveOrdering();
90
115
  if (!status.fulfillmentIds.length) return [];
116
+ const wanted = new Set(status.fulfillmentIds);
91
117
  const raws: Raw[] = [];
92
118
  let cursor: string | null = null;
93
119
  do {
@@ -95,10 +121,12 @@ export async function fetchFulfillmentMethods(): Promise<FulfillmentMethodInfo[]
95
121
  raws.push(...((res?.fulfillmentMethods ?? []) as Raw[]));
96
122
  cursor = nextCursor(res);
97
123
  } while (cursor);
98
- return toFulfillmentMethods(raws, status.fulfillmentIds, money);
99
- } catch {
100
- return []; // display nicety — ordering still works without the list
101
- }
124
+ return raws.filter((m) => wanted.has(rawId(m)));
125
+ })().catch((e) => {
126
+ fulfillmentRawsPromise = null; // transient failure — allow a retry on the next call
127
+ throw e;
128
+ });
129
+ return fulfillmentRawsPromise;
102
130
  }
103
131
 
104
132
  // A line's attributes.image may come back absent — join the menu items' images by the line's
@@ -165,7 +193,7 @@ export async function fetchOrderCart(): Promise<OrderCart> {
165
193
  * the dish can't be ordered, a modifier rule fails, or the line is refused (a refused add still returns 200).
166
194
  * POST /ecom/v2/carts/current/add-line-items
167
195
  * { catalogItems: [{ quantity, catalogReference: { catalogItemId, appId: <Orders app>, options: {
168
- * operationId, menuId, sectionId, priceVariant?: { id, formattedPrice },
196
+ * operationId, menuId, menuSectionId, sectionId, priceVariant?: { id, formattedPrice },
169
197
  * modifierGroups?: [{ id, modifiers: [{ id, price, formattedPrice? }] }], specialRequests? } } }] }
170
198
  */
171
199
  export async function addToOrder(
@@ -202,17 +230,66 @@ export async function removeOrderLine(lineItemId: string): Promise<OrderCart> {
202
230
  return readCartWithSubtotal(res?.cart ?? null);
203
231
  }
204
232
 
233
+ /**
234
+ * The times the order can be fulfilled at: ASAP for each type, then the scheduled slots of `dayKey`
235
+ * ("YYYY-MM-DD" at the restaurant; default today), ASAP first. Pass the delivery `address` once the
236
+ * visitor has entered it: the delivery times are then those of the methods that deliver there (none
237
+ * when no method does). [] when there is no operation. Pass the chosen entry to setOrderFulfillment as `time`.
238
+ * GET /restaurants-operations/v1/operations/{id}/first-available-time-slot-per-fulfillment-type[?deliveryAddress.*]
239
+ * GET /restaurants-operations/v1/operations/{id}/available-time-slots-per-date?date.day=&date.month=&date.year=[&deliveryAddress.*]
240
+ * deliveryAddress.addressLine / .city / .postalCode / .country / .subdivision
241
+ */
242
+ export async function fetchFulfillmentTimes(dayKey?: string, address?: DeliveryAddress): Promise<FulfillmentTime[]> {
243
+ const { operationId, timeZone } = await resolveOrdering();
244
+ if (!operationId) return [];
245
+ const base = `/restaurants-operations/v1/operations/${operationId}`;
246
+ const where = slotsAddressQuery(address, address ? toRestaurantRegion(await listFulfillmentRaws()) : { country: "", subdivision: "" });
247
+ const [asap, slots] = await Promise.all([
248
+ wixRequest<Raw>(`${base}/first-available-time-slot-per-fulfillment-type`, { method: "GET", query: where }),
249
+ wixRequest<Raw>(`${base}/available-time-slots-per-date`, { method: "GET", query: { ...slotsDateQuery(dayKey ?? restaurantToday(timeZone)), ...where } }),
250
+ ]);
251
+ return toFulfillmentTimes(asap, slots);
252
+ }
253
+
254
+ /**
255
+ * Set how and when the order is fulfilled: pickup or delivery, a time from fetchFulfillmentTimes
256
+ * (omitted → ASAP), and for delivery the address (street, city; country and subdivision default to
257
+ * the restaurant's). Pickup puts the restaurant's country on the cart, which Wix requires before
258
+ * any delivery method. Throws NOT_DELIVERABLE when the address is outside every delivery area.
259
+ * PATCH /ecom/v2/carts/current { cart: { deliveryInfo: { address: { addressLine, city, postalCode, country, subdivision } } } }
260
+ * (the street field is addressLine; addressLine1 is dropped)
261
+ * POST /ecom/v2/carts/current/set-delivery-method { deliveryMethod: { code: "PICKUP|ASAP" | "<TYPE>|<startMs>|<endMs>" } }
262
+ */
263
+ export async function setOrderFulfillment(choice: FulfillmentChoice): Promise<OrderCart> {
264
+ const address = fulfillmentAddress(choice, toRestaurantRegion(await listFulfillmentRaws()));
265
+ await wixRequest<Raw>(CART, { method: "PATCH", body: { cart: { deliveryInfo: { address } } } });
266
+ try {
267
+ const res = await wixRequest<Raw>(`${CART}/set-delivery-method`, { body: { deliveryMethod: { code: fulfillmentCode(choice) } } });
268
+ return readCartWithSubtotal(res?.cart ?? null);
269
+ } catch (e) {
270
+ if (e instanceof WixApiError && e.code === "DELIVERY_METHOD_NOT_FOUND") {
271
+ throw new Error(choice.type === "DELIVERY" ? NOT_DELIVERABLE : "This pickup time isn't available. Choose another time.");
272
+ }
273
+ throw e;
274
+ }
275
+ }
276
+
205
277
  /**
206
278
  * Start the Wix-hosted checkout for the current order and return the URL to navigate the FULL
207
- * document to. The cart's id IS the checkout id; fulfillment (pickup/delivery + time) and payment
208
- * are collected on the hosted page. `origin` must be the site's real https origin as registered on
209
- * the OAuth app's allowed domains (browser: window.location.origin) — an unlisted or http origin
210
- * 403s on return.
279
+ * document to. The cart's id IS the checkout id. The fulfillment must be on the cart first
280
+ * (setOrderFulfillment); a cart with none gets pickup ASAP. Payment is collected on the hosted
281
+ * page. `origin` must be the site's real https origin as registered on the OAuth app's allowed
282
+ * domains (browser: window.location.origin) — an unlisted or http origin 403s on return.
211
283
  * POST /headless/v1/redirect-session { ecomCheckout: { checkoutId }, callbacks: { postFlowUrl, thankYouPageUrl } }
212
284
  */
213
285
  export async function orderCheckoutUrl(origin: string = typeof window !== "undefined" ? window.location.origin : ""): Promise<string> {
214
286
  const raw = await getCurrentCartRaw();
215
287
  assertOrderCheckoutable(raw);
288
+ if (!raw?.deliveryInfo?.method?.code) {
289
+ await setOrderFulfillment({ type: "PICKUP" }).catch(() => {
290
+ throw new Error("Choose pickup or delivery before checkout.");
291
+ });
292
+ }
216
293
  const res = await wixRequest<Raw>("/headless/v1/redirect-session", {
217
294
  body: { ecomCheckout: { checkoutId: rawId(raw) }, callbacks: origin ? { postFlowUrl: `${origin}/`, thankYouPageUrl: `${origin}/` } : {} },
218
295
  });