Merge branch 'feat/inda-383-daily-stat' into 'main'
[ProtonMail-WebClient.git] / applications / pass-extension / src / lib / hooks / usePermissionsGranted.ts
blob70565b1ced258d6ccce9475cc257af812826229b
1 import { useCallback, useEffect, useState } from 'react';
3 import { useExtensionContext } from 'proton-pass-extension/lib/components/Extension/ExtensionSetup';
4 import { checkExtensionPermissions } from 'proton-pass-extension/lib/utils/permissions';
6 import { matchExtensionMessage } from '@proton/pass/lib/extension/message/utils';
7 import { WorkerMessageType } from '@proton/pass/types';
9 /* On hook first run : we programatically check the permissions
10  * using the browser API. We then setup a listener for the worker
11  * `PERMISSIONS_UPDATE` message in order to gracefully handle changes
12  * while the clients are running */
13 export const usePermissionsGranted = (): boolean => {
14     const [valid, setValid] = useState<boolean>(false);
15     const { port } = useExtensionContext();
17     const checkForPermissions = useCallback(async () => {
18         try {
19             const check = await checkExtensionPermissions();
20             setValid(check);
21         } catch (_) {}
22     }, []);
24     useEffect(() => {
25         const handleMessage = (message: unknown) => {
26             if (matchExtensionMessage(message, { sender: 'background', type: WorkerMessageType.PERMISSIONS_UPDATE })) {
27                 setValid(message.payload.check);
28             }
29         };
31         void checkForPermissions();
33         port.onMessage.addListener(handleMessage);
34         return () => port.onMessage.removeListener(handleMessage);
35     }, []);
37     return valid;