@faststore/core 4.8.1-dev.2 → 4.9.0-dev.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.
@@ -1,9 +1,9 @@
1
1
 
2
- > @faststore/core@4.8.1-dev.1 generate /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@4.8.1-dev.3 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.8.1-dev.1 gen-types /home/runner/work/faststore/faststore/packages/core
6
+ > @faststore/core@4.8.1-dev.3 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.8.1-dev.1 cache-graphql /home/runner/work/faststore/faststore/packages/core
22
+ > @faststore/core@4.8.1-dev.3 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.8.1-dev.1 test /home/runner/work/faststore/faststore/packages/core
2
+ > @faststore/core@4.8.1-dev.3 test /home/runner/work/faststore/faststore/packages/core
3
3
  > vitest run
4
4
 
5
5
 
@@ -7,23 +7,26 @@
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) 1250ms
10
11
  Browserslist: browsers data (caniuse-lite) is 7 months old. Please run:
11
12
  npx update-browserslist-db@latest
12
13
  Why you should do it regularly: https://github.com/browserslist/update-db#readme
13
- ✓  browser  test/sdk/ui/useScrollRestoration.browser.test.ts (43 tests) 1066ms
14
- ✓  browser  test/components/account/cards/MyAccountListCards.browser.test.tsx (16 tests) 2228ms
15
- ✓ shows the tab bar and renders Personal cards by default  862ms
16
- ✓ paginates when there are more than 25 cards  310ms
17
- ✓  browser  test/components/account/orders/BuyingPolicyAlert.browser.test.tsx (13 tests) 2131ms
18
- ✓ opens the reject confirmation modal with the default English copy  850ms
19
- ✓ opens the reject confirmation modal with CMS-provided labels  365ms
20
- ✓  browser  test/components/CartRecommendationShelf/CartRecommendationShelf.browser.test.tsx (13 tests) 208ms
21
- ✓  browser  test/components/account/ContractSwitcher.browser.test.tsx (14 tests) 1758ms
22
- ✓ shows an error state when the list fails to load  667ms
23
- ✓  browser  test/components/account/OrganizationDrawer.browser.test.tsx (10 tests) 1228ms
24
- ✓ renders the menu view with contract details and manage footer  613ms
25
- ✓  browser  test/sdk/localization/useBindingSelector.browser.test.tsx (9 tests) 106ms
26
- ✓  browser  test/components/ui/ProductGallery/GalleryPageHeightLock.browser.test.tsx (8 tests) 93ms
14
+ ✓  browser  test/components/account/cards/MyAccountListCards.browser.test.tsx (16 tests) 3054ms
15
+ ✓ shows the tab bar and renders Personal cards by default  1245ms
16
+ ✓ paginates when there are more than 25 cards  516ms
17
+ ✓  browser  test/components/account/orders/BuyingPolicyAlert.browser.test.tsx (13 tests) 3270ms
18
+ ✓ opens the reject confirmation modal with the default English copy  1288ms
19
+ ✓ opens the reject confirmation modal with CMS-provided labels  510ms
20
+ ✓ shows the default English toast when a policy is rejected  315ms
21
+ ✓ shows the CMS-provided error toast when rejecting a policy fails  319ms
22
+ ✓  browser  test/components/account/ContractSwitcher.browser.test.tsx (14 tests) 2478ms
23
+ ✓ shows an error state when the list fails to load  777ms
24
+ ✓  browser  test/components/CartRecommendationShelf/CartRecommendationShelf.browser.test.tsx (13 tests) 279ms
25
+ ✓  browser  test/sdk/localization/useBindingSelector.browser.test.tsx (9 tests) 83ms
26
+ ✓  browser  test/components/account/OrganizationDrawer.browser.test.tsx (10 tests) 1453ms
27
+ ✓ renders the menu view with contract details and manage footer  780ms
28
+ ✓  browser  test/components/ui/ProductGallery/GalleryPageHeightLock.browser.test.tsx (8 tests) 164ms
29
+ ✓  browser  test/sdk/session/reconcileSessionLocale.browser.test.ts (5 tests) 10ms
27
30
  stderr | test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx
28
31
  Error in optimistic validation: TypeError: Failed to parse URL from /api/graphql?operationName=ValidateCartMutation&operationHash=3c71b0d3fc2bade14df68abfa271858beb361b12
29
32
   at node:internal/deps/undici/undici:16416:13
@@ -33,7 +36,7 @@ Browserslist: browsers data (caniuse-lite) is 7 months old. Please run:
33
36
  at request (/home/runner/work/faststore/faststore/packages/core/src/sdk/graphql/request.ts:154:5)
34
37
  at validateCart (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/index.ts:122:46)
35
38
  at onValidate (/home/runner/work/faststore/faststore/packages/core/src/sdk/useStore.ts:18:14)
36
- at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:17) {
39
+ at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:17) {
37
40
  [cause]: TypeError: Invalid URL
38
41
   at new URL (node:internal/url:828:25)
39
42
  at new URL$1 (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/index.CyBMJtT7.js:556:9)
@@ -53,11 +56,11 @@ Browserslist: browsers data (caniuse-lite) is 7 months old. Please run:
53
56
  stderr | test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx > RecommendationShelf > renders nothing when there is an error
54
57
  Error fetching recommendations undefined boom for campaign vrn:recommendations:acc:rec-top-items-v2:campaign-1
55
58
 
56
- ✓  browser  test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx (8 tests) 133ms
57
- ✓  browser  test/sdk/session/reconcileSessionLocale.browser.test.ts (5 tests) 18ms
58
- ✓  browser  test/sdk/recommendations/useRecommendationShelf.browser.test.tsx (12 tests) 38ms
59
- ✓  browser  test/components/CartSidebar/CartSidebar.browser.test.tsx (5 tests) 97ms
60
- ✓  browser  test/components/sections/Account/AccountOrderDetails.browser.test.tsx (4 tests) 49ms
59
+ ✓  browser  test/components/RecommendationShelf/RecommendationShelf.browser.test.tsx (8 tests) 122ms
60
+ ✓  browser  test/sdk/recommendations/useRecommendationShelf.browser.test.tsx (12 tests) 73ms
61
+ ✓  browser  test/components/CartSidebar/CartSidebar.browser.test.tsx (5 tests) 127ms
62
+ ✓  browser  test/components/sections/Account/AccountOrderDetails.browser.test.tsx (4 tests) 115ms
63
+ ✓  browser  test/components/navigation/Navbar.browser.test.tsx (3 tests) 44ms
61
64
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > posts the password and redirects to the requested return path
62
65
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
63
66
 
@@ -95,8 +98,6 @@ act(() => {
95
98
  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
96
99
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
97
100
 
98
- ✓  browser  test/components/navigation/Navbar.browser.test.tsx (3 tests) 46ms
99
- ✓  browser  test/sdk/session/getInitialSession.browser.test.ts (6 tests) 7ms
100
101
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > defaults returnTo to root and shows API validation errors
101
102
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
102
103
 
@@ -193,6 +194,7 @@ act(() => {
193
194
  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
194
195
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
195
196
 
197
+ ✓  browser  test/sdk/session/getInitialSession.browser.test.ts (6 tests) 6ms
196
198
  stderr | test/pages/password-protection.browser.test.tsx > PasswordProtectionLogin > shows service unavailable when the response is not a login payload
197
199
  Warning: An update to PasswordProtectionLogin inside a test was not wrapped in act(...).
198
200
 
@@ -289,86 +291,86 @@ act(() => {
289
291
  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
290
292
  at PasswordProtectionLogin (/home/runner/work/faststore/faststore/packages/core/src/pages/password-protection/index.tsx:19:69)
291
293
 
292
- ✓  browser  test/pages/password-protection.browser.test.tsx (6 tests) 420ms
293
- ✓  browser  test/sdk/account/useSwitchContract.browser.test.ts (5 tests) 34ms
294
+ ✓  browser  test/pages/password-protection.browser.test.tsx (6 tests) 592ms
295
+ ✓  browser  test/sdk/account/useSwitchContract.browser.test.ts (5 tests) 50ms
294
296
  stderr | test/components/cms/RenderSections.browser.test.tsx
295
297
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
296
298
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
297
299
  at validateCart (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/index.ts:120:9)
298
300
  at onValidate (/home/runner/work/faststore/faststore/packages/core/src/sdk/useStore.ts:18:20)
299
- at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
301
+ at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
300
302
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
301
303
 
302
- ✓  browser  test/components/account/OrganizationDrawerFooter.browser.test.tsx (8 tests) 263ms
303
- ✓  browser  test/components/cms/RenderSections.browser.test.tsx (5 tests) 66ms
304
- ✓  browser  test/components/navigation/NavbarSlider.browser.test.tsx (2 tests) 33ms
304
+ ✓  browser  test/components/account/OrganizationDrawerFooter.browser.test.tsx (8 tests) 401ms
305
+ ✓  browser  test/components/cms/RenderSections.browser.test.tsx (5 tests) 60ms
306
+ ✓  browser  test/components/navigation/NavbarSlider.browser.test.tsx (2 tests) 31ms
305
307
  stderr | test/sdk/localization/store-url.browser.test.ts
306
308
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
307
309
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
308
310
  at validateCart (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/index.ts:120:9)
309
311
  at onValidate (/home/runner/work/faststore/faststore/packages/core/src/sdk/useStore.ts:18:20)
310
- at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
312
+ at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
311
313
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
312
314
 
313
- ✓  browser  test/components/account/Menu.browser.test.tsx (6 tests) 252ms
314
- ✓  browser  test/sdk/localization/store-url.browser.test.ts (3 tests) 5ms
315
- ✓  browser  test/sdk/account/useAvailableContracts.browser.test.ts (6 tests) 32ms
316
- ✓  browser  test/components/templates/SearchPage/SearchWrapper.browser.test.tsx (3 tests) 31ms
317
- ✓  browser  test/sdk/recommendations/useRecommendationShelf.sessionFallback.browser.test.tsx (2 tests) 129ms
318
- ✓  browser  test/components/navigation/NavbarAccountArea.browser.test.tsx (4 tests) 49ms
319
- ✓  browser  test/sdk/account/changeContractToken.browser.test.ts (9 tests) 17ms
320
- ✓  browser  test/components/CartRecommendationShelf/CartRecommendationProductCard.browser.test.tsx (3 tests) 35ms
315
+ ✓  browser  test/sdk/localization/store-url.browser.test.ts (3 tests) 4ms
316
+ ✓  browser  test/components/account/Menu.browser.test.tsx (6 tests) 379ms
317
+ ✓  browser  test/sdk/account/useAvailableContracts.browser.test.ts (6 tests) 26ms
318
+ ✓  browser  test/components/templates/SearchPage/SearchWrapper.browser.test.tsx (3 tests) 41ms
319
+ ✓  browser  test/sdk/recommendations/useRecommendationShelf.sessionFallback.browser.test.tsx (2 tests) 134ms
320
+ ✓  browser  test/components/navigation/NavbarAccountArea.browser.test.tsx (4 tests) 56ms
321
+ ✓  browser  test/components/CartRecommendationShelf/CartRecommendationProductCard.browser.test.tsx (3 tests) 66ms
322
+ ✓  browser  test/sdk/account/changeContractToken.browser.test.ts (9 tests) 15ms
321
323
  stderr | test/components/account/doLogout.browser.test.ts
322
324
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
323
325
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
324
326
  at validateCart (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/index.ts:120:9)
325
327
  at onValidate (/home/runner/work/faststore/faststore/packages/core/src/sdk/useStore.ts:18:20)
326
- at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
328
+ at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
327
329
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
328
330
 
329
- ✓  browser  test/components/account/doLogout.browser.test.ts (1 test) 15ms
331
+ ✓  browser  test/components/account/doLogout.browser.test.ts (1 test) 35ms
330
332
  stderr | test/sdk/account/clearPersistedSessionState.browser.test.ts
331
333
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
332
334
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
333
335
  at validateCart (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/index.ts:120:9)
334
336
  at onValidate (/home/runner/work/faststore/faststore/packages/core/src/sdk/useStore.ts:18:20)
335
- at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
337
+ at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
336
338
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
337
339
 
338
- ✓  browser  test/sdk/account/clearPersistedSessionState.browser.test.ts (4 tests) 16ms
339
- ✓  browser  test/components/ui/LocalizationButton.browser.test.tsx (3 tests) 29ms
340
- ✓  browser  test/components/sections/Account/AccountOrderDelivery.browser.test.tsx (2 tests) 83ms
341
- ✓  browser  test/components/account/orders/DeliveryOptionAccordion.browser.test.tsx (2 tests) 71ms
342
- ✓  browser  test/components/sections/Account/AccountOrderStatus.browser.test.tsx (3 tests) 88ms
343
- ✓  browser  test/components/sections/Account/AccountListCards.browser.test.tsx (3 tests) 61ms
344
- ✓  browser  test/components/sections/Account/AccountOrdersList.browser.test.tsx (2 tests) 30ms
345
- ✓  browser  test/components/account/OrganizationDrawerHeader.browser.test.tsx (3 tests) 218ms
346
- ✓  browser  test/components/account/orders/SummaryCard.browser.test.tsx (2 tests) 61ms
347
- ✓  browser  test/components/account/orders/DeliveryOptionAccordionDeliveryInfo.browser.test.tsx (1 test) 34ms
348
- ✓  browser  test/components/account/OrganizationSignInButton.browser.test.tsx (2 tests) 194ms
349
- ✓  browser  test/components/account/orders/StatusCard.browser.test.tsx (2 tests) 87ms
350
- ✓  browser  test/utils/isLocalHost.browser.test.ts (3 tests) 4ms
340
+ ✓  browser  test/sdk/account/clearPersistedSessionState.browser.test.ts (4 tests) 19ms
341
+ ✓  browser  test/components/ui/LocalizationButton.browser.test.tsx (3 tests) 50ms
342
+ ✓  browser  test/components/sections/Account/AccountOrderDelivery.browser.test.tsx (2 tests) 130ms
343
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordion.browser.test.tsx (2 tests) 129ms
344
+ ✓  browser  test/components/sections/Account/AccountOrderStatus.browser.test.tsx (3 tests) 127ms
345
+ ✓  browser  test/components/sections/Account/AccountListCards.browser.test.tsx (3 tests) 102ms
346
+ ✓  browser  test/components/account/OrganizationDrawerHeader.browser.test.tsx (3 tests) 302ms
347
+ ✓  browser  test/components/sections/Account/AccountOrdersList.browser.test.tsx (2 tests) 22ms
348
+ ✓  browser  test/components/account/orders/SummaryCard.browser.test.tsx (2 tests) 113ms
349
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordionDeliveryInfo.browser.test.tsx (1 test) 97ms
350
+ ✓  browser  test/components/account/OrganizationSignInButton.browser.test.tsx (2 tests) 268ms
351
+ ✓  browser  test/utils/isLocalHost.browser.test.ts (3 tests) 3ms
352
+ ✓  browser  test/components/account/orders/StatusCard.browser.test.tsx (2 tests) 116ms
351
353
  ✓  browser  test/sdk/session/reconcileSessionLocale.disabled.browser.test.ts (1 test) 3ms
352
- ✓  browser  test/components/account/orders/DeliveryOptionAccordionProducts.browser.test.tsx (1 test) 33ms
353
- ✓  browser  test/components/account/orders/DeliveryCard.browser.test.tsx (1 test) 38ms
354
- ✓  browser  test/components/skeletons/ProductGridSkeleton.browser.test.tsx (2 tests) 32ms
355
- ✓  node  test/utils/localization/bindingPaths.test.ts (71 tests) 20ms
354
+ ✓  browser  test/components/account/orders/DeliveryCard.browser.test.tsx (1 test) 57ms
355
+ ✓  browser  test/components/skeletons/ProductGridSkeleton.browser.test.tsx (2 tests) 33ms
356
+ ✓  browser  test/components/account/orders/DeliveryOptionAccordionProducts.browser.test.tsx (1 test) 46ms
357
+ ✓  node  test/utils/localization/bindingPaths.test.ts (71 tests) 28ms
358
+ ✓  node  test/server/password-protection-service.test.ts (22 tests) 25ms
356
359
  stderr | test/sdk/account/refreshToken.browser.test.ts
357
360
  Error in optimistic validation: TypeError: Cannot read properties of undefined (reading 'read')
358
361
  at waitForSessionValidated (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/waitForSessionValidated.ts:16:32)
359
362
  at validateCart (/home/runner/work/faststore/faststore/packages/core/src/sdk/cart/index.ts:120:9)
360
363
  at onValidate (/home/runner/work/faststore/faststore/packages/core/src/sdk/useStore.ts:18:20)
361
- at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:354:23)
364
+ at a (/home/runner/work/faststore/faststore/packages/sdk/dist/es/index.mjs:357:23)
362
365
   at processTicksAndRejections (node:internal/process/task_queues:103:5)
363
366
 
364
- ✓  browser  test/sdk/account/refreshToken.browser.test.ts (1 test) 5ms
365
- ✓  node  test/server/password-protection-service.test.ts (22 tests) 43ms
366
- ✓  node  test/pages/api/switch-contract.test.ts (25 tests) 67ms
367
- ✓  browser  test/components/account/orders/FilterFacetPendingApproval.browser.test.tsx (1 test) 160ms
368
- ✓  node  test/utils/match-url.test.ts (10 tests) 7ms
369
- ✓  node  test/pages/api/unlock.test.ts (15 tests) 109ms
370
- ✓  node  test/sdk/localization/useBindingSelector.test.tsx (22 tests) 13ms
371
- ✓  node  test/sdk/localization/bindingSelector.test.ts (18 tests) 11ms
367
+ ✓  browser  test/sdk/account/refreshToken.browser.test.ts (1 test) 6ms
368
+ ✓  node  test/pages/api/switch-contract.test.ts (25 tests) 75ms
369
+ ✓  node  test/utils/match-url.test.ts (10 tests) 8ms
370
+ ✓  browser  test/components/account/orders/FilterFacetPendingApproval.browser.test.tsx (1 test) 213ms
371
+ ✓  node  test/sdk/localization/useBindingSelector.test.tsx (22 tests) 15ms
372
+ ✓  node  test/pages/api/unlock.test.ts (15 tests) 162ms
373
+ ✓  node  test/sdk/localization/bindingSelector.test.ts (18 tests) 10ms
372
374
  stderr | test/components/search/SearchInputComponent.test.tsx
373
375
  Warning: forwardRef render functions accept exactly two parameters: props and ref. Did you forget to use the ref parameter?
374
376
 
@@ -432,16 +434,16 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
432
434
  at Suspense
433
435
  at Wrapper (/home/runner/work/faststore/faststore/packages/core/test/components/search/SearchInputComponent.test.tsx:106:20)
434
436
 
435
- ✓  node  test/components/search/SearchInputComponent.test.tsx (6 tests) 58ms
436
- ✓  node  test/sdk/search/useSearchHistory.test.ts (13 tests) 37ms
437
- ✓  node  test/utils/cookieCacheBusting.test.ts (10 tests) 10ms
437
+ ✓  node  test/components/search/SearchInputComponent.test.tsx (6 tests) 75ms
438
+ ✓  node  test/sdk/search/useSearchHistory.test.ts (13 tests) 58ms
439
+ ✓  node  test/utils/cookieCacheBusting.test.ts (10 tests) 16ms
438
440
  stderr | test/pages/pvt/account/cards/index.test.ts > Cards page getServerSideProps > redirects to /pvt/account/403 when the query fails with 401/403
439
441
  { extensions: { status: 401 } }
440
442
 
441
443
  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
442
444
  { extensions: { status: 502 } }
443
445
 
444
- ✓  node  test/pages/pvt/account/cards/index.test.ts (8 tests) 7ms
446
+ ✓  node  test/pages/pvt/account/cards/index.test.ts (8 tests) 9ms
445
447
  stderr | test/pages/api/graphql.test.ts > /api/graphql error status propagation > propagates the upstream 400 from a wrapped BadRequestError instead of 500
446
448
  Graphql execution returned with error: [
447
449
  {
@@ -493,7 +495,7 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
493
495
 
494
496
  stderr | test/pages/api/graphql.test.ts > /api/graphql request handling > maps BadRequestError thrown by execute to its status
495
497
  Something unexpected occurred querying Graphql endpoint:
496
- E [FastStoreError]: malformed
498
+ k [FastStoreError]: malformed
497
499
  at /home/runner/work/faststore/faststore/packages/core/test/pages/api/graphql.test.ts:201:31
498
500
  at /home/runner/work/faststore/faststore/packages/core/test/pages/api/graphql.test.ts:207:39
499
501
  at file:///home/runner/work/faststore/faststore/node_modules/.pnpm/@vitest+runner@4.0.18/node_modules/@vitest/runner/dist/index.js:1024:60
@@ -551,77 +553,78 @@ Warning: React does not recognize the `providerProps` prop on a DOM element. If
551
553
  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)
552
554
  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)
553
555
 
554
- ✓  node  test/pages/api/graphql.test.ts (19 tests) 29ms
555
- ✓  node  test/utils/clearCookies.test.ts (20 tests) 16ms
556
- ✓  node  test/experimental/myAccountCmsServerSideProps.test.ts (5 tests) 8ms
556
+ ✓  node  test/pages/api/graphql.test.ts (19 tests) 36ms
557
+ ✓  node  test/utils/clearCookies.test.ts (20 tests) 26ms
558
+ ✓  node  test/experimental/myAccountCmsServerSideProps.test.ts (5 tests) 10ms
557
559
  stderr | test/sdk/account/useSetPassword.test.ts > useSetPassword > maps wrongcredentials error responses to the existing message
558
560
  Set password request failed: Bad Request
559
561
 
560
- ✓  node  test/sdk/account/useSetPassword.test.ts (6 tests) 35ms
561
- ✓  node  test/components/quotes/MyAccountListQuotesTable.test.tsx (12 tests) 271ms
562
- ✓  node  test/components/quotes/quoteFilters.test.ts (23 tests) 18ms
563
- ✓  node  test/utils/multipleTemplates.test.ts (8 tests) 3ms
564
- ✓  node  test/utils/localization/localizeRedirectDestination.test.ts (11 tests) 3ms
565
- ✓  node  test/sdk/orderEntry/useOrderEntryOperation.test.ts (8 tests) 31ms
566
- ✓  node  test/components/quotes/MyAccountListQuotes.test.tsx (9 tests) 814ms
567
- ✓ navigates with the search term on blur  363ms
568
- ✓ navigates without a label param when the search is cleared  360ms
562
+ ✓  node  test/sdk/account/useSetPassword.test.ts (6 tests) 32ms
563
+ ✓  node  test/components/quotes/MyAccountListQuotesTable.test.tsx (12 tests) 398ms
564
+ ✓  node  test/components/quotes/quoteFilters.test.ts (23 tests) 26ms
565
+ ✓  node  test/utils/multipleTemplates.test.ts (8 tests) 7ms
566
+ ✓  node  test/utils/localization/localizeRedirectDestination.test.ts (11 tests) 7ms
567
+ ✓  node  test/components/quotes/MyAccountListQuotes.test.tsx (9 tests) 823ms
568
+ ✓ navigates with the search term on blur  360ms
569
+ ✓ navigates without a label param when the search is cleared  359ms
569
570
  ✓  node  test/utils/localization/hreflang.test.ts (8 tests) 7ms
570
- ✓  node  test/sdk/account/getMyAccountRoutes.test.ts (13 tests) 8ms
571
- ✓  node  test/sdk/orderEntry/useOrderEntryUpload.test.ts (8 tests) 35ms
572
- ✓  node  test/sdk/redirects/index.test.ts (7 tests) 40ms
573
- ✓  node  test/components/quotes/MyAccountQuotesFilterSlider.test.tsx (5 tests) 117ms
574
- ✓  node  test/utils/productJsonLd.test.ts (17 tests) 8ms
575
- ✓  node  test/proxy.localization.test.ts (5 tests) 50ms
576
- ✓  node  test/components/account/orders/getDeliveryOptionLabel.test.ts (21 tests) 6ms
577
- ✓  node  test/sdk/graphql/retryPolicy.test.ts (18 tests) 15ms
578
- ✓  node  test/sdk/orderEntry/useOrderEntry.test.ts (8 tests) 34ms
579
- ✓  node  test/server/index.test.ts (7 tests) 716ms
580
- ✓  node  test/sdk/session/syncSalesChannelFromOrderForm.test.ts (6 tests) 7ms
581
- ✓  node  test/sdk/analytics/useStartRecommendationSession.test.ts (6 tests) 43ms
582
- ✓  node  test/components/quotes/MyAccountQuotesSelectedTags.test.tsx (8 tests) 89ms
583
- ✓  node  test/proxy.test.ts (4 tests) 15ms
584
- ✓  node  test/server/webops-api.test.ts (9 tests) 13ms
585
- ✓  node  test/components/account/orders/StatusCard.test.ts (3 tests) 21ms
586
- ✓  node  test/sdk/orderEntry/useOrderFormItems.test.ts (7 tests) 37ms
571
+ ✓  node  test/sdk/orderEntry/useOrderEntryOperation.test.ts (8 tests) 44ms
572
+ ✓  node  test/sdk/account/getMyAccountRoutes.test.ts (13 tests) 10ms
573
+ ✓  node  test/sdk/orderEntry/useOrderEntryUpload.test.ts (8 tests) 52ms
574
+ ✓  node  test/sdk/redirects/index.test.ts (7 tests) 44ms
575
+ ✓  node  test/components/quotes/MyAccountQuotesFilterSlider.test.tsx (5 tests) 151ms
576
+ ✓  node  test/utils/productJsonLd.test.ts (17 tests) 11ms
577
+ ✓  node  test/proxy.localization.test.ts (5 tests) 40ms
578
+ ✓  node  test/components/account/orders/getDeliveryOptionLabel.test.ts (21 tests) 9ms
579
+ ✓  node  test/sdk/graphql/retryPolicy.test.ts (18 tests) 17ms
580
+ ✓  node  test/sdk/orderEntry/useOrderEntry.test.ts (8 tests) 35ms
581
+ ✓  node  test/server/index.test.ts (7 tests) 1560ms
582
+ ✓ should handle options and execute  997ms
583
+ ✓  node  test/sdk/session/syncSalesChannelFromOrderForm.test.ts (6 tests) 10ms
584
+ ✓  node  test/components/quotes/MyAccountQuotesSelectedTags.test.tsx (8 tests) 108ms
585
+ ✓  node  test/sdk/analytics/useStartRecommendationSession.test.ts (6 tests) 45ms
586
+ ✓  node  test/proxy.test.ts (4 tests) 25ms
587
+ ✓  node  test/server/webops-api.test.ts (9 tests) 12ms
588
+ ✓  node  test/components/account/orders/StatusCard.test.ts (3 tests) 31ms
587
589
  ✓  node  test/sdk/localization/store-url.test.ts (4 tests) 5ms
588
- ✓  node  test/sdk/cart/waitForSessionValidated.test.ts (5 tests) 10ms
589
- ✓  node  test/server/cms/myAccountDefaultSections.test.ts (7 tests) 5ms
590
- ✓  node  test/utils/productJsonLdRendering.test.tsx (4 tests) 11ms
591
- ✓  node  test/sdk/account/refreshToken.test.ts (5 tests) 7ms
592
- ✓  node  test/server/content/service.test.ts (5 tests) 4ms
593
- ✓  node  test/server/cms/global.test.ts (3 tests) 4ms
594
- ✓  node  test/sdk/auth/useAuth.test.ts (5 tests) 25ms
595
- ✓  node  test/components/quotes/MyAccountQuotesStatusSelector.test.tsx (6 tests) 115ms
596
- ✓  node  test/utils/getRequestHostname.test.ts (12 tests) 4ms
597
- ✓  node  test/server/rootSpan.test.ts (4 tests) 31ms
598
- ✓  node  test/pages/api/preview.test.ts (2 tests) 7ms
599
- ✓  node  test/utils/validateSessionRefreshToken.test.ts (6 tests) 3ms
600
- ✓  node  test/components/search/SearchInput.test.ts (6 tests) 6ms
601
- ✓  node  test/components/account/Layout.test.tsx (6 tests) 54ms
590
+ ✓  node  test/sdk/cart/waitForSessionValidated.test.ts (5 tests) 11ms
591
+ ✓  node  test/server/cms/myAccountDefaultSections.test.ts (7 tests) 6ms
592
+ ✓  node  test/server/content/service.test.ts (5 tests) 8ms
593
+ ✓  node  test/sdk/orderEntry/useOrderFormItems.test.ts (7 tests) 42ms
594
+ ✓  node  test/utils/productJsonLdRendering.test.tsx (4 tests) 16ms
595
+ ✓  node  test/sdk/account/refreshToken.test.ts (5 tests) 12ms
596
+ ✓  node  test/server/cms/global.test.ts (3 tests) 6ms
597
+ ✓  node  test/sdk/auth/useAuth.test.ts (5 tests) 27ms
598
+ ✓  node  test/components/quotes/MyAccountQuotesStatusSelector.test.tsx (6 tests) 135ms
599
+ ✓  node  test/utils/getRequestHostname.test.ts (12 tests) 9ms
600
+ ✓  node  test/server/rootSpan.test.ts (4 tests) 43ms
601
+ ✓  node  test/pages/api/preview.test.ts (2 tests) 9ms
602
+ ✓  node  test/components/search/SearchInput.test.ts (6 tests) 8ms
603
+ ✓  node  test/utils/validateSessionRefreshToken.test.ts (6 tests) 4ms
604
+ ✓  node  test/components/account/Layout.test.tsx (6 tests) 64ms
602
605
  ✓  node  test/sdk/recommendations/vrn.test.ts (5 tests) 5ms
603
- ✓  node  test/server/cms/index.test.ts (2 tests) 7ms
604
- ✓  node  test/utils/retry.test.ts (5 tests) 11ms
605
- ✓  node  test/sdk/account/getB2BSessionClaims.test.ts (4 tests) 5ms
606
- ✓  node  test/utils/userOrderStatus.test.ts (4 tests) 5ms
607
- ✓  node  test/utils/unlockResponse.test.ts (11 tests) 3ms
608
- ✓  node  test/sdk/recommendations/useRecommendations.test.ts (2 tests) 4ms
609
- ✓  node  test/sdk/recommendations/useRecommendationUserId.test.ts (4 tests) 185ms
610
- ✓  node  test/components/account/OrganizationDrawerBody.test.tsx (3 tests) 38ms
606
+ ✓  node  test/utils/retry.test.ts (5 tests) 15ms
607
+ ✓  node  test/server/cms/index.test.ts (2 tests) 4ms
608
+ ✓  node  test/sdk/account/getB2BSessionClaims.test.ts (4 tests) 6ms
609
+ ✓  node  test/utils/userOrderStatus.test.ts (4 tests) 6ms
610
+ ✓  node  test/utils/unlockResponse.test.ts (11 tests) 5ms
611
+ ✓  node  test/sdk/recommendations/useRecommendationUserId.test.ts (4 tests) 195ms
612
+ ✓  node  test/sdk/recommendations/useRecommendations.test.ts (2 tests) 5ms
613
+ ✓  node  test/components/account/OrganizationDrawerBody.test.tsx (3 tests) 50ms
611
614
  ✓  node  test/utils/isLocalHost.test.ts (7 tests) 4ms
612
- ✓  node  test/components/account/orders/getOrderTotalLabel.test.ts (6 tests) 4ms
613
- ✓  node  test/components/account/orders/listOrdersLabels.test.ts (2 tests) 3ms
614
- ✓  node  test/utils/getCookie.test.ts (4 tests) 4ms
615
- ✓  node  test/sdk/session/isSignInAreaResolved.test.ts (3 tests) 3ms
616
- ✓  node  test/components/auth/ProfileChallenge.test.tsx (3 tests) 35ms
617
- ✓  node  test/sdk/analytics/utils.test.ts (2 tests) 2ms
618
- ✓  node  test/components/quotes/MyAccountQuoteStatusBadge.test.tsx (2 tests) 31ms
619
- ✓  node  test/instrumentation.test.ts (3 tests) 3ms
620
- ✓  node  test/components/account/orders/orderDetailsLabels.test.ts (1 test) 3ms
621
- ✓  node  test/sdk/account/clearPersistedSessionState.test.ts (1 test) 8ms
615
+ ✓  node  test/components/account/orders/getOrderTotalLabel.test.ts (6 tests) 5ms
616
+ ✓  node  test/components/account/orders/listOrdersLabels.test.ts (2 tests) 4ms
617
+ ✓  node  test/utils/getCookie.test.ts (4 tests) 7ms
618
+ ✓  node  test/sdk/session/isSignInAreaResolved.test.ts (3 tests) 4ms
619
+ ✓  node  test/components/auth/ProfileChallenge.test.tsx (3 tests) 36ms
620
+ ✓  node  test/sdk/analytics/utils.test.ts (2 tests) 4ms
621
+ ✓  node  test/instrumentation.test.ts (3 tests) 6ms
622
+ ✓  node  test/components/quotes/MyAccountQuoteStatusBadge.test.tsx (2 tests) 34ms
623
+ ✓  node  test/components/account/orders/orderDetailsLabels.test.ts (1 test) 4ms
624
+ ✓  node  test/sdk/account/clearPersistedSessionState.test.ts (1 test) 9ms
622
625
 
623
626
   Test Files  122 passed (122)
624
627
   Tests  926 passed (926)
625
-  Start at  23:47:19
626
-  Duration  42.97s (transform 10.45s, setup 0ms, import 38.63s, tests 15.36s, environment 52.12s)
628
+  Start at  22:18:16
629
+  Duration  57.44s (transform 16.09s, setup 0ms, import 52.44s, tests 21.12s, environment 70.14s)
627
630
 
package/CHANGELOG.md CHANGED
@@ -3,6 +3,20 @@
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.9.0-dev.0](https://github.com/vtex/faststore/compare/v4.8.1-dev.3...v4.9.0-dev.0) (2026-09-24)
7
+
8
+ ### Features
9
+
10
+ - **api,sdk:** support custom StoreSort values via customSortMap ([#3496](https://github.com/vtex/faststore/issues/3496)) ([8613faa](https://github.com/vtex/faststore/commit/8613faa046449801d17a2f0076e3a9b9d5a8c00f)), closes [/github.com/vtex/faststore/pull/3496#discussion_r4063084635](https://github.com//github.com/vtex/faststore/pull/3496/issues/discussion_r4063084635) [vtex-sites/playground.store#238](https://github.com/vtex-sites/playground.store/issues/238) [#3495](https://github.com/vtex/faststore/issues/3495)
11
+
12
+ ## [4.8.1-dev.3](https://github.com/vtex/faststore/compare/v4.8.1-dev.2...v4.8.1-dev.3) (2026-09-22)
13
+
14
+ ### Bug Fixes
15
+
16
+ - **core:** also normalize search-path concatenations in index/s pages ([519fb88](https://github.com/vtex/faststore/commit/519fb8885e483a8b00b292d342cce34cb4dd2cd6)), closes [#3498](https://github.com/vtex/faststore/issues/3498)
17
+ - **core:** normalize trailing slash on locale-aware store URLs (SFS-3390) ([07ff320](https://github.com/vtex/faststore/commit/07ff320232df8ba75e48902e4fb93f22fc33505c))
18
+ - **core:** pass rendered locale to getStoreURL in search canonical URL ([4ead8b8](https://github.com/vtex/faststore/commit/4ead8b86c1c53645db3afcd6cef41b085ffd5130))
19
+
6
20
  ## [4.8.1-dev.2](https://github.com/vtex/faststore/compare/v4.8.1-dev.1...v4.8.1-dev.2) (2026-09-21)
7
21
 
8
22
  ### Bug Fixes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faststore/core",
3
- "version": "4.8.1-dev.2",
3
+ "version": "4.9.0-dev.0",
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.8.1-dev.2",
75
- "@faststore/diagnostics": "4.8.1-dev.2",
76
- "@faststore/sdk": "4.8.1-dev.2",
77
- "@faststore/lighthouse": "4.8.1-dev.2",
78
- "@faststore/ui": "4.8.1-dev.2"
74
+ "@faststore/api": "4.9.0-dev.0",
75
+ "@faststore/diagnostics": "4.9.0-dev.0",
76
+ "@faststore/lighthouse": "4.9.0-dev.0",
77
+ "@faststore/ui": "4.9.0-dev.0",
78
+ "@faststore/sdk": "4.9.0-dev.0"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@cypress/code-coverage": "^3.12.1",
@@ -65,7 +65,7 @@ export default function LandingPage({
65
65
  storeConfig.seo.titleTemplate ??
66
66
  storeConfig.seo.title
67
67
 
68
- const storeURL = getStoreURL(router.locale)
68
+ const storeURL = getStoreURL(router.locale).replace(/\/$/, '')
69
69
 
70
70
  return (
71
71
  <>
@@ -167,9 +167,11 @@ function Page({
167
167
 
168
168
  let itemListElements = product.breadcrumbList.itemListElement ?? []
169
169
  if (itemListElements.length !== 0) {
170
+ const storeURL = getStoreURL(router.locale).replace(/\/$/, '')
171
+
170
172
  itemListElements = itemListElements.map(
171
173
  ({ item: pathname, name, position }) => {
172
- const pageUrl = getStoreURL(router.locale) + pathname
174
+ const pageUrl = storeURL + pathname
173
175
 
174
176
  return { name, position, item: pageUrl }
175
177
  }
@@ -56,6 +56,7 @@ function Page({
56
56
  )
57
57
 
58
58
  const storeUrl = getStoreURL(router.locale)
59
+ const searchStoreUrl = storeUrl.replace(/\/$/, '')
59
60
 
60
61
  return (
61
62
  <>
@@ -79,7 +80,7 @@ function Page({
79
80
  url={storeUrl}
80
81
  potentialActions={[
81
82
  {
82
- target: `${storeUrl}/s/?q`,
83
+ target: `${searchStoreUrl}/s/?q`,
83
84
  queryInput: 'search_term_string',
84
85
  },
85
86
  ]}
package/src/pages/s.tsx CHANGED
@@ -54,7 +54,8 @@ type StoreConfig = typeof storeConfig
54
54
  function generateSEOData(
55
55
  storeConfig: StoreConfig,
56
56
  searchTerm?: string,
57
- pageSeoSettings?: SearchSettings['settings']['seo']
57
+ pageSeoSettings?: SearchSettings['settings']['seo'],
58
+ locale?: string
58
59
  ) {
59
60
  const { search: searchSeo, ...seo } = storeConfig.seo
60
61
 
@@ -88,7 +89,10 @@ function generateSEOData(
88
89
  }
89
90
 
90
91
  const canonical = searchTerm
91
- ? `${getStoreURL()}/s?q=${searchTerm.replaceAll(' ', '+')}`
92
+ ? `${getStoreURL(locale).replace(/\/$/, '')}/s?q=${searchTerm.replaceAll(
93
+ ' ',
94
+ '+'
95
+ )}`
92
96
  : undefined
93
97
 
94
98
  return {
@@ -114,6 +118,7 @@ function Page({
114
118
  const { sections: globalSections, settings: globalSettings } =
115
119
  globalSectionsProp ?? {}
116
120
  const { settings } = searchContentType
121
+ const { locale } = useRouter()
117
122
  const applySearchState = useApplySearchState()
118
123
  const searchParams = useSearchParams({
119
124
  sort: settings?.productGallery?.sortBySelection as SearchState['sort'],
@@ -138,7 +143,8 @@ function Page({
138
143
  const { noindex, nofollow, ...seoData } = generateSEOData(
139
144
  storeConfig,
140
145
  effectiveSearchTerm,
141
- settings?.seo
146
+ settings?.seo,
147
+ locale
142
148
  )
143
149
 
144
150
  return (
@@ -13,6 +13,7 @@ export const apiOptions: APIOptions = {
13
13
  showSponsored: storeConfig.api.showSponsored,
14
14
  simulationBehavior: (storeConfig.api as Record<string, any>)
15
15
  .simulationBehavior,
16
+ customSortMap: (storeConfig.api as Record<string, any>).customSortMap,
16
17
  incrementAddress: storeConfig.api.incrementAddress,
17
18
  channel: storeConfig.session.channel,
18
19
  locale: storeConfig.session.locale,