From f514b227989ec2a7c5aa2bf1059446a4c87fe3a1 Mon Sep 17 00:00:00 2001 From: pavlov346346-source Date: Mon, 14 Sep 2026 02:49:05 +0300 Subject: [PATCH] feat: load trial promo developer UI in production PWA --- public/service-worker.js | 62 +++++++--------------------------------- 1 file changed, 11 insertions(+), 51 deletions(-) diff --git a/public/service-worker.js b/public/service-worker.js index 7b64893..97bb8d7 100644 --- a/public/service-worker.js +++ b/public/service-worker.js @@ -1,60 +1,20 @@ -const CACHE='sun-catering-pwa-v81-20260912-account-center-loader'; -const VERSION='20260912-account-center-loader'; +const CACHE='sun-catering-pwa-v82-20260914-trial-promo'; +const VERSION='20260914-trial-promo'; const CORE=[ './','./index.html', - `./core/sun-safe.js?v=${VERSION}`,`./core/performance.js?v=${VERSION}`,`./core/account-center-v1780.js?v=${VERSION}`,`./core/login-signature-v1776.js?v=${VERSION}`,`./core/data-layer-v1773.js?v=${VERSION}`,`./core/server-automation-v1770.js?v=${VERSION}`,`./core/hotfix-v1763.js?v=${VERSION}`,`./core/ops-ux-v1762.js?v=${VERSION}`,`./core/ux-fixes-v1764.js?v=${VERSION}`,`./core/pdf-engine.js?v=${VERSION}`,`./core/classic-offer-pdf-v1767.js?v=${VERSION}`,`./core/developer-console-v1768.js?v=${VERSION}`,`./core/offer-workspace-v1769.js?v=${VERSION}`,`./core/auth-security-v1774.js?v=${VERSION}`,`./core/order-enhancements-v1775.js?v=${VERSION}`,`./legacy/bootstrap.js?v=${VERSION}`,`./app-runtime.js?v=${VERSION}`, + `./core/sun-safe.js?v=${VERSION}`,`./core/performance.js?v=${VERSION}`,`./core/account-center-v1780.js?v=${VERSION}`,`./core/login-signature-v1776.js?v=${VERSION}`,`./core/data-layer-v1773.js?v=${VERSION}`,`./core/server-automation-v1770.js?v=${VERSION}`,`./core/hotfix-v1763.js?v=${VERSION}`,`./core/ops-ux-v1762.js?v=${VERSION}`,`./core/ux-fixes-v1764.js?v=${VERSION}`,`./core/pdf-engine.js?v=${VERSION}`,`./core/classic-offer-pdf-v1767.js?v=${VERSION}`,`./core/developer-console-v1768.js?v=${VERSION}`,`./core/trial-promo-developer-v181.js?v=${VERSION}`,`./core/offer-workspace-v1769.js?v=${VERSION}`,`./core/auth-security-v1774.js?v=${VERSION}`,`./core/order-enhancements-v1775.js?v=${VERSION}`,`./legacy/bootstrap.js?v=${VERSION}`,`./app-runtime.js?v=${VERSION}`, './offer-gallery/001.jpg','./offer-gallery/002.jpg', './catalog/001.jpg','./catalog/002.jpg','./catalog/003.jpg', './sun-logo.png','./caterium-login-logo.png','./caterium-mark-light.svg','./pwa-icon-192.png','./pwa-icon-512.png','./manifest.webmanifest', './offer-templates/thumb-light.jpg','./offer-templates/thumb-editorial-grid.jpg','./offer-templates/thumb-midnight-glass.jpg','./offer-templates/thumb-emerald-gold.jpg' ]; const CRITICAL_FRESH=new Set([ - '/core/sun-safe.js', - '/core/performance.js', - '/core/account-center-v1780.js', - '/core/login-signature-v1776.js', - '/core/auth-security-v1774.js', - '/legacy/bootstrap.js', - '/app-runtime.js' + '/core/sun-safe.js','/core/performance.js','/core/account-center-v1780.js','/core/login-signature-v1776.js','/core/auth-security-v1774.js','/core/trial-promo-developer-v181.js','/legacy/bootstrap.js','/app-runtime.js' ]); -self.addEventListener('install',event=>{ - event.waitUntil(caches.open(CACHE).then(cache=>cache.addAll(CORE)).then(()=>self.skipWaiting())); -}); -self.addEventListener('activate',event=>{ - event.waitUntil(caches.keys().then(keys=>Promise.all(keys.filter(k=>k.startsWith('sun-catering-pwa-')&&k!==CACHE).map(k=>caches.delete(k)))).then(()=>self.clients.claim())); -}); -function cachePut(req,res){ - if(res&&res.ok){const clone=res.clone();caches.open(CACHE).then(c=>c.put(req,clone)).catch(()=>{});}return res; -} -function networkFirst(req,fallback){ - return fetch(req,{cache:'no-store'}).then(res=>cachePut(req,res)).catch(()=>caches.match(req).then(hit=>hit||caches.match(fallback||req))); -} -function forceFresh(req){ - const url=new URL(req.url); - url.searchParams.set('__caterium_release',VERSION); - return fetch(url.toString(),{cache:'no-store',credentials:'same-origin'}).then(res=>cachePut(req,res)).catch(()=>caches.match(req)); -} -async function withAccountCenter(res){ - if(!res)return res; - const type=String(res.headers.get('content-type')||''); - if(!type.includes('text/html'))return res; - const html=await res.text(); - if(html.includes('core/account-center-v1780.js'))return new Response(html,{status:res.status,statusText:res.statusText,headers:res.headers}); - const tag=``; - const out=html.includes('')?html.replace('',`${tag}`):html+tag; - const headers=new Headers(res.headers);headers.set('content-type','text/html; charset=utf-8');headers.set('cache-control','no-store, max-age=0'); - return new Response(out,{status:res.status,statusText:res.statusText,headers}); -} -self.addEventListener('fetch',event=>{ - const req=event.request;if(req.method!=='GET')return; - const url=new URL(req.url);if(url.pathname.startsWith('/api/'))return; - if(req.mode==='navigate'){ - event.respondWith(fetch(req,{cache:'no-store'}).then(async res=>{const clone=res.clone();caches.open(CACHE).then(c=>c.put('./index.html',clone)).catch(()=>{});return withAccountCenter(res)}).catch(async()=>withAccountCenter(await caches.match('./index.html'))));return; - } - if(CRITICAL_FRESH.has(url.pathname)){ - event.respondWith(forceFresh(req));return; - } - const freshAsset=/\.(?:js|css|webmanifest)$/i.test(url.pathname); - if(freshAsset){event.respondWith(networkFirst(req));return;} - event.respondWith(caches.match(req).then(cached=>cached||fetch(req,{cache:'no-store'}).then(res=>cachePut(req,res)))); -}); +self.addEventListener('install',event=>{event.waitUntil(caches.open(CACHE).then(cache=>cache.addAll(CORE)).then(()=>self.skipWaiting()));}); +self.addEventListener('activate',event=>{event.waitUntil(caches.keys().then(keys=>Promise.all(keys.filter(k=>k.startsWith('sun-catering-pwa-')&&k!==CACHE).map(k=>caches.delete(k)))).then(()=>self.clients.claim()));}); +function cachePut(req,res){if(res&&res.ok){const clone=res.clone();caches.open(CACHE).then(c=>c.put(req,clone)).catch(()=>{});}return res;} +function networkFirst(req,fallback){return fetch(req,{cache:'no-store'}).then(res=>cachePut(req,res)).catch(()=>caches.match(req).then(hit=>hit||caches.match(fallback||req)));} +function forceFresh(req){const url=new URL(req.url);url.searchParams.set('__caterium_release',VERSION);return fetch(url.toString(),{cache:'no-store',credentials:'same-origin'}).then(res=>cachePut(req,res)).catch(()=>caches.match(req));} +async function withRequiredModules(res){if(!res)return res;const type=String(res.headers.get('content-type')||'');if(!type.includes('text/html'))return res;const html=await res.text(),tags=[];if(!html.includes('core/account-center-v1780.js'))tags.push(``);if(!html.includes('core/trial-promo-developer-v181.js'))tags.push(``);const out=tags.length?(html.includes('')?html.replace('',`${tags.join('')}`):html+tags.join('')):html;const headers=new Headers(res.headers);headers.set('content-type','text/html; charset=utf-8');headers.set('cache-control','no-store, max-age=0');return new Response(out,{status:res.status,statusText:res.statusText,headers});} +self.addEventListener('fetch',event=>{const req=event.request;if(req.method!=='GET')return;const url=new URL(req.url);if(url.pathname.startsWith('/api/'))return;if(req.mode==='navigate'){event.respondWith(fetch(req,{cache:'no-store'}).then(async res=>{const clone=res.clone();caches.open(CACHE).then(c=>c.put('./index.html',clone)).catch(()=>{});return withRequiredModules(res)}).catch(async()=>withRequiredModules(await caches.match('./index.html'))));return;}if(CRITICAL_FRESH.has(url.pathname)){event.respondWith(forceFresh(req));return;}const freshAsset=/\.(?:js|css|webmanifest)$/i.test(url.pathname);if(freshAsset){event.respondWith(networkFirst(req));return;}event.respondWith(caches.match(req).then(cached=>cached||fetch(req,{cache:'no-store'}).then(res=>cachePut(req,res))));});