{"version":3,"file":"index.mjs","sources":["../../../../notificare-logger/dist/esm/index.js","../../../../notificare-push/dist/sw/esm/index.js"],"sourcesContent":["var LogLevel;\n(function (LogLevel) {\n    LogLevel[LogLevel[\"DEBUG\"] = 0] = \"DEBUG\";\n    LogLevel[LogLevel[\"INFO\"] = 1] = \"INFO\";\n    LogLevel[LogLevel[\"WARNING\"] = 2] = \"WARNING\";\n    LogLevel[LogLevel[\"ERROR\"] = 3] = \"ERROR\";\n})(LogLevel || (LogLevel = {}));\nclass Logger {\n    constructor(name) {\n        this.logLevel = LogLevel.INFO;\n        this.name = name;\n        // Keep track of the logger instances to update them from global\n        // logging methods.\n        instances.push(this);\n    }\n    getLogLevel() {\n        return this.logLevel;\n    }\n    setLogLevel(logLevel) {\n        if (typeof logLevel === 'string') {\n            this.logLevel = logLevelStringConverter[logLevel];\n            return;\n        }\n        this.logLevel = logLevel;\n    }\n    debug(...args) {\n        this.log(LogLevel.DEBUG, ...args);\n    }\n    info(...args) {\n        this.log(LogLevel.INFO, ...args);\n    }\n    warning(...args) {\n        this.log(LogLevel.WARNING, ...args);\n    }\n    error(...args) {\n        this.log(LogLevel.ERROR, ...args);\n    }\n    log(logLevel, ...args) {\n        if (logLevel < this.logLevel)\n            return;\n        const now = new Date().toISOString();\n        const method = consoleMethodConverter[logLevel];\n        const format = this.logLevel >= LogLevel.INFO\n            ? `[${now}] [${this.name}]`\n            : `[${now}] [${this.name}] [${logLevelToStringConverter[logLevel]}]`;\n        // eslint-disable-next-line no-console\n        console[method](format, ...args);\n    }\n}\nfunction setLogLevel(logLevel) {\n    instances.forEach((instance) => instance.setLogLevel(logLevel));\n}\n/**\n * A container for all logger instances.\n */\nconst instances = [];\nconst logLevelStringConverter = {\n    debug: LogLevel.DEBUG,\n    info: LogLevel.INFO,\n    warning: LogLevel.WARNING,\n    error: LogLevel.ERROR,\n};\nconst logLevelToStringConverter = {\n    [LogLevel.DEBUG]: 'debug',\n    [LogLevel.INFO]: 'info',\n    [LogLevel.WARNING]: 'warning',\n    [LogLevel.ERROR]: 'error',\n};\nconst consoleMethodConverter = {\n    [LogLevel.DEBUG]: 'log',\n    [LogLevel.INFO]: 'info',\n    [LogLevel.WARNING]: 'warn',\n    [LogLevel.ERROR]: 'error',\n};\n\nexport { LogLevel, Logger, setLogLevel };\n//# sourceMappingURL=index.js.map\n","import { Logger } from '@notificare/logger';\n\nconst serviceWorkerLogger = new Logger('notificare/push/sw');\n\nfunction sleep(milliseconds) {\n    return new Promise((resolve) => {\n        setTimeout(resolve, milliseconds);\n    });\n}\n\nlet hasReadyClients = false;\nfunction onMessage(event) {\n    if (!event.data)\n        return;\n    try {\n        switch (event.data.action) {\n            case 're.notifica.ready':\n                hasReadyClients = true;\n                break;\n            default:\n                serviceWorkerLogger.warning('Unknown service worker message event: ', event);\n        }\n    }\n    catch (e) {\n        serviceWorkerLogger.error('Failed to process a service worker message event: ', e);\n    }\n}\nasync function onPush(event) {\n    var _a, _b, _c, _d, _e;\n    if (!event.data) {\n        serviceWorkerLogger.warning('The push event contained no data. Skipping...');\n        return;\n    }\n    let workerNotification;\n    try {\n        workerNotification = event.data.json();\n    }\n    catch (e) {\n        serviceWorkerLogger.error('Unable to parse the push event data.');\n        // TODO: Consider preserving the v2 'workerpush' post message.\n        return;\n    }\n    serviceWorkerLogger.info(workerNotification);\n    if (workerNotification['x-sender'] !== 'notificare') {\n        serviceWorkerLogger.debug('Processing an unknown notification.');\n        // TODO: consider sending the event to the worker instead.\n        const clients = await self.clients.matchAll();\n        clients.forEach((client) => {\n            client.postMessage({\n                cmd: 'unknownpush',\n                message: workerNotification,\n            });\n        });\n        return;\n    }\n    const notification = workerNotification;\n    if (notification.system) {\n        serviceWorkerLogger.debug('Processing a system notification.', notification);\n        // TODO: consider sending the event to the worker instead.\n        const clients = await self.clients.matchAll();\n        clients.forEach((client) => {\n            client.postMessage({\n                cmd: 'system',\n                message: workerNotification,\n            });\n        });\n        return;\n    }\n    const clients = await self.clients.matchAll();\n    clients.forEach((client) => {\n        client.postMessage({\n            cmd: 'notificationreceive',\n            message: workerNotification,\n        });\n    });\n    if (!notification.push || !notification.alert) {\n        // Silent notification.\n        return;\n    }\n    const { badge } = notification;\n    if (badge) {\n        if (navigator.setAppBadge)\n            navigator.setAppBadge(badge);\n        if (navigator.setClientBadge)\n            navigator.setClientBadge(badge);\n    }\n    const title = (_b = (_a = notification.alertTitle) !== null && _a !== void 0 ? _a : notification.application) !== null && _b !== void 0 ? _b : '';\n    let { icon } = notification;\n    // When the browser doesn't support the image attribute, use the attachment as the icon when available.\n    if (!('image' in Notification.prototype) && ((_c = notification.attachment) === null || _c === void 0 ? void 0 : _c.uri)) {\n        icon = notification.attachment.uri;\n    }\n    const options = {\n        tag: notification.id,\n        body: notification.alert,\n        icon,\n        image: (_d = notification.attachment) === null || _d === void 0 ? void 0 : _d.uri,\n        requireInteraction: notification.requireInteraction,\n        renotify: notification.renotify,\n        actions: (_e = notification.actions) === null || _e === void 0 ? void 0 : _e.map((action) => ({\n            // eslint-disable-next-line no-underscore-dangle\n            action: action._id,\n            title: action.label,\n            icon: action.icon,\n        })),\n        data: notification,\n    };\n    await self.registration.showNotification(title, options);\n}\nasync function onNotificationClick(event) {\n    event.notification.close();\n    await ensureOpenWindowClient();\n    const clients = await self.clients.matchAll({ type: 'window' });\n    if (!clients.length) {\n        serviceWorkerLogger.error('Unable to process the notification click without an active client.');\n        throw new Error('Unable to process the notification click without an active client.');\n    }\n    const client = clients[0];\n    if (event.action) {\n        client.postMessage({\n            cmd: 'notificationreply',\n            notification: event.notification.data,\n            action: event.action,\n        });\n    }\n    else {\n        client.postMessage({\n            cmd: 'notificationclick',\n            notification: event.notification.data,\n        });\n    }\n    try {\n        await client.focus();\n    }\n    catch (e) {\n        serviceWorkerLogger.error('Failed to focus client: ', client, e);\n    }\n}\nasync function ensureOpenWindowClient() {\n    const clients = await self.clients.matchAll({ type: 'window' });\n    if (clients.length) {\n        if (hasReadyClients)\n            return;\n        await waitForOpenWindowClient();\n        return;\n    }\n    // Reset the readiness state in case the service worker instance is reused across\n    // application restarts, when it used to be ready.\n    hasReadyClients = false;\n    // const url = event.notification.data.urlFormatString.replace(\"%@\", event.notification.tag);\n    await self.clients.openWindow('/');\n    await waitForOpenWindowClient();\n}\nasync function waitForOpenWindowClient() {\n    const clients = await self.clients.matchAll({ type: 'window' });\n    if (clients.length && hasReadyClients)\n        return;\n    await sleep(1000);\n    await waitForOpenWindowClient();\n}\n\nself.addEventListener('install', (event) => {\n    serviceWorkerLogger.debug('Service worker installed.');\n    event.waitUntil(self.skipWaiting()); // Activate worker immediately.\n    // NOTE: without this install + activate setup, the service worker controller\n    // will not be available on the website to send post messages to the worker.\n});\nself.addEventListener('activate', (event) => {\n    serviceWorkerLogger.debug('Service worker activated.');\n    event.waitUntil(self.clients.claim()); // Become available to all pages.\n    // NOTE: without this install + activate setup, the service worker controller\n    // will not be available on the website to send post messages to the worker.\n});\nself.addEventListener('message', (event) => {\n    serviceWorkerLogger.debug('Handling a service worker message event.');\n    onMessage(event);\n});\nself.addEventListener('push', (event) => {\n    serviceWorkerLogger.debug('Handling a push notification event.');\n    event.waitUntil(onPush(event));\n});\nself.addEventListener('pushsubscriptionchange', () => {\n    serviceWorkerLogger.debug('Handling a push subscription change event.');\n});\nself.addEventListener('notificationclick', (event) => {\n    serviceWorkerLogger.debug('Handling a notification click event.');\n    event.waitUntil(onNotificationClick(event));\n});\n// We need an export to force this file to act like a module, so TS will let us re-type `self`.\nvar index = null;\n\nexport { index as default };\n//# sourceMappingURL=index.js.map\n"],"names":[],"mappings":"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"}