{"id":"c1412","filename":"c1412_digigraf_p4_verify_offline_p5_push.dok.json","weise3_id":"WEISE3::76e3ef73d54691a873fb2c25e89d422a3e7bda18a13ecde72b9ede0498f5b51c","tip":"implementacija","naziv":"Digigraf P4+P5 — verify offline fallback + SW Push Notifications","kreator":"genesis","datum":"2026-06-15T10:37:33.771143+00:00","snippet":"","status":"","prev_weise3":"","bunker_l":"#00d4ff","full":{"tip":"implementacija","naziv":"Digigraf P4+P5 — verify offline fallback + SW Push Notifications","sto_treba":"verify.html dobiva 10s timeout + SW cache fallback + retry. sw.js dobiva push/notificationclick/sync handlere. Genesis API dobiva VAPID push endpointe.","faze":[{"naziv":"P4 — verify/ offline fallback","status":"GOTOVO","dokaz":"curl /verify/TEST123 → 13 match (retry-btn + AbortController + showOfflineMsg)","implementacija":{"fajl":"tahograf-mvp/pwa/verify.html","promjene":["AbortController + 10s timeout → abort na isteku","caches.match(apiUrl) → offline badge render iz SW cache-a",".retry-btn via event delegation (bez globalnih varijabli)","auto-retry na window.online event","Poruka: BPZ-9 L3 pecet — vjerujte QR-u i bez mreze (ZAKON 33 + ZAKON 43)","showOfflineMsg() + renderResult(d, fromCache=true) dvostruki path"]}},{"naziv":"P5 — SW Push Notifications","status":"GOTOVO","dokaz":"curl https://genesis.limit-connect.com/api/v1/tahoseal/push/vapid-key → vapidPublicKey OK","implementacija":{"fajl_sw":"tahograf-mvp/pwa/sw.js","cache_name":"digigraf-v39 (20260615c)","sw_handleri":["push: showNotification(title, {body, icon, badge, vibrate, data})","notificationclick: clients.openWindow(data.url || /app)","sync (tag=sync-tahoseal): postMessage SW_SYNC svim klijentima"],"fajl_api":"api/tahoseal.py","vapid":{"algo":"P-256 (SECP256R1)","public_key":"BEe1GHZRoxYk8eHMNXKJpx0ZMDmCXCi01r2X_IOW2-Ape1-Vk4WQryFs8KuILns0jXIMR8SxOTI2AmRAhOl33y8","private":"tahograf-mvp/vapid_private.b64 (gitignored, na EU+DE serveru)","public_git":"tahograf-mvp/vapid_public.b64"},"endpointi":["GET  /api/v1/tahoseal/push/vapid-key  → vapidPublicKey za browser subscription","POST /api/v1/tahoseal/push/subscribe  → pohrani {driver_wid, endpoint, keys}","POST /api/v1/tahoseal/push/send       → pošalji push (broadcast ili po driver_wid)"],"pohrana_subscriptions":"/var/www/genesis/storage/tahoseal/push_subscriptions.json","library":"pywebpush (auto-cleanup 410 Gone expired subscriptions)","zakon_41":"W3C Push API — browser-native, nema tudjeg clouda"}}],"zakon":["ZAKON 33 — Offline is Default","ZAKON 41 — Nema tudjeg alata (W3C Push API)","ZAKON 43 — Krunica offline verifikacija (BPZ-9 L3 QR)"],"commit":"a790b1bb","server":["EU (digigraf.online nginx)","DE (genesis API :8010)"],"datum":"2026-06-15T10:37:33.771143+00:00","weise3_id":"WEISE3::76e3ef73d54691a873fb2c25e89d422a3e7bda18a13ecde72b9ede0498f5b51c","bunker_seal_id":""}}