Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / shared / lib / helpers / desktopNotification.ts
bloba634eea6cc6792da2f0e04e04c9546e316169623
1 import Push from 'push.js';
3 import noop from '@proton/utils/noop';
5 import type { ElectronNotification } from '../desktop/desktopTypes';
6 import { invokeInboxDesktopIPC } from '../desktop/ipcHelpers';
7 import { isElectronMail } from './desktop';
9 Push.config({
10     serviceWorker: './assets/serviceWorker.min.js', // Sets a custom service worker script
11 });
13 export enum Status {
14     DENIED = 'denied',
15     DEFAULT = 'default',
16     GRANTED = 'granted',
19 export const getStatus = (): Status => {
20     const permission = Push.Permission.get();
21     switch (permission) {
22         case Status.DENIED:
23             return Status.DENIED;
24         case Status.GRANTED:
25             return Status.GRANTED;
26         default:
27             return Status.DEFAULT;
28     }
31 export const isEnabled = (): boolean => Push.Permission.has();
33 export const clear = () => Push.clear();
35 export const request = (onGranted: () => void = noop, onDenied: () => void = noop) => {
36     try {
37         Push.Permission.request(onGranted, onDenied);
38     } catch (err: any) {
39         onDenied();
40         /**
41          * Hotfix to fix requesting the permission on non-promisified requests.
42          * TypeError: undefined is not an object (evaluating 'this._win.Notification.requestPermission().then')
43          * https://github.com/Nickersoft/push.js/issues/117
44          */
45     }
48 /**
49  * Create a desktop notification
50  * @param title
51  * @param params https://pushjs.org/docs/options
52  * @param electronNotification used to show notification on Electron apps, optional parameter
53  */
54 export const create = async (title = '', params = {}, electronNotification?: ElectronNotification) => {
55     if (!isEnabled()) {
56         return;
57     }
58     if (isElectronMail && electronNotification) {
59         invokeInboxDesktopIPC({ type: 'showNotification', payload: electronNotification });
60     } else {
61         return Push.create(title, params);
62     }