1import { canUseDOM } from 'fbjs/lib/ExecutionEnvironment';
2import { PermissionStatus } from 'unimodules-permissions-interface';
3function convertPermissionStatus(status) {
4    switch (status) {
5        case 'granted':
6            return {
7                status: PermissionStatus.GRANTED,
8                expires: 'never',
9                canAskAgain: false,
10                granted: true,
11            };
12        case 'denied':
13            return {
14                status: PermissionStatus.DENIED,
15                expires: 'never',
16                canAskAgain: false,
17                granted: false,
18            };
19        default:
20            return {
21                status: PermissionStatus.UNDETERMINED,
22                expires: 'never',
23                canAskAgain: true,
24                granted: false,
25            };
26    }
27}
28async function resolvePermissionAsync({ shouldAsk, }) {
29    if (!canUseDOM) {
30        return convertPermissionStatus('denied');
31    }
32    const { Notification = {} } = window;
33    if (typeof Notification.requestPermission !== 'undefined') {
34        let status = Notification.permission;
35        if (shouldAsk) {
36            status = await Notification.requestPermission();
37        }
38        return convertPermissionStatus(status);
39    }
40    else if (typeof navigator !== 'undefined' && navigator?.permissions?.query) {
41        // TODO(Bacon): Support `push` in the future when it's stable.
42        const query = await navigator.permissions.query({ name: 'notifications' });
43        return convertPermissionStatus(query.state);
44    }
45    // Platforms like iOS Safari don't support Notifications so return denied.
46    return convertPermissionStatus('denied');
47}
48export default {
49    addListener: () => { },
50    removeListeners: () => { },
51    async getPermissionsAsync() {
52        return resolvePermissionAsync({ shouldAsk: false });
53    },
54    async requestPermissionsAsync(request) {
55        return resolvePermissionAsync({ shouldAsk: true });
56    },
57};
58//# sourceMappingURL=NotificationPermissionsModule.js.map