PageSourceSearch

https://christydawn.com/service_worker.js

js christydawn.com collected 2026-09-24 19:40:46 UTC 11,676 bytes, 1 lines download raw bytes

1!function(e){"use strict";const t=[".fudge.city",".cf.local",".fudge.local"],n=new URL(self.serviceWorker.scriptURL).host,r=(e=>{const n=t.find((t=>e.endsWith(t)));if(n)return e.replace(n,"").replaceAll("_",".")})(n),a=(...e)=>{r&&console.log("[Service Worker]",performance.now(),...e)},o=new Map;let s=(e=21)=>crypto.getRandomValues(new Uint8Array(e)).reduce(((e,t)=>e+=(t&=63)<36?t.toString(36):t<62?(t-26).toString(36).toUpperCase():t>62?"-":"_"),"");const c=async(e,t,n)=>{const r=o.get(e);if(!r)return void a("No page");const{pageGroupId:c,sessionId:i,deviceId:d,pageLoadId:u,windowId:h}=r.metadata;if(!h)return void a("No windowId");if(!i)return void a("No sessionId");if(!d)return void a("No deviceId");a("trackEvent",{...n,type:t});const l=s(),f={type:26,timestamp:Date.now(),id:l,data:{...n,type:t}};await fetch(`https://mocha.fudge.ai/events?teamId=${r.metadata.teamId}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({pageLoadId:u,deviceId:d,windowId:h,sessionId:i,version:"sw",pageGroupId:c,mochaEnabled:!0,href:r.url,events:[f]})})},i=new Map,d=async(e,t,n)=>{const r=i.get(e)||[];r.push({type:t,data:n}),i.set(e,r)},u=new Map,h=async()=>caches.open("prefetch-document"),l=e=>{const t=new Date(e.headers.get("SW-Cached-At")||0).getTime();return Date.now()-t>12e4},f=async(e,t)=>{const n=await h(),r=await n.match(e);return r?l(r)?(c(t,"clear_prefetch_document_cache",{count:1,reason:"expired"}),await n.delete(e),null):r:null},p=async(e,t)=>{const n=e.url;if(u.has(n))return;if(await f(e.url,t.clientId))return;const r=fetch(e.url,{credentials:"include",headers:{purpose:"prefetch",accept:"text/html,application/xhtml+xml,application/xml"},referrer:e.referrer,redirect:"manual"}),a={id:s(),startedAt:Date.now(),fromPath:t.path,fromPageLoadId:t.metadata.pageLoadId,type:e.prefetchType};c(t.clientId,"prefetch_start",{url:e.url,prefetchType:e.prefetchType,prefetchId:a.id,...e.eventMetadata}),u.set(n,{promise:r,metadata:a});try{const t=await r.then((e=>e.clone()));if(t.ok){const n=new Headers(t.headers);n.set("Cache-Control","max-age=60, private"),n.set("SW-Cached-At",(new Date).toISOString()),n.set("SW-Metadata",JSON.stringify(a)),n.set("SW-Fetch-Duration",""+(Date.now()-a.startedAt));const r=new Response(t.body,{...t,headers:n}),o=await h();await o.put(e.url,r)}}catch(e){}u.delete(n)},m=e=>{const t=e.headers.get("X-Fudge-Request-Id")?.split(",")?.map((e=>e.trim()));if(t)return t[t.length-1]},g=new Map,y=(e,t,n)=>{if(!n)return;const r=t-e.startedAt;g.set(n,{fromPath:e.fromPath,fromPageLoadId:e.fromPageLoadId,prefetchType:e.type,timeSaved:r,wasPending:!0,prefetchId:e.id})},w=e=>{let t;try{t=JSON.parse(e.headers.get("SW-Metadata"))}catch(e){return}const n=parseInt(e.headers.get("SW-Fetch-Duration"));if(isNaN(n))return;const r=m(e);r&&g.set(r,{fromPageLoadId:t.fromPageLoadId,fromPath:t.fromPath,prefetchType:t.type,timeSaved:n,wasPending:!1,prefetchId:t.id})},I=async(e,t)=>{let n;try{n=await(async(e,t)=>{const n=e.url;a("Document prefetch fetch event",n);const r=u.get(n);if(r){const t=Date.now();return r.promise.then((n=>{if(n.ok){const e=m(n);return y(r.metadata,t,e),n.clone()}return fetch(e)})).catch((t=>(a("Error awaiting promise",n,t),fetch(e))))}a("Check cache",n);const o=await f(e,t);return o?(w(o),a("Found cached response",n),o):(a("No cached response",n),fetch(e))})(e,t.clientId)}catch(t){n=await fetch(e)}return n},v=async e=>{const t=(e=>{if(e.resultingClientId.length>0&&"document"===e.request.destination&&e.isReload)return"reload";const t=e.request;if("GET"===t.method||"HEAD"===t.method)return;const r=new URL(t.url);return r.host!==n||r.pathname.startsWith("/cdn-cgi")||r.pathname.startsWith("/~fudge")?void 0:"non-get request"})(e);t&&e.waitUntil((async(e,t)=>{a("Clearing prefetch document cache. Reason: ",e);const n=await h(),r=await n.keys(),o=[];for(const e of r){const t=await n.match(e);t&&l(t)&&o.push(e)}await Promise.all(r.map((e=>n.delete(e))));const s=r.filter((e=>!o.includes(e)));s.length>0&&d(t.resultingClientId,"clear_prefetch_document_cache",{count:s.length,reason:e,all:!0}),o.length>0&&d(t.resultingClientId,"clear_prefetch_document_cache",{count:o.length,reason:"expired",all:!0})})(t,e))},b=new Map,E=e=>{if(!e)throw new Error("clientId is required");return b.has(e)||b.set(e,{inMemoryCache:new Map,nativeCache:new Map}),b.get(e)},L=(e,t,n)=>{(async()=>{const e=await self.clients.matchAll({type:"window"}).then((e=>e.map((e=>e.id)))),t=Array.from(b.keys()).filter((t=>!e.includes(t)));for(const e of t)b.delete(e)})(),S(),o.set(t,{url:n,path:new URL(n).pathname,metadata:e.metadata,clientId:t,timestamp:performance.now(),fudgeEnabled:e.fudgeEnabled}),a("Initialised",t,e.metadata);const r=g.get(e.metadata.pageLoadId);r&&c(t,"prefetch_use",r);const s=i.get(t);if(s?.length){for(const e of s)c(t,e.type,e.data);i.delete(t)}},S=async()=>{const e=await self.clients.matchAll({type:"window"}).then((e=>e.map((e=>e.id)))),t=Array.from(o.keys()).filter((t=>!e.includes(t)));for(const e of t)o.delete(e)};function R(e){return function(e){return!!e.request.ttlSec&&Date.now()-e.fetchedAt>1e3*e.request.ttlSec}(e)||function(e){return e.usesLeft<=0}(e)}function M(e,t){const n=e.get(t);return!!n&&(!!R(n)&&(e.delete(t),!0))}setInterval((()=>{b.forEach((e=>{function t(e){e.forEach(((t,n)=>{R(t)&&e.delete(n)}))}
1t(e.inMemoryCache),t(e.nativeCache)}))}),1e4);const q=()=>"undefined"==typeof performance?Date.now():performance.now(),C=async(e,t,n)=>{let r=q();const o=await A(e,t);if(n){const{onFetchProgress:e,onFetchComplete:t,onFirstByte:a}=n;a(q()-r),(async()=>{try{const n=o.clone().body;if(!n)return void t();const r=n.getReader();let a=0;for(;;){const{done:n,value:o}=await r.read();if(n){t();break}a+=o.length,e(a)}}catch(e){t()}})()}if(await clients.get(t)&&o.ok&&e.prefetchFromBody?.length){const t=await o.clone().json(),n=await caches.open("v1");for(let r of e.prefetchFromBody){"string"==typeof r&&(r=[r]);const e=T(t,r);a("Adding to cache from body",r,e),await n.addAll(e)}}},P=e=>{const t=[e.method||"GET",e.url];return e.body&&t.push(e.body),t.join("-")},A=async(e,t)=>{const n=E(t),r=P(e);a("Prefetch (in memory)",r);const o=fetch(e.url,{method:e.method,headers:{...e.headers,"x-fudge-sub-resource":"true"},body:e.body});return n.inMemoryCache.set(r,{response:o,fetchedAt:Date.now(),request:e,usesLeft:e.uses??1}),o},T=(e,t)=>{const[n,...r]=t,a=e[n];return null==a?[]:"string"==typeof a?[a]:Array.isArray(a)?a.flatMap((e=>T(e,r))):"object"==typeof a?T(a,r):[]},W={queueRequests:!1,promise:null},F=["document","iframe",""],U=e=>{try{return new URL(e.url).hostname===n&&"navigate"!==e.mode}catch(e){return!1}};self.addEventListener("install",(function(){self.skipWaiting()})),self.addEventListener("activate",(function(e){e.waitUntil(self.clients.claim())}));const k={enabled:!1};class x extends Error{constructor(e){super(`Unreachable case: ${e}`)}}const G={};self.addEventListener("message",(e=>{const t=e.source.id,r=e.data;if(r&&"type"in r)if("init"===r.type)L(r,t,e.source.url);else if("prefetch"===r.type)C(r,t);else if("relay-headers"===r.type)(async(e,t,n)=>{W.queueRequests=!0;const r=new URL(n);r.searchParams.set("_frh","1");const a=fetch(r.toString(),{method:"POST",body:e.relay});W.promise=a,await a,W.queueRequests=!1})(r,0,e.source.url);else if("prefetch-document"===r.type){const e=o.get(t);if(!e)return;p(r,e)}else if("prefetch-predictive"===r.type)(async e=>{const t=o.get(e);if(!t)return;const r=(await fetch(`https://${n}/~fudge/prefetch/prediction?path=${encodeURIComponent(t.path)}`).then((e=>e.json()))).outcomes;if(Array.isArray(r))for(const e of r){const r=new URL(e.path,`https://${n}`).href;p({type:"prefetch-document",url:r,prefetchType:"predictive",eventMetadata:{probability:e.probability},referrer:void 0},t)}})(t);else if("prefetch-groups"===r.type)(async(e,t,n)=>{await(async()=>{const n={};for(const r of e.resourceGroups){const o=e.resourceGroups.indexOf(r),s=`${o+1}/${e.resourceGroups.length}`;a(`Start prefetching group ${s}`);const c={};let i=0;await Promise.all(r.map(((s,d)=>{let u;"fetch"===s.type&&"GET"!==s.method&&(u=s.body);let h,l="GET";return"fetch"===s.type&&s.method&&(l=s.method),"fetch"===s.type&&s.headers&&(h=s.headers),new Promise((f=>{let p=performance.now();C({type:"prefetch",url:s.url,uses:3,body:u,method:l,headers:h},t,{onFetchComplete:f,onFetchProgress:e=>{if(!s.content_length)return;if(i!==r.length)return;const t=Object.values(n),a=t.reduce(((e,t)=>e+t),0)/t.length,o=e/(performance.now()-p),u=(s.content_length-e)/o;c[d]=u,Math.max(...Object.values(c))<1.1*a+100&&f()},onFirstByte:t=>{i++,0===o&&(t=Date.now()-e.timeOrigin),n[s.url]=t}}).catch((e=>{a(`Error while prefetching ${s.url}`,e),f()}))}))}))),a(`Finished prefetching group ${s}`)}})().finally((()=>{n.source?.postMessage({type:"prefetch-groups-finished"})}))})(r,t,e);else if("externalised-urls"===r.type)Object.assign(G,r.urls);else{if("init-bc-prerender"!==r.type)throw new x(r);k.enabled=!0}}));const _=(e,t)=>e.waitUntil(self.clients.get(e.clientId).then((e=>{console.log("postMessage",t),e?.postMessage(t)})));self.addEventListener("fetch",(function(e){const t=e.clientId,s=e.request;let c;if(v(e),k.enabled&&U(s)&&!["GET","HEAD"].includes(s.method)){a("same origin",s.method,s.url);const{pathname:t}=new URL(e.request.url);t.includes("/cart/add")||t.includes("/cart/update")||"/cart.php"===t?_(e,{type:"bc-add-to-cart"}):t.includes("~fudge")||_(e,{type:"bc-clear-checkout-prefetch"})}const i=o.get(t);if(U(s)){const e=new Headers(s.headers);i&&i.metadata&&(e.set("X-Fudge-Page-Load-Id",i.metadata.pageLoadId),i.timestamp&&e.set("X-Fudge-Page-Timestamp",Math.round(performance.now()-i.timestamp).toString()),i.metadata.windowId&&e.set("X-Fudge-Window-Id",i.metadata.windowId),i.metadata.pageGroupId&&e.set("X-Fudge-Page-Group-Id",i.metadata.pageGroupId),i.metadata.sessionId&&e.set("X-Fudge-Session-Id",i.metadata.sessionId),null!=i.fudgeEnabled&&e.set("X-Fudge-Enabled",i.fudgeEnabled?"true":"false")),"GET"===s.method&&e.set("X-Fudge-Sub-Resource","true"),c={headers:e,referrer:s.referrer}}if(!1===i?.fudgeEnabled)return c?e.respondWith(fetch(s,c)):void 0;if((e=>e.resultingClientId.length>0&&"document"===e.request.destination)(e))return e.respondWith(I(s,e));if((e=>{if(!e.request.referrer)return!1;const t=new URL(e.request.referrer).hostname;return!!new URL(e.request.url).hostname.startsWith(t)&&!!F.includes(e.request.destination)&&W.queueRequests})(e))return e.respondWith((async e=>(await W.promise,fetch(e)))(s));const d=((e,t)=>{if("GET"!==e.method&&"POST"!==e.method)return;const n=E(t),r=P({url:e.url,method:e.method});return Array.from(n.inMemoryCache.keys()).find((e=>e.startsWith(r)))?(async()=>{let t;if("GET"!==e.method){const n=await e.clone().json().catch((()=>{}));
1t=JSON.stringify(n)}const r=P({url:e.url,method:e.method,body:t}),o=n.inMemoryCache.get(r);if(o){if(!M(n.inMemoryCache,r))return o.usesLeft-=1,M(n.inMemoryCache,r),o.response.then((e=>e.clone()));a("Not returning: Match purged",r)}})():void 0})(s,t);if(d)return e.respondWith(d.catch((()=>fetch(s,c))).then((e=>(!1===e?.ok&&a("Error: Not ok",e.status,e.statusText,s.url),e&&e.ok?e:fetch(s,c)))));const u=G[s.url];if("GET"!==s.method||!u)return(e=>{const t=new URL(e.url);return null!=r&&t.host===r})(s)?e.respondWith((async(e,t)=>{const r=new URL(e.url);r.host=n;const a={duplex:"half"};for(const t in e)a[t]=e[t];const o=new Request(r.toString(),a);return fetch(o,t)})(s,c)):c?e.respondWith(fetch(s,c)):void 0;{const t=`https://${n}/_external?url=${encodeURIComponent(s.url)}&h=${u}`,r={duplex:"half"};for(const e in s)r[e]=s[e];const a=fetch(new Request(t,r),c);e.respondWith(a.catch((()=>fetch(s,c))))}})),e.postMessage=_,e.serveExternal=G}({});

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.