@salesforce/b2c-dx-mcp 3.2.1 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/run.js +5 -9
- package/content/guidance/b2c/b2c-hooks/references/ORDER-HOOK-LIFECYCLE.md +1 -1
- package/content/guidance/b2c/b2c-onboarding/SKILL.md +4 -4
- package/content/guidance/b2c/b2c-ordering/SKILL.md +2 -2
- package/content/guidance/b2c/b2c-querying-data/SKILL.md +2 -2
- package/content/guidance/b2c/b2c-scapi-admin/SKILL.md +3 -3
- package/content/guidance/b2c/b2c-scapi-admin/references/CLIENT-EXAMPLES.md +4 -4
- package/content/guidance/b2c/b2c-scapi-shopper/SKILL.md +6 -6
- package/content/guidance/b2c/b2c-scapi-shopper/references/CLIENT-EXAMPLES.md +8 -9
- package/content/guidance/b2c-cli/b2c-cip/SKILL.md +3 -3
- package/content/guidance/b2c-cli/b2c-cip/references/SALES_ANALYSIS.md +1 -1
- package/content/guidance/b2c-cli/b2c-config/SKILL.md +54 -25
- package/content/guidance/b2c-cli/b2c-content/SKILL.md +1 -1
- package/content/guidance/b2c-cli/b2c-debug/SKILL.md +1 -1
- package/content/guidance/b2c-cli/b2c-docs/SKILL.md +23 -2
- package/content/guidance/b2c-cli/b2c-ecdn/SKILL.md +2 -0
- package/content/guidance/b2c-cli/b2c-ecdn/references/ADVANCED.md +1 -1
- package/content/guidance/b2c-cli/b2c-job/SKILL.md +9 -3
- package/content/guidance/b2c-cli/b2c-job/references/IMPORT.md +1 -1
- package/content/guidance/b2c-cli/b2c-job/references/RUN-AND-MONITOR.md +35 -6
- package/content/guidance/b2c-cli/b2c-metrics/SKILL.md +1 -1
- package/content/guidance/b2c-cli/b2c-mrt/SKILL.md +3 -3
- package/content/guidance/b2c-cli/b2c-scapi-custom/SKILL.md +1 -1
- package/content/guidance/b2c-cli/b2c-scapi-schemas/SKILL.md +6 -2
- package/content/guidance/b2c-cli/b2c-site-import-export/SKILL.md +1 -1
- package/content/guidance/b2c-cli/b2c-sites/SKILL.md +1 -1
- package/content/guidance/b2c-cli/b2c-slas/SKILL.md +1 -1
- package/content/guidance/b2c-ops/b2c-checkout-triage/SKILL.md +2 -2
- package/content/guidance/b2c-ops/b2c-edge-traffic-triage/SKILL.md +69 -0
- package/content/guidance/b2c-ops/b2c-job-health/SKILL.md +13 -8
- package/content/guidance/b2c-ops/b2c-order-failure-triage/SKILL.md +1 -1
- package/content/guidance/b2c-ops/b2c-order-failure-triage/references/order-evidence.md +2 -2
- package/content/guidance/b2c-ops/b2c-production-triage/SKILL.md +5 -4
- package/content/guidance/index.json +981 -259
- package/content/guidance/mcp/{cip → b2c-mcp-cip}/SKILL.md +10 -8
- package/content/guidance/mcp/{b2c-config → b2c-mcp-config}/SKILL.md +10 -9
- package/content/guidance/mcp/{debugger → b2c-mcp-debugger}/SKILL.md +9 -8
- package/content/guidance/mcp/b2c-mcp-scapi/SKILL.md +98 -0
- package/content/guidance/mcp/b2c-mcp-scapi/references/authentication.md +34 -0
- package/content/guidance/mcp/b2c-mcp-scapi/references/compose-verify.md +25 -0
- package/content/guidance/mcp/b2c-mcp-scapi/references/confirmation.md +30 -0
- package/content/guidance/mcp/b2c-mcp-scapi/references/discover.md +94 -0
- package/content/guidance/mcp/b2c-mcp-scapi/references/jobs.md +72 -0
- package/content/guidance/mcp/b2c-mcp-scapi/references/workflows.md +28 -0
- package/content/guidance/mcp/{server → b2c-mcp-server}/SKILL.md +52 -25
- package/content/guidance/storefront-next/sfnext-accessibility/SKILL.md +103 -0
- package/content/guidance/storefront-next/sfnext-accessibility/references/checklist.md +64 -0
- package/content/guidance/storefront-next/sfnext-analytics-consent/SKILL.md +91 -0
- package/content/guidance/storefront-next/sfnext-analytics-consent/references/CUSTOM-ADAPTER.md +49 -0
- package/content/guidance/storefront-next/sfnext-authentication/SKILL.md +86 -79
- package/content/guidance/storefront-next/sfnext-authentication/references/COOKIES.md +39 -0
- package/content/guidance/storefront-next/sfnext-authentication/references/LOGIN-FLOWS.md +59 -0
- package/content/guidance/storefront-next/sfnext-commerce-features/SKILL.md +67 -0
- package/content/guidance/storefront-next/sfnext-commerce-features/references/FEATURE-PREREQUISITES.md +37 -0
- package/content/guidance/storefront-next/sfnext-components/SKILL.md +98 -136
- package/content/guidance/storefront-next/sfnext-components/references/COMPONENT-AUTHORING.md +118 -0
- package/content/guidance/storefront-next/sfnext-components/references/SHAPE-TOKENS.md +51 -0
- package/content/guidance/storefront-next/sfnext-components/references/STORYBOOK.md +54 -0
- package/content/guidance/storefront-next/sfnext-components/references/TOKEN-SYSTEM.md +53 -0
- package/content/guidance/storefront-next/sfnext-components/references/TROUBLESHOOTING.md +19 -0
- package/content/guidance/storefront-next/sfnext-configuration/SKILL.md +116 -113
- package/content/guidance/storefront-next/sfnext-configuration/references/ENV-VARIABLES.md +55 -0
- package/content/guidance/storefront-next/sfnext-configuration/references/MULTI-SITE-URLS.md +137 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/SKILL.md +100 -150
- package/content/guidance/storefront-next/sfnext-data-fetching/references/ACTIONS.md +53 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/references/API-CLIENTS.md +34 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/references/LOADERS.md +73 -0
- package/content/guidance/storefront-next/sfnext-data-fetching/references/SCAPI-FETCHER.md +23 -77
- package/content/guidance/storefront-next/sfnext-deployment/SKILL.md +83 -97
- package/content/guidance/storefront-next/sfnext-deployment/references/MRT-DEPLOYMENT.md +37 -68
- package/content/guidance/storefront-next/sfnext-extensions/SKILL.md +73 -97
- package/content/guidance/storefront-next/sfnext-extensions/references/ACTION-HOOKS.md +57 -0
- package/content/guidance/storefront-next/sfnext-extensions/references/BASE-AUDIT.md +47 -44
- package/content/guidance/storefront-next/sfnext-extensions/references/CLI-AND-INSTALL.md +58 -0
- package/content/guidance/storefront-next/sfnext-extensions/references/EXTENSION-EXAMPLES.md +49 -86
- package/content/guidance/storefront-next/sfnext-hybrid-storefronts/SKILL.md +59 -114
- package/content/guidance/storefront-next/sfnext-hybrid-storefronts/references/HYBRID-PROXY-CONFIG.md +53 -90
- package/content/guidance/storefront-next/sfnext-i18n/SKILL.md +96 -131
- package/content/guidance/storefront-next/sfnext-i18n/references/locale-config.md +35 -0
- package/content/guidance/storefront-next/sfnext-overview/SKILL.md +101 -0
- package/content/guidance/storefront-next/sfnext-page-designer/SKILL.md +152 -131
- package/content/guidance/storefront-next/sfnext-page-designer/references/BUSINESS-MANAGER.md +46 -0
- package/content/guidance/storefront-next/sfnext-page-designer/references/COMPONENT-REGISTRY.md +86 -53
- package/content/guidance/storefront-next/sfnext-page-designer/references/DECORATOR-PATTERNS.md +119 -131
- package/content/guidance/storefront-next/sfnext-page-designer/references/REVIEW-CHECKLIST.md +83 -0
- package/content/guidance/storefront-next/sfnext-page-designer/references/TROUBLESHOOTING.md +35 -0
- package/content/guidance/storefront-next/sfnext-performance/SKILL.md +75 -105
- package/content/guidance/storefront-next/sfnext-performance/references/PERFORMANCE-REVIEW-CHECKLIST.md +85 -0
- package/content/guidance/storefront-next/sfnext-performance/references/SUSPENSE-AND-STREAMING.md +58 -0
- package/content/guidance/storefront-next/sfnext-project-setup/SKILL.md +103 -116
- package/content/guidance/storefront-next/sfnext-project-setup/references/PROJECT-STRUCTURE.md +61 -99
- package/content/guidance/storefront-next/sfnext-project-setup/references/SCRIPTS.md +47 -0
- package/content/guidance/storefront-next/sfnext-project-setup/references/SFNEXT-CLI.md +63 -0
- package/content/guidance/storefront-next/sfnext-quality-gates/SKILL.md +70 -0
- package/content/guidance/storefront-next/sfnext-quality-gates/references/lint-and-budgets.md +39 -0
- package/content/guidance/storefront-next/sfnext-revalidation/SKILL.md +121 -0
- package/content/guidance/storefront-next/sfnext-revalidation/references/POLICIES-AND-TAGS.md +55 -0
- package/content/guidance/storefront-next/sfnext-routing/SKILL.md +86 -143
- package/content/guidance/storefront-next/sfnext-routing/references/ROUTE-CONVENTIONS.md +51 -51
- package/content/guidance/storefront-next/sfnext-routing/references/URLS-AND-SEO-ROUTES.md +22 -0
- package/content/guidance/storefront-next/sfnext-scapi/SKILL.md +126 -0
- package/content/guidance/storefront-next/sfnext-scapi/references/WORKED-EXAMPLE.md +39 -0
- package/content/guidance/storefront-next/sfnext-security/SKILL.md +129 -0
- package/content/guidance/storefront-next/sfnext-security/references/COOKIE-DOMAIN.md +39 -0
- package/content/guidance/storefront-next/sfnext-security/references/TURNSTILE.md +43 -0
- package/content/guidance/storefront-next/sfnext-seo/SKILL.md +95 -0
- package/content/guidance/storefront-next/sfnext-seo/references/MULTI-DOMAIN-BASE-PATH.md +17 -0
- package/content/guidance/storefront-next/sfnext-seo/references/SEO-ROUTES.md +31 -0
- package/content/guidance/storefront-next/sfnext-state-management/SKILL.md +80 -89
- package/content/guidance/storefront-next/sfnext-state-management/references/PATTERNS.md +45 -0
- package/content/guidance/storefront-next/sfnext-testing/SKILL.md +105 -138
- package/content/guidance/storefront-next/sfnext-testing/references/E2E.md +38 -0
- package/content/guidance/storefront-next/sfnext-testing/references/STORYBOOK-PATTERNS.md +73 -94
- package/content/guidance/storefront-next/sfnext-testing/references/UNIT-AND-ROUTE-TESTS.md +60 -0
- package/content/guidance/storefront-next/sfnext-theming/SKILL.md +104 -0
- package/content/guidance/storefront-next/sfnext-theming/references/REBRAND-CHECKLIST.md +29 -0
- package/dist/commands/mcp.d.ts +8 -2
- package/dist/commands/mcp.js +54 -20
- package/dist/guidance.d.ts +4 -1
- package/dist/guidance.js +23 -5
- package/dist/registry.d.ts +2 -1
- package/dist/registry.js +3 -3
- package/dist/server.d.ts +10 -0
- package/dist/server.js +21 -0
- package/dist/skill-references.js +5 -5
- package/dist/tools/cartridges/index.js +1 -0
- package/dist/tools/cip/index.js +6 -3
- package/dist/tools/diagnostics/debug-capture-at-breakpoint.js +1 -1
- package/dist/tools/diagnostics/debug-set-breakpoints.js +1 -1
- package/dist/tools/diagnostics/debug-start-session.js +1 -1
- package/dist/tools/docs/docs-read.js +4 -2
- package/dist/tools/docs/docs-search.js +10 -8
- package/dist/tools/docs/topics.d.ts +5 -0
- package/dist/tools/docs/topics.js +5 -0
- package/dist/tools/scapi/index.d.ts +4 -1
- package/dist/tools/scapi/index.js +4 -2
- package/dist/tools/scapi/scapi-code.d.ts +2 -2
- package/dist/tools/scapi/scapi-code.js +106 -81
- package/dist/tools/scapi/scapi-schemas-list.js +93 -56
- package/dist/utils/types.d.ts +6 -0
- package/node_modules/@salesforce/b2c-agent-plugins/CHANGELOG.md +32 -0
- package/node_modules/@salesforce/b2c-agent-plugins/README.md +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/.codex-plugin/plugin.json +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/plugin.json +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-hooks/references/ORDER-HOOK-LIFECYCLE.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-onboarding/SKILL.md +4 -4
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-ordering/SKILL.md +2 -2
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-querying-data/SKILL.md +2 -2
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-admin/SKILL.md +3 -3
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-admin/references/CLIENT-EXAMPLES.md +4 -4
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-shopper/SKILL.md +6 -6
- package/node_modules/@salesforce/b2c-agent-plugins/b2c/skills/b2c-scapi-shopper/references/CLIENT-EXAMPLES.md +8 -9
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/.codex-plugin/plugin.json +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/plugin.json +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-cip/SKILL.md +3 -3
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-cip/references/SALES_ANALYSIS.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-config/SKILL.md +54 -25
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-content/SKILL.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-debug/SKILL.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-docs/SKILL.md +23 -2
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-ecdn/SKILL.md +2 -0
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-ecdn/references/ADVANCED.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-job/SKILL.md +9 -3
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-job/references/IMPORT.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-job/references/RUN-AND-MONITOR.md +35 -6
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-metrics/SKILL.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-mrt/SKILL.md +3 -3
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-scapi-custom/SKILL.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-scapi-schemas/SKILL.md +6 -2
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-site-import-export/SKILL.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-sites/SKILL.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-cli/skills/b2c-slas/SKILL.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/.codex-plugin/plugin.json +4 -3
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/README.md +1 -0
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/plugin.json +4 -3
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-checkout-triage/SKILL.md +2 -2
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-edge-traffic-triage/SKILL.md +69 -0
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-job-health/SKILL.md +13 -8
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-order-failure-triage/SKILL.md +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-order-failure-triage/references/order-evidence.md +2 -2
- package/node_modules/@salesforce/b2c-agent-plugins/b2c-ops/skills/b2c-production-triage/SKILL.md +5 -4
- package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/README.md +4 -4
- package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/SKILL.md +76 -73
- package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/evals/trigger-evals.json +12 -10
- package/node_modules/@salesforce/b2c-agent-plugins/figma-to-sfnext-pagedesigner/skills/figma-to-sfnext-pagedesigner/references/PAGE-DESIGNER-SFN.md +49 -74
- package/node_modules/@salesforce/b2c-agent-plugins/package.json +1 -1
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/.codex-plugin/plugin.json +9 -6
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/README.md +43 -22
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/plugin.json +9 -6
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/SKILL.md +103 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-accessibility/references/checklist.md +64 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/SKILL.md +91 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-analytics-consent/references/CUSTOM-ADAPTER.md +49 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/SKILL.md +86 -79
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/references/COOKIES.md +39 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-authentication/references/LOGIN-FLOWS.md +59 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/SKILL.md +67 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-commerce-features/references/FEATURE-PREREQUISITES.md +37 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/SKILL.md +98 -136
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/COMPONENT-AUTHORING.md +118 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/SHAPE-TOKENS.md +51 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/STORYBOOK.md +54 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/TOKEN-SYSTEM.md +53 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-components/references/TROUBLESHOOTING.md +19 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/SKILL.md +116 -113
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/references/ENV-VARIABLES.md +55 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-configuration/references/MULTI-SITE-URLS.md +137 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/SKILL.md +100 -150
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/ACTIONS.md +53 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/API-CLIENTS.md +34 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/LOADERS.md +73 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/SCAPI-FETCHER.md +23 -77
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/SKILL.md +83 -97
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-deployment/references/MRT-DEPLOYMENT.md +37 -68
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/SKILL.md +73 -97
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/ACTION-HOOKS.md +57 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/BASE-AUDIT.md +47 -44
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/CLI-AND-INSTALL.md +58 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-extensions/references/EXTENSION-EXAMPLES.md +49 -86
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/SKILL.md +59 -114
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-hybrid-storefronts/references/HYBRID-PROXY-CONFIG.md +53 -90
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/SKILL.md +96 -131
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-i18n/references/locale-config.md +35 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-overview/SKILL.md +101 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-overview/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/SKILL.md +152 -131
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/BUSINESS-MANAGER.md +46 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/COMPONENT-REGISTRY.md +86 -53
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/DECORATOR-PATTERNS.md +119 -131
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/REVIEW-CHECKLIST.md +83 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-page-designer/references/TROUBLESHOOTING.md +35 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/SKILL.md +75 -105
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/references/PERFORMANCE-REVIEW-CHECKLIST.md +85 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-performance/references/SUSPENSE-AND-STREAMING.md +58 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/SKILL.md +103 -116
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/PROJECT-STRUCTURE.md +61 -99
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/SCRIPTS.md +47 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/SFNEXT-CLI.md +63 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/SKILL.md +70 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-quality-gates/references/lint-and-budgets.md +39 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/SKILL.md +121 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-revalidation/references/POLICIES-AND-TAGS.md +55 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/SKILL.md +86 -143
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/references/ROUTE-CONVENTIONS.md +51 -51
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-routing/references/URLS-AND-SEO-ROUTES.md +22 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/SKILL.md +126 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi/references/WORKED-EXAMPLE.md +39 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/SKILL.md +129 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/references/COOKIE-DOMAIN.md +39 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-security/references/TURNSTILE.md +43 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/SKILL.md +95 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/references/MULTI-DOMAIN-BASE-PATH.md +17 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-seo/references/SEO-ROUTES.md +31 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/SKILL.md +80 -89
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-state-management/references/PATTERNS.md +45 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/SKILL.md +105 -138
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/E2E.md +38 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/STORYBOOK-PATTERNS.md +73 -94
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-testing/references/UNIT-AND-ROUTE-TESTS.md +60 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/SKILL.md +104 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/evals/trigger-evals.json +5 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-theming/references/REBRAND-CHECKLIST.md +29 -0
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next-figma/skills/sfnext-create-figma-kit/SKILL.md +3 -3
- package/oclif.manifest.json +21 -4
- package/package.json +4 -4
- package/content/guidance/mcp/scapi/SKILL.md +0 -203
- package/content/guidance/mcp/scapi/references/jobs.md +0 -30
- package/content/guidance/storefront-next/sfnext-create-component/SKILL.md +0 -195
- package/content/guidance/storefront-next/sfnext-create-component/references/COMPONENT-AUTHORING.md +0 -206
- package/content/guidance/storefront-next/sfnext-create-component/references/PROJECT-STRUCTURE.md +0 -43
- package/content/guidance/storefront-next/sfnext-create-component/references/TOKEN-SYSTEM.md +0 -130
- package/content/guidance/storefront-next/sfnext-create-component/references/TROUBLESHOOTING.md +0 -34
- package/content/guidance/storefront-next/sfnext-create-vertical/SKILL.md +0 -135
- package/content/guidance/storefront-next/sfnext-create-vertical/references/COMPONENT-AUTHORING.md +0 -206
- package/content/guidance/storefront-next/sfnext-create-vertical/references/PROJECT-STRUCTURE.md +0 -43
- package/content/guidance/storefront-next/sfnext-create-vertical/references/TOKEN-SYSTEM.md +0 -130
- package/content/guidance/storefront-next/sfnext-create-vertical/references/TROUBLESHOOTING.md +0 -34
- package/content/guidance/storefront-next/sfnext-custom-apis/SKILL.md +0 -221
- package/content/guidance/storefront-next/sfnext-custom-apis/references/WORKFLOW-EXAMPLES.md +0 -294
- package/content/guidance/storefront-next/sfnext-data-fetching/references/LOADER-PATTERNS.md +0 -102
- package/content/guidance/storefront-next/sfnext-project-setup/references/ENV-VARIABLES.md +0 -82
- package/content/guidance/storefront-next/sfnext-scapi-management/SKILL.md +0 -203
- package/content/guidance/storefront-next/sfnext-scapi-management/references/CLI-COMMANDS.md +0 -122
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/SKILL.md +0 -195
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/evals/trigger-evals.json +0 -12
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/COMPONENT-AUTHORING.md +0 -206
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/PROJECT-STRUCTURE.md +0 -43
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/TOKEN-SYSTEM.md +0 -130
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-component/references/TROUBLESHOOTING.md +0 -34
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/SKILL.md +0 -135
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/evals/trigger-evals.json +0 -12
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/COMPONENT-AUTHORING.md +0 -206
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/PROJECT-STRUCTURE.md +0 -43
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/TOKEN-SYSTEM.md +0 -130
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-create-vertical/references/TROUBLESHOOTING.md +0 -34
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/SKILL.md +0 -221
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/evals/trigger-evals.json +0 -12
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-custom-apis/references/WORKFLOW-EXAMPLES.md +0 -294
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-data-fetching/references/LOADER-PATTERNS.md +0 -102
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-project-setup/references/ENV-VARIABLES.md +0 -82
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/SKILL.md +0 -203
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/evals/trigger-evals.json +0 -12
- package/node_modules/@salesforce/b2c-agent-plugins/storefront-next/skills/sfnext-scapi-management/references/CLI-COMMANDS.md +0 -122
- /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/custom-apis.md +0 -0
- /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/custom-properties.md +0 -0
- /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/products.md +0 -0
- /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/promotions.md +0 -0
- /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/saving.md +0 -0
- /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/snippets.md +0 -0
- /package/content/guidance/mcp/{scapi → b2c-mcp-scapi}/references/tokens.md +0 -0
- /package/content/guidance/mcp/{server → b2c-mcp-server}/references/files.md +0 -0
|
@@ -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.
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
# Loader Patterns Reference
|
|
2
|
-
|
|
3
|
-
## Data Flow
|
|
4
|
-
|
|
5
|
-
### Initial Page Load (SSR)
|
|
6
|
-
|
|
7
|
-
```
|
|
8
|
-
Browser request → MRT Server
|
|
9
|
-
↓
|
|
10
|
-
loader() runs on server
|
|
11
|
-
↓
|
|
12
|
-
SCAPI requests on MRT
|
|
13
|
-
↓
|
|
14
|
-
HTML response streamed → Browser
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
### Subsequent Navigation (SPA)
|
|
18
|
-
|
|
19
|
-
```
|
|
20
|
-
User clicks link → React Router intercepts
|
|
21
|
-
↓
|
|
22
|
-
Browser fetches from server
|
|
23
|
-
↓
|
|
24
|
-
MRT Server runs same loader()
|
|
25
|
-
↓
|
|
26
|
-
SCAPI requests on MRT
|
|
27
|
-
↓
|
|
28
|
-
JSON response → Browser
|
|
29
|
-
↓
|
|
30
|
-
React updates DOM
|
|
31
|
-
```
|
|
32
|
-
|
|
33
|
-
The loader code is identical for SSR and SPA navigation — only the response format differs (HTML vs JSON).
|
|
34
|
-
|
|
35
|
-
## Decision Tree: Which Pattern to Use
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
Need data for page render?
|
|
39
|
-
├── Critical for SEO / above-the-fold?
|
|
40
|
-
│ └── Use awaited data (async loader with await)
|
|
41
|
-
├── Non-critical / below-the-fold?
|
|
42
|
-
│ └── Use deferred data (sync loader, return promises)
|
|
43
|
-
└── Mix of both?
|
|
44
|
-
└── Use mixed strategy (await critical, stream rest)
|
|
45
|
-
|
|
46
|
-
Need to handle mutations?
|
|
47
|
-
└── Use action function
|
|
48
|
-
|
|
49
|
-
Need data after page load (user interaction)?
|
|
50
|
-
└── Use useScapiFetcher
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
## Pattern: Multiple API Calls with Dependencies
|
|
54
|
-
|
|
55
|
-
When one API call depends on another's result:
|
|
56
|
-
|
|
57
|
-
```typescript
|
|
58
|
-
export async function loader({ params, context }: LoaderFunctionArgs) {
|
|
59
|
-
const clients = createApiClients(context);
|
|
60
|
-
|
|
61
|
-
// First call — must resolve before dependent calls
|
|
62
|
-
const category = await clients.shopperProducts.getCategory({
|
|
63
|
-
params: { path: { id: params.categoryId } }
|
|
64
|
-
}).then(({ data }) => data);
|
|
65
|
-
|
|
66
|
-
// Dependent calls — can run in parallel with each other
|
|
67
|
-
return {
|
|
68
|
-
category,
|
|
69
|
-
products: clients.shopperSearch.productSearch({
|
|
70
|
-
params: { query: { refine: `cgid=${category.id}` } }
|
|
71
|
-
}).then(({ data }) => data),
|
|
72
|
-
refinements: clients.shopperSearch.getSearchSuggestions({
|
|
73
|
-
params: { query: { q: category.name } }
|
|
74
|
-
}).then(({ data }) => data),
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Pattern: Conditional Data Loading
|
|
80
|
-
|
|
81
|
-
```typescript
|
|
82
|
-
export function loader({ params, context }: LoaderFunctionArgs) {
|
|
83
|
-
const clients = createApiClients(context);
|
|
84
|
-
const auth = getAuth(context);
|
|
85
|
-
|
|
86
|
-
const base = {
|
|
87
|
-
product: clients.shopperProducts.getProduct({
|
|
88
|
-
params: { path: { id: params.productId } }
|
|
89
|
-
}).then(({ data }) => data),
|
|
90
|
-
};
|
|
91
|
-
|
|
92
|
-
// Only fetch wishlist for registered users
|
|
93
|
-
if (auth.userType === 'registered') {
|
|
94
|
-
return {
|
|
95
|
-
...base,
|
|
96
|
-
wishlist: clients.shopperCustomers.getWishlist({...}).then(({ data }) => data),
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return base;
|
|
101
|
-
}
|
|
102
|
-
```
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# Environment Variables Reference
|
|
2
|
-
|
|
3
|
-
## Naming Convention
|
|
4
|
-
|
|
5
|
-
Environment variables use the `PUBLIC__` prefix with double underscore (`__`) separators to map to configuration paths:
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
# Pattern: PUBLIC__app__{path}__{to}__{property}=value
|
|
9
|
-
PUBLIC__app__commerce__api__clientId=abc123
|
|
10
|
-
# Maps to: config.app.commerce.api.clientId
|
|
11
|
-
# Accessed as: getConfig(context).commerce.api.clientId
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## Rules
|
|
15
|
-
|
|
16
|
-
1. **`PUBLIC__` prefix** — Exposed to browser (client-safe values only)
|
|
17
|
-
2. **No prefix** — Server-only secrets (never sent to client)
|
|
18
|
-
3. **`__` separator** — Navigates nested config paths
|
|
19
|
-
4. **Case-insensitive** — All casings work (normalized to match `config.server.ts`)
|
|
20
|
-
5. **Auto-parsing** — Strings, numbers, booleans, JSON arrays/objects parsed automatically
|
|
21
|
-
6. **Validation** — Paths must exist in `config.server.ts` (prevents typos)
|
|
22
|
-
7. **Depth limit** — Maximum 10 levels deep (use JSON for deeper nesting)
|
|
23
|
-
8. **Path precedence** — More specific paths override less specific ones
|
|
24
|
-
9. **Protected paths** — `app__engagement` cannot be overridden via environment variables
|
|
25
|
-
10. **MRT limits** — Variable names max 512 characters, total `PUBLIC__` values max 32KB
|
|
26
|
-
|
|
27
|
-
## Required Variables
|
|
28
|
-
|
|
29
|
-
| Variable | Description |
|
|
30
|
-
|----------|-------------|
|
|
31
|
-
| `PUBLIC__app__commerce__api__clientId` | SLAS client ID |
|
|
32
|
-
| `PUBLIC__app__commerce__api__organizationId` | Commerce Cloud organization ID |
|
|
33
|
-
| `PUBLIC__app__commerce__api__siteId` | Default site ID |
|
|
34
|
-
| `PUBLIC__app__commerce__api__shortCode` | API short code |
|
|
35
|
-
| `PUBLIC__app__defaultSiteId` | Default site ID for routing |
|
|
36
|
-
| `PUBLIC__app__commerce__sites` | JSON array of site configurations |
|
|
37
|
-
|
|
38
|
-
## Server-Only Variables
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
# Server-only secrets (no PUBLIC__ prefix)
|
|
42
|
-
COMMERCE_API_SLAS_SECRET=your-slas-secret
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Access server-only secrets via `process.env` directly — never add them to the config system.
|
|
46
|
-
|
|
47
|
-
## Multi-Site Configuration
|
|
48
|
-
|
|
49
|
-
The `commerce.sites` array defines site configurations:
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
PUBLIC__app__commerce__sites='[
|
|
53
|
-
{
|
|
54
|
-
"id": "RefArchGlobal",
|
|
55
|
-
"defaultLocale": "en-US",
|
|
56
|
-
"defaultCurrency": "USD",
|
|
57
|
-
"supportedLocales": [
|
|
58
|
-
{"id": "en-US", "preferredCurrency": "USD"},
|
|
59
|
-
{"id": "de-DE", "preferredCurrency": "EUR"}
|
|
60
|
-
],
|
|
61
|
-
"supportedCurrencies": ["USD", "EUR"]
|
|
62
|
-
}
|
|
63
|
-
]'
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
## Setting Complex Values
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
# Individual variables
|
|
70
|
-
PUBLIC__app__myFeature__option1=value1
|
|
71
|
-
PUBLIC__app__myFeature__option2=value2
|
|
72
|
-
|
|
73
|
-
# Or as a single JSON value
|
|
74
|
-
PUBLIC__app__myFeature='{"option1":"value1","option2":"value2"}'
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
## Security Guidelines
|
|
78
|
-
|
|
79
|
-
| Prefix | Visibility | Use For |
|
|
80
|
-
|--------|-----------|---------|
|
|
81
|
-
| `PUBLIC__` | Browser + Server | Client IDs, site IDs, feature flags |
|
|
82
|
-
| (none) | Server only | API secrets, private keys, credentials |
|
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sfnext-scapi-management
|
|
3
|
-
description: Add, remove, and list typed SCAPI clients in a Storefront Next project using `b2c sfnext scapi` commands, and browse API schemas to discover endpoints before writing loaders. Use this skill whenever the user says 'sfnext scapi', 'add an API to my storefront next project', 'what SCAPI clients does my sfnext project have', 'remove an API client', 'list available APIs for sfnext', 'browse schema before writing a loader', or asks how to integrate a specific SCAPI (shopper-baskets, shopper-search, etc.) into their Storefront Next project as a typed client. Also use when they want to check what parameters an endpoint accepts before coding. NOT for making actual SCAPI calls from loaders — see sfnext-data-fetching. NOT for standalone schema browsing outside a Storefront Next project — see b2c-cli:b2c-scapi-schemas.
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# SCAPI Client Management Skill
|
|
7
|
-
|
|
8
|
-
This skill covers managing which typed SCAPI clients are available in a Storefront Next project and how to discover their shapes before writing data-fetching code.
|
|
9
|
-
|
|
10
|
-
## Overview
|
|
11
|
-
|
|
12
|
-
Storefront Next projects use typed SCAPI clients generated from OpenAPI schemas. Two complementary command sets work together:
|
|
13
|
-
|
|
14
|
-
| Command Set | Purpose | When to Use |
|
|
15
|
-
|-------------|---------|-------------|
|
|
16
|
-
| `b2c sfnext scapi` | Manage which clients exist in your project | Adding/removing APIs, checking what's configured |
|
|
17
|
-
| `b2c scapi schemas` | Browse API shapes (endpoints, fields, types) | Before writing a loader — discover what's available |
|
|
18
|
-
|
|
19
|
-
## Managing Project Clients
|
|
20
|
-
|
|
21
|
-
### List Available APIs
|
|
22
|
-
|
|
23
|
-
See what SCAPI APIs can be added to your project:
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
# show all APIs available to add
|
|
27
|
-
b2c sfnext scapi available
|
|
28
|
-
|
|
29
|
-
# filter by API family
|
|
30
|
-
b2c sfnext scapi available --api-family product
|
|
31
|
-
|
|
32
|
-
# JSON output for scripting
|
|
33
|
-
b2c sfnext scapi available --json
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
### Add a Client
|
|
37
|
-
|
|
38
|
-
Add a typed SCAPI client to your project. This generates type-safe client code accessible via `createApiClients(context)`:
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
# add the shopper-products API
|
|
42
|
-
b2c sfnext scapi add product shopper-products v1
|
|
43
|
-
|
|
44
|
-
# add a custom API
|
|
45
|
-
b2c sfnext scapi add custom my-loyalty-api v1
|
|
46
|
-
|
|
47
|
-
# force re-add (overwrite existing)
|
|
48
|
-
b2c sfnext scapi add product shopper-products v1 --force
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
After adding, the client becomes available in your loaders:
|
|
52
|
-
|
|
53
|
-
```typescript
|
|
54
|
-
import { createApiClients } from '@/lib/api-clients';
|
|
55
|
-
|
|
56
|
-
export function loader({ context }: LoaderFunctionArgs) {
|
|
57
|
-
const clients = createApiClients(context);
|
|
58
|
-
return {
|
|
59
|
-
product: clients.shopperProducts.getProduct({
|
|
60
|
-
params: { path: { id: params.productId } }
|
|
61
|
-
}).then(({ data }) => data),
|
|
62
|
-
};
|
|
63
|
-
}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
### List Current Project Clients
|
|
67
|
-
|
|
68
|
-
See which SCAPI clients are currently configured in your project:
|
|
69
|
-
|
|
70
|
-
```bash
|
|
71
|
-
# list all configured clients
|
|
72
|
-
b2c sfnext scapi list
|
|
73
|
-
|
|
74
|
-
# JSON output
|
|
75
|
-
b2c sfnext scapi list --json
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
### Remove a Client
|
|
79
|
-
|
|
80
|
-
Remove an unused client to reduce bundle size:
|
|
81
|
-
|
|
82
|
-
```bash
|
|
83
|
-
# remove a client
|
|
84
|
-
b2c sfnext scapi remove product shopper-products
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
## Discovering API Shapes
|
|
88
|
-
|
|
89
|
-
Before writing a loader or action, use `b2c scapi schemas` to explore what endpoints and fields an API offers.
|
|
90
|
-
|
|
91
|
-
### The Schema-First Workflow
|
|
92
|
-
|
|
93
|
-
```
|
|
94
|
-
1. b2c scapi schemas list → Find the API family/name/version
|
|
95
|
-
2. b2c scapi schemas get ... --list-paths → See available endpoints
|
|
96
|
-
3. b2c scapi schemas get ... --expand-paths → See request params + response shape
|
|
97
|
-
4. Write your loader using the discovered types
|
|
98
|
-
```
|
|
99
|
-
|
|
100
|
-
### Step 1: Find the API
|
|
101
|
-
|
|
102
|
-
```bash
|
|
103
|
-
# list all available schemas
|
|
104
|
-
b2c scapi schemas list
|
|
105
|
-
|
|
106
|
-
# filter to product APIs
|
|
107
|
-
b2c scapi schemas list --api-family product
|
|
108
|
-
```
|
|
109
|
-
|
|
110
|
-
### Step 2: See Available Endpoints
|
|
111
|
-
|
|
112
|
-
```bash
|
|
113
|
-
# list all paths in shopper-products
|
|
114
|
-
b2c scapi schemas get product shopper-products v1 --list-paths
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
Output shows endpoints like `/products/{productId}`, `/products`, etc.
|
|
118
|
-
|
|
119
|
-
### Step 3: Expand Endpoint Details
|
|
120
|
-
|
|
121
|
-
```bash
|
|
122
|
-
# see the full shape of a specific endpoint
|
|
123
|
-
b2c scapi schemas get product shopper-products v1 --expand-paths /products/{productId}
|
|
124
|
-
|
|
125
|
-
# see the response schema type
|
|
126
|
-
b2c scapi schemas get product shopper-products v1 --expand-schemas Product
|
|
127
|
-
|
|
128
|
-
# combine: endpoint + its response type
|
|
129
|
-
b2c scapi schemas get product shopper-products v1 \
|
|
130
|
-
--expand-paths /products/{productId} \
|
|
131
|
-
--expand-schemas Product,ProductResult
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### Step 4: Write Your Loader
|
|
135
|
-
|
|
136
|
-
Now that you know the endpoint path and parameter structure, write your loader:
|
|
137
|
-
|
|
138
|
-
```typescript
|
|
139
|
-
export function loader({ params, context }: LoaderFunctionArgs) {
|
|
140
|
-
const clients = createApiClients(context);
|
|
141
|
-
return {
|
|
142
|
-
product: clients.shopperProducts.getProduct({
|
|
143
|
-
params: { path: { id: params.productId } }
|
|
144
|
-
}).then(({ data }) => data),
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
## Example: Adding and Using a New API
|
|
150
|
-
|
|
151
|
-
Complete walkthrough — adding shopper-search and writing a search loader:
|
|
152
|
-
|
|
153
|
-
```bash
|
|
154
|
-
# 1. Check what's available
|
|
155
|
-
b2c sfnext scapi available --api-family search
|
|
156
|
-
|
|
157
|
-
# 2. Add the client
|
|
158
|
-
b2c sfnext scapi add search shopper-search v1
|
|
159
|
-
|
|
160
|
-
# 3. Discover endpoints
|
|
161
|
-
b2c scapi schemas get search shopper-search v1 --list-paths
|
|
162
|
-
|
|
163
|
-
# 4. Inspect the productSearch endpoint
|
|
164
|
-
b2c scapi schemas get search shopper-search v1 \
|
|
165
|
-
--expand-paths /product-search \
|
|
166
|
-
--expand-schemas ProductSearchResult
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
Then write the loader:
|
|
170
|
-
|
|
171
|
-
```typescript
|
|
172
|
-
export function loader({ request, context }: LoaderFunctionArgs) {
|
|
173
|
-
const url = new URL(request.url);
|
|
174
|
-
const q = url.searchParams.get('q') ?? '';
|
|
175
|
-
const clients = createApiClients(context);
|
|
176
|
-
|
|
177
|
-
return {
|
|
178
|
-
results: clients.shopperSearch.productSearch({
|
|
179
|
-
params: { query: { q, limit: 25 } }
|
|
180
|
-
}).then(({ data }) => data),
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
## Common Pitfalls
|
|
186
|
-
|
|
187
|
-
| Pitfall | Problem | Solution |
|
|
188
|
-
|---------|---------|----------|
|
|
189
|
-
| Writing a loader without checking the schema | Wrong parameter names or missing required fields | Run `--expand-paths` first to see exact param structure |
|
|
190
|
-
| Adding an API but client not appearing | Missing `pnpm install` after add | Run `pnpm install` to regenerate types |
|
|
191
|
-
| Trying to browse custom API schemas before registration | Schema returns empty/404 | Deploy and register the custom API first (see `sfnext-custom-apis`) |
|
|
192
|
-
| Using wrong API version | Types don't match runtime behavior | Use `scapi available` to verify the current version |
|
|
193
|
-
|
|
194
|
-
## Related Skills
|
|
195
|
-
|
|
196
|
-
- `storefront-next:sfnext-data-fetching` - Using the clients in loaders, actions, and useScapiFetcher
|
|
197
|
-
- `storefront-next:sfnext-custom-apis` - End-to-end custom API implementation and consumption
|
|
198
|
-
- `b2c-cli:b2c-scapi-schemas` - Full reference for schema browsing commands and flags
|
|
199
|
-
- `storefront-next:sfnext-project-setup` - Project creation and initial structure
|
|
200
|
-
|
|
201
|
-
## Reference Documentation
|
|
202
|
-
|
|
203
|
-
- [CLI Commands Reference](references/CLI-COMMANDS.md) - Detailed command reference for `b2c sfnext scapi`
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
[
|
|
2
|
-
{"query": "I just scaffolded a new storefront next project and I need to add the shopper-search API so I can build a search results page. What's the command to add it and how do I verify it's available in my createApiClients factory?", "should_trigger": true},
|
|
3
|
-
{"query": "How do I run b2c sfnext scapi available to see which APIs I can add to my storefront next project? I want to know what's available before setting up my data fetching.", "should_trigger": true},
|
|
4
|
-
{"query": "I need to integrate the shopper-baskets-v2 API into my storefront next checkout flow. Can you walk me through the b2c sfnext scapi add command and then checking the schema?", "should_trigger": true},
|
|
5
|
-
{"query": "I ran b2c sfnext scapi list and see APIs I no longer use in my storefront next project. How do I remove them with scapi remove to reduce my bundle size?", "should_trigger": true},
|
|
6
|
-
{"query": "I'm setting up a new storefront next project and want to add the shopper-customers API as a typed client. What does b2c sfnext scapi add do exactly and where does the generated client code end up?", "should_trigger": true},
|
|
7
|
-
{"query": "I have the shopper-products client already added. Now I need to write a loader function that calls getProduct and returns the data. How do I use createApiClients in a route loader?", "should_trigger": false},
|
|
8
|
-
{"query": "My storefront next build is failing because of TypeScript errors in my route components. How do I run the typecheck and fix the issues?", "should_trigger": false},
|
|
9
|
-
{"query": "I want to look at all the SCAPI schemas available across Commerce Cloud without any specific project context. Just need to browse the full API catalog.", "should_trigger": false},
|
|
10
|
-
{"query": "I need to write the server-side script.js implementation for a custom API endpoint that returns loyalty points from a custom object.", "should_trigger": false},
|
|
11
|
-
{"query": "How do I set up the initial environment variables and dw.json for a brand new storefront next project before running pnpm dev?", "should_trigger": false}
|
|
12
|
-
]
|