@multiplatform.one/keycloak 1.0.3 → 1.0.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@multiplatform.one/keycloak",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "keycloak client for multiplatform.one ecosystem",
5
5
  "main": "dist/cjs",
6
6
  "module": "dist/esm",
@@ -42,7 +42,7 @@
42
42
  },
43
43
  "peerDependencies": {
44
44
  "@react-native-async-storage/async-storage": "1.21.0",
45
- "multiplatform.one": "^1.0.3",
45
+ "multiplatform.one": "^1.0.4",
46
46
  "next": "^13.0.5",
47
47
  "react": "18.2.0",
48
48
  "react-native": "0.73.6"
@@ -60,7 +60,7 @@
60
60
  "eslint": "~8.56.0",
61
61
  "jest": "^29.7.0",
62
62
  "jest-sonar-reporter": "^2.0.0",
63
- "multiplatform.one": "^1.0.3",
63
+ "multiplatform.one": "^1.0.4",
64
64
  "next": "^14.2.3",
65
65
  "prettier": "^3.2.5",
66
66
  "react": "18.2.0",
@@ -29,6 +29,8 @@ import { makeRedirectUri, useAuthRequest, useAutoDiscovery, refreshAsync, exchan
29
29
  import { persist, useAuthState } from '../../state';
30
30
  import { validOrRefreshableToken, isTokenExpired } from '../../token';
31
31
 
32
+ const REFRESH_THRESHOLD = 5;
33
+
32
34
  export function AuthProvider({ children, keycloakConfig }: AuthProviderProps) {
33
35
  const [keycloak, setKeycloak] = useState<Keycloak>();
34
36
  const authState = useAuthState();
@@ -81,7 +83,7 @@ export function AuthProvider({ children, keycloakConfig }: AuthProviderProps) {
81
83
  }
82
84
  })();
83
85
  }, [
84
- discovery,
86
+ !discovery,
85
87
  request?.codeVerifier,
86
88
  response?.type === 'success' ? response?.params?.code : undefined,
87
89
  clientId,
@@ -98,7 +100,7 @@ export function AuthProvider({ children, keycloakConfig }: AuthProviderProps) {
98
100
  token: undefined,
99
101
  idToken: undefined,
100
102
  });
101
- }, [authState]);
103
+ }, []);
102
104
 
103
105
  const refreshTokens = useCallback(async () => {
104
106
  if (!discovery) return;
@@ -131,12 +133,12 @@ export function AuthProvider({ children, keycloakConfig }: AuthProviderProps) {
131
133
  ) {
132
134
  resetTokens();
133
135
  }
134
- }, [discovery, resetTokens, authState.refreshToken, tokens.refreshToken, clientId, scopes]);
136
+ }, [!discovery, tokens.refreshToken, clientId, scopes]);
135
137
 
136
138
  useEffect(() => {
137
139
  if (!discovery) return;
138
140
  refreshTokens();
139
- }, [discovery]);
141
+ }, [!discovery]);
140
142
 
141
143
  useEffect(() => {
142
144
  if (!request) return;
@@ -157,14 +159,20 @@ export function AuthProvider({ children, keycloakConfig }: AuthProviderProps) {
157
159
  resetTokens();
158
160
  },
159
161
  );
160
- if (_keycloak.refreshTokenParsed?.exp) {
161
- const timeout = (_keycloak.refreshTokenParsed.exp - Math.floor(Date.now() / 1000) - 10) * 1000;
162
+ if (_keycloak.tokenParsed?.exp) {
163
+ const timeout =
164
+ Math.max(
165
+ Math.min(_keycloak.tokenParsed.exp, _keycloak.refreshTokenParsed?.exp || 0) -
166
+ Math.floor(Date.now() / 1000) -
167
+ REFRESH_THRESHOLD,
168
+ REFRESH_THRESHOLD,
169
+ ) * 1000;
162
170
  if (timeout > 0) {
163
171
  refreshHandle = setTimeout(() => {
164
172
  refreshTokens();
165
173
  }, timeout);
166
174
  } else {
167
- setTimeout(() => _keycloak.logout(), Math.max(0, timeout + 10) * 1000);
175
+ setTimeout(() => _keycloak.logout(), Math.max(0, timeout + REFRESH_THRESHOLD) * 1000);
168
176
  return;
169
177
  }
170
178
  }
@@ -174,7 +182,7 @@ export function AuthProvider({ children, keycloakConfig }: AuthProviderProps) {
174
182
  return () => {
175
183
  if (refreshHandle) clearTimeout(refreshHandle);
176
184
  };
177
- }, [request, tokens.token, tokens.idToken, tokens.refreshToken, refreshTokens, resetTokens]);
185
+ }, [!request, tokens.token, tokens.idToken, tokens.refreshToken, refreshTokens]);
178
186
 
179
187
  return (
180
188
  <KeycloakConfigContext.Provider value={keycloakConfig}>