Skip to content
Merged
Show file tree
Hide file tree
Changes from 61 commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
9d60d63
feat: add app_pwakit_base B2C cartridge for email delivery and fix GL…
bendvc Sep 11, 2026
033dbcd
fix: address code review findings for app_pwakit_base cartridge
bendvc Sep 11, 2026
4d46c77
fix: prettier formatting and remove unused parseCookieValue helper
bendvc Sep 11, 2026
6eea713
chore: exclude cartridges/ from eslint and prettier (B2C CommonJS style)
bendvc Sep 11, 2026
2cf8319
docs: add sfcc-ci CLI and B2C DX Claude plugin install steps to README
bendvc Sep 11, 2026
3efb628
docs: simplify install to sfcc-ci only, drop manual WebDAV path
bendvc Sep 11, 2026
c61c6b7
docs: add SLAS Admin scope setup and PWA_KIT_SLAS_CLIENT_SECRET to RE…
bendvc Sep 11, 2026
52b848e
docs: clarify pwakit-notify requires private SLAS client, independent…
bendvc Sep 11, 2026
ecb8b6e
fix: support public client for pwakit-notify; fall back to PKCE guest…
bendvc Sep 14, 2026
db0c68d
Merge remote-tracking branch 'origin/develop' into feature/b2c-email-…
bendvc Sep 14, 2026
a674917
docs: add pwa-kit-create-app CHANGELOG entry for ssr.js.hbs template …
bendvc Sep 14, 2026
2a2cc65
revert: restore useSLASPrivateClient to false
bendvc Sep 14, 2026
b4ab4c3
fix: prettier formatting in ssr.js.hbs templates
bendvc Sep 14, 2026
79d6ec9
fix: update tests to match new auth and email mechanism
bendvc Sep 14, 2026
45f7678
fix: remove unused rest import and fix prettier in ssr.test.js
bendvc Sep 14, 2026
4105f95
feat(cartridge): rename email templates to flow-based names and fix g…
bendvc Sep 15, 2026
b22ac5d
Merge remote-tracking branch 'origin/develop' into feature/b2c-email-…
bendvc Sep 15, 2026
e816acd
feat(cartridge): port callerHost validation, buildOrderLookupUrl help…
bendvc Sep 16, 2026
96bd154
fix(cartridge): replace oneOf+discriminator with anyOf in pwakit-noti…
bendvc Sep 16, 2026
815b684
fix(cartridge): address code review findings — retry on 401, eCDN rou…
bendvc Sep 17, 2026
af5f1c6
chore(cartridge): switch deploy tooling from sfcc-ci to b2c-cli
bendvc Sep 17, 2026
61324d5
chore(cartridge): add --activate flag to deploy:cartridge script
bendvc Sep 17, 2026
c36fa8c
chore(cartridge): use --reload instead of --activate to force SCAPI c…
bendvc Sep 17, 2026
8d31ea1
fix(ssr): revert pwakit-notify URL to org-level path — /sites/{siteId…
bendvc Sep 17, 2026
b191898
feat: convert pwakit-notify to site-scoped SCAPI custom API
bendvc Sep 17, 2026
04eb018
docs: update CHANGELOG — b2c-cli deploy, site-scoped URL, c_pwakit_no…
bendvc Sep 17, 2026
9963fd1
docs: clarify c_pwakit_notify must be a default scope, not just allowed
bendvc Sep 17, 2026
276feb6
revert: restore org-scoped pwakit-notify endpoint
bendvc Sep 17, 2026
4d09f3c
feat: forward locale to pwakit-notify cartridge
bendvc Sep 17, 2026
01c98ef
fix: prettier formatting — locale URL template and test args
bendvc Sep 17, 2026
ff4ccc5
chore: revert sandbox-specific config before staging push
bendvc Sep 18, 2026
2d675c2
fix: restore callback mode and callbackURIs for email flows
bendvc Sep 18, 2026
45b0f15
chore: merge develop into feature/b2c-email-cartridge
bendvc Sep 18, 2026
ad7a93e
fix: exclude deploy:* scripts from smoke test
bendvc Sep 18, 2026
d9f69ae
fix: revert useSLASPrivateClient to false
bendvc Sep 18, 2026
d525072
fix: address PR review comments — template sync, tenant check, localA…
bendvc Sep 21, 2026
5d125c0
test: add wrong-tenant local-JWKS regression test; fix mode assertion
bendvc Sep 21, 2026
b07ead6
fix: remove trailing whitespace and extra EOF blank line
bendvc Sep 21, 2026
8e0ab99
fix: export _resetNotifyTokenCacheForTest and extractLocaleFromUrl fr…
bendvc Sep 21, 2026
d003b3b
Merge remote-tracking branch 'origin/develop' into feature/b2c-email-…
bendvc Sep 21, 2026
17c5015
fix: export getNotifyToken/sendViaB2cCartridge and add tenant check b…
bendvc Sep 21, 2026
6caa21b
fix: address syedshehrozhussain review — ISML encoding, host case, op…
bendvc Sep 22, 2026
7e8773c
revert: remove notifyClientId and private-client relay recommendation
bendvc Sep 22, 2026
2125383
security: validate recipient exists in CustomerMgr before sending not…
bendvc Sep 29, 2026
f1b9b2c
chore: merge origin/develop into feature/b2c-email-cartridge
bendvc Sep 29, 2026
4325cbb
Merge remote-tracking branch 'origin/develop' into feature/b2c-email-…
bendvc Oct 5, 2026
a412e61
security: use dedicated SLAS private client for pwakit-notify token
bendvc Oct 5, 2026
2958676
Revert "security: use dedicated SLAS private client for pwakit-notify…
bendvc Oct 7, 2026
409b272
docs: add SIH security section to pwakit-notify README; resolve merge…
bendvc Oct 7, 2026
462a2ab
fix: escape OTP token in registrationVerification.isml with isprint h…
bendvc Oct 7, 2026
ce15eef
Reapply "security: use dedicated SLAS private client for pwakit-notif…
bendvc Oct 8, 2026
38a4807
fix: address security review findings from sf-jie-dai
bendvc Oct 8, 2026
4f9232a
chore: revert generated defaults to callback mode
bendvc Oct 8, 2026
dd87529
refactor: replace org-level host allowlist with per-site pwakitStoref…
bendvc Oct 8, 2026
b89e8c1
fix: remove dead plainBody variable and unused Resource import from s…
bendvc Oct 8, 2026
b4e911c
chore: revert sandbox credentials in config/default.js to zzrf-001 de…
bendvc Oct 8, 2026
bf88f8d
chore: rename pwakit preference group display name to PWA-Kit Configs
bendvc Oct 8, 2026
c7b1666
chore: simplify href encoding in email templates and add pageTitle pr…
bendvc Oct 9, 2026
e7084ee
fix: address pre-merge review findings and restore notifyClientId def…
bendvc Oct 9, 2026
b34417a
fix: prettier formatting on registration-verification callback mode g…
bendvc Oct 9, 2026
54478e4
Merge remote-tracking branch 'origin/develop' into feature/b2c-email-…
bendvc Oct 9, 2026
a6eadaa
fix: address sf-jie-dai review findings — sync ssr.js.hbs templates a…
bendvc Oct 13, 2026
83953d0
Merge remote-tracking branch 'origin/develop' into feature/b2c-email-…
bendvc Oct 13, 2026
2a01f43
Merge remote-tracking branch 'origin/develop' into feature/b2c-email-…
bendvc Oct 13, 2026
5a2bc66
Merge branch 'develop' into feature/b2c-email-cartridge
bendvc Oct 16, 2026
b1dcee6
docs: fix reset-password route name in CHANGELOG
bendvc Oct 16, 2026
ba4ae17
Merge remote-tracking branch 'origin/develop' into feature/b2c-email-…
bendvc Oct 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/hybrid-cookie-domain-configuration.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Hybrid Cookie Domain Configuration

> **WIP: HttpOnly session cookies are in-progress. Do not enable `enableHttpOnlySessionCookies` in production.**

Maintain shopper sessions across subdomains by configuring a shared parent cookie domain. Without this configuration, browsers isolate cookies to individual hosts, causing shoppers to appear logged out and lose their baskets when crossing subdomain boundaries. The domain-level cookie applies to storefronts that use multiple subdomains, such as `www.` and `shop.` on the `example.com` domain. It also applies to hybrid PWA Kit and SFRA storefronts that serve different paths under one parent domain. This guide shows how to align the cookie domain settings on both PWA Kit and B2C Commerce to enable seamless cross-subdomain navigation.

## Overview
Expand Down
1 change: 1 addition & 0 deletions packages/pwa-kit-create-app/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
## v3.21.0 (Oct 08, 2026)
- [Bugfix] Keep the generated `ssr.js.hbs` templates in sync with `template-retail-react-app` for Commerce Client image upload (`cc_enableImageUpload`): add `blob:` and `data:` to `img-src` in both SSR template variants so the widget's image preview and sent-image thumbnail are not blocked by CSP in generated projects. [#4053](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/4053)
- Keep the generated `ssr.js.hbs` templates in sync with `template-retail-react-app`: fix GLO endpoints to read the SLAS access token from `req.headers.authorization` (sent by the client via `useAccessToken().getTokenWhenReady()`) instead of the `cc-at_*` cookie, which is never written in standard SLAS setups. Remove the unused `parseCookieValue` helper. Add public-client fallback for `pwakit-notify` token acquisition: use `loginGuestUserPrivate` when `PWA_KIT_SLAS_CLIENT_SECRET` is set, otherwise fall back to `loginGuestUser` (PKCE guest flow) so notification delivery works without a private SLAS client. [#4012](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/4012)
- Keep the generated `ssr.js.hbs` templates in sync with `template-retail-react-app` for the `dw_attribution` first-touch marketing-attribution cookie (W-23493129): both SSR template variants now import `createAttributionCookieMiddleware`, construct it with the configured `cookieDomain`, and mount it on the catch-all render route, so generated projects write the attribution cookie instead of shipping the utility as dead code.
- Keep the generated `ssr.js.hbs` templates in sync with `template-retail-react-app` for Guest Order Lookup (GLO): add all `/api/order-lookup/*` Express route handlers (verify, order, oms-meta, cancel, return), helper functions (`makeShopperOrders`, `filterGuestOrderFields`, `parseGuestOrderCookie`, `evictIfNeeded`, `createVerifyThrottle`), and the `commerce-sdk-isomorphic` `ShopperOrders` import so generated projects compile and run the feature when `guestOrderLookup.enabled` is set to `true`. [#3982](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3982)
- Keep the generated Commerce Client auth-link templates in sync with `template-retail-react-app`: the browser reads the deployment-scoped `cim_af_ct_<orgId>_<embeddedServiceName>` storage value and calls SCRT2's `/iamessage/api/v2/authorization/authlink` endpoint directly with the Commerce Client JWT to obtain an `auth_link_key` for Token Bridge use. The generated `ssr.js.hbs` no longer registers a `/api/agent/authlink` proxy route. [#3981](https://github.com/SalesforceCommerceCloud/pwa-kit/pull/3981)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,12 +84,12 @@ module.exports = {
{{else}}
enabled: false,
{{/if}}
// The mode for passwordless login. Valid values include 'email|callback'. Defaults to: 'callback'
mode: 'email',
// The mode for passwordless login. Valid values include 'email|callback'. Defaults to: 'email'
Comment thread
bendvc marked this conversation as resolved.
Resolved
mode: 'callback',
// The callback URI, which can be an absolute URL (including third-party URIs) or a relative path set up by the developer.
// Required when mode is set to 'callback'. If the env var `PASSWORDLESS_LOGIN_CALLBACK_URI` is set, it will override the config value.
// callbackURI:
// process.env.PASSWORDLESS_LOGIN_CALLBACK_URI || '/passwordless-login-callback',
callbackURI:
process.env.PASSWORDLESS_LOGIN_CALLBACK_URI || '/passwordless-login-callback',
// The landing path for passwordless login
landingPath: '/passwordless-login-landing'
},
Expand All @@ -109,13 +109,18 @@ module.exports = {
redirectURI: process.env.SOCIAL_LOGIN_REDIRECT_URI || '/social-callback'
},
resetPassword: {
// The mode for reset password. Valid values include 'email|callback'. Defaults to: 'callback'
mode: 'email',
// The mode for reset password. Valid values include 'email|callback'. Defaults to: 'email'
mode: 'callback',
// The callback URI, which can be an absolute URL (including third-party URIs) or a relative path set up by the developer.
// Required when mode is set to 'callback'. If the env var `RESET_PASSWORD_CALLBACK_URI` is set, it will override the config value.
// callbackURI: process.env.RESET_PASSWORD_CALLBACK_URI || '/reset-password-callback',
callbackURI: process.env.RESET_PASSWORD_CALLBACK_URI || '/reset-password-callback',
// The landing path for reset password
landingPath: '/reset-password-landing'
},
registrationVerification: {
callbackURI:
process.env.REGISTRATION_VERIFICATION_CALLBACK_URI ||
'/registration-verification-callback'
}
},
// The default site for your app. This value will be used when a siteRef could not be determined from the url
Expand All @@ -139,6 +144,7 @@ module.exports = {
proxyPath: '/mobify/proxy/api',
parameters: {
clientId: '{{answers.project.commerce.clientId}}',
notifyClientId: '',
organizationId: '{{answers.project.commerce.organizationId}}',
shortCode: '{{answers.project.commerce.shortCode}}',
siteId: '{{answers.project.commerce.siteId}}'
Expand Down
Loading
Loading