Åland Islands (EUR€)
{"@context":"http:\/\/schema.org\/","@id":"\/products\/enve-carbon-road-hub#product","@type":"ProductGroup","brand":{"@type":"Brand","name":"Enve"},"category":"Bicycle Hubs","description":"Product details\n\nENVE's Carbon Road Hub blends a one-of-a-kind full carbon hub shell with a proprietary freehub to eliminate bearing play and maximise stiffness, drive response and reliability – making it the highest-performance road hub in the world.\nThe original ENVE Carbon Road Hub won a Eurobike Design and Innovation award and this second generation improves upon its predecessor in every department while weighing in at just 70g front and 185g rear.\nMade entirely in ENVE's Ogden, Utah, headquarters from moulded uni-directional carbon fibre, the hub shell geometry has been optimised to enhance the performance of the brand's SES aero wheelsets – or any other rim you'd care to use.\nFlange spacing and diameter have been increased to improve lateral stiffness by 16%. The paired, moulded – rather than drilled – spoke holes in the hub flange reduce weight and allow improved bracing angles that improve drive stiffness, efficiency and ride feel, inspiring confidence when accelerating or cornering.\nThe hub's axles have also been completely redesigned to utilise ENVE's pioneering Perfect Preload system. By positioning a calibrated wave washer between the bearing and a snap ring installed on the axle, bearing pre-load is consistently optimised. This eliminates bearing play and the need to adjust pre-load yourself, reducing premature wear.\nAlso increasing reliability are the custom, premium stainless steel bearings and races. These long-life components are enhanced by full-contact bearing seals on outboard bearing faces and non-contact seals on internal faces to improve rolling efficiency. All this means the hubs roll with utter smoothness from day one and maintain their performance for thousands of miles without the need for servicing, making the ENVE Carbon Road Hub virtually maintenance free.\nThe proprietary freehub body is machined from strong 7075 alloy and anodised to reduce cog bite. ENVE has improved on the previous generation's 18-tooth driver with a new mechanism utilising a 40-tooth ratchet design with a single spring that gives exceptional drive response under power. ENVE has also included a rubber gasket that changes the tone of the freehub when freewheeling.\nThe freehub body can also be swapped from Shimano to Campagnolo or SRAM XD-R versions without the need for tools or re-dishing the wheel.\nTechnical Specification\n\n\n\nFront\nRear\n\n\nMaterial\ncarbon\ncarbon\n\n\nWeight\n70g\n185g\n\n\nHole count\n20\n24\n\n\nSpoke type\nJ-bend\nJ-bend\n\n\nLacing pattern\nradial\n2x\/2x or 2x\/1x\n\n\nFlange diameter\n34.5mm\n55mm\n\n\nCenter to flange\n39.5mm\nL-37mm, R-19mm\n\n\nEnd caps\nStainless\nAlloy\n\n\nAxle\nQR 100mm\nQR 130mm\n\n\nInternal axle diameter\n10mm\n17mm\n\n\nFreehub\nN\/A\nShimano\/SRAM HG, XDR, Campagnolo\n\n\n\n\nFull carbon hub shell made in-house by ENVE\nLightweight, smooth, stiff and durable design\nPerfect Preload™ system for no bearing play\nPrecision-machined anodised freehub body\nPremium-grade stainless steel bearings and races\nMolded spoke holes to increase strength and reduce weight\nShimano\/SRAM HG, XDR, Campagnolo compatible\n40 Tooth, 9° engagement drive ratchet for improved power transmission\nRemovable gasket to change freewheel sound\nTool-free freehub body conversions\nVirtually maintenance-free\n\n\n\n\nTechnical Specifications\n\n\n\nFront\nRear\n\n\nMaterial\ncarbon\ncarbon\n\n\nWeight\n70g\n185g\n\n\nHole count\n20\n24\n\n\nSpoke type\nJ-bend\nJ-bend\n\n\nLacing pattern\nradial\n2x\/2x or 2x\/1x\n\n\nFlange diameter\n34.5mm\n55mm\n\n\nCenter to flange\n39.5mm\nL-37mm, R-19mm\n\n\nEnd caps\nStainless\nAlloy\n\n\nAxle\nQR 100mm\nQR 130mm\n\n\nInternal axle diameter\n10mm\n17mm\n\n\nFreehub\nN\/A\nShimano\/SRAM HG, XDR, Campagnolo\n\n\n\n","hasVariant":[{"@id":"\/products\/enve-carbon-road-hub?variant=55177564586367#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/enve-carbonroadhub-rear_se5nxp_large_6be1a56c-6dae-4cb2-b198-d20e31420992.webp?v=1741441590\u0026width=1920","name":"ENVE Carbon Road Hub - Rear 12x142mm 24H Shimano","offers":{"@id":"\/products\/enve-carbon-road-hub?variant=55177564586367#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"690.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/enve-carbon-road-hub?variant=55177564586367"},"sku":"EN21004001345"},{"@id":"\/products\/enve-carbon-road-hub?variant=55177564619135#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/enve-carbonroadhub-rear_se5nxp_large_6be1a56c-6dae-4cb2-b198-d20e31420992.webp?v=1741441590\u0026width=1920","name":"ENVE Carbon Road Hub - Front 12x100mm 20H","offers":{"@id":"\/products\/enve-carbon-road-hub?variant=55177564619135#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"690.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/enve-carbon-road-hub?variant=55177564619135"},"sku":"EN21004001349"},{"@id":"\/products\/enve-carbon-road-hub?variant=55177564651903#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/enve-carbonroadhub-rear_se5nxp_large_6be1a56c-6dae-4cb2-b198-d20e31420992.webp?v=1741441590\u0026width=1920","name":"ENVE Carbon Road Hub - Rear 12x142mm 24H Campagnolo","offers":{"@id":"\/products\/enve-carbon-road-hub?variant=55177564651903#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"690.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/enve-carbon-road-hub?variant=55177564651903"},"sku":"EN21004001350"}],"name":"ENVE Carbon Road Hub","productGroupID":"14972484190591","url":"https:\/\/projektride.co.uk\/products\/enve-carbon-road-hub"}
#Accordions--template--26482384994687__section_accordions_with_images_kprcYa {
--PT: 60px;
--PB: 60px;
--border-opacity: 0;
--border-width: 1px;
--MB: 10px;
--padding-left: 0;
--bg-padded-line: var(--bg);
}
#Accordions--template--26482384994687__section_accordions_with_images_kprcYa .section__heading { --heading-size: calc(var(--adjust-heading) * 1.2); }
#Accordions--template--26482384994687__section_accordions_with_images_kprcYa .accordion__item { --bg-item: #fafafa; }
Albania (ALLL)
Svalbard & Jan Mayen (GBP£)
Servicing
Tanzania (TZSSh)
Workshop Prices
Sweden (SEKkr)
[]
Togo (XOFFr)
Cycle to Work
Switzerland (CHFCHF)
{"@context":"http:\/\/schema.org\/","@id":"\/products\/bombtrack-beyond-al-complete-bike#product","@type":"ProductGroup","brand":{"@type":"Brand","name":"Bombtrack"},"category":"Bicycles","description":" The Beyond AL is our aluminium equivalent from the range. The heavily hydro-formed tube profile and fork come with internal light cable routing, complete with fender, rack and triple cage mounts for overnight trips. The Beyond AL is front derailleur compatible for those preferring a more comprehensive range of gearing options up the front. All sizes come with 12mm through-axles on the front and rear, besides size-matched 27.5” wheels on the size S option to ensure efficient geometry across the range.\n\n\n\n\n\n\n\n\n\nFrame\n6061-T6 hydro-formed Aluminium, TA, rack \/ fender mounts, stealth dropper ready, 86.5 mm T47 BB shell\n\n\nFork\n6061 aluminium, TA, 1.1\/2'' - 1.1\/8'', fender \/ rack \/ triple cage mounts, internal hub dynamo cable routing\n\n\nHandlebar\nBOMBTRACK TACKLE gravel bar, 31.8 mm, 25° flare\n\n\nGrips\nBOMBTRACK COMMAND bar tape\n\n\nStem\nBOMBTRACK TRAMP forged aluminium stem, 3°\n\n\nHeadset\nSealed integrated aheadset, 1.1\/2'' - 1.1\/8''\n\n\nLevers\nSRAM Apex double tap mechanic\n\n\nShifter\nSRAM Apex double tap 1 x 11\n\n\nBrakes\nTRP SPYRE C mechanic disc brakes with 180 mm F \/ 160 mm R rotors\n\n\nCrankset\nBOMBTRACK AMES forged aluminium crank, 24 mm spindle\n\n\nBB\nBOMBTRACK T47 internal sealed BB for 24 mm spindle\n\n\nPedals\n-\n\n\nChain\nKMC X11 chain, 1\/2'' x 11\/128'', 114L\n\n\nChainring\nSteel, narrow-wide, 36 T\n\n\nCassette\nSRAM PG-1130 11-speed, 11 - 42 T\n\n\nFront derailleur\n-\n\n\nRear derailleur\nSRAM APEX 1, clutch, long cage\n\n\nFront hub\nBOMBTRACK ARC sealed hub, 6-bolt disc\n\n\nRear hub\nBOMBTRACK ARC sealed hub, 11-speed, 6-bolt disc\n\n\nThrough axle\n12 x 100 mm \/ 12 x 142 mm\n\n\nFront rim\nWTB ST i23 double wall, TCS 2.0, 32h\n\n\nRear rim\nWTB ST i23 double wall, TCS 2.0, 32h\n\n\nSaddle\nBOMBTRACK FUZZ\n\n\nSeat post\nSEIDO YEW aluminium seatpost, 31.8 mm x 400 mm\n\n\nSeat clamp\nBOMBTRACK PRIME 34.9 mm\n\n\nFront tyre\nWTB RANGER TCS LIGHT \/ FAST ROLLING S 27.5'' x 2.0'' \/ M - L 29'' x 2.0'', tubeless ready\n\n\nRear tyre\nWTB RANGER TCS LIGHT \/ FAST ROLLING S 27.5'' x 2.0'' \/ M - L 29'' x 2.0'', tubeless ready\n\n\nFender\n-\n\n\nRack\n-\n\n\nKickstand\n-\n\n\nLight\n-\n\n\nWeight\n11.64 kg (size M)\n\n\nWeight frameset\nTBA g frame (size M, incl. TA, bolts, seatclamp, hanger) \/ TBA g fork (300 mm steerer, incl. TA)\n\n\nMaximum rider weight\n140 kg incl. luggage\n\n\nASTM riding condition\n2\n\n\n\n\n\n\n\n\n","hasVariant":[{"@id":"\/products\/bombtrack-beyond-al-complete-bike?variant=45661830578402#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/BT_MY22_Beyond_AL_glossy_dark_grey_web_01_800x800_crop_center_2x_677620e1-b329-4506-8577-6dc020b26e38.webp?v=1720089125\u0026width=1920","name":"BOMBTRACK BEYOND AL Complete Bike - Medium - 46","offers":{"@id":"\/products\/bombtrack-beyond-al-complete-bike?variant=45661830578402#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2500.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/bombtrack-beyond-al-complete-bike?variant=45661830578402"}},{"@id":"\/products\/bombtrack-beyond-al-complete-bike?variant=45661830611170#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/BT_MY22_Beyond_AL_glossy_dark_grey_web_01_800x800_crop_center_2x_677620e1-b329-4506-8577-6dc020b26e38.webp?v=1720089125\u0026width=1920","name":"BOMBTRACK BEYOND AL Complete Bike - Large - 51","offers":{"@id":"\/products\/bombtrack-beyond-al-complete-bike?variant=45661830611170#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2750.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/bombtrack-beyond-al-complete-bike?variant=45661830611170"}},{"@id":"\/products\/bombtrack-beyond-al-complete-bike?variant=45661830643938#variant","@type":"Product","image":"https:\/\/projektride.co.uk\/cdn\/shop\/files\/BT_MY22_Beyond_AL_glossy_dark_grey_web_01_800x800_crop_center_2x_677620e1-b329-4506-8577-6dc020b26e38.webp?v=1720089125\u0026width=1920","name":"BOMBTRACK BEYOND AL Complete Bike - Extra Large - 56","offers":{"@id":"\/products\/bombtrack-beyond-al-complete-bike?variant=45661830643938#offer","@type":"Offer","availability":"http:\/\/schema.org\/OutOfStock","price":"2500.00","priceCurrency":"GBP","url":"https:\/\/projektride.co.uk\/products\/bombtrack-beyond-al-complete-bike?variant=45661830643938"}}],"name":"BOMBTRACK BEYOND AL Complete Bike","productGroupID":"8627787366626","url":"https:\/\/projektride.co.uk\/products\/bombtrack-beyond-al-complete-bike"}
Delivery & ReturnsTristan da Cunha (GBP£)
|
| #relatedProducts--template--26482385912191__related {
--PT: 60px;
--PB: 60px;
}
#relatedProducts--template--26482385912191__related .tabs__nav { --text-size: calc(var(--adjust-accent) * 1.2); }
@media screen and (max-width: 767px) {
#relatedProducts--template--26482385912191__related .grid--mobile,
#relatedProducts--template--26482385912191__related .carousel--mobile {
grid-template-columns: repeat(1, minmax(0, 1fr));
}
}
Tanzania (TZSSh)
Information
Mon - Fri: 09:00 - 18:30Tunisia (GBP£)
|
Sat: 9:00 - 16:00
Sun: Closed
This section doesn’t currently include any content. Add content to this section using the sidebar.
Togo (XOFFr)
0131 374 5324
|
Newington RoadTürkiye (GBP£)
|
Edinburgh
EH9 1QN
| Tristan da Cunha (GBP£)
[email protected]
Uganda (UGXUSh)
|
|
Tunisia (GBP£)
Frequently Asked Questions
Ukraine (UAH₴)
await import("//projektride.co.uk/cdn/shopifycloud/shop-js/modules/v2/loader.shop-follow-button.en.esm.js");
Türkiye (GBP£)
United Kingdom (GBP£)
I'm looking to find out more information about a product, where can I find this?
|
Uganda (UGXUSh)
Country
Please get in touch with a member of the team either by phone (
United States (GBP£)
01313745324
) or email (
GBP£
[email protected]Ukraine (UAH₴)
) where on of the team will be more than happy to help.
Vatican City (EUR€)
ProjektRide Bike Shop Edinburgh
Åland Islands (EUR€)
|
United Kingdom (GBP£)
Western Sahara (MADد.م.)
I'm looking to buy this product, when will it arrive and how much does postage cost?
|
Albania (ALLL)
|
United States (GBP£)
If the item is showing in stock, we aim to post the product within 24 hours. Please allow 5 working days to receive the item.
Zambia (GBP£)
| Postage is free on orders over £50. Orders under £50, our postage charge is £3.99.
We also have a physical store, if you are local please pop in -
Algeria (DZDد.ج)
ProjektRide Bike Shop EdinburghVatican City (EUR€)
| 82 Newington Road, EH91QN, Edinburgh.
Zimbabwe (USD$)
|
Andorra (EUR€)
|
Western Sahara (MADد.م.)
|
Angola (GBP£)
|
Zambia (GBP£)
#SiteFooter {
--PT: 100px;
--PB: 10px;
--bg-lighten-darken-shimmer-bg: #0d0d0d;
--bg-lighten-darken-shimmer-effect: #121212;
--text: #ffffff;
--text-alpha-15: rgba(255, 255, 255, 0.15);
--text-alpha-50: rgba(255, 255, 255, 0.6);
--text-alpha-85: rgba(255, 255, 255, 0.85);--border: #ffffff;}
#SiteFooter .footer-bottom { --grid-columns: 3; }
|
Armenia (AMDդր.)
© 2026, #SiteFooter .footer-block--logo { min-width: calc(160px + calc(var(--gutter) / 2)); }
#SiteFooter .footer-block__logo-image { width: 160px; }Zimbabwe (USD$)
ProjektRide|
. |
Ascension Island (SHP£)
Powered by | Buy, sell and ride in confidence on ProjektRide’s premium bikes
Shopify
.Quick Links
|
Austria (EUR€)
|
American Express | About Us© 2026,
ProjektRideBelarus (GBP£)
.
Apple Pay
Contact Us
Powered by
ShopifyBelgium (EUR€)
Diners Club
Blog.
Discover
Track Service Progress
Benin (XOFFr)
Google Pay
American Express
Building Your Bike From the Box
Klarna
Apple PayBosnia & Herzegovina (BAMКМ)
Maestro
Insure Your Bike
Diners Club
Mastercard
Botswana (BWPP)
| Privacy PolicyDiscover
PayPal |
Google Pay
Shop Pay | Cookie Policy
British Indian Ocean Territory (USD$)
Klarna
Union Pay| Terms of Service
|
MaestroBulgaria (EUR€)
Visa
Refund policyMastercard
PayPalBurkina Faso (XOFFr)
| ServiceShop Pay
Burundi (BIFFr)
Union Pay
Servicing
Visa
Cameroon (XAFCFA)
Workshop Prices
|
Cycle to Work
Cape Verde (CVE$)
|
|
Delivery & Returns
Central African Republic (XAFCFA)
Information
Mon - Fri: 09:00 - 18:30
Sat: 9:00 - 16:00
Chad (XAFCFA)
| © 2026, Sun: Closed
ProjektRide0131 374 5324
.Newington Road
Edinburgh
Comoros (KMFFr)
Powered by EH9 1QN
Shopify[email protected]
.
Congo - Brazzaville (XAFCFA)
|
|
Congo - Kinshasa (CDFFr)
|
|
Côte d’Ivoire (XOFFr)
|
|
Croatia (EUR€)
GBP£
Cyprus (EUR€)
Åland Islands (EUR€)
|
Czechia (CZKKč)
Albania (ALLL)
Denmark (DKKkr.)
Algeria (DZDد.ج)
Close
|
Djibouti (DJFFdj)
Andorra (EUR€)
Egypt (EGPج.م)
Angola (GBP£)
|
Equatorial Guinea (XAFCFA)
Armenia (AMDդր.)
|
|
Eritrea (GBP£)
Ascension Island (SHP£)
|
Estonia (EUR€)
|
|
|
Eswatini (GBP£)
|
|
Ethiopia (ETBBr)
|
Faroe Islands (DKKkr.)
Finland (EUR€)
French Southern Territories (EUR€)
| CloseGabon (XOFFr)
|
Gambia (GMDD)
|
window._RestockRocketConfig = window._RestockRocketConfig || {}
// Helper function to normalize locale format from hyphen to underscore (e.g., 'en-US' -> 'en_us')
// This matches the backend's Mobility.normalize_locale behavior
// Returns empty string if locale is empty or invalid (matches original behavior)
function normalizeLocale(locale) {
if (!locale || locale.trim() === '') {
return '';
}
return locale.toString().toLowerCase().replace(/-/g, '_');
}
window._RestockRocketConfig.locale = 'en';
window._RestockRocketConfig.normalizedLocale = normalizeLocale('en');
window._RestockRocketConfig.shop = 'projektride.myshopify.com';
window._RestockRocketConfig.pageType = 'product';
window._RestockRocketConfig.liquidRenderedAt = 1774784765;window._RestockRocketConfig.marketId = 382140642;window._RestockRocketConfig.countryName = 'United Kingdom';
window._RestockRocketConfig.countryIsoCode = 'GB';window._RestockRocketConfig.cartInventoryQuantity = {};window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2025-12-28T14:44:23.508Z","enable_app":true,"enable_signup_widget":false,"storefront_button_text":"Notify me when available","storefront_button_text_color":"#FFFFFF","storefront_button_background_color":"#202223","storefront_form_header":"Notify me","storefront_form_description":"Get a notification as soon as this product is back in stock by signing up below!","storefront_form_button_text":"Notify me when available","storefront_form_button_text_color":"#FFFFFF","storefront_form_button_background_color":"#202223","storefront_form_terms":"Promise we won't spam. You'll only receive notifications for this product.","storefront_form_error":"Please enter a valid email address","storefront_form_success":"Thank you! We will notify you when the product is available.","enable_powered_by":true,"show_button_on_preorder":true,"sms_enabled":false,"email_enabled":true,"storefront_button_disable_tag":"rocket-hide","theme_config":{"disableDebugLoggingForNonPreorderItem":false},"storefront_form_email_placeholder":"Email address","storefront_form_phone_placeholder":"SMS","storefront_form_phone_label":"Phone number","storefront_form_email_label":"Email","storefront_form_phone_error":"Please enter a valid phone number","storefront_form_customer_name_placeholder":"Name","storefront_form_customer_name_error":"Please enter your name","storefront_form_did_you_mean_error":"Did you mean %{suggested_email}? Or use %{current_email}","form_customer_name_enabled":false,"form_customer_name_required":false,"css_config":"","js_config":null,"collect_promotion_consent":false,"storefront_form_promotion_consent_label":"Notify me about other news, sales, discounts & offers too","show_button_on_collection":false,"sms_default_country":"us","sms_allowed_countries":[],"sms_restrict_country":false,"sms_default_channel":true,"optin_required":false,"optin_success_text":"Registration confirmed! You'll receive an alert when the product is restocked.","storefront_button_border_radius":0,"storefront_button_disable_tag_hides_button":true,"storefront_button_disable_tag_enabled":false,"quantity_required":false,"storefront_form_quantity_label":"Quantity","enable_alerts":true,"sms_allowed":false,"email_allowed":true,"collect_promotion_consent_default":true,"insert_button_after_selector":null,"insert_button_after_selector_type":"afterend","storefront_button_position_type":"float-right","storefront_form_duplicate_error":"You've already subscribed for alerts to this product.","storefront_mixed_cart_error":"This item needs to be purchased separately. Please check out or clear your cart before adding this item.","storefront_error_heading":"Error","default_locale":"en","collection_page_button_text_color":"#FFFFFF","collection_page_button_background_color":"#202223","show_button_if_any_out_of_stock":false,"show_button_if_any_variant_out_of_stock_collection":false,"show_button_on_index":false,"insert_button_after_selector_collection":null,"insert_button_after_selector_index":null,"push_enabled":false,"push_allowed":false,"storefront_form_push_label":"Push","storefront_form_push_description":"Click 'Allow' to be notified via push notification","storefront_form_push_error":"Permission rejected! Please review notification settings and try again","storefront_font_family":"OpenSans","insert_button_after_selector_collection_type":"afterend","show_channel_selector":false,"storefront_form_empty_error":"Please fill in one or more of the options above","storefront_form_push_input":"Send notification to your browser","insert_button_after_selector_page":null,"show_button_on_page":false,"insert_button_after_selector_search":null,"show_button_on_search":false,"app_proxy_path_prefix":"/apps/restockrocket-production","collection_link_selector":"","index_link_selector":"","page_link_selector":"","search_link_selector":"","collection_check_link_visibility":true,"collection_buttons_container":null,"index_buttons_container":null,"page_buttons_container":null,"search_buttons_container":null,"extension_enable_url_variant_detection":true,"extension_enable_value_variant_detection":true,"extension_value_variant_selector":"[name='id']","resubscribe_text":"This product is out of stock. Get notified when it's restocked again by entering your details below!","preorder_enabled":true,"preorder_buy_button_selector":null,"preorder_add_to_cart_button_selector":"","preorder_badge_selector":"","preorder_button_out_of_stock_text":"Out of stock","preorder_button_add_to_cart_text":"Add to cart","preorder_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_enabled":false,"preorder_collection_form_selector":"form[action*=\"/cart/add\"]","preorder_collection_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_index_enabled":false,"preorder_index_form_selector":"form[action*=\"/cart/add\"]","preorder_index_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_page_enabled":false,"preorder_page_form_selector":"form[action*=\"/cart/add\"]","preorder_page_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_search_enabled":false,"preorder_search_form_selector":"form[action*=\"/cart/add\"]","preorder_search_add_to_cart_button_selector":"form[action*=\"/cart/add\"] button","preorder_collection_badge_selector":null,"preorder_index_badge_selector":null,"preorder_page_badge_selector":null,"preorder_search_badge_selector":null,"preorder_badge_selector_type":"afterend","preorder_collection_badge_selector_type":"afterend","preorder_button_child_selector":"span","preorder_button_disclaimer_insert_selector":"","preorder_button_disclaimer_insert_selector_type":"afterend","preorder_payment_insert_selector":"","preorder_payment_insert_selector_type":"afterend","preorder_price_container_selector":"","preorder_price_container_selector_insert_type":"afterend","preorder_terms_insert_selector":"","preorder_terms_insert_selector_type":"afterend","preorder_original_price_selector":"","preorder_price_format":"{{amount}} {{currency}}","show_badge_if_any_variant_is_preorder":false,"enable_console_debug":false,"inline_form_enabled":false,"inline_form_selector":null,"inline_form_selector_type":"afterend","storefront_form_prefill_customer":true,"storefront_form_show_image":false,"storefront_form_text_color":"#202223","storefront_form_background_color":"#FFFFFF","storefront_form_border_radius":0,"market_setup_type":"single_market","shopify_app_id":5940125,"preorder_progress_bar_insert_selector":null,"preorder_progress_bar_insert_selector_type":"beforebegin","countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","cache":true,"cached_at":"2026-01-08T16:12:13.364Z","multi_language_enabled":false,"translation_locale":"en"};window._RestockRocketConfig.cachedPreorderVariantIds = {"preorder_variant_ids":[42167799447778,43916521013474,43934694998242,43934695031010,43934695620834,43935975440610,43935975473378,43935989399778,43935989432546,43935990284514,43935994118370,43935995625698,43935995855074,43936000835810,43936003195106,43936003227874,43936008012002,43936008044770,43936022757602,43936022790370,43936022823138,43936022855906,43936056115426,43936061030626,43936064930018,43936070631650,43936078037218,43936078069986,43936088195298,43936093470946,43936101138658,43936107266274,43936124076258,43936124109026,43936124141794,43936124174562,43936129941730,43936129974498,43936130007266,43936142393570,43936142426338,43936142459106,43936152060130,43936152092898,43936152125666,43936193118434,43936250429666,43936255803618,43936266682594,43936266715362,43936293978338,43936294011106,43936316424418,43936316457186,43936320880866,43936320913634,43936320946402,43936327041250,43936327074018,43936327106786,43936331661538,43936332349666,43936333103330,43936351224034,43936353714402,43936362889442,43936362922210,43936388153570,43936389333218,43936395526370,43936398508258,43936401522914,43936408568034,43936414400738,43936700727522,43936706101474,43936706134242,43936706167010,43936706199778,43936706232546,43936706265314,43938308587746,43938308653282,43938308718818,43938308751586,43938308784354,43938308817122,43938322612450,43938322645218,43938322677986,43981336051938,43981336084706,43981336117474,43981336150242,43981345587426,43981345620194,43981345652962,43981345685730,43981357580514,43981357613282,43981362462946,43981362495714,43981362528482,43981369016546,43981369049314,43981374914786,43981374947554,43981374980322,43981392773346,43981392904418,43981695844578,43981695877346,43981695910114,43981695942882,43981986070754,43981987905762,43981987938530,44052906967266,44052907327714,44052907360482,44052907393250,44052907426018,44052907458786,44052907491554,44052909097186,44052909129954,44140279791842,44140279824610,44140279857378,44140279890146,44140279922914,44140292047074,44140292079842,44140292112610,44140293685474,44140302336226,44140302434530,44140302500066,44140302532834,44140302565602,44140302598370,44140302631138,44140302827746,44140302893282,44140302926050,44140306301154,44140315050210,44140317016290,44140321636578,44140335792354,44140335825122,44140335857890,44140339953890,44140339986658,44140340150498,44140340248802,44140340281570,44140340543714,44140340707554,44140340740322,44140340773090,44140345065698,44140352438498,44140388155618,44140388188386,44140397756642,44140404441314,44140404474082,44155590508770,44155590541538,44155594211554,44155594244322,44155594277090,44155594309858,44155594342626,44155594375394,44155594440930,44155594473698,44155594506466,44195991847138,44195991945442,44329993437410,44329993470178,44329993502946,44329993535714,44329993568482,44957136584930,44957136781538,44957136945378,45068753961186,45068753993954,45069622640866,45069622903010,45069622968546,45069750730978,45069750763746,45353010921698,45353010954466,45353010987234,45353018261730,45353018294498,45353018327266,55569712382335,55569712415103,55569712447871,55569712480639,55570017616255,55570550194559,55570550227327,55604008976767,55638316908927,55638316941695,55638316974463,56220814967167,56220814999935,56220815032703,56270279606655,56270279639423,56270279672191,56314171064703,56314171097471,56398983725439,56398983758207,56398983790975,56399322251647,56565020721535,56565020754303,56565020787071],"updated_at":"2026-03-29T11:28:17Z","market_locations_enabled":false,"market_id":382140642,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedOutOfStockVariantIds = { out_of_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2026-03-29T11:42:01Z","shopify_market_id":382140642,"market_locations_enabled":false};
window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_382140642";window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_shipping_texts":{},"updated_at":"2026-03-29T11:30:41Z","shopify_market_id":382140642,"market_locations_enabled":false};
window._RestockRocketConfig.cachedVariantShippingTextsMarketKey = "variant_shipping_texts_for_market_382140642";window._RestockRocketConfig.sellingPlans = [{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant_ids":[55569712382335,55569712415103,55569712480639,55570017616255,55570017550719,55569712447871,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":"Preorder","preorder_button_description":"Note: This is a preorder. Items will ship based on the estimated delivery date.","preorder_button_description_background_color":"#ebebeb","preorder_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":713071886719,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","disable_button_until_acknowledged":false,"preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}];(function() {
const cachedData = {"plans":[{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant_ids":[55569712382335,55569712415103,55569712480639,55570017616255,55570017550719,55569712447871,55570017583487],"product_variants_source":"custom","name":"Preorder","preorder_button_text":"Preorder","preorder_button_description":"Note: This is a preorder. Items will ship based on the estimated delivery date.","preorder_button_description_background_color":"#ebebeb","preorder_button_description_text_color":"#000000","preorder_button_description_border_radius":10,"preorder_button_description_show_quantity_limit":false,"preorder_button_description_quantity_limit_suffix":" units available for preorder","preorder_button_description_shipping_text_prefix":"Shipping: ","delivery_exact_time":null,"delivery_after_n_intervals":null,"delivery_at":"2025-07-26T09:20:18.169Z","delivery_type":"asap","quantity_limit_text":"{{ quantity }} units available for preorder","preorder_button_description_show_shipping":true,"preorder_button_description_icons_enabled":true,"preorder_shipping_text":"Shipping: {{ date }}","shipping_applies_to_all_products":true,"shipping_text":"Estimated to ship within 2 months","payment_type":"full","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"discount_text":"Save {{ discount }}","billing_title":"Full payment","billing_description":null,"enable_billing_widget":false,"inventory_provider":"stoq","preorder_badge_enabled":false,"preorder_badge_text":"Preorder","preorder_badge_text_color":"#FFFFFF","preorder_badge_background_color":"#000000","preorder_discounted_price_enabled":null,"payment_line_item_property_enabled":false,"shipping_line_item_property_enabled":true,"custom_line_item_property_text":null,"preorder_button_text_color":"#ffffff","preorder_button_background_color":"#565557","preorder_button_colors_enabled":true,"markets_enabled":false,"market_id":13779632354,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":false,"translations":{},"payment_options":[{"billing_type":"no_remaining_balance","billing_checkout_charge_type":"percentage","billing_checkout_charge_amount":null,"billing_checkout_charge_percentage":"100.0","billing_at":"2025-07-26T09:20:38.472Z","billing_after_n_intervals":7,"billing_after_interval_type":"day","pricing_type":"no_discount","pricing_amount":null,"pricing_percentage":null,"billing_title":"Full payment","billing_description":null,"discount_text":"Save {{ discount }}","shopify_selling_plan_id":713071886719,"is_default":true,"type":"full","translations":{}}],"require_preorder_acknowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","disable_button_until_acknowledged":false,"preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_style":"text","countdown_timer_text_color":"#000000","countdown_timer_background_color":"#f5f5f5","countdown_timer_border_radius":8,"countdown_timer_format":"DHMS","countdown_timer_use_schedule_dates":true,"countdown_timer_custom_start_date":null,"countdown_timer_custom_end_date":null,"countdown_timer_starts_text":null,"countdown_timer_ends_text":null,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true,"mixed_cart_error_message":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","b2b_enabled":true,"preorder_progress_bar_enabled":false,"preorder_progress_bar_text":"{{ sold }} of {{ total }} claimed","preorder_progress_bar_fill_color":"#000000","preorder_progress_bar_background_color":"#e5e5e5","preorder_progress_bar_text_color":"#FFFFFF","preorder_progress_bar_border_radius":4,"preorder_progress_bar_show_percentage":false}],"disabled_plan_ids":[713813721471,713176482175],"cached_at":"2026-02-18T08:36:42Z"};
if (cachedData && typeof cachedData === 'object' && cachedData.cached_at) {
// Find the maximum updated_at from all items in old array
const oldPlans = window._RestockRocketConfig.sellingPlans;
const maxUpdatedAt = Array.isArray(oldPlans) && oldPlans.length > 0
? oldPlans.reduce(function(max, plan) {
// Parse dates for proper comparison (handles mixed ISO formats)
if (plan.updated_at) {
const planDate = new Date(plan.updated_at);
const maxDate = max ? new Date(max) : null;
return (!maxDate || (planDate && !isNaN(planDate) && planDate > maxDate)) ? plan.updated_at : max;
}
return max;
}, '')
: null;
// Use cached if old array is empty/has no timestamps, or cached is newer
// Parse dates for comparison to handle format differences (+00:00 vs .000Z)
const cachedDate = new Date(cachedData.cached_at);
const maxDate = maxUpdatedAt ? new Date(maxUpdatedAt) : null;
const useCached = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate));
if (useCached) {
if (Array.isArray(cachedData.plans)) {
window._RestockRocketConfig.sellingPlans = cachedData.plans;
// Only use disabled_plan_ids when using cached plans
window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || [];
console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')');
}
} else {
// When using old format (stale cache), don't trust disabled_plan_ids
window._RestockRocketConfig.disabledSellingPlanIds = [];
console.debug('[RR] Using selling plans from old format (max updated_at: ' + maxUpdatedAt + ')');
}
}
})();window._RestockRocketConfig.enabledNotifyMeVariantIds = [];window._RestockRocketConfig.disabledNotifyMeVariantIds = [];window._RestockRocketConfig.backInStockTemplates = [];window._RestockRocketConfig.restockNotes = {};window._RestockRocketConfig.integrations = [{"id":"15c94526-b6b8-4de1-9bc1-23b1ca52ddb0","shop_id":38436,"enabled":true,"page_types":["product","collection","index","search","page","cart","list-collections","article","blog"],"configuration":{"toastDuration":10000,"toastPosition":"bottom-right","enableXHRHijack":true,"enableFetchHijack":true,"quantityLimitDisabled":false},"type":"hijack","css_config":null,"js_config":null,"created_at":"2025-07-26T09:16:04.076Z","updated_at":"2025-07-26T09:16:04.076Z"}];window._RestockRocketConfig.obfuscateInventoryQuantity = false;window._RestockRocketConfig.product = {"id":14907871527295,"title":"Trek Domane SLR Gen 2 Rim Frame Set","handle":"trek-domane-slr-gen-2-rim-frame-set","description":"\u003cdiv data-v-e224ae82=\"\" class=\"b2b-buying-zone__info cell medium-6 large-12\"\u003e\n\u003cdiv data-v-e224ae82=\"\" class=\"buying-zone__positioning-statement mb-2 pt-2 border-t border-gray-10\"\u003e\n\u003cp data-v-e224ae82=\"\"\u003eThe award-winning Domane SLR Frame Set is built with 700 Series OCLV Carbon and includes both Front and Adjustable Rear IsoSpeed so you can fine-tune your compliance to your terrain. It's designed for direct mount rim brakes, and includes a headset and a full carbon Domane fork.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFrameset\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003eFrame\u003cbr\u003e600 Series OCLV Carbon, front IsoSpeed, adjustable rear IsoSpeed, tapered head tube, internal cable routing, Ride Tuned seat mast, 3S chain keeper, direct-mount rim brakes, DuoTrap S compatible, mudguard mounts, 130x5 mm QR\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003cstrong\u003eFrame fit\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003eEndurance\u003cbr\u003eFork\u003cbr\u003eDomane SLR carbon, tapered carbon steerer, mudguard mounts, direct-mount rim brake, carbon dropouts, 5x100 mm QR\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003cstrong\u003eWheels\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003eMax tyre size\u003cbr\u003e28mm\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003cstrong\u003eDrivetrain\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003eFront derailleur\u003cbr\u003eMechanical front derailleurs must have a full-housing stop (example: Shimano toggle front derailleurs)\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003cstrong\u003eComponents\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003eHead set\u003cbr\u003eFSA Integrated, sealed cartridge bearing, 1-1\/8\" top, 1.5\" bottom\u003cbr\u003eWeight\u003cbr\u003eWeight\u003cbr\u003e56 cm - 1.75 kg \/ 3.85 lb\u003cbr\u003eWeight limit\u003cbr\u003eThis bike has a maximum total weight limit (combined weight of bicycle, rider and cargo) of 125 kg (275 lb).\u003cbr\u003eWe reserve the right to make changes to the product information contained on this site at any time without notice, including with respect to equipment, specifications, models, colours, materials and pricing. Due to supply chain issues, compatible parts may be substituted at any time without notice.\u003c\/p\u003e\n\u003cp\u003eBike and frame weights are based on pre-production painted frames at time of publication. Weights may vary in final production.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e","published_at":"2026-01-15T17:42:24+00:00","created_at":"2025-01-11T12:44:33+00:00","vendor":"Trek","type":"Bicycles","tags":["Domane"],"price":445000,"price_min":445000,"price_max":445000,"available":true,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":54945378140543,"title":"50","option1":"50","option2":null,"option3":null,"sku":"591813","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Trek Domane SLR Gen 2 Rim Frame Set - 50","public_title":"50","options":["50"],"price":445000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":54945378173311,"title":"52","option1":"52","option2":null,"option3":null,"sku":"591814","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Trek Domane SLR Gen 2 Rim Frame Set - 52","public_title":"52","options":["52"],"price":445000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":54945378206079,"title":"54","option1":"54","option2":null,"option3":null,"sku":"591815","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Trek Domane SLR Gen 2 Rim Frame Set - 54","public_title":"54","options":["54"],"price":445000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":54945378238847,"title":"56","option1":"56","option2":null,"option3":null,"sku":"591816","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Trek Domane SLR Gen 2 Rim Frame Set - 56","public_title":"56","options":["56"],"price":445000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":54945378271615,"title":"58","option1":"58","option2":null,"option3":null,"sku":"591817","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Trek Domane SLR Gen 2 Rim Frame Set - 58","public_title":"58","options":["58"],"price":445000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":54945378304383,"title":"60","option1":"60","option2":null,"option3":null,"sku":"591818","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Trek Domane SLR Gen 2 Rim Frame Set - 60","public_title":"60","options":["60"],"price":445000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]},{"id":54945378337151,"title":"62","option1":"62","option2":null,"option3":null,"sku":"591819","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Trek Domane SLR Gen 2 Rim Frame Set - 62","public_title":"62","options":["62"],"price":445000,"weight":0,"compare_at_price":null,"inventory_management":"shopify"Georgia (GBP£)
003eThe award-winning Domane SLR Frame Set is built with 700 Series OCLV Carbon and includes both Front and Adjustable Rear IsoSpeed so you can fine-tune your compliance to your terrain. It's designed for direct mount rim brakes, and includes a headset and a full carbon Domane fork.\u003c\/p\u003e\n\u003cp\u003e\u003cstrong\u003eFrameset\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003eFrame\u003cbr\u003e600 Series OCLV Carbon, front IsoSpeed, adjustable rear IsoSpeed, tapered head tube, internal cable routing, Ride Tuned seat mast, 3S chain keeper, direct-mount rim brakes, DuoTrap S compatible, mudguard mounts, 130x5 mm QR\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003cstrong\u003eFrame fit\u003c\/strong\u003e\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003eEndurance\u003cbr\u003eFork\u003cbr\u003eDomane SLR carbon, tapered carbon steerer, mudguard mounts, direct-mount rim brake, carbon dropouts, 5x100 mm QR\u003c\/p\u003e\n\u003cp\u003e\u003cbr\u003e\u003cstrong\u003eWheels\u003c\/strong\u003e\u0
upply chain issues, compatible parts may be substituted at any time without notice.\u003c\/p\u003e\n\u003cp\u003eBike and frame weights are based on pre-production painted frames at time of publication. Weights may vary in final production.\u003c\/p\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {54945378140543 : "deny",54945378173311 : "deny",54945378206079 : "deny",54945378238847 : "deny",54945378271615 : "deny",54945378304383 : "deny",54945378337151 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {54945378140543 : parseInt("6"),54945378173311 : parseInt("5"),54945378206079 : parseInt("14"),54945378238847 : parseInt("5"),54945378271615 : parseInt("13"),54945378304383 : parseInt("3"),54945378337151 : parseInt("4"),};
window._RestockRocketConfig.variantsPreorderCount = {54945378140543 : parseInt(""),54945378173311 : parseInt(""),54945378206079 : parseInt(""),54945378238847 : parseInt(""),54945378271615 : parseInt(""),5494537
gTextForMarket = {54945378140543 : null,54945378173311 : null,54945378206079 : null,54945378238847 : null,54945378271615 : null,54945378304383 : null,54945378337151 : null,};
window._RestockRocketConfig.selected_variant_id = 54945378140543;
window._RestockRocketConfig.selected_variant_available = window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }).available;window._RestockRocketConfig.scriptUrlProduct = 'https://cdn.shopify.com/extensions/019d2f20-306e-73e0-8f4f-46c37de1772b/restockrocket-1-470/assets/restockrocket-product.js'
window._RestockRocketConfig.scriptUrlCollection = 'https://cdn.shopify.com/extensions/019d2f20-306e-73e0-8f4f-46c37de1772b/restockrocket-1-470/assets/restockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https:Germany (EUR€)
<
<
translation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current locale isn't translated, applyTranslations will gracefully use default locale from base fields
if (window._RestockRocketConfig.normalizedLocale &&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
// Don't return null - continue using cache even for untranslated locales
}
const updatedAt = new Date(settings.updated_at);
if (isNaN(updatedAt.getTime())) {
console.debug('STOQ - Invalid updated_at date format in settings');
return null;
}
const
< | Ghana (GBP£)
!settings.multi_language_enabled) {
return settings;
}
if (!settings.translations) {
console.debug('STOQ - No translations found, skipping translation');
return settings;
}
const normalizedLocale = window._RestockRocketConfig.normalizedLocale;
const translations = settings.translations;
if (!normalizedLocale) {
// No matching locale has translations; drop payload to save memory
console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {}));
delete settings.translations;
return settings;
}
console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`);
const translatedFields = translations[normalizedLocale];
if (translatedFields && typeof translatedFields === 'object') {
Object.keys(translatedFields).forEach(function(key) {
const value = translatedFields[key
&& window._RestockRocket.updateCartSellingPlans) {
window._RestockRocket.updateCartSellingPlans()
.then(hasUpdates => {
if (hasUpdates) {
console.debug('STOQ - cart selling plans updated successfully');
} else {
console.debug('STOQ - no cart selling plan updates needed');
}
})
.catch(error => {
console.error('STOQ - error updating cart selling plans:', error);
});
}
});
}
// First try to get settings from metafields with expiry check
const cachedSettings = window._RestockRocketConfig.cachedSettings;
const validCachedSettings = cachedSettings ? checkSettingsExpiry(cachedSettings) : null;
if (validCachedSettings) {
console.debug('STOQ - using cached settings');
initializeScripts(validCachedSettings);
} else {
console.debug('STOQ - fetching fresh settings');
const headers = {
'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.S
hedSettings);
} else {
console.error('STOQ - failed to load settings:', error);
}
})
.catch(function(e) {
console.error(e)
})
}
function initializeScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
// Setup cart selling plan updater BEFORE loading any scripts to avoid race conditions
setupCartSellingPlanUpdater(settings);
if(settings.enable_app) {
const hijackIntegration = window._RestockRocketConfig.integrations.find(function(integration) {
return integration.type === 'hijack' && integration.enabled && integration.page_types.includes(window._RestockRocketConfig.pageType);
})
if(window._RestockRocketConfig.pageType === 'collection' && (settings.show_button_on_collection || settings.preorder_collection_enabled)) {
createRestockRocketScript(window._RestockRocketCon|
led for ${window._RestockRocketConfig.pageType}`);
}
// Dispatch custom event when app is loaded
// Cart selling plan updates will be triggered by stoq:inventory-data-loaded event
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings,
preorderEnabled: settings.preorder_enabled
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
| Gibraltar (GBP£)
|
.restock-rocket-button,.restock-rocket-button-float{opacity:1!important;border:none!important;cursor:pointer!important;background-image:none!important;box-shadow:none!important;padding:15px 20px;font-size:16px;width:100%;font-family:inherit}@font-face{font-family:OpenSans;font-weight:200;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Light.woff)}@font-face{font-family:OpenSans;font-weight:300;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-Regular.woff)}@font-face{font-family:OpenSans;font-weight:600;src:url(https://d382hokyqag45a.cloudfront.net/assets/OpenSans-SemiBold.woff)}.restock-rocket-button-container{position:relative;z-index:1;width:100%}.restock-rocket-button-container-float-right{position:fixed;z-index:123123;top:calc(50% - 200px);right:0;transform:rotate(270deg);transform-origin:bottom right}.restock-rocket-button-container-float-left{position:fixed;z-index:123123;top:calc(50% - 200px);left:40px;transform:rotate(90deg);transform-origin:top left}.restock-rocket-button-container-float-left:hover,.restock-rocket-button-container-float-right:hover,.restock-rocket-button-container:hover,.restock-rocket-button-float:hover,.restock-rocket-button:hover{opacity:.8}.restock-rocket-button{min-height:50px;margin-top:10px;margin-bottom:10px}.restock-rocket-button-collection{position:relative;font-size:13px;line-height:1;padding:7px;height:auto;z-index:3}.restock-rocket-wrapper{background-color:rgba(0,0,0,.5);z-index:123123123;width:100%;height:100%;overflow:auto;position:fixed;right:0;top:0;transition-property:all;transition-duration:.3s;display:flex;flex-direction:column;justify-content:center;}.restock-rocket-wrapper-inline{width:100%;height:100%;margin-top:20px}.restock-rocket-preorder-description{padding:10px 15px;margin-top:20px;display:flex;flex-direction:column;gap:10px;}.preorder-description-details{margin-bottom:0;display:flex;flex-direction:column;gap:10px;}.preorder-detail-item{display:flex;flex-direction:row;justify-content:start;gap:8px;align-items:center;}.restock-rocket-payment-widget{border:1px solid #ebebeb;margin-bottom:20px;}.restock-rocket-payment-option{display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:15px 20px;}.restock-rocket-payment-option:not(:last-child){border-bottom:1px solid #ebebeb;}.restock-rocket-payment-input-container{flex:1 1 auto;min-width:0}.restock-rocket-preorder-discount-badge{background:#ebebeb;height:25px;line-height:25px;padding:0 15px;border-radius:25px;font-size:0.8rem;flex:0 0 auto}.restock-rocket-payment-input{margin-right:10px;margin-top:-3px;vertical-align:middle;margin-left:0;accent-color:#202223}.restock-rocket-payment-description{margin-top:4px;flex:1 1 100%}.restock-rocket-preorder-badge{font-size:13px;line-height:1;padding:5px 13px 6px;border-radius:40px;height:auto;border:none;width:auto;z-index:2;margin:0;background:0 0}.preorder-badge-collection{position:absolute;top:10px;right:10px}.preorder-badge-product{margin-left:10px}.restock-rocket-price-strike{text-decoration:line-through;color: #666666;}.restock-rocket-discounted-price{margin-left:10px;}.restock-rocket-acknowledgement-checkbox{margin-bottom:12px;display:flex;align-items:flex-start;gap:8px;font-size:14px;line-height: 1.5;}.restock-rocket-acknowledge-checkbox-input{width:18px;height:18px;margin-top:2px;cursor:pointer;flex-shrink:0;accent-color: #0d0d0d;}.restock-rocket-acknowledge-checkbox-label{flex:1;cursor:pointer;}.restock-rocket-preorder-countdown-timer{display:flex;flex-direction:column;align-items:center;padding:16px;margin:8px 0;font-family:inherit;}.restock-rocket-preorder-countdown-timer .countdown-header{font-size:16px;margin-bottom:6px;text-align:center}.restock-rocket-preorder-countdown-timer .countdown-units{display:flex;flex-wrap:wrap;gap:12px;justify-content:center}.restock-rocket-preorder-countdown-timer .countdown-unit{display:flex;flex-direction:column;align-items:center;gap:6px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:40px;padding:10px 6px;text-align:center;font-size:20px;line-height:1}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:14px;font-weight:500;text-align:center;text-transform:capitalize;opacity:.7}@media (max-width:768px){.restock-rocket-preorder-countdown-timer{padding:14px}.restock-rocket-preorder-countdown-timer .countdown-box{min-width:55px;padding:14px 10px;font-size:26px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:11px}}@media (max-width:480px){.restock-rocket-preorder-countdown-timer{padding:12px}.restock-rocket-preorder-countdown-timer .countdown-units{width:100%;gap:10px}.restock-rocket-preorder-countdown-timer .countdown-box{width:100%;min-width:50px;padding:12px 8px;font-size:24px}.restock-rocket-preorder-countdown-timer .countdown-label{font-size:10px}}.restock-rocket-toast{position:fixed;cursor:pointer;background:#fff;border:0;min-width:40px;min-height:40px;box-shadow:0 0 15px rgba(0,0,0,.1)!important;z-index:622004;padding:20px 30px;font-family:inherit;font-size:inherit;color:#000;display:flex;justify-content:center;align-items:center}.restock-rocket-toast a{text-decoration:none;font-weight:700;color:#000}.restock-rocket-toast .dismiss{margin-left:15px;z-index:1;font-size:20px;}.restock-rocket-toast-top{top:60px}.restock-rocket-toast-bottom{bottom:75px}.restock-rocket-toast-left,.restock-rocket-toast-right{-webkit-animation:.5s forwards slide;animation:.5s forwards slide}.restock-rocket-toast-left{left:0;transform:translateX(-100%);-webkit-transform:translateX(-100%);border-radius:0 10px 10px 0}.restock-rocket-toast-left.slide-out{-webkit-animation:.5s forwards slide-out-left;animation:.5s forwards slide-out-left}.restock-rocket-toast-right{right:0;transform:translateX(100%);-webkit-transform:translateX(100%);border-radius:10px 0 0 10px}.restock-rocket-toast-right.slide-out{-webkit-animation:.5s forwards slide-out-right;animation:.5s forwards slide-out-right}@keyframes slide{100%{transform:translateX(0)}}@-webkit-keyframes slide{100%{-webkit-transform:translateX(0)}}@keyframes slide-out-left{0%{transform:translateX(0)}100%{transform:translateX(-100%)}}@-webkit-keyframes slide-out-left{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(-100%)}}@keyframes slide-out-right{0%{transform:translateX(0)}100%{transform:translateX(100%)}}@-webkit-keyframes slide-out-right{0%{-webkit-transform:translateX(0)}100%{-webkit-transform:translateX(100%)}}.restock-rocket-preorder-progress-bar{padding:12px 15px;margin-bottom:20px;font-family:inherit;}.restock-rocket-preorder-progress-bar .preorder-progress-text{margin-bottom:8px;}.restock-rocket-preorder-progress-bar .preorder-progress-bar-row{display:flex;align-items:center;gap:10px;}.restock-rocket-preorder-progress-bar .preorder-progress-track{flex:1;height:12px;overflow:hidden;}.restock-rocket-preorder-progress-bar .preorder-progress-fill{display:block;height:100%;min-width:2px;transition:width 0.3s ease;}.restock-rocket-preorder-progress-bar .preorder-progress-percentage{font-weight:500;min-width:35px;text-align:right;}
Greece (EUR€)
Greenland (DKKkr.)
Guernsey (GBP£)
| Guinea (GNFFr)
|
|
Guinea-Bissau (XOFFr)
|
|
),56765826236799 : parseInt("0"),56765826269567 : parseInt("0"),56765826302335 : parseInt("0"),56765826335103 : parseInt("0"),56765826367871 : parseInt("0"),56765826400639 : parseInt("0"),56765826433407 : parseInt("0"),56765826466175 : parseInt("0"),56765826498943 : parseInt("0"),56765826531711 : parseInt("0"),};
window._RestockRocketConfig.variantsPreorderCount = {56765825515903 : parseInt(""),56765825548671 : parseInt(""),56765825581439 : parseInt(""),56765825614207 : parseInt(""),56765825646975 : parseInt(""),56765825679743 : parseInt(""),56765825712511 : parseInt(""),56765825745279 : parseInt(""),56765825778047 : parseInt(""),56765825810815 : parseInt(""),56765825843583 : parseInt(""),56765825876351 : parseInt(""),56765825909119 : parseInt(""),56765825941887 : parseInt(""),56765825974655 : parseInt(""),56765826007423 : parseInt(""),56765826040191 : parseInt(""),56765826072959 : parseInt(""),56765826105727 : parseInt(""),56765826138495 : parseInt(""),56765826171263 : parseInt(""),56765826204031 : parse
Albania (ALLL)
Cyprus (EUR€)
66175 : null,56765826498943 : null,56765826531711 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {56765825515903 : parseInt(""),56765825548671 : parseInt(""),56765825581439 : parseInt(""),56765825614207 : parseInt(""),56765825646975 : parseInt(""),56765825679743 : parseInt(""),56765825712511 : parseInt(""),56765825745279 : parseInt(""),56765825778047 : parseInt(""),56765825810815 : parseInt(""),56765825843583 : parseInt(""),56765825876351 : parseInt(""),56765825909119 : parseInt(""),56765825941887 : parseInt(""),56765825974655 : parseInt(""),56765826007423 : parseInt(""),56765826040191 : parseInt(""),56765826072959 : parseInt(""),56765826105727 : parseInt(""),56765826138495 : parseInt(""),56765826171263 : parseInt(""),56765826204031 : parseInt(""),56765826236799 : parseInt(""),56765826269567 : parseInt(""),56765826302335 : parseInt(""),56765826335103 : parseInt(""),56765826367871 : parseInt(""),56765826400639 : parseInt(""),56765826433407 : parseInt(""),56765826466175 : parseInt(""),5676
<
|
1 : "",56765825745279 : "",56765825778047 : "",56765825810815 : "",56765825843583 : "",56765825876351 : "",56765825909119 : "",56765825941887 : "",56765825974655 : "",56765826007423 : "",56765826040191 : "",56765826072959 : "",56765826105727 : "",56765826138495 : "",56765826171263 : "",56765826204031 : "",56765826236799 : "",56765826269567 : "",56765826302335 : "",56765826335103 : "",56765826367871 : "",56765826400639 : "",56765826433407 : "",56765826466175 : "",56765826498943 : "",56765826531711 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {56765825515903 : null,56765825548671 : null,56765825581439 : null,56765825614207 : null,56765825646975 : null,56765825679743 : null,56765825712511 : null,56765825745279 : null,56765825778047 : null,56765825810815 : null,56765825843583 : null,56765825876351 : null,56765825909119 : null,56765825941887 : null,56765825974655 : null,56765826007423 : null,56765826040191 : null,56765826072959 : null,56765826105727 : null,56765826138495 : null,567658261Closetranslation data in metafield
// Metafield hasn't been backfilled yet - force refresh
console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh');
return null;
}
// Translations object exists in metafield - cache is valid
// If current locale isn't translated, applyTranslations will gracefully use default locale from base fields
if (window._RestockRocketConfig.normalizedLocale &&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
// Don't return null - continue using cache even for untranslated locales
}
const updatedAt = new Date(settings.updated_at);
if (isNaN(updatedAt.getTime())) {
console.debug('STOQ - Invalid updated_at date format in settings');
return null;
}
const
scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
const LIQUID_CACHE_MAX_AGE = 2 * 60 * 60; // 2 hours in seconds
// Calculate Liquid cache freshness once at initialization
const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt;
// Validate timestamp and calculate cache age
if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) {
console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh');
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
const now = Math.floor(Date.now() / 1000); // Current time in seconds
const liquidCacheAge = now - liquidRenderedAt; // Age in seconds
// Handle client clock ahead of server
if (liquidCacheAge
<
0) {
console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`);
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else if (liquidCacheAge
!settings.multi_language_enabled) {
return settings;
}
if (!settings.translations) {
console.debug('STOQ - No translations found, skipping translation');
return settings;
}
const normalizedLocale = window._RestockRocketConfig.normalizedLocale;
const translations = settings.translations;
if (!normalizedLocale) {
// No matching locale has translations; drop payload to save memory
console.debug('STOQ - No matching locale for translations. Available:', Object.keys(translations || {}));
delete settings.translations;
return settings;
}
console.debug(`STOQ - Applying translations for normalized locale: ${normalizedLocale} (original: ${window._RestockRocketConfig.locale})`);
const translatedFields = translations[normalizedLocale];
if (translatedFields && typeof translatedFields === 'object') {
Object.keys(translatedFields).forEach(function(key) {
const value = translatedFields[keyIceland (ISKkr)
Algeria (DZDد.ج)
Czechia (CZKKč)
= LIQUID_CACHE_MAX_AGE) {
console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`);
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`);
window._RestockRocketConfig.isLiquidCacheFresh = false;
}
}
function checkSettingsExpiry(settings) {
try {
if (!settings || !settings.updated_at) {
console.debug('STOQ - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no
&& window._RestockRocket.updateCartSellingPlans) {
window._RestockRocket.updateCartSellingPlans()
.then(hasUpdates => {
if (hasUpdates) {
console.debug('STOQ - cart selling plans updated successfully');
} else {
console.debug('STOQ - no cart selling plan updates needed');
}
})
.catch(error => {
cons
age = Date.now() - updatedAt.getTime();
if (age
ig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`,
{ headers }
)
.then(function(response) {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(function(settings) {
initializeScripts(settings);
})
.catch(function(error) {
// If request failed and we have cached settings (even if expired), use them as fallback
if (cachedSettings) {
console.debug('STOQ - using expired cached settings as fallback');
initializeScripts(cachedSettings);
} else {
console.error('STOQ - failed to load settings:', error);
}
})
.catch(function(e) {
console.error(e)
})
}
function initializeScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
// Setup c
SETTINGS_CACHE_DURATION) {
console.debug('STOQ - settings changed recently, skipping cache');
return null;
}
return settings;
} catch (error) {
console.debug('STOQ - Error checking settings cache:', error);
return null;
}
}
function createRestockRocketContainer() {
const restockRocketContainer = document.createElement('div');
restockRocketContainer.id = 'restock-rocket';
document.body.appendChild(restockRocketContainer);
}
function createRestockRocketScript(scriptUrl) {
const restockRocketScriptElement = document.createElement('script');
restockRocketScriptElement.setAttribute('defer', 'defer');
restockRocketScriptElement.src = scriptUrl;
document.body.appendChild(restockRocketScriptElement);
}
createRestockRocketContainer()
console.debug('STOQ - extension activated')
function applyTranslations(settings) {
try {
// Skip translation logic entirely if multi-language is not enabled
if (!settings ||
tScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_page || settings.preorder_page_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'product') {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlProduct);
} else if(hijackIntegration) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else {
console.debug(`STOQ - no scripts enabled for ${window._RestockRocketConfig.pageType}`);
}
// Dispatch custom event when app is loaded
// Cart selling plan updates will be triggered by stoq:inventory-data-loaded event
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings,
0) {
console.debug(`STOQ - Client clock appears ahead of server by ${Math.abs(Math.round(liquidCacheAge / 60))} minutes, assuming cache fresh`);
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else if (liquidCacheAge
= LIQUID_CACHE_MAX_AGE) {
console.debug(`STOQ - Liquid cache is fresh (${Math.round(liquidCacheAge / 60)} minutes old)`);
window._RestockRocketConfig.isLiquidCacheFresh = true;
} else {
console.debug(`STOQ - Liquid cache is stale (${Math.round(liquidCacheAge / 60)} minutes old, max ${Math.round(LIQUID_CACHE_MAX_AGE / 60)} minutes)`);
window._RestockRocketConfig.isLiquidCacheFresh = false;
}
}
function checkSettingsExpiry(settings) {
try {
if (!settings || !settings.updated_at) {
console.debug('STOQ - Invalid settings data structure');
return null;
}
if (!settings.cache) {
console.debug('STOQ - settings caching disabled');
return null;
}
// Check if translations are enabled but missing from cache
// This handles the backfill period where DB has translations but metafield doesn't
if (settings.multi_language_enabled) {
if (!settings.translations) {
// Translations enabled but no Isle of Man (GBP£)
age = Date.now() - updatedAt.getTime();
if (age
SETTINGS_CACHE_DURATION) {
console.debug('STOQ - settings changed recently, skipping cache');
return null;
}
return settings;
} catch (error) {
console.debug('STOQ - Error checking settings cache:', error);
return null;
}
}
function createRestockRocketContainer() {
const restockRocketContainer = document.createElement('div');
restockRocketContainer.id = 'restock-rocket';
document.body.appendChild(restockRocketContainer);
}
function createRestockRocketScript(scriptUrl) {
const restockRocketScriptElement = document.createElement('script');
restockRocketScriptElement.setAttribute('defer', 'defer');
restockRocketScriptElement.src = scriptUrl;
document.body.appendChild(restockRocketScriptElement);
}
createRestockRocketContainer()
console.debug('STOQ - extension activated')
function applyTranslations(settings) {
try {
// Skip translation logic entirely if multi-language is not enabled
if (!settings ||
];
if (value !== null && value !== undefined && value !== '') {
settings[key] = value;
}
});
} else {
console.debug('STOQ - No translated fields found for locale:', normalizedLocale);
}
delete settings.translations;
return settings;
} catch (e) {
console.debug('STOQ - error applying translations:', e);
return settings;
}
}
// Setup event listener for cart selling plan updates
// This must be called before any scripts are loaded to avoid race conditions
function setupCartSellingPlanUpdater(settings) {
// Setup listener regardless - updateCartSellingPlans has its own guards
// This ensures cleanup happens even when preorders are disabled globally
// Listen for stoq:inventory-data-loaded event dispatched by api.js
window.addEventListener('stoq:inventory-data-loaded', function(event) {
console.debug('STOQ - Inventory data loaded, updating cart selling plans');
if (window._RestockRocket
hopify.shop,
'ngrok-skip-browser-warning': 'skip'
};
if (window.Shopify?.theme?.role === 'main') {
headers['X-Shopify-Theme-Schema-Name'] = window.Shopify.theme.schema_name;
headers['X-Shopify-Theme-Schema-Version'] = window.Shopify.theme.schema_version;
headers['X-Shopify-Theme-Store-Id'] = window.Shopify.theme.theme_store_id;
}
fetch(
`${window._RestockRocketConfig.host}/api/v1/setting.json?translation_locale=${window._RestockRocketConfig.normalizedLocale}`,
{ headers }
)
.then(function(response) {
if (!response.ok) {
throw new Error('Network response was not ok');
}
return response.json();
})
.then(function(settings) {
initializeScripts(settings);
})
.catch(function(error) {
// If request failed and we have cached settings (even if expired), use them as fallback
if (cachedSettings) {
console.debug('STOQ - using expired cached settings as fallback');
initializeScripts(cacItaly (EUR€)