diff --git a/CHANGELOG.md b/CHANGELOG.md index 2a81afd6a..c439a6a0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ # Changelog -## 7.22.20 +## 7.22.21 + +- [318de92](https://github.com/AxaFrance/oidc-client/commit/318de922980c167dd9fc1a743d2dedd106b9a02d) - fix(oidc): Add null as union type into arguments for login, logout, renewTokens functions (#1427) (release), 2024-07-26 by *ShimpeiKamiguchi* + + +## v7.22.20 - [05ace2d](https://github.com/AxaFrance/oidc-client/commit/05ace2dce4a36493b1d127d049c3ef7d5ebd90b4) - fix(oidc): record tabIds when service worker receives init event (release), 2024-07-22 by *mkrzempek* - [6b5f6b4](https://github.com/AxaFrance/oidc-client/commit/6b5f6b428aba70b32d5264b0de89752a00b352e3) - refactor(initWorker): null coalescing, 2024-07-21 by *Jason Finch* @@ -327,8 +332,3 @@ - [4b1a9a2](https://github.com/AxaFrance/oidc-client/commit/4b1a9a26eba51e24dd1c9c9fd0087ef0b3b1ce8b) - fix(oidc): crash when regex on userAgent empty result iOS (#1248) (release), 2023-12-20 by *Guillaume Chervet* -## v7.13.9 - -- [819962b](https://github.com/AxaFrance/oidc-client/commit/819962bae1d7c1e7fd997ede7bb42cce27ba76f3) - fix(oidc): renew with simple storage (#1246) (release), 2023-12-19 by *Guillaume Chervet* - - diff --git a/README.md b/README.md index 823aad7ee..1a2508615 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ - [Migrations](#migrations) - [Contribute](#contribute) -## About +## About **@axa-fr/oidc-client** the lightest and securest library to manage authentication with OpenID Connect (OIDC) and OAuth2 protocol. It is compatible with all OIDC providers. **@axa-fr/oidc-client** is a pure javascript library. It works with any JavaScript framework or library. diff --git a/packages/oidc-client-service-worker/package.json b/packages/oidc-client-service-worker/package.json index 3545f2bf8..bd6923b17 100644 --- a/packages/oidc-client-service-worker/package.json +++ b/packages/oidc-client-service-worker/package.json @@ -1,6 +1,6 @@ { "name": "@axa-fr/oidc-client-service-worker", - "version": "7.22.20", + "version": "7.22.21", "type": "module", "private": false, "main": "dist/OidcServiceWorker.js", diff --git a/packages/oidc-client-service-worker/src/OidcServiceWorker.ts b/packages/oidc-client-service-worker/src/OidcServiceWorker.ts index 866364476..d9f8f41e0 100644 --- a/packages/oidc-client-service-worker/src/OidcServiceWorker.ts +++ b/packages/oidc-client-service-worker/src/OidcServiceWorker.ts @@ -367,9 +367,11 @@ const handleMessage = async (event: ExtendableMessageEvent) => { switch (data.type) { case 'clear': currentDatabase.tokens = null; - currentDatabase.tabIds = []; - currentDatabase.state = {}; - currentDatabase.codeVerifier = {}; + currentDatabase.tabIds = currentDatabase.tabIds.filter(id => id !== tabId); + delete currentDatabase.state[tabId]; + delete currentDatabase.codeVerifier[tabId]; + delete currentDatabase.nonce[tabId]; + currentDatabase.demonstratingProofOfPossessionNonce = null; currentDatabase.demonstratingProofOfPossessionJwkJson = null; currentDatabase.demonstratingProofOfPossessionConfiguration = null; diff --git a/packages/oidc-client-service-worker/src/version.ts b/packages/oidc-client-service-worker/src/version.ts index bad05a7e5..53e808e3a 100644 --- a/packages/oidc-client-service-worker/src/version.ts +++ b/packages/oidc-client-service-worker/src/version.ts @@ -1 +1 @@ -export default '7.22.20'; +export default '7.22.21'; diff --git a/packages/oidc-client/package.json b/packages/oidc-client/package.json index 3c8c3312a..6de198639 100644 --- a/packages/oidc-client/package.json +++ b/packages/oidc-client/package.json @@ -1,6 +1,6 @@ { "name": "@axa-fr/oidc-client", - "version": "7.22.20", + "version": "7.22.21", "private": false, "type": "module", "main": "./dist/index.umd.cjs", diff --git a/packages/oidc-client/src/initWorker.ts b/packages/oidc-client/src/initWorker.ts index ff6e89b48..138f3b891 100644 --- a/packages/oidc-client/src/initWorker.ts +++ b/packages/oidc-client/src/initWorker.ts @@ -57,6 +57,18 @@ export const defaultServiceWorkerUpdateRequireCallback = location.reload(); }; +const getTabId = (configurationName: string) => { + const tabId = sessionStorage.getItem(`oidc.tabId.${configurationName}`); + + if (tabId) { + return tabId; + } + + const newTabId = globalThis.crypto.randomUUID(); + sessionStorage.setItem(`oidc.tabId.${configurationName}`, newTabId); + return newTabId; +}; + const sendMessageAsync = registration => (data): Promise => { @@ -72,23 +84,13 @@ const sendMessageAsync = messageChannel.port1.close(); messageChannel.port2.close(); }; - registration.active.postMessage(data, [messageChannel.port2]); + registration.active.postMessage({ ...data, tabId: getTabId(data.configurationName) }, [ + messageChannel.port2, + ]); }); }; export const initWorkerAsync = async (configuration, configurationName) => { - const getTabId = () => { - const tabId = sessionStorage.getItem(`oidc.tabId.${configurationName}`); - - if (tabId) { - return tabId; - } - - const newTabId = globalThis.crypto.randomUUID(); - sessionStorage.setItem(`oidc.tabId.${configurationName}`, newTabId); - return newTabId; - }; - const serviceWorkerRelativeUrl = configuration.service_worker_relative_url; if ( typeof window === 'undefined' || @@ -138,7 +140,6 @@ export const initWorkerAsync = async (configuration, configurationName) => { }, }, configurationName, - tabId: getTabId(), }); // @ts-ignore @@ -183,23 +184,19 @@ export const initWorkerAsync = async (configuration, configurationName) => { }; const setNonceAsync = nonce => { - const tabId = getTabId(); sessionStorage[`oidc.nonce.${configurationName}`] = nonce.nonce; return sendMessageAsync(registration)({ type: 'setNonce', data: { nonce }, configurationName, - tabId, }); }; const getNonceAsync = async () => { - const tabId = getTabId(); // @ts-ignore const result = await sendMessageAsync(registration)({ type: 'getNonce', data: null, configurationName, - tabId, }); // @ts-ignore let nonce = result.nonce; @@ -267,12 +264,10 @@ export const initWorkerAsync = async (configuration, configurationName) => { }; const getStateAsync = async () => { - const tabId = getTabId(); const result = await sendMessageAsync(registration)({ type: 'getState', data: null, configurationName, - tabId, }); // @ts-ignore let state = result.state; @@ -284,23 +279,19 @@ export const initWorkerAsync = async (configuration, configurationName) => { }; const setStateAsync = async (state: string) => { - const tabId = getTabId(); sessionStorage[`oidc.state.${configurationName}`] = state; return sendMessageAsync(registration)({ type: 'setState', data: { state }, configurationName, - tabId, }); }; const getCodeVerifierAsync = async () => { - const tabId = getTabId(); const result = await sendMessageAsync(registration)({ type: 'getCodeVerifier', data: null, configurationName, - tabId, }); // @ts-ignore let codeVerifier = result.codeVerifier; @@ -312,13 +303,11 @@ export const initWorkerAsync = async (configuration, configurationName) => { }; const setCodeVerifierAsync = async (codeVerifier: string) => { - const tabId = getTabId(); sessionStorage[`oidc.code_verifier.${configurationName}`] = codeVerifier; return sendMessageAsync(registration)({ type: 'setCodeVerifier', data: { codeVerifier }, configurationName, - tabId, }); }; diff --git a/packages/oidc-client/src/version.ts b/packages/oidc-client/src/version.ts index bad05a7e5..53e808e3a 100644 --- a/packages/oidc-client/src/version.ts +++ b/packages/oidc-client/src/version.ts @@ -1 +1 @@ -export default '7.22.20'; +export default '7.22.21'; diff --git a/packages/react-oidc/package.json b/packages/react-oidc/package.json index ca7a6cd98..4ebde7e60 100644 --- a/packages/react-oidc/package.json +++ b/packages/react-oidc/package.json @@ -1,6 +1,6 @@ { "name": "@axa-fr/react-oidc", - "version": "7.22.20", + "version": "7.22.21", "private": false, "type": "module", "main": "./dist/index.umd.cjs", diff --git a/packages/react-oidc/src/ReactOidc.tsx b/packages/react-oidc/src/ReactOidc.tsx index 2e64527d1..5f9ff30d8 100644 --- a/packages/react-oidc/src/ReactOidc.tsx +++ b/packages/react-oidc/src/ReactOidc.tsx @@ -46,7 +46,7 @@ export const useOidc = (configurationName = defaultConfigurationName) => { const login = ( callbackPath: string | undefined = undefined, - extras: StringMap | null = null, + extras: StringMap | undefined = undefined, silentLoginOnly = false, ) => { return getOidc(configurationName).loginAsync( @@ -59,12 +59,12 @@ export const useOidc = (configurationName = defaultConfigurationName) => { }; const logout = ( callbackPath: string | null | undefined = undefined, - extras: StringMap | null = null, + extras: StringMap | undefined = undefined, ) => { return getOidc(configurationName).logoutAsync(callbackPath, extras); }; const renewTokens = async ( - extras: StringMap | null = null, + extras: StringMap | undefined = undefined, ): Promise => { const tokens = await getOidc(configurationName).renewTokensAsync(extras);