1import { UnavailabilityError } from '@unimodules/core'; 2import invariant from 'invariant'; 3 4import ExpoLocalAuthentication from './ExpoLocalAuthentication'; 5import { 6 LocalAuthenticationOptions, 7 AuthenticationType, 8 LocalAuthenticationResult, 9 SecurityLevel, 10} from './LocalAuthentication.types'; 11 12export { LocalAuthenticationOptions, AuthenticationType, LocalAuthenticationResult, SecurityLevel }; 13 14export async function hasHardwareAsync(): Promise<boolean> { 15 if (!ExpoLocalAuthentication.hasHardwareAsync) { 16 throw new UnavailabilityError('expo-local-authentication', 'hasHardwareAsync'); 17 } 18 return await ExpoLocalAuthentication.hasHardwareAsync(); 19} 20 21export async function supportedAuthenticationTypesAsync(): Promise<AuthenticationType[]> { 22 if (!ExpoLocalAuthentication.supportedAuthenticationTypesAsync) { 23 throw new UnavailabilityError('expo-local-authentication', 'supportedAuthenticationTypesAsync'); 24 } 25 return await ExpoLocalAuthentication.supportedAuthenticationTypesAsync(); 26} 27 28export async function isEnrolledAsync(): Promise<boolean> { 29 if (!ExpoLocalAuthentication.isEnrolledAsync) { 30 throw new UnavailabilityError('expo-local-authentication', 'isEnrolledAsync'); 31 } 32 return await ExpoLocalAuthentication.isEnrolledAsync(); 33} 34 35export async function getEnrolledLevelAsync(): Promise<SecurityLevel> { 36 if (!ExpoLocalAuthentication.getEnrolledLevelAsync) { 37 throw new UnavailabilityError('expo-local-authentication', 'getEnrolledLevelAsync'); 38 } 39 return await ExpoLocalAuthentication.getEnrolledLevelAsync(); 40} 41 42export async function authenticateAsync( 43 options: LocalAuthenticationOptions = {} 44): Promise<LocalAuthenticationResult> { 45 if (!ExpoLocalAuthentication.authenticateAsync) { 46 throw new UnavailabilityError('expo-local-authentication', 'authenticateAsync'); 47 } 48 49 if (options.hasOwnProperty('promptMessage')) { 50 invariant( 51 typeof options.promptMessage === 'string' && options.promptMessage.length, 52 'LocalAuthentication.authenticateAsync : `options.promptMessage` must be a non-empty string.' 53 ); 54 } 55 56 const promptMessage = options.promptMessage || 'Authenticate'; 57 const result = await ExpoLocalAuthentication.authenticateAsync({ ...options, promptMessage }); 58 59 if (result.warning) { 60 console.warn(result.warning); 61 } 62 return result; 63} 64 65export async function cancelAuthenticate(): Promise<void> { 66 if (!ExpoLocalAuthentication.cancelAuthenticate) { 67 throw new UnavailabilityError('expo-local-authentication', 'cancelAuthenticate'); 68 } 69 await ExpoLocalAuthentication.cancelAuthenticate(); 70} 71