1(function(){"use strict";const CART_ENDPOINTS=["/cart/add"],config=window.tttInterceptorConfig||{},rules=Array.isArray(config.rules)?config.rules:[];if(!rules.length)return;const includedVariants=new Set((Array.isArray(config.includedVariantIds)?config.includedVariantIds:[]).map(String)),excludedVariants=new Set((Array.isArray(config.excludedVariantIds)?config.excludedVariantIds:[]).map(String));function isVariantAllowed(variantId){const id=String(variantId);return excludedVariants.has(id)?!1:includedVariants.size===0?!0:includedVariants.has(id)}const rule=rules[0],SOURCE_KEY=rule.sourceKey||"__kaching_bundles",SOURCE_VALUE=rule.sourceValue||"",STRIP_SOURCE_KEY=rule.stripSourceKey||!1,TTT_KEY=rule.replacementKey||"_ttt-offer-b",TTT_VALUE=rule.replacementValue||"True",ALWAYS_ADD=rule.alwaysAdd||!1,ONE_TIME_ONLY=rule.oneTimeOnly||!1;function isCartEndpoint(url){const str=(typeof url=="string"?url:url?.url)||"";return CART_ENDPOINTS.some(ep=>str.includes(ep))}function sourceMatches(val){return!SOURCE_VALUE||val===SOURCE_VALUE}function processFormData(fd){const variantId=fd.get("id")||fd.get("variant_id");if(variantId&&!isVariantAllowed(variantId))return{data:fd,modified:!1};if(ONE_TIME_ONLY){const sellingPlan=fd.get("selling_plan");if(sellingPlan&&sellingPlan!=="0"&&sellingPlan!=="")return{data:fd,modified:!1}}let modified=!1,foundSource=!1;const next=new FormData;for(const[key,val]of fd.entries())key===`properties[${SOURCE_KEY}]`&&sourceMatches(val)?(foundSource=!0,STRIP_SOURCE_KEY||next.append(key,val)):next.append(key,val);return(foundSource||ALWAYS_ADD)&&(next.append(`properties[${TTT_KEY}]`,TTT_VALUE),modified=!0),{data:next,modified}}function processJSON(bodyStr){let parsed;try{parsed=JSON.parse(bodyStr)}catch{return{data:bodyStr,modified:!1}}let modified=!1;const items=parsed.items??(parsed.id!==void 0?[parsed]:[]);for(const item of items){const variantId=item.id||item.variant_id;if(variantId&&!isVariantAllowed(variantId)||ONE_TIME_ONLY&&item.selling_plan&&String(item.selling_plan)!=="0")continue;const props=item.properties;props&&SOURCE_KEY in props&&sourceMatches(props[SOURCE_KEY])?(STRIP_SOURCE_KEY&&delete props[SOURCE_KEY],props[TTT_KEY]=TTT_VALUE,modified=!0):ALWAYS_ADD&&(item.properties||(item.properties={}),item.properties[TTT_KEY]=TTT_VALUE,modified=!0)}return{data:modified?JSON.stringify(parsed):bodyStr,modified}}function processURLEncoded(body){const params=typeof body=="string"?new URLSearchParams(body):body,variantId=params.get("id")||params.get("variant_id");if(variantId&&!isVariantAllowed(variantId))return{data:params,modified:!1};if(ONE_TIME_ONLY){const sellingPlan=params.get("selling_plan");if(sellingPlan&&sellingPlan!=="0"&&sellingPlan!=="")return{data:params,modified:!1}}let foundSource=!1;const next=new URLSearchParams;for(const[key,val]of params.entries())key===`properties[${SOURCE_KEY}]`&&sourceMatches(val)?(foundSource=!0,STRIP_SOURCE_KEY||next.append(key,val)):next.append(key,val);return(foundSource||ALWAYS_ADD)&&next.append(`properties[${TTT_KEY}]`,TTT_VALUE),{data:next,modified:foundSource||ALWAYS_ADD}}const _fetch=window.fetch.bind(window);window.fetch=function(input,init={}){if(!isCartEndpoint(input))return _fetch(input,init);const body=init.body;if(body instanceof FormData){const{data,modified}=processFormData(body);modified&&(init={...init,body:data})}else if(body instanceof URLSearchParams){const{data,modified}=processURLEncoded(body);modified&&(init={...init,body:data})}else if(typeof body=="string"){const firstChar=body.trim().charAt(0);if(firstChar==="{"||firstChar==="["){const jsonResult=processJSON(body);jsonResult.modified&&(init={...init,body:jsonResult.data})}else{const{data,modified}=processURLEncoded(body);modified&&(init={...init,body:data.toString()})}}return _fetch(input,init)};const _open=XMLHttpRequest.prototype.open,_send=XMLHttpRequest.prototype.send;XMLHttpRequest.prototype.open=function(method,url,...rest){return this._ttt_url=url,_open.call(this,method,url,...rest)},XMLHttpRequest.prototype.send=function(body){if(isCartEndpoint(this._ttt_url)){if(body instanceof FormData){const{data}=processFormData(body);
1return _send.call(this,data)}else if(body instanceof URLSearchParams){const{data}=processURLEncoded(body);return _send.call(this,data)}else if(typeof body=="string"){const firstChar=body.trim().charAt(0);if(firstChar==="{"||firstChar==="["){const jsonResult=processJSON(body);if(jsonResult.modified)return _send.call(this,jsonResult.data)}else{const{data,modified}=processURLEncoded(body);if(modified)return _send.call(this,data.toString())}}}return _send.call(this,body)}})(); 2//# sourceMappingURL=/cdn/shop/t/75/assets/ttt-network-interceptor.js.map?v=48042562520731941341788552055
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.