UNPKG

@arkade-os/sdk

Version:

Bitcoin wallet SDK with Taproot and Ark integration

52 lines (51 loc) 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DEFAULT_DB_NAME = void 0; exports.setupServiceWorker = setupServiceWorker; exports.DEFAULT_DB_NAME = "arkade-service-worker"; /** * setupServiceWorker sets up the service worker. * @param path - the path to the service worker script * @example * ```typescript * const serviceWorker = await setupServiceWorker("/service-worker.js"); * ``` */ async function setupServiceWorker(path) { // check if service workers are supported if (!("serviceWorker" in navigator)) { throw new Error("Service workers are not supported in this browser"); } // register service worker const registration = await navigator.serviceWorker.register(path); // force update to ensure the service worker is active await registration.update(); const serviceWorker = registration.active || registration.waiting || registration.installing; if (!serviceWorker) { throw new Error("Failed to get service worker instance"); } // wait for the service worker to be ready return new Promise((resolve, reject) => { if (serviceWorker.state === "activated") return resolve(serviceWorker); const onActivate = () => { cleanup(); resolve(serviceWorker); }; const onError = () => { cleanup(); reject(new Error("Service worker failed to activate")); }; const timeout = setTimeout(() => { cleanup(); reject(new Error("Service worker activation timed out")); }, 10000); const cleanup = () => { navigator.serviceWorker.removeEventListener("activate", onActivate); navigator.serviceWorker.removeEventListener("error", onError); clearTimeout(timeout); }; navigator.serviceWorker.addEventListener("activate", onActivate); navigator.serviceWorker.addEventListener("error", onError); }); }