GIFT WITH PURCHASE: Buy Sport Open Earbuds and select a Bose × Cadence Water Bottle in cart. While supplies last. Shop
`}function U(q){if(!q)return;let J=q.toLowerCase().trim().replace(/\.$/,"");if(!J)return;let Q=J.split(".").filter(Boolean);if(Q.length<2)return;if(Q[Q.length-2]!=="bose")return;if(Q.length===2)return"prod";let W=Q.slice(0,Q.length-2).join(".");if(!W||W==="www")return"prod";let Z=W.replaceAll(".","-");if(!p.test(Z)){k("Unable to derive valid environment from hostname",{hostname:q});return}return Z}function r(q){if(typeof document>"u")return null;if(!q||q==="body")return document.body;let J=document.querySelector(q);if(J instanceof HTMLElement)return J;return k(`Anchor not found for selector: ${q}`),null}function a(q){let J=new Map;if(!q)return J;let Q=q.split(",");for(let $ of Q){let[W,Z]=$.split(":");if(W&&Z){if(Z==="on")J.set(W,!0);else if(Z==="off")J.set(W,!1)}}return J}function T(q){if(!q)return{branch:null,experienceOverrides:""};let J=q.split(",").map((W)=>W.trim()),Q=J.filter((W)=>W.startsWith("@")),$=J.filter((W)=>!W.startsWith("@"));if(Q.length>1)throw Error("Multiple preview targets are not allowed");if(Q.length===1&&Q[0].length===1)throw Error("Invalid preview target");return{branch:Q[0]?.slice(1)||null,experienceOverrides:$.join(",")}}function e(){if(typeof window>"u")return;try{let J=new URLSearchParams(window.location.search).get("magic");if(J&&J.trim().length>0)return J}catch{return}return}function g(q,J,Q,$,W){let Z=new URLSearchParams;if(Z.set("pathname",J),Q)Z.set("magic",Q);if($)Z.set("environment",$);if(W)Z.set("preview",W);let D=q.trim();if(D.length===0)return`/api/v1/injections?${Z.toString()}`;try{let G=new URL(`${D}/api/v1/injections`);return G.search=Z.toString(),G.toString()}catch(G){return k("Invalid apiBaseUrl, falling back to relative URL",{apiBase:q,err:G}),`/api/v1/injections?${Z.toString()}`}}function qq(q,J,Q){let $=document.createElement("template");$.innerHTML=Q.trim();let W=$.content.firstChild;if(!W||!(W instanceof HTMLElement))return k("Failed to inject HTML: firstChild is not an HTMLElement",{firstChild:W}),null;let Z=W;if(k(`Injecting HTML with mode: ${J} into anchor:`,q),J==="append")q.appendChild(Z);else if(J==="prepend")q.insertBefore(Z,q.firstChild);else if(J==="before")q.parentNode?.insertBefore(Z,q);else if(J==="after")q.parentNode?.insertBefore(Z,q.nextSibling);else if(J==="replace")q.innerHTML="",q.appendChild(Z);return Z}function w(q){return`augmentor://experiences/${encodeURIComponent(q)}.js`}function b(q,J){if(!q.trim()||t.test(q))return q;let Q=q.trimEnd(),$=`//# sourceURL=${w(J)}`,W=Q.match(l);if(!W||W.index===void 0)return`${Q}
${$}`;let Z=W[1];return`${Q.slice(0,W.index).trimEnd()}
${$}
${Z}`}async function P(q,J,Q){if(!J||J.trim()==="")return;try{let $=b(J,Q),W=new Blob([$],{type:"text/javascript"}),Z=URL.createObjectURL(W);try{let D=await import(Z);if(typeof D.onMount==="function")k("Executing onMount for experience"),D.onMount(q);else k("No onMount function found in experience javascript")}finally{URL.revokeObjectURL(Z)}}catch($){console.error("[Magic Layer] Failed to execute experience javascript",$)}}function I(q,J,Q){let W=`/api/v1/react-loader/${encodeURIComponent(J)}.js`,Z=Q?`?preview=${encodeURIComponent(Q)}`:"",D=q.trim();if(D.length===0)return`${W}${Z}`;try{let G=new URL(W,`${D}/`);if(Q)G.searchParams.set("preview",Q);return G.toString()}catch(G){return k("Invalid apiBaseUrl for react bundle, falling back to relative path",{apiBase:q,err:G}),`${W}${Z}`}}async function Jq(q,J,Q,$){let W=I(J,Q,$),Z=_.get(W);if(!Z)Z=import(W),_.set(W,Z);try{let D=await Z;if(typeof D.mount==="function")D.mount(q);else k(`React bundle for ${Q} has no mount export`)}catch(D){_.delete(W),console.error("[Magic Layer] Failed to mount react experience",{experienceId:Q,bundleUrl:W,err:D})}}function Qq(){if(typeof window<"u"){let J=window.__BOSE_LOADER_API_BASE_URL;if(typeof J==="string"&&J.length>0)return J}return}function y(q){if(typeof window>"u")return;let J=e()??q?.magic,Q,$;try{({branch:Q,experienceOverrides:$}=T(J))}catch(f){console.error("[Magic Layer] Invalid preview link",f);return}let W=q?.apiBaseUrl??Qq()??B,Z=q?.pathname??window.location.pathname,D=U(window.location.hostname),G=a($);k("Initializing loader",{apiBase:W,pathname:Z,environment:D,magic:J,branch:Q});let N=g(W,Z,$||void 0,D,Q||void 0);k(`Fetching injections from: ${N}`),fetch(N,{credentials:"include"}).then(async function(K){if(k(`Response received: ${K.status} ${K.statusText}`),!K.ok){let z=await K.text().catch(()=>"");throw Error(`Failed to fetch injections: ${K.status}${z?` ${z}`:""}`)}return K.json()}).then(function(K){if(!Array.isArray(K)){k("Payload is not an array",K);return}k(`Processing ${K.length} injections`);for(let z=0;z GIFT WITH PURCHASE Looks good. Sounds amazing. Your life, your soundtrack, your Bose. Try it for 30 days to make sure it’s right for you. Shop confidently. We’ll match a lower price. On all in-stock orders of $49 or more. My Bose members receive welcome and birthday offers, exclusive experiences, and more.
Certified Refurbished Sale
Save up to 50% on like-new Bose products for a limited time.
Trending products
Fuel your flow
Purchase Sport Open Earbuds and select a complimentary Bose × Cadence Water Bottle in cart. While supplies last.
Cinema sound. Made simple.
From movie night to music listening, enjoy more with the Bose TV Speaker (2nd Gen).
Expand your everyday
More of the moment — not less. New Ultra Open Earbuds (2nd Gen).
Sound is Power
Why buy from Bose
30-day return policy
Price match promise
Complimentary shipping & returns
My Bose perks
Bose Automotive
True believers in the power of sound
Product Added to cart Extended warranty modal
