Skip to content
  • local_shipping 👇Free shipping on orders under $80👇

Menu

  • Home
  • Prime Protein
  • Contact
Log in
    • Home
    • Prime Protein
    • Contact
    Equip
    Log in Cart

    Your cart is empty

    Continue shopping

    Have an account?

    Log in to check out faster.

    Cart 鈥?0 items

    Cart reserved for

    Loading...

    Assign upsell products in block settings

    Subtotal$0.00

    Search

    Subscribe to our emails

    Join our email list for exclusive offers and the latest news.

    Quick links

    • Search
    • Privacy Policy
    • Refund Policy
    • Shipping Policy
    • Terms of Service

    Subscribe to our emails

    Payment methods
    © 2026, Equip Powered by Shrine
    • Choosing a selection results in a full page refresh.
    • Opens in a new window.
    function ensureSafesPayJumpOverlay() { var overlay = document.querySelector('[data-safes-pay-jump-overlay]'); if (overlay) return overlay; overlay = document.createElement('div'); overlay.className = 'safes-pay-jump-overlay'; overlay.setAttribute('data-safes-pay-jump-overlay', ''); overlay.setAttribute('aria-hidden', 'true'); overlay.setAttribute('aria-live', 'polite'); overlay.setAttribute('hidden', ''); overlay.style.setProperty('display', 'none', 'important'); var card = document.createElement('div'); card.className = 'safes-pay-jump-card'; var loader = document.createElement('div'); loader.className = 'safes-pay-jump-loader'; loader.setAttribute('aria-hidden', 'true'); var image = document.createElement('img'); image.setAttribute('data-safes-pay-jump-img', ''); image.setAttribute('data-src', JUMP_LOADING_URL); image.setAttribute('alt', ''); image.setAttribute('loading', 'eager'); loader.appendChild(image); var text = document.createElement('div'); text.className = 'safes-pay-jump-text'; text.textContent = 'Loading secure checkout...'; card.appendChild(loader); card.appendChild(text); overlay.appendChild(card); document.body.appendChild(overlay); return overlay; } function showSafesPayJumpOverlay() { var overlay = ensureSafesPayJumpOverlay(); var image = overlay.querySelector('[data-safes-pay-jump-img]'); if (image && !image.getAttribute('src')) image.setAttribute('src', image.getAttribute('data-src') || ''); overlay.removeAttribute('hidden'); overlay.style.setProperty('display', 'flex', 'important'); overlay.classList.add('is-active'); overlay.setAttribute('aria-hidden', 'false'); document.body.classList.add('safes-pay-jump-lock'); } function hideSafesPayJumpOverlay() { var overlay = document.querySelector('[data-safes-pay-jump-overlay]'); if (!overlay) return; overlay.classList.remove('is-active'); overlay.setAttribute('aria-hidden', 'true'); overlay.style.setProperty('display', 'none', 'important'); overlay.setAttribute('hidden', ''); document.body.classList.remove('safes-pay-jump-lock'); } function clearSafesPayJumpOverlayTimer() { if (!jumpOverlayTimer) return; clearTimeout(jumpOverlayTimer); jumpOverlayTimer = null; } function scheduleSafesPayJumpOverlay() { if (!running) return; if (!jumpStartedAt) jumpStartedAt = Date.now(); if (jumpOverlayTimer) return; var remaining = Math.max(0, JUMP_OVERLAY_DELAY_MS - (Date.now() - jumpStartedAt)); jumpOverlayTimer = setTimeout(function () { jumpOverlayTimer = null; if (running) showSafesPayJumpOverlay(); }, remaining); } function resetSafesPayJumpState() { running = false; jumpStartedAt = 0; clearSafesPayJumpOverlayTimer(); hideSafesPayJumpOverlay(); document.querySelectorAll('[data-safes-pay-button][aria-busy="true"], [data-safes-pay-buy-now][aria-busy="true"]').forEach(function (button) { if (typeof setBusy === 'function') setBusy(button, false); else button.removeAttribute('aria-busy'); }); } window.addEventListener('pageshow', function () { setTimeout(resetSafesPayJumpState, 0); }); window.addEventListener('pagehide', function () { clearSafesPayJumpOverlayTimer(); hideSafesPayJumpOverlay(); }); function safesPayTraceId() { return 'sp_' + Date.now().toString(36) + '_' + Math.random().toString(36).slice(2, 8); } async function safesPayHashPayload(input) { try { var text = typeof input === 'string' ? input : JSON.stringify(input || {}); if (!window.crypto || !window.crypto.subtle || !window.TextEncoder) return text.slice(0, 120); var bytes = new TextEncoder().encode(text); var digest = await window.crypto.subtle.digest('SHA-256', bytes); return Array.from(new Uint8Array(digest)).map(function (b) { return b.toString(16).padStart(2, '0'); }).join(''); } catch (e) { return ''; } } function reportSafesPayCheckout(stage, status, extra) { try { var payload = Object.assign({ appId: APP_ID, stage: stage, status: status, sourceUrl: location.href, shop: window.Shopify && Shopify.shop ? Shopify.shop : location.hostname, userTime: new Date().toISOString() }, extra || {}); var body = JSON.stringify(payload); var url = GATEWAY_URL + '/api/public/checkout-client-report'; if (navigator.sendBeacon) { navigator.sendBeacon(url, new Blob([body], { type: 'application/json' })); return; } fetch(url, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Gateway-App-Id': APP_ID }, body: body, keepalive: true }).catch(function () {}); } catch (e) {} } async function fetchWithTimeout(url, options, timeoutMs, stage, reportExtra) { var controller = window.AbortController ? new AbortController() : null; var timeoutId = null; var didTimeout = false; var requestOptions = Object.assign({}, options || {}); if (controller) requestOptions.signal = controller.signal; var timeoutPromise = new Promise(function (_, reject) { timeoutId = setTimeout(function () { didTimeout = true; if (controller) controller.abort(); reject(new Error(stage + ' timed out after ' + timeoutMs + 'ms')); }, timeoutMs); }); try { return await Promise.race([ fetch(url, requestOptions), timeoutPromise ]); } catch (error) { var status = didTimeout || error.name === 'AbortError' ? 'TIMEOUT' : 'NETWORK_ERROR'; reportSafesPayCheckout(stage, status, Object.assign({ error: error.message || String(error) }, reportExtra || {})); if (stage === 'cart_intake') { throw new Error('Payment gateway is taking too long. Please refresh or switch network and try again.'); } if (stage === 'sign_cart') { throw new Error('Checkout connection is taking too long. Please refresh and try again.'); } throw error; } finally { if (timeoutId) clearTimeout(timeoutId); } } function safesPayAttribution() { var keys = [ 'gclid', 'gbraid', 'wbraid', 'dclid', 'msclkid', 'fbclid', 'fbc', 'fbp', 'ttclid', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content' ]; var stored = {}; try { stored = JSON.parse(localStorage.getItem('safes_pay_attribution') || '{}'); } catch (e) {} var params = new URLSearchParams(window.location.search); keys.forEach(function (key) { var value = params.get(key); if (value) stored[key] = value; }); if (!stored.landingPage) stored.landingPage = window.location.href; stored.sourceUrl = window.location.href; stored.referrer = document.referrer || stored.referrer || ''; try { localStorage.setItem('safes_pay_attribution', JSON.stringify(stored)); } catch (e) {} return { gclid: stored.gclid || '', gbraid: stored.gbraid || '', wbraid: stored.wbraid || '', dclid: stored.dclid || '', msclkid: stored.msclkid || '', fbclid: stored.fbclid || '', fbc: stored.fbc || '', fbp: stored.fbp || '', ttclid: stored.ttclid || '', utmSource: stored.utm_source || '', utmMedium: stored.utm_medium || '', utmCampaign: stored.utm_campaign || '', utmTerm: stored.utm_term || '', utmContent: stored.utm_content || '', landingPage: stored.landingPage || '', sourceUrl: stored.sourceUrl || window.location.href, referrer: stored.referrer || document.referrer || '' }; } safesPayAttribution(); function buttonBox(button) { return button.closest('.cart__ctas, .product-form__buttons, form, .cart-notification__links, .drawer__footer') || button.parentElement; } function messageBox(button) { var box = buttonBox(button); if (!box) return null; var message = box.querySelector('.safes-pay-message'); if (!message) { message = document.createElement('div'); message.className = 'safes-pay-message'; message.setAttribute('aria-live', 'polite'); button.insertAdjacentElement('afterend', message); } return message; } function setBusy(button, busy) { button.disabled = busy; button.setAttribute('aria-busy', busy ? 'true' : 'false'); } async function getCart() { var res = await fetch('/cart.js', { credentials: 'same-origin' }); if (!res.ok) throw new Error('Cannot read cart.'); return res.json(); } function buildIdempotencyKey(cart) { var itemsKey = (cart.items || []).map(function (item) { return item.key + ':' + item.quantity; }).join('|'); return [ cart.token || 'cart', cart.total_price || 0, itemsKey ].join(':'); } async function addCurrentProductToCart(button) { var form = button.closest("form[action*='/cart/add']") || document.querySelector("form[action*='/cart/add']"); if (!form) throw new Error('Product form not found.'); var variantInput = form.querySelector("[name='id']"); var quantityInput = form.querySelector("[name='quantity']"); var variantId = variantInput && variantInput.value; var quantity = quantityInput && quantityInput.value ? Number(quantityInput.value) : 1; var bundleItems = getSelectedBundleItems(button); if (!bundleItems.length && !variantId) throw new Error('Product variant not found.'); var res = await fetch('/cart/add.js', { method: 'POST', headers: { 'Content-Type': 'application/json' }, credentials: 'same-origin', body: JSON.stringify({ items: bundleItems.length ? bundleItems : [ { id: Number(variantId), quantity: quantity || 1 } ] }) }); if (!res.ok) throw new Error('Add to cart failed.'); return res.json(); } function getSelectedBundleItems(button) { var container = button.closest('.product__info-container') || button.closest('[id^=\"MainProduct-\"]') || document; var offer = container.querySelector('main-bundle-offer'); if (!offer) return []; var selectedInputs = Array.prototype.slice.call( offer.querySelectorAll('.bundle-deals__checkbox-js:checked') ); if (!selectedInputs.length) return []; var counts = {}; selectedInputs.forEach(function (input) { var variantId = Number(input.getAttribute('data-id') || input.value || 0); if (!variantId) return; counts[variantId] = (counts[variantId] || 0) + 1; }); return Object.keys(counts).map(function (variantId) { return { id: Number(variantId), quantity: counts[variantId] }; }); } async function startCheckout(button) { var message = messageBox(button); if (message) message.textContent = ''; var cart = await getCart(); if (!cart.items || !cart.items.length) throw new Error('Cart is empty.'); var traceId = safesPayTraceId(); var idempotencyKey = buildIdempotencyKey(cart); var attribution = safesPayAttribution(); var payload = { appId: APP_ID, traceId: traceId, idempotencyKey: idempotencyKey, shop: window.Shopify && Shopify.shop ? Shopify.shop : location.hostname, cart_token: cart.token, currency: cart.currency || 'USD', total_price: cart.total_price, items: cart.items, sourceUrl: window.location.href, landingPage: attribution.landingPage, referrer: document.referrer || attribution.referrer, attribution: attribution }; var rawBody = JSON.stringify(payload); var signPayloadHash = await safesPayHashPayload(rawBody); reportSafesPayCheckout('sign_cart_start', 'START', { traceId: traceId, signPayloadHash: signPayloadHash }); var signRes = await fetchWithTimeout('/apps/gateway/sign-cart', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: rawBody }, SIGN_TIMEOUT_MS, 'sign_cart', { traceId: traceId, signPayloadHash: signPayloadHash }); if (!signRes.ok) { reportSafesPayCheckout('sign_cart', 'SIGN_FAILED', { traceId: traceId, signHttpStatus: signRes.status, signPayloadHash: signPayloadHash, error: 'sign-cart http ' + signRes.status }); throw new Error('Checkout failed. Please try again.'); } reportSafesPayCheckout('sign_cart', 'OK', { traceId: traceId, signHttpStatus: signRes.status, signPayloadHash: signPayloadHash }); var sign = await signRes.json(); var checkoutPayloadHash = signPayloadHash; reportSafesPayCheckout('cart_intake_start', 'START', { traceId: traceId, signPayloadHash: signPayloadHash, checkoutPayloadHash: checkoutPayloadHash, payloadConsistent: signPayloadHash === checkoutPayloadHash }); var checkoutRes = await fetchWithTimeout(INTAKE_URL, { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-Gateway-App-Id': APP_ID, 'X-Gateway-Timestamp': sign.timestamp, 'X-Gateway-Signature': sign.signature, 'X-Gateway-Idempotency-Key': idempotencyKey }, body: rawBody }, INTAKE_TIMEOUT_MS, 'cart_intake', { traceId: traceId, signPayloadHash: signPayloadHash, checkoutPayloadHash: checkoutPayloadHash, signHttpStatus: signRes.status, payloadConsistent: signPayloadHash === checkoutPayloadHash }); if (!checkoutRes.ok) { reportSafesPayCheckout('cart_intake', 'CHECKOUT_FAILED', { traceId: traceId, signPayloadHash: signPayloadHash, checkoutPayloadHash: checkoutPayloadHash, signHttpStatus: signRes.status, checkoutHttpStatus: checkoutRes.status, payloadConsistent: signPayloadHash === checkoutPayloadHash, error: 'cart-intake http ' + checkoutRes.status }); throw new Error('Checkout failed. Please try again.'); } var checkout = await checkoutRes.json(); reportSafesPayCheckout('cart_intake', 'OK', { traceId: traceId, sessionId: checkout.sessionId || '', signPayloadHash: signPayloadHash, checkoutPayloadHash: checkoutPayloadHash, signHttpStatus: signRes.status, checkoutHttpStatus: checkoutRes.status, payloadConsistent: signPayloadHash === checkoutPayloadHash }); var redirectUrl = checkout.redirectUrl || checkout.bsite_shopify_checkout_url || checkout.checkoutUrl; if (!redirectUrl) { reportSafesPayCheckout('redirect_prepare', 'CHECKOUT_URL_MISSING', { traceId: traceId, sessionId: checkout.sessionId || '', signPayloadHash: signPayloadHash, checkoutPayloadHash: checkoutPayloadHash, payloadConsistent: signPayloadHash === checkoutPayloadHash, error: 'Checkout URL missing.' }); throw new Error('Checkout URL missing.'); } reportSafesPayCheckout('redirect_start', 'OK', { traceId: traceId, sessionId: checkout.sessionId || '', signPayloadHash: signPayloadHash, checkoutPayloadHash: checkoutPayloadHash, payloadConsistent: signPayloadHash === checkoutPayloadHash, redirectAttempted: true, checkoutUrl: redirectUrl }); scheduleSafesPayJumpOverlay(); setTimeout(function () { window.location.href = redirectUrl; }, 80); } document.addEventListener('click', async function (event) { var buyNowButton = event.target.closest('[data-safes-pay-buy-now]'); var checkoutButton = event.target.closest('[data-safes-pay-button]'); var button = buyNowButton || checkoutButton; if (!button || running) return; event.preventDefault(); event.stopPropagation(); event.stopImmediatePropagation(); running = true; jumpStartedAt = Date.now(); setBusy(button, true); scheduleSafesPayJumpOverlay(); try { if (buyNowButton) { await addCurrentProductToCart(button); } await startCheckout(button); } catch (error) { clearSafesPayJumpOverlayTimer(); hideSafesPayJumpOverlay(); var message = messageBox(button); if (message) message.textContent = error.message || 'Checkout failed. Please try again.'; jumpStartedAt = 0; setBusy(button, false); running = false; } }, true); })();