{"id":42695182942434,"title":"Black","option1":"Black","option2":null,"option3":null,"sku":"BT03000A15202","requires_shipping":true,"taxable":true,"featured_image":{"id":37094575210722,"product_id":7676720808162,"position":2,"created_at":"2022-04-10T11:19:52+01:00","updated_at":"2022-05-10T09:34:29+01:00","alt":null,"width":1364,"height":1286,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-04-10at11.17.21.png?v=1652171669","variant_ids":[42695182942434]},"available":true,"name":"Brooks Microfibre bar tape - Black","public_title":"Black","options":["Black"],"price":2499,"weight":100,"compare_at_price":2499,"inventory_management":"shopify","barcode":null,"featured_media":{"alt":null,"id":29655383965922,"position":2,"preview_image":{"aspect_ratio":1.061,"height":1286,"width":1364,"src":"\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-04-10at11.17.21.png?v=1652171669"}},"requires_selling_plan":false,"selling_plan_allocations":[],"quantity_rule":{"min":1,"max":null,"increment":1}}
window._RestockRocketConfig = window._RestockRocketConfig || {}
window._RestockRocket = window._RestockRocket || {}
window._Stoq = window._RestockRocket
window._StoqConfig = window._RestockRocketConfig
try { window._RestockRocket.inlineRanAt = performance.now(); } catch (e) { }
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 = 1794165941;window._RestockRocketConfig.marketId = 382140642;window._RestockRocketConfig.countryName = "United Kingdom";
window._RestockRocketConfig.countryIsoCode = "GB";window._RestockRocketConfig.defaultCountryIsoCode = "GB";window._RestockRocketConfig.languageIsoCode = "en";
if (!window._RestockRocketConfig.cartToken) {
try {
const m = document.cookie.match(/(?:^|;\s*)cart=([^;]+)/);
if (m && m[1]) window._RestockRocketConfig.cartToken = decodeURIComponent(m[1]);
} catch (e) { }
}
window._RestockRocketConfig.cachedSettings = {"id":38500,"shop_id":38436,"currency":"GBP","created_at":"2025-07-26T09:13:57.337Z","updated_at":"2026-10-01T04:48:15.444Z","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 \u0026 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_custom_domain_enabled":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":"Preorders must be purchased separately from regular items. Please complete your current order first, or clear your cart to continue.","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":".product-grid-item__info","insert_button_after_selector_index":".product-grid-item__info","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":".product-grid-item__info","show_button_on_page":false,"insert_button_after_selector_search":".grid","show_button_on_search":false,"app_proxy_path_prefix":"\/apps\/restockrocket-production","collection_link_selector":".product-grid-item__title","index_link_selector":".product-grid-item__title","page_link_selector":".product-grid-item__title","search_link_selector":".product-grid-item__title","collection_check_link_visibility":true,"collection_buttons_container":".grid","index_buttons_container":".carousel.grid--mobile .flickity-viewport","page_buttons_container":".grid","search_buttons_container":".grid","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":"","preorder_add_to_cart_button_selector":".product__submit__holder .product__submit__buttons button","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":".product__media__holder","preorder_index_badge_selector":".product__media__holder","preorder_page_badge_selector":".product__media__holder","preorder_search_badge_selector":".product__media__holder","preorder_badge_selector_type":"afterend","preorder_collection_badge_selector_type":"afterend","preorder_button_child_selector":"span","preorder_button_disclaimer_insert_selector":".product__form .btn","preorder_button_disclaimer_insert_selector_type":"afterend","preorder_payment_insert_selector":"","preorder_payment_insert_selector_type":"afterend","preorder_price_container_selector":".product__price--regular","preorder_price_container_selector_insert_type":
"afterend","preorder_terms_insert_selector":"","preorder_terms_insert_selector_type":"afterend","preorder_original_price_selector":".product__price--regular","preorder_price_format":"{{amount}} {{currency}}","show_badge_if_any_variant_is_preorder":false,"enable_console_debug":false,"inline_form_enabled":false,"inline_form_selector":".product__form","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","configure_notify_me_enabled":false,"restock_note_insert_selector":null,"restock_note_insert_selector_type":"afterend","restock_note_background_color":"#f3f4f6","restock_note_text_color":"#202223","restock_note_border_radius":4,"preorder_modal_continue_button_text":"Continue","preorder_modal_cancel_button_text":"Cancel","meta_pixel_enabled":false,"meta_pixel_id":null,"cache":true,"cached_at":"2026-10-01T04:48:15.476Z","multi_language_enabled":false,"translation_locale":"en","disable_refresh_on_stale_liquid":false,"api_host":"https:\/\/ext.stoqapp.com"};
window._RestockRocketConfig.metafieldNamespace = 'restockrocket_production';
window._RestockRocketConfig.storefrontApiVersion = '2026-07';
window._RestockRocketConfig.moneyFormat = "£{{amount}}";
window._RestockRocketConfig.shopCurrency = "GBP";window._RestockRocketConfig.cachedPreorderVariantIds = {"preorder_variant_ids":[42140096102626,42167799447778,43590980075746,43916521013474,43934694998242,43934695031010,43934695620834,43935975440610,43935975473378,43935989399778,43935989432546,43935990284514,43935994118370,43935995625698,43935995855074,43936000835810,43936003195106,43936003227874,43936008012002,43936008044770,43936022757602,43
936022790370,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,43936351224034,43936353714402,43936362889442,43936362922210,43936388153570,43936389333218,43936395526370,43936398508258,43936408568034,43936414400738,43936700727522,43936706101474,43936706134242,43936706167010,43936706199778,43936706232546,43936706265314,43938298233058,43938298265826,43938298298594,43938298331362,43938298364130,43938298396898,43938298429666,43938298462434,439382
99805922,43938299838690,43938299871458,43938299904226,43938299936994,43938299969762,43938300002530,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,43981392806114,43981392937186,43981695844578,43981695877346,43981695910114,43981695942882,43981986070754,43981987938530,44052906967266,44052907327714,44052907360482,44052907393250,44052907426018,44052907458786,44052907491554,44052909097186,44052909129954,44195991847138,44195991945442,44329993437410,44329993470178,44329993502946,44329993535714,44329993568482,45068753961186,45068753993954,45069622640866,45069622903010,45069622968546,45069750730978,45069750763746],"updated_at":"2026-11-08T19:15:15Z","market_locations_
enabled":false,"market_id":13777305826,"preorder_location_filter_enabled":false,"preorder_location_filter_ids":[],"collection_id":null,"bulk_operation":true};window._RestockRocketConfig.cachedInStockVariantIds = { in_stock_variant_ids: [] };window._RestockRocketConfig.cachedVariantPreorderLimits = {"variant_preorder_limits":{},"updated_at":"2026-11-08T19:13:54Z","shopify_market_id":0,"market_locations_enabled":false};window._RestockRocketConfig.cachedVariantShippingTexts = {"variant_shipping_texts":{},"updated_at":"2026-11-08T19:22:38Z","shopify_market_id":0,"market_locations_enabled":false};window._RestockRocketConfig.sellingPlans = [];(function() {
const cachedData = {"plans":[{"shopify_selling_plan_group_id":98590196095,"shopify_selling_plan_id":713071886719,"enabled":true,"variant_ids":[],"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_enabled":true,"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":"Estimated to ship within 2 months","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,"shopify_market_ids":[],"use_shopify_selling_plan":true,"use_simplified_shipping_text":true,"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":"da
y","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,"acknowledgement_line_item_property_enabled":false,"acknowledgement_line_item_property_text":"Preorder Terms Accepted","preorder_min_quantity":null,"preorder_max_quantity":null,"countdown_timer_enabled":false,"schedule_offer":false,"schedule_start_date":null,"schedule_end_date":null,"updated_at":"2026-08-31T15:28:37.678Z","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,"batches_enabled":false,"preorder_batches":[]}],"disabled_plan_ids":[714631872895,713813721471,713176482175],"has_in_stock_offer":false,"has_preorder_offer":true,"read_flags":{},"cached_at":"2026-10-10T11:02:02Z"};
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(plan.updated_at);
const maxDate = max ? new Date(max) : null;
return (!maxDate || (planDate && !isNaN(planDate) && planDate > maxDate)) ? plan.updated_at : max;
}
return max;
}, '')
: null;
const cachedDate = new Date(cachedData.cached_at);
const maxDate = maxUpdatedAt ? n
ew Date(maxUpdatedAt) : null;
const useCached = !maxUpdatedAt || (cachedDate && !isNaN(cachedDate) && (!maxDate || cachedDate > maxDate));
if (useCached) {
if (Array.isArray(cachedData.plans)) {
window._RestockRocketConfig.sellingPlans = cachedData.plans;
window._RestockRocketConfig.disabledSellingPlanIds = cachedData.disabled_plan_ids || [];
console.debug('[RR] Using selling plans from cachedSellingPlans (cached_at: ' + cachedData.cached_at + ')');
}
} else {
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":"15c945
26-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: 7676720808162,
title: "Brooks Microfibre bar tape",
handle: "brooks-microfibre-bar-tape-black",
vendor: "ProjektRide",
tags: ["Grips \u0026 Bar-tape","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],
available: true,
options: ["Colour"],
selling_plan_groups: [],
featured_image: "\/\/projektride.co.uk\/cdn\/shop\/products\/Screenshot2022-04-10at11.20.21.png?v=1652171669\u0026width=800",
variants: [{
id: 42695182942434,
title: "Black",
available: true,
sku: "BT03000A15202",
price: 2499
},
{
id: 42695182975202,
title: "Honey",
available: false,
sku: "BT03000A15203",
price: 2499
}
]
};window._RestockRocketConfig.variantsInventoryPolicy = {42695182942434 : "deny",42695182975202 : "deny",};
window._RestockRocketConfig.variantsInventoryQuantity = {42695182942434 : 1,42695182975202 : 0,};
window._RestockRocketConfig.variantsPreorderCount = {42695182942434 : parseInt(null),42695182975202 : parseInt(null),};
window._RestockRocketConfig.variantsPreorderCountForMarket = {42695182942434 : null,42695182975202 : null,};
window._RestockRocketConfig.variantsPreorderMaxCount = {42695182942434 : parseInt(null),42695182975202 : parseInt(null),};
window._RestockRocketConfig.variantsPreorderMaxCountForMarket = {42695182942434 : null,42695182975202 : null,};
window._RestockRocketCon
fig.variantsShippingText = {42695182942434 : "",42695182975202 : "",};
window._RestockRocketConfig.variantsShippingTextForMarket = {42695182942434 : null,42695182975202 : null,};window._RestockRocketConfig.selected_variant_id = 42695182942434;
window._RestockRocketConfig.selected_variant_available = (window._RestockRocketConfig.product.variants.find(function(variant) { return variant.id == window._RestockRocketConfig.selected_variant_id }) || {}).available;
(function (c) {
c.cartInventoryQuantity = {};
function s(k, id, v) { if (v !== null) (c[k] = c[k] || {})[id] = v; }
function sm(k, id, v) { if (v !== null) ((c[k] = c[k] || {})[id] = {})[c.marketId] = v; }
function p(k, id, v) { if (v !== null) (c[k] = c[k] || []).push(id); }
})(window._RestockRocketConfig);
try {
var _sqCfg = window._RestockRocketConfig;
var _sqPlanEnabled = Array.isArray(_sqCfg.sellingPlans) &&
_sqCfg.sellingPlans.some(function (p) { return p && p.enabled; });
var _sqPreCount = _sqCfg.inlinePreorderIdsDropped ? _sqCfg.cachedPreorderVariantIdsCount : ((_sqCfg.cachedPreorderVariantIds &&
_sqCfg.cachedPreorderVariantIds.preorder_variant_ids) || []).length;
_sqCfg.preordersConfigured = !!(_sqPlanEnabled && _sqPreCount);
} catch (e) { }
try {
var _sqc = window._RestockRocketConfig;
var _sqOn = !(_sqc.cachedSettings && _sqc.cachedSettings.block_accelerated_checkout === false);
var _sqPre = (_sqc.cachedPreorderVariantIds &&
_sqc.cachedPreorderVariantIds.preorder_variant_ids) || [];
var _sqAlways = [];
var _sqAlwaysPlanIds = [];
var _sqGateAlloc = (_sqc.readFlags && _sqc.readFlags.enable_storefront_plan_offers === true && _sqc.variantSellingPlanIds) || null;
(Array.isArray(_sqc.sellingPlans) ? _sqc.sellingPlans : []).forEach(function (p) {
if (!(p && p.enabled && p.inventory_provider === 'always')) return;
_sqAlways = _sqAlways.concat(p.variant_ids || []);
if (_sqGateAlloc && p.variant_ids_truncated) {
_sqAlwaysPlanId
s.push(Number(p.shopify_selling_plan_id), Number(p.default_shopify_selling_plan_id));
(Array.isArray(p.payment_options) ? p.payment_options : []).forEach(function (o) { if (o) _sqAlwaysPlanIds.push(Number(o.shopify_selling_plan_id)); });
}
});
var _sqAllocAlways = function (id) {
var a = _sqGateAlloc && _sqGateAlloc[id];
return Array.isArray(a) && a.some(function (planId) { return planId && _sqAlwaysPlanIds.indexOf(Number(planId)) !== -1; });
};
var _sqArm = false;
if (_sqOn && (_sqc.preordersConfigured || _sqAlways.length || _sqAlwaysPlanIds.length)) {
if (_sqc.pageType === 'product' && _sqc.product && _sqc.product.variants) {
_sqArm = _sqc.product.variants.some(function (v) {
return _sqPre.indexOf(Number(v.id)) !== -1 || _sqAlways.indexOf(Number(v.id)) !== -1 || _sqAllocAlways(Number(v.id)) ||
(_sqc.inlinePreorderIdsDropped === true && (_sqc.variantsInventoryPolicy || {})[v.id] === 'continue' &&
(_sqc.variantsInve) {
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 &
&
!Object.prototype.hasOwnProperty.call(settings.translations, window._RestockRocketConfig.normalizedLocale)) {
console.debug('STOQ - locale not explicitly translated, will use default language from cache');
}
}
const updatedAt = new Date(settings.updated_at);
if (isNaN(updatedAt.getTime())) {
console.debug('STOQ - Invalid updated_at date format in settings');
return null;
}
const 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.crossOrigin = 'anonymous';
restockRocketScriptElement.onerror = function () {
restockRocketScriptElement.onerror = null;
const plainScriptElement = document.createElement('script');
plainScriptElement.setAttribute('defer', 'defer');
plainScriptElement.src = scriptUrl;
document.body.appendChild(plainScriptElement);
};
restockRocketScriptElement.src = scriptUrl;
document.body.appendChild(restockRocketScriptElement);
}
createRestockRocketContainer()
console.debug('STOQ - extension activated')
try {
const _stoqInitConfig = window._RestockRocketConfig;
const _stoqDetectedVariantIds = (_stoqInitConfig.product && Array.isArray(_stoqInitConfig.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.origin + window.location.pathname,
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 || '',
liquid_cache_age: _stoqInitConfig.liquidCacheAge,
inventory_policy: (_stoqInitConfig.variantsInventoryPolicy || {})[_stoqSelectedVariantId] || '',
inventory_quantity: (_stoqInitConfig.variantsInventoryQuantity || {})[_stoqSelectedVariantId],
});
} catch (e) {
console.debug('STOQ - stoq_initialized publish failed:', e);
}
try {
var _sqTrack = window._RestockRocketConfig;
if (_sqTrack.preordersConfigured) {
document.addEventListener('click', function (e) {
try {
var t = e.target;
if (!t || !t.closest) return;
var host = t.closest('.shopify-payment-button, shopify-payment-terms');
if (!host) return;
var channel = host.matches && host.matches('shopify-payment-terms')
? 'shop_pay_installments' : 'buy_now';
var form = host.closest('form');
var vidEl = form && form.querySelector('[name="id"]');
var variantId = (vidEl && vidEl.value) || _sqTrack.selected_variant_id || '';
var _sqVidNum = Number(variantId);
var _sqPlan = null;
var _sqPlans = Array.isArray(_sqTrack.sellingPlans) ? _sqTrack.sellingPlans : [];
var _sqMktId = Number(_sqTrack.marketId);
var _sqOffersOn = !!(_sqTrack.readFlags && _sqTrack.readFlags.enable_storefront_plan_offers === true);
var _sqAlloc = _sqOffersOn
? ((_sqTrack.offerAllocations && _sqTrack.offerAllocations[_sqVidNum]) ||
(_sqTrack.variantSellingPlanIds && _sqTrack.variantSellingPlanIds[_sqVidNum]))
: null;
var _sqPlanIds = function (pl)
{
var ids = [pl.shopify_selling_plan_id, pl.default_shopify_selling_plan_id];
(Array.isArray(pl.payment_options) ? pl.payment_options : []).forEach(function (o) { ids.push(o && o.shopify_selling_plan_id); });
return ids.filter(function (id) { return id != null; }).map(Number);
};
var _sqForVariant = function (pl) {
if (!pl || !pl.enabled) return false;
if (Array.isArray(_sqAlloc)) {
var ids = _sqPlanIds(pl);
return _sqAlloc.some(function (id) { return ids.indexOf(Number(id)) !== -1; });
}
return 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) {