@faststore/core 4.10.1-dev.1 → 4.10.1-dev.2

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.
@@ -1,9 +1,9 @@
1
1
 
2
- > @faststore/core@4.10.1-dev.0 generate /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@4.10.1-dev.1 generate /home/runner/work/faststore/faststore/packages/core
3
3
  > pnpm run gen-types && pnpm run cache-graphql
4
4
 
5
5
 
6
- > @faststore/core@4.10.1-dev.0 gen-types /home/runner/work/faststore/faststore/packages/core
6
+ > @faststore/core@4.10.1-dev.1 gen-types /home/runner/work/faststore/faststore/packages/core
7
7
  > node ../cli/bin/run generate-types .
8
8
 
9
9
  [STARTED] Parse Configuration
@@ -19,7 +19,7 @@
19
19
  [COMPLETED] Generate to @generated/
20
20
  [COMPLETED] Generate outputs
21
21
 
22
- > @faststore/core@4.10.1-dev.0 cache-graphql /home/runner/work/faststore/faststore/packages/core
22
+ > @faststore/core@4.10.1-dev.1 cache-graphql /home/runner/work/faststore/faststore/packages/core
23
23
  > node ../cli/bin/run cache-graphql --config=./discovery.config.default.js --queries=./@generated/persisted-documents.json
24
24
 
25
25
  [Info] - Config file location: /home/runner/work/faststore/faststore/packages/core/discovery.config.default.js
@@ -1,5 +1,5 @@
1
1
 
2
- > @faststore/core@4.10.1-dev.0 test /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@4.10.1-dev.1 test /home/runner/work/faststore/faststore/packages/core
3
3
  > vitest run
4
4
 
5
5
 
@@ -7,33 +7,24 @@
7
7
 
8
8
  Not implemented: navigation to another Document
9
9
  Not implemented: navigation to another Document
10
- ✓  browser  test/sdk/ui/useScrollRestoration.browser.test.ts (43 tests) 1284ms
11
10
  Browserslist: browsers data (caniuse-lite) is 8 months old. Please run:
12
11
  npx update-browserslist-db@latest
13
12
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
14
- ✓  browser  test/components/account/cards/MyAccountListCards.browser.test.tsx (16 tests) 2990ms
15
- ✓ shows the tab bar and renders Personal cards by default  1029ms
16
- ✓ paginates when there are more than 25 cards  575ms
17
- ✓  browser  test/components/account/ContractSwitcher.browser.test.tsx (22 tests) 4422ms
18
- ✓ shows an error state when the list fails to load  728ms
19
- ✓ requires selecting a contract before Confirm is enabled, then switches (REQ-03)  541ms
20
- ✓ keeps Confirm disabled until a different contract is selected  393ms
21
- ✓ keeps Confirm disabled when switching is unavailable  372ms
22
- ✓ keeps Confirm disabled when the selected contract is filtered out  441ms
23
- ✓ honors CMS-provided labels for the header, current session, search, footer, and available count  431ms
24
- ✓  browser  test/components/account/orders/BuyingPolicyAlert.browser.test.tsx (13 tests) 3066ms
25
- ✓ opens the reject confirmation modal with the default English copy  1448ms
26
- ✓ opens the reject confirmation modal with CMS-provided labels  435ms
27
- ✓  browser  test/components/ui/RichText/RichText.browser.test.tsx (8 tests) 397ms
28
- ✓  browser  test/components/account/OrganizationDrawer.browser.test.tsx (10 tests) 2039ms
29
- ✓ renders the menu view with contract details and manage footer  1045ms
30
- ✓ opens the contract switcher and returns to the menu on back  410ms
31
- ✓ resets to the menu when the drawer closes  323ms
32
- ✓  browser  test/components/CartRecommendationShelf/CartRecommendationShelf.browser.test.tsx (13 tests) 240ms
13
+ ✓  browser  test/sdk/ui/useScrollRestoration.browser.test.ts (43 tests) 1047ms
14
+ ✓  browser  test/components/account/ContractSwitcher.browser.test.tsx (22 tests) 2181ms
15
+ ✓ shows an error state when the list fails to load  468ms
16
+ ✓  browser  test/components/account/cards/MyAccountListCards.browser.test.tsx (16 tests) 1688ms
17
+ ✓ shows the tab bar and renders Personal cards by default  704ms
18
+ ✓  browser  test/components/account/orders/BuyingPolicyAlert.browser.test.tsx (13 tests) 1744ms
19
+ ✓ opens the reject confirmation modal with the default English copy  762ms
20
+ ✓  browser  test/components/ui/RichText/RichText.browser.test.tsx (8 tests) 254ms
21
+ ✓  browser  test/components/account/OrganizationDrawer.browser.test.tsx (10 tests) 1201ms
22
+ ✓ renders the menu view with contract details and manage footer  597ms
23
+ ✓  browser  test/sdk/localization/useBindingSelector.browser.test.tsx (9 tests) 60ms
33
24
  ✓  browser  test/sdk/session/reconcileSessionLocale.browser.test.ts (6 tests) 11ms
34
- ✓  browser  test/sdk/localization/useBindingSelector.browser.test.tsx (9 tests) 67ms
35
- ✓  browser  test/components/ui/ProductGallery/GalleryPageHeightLock.browser.test.tsx (8 tests) 99ms
36
- ✓  browser  test/sdk/recommendations/useRecommendationShelf.browser.test.tsx (12 tests) 140ms
25
+ ✓  browser  test/components/CartRecommendationShelf/CartRecommendationShelf.browser.test.tsx (13 tests) 143ms
26
+ ✓  browser  test/components/ui/ProductGallery/GalleryPageHeightLock.browser.test.tsx (8 tests) 49ms
27
+ ✓  browser  test/sdk/recommendations/useRecommendationShelf.browser.test.tsx (12 tests) 45ms
37
28
  stderr | test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx
38
29
  Error in optimistic validation: TypeError: Failed to parse URL from /api/graphql?operationName=ValidateCartMutation&operationHash=3c71b0d3fc2bade14df68abfa271858beb361b12
39
30
   at node:internal/deps/undici/undici:16416:13
@@ -63,10 +54,10 @@ Browserslist: browsers data (caniuse-lite) is 8 months old. Please run:
63
54
  stderr | test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx > RecommendationShelf > renders nothing when there is an error
64
55
  Error fetching recommendations undefined boom for campaign vrn:recommendations:acc:rec-top-items-v2:campaign-1
65
56
 
66
- ✓  browser  test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx (8 tests) 191ms
67
- ✓  browser  test/components/CartSidebar/CartSidebar.browser.test.tsx (5 tests) 75ms
68
- ✓  browser  test/sdk/session/getInitialSession.browser.test.ts (7 tests) 13ms
69
- ✓  browser  test/components/sections/Account/AccountOrderDetails.browser.test.tsx (4 tests) 77ms
57
+ ✓  browser  test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx (8 tests) 71ms
58
+ ✓  browser  test/components/CartSidebar/CartSidebar.browser.test.tsx (5 tests) 71ms
59
+ ✓  browser  test/sdk/session/getInitialSession.browser.test.ts (7 tests) 11ms
60
+ ✓  browser  test/components/sections/Account/AccountOrderDetails.browser.test.tsx (4 tests) 75ms
70
61
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > posts the password and redirects to the requested return path
71
62
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
72
63
 
@@ -152,7 +143,6 @@ act(() => {
152
143
  This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
153
144
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
154
145
 
155
- ✓  browser  test/components/navigation/Navbar.browser.test.tsx (3 tests) 93ms
156
146
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > uses the fallback invalid-password message when API omits an error
157
147
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
158
148
 
@@ -249,6 +239,7 @@ act(() => {
249
239
  This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
250
240
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
251
241
 
242
+ ✓  browser  test/components/navigation/Navbar.browser.test.tsx (3 tests) 28ms
252
243
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > shows service unavailable when the login request fails
253
244
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
254
245
 
@@ -297,9 +288,9 @@ act(() => {
297
288
  This ensures that you're testing the behavior the user would see in the browser. Learn more at https://reactjs.org/link/wrap-tests-with-act
298
289
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
299
290
 
300
- ✓  browser  test/pages/password-protection.browser.test.tsx (6 tests) 978ms
301
- ✓ renders the password protection form  528ms
302
- ✓  browser  test/components/account/OrganizationDrawerFooter.browser.test.tsx (8 tests) 560ms
291
+ ✓  browser  test/pages/password-protection.browser.test.tsx (6 tests) 451ms
292
+ ✓  browser  test/components/account/OrganizationDrawerFooter.browser.test.tsx (8 tests) 347ms
293
+ ✓  browser  test/sdk/account/useSwitchContract.browser.test.ts (5 tests) 27ms
303
294
  stderr | test/components/cms/RenderSections.browser.test.tsx
304
295
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
305
296
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -308,9 +299,8 @@ This ensures that you're testing the behavior the user would see in the browser.
308
299
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
309
300
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
310
301
 
311
- ✓  browser  test/sdk/account/useSwitchContract.browser.test.ts (5 tests) 71ms
312
- ✓  browser  test/components/navigation/NavbarSlider.browser.test.tsx (2 tests) 48ms
313
- ✓  browser  test/components/cms/RenderSections.browser.test.tsx (5 tests) 99ms
302
+ ✓  browser  test/components/navigation/NavbarSlider.browser.test.tsx (2 tests) 24ms
303
+ ✓  browser  test/components/cms/RenderSections.browser.test.tsx (5 tests) 52ms
314
304
  stderr | test/sdk/localization/store-url.browser.test.ts
315
305
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
316
306
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -319,15 +309,15 @@ This ensures that you're testing the behavior the user would see in the browser.
319
309
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
320
310
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
321
311
 
322
- ✓  browser  test/sdk/localization/store-url.browser.test.ts (3 tests) 6ms
323
- ✓  browser  test/sdk/account/useAvailableContracts.browser.test.ts (6 tests) 32ms
324
- ✓  browser  test/components/account/Menu.browser.test.tsx (6 tests) 385ms
325
- ✓  browser  test/components/templates/SearchPage/SearchWrapper.browser.test.tsx (3 tests) 29ms
326
- ✓  browser  test/sdk/recommendations/useRecommendationShelf.sessionFallback.browser.test.tsx (2 tests) 90ms
327
- ✓  browser  test/components/sections/Account/AccountListQuotes.browser.test.tsx (4 tests) 149ms
328
- ✓  browser  test/components/navigation/NavbarAccountArea.browser.test.tsx (4 tests) 67ms
329
- ✓  browser  test/components/CartRecommendationShelf/CartRecommendationProductCard.browser.test.tsx (3 tests) 66ms
330
- ✓  browser  test/sdk/account/changeContractToken.browser.test.ts (9 tests) 22ms
312
+ ✓  browser  test/sdk/localization/store-url.browser.test.ts (3 tests) 3ms
313
+ ✓  browser  test/components/account/Menu.browser.test.tsx (6 tests) 207ms
314
+ ✓  browser  test/sdk/account/useAvailableContracts.browser.test.ts (6 tests) 31ms
315
+ ✓  browser  test/components/templates/SearchPage/SearchWrapper.browser.test.tsx (3 tests) 17ms
316
+ ✓  browser  test/sdk/recommendations/useRecommendationShelf.sessionFallback.browser.test.tsx (2 tests) 120ms
317
+ ✓  browser  test/components/sections/Account/AccountListQuotes.browser.test.tsx (4 tests) 85ms
318
+ ✓  browser  test/components/navigation/NavbarAccountArea.browser.test.tsx (4 tests) 31ms
319
+ ✓  browser  test/components/CartRecommendationShelf/CartRecommendationProductCard.browser.test.tsx (3 tests) 30ms
320
+ ✓  browser  test/sdk/account/changeContractToken.browser.test.ts (9 tests) 12ms
331
321
  stderr | test/components/account/doLogout.browser.test.ts
332
322
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
333
323
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -336,9 +326,9 @@ This ensures that you're testing the behavior the user would see in the browser.
336
326
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
337
327
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
338
328
 
339
- ✓  browser  test/components/account/doLogout.browser.test.ts (1 test) 16ms
340
- ✓  browser  test/components/ui/LocalizationButton.browser.test.tsx (3 tests) 49ms
341
- ✓  browser  test/components/account/OrganizationDrawerHeader.browser.test.tsx (5 tests) 376ms
329
+ ✓  browser  test/components/account/doLogout.browser.test.ts (1 test) 14ms
330
+ ✓  browser  test/components/account/OrganizationDrawerHeader.browser.test.tsx (5 tests) 177ms
331
+ ✓  browser  test/components/ui/LocalizationButton.browser.test.tsx (3 tests) 26ms
342
332
  stderr | test/sdk/account/clearPersistedSessionState.browser.test.ts
343
333
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
344
334
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -347,14 +337,14 @@ This ensures that you're testing the behavior the user would see in the browser.
347
337
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
348
338
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
349
339
 
350
- ✓  browser  test/sdk/account/clearPersistedSessionState.browser.test.ts (4 tests) 21ms
351
- ✓  browser  test/components/sections/Account/AccountOrderDelivery.browser.test.tsx (2 tests) 100ms
352
- ✓  browser  test/components/account/orders/DeliveryOptionAccordion.browser.test.tsx (2 tests) 102ms
353
- ✓  browser  test/components/sections/Account/AccountOrderStatus.browser.test.tsx (3 tests) 112ms
354
- ✓  browser  test/components/region/useRegion.browser.test.ts (1 test) 26ms
355
- ✓  browser  test/components/sections/Account/AccountListCards.browser.test.tsx (3 tests) 90ms
356
- ✓  browser  test/components/sections/Account/AccountOrdersList.browser.test.tsx (2 tests) 22ms
357
- ✓  browser  test/components/account/orders/SummaryCard.browser.test.tsx (2 tests) 101ms
340
+ ✓  browser  test/sdk/account/clearPersistedSessionState.browser.test.ts (4 tests) 11ms
341
+ ✓  browser  test/components/sections/Account/AccountOrderDelivery.browser.test.tsx (2 tests) 48ms
342
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordion.browser.test.tsx (2 tests) 57ms
343
+ ✓  browser  test/components/sections/Account/AccountOrderStatus.browser.test.tsx (3 tests) 68ms
344
+ ✓  browser  test/components/region/useRegion.browser.test.ts (1 test) 14ms
345
+ ✓  browser  test/components/sections/Account/AccountListCards.browser.test.tsx (3 tests) 53ms
346
+ ✓  browser  test/components/sections/Account/AccountOrdersList.browser.test.tsx (2 tests) 23ms
347
+ ✓  browser  test/components/account/orders/SummaryCard.browser.test.tsx (2 tests) 50ms
358
348
  stderr | test/sdk/session/sessionStore.browser.test.ts
359
349
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
360
350
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -363,9 +353,9 @@ This ensures that you're testing the behavior the user would see in the browser.
363
353
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
364
354
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
365
355
 
366
- ✓  browser  test/sdk/session/sessionStore.browser.test.ts (2 tests) 10ms
367
- ✓  browser  test/components/account/OrganizationSignInButton.browser.test.tsx (2 tests) 252ms
368
- ✓  browser  test/components/account/orders/DeliveryOptionAccordionDeliveryInfo.browser.test.tsx (1 test) 48ms
356
+ ✓  browser  test/sdk/session/sessionStore.browser.test.ts (2 tests) 4ms
357
+ ✓  browser  test/components/account/OrganizationSignInButton.browser.test.tsx (2 tests) 147ms
358
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordionDeliveryInfo.browser.test.tsx (1 test) 22ms
369
359
  stderr | test/sdk/session/validateSession.browser.test.ts
370
360
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
371
361
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -374,13 +364,14 @@ This ensures that you're testing the behavior the user would see in the browser.
374
364
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
375
365
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
376
366
 
377
- ✓  browser  test/sdk/session/validateSession.browser.test.ts (1 test) 7ms
378
- ✓  browser  test/components/account/orders/StatusCard.browser.test.tsx (2 tests) 115ms
379
- ✓  browser  test/utils/isLocalHost.browser.test.ts (3 tests) 6ms
380
- ✓  browser  test/sdk/session/reconcileSessionLocale.disabled.browser.test.ts (1 test) 4ms
381
- ✓  browser  test/components/account/orders/DeliveryCard.browser.test.tsx (1 test) 64ms
382
- ✓  browser  test/components/account/orders/DeliveryOptionAccordionProducts.browser.test.tsx (1 test) 71ms
383
- ✓  browser  test/components/skeletons/ProductGridSkeleton.browser.test.tsx (2 tests) 30ms
367
+ ✓  browser  test/sdk/session/validateSession.browser.test.ts (1 test) 3ms
368
+ ✓  browser  test/components/account/orders/StatusCard.browser.test.tsx (2 tests) 69ms
369
+ ✓  browser  test/utils/isLocalHost.browser.test.ts (3 tests) 3ms
370
+ ✓  browser  test/sdk/session/reconcileSessionLocale.disabled.browser.test.ts (1 test) 2ms
371
+ ✓  browser  test/components/account/orders/DeliveryCard.browser.test.tsx (1 test) 32ms
372
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordionProducts.browser.test.tsx (1 test) 19ms
373
+ ✓  browser  test/components/skeletons/ProductGridSkeleton.browser.test.tsx (2 tests) 17ms
374
+ ✓  node  test/utils/localization/bindingPaths.test.ts (71 tests) 11ms
384
375
  stderr | test/sdk/account/refreshToken.browser.test.ts
385
376
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
386
377
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
@@ -389,11 +380,13 @@ This ensures that you're testing the behavior the user would see in the browser.
389
380
  at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
390
381
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
391
382
 
392
- ✓  browser  test/sdk/account/refreshToken.browser.test.ts (1 test) 6ms
393
- ✓  node  test/utils/localization/bindingPaths.test.ts (71 tests) 32ms
394
- ✓  node  test/server/password-protection-service.test.ts (22 tests) 39ms
395
- ✓  browser  test/components/account/orders/FilterFacetPendingApproval.browser.test.tsx (1 test) 229ms
396
- ✓  node  test/pages/api/switch-contract.test.ts (25 tests) 93ms
383
+ ✓  browser  test/sdk/account/refreshToken.browser.test.ts (1 test) 3ms
384
+ ✓  node  test/server/password-protection-service.test.ts (22 tests) 19ms
385
+ ✓  browser  test/components/account/orders/FilterFacetPendingApproval.browser.test.tsx (1 test) 143ms
386
+ ✓  node  test/pages/api/switch-contract.test.ts (25 tests) 66ms
387
+ ✓  node  test/server/content/service.test.ts (16 tests) 15ms
388
+ ✓  node  test/utils/match-url.test.ts (10 tests) 5ms
389
+ ✓  node  test/sdk/localization/useBindingSelector.test.tsx (22 tests) 9ms
397
390
  stderr | test/sdk/deliveryPromise/provider.effect.test.tsx > DeliveryPromiseProvider pickup fetch > clears the loading flag after a failed request and retries on the next update
398
391
  Failed to fetch pickup points: Error: network
399
392
  at /home/runner/work/faststore/faststore/packages/core/test/sdk/deliveryPromise/provider.effect.test.tsx:250:30
@@ -420,16 +413,13 @@ This ensures that you're testing the behavior the user would see in the browser.
420
413
  at trace (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/vitest@4.0.18_@opentelemetry+api@1.9.0_@types+node@20.19.13_jiti@2.6.1_jsdom@27.4.0_sas_13be941c57d55f08f06eeaf1c180ddfe/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21)
421
414
  at runTest (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/index.js:1653:12)
422
415
 
423
- ✓  node  test/sdk/deliveryPromise/provider.effect.test.tsx (9 tests) 84ms
424
- ✓  node  test/server/content/service.test.ts (15 tests) 27ms
425
- ✓  node  test/utils/match-url.test.ts (10 tests) 11ms
426
- ✓  node  test/sdk/localization/useBindingSelector.test.tsx (22 tests) 11ms
427
- ✓  node  test/pages/api/unlock.test.ts (15 tests) 175ms
428
- ✓  node  test/sdk/session/syncSalesChannelFromOrderForm.test.ts (14 tests) 14ms
416
+ ✓  node  test/sdk/deliveryPromise/provider.effect.test.tsx (9 tests) 57ms
417
+ ✓  node  test/pages/api/unlock.test.ts (15 tests) 92ms
418
+ ✓  node  test/sdk/session/syncSalesChannelFromOrderForm.test.ts (14 tests) 5ms
419
+ ✓  node  test/sdk/localization/bindingSelector.test.ts (18 tests) 4ms
429
420
  stderr | test/components/search/SearchInputComponent.test.tsx
430
421
  Warning: forwardRef render functions accept exactly two parameters: props and ref. Did you forget to use the ref parameter?
431
422
 
432
- ✓  node  test/sdk/localization/bindingSelector.test.ts (18 tests) 9ms
433
423
  stderr | test/components/search/SearchInputComponent.test.tsx > SearchInput (OES integration) > renders without crashing
434
424
  Warning: React does not recognize the `visibleDropdown` prop on a DOM element. If you intentionally want it to appear in the DOM as a custom attribute, spell it as lowercase `visibledropdown` instead. If you accidentally passed it from a parent component, remove it from the DOM element.
435
425
  at div
@@ -490,23 +480,23 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
490
480
  at Suspense
491
481
  at Wrapper (/home/runner/work/faststore/faststore/packages/core/test/components/search/SearchInputComponent.test.tsx:106:20)
492
482
 
493
- ✓  node  test/components/search/SearchInputComponent.test.tsx (6 tests) 93ms
494
- ✓  node  test/components/quotes/MyAccountListQuotesTable.test.tsx (15 tests) 472ms
495
- ✓  node  test/sdk/search/useSearchHistory.test.ts (13 tests) 50ms
496
- ✓  node  test/components/quotes/MyAccountListQuotes.test.tsx (11 tests) 840ms
497
- ✓ navigates with the search term on blur  361ms
498
- ✓ navigates without a label param when the search is cleared  360ms
483
+ ✓  node  test/components/search/SearchInputComponent.test.tsx (6 tests) 42ms
484
+ ✓  node  test/components/quotes/MyAccountListQuotesTable.test.tsx (15 tests) 281ms
485
+ ✓  node  test/sdk/search/useSearchHistory.test.ts (13 tests) 28ms
499
486
  stderr | test/pages/pvt/account/cards/index.test.ts > Cards page getServerSideProps > redirects to /pvt/account/403 when the query fails with 401/403
500
487
  { extensions: { status: 401 } }
501
488
 
502
489
  stderr | test/pages/pvt/account/cards/index.test.ts > Cards page getServerSideProps > renders the error state (no redirect) when the query fails with a non-auth status
503
490
  { extensions: { status: 502 } }
504
491
 
505
- ✓  node  test/pages/pvt/account/cards/index.test.ts (8 tests) 12ms
506
- ✓  node  test/components/quotes/quoteFilters.test.ts (26 tests) 53ms
507
- ✓  node  test/utils/productJsonLd.test.ts (36 tests) 12ms
508
- ✓  node  test/utils/cookieCacheBusting.test.ts (10 tests) 15ms
509
- ✓  node  test/experimental/myAccountCmsServerSideProps.test.ts (5 tests) 10ms
492
+ ✓  node  test/pages/pvt/account/cards/index.test.ts (8 tests) 5ms
493
+ ✓  node  test/utils/cookieCacheBusting.test.ts (10 tests) 8ms
494
+ ✓  node  test/components/quotes/MyAccountListQuotes.test.tsx (11 tests) 783ms
495
+ ✓ navigates with the search term on blur  357ms
496
+ ✓ navigates without a label param when the search is cleared  358ms
497
+ ✓  node  test/components/quotes/quoteFilters.test.ts (26 tests) 20ms
498
+ ✓  node  test/utils/productJsonLd.test.ts (36 tests) 7ms
499
+ ✓  node  test/experimental/myAccountCmsServerSideProps.test.ts (5 tests) 6ms
510
500
  stderr | test/pages/api/graphql.test.ts > /api/graphql error status propagation > propagates the upstream 400 from a wrapped BadRequestError instead of 500
511
501
  Graphql execution returned with error: [
512
502
  {
@@ -616,78 +606,76 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
616
606
  at trace (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/vitest@4.0.18_@opentelemetry+api@1.9.0_@types+node@20.19.13_jiti@2.6.1_jsdom@27.4.0_sas_13be941c57d55f08f06eeaf1c180ddfe/node_modules/vitest/dist/chunks/test.B8ej_ZHS.js:239:21)
617
607
  at runTest (file:///home/runner/work/faststore/faststore/node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/index.js:1653:12)
618
608
 
619
- ✓  node  test/pages/api/graphql.test.ts (19 tests) 44ms
620
- ✓  node  test/utils/clearCookies.test.ts (20 tests) 29ms
621
- ✓  node  test/utils/multipleTemplates.test.ts (8 tests) 6ms
609
+ ✓  node  test/pages/api/graphql.test.ts (19 tests) 20ms
610
+ ✓  node  test/utils/clearCookies.test.ts (20 tests) 16ms
611
+ ✓  node  test/utils/multipleTemplates.test.ts (8 tests) 4ms
622
612
  stderr | test/sdk/account/useSetPassword.test.ts > useSetPassword > maps wrongcredentials error responses to the existing message
623
613
  Set password request failed: Bad Request
624
614
 
625
- ✓  node  test/sdk/account/useSetPassword.test.ts (6 tests) 50ms
626
- ✓  node  test/sdk/orderEntry/useOrderEntryOperation.test.ts (8 tests) 49ms
627
- ✓  node  test/utils/localization/localizeRedirectDestination.test.ts (11 tests) 9ms
628
- ✓  node  test/components/quotes/MyAccountQuotesFilterSlider.test.tsx (8 tests) 209ms
629
- ✓  node  test/components/quotes/MyAccountQuotesStatusSelector.test.tsx (14 tests) 198ms
630
- ✓  node  test/utils/localization/hreflang.test.ts (8 tests) 8ms
631
- ✓  node  test/sdk/account/getMyAccountRoutes.test.ts (13 tests) 7ms
632
- ✓  node  test/components/quotes/MyAccountQuotesSelectedTags.test.tsx (10 tests) 127ms
633
- ✓  node  test/sdk/redirects/index.test.ts (7 tests) 50ms
634
- ✓  node  test/sdk/orderEntry/useOrderEntryUpload.test.ts (8 tests) 51ms
635
- ✓  node  test/proxy.localization.test.ts (5 tests) 60ms
636
- ✓  node  test/sdk/orderEntry/useOrderEntry.test.ts (8 tests) 52ms
615
+ ✓  node  test/sdk/account/useSetPassword.test.ts (6 tests) 36ms
616
+ ✓  node  test/sdk/orderEntry/useOrderEntryOperation.test.ts (8 tests) 26ms
617
+ ✓  node  test/utils/localization/localizeRedirectDestination.test.ts (11 tests) 3ms
618
+ ✓  node  test/components/quotes/MyAccountQuotesFilterSlider.test.tsx (8 tests) 91ms
619
+ ✓  node  test/components/quotes/MyAccountQuotesStatusSelector.test.tsx (14 tests) 111ms
620
+ ✓  node  test/utils/localization/hreflang.test.ts (8 tests) 4ms
621
+ ✓  node  test/sdk/account/getMyAccountRoutes.test.ts (13 tests) 5ms
622
+ ✓  node  test/components/quotes/MyAccountQuotesSelectedTags.test.tsx (10 tests) 66ms
623
+ ✓  node  test/sdk/redirects/index.test.ts (7 tests) 43ms
624
+ ✓  node  test/sdk/orderEntry/useOrderEntryUpload.test.ts (8 tests) 28ms
625
+ ✓  node  test/proxy.localization.test.ts (5 tests) 32ms
626
+ ✓  node  test/sdk/orderEntry/useOrderEntry.test.ts (8 tests) 23ms
637
627
  ✓  node  test/components/account/orders/getDeliveryOptionLabel.test.ts (21 tests) 8ms
638
- ✓  node  test/sdk/graphql/retryPolicy.test.ts (18 tests) 18ms
639
- ✓  node  test/server/cms/myAccountDefaultSections.test.ts (9 tests) 8ms
640
- ✓  node  test/utils/productJsonLdRendering.test.tsx (5 tests) 16ms
641
- ✓  node  test/utils/trustedForwardedHost.test.ts (27 tests) 11ms
642
- ✓  node  test/server/index.test.ts (7 tests) 1039ms
643
- ✓ should return a valid merged GraphQL schema  314ms
644
- ✓ should exist with its plugins  317ms
645
- ✓ should handle options and execute  393ms
646
- ✓  node  test/sdk/analytics/useStartRecommendationSession.test.ts (6 tests) 56ms
647
- ✓  node  test/proxy.test.ts (4 tests) 22ms
648
- ✓  node  test/server/webops-api.test.ts (9 tests) 18ms
649
- ✓  node  test/sdk/orderEntry/useOrderFormItems.test.ts (7 tests) 88ms
650
- ✓  node  test/components/account/orders/StatusCard.test.ts (3 tests) 32ms
651
- ✓  node  test/sdk/localization/store-url.test.ts (4 tests) 6ms
652
- ✓  node  test/sdk/deliveryPromise/queries.test.ts (4 tests) 8ms
653
- ✓  node  test/sdk/cart/waitForSessionValidated.test.ts (5 tests) 13ms
654
- ✓  node  test/sdk/account/refreshToken.test.ts (5 tests) 10ms
655
- ✓  node  test/server/cms/global.test.ts (3 tests) 6ms
656
- ✓  node  test/sdk/deliveryPromise/provider.test.ts (11 tests) 7ms
657
- ✓  node  test/sdk/auth/useAuth.test.ts (5 tests) 37ms
658
- ✓  node  test/utils/getRequestHostname.test.ts (12 tests) 5ms
659
- ✓  node  test/components/account/Layout.test.tsx (6 tests) 85ms
660
- ✓  node  test/server/rootSpan.test.ts (4 tests) 51ms
661
- ✓  node  test/pages/api/preview.test.ts (2 tests) 11ms
662
- ✓  node  test/components/search/SearchInput.test.ts (6 tests) 8ms
663
- ✓  node  test/utils/validateSessionRefreshToken.test.ts (6 tests) 6ms
664
- ✓  node  test/sdk/recommendations/vrn.test.ts (5 tests) 5ms
665
- ✓  node  test/server/cms/index.test.ts (2 tests) 6ms
666
- ✓  node  test/components/region/useRegion.test.ts (1 test) 27ms
667
- ✓  node  test/utils/retry.test.ts (5 tests) 16ms
668
- ✓  node  test/sdk/account/getB2BSessionClaims.test.ts (4 tests) 5ms
669
- ✓  node  test/utils/userOrderStatus.test.ts (4 tests) 4ms
670
- ✓  node  test/sdk/recommendations/useRecommendationUserId.test.ts (4 tests) 195ms
671
- ✓  node  test/utils/unlockResponse.test.ts (11 tests) 5ms
672
- ✓  node  test/sdk/recommendations/useRecommendations.test.ts (2 tests) 6ms
673
- ✓  node  test/components/account/OrganizationDrawerBody.test.tsx (3 tests) 57ms
674
- ✓  node  test/sdk/deliveryPromise/reducer.test.ts (2 tests) 6ms
675
- ✓  node  test/components/quotes/MyAccountQuoteStatusBadge.test.tsx (4 tests) 35ms
676
- ✓  node  test/utils/isLocalHost.test.ts (7 tests) 5ms
677
- ✓  node  test/sdk/session/toSessionInput.test.ts (3 tests) 4ms
678
- ✓  node  test/components/account/orders/getOrderTotalLabel.test.ts (6 tests) 6ms
679
- ✓  node  test/components/account/orders/listOrdersLabels.test.ts (2 tests) 5ms
680
- ✓  node  test/utils/getCookie.test.ts (4 tests) 5ms
681
- ✓  node  test/components/auth/ProfileChallenge.test.tsx (3 tests) 39ms
682
- ✓  node  test/sdk/session/isSignInAreaResolved.test.ts (3 tests) 3ms
683
- ✓  node  test/utils/filterChannel.test.ts (2 tests) 6ms
684
- ✓  node  test/sdk/analytics/utils.test.ts (2 tests) 5ms
685
- ✓  node  test/instrumentation.test.ts (3 tests) 5ms
686
- ✓  node  test/components/account/orders/orderDetailsLabels.test.ts (1 test) 4ms
687
- ✓  node  test/sdk/account/clearPersistedSessionState.test.ts (1 test) 12ms
628
+ ✓  node  test/sdk/graphql/retryPolicy.test.ts (18 tests) 13ms
629
+ ✓  node  test/server/cms/myAccountDefaultSections.test.ts (9 tests) 4ms
630
+ ✓  node  test/utils/productJsonLdRendering.test.tsx (5 tests) 9ms
631
+ ✓  node  test/utils/trustedForwardedHost.test.ts (27 tests) 3ms
632
+ ✓  node  test/sdk/analytics/useStartRecommendationSession.test.ts (6 tests) 23ms
633
+ ✓  node  test/proxy.test.ts (4 tests) 11ms
634
+ ✓  node  test/server/webops-api.test.ts (9 tests) 7ms
635
+ ✓  node  test/sdk/orderEntry/useOrderFormItems.test.ts (7 tests) 18ms
636
+ ✓  node  test/components/account/orders/StatusCard.test.ts (3 tests) 12ms
637
+ ✓  node  test/server/index.test.ts (7 tests) 1131ms
638
+ ✓ should handle options and execute  791ms
639
+ ✓  node  test/sdk/localization/store-url.test.ts (4 tests) 3ms
640
+ ✓  node  test/sdk/deliveryPromise/queries.test.ts (4 tests) 6ms
641
+ ✓  node  test/sdk/cart/waitForSessionValidated.test.ts (5 tests) 6ms
642
+ ✓  node  test/sdk/account/refreshToken.test.ts (5 tests) 5ms
643
+ ✓  node  test/server/cms/global.test.ts (3 tests) 7ms
644
+ ✓  node  test/sdk/deliveryPromise/provider.test.ts (11 tests) 4ms
645
+ ✓  node  test/sdk/auth/useAuth.test.ts (5 tests) 12ms
646
+ ✓  node  test/utils/getRequestHostname.test.ts (12 tests) 3ms
647
+ ✓  node  test/components/account/Layout.test.tsx (6 tests) 44ms
648
+ ✓  node  test/pages/api/preview.test.ts (2 tests) 6ms
649
+ ✓  node  test/server/rootSpan.test.ts (4 tests) 24ms
650
+ ✓  node  test/components/search/SearchInput.test.ts (6 tests) 5ms
651
+ ✓  node  test/utils/validateSessionRefreshToken.test.ts (6 tests) 3ms
652
+ ✓  node  test/sdk/recommendations/vrn.test.ts (5 tests) 2ms
653
+ ✓  node  test/server/cms/index.test.ts (2 tests) 3ms
654
+ ✓  node  test/components/region/useRegion.test.ts (1 test) 13ms
655
+ ✓  node  test/utils/retry.test.ts (5 tests) 10ms
656
+ ✓  node  test/sdk/account/getB2BSessionClaims.test.ts (4 tests) 2ms
657
+ ✓  node  test/utils/userOrderStatus.test.ts (4 tests) 2ms
658
+ ✓  node  test/sdk/recommendations/useRecommendationUserId.test.ts (4 tests) 178ms
659
+ ✓  node  test/utils/unlockResponse.test.ts (11 tests) 4ms
660
+ ✓  node  test/sdk/recommendations/useRecommendations.test.ts (2 tests) 3ms
661
+ ✓  node  test/components/account/OrganizationDrawerBody.test.tsx (3 tests) 31ms
662
+ ✓  node  test/sdk/deliveryPromise/reducer.test.ts (2 tests) 2ms
663
+ ✓  node  test/utils/isLocalHost.test.ts (7 tests) 3ms
664
+ ✓  node  test/components/quotes/MyAccountQuoteStatusBadge.test.tsx (4 tests) 19ms
665
+ ✓  node  test/sdk/session/toSessionInput.test.ts (3 tests) 3ms
666
+ ✓  node  test/components/account/orders/getOrderTotalLabel.test.ts (6 tests) 2ms
667
+ ✓  node  test/components/account/orders/listOrdersLabels.test.ts (2 tests) 2ms
668
+ ✓  node  test/utils/getCookie.test.ts (4 tests) 3ms
669
+ ✓  node  test/components/auth/ProfileChallenge.test.tsx (3 tests) 19ms
670
+ ✓  node  test/sdk/session/isSignInAreaResolved.test.ts (3 tests) 2ms
671
+ ✓  node  test/utils/filterChannel.test.ts (2 tests) 2ms
672
+ ✓  node  test/sdk/analytics/utils.test.ts (2 tests) 2ms
673
+ ✓  node  test/instrumentation.test.ts (3 tests) 3ms
674
+ ✓  node  test/components/account/orders/orderDetailsLabels.test.ts (1 test) 2ms
675
+ ✓  node  test/sdk/account/clearPersistedSessionState.test.ts (1 test) 6ms
688
676
 
689
677
   Test Files  135 passed (135)
690
-  Tests  1076 passed (1076)
691
-  Start at  16:44:28
692
-  Duration  67.24s (transform 18.40s, setup 0ms, import 60.45s, tests 24.70s, environment 81.30s)
678
+  Tests  1077 passed (1077)
679
+  Start at  19:24:01
680
+  Duration  37.79s (transform 8.93s, setup 0ms, import 32.76s, tests 14.78s, environment 45.53s)
693
681
 
package/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [4.10.1-dev.2](https://github.com/vtex/faststore/compare/v4.10.1-dev.1...v4.10.1-dev.2) (2026-10-27)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **core:** keep CMS author emails off public page props ([a63c6b1](https://github.com/vtex/faststore/commit/a63c6b1b880055a9ceb6395ad3bba04ad2ce4a95))
11
+
6
12
  ## [4.10.1-dev.1](https://github.com/vtex/faststore/compare/v4.10.1-dev.0...v4.10.1-dev.1) (2026-10-21)
7
13
 
8
14
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "4.10.1-dev.1",
3
+ "version": "4.10.1-dev.2",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -71,11 +71,11 @@
71
71
  "style-loader": "^3.3.1",
72
72
  "swr": "^2.2.5",
73
73
  "use-sync-external-store": "^1.6.0",
74
- "@faststore/api": "4.10.1-dev.1",
75
- "@faststore/lighthouse": "4.10.1-dev.1",
76
- "@faststore/diagnostics": "4.10.1-dev.1",
77
- "@faststore/sdk": "4.10.1-dev.1",
78
- "@faststore/ui": "4.10.1-dev.1"
74
+ "@faststore/api": "4.10.1-dev.2",
75
+ "@faststore/diagnostics": "4.10.1-dev.2",
76
+ "@faststore/ui": "4.10.1-dev.2",
77
+ "@faststore/lighthouse": "4.10.1-dev.2",
78
+ "@faststore/sdk": "4.10.1-dev.2"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@cypress/code-coverage": "^3.12.1",
@@ -85,14 +85,18 @@ const OG_PRODUCT_CONDITION_BY_SCHEMA: Record<string, string> = {
85
85
  'https://schema.org/UsedCondition': 'used',
86
86
  }
87
87
 
88
- type Props = PDPContentType & {
88
+ type Props = {
89
+ sections: PDPContentType['sections']
90
+ settings: PDPContentType['settings']
89
91
  data: ServerProductQueryQuery
90
92
  globalSections: GlobalSectionsData
93
+ offers: ReturnType<typeof toProductJsonLdOffer>
91
94
  meta: {
92
95
  title: string
93
96
  description: string
94
97
  canonical: string
95
98
  }
99
+ key: string
96
100
  }
97
101
 
98
102
  // Array merging strategy from deepmerge that makes client arrays overwrite server array
@@ -500,7 +504,8 @@ export const getStaticProps: GetStaticProps<
500
504
  return {
501
505
  props: {
502
506
  data,
503
- ...cmsPage,
507
+ sections: cmsPage.sections,
508
+ settings: cmsPage.settings,
504
509
  meta,
505
510
  offers,
506
511
  globalSections: globalSectionsResult,
@@ -17,7 +17,9 @@ import { getPLP, type PLPContentType } from '../cms/plp'
17
17
  import type { ContentOptions, ContentParams } from './types'
18
18
  import { isBranchPreview, isContentPlatformSource } from './utils'
19
19
 
20
- type ContentResult = ContentData | (ContentEntry & PageContentType)
20
+ type ContentResult = ContentData | PageContentType
21
+
22
+ const CONTENT_AUTHOR_FIELDS = ['createdBy', 'updatedBy'] as const
21
23
 
22
24
  type ContentListCacheEntry = {
23
25
  expiresAt: number
@@ -163,7 +165,7 @@ export class ContentService {
163
165
  private async listAndFillEntries(
164
166
  serviceParams: EntryPathParams,
165
167
  isPreview: boolean
166
- ): Promise<{ data: (ContentEntry & PageContentType)[] }> {
168
+ ): Promise<{ data: PageContentType[] }> {
167
169
  // TODO: This should be temporary until the cp data-plane have a search engine.
168
170
  const MAX_PAGES = 25
169
171
  const allEntries: ContentEntry[] = []
@@ -189,7 +191,7 @@ export class ContentService {
189
191
  entries: ContentEntry[],
190
192
  serviceParams: EntryPathParams,
191
193
  isPreview: boolean
192
- ): Promise<{ data: (ContentEntry & PageContentType)[] }> {
194
+ ): Promise<{ data: PageContentType[] }> {
193
195
  const data = await Promise.all(
194
196
  entries.map(async (entry) => {
195
197
  const entryData = await this.getEntryData(
@@ -220,15 +222,21 @@ export class ContentService {
220
222
  throw new Error(`${operation} requires entryId or slug`)
221
223
  }
222
224
 
225
+ const entry = await this.loadEntry(params, isPreview)
226
+
227
+ return withoutContentAuthorMetadata(entry as PageContentType)
228
+ }
229
+
230
+ private loadEntry(params: EntryPathParams, isPreview: boolean) {
223
231
  if (isPreview) {
224
232
  return params.entryId
225
- ? (this.clientCP.previewEntryById(params) as Promise<PageContentType>)
226
- : (this.clientCP.previewEntryBySlug(params) as Promise<PageContentType>)
233
+ ? this.clientCP.previewEntryById(params)
234
+ : this.clientCP.previewEntryBySlug(params)
227
235
  }
228
236
 
229
237
  return params.entryId
230
- ? (this.clientCP.getEntry(params) as Promise<PageContentType>)
231
- : (this.clientCP.getEntryBySlug(params) as Promise<PageContentType>)
238
+ ? this.clientCP.getEntry(params)
239
+ : this.clientCP.getEntryBySlug(params)
232
240
  }
233
241
 
234
242
  private async fetchFirstEntryFromList(
@@ -341,16 +349,25 @@ export class ContentService {
341
349
  private mergeEntryWithData(
342
350
  entry: ContentEntry,
343
351
  data: PageContentType
344
- ): ContentEntry & PageContentType {
352
+ ): PageContentType {
345
353
  return {
346
- ...entry,
347
- ...data,
354
+ ...withoutContentAuthorMetadata(data),
348
355
  id: entry.id,
349
356
  name: entry.name ?? '',
350
357
  }
351
358
  }
352
359
  }
353
360
 
361
+ function withoutContentAuthorMetadata<T extends object>(value: T): T {
362
+ const content = { ...value } as Record<string, unknown>
363
+
364
+ for (const field of CONTENT_AUTHOR_FIELDS) {
365
+ delete content[field]
366
+ }
367
+
368
+ return content as T
369
+ }
370
+
354
371
  function isNotFoundError(err: unknown): boolean {
355
372
  if (err instanceof MissingContentError) return true
356
373
  if (err instanceof Error && /\b404\b/.test(err.message)) return true
@@ -39,7 +39,17 @@ const entryData: Record<string, Record<string, unknown>> = {
39
39
  },
40
40
  }
41
41
 
42
- const toEntry = (id: string) => ({ id, name: id }) as ContentEntry
42
+ const toEntry = (id: string): ContentEntry => ({
43
+ id,
44
+ name: id,
45
+ account: 'example-account',
46
+ storeId: 'faststore',
47
+ createdAt: '2026-01-01T00:00:00.000Z',
48
+ updatedAt: '2026-01-02T00:00:00.000Z',
49
+ createdBy: 'editor@example.com',
50
+ updatedBy: 'other@example.com',
51
+ slug: id,
52
+ })
43
53
 
44
54
  function createFakeClientCP(pages: string[][]) {
45
55
  return {
@@ -52,6 +62,8 @@ function createFakeClientCP(pages: string[][]) {
52
62
  }),
53
63
  getEntry: vi.fn(async ({ entryId }: EntryPathParams) => ({
54
64
  ...entryData[entryId as string],
65
+ createdBy: 'payload@example.com',
66
+ updatedBy: 'payload@example.com',
55
67
  })),
56
68
  previewEntryById: vi.fn(async ({ entryId }: EntryPathParams) => ({
57
69
  ...entryData[entryId as string],
@@ -173,6 +185,33 @@ describe('ContentService', () => {
173
185
  vi.useRealTimers()
174
186
  })
175
187
 
188
+ it('keeps Content Platform author emails out of public page content', async () => {
189
+ const { service, clientCP } = createServiceWithClient()
190
+ clientCP.getEntryBySlug.mockResolvedValueOnce({
191
+ sections: [{ name: 'Direct' }],
192
+ createdBy: 'editor@example.com',
193
+ updatedBy: 'other@example.com',
194
+ })
195
+
196
+ const directPage = await service.getSingleContent({
197
+ contentType: 'pdp',
198
+ slug: 'product-slug',
199
+ })
200
+ const { data } = await service.getMultipleContent({ contentType: 'pdp' })
201
+ const listedPage = data[0]
202
+
203
+ expect(directPage.sections).toEqual([{ name: 'Direct' }])
204
+ expect(directPage).not.toHaveProperty('createdBy')
205
+ expect(directPage).not.toHaveProperty('updatedBy')
206
+ expect(listedPage.id).toBe('generic')
207
+ expect(listedPage.name).toBe('generic')
208
+ expect(listedPage.sections).toEqual([{ name: 'Generic' }])
209
+ expect(listedPage).not.toHaveProperty('createdBy')
210
+ expect(listedPage).not.toHaveProperty('updatedBy')
211
+ expect(listedPage).not.toHaveProperty('account')
212
+ expect(listedPage).not.toHaveProperty('storeId')
213
+ })
214
+
176
215
  it('shares one list and entry fetch across concurrent PLPs with different slugs', async () => {
177
216
  const { service, clientCP } = createServiceWithClient()
178
217