976767,55638316908927,55638316941695,55638316974463,56220814999935,56220815032703,56270279606655,56270279639423,56270279672191,56314171064703,56314171097471,56398983725439,56398983758207,56398983790975,56399322251647,56565020721535,56565020754303,56565020787071],"updated_at":"2025-12-14T12:16:34Z","market_locations_enabled":false,"market_id":13777305826,"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":"2025-12-14T12:19:01Z","shopify_market_id":382140642,"market_locations_enabled":false};
window._RestockRocketConfig.cachedVariantPreorderLimitsMarketKey = "variant_preorder_limits_for_market_382140642";window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_shipping_texts":{},"upda
Cockpitted_at":"2025-12-14T12:19:01Z","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":[55569933140351,55569712382335,55569712415103,55569712480639,55569933173119,55570017616255,55569933074815,55570017550719,55569712447871,55569933107583,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 preo
rder","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":"#00000
See More0","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_ac
knowledgement":false,"preorder_acknowledgement_text":"I acknowledge and agree to the preorder terms and conditions for this product.","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"countdown_timer_insert_selector":null,"countdown_timer_insert_selector_type":"afterend","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,"updated_at":"2025-08-19T10:05:43.042Z","allow_mixed_cart":true}];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,"toastPosi
tion":"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":14928086958463,"title":"Hope RD40 PRO 5 - Front","handle":"hope-rd40-pro-5-front","description":"\u003ch3\u003e*10 day leadtime*\u003c\/h3\u003e\n\u003ch5\u003e\u003c\/h5\u003e\n\u003ch5\u003eThe RD40 wheelset is our game changing carbon road\/cyclo cross wheelset. Combining the latest in carbon technology with our all new Pro 5 straight pull hubs these wheels were designed for uncompromised performance for a wide range of disciplines.\u003cbr\u003e\u003cbr\u003e\u003cem\u003eNow with our Tubeless valves and Tubeless tape at no extra cost\u003c\/em\u003e\n\u003c\/h5\u003e\n\u003cp\u003e \u003c\/p\u003e\n\u003ch3\u003eKey Features\u003c\/h3\u003e\n\u003ch5\u003e\u003c\/h5\u003e\n\u003ch5\u003e\u003c\/h5\u003e\n\u003ch5\u003e\/\/ Built with Pro 5 straight pull 24 hole hubs using Sapim CX-Ray black straight pull spokes\u003cbr\u003e\/\/ Wheels are built from start to finish by hand in Barnoldswick\u003cbr\u003e\/\/ Centrelock disc fitment \u003cbr\u003e\/\/ Only available in 700c\u003cbr\u003e\/\/ Boost or Standard\u003cbr\u003e\/\/ Comes with our Tubeless Valves and Tubeless Tape\u003cbr\u003e\/\/ Carbon Clincher rim, tubeless compatible\u003cbr\u003e\/\/ Available with either a Shimano, SRAM or Campag freehub body\u003cbr\u003e\/\/ Designed to suit disc brake sets using centrelock rotors\u003cbr\u003e\/\/ The Pro 5 rear hubs feature the reduced drag ratchet mechanism\u003cbr\u003e\/\/ 24mm Tape, Valve and wipe included for Tubeless setup\u003cbr\u003e\/\/ Rim dimensions: 40mm deep, 26.5mm external width and 19mm internal width\u003cbr\u003e\/\/ Rim ERD is 563mm\u003cbr\u003e\/\/ ETRTO 622x19\u003cbr\u003e\/\/ Rim width is ideal to suit larger volume road\/cross tyres.\u003c
br\u003e\/\/ Strong monocoque, undirectional carbon fibre construction rim\u003cbr\u003e\/\/ Wheels come supplied with 12mm end caps for front wheel and rear wheel comes with 142x12 end caps as standard.\u003cbr\u003e\/\/ Choose from our 6 different hub colour options.\u003cbr\u003e\/\/ Wheels can be adapted quickly and easily to suit different frame and fork fitting using our conversion kits available separately.\u003c\/h5\u003e","published_at":"2025-02-01T10:29:42+00:00","created_at":"2025-02-01T10:29:42+00:00","vendor":"Hope","type":"wheels","tags":["Front","hope","Hope Wheels","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":47000,"price_min":47000,"price_max":47000,"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":55060049101183,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":"","requires_shipping":true,"taxable":true,"featured_image":null,"available":true,"name":"Hope RD40 PRO 5 - Front","public_title":null,"options":["Default Title"],"price":47000,"weight":0,"compare_at_price":null,"inventory_management":null,"barcode":"","requires_selling_plan":false,"selling_plan_allocations":[]}],"images":["\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2025-02-01at10.26.13.png?v=1738407164","\/\/projektride.co.uk\/cdn\/shop\/files\/450_r_2.jpg?v=1738407164","\/\/projektride.co.uk\/cdn\/shop\/files\/300_r_1.jpg?v=1738407164"],"featured_image":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2025-02-01at10.26.13.png?v=1738407164","options":["Title"],"media":[{"alt":null,"id":64078652932479,"position":1,"preview_image":{"aspect_ratio":1.056,"height":1780,"width":1880,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2025-02-01at10.26.13.png?v=1738407164"},"aspect_ratio":1.056,"height":1780,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/Screenshot2025-02-01at10.26.13.png?v=1738407164","width":1880},{"alt"
:null,"id":64078669349247,"position":2,"preview_image":{"aspect_ratio":1.5,"height":300,"width":450,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/450_r_2.jpg?v=1738407164"},"aspect_ratio":1.5,"height":300,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/450_r_2.jpg?v=1738407164","width":450},{"alt":null,"id":64078670954879,"position":3,"preview_image":{"aspect_ratio":1.5,"height":200,"width":300,"src":"\/\/projektride.co.uk\/cdn\/shop\/files\/300_r_1.jpg?v=1738407164"},"aspect_ratio":1.5,"height":200,"media_type":"image","src":"\/\/projektride.co.uk\/cdn\/shop\/files\/300_r_1.jpg?v=1738407164","width":300}],"requires_selling_plan":false,"selling_plan_groups":[],"content":"\u003ch3\u003e*10 day leadtime*\u003c\/h3\u003e\n\u003ch5\u003e\u003c\/h5\u003e\n\u003ch5\u003eThe RD40 wheelset is our game changing carbon road\/cyclo cross wheelset. Combining the latest in carbon technology with our all new Pro 5 straight pull hubs these wheels were designed for uncompromised performance for a wide
luded for Tubeless setup\u003cbr\u003e\/\/ Rim dimensions: 40mm deep, 26.5mm external width and 19mm internal width\u003cbr\u003e\/\/ Rim ERD is 563mm\u003cbr\u003e\/\/ ETRTO 622x19\u003cbr\u003e\/\/ Rim width is ideal to suit larger volume road\/cross tyres.\u003cbr\u003e\/\/ Strong monocoque, undirectional carbon fibre construction rim\u003cbr\u003e\/\/ Wheels come supplied with 12mm end caps for front wheel and rear wheel comes with 142x12 end caps as standard.\u003cbr\u003e\/\/ Choose from our 6 different hub colour options.\u003cbr\u003e\/\/ Wheels can be adapted quickly and easily to suit different frame and fork fitting using our conversion kits available separately.\u003c\/h5\u003e"};
window._RestockRocketConfig.variantsInventoryPolicy = {55060049101183 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {55060049101183 : parseInt("0"),};
window._RestockRocketConfig.variantsPreorderCount = {55060049101183 : parseInt(""),};
window._RestockRocketConfig.variantsPreorde
stockrocket-collection.js'
window._RestockRocketConfig.scriptHost = window._RestockRocketConfig.scriptUrlProduct.substring(0, window._RestockRocketConfig.scriptUrlProduct.lastIndexOf('/') + 1)
window._RestockRocketConfig.host = 'https://app.restockrocket.io'
const SETTINGS_CACHE_DURATION = 15 * 60 * 1000; // 15 minutes in milliseconds
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 translation data in metafield
// Metafield hasn't been backfilled yet - forc< 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 || !settings.multi_language_enable
&& 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;
}
}
// 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.Shopify.shop,
'ngrok-skip-browser-warning': 'skip'
};
if (window.Shopify?.theme?.role === 'main') {
hea
ction(e) {
console.error(e)
})
}
function initializeScripts(settings) {
settings = applyTranslations(settings);
window._RestockRocketConfig.settings = settings;
console.debug(`STOQ - settings configured for ${window._RestockRocketConfig.pageType}`);
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._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'index' && (settings.show_button_on_index || settings.preorder_index_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} elded
const appLoadedEvent = new CustomEvent('stoq:loaded', {
detail: {
pageType: window._RestockRocketConfig.pageType,
enabled: settings.enable_app,
settings: settings
}
});
console.debug('STOQ - dispatching app loaded event');
window.dispatchEvent(appLoadedEvent);
}
}
function updateCartSellingPlans() {
// Wait for the API to be available with retries
const maxRetries = 10;
const retryDelay = 500;
function attemptCartCheck(attempt = 1) {
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 - no cart selling plan updates needed');
}
})
.catch(error => {
console.error('STOQ - error updating cart se<