sgcart/app/services/keychainService.ts
2026-07-03 13:10:46 +05:30

75 lines
1.5 KiB
TypeScript

import * as Keychain from 'react-native-keychain';
import { KEYCHAIN } from '../utils/constants';
class KeychainService {
/**
* Save access token securely
*/
async saveToken(token: string): Promise<boolean> {
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<string | null> {
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<boolean> {
const token = await this.getToken();
return !!token;
}
/**
* Remove token
*/
async removeToken(): Promise<boolean> {
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<boolean> {
return this.saveToken('mock-access-token');
}
}
export default new KeychainService();