This site has limited support for your browser. We recommend switching to Edge, Chrome, Safari, or Firefox.
Wheels 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);
} else if(window._RestockRocketConfig.pageType === 'search' && (settings.show_button_on_search || settings.preorder_search_enabled)) {
createRestockRocketScript(window._RestockRocketConfig.scriptUrlCollection);
} else if(window._RestockRocketConfig.pageType === 'page' && (settings.show_button_on_p
See MoreatchEvent(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 selling plans:', error);
});
} else if (attempt I'm looking to find out more information about a product, where can I find this?
maxRetries) {
console.debug(`STOQ - API not ready, retry ${attempt}/${maxRetries}`);
setTimeout(() => attemptCartCheck(attempt + 1), retryDelay);
} else {
console.debug('STOQ - API not loaded after max retries, ski
roved protection and comfort\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eEyewear friendly:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eEyewear can easily be docked in specific slots of the helmet\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLED light compatibility:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003eIncrease safety and visibility by attaching the Universal Lazer LED at the rear of the helmet via the Direct Mount\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eLightweight:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e4% lighter than Lazer Tonic MIPS M CE\u003c\/li\u003e\n\u003cli\u003e\n\u003cstrong\u003eReduced plastics:\u003c\/strong\u003e\u003cspan\u003e \u003c\/span\u003e10g less plastics used than in Lazer Tonic MIPS M CE\u003c\/li\u003e\n\u003cli\u003eSizes: S 52 - 56cm \/ M 55 - 59cm \/ L 58 - 61cm \/ XL 61 - 64cm\u003c\/li\u003e\n\u003c\/ul\u003e\n\u003cp\u003eRated\u003cspan\u003e \u003c\/span\u003e\u003cb\u003e4\/5 stars\u003c\/b\u003e\u003cs
n 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_r
HMS","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,"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":8723980976354,"title":"Restrap Full Frame Bag - Large","handle":"restrap-full-frame-bag-large","description":"\u003cp class=\"text-muted my-2\" place
g buckles, keep the bag sitting securely and free of movement while riding.\u003cbr\u003e\u003cbr\u003eHand made in our Yorkshire workshop, all bags are finished with the classic Restrap label, made from vegan-friendly PU.\u003cbr\u003e\u003cbr\u003eSKU - RS_FFB_LRG_BLK\u003cbr\u003e\u003cbr\u003eWeight - 266g \/ 320g \/ 365g (small\/medium\/large)\u003cbr\u003eCapacity - 6L \/ 7.5L \/ 9L (small\/medium\/large)\u003cbr\u003e\u003cbr\u003e\u003cbr\u003e\u003c\/p\u003e","published_at":"2024-09-27T14:29:01+01:00","created_at":"2024-09-27T14:29:02+01:00","vendor":"Restrap","type":"bag","tags":["Frame bag","spo-cs-disabled","spo-default","spo-disabled","spo-notify-me-disabled"],"price":13999,"price_min":13999,"price_max":13999,"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":46007605723362,"title":"Default Title","option1":"Default Title","option2":null,"option3":null,"sku":null,"requires_shipping":true
stockrocket.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 - 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 age = Date.now() - updatedAt.getTime();
if (age
Bottles and Cages<label for="quantity--template--15326745395426__main">Quantity
>
< input type="number" name="quantity" id="quantity--template--15326745395426__main" value="1" min="1">
Locks
The Adventure Race Frame Bag is a durable and lightweight bag, ideal for ultra-distance racing and audax riding. Built to be practical and functional, an X21 technical waterproof outer, waterproof 6oz nylon inner lining and YKK aquaguard zips keep inclement weather at bay, whilst reflective detailing boosts visibility and safety when riding through the night.
A Hypalon pocket cover helps to shield the zips from downpours whilst a cut out towards the front of the bag allows for device cable routing to the front of the bike. Pockets on each side and internal velcro divider in the main pocket keep your essentials organised and easy to reach. An extra hidden cable slot is also provided at the front of the bag for dynamo and other device cables.MudguardsSKU - RS_RFB_STD_BLK
Capacity - 3L
Contact Us
<
a class="product__media product__media--featured"
href="/collections/all-products/products/life-systems-pocket-first-aid-kit-hire"
title="Life Systems Pocket First Aid Kit - HIRE"
aria-label="Life Systems Pocket First Aid Kit - HIRE"
style="background-image: url(//projektride.co.uk/cdn/shop/files/Screenshot2022-02-24at21.18.22_5c0e6e2d-1913-4fd1-a90d-b486895960b6_600x.png?v=1691610357)">
Don't let a puncture bring your ride to a standstill. Available in a handy travel-sized pouch it can be kept in a jersey pocket or pannier bag, including everything you need to get you rolling again.
Glueless Patches (25mm)
1x Sandpaper
Travel Size - Can be kept inside a jersey pocket, tool bottle or saddle bag!
Perfect for bike packing, touring, and gravel bike adventures! Available online or from our bike shop in Edinburgh.
Please get in touch with a member of the team either by phone (01313745324) or email ([email protected]) where on of the team will be more than happy to help.
ProjektRide Bike Shop Edinburgh
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.
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 -