importScripts( 'https://storage.googleapis.com/workbox-cdn/releases/6.4.1/workbox-sw.js' ); let localStorageData = { cdns: [], disableCDN: true, }; // yandere sim big files, cuphead, ddlc assets, renpy, renpy, buckshot roulette, half life, undertale & deltarune, hollow knight let cacheable_files = ["YandereSim.data", "cuphead/Build/Build.data.unityweb.", "/ddlc/game/", "/ddlcplus/game/", "/co09/game/", "/co09flipside/game/", "/co09reup/game/", "renpy.data", "game.zip", "buckshot-roulette.pck", "halva_en-", "game.unx", "bog.data", "FTFHAPort.data.unityweb", "Content.tar.part", "thats-not-my-neighbor.pck", ".unityweb", "index.data.path"]; let no_long_cache_dirs = ["deltarune"]; function isNoLongCachePath(pathname) { return no_long_cache_dirs.some(dir => pathname.includes(`/${dir}/`)); } self.addEventListener("message", e => { if (e.data && e.data.type == "localStorage") { localStorageData = e.data; } }); if (workbox) { self.skipWaiting(); workbox.core.clientsClaim(); self.addEventListener("activate", event => { event.waitUntil( caches.open('resources-cache').then(cache => cache.keys().then(requests => Promise.all( requests .filter(req => isNoLongCachePath(new URL(req.url).pathname)) .map(req => cache.delete(req)) ) ) ) ); }); workbox.routing.registerRoute( ({ url }) => { if (!url.pathname.includes("/resources/")) return false; return isNoLongCachePath(url.pathname); }, new workbox.strategies.NetworkFirst({ cacheName: 'resources-cache-nocache-exceptions', networkTimeoutSeconds: 10, plugins: [ new workbox.expiration.ExpirationPlugin({ maxEntries: 300, maxAgeSeconds: 60 * 60, }), ], }) ); workbox.routing.registerRoute( ({ url }) => { if (localStorageData.disableCDN) return false; if (localStorageData.cdns.length == 0) return false; if (url.origin != location.origin) return false; if (!url.pathname.includes("/resources/")) return false; for (const file of cacheable_files) { if (url.pathname.includes(file)) return true; } return false; }, async ({ url }) => { let cdn = localStorageData.cdns[0]; console.warn(url.href); return Response.redirect(cdn + url.pathname, 302); } ); workbox.routing.registerRoute( /\.(?:png|gif|jpg|jpeg|svg|webp|avif|gif)$/, new workbox.strategies.CacheFirst({ cacheName: 'images-cache', plugins: [ new workbox.expiration.ExpirationPlugin({ maxEntries: 1200, maxAgeSeconds: 365 * 24 * 60 * 60, }), ], }) ); workbox.routing.registerRoute( /.*resources\/(semag|sppa).*/, new workbox.strategies.CacheFirst({ cacheName: 'resources-cache', plugins: [ new workbox.expiration.ExpirationPlugin({ maxEntries: 700, maxAgeSeconds: 365 * 24 * 60 * 60, }), ], }) ); workbox.routing.registerRoute( /.*resources\/(games|apps)\.json$/, new workbox.strategies.StaleWhileRevalidate({ cacheName: 'json-cache', plugins: [ new workbox.expiration.ExpirationPlugin({ maxAgeSeconds: 3 * 60 * 60, maxEntries: 2, }), ], }) ); };