- 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,"batches_enabled":false,"preorder_batches":[],"batch_status_past_text":"Sold out","batch_status_live_text":"Live","batch_status_upcoming_text":"Coming soon"}],"disabled_plan_ids":[714631872895,713813721471,713176482175],"cached_at":"2026-08-31T15:28:38Z"}; if (cachedData && typeof cachedData === 'object' && cachedData.cached_at) { window._RestockRocketConfig.readFlags = cachedData.read_flags || {}; const oldPlans = window._RestockRocketConfig.sellingPlans; const maxUpdatedAt = Array.isArray(oldPlans) && oldPlans.length > 0 ? oldPlans.reduce(function(max, plan) { if (plan.updated_at) { const planDate = new Date(ing 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.product = {"id":14972480815487,"title":"ENVE G27 650b Gravel Rim","handle":"enve-g27-650b-gravel-rim","description":"\u003cdiv class=\"wrapper\"\u003e\n\u003cdiv class=\"produ
- p\u003eThe G27 gets its name from its 27mm internal rim width and is optimised for 27.5\/650b XC 2.0 to 2.25 tyres. Riders who frequent rough and loose terrain or who primarily ride dirt, and prioritise traction and stable control over flat-out speed will gravitate towards the G27, benefitting from the additional air volume, durability, and anti-flat performance.\u003c\/p\u003e\n\u003cp\u003eWith a weight of just 320g, the G27 accelerates quickly and ascends with ease. However, it's not designed to be treated delicately – ENVE's G Series wheels have been tested to MTB standards tailored to the demands of gravel riding.\u003c\/p\u003e\n\u003cp\u003eThe rim has been designed with a bell-shaped profile for more vertical compliance and energy absorption. The result is a more comfortable and confidence-inspiring ride feel with added impact toughness that ultimately makes for faster riding. The G27 is tough and relentless on road, path or trail whether you're riding hard or going for a week-long adventure.\u003c\gorgeous paint-free finish to reduce weight while maintaining strength, stiffness and allowing the beautiful handmade quality to shine through.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe ultimate 650b\/27.5 gravel performance wheel\u003c\/li\u003e\n\u003cli\u003eDisc-brake specific construction\u003c\/li\u003e\n\u003cli\u003eOptimised for 2.0 to 2.25 inch tyres\u003c\/li\u003e\n\u003cli\u003eWide Hookless Bead for enhanced flat protection\u003c\/li\u003e\n\u003cli\u003eHandmade at ENVE headquarters in Utah, USA\u003c\/li\u003e\n\u003cli\u003eNatural uni-directional carbon paint-free finish\u003c\/li\u003e\n\u003cli\u003e5-year Factory Limited Warranty, cover through ENVE's Incidental Damage Protection Programme\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003ch5\u003eRims are sold as single units and are packaged with the following:\u003c\/h5\u003e\n\u003cul\u003e\n\u003cli\u003eNipples\u003c\/li\u003e\n\u003cli\u003eTubeless setup kit\u003c\/li\u003e\n\u003cli\u003eWarranty\/information book\u003c\/li\u003e\n942a682ae543b5d3192d1%7C0%7C0%7C637895875980177641%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\u0026amp;sdata=x%2Bmj%2FDpjo8yRJ4MflNHrKfupoYj%2FJw%2BBSbogomd4EP8%3D\u0026amp;reserved=0\"\u003ehttps:\/\/www.enve.com\/support\/warranty-terms\/\u003c\/a\u003e\u003c\/p\u003e\n\u003ch5\u003eENVE Incidental Damage Protection\u003c\/h5\u003e\n\u003cp\u003eThis program provides a no-charge rim replacement for your first three years of ownership and a prorated replacement thereafter for damage inflicted upon your SES rim when racing, riding, or transporting your bicycle. Original owners only. Product registration is required within 60 days of purchase to be eligible for this program.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"https:\/\/eur03.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fwww.enve.com%2Fsupport%2Fincidental-damage-protection-terms%2F\u0026amp;data=05%7C01%7C%7Ceee91ce7410d43acccab08da42eb621e%7Cb87d9fd86ee942a682ae543b5d3192d1%7C0%7Cm\u003c\/td\u003e\n\u003ctd\u003e31.5mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHole Count\u003c\/td\u003e\n\u003ctd\u003e24\u003c\/td\u003e\n\u003ctd\u003e24\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eEffective Rim Diameter\u003c\/td\u003e\n\u003ctd\u003e608mm\u003c\/td\u003e\n\u003ctd\u003e608mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eAccepted Tire Sizes\u003c\/td\u003e\n\u003ctd\u003e35-45c\u003c\/td\u003e\n\u003ctd\u003e35-45c\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eTubeless Compatible*\u003c\/td\u003e\n\u003ctd\u003eYES\u003c\/td\u003e\n\u003ctd\u003eYES\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e*please note the G23 can only be used with tubeless clinchers\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003ch5\u003eClincher Specification (Tubeless Only)\u003c\/h5\u003e\n\u003cbr\u003e\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\G27 Rim","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":120000,"price_min":120000,"price_max":120000,"available":false,"price_varies":false,"compare_at_price":null,"compare_at_price_min":0,"compare_at_price_max":0,"compare_at_price_varies":false,"variants":[{"id":55177554919807,"title":"650b – Clincher 24H","option1":"650b – Clincher 24H","option2":null,"option3":null,"sku":"EN213G270","requires_shipping":true,"taxable":true,"featured_image":null,"available":false,"name":"ENVE G27 650b Gravel Rim - 650b – Clincher 24H","public_title":"650b – Clincher 24H","options":["650b – Clincher 24H"],"price":120000,"weight":0,"compare_at_price":null,"inventory_management":"shopify","barcode":null,"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/g27_side_1-1300x0-c-default_e0b2ab45-e50b-4a22-9584-a797b09e8642_rrb1pm.webp?v=1741441234"],"featured_image":"\/\/projekt
- heelset, designed to offer serious gravel riders a low weight, high strength performance upgrade.\u003c\/p\u003e\n\u003cp\u003eThere's a place between road and MTB open to discovery – somewhere beyond the range of your trail bike or the capabilities of your road bike. Terrain littered with challenges and technical demands. Higher tyre volumes and lower pressures require MTB toughness and flat resistance, while big days and long miles need the lightweight and efficiency of a fast-rolling road wheel.\u003c\/p\u003e\n\u003cp\u003eWith the G27, ENVE has created a wheel with the ride quality to make long miles enjoyable and multi-day treks possible while ramping up the fun, speed and ride experience.\u003c\/p\u003e\n\u003cp\u003eThe G27 gets its name from its 27mm internal rim width and is optimised for 27.5\/650b XC 2.0 to 2.25 tyres. Riders who frequent rough and loose terrain or who primarily ride dirt, and prioritise traction and stable control over flat-out speed will gravitate towards the G27, benefitting e rim by working in parallel with the rim's shape and carbon laminate to dissipate impact energy.\u003c\/p\u003e\n\u003cp\u003eThe G27 is intended for tubeless applications and features a moulded bead-lock to ensure that your tyres will remain secure and sealed to the rim over even the roughest terrain.\u003c\/p\u003e\n\u003cp\u003eIf your path leads to classics like Kielder100, AdventureX or further afield to Dirty Kanza, the G27 is your wheel.\u003c\/p\u003e\n\u003cp\u003eIndustry leaders in carbon fibre, every ENVE rim is handmade from raw uni-directional carbon at ENVE's headquarters in Utah, USA. The bespoke construction process utilises rim-specific carbon laminates, moulded spoke holes, removable bladders, and a gorgeous paint-free finish to reduce weight while maintaining strength, stiffness and allowing the beautiful handmade quality to shine through.\u003c\/p\u003e\n\u003cul\u003e\n\u003cli\u003eThe ultimate 650b\/27.5 gravel performance wheel\u003c\/li\u003e\n\u003cli\u003eDisc-brake specific constver several spoke count options. However, the options listed are correct. Please contact us if you want more details on a specific option.\u003c\/p\u003e\n\u003ch5\u003eENVE Factory Limited Warranty\u003c\/h5\u003e\n\u003cp\u003eCoverage for the original owner against defects in materials and workmanship for the period of five years from the original purchase date. Product registration is required within 60 days of purchase. Second-hand owners are covered from the product's date of manufacture.\u003c\/p\u003e\n\u003cp\u003e\u003ca href=\"https:\/\/eur03.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fwww.enve.com%2Fsupport%2Fwarranty-terms%2F\u0026amp;data=05%7C01%7C%7Ceee91ce7410d43acccab08da42eb621e%7Cb87d9fd86ee942a682ae543b5d3192d1%7C0%7C0%7C637895875980177641%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C\u0026amp;sdata=x%2Bmj%2FDpjo8yRJ4MflNHrKfupoYj%2FJw%2BBSbogomd4EP8%3D\u0026amp;reserved=0\"\u003ehttps:\/\/www.enve.com\/support\/warrant/a\u003e\u003c\/p\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ctable\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\n\u003ch5\u003eRim Specification\u003c\/h5\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\n\u003ch5\u003eFront\u003c\/h5\u003e\n\u003c\/td\u003e\n\u003ctd\u003e\n\u003ch5\u003eRear\u003c\/h5\u003e\n\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eDepth\u003c\/td\u003e\n\u003ctd\u003e25mm\u003c\/td\u003e\n\u003ctd\u003e25mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eInternal Width\u003c\/td\u003e\n\u003ctd\u003e23mm\u003c\/td\u003e\n\u003ctd\u003e23mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eExternal Width\u003c\/td\u003e\n\u003ctd\u003e31.5mm\u003c\/td\u003e\n\u003ctd\u003e31.5mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eHole Count\u003c\/td\u003e\n\u003ctd\u003e24\u003c\/td\u003e\n\u003ctd\u003e24\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eEffective Rim Diameter\u003c\/td\u003e\n\u003c003e\n\u003ctd\u003eRim\u003c\/td\u003e\n\u003ctd\u003e330g\u003c\/td\u003e\n\u003ctd\u003e330g\u003c\/td\u003e\n\u003ctd\u003e660g\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eWheelset - Chris King R45 CL\u003c\/td\u003e\n\u003ctd\u003e612g\u003c\/td\u003e\n\u003ctd\u003e731g\u003c\/td\u003e\n\u003ctd\u003e1343g\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003c\/tbody\u003e\n\u003c\/table\u003e\n\u003c\/div\u003e\n\u003cdiv\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003cdiv class=\"techspecs\"\u003e\u003cbr\u003e\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e\n\u003c\/div\u003e"};window._RestockRocketConfig.variantsInventoryPolicy = {55177554919807 : "deny",}; window._RestockRocketConfig.variantsInventoryQuantity = {55177554919807 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {55177554919807 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {55177554919807 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {5
- estockRocketConfig; var _sqOn = !!(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout); var _sqPre = (_sqc.cachedPreorderVariantIds && _sqc.cachedPreorderVariantIds.preorder_variant_ids) || []; var _sqArm = false; if (_sqOn && _sqc.preordersConfigured) { if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) { _sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1; }); } else { _sqArm = (_sqc.integrations || []).some(function (i) { return i && i.type === 'featured_product' && i.enabled && Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1; }); } } if (_sqArm && document.documentElement) { _sqc.acceleratedGateArmed = true; document.documentElement.classList.add('stoq-buy-now-pending'); setTimeout(function () { document.documentElement.classList.remove('stoq-buy-now-pending'); }, 6000); nfig.cachedSettings.api_host) || 'https://app.restockrocket.io' try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; } catch (e) { window._RestockRocketConfig.appVersion = ''; } const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; const LIQUID_CACHE_MAX_AGE = 15 * 60; const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; window._RestockRocketConfig.liquidCacheAge = null; } else { const now = Math.floor(Date.now() / 1000); const liquidCacheAge = now - liquidRenderedAt; window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); 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 = 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; } if (settings.multi_language_enabled) { if (!settings.translations) { console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); return null; } if (window._RestockRocketConfig.normalizedLocale &<
- nitConfig.product.variants)) ? _stoqInitConfig.product.variants.map(function(v) { return v.id }) : []; const _stoqSelectedVariantId = _stoqInitConfig.selected_variant_id; var _stoqPageSeq = 0; try { _stoqPageSeq = (parseInt(window.sessionStorage.getItem('_stoq_pls') || '0', 10) || 0) + 1; window.sessionStorage.setItem('_stoq_pls', String(_stoqPageSeq)); } catch (e) { } Shopify?.analytics?.publish?.('stoq_initialized', { cart_token: _stoqInitConfig.cartToken || '', page_url: window.location.href, page_type: _stoqInitConfig.pageType || '', shop_domain: _stoqInitConfig.shop || '', market_id: _stoqInitConfig.marketId || '', country_code: _stoqInitConfig.countryIsoCode || '', detected_variant_ids: _stoqDetectedVariantIds, selected_variant_id: _stoqSelectedVariantId || '', page_load_seq: _stoqPageSeq, liquid_rendered_at: _stoqInitConfig.liquidRenderedAt || 0, app_version: _stoqInitConfig.appVersion || '', var _sqVidNum = Number(variantId); var _sqPlan = null; var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : []; var _sqMktId = Number(_sqTrack.marketId); var _sqForVariant = function (pl) { return pl && pl.enabled && Array.isArray(pl.variant_ids) && pl.variant_ids.indexOf(_sqVidNum) !== -1; }; _sqPlans.forEach(function (pl) { if (!_sqPlan && _sqForVariant(pl) && pl.markets_enabled && Array.isArray(pl.shopify_market_ids) && pl.shopify_market_ids.indexOf(_sqMktId) !== -1) { _sqPlan = pl; } }); if (!_sqPlan) { _sqPlans.forEach(function (pl) { if (!_sqPlan && _sqForVariant(pl) && !pl.markets_enabled) { _sqPlan = pl; } }); } Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', { variant_id: variantId, product_id: (_sqTrack.product && _sqTraas(_sqTrack.cachedInStockVariantIds && _sqTrack.cachedInStockVariantIds.in_stock_variant_ids); })(), enrolled_plan_id: (_sqPlan && (_sqPlan.shopify_selling_plan_id || _sqPlan.shopify_selling_plan_group_id)) || '', enrolled_plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '', block_enabled: !!(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout), gate_armed: !!_sqTrack.acceleratedGateArmed, gate_active_at_click: !!(document.documentElement && document.documentElement.classList.contains('stoq-buy-now-pending')), blocked: (function () { try { var rr = window._RestockRocket; return !!(rr && typeof rr.willBlockAcceleratedClick === 'function' && rr.willBlockAcceleratedClick(e)); } catch (err) { return false; } })(), }, }); function(key) { const value = translatedFields[key]; 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; } } function setupCartSellingPlanUpdater(settings) { window.addEventListener('stoq:inventory-data-loaded', function(event) { console.debug('STOQ - Inventory data loaded, updating cart selling plans'); if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { if (hasUpdates) { console.debug('STOQ - cart selling plans updated successfully'); } else { console.debug('STOQ -atus); } return response.json(); }) .then(function(body) { if (body && body.errors && body.errors.length) { throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); } const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no settings metafield value'); } cfg.storefrontSettings = JSON.parse(value); console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings'); }) .catch(function(e) { console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message); }); } if (typeof window.requestIdleCallback === 'function') { window.requestIdleCallback(run, { timeout: 5000 }); } else { setTimeout(run, 0); } })(); const cachedSettings = window._RestockRocketConfig.cachedSetti
- t ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { 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 fetchEmbedConfig(endpoint, apply) { return fetch( `${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`, { headers: { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' } } ) .then(function(response) { if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`); return response.json(); }) .then(function(data) { try { apply(data); } catch (applyError) { clags && typeof data.read_flags === 'object' && !Array.isArray(data.read_flags)) { window._RestockRocketConfig.readFlags = data.read_flags; } }), fetchEmbedConfig('integrations', function(data) { if (Array.isArray(data)) { window._RestockRocketConfig.integrations = data; } }) ]), new Promise(function(resolve) { setTimeout(resolve, 1000); }) ]).then(function() { loadScripts(settings); }); return; } loadScripts(settings); } function loadScripts(settings) { 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); }) const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans) && windownScriptUrl); } else if(pageType === 'product') { createRestockRocketScript(productScriptUrl); } else if(hijackIntegration) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else if(usePreorderBuild) { createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection); } else { console.debug(`STOQ - no scripts enabled for ${pageType}`); } 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); } } html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}
Sierra Leone (SLLLe)
| Slovakia (EUR€) | Armenia (AMDդր.) |
|---|---|
| Ascension Island (SHP£) | |
| Belarus (GBP£) | |
| Belgium (EUR€) | |
| Bosnia & Herzegovina (BAMКМ) | |
| Botswana (BWPP) | |
| Bulgaria (EUR€) | |
| Burkina Faso (XOFFr) | |
| Cameroon (XAFCFA) | |
| Cape Verde (CVE$) | |
| Chad (XAFCFA) | |
| Comoros (KMFFr) | |
| Congo - Kinshasa (CDFFr) | |
| Côte d’Ivoire (XOFFr) | |
| Cyprus (EUR€) | |
| 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; } if (settings.multi_language_enabled) { if (!settings.translations) { console.debug('STOQ - multi-language enabled but no translation data in cache, fetching fresh'); return null; } if (window._RestockRocketConfig.normalizedLocale &Belarus (GBP£)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
n\u003ctd\u003eCUBE C:62® Technology, 1 1\/2\" - 1 1\/2\" Tapered, Flat Mount Disc, Fender \u0026amp; Lowrider Mounts, Internal Light Cable Option, 12x100mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHeadset\u003c\/th\u003e\n\u003ctd\u003eACROS, Top Integrated 1 1\/2\" w\/ Integrated Cable Routing, Bottom Integrated 1 1\/2\"\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eStem\u003c\/th\u003e\n\u003ctd\u003eCUBE CIS Stem w\/ Cable Routing, FPI-Link\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eHandlebar\u003c\/th\u003e\n\u003ctd\u003eCUBE Rise Trail Bar, 720mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eGrips\u003c\/th\u003e\n\u003ctd\u003eACID Hybrid Tour\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRear derailleur\u003c\/th\u003e\n\u003ctd\u003eShimano Cues RD-U4000-GS, 9-Speed\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eShifters\u003c\/th\u003e\n\u003ctd\u003eShimano Cues SL-U4010- Rapid 003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003ePedals\u003c\/th\u003e\n\u003ctd\u003eACID PP Trekking\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSaddle\u003c\/th\u003e\n\u003ctd\u003eACID Nuance Lite\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSeatpost\u003c\/th\u003e\n\u003ctd\u003eNewmen Evolution, 27.2mm\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eSeat post = dropper Yes\/No\u003c\/th\u003e\n\u003ctd\u003eNO\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eEngine\u003c\/th\u003e\n\u003ctd\u003eBosch Drive Unit Performance SX max. 60Nm (BDU31)\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eBattery\u003c\/th\u003e\n\u003ctd\u003eBosch CompactTube 400\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eCharger\u003c\/th\u003e\n\u003ctd\u003eBosch 2A\u003c\/td\u003e\n\u003c\/tr\u003e\n\u003ctr\u003e\n\u003cth\u003eRemote\u003c\/th\u003e\n\u003ctd\u003eBosch Mini Remote\u003c\/td\u003e ocketConfig.variantsInventoryQuantity = {57747166036351 : parseInt("0"),57747166069119 : parseInt("0"),57747166101887 : parseInt("0"),57747166134655 : parseInt("0"),57747166167423 : parseInt("0"),}; window._RestockRocketConfig.variantsPreorderCount = {57747166036351 : parseInt(""),57747166069119 : parseInt(""),57747166101887 : parseInt(""),57747166134655 : parseInt(""),57747166167423 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderCountForMarket = {57747166036351 : null,57747166069119 : null,57747166101887 : null,57747166134655 : null,57747166167423 : null,}; window._RestockRocketConfig.variantsPreorderMaxCount = {57747166036351 : parseInt(""),57747166069119 : parseInt(""),57747166101887 : parseInt(""),57747166134655 : parseInt(""),57747166167423 : parseInt(""),}; window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {57747166036351 : null,57747166069119 : null,57747166101887 : null,57747166134655 : null,57747166167423 : null,}; window._RestockRocketConfig.variantsSAustria (EUR€) RestockRocketConfig; var _sqOn = !!(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout); var _sqPre = (_sqc.cachedPreorderVariantIds && _sqc.cachedPreorderVariantIds.preorder_variant_ids) || []; var _sqArm = false; if (_sqOn && _sqc.preordersConfigured) { if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) { _sqArm = _sqc.product.variants.some(function (v) { return _sqPre.indexOf(Number(v.id)) !== -1; }); } else { _sqArm = (_sqc.integrations || []).some(function (i) { return i && i.type === 'featured_product' && i.enabled && Array.isArray(i.page_types) && i.page_types.indexOf(_sqc.pageType) !== -1; }); } } if (_sqArm && document.documentElement) { _sqc.acceleratedGateArmed = true; document.documentElement.classList.add('stoq-buy-now-pending'); setTimeout(function () { document.documentElement.classList.remove('stoq-buy-now-pending'); }, 6000);
onfig.cachedSettings.api_host) || 'https://app.restockrocket.io' try { const _stoqVersionMatch = window._RestockRocketConfig.scriptHost.match(/(\d+)\/?(?:assets\/?)?$/); window._RestockRocketConfig.appVersion = (_stoqVersionMatch && _stoqVersionMatch[1]) || ''; } catch (e) { window._RestockRocketConfig.appVersion = ''; } const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; const LIQUID_CACHE_MAX_AGE = 15 * 60; const liquidRenderedAt = window._RestockRocketConfig.liquidRenderedAt; if (!liquidRenderedAt || typeof liquidRenderedAt !== 'number' || isNaN(liquidRenderedAt)) { console.debug('STOQ - Invalid or missing liquidRenderedAt timestamp, assuming fresh'); window._RestockRocketConfig.isLiquidCacheFresh = true; window._RestockRocketConfig.liquidCacheAge = null; } else { const now = Math.floor(Date.now() / 1000); const liquidCacheAge = now - liquidRenderedAt; window._RestockRocketConfig.liquidCacheAge = Math.max(0, liquidCacheAge); if (liquidCacheAge
- <
var _sqVidNum = Number(variantId);
var _sqPlan = null;
var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : [];
var _sqMktId = Number(_sqTrack.marketId);
var _sqForVariant = function (pl) {
return pl && pl.enabled && Array.isArray(pl.variant_ids) &&
pl.variant_ids.indexOf(_sqVidNum) !== -1;
};
_sqPlans.forEach(function (pl) {
if (!_sqPlan && _sqForVariant(pl) && pl.markets_enabled &&
Array.isArray(pl.shopify_market_ids) &&
pl.shopify_market_ids.indexOf(_sqMktId) !== -1) { _sqPlan = pl; }
});
if (!_sqPlan) {
_sqPlans.forEach(function (pl) {
if (!_sqPlan && _sqForVariant(pl) && !pl.markets_enabled) { _sqPlan = pl; }
});
}
Shopify?.analytics?.publish?.('stoq_accelerated_checkout_clicked', {
variant_id: variantId,
product_id: (_sqTrack.product && _sqTra
as(_sqTrack.cachedInStockVariantIds && _sqTrack.cachedInStockVariantIds.in_stock_variant_ids); })(), enrolled_plan_id: (_sqPlan && (_sqPlan.shopify_selling_plan_id || _sqPlan.shopify_selling_plan_group_id)) || '', enrolled_plan_provider: (_sqPlan && _sqPlan.inventory_provider) || '', block_enabled: !!(_sqTrack.cachedSettings && _sqTrack.cachedSettings.block_accelerated_checkout), gate_armed: !!_sqTrack.acceleratedGateArmed, gate_active_at_click: !!(document.documentElement && document.documentElement.classList.contains('stoq-buy-now-pending')), blocked: (function () { try { var rr = window._RestockRocket; return !!(rr && typeof rr.willBlockAcceleratedClick === 'function' && rr.willBlockAcceleratedClick(e)); } catch (err) { return false; } })(), }, }); Belgium (EUR€)html.stoq-buy-now-pending .shopify-payment-button{pointer-events:none!important}
function(key) { const value = translatedFields[key]; 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; } } function setupCartSellingPlanUpdater(settings) { window.addEventListener('stoq:inventory-data-loaded', function(event) { console.debug('STOQ - Inventory data loaded, updating cart selling plans'); if (window._RestockRocket && window._RestockRocket.updateCartSellingPlans) { window._RestockRocket.updateCartSellingPlans() .then(hasUpdates => { if (hasUpdates) { console.debug('STOQ - cart selling plans updated successfully'); } else { console.debug('STOQ -
atus); } return response.json(); }) .then(function(body) { if (body && body.errors && body.errors.length) { throw new Error('Storefront API errors: ' + body.errors.map(function(e) { return e && e.message; }).join(', ')); } const value = body && body.data && body.data.shop && body.data.shop.metafield && body.data.shop.metafield.value; if (!value) { throw new Error('Storefront API returned no settings metafield value'); } cfg.storefrontSettings = JSON.parse(value); console.debug('STOQ - stored live settings from Storefront API on config.storefrontSettings'); }) .catch(function(e) { console.debug('STOQ - Storefront settings fetch failed (non-fatal):', e && e.message); }); } if (typeof window.requestIdleCallback === 'function') { window.requestIdleCallback(run, { timeout: 5000 }); } else { setTimeout(run, 0); } })(); const cachedSettings = window._RestockRocketConfig.cachedSetti
t ok'); } return response.json(); }) .then(function(settings) { initializeScripts(settings); }) .catch(function(error) { 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 fetchEmbedConfig(endpoint, apply) { return fetch( `${window._RestockRocketConfig.host}/api/v1/embed/${endpoint}.json`, { headers: { 'X-Shopify-Shop-Domain': window._RestockRocketConfig.shop || window.Shopify.shop, 'ngrok-skip-browser-warning': 'skip' } } ) .then(function(response) { if (!response.ok) throw new Error(`Failed to fetch ${endpoint}`); return response.json(); }) .then(function(data) { try { apply(data); } catch (applyError) { c
lags && typeof data.read_flags === 'object' && !Array.isArray(data.read_flags)) { window._RestockRocketConfig.readFlags = data.read_flags; } }), fetchEmbedConfig('integrations', function(data) { if (Array.isArray(data)) { window._RestockRocketConfig.integrations = data; } }) ]), new Promise(function(resolve) { setTimeout(resolve, 1000); }) ]).then(function() { loadScripts(settings); }); return; } loadScripts(settings); } function loadScripts(settings) { 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); }) const hasEnabledOffer = Array.isArray(window._RestockRocketConfig.sellingPlans) && windowBenin (XOFFr)





/

















