@bigcommerce/catalyst-core@1.8.0
Minor Changes
-
#3024
3cec674Thanks @mfaris9! - Honor the merchant's Tax Display setting (Inc.,Ex., orBoth) from the BigCommerce control panel across PDP, PLP, search, compare, and home. When set toBoth, prices render stacked with(Inc. Tax)and(Ex. Tax)labels, including sale strike-throughs per line.Migration
For forks that can't rebase cleanly: pricing was refactored end-to-end to support inc/ex tax variants and a
Bothmode (PricingFragment,pricesTransformer,Pricetypes, page-data settings queries, analytics helpers). See PR #3024 for the full diff. -
#3015
15e365aThanks @mfaris9! - Consume merchant-configured per-locale URL subfolders from the BigCommerce Storefront GraphQL API (Locale.path). The locale that sits at the bare root URL (/) is derived from the CP configuration: if the default locale has no path, it sits at root; otherwise, if exactly one non-default locale has no path, that one sits at root; otherwise every locale gets a prefix. Locales with a path use it; locales without a path fall back to their locale code.
Patch Changes
-
#3031
874e332Thanks @Tharaae! - Display backorder information for variants on PDP. -
#3033
8bc379dThanks @jorgemoya! - Fix broken images in WYSIWYG content (web pages, blog posts, product description and warranty). Images uploaded through the Control Panel editor are stored as store-root-relative WebDAV paths (/content/...and/product_images/...) that 404 on the headless storefront domain; they are now rewritten to absolute BigCommerce CDN URLs. -
#3056
2c99731Thanks @jorgemoya! - Add acatalystfield tocore/package.json(catalyst.versionandcatalyst.ref) that tracks the true Catalyst version independently of the top-levelversion, which merchants may repurpose for their own deploy tagging. The backend user-agent now reportscatalyst.version(falling back toversionfor projects created before the field existed), and the release pipeline keeps the field in sync on each version bump. -
#3035
b4215f0Thanks @jorgemoya! - Scope the consent manager cookie (c15t-consent) to the current host instead of the top-level domain. PreviouslycrossSubdomain: truecaused the cookie to be set on the root domain (e.g..example.com) for stores running on a sub-domain, so it appeared on both the root domain and the sub-domain. Removing it makes the cookie host-only, so it now exists only on the sub-domain the store runs on. -
#3046
5034ea3Thanks @chanceaclark! - Gatecatalyst.visitorId,catalyst.visitId, andcurrencyCodecookies behind shopper consent. The visitor and visit cookies now require measurement consent and the currency preference cookie requires functionality consent. When consent is absent, existing analytics cookies are deleted on the next request. When measurement consent is granted mid-session, a newstartVisitserver action sets the cookies and fires the server-sidevisitStartedEventimmediately rather than waiting for the next full-page navigation. -
#3047
1ab2c82Thanks @chanceaclark! - Makeauthjs.session-tokenandauthjs.anonymous-session-tokenbrowser-session cookies (noExpiresattribute) to satisfy Essential cookie classification requirements.What changed
Anonymous session token:
anonymousSignInno longer setsmaxAgeon the cookie. Without it, Next.js omitsMax-Age/Expiresand the cookie becomes a session cookie that the browser drops when it closes.Auth session token: Auth.js v5 unconditionally writes
Expireson the session token cookie and provides no config option to suppress it. Two post-processing steps strip the attribute:proxies/with-auth.ts— stripsExpiresfromSet-Cookieresponse headers on every page request.auth/index.ts— wrapssignInandupdateSessionto re-set the cookie viacookies().set()withoutExpiresimmediately after Auth.js writes it, covering the sign-in and session-update paths that middleware cannot reach.
Max-Age=0(used by Auth.js for cookie deletion on sign-out) is intentionally left intact.Migration
If you have a custom
maxAgeonanonymousSignIn: The default 7-daymaxAgehas been removed. If your app relies on anonymous sessions persisting across browser restarts, add it back in your ownanonymousSignIncall:cookieJar.set(anonymousCookieName, jwt, { httpOnly: true, sameSite: 'lax', secure: useSecureCookies, maxAge: 60 * 60 * 24 * 7, // restore 7-day persistence if needed });
If you already have your own
Expires-stripping workaround: Remove it. The middleware regex inwith-auth.tsand thepatchSessionTokenCookieswrapper inauth/index.tsnow handle this centrally. Leaving both in place will cause redundant cookie writes.If you import
signInorupdateSessiondirectly fromauth/index.ts: No change needed — the signatures are identical. The exports are now thin async wrappers that call the Auth.js originals and then patch any session token cookies written during the call. -
#3058
94c503eThanks @bc-svc-local! - Update translations. -
#3048
226f2f3Thanks @bc-svc-local! - Update translations.