PageSourceSearch

https://www.bdtk1.vip/sw.js?env=

js bdtk1.vip collected 2026-09-24 13:54:01 UTC 5,276 bytes, 1 lines download raw bytes

1const SW_VERSION="29609",isProd=(location.search||"").includes("production"),MERCHANT=new URLSearchParams(location.search).get("merchant"),DB_NAME="tc-app",DB_VERSION=1,STORE_NAME="storage",DOMAIN_ROUTE_URL="/wps/system/domainRoute?device=4",DOMAIN_ROUTE_INTERVAL=18e4,DOMAIN_ROUTE_LOCK_TTL=2e4,NAVIGATION_TIMEOUT=2e4,STORAGE_KEY_DOMAIN_ROUTE="domainRoute",STORAGE_KEY_LAST_REFRESH="domainRouteLastRefresh",STORAGE_KEY_REFRESH_LOCK="domainRouteRefreshLock",CACHE_NAME="spa-offline-v1-29609",PING_URL="/common/v.1.0.1/ping.json",PING_TIMEOUT=2e4,PING_5XX_RETRIES=2,PING_RETRY_DELAY_MS=2e3,OFFLINE_URL="localhost"===location.hostname?"/offline.html":"/m/offline.html",NAVIGATION_PATHS=["/","/index","/index.html"],CRYPTOJS_CDN_URL="https://cdn.jsdelivr.net/npm/[email protected]/crypto-js.js";let dbPromise=null;function getDB(){return dbPromise||(dbPromise=new Promise((e,t)=>{const o=parseInt(1,10)||1,n=indexedDB.open(DB_NAME,o);n.onerror=()=>t(n.error),n.onsuccess=()=>{const t=n.result;t.onversionchange=()=>{t.close(),dbPromise=null},t.onclose=()=>{dbPromise=null},e(t)},n.onupgradeneeded=e=>{const t=e.target.result;t.objectStoreNames.contains("storage")||t.createObjectStore("storage")}})),dbPromise}async function getOfflineFallback(){return await caches.match(OFFLINE_URL)||new Response("Service Unavailable",{status:503,headers:{"Content-Type":"text/plain"}})}async function isDomainHealthy(){if("localhost"===location.hostname)return!0;for(let e=1;e<=3;e++)try{const t=await Promise.race([fetch(PING_URL,{cache:"no-store"}),new Promise((e,t)=>setTimeout(()=>t(new Error("timeout")),2e4))]);if(200===t.status){const e=await t.json();return 0===Object.keys(e).length}if(t.status>=500&&t.status<600){if(e<3){await new Promise(e=>setTimeout(e,2e3));continue}return!1}return!1}catch{return!1}return!1}async function tryAcquireDomainRouteRefresh(){const e=await getDB(),t=Date.now(),o=self.registration.scope;return new Promise(n=>{const r=e.transaction(["storage"],"readwrite"),a=r.objectStore("storage");r.oncomplete=()=>n(!1),r.onerror=()=>n(!1);const s=a.get("domainRouteRefreshLock");s.onsuccess=()=>{const e=s.result,i=a.get("domainRouteLastRefresh");i.onsuccess=()=>{const s=i.result;"number"==typeof s&&t-s<18e4||e&&"number"==typeof e.until&&e.until>t||(a.put({scope:o,until:t+2e4},"domainRouteRefreshLock"),r.oncomplete=()=>n(!0))}}})}async function releaseDomainRouteRefreshLock(){const e=(await getDB()).transaction(["storage"],"readwrite"),t=e.objectStore("storage");return t.delete("domainRouteRefreshLock"),t.put(Date.now(),"domainRouteLastRefresh"),new Promise((t,o)=>{e.oncomplete=()=>t(),e.onerror=()=>o(e.error)})}async function fetchAndCacheDomainRoute(){try{const e=await Promise.race([fetch(DOMAIN_ROUTE_URL,{headers:{Merchant:MERCHANT},cache:"no-store"}),new Promise((e,t)=>setTimeout(()=>t(new Error("timeout")),2e4))]);if(!e.ok)throw new Error(`status: ${e.status}`);const t=await e.json();if(!t.value)throw new Error(`not valid json: ${JSON.stringify(t)}`);await storeData("domainRoute",t,!1),console.debug("[SW] domain-config updated")}catch(e){console.warn("[SW] domain-config fetch failed:",e.message)}}async function storeData(e,t,o=!1){const n=(await getDB()).transaction(["storage"],"readwrite"),r=n.objectStore("storage");if(o){if(await new Promise((t,o)=>{const n=r.get(e);n.onsuccess=()=>t(n.result),n.onerror=()=>o(n.error)}))return!1}return r.put(t,e),await new Promise((e,t)=>{n.oncomplete=()=>e(),n.onerror=()=>t(n.error)}),!0}async function runDomainRouteRefreshIfAcquired(){if(await tryAcquireDomainRouteRefresh())try{await fetchAndCacheDomainRoute()}finally{await releaseDomainRouteRefreshLock()}}runDomainRouteRefreshIfAcquired(),setInterval(runDomainRouteRefreshIfAcquired,18e4),self.addEventListener("install",e=>{e.waitUntil(caches.open(CACHE_NAME).then(async e=>{await e.add(CRYPTOJS_CDN_URL).catch(()=>{console.warn("[SW] crypto-js CDN cache failed, will serve from network on demand")});const t=await fetch(OFFLINE_URL,{cache:"no-store"});if(!t.ok)throw new Error(`offline.html fetch failed: ${t.status}`);await e.put(OFFLINE_URL,t)}
1)),self.skipWaiting()}),self.addEventListener("activate",e=>{e.waitUntil(caches.keys().then(e=>Promise.all(e.map(e=>{if(e!==CACHE_NAME)return caches.delete(e)})))),e.waitUntil(self.clients.claim())}),self.addEventListener("fetch",e=>{if(e.request.url!==CRYPTOJS_CDN_URL){if(e.request.url.startsWith(self.location.origin)&&"navigate"===e.request.mode){const t=new URL(e.request.url);if(!NAVIGATION_PATHS.some(e=>t.pathname===e))return;e.respondWith((async()=>{if(!await isDomainHealthy())return console.warn("[SW] Ping check failed, serving fallback"),getOfflineFallback();try{const t=await Promise.race([fetch(e.request),new Promise((e,t)=>setTimeout(()=>t(new Error("timeout")),2e4))]);if(!t.ok)return console.warn(`[SW] Unhealthy status ${t.status}, serving fallback`),getOfflineFallback();return(await t.clone().text()).includes("var brand")?t:(console.warn("[SW] Response body invalid, serving fallback"),getOfflineFallback())}catch{return getOfflineFallback()}})())}}else e.respondWith(caches.match(CRYPTOJS_CDN_URL).then(t=>t||fetch(e.request).then(e=>(caches.open(CACHE_NAME).then(t=>t.put(CRYPTOJS_CDN_URL,e.clone())).catch(()=>console.warn("[SW] crypto-js cache.put failed")),e))))});

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.