import * as Keychain from 'react-native-keychain'; import { KEYCHAIN } from '../utils/constants'; class KeychainService { /** * Save access token securely */ async saveToken(token: string): Promise { try { const result = await Keychain.setGenericPassword( KEYCHAIN.USERNAME, token, { service: KEYCHAIN.SERVICE, accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED, }, ); return !!result; } catch (error) { console.log('Keychain Save Error', error); return false; } } /** * Get stored token */ async getToken(): Promise { try { const credentials = await Keychain.getGenericPassword({ service: KEYCHAIN.SERVICE, }); if (!credentials) { return null; } return credentials.password; } catch (error) { console.log('Keychain Get Error', error); return null; } } /** * Check whether token exists */ async hasToken(): Promise { const token = await this.getToken(); return !!token; } /** * Remove token */ async removeToken(): Promise { try { return await Keychain.resetGenericPassword({ service: KEYCHAIN.SERVICE, }); } catch (error) { console.log('Keychain Remove Error', error); return false; } } /** * Save mock token for testing */ async mockLogin(): Promise { return this.saveToken('mock-access-token'); } } export default new KeychainService();