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 PedalsGears & Drivetrain Gears & Drivetrain= 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 See More
See Moreage = Date.now() - updatedAt.getTime(); if (age Tubeless
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 ||
Open search bar Essentials My Account
Cleaners, Degreasers and LubricationMy Account
Open cart
Accessories Open cart
Open cart Header ImageMaintenance Open cart
Open cart

> > > p class="result__title"> {{ it.product.badgeText | safe }} <

p class="result__title"> a href="{{ it.product.url }}">{{ it.product.title }} <

a href="{{ it.product.url }}">{{ it.product.title }}>
{{/if}} > > <>

p class="result__title"> <> > <> li class="result">
<> << > < li class="result result--full"> {{@if(it.product.badgeText)}} a href="{{ it.product.url }}">{{ it.product.title }}<
div class="product__tag{{ it.product.badgeClasses }}">> <
img src="//projektride.co.uk/cdn/shop/products/33638-pm_2048x2048.png?v=1679146610" alt="Cane Creek eeSilk+ Seat Post Aluminium" class="mfp-zoom-in-cur" id="31694893351138"> img src="//projektride.co.uk/cdn/shop/products/33660-pm_2048x2048.png?v=1679146611" alt="Cane Creek eeSilk+ Seat Post Aluminium" class="mfp-zoom-in-cur" id="31694893383906">
<<

img src="//projektride.co.uk/cdn/shop/products/33648-pm_2048x2048.png?v=1679146610" alt="Cane Creek eeSilk+ Seat Post Aluminium" class="mfp-zoom-in-cur" id="31694893416674">

<

img src="//projektride.co.uk/cdn/shop/products/33650-pm_2048x2048.png?v=1679146611" alt="Cane Creek eeSilk+ Seat Post Aluminium" class="mfp-zoom-in-cur" id="31694893449442">


img src="//projektride.co.uk/cdn/shop/products/33638-pm_98x.png?v=1679146610" alt="" class="product-single__thumbnail-img">
img src="//projektride.co.uk/cdn/shop/products/33660-pm_98x.png?v=1679146611" alt="" class="product-single__thumbnail-img">

For over 20 years, Thudbuster has been the industry standard in suspension seatposts by providing unequalled comfort and reliability to riders around the world. <
  • Pivots: Threaded, serviceable, hard anodized aluminium axles flanged PTFE bushings