import { coalesceExpirations, coalesceStatuses } from './CoalescedPermissions';
import Permissions from './ExpoPermissions';
import {
PermissionResponse,
PermissionType,
PermissionMap,
PermissionStatus,
PermissionExpiration,
PermissionInfo,
} from './Permissions.types';
export {
PermissionStatus,
PermissionResponse,
PermissionExpiration,
PermissionMap,
PermissionInfo,
PermissionType,
};
export const CAMERA = 'camera';
export const CAMERA_ROLL = 'cameraRoll';
export const AUDIO_RECORDING = 'audioRecording';
export const LOCATION = 'location';
export const USER_FACING_NOTIFICATIONS = 'userFacingNotifications';
export const NOTIFICATIONS = 'notifications';
export const CONTACTS = 'contacts';
export const CALENDAR = 'calendar';
export const REMINDERS = 'reminders';
export const SYSTEM_BRIGHTNESS = 'systemBrightness';
export async function getAsync(...types: PermissionType[]): Promise<PermissionResponse> {
return await _handlePermissionsRequestAsync(types, Permissions.getAsync);
}
export async function askAsync(...types: PermissionType[]): Promise<PermissionResponse> {
return await _handlePermissionsRequestAsync(types, Permissions.askAsync);
}
async function _handlePermissionsRequestAsync(
types: PermissionType[],
handlePermissions: (types: PermissionType[]) => Promise<PermissionMap>
): Promise<PermissionResponse> {
if (!types.length) {
throw new Error('At least one permission type must be specified');
}
const permissions = await handlePermissions(types);
return {
status: coalesceStatuses(permissions),
expires: coalesceExpirations(permissions),
permissions,
};
}