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