@bmc-soft/keycloak-auth 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_lib/escapeForInjectedJS.d.ts +2 -0
- package/dist/_lib/escapeForInjectedJS.d.ts.map +1 -0
- package/dist/_lib/escapeForInjectedJS.js +8 -0
- package/dist/_lib/escapeForInjectedJS.js.map +1 -0
- package/dist/_lib/getInjectedJSForDetect.d.ts +2 -0
- package/dist/_lib/getInjectedJSForDetect.d.ts.map +1 -0
- package/dist/_lib/getInjectedJSForDetect.js +27 -0
- package/dist/_lib/getInjectedJSForDetect.js.map +1 -0
- package/dist/_lib/getInjectedJSForLogin.d.ts +2 -0
- package/dist/_lib/getInjectedJSForLogin.d.ts.map +1 -0
- package/dist/_lib/getInjectedJSForLogin.js +168 -0
- package/dist/_lib/getInjectedJSForLogin.js.map +1 -0
- package/dist/_lib/getInjectedJSForLogout.d.ts +2 -0
- package/dist/_lib/getInjectedJSForLogout.d.ts.map +1 -0
- package/dist/_lib/getInjectedJSForLogout.js +63 -0
- package/dist/_lib/getInjectedJSForLogout.js.map +1 -0
- package/dist/_lib/index.d.ts +7 -0
- package/dist/_lib/index.d.ts.map +1 -0
- package/dist/_lib/index.js +7 -0
- package/dist/_lib/index.js.map +1 -0
- package/dist/_lib/types/authStage.d.ts +7 -0
- package/dist/_lib/types/authStage.d.ts.map +1 -0
- package/dist/_lib/types/authStage.js +6 -0
- package/dist/_lib/types/authStage.js.map +1 -0
- package/dist/_lib/types/confirmAuthPhase.d.ts +7 -0
- package/dist/_lib/types/confirmAuthPhase.d.ts.map +1 -0
- package/dist/_lib/types/confirmAuthPhase.js +6 -0
- package/dist/_lib/types/confirmAuthPhase.js.map +1 -0
- package/dist/_lib/types/index.d.ts +4 -0
- package/dist/_lib/types/index.d.ts.map +1 -0
- package/dist/_lib/types/index.js +4 -0
- package/dist/_lib/types/index.js.map +1 -0
- package/dist/_lib/types/pinSetupStage.d.ts +7 -0
- package/dist/_lib/types/pinSetupStage.d.ts.map +1 -0
- package/dist/_lib/types/pinSetupStage.js +6 -0
- package/dist/_lib/types/pinSetupStage.js.map +1 -0
- package/dist/axios/adapters/KeycloakTokenProvider.d.ts +10 -0
- package/dist/axios/adapters/KeycloakTokenProvider.d.ts.map +1 -0
- package/dist/axios/adapters/KeycloakTokenProvider.js +56 -0
- package/dist/axios/adapters/KeycloakTokenProvider.js.map +1 -0
- package/dist/axios/index.d.ts +5 -0
- package/dist/axios/index.d.ts.map +1 -0
- package/dist/axios/index.js +3 -0
- package/dist/axios/index.js.map +1 -0
- package/dist/axios/interceptors.d.ts +5 -0
- package/dist/axios/interceptors.d.ts.map +1 -0
- package/dist/axios/interceptors.js +136 -0
- package/dist/axios/interceptors.js.map +1 -0
- package/dist/axios/tokenProvider.d.ts +7 -0
- package/dist/axios/tokenProvider.d.ts.map +1 -0
- package/dist/axios/tokenProvider.js +2 -0
- package/dist/axios/tokenProvider.js.map +1 -0
- package/dist/axios/types.d.ts +17 -0
- package/dist/axios/types.d.ts.map +1 -0
- package/dist/axios/types.js +2 -0
- package/dist/axios/types.js.map +1 -0
- package/dist/context/KeycloakConfigContext.d.ts +10 -0
- package/dist/context/KeycloakConfigContext.d.ts.map +1 -0
- package/dist/context/KeycloakConfigContext.js +50 -0
- package/dist/context/KeycloakConfigContext.js.map +1 -0
- package/dist/context/KeycloakInstanceContext.d.ts +20 -0
- package/dist/context/KeycloakInstanceContext.d.ts.map +1 -0
- package/dist/context/KeycloakInstanceContext.js +113 -0
- package/dist/context/KeycloakInstanceContext.js.map +1 -0
- package/dist/context/KeycloakProvider.d.ts +15 -0
- package/dist/context/KeycloakProvider.d.ts.map +1 -0
- package/dist/context/KeycloakProvider.js +19 -0
- package/dist/context/KeycloakProvider.js.map +1 -0
- package/dist/context/KeycloakThemeContext.d.ts +66 -0
- package/dist/context/KeycloakThemeContext.d.ts.map +1 -0
- package/dist/context/KeycloakThemeContext.js +59 -0
- package/dist/context/KeycloakThemeContext.js.map +1 -0
- package/dist/context/ReauthContext.d.ts +13 -0
- package/dist/context/ReauthContext.d.ts.map +1 -0
- package/dist/context/ReauthContext.js +26 -0
- package/dist/context/ReauthContext.js.map +1 -0
- package/dist/context/TokenContext.d.ts +18 -0
- package/dist/context/TokenContext.d.ts.map +1 -0
- package/dist/context/TokenContext.js +117 -0
- package/dist/context/TokenContext.js.map +1 -0
- package/dist/context/index.d.ts +14 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +7 -0
- package/dist/context/index.js.map +1 -0
- package/dist/core/adapter.d.ts +23 -0
- package/dist/core/adapter.d.ts.map +1 -0
- package/dist/core/adapter.js +75 -0
- package/dist/core/adapter.js.map +1 -0
- package/dist/core/client.d.ts +7 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +12 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +4 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/storage.d.ts +10 -0
- package/dist/core/storage.d.ts.map +1 -0
- package/dist/core/storage.js +37 -0
- package/dist/core/storage.js.map +1 -0
- package/dist/core/types.d.ts +31 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/utils.d.ts +2 -0
- package/dist/core/utils.d.ts.map +1 -0
- package/dist/core/utils.js +10 -0
- package/dist/core/utils.js.map +1 -0
- package/dist/hooks/index.d.ts +9 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +7 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/useKeycloakAuth.d.ts +23 -0
- package/dist/hooks/useKeycloakAuth.d.ts.map +1 -0
- package/dist/hooks/useKeycloakAuth.js +67 -0
- package/dist/hooks/useKeycloakAuth.js.map +1 -0
- package/dist/hooks/useKeycloakAuthScreen.d.ts +11 -0
- package/dist/hooks/useKeycloakAuthScreen.d.ts.map +1 -0
- package/dist/hooks/useKeycloakAuthScreen.js +59 -0
- package/dist/hooks/useKeycloakAuthScreen.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/screens/AuthPage/AuthPage.d.ts +17 -0
- package/dist/screens/AuthPage/AuthPage.d.ts.map +1 -0
- package/dist/screens/AuthPage/AuthPage.js +115 -0
- package/dist/screens/AuthPage/AuthPage.js.map +1 -0
- package/dist/screens/AuthPage/index.d.ts +2 -0
- package/dist/screens/AuthPage/index.d.ts.map +1 -0
- package/dist/screens/AuthPage/index.js +2 -0
- package/dist/screens/AuthPage/index.js.map +1 -0
- package/dist/screens/ConfirmAuthPage/ConfirmAuthPage.d.ts +21 -0
- package/dist/screens/ConfirmAuthPage/ConfirmAuthPage.d.ts.map +1 -0
- package/dist/screens/ConfirmAuthPage/ConfirmAuthPage.js +215 -0
- package/dist/screens/ConfirmAuthPage/ConfirmAuthPage.js.map +1 -0
- package/dist/screens/ConfirmAuthPage/index.d.ts +2 -0
- package/dist/screens/ConfirmAuthPage/index.d.ts.map +1 -0
- package/dist/screens/ConfirmAuthPage/index.js +2 -0
- package/dist/screens/ConfirmAuthPage/index.js.map +1 -0
- package/dist/screens/index.d.ts +3 -0
- package/dist/screens/index.d.ts.map +1 -0
- package/dist/screens/index.js +3 -0
- package/dist/screens/index.js.map +1 -0
- package/dist/storage/credentialStorage.d.ts +26 -0
- package/dist/storage/credentialStorage.d.ts.map +1 -0
- package/dist/storage/credentialStorage.js +188 -0
- package/dist/storage/credentialStorage.js.map +1 -0
- package/dist/storage/index.d.ts +3 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +3 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/tokenStorage.d.ts +28 -0
- package/dist/storage/tokenStorage.d.ts.map +1 -0
- package/dist/storage/tokenStorage.js +145 -0
- package/dist/storage/tokenStorage.js.map +1 -0
- package/dist/ui/DefaultButton/DefaultButton.d.ts +10 -0
- package/dist/ui/DefaultButton/DefaultButton.d.ts.map +1 -0
- package/dist/ui/DefaultButton/DefaultButton.js +41 -0
- package/dist/ui/DefaultButton/DefaultButton.js.map +1 -0
- package/dist/ui/DefaultButton/DefaultIconButton.d.ts +4 -0
- package/dist/ui/DefaultButton/DefaultIconButton.d.ts.map +1 -0
- package/dist/ui/DefaultButton/DefaultIconButton.js +11 -0
- package/dist/ui/DefaultButton/DefaultIconButton.js.map +1 -0
- package/dist/ui/DefaultButton/index.d.ts +4 -0
- package/dist/ui/DefaultButton/index.d.ts.map +1 -0
- package/dist/ui/DefaultButton/index.js +3 -0
- package/dist/ui/DefaultButton/index.js.map +1 -0
- package/dist/ui/DefaultLoader/DefaultLoader.d.ts +3 -0
- package/dist/ui/DefaultLoader/DefaultLoader.d.ts.map +1 -0
- package/dist/ui/DefaultLoader/DefaultLoader.js +16 -0
- package/dist/ui/DefaultLoader/DefaultLoader.js.map +1 -0
- package/dist/ui/DefaultLoader/index.d.ts +2 -0
- package/dist/ui/DefaultLoader/index.d.ts.map +1 -0
- package/dist/ui/DefaultLoader/index.js +2 -0
- package/dist/ui/DefaultLoader/index.js.map +1 -0
- package/dist/ui/LogoutButton/LogoutButtonIcon.d.ts +4 -0
- package/dist/ui/LogoutButton/LogoutButtonIcon.d.ts.map +1 -0
- package/dist/ui/LogoutButton/LogoutButtonIcon.js +12 -0
- package/dist/ui/LogoutButton/LogoutButtonIcon.js.map +1 -0
- package/dist/ui/LogoutButton/LogoutButtonText.d.ts +4 -0
- package/dist/ui/LogoutButton/LogoutButtonText.d.ts.map +1 -0
- package/dist/ui/LogoutButton/LogoutButtonText.js +18 -0
- package/dist/ui/LogoutButton/LogoutButtonText.js.map +1 -0
- package/dist/ui/LogoutButton/index.d.ts +4 -0
- package/dist/ui/LogoutButton/index.d.ts.map +1 -0
- package/dist/ui/LogoutButton/index.js +3 -0
- package/dist/ui/LogoutButton/index.js.map +1 -0
- package/dist/ui/LogoutButton/types.d.ts +14 -0
- package/dist/ui/LogoutButton/types.d.ts.map +1 -0
- package/dist/ui/LogoutButton/types.js +2 -0
- package/dist/ui/LogoutButton/types.js.map +1 -0
- package/dist/ui/LogoutButton/useLogoutButton.d.ts +13 -0
- package/dist/ui/LogoutButton/useLogoutButton.d.ts.map +1 -0
- package/dist/ui/LogoutButton/useLogoutButton.js +46 -0
- package/dist/ui/LogoutButton/useLogoutButton.js.map +1 -0
- package/dist/ui/LogoutConfirmSheet/LogoutConfirmSheet.d.ts +15 -0
- package/dist/ui/LogoutConfirmSheet/LogoutConfirmSheet.d.ts.map +1 -0
- package/dist/ui/LogoutConfirmSheet/LogoutConfirmSheet.js +68 -0
- package/dist/ui/LogoutConfirmSheet/LogoutConfirmSheet.js.map +1 -0
- package/dist/ui/LogoutConfirmSheet/index.d.ts +2 -0
- package/dist/ui/LogoutConfirmSheet/index.d.ts.map +1 -0
- package/dist/ui/LogoutConfirmSheet/index.js +2 -0
- package/dist/ui/LogoutConfirmSheet/index.js.map +1 -0
- package/dist/ui/NumberPad/NumberPad.d.ts +15 -0
- package/dist/ui/NumberPad/NumberPad.d.ts.map +1 -0
- package/dist/ui/NumberPad/NumberPad.js +142 -0
- package/dist/ui/NumberPad/NumberPad.js.map +1 -0
- package/dist/ui/NumberPad/index.d.ts +2 -0
- package/dist/ui/NumberPad/index.d.ts.map +1 -0
- package/dist/ui/NumberPad/index.js +2 -0
- package/dist/ui/NumberPad/index.js.map +1 -0
- package/dist/ui/PINConfirm/PINConfirm.d.ts +18 -0
- package/dist/ui/PINConfirm/PINConfirm.d.ts.map +1 -0
- package/dist/ui/PINConfirm/PINConfirm.js +148 -0
- package/dist/ui/PINConfirm/PINConfirm.js.map +1 -0
- package/dist/ui/PINConfirm/index.d.ts +2 -0
- package/dist/ui/PINConfirm/index.d.ts.map +1 -0
- package/dist/ui/PINConfirm/index.js +2 -0
- package/dist/ui/PINConfirm/index.js.map +1 -0
- package/dist/ui/PINIndicator/PINIndicator.d.ts +13 -0
- package/dist/ui/PINIndicator/PINIndicator.d.ts.map +1 -0
- package/dist/ui/PINIndicator/PINIndicator.js +52 -0
- package/dist/ui/PINIndicator/PINIndicator.js.map +1 -0
- package/dist/ui/PINIndicator/index.d.ts +2 -0
- package/dist/ui/PINIndicator/index.d.ts.map +1 -0
- package/dist/ui/PINIndicator/index.js +2 -0
- package/dist/ui/PINIndicator/index.js.map +1 -0
- package/dist/ui/PINSetup/PINSetup.d.ts +17 -0
- package/dist/ui/PINSetup/PINSetup.d.ts.map +1 -0
- package/dist/ui/PINSetup/PINSetup.js +117 -0
- package/dist/ui/PINSetup/PINSetup.js.map +1 -0
- package/dist/ui/PINSetup/index.d.ts +2 -0
- package/dist/ui/PINSetup/index.d.ts.map +1 -0
- package/dist/ui/PINSetup/index.js +2 -0
- package/dist/ui/PINSetup/index.js.map +1 -0
- package/dist/ui/PINSetup/stages/BiometryStage.d.ts +12 -0
- package/dist/ui/PINSetup/stages/BiometryStage.d.ts.map +1 -0
- package/dist/ui/PINSetup/stages/BiometryStage.js +76 -0
- package/dist/ui/PINSetup/stages/BiometryStage.js.map +1 -0
- package/dist/ui/PINSetup/stages/ConfirmStage.d.ts +13 -0
- package/dist/ui/PINSetup/stages/ConfirmStage.d.ts.map +1 -0
- package/dist/ui/PINSetup/stages/ConfirmStage.js +20 -0
- package/dist/ui/PINSetup/stages/ConfirmStage.js.map +1 -0
- package/dist/ui/PINSetup/stages/EnterStage.d.ts +13 -0
- package/dist/ui/PINSetup/stages/EnterStage.d.ts.map +1 -0
- package/dist/ui/PINSetup/stages/EnterStage.js +19 -0
- package/dist/ui/PINSetup/stages/EnterStage.js.map +1 -0
- package/dist/ui/PINSetup/stages/index.d.ts +4 -0
- package/dist/ui/PINSetup/stages/index.d.ts.map +1 -0
- package/dist/ui/PINSetup/stages/index.js +4 -0
- package/dist/ui/PINSetup/stages/index.js.map +1 -0
- package/dist/ui/PINSetup/styles.d.ts +39 -0
- package/dist/ui/PINSetup/styles.d.ts.map +1 -0
- package/dist/ui/PINSetup/styles.js +40 -0
- package/dist/ui/PINSetup/styles.js.map +1 -0
- package/dist/ui/WebViewLogin/WebViewLogin.d.ts +14 -0
- package/dist/ui/WebViewLogin/WebViewLogin.d.ts.map +1 -0
- package/dist/ui/WebViewLogin/WebViewLogin.js +125 -0
- package/dist/ui/WebViewLogin/WebViewLogin.js.map +1 -0
- package/dist/ui/WebViewLogin/index.d.ts +2 -0
- package/dist/ui/WebViewLogin/index.d.ts.map +1 -0
- package/dist/ui/WebViewLogin/index.js +2 -0
- package/dist/ui/WebViewLogin/index.js.map +1 -0
- package/dist/ui/WebViewLogout/WebViewLogout.d.ts +11 -0
- package/dist/ui/WebViewLogout/WebViewLogout.d.ts.map +1 -0
- package/dist/ui/WebViewLogout/WebViewLogout.js +96 -0
- package/dist/ui/WebViewLogout/WebViewLogout.js.map +1 -0
- package/dist/ui/WebViewLogout/index.d.ts +2 -0
- package/dist/ui/WebViewLogout/index.d.ts.map +1 -0
- package/dist/ui/WebViewLogout/index.js +2 -0
- package/dist/ui/WebViewLogout/index.js.map +1 -0
- package/dist/ui/icons/FaceIdIcon.d.ts +4 -0
- package/dist/ui/icons/FaceIdIcon.d.ts.map +1 -0
- package/dist/ui/icons/FaceIdIcon.js +7 -0
- package/dist/ui/icons/FaceIdIcon.js.map +1 -0
- package/dist/ui/icons/FingerprintIcon.d.ts +4 -0
- package/dist/ui/icons/FingerprintIcon.d.ts.map +1 -0
- package/dist/ui/icons/FingerprintIcon.js +10 -0
- package/dist/ui/icons/FingerprintIcon.js.map +1 -0
- package/dist/ui/icons/index.d.ts +3 -0
- package/dist/ui/icons/index.d.ts.map +1 -0
- package/dist/ui/icons/index.js +3 -0
- package/dist/ui/icons/index.js.map +1 -0
- package/dist/ui/index.d.ts +11 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +11 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/widgets/ReauthBottomSheet/ReauthBottomSheet.d.ts +17 -0
- package/dist/widgets/ReauthBottomSheet/ReauthBottomSheet.d.ts.map +1 -0
- package/dist/widgets/ReauthBottomSheet/ReauthBottomSheet.js +48 -0
- package/dist/widgets/ReauthBottomSheet/ReauthBottomSheet.js.map +1 -0
- package/dist/widgets/ReauthBottomSheet/index.d.ts +2 -0
- package/dist/widgets/ReauthBottomSheet/index.d.ts.map +1 -0
- package/dist/widgets/ReauthBottomSheet/index.js +2 -0
- package/dist/widgets/ReauthBottomSheet/index.js.map +1 -0
- package/dist/widgets/index.d.ts +2 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +2 -0
- package/dist/widgets/index.js.map +1 -0
- package/package.json +24 -2
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
import * as Keychain from 'react-native-keychain';
|
|
2
|
+
import CryptoJS from 'crypto-js';
|
|
3
|
+
const CREDENTIALS_SERVICE = 'com.bmcsoft.keycloak-auth.credentials';
|
|
4
|
+
const BIOMETRY_CREDENTIALS_SERVICE = 'com.bmcsoft.keycloak-auth.biometry-credentials';
|
|
5
|
+
const BIOMETRY_FLAG_SERVICE = 'com.bmcsoft.keycloak-auth.biometry-enabled';
|
|
6
|
+
function encryptWithPin(plain, pinStr) {
|
|
7
|
+
try {
|
|
8
|
+
return CryptoJS.AES.encrypt(plain, pinStr).toString();
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
console.error('[CredentialStorage] Encryption error:', error);
|
|
12
|
+
throw error;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function decryptWithPin(encrypted, pinStr) {
|
|
16
|
+
try {
|
|
17
|
+
const bytes = CryptoJS.AES.decrypt(encrypted, pinStr);
|
|
18
|
+
return bytes.toString(CryptoJS.enc.Utf8);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return '';
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export async function saveEncryptedCredentials(pin, credentials) {
|
|
25
|
+
try {
|
|
26
|
+
const pinStr = typeof pin === 'string' ? pin : String(pin);
|
|
27
|
+
const encryptedUsername = encryptWithPin(credentials.username, pinStr);
|
|
28
|
+
const encryptedPassword = encryptWithPin(credentials.password, pinStr);
|
|
29
|
+
await Keychain.setGenericPassword(encryptedUsername, encryptedPassword, {
|
|
30
|
+
service: CREDENTIALS_SERVICE,
|
|
31
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
console.error('[CredentialStorage] Save credentials error:', error);
|
|
36
|
+
throw error;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export async function getDecryptedCredentials(pin) {
|
|
40
|
+
try {
|
|
41
|
+
const credentials = await Keychain.getGenericPassword({
|
|
42
|
+
service: CREDENTIALS_SERVICE,
|
|
43
|
+
});
|
|
44
|
+
if (!credentials) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const pinStr = typeof pin === 'string' ? pin : String(pin);
|
|
48
|
+
const username = decryptWithPin(credentials.username, pinStr);
|
|
49
|
+
const password = decryptWithPin(credentials.password, pinStr);
|
|
50
|
+
if (!username.length || !password.length) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return { username, password };
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
console.error('[CredentialStorage] Get credentials error:', error);
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
async function hasStoredCredentials() {
|
|
61
|
+
try {
|
|
62
|
+
const credentials = await Keychain.getGenericPassword({
|
|
63
|
+
service: CREDENTIALS_SERVICE,
|
|
64
|
+
});
|
|
65
|
+
return credentials !== false;
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error('[CredentialStorage] Has credentials error:', error);
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
async function clearCredentials() {
|
|
73
|
+
try {
|
|
74
|
+
await Keychain.resetGenericPassword({ service: CREDENTIALS_SERVICE });
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error('[CredentialStorage] Clear credentials error:', error);
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
async function clearBiometryCredentials() {
|
|
82
|
+
try {
|
|
83
|
+
await Keychain.resetGenericPassword({ service: BIOMETRY_CREDENTIALS_SERVICE });
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
console.error('[CredentialStorage] Clear biometry credentials error:', error);
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function clearBiometryFlag() {
|
|
91
|
+
try {
|
|
92
|
+
await Keychain.resetGenericPassword({ service: BIOMETRY_FLAG_SERVICE });
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error('[CredentialStorage] Clear biometry flag error:', error);
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
export async function hasPIN() {
|
|
100
|
+
return hasStoredCredentials();
|
|
101
|
+
}
|
|
102
|
+
export async function clearPIN() {
|
|
103
|
+
await clearCredentials();
|
|
104
|
+
await clearBiometryCredentials();
|
|
105
|
+
await clearBiometryFlag();
|
|
106
|
+
}
|
|
107
|
+
export async function saveBiometryEnabled(enabled) {
|
|
108
|
+
try {
|
|
109
|
+
await Keychain.setGenericPassword('biometry', enabled.toString(), {
|
|
110
|
+
service: BIOMETRY_FLAG_SERVICE,
|
|
111
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error('[CredentialStorage] Save biometry enabled error:', error);
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
export async function getBiometryEnabled() {
|
|
120
|
+
try {
|
|
121
|
+
const credentials = await Keychain.getGenericPassword({
|
|
122
|
+
service: BIOMETRY_FLAG_SERVICE,
|
|
123
|
+
});
|
|
124
|
+
if (!credentials)
|
|
125
|
+
return false;
|
|
126
|
+
return credentials.password === 'true';
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
console.error('[CredentialStorage] Get biometry enabled error:', error);
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
export async function getSupportedBiometryType() {
|
|
134
|
+
try {
|
|
135
|
+
return await Keychain.getSupportedBiometryType();
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
console.error('[CredentialStorage] Get biometry type error:', error);
|
|
139
|
+
return null;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export async function saveCredentialsForBiometry(credentials) {
|
|
143
|
+
try {
|
|
144
|
+
await Keychain.setGenericPassword(credentials.username, credentials.password, {
|
|
145
|
+
service: BIOMETRY_CREDENTIALS_SERVICE,
|
|
146
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
147
|
+
accessControl: Keychain.ACCESS_CONTROL.BIOMETRY_ANY,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
console.error('[CredentialStorage] Save biometry credentials error:', error);
|
|
152
|
+
throw error;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
export async function getCredentialsWithBiometry() {
|
|
156
|
+
try {
|
|
157
|
+
const credentials = await Keychain.getGenericPassword({
|
|
158
|
+
service: BIOMETRY_CREDENTIALS_SERVICE,
|
|
159
|
+
authenticationPrompt: {
|
|
160
|
+
title: 'Подтвердите авторизацию',
|
|
161
|
+
cancel: 'Отмена',
|
|
162
|
+
},
|
|
163
|
+
accessControl: Keychain.ACCESS_CONTROL.BIOMETRY_ANY,
|
|
164
|
+
});
|
|
165
|
+
if (!credentials)
|
|
166
|
+
return null;
|
|
167
|
+
return {
|
|
168
|
+
username: credentials.username,
|
|
169
|
+
password: credentials.password,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
console.error('[CredentialStorage] Get credentials with biometry error:', error);
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
export const credentialStorage = {
|
|
178
|
+
saveEncryptedCredentials,
|
|
179
|
+
getDecryptedCredentials,
|
|
180
|
+
hasPIN,
|
|
181
|
+
clearPIN,
|
|
182
|
+
saveBiometryEnabled,
|
|
183
|
+
getBiometryEnabled,
|
|
184
|
+
getSupportedBiometryType,
|
|
185
|
+
saveCredentialsForBiometry,
|
|
186
|
+
getCredentialsWithBiometry,
|
|
187
|
+
};
|
|
188
|
+
//# sourceMappingURL=credentialStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"credentialStorage.js","sourceRoot":"","sources":["../../src/storage/credentialStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface TokenData {
|
|
2
|
+
token?: string;
|
|
3
|
+
refreshToken?: string;
|
|
4
|
+
idToken?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare const saveToken: (token: string) => Promise<void>;
|
|
7
|
+
export declare const getToken: () => Promise<string | undefined>;
|
|
8
|
+
export declare const saveRefreshToken: (refreshToken: string) => Promise<void>;
|
|
9
|
+
export declare const getRefreshToken: () => Promise<string | undefined>;
|
|
10
|
+
export declare const saveIdToken: (idToken: string) => Promise<void>;
|
|
11
|
+
export declare const getIdToken: () => Promise<string | undefined>;
|
|
12
|
+
export declare const saveTokens: (data: TokenData) => Promise<void>;
|
|
13
|
+
export declare const getTokens: () => Promise<TokenData>;
|
|
14
|
+
export declare const clearTokens: () => Promise<void>;
|
|
15
|
+
export declare const hasTokens: () => Promise<boolean>;
|
|
16
|
+
export declare const tokenStorage: {
|
|
17
|
+
saveToken: (token: string) => Promise<void>;
|
|
18
|
+
getToken: () => Promise<string | undefined>;
|
|
19
|
+
saveRefreshToken: (refreshToken: string) => Promise<void>;
|
|
20
|
+
getRefreshToken: () => Promise<string | undefined>;
|
|
21
|
+
saveIdToken: (idToken: string) => Promise<void>;
|
|
22
|
+
getIdToken: () => Promise<string | undefined>;
|
|
23
|
+
saveTokens: (data: TokenData) => Promise<void>;
|
|
24
|
+
getTokens: () => Promise<TokenData>;
|
|
25
|
+
clearTokens: () => Promise<void>;
|
|
26
|
+
hasTokens: () => Promise<boolean>;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=tokenStorage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenStorage.d.ts","sourceRoot":"","sources":["../../src/storage/tokenStorage.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,SAAS;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,eAAO,MAAM,SAAS,GAAU,OAAO,MAAM,KAAG,OAAO,CAAC,IAAI,CAU3D,CAAC;AAKF,eAAO,MAAM,QAAQ,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAW3D,CAAC;AAKF,eAAO,MAAM,gBAAgB,GAAU,cAAc,MAAM,KAAG,OAAO,CAAC,IAAI,CAUzE,CAAC;AAKF,eAAO,MAAM,eAAe,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAWlE,CAAC;AAKF,eAAO,MAAM,WAAW,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,IAAI,CAU/D,CAAC;AAKF,eAAO,MAAM,UAAU,QAAa,OAAO,CAAC,MAAM,GAAG,SAAS,CAW7D,CAAC;AAKF,eAAO,MAAM,UAAU,GAAU,MAAM,SAAS,KAAG,OAAO,CAAC,IAAI,CAmB9D,CAAC;AAKF,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,SAAS,CAanD,CAAC;AAKF,eAAO,MAAM,WAAW,QAAa,OAAO,CAAC,IAAI,CAWhD,CAAC;AAKF,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,OAAO,CAQjD,CAAC;AAEF,eAAO,MAAM,YAAY;uBAjKc,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;oBAe3B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;qCAgBR,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;2BAelC,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;2BAgBzB,MAAM,KAAG,OAAO,CAAC,IAAI,CAAC;sBAe7B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;uBAgBxB,SAAS,KAAG,OAAO,CAAC,IAAI,CAAC;qBAwB7B,OAAO,CAAC,SAAS,CAAC;uBAkBhB,OAAO,CAAC,IAAI,CAAC;qBAgBf,OAAO,CAAC,OAAO,CAAC;CAqBlD,CAAC"}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import * as Keychain from 'react-native-keychain';
|
|
2
|
+
const TOKEN_SERVICE = 'com.koala.auth.token';
|
|
3
|
+
const REFRESH_TOKEN_SERVICE = 'com.koala.auth.refreshToken';
|
|
4
|
+
const ID_TOKEN_SERVICE = 'com.koala.auth.idToken';
|
|
5
|
+
export const saveToken = async (token) => {
|
|
6
|
+
try {
|
|
7
|
+
await Keychain.setGenericPassword('keycloak', token, {
|
|
8
|
+
service: TOKEN_SERVICE,
|
|
9
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
console.error('[TokenStorage] Save token error:', error);
|
|
14
|
+
throw error;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export const getToken = async () => {
|
|
18
|
+
try {
|
|
19
|
+
const credentials = await Keychain.getGenericPassword({
|
|
20
|
+
service: TOKEN_SERVICE,
|
|
21
|
+
});
|
|
22
|
+
return credentials ? credentials.password : undefined;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.error('[TokenStorage] Get token error:', error);
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
export const saveRefreshToken = async (refreshToken) => {
|
|
30
|
+
try {
|
|
31
|
+
await Keychain.setGenericPassword('keycloak', refreshToken, {
|
|
32
|
+
service: REFRESH_TOKEN_SERVICE,
|
|
33
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
console.error('[TokenStorage] Save refresh token error:', error);
|
|
38
|
+
throw error;
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
export const getRefreshToken = async () => {
|
|
42
|
+
try {
|
|
43
|
+
const credentials = await Keychain.getGenericPassword({
|
|
44
|
+
service: REFRESH_TOKEN_SERVICE,
|
|
45
|
+
});
|
|
46
|
+
return credentials ? credentials.password : undefined;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
console.error('[TokenStorage] Get refresh token error:', error);
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
export const saveIdToken = async (idToken) => {
|
|
54
|
+
try {
|
|
55
|
+
await Keychain.setGenericPassword('keycloak', idToken, {
|
|
56
|
+
service: ID_TOKEN_SERVICE,
|
|
57
|
+
accessible: Keychain.ACCESSIBLE.WHEN_UNLOCKED,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
console.error('[TokenStorage] Save ID token error:', error);
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
export const getIdToken = async () => {
|
|
66
|
+
try {
|
|
67
|
+
const credentials = await Keychain.getGenericPassword({
|
|
68
|
+
service: ID_TOKEN_SERVICE,
|
|
69
|
+
});
|
|
70
|
+
return credentials ? credentials.password : undefined;
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
console.error('[TokenStorage] Get ID token error:', error);
|
|
74
|
+
return undefined;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
export const saveTokens = async (data) => {
|
|
78
|
+
try {
|
|
79
|
+
const promises = [];
|
|
80
|
+
if (data.token) {
|
|
81
|
+
promises.push(saveToken(data.token));
|
|
82
|
+
}
|
|
83
|
+
if (data.refreshToken) {
|
|
84
|
+
promises.push(saveRefreshToken(data.refreshToken));
|
|
85
|
+
}
|
|
86
|
+
if (data.idToken) {
|
|
87
|
+
promises.push(saveIdToken(data.idToken));
|
|
88
|
+
}
|
|
89
|
+
await Promise.all(promises);
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error('[TokenStorage] Save tokens error:', error);
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
export const getTokens = async () => {
|
|
97
|
+
try {
|
|
98
|
+
const [token, refreshToken, idToken] = await Promise.all([
|
|
99
|
+
getToken(),
|
|
100
|
+
getRefreshToken(),
|
|
101
|
+
getIdToken(),
|
|
102
|
+
]);
|
|
103
|
+
return { token, refreshToken, idToken };
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error('[TokenStorage] Get tokens error:', error);
|
|
107
|
+
return { token: undefined, refreshToken: undefined, idToken: undefined };
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
export const clearTokens = async () => {
|
|
111
|
+
try {
|
|
112
|
+
await Promise.all([
|
|
113
|
+
Keychain.resetGenericPassword({ service: TOKEN_SERVICE }),
|
|
114
|
+
Keychain.resetGenericPassword({ service: REFRESH_TOKEN_SERVICE }),
|
|
115
|
+
Keychain.resetGenericPassword({ service: ID_TOKEN_SERVICE }),
|
|
116
|
+
]);
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
console.error('[TokenStorage] Clear tokens error:', error);
|
|
120
|
+
throw error;
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
export const hasTokens = async () => {
|
|
124
|
+
try {
|
|
125
|
+
const token = await getToken();
|
|
126
|
+
return token !== undefined;
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
console.error('[TokenStorage] Has tokens error:', error);
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
export const tokenStorage = {
|
|
134
|
+
saveToken,
|
|
135
|
+
getToken,
|
|
136
|
+
saveRefreshToken,
|
|
137
|
+
getRefreshToken,
|
|
138
|
+
saveIdToken,
|
|
139
|
+
getIdToken,
|
|
140
|
+
saveTokens,
|
|
141
|
+
getTokens,
|
|
142
|
+
clearTokens,
|
|
143
|
+
hasTokens,
|
|
144
|
+
};
|
|
145
|
+
//# sourceMappingURL=tokenStorage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokenStorage.js","sourceRoot":"","sources":["../../src/storage/tokenStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { KeycloakThemeButtonProps } from '../../context';
|
|
3
|
+
export type DefaultButtonVariant = 'contained' | 'outlined';
|
|
4
|
+
export interface DefaultButtonProps extends KeycloakThemeButtonProps {
|
|
5
|
+
variant: DefaultButtonVariant;
|
|
6
|
+
}
|
|
7
|
+
export declare const DefaultButton: React.MemoExoticComponent<({ children, onPress, disabled, loading, style, variant }: DefaultButtonProps) => React.JSX.Element>;
|
|
8
|
+
export declare const DefaultContainedButton: React.NamedExoticComponent<KeycloakThemeButtonProps>;
|
|
9
|
+
export declare const DefaultOutlinedButton: React.NamedExoticComponent<KeycloakThemeButtonProps>;
|
|
10
|
+
//# sourceMappingURL=DefaultButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultButton.d.ts","sourceRoot":"","sources":["../../../src/ui/DefaultButton/DefaultButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAa,MAAM,OAAO,CAAC;AAIlC,OAAO,KAAK,EAAC,wBAAwB,EAAC,MAAM,eAAe,CAAC;AAE5D,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,UAAU,CAAC;AAE5D,MAAM,WAAW,kBAAmB,SAAQ,wBAAwB;IAClE,OAAO,EAAE,oBAAoB,CAAC;CAC/B;AAMD,eAAO,MAAM,aAAa,uFACiD,kBAAkB,uBA8B5F,CAAC;AAKF,eAAO,MAAM,sBAAsB,sDAIjC,CAAC;AAKH,eAAO,MAAM,qBAAqB,sDAIhC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import React, { memo } from 'react';
|
|
2
|
+
import { StyleSheet, Text, TouchableOpacity } from 'react-native';
|
|
3
|
+
import { useKeycloakTheme } from '../../context';
|
|
4
|
+
export const DefaultButton = memo(({ children, onPress, disabled = false, loading = false, style, variant }) => {
|
|
5
|
+
const { colors: { button, buttonText, outlinedButtonBackground, outlinedButtonText }, } = useKeycloakTheme();
|
|
6
|
+
const isContained = variant === 'contained';
|
|
7
|
+
const backgroundColor = isContained ? button : outlinedButtonBackground;
|
|
8
|
+
const textColor = isContained ? buttonText : outlinedButtonText;
|
|
9
|
+
return (<TouchableOpacity style={[
|
|
10
|
+
styles.button,
|
|
11
|
+
{
|
|
12
|
+
backgroundColor,
|
|
13
|
+
borderWidth: isContained ? 0 : 1,
|
|
14
|
+
borderColor: outlinedButtonText,
|
|
15
|
+
},
|
|
16
|
+
style,
|
|
17
|
+
]} onPress={onPress} activeOpacity={0.7} disabled={disabled || loading}>
|
|
18
|
+
{loading ? (<Text style={[styles.text, { color: textColor }]}>...</Text>) : (<Text style={[styles.text, { color: textColor }]}>{children}</Text>)}
|
|
19
|
+
</TouchableOpacity>);
|
|
20
|
+
});
|
|
21
|
+
DefaultButton.displayName = 'DefaultButton';
|
|
22
|
+
export const DefaultContainedButton = memo(function DefaultContainedButton(props) {
|
|
23
|
+
return <DefaultButton {...props} variant="contained"/>;
|
|
24
|
+
});
|
|
25
|
+
DefaultContainedButton.displayName = 'DefaultContainedButton';
|
|
26
|
+
export const DefaultOutlinedButton = memo(function DefaultOutlinedButton(props) {
|
|
27
|
+
return <DefaultButton {...props} variant="outlined"/>;
|
|
28
|
+
});
|
|
29
|
+
DefaultOutlinedButton.displayName = 'DefaultOutlinedButton';
|
|
30
|
+
const styles = StyleSheet.create({
|
|
31
|
+
button: {
|
|
32
|
+
paddingVertical: 12,
|
|
33
|
+
borderRadius: 8,
|
|
34
|
+
alignItems: 'center',
|
|
35
|
+
justifyContent: 'center',
|
|
36
|
+
},
|
|
37
|
+
text: {
|
|
38
|
+
fontSize: 16,
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=DefaultButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultButton.js","sourceRoot":"","sources":["../../../src/ui/DefaultButton/DefaultButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAClC,OAAO,EAAC,UAAU,EAAE,IAAI,EAAE,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAEhE,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAa/C,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAC/B,CAAC,EAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,KAAK,EAAE,OAAO,EAAqB,EAAE,EAAE;IAC7F,MAAM,EACJ,MAAM,EAAE,EAAC,MAAM,EAAE,UAAU,EAAE,wBAAwB,EAAE,kBAAkB,EAAC,GAC3E,GAAG,gBAAgB,EAAE,CAAC;IACvB,MAAM,WAAW,GAAG,OAAO,KAAK,WAAW,CAAC;IAC5C,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,wBAAwB,CAAC;IACxE,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAEhE,OAAO,CACL,CAAC,gBAAgB,CACf,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,MAAM;YACb;gBACE,eAAe;gBACf,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,WAAW,EAAE,kBAAkB;aAChC;YACD,KAAK;SACN,CAAC,CACF,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,aAAa,CAAC,CAAC,GAAG,CAAC,CACnB,QAAQ,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,CAC9B;QAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CACT,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,CAC3D,CAAC,CAAC,CAAC,CACF,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,SAAS,EAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,CAClE,CACH;MAAA,EAAE,gBAAgB,CAAC,CACpB,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;AAG5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC,SAAS,sBAAsB,CACxE,KAA+B;IAE/B,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,WAAW,EAAG,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,sBAAsB,CAAC,WAAW,GAAG,wBAAwB,CAAC;AAG9D,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,CAAC,SAAS,qBAAqB,CACtE,KAA+B;IAE/B,OAAO,CAAC,aAAa,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,EAAG,CAAC;AACzD,CAAC,CAAC,CAAC;AAEH,qBAAqB,CAAC,WAAW,GAAG,uBAAuB,CAAC;AAE5D,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,MAAM,EAAE;QACN,eAAe,EAAE,EAAE;QACnB,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,EAAE;KACb;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { type KeycloakThemeIconButtonProps } from '../../context';
|
|
3
|
+
export declare const DefaultIconButton: React.MemoExoticComponent<({ renderIcon, onPress, disabled, loading, style, }: KeycloakThemeIconButtonProps) => React.JSX.Element>;
|
|
4
|
+
//# sourceMappingURL=DefaultIconButton.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultIconButton.d.ts","sourceRoot":"","sources":["../../../src/ui/DefaultButton/DefaultIconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAa,MAAM,OAAO,CAAC;AAGlC,OAAO,EAAC,KAAK,4BAA4B,EAAmB,MAAM,eAAe,CAAC;AAGlF,eAAO,MAAM,iBAAiB,iFAOzB,4BAA4B,uBAehC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React, { memo } from 'react';
|
|
2
|
+
import { ActivityIndicator, TouchableOpacity } from 'react-native';
|
|
3
|
+
import { useKeycloakTheme } from '../../context';
|
|
4
|
+
export const DefaultIconButton = memo(({ renderIcon, onPress, disabled = false, loading = false, style, }) => {
|
|
5
|
+
const { colors: { outlinedButtonText: iconColor }, } = useKeycloakTheme();
|
|
6
|
+
return (<TouchableOpacity style={[style]} onPress={onPress} activeOpacity={0.7} disabled={disabled || loading}>
|
|
7
|
+
{loading ? <ActivityIndicator size="small" color={iconColor}/> : renderIcon}
|
|
8
|
+
</TouchableOpacity>);
|
|
9
|
+
});
|
|
10
|
+
DefaultIconButton.displayName = 'DefaultIconButton';
|
|
11
|
+
//# sourceMappingURL=DefaultIconButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultIconButton.js","sourceRoot":"","sources":["../../../src/ui/DefaultButton/DefaultIconButton.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAClC,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAC,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAoC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAGlF,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CACnC,CAAC,EACC,UAAU,EACV,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,OAAO,GAAG,KAAK,EACf,KAAK,GACwB,EAAE,EAAE;IACjC,MAAM,EACJ,MAAM,EAAE,EAAC,kBAAkB,EAAE,SAAS,EAAC,GACxC,GAAG,gBAAgB,EAAE,CAAC;IAEvB,OAAO,CACL,CAAC,gBAAgB,CACf,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CACf,OAAO,CAAC,CAAC,OAAO,CAAC,CACjB,aAAa,CAAC,CAAC,GAAG,CAAC,CACnB,QAAQ,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,CAC9B;QAAA,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,EAAG,CAAC,CAAC,CAAC,UAAU,CAC9E;MAAA,EAAE,gBAAgB,CAAC,CACpB,CAAC;AACJ,CAAC,CACF,CAAC;AAEF,iBAAiB,CAAC,WAAW,GAAG,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { DefaultButton, DefaultContainedButton, DefaultOutlinedButton } from './DefaultButton';
|
|
2
|
+
export type { DefaultButtonProps, DefaultButtonVariant } from './DefaultButton';
|
|
3
|
+
export { DefaultIconButton } from './DefaultIconButton';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/DefaultButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAC7F,YAAY,EAAC,kBAAkB,EAAE,oBAAoB,EAAC,MAAM,iBAAiB,CAAC;AAC9E,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/DefaultButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAE,sBAAsB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AAE7F,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultLoader.d.ts","sourceRoot":"","sources":["../../../src/ui/DefaultLoader/DefaultLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,eAAO,MAAM,aAAa,oCAMxB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ActivityIndicator, StyleSheet, View } from 'react-native';
|
|
3
|
+
export const DefaultLoader = React.memo(function DefaultLoader() {
|
|
4
|
+
return (<View style={styles.container}>
|
|
5
|
+
<ActivityIndicator size="large"/>
|
|
6
|
+
</View>);
|
|
7
|
+
});
|
|
8
|
+
DefaultLoader.displayName = 'DefaultLoader';
|
|
9
|
+
const styles = StyleSheet.create({
|
|
10
|
+
container: {
|
|
11
|
+
flex: 1,
|
|
12
|
+
alignItems: 'center',
|
|
13
|
+
justifyContent: 'center',
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=DefaultLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DefaultLoader.js","sourceRoot":"","sources":["../../../src/ui/DefaultLoader/DefaultLoader.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAC,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAC,MAAM,cAAc,CAAC;AAMjE,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,aAAa;IAC5D,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;MAAA,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,EACjC;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,WAAW,GAAG,eAAe,CAAC;AAE5C,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;QACP,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/DefaultLoader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/ui/DefaultLoader/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { LogoutButtonIconProps } from './types';
|
|
3
|
+
export declare const LogoutButtonIcon: React.MemoExoticComponent<({ renderIcon, ...baseProps }: LogoutButtonIconProps) => React.JSX.Element>;
|
|
4
|
+
//# sourceMappingURL=LogoutButtonIcon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogoutButtonIcon.d.ts","sourceRoot":"","sources":["../../../src/ui/LogoutButton/LogoutButtonIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAa,MAAM,OAAO,CAAC;AAGlC,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC;AAOnD,eAAO,MAAM,gBAAgB,2DAAqC,qBAAqB,uBAUrF,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React, { memo } from 'react';
|
|
2
|
+
import { useKeycloakTheme } from '../../context';
|
|
3
|
+
import { useLogoutButton } from './useLogoutButton';
|
|
4
|
+
export const LogoutButtonIcon = memo(({ renderIcon, ...baseProps }) => {
|
|
5
|
+
const { IconButtonComponent } = useKeycloakTheme();
|
|
6
|
+
const { buttonProps, modal } = useLogoutButton(baseProps);
|
|
7
|
+
return (<>
|
|
8
|
+
<IconButtonComponent {...buttonProps} renderIcon={renderIcon}/>
|
|
9
|
+
{modal}
|
|
10
|
+
</>);
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=LogoutButtonIcon.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogoutButtonIcon.js","sourceRoot":"","sources":["../../../src/ui/LogoutButton/LogoutButtonIcon.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,IAAI,EAAC,MAAM,OAAO,CAAC;AAElC,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAMlD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,EAAC,UAAU,EAAE,GAAG,SAAS,EAAwB,EAAE,EAAE;IACzF,MAAM,EAAC,mBAAmB,EAAC,GAAG,gBAAgB,EAAE,CAAC;IACjD,MAAM,EAAC,WAAW,EAAE,KAAK,EAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAExD,OAAO,CACL,EACE;MAAA,CAAC,mBAAmB,CAAC,IAAI,WAAW,CAAC,CAAC,UAAU,CAAC,CAAC,UAAU,CAAC,EAC7D;MAAA,CAAC,KAAK,CACR;IAAA,GAAG,CACJ,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { LogoutButtonTextProps } from './types';
|
|
3
|
+
export declare const LogoutButtonText: React.MemoExoticComponent<({ variant, label, ...baseProps }: LogoutButtonTextProps) => React.JSX.Element>;
|
|
4
|
+
//# sourceMappingURL=LogoutButtonText.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogoutButtonText.d.ts","sourceRoot":"","sources":["../../../src/ui/LogoutButton/LogoutButtonText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsB,MAAM,OAAO,CAAC;AAG3C,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC;AAOnD,eAAO,MAAM,gBAAgB,+DAAyC,qBAAqB,uBAiBzF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import React, { memo, useMemo } from 'react';
|
|
2
|
+
import { useKeycloakTheme } from '../../context';
|
|
3
|
+
import { useLogoutButton } from './useLogoutButton';
|
|
4
|
+
export const LogoutButtonText = memo(({ variant, label, ...baseProps }) => {
|
|
5
|
+
const { ContainedButtonComponent, OutlinedButtonComponent } = useKeycloakTheme();
|
|
6
|
+
const { buttonProps, modal } = useLogoutButton(baseProps);
|
|
7
|
+
const trigger = useMemo(() => {
|
|
8
|
+
if (variant === 'contained') {
|
|
9
|
+
return <ContainedButtonComponent {...buttonProps}>{label}</ContainedButtonComponent>;
|
|
10
|
+
}
|
|
11
|
+
return <OutlinedButtonComponent {...buttonProps}>{label}</OutlinedButtonComponent>;
|
|
12
|
+
}, [variant, label, buttonProps, ContainedButtonComponent, OutlinedButtonComponent]);
|
|
13
|
+
return (<>
|
|
14
|
+
{trigger}
|
|
15
|
+
{modal}
|
|
16
|
+
</>);
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=LogoutButtonText.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LogoutButtonText.js","sourceRoot":"","sources":["../../../src/ui/LogoutButton/LogoutButtonText.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAE/C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAMlD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,EAAC,OAAO,EAAE,KAAK,EAAE,GAAG,SAAS,EAAwB,EAAE,EAAE;IAC7F,MAAM,EAAC,wBAAwB,EAAE,uBAAuB,EAAC,GAAG,gBAAgB,EAAE,CAAC;IAC/E,MAAM,EAAC,WAAW,EAAE,KAAK,EAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAExD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE;QAC3B,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;YAC5B,OAAO,CAAC,wBAAwB,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,wBAAwB,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,CAAC,uBAAuB,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,uBAAuB,CAAC,CAAC;IACrF,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,uBAAuB,CAAC,CAAC,CAAC;IAErF,OAAO,CACL,EACE;MAAA,CAAC,OAAO,CACR;MAAA,CAAC,KAAK,CACR;IAAA,GAAG,CACJ,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/ui/LogoutButton/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,YAAY,EAAC,qBAAqB,EAAE,qBAAqB,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC"}
|