@salesforce/b2c-dx-mcp 3.2.0 → 3.3.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 (313) hide show
  1. package/bin/run.js +5 -9
  2. package/content/guidance/b2c/b2c-hooks/references/ORDER-HOOK-LIFECYCLE.md +1 -1
  3. package/content/guidance/b2c/b2c-onboarding/SKILL.md +4 -4
  4. package/content/guidance/b2c/b2c-ordering/SKILL.md +2 -2
  5. package/content/guidance/b2c/b2c-querying-data/SKILL.md +2 -2
  6. package/content/guidance/b2c/b2c-scapi-admin/SKILL.md +3 -3
  7. package/content/guidance/b2c/b2c-scapi-admin/references/CLIENT-EXAMPLES.md +4 -4
  8. package/content/guidance/b2c/b2c-scapi-shopper/SKILL.md +6 -6
  9. package/content/guidance/b2c/b2c-scapi-shopper/references/CLIENT-EXAMPLES.md +8 -9
  10. package/content/guidance/b2c-cli/b2c-cip/SKILL.md +3 -3
  11. package/content/guidance/b2c-cli/b2c-cip/references/SALES_ANALYSIS.md +1 -1
  12. package/content/guidance/b2c-cli/b2c-config/SKILL.md +31 -21
  13. package/content/guidance/b2c-cli/b2c-content/SKILL.md +1 -1
  14. package/content/guidance/b2c-cli/b2c-debug/SKILL.md +1 -1
  15. package/content/guidance/b2c-cli/b2c-docs/SKILL.md +23 -2
  16. package/content/guidance/b2c-cli/b2c-ecdn/references/ADVANCED.md +1 -1
  17. package/content/guidance/b2c-cli/b2c-job/references/IMPORT.md +1 -1
  18. package/content/guidance/b2c-cli/b2c-metrics/SKILL.md +1 -1
  19. package/content/guidance/b2c-cli/b2c-mrt/SKILL.md +3 -3
  20. package/content/guidance/b2c-cli/b2c-scapi-custom/SKILL.md +1 -1
  21. package/content/guidance/b2c-cli/b2c-scapi-schemas/SKILL.md +1 -1
  22. package/content/guidance/b2c-cli/b2c-site-import-export/SKILL.md +1 -1
  23. package/content/guidance/b2c-cli/b2c-sites/SKILL.md +1 -1
  24. package/content/guidance/b2c-cli/b2c-slas/SKILL.md +1 -1
  25. package/content/guidance/b2c-ops/b2c-checkout-triage/SKILL.md +2 -2
  26. package/content/guidance/b2c-ops/b2c-job-health/SKILL.md +2 -2
  27. package/content/guidance/b2c-ops/b2c-order-failure-triage/SKILL.md +1 -1
  28. package/content/guidance/b2c-ops/b2c-order-failure-triage/references/order-evidence.md +2 -2
  29. package/content/guidance/b2c-ops/b2c-production-triage/SKILL.md +4 -4
  30. package/content/guidance/index.json +935 -258
  31. package/content/guidance/mcp/{cip → b2c-mcp-cip}/SKILL.md +10 -8
  32. package/content/guidance/mcp/{b2c-config → b2c-mcp-config}/SKILL.md +10 -9
  33. package/content/guidance/mcp/{debugger → b2c-mcp-debugger}/SKILL.md +9 -8
  34. package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/SKILL.md +81 -10
  35. package/content/guidance/mcp/{server → b2c-mcp-server}/SKILL.md +49 -25
  36. package/content/guidance/storefront-next/sfnext-accessibility/SKILL.md +103 -0
  37. package/content/guidance/storefront-next/sfnext-accessibility/references/checklist.md +64 -0
  38. package/content/guidance/storefront-next/sfnext-analytics-consent/SKILL.md +91 -0
  39. package/content/guidance/storefront-next/sfnext-analytics-consent/references/CUSTOM-ADAPTER.md +49 -0
  40. package/content/guidance/storefront-next/sfnext-authentication/SKILL.md +86 -79
  41. package/content/guidance/storefront-next/sfnext-authentication/references/COOKIES.md +39 -0
  42. package/content/guidance/storefront-next/sfnext-authentication/references/LOGIN-FLOWS.md +59 -0
  43. package/content/guidance/storefront-next/sfnext-commerce-features/SKILL.md +67 -0
  44. package/content/guidance/storefront-next/sfnext-commerce-features/references/FEATURE-PREREQUISITES.md +37 -0
  45. package/content/guidance/storefront-next/sfnext-components/SKILL.md +98 -136
  46. package/content/guidance/storefront-next/sfnext-components/references/COMPONENT-AUTHORING.md +118 -0
  47. package/content/guidance/storefront-next/sfnext-components/references/SHAPE-TOKENS.md +51 -0
  48. package/content/guidance/storefront-next/sfnext-components/references/STORYBOOK.md +54 -0
  49. package/content/guidance/storefront-next/sfnext-components/references/TOKEN-SYSTEM.md +53 -0
  50. package/content/guidance/storefront-next/sfnext-components/references/TROUBLESHOOTING.md +19 -0
  51. package/content/guidance/storefront-next/sfnext-configuration/SKILL.md +116 -113
  52. package/content/guidance/storefront-next/sfnext-configuration/references/ENV-VARIABLES.md +55 -0
  53. package/content/guidance/storefront-next/sfnext-configuration/references/MULTI-SITE-URLS.md +137 -0
  54. package/content/guidance/storefront-next/sfnext-data-fetching/SKILL.md +100 -150
  55. package/content/guidance/storefront-next/sfnext-data-fetching/references/ACTIONS.md +53 -0
  56. package/content/guidance/storefront-next/sfnext-data-fetching/references/API-CLIENTS.md +34 -0
  57. package/content/guidance/storefront-next/sfnext-data-fetching/references/LOADERS.md +73 -0
  58. package/content/guidance/storefront-next/sfnext-data-fetching/references/SCAPI-FETCHER.md +23 -77
  59. package/content/guidance/storefront-next/sfnext-deployment/SKILL.md +83 -97
  60. package/content/guidance/storefront-next/sfnext-deployment/references/MRT-DEPLOYMENT.md +37 -68
  61. package/content/guidance/storefront-next/sfnext-extensions/SKILL.md +73 -97
  62. package/content/guidance/storefront-next/sfnext-extensions/references/ACTION-HOOKS.md +57 -0
  63. package/content/guidance/storefront-next/sfnext-extensions/references/BASE-AUDIT.md +47 -44
  64. package/content/guidance/storefront-next/sfnext-extensions/references/CLI-AND-INSTALL.md +58 -0
  65. package/content/guidance/storefront-next/sfnext-extensions/references/EXTENSION-EXAMPLES.md +49 -86
  66. package/content/guidance/storefront-next/sfnext-hybrid-storefronts/SKILL.md +59 -114
  67. package/content/guidance/storefront-next/sfnext-hybrid-storefronts/references/HYBRID-PROXY-CONFIG.md +53 -90
  68. package/content/guidance/storefront-next/sfnext-i18n/SKILL.md +96 -131
  69. package/content/guidance/storefront-next/sfnext-i18n/references/locale-config.md +35 -0
  70. package/content/guidance/storefront-next/sfnext-overview/SKILL.md +101 -0
  71. package/content/guidance/storefront-next/sfnext-page-designer/SKILL.md +152 -131
  72. package/content/guidance/storefront-next/sfnext-page-designer/references/BUSINESS-MANAGER.md +46 -0
  73. package/content/guidance/storefront-next/sfnext-page-designer/references/COMPONENT-REGISTRY.md +86 -53
  74. package/content/guidance/storefront-next/sfnext-page-designer/references/DECORATOR-PATTERNS.md +119 -131
  75. package/content/guidance/storefront-next/sfnext-page-designer/references/REVIEW-CHECKLIST.md +83 -0
  76. package/content/guidance/storefront-next/sfnext-page-designer/references/TROUBLESHOOTING.md +35 -0
  77. package/content/guidance/storefront-next/sfnext-performance/SKILL.md +75 -105
  78. package/content/guidance/storefront-next/sfnext-performance/references/PERFORMANCE-REVIEW-CHECKLIST.md +85 -0
  79. package/content/guidance/storefront-next/sfnext-performance/references/SUSPENSE-AND-STREAMING.md +58 -0
  80. package/content/guidance/storefront-next/sfnext-project-setup/SKILL.md +103 -116
  81. package/content/guidance/storefront-next/sfnext-project-setup/references/PROJECT-STRUCTURE.md +61 -99
  82. package/content/guidance/storefront-next/sfnext-project-setup/references/SCRIPTS.md +47 -0
  83. package/content/guidance/storefront-next/sfnext-project-setup/references/SFNEXT-CLI.md +63 -0
  84. package/content/guidance/storefront-next/sfnext-quality-gates/SKILL.md +70 -0
  85. package/content/guidance/storefront-next/sfnext-quality-gates/references/lint-and-budgets.md +39 -0
  86. package/content/guidance/storefront-next/sfnext-revalidation/SKILL.md +121 -0
  87. package/content/guidance/storefront-next/sfnext-revalidation/references/POLICIES-AND-TAGS.md +55 -0
  88. package/content/guidance/storefront-next/sfnext-routing/SKILL.md +86 -143
  89. package/content/guidance/storefront-next/sfnext-routing/references/ROUTE-CONVENTIONS.md +51 -51
  90. package/content/guidance/storefront-next/sfnext-routing/references/URLS-AND-SEO-ROUTES.md +22 -0
  91. package/content/guidance/storefront-next/sfnext-scapi/SKILL.md +126 -0
  92. package/content/guidance/storefront-next/sfnext-scapi/references/WORKED-EXAMPLE.md +39 -0
  93. package/content/guidance/storefront-next/sfnext-security/SKILL.md +129 -0
  94. package/content/guidance/storefront-next/sfnext-security/references/COOKIE-DOMAIN.md +39 -0
  95. package/content/guidance/storefront-next/sfnext-security/references/TURNSTILE.md +43 -0
  96. package/content/guidance/storefront-next/sfnext-seo/SKILL.md +95 -0
  97. package/content/guidance/storefront-next/sfnext-seo/references/MULTI-DOMAIN-BASE-PATH.md +17 -0
  98. package/content/guidance/storefront-next/sfnext-seo/references/SEO-ROUTES.md +31 -0
  99. package/content/guidance/storefront-next/sfnext-state-management/SKILL.md +80 -89
  100. package/content/guidance/storefront-next/sfnext-state-management/references/PATTERNS.md +45 -0
  101. package/content/guidance/storefront-next/sfnext-testing/SKILL.md +105 -138
  102. package/content/guidance/storefront-next/sfnext-testing/references/E2E.md +38 -0
  103. package/content/guidance/storefront-next/sfnext-testing/references/STORYBOOK-PATTERNS.md +73 -94
  104. package/content/guidance/storefront-next/sfnext-testing/references/UNIT-AND-ROUTE-TESTS.md +60 -0
  105. package/content/guidance/storefront-next/sfnext-theming/SKILL.md +104 -0
  106. package/content/guidance/storefront-next/sfnext-theming/references/REBRAND-CHECKLIST.md +29 -0
  107. package/dist/commands/mcp.d.ts +8 -2
  108. package/dist/commands/mcp.js +54 -20
  109. package/dist/guidance.d.ts +4 -1
  110. package/dist/guidance.js +23 -5
  111. package/dist/registry.d.ts +2 -1
  112. package/dist/registry.js +3 -3
  113. package/dist/server.d.ts +10 -0
  114. package/dist/server.js +21 -0
  115. package/dist/skill-references.js +5 -5
  116. package/dist/tools/cartridges/index.js +1 -0
  117. package/dist/tools/cip/index.js +6 -3
  118. package/dist/tools/diagnostics/debug-capture-at-breakpoint.js +1 -1
  119. package/dist/tools/diagnostics/debug-set-breakpoints.js +1 -1
  120. package/dist/tools/diagnostics/debug-start-session.js +1 -1
  121. package/dist/tools/scapi/execution-registry.js +9 -9
  122. package/dist/tools/scapi/index.d.ts +4 -1
  123. package/dist/tools/scapi/index.js +4 -2
  124. package/dist/tools/scapi/scapi-code.d.ts +2 -2
  125. package/dist/tools/scapi/scapi-code.js +17 -61
  126. package/dist/utils/types.d.ts +6 -0
  127. package/node_modules/@salesforce/b2c-agent-plugins/CHANGELOG.md +20 -0
  128. package/node_modules/@salesforce/b2c-agent-plugins/README.md +5 -0
  129. package/node_modules/@salesforce/b2c-agent-plugins/b2c/.codex-plugin/plugin.json +1 -1
  130. package/node_modules/@salesforce/b2c-agent-plugins/b2c/plugin.json +1 -1
  131. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-hooks/references/ORDER-HOOK-LIFECYCLE.md +1 -1
  132. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-onboarding/SKILL.md +4 -4
  133. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-ordering/SKILL.md +2 -2
  134. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-querying-data/SKILL.md +2 -2
  135. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-admin/SKILL.md +3 -3
  136. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-admin/references/CLIENT-EXAMPLES.md +4 -4
  137. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-shopper/SKILL.md +6 -6
  138. package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-shopper/references/CLIENT-EXAMPLES.md +8 -9
  139. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/.codex-plugin/plugin.json +1 -1
  140. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/plugin.json +1 -1
  141. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-cip/SKILL.md +3 -3
  142. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-cip/references/SALES_ANALYSIS.md +1 -1
  143. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-config/SKILL.md +31 -21
  144. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-content/SKILL.md +1 -1
  145. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-debug/SKILL.md +1 -1
  146. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-docs/SKILL.md +23 -2
  147. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-ecdn/references/ADVANCED.md +1 -1
  148. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-job/references/IMPORT.md +1 -1
  149. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-metrics/SKILL.md +1 -1
  150. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-mrt/SKILL.md +3 -3
  151. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-scapi-custom/SKILL.md +1 -1
  152. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-scapi-schemas/SKILL.md +1 -1
  153. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-site-import-export/SKILL.md +1 -1
  154. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-sites/SKILL.md +1 -1
  155. package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-slas/SKILL.md +1 -1
  156. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/.codex-plugin/plugin.json +1 -1
  157. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/plugin.json +1 -1
  158. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-checkout-triage/SKILL.md +2 -2
  159. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-job-health/SKILL.md +2 -2
  160. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-order-failure-triage/SKILL.md +1 -1
  161. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-order-failure-triage/references/order-evidence.md +2 -2
  162. package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-production-triage/SKILL.md +4 -4
  163. package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/README.md +4 -4
  164. package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/SKILL.md +76 -73
  165. package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/evals/trigger-evals.json +12 -10
  166. package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/references/PAGE-DESIGNER-SFN.md +49 -74
  167. package/node_modules/@salesforce/b2c-agent-plugins/package.json +1 -1
  168. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/.codex-plugin/plugin.json +9 -6
  169. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/README.md +43 -22
  170. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/plugin.json +9 -6
  171. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/SKILL.md +103 -0
  172. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/evals/trigger-evals.json +5 -0
  173. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/references/checklist.md +64 -0
  174. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/SKILL.md +91 -0
  175. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/evals/trigger-evals.json +5 -0
  176. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/references/CUSTOM-ADAPTER.md +49 -0
  177. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/SKILL.md +86 -79
  178. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/evals/trigger-evals.json +5 -0
  179. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/references/COOKIES.md +39 -0
  180. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/references/LOGIN-FLOWS.md +59 -0
  181. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/SKILL.md +67 -0
  182. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/evals/trigger-evals.json +5 -0
  183. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/references/FEATURE-PREREQUISITES.md +37 -0
  184. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/SKILL.md +98 -136
  185. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/evals/trigger-evals.json +5 -0
  186. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/COMPONENT-AUTHORING.md +118 -0
  187. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/SHAPE-TOKENS.md +51 -0
  188. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/STORYBOOK.md +54 -0
  189. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/TOKEN-SYSTEM.md +53 -0
  190. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/TROUBLESHOOTING.md +19 -0
  191. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/SKILL.md +116 -113
  192. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/evals/trigger-evals.json +5 -0
  193. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/references/ENV-VARIABLES.md +55 -0
  194. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/references/MULTI-SITE-URLS.md +137 -0
  195. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/SKILL.md +100 -150
  196. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/evals/trigger-evals.json +5 -0
  197. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/ACTIONS.md +53 -0
  198. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/API-CLIENTS.md +34 -0
  199. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/LOADERS.md +73 -0
  200. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/SCAPI-FETCHER.md +23 -77
  201. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/SKILL.md +83 -97
  202. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/evals/trigger-evals.json +5 -0
  203. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/references/MRT-DEPLOYMENT.md +37 -68
  204. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/SKILL.md +73 -97
  205. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/evals/trigger-evals.json +5 -0
  206. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/ACTION-HOOKS.md +57 -0
  207. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/BASE-AUDIT.md +47 -44
  208. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/CLI-AND-INSTALL.md +58 -0
  209. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/EXTENSION-EXAMPLES.md +49 -86
  210. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/SKILL.md +59 -114
  211. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/evals/trigger-evals.json +5 -0
  212. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/references/HYBRID-PROXY-CONFIG.md +53 -90
  213. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/SKILL.md +96 -131
  214. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/evals/trigger-evals.json +5 -0
  215. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/references/locale-config.md +35 -0
  216. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-overview/SKILL.md +101 -0
  217. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-overview/evals/trigger-evals.json +5 -0
  218. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/SKILL.md +152 -131
  219. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/evals/trigger-evals.json +5 -0
  220. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/BUSINESS-MANAGER.md +46 -0
  221. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/COMPONENT-REGISTRY.md +86 -53
  222. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/DECORATOR-PATTERNS.md +119 -131
  223. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/REVIEW-CHECKLIST.md +83 -0
  224. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/TROUBLESHOOTING.md +35 -0
  225. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/SKILL.md +75 -105
  226. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/evals/trigger-evals.json +5 -0
  227. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/references/PERFORMANCE-REVIEW-CHECKLIST.md +85 -0
  228. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/references/SUSPENSE-AND-STREAMING.md +58 -0
  229. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/SKILL.md +103 -116
  230. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/evals/trigger-evals.json +5 -0
  231. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/PROJECT-STRUCTURE.md +61 -99
  232. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/SCRIPTS.md +47 -0
  233. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/SFNEXT-CLI.md +63 -0
  234. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/SKILL.md +70 -0
  235. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/evals/trigger-evals.json +5 -0
  236. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/references/lint-and-budgets.md +39 -0
  237. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/SKILL.md +121 -0
  238. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/evals/trigger-evals.json +5 -0
  239. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/references/POLICIES-AND-TAGS.md +55 -0
  240. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/SKILL.md +86 -143
  241. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/evals/trigger-evals.json +5 -0
  242. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/references/ROUTE-CONVENTIONS.md +51 -51
  243. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/references/URLS-AND-SEO-ROUTES.md +22 -0
  244. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/SKILL.md +126 -0
  245. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/evals/trigger-evals.json +5 -0
  246. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/references/WORKED-EXAMPLE.md +39 -0
  247. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/SKILL.md +129 -0
  248. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/evals/trigger-evals.json +5 -0
  249. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/references/COOKIE-DOMAIN.md +39 -0
  250. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/references/TURNSTILE.md +43 -0
  251. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/SKILL.md +95 -0
  252. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/evals/trigger-evals.json +5 -0
  253. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/references/MULTI-DOMAIN-BASE-PATH.md +17 -0
  254. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/references/SEO-ROUTES.md +31 -0
  255. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/SKILL.md +80 -89
  256. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/evals/trigger-evals.json +5 -0
  257. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/references/PATTERNS.md +45 -0
  258. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/SKILL.md +105 -138
  259. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/evals/trigger-evals.json +5 -0
  260. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/E2E.md +38 -0
  261. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/STORYBOOK-PATTERNS.md +73 -94
  262. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/UNIT-AND-ROUTE-TESTS.md +60 -0
  263. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/SKILL.md +104 -0
  264. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/evals/trigger-evals.json +5 -0
  265. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/references/REBRAND-CHECKLIST.md +29 -0
  266. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next-figma/skills/sfnext-create-figma-kit/SKILL.md +3 -3
  267. package/oclif.manifest.json +21 -4
  268. package/package.json +3 -3
  269. package/content/guidance/storefront-next/sfnext-create-component/SKILL.md +0 -195
  270. package/content/guidance/storefront-next/sfnext-create-component/references/COMPONENT-AUTHORING.md +0 -206
  271. package/content/guidance/storefront-next/sfnext-create-component/references/PROJECT-STRUCTURE.md +0 -43
  272. package/content/guidance/storefront-next/sfnext-create-component/references/TOKEN-SYSTEM.md +0 -130
  273. package/content/guidance/storefront-next/sfnext-create-component/references/TROUBLESHOOTING.md +0 -34
  274. package/content/guidance/storefront-next/sfnext-create-vertical/SKILL.md +0 -135
  275. package/content/guidance/storefront-next/sfnext-create-vertical/references/COMPONENT-AUTHORING.md +0 -206
  276. package/content/guidance/storefront-next/sfnext-create-vertical/references/PROJECT-STRUCTURE.md +0 -43
  277. package/content/guidance/storefront-next/sfnext-create-vertical/references/TOKEN-SYSTEM.md +0 -130
  278. package/content/guidance/storefront-next/sfnext-create-vertical/references/TROUBLESHOOTING.md +0 -34
  279. package/content/guidance/storefront-next/sfnext-custom-apis/SKILL.md +0 -221
  280. package/content/guidance/storefront-next/sfnext-custom-apis/references/WORKFLOW-EXAMPLES.md +0 -294
  281. package/content/guidance/storefront-next/sfnext-data-fetching/references/LOADER-PATTERNS.md +0 -102
  282. package/content/guidance/storefront-next/sfnext-project-setup/references/ENV-VARIABLES.md +0 -82
  283. package/content/guidance/storefront-next/sfnext-scapi-management/SKILL.md +0 -203
  284. package/content/guidance/storefront-next/sfnext-scapi-management/references/CLI-COMMANDS.md +0 -122
  285. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/SKILL.md +0 -195
  286. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/evals/trigger-evals.json +0 -12
  287. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/COMPONENT-AUTHORING.md +0 -206
  288. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/PROJECT-STRUCTURE.md +0 -43
  289. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/TOKEN-SYSTEM.md +0 -130
  290. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/TROUBLESHOOTING.md +0 -34
  291. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/SKILL.md +0 -135
  292. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/evals/trigger-evals.json +0 -12
  293. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/COMPONENT-AUTHORING.md +0 -206
  294. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/PROJECT-STRUCTURE.md +0 -43
  295. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/TOKEN-SYSTEM.md +0 -130
  296. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/TROUBLESHOOTING.md +0 -34
  297. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/SKILL.md +0 -221
  298. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/evals/trigger-evals.json +0 -12
  299. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/references/WORKFLOW-EXAMPLES.md +0 -294
  300. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/LOADER-PATTERNS.md +0 -102
  301. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/ENV-VARIABLES.md +0 -82
  302. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/SKILL.md +0 -203
  303. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/evals/trigger-evals.json +0 -12
  304. package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/references/CLI-COMMANDS.md +0 -122
  305. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/custom-apis.md +0 -0
  306. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/custom-properties.md +0 -0
  307. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/jobs.md +0 -0
  308. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/products.md +0 -0
  309. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/promotions.md +0 -0
  310. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/saving.md +0 -0
  311. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/snippets.md +0 -0
  312. /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/tokens.md +0 -0
  313. /package/content/guidance/mcp/{server → b2c-mcp-server}/references/files.md +0 -0
@@ -1,130 +0,0 @@
1
- # Token System Reference
2
-
3
- ## The one rule that overrides everything else
4
-
5
- **Never use a raw hex value, RGB value, or hardcoded color in any component or CSS file.**
6
- Always use a semantic Tailwind utility that maps to a CSS variable. The variables are defined in
7
- `src/theme/tokens/` and bridged to Tailwind utilities in `src/theme/tailwind.css`.
8
-
9
- ```tsx
10
- // ✅ correct
11
- <div className="bg-primary text-primary-foreground" />
12
-
13
- // ❌ wrong — breaks dark mode, breaks vertical theming, breaks Figma sync
14
- <div style={{ background: '#000000', color: '#ffffff' }} />
15
- <div className="bg-black text-white" />
16
- ```
17
-
18
- ## Token files and what they own
19
-
20
- | File | Owns |
21
- |------|------|
22
- | `src/theme/tokens/core.css` | Background, foreground, card, popover, primary, secondary, muted, accent, border, input, ring, separator, rating, charts, sidebar, focus helpers |
23
- | `src/theme/tokens/brand.css` | Brand palette (`--brand-black`, `--brand-white`, `--brand-gray-*`, `--brand-primary`). **This is the only file that changes per vertical.** |
24
- | `src/theme/tokens/header.css` | Header background/foreground, header menu surfaces, footer. Dark header = black bg / white text. |
25
- | `src/theme/tokens/status.css` | Destructive, warning, success, info, status-positive/warning/critical, active-bg |
26
- | `src/theme/tokens/swatch.css` | Swatch color, labeled, pill — variant selector UI only |
27
- | `src/theme/tokens/components.css` | Payment provider colors, cart-specific tokens |
28
-
29
- ## Semantic token meanings — use the right one
30
-
31
- ### Text colors
32
- | Token class | When to use |
33
- |-------------|-------------|
34
- | `text-foreground` | Default body text, headings |
35
- | `text-muted-foreground` | Secondary labels, helper text, placeholder, metadata |
36
- | `text-primary-foreground` | Text on a `bg-primary` surface (e.g. button label) |
37
- | `text-secondary-foreground` | Text on a `bg-secondary` surface |
38
- | `text-accent-foreground` | Text on a `bg-accent` surface (hover chips, tags) |
39
- | `text-destructive` | Error text, destructive action labels |
40
- | `text-card-foreground` | Text inside card surfaces |
41
-
42
- ### Background colors
43
- | Token class | When to use |
44
- |-------------|-------------|
45
- | `bg-background` | Page/app background |
46
- | `bg-primary` | CTAs, filled buttons, strong actions |
47
- | `bg-secondary` | Secondary button fill, subtle section bg |
48
- | `bg-muted` | Skeleton, disabled surfaces, subtle fills |
49
- | `bg-accent` | Hover state, selected chip, tag bg |
50
- | `bg-card` | Card and tile surfaces |
51
- | `bg-popover` | Dropdown, tooltip, modal backgrounds |
52
-
53
- ### Borders
54
- | Token class | When to use |
55
- |-------------|-------------|
56
- | `border-border` | Standard dividers, list separators — uses alpha so it renders correctly on ANY surface color |
57
- | `border-border-subtle` | Form inputs, card edges — slightly more visible |
58
- | `border-input` | Input field border specifically |
59
- | `ring-ring` | Focus ring on interactive elements |
60
-
61
- **Never use `border-black`, `border-gray-*`, or `divide-gray-*`.** Use `border-border` or `border-border-subtle`.
62
-
63
- ### Header/navigation surfaces
64
- | Token class | When to use |
65
- |-------------|-------------|
66
- | `bg-[--header-background]` | Header band background |
67
- | `text-[--header-foreground]` | Header text and icons |
68
- | `bg-[--header-menu-background]` | Mega/dropdown menu panel |
69
- | `bg-[--footer-background]` | Footer background |
70
-
71
- ### Status and feedback
72
- | Token class | When to use |
73
- |-------------|-------------|
74
- | `text-destructive` / `bg-destructive` | Delete, remove, error state |
75
- | `bg-warning-bg` / `text-warning-foreground` | Caution messages |
76
- | `text-status-positive` | In-stock, success indicator |
77
- | `text-status-critical` | Out of stock, error badge |
78
- | `bg-active-bg` / `text-active-foreground` | Active/authorized badge |
79
-
80
- ## Dark mode rules
81
-
82
- **Do not write `dark:bg-black` or any dark: hardcoded color.**
83
- Dark mode is fully handled by `.dark` overrides in `src/theme/tokens/core.css` and other token files.
84
- Using semantic classes automatically gets the correct dark value.
85
-
86
- ```tsx
87
- // ✅ correct — dark mode is automatic
88
- <div className="bg-card text-card-foreground" />
89
-
90
- // ❌ wrong
91
- <div className="bg-white dark:bg-gray-900 text-black dark:text-white" />
92
- ```
93
-
94
- The only valid `dark:` usage is for classes that reference another semantic token:
95
-
96
- ```tsx
97
- // ✅ valid dark: override pattern
98
- className="dark:bg-input/30 dark:border-input"
99
- ```
100
-
101
- ## What changes per vertical — and what does not
102
-
103
- ### Changes (vertical-specific, lives in `src/theme/tokens/brand.css`)
104
- - Brand palette values (`--brand-black`, `--brand-primary`, `--brand-gray-*`)
105
- - Logo treatment (`--header-logo-filter`)
106
- - Brand-specific component tokens
107
-
108
- ### Does NOT change (shared, lives in core/header/status/swatch/components)
109
- - Semantic token names and their Tailwind utility names
110
- - Dark mode pairing rules
111
- - Component variant logic (CVA)
112
- - Border alpha values
113
- - Status and feedback colors
114
-
115
- **Never override core.css, header.css, status.css, swatch.css, or components.css to create a vertical.**
116
- Only `brand.css` changes between verticals.
117
-
118
- ## Tailwind utility bridge
119
-
120
- All token → Tailwind utility mappings are defined in `src/theme/tailwind.css`.
121
- If a CSS variable exists in a token file but has no Tailwind utility in `tailwind.css`, add it there
122
- before using it in a component. Do not use arbitrary `[--variable-name]` syntax for variables that
123
- should be in the bridge.
124
-
125
- ```css
126
- /* src/theme/tailwind.css — add new token bridge entries here */
127
- --color-my-new-token: var(--my-new-token);
128
- ```
129
-
130
- Then use `bg-my-new-token` in components.
@@ -1,34 +0,0 @@
1
- # Troubleshooting Reference
2
-
3
- ## Token not found in Tailwind utilities
4
- If a CSS variable exists in a token file but has no Tailwind utility in `tailwind.css`:
5
- - Open `src/theme/tailwind.css`.
6
- - Add a bridge entry: `--color-my-new-token: var(--my-new-token);`.
7
- - Then use `bg-my-new-token` in components — never the `bg-[--my-new-token]` arbitrary syntax.
8
-
9
- ## Colors look wrong in dark mode
10
- - You probably hardcoded a color (`bg-white`, `text-black`, raw hex) instead of using a semantic token.
11
- - Replace with the semantic utility (`bg-background`, `text-foreground`, etc.). Dark mode is handled by `.dark` overrides in the token files automatically.
12
-
13
- ## Vertical changes leak into other verticals
14
- - You edited a shared token file (`core.css`, `header.css`, `status.css`, `swatch.css`, `components.css`). Move the change into `brand.css`.
15
- - Or you added `if (vertical)` logic to a shared component. Replace it with a CVA variant, a slot/render-prop on the base, or an extension.
16
-
17
- ## Component already exists
18
- If a scan finds an existing component that covers the need:
19
- - Add a new CVA variant instead of creating a new component.
20
- - Wrap in a thin composite if behaviour differs.
21
- - Never duplicate.
22
-
23
- ## Local pages won't render without SCAPI
24
- - Use fixtures: create `src/config/<vertical>-fixtures.ts` and short-circuit the `_app.tsx` and `_app.product.$productId.tsx` loaders during vertical development.
25
- - Restore the real SCAPI calls once credentials are available.
26
-
27
- ## Linter errors after changes
28
- Run `pnpm lint:fix` first. If errors remain, check:
29
- - Missing copyright header (required on every `.ts`/`.tsx` file).
30
- - Raw hex value or hardcoded Tailwind color — replace with a semantic token class.
31
- - Missing `data-slot` attribute on a component root.
32
-
33
- ## Snapshot tests fail after visual changes
34
- Run `pnpm test-storybook:snapshot:agent -- --updateSnapshot` to update baselines after intentional visual changes.
@@ -1,221 +0,0 @@
1
- ---
2
- name: sfnext-custom-apis
3
- description: End-to-end workflow for consuming custom SCAPI endpoints from a Storefront Next project — adding them as typed clients via `b2c sfnext scapi add custom`, discovering their schema, and calling them from loaders/actions/useScapiFetcher. Use this skill whenever the user wants to call a custom API from their Storefront Next app, gets a 404 or 401 when calling a custom endpoint from their sfnext loader, needs to add a custom API as a typed client in their storefront, asks about the full workflow from custom API cartridge to sfnext consumption, or says 'custom API in storefront next'. Also use when they ask how createApiClients exposes custom API methods or how to use useScapiFetcher with a custom endpoint. NOT for writing the custom API cartridge files (schema.yaml/script.js) from scratch — see b2c:b2c-custom-api-development. NOT for just checking registration status — see b2c-cli:b2c-scapi-custom.
4
- ---
5
-
6
- # Custom APIs in Storefront Next
7
-
8
- This skill covers the end-to-end workflow for implementing and consuming custom SCAPI endpoints from a Storefront Next project.
9
-
10
- ## Overview
11
-
12
- Custom APIs let you define your own REST endpoints on B2C Commerce. In a Storefront Next project, you call these from loaders and actions just like standard SCAPI clients — with full type safety.
13
-
14
- ### End-to-End Workflow
15
-
16
- ```
17
- Create custom API → Deploy & register → Add typed client → Discover schema → Call from loader
18
- (cartridge) (b2c code deploy) (sfnext scapi add) (scapi schemas) (createApiClients)
19
- ```
20
-
21
- ## Step 1: Create the Custom API
22
-
23
- A custom API consists of three files in a cartridge:
24
-
25
- ```
26
- my-cartridge/cartridge/rest-apis/my-loyalty-api/
27
- ├── schema.yaml # OpenAPI 3.0 schema (endpoints, params, responses)
28
- ├── api.json # API metadata (version, security scheme)
29
- └── script.js # Implementation (controller script)
30
- ```
31
-
32
- For full details on writing these files, see the `b2c:b2c-custom-api-development` skill.
33
-
34
- **Key choices that affect the client:**
35
-
36
- | Choice | Impact |
37
- |--------|--------|
38
- | Directory name (`my-loyalty-api`) | Becomes the API name for `scapi add` |
39
- | `type` in api.json (`shopper` or `admin`) | Determines auth scheme and whether `siteId` is required |
40
- | Paths in schema.yaml | Become the methods on the typed client |
41
-
42
- ## Step 2: Deploy and Register
43
-
44
- Deploy the cartridge and verify the custom API is registered:
45
-
46
- ```bash
47
- # deploy the cartridge
48
- b2c code deploy ./my-cartridge --activate
49
-
50
- # verify registration
51
- b2c scapi custom status
52
- ```
53
-
54
- A successful registration shows `status: active` for your endpoints. If you see `not_registered`, debug with:
55
-
56
- ```bash
57
- b2c scapi custom status --status not_registered --columns type,apiName,endpointPath,errorReason
58
- ```
59
-
60
- See `b2c-cli:b2c-scapi-custom` for full diagnostics.
61
-
62
- ## Step 3: Add as Typed Client
63
-
64
- Once registered, add the custom API to your Storefront Next project:
65
-
66
- ```bash
67
- b2c sfnext scapi add custom my-loyalty-api v1
68
- ```
69
-
70
- This generates typed client code. The client becomes available as:
71
-
72
- ```typescript
73
- const clients = createApiClients(context);
74
- clients.myLoyaltyApi.getPoints({...});
75
- ```
76
-
77
- ## Step 4: Discover the API Shape
78
-
79
- Use schema browsing to understand your custom API's endpoints and response types:
80
-
81
- ```bash
82
- # list endpoints
83
- b2c scapi schemas get custom my-loyalty-api v1 --list-paths
84
-
85
- # expand a specific endpoint
86
- b2c scapi schemas get custom my-loyalty-api v1 \
87
- --expand-paths /loyalty/points/{customerId}
88
- ```
89
-
90
- This shows you the exact parameter names and response shape to use in your loader.
91
-
92
- ## Step 5: Call from Loaders and Actions
93
-
94
- ### Calling from a Loader (Shopper API)
95
-
96
- ```typescript
97
- import { createApiClients } from '@/lib/api-clients';
98
-
99
- export function loader({ params, context }: LoaderFunctionArgs) {
100
- const clients = createApiClients(context);
101
- return {
102
- loyaltyPoints: clients.myLoyaltyApi.getPoints({
103
- params: {
104
- path: { customerId: params.customerId },
105
- query: { siteId: context.siteId }
106
- }
107
- }).then(({ data }) => data),
108
- };
109
- }
110
- ```
111
-
112
- ### Calling from an Action (Mutation)
113
-
114
- ```typescript
115
- import { data } from 'react-router';
116
- import { createApiClients } from '@/lib/api-clients';
117
-
118
- export async function action({ request, context }: ActionFunctionArgs) {
119
- const formData = await request.formData();
120
- const clients = createApiClients(context);
121
-
122
- try {
123
- await clients.myLoyaltyApi.redeemPoints({
124
- params: {
125
- path: { customerId: formData.get('customerId') as string },
126
- query: { siteId: context.siteId },
127
- body: { points: Number(formData.get('points')) }
128
- }
129
- });
130
- return data({ success: true });
131
- } catch (error) {
132
- return data({ success: false, error: error.message }, { status: 400 });
133
- }
134
- }
135
- ```
136
-
137
- ### Using useScapiFetcher (Interactive)
138
-
139
- For on-demand fetching triggered by user interactions:
140
-
141
- ```typescript
142
- import { useScapiFetcher } from '@/hooks/use-scapi-fetcher';
143
-
144
- export function useLoyaltyPoints(customerId: string) {
145
- const parameters = useMemo(
146
- () => ({
147
- params: {
148
- path: { customerId },
149
- query: { siteId: getSiteId() }
150
- }
151
- }),
152
- [customerId]
153
- );
154
-
155
- const fetcher = useScapiFetcher(
156
- 'myLoyaltyApi',
157
- 'getPoints',
158
- parameters
159
- );
160
-
161
- return {
162
- points: fetcher.data,
163
- isLoading: fetcher.state === 'loading',
164
- refresh: () => fetcher.load(),
165
- };
166
- }
167
- ```
168
-
169
- ## Step 6: Debug Issues
170
-
171
- | Issue | Cause | Solution |
172
- |-------|-------|----------|
173
- | Client property not available | Forgot `sfnext scapi add` | Run `b2c sfnext scapi add custom <name> <version>` |
174
- | 404 from custom endpoint | API not registered | Check `b2c scapi custom status`; redeploy with `--activate` |
175
- | 401 Unauthorized | Wrong security scheme | Shopper APIs use ShopperToken; Admin APIs use BearerToken |
176
- | Missing `siteId` error | Shopper custom APIs require siteId | Always include `siteId` in query params for Shopper APIs |
177
- | Schema returns empty | API not yet registered | Deploy and activate the cartridge first, then browse schemas |
178
- | Types outdated after schema change | Stale generated types | Re-run `b2c sfnext scapi add custom <name> <version> --force` |
179
-
180
- ## Custom API Client Naming
181
-
182
- The API directory name maps to a camelCase property on `createApiClients()`:
183
-
184
- | Directory Name | Client Property | Example Call |
185
- |---------------|-----------------|-------------|
186
- | `my-loyalty-api` | `clients.myLoyaltyApi` | `clients.myLoyaltyApi.getPoints({...})` |
187
- | `order-status` | `clients.orderStatus` | `clients.orderStatus.getStatus({...})` |
188
- | `inventory-check` | `clients.inventoryCheck` | `clients.inventoryCheck.checkStock({...})` |
189
-
190
- ## Shopper vs Admin Custom APIs
191
-
192
- | Aspect | Shopper API | Admin API |
193
- |--------|-------------|-----------|
194
- | Auth scheme | ShopperToken (SLAS) | BearerToken (Account Manager) |
195
- | Requires `siteId` | Yes | No |
196
- | Called from | Storefront loaders/actions | Admin tools, batch jobs |
197
- | Typical use | Customer-facing features | Back-office operations |
198
-
199
- Most Storefront Next custom APIs are **Shopper** type since they serve storefront pages.
200
-
201
- ## Common Pitfalls
202
-
203
- | Pitfall | Problem | Solution |
204
- |---------|---------|----------|
205
- | Using admin auth for a shopper endpoint | 401 errors in storefront context | Set `type: "shopper"` in api.json |
206
- | Forgetting to redeploy after schema changes | Stale endpoints | Redeploy cartridge and re-add client with `--force` |
207
- | Not including `siteId` for shopper APIs | Request rejected | Always pass `siteId` in query params |
208
- | Calling custom API before registration completes | Intermittent 404s | Wait for `status: active` in `b2c scapi custom status` |
209
-
210
- ## Related Skills
211
-
212
- - `storefront-next:sfnext-scapi-management` - Managing typed clients (add/remove/list)
213
- - `storefront-next:sfnext-data-fetching` - Loader/action/useScapiFetcher patterns
214
- - `b2c:b2c-custom-api-development` - Creating the custom API cartridge (schema + script + mapping)
215
- - `b2c-cli:b2c-scapi-custom` - Checking custom API registration status
216
- - `b2c-cli:b2c-scapi-schemas` - Schema discovery commands
217
- - `b2c-cli:b2c-code` - Deploying and activating code versions
218
-
219
- ## Reference Documentation
220
-
221
- - [Workflow Examples](references/WORKFLOW-EXAMPLES.md) - Complete end-to-end worked examples
@@ -1,294 +0,0 @@
1
- # Workflow Examples
2
-
3
- Complete end-to-end examples showing the full lifecycle from custom API creation through calling from a Storefront Next storefront.
4
-
5
- ## Example 1: Shopper Custom API — Loyalty Points
6
-
7
- A customer-facing API that retrieves and redeems loyalty points.
8
-
9
- ### Cartridge Structure
10
-
11
- ```
12
- loyalty-cartridge/cartridge/rest-apis/loyalty-points/
13
- ├── schema.yaml
14
- ├── api.json
15
- └── script.js
16
- ```
17
-
18
- ### schema.yaml
19
-
20
- ```yaml
21
- openapi: "3.0.0"
22
- info:
23
- title: Loyalty Points API
24
- version: "v1"
25
- paths:
26
- /points/{customerId}:
27
- get:
28
- operationId: getPoints
29
- parameters:
30
- - name: customerId
31
- in: path
32
- required: true
33
- schema:
34
- type: string
35
- - name: siteId
36
- in: query
37
- required: true
38
- schema:
39
- type: string
40
- responses:
41
- "200":
42
- description: Customer loyalty points
43
- content:
44
- application/json:
45
- schema:
46
- $ref: "#/components/schemas/LoyaltyBalance"
47
- /points/{customerId}/redeem:
48
- post:
49
- operationId: redeemPoints
50
- parameters:
51
- - name: customerId
52
- in: path
53
- required: true
54
- schema:
55
- type: string
56
- - name: siteId
57
- in: query
58
- required: true
59
- schema:
60
- type: string
61
- requestBody:
62
- required: true
63
- content:
64
- application/json:
65
- schema:
66
- $ref: "#/components/schemas/RedeemRequest"
67
- responses:
68
- "200":
69
- description: Redemption result
70
- content:
71
- application/json:
72
- schema:
73
- $ref: "#/components/schemas/RedeemResult"
74
- components:
75
- schemas:
76
- LoyaltyBalance:
77
- type: object
78
- properties:
79
- customerId:
80
- type: string
81
- points:
82
- type: integer
83
- tier:
84
- type: string
85
- enum: [bronze, silver, gold, platinum]
86
- lastUpdated:
87
- type: string
88
- format: date-time
89
- RedeemRequest:
90
- type: object
91
- required: [points]
92
- properties:
93
- points:
94
- type: integer
95
- minimum: 1
96
- RedeemResult:
97
- type: object
98
- properties:
99
- success:
100
- type: boolean
101
- remainingPoints:
102
- type: integer
103
- transactionId:
104
- type: string
105
- ```
106
-
107
- ### api.json
108
-
109
- ```json
110
- {
111
- "type": "shopper",
112
- "version": "v1"
113
- }
114
- ```
115
-
116
- ### Deploy and Register
117
-
118
- ```bash
119
- # deploy the cartridge
120
- b2c code deploy ./loyalty-cartridge --activate
121
-
122
- # verify registration
123
- b2c scapi custom status --api-name loyalty-points
124
- ```
125
-
126
- ### Add to Storefront Next Project
127
-
128
- ```bash
129
- b2c sfnext scapi add custom loyalty-points v1
130
- ```
131
-
132
- ### Discover and Use
133
-
134
- ```bash
135
- # check endpoints
136
- b2c scapi schemas get custom loyalty-points v1 --list-paths
137
-
138
- # inspect response shape
139
- b2c scapi schemas get custom loyalty-points v1 \
140
- --expand-paths /points/{customerId} \
141
- --expand-schemas LoyaltyBalance
142
- ```
143
-
144
- ### Storefront Code
145
-
146
- ```typescript
147
- // src/routes/_app.account.loyalty.tsx
148
- import { createApiClients } from '@/lib/api-clients';
149
- import { createPage } from '@/lib/create-page';
150
-
151
- interface LoyaltyPageData {
152
- balance: Promise<LoyaltyBalance>;
153
- }
154
-
155
- export function loader({ context }: LoaderFunctionArgs): LoyaltyPageData {
156
- const clients = createApiClients(context);
157
- const customerId = context.session.customerId;
158
-
159
- return {
160
- balance: clients.loyaltyPoints.getPoints({
161
- params: {
162
- path: { customerId },
163
- query: { siteId: context.siteId }
164
- }
165
- }).then(({ data }) => data),
166
- };
167
- }
168
-
169
- export default createPage<LoyaltyPageData>(({ data }) => (
170
- <div className="space-y-4">
171
- <h1 className="text-2xl font-bold">Loyalty Points</h1>
172
- <Suspense fallback={<Skeleton className="h-24" />}>
173
- <Await resolve={data.balance}>
174
- {(balance) => (
175
- <div className="rounded-lg border p-6">
176
- <p className="text-4xl font-bold">{balance.points}</p>
177
- <p className="text-muted-foreground">
178
- {balance.tier} tier
179
- </p>
180
- </div>
181
- )}
182
- </Await>
183
- </Suspense>
184
- </div>
185
- ));
186
- ```
187
-
188
- ---
189
-
190
- ## Example 2: Admin Custom API — Inventory Check
191
-
192
- An admin API for back-office inventory operations. Admin APIs use BearerToken auth and do not require `siteId`.
193
-
194
- ### Key Differences from Shopper APIs
195
-
196
- | Aspect | This Example | Example 1 (Shopper) |
197
- |--------|-------------|---------------------|
198
- | api.json `type` | `"admin"` | `"shopper"` |
199
- | Auth | BearerToken (Account Manager) | ShopperToken (SLAS) |
200
- | `siteId` param | Not required | Required |
201
- | Typical caller | Admin tools, cron jobs | Storefront loaders |
202
-
203
- ### api.json
204
-
205
- ```json
206
- {
207
- "type": "admin",
208
- "version": "v1"
209
- }
210
- ```
211
-
212
- ### Usage in Storefront Context
213
-
214
- Admin APIs are typically NOT called from storefront loaders (since storefronts use shopper auth). If you need admin-level data in a storefront, consider:
215
-
216
- 1. Using a shopper API that exposes the same data with appropriate access controls
217
- 2. Pre-computing results and storing them in a custom object accessible via shopper APIs
218
-
219
- ---
220
-
221
- ## Example 3: useScapiFetcher with Custom API
222
-
223
- Interactive pattern for fetching custom API data after page load (e.g., showing loyalty points in a modal that opens on click).
224
-
225
- ```typescript
226
- // src/hooks/use-loyalty-points.ts
227
- import { useScapiFetcher } from '@/hooks/use-scapi-fetcher';
228
- import { useMemo, useCallback } from 'react';
229
-
230
- export function useLoyaltyPoints(customerId: string | undefined) {
231
- const parameters = useMemo(
232
- () => customerId ? {
233
- params: {
234
- path: { customerId },
235
- query: { siteId: getSiteId() }
236
- }
237
- } : null,
238
- [customerId]
239
- );
240
-
241
- const fetcher = useScapiFetcher(
242
- 'loyaltyPoints',
243
- 'getPoints',
244
- parameters
245
- );
246
-
247
- const refresh = useCallback(async () => {
248
- if (parameters) {
249
- await fetcher.load();
250
- }
251
- }, [fetcher, parameters]);
252
-
253
- return {
254
- points: fetcher.data?.points ?? 0,
255
- tier: fetcher.data?.tier ?? 'bronze',
256
- isLoading: fetcher.state === 'loading',
257
- refresh,
258
- };
259
- }
260
- ```
261
-
262
- ```typescript
263
- // src/components/loyalty-badge.tsx
264
- import { useLoyaltyPoints } from '@/hooks/use-loyalty-points';
265
-
266
- export function LoyaltyBadge({ customerId }: { customerId: string }) {
267
- const { points, tier, isLoading, refresh } = useLoyaltyPoints(customerId);
268
-
269
- useEffect(() => {
270
- refresh();
271
- }, [refresh]);
272
-
273
- if (isLoading) return <Skeleton className="h-6 w-16" />;
274
-
275
- return (
276
- <Badge variant={tier === 'platinum' ? 'default' : 'secondary'}>
277
- {points} pts
278
- </Badge>
279
- );
280
- }
281
- ```
282
-
283
- ### How It Works
284
-
285
- ```
286
- LoyaltyBadge renders
287
- → useLoyaltyPoints calls useScapiFetcher('loyaltyPoints', 'getPoints', params)
288
- → fetcher.load() sends GET to /resource/api/client/{encoded-params}
289
- → Resource route runs ON SERVER
290
- → createApiClients(context).loyaltyPoints.getPoints({...}) calls SCAPI
291
- → JSON response returned to component
292
- ```
293
-
294
- The custom API call happens server-side even though it's triggered from a client component.