All files / apps/host/src/services/notification permissions.ts

100% Statements 10/10
87.5% Branches 7/8
100% Functions 3/3
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60                                      4x 2x   2x   2x           2x 2x                   2x               2x             2x 2x    
import {
  AuthorizationStatus,
  hasPermission as messagingHasPermission,
  requestPermission as messagingRequestPermission,
} from '@react-native-firebase/messaging';
 
import notifee from '@notifee/react-native';
 
import { isAndroid, isIOS } from '@repo/utils/platform';
export { isIOS, isAndroid };
 
import type { FirebaseMessagingTypes } from '@react-native-firebase/messaging';
 
import type { PermissionStatus } from './types';
 
// Check current status
export async function checkPermissionStatus(
  messaging: FirebaseMessagingTypes.Module,
): Promise<PermissionStatus> {
  if (isIOS()) {
    const authStatus = await messagingHasPermission(messaging);
    const authorized =
      authStatus === AuthorizationStatus.AUTHORIZED ||
      authStatus === AuthorizationStatus.PROVISIONAL;
    return {
      authorized,
      status: AuthorizationStatus[authStatus] || 'UNKNOWN',
    };
  }
 
  const settings = await notifee.getNotificationSettings();
  return {
    authorized: settings.authorizationStatus >= 1,
    status: settings.authorizationStatus.toString(),
  };
}
 
// Request iOS permissions
export async function requestIOSPermission(
  messaging: FirebaseMessagingTypes.Module,
): Promise<boolean> {
  const authStatus = await messagingRequestPermission(messaging, {
    alert: true,
    badge: true,
    sound: true,
    provisional: false,
    announcement: false,
  });
 
  return (
    authStatus === AuthorizationStatus.AUTHORIZED || authStatus === AuthorizationStatus.PROVISIONAL
  );
}
 
// Request Android permissions
export async function requestAndroidPermission(): Promise<boolean> {
  const settings = await notifee.requestPermission();
  return settings.authorizationStatus >= 1;
}