@faststore/core 3.100.1 → 3.100.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.next/BUILD_ID +1 -1
- package/.next/build-manifest.json +48 -48
- package/.next/cache/.tsbuildinfo +1 -1
- package/.next/cache/config.json +3 -3
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/prerender-manifest.js +1 -1
- package/.next/prerender-manifest.json +1 -1
- package/.next/react-loadable-manifest.json +8 -8
- package/.next/routes-manifest.json +1 -1
- package/.next/server/chunks/948.js +2 -2
- package/.next/server/functions-config-manifest.json +1 -1
- package/.next/server/middleware-build-manifest.js +1 -1
- package/.next/server/middleware-manifest.json +2 -2
- package/.next/server/middleware-react-loadable-manifest.js +1 -1
- package/.next/server/pages/api/fs/password-protection/unlock.js +1 -0
- package/.next/server/pages/api/preview.js +1 -1
- package/.next/server/pages/en-US/404.html +2 -2
- package/.next/server/pages/en-US/500.html +2 -2
- package/.next/server/pages/en-US/checkout.html +2 -2
- package/.next/server/pages/en-US/login.html +2 -2
- package/.next/server/pages/en-US/{fs-auth-login.html → password-protection.html} +2 -2
- package/.next/server/pages/en-US/s.html +2 -2
- package/.next/server/pages/en-US.html +2 -2
- package/.next/server/pages-manifest.json +1 -1
- package/.next/server/src/middleware.js +33 -33
- package/.next/server/src/middleware.js.map +1 -1
- package/.next/static/0OKcQtIHO8diwBsczup15/_buildManifest.js +1 -0
- package/.next/static/chunks/{2927.23bae2c79f0ac0f3.js → 2927.5a79877943a6bf7c.js} +1 -1
- package/.next/static/chunks/3802.904f302bf009f795.js +1 -0
- package/.next/static/chunks/9380.217554eeecd9b37f.js +1 -0
- package/.next/static/chunks/{UIToast.de15325248043ce5.js → UIToast.19a8664c01a00d3a.js} +1 -1
- package/.next/static/chunks/main-a2d1cfe626f2fef1.js +1 -0
- package/.next/static/chunks/pages/{[...slug]-dc8a395a43b081f1.js → [...slug]-cf9e3bf4febd21c3.js} +1 -1
- package/.next/static/chunks/pages/password-protection-8dece47ea041d372.js +1 -0
- package/.next/static/chunks/webpack-25c67512e1907efd.js +1 -0
- package/.next/static/css/033b9397a0c0cf71.css +1 -0
- package/.next/trace +156 -156
- package/.turbo/turbo-build.log +17 -17
- package/.turbo/turbo-test.log +8 -8
- package/CHANGELOG.md +12 -0
- package/package.json +3 -3
- package/src/middleware.ts +14 -13
- package/src/pages/api/fs/{auth/login.ts → password-protection/unlock.ts} +4 -4
- package/src/pages/{fs-auth-login → password-protection}/index.tsx +10 -7
- package/src/pages/{fs-auth-login/fs-auth-login.module.scss → password-protection/password-protection.module.scss} +1 -1
- package/src/server/content/service.ts +33 -2
- package/src/server/{authentication-service.ts → password-protection-service.ts} +22 -18
- package/src/utils/{loginResponse.ts → unlockResponse.ts} +7 -2
- package/test/server/{authentication-service.test.ts → password-protection-service.test.ts} +71 -59
- package/.next/server/pages/api/fs/auth/login.js +0 -1
- package/.next/static/Lk9fl1r-H5eeVzeqYkA-Y/_buildManifest.js +0 -1
- package/.next/static/chunks/349.b3b38e1e9f719dda.js +0 -1
- package/.next/static/chunks/3802.5e8b0b689eacc0f8.js +0 -1
- package/.next/static/chunks/main-083a618181bb5fbb.js +0 -1
- package/.next/static/chunks/pages/fs-auth-login-ba2d1b3ef0ef0415.js +0 -1
- package/.next/static/chunks/webpack-ff85816fb58111fa.js +0 -1
- package/.next/static/css/3bd4edd425711792.css +0 -1
- /package/.next/server/pages/api/fs/{auth/login.js.nft.json → password-protection/unlock.js.nft.json} +0 -0
- /package/.next/server/pages/{fs-auth-login.js.nft.json → password-protection.js.nft.json} +0 -0
- /package/.next/static/{Lk9fl1r-H5eeVzeqYkA-Y → 0OKcQtIHO8diwBsczup15}/_ssgManifest.js +0 -0
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
env: 'vtexcommercestable',
|
|
29
29
|
workspace: 'master'
|
|
30
30
|
});
|
|
31
|
-
</script><meta name="generated-at" content="2026-06-
|
|
31
|
+
</script><meta name="generated-at" content="2026-06-30T15:20:51.304Z"/><title>FastStore Starter | FastStore</title><meta name="robots" content="index,follow"/><meta name="description" content="Fast Demo Store"/><meta property="og:title" content="FastStore Starter"/><meta property="og:description" content="Fast Demo Store"/><meta property="og:url" content="https://homebrewqa.fast.store"/><meta property="og:type" content="website"/><link rel="canonical" href="https://homebrewqa.fast.store"/><script type="application/ld+json">{"@context":"https://schema.org","@type":"WebSite","name":"FastStore","url":"https://homebrewqa.fast.store","potentialAction":[{"@type":"SearchAction","target":"https://homebrewqa.fast.store/s/?q={search_term_string}","query-input":"required name=search_term_string"}]}</script><meta name="next-head-count" content="13"/><link rel="preconnect" href="https://storeframework.vtexassets.com"/><link rel="dns-prefetch" href="https://storeframework.vtexassets.com"/><meta name="storefront" content="fast_store"/><script>var partytown={
|
|
32
32
|
debug:false,
|
|
33
33
|
logCalls:false,
|
|
34
34
|
forward:[...["sendrc"],!window.location.search.includes('gtm_debug=')&&true?'dataLayer.push':null].filter(Boolean)
|
|
@@ -39,4 +39,4 @@
|
|
|
39
39
|
partytownScript.src = '/~partytown/partytown.js';
|
|
40
40
|
document.head.appendChild(partytownScript);
|
|
41
41
|
}
|
|
42
|
-
</script><link rel="preload" href="/_next/static/css/146a8678babc61bf.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/146a8678babc61bf.css" crossorigin="" data-n-g=""/><link rel="preload" href="/_next/static/css/2c19433e38fd7533.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/2c19433e38fd7533.css" crossorigin="" data-n-p=""/><link rel="preload" href="/_next/static/css/837662922091162f.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/837662922091162f.css" crossorigin="" data-n-p=""/><link rel="preload" href="/_next/static/css/02259c549b2179f2.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/02259c549b2179f2.css" crossorigin="" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" crossorigin="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-ff85816fb58111fa.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/framework-d514426edf885c68.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/main-083a618181bb5fbb.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/pages/_app-35e8dda638ee2672.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/9298-1d1ed0a54133cb59.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/9173-1670c2bce097f620.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/pages/index-8774d5b4a8744eb2.js" defer="" crossorigin=""></script><script src="/_next/static/Lk9fl1r-H5eeVzeqYkA-Y/_buildManifest.js" defer="" crossorigin=""></script><script src="/_next/static/Lk9fl1r-H5eeVzeqYkA-Y/_ssgManifest.js" defer="" crossorigin=""></script></head><body class="theme"><div id="__next"><div data-store-section-name="Alert" style="height:823px;width:100%"></div><div data-store-section-name="Navbar" style="height:823px;width:100%"></div><div data-store-section-name="RegionBar" style="height:823px;width:100%"></div><div data-store-section-name="Hero" style="height:823px;width:100%"></div><div data-store-section-name="Incentives" style="height:823px;width:100%"></div><div data-store-section-name="ProductTiles" style="height:823px;width:100%"></div><div data-store-section-name="ProductShelf" style="height:823px;width:100%"></div><div data-store-section-name="BannerText" style="height:823px;width:100%"></div><div data-store-section-name="ProductShelf" style="height:823px;width:100%"></div><div data-store-section-name="Newsletter" style="height:823px;width:100%"></div><div data-store-section-name="Toast" style="height:823px;width:100%"></div><div data-store-section-name="ShoppingAssistant" style="height:823px;width:100%"></div><div data-store-section-name="Footer" style="height:823px;width:100%"></div><div data-store-section-name="RegionPopover" style="height:823px;width:100%"></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="">{"props":{"pageProps":{"page":{"id":"7bf9dd21-aa9e-4719-b8fd-5a6283ec30e3","name":"Home","type":"home","status":"published","versionId":"aac9849c-8489-464b-9529-361c0083adba","versionStatus":"published","sections":[{"id":"cb330746-5bdd-4337-98bd-b410c9565636","name":"Hero","data":{"link":{"linkTargetBlank":false,"text":"See Offers","url":"/technology"},"image":{"src":"https://storeframework.vtexassets.com/assets/vtex.file-manager-graphql/images/1e46eee3-5cd9-4911-8a81-501fe9c744fe___57d4662d50c07e760e6e74d8da282508.jpg","alt":"technology banner"},"title":"Black November Huge Sale! 80% OFF","subtitle":"At FastStore you can shop the best tech of 2024. Enjoy and get 10% off on your first purchase!","linkText":"See ","imageAlt":"office","imageSrc":"https://storeframework.vtexassets.com/assets/vtex.file-manager-graphql/images/17555ae3-3405-4be6-a19a-e76997a333ea___1fa52ed2b11886ffe215bab9588c345d.jpg","colorVariant":"main","variant":"primary"}},{"id":"365278a5-c159-42d9-b949-7e64108074ab","name":"Incentives","data":{"incentives":[{"title":"Buy online","firstLineText":"Get Free Shipping","icon":"Truck","alt":"Truck"},{"title":"Free return","firstLineText":"30 days to return","icon":"Calendar","alt":"Calendar"},{"title":"Gift cards","firstLineText":"$20/$30/$40","icon":"Gift","alt":"Gift"},{"title":"Physical Stores","firstLineText":"+40 Stores in Brazil","icon":"Storefront","alt":"Store Front"},{"title":"Buy online","firstLineText":"Get Free Shipping","icon":"ShieldCheck","alt":"Shield Check"}]}},{"id":"95edac5c-d38f-4f55-9ad2-c8560d4a1942","name":"ProductTiles","data":{"first":3,"after":"0","sort":"score_desc","selectedFacets":[{"key":"productClusterIds","value":"142"}],"taxesConfiguration":{"usePriceWithTaxes":false,"taxesLabel":"Tax included"},"title":"Just Arrived!"}},{"id":"249fa2f9-ef70-4a6a-a675-4ef991ade06c","name":"ProductShelf","data":{"numberOfItems":10,"itemsPerPage":5,"after":"0","sort":"score_desc","selectedFacets":[{"key":"productClusterIds","value":"140"}],"taxesConfiguration":{"usePriceWithTaxes":false,"taxesLabel":"Tax included"},"productCardConfiguration":{"showDiscountBadge":true,"bordered":true},"title":"Most Wanted"}},{"id":"1a8107dd-8c3f-4b77-84e8-da35c9d8d42b","name":"BannerText","data":{"link":{"linkTargetBlank":false,"text":"Check it out now!","url":"/office"},"actionLabel":"Check it out now!","actionPath":"/office","caption":"Enjoy and get 10% off on your first purchase!!","title":"The sun has set out Summer Sale! Save up to 50% off. Don't miss out!","colorVariant":"light","variant":"primary"}},{"id":"aab7763d-52da-4b6b-b334-e6f4ac713e8a","name":"ProductShelf","data":{"numberOfItems":5,"itemsPerPage":5,"after":"0","sort":"score_desc","selectedFacets":[{"key":"productClusterIds","value":"142"}],"taxesConfiguration":{"usePriceWithTaxes":false,"taxesLabel":"Tax included"},"productCardConfiguration":{"showDiscountBadge":true,"bordered":true},"title":"Deals \u0026 Promotions"}},{"id":"de86f6a4-8d97-4f3a-8ec2-c5a694b96e81","name":"Newsletter","data":{"icon":{"icon":"Envelope","alt":"Envelop"},"title":"Get News and Special Offers!","description":"Receive our news and promotions in advance. Enjoy and get 10% off your first purchase. For more information click here.","emailInputLabel":"Your Email","displayNameInput":true,"nameInputLabel":"Your Name","subscribeButtonLabel":"Subscribe","subscribeButtonLoadingLabel":"Loading...","card":false,"colorVariant":"main","toastSubscribe":{"title":"Hooray!","message":"Thank for your subscription.","icon":"CircleWavyCheck"},"toastSubscribeError":{"title":"Oops.","message":"Something went wrong. Please Try again.","icon":"CircleWavyWarning"},"privacyPolicy":"{\"blocks\":[{\"key\":\"clnfu\",\"text\":\"By subscribing to our newsletter you agree to to our Privacy Policy\",\"type\":\"unstyled\",\"depth\":0,\"inlineStyleRanges\":[],\"entityRanges\":[{\"offset\":53,\"length\":14,\"key\":0}],\"data\":{}}],\"entityMap\":{\"0\":{\"type\":\"LINK\",\"mutability\":\"MUTABLE\",\"data\":{\"url\":\"/\"}}}}"}}]},"globalSections":{"id":"095366a8-6e81-47a9-91eb-7a08f66611b5","name":"Global Sections","type":"globalSections","status":"published","versionId":"ee055d8f-a856-4f1b-953b-67be634ca7c8","versionStatus":"published","sections":[{"id":"7d1944af-0180-4e73-a58e-48f8cda06f9b","name":"Alert","data":{"link":{"text":"Buy now","to":"/office"},"dismissible":true,"icon":"BellRinging","content":"Get 15% off today: NEW15!"}},{"id":"1778082134460","name":"Navbar","data":{"logo":{"link":{"url":"/","title":"Go To Home"},"src":"https://storeframework.vtexassets.com/assets/vtex.file-manager-graphql/images/ab9997f4-8fd6-46f5-99d2-9d5af3ef5e34___6d75a203771d7408d8f0d1c660a076dd.png","alt":"Store logo"},"searchInput":{"placeholder":"Search everything in the store","sort":"score_desc","submitButtonAriaLabel":"Submit Search","searchHistoryTitle":"History","searchTopTitle":"Top search","quickOrderSettings":{"quickOrder":false,"attachmentButton":{"icon":{"icon":"Paperclip","alt":"Attach File"},"ariaLabel":"Attach File"},"skuMatrix":{"triggerButtonLabel":"Select multiple","columns":{"name":"Name","availability":{"label":"Availability","stockDisplaySettings":"showAvailability"},"price":"Price","quantitySelector":"Quantity"}},"invalidQuantityToastLabels":{"title":"Invalid quantity!","message":"The quantity you entered is outside the range of '%{min}' to '%{max}'. The quantity was set to '%{quantity}'."},"outOfStockLabel":"Out of stock","drawer":{"defaultTitle":"Quick Order","columns":{"name":"Product Name","availabilityLabel":"Availability","price":"Price (tax included)","quantity":"Quantity"},"messages":{"alertAriaLabel":"Product availability warning","tableAriaLabel":"Quick order products list","quantityUpdatedTooltip":"Quantity updated to match our inventory","quantityUpdatedAriaLabel":"Quantity adjusted to match available inventory","outOfStockLabel":"Out of stock","availableLabel":"Available","selectQuantityAriaLabel":"Select quantity for {productName}","removeProductAriaLabel":"Remove {productName} from quick order list","invalidQuantityTitle":"Invalid quantity!","emptyStateTitle":"No products found","emptyStateMessage":"No SKUs were found for the provided file. Please check your file and try again."},"alertMessages":{"notFoundAndOutOfStock":"Some of the SKUs were not found or are not available. Please adjust the amount before proceeding to the cart.","notFound":"Some of the SKUs were not found. Please check your CSV file and try again.","outOfStock":"Some of the SKUs are not available. Please adjust the amount before proceeding to the cart."},"footer":{"itemsLabel":"items","addToCartLabel":"Add to Cart","addToCartAriaLabel":"Add items to cart"}},"toastMessages":{"noFileSelected":{"title":"No file selected","message":"Please select a CSV file to search."},"noDataFound":{"title":"No data found","message":"The CSV file could not be processed or contains no valid data. Please check the file format and try again."},"fileProcessingError":{"title":"File processing error","defaultMessage":"Failed to process the CSV file. Please try again."},"fileTimeout":{"message":"The file may be too large, corrupted, or the parser may be stuck."},"noDataAvailable":{"title":"No data available","message":"The CSV file contains no valid data. Please check the file and try again."},"noValidSkus":{"title":"No valid SKUs found","message":"The CSV file does not contain any valid SKUs. Please check the file format and ensure it has a SKU column."}},"accessibilityLabels":{"attachButtonAriaLabel":"Attach File","searchButtonAriaLabel":"Submit Search"},"fileUploadCard":{"title":"File Upload","fileInputAriaLabel":"File upload input","dropzoneAriaLabel":"Drop a file to search in bulk","dropzoneTitle":"Drop your file here or click to browse","dropzoneDragActiveText":"Drop the files here...","dropzoneText":"Drag and drop files here, or click to select files","selectFileButtonLabel":"Select file","downloadTemplateButtonLabel":"Download template","removeButtonAriaLabel":"Remove file","searchButtonLabel":"Search","uploadingStatusText":"Uploading...","completedStatusTemplate":"File ready ({fileSize} KB)","acceptedFileTypes":".csv","errorMessages":{"unexpected":{"title":"Something went wrong","description":"We could not process your file. Please try again."},"unsupported":{"title":"Unsupported file","description":"Please upload a CSV file."},"unreadable":{"title":"File could not be read","description":"The file may be corrupted or in an unsupported encoding."},"invalid-structure":{"title":"Invalid file structure","description":"The CSV does not match the expected format. Use the template."},"empty":{"title":"Empty file","description":"The file has no data. Add at least one row."},"too-large":{"title":"File too large","description":"Please upload a file smaller than the maximum allowed size."},"no-products-found":{"title":"No products found","description":"Please verify the SKUs in your file and try again."}}}},"loadingLabel":"Loading...","collapseSearchAriaLabel":"Collapse search bar"},"signInButton":{"icon":{"icon":"User","alt":"User"},"label":"Sign in","myAccountLabel":"My account"},"cartIcon":{"icon":"ShoppingCart","alt":"Shopping cart"},"navigation":{"regionalization":{"enabled":true,"icon":{"icon":"MapPin","alt":"MapPin"},"label":"Set Location"},"localizationButton":{"shouldDisplayLocalizationButton":false,"icon":{"icon":"Globe"},"ariaLabel":"Open localization selector"},"localizationSelector":{"title":"Select language and currency","languageLabel":"Language","currencyLabel":"Currency","description":"Changing the language or currency may affect prices, promotions and availability.","saveLabel":"Save","errorMessages":{"noBindingFound":"Unable to save configuration. No matching store found.","invalidUrl":"Invalid redirect URL. Please try again.","noCurrencies":"No currencies available for this language.","defaultError":"An error occurred. Please try again."}},"pageLinks":[{"text":"Office","url":"/office"},{"text":"Technology","url":"/technology"}],"menu":{"icon":{"icon":"List","alt":"List"}},"home":{"label":"Go to Home"}}}},{"id":"a8a2a6c1-3577-47ee-9fe2-f1d196d58427","name":"RegionBar","data":{"icon":{"icon":"MapPin","alt":"Map Pin icon"},"label":"Set your location","editLabel":"Edit","buttonIcon":{"icon":"CaretRight","alt":"Caret Right icon"}}},{"id":"cfbbcef5-f804-488b-ab22-048ff3e88788","name":"CartSidebar","data":{"title":"Your Cart","alert":{"icon":{"icon":"Truck","alt":"Arrow Right icon"},"text":"Free shipping starts at $300"},"emptyCart":{"title":"Your Cart is empty","buttonLabel":"Start Shopping"},"checkoutButton":{"label":"Checkout","loadingLabel":"Loading...","icon":{"icon":"ArrowRight","alt":"Arrow Right icon"}},"quantitySelector":{"useUnitMultiplier":false},"taxesConfiguration":{"usePriceWithTaxes":false,"taxesLabel":"Tax included"}}},{"id":"7f3a50f0-f252-4b3a-b704-13402f31c32c","name":"RegionModal","data":{"title":"Set your location","description":"Prices, offers and availability may vary according to your location.","closeButtonAriaLabel":"Close Region Modal","inputField":{"label":"Postal Code","errorMessage":"You entered an invalid Postal Code"},"idkPostalCodeLink":{"icon":{"icon":"ArrowSquareOut","alt":"Arrow Square Out icon"},"text":"I don't know my Postal Code"}}},{"id":"fddde296-1946-4aa1-b428-24e4b625d615","name":"Children","data":{}},{"id":"a1fb4bef-3864-48f4-baae-7705d0e81bbc","name":"ShoppingAssistant","data":{}},{"id":"93bd4542-236d-499c-8716-b8a4152aec10","name":"Footer","data":{"incentives":[{"title":" ","firstLineText":"Trusted","icon":"ShieldCheck","secondLineText":"by Safecon"},{"title":" ","firstLineText":"Free","icon":"Calendar","secondLineText":"Return"},{"title":" ","firstLineText":"Pickup","icon":"Storefront","secondLineText":"Options"},{"firstLineText":"Free","secondLineText":"Shipping","title":" ","icon":"Truck"}],"footerLinks":[{"items":[{"text":"About Us","url":"/"},{"text":"Our Blog","url":"/"},{"text":"Stores","url":"https://starter.vtex.app"},{"text":"Work With Us","url":"https://starter.vtex.app"}],"sectionTitle":"Our company"},{"items":[{"text":"Returns and Exchanges","url":"/"},{"text":"Product Recall","url":"/"},{"text":"Gift Cards","url":"/"}],"sectionTitle":"Orders and Purchases"},{"items":[{"text":"Support Center","url":"/"},{"text":"Support \u0026 Services","url":"/"},{"text":"Contact Us","url":"/"}],"sectionTitle":"Support \u0026 Services"},{"items":[{"text":"Affiliate Program","url":"/"},{"text":"Marketplace","url":"/"}],"sectionTitle":"Partnerships"}],"footerSocial":{"title":"Follow Us","socialLinks":[{"icon":{"icon":"Facebook"},"alt":"Facebook","url":"https://www.facebook.com"},{"icon":{"icon":"Instagram"},"alt":"Instagram","url":"https://www.instagram.com"},{"icon":{"icon":"Pinterest"},"alt":"Pinterest","url":"https://www.pinterest.com"},{"icon":{"icon":"Twitter"},"alt":"Twitter","url":"https://www.twitter.com"}]},"logo":{"link":{"url":"https://starter.vtex.app/","title":"FastStore Starter"},"src":"https://storeframework.vtexassets.com/assets/vtex.file-manager-graphql/images/ec191c4a-32d8-41a9-9255-f319819bc98c___c24a66e2bef2c3f2bea07571a3636804.png","alt":"Store Logo"},"acceptedPaymentMethods":{"showPaymentMethods":true,"title":"Payment Methods","paymentMethods":[{"icon":{"icon":"Diners"},"alt":"Diners Club"},{"icon":{"icon":"Visa"},"alt":"Visa"},{"icon":{"icon":"Mastercard"},"alt":"Mastercard"},{"icon":{"icon":"EloCard"},"alt":"Elo Card"},{"icon":{"icon":"PayPal"},"alt":"PayPal"},{"icon":{"icon":"GooglePay"},"alt":"GooglePay"},{"icon":{"icon":"ApplePay"},"alt":"Apple Pay"}]},"copyrightInfo":"This website uses VTEX technology. In-store price may vary. Prices and offers are subject to change. 2023 Brandless Store. All rights reserved. Store is a trademark of Store and its affiliated companies. Mount St, 000, New York / NY - 00000."}},{"id":"1778083148729","name":"Search","data":{"searchInput":{"placeholder":"Search everything in the store","icon":{"icon":"MagnifyingGlass","alt":"Magnifying glass"}},"searchHistory":{"title":"History","clearButtonLabel":"Clear history","icon":{"icon":"ClockClockwise","alt":"History"},"maxItems":5},"searchTop":{"title":"Top search","maxItems":5},"searchAutocomplete":{"icon":{"alt":"Magnifying glass"},"maxItems":5},"searchProducts":{"title":"Suggested products","maxItems":5}}},{"id":"1778083171641","name":"RegionPopover","data":{"title":"Set your location","closeButtonAriaLabel":"Close Region Popover","inputField":{},"textBeforeLocation":"Your current location is","textAfterLocation":"Use the field below to change it.","description":"Offers and availability vary by location","idkPostalCodeLink":{"icon":{}}}}],"settings":{"regionalization":{"inputField":{"label":"Postal Code","errorMessage":"You entered an invalid Postal Code","noProductsAvailableErrorMessage":"There are no products available for %s.","buttonActionText":"Apply","errorMessageHelper":"Try using a different postal code.","loadingLabel":"..."},"idkPostalCodeLink":{"text":"I don't know my Postal Code","icon":{"icon":"ArrowSquareOut","alt":"Arrow Square Out icon"}}},"deliveryPromise":{"deliveryMethods":{"title":"Delivery Methods","description":"Offers and availability vary by location.","setLocationButtonLabel":"Set Location","allDeliveryMethods":"All delivery methods","delivery":"Shipping to","pickupInPoint":"Pickup at","pickupNearby":"Pickup Nearby","pickupAll":{"enabled":false,"label":"Pickup Anywhere"}},"regionSlider":{"title":{"setLocation":"Set Location","changeLocation":"Change Location","changePickupPoint":"Change Store","globalChangePickupPoint":"Change Store"},"pickupPointChangeApplyButtonLabel":"Update","pickupPointClearFilterButtonLabel":"Clear filter","choosePickupPointAriaLabel":"Choose a store","noPickupPointsAvailableInLocation":"No stores near location."},"filterByPickupPoint":{"enabled":true,"label":"Filter by Store","icon":{"icon":"Storefront","alt":"Storefront icon"}},"deliveryOptions":{"enabled":true,"title":"Delivery Option","allDeliveryOptions":"All delivery options"},"deliveryPromiseBadges":{"enabled":true,"delivery":"Available for shipping","deliveryUnavailable":"Unavailable for shipping","pickupInPoint":"Available for pickup","pickupInPointUnavailable":"Unavailable for pickup"},"inStock":{"enabled":false,"title":"Availability","label":"In-stock only"}},"filters":{"filterFacetRange":{"minLabel":"Min","maxLabel":"Max","minPriceErrorMessage":"Min price can't be greater than max","maxPriceErrorMessage":"Max price can't be smaller than min"}},"loading":{"label":"Loading..."}}},"serverData":null},"__N_SSG":true},"page":"/","query":{},"buildId":"Lk9fl1r-H5eeVzeqYkA-Y","isFallback":false,"gsp":true,"locale":"en-US","locales":["en-US"],"defaultLocale":"en-US","scriptLoader":[]}</script></body></html>
|
|
42
|
+
</script><link rel="preload" href="/_next/static/css/146a8678babc61bf.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/146a8678babc61bf.css" crossorigin="" data-n-g=""/><link rel="preload" href="/_next/static/css/2c19433e38fd7533.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/2c19433e38fd7533.css" crossorigin="" data-n-p=""/><link rel="preload" href="/_next/static/css/837662922091162f.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/837662922091162f.css" crossorigin="" data-n-p=""/><link rel="preload" href="/_next/static/css/02259c549b2179f2.css" as="style" crossorigin=""/><link rel="stylesheet" href="/_next/static/css/02259c549b2179f2.css" crossorigin="" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" crossorigin="" nomodule="" src="/_next/static/chunks/polyfills-c67a75d1b6f99dc8.js"></script><script src="/_next/static/chunks/webpack-25c67512e1907efd.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/framework-d514426edf885c68.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/main-a2d1cfe626f2fef1.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/pages/_app-35e8dda638ee2672.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/9298-1d1ed0a54133cb59.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/9173-1670c2bce097f620.js" defer="" crossorigin=""></script><script src="/_next/static/chunks/pages/index-8774d5b4a8744eb2.js" defer="" crossorigin=""></script><script src="/_next/static/0OKcQtIHO8diwBsczup15/_buildManifest.js" defer="" crossorigin=""></script><script src="/_next/static/0OKcQtIHO8diwBsczup15/_ssgManifest.js" defer="" crossorigin=""></script></head><body class="theme"><div id="__next"><div data-store-section-name="Alert" style="height:823px;width:100%"></div><div data-store-section-name="Navbar" style="height:823px;width:100%"></div><div data-store-section-name="RegionBar" style="height:823px;width:100%"></div><div data-store-section-name="Hero" style="height:823px;width:100%"></div><div data-store-section-name="Incentives" style="height:823px;width:100%"></div><div data-store-section-name="ProductTiles" style="height:823px;width:100%"></div><div data-store-section-name="ProductShelf" style="height:823px;width:100%"></div><div data-store-section-name="BannerText" style="height:823px;width:100%"></div><div data-store-section-name="ProductShelf" style="height:823px;width:100%"></div><div data-store-section-name="Newsletter" style="height:823px;width:100%"></div><div data-store-section-name="Toast" style="height:823px;width:100%"></div><div data-store-section-name="ShoppingAssistant" style="height:823px;width:100%"></div><div data-store-section-name="Footer" style="height:823px;width:100%"></div><div data-store-section-name="RegionPopover" style="height:823px;width:100%"></div></div><script id="__NEXT_DATA__" type="application/json" crossorigin="">{"props":{"pageProps":{"page":{"id":"7bf9dd21-aa9e-4719-b8fd-5a6283ec30e3","name":"Home","type":"home","status":"published","versionId":"aac9849c-8489-464b-9529-361c0083adba","versionStatus":"published","sections":[{"id":"cb330746-5bdd-4337-98bd-b410c9565636","name":"Hero","data":{"link":{"linkTargetBlank":false,"text":"See Offers","url":"/technology"},"image":{"src":"https://storeframework.vtexassets.com/assets/vtex.file-manager-graphql/images/1e46eee3-5cd9-4911-8a81-501fe9c744fe___57d4662d50c07e760e6e74d8da282508.jpg","alt":"technology banner"},"title":"Black November Huge Sale! 80% OFF","subtitle":"At FastStore you can shop the best tech of 2024. Enjoy and get 10% off on your first purchase!","linkText":"See ","imageAlt":"office","imageSrc":"https://storeframework.vtexassets.com/assets/vtex.file-manager-graphql/images/17555ae3-3405-4be6-a19a-e76997a333ea___1fa52ed2b11886ffe215bab9588c345d.jpg","colorVariant":"main","variant":"primary"}},{"id":"365278a5-c159-42d9-b949-7e64108074ab","name":"Incentives","data":{"incentives":[{"title":"Buy online","firstLineText":"Get Free Shipping","icon":"Truck","alt":"Truck"},{"title":"Free return","firstLineText":"30 days to return","icon":"Calendar","alt":"Calendar"},{"title":"Gift cards","firstLineText":"$20/$30/$40","icon":"Gift","alt":"Gift"},{"title":"Physical Stores","firstLineText":"+40 Stores in Brazil","icon":"Storefront","alt":"Store Front"},{"title":"Buy online","firstLineText":"Get Free Shipping","icon":"ShieldCheck","alt":"Shield Check"}]}},{"id":"95edac5c-d38f-4f55-9ad2-c8560d4a1942","name":"ProductTiles","data":{"first":3,"after":"0","sort":"score_desc","selectedFacets":[{"key":"productClusterIds","value":"142"}],"taxesConfiguration":{"usePriceWithTaxes":false,"taxesLabel":"Tax included"},"title":"Just Arrived!"}},{"id":"249fa2f9-ef70-4a6a-a675-4ef991ade06c","name":"ProductShelf","data":{"numberOfItems":10,"itemsPerPage":5,"after":"0","sort":"score_desc","selectedFacets":[{"key":"productClusterIds","value":"140"}],"taxesConfiguration":{"usePriceWithTaxes":false,"taxesLabel":"Tax included"},"productCardConfiguration":{"showDiscountBadge":true,"bordered":true},"title":"Most Wanted"}},{"id":"1a8107dd-8c3f-4b77-84e8-da35c9d8d42b","name":"BannerText","data":{"link":{"linkTargetBlank":false,"text":"Check it out now!","url":"/office"},"actionLabel":"Check it out now!","actionPath":"/office","caption":"Enjoy and get 10% off on your first purchase!!","title":"The sun has set out Summer Sale! Save up to 50% off. Don't miss out!","colorVariant":"light","variant":"primary"}},{"id":"aab7763d-52da-4b6b-b334-e6f4ac713e8a","name":"ProductShelf","data":{"numberOfItems":5,"itemsPerPage":5,"after":"0","sort":"score_desc","selectedFacets":[{"key":"productClusterIds","value":"142"}],"taxesConfiguration":{"usePriceWithTaxes":false,"taxesLabel":"Tax included"},"productCardConfiguration":{"showDiscountBadge":true,"bordered":true},"title":"Deals \u0026 Promotions"}},{"id":"de86f6a4-8d97-4f3a-8ec2-c5a694b96e81","name":"Newsletter","data":{"icon":{"icon":"Envelope","alt":"Envelop"},"title":"Get News and Special Offers!","description":"Receive our news and promotions in advance. Enjoy and get 10% off your first purchase. For more information click here.","emailInputLabel":"Your Email","displayNameInput":true,"nameInputLabel":"Your Name","subscribeButtonLabel":"Subscribe","subscribeButtonLoadingLabel":"Loading...","card":false,"colorVariant":"main","toastSubscribe":{"title":"Hooray!","message":"Thank for your subscription.","icon":"CircleWavyCheck"},"toastSubscribeError":{"title":"Oops.","message":"Something went wrong. Please Try again.","icon":"CircleWavyWarning"},"privacyPolicy":"{\"blocks\":[{\"key\":\"clnfu\",\"text\":\"By subscribing to our newsletter you agree to to our Privacy Policy\",\"type\":\"unstyled\",\"depth\":0,\"inlineStyleRanges\":[],\"entityRanges\":[{\"offset\":53,\"length\":14,\"key\":0}],\"data\":{}}],\"entityMap\":{\"0\":{\"type\":\"LINK\",\"mutability\":\"MUTABLE\",\"data\":{\"url\":\"/\"}}}}"}}]},"globalSections":{"id":"095366a8-6e81-47a9-91eb-7a08f66611b5","name":"Global Sections","type":"globalSections","status":"published","versionId":"ee055d8f-a856-4f1b-953b-67be634ca7c8","versionStatus":"published","sections":[{"id":"7d1944af-0180-4e73-a58e-48f8cda06f9b","name":"Alert","data":{"link":{"text":"Buy now","to":"/office"},"dismissible":true,"icon":"BellRinging","content":"Get 15% off today: NEW15!"}},{"id":"1778082134460","name":"Navbar","data":{"logo":{"link":{"url":"/","title":"Go To Home"},"src":"https://storeframework.vtexassets.com/assets/vtex.file-manager-graphql/images/ab9997f4-8fd6-46f5-99d2-9d5af3ef5e34___6d75a203771d7408d8f0d1c660a076dd.png","alt":"Store logo"},"searchInput":{"placeholder":"Search everything in the store","sort":"score_desc","submitButtonAriaLabel":"Submit Search","searchHistoryTitle":"History","searchTopTitle":"Top search","quickOrderSettings":{"quickOrder":false,"attachmentButton":{"icon":{"icon":"Paperclip","alt":"Attach File"},"ariaLabel":"Attach File"},"skuMatrix":{"triggerButtonLabel":"Select multiple","columns":{"name":"Name","availability":{"label":"Availability","stockDisplaySettings":"showAvailability"},"price":"Price","quantitySelector":"Quantity"}},"invalidQuantityToastLabels":{"title":"Invalid quantity!","message":"The quantity you entered is outside the range of '%{min}' to '%{max}'. The quantity was set to '%{quantity}'."},"outOfStockLabel":"Out of stock","drawer":{"defaultTitle":"Quick Order","columns":{"name":"Product Name","availabilityLabel":"Availability","price":"Price (tax included)","quantity":"Quantity"},"messages":{"alertAriaLabel":"Product availability warning","tableAriaLabel":"Quick order products list","quantityUpdatedTooltip":"Quantity updated to match our inventory","quantityUpdatedAriaLabel":"Quantity adjusted to match available inventory","outOfStockLabel":"Out of stock","availableLabel":"Available","selectQuantityAriaLabel":"Select quantity for {productName}","removeProductAriaLabel":"Remove {productName} from quick order list","invalidQuantityTitle":"Invalid quantity!","emptyStateTitle":"No products found","emptyStateMessage":"No SKUs were found for the provided file. Please check your file and try again."},"alertMessages":{"notFoundAndOutOfStock":"Some of the SKUs were not found or are not available. Please adjust the amount before proceeding to the cart.","notFound":"Some of the SKUs were not found. Please check your CSV file and try again.","outOfStock":"Some of the SKUs are not available. Please adjust the amount before proceeding to the cart."},"footer":{"itemsLabel":"items","addToCartLabel":"Add to Cart","addToCartAriaLabel":"Add items to cart"}},"toastMessages":{"noFileSelected":{"title":"No file selected","message":"Please select a CSV file to search."},"noDataFound":{"title":"No data found","message":"The CSV file could not be processed or contains no valid data. Please check the file format and try again."},"fileProcessingError":{"title":"File processing error","defaultMessage":"Failed to process the CSV file. Please try again."},"fileTimeout":{"message":"The file may be too large, corrupted, or the parser may be stuck."},"noDataAvailable":{"title":"No data available","message":"The CSV file contains no valid data. Please check the file and try again."},"noValidSkus":{"title":"No valid SKUs found","message":"The CSV file does not contain any valid SKUs. Please check the file format and ensure it has a SKU column."}},"accessibilityLabels":{"attachButtonAriaLabel":"Attach File","searchButtonAriaLabel":"Submit Search"},"fileUploadCard":{"title":"File Upload","fileInputAriaLabel":"File upload input","dropzoneAriaLabel":"Drop a file to search in bulk","dropzoneTitle":"Drop your file here or click to browse","dropzoneDragActiveText":"Drop the files here...","dropzoneText":"Drag and drop files here, or click to select files","selectFileButtonLabel":"Select file","downloadTemplateButtonLabel":"Download template","removeButtonAriaLabel":"Remove file","searchButtonLabel":"Search","uploadingStatusText":"Uploading...","completedStatusTemplate":"File ready ({fileSize} KB)","acceptedFileTypes":".csv","errorMessages":{"unexpected":{"title":"Something went wrong","description":"We could not process your file. Please try again."},"unsupported":{"title":"Unsupported file","description":"Please upload a CSV file."},"unreadable":{"title":"File could not be read","description":"The file may be corrupted or in an unsupported encoding."},"invalid-structure":{"title":"Invalid file structure","description":"The CSV does not match the expected format. Use the template."},"empty":{"title":"Empty file","description":"The file has no data. Add at least one row."},"too-large":{"title":"File too large","description":"Please upload a file smaller than the maximum allowed size."},"no-products-found":{"title":"No products found","description":"Please verify the SKUs in your file and try again."}}}},"loadingLabel":"Loading...","collapseSearchAriaLabel":"Collapse search bar"},"signInButton":{"icon":{"icon":"User","alt":"User"},"label":"Sign in","myAccountLabel":"My account"},"cartIcon":{"icon":"ShoppingCart","alt":"Shopping cart"},"navigation":{"regionalization":{"enabled":true,"icon":{"icon":"MapPin","alt":"MapPin"},"label":"Set Location"},"localizationButton":{"shouldDisplayLocalizationButton":false,"icon":{"icon":"Globe"},"ariaLabel":"Open localization selector"},"localizationSelector":{"title":"Select language and currency","languageLabel":"Language","currencyLabel":"Currency","description":"Changing the language or currency may affect prices, promotions and availability.","saveLabel":"Save","errorMessages":{"noBindingFound":"Unable to save configuration. No matching store found.","invalidUrl":"Invalid redirect URL. Please try again.","noCurrencies":"No currencies available for this language.","defaultError":"An error occurred. Please try again."}},"pageLinks":[{"text":"Office","url":"/office"},{"text":"Technology","url":"/technology"}],"menu":{"icon":{"icon":"List","alt":"List"}},"home":{"label":"Go to Home"}}}},{"id":"a8a2a6c1-3577-47ee-9fe2-f1d196d58427","name":"RegionBar","data":{"icon":{"icon":"MapPin","alt":"Map Pin icon"},"label":"Set your location","editLabel":"Edit","buttonIcon":{"icon":"CaretRight","alt":"Caret Right icon"}}},{"id":"cfbbcef5-f804-488b-ab22-048ff3e88788","name":"CartSidebar","data":{"title":"Your Cart","alert":{"icon":{"icon":"Truck","alt":"Arrow Right icon"},"text":"Free shipping starts at $300"},"emptyCart":{"title":"Your Cart is empty","buttonLabel":"Start Shopping"},"checkoutButton":{"label":"Checkout","loadingLabel":"Loading...","icon":{"icon":"ArrowRight","alt":"Arrow Right icon"}},"quantitySelector":{"useUnitMultiplier":false},"taxesConfiguration":{"usePriceWithTaxes":false,"taxesLabel":"Tax included"}}},{"id":"7f3a50f0-f252-4b3a-b704-13402f31c32c","name":"RegionModal","data":{"title":"Set your location","description":"Prices, offers and availability may vary according to your location.","closeButtonAriaLabel":"Close Region Modal","inputField":{"label":"Postal Code","errorMessage":"You entered an invalid Postal Code"},"idkPostalCodeLink":{"icon":{"icon":"ArrowSquareOut","alt":"Arrow Square Out icon"},"text":"I don't know my Postal Code"}}},{"id":"fddde296-1946-4aa1-b428-24e4b625d615","name":"Children","data":{}},{"id":"a1fb4bef-3864-48f4-baae-7705d0e81bbc","name":"ShoppingAssistant","data":{}},{"id":"93bd4542-236d-499c-8716-b8a4152aec10","name":"Footer","data":{"incentives":[{"title":" ","firstLineText":"Trusted","icon":"ShieldCheck","secondLineText":"by Safecon"},{"title":" ","firstLineText":"Free","icon":"Calendar","secondLineText":"Return"},{"title":" ","firstLineText":"Pickup","icon":"Storefront","secondLineText":"Options"},{"firstLineText":"Free","secondLineText":"Shipping","title":" ","icon":"Truck"}],"footerLinks":[{"items":[{"text":"About Us","url":"/"},{"text":"Our Blog","url":"/"},{"text":"Stores","url":"https://starter.vtex.app"},{"text":"Work With Us","url":"https://starter.vtex.app"}],"sectionTitle":"Our company"},{"items":[{"text":"Returns and Exchanges","url":"/"},{"text":"Product Recall","url":"/"},{"text":"Gift Cards","url":"/"}],"sectionTitle":"Orders and Purchases"},{"items":[{"text":"Support Center","url":"/"},{"text":"Support \u0026 Services","url":"/"},{"text":"Contact Us","url":"/"}],"sectionTitle":"Support \u0026 Services"},{"items":[{"text":"Affiliate Program","url":"/"},{"text":"Marketplace","url":"/"}],"sectionTitle":"Partnerships"}],"footerSocial":{"title":"Follow Us","socialLinks":[{"icon":{"icon":"Facebook"},"alt":"Facebook","url":"https://www.facebook.com"},{"icon":{"icon":"Instagram"},"alt":"Instagram","url":"https://www.instagram.com"},{"icon":{"icon":"Pinterest"},"alt":"Pinterest","url":"https://www.pinterest.com"},{"icon":{"icon":"Twitter"},"alt":"Twitter","url":"https://www.twitter.com"}]},"logo":{"link":{"url":"https://starter.vtex.app/","title":"FastStore Starter"},"src":"https://storeframework.vtexassets.com/assets/vtex.file-manager-graphql/images/ec191c4a-32d8-41a9-9255-f319819bc98c___c24a66e2bef2c3f2bea07571a3636804.png","alt":"Store Logo"},"acceptedPaymentMethods":{"showPaymentMethods":true,"title":"Payment Methods","paymentMethods":[{"icon":{"icon":"Diners"},"alt":"Diners Club"},{"icon":{"icon":"Visa"},"alt":"Visa"},{"icon":{"icon":"Mastercard"},"alt":"Mastercard"},{"icon":{"icon":"EloCard"},"alt":"Elo Card"},{"icon":{"icon":"PayPal"},"alt":"PayPal"},{"icon":{"icon":"GooglePay"},"alt":"GooglePay"},{"icon":{"icon":"ApplePay"},"alt":"Apple Pay"}]},"copyrightInfo":"This website uses VTEX technology. In-store price may vary. Prices and offers are subject to change. 2023 Brandless Store. All rights reserved. Store is a trademark of Store and its affiliated companies. Mount St, 000, New York / NY - 00000."}},{"id":"1778083148729","name":"Search","data":{"searchInput":{"placeholder":"Search everything in the store","icon":{"icon":"MagnifyingGlass","alt":"Magnifying glass"}},"searchHistory":{"title":"History","clearButtonLabel":"Clear history","icon":{"icon":"ClockClockwise","alt":"History"},"maxItems":5},"searchTop":{"title":"Top search","maxItems":5},"searchAutocomplete":{"icon":{"alt":"Magnifying glass"},"maxItems":5},"searchProducts":{"title":"Suggested products","maxItems":5}}},{"id":"1778083171641","name":"RegionPopover","data":{"title":"Set your location","closeButtonAriaLabel":"Close Region Popover","inputField":{},"textBeforeLocation":"Your current location is","textAfterLocation":"Use the field below to change it.","description":"Offers and availability vary by location","idkPostalCodeLink":{"icon":{}}}}],"settings":{"regionalization":{"inputField":{"label":"Postal Code","errorMessage":"You entered an invalid Postal Code","noProductsAvailableErrorMessage":"There are no products available for %s.","buttonActionText":"Apply","errorMessageHelper":"Try using a different postal code.","loadingLabel":"..."},"idkPostalCodeLink":{"text":"I don't know my Postal Code","icon":{"icon":"ArrowSquareOut","alt":"Arrow Square Out icon"}}},"deliveryPromise":{"deliveryMethods":{"title":"Delivery Methods","description":"Offers and availability vary by location.","setLocationButtonLabel":"Set Location","allDeliveryMethods":"All delivery methods","delivery":"Shipping to","pickupInPoint":"Pickup at","pickupNearby":"Pickup Nearby","pickupAll":{"enabled":false,"label":"Pickup Anywhere"}},"regionSlider":{"title":{"setLocation":"Set Location","changeLocation":"Change Location","changePickupPoint":"Change Store","globalChangePickupPoint":"Change Store"},"pickupPointChangeApplyButtonLabel":"Update","pickupPointClearFilterButtonLabel":"Clear filter","choosePickupPointAriaLabel":"Choose a store","noPickupPointsAvailableInLocation":"No stores near location."},"filterByPickupPoint":{"enabled":true,"label":"Filter by Store","icon":{"icon":"Storefront","alt":"Storefront icon"}},"deliveryOptions":{"enabled":true,"title":"Delivery Option","allDeliveryOptions":"All delivery options"},"deliveryPromiseBadges":{"enabled":true,"delivery":"Available for shipping","deliveryUnavailable":"Unavailable for shipping","pickupInPoint":"Available for pickup","pickupInPointUnavailable":"Unavailable for pickup"},"inStock":{"enabled":false,"title":"Availability","label":"In-stock only"}},"filters":{"filterFacetRange":{"minLabel":"Min","maxLabel":"Max","minPriceErrorMessage":"Min price can't be greater than max","maxPriceErrorMessage":"Max price can't be smaller than min"}},"loading":{"label":"Loading..."}}},"serverData":null},"__N_SSG":true},"page":"/","query":{},"buildId":"0OKcQtIHO8diwBsczup15","isFallback":false,"gsp":true,"locale":"en-US","locales":["en-US"],"defaultLocale":"en-US","scriptLoader":[]}</script></body></html>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"/_app":"pages/_app.js","/_error":"pages/_error.js","/_document":"pages/_document.js","/api/fs/
|
|
1
|
+
{"/_app":"pages/_app.js","/_error":"pages/_error.js","/_document":"pages/_document.js","/api/fs/logout":"pages/api/fs/logout.js","/api/fs/password-protection/unlock":"pages/api/fs/password-protection/unlock.js","/api/graphql":"pages/api/graphql.js","/api/health/live":"pages/api/health/live.js","/api/health/ready":"pages/api/health/ready.js","/api/preview":"pages/api/preview.js","/404":"pages/404.js","/500":"pages/500.js","/[...slug]":"pages/[...slug].js","/checkout":"pages/checkout.js","/login":"pages/login.js","/":"pages/index.js","/pvt/account/403":"pages/pvt/account/403.js","/pvt/account/[...unknown]":"pages/pvt/account/[...unknown].js","/pvt/account":"pages/pvt/account.js","/pvt/account/404":"pages/pvt/account/404.js","/pvt/account/profile":"pages/pvt/account/profile.js","/pvt/account/security":"pages/pvt/account/security.js","/pvt/account/user-details":"pages/pvt/account/user-details.js","/pvt/account/orders":"pages/pvt/account/orders.js","/[slug]/p":"pages/[slug]/p.js","/pvt/account/orders/[id]":"pages/pvt/account/orders/[id].js","/s":"pages/s.js","/en-US/password-protection":"pages/en-US/password-protection.html"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// runtime can't be in strict mode because a global variable is assign and maybe created.
|
|
2
2
|
(self["webpackChunk_N_E"] = self["webpackChunk_N_E"] || []).push([[727],{
|
|
3
3
|
|
|
4
|
-
/***/
|
|
4
|
+
/***/ 665:
|
|
5
5
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
6
6
|
|
|
7
7
|
"use strict";
|
|
@@ -4290,8 +4290,8 @@ function renewUrl() {
|
|
|
4290
4290
|
defaultMs: 10000
|
|
4291
4291
|
};
|
|
4292
4292
|
|
|
4293
|
-
;// CONCATENATED MODULE: ./src/server/
|
|
4294
|
-
function
|
|
4293
|
+
;// CONCATENATED MODULE: ./src/server/password-protection-service.ts
|
|
4294
|
+
function password_protection_service_defineProperty(obj, key, value) {
|
|
4295
4295
|
if (key in obj) {
|
|
4296
4296
|
Object.defineProperty(obj, key, {
|
|
4297
4297
|
value: value,
|
|
@@ -4308,7 +4308,7 @@ function authentication_service_defineProperty(obj, key, value) {
|
|
|
4308
4308
|
|
|
4309
4309
|
|
|
4310
4310
|
|
|
4311
|
-
const COOKIE_NAME = "
|
|
4311
|
+
const COOKIE_NAME = "__fs_password_protection";
|
|
4312
4312
|
const TOKEN_TTL_SECONDS = 10 * 60;
|
|
4313
4313
|
/** How long to reuse the RSA public key fetched from WebOps */ const PUBLIC_KEY_CACHE_MS = 60 * 60 * 1000;
|
|
4314
4314
|
let publicKeyCache = null;
|
|
@@ -4343,16 +4343,16 @@ async function getPublicVerificationKey() {
|
|
|
4343
4343
|
/** Clears the cached WebOps public key (for unit tests only). */ function resetPasswordProtectionPublicKeyCacheForTests() {
|
|
4344
4344
|
publicKeyCache = null;
|
|
4345
4345
|
}
|
|
4346
|
-
class
|
|
4346
|
+
class PasswordProtectionService {
|
|
4347
4347
|
constructor(){
|
|
4348
|
-
|
|
4348
|
+
password_protection_service_defineProperty(this, "storeId", void 0);
|
|
4349
4349
|
this.storeId = (discovery_config_default()).api.storeId;
|
|
4350
4350
|
}
|
|
4351
4351
|
getNormalizedHost(request) {
|
|
4352
4352
|
const host = request.headers.get("host") || "";
|
|
4353
4353
|
return host.split(":")[0].toLowerCase();
|
|
4354
4354
|
}
|
|
4355
|
-
async
|
|
4355
|
+
async checkStoreProtection(request) {
|
|
4356
4356
|
if (!this.shouldCheckProtection(request)) {
|
|
4357
4357
|
return {
|
|
4358
4358
|
response: NextResponse.next()
|
|
@@ -4370,7 +4370,7 @@ class AuthenticationService {
|
|
|
4370
4370
|
return await this.tryRenewSession(request, token, verification.payload);
|
|
4371
4371
|
}
|
|
4372
4372
|
}
|
|
4373
|
-
return await this.
|
|
4373
|
+
return await this.handleProtectionCheck(request);
|
|
4374
4374
|
}
|
|
4375
4375
|
shouldCheckProtection(request) {
|
|
4376
4376
|
if (false) {}
|
|
@@ -4446,7 +4446,7 @@ class AuthenticationService {
|
|
|
4446
4446
|
const data = await res.json();
|
|
4447
4447
|
if (data.valid && data.token) {
|
|
4448
4448
|
const response = NextResponse.next();
|
|
4449
|
-
this.
|
|
4449
|
+
this.setProtectionCookie(response, data.token);
|
|
4450
4450
|
return {
|
|
4451
4451
|
response
|
|
4452
4452
|
};
|
|
@@ -4459,24 +4459,24 @@ class AuthenticationService {
|
|
|
4459
4459
|
};
|
|
4460
4460
|
}
|
|
4461
4461
|
return {
|
|
4462
|
-
response: this.
|
|
4462
|
+
response: this.redirectToUnlockPage(request)
|
|
4463
4463
|
};
|
|
4464
4464
|
}
|
|
4465
|
-
async
|
|
4465
|
+
async handleProtectionCheck(request) {
|
|
4466
4466
|
try {
|
|
4467
4467
|
const res = await fetch(protectionStatusUrl(), {
|
|
4468
4468
|
signal: AbortSignal.timeout(passwordProtectionTimeouts.defaultMs)
|
|
4469
4469
|
});
|
|
4470
4470
|
if (!res.ok) {
|
|
4471
4471
|
return {
|
|
4472
|
-
response: this.
|
|
4472
|
+
response: this.redirectToUnlockPage(request)
|
|
4473
4473
|
};
|
|
4474
4474
|
}
|
|
4475
4475
|
const status = await res.json();
|
|
4476
4476
|
if (!status.protected) {
|
|
4477
4477
|
const response = NextResponse.next();
|
|
4478
4478
|
if (status.token) {
|
|
4479
|
-
this.
|
|
4479
|
+
this.setProtectionCookie(response, status.token);
|
|
4480
4480
|
}
|
|
4481
4481
|
return {
|
|
4482
4482
|
response
|
|
@@ -4488,15 +4488,15 @@ class AuthenticationService {
|
|
|
4488
4488
|
};
|
|
4489
4489
|
}
|
|
4490
4490
|
return {
|
|
4491
|
-
response: this.
|
|
4491
|
+
response: this.redirectToUnlockPage(request)
|
|
4492
4492
|
};
|
|
4493
4493
|
} catch {
|
|
4494
4494
|
return {
|
|
4495
|
-
response: this.
|
|
4495
|
+
response: this.redirectToUnlockPage(request)
|
|
4496
4496
|
};
|
|
4497
4497
|
}
|
|
4498
4498
|
}
|
|
4499
|
-
|
|
4499
|
+
setProtectionCookie(response, token) {
|
|
4500
4500
|
response.cookies.set(COOKIE_NAME, token, {
|
|
4501
4501
|
httpOnly: true,
|
|
4502
4502
|
secure: true,
|
|
@@ -4505,11 +4505,11 @@ class AuthenticationService {
|
|
|
4505
4505
|
maxAge: TOKEN_TTL_SECONDS
|
|
4506
4506
|
});
|
|
4507
4507
|
}
|
|
4508
|
-
|
|
4509
|
-
const
|
|
4508
|
+
redirectToUnlockPage(request) {
|
|
4509
|
+
const unlockUrl = new URL("/password-protection", request.url);
|
|
4510
4510
|
const returnTo = `${request.nextUrl.pathname}${request.nextUrl.search}`;
|
|
4511
|
-
|
|
4512
|
-
const response = NextResponse.redirect(
|
|
4511
|
+
unlockUrl.searchParams.set("returnTo", returnTo);
|
|
4512
|
+
const response = NextResponse.redirect(unlockUrl);
|
|
4513
4513
|
response.headers.set("Cache-Control", "no-store");
|
|
4514
4514
|
return response;
|
|
4515
4515
|
}
|
|
@@ -4518,7 +4518,7 @@ class AuthenticationService {
|
|
|
4518
4518
|
;// CONCATENATED MODULE: ./src/middleware.ts
|
|
4519
4519
|
/*
|
|
4520
4520
|
* Middleware is always active. It runs:
|
|
4521
|
-
* 1. Password protection (
|
|
4521
|
+
* 1. Password protection (PasswordProtectionService) — when applicable (default/custom domains per env).
|
|
4522
4522
|
* 2. Redirects — only when ENABLE_REDIRECTS_MIDDLEWARE is set at runtime.
|
|
4523
4523
|
*/
|
|
4524
4524
|
|
|
@@ -4532,15 +4532,15 @@ class DynamoRedirectsClient {
|
|
|
4532
4532
|
const redirectsClient = new DynamoRedirectsClient();
|
|
4533
4533
|
async function middleware(request) {
|
|
4534
4534
|
const path = request.nextUrl.pathname;
|
|
4535
|
-
let
|
|
4535
|
+
let storeProtectionResult;
|
|
4536
4536
|
try {
|
|
4537
|
-
const
|
|
4538
|
-
|
|
4537
|
+
const protectionService = new PasswordProtectionService();
|
|
4538
|
+
storeProtectionResult = await protectionService.checkStoreProtection(request);
|
|
4539
4539
|
} catch {
|
|
4540
4540
|
return NextResponse.error();
|
|
4541
4541
|
}
|
|
4542
|
-
if (
|
|
4543
|
-
return
|
|
4542
|
+
if (storeProtectionResult.response.status !== 200) {
|
|
4543
|
+
return storeProtectionResult.response;
|
|
4544
4544
|
}
|
|
4545
4545
|
if (process.env.ENABLE_REDIRECTS_MIDDLEWARE === "true") {
|
|
4546
4546
|
const redirect = await redirectsClient.get(path);
|
|
@@ -4548,31 +4548,31 @@ async function middleware(request) {
|
|
|
4548
4548
|
const redirectUrl = new URL(redirect.to, (discovery_config_default()).storeUrl);
|
|
4549
4549
|
const redirectStatusCode = redirect.type === "permanent" ? 301 : 302;
|
|
4550
4550
|
const response = NextResponse.redirect(redirectUrl, redirectStatusCode);
|
|
4551
|
-
for (const cookie of
|
|
4551
|
+
for (const cookie of storeProtectionResult.response.cookies.getAll()){
|
|
4552
4552
|
response.cookies.set(cookie);
|
|
4553
4553
|
}
|
|
4554
4554
|
response.headers.set("Cache-Control", "public, max-age=300, stale-while-revalidate=31536000");
|
|
4555
4555
|
return response;
|
|
4556
4556
|
}
|
|
4557
4557
|
}
|
|
4558
|
-
return
|
|
4558
|
+
return storeProtectionResult.response;
|
|
4559
4559
|
}
|
|
4560
4560
|
const config = {
|
|
4561
4561
|
matcher: [
|
|
4562
4562
|
/*
|
|
4563
4563
|
* Match all paths including `/`
|
|
4564
4564
|
* Exclude:
|
|
4565
|
-
* - api (e.g. api/fs/
|
|
4565
|
+
* - api (e.g. api/fs/password-protection/unlock)
|
|
4566
4566
|
* - _next/static, _next/image
|
|
4567
4567
|
* - favicon.ico
|
|
4568
|
-
* -
|
|
4568
|
+
* - password-protection (unlock page)
|
|
4569
4569
|
* - ~partytown (partytown scripts)
|
|
4570
4570
|
*/ "/",
|
|
4571
|
-
"/((?!api|_next/static|_next/image|favicon.ico|
|
|
4571
|
+
"/((?!api|_next/static|_next/image|favicon.ico|password-protection|~partytown).*)"
|
|
4572
4572
|
]
|
|
4573
4573
|
};
|
|
4574
4574
|
|
|
4575
|
-
;// CONCATENATED MODULE: ../../node_modules/.pnpm/next@13.5.11_@babel+core@7.26.7_@opentelemetry+api@1.4.1_react-dom@18.3.1_react@18.3.1__react@18.3.1_sass@1.83.4/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fsrc%2Fmiddleware.ts&page=%2Fsrc%2Fmiddleware&rootDir=%2Fhome%2Frunner%2Fwork%2Ffaststore%2Ffaststore%2Fpackages%2Fcore&matchers=W3sicmVnZXhwIjoiXig%2FOlxcLyhfbmV4dFxcL2RhdGFcXC9bXi9dezEsfSkpPyg%2FOlxcLygoPyFfbmV4dFxcLylbXi8uXXsxLH0pKSh8XFwuanNvbnxcXC8%2FaW5kZXh8XFwvP2luZGV4XFwuanNvbik%
|
|
4575
|
+
;// CONCATENATED MODULE: ../../node_modules/.pnpm/next@13.5.11_@babel+core@7.26.7_@opentelemetry+api@1.4.1_react-dom@18.3.1_react@18.3.1__react@18.3.1_sass@1.83.4/node_modules/next/dist/build/webpack/loaders/next-middleware-loader.js?absolutePagePath=private-next-root-dir%2Fsrc%2Fmiddleware.ts&page=%2Fsrc%2Fmiddleware&rootDir=%2Fhome%2Frunner%2Fwork%2Ffaststore%2Ffaststore%2Fpackages%2Fcore&matchers=W3sicmVnZXhwIjoiXig%2FOlxcLyhfbmV4dFxcL2RhdGFcXC9bXi9dezEsfSkpPyg%2FOlxcLygoPyFfbmV4dFxcLylbXi8uXXsxLH0pKSh8XFwuanNvbnxcXC8%2FaW5kZXh8XFwvP2luZGV4XFwuanNvbik%2FW1xcLyNcXD9dPyQiLCJvcmlnaW5hbFNvdXJjZSI6Ii8ifSx7InJlZ2V4cCI6Il4oPzpcXC8oX25leHRcXC9kYXRhXFwvW14vXXsxLH0pKT8oPzpcXC8oKD8hX25leHRcXC8pW14vLl17MSx9KSkoPzpcXC8oKD8hYXBpfF9uZXh0XFwvc3RhdGljfF9uZXh0XFwvaW1hZ2V8ZmF2aWNvbi5pY298cGFzc3dvcmQtcHJvdGVjdGlvbnx%2BcGFydHl0b3duKS4qKSkoLmpzb24pP1tcXC8jXFw%2FXT8kIiwib3JpZ2luYWxTb3VyY2UiOiIvKCg%2FIWFwaXxfbmV4dC9zdGF0aWN8X25leHQvaW1hZ2V8ZmF2aWNvbi5pY298cGFzc3dvcmQtcHJvdGVjdGlvbnx%2BcGFydHl0b3duKS4qKSJ9XQ%3D%3D&preferredRegion=&middlewareConfig=eyJtYXRjaGVycyI6W3sicmVnZXhwIjoiXig%2FOlxcLyhfbmV4dFxcL2RhdGFcXC9bXi9dezEsfSkpPyg%2FOlxcLygoPyFfbmV4dFxcLylbXi8uXXsxLH0pKSh8XFwuanNvbnxcXC8%2FaW5kZXh8XFwvP2luZGV4XFwuanNvbik%2FW1xcLyNcXD9dPyQiLCJvcmlnaW5hbFNvdXJjZSI6Ii8ifSx7InJlZ2V4cCI6Il4oPzpcXC8oX25leHRcXC9kYXRhXFwvW14vXXsxLH0pKT8oPzpcXC8oKD8hX25leHRcXC8pW14vLl17MSx9KSkoPzpcXC8oKD8hYXBpfF9uZXh0XFwvc3RhdGljfF9uZXh0XFwvaW1hZ2V8ZmF2aWNvbi5pY298cGFzc3dvcmQtcHJvdGVjdGlvbnx%2BcGFydHl0b3duKS4qKSkoLmpzb24pP1tcXC8jXFw%2FXT8kIiwib3JpZ2luYWxTb3VyY2UiOiIvKCg%2FIWFwaXxfbmV4dC9zdGF0aWN8X25leHQvaW1hZ2V8ZmF2aWNvbi5pY298cGFzc3dvcmQtcHJvdGVjdGlvbnx%2BcGFydHl0b3duKS4qKSJ9XX0%3D!
|
|
4576
4576
|
|
|
4577
4577
|
|
|
4578
4578
|
// Import the userland code.
|
|
@@ -5410,7 +5410,7 @@ module.exports = {};
|
|
|
5410
5410
|
},
|
|
5411
5411
|
/******/ __webpack_require__ => { // webpackRuntimeModules
|
|
5412
5412
|
/******/ var __webpack_exec__ = (moduleId) => (__webpack_require__(__webpack_require__.s = moduleId))
|
|
5413
|
-
/******/ var __webpack_exports__ = (__webpack_exec__(
|
|
5413
|
+
/******/ var __webpack_exports__ = (__webpack_exec__(665));
|
|
5414
5414
|
/******/ (_ENTRIES = typeof _ENTRIES === "undefined" ? {} : _ENTRIES)["middleware_src/middleware"] = __webpack_exports__;
|
|
5415
5415
|
/******/ }
|
|
5416
5416
|
]);
|