@bmc-soft/keycloak-auth 1.0.11 → 2.0.2

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.
Files changed (105) hide show
  1. package/README.md +123 -60
  2. package/dist/_lib/types/confirmAuthPhase.d.ts +1 -2
  3. package/dist/_lib/types/confirmAuthPhase.d.ts.map +1 -1
  4. package/dist/_lib/types/confirmAuthPhase.js +1 -2
  5. package/dist/_lib/types/confirmAuthPhase.js.map +1 -1
  6. package/dist/axios/adapters/KeycloakTokenProvider.js +8 -8
  7. package/dist/axios/adapters/KeycloakTokenProvider.js.map +1 -1
  8. package/dist/axios/interceptors.js +2 -2
  9. package/dist/axios/interceptors.js.map +1 -1
  10. package/dist/context/KeycloakConfigContext.d.ts +20 -1
  11. package/dist/context/KeycloakConfigContext.d.ts.map +1 -1
  12. package/dist/context/KeycloakConfigContext.js +52 -3
  13. package/dist/context/KeycloakConfigContext.js.map +1 -1
  14. package/dist/context/KeycloakInstanceContext.d.ts +2 -0
  15. package/dist/context/KeycloakInstanceContext.d.ts.map +1 -1
  16. package/dist/context/KeycloakInstanceContext.js +93 -18
  17. package/dist/context/KeycloakInstanceContext.js.map +1 -1
  18. package/dist/context/KeycloakProvider.d.ts +8 -1
  19. package/dist/context/KeycloakProvider.d.ts.map +1 -1
  20. package/dist/context/KeycloakProvider.js +3 -3
  21. package/dist/context/KeycloakProvider.js.map +1 -1
  22. package/dist/context/ReauthContext.d.ts +3 -1
  23. package/dist/context/ReauthContext.d.ts.map +1 -1
  24. package/dist/context/ReauthContext.js +6 -2
  25. package/dist/context/ReauthContext.js.map +1 -1
  26. package/dist/context/TokenContext.d.ts +2 -0
  27. package/dist/context/TokenContext.d.ts.map +1 -1
  28. package/dist/context/TokenContext.js +32 -10
  29. package/dist/context/TokenContext.js.map +1 -1
  30. package/dist/context/index.d.ts +2 -2
  31. package/dist/context/index.d.ts.map +1 -1
  32. package/dist/context/index.js +1 -1
  33. package/dist/context/index.js.map +1 -1
  34. package/dist/context/reauthRequiredRef.d.ts +2 -1
  35. package/dist/context/reauthRequiredRef.d.ts.map +1 -1
  36. package/dist/context/reauthRequiredRef.js.map +1 -1
  37. package/dist/core/adapter.d.ts.map +1 -1
  38. package/dist/core/adapter.js +37 -4
  39. package/dist/core/adapter.js.map +1 -1
  40. package/dist/core/index.d.ts +3 -1
  41. package/dist/core/index.d.ts.map +1 -1
  42. package/dist/core/index.js +1 -0
  43. package/dist/core/index.js.map +1 -1
  44. package/dist/core/sessionPolicy.d.ts +21 -0
  45. package/dist/core/sessionPolicy.d.ts.map +1 -0
  46. package/dist/core/sessionPolicy.js +63 -0
  47. package/dist/core/sessionPolicy.js.map +1 -0
  48. package/dist/core/types.d.ts +17 -0
  49. package/dist/core/types.d.ts.map +1 -1
  50. package/dist/hooks/useKeycloakAuth.d.ts +3 -0
  51. package/dist/hooks/useKeycloakAuth.d.ts.map +1 -1
  52. package/dist/hooks/useKeycloakAuth.js +12 -7
  53. package/dist/hooks/useKeycloakAuth.js.map +1 -1
  54. package/dist/hooks/useKeycloakAuthScreen.d.ts +1 -1
  55. package/dist/hooks/useKeycloakAuthScreen.d.ts.map +1 -1
  56. package/dist/hooks/useKeycloakAuthScreen.js +3 -2
  57. package/dist/hooks/useKeycloakAuthScreen.js.map +1 -1
  58. package/dist/index.d.ts +1 -1
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js.map +1 -1
  61. package/dist/screens/AuthPage/AuthPage.d.ts +2 -0
  62. package/dist/screens/AuthPage/AuthPage.d.ts.map +1 -1
  63. package/dist/screens/AuthPage/AuthPage.js +12 -15
  64. package/dist/screens/AuthPage/AuthPage.js.map +1 -1
  65. package/dist/screens/ConfirmAuthPage/ConfirmAuthPage.d.ts +3 -1
  66. package/dist/screens/ConfirmAuthPage/ConfirmAuthPage.d.ts.map +1 -1
  67. package/dist/screens/ConfirmAuthPage/ConfirmAuthPage.js +132 -57
  68. package/dist/screens/ConfirmAuthPage/ConfirmAuthPage.js.map +1 -1
  69. package/dist/screens/ConfirmAuthPage/index.d.ts +1 -0
  70. package/dist/screens/ConfirmAuthPage/index.d.ts.map +1 -1
  71. package/dist/screens/index.d.ts +1 -0
  72. package/dist/screens/index.d.ts.map +1 -1
  73. package/dist/storage/credentialStorage.d.ts +8 -0
  74. package/dist/storage/credentialStorage.d.ts.map +1 -1
  75. package/dist/storage/credentialStorage.js +99 -1
  76. package/dist/storage/credentialStorage.js.map +1 -1
  77. package/dist/storage/tokenStorage.d.ts +10 -0
  78. package/dist/storage/tokenStorage.d.ts.map +1 -1
  79. package/dist/storage/tokenStorage.js +30 -8
  80. package/dist/storage/tokenStorage.js.map +1 -1
  81. package/dist/ui/LogoutConfirmSheet/LogoutConfirmSheet.d.ts.map +1 -1
  82. package/dist/ui/LogoutConfirmSheet/LogoutConfirmSheet.js +10 -7
  83. package/dist/ui/LogoutConfirmSheet/LogoutConfirmSheet.js.map +1 -1
  84. package/dist/ui/NumberPad/NumberPad.d.ts.map +1 -1
  85. package/dist/ui/NumberPad/NumberPad.js +16 -9
  86. package/dist/ui/NumberPad/NumberPad.js.map +1 -1
  87. package/dist/ui/PINConfirm/PINConfirm.d.ts +1 -0
  88. package/dist/ui/PINConfirm/PINConfirm.d.ts.map +1 -1
  89. package/dist/ui/PINConfirm/PINConfirm.js +40 -12
  90. package/dist/ui/PINConfirm/PINConfirm.js.map +1 -1
  91. package/dist/ui/PINSetup/stages/BiometryStage.d.ts.map +1 -1
  92. package/dist/ui/PINSetup/stages/BiometryStage.js +6 -2
  93. package/dist/ui/PINSetup/stages/BiometryStage.js.map +1 -1
  94. package/dist/ui/PINSetup/styles.d.ts +0 -1
  95. package/dist/ui/PINSetup/styles.d.ts.map +1 -1
  96. package/dist/ui/PINSetup/styles.js +0 -1
  97. package/dist/ui/PINSetup/styles.js.map +1 -1
  98. package/dist/ui/WebViewLogin/WebViewLogin.d.ts.map +1 -1
  99. package/dist/ui/WebViewLogin/WebViewLogin.js +2 -2
  100. package/dist/ui/WebViewLogin/WebViewLogin.js.map +1 -1
  101. package/dist/widgets/ReauthBottomSheet/ReauthBottomSheet.d.ts +2 -0
  102. package/dist/widgets/ReauthBottomSheet/ReauthBottomSheet.d.ts.map +1 -1
  103. package/dist/widgets/ReauthBottomSheet/ReauthBottomSheet.js +19 -8
  104. package/dist/widgets/ReauthBottomSheet/ReauthBottomSheet.js.map +1 -1
  105. package/package.json +2 -1
@@ -1,5 +1,29 @@
1
1
  import LocalStorage from './storage';
2
2
  import { fetchJSON } from './utils';
3
+ async function resolveClientSecret(initOptions) {
4
+ const secret = initOptions.getClientSecret
5
+ ? await initOptions.getClientSecret()
6
+ : initOptions.clientSecret;
7
+ const trimmed = typeof secret === 'string' ? secret.trim() : '';
8
+ return trimmed.length ? trimmed : undefined;
9
+ }
10
+ async function createTokenRequestBody(params, initOptions) {
11
+ const clientSecret = await resolveClientSecret(initOptions);
12
+ return clientSecret ? `${params}&client_secret=${encodeURIComponent(clientSecret)}` : params;
13
+ }
14
+ async function readTokenResponse(response, operation) {
15
+ const json = (await response.json());
16
+ if (!response.ok || json.error || !json.access_token) {
17
+ const message = json.error_description || json.error || `HTTP ${response.status}`;
18
+ console.error(`[Keycloak] token ${operation} failed:`, {
19
+ status: response.status,
20
+ error: json.error,
21
+ error_description: json.error_description,
22
+ });
23
+ throw new Error(`Keycloak token ${operation} failed: ${message}`);
24
+ }
25
+ return json;
26
+ }
3
27
  class RNAdapter {
4
28
  constructor(client, _keycloakConfig, initOptions) {
5
29
  this.client = client;
@@ -38,24 +62,33 @@ class RNAdapter {
38
62
  return await fetchJSON(oidcProviderConfigUrl);
39
63
  }
40
64
  async fetchTokens(tokenUrl, params) {
65
+ const body = await createTokenRequestBody(params, this.initOptions);
41
66
  const tokenRes = await fetch(tokenUrl, {
42
67
  method: 'POST',
43
68
  headers: {
44
69
  'Content-type': 'application/x-www-form-urlencoded',
45
70
  },
46
- body: params,
71
+ body,
47
72
  });
48
- return (await tokenRes.json());
73
+ return readTokenResponse(tokenRes, 'exchange');
49
74
  }
50
75
  async refreshTokens(tokenUrl, params) {
76
+ const body = await createTokenRequestBody(params, this.initOptions);
51
77
  const tokenRes = await fetch(tokenUrl, {
52
78
  method: 'POST',
53
79
  headers: {
54
80
  'Content-type': 'application/x-www-form-urlencoded',
55
81
  },
56
- body: params,
82
+ body,
57
83
  });
58
- return (await tokenRes.json());
84
+ try {
85
+ return await readTokenResponse(tokenRes, 'refresh');
86
+ }
87
+ catch (error) {
88
+ this.client.__lastTokenRefreshError =
89
+ error instanceof Error ? error : new Error(String(error));
90
+ throw error;
91
+ }
59
92
  }
60
93
  async fetchUserProfile(profileUrl, token) {
61
94
  return await fetchJSON(profileUrl, token);
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../src/core/adapter.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,7 @@
1
1
  import KeycloakReactNativeClient from './client';
2
2
  export { KeycloakReactNativeClient };
3
3
  export { LocalStorage } from './storage';
4
- export type { KeycloakConfig, KeycloakConfigWith2FA, RNKeycloakInitOptions, KeycloakLoginOptions, TokenUpdateResult, KeycloakProfile, AuthState, } from './types';
4
+ export { OFFLINE_ACCESS_SCOPE, getUrlHost, isInternalNetworkUrl, isIpAddressHost, resolveBackgroundReauthConfig, shouldShowBackgroundReauth, withOfflineAccessScope, } from './sessionPolicy';
5
+ export type { BackgroundReauthConfig, BackgroundReauthCheck } from './sessionPolicy';
6
+ export type { KeycloakConfig, KeycloakConfigWith2FA, RNKeycloakInitOptions, KeycloakLoginOptions, KeycloakTokens, TokenUpdateResult, KeycloakProfile, AuthState, InitRecoveryStrategy, StoredTokenInitPolicy, } from './types';
5
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AACvC,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,SAAS,GACV,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAC,sBAAsB,EAAE,qBAAqB,EAAC,MAAM,iBAAiB,CAAC;AACnF,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,qBAAqB,EACrB,oBAAoB,EACpB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import KeycloakReactNativeClient from './client';
2
2
  export { KeycloakReactNativeClient };
3
3
  export { LocalStorage } from './storage';
4
+ export { OFFLINE_ACCESS_SCOPE, getUrlHost, isInternalNetworkUrl, isIpAddressHost, resolveBackgroundReauthConfig, shouldShowBackgroundReauth, withOfflineAccessScope, } from './sessionPolicy';
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,MAAM,UAAU,CAAC;AAMjD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,WAAW,CAAC;AACvC,OAAO,EACL,oBAAoB,EACpB,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { KeycloakLoginOptions } from '@react-keycloak/keycloak-ts';
2
+ export declare const OFFLINE_ACCESS_SCOPE = "offline_access";
3
+ export interface BackgroundReauthConfig {
4
+ enabled?: boolean;
5
+ thresholdMs?: number;
6
+ internalNetworkMode?: 'ip-host-is-internal';
7
+ }
8
+ export interface BackgroundReauthCheck {
9
+ enabled?: boolean;
10
+ thresholdMs?: number;
11
+ authServerUrl?: string;
12
+ backgroundedAt: number | null;
13
+ now?: number;
14
+ }
15
+ export declare function withOfflineAccessScope(options?: KeycloakLoginOptions, enabled?: boolean): KeycloakLoginOptions;
16
+ export declare function isIpAddressHost(host: string): boolean;
17
+ export declare function getUrlHost(url?: string): string | null;
18
+ export declare function isInternalNetworkUrl(url?: string): boolean;
19
+ export declare function shouldShowBackgroundReauth({ enabled, thresholdMs, authServerUrl, backgroundedAt, now, }: BackgroundReauthCheck): boolean;
20
+ export declare function resolveBackgroundReauthConfig(config?: BackgroundReauthConfig): Required<BackgroundReauthConfig>;
21
+ //# sourceMappingURL=sessionPolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionPolicy.d.ts","sourceRoot":"","sources":["../../src/core/sessionPolicy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,oBAAoB,EAAC,MAAM,6BAA6B,CAAC;AAEtE,eAAO,MAAM,oBAAoB,mBAAmB,CAAC;AAErD,MAAM,WAAW,sBAAsB;IACrC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,qBAAqB,CAAC;CAC7C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAKD,wBAAgB,sBAAsB,CACpC,OAAO,GAAE,oBAAyB,EAClC,OAAO,UAAO,GACb,oBAAoB,CAoBtB;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAarD;AAED,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAQtD;AAED,wBAAgB,oBAAoB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAG1D;AAED,wBAAgB,0BAA0B,CAAC,EACzC,OAAc,EACd,WAAoD,EACpD,aAAa,EACb,cAAc,EACd,GAAgB,GACjB,EAAE,qBAAqB,GAAG,OAAO,CAIjC;AAED,wBAAgB,6BAA6B,CAC3C,MAAM,CAAC,EAAE,sBAAsB,GAC9B,QAAQ,CAAC,sBAAsB,CAAC,CAMlC"}
@@ -0,0 +1,63 @@
1
+ export const OFFLINE_ACCESS_SCOPE = 'offline_access';
2
+ const OPENID_SCOPE = 'openid';
3
+ const DEFAULT_BACKGROUND_REAUTH_THRESHOLD_MS = 60000;
4
+ export function withOfflineAccessScope(options = {}, enabled = true) {
5
+ if (!enabled)
6
+ return { ...options };
7
+ const scopes = (options.scope ?? '')
8
+ .split(/\s+/)
9
+ .map(scope => scope.trim())
10
+ .filter(Boolean);
11
+ if (!scopes.includes(OPENID_SCOPE)) {
12
+ scopes.unshift(OPENID_SCOPE);
13
+ }
14
+ if (!scopes.includes(OFFLINE_ACCESS_SCOPE)) {
15
+ scopes.push(OFFLINE_ACCESS_SCOPE);
16
+ }
17
+ return {
18
+ ...options,
19
+ scope: scopes.join(' '),
20
+ };
21
+ }
22
+ export function isIpAddressHost(host) {
23
+ const normalizedHost = host.replace(/^\[/, '').replace(/\]$/, '');
24
+ const ipv4Parts = normalizedHost.split('.');
25
+ if (ipv4Parts.length === 4) {
26
+ return ipv4Parts.every(part => {
27
+ if (!/^\d{1,3}$/.test(part))
28
+ return false;
29
+ const value = Number(part);
30
+ return value >= 0 && value <= 255;
31
+ });
32
+ }
33
+ return /^[0-9a-fA-F:]+$/.test(normalizedHost) && normalizedHost.includes(':');
34
+ }
35
+ export function getUrlHost(url) {
36
+ if (!url)
37
+ return null;
38
+ try {
39
+ return new URL(url).hostname;
40
+ }
41
+ catch {
42
+ return null;
43
+ }
44
+ }
45
+ export function isInternalNetworkUrl(url) {
46
+ const host = getUrlHost(url);
47
+ return host ? isIpAddressHost(host) : false;
48
+ }
49
+ export function shouldShowBackgroundReauth({ enabled = true, thresholdMs = DEFAULT_BACKGROUND_REAUTH_THRESHOLD_MS, authServerUrl, backgroundedAt, now = Date.now(), }) {
50
+ if (!enabled || backgroundedAt == null)
51
+ return false;
52
+ if (isInternalNetworkUrl(authServerUrl))
53
+ return false;
54
+ return now - backgroundedAt > thresholdMs;
55
+ }
56
+ export function resolveBackgroundReauthConfig(config) {
57
+ return {
58
+ enabled: config?.enabled ?? true,
59
+ thresholdMs: config?.thresholdMs ?? DEFAULT_BACKGROUND_REAUTH_THRESHOLD_MS,
60
+ internalNetworkMode: config?.internalNetworkMode ?? 'ip-host-is-internal',
61
+ };
62
+ }
63
+ //# sourceMappingURL=sessionPolicy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionPolicy.js","sourceRoot":"","sources":["../../src/core/sessionPolicy.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,14 @@
1
1
  import type { KeycloakConfig, KeycloakInitOptions, KeycloakLoginOptions, KeycloakProfile } from '@react-keycloak/keycloak-ts';
2
+ import type { BackgroundReauthConfig } from './sessionPolicy';
2
3
  export type { KeycloakConfig, KeycloakLoginOptions, KeycloakProfile };
3
4
  export interface KeycloakConfigWith2FA extends KeycloakConfig {
4
5
  clientId2fa?: string;
6
+ offlineAccessEnabled?: boolean;
7
+ backgroundReauth?: BackgroundReauthConfig;
8
+ clientSecret?: string;
9
+ getClientSecret?: () => string | undefined | Promise<string | undefined>;
5
10
  }
11
+ export type InitRecoveryStrategy = 'none' | 'clear-tokens-and-retry';
6
12
  export interface RNKeycloakInitOptions extends KeycloakInitOptions {
7
13
  redirectUri?: string;
8
14
  onAuthError?: (errorData: {
@@ -11,21 +17,32 @@ export interface RNKeycloakInitOptions extends KeycloakInitOptions {
11
17
  }) => void;
12
18
  onReady?: (authenticated?: boolean) => void;
13
19
  onTokensChanged?: () => void;
20
+ clientSecret?: string;
21
+ getClientSecret?: () => string | undefined | Promise<string | undefined>;
22
+ }
23
+ export interface StoredTokenInitPolicy {
24
+ deferStoredTokensUntilRefresh?: boolean;
14
25
  }
15
26
  export interface TokenUpdateResult {
16
27
  token: string;
28
+ accessToken?: string;
17
29
  refreshToken?: string;
30
+ offlineToken?: string;
18
31
  idToken?: string;
19
32
  }
20
33
  export interface KeycloakTokens {
21
34
  token: string | null;
35
+ accessToken: string | null;
22
36
  refreshToken: string | null;
37
+ offlineToken: string | null;
23
38
  idToken: string | null;
24
39
  }
25
40
  export interface AuthState {
26
41
  isAuthenticated: boolean;
27
42
  token: string | null;
43
+ accessToken: string | null;
28
44
  refreshToken: string | null;
45
+ offlineToken: string | null;
29
46
  idToken: string | null;
30
47
  profile: KeycloakProfile | null;
31
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EAChB,MAAM,6BAA6B,CAAC;AAErC,YAAY,EAAC,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAC,CAAC;AAQpE,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAE3D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAEhE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAC,KAAK,IAAI,CAAC;IAEhF,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAE5C,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B;AAKD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAKD,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EAChB,MAAM,6BAA6B,CAAC;AACrC,OAAO,KAAK,EAAC,sBAAsB,EAAC,MAAM,iBAAiB,CAAC;AAE5D,YAAY,EAAC,cAAc,EAAE,oBAAoB,EAAE,eAAe,EAAC,CAAC;AAQpE,MAAM,WAAW,qBAAsB,SAAQ,cAAc;IAK3D,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAE/B,gBAAgB,CAAC,EAAE,sBAAsB,CAAC;IAK1C,YAAY,CAAC,EAAE,MAAM,CAAC;IAItB,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1E;AAED,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,wBAAwB,CAAC;AAKrE,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAEhE,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,WAAW,CAAC,EAAE,CAAC,SAAS,EAAE;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAC,KAAK,IAAI,CAAC;IAEhF,OAAO,CAAC,EAAE,CAAC,aAAa,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IAE5C,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAE7B,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAC1E;AAED,MAAM,WAAW,qBAAqB;IAMpC,6BAA6B,CAAC,EAAE,OAAO,CAAC;CACzC;AAKD,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAKD,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAKD,MAAM,WAAW,SAAS;IACxB,eAAe,EAAE,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,eAAe,GAAG,IAAI,CAAC;CACjC"}
@@ -5,7 +5,10 @@ export interface UseKeycloakAuthResult {
5
5
  isInitialized: boolean;
6
6
  isLoading: boolean;
7
7
  error: Error | null;
8
+ accessToken: string | null;
8
9
  token: string | null;
10
+ offlineToken: string | null;
11
+ refreshToken: string | null;
9
12
  isExpired: boolean;
10
13
  isAuthenticated: boolean;
11
14
  updateToken: (minValidity?: number) => Promise<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"useKeycloakAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeycloakAuth.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,mBAAmB,EAAsB,MAAM,YAAY,CAAC;AACpE,OAAO,KAAK,EAAC,oBAAoB,EAAE,eAAe,EAAC,MAAM,SAAS,CAAC;AAGnE,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,UAAU,CAAC,CAAC;IAE7D,aAAa,EAAE,OAAO,CAAC;IAEvB,SAAS,EAAE,OAAO,CAAC;IAEnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,SAAS,EAAE,OAAO,CAAC;IAEnB,eAAe,EAAE,OAAO,CAAC;IAEzB,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,KAAK,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,eAAe,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhD,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,MAAM,CAAC;IAE3D,eAAe,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAElD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAMjC,gBAAgB,EAAE,OAAO,CAAC;IAE1B,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAMD,eAAO,MAAM,eAAe,QAAO,qBAwElC,CAAC"}
1
+ {"version":3,"file":"useKeycloakAuth.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeycloakAuth.ts"],"names":[],"mappings":"AAMA,OAAO,EAAC,mBAAmB,EAAiD,MAAM,YAAY,CAAC;AAC/F,OAAO,KAAK,EAAC,oBAAoB,EAAE,eAAe,EAAC,MAAM,SAAS,CAAC;AAInE,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,EAAE,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAC,UAAU,CAAC,CAAC;IAE7D,aAAa,EAAE,OAAO,CAAC;IAEvB,SAAS,EAAE,OAAO,CAAC;IAEnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;IAEpB,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAErB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAE5B,SAAS,EAAE,OAAO,CAAC;IAEnB,eAAe,EAAE,OAAO,CAAC;IAEzB,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAEvD,KAAK,EAAE,CAAC,OAAO,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAExD,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAE5B,eAAe,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhD,cAAc,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,KAAK,MAAM,CAAC;IAE3D,eAAe,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IAElD,WAAW,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAMjC,gBAAgB,EAAE,OAAO,CAAC;IAE1B,UAAU,EAAE,MAAM,IAAI,CAAC;IAEvB,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB;AAMD,eAAO,MAAM,eAAe,QAAO,qBAiFlC,CAAC"}
@@ -1,10 +1,12 @@
1
1
  import { useCallback } from 'react';
2
- import { useKeycloakInstance, useReauth, useToken } from '../context';
2
+ import { useKeycloakInstance, useKeycloakSessionOptions, useReauth, useToken } from '../context';
3
+ import { withOfflineAccessScope } from '../core';
3
4
  import { tokenStorage } from '../storage';
4
5
  export const useKeycloakAuth = () => {
5
6
  const { keycloak, isInitialized, isLoading, error, redirectUri } = useKeycloakInstance();
6
- const { token, isExpired, updateToken, clearTokens } = useToken();
7
+ const { token, refreshToken, isExpired, updateToken, clearTokens } = useToken();
7
8
  const { isReauthRequired, showReauth, hideReauth } = useReauth();
9
+ const { offlineAccessEnabled } = useKeycloakSessionOptions();
8
10
  const login = useCallback(async (options) => {
9
11
  if (!keycloak) {
10
12
  throw new Error('[useKeycloakAuth] Keycloak not initialized');
@@ -12,8 +14,8 @@ export const useKeycloakAuth = () => {
12
14
  await keycloak.login({ ...options, redirectUri });
13
15
  if (keycloak.token) {
14
16
  await tokenStorage.saveTokens({
15
- token: keycloak.token,
16
- refreshToken: keycloak.refreshToken ?? undefined,
17
+ accessToken: keycloak.token,
18
+ offlineToken: keycloak.refreshToken ?? undefined,
17
19
  idToken: keycloak.idToken ?? undefined,
18
20
  });
19
21
  }
@@ -31,12 +33,12 @@ export const useKeycloakAuth = () => {
31
33
  }
32
34
  return await keycloak.loadUserProfile();
33
35
  }, [keycloak]);
34
- const createLoginUrl = useCallback(() => {
36
+ const createLoginUrl = useCallback((options = {}) => {
35
37
  if (!keycloak) {
36
38
  throw new Error('[useKeycloakAuth] Keycloak not initialized');
37
39
  }
38
- return keycloak.createLoginUrl({ redirectUri });
39
- }, [keycloak, redirectUri]);
40
+ return keycloak.createLoginUrl(withOfflineAccessScope({ ...options, redirectUri }, offlineAccessEnabled));
41
+ }, [keycloak, offlineAccessEnabled, redirectUri]);
40
42
  const createLogoutUrl = useCallback(() => {
41
43
  if (!keycloak) {
42
44
  throw new Error('[useKeycloakAuth] Keycloak not initialized');
@@ -49,7 +51,10 @@ export const useKeycloakAuth = () => {
49
51
  isInitialized,
50
52
  isLoading,
51
53
  error,
54
+ accessToken: token,
52
55
  token,
56
+ offlineToken: refreshToken,
57
+ refreshToken,
53
58
  isExpired,
54
59
  isAuthenticated,
55
60
  updateToken,
@@ -1 +1 @@
1
- {"version":3,"file":"useKeycloakAuth.js","sourceRoot":"","sources":["../../src/hooks/useKeycloakAuth.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useKeycloakAuth.js","sourceRoot":"","sources":["../../src/hooks/useKeycloakAuth.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type KeycloakAuthScreen = 'login' | 'confirm';
1
+ export type KeycloakAuthScreen = 'resolving' | 'login' | 'confirm';
2
2
  export interface UseKeycloakAuthScreenOptions {
3
3
  shouldShowConfirm?: () => Promise<boolean>;
4
4
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useKeycloakAuthScreen.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeycloakAuthScreen.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,SAAS,CAAC;AAErD,MAAM,WAAW,4BAA4B;IAK3C,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAMD,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,2BAA2B,CA4D7B"}
1
+ {"version":3,"file":"useKeycloakAuthScreen.d.ts","sourceRoot":"","sources":["../../src/hooks/useKeycloakAuthScreen.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,kBAAkB,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,4BAA4B;IAK3C,iBAAiB,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,2BAA2B;IAC1C,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAClC,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB;AAMD,wBAAgB,qBAAqB,CACnC,OAAO,GAAE,4BAAiC,GACzC,2BAA2B,CA6D7B"}
@@ -4,7 +4,7 @@ import { credentialStorage, tokenStorage } from '../storage';
4
4
  export function useKeycloakAuthScreen(options = {}) {
5
5
  const { isInitialized } = useKeycloakInstance();
6
6
  const { shouldShowConfirm } = options;
7
- const [screen, setScreen] = useState(null);
7
+ const [screen, setScreen] = useState('resolving');
8
8
  const [isLoading, setIsLoading] = useState(true);
9
9
  const [error, setError] = useState(null);
10
10
  const resolveScreen = useCallback(async () => {
@@ -25,6 +25,7 @@ export function useKeycloakAuthScreen(options = {}) {
25
25
  let mounted = true;
26
26
  const run = async () => {
27
27
  try {
28
+ setScreen('resolving');
28
29
  setIsLoading(true);
29
30
  setError(null);
30
31
  const result = await resolveScreen();
@@ -51,7 +52,7 @@ export function useKeycloakAuthScreen(options = {}) {
51
52
  };
52
53
  }, [isInitialized, resolveScreen]);
53
54
  return {
54
- screen: isInitialized ? screen : null,
55
+ screen: isInitialized ? screen : 'resolving',
55
56
  isLoading: !isInitialized || isLoading,
56
57
  error,
57
58
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useKeycloakAuthScreen.js","sourceRoot":"","sources":["../../src/hooks/useKeycloakAuthScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAC,mBAAmB,EAAC,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAsB3D,MAAM,UAAU,qBAAqB,CACnC,UAAwC,EAAE;IAE1C,MAAM,EAAC,aAAa,EAAC,GAAG,mBAAmB,EAAE,CAAC;IAC9C,MAAM,EAAC,iBAAiB,EAAC,GAAG,OAAO,CAAC;IAEpC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAA4B,IAAI,CAAC,CAAC;IACtE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAiC,EAAE;QACxE,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5C,YAAY,CAAC,SAAS,EAAE;YACxB,iBAAiB,CAAC,MAAM,EAAE;SAC3B,CAAC,CAAC;QACH,OAAO,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACnD,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC;gBACH,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;gBACrC,IAAI,OAAO,EAAE,CAAC;oBACZ,SAAS,CAAC,MAAM,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtE,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACpB,SAAS,CAAC,OAAO,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO,EAAE,CAAC;oBACZ,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,GAAG,EAAE,CAAC;QAEN,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;IAEnC,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI;QACrC,SAAS,EAAE,CAAC,aAAa,IAAI,SAAS;QACtC,KAAK;KACN,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"useKeycloakAuthScreen.js","sourceRoot":"","sources":["../../src/hooks/useKeycloakAuthScreen.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAEvD,OAAO,EAAC,mBAAmB,EAAC,MAAM,oCAAoC,CAAC;AACvE,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAsB3D,MAAM,UAAU,qBAAqB,CACnC,UAAwC,EAAE;IAE1C,MAAM,EAAC,aAAa,EAAC,GAAG,mBAAmB,EAAE,CAAC;IAC9C,MAAM,EAAC,iBAAiB,EAAC,GAAG,OAAO,CAAC;IAEpC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAqB,WAAW,CAAC,CAAC;IACtE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAe,IAAI,CAAC,CAAC;IAEvD,MAAM,aAAa,GAAG,WAAW,CAAC,KAAK,IAAiC,EAAE;QACxE,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACvC,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;QACpC,CAAC;QACD,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;YAC5C,YAAY,CAAC,SAAS,EAAE;YACxB,iBAAiB,CAAC,MAAM,EAAE;SAC3B,CAAC,CAAC;QACH,OAAO,SAAS,IAAI,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;IACnD,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAExB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;QAED,IAAI,OAAO,GAAG,IAAI,CAAC;QAEnB,MAAM,GAAG,GAAG,KAAK,IAAI,EAAE;YACrB,IAAI,CAAC;gBACH,SAAS,CAAC,WAAW,CAAC,CAAC;gBACvB,YAAY,CAAC,IAAI,CAAC,CAAC;gBACnB,QAAQ,CAAC,IAAI,CAAC,CAAC;gBACf,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;gBACrC,IAAI,OAAO,EAAE,CAAC;oBACZ,SAAS,CAAC,MAAM,CAAC,CAAC;gBACpB,CAAC;YACH,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,SAAS,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtE,IAAI,OAAO,EAAE,CAAC;oBACZ,QAAQ,CAAC,SAAS,CAAC,CAAC;oBACpB,SAAS,CAAC,OAAO,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,IAAI,OAAO,EAAE,CAAC;oBACZ,YAAY,CAAC,KAAK,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,GAAG,EAAE,CAAC;QAEN,OAAO,GAAG,EAAE;YACV,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,CAAC;IAEnC,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW;QAC5C,SAAS,EAAE,CAAC,aAAa,IAAI,SAAS;QACtC,KAAK;KACN,CAAC;AACJ,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import 'react-native-get-random-values';
2
2
  import KeycloakReactNativeClient from './core/client';
3
- export type { KeycloakConfig, KeycloakConfigWith2FA, KeycloakTokens, RNKeycloakInitOptions, KeycloakLoginOptions, TokenUpdateResult, KeycloakProfile, AuthState, } from './core/types';
3
+ export type { KeycloakConfig, KeycloakConfigWith2FA, KeycloakTokens, RNKeycloakInitOptions, KeycloakLoginOptions, TokenUpdateResult, KeycloakProfile, AuthState, InitRecoveryStrategy, StoredTokenInitPolicy, } from './core/types';
4
4
  export { KeycloakReactNativeClient };
5
5
  export { KeycloakProvider, useKeycloakTheme } from './context';
6
6
  export type { KeycloakProviderProps, KeycloakTheme, KeycloakThemeButtonProps, KeycloakThemeIconButtonProps, } from './context';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,gCAAgC,CAAC;AAExC,OAAO,yBAAyB,MAAM,eAAe,CAAC;AAGtD,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,SAAS,GACV,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAC,yBAAyB,EAAC,CAAC;AAGnC,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,WAAW,CAAC;AAC7D,YAAY,EACV,qBAAqB,EACrB,aAAa,EACb,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC;AACpF,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC1D,YAAY,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,OAAO,EAAC,QAAQ,EAAE,eAAe,EAAC,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC;AACrE,YAAY,EAAC,uBAAuB,EAAE,mBAAmB,EAAC,MAAM,SAAS,CAAC;AAC1E,YAAY,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,gCAAgC,CAAC;AAExC,OAAO,yBAAyB,MAAM,eAAe,CAAC;AAGtD,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,cAAc,EACd,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAC,yBAAyB,EAAC,CAAC;AAGnC,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,WAAW,CAAC;AAC7D,YAAY,EACV,qBAAqB,EACrB,aAAa,EACb,wBAAwB,EACxB,4BAA4B,GAC7B,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC;AACpF,YAAY,EACV,qBAAqB,EACrB,kBAAkB,EAClB,4BAA4B,EAC5B,2BAA2B,GAC5B,MAAM,SAAS,CAAC;AAGjB,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC1D,YAAY,EAAC,SAAS,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,OAAO,EAAC,QAAQ,EAAE,eAAe,EAAC,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC;AACrE,YAAY,EAAC,uBAAuB,EAAE,mBAAmB,EAAC,MAAM,SAAS,CAAC;AAC1E,YAAY,EAAC,aAAa,EAAC,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,gCAAgC,CAAC;AAExC,OAAO,yBAAyB,MAAM,eAAe,CAAC;AActD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AAGnC,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,WAAW,CAAC;AAS7D,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC;AASpF,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAI1D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,OAAO,EAAC,QAAQ,EAAE,eAAe,EAAC,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC;AAGrE,OAAO,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAaA,OAAO,gCAAgC,CAAC;AAExC,OAAO,yBAAyB,MAAM,eAAe,CAAC;AAgBtD,OAAO,EAAC,yBAAyB,EAAC,CAAC;AAGnC,OAAO,EAAC,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,WAAW,CAAC;AAS7D,OAAO,EAAC,eAAe,EAAE,QAAQ,EAAE,SAAS,EAAE,qBAAqB,EAAC,MAAM,SAAS,CAAC;AASpF,OAAO,EAAC,YAAY,EAAE,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAI1D,OAAO,EACL,YAAY,EACZ,aAAa,EACb,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,MAAM,CAAC;AAGd,OAAO,EAAC,QAAQ,EAAE,eAAe,EAAC,MAAM,WAAW,CAAC;AAGpD,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAG5C,OAAO,EAAC,sBAAsB,EAAE,oBAAoB,EAAC,MAAM,SAAS,CAAC;AAGrE,OAAO,EAAC,qBAAqB,EAAC,MAAM,SAAS,CAAC"}
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
2
  import { ImageSourcePropType, ViewStyle } from 'react-native';
3
+ import { type AuthStage } from '../../_lib';
3
4
  interface AuthPageProps {
4
5
  onSuccess?: (token: string) => void;
5
6
  onError?: (error: Error) => void;
7
+ onStageChange?: (stage: AuthStage) => void;
6
8
  logo?: React.ReactNode | ImageSourcePropType;
7
9
  logoHeight?: number;
8
10
  logoWidth?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPage.d.ts","sourceRoot":"","sources":["../../../src/screens/AuthPage/AuthPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AACnD,OAAO,EAAQ,mBAAmB,EAAoB,SAAS,EAAC,MAAM,cAAc,CAAC;AAQrF,UAAU,aAAa;IAKrB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAKpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAMjC,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAC;IAM7C,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAM7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAKlB,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkBD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA8J5C,CAAC"}
1
+ {"version":3,"file":"AuthPage.d.ts","sourceRoot":"","sources":["../../../src/screens/AuthPage/AuthPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyC,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAQ,mBAAmB,EAAoB,SAAS,EAAC,MAAM,cAAc,CAAC;AAErF,OAAO,EAAa,KAAK,SAAS,EAAC,MAAM,YAAY,CAAC;AAMtD,UAAU,aAAa;IAKrB,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAKpC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAKjC,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;IAM3C,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAC;IAM7C,UAAU,CAAC,EAAE,MAAM,CAAC;IAMpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAMnB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAM7B,SAAS,CAAC,EAAE,MAAM,CAAC;IAKnB,KAAK,CAAC,EAAE,SAAS,CAAC;IAKlB,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAkBD,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA4J5C,CAAC"}
@@ -1,15 +1,18 @@
1
- import React, { useCallback, useState } from 'react';
1
+ import React, { useCallback, useEffect, useState } from 'react';
2
2
  import { Image, StyleSheet, View } from 'react-native';
3
3
  import { AUTH_STAGE } from '../../_lib';
4
4
  import { useKeycloakTheme } from '../../context';
5
5
  import { useKeycloakAuth } from '../../hooks';
6
- import { credentialStorage } from '../../storage';
6
+ import { credentialStorage, tokenStorage } from '../../storage';
7
7
  import { PINSetup, WebViewLogin } from '../../ui';
8
- export const AuthPage = ({ onSuccess, onError, logo, logoHeight = 80, logoWidth = 80, showBiometryPrompt = true, pinLength = 4, style, paddingTop, paddingBottom, }) => {
8
+ export const AuthPage = ({ onSuccess, onError, onStageChange, logo, logoHeight = 80, logoWidth = 80, showBiometryPrompt = true, pinLength = 4, style, paddingTop, paddingBottom, }) => {
9
9
  const { colors: { background: backgroundColor }, LoaderComponent, } = useKeycloakTheme();
10
10
  const [stage, setStage] = useState(AUTH_STAGE.LOGIN);
11
11
  const [loginData, setLoginData] = useState(null);
12
12
  const { keycloak, login } = useKeycloakAuth();
13
+ useEffect(() => {
14
+ onStageChange?.(stage);
15
+ }, [onStageChange, stage]);
13
16
  const handleLoginSuccess = useCallback((data) => {
14
17
  console.log('[AuthPage] Login success, saving data and proceeding to PIN setup');
15
18
  setLoginData(data);
@@ -17,11 +20,11 @@ export const AuthPage = ({ onSuccess, onError, logo, logoHeight = 80, logoWidth
17
20
  }, []);
18
21
  const handleSaveCredentialsSuccess = useCallback(async (url) => {
19
22
  try {
20
- console.log('[AuthPage] Saving credentials and exchanging authorization code for tokens...');
23
+ console.log('[AuthPage] Saving PIN and exchanging authorization code for tokens...');
21
24
  setStage(AUTH_STAGE.PROCESSING);
22
25
  await login({ url });
23
26
  console.log('[AuthPage] Tokens obtained successfully');
24
- const accessToken = keycloak?.token;
27
+ const accessToken = keycloak?.token ?? (await tokenStorage.getToken());
25
28
  if (accessToken) {
26
29
  console.log('[AuthPage] Access token received, calling onSuccess');
27
30
  onSuccess?.(accessToken);
@@ -36,23 +39,17 @@ export const AuthPage = ({ onSuccess, onError, logo, logoHeight = 80, logoWidth
36
39
  onError?.(error);
37
40
  }
38
41
  }, [keycloak, login, onSuccess, onError]);
39
- const saveCredentials = useCallback(async (pin) => {
42
+ const savePIN = useCallback(async (pin) => {
40
43
  if (!loginData || !keycloak) {
41
44
  const error = new Error('[AuthPage] No login data or keycloak instance available');
42
45
  console.error(error.message);
43
46
  onError?.(error);
44
47
  return;
45
48
  }
46
- await credentialStorage.saveEncryptedCredentials(pin, {
47
- username: loginData.username,
48
- password: loginData.password,
49
- });
49
+ await credentialStorage.savePIN(pin);
50
50
  const biometryEnabled = await credentialStorage.getBiometryEnabled();
51
51
  if (biometryEnabled) {
52
- await credentialStorage.saveCredentialsForBiometry({
53
- username: loginData.username,
54
- password: loginData.password,
55
- });
52
+ await credentialStorage.savePINForBiometry();
56
53
  }
57
54
  handleSaveCredentialsSuccess(loginData.url);
58
55
  }, [loginData, handleSaveCredentialsSuccess, keycloak, onError]);
@@ -79,7 +76,7 @@ export const AuthPage = ({ onSuccess, onError, logo, logoHeight = 80, logoWidth
79
76
 
80
77
 
81
78
  {stage === AUTH_STAGE.SETUP_PIN && (<View style={styles.pinContainer}>
82
- <PINSetup pinLength={pinLength} onSuccess={saveCredentials} onError={handlePINSetupError} showBiometryPrompt={showBiometryPrompt}/>
79
+ <PINSetup pinLength={pinLength} onSuccess={savePIN} onError={handlePINSetupError} showBiometryPrompt={showBiometryPrompt}/>
83
80
  </View>)}
84
81
 
85
82
 
@@ -1 +1 @@
1
- {"version":3,"file":"AuthPage.js","sourceRoot":"","sources":["../../../src/screens/AuthPage/AuthPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthPage.js","sourceRoot":"","sources":["../../../src/screens/AuthPage/AuthPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAC,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAC,MAAM,OAAO,CAAC;AAC9D,OAAO,EAAC,KAAK,EAAuB,UAAU,EAAE,IAAI,EAAY,MAAM,cAAc,CAAC;AAErF,OAAO,EAAC,UAAU,EAAiB,MAAM,YAAY,CAAC;AACtD,OAAO,EAAC,gBAAgB,EAAC,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAC,eAAe,EAAC,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAC,QAAQ,EAAE,YAAY,EAAC,MAAM,UAAU,CAAC;AAiFhD,MAAM,CAAC,MAAM,QAAQ,GAA4B,CAAC,EAChD,SAAS,EACT,OAAO,EACP,aAAa,EACb,IAAI,EACJ,UAAU,GAAG,EAAE,EACf,SAAS,GAAG,EAAE,EACd,kBAAkB,GAAG,IAAI,EACzB,SAAS,GAAG,CAAC,EACb,KAAK,EACL,UAAU,EACV,aAAa,GACd,EAAE,EAAE;IACH,MAAM,EACJ,MAAM,EAAE,EAAC,UAAU,EAAE,eAAe,EAAC,EACrC,eAAe,GAChB,GAAG,gBAAgB,EAAE,CAAC;IACvB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAY,UAAU,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAIhC,IAAI,CAAC,CAAC;IAEhB,MAAM,EAAC,QAAQ,EAAE,KAAK,EAAC,GAAG,eAAe,EAAE,CAAC;IAE5C,SAAS,CAAC,GAAG,EAAE;QACb,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,EAAE,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;IAG3B,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,IAAuD,EAAE,EAAE;QAC1D,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QAEjF,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACjC,CAAC,EACD,EAAE,CACH,CAAC;IAGF,MAAM,4BAA4B,GAAG,WAAW,CAC9C,KAAK,EAAE,GAAW,EAAE,EAAE;QACpB,IAAI,CAAC;YACH,OAAO,CAAC,GAAG,CACT,uEAAuE,CACxE,CAAC;YAEF,QAAQ,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAEhC,MAAM,KAAK,CAAC,EAAC,GAAG,EAAC,CAAC,CAAC;YAEnB,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;YAEvD,MAAM,WAAW,GAAG,QAAQ,EAAE,KAAK,IAAI,CAAC,MAAM,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;YAEvE,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;gBACnE,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,KAAK,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAClE,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC;YACzD,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,EACD,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CACtC,CAAC;IAEF,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EAAE,GAAW,EAAE,EAAE;QACpB,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC5B,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;YACnF,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,OAAO,EAAE,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;QACT,CAAC;QACD,MAAM,iBAAiB,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,MAAM,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QACrE,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,iBAAiB,CAAC,kBAAkB,EAAE,CAAC;QAC/C,CAAC;QACD,4BAA4B,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC9C,CAAC,EACD,CAAC,SAAS,EAAE,4BAA4B,EAAE,QAAQ,EAAE,OAAO,CAAC,CAC7D,CAAC;IAGF,MAAM,mBAAmB,GAAG,WAAW,CACrC,CAAC,KAAY,EAAE,EAAE;QACf,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,KAAK,CAAC,CAAC;QACjB,CAAC;IACH,CAAC,EACD,CAAC,OAAO,CAAC,CACV,CAAC;IAGF,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,EAAE;QAClC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,OAAO,CACL,CAAC,KAAK,CACJ,MAAM,CAAC,CAAC,IAA2B,CAAC,CACpC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAC,CAAC,CAAC,CAC7D,UAAU,CAAC,SAAS,EACpB,CACH,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;IAElC,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAC,eAAe,EAAC,EAAE,KAAK,CAAC,CAAC,CACxD;MACA;MAAA,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,IAAI,CAAC,CAEjE;;MACA;MAAA,CAAC,KAAK,KAAK,UAAU,CAAC,KAAK,IAAI,CAC7B,CAAC,YAAY,CACX,cAAc,CAAC,CAAC,kBAAkB,CAAC,CACnC,UAAU,CAAC,CAAC,UAAU,CAAC,CACvB,aAAa,CAAC,CAAC,aAAa,CAAC,CAC7B,KAAK,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAC/B,CACH,CAED;;MACA;MAAA,CAAC,KAAK,KAAK,UAAU,CAAC,SAAS,IAAI,CACjC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAC/B;UAAA,CAAC,QAAQ,CACP,SAAS,CAAC,CAAC,SAAS,CAAC,CACrB,SAAS,CAAC,CAAC,OAAO,CAAC,CACnB,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAC7B,kBAAkB,CAAC,CAAC,kBAAkB,CAAC,EAE3C;QAAA,EAAE,IAAI,CAAC,CACR,CAED;;MACA;MAAA,CAAC,KAAK,KAAK,UAAU,CAAC,UAAU,IAAI,CAClC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,kBAAkB,EAAE,EAAC,eAAe,EAAC,CAAC,CAAC,CAC9D;UAAA,CAAC,eAAe,CAAC,AAAD,EAClB;QAAA,EAAE,IAAI,CAAC,CACR,CACH;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IAC/B,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;KACR;IACD,aAAa,EAAE;QACb,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,EAAE;KAClB;IACD,IAAI,EAAE,EAEL;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,CAAC;KACR;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,CAAC;QACP,cAAc,EAAE,QAAQ;KACzB;IACD,UAAU,EAAE;QACV,IAAI,EAAE,CAAC;QACP,cAAc,EAAE,QAAQ;QACxB,UAAU,EAAE,QAAQ;KACrB;CACF,CAAC,CAAC"}
@@ -1,9 +1,11 @@
1
1
  import React from 'react';
2
2
  import { ImageSourcePropType, ViewStyle } from 'react-native';
3
+ export type ConfirmAuthMode = 'login' | 'unlock' | 'reauth';
3
4
  interface ConfirmAuthPageProps {
4
5
  onSuccess?: () => void;
5
6
  onError?: (error: Error) => void;
6
7
  onLogout?: () => void;
8
+ mode?: ConfirmAuthMode;
7
9
  logoutText?: string;
8
10
  logo?: React.ReactNode | ImageSourcePropType;
9
11
  logoHeight?: number;
@@ -13,8 +15,8 @@ interface ConfirmAuthPageProps {
13
15
  autoShowBiometry?: boolean;
14
16
  title?: string;
15
17
  description?: string;
18
+ layout?: 'screen' | 'sheet';
16
19
  style?: ViewStyle;
17
- webViewTimeoutMs?: number;
18
20
  }
19
21
  export declare const ConfirmAuthPage: React.FC<ConfirmAuthPageProps>;
20
22
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmAuthPage.d.ts","sourceRoot":"","sources":["../../../src/screens/ConfirmAuthPage/ConfirmAuthPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA0D,MAAM,OAAO,CAAC;AAC/E,OAAO,EAEL,mBAAmB,EAOnB,SAAS,EACV,MAAM,cAAc,CAAC;AAetB,UAAU,oBAAoB;IAI5B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAKvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAKjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAMtB,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAC;IAE7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,SAAS,CAAC;IAQlB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AASD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAoQ1D,CAAC"}
1
+ {"version":3,"file":"ConfirmAuthPage.d.ts","sourceRoot":"","sources":["../../../src/screens/ConfirmAuthPage/ConfirmAuthPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4D,MAAM,OAAO,CAAC;AACjF,OAAO,EAEL,mBAAmB,EAOnB,SAAS,EACV,MAAM,cAAc,CAAC;AAUtB,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAW5D,UAAU,oBAAoB;IAI5B,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IAKvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IAKjC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAStB,IAAI,CAAC,EAAE,eAAe,CAAC;IAMvB,UAAU,CAAC,EAAE,MAAM,CAAC;IAKpB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,GAAG,mBAAmB,CAAC;IAE7C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AASD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAkT1D,CAAC"}