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