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 () => {
19 const check = await checkExtensionPermissions();
25 const handleMessage = (message: unknown) => {
26 if (matchExtensionMessage(message, { sender: 'background', type: WorkerMessageType.PERMISSIONS_UPDATE })) {
27 setValid(message.payload.check);
31 void checkForPermissions();
33 port.onMessage.addListener(handleMessage);
34 return () => port.onMessage.removeListener(handleMessage);