diff --git a/.github/workflows/build-and-lint.yml b/.github/workflows/build-and-lint.yml index 5f0e3b5ea..6a67b3e3c 100644 --- a/.github/workflows/build-and-lint.yml +++ b/.github/workflows/build-and-lint.yml @@ -17,12 +17,12 @@ jobs: - name: Set up Node.js uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 - name: Set up Yarn uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 cache: "yarn" - name: Cache dependencies diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index 98624f2e0..6354f5714 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -25,7 +25,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "22" + node-version: "24" - name: Install Dependencies run: yarn install @@ -36,7 +36,7 @@ jobs: - name: Setup Node.js for Docs uses: actions/setup-node@v4 with: - node-version: "22" + node-version: "24" - name: "Install dependencies for docs" run: yarn install diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 08e6fddcf..57e3f8206 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -27,7 +27,7 @@ jobs: - name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "22" + node-version: "24" - name: Install Dependencies run: yarn install @@ -38,7 +38,7 @@ jobs: - name: Setup Node.js for Docs uses: actions/setup-node@v4 with: - node-version: "22" + node-version: "24" - name: "Install dependencies for docs" run: yarn install diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 3494052eb..133120bfc 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Node.js environment uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 - name: Cache dependencies uses: actions/cache@v4 diff --git a/.nvmrc b/.nvmrc index 5a6019969..5804aaa4f 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22.16.0 \ No newline at end of file +v24.0.0 \ No newline at end of file diff --git a/packages/api/src/EmbeddedChatApi.ts b/packages/api/src/EmbeddedChatApi.ts index 3c5c9a8b1..dd68ddfe5 100644 --- a/packages/api/src/EmbeddedChatApi.ts +++ b/packages/api/src/EmbeddedChatApi.ts @@ -114,7 +114,7 @@ export default class EmbeddedChatApi { return response; } } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -143,7 +143,7 @@ export default class EmbeddedChatApi { const authErrorRes = await error.response.json(); return { error: authErrorRes?.error }; } - console.error(error); + console.error(error instanceof Error ? error.message : error); } } @@ -170,7 +170,10 @@ export default class EmbeddedChatApi { break; } } catch (error) { - console.error("Auto-login failed:", error); + console.error( + "Auto-login failed:", + error instanceof Error ? error.message : error + ); } } @@ -178,7 +181,7 @@ export default class EmbeddedChatApi { try { await this.auth.logout(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -402,7 +405,7 @@ export default class EmbeddedChatApi { } return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -440,7 +443,7 @@ export default class EmbeddedChatApi { return await response2.json(); } } catch (error) { - console.error(error); + console.error(error instanceof Error ? error.message : error); } } @@ -475,7 +478,7 @@ export default class EmbeddedChatApi { } return result; } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } else { return this.updateUserNameThroughSuggestion(userid); @@ -498,7 +501,7 @@ export default class EmbeddedChatApi { ); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -506,7 +509,7 @@ export default class EmbeddedChatApi { try { return await this.channelInfo(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -523,7 +526,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -687,7 +690,7 @@ export default class EmbeddedChatApi { } return { result: [] }; } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); return { result: [] }; } } @@ -736,7 +739,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -754,7 +757,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -772,7 +775,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -794,7 +797,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -814,7 +817,7 @@ export default class EmbeddedChatApi { ); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -832,7 +835,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -850,7 +853,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -870,7 +873,7 @@ export default class EmbeddedChatApi { ); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -890,7 +893,7 @@ export default class EmbeddedChatApi { ); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -910,7 +913,7 @@ export default class EmbeddedChatApi { ); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -948,7 +951,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -970,7 +973,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -988,7 +991,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -1081,7 +1084,7 @@ export default class EmbeddedChatApi { }); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -1102,7 +1105,7 @@ export default class EmbeddedChatApi { ); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -1122,7 +1125,7 @@ export default class EmbeddedChatApi { ); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } @@ -1142,7 +1145,7 @@ export default class EmbeddedChatApi { ); return await response.json(); } catch (err) { - console.error(err); + console.error(err instanceof Error ? err.message : err); } } diff --git a/packages/docs/package.json b/packages/docs/package.json index a9f4bb2f0..52db122f1 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -42,6 +42,6 @@ "webpack": "5.96.1" }, "engines": { - "node": ">=22.0" + "node": ">=24.0.0" } } diff --git a/packages/react/package.json b/packages/react/package.json index 9c60c6a4f..49e21b50a 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -37,14 +37,14 @@ "@rollup/plugin-commonjs": "^21.0.2", "@rollup/plugin-node-resolve": "^13.1.3", "@rollup/plugin-replace": "^5.0.2", - "@storybook/addon-essentials": "^8.0.0", - "@storybook/addon-interactions": "^8.0.0", - "@storybook/addon-links": "^8.0.0", - "@storybook/addon-webpack5-compiler-babel": "^3.0.0", - "@storybook/blocks": "^8.0.0", - "@storybook/react": "^8.0.0", - "@storybook/react-webpack5": "^8.0.0", - "@storybook/test": "^8.0.0", + "@storybook/addon-essentials": "^8.6.18", + "@storybook/addon-interactions": "^8.6.18", + "@storybook/addon-links": "^8.6.18", + "@storybook/addon-webpack5-compiler-babel": "~3.0.0", + "@storybook/blocks": "^8.6.18", + "@storybook/react": "^8.6.18", + "@storybook/react-webpack5": "^8.6.18", + "@storybook/test": "^8.6.18", "@testing-library/react": "^12.1.4", "babel-jest": "^27.5.1", "concurrently": "^7.2.0", @@ -75,8 +75,7 @@ "rollup-plugin-postcss": "^4.0.2", "rollup-plugin-terser": "^7.0.2", "sass": "^1.66.1", - "schedule": "^0.4.0", - "storybook": "^8.0.0" + "storybook": "^8.6.18" }, "peerDependencies": { "react": ">=19.0.0 <20.0.0", diff --git a/packages/react/src/views/EmbeddedChat.js b/packages/react/src/views/EmbeddedChat.js index b2dc68724..32e907f7e 100644 --- a/packages/react/src/views/EmbeddedChat.js +++ b/packages/react/src/views/EmbeddedChat.js @@ -83,6 +83,8 @@ const EmbeddedChat = (props) => { })); const setIsLoginIn = useLoginStore((state) => state.setIsLoginIn); + const setMessages = useMessageStore((state) => state.setMessages); + if (isClosable && !setClosableState) { throw Error( 'Please provide a setClosableState to props when isClosable = true' @@ -100,24 +102,52 @@ const EmbeddedChat = (props) => { }, [host, roomId, getToken, deleteToken, saveToken]); const [RCInstance, setRCInstance] = useState(() => initializeRCInstance()); + const rcInstanceRef = useRef(RCInstance); + rcInstanceRef.current = RCInstance; useEffect(() => { - const reInstantiate = () => { - const newRCInstance = initializeRCInstance(); - setRCInstance(newRCInstance); - }; - if (!hasMounted.current) { hasMounted.current = true; return; } - RCInstance.close().then(reInstantiate).catch(console.error); + const newRCInstance = initializeRCInstance(); + const oldRCInstance = rcInstanceRef.current; - return () => { - RCInstance.close().catch(console.error); - }; - }, [roomId, host, initializeRCInstance]); + // Clear global state so that the UI resets and waits for new host's auth and data + setIsUserAuthenticated(false); + setAuthenticatedUsername(null); + setAuthenticatedAvatarUrl(null); + setAuthenticatedUserId(null); + setAuthenticatedName(null); + setAuthenticatedUserRoles([]); + setMessages([]); + + setRCInstance(newRCInstance); + oldRCInstance.close().catch((e) => console.error(e?.message || e)); + }, [ + roomId, + host, + initializeRCInstance, + setIsUserAuthenticated, + setAuthenticatedUsername, + setAuthenticatedAvatarUrl, + setAuthenticatedUserId, + setAuthenticatedName, + setAuthenticatedUserRoles, + setMessages, + ]); + + useEffect( + () => () => { + if (hasMounted.current) { + rcInstanceRef.current + .close() + .catch((e) => console.error(e?.message || e)); + } + }, + [] + ); useEffect(() => { const autoLogin = async () => { @@ -125,7 +155,7 @@ const EmbeddedChat = (props) => { try { await RCInstance.autoLogin(auth); } catch (error) { - console.error(error); + console.error(error?.message || error); } finally { setIsLoginIn(false); } @@ -179,7 +209,7 @@ const EmbeddedChat = (props) => { setConfig((prevConfig) => overrideECProps(prevConfig, remoteConfig)); } } catch (error) { - console.error('Error fetching remote config:', error); + console.error('Error fetching remote config:', error?.message || error); } finally { setIsSynced(true); } diff --git a/packages/ui-elements/package.json b/packages/ui-elements/package.json index b08e8d979..e08f04fb6 100644 --- a/packages/ui-elements/package.json +++ b/packages/ui-elements/package.json @@ -38,14 +38,14 @@ "@rollup/plugin-commonjs": "^21.0.2", "@rollup/plugin-node-resolve": "^13.1.3", "@rollup/plugin-replace": "^5.0.2", - "@storybook/addon-essentials": "^8.0.0", - "@storybook/addon-interactions": "^8.0.0", - "@storybook/addon-links": "^8.0.0", - "@storybook/addon-webpack5-compiler-babel": "^3.0.0", - "@storybook/blocks": "^8.0.0", - "@storybook/react": "^8.0.0", - "@storybook/react-webpack5": "^8.0.0", - "@storybook/test": "^8.0.0", + "@storybook/addon-essentials": "^8.6.18", + "@storybook/addon-interactions": "^8.6.18", + "@storybook/addon-links": "^8.6.18", + "@storybook/addon-webpack5-compiler-babel": "~3.0.0", + "@storybook/blocks": "^8.6.18", + "@storybook/react": "^8.6.18", + "@storybook/react-webpack5": "^8.6.18", + "@storybook/test": "^8.6.18", "@testing-library/react": "^12.1.4", "babel-jest": "^27.5.1", "concurrently": "^7.2.0", @@ -77,7 +77,7 @@ "rollup-plugin-terser": "^7.0.2", "sass": "^1.66.1", "schedule": "^0.4.0", - "storybook": "^8.0.0", + "storybook": "^8.6.18", "typescript": "^5.5.3" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index 750d24627..e620be682 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2615,14 +2615,14 @@ __metadata: "@rollup/plugin-json": ^6.0.0 "@rollup/plugin-node-resolve": ^13.1.3 "@rollup/plugin-replace": ^5.0.2 - "@storybook/addon-essentials": ^8.0.0 - "@storybook/addon-interactions": ^8.0.0 - "@storybook/addon-links": ^8.0.0 - "@storybook/addon-webpack5-compiler-babel": ^3.0.0 - "@storybook/blocks": ^8.0.0 - "@storybook/react": ^8.0.0 - "@storybook/react-webpack5": ^8.0.0 - "@storybook/test": ^8.0.0 + "@storybook/addon-essentials": ^8.6.18 + "@storybook/addon-interactions": ^8.6.18 + "@storybook/addon-links": ^8.6.18 + "@storybook/addon-webpack5-compiler-babel": ~3.0.0 + "@storybook/blocks": ^8.6.18 + "@storybook/react": ^8.6.18 + "@storybook/react-webpack5": ^8.6.18 + "@storybook/test": ^8.6.18 "@testing-library/react": ^12.1.4 babel-jest: ^27.5.1 concurrently: ^7.2.0 @@ -2659,8 +2659,7 @@ __metadata: rollup-plugin-postcss: ^4.0.2 rollup-plugin-terser: ^7.0.2 sass: ^1.66.1 - schedule: ^0.4.0 - storybook: ^8.0.0 + storybook: ^8.6.18 swiper: ^11.1.0 zustand: ^4.3.8 peerDependencies: @@ -2687,14 +2686,14 @@ __metadata: "@rollup/plugin-json": ^6.0.0 "@rollup/plugin-node-resolve": ^13.1.3 "@rollup/plugin-replace": ^5.0.2 - "@storybook/addon-essentials": ^8.0.0 - "@storybook/addon-interactions": ^8.0.0 - "@storybook/addon-links": ^8.0.0 - "@storybook/addon-webpack5-compiler-babel": ^3.0.0 - "@storybook/blocks": ^8.0.0 - "@storybook/react": ^8.0.0 - "@storybook/react-webpack5": ^8.0.0 - "@storybook/test": ^8.0.0 + "@storybook/addon-essentials": ^8.6.18 + "@storybook/addon-interactions": ^8.6.18 + "@storybook/addon-links": ^8.6.18 + "@storybook/addon-webpack5-compiler-babel": ~3.0.0 + "@storybook/blocks": ^8.6.18 + "@storybook/react": ^8.6.18 + "@storybook/react-webpack5": ^8.6.18 + "@storybook/test": ^8.6.18 "@testing-library/react": ^12.1.4 babel-jest: ^27.5.1 color: ^4.2.3 @@ -2729,7 +2728,7 @@ __metadata: rollup-plugin-terser: ^7.0.2 sass: ^1.66.1 schedule: ^0.4.0 - storybook: ^8.0.0 + storybook: ^8.6.18 typescript: ^5.5.3 peerDependencies: react: ">=19.0.0 <20.0.0" @@ -7283,7 +7282,7 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-essentials@npm:^8.0.0": +"@storybook/addon-essentials@npm:^8.6.18": version: 8.6.18 resolution: "@storybook/addon-essentials@npm:8.6.18" dependencies: @@ -7314,7 +7313,7 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-interactions@npm:^8.0.0": +"@storybook/addon-interactions@npm:^8.6.18": version: 8.6.18 resolution: "@storybook/addon-interactions@npm:8.6.18" dependencies: @@ -7329,7 +7328,7 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-links@npm:^8.0.0": +"@storybook/addon-links@npm:^8.6.18": version: 8.6.18 resolution: "@storybook/addon-links@npm:8.6.18" dependencies: @@ -7428,7 +7427,7 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-webpack5-compiler-babel@npm:^3.0.0": +"@storybook/addon-webpack5-compiler-babel@npm:~3.0.0": version: 3.0.6 resolution: "@storybook/addon-webpack5-compiler-babel@npm:3.0.6" dependencies: @@ -7488,7 +7487,7 @@ __metadata: languageName: node linkType: hard -"@storybook/blocks@npm:8.6.18, @storybook/blocks@npm:^8.0.0": +"@storybook/blocks@npm:8.6.18, @storybook/blocks@npm:^8.6.18": version: 8.6.18 resolution: "@storybook/blocks@npm:8.6.18" dependencies: @@ -8010,7 +8009,7 @@ __metadata: languageName: node linkType: hard -"@storybook/react-webpack5@npm:^8.0.0": +"@storybook/react-webpack5@npm:^8.6.18": version: 8.6.18 resolution: "@storybook/react-webpack5@npm:8.6.18" dependencies: @@ -8029,7 +8028,7 @@ __metadata: languageName: node linkType: hard -"@storybook/react@npm:8.6.18, @storybook/react@npm:^8.0.0": +"@storybook/react@npm:8.6.18, @storybook/react@npm:^8.6.18": version: 8.6.18 resolution: "@storybook/react@npm:8.6.18" dependencies: @@ -8108,7 +8107,7 @@ __metadata: languageName: node linkType: hard -"@storybook/test@npm:8.6.18, @storybook/test@npm:^8.0.0": +"@storybook/test@npm:8.6.18, @storybook/test@npm:^8.6.18": version: 8.6.18 resolution: "@storybook/test@npm:8.6.18" dependencies: @@ -27900,7 +27899,7 @@ __metadata: languageName: node linkType: hard -"storybook@npm:^8.0.0": +"storybook@npm:^8.6.18": version: 8.6.18 resolution: "storybook@npm:8.6.18" dependencies: