summaryrefslogtreecommitdiff
path: root/client-web/source/sw/init.ts
blob: d082038cd66bc0ecad9a8d6bfff9ae2476a3589e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
    This file is part of keks-meet (https://codeberg.org/metamuffin/keks-meet)
    which is licensed under the GNU Affero General Public License (version 3); see /COPYING.
    Copyright (C) 2022 metamuffin <metamuffin@disroot.org>
*/
/// <reference lib="dom" />

import { log } from "../logger.ts"

export let SW: ServiceWorker | undefined
export async function init_serviceworker() {
    let reg = await globalThis.navigator.serviceWorker.getRegistration()
    if (reg) {
        log("sw", "service worker already installed")
    } else {
        log("sw", "registering service worker")
        await globalThis.navigator.serviceWorker.register("/sw.js", { scope: "/", type: "module" })
        log("sw", "worker installed")
        reg = await globalThis.navigator.serviceWorker.getRegistration();
        if (!reg) throw new Error("we just registered the sw!?");
    }
    const i = setInterval(() => {
        if (reg!.active) {
            SW = reg!.active
            clearInterval(i)
        }
    }, 100)
}

export async function update_serviceworker() {
    const regs = await globalThis.navigator.serviceWorker.getRegistrations()
    for (const r of regs) await r.unregister()
    log("sw", "cleared all workers")
    setTimeout(() => window.location.reload(), 500)
}