From 1ba813d84930c59b5fd520a4c692810273735f4d Mon Sep 17 00:00:00 2001 From: Oliver Lazoroski Date: Thu, 12 Feb 2026 17:02:41 +0100 Subject: [PATCH 1/6] feat(v12): use server-defined default limits for channel and channel lists --- .nvmrc | 2 +- package.json | 6 +- src/components/Channel/Channel.tsx | 14 +- .../Channel/__tests__/Channel.test.js | 67 +++-- .../__tests__/ChannelHeader.test.js | 1 + src/components/ChannelList/ChannelList.tsx | 7 +- .../ChannelList/__tests__/ChannelList.test.js | 50 +++- .../ChannelList/hooks/usePaginatedChannels.ts | 7 +- src/components/ChannelList/utils.ts | 2 - .../__tests__/ChannelPreview.test.js | 1 + src/constants/limits.ts | 7 +- yarn.lock | 228 +++++++----------- 12 files changed, 188 insertions(+), 204 deletions(-) diff --git a/.nvmrc b/.nvmrc index b009dfb9d9..2bd5a0a98a 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -lts/* +22 diff --git a/package.json b/package.json index b07662962e..da150868f3 100644 --- a/package.json +++ b/package.json @@ -113,7 +113,6 @@ "i18next": "^21.6.14", "linkifyjs": "^4.1.0", "lodash.debounce": "^4.0.8", - "lodash.defaultsdeep": "^4.6.1", "lodash.mergewith": "^4.6.2", "lodash.throttle": "^4.1.1", "lodash.uniqby": "^4.7.0", @@ -144,8 +143,7 @@ "@emoji-mart/react": "^1.1.0", "emoji-mart": "^5.4.0", "react": "^19.0.0 || ^18.0.0 || ^17.0.0 || ^16.14.0", - "react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0 || ^16.14.0", - "stream-chat": "^8.55.0" + "react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0 || ^16.14.0" }, "peerDependenciesMeta": { "@breezystack/lamejs": { @@ -239,7 +237,7 @@ "react": "^19.0.0", "react-dom": "^19.0.0", "semantic-release": "^24.2.3", - "stream-chat": "^8.55.0", + "stream-chat": "^8.60.0", "ts-jest": "^29.2.5", "typescript": "^5.4.5", "typescript-eslint": "^8.17.0" diff --git a/src/components/Channel/Channel.tsx b/src/components/Channel/Channel.tsx index d89e63742e..3ba679f361 100644 --- a/src/components/Channel/Channel.tsx +++ b/src/components/Channel/Channel.tsx @@ -11,7 +11,6 @@ import React, { } from 'react'; import debounce from 'lodash.debounce'; -import defaultsDeep from 'lodash.defaultsdeep'; import throttle from 'lodash.throttle'; import { nanoid } from 'nanoid'; import clsx from 'clsx'; @@ -48,7 +47,6 @@ import { import { CHANNEL_CONTAINER_ID } from './constants'; import { DEFAULT_HIGHLIGHT_DURATION, - DEFAULT_INITIAL_CHANNEL_PAGE_SIZE, DEFAULT_JUMP_TO_PAGE_SIZE, DEFAULT_NEXT_CHANNEL_PAGE_SIZE, DEFAULT_THREAD_PAGE_SIZE, @@ -337,7 +335,7 @@ const ChannelInner = < acceptedFiles, activeUnreadHandler, channel, - channelQueryOptions: propChannelQueryOptions, + channelQueryOptions, children, doDeleteMessageRequest, doMarkReadRequest, @@ -357,16 +355,6 @@ const ChannelInner = < skipMessageDataMemoization, } = props; - const channelQueryOptions: ChannelQueryOptions & { - messages: { limit: number }; - } = useMemo( - () => - defaultsDeep(propChannelQueryOptions, { - messages: { limit: DEFAULT_INITIAL_CHANNEL_PAGE_SIZE }, - }), - [propChannelQueryOptions], - ); - const { client, customClasses, latestMessageDatesByChannels, mutes, searchController } = useChatContext('Channel'); const { t } = useTranslationContext('Channel'); diff --git a/src/components/Channel/__tests__/Channel.test.js b/src/components/Channel/__tests__/Channel.test.js index 691a71acaf..962261ef62 100644 --- a/src/components/Channel/__tests__/Channel.test.js +++ b/src/components/Channel/__tests__/Channel.test.js @@ -300,7 +300,11 @@ describe('Channel', () => { const { channel, chatClient } = await initClient(); const watchSpy = jest.spyOn(channel, 'watch'); - await renderComponent({ channel, chatClient }); + await renderComponent({ + channel, + channelQueryOptions: { messages: { limit: 25 } }, + chatClient, + }); await waitFor(() => { expect(watchSpy).toHaveBeenCalledTimes(1); @@ -349,9 +353,12 @@ describe('Channel', () => { ]); let hasMore; await act(() => { - renderComponent({ channel, chatClient }, ({ hasMore: contextHasMore }) => { - hasMore = contextHasMore; - }); + renderComponent( + { channel, channelQueryOptions: { messages: { limit: 25 } }, chatClient }, + ({ hasMore: contextHasMore }) => { + hasMore = contextHasMore; + }, + ); }); await waitFor(() => { @@ -365,9 +372,12 @@ describe('Channel', () => { queryChannelWithNewMessages(Array.from({ length: 25 }, generateMessage), channel), ]); let hasMore; - await renderComponent({ channel, chatClient }, ({ hasMore: contextHasMore }) => { - hasMore = contextHasMore; - }); + await renderComponent( + { channel, channelQueryOptions: { messages: { limit: 25 } }, chatClient }, + ({ hasMore: contextHasMore }) => { + hasMore = contextHasMore; + }, + ); await waitFor(() => { expect(hasMore).toBe(true); @@ -733,15 +743,21 @@ describe('Channel', () => { it("should initiate the hasMore flag with the current message set's pagination hasPrev value", async () => { const { channel, chatClient } = await initClient(); let hasMore; - await renderComponent({ channel, chatClient }, ({ hasMore: hasMoreCtx }) => { - hasMore = hasMoreCtx; - }); + await renderComponent( + { channel, channelQueryOptions: { messages: { limit: 25 } }, chatClient }, + ({ hasMore: hasMoreCtx }) => { + hasMore = hasMoreCtx; + }, + ); expect(hasMore).toBe(true); channel.state.messageSets[0].pagination.hasPrev = false; - await renderComponent({ channel, chatClient }, ({ hasMore: hasMoreCtx }) => { - hasMore = hasMoreCtx; - }); + await renderComponent( + { channel, channelQueryOptions: { messages: { limit: 25 } }, chatClient }, + ({ hasMore: hasMoreCtx }) => { + hasMore = hasMoreCtx; + }, + ); expect(hasMore).toBe(false); }); it('should be able to load more messages', async () => { @@ -752,7 +768,7 @@ describe('Channel', () => { const newMessages = [generateMessage()]; await renderComponent( - { channel, chatClient }, + { channel, channelQueryOptions: { messages: { limit: 25 } }, chatClient }, ({ loadMore, messages: contextMessages }) => { if (!contextMessages.find((message) => message.id === newMessages[0].id)) { // Our new message is not yet passed as part of channel context. Call loadMore and mock API response to include it. @@ -812,7 +828,7 @@ describe('Channel', () => { .fill(null) .map(() => generateMessage()); await renderComponent( - { channel, chatClient }, + { channel, channelQueryOptions: { messages: { limit: 25 } }, chatClient }, ({ hasMore, loadMore, messages: contextMessages }) => { if (!contextMessages.some((message) => message.id === newMessages[0].id)) { // Our new messages are not yet passed as part of channel context. Call loadMore and mock API response to include it. @@ -835,12 +851,15 @@ describe('Channel', () => { const queryPromise = new Promise(() => {}); let isLoadingMore = false; - await renderComponent({ channel, chatClient }, ({ loadingMore, loadMore }) => { - // return a promise that hasn't resolved yet, so loadMore will be stuck in the 'await' part of the function - jest.spyOn(channel, 'query').mockImplementationOnce(() => queryPromise); - loadMore(); - isLoadingMore = loadingMore; - }); + await renderComponent( + { channel, channelQueryOptions: { messages: { limit: 25 } }, chatClient }, + ({ loadingMore, loadMore }) => { + // return a promise that hasn't resolved yet, so loadMore will be stuck in the 'await' part of the function + jest.spyOn(channel, 'query').mockImplementationOnce(() => queryPromise); + loadMore(); + isLoadingMore = loadingMore; + }, + ); await waitFor(() => expect(isLoadingMore).toBe(true)); }); @@ -890,7 +909,7 @@ describe('Channel', () => { let queryNextPageSpy; let contextMessageCount; await renderComponent( - { channel, chatClient }, + { channel, channelQueryOptions: { messages: { limit: 25 } }, chatClient }, ({ loadMore, messages: contextMessages }) => { queryNextPageSpy = jest.spyOn(channel, 'query'); contextMessageCount = contextMessages.length; @@ -913,9 +932,9 @@ describe('Channel', () => { expect(chatClient.axiosInstance.post.mock.calls[1][1]).toMatchObject( expect.objectContaining({ data: {}, - messages: { id_lt: firstPageMessages[0].id, limit: 100 }, + messages: { id_lt: firstPageMessages[0].id, limit: 25 }, state: true, - watchers: { limit: 100 }, + watchers: { limit: 25 }, }), ); expect(contextMessageCount).toBe( diff --git a/src/components/ChannelHeader/__tests__/ChannelHeader.test.js b/src/components/ChannelHeader/__tests__/ChannelHeader.test.js index bda9b074bb..48bcb0c557 100644 --- a/src/components/ChannelHeader/__tests__/ChannelHeader.test.js +++ b/src/components/ChannelHeader/__tests__/ChannelHeader.test.js @@ -213,6 +213,7 @@ describe('ChannelHeader', () => { describe('group channel', () => { const props = { Avatar: ChannelAvatar, + watchers: { limit: 10 }, }; const getChannelState = (memberCount, channelData) => { diff --git a/src/components/ChannelList/ChannelList.tsx b/src/components/ChannelList/ChannelList.tsx index a69f42b7d2..fbb79a50cf 100644 --- a/src/components/ChannelList/ChannelList.tsx +++ b/src/components/ChannelList/ChannelList.tsx @@ -12,7 +12,7 @@ import { useChannelListShape, usePrepareShapeHandlers, } from './hooks/useChannelListShape'; -import { MAX_QUERY_CHANNELS_LIMIT, moveChannelUpwards } from './utils'; +import { moveChannelUpwards } from './utils'; import { Avatar as DefaultAvatar } from '../Avatar'; import { @@ -252,10 +252,7 @@ const UnMemoizedChannelList = < channels: Array>, setChannels: React.Dispatch>>>, ) => { - if ( - !channels.length || - channels.length > (options?.limit || MAX_QUERY_CHANNELS_LIMIT) - ) { + if (!channels.length) { return; } diff --git a/src/components/ChannelList/__tests__/ChannelList.test.js b/src/components/ChannelList/__tests__/ChannelList.test.js index 010e92ff99..c226ddb458 100644 --- a/src/components/ChannelList/__tests__/ChannelList.test.js +++ b/src/components/ChannelList/__tests__/ChannelList.test.js @@ -186,6 +186,7 @@ describe('ChannelList', () => { const props = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; @@ -291,6 +292,7 @@ describe('ChannelList', () => { channelRenderFilterFn: customFilterFunction, filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; @@ -612,7 +614,13 @@ describe('ChannelList', () => { customActiveChannel={testChannel2.channel.id} filters={{}} List={ChannelListComponent} - options={{ presence: true, state: true, watch: true }} + options={{ + limit: 25, + message_limit: 25, + presence: true, + state: true, + watch: true, + }} Preview={ChannelPreviewComponent} setActiveChannel={setActiveChannel} setActiveChannelOnMount @@ -909,6 +917,7 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, renderChannels, }; @@ -935,6 +944,7 @@ describe('ChannelList', () => { const props = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; const sendNewMessageOnChannel3 = async () => { @@ -1043,7 +1053,13 @@ describe('ChannelList', () => { , @@ -1082,7 +1098,13 @@ describe('ChannelList', () => { filters={{}} List={ChannelListComponent} onMessageNew={onMessageNew} - options={{ presence: true, state: true, watch: true }} + options={{ + limit: 25, + message_limit: 25, + presence: true, + state: true, + watch: true, + }} Preview={ChannelPreviewComponent} /> , @@ -1109,7 +1131,13 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, - options: { presence: true, state: true, watch: true }, + options: { + limit: 25, + message_limit: 25, + presence: true, + state: true, + watch: true, + }, Preview: ChannelPreviewComponent, }; @@ -1178,6 +1206,7 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; @@ -1241,6 +1270,7 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; @@ -1309,6 +1339,7 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; @@ -1398,6 +1429,7 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; @@ -1465,7 +1497,13 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, - options: { presence: true, state: true, watch: true }, + options: { + limit: 25, + message_limit: 25, + presence: true, + state: true, + watch: true, + }, Preview: ChannelPreviewComponent, }; @@ -1533,6 +1571,7 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; @@ -1573,6 +1612,7 @@ describe('ChannelList', () => { const channelListProps = { filters: {}, List: ChannelListComponent, + options: { limit: 25, message_limit: 25 }, Preview: ChannelPreviewComponent, }; diff --git a/src/components/ChannelList/hooks/usePaginatedChannels.ts b/src/components/ChannelList/hooks/usePaginatedChannels.ts index 7ee6656279..92130a3409 100644 --- a/src/components/ChannelList/hooks/usePaginatedChannels.ts +++ b/src/components/ChannelList/hooks/usePaginatedChannels.ts @@ -1,8 +1,6 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import uniqBy from 'lodash.uniqby'; -import { MAX_QUERY_CHANNELS_LIMIT } from '../utils'; - import type { Channel, ChannelFilters, @@ -15,7 +13,6 @@ import { useChatContext } from '../../../context/ChatContext'; import type { DefaultStreamChatGenerics } from '../../../types/types'; import type { ChannelsQueryState } from '../../Chat/hooks/useChannelsQueryState'; -import { DEFAULT_INITIAL_CHANNEL_PAGE_SIZE } from '../../../constants/limits'; const RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 5000; const MIN_RECOVER_LOADED_CHANNELS_THROTTLE_INTERVAL_IN_MS = 2000; @@ -88,8 +85,6 @@ export const usePaginatedChannels = < const offset = queryType === 'reload' ? 0 : channels.length; const newOptions = { - limit: options?.limit ?? MAX_QUERY_CHANNELS_LIMIT, - message_limit: options?.message_limit ?? DEFAULT_INITIAL_CHANNEL_PAGE_SIZE, offset, ...options, }; @@ -106,7 +101,7 @@ export const usePaginatedChannels = < : uniqBy([...channels, ...channelQueryResponse], 'cid'); setChannels(newChannels); - setHasNextPage(channelQueryResponse.length >= newOptions.limit); + setHasNextPage(channelQueryResponse.length >= (newOptions.limit ?? 1)); // Set active channel only on load of first page if (!offset && activeChannelHandler) { diff --git a/src/components/ChannelList/utils.ts b/src/components/ChannelList/utils.ts index 2a867d2dd2..22ed093bc9 100644 --- a/src/components/ChannelList/utils.ts +++ b/src/components/ChannelList/utils.ts @@ -9,8 +9,6 @@ import type { import type { DefaultStreamChatGenerics } from '../../types/types'; import type { ChannelListProps } from './ChannelList'; -export const MAX_QUERY_CHANNELS_LIMIT = 30; - type MoveChannelUpParams< SCG extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, > = { diff --git a/src/components/ChannelPreview/__tests__/ChannelPreview.test.js b/src/components/ChannelPreview/__tests__/ChannelPreview.test.js index db9540daf4..dd285d197b 100644 --- a/src/components/ChannelPreview/__tests__/ChannelPreview.test.js +++ b/src/components/ChannelPreview/__tests__/ChannelPreview.test.js @@ -554,6 +554,7 @@ describe('ChannelPreview', () => { const channelPreviewProps = { Avatar: MockAvatar, + watchers: { limit: 10 }, }; it("should update the direct messaging channel's preview if other user's name has changed", async () => { diff --git a/src/constants/limits.ts b/src/constants/limits.ts index ce77669d77..2cdd4738d9 100644 --- a/src/constants/limits.ts +++ b/src/constants/limits.ts @@ -1,7 +1,6 @@ -export const DEFAULT_INITIAL_CHANNEL_PAGE_SIZE = 25; -export const DEFAULT_NEXT_CHANNEL_PAGE_SIZE = 100; -export const DEFAULT_JUMP_TO_PAGE_SIZE = 100; -export const DEFAULT_THREAD_PAGE_SIZE = 50; +export const DEFAULT_NEXT_CHANNEL_PAGE_SIZE = 25; +export const DEFAULT_JUMP_TO_PAGE_SIZE = 25; +export const DEFAULT_THREAD_PAGE_SIZE = 25; export const DEFAULT_LOAD_PAGE_SCROLL_THRESHOLD = 250; export const DEFAULT_UPLOAD_SIZE_LIMIT_BYTES = 100 * 1024 * 1024; // 100 MB export const DEFAULT_HIGHLIGHT_DURATION = 500; diff --git a/yarn.lock b/yarn.lock index 9e9bcbd2d5..aca136b881 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,15 +40,7 @@ "@nicolo-ribaudo/chokidar-2" "2.1.8-no-fsevents" chokidar "^3.4.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== - dependencies: - "@babel/highlight" "^7.24.7" - picocolors "^1.0.0" - -"@babel/code-frame@^7.22.13": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.24.7": version "7.26.2" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== @@ -282,12 +274,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== -"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-identifier@^7.25.9": +"@babel/helper-validator-identifier@^7.16.7", "@babel/helper-validator-identifier@^7.24.7", "@babel/helper-validator-identifier@^7.25.9": version "7.25.9" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== @@ -1054,17 +1041,10 @@ pirates "^4.0.0" source-map-support "^0.5.16" -"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.17.8", "@babel/runtime@^7.21.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": - version "7.24.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.0.tgz#584c450063ffda59697021430cb47101b085951e" - integrity sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw== - dependencies: - regenerator-runtime "^0.14.0" - -"@babel/runtime@^7.27.0": - version "7.27.1" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541" - integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog== +"@babel/runtime@^7.10.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.16.3", "@babel/runtime@^7.17.2", "@babel/runtime@^7.17.8", "@babel/runtime@^7.21.0", "@babel/runtime@^7.27.0", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.28.6.tgz#d267a43cb1836dc4d182cce93ae75ba954ef6d2b" + integrity sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA== "@babel/template@^7.16.7", "@babel/template@^7.24.7", "@babel/template@^7.3.3": version "7.24.7" @@ -2666,10 +2646,11 @@ integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4= "@types/jsonwebtoken@~9.0.0": - version "9.0.0" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#4db9bfaf276ef4fdc3608194fab8b8f2fd1c44f9" - integrity sha512-mM4TkDpA9oixqg1Fv2vVpOFyIVLJjm5x4k0V+K/rEsizfjD7Tk7LKk3GTtbB7KCfP0FEHQtsZqFxYA0+sijNVg== + version "9.0.10" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09" + integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA== dependencies: + "@types/ms" "*" "@types/node" "*" "@types/linkifyjs@^2.1.3": @@ -2769,12 +2750,7 @@ dependencies: undici-types "~5.26.4" -"@types/normalize-package-data@^2.4.0": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" - integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw== - -"@types/normalize-package-data@^2.4.3": +"@types/normalize-package-data@^2.4.0", "@types/normalize-package-data@^2.4.3": version "2.4.4" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== @@ -2796,16 +2772,7 @@ dependencies: "@types/react" "*" -"@types/react@*": - version "18.2.55" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.55.tgz#38141821b7084404b5013742bc4ae08e44da7a67" - integrity sha512-Y2Tz5P4yz23brwm2d7jNon39qoAtMMmalOQv6+fEFt1mT+FcM3D841wDpoUvFXhaYenuROCy3FZYqdTjM7qVyA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" - csstype "^3.0.2" - -"@types/react@^19.0.7": +"@types/react@*", "@types/react@^19.0.7": version "19.0.8" resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.8.tgz#7098e6159f2a61e4f4cef2c1223c044a9bec590e" integrity sha512-9P/o1IGdfmQxrujGbIMDyYaaCykhLKc0NGCtYcECNUr9UAaDe4gwvV9bR6tvd5Br1SG0j+PBpbKr2UYY8CwqSw== @@ -2853,9 +2820,9 @@ integrity sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ== "@types/ws@^7.4.0": - version "7.4.0" - resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.0.tgz#499690ea08736e05a8186113dac37769ab251a0e" - integrity sha512-Y29uQ3Uy+58bZrFLhX36hcI3Np37nqWE7ky5tjiDoy1GDZnIwVxS0CgF+s+1bXMzjKBFy+fqaRfb708iNzdinw== + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== dependencies: "@types/node" "*" @@ -3046,14 +3013,7 @@ agent-base@6: dependencies: debug "4" -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" - -agent-base@^7.1.2: +agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== @@ -3132,12 +3092,7 @@ ansi-regex@^5.0.1: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-regex@^6.1.0: +ansi-regex@^6.0.1, ansi-regex@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654" integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA== @@ -3444,12 +3399,12 @@ axe-core@4.7.2, axe-core@^4.3.3, axe-core@^4.4.1: integrity sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g== axios@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.0.tgz#f1e5292f26b2fd5c2e66876adc5b06cdbd7d2102" - integrity sha512-EZ1DYihju9pwVB+jg67ogm+Tmqc6JmhamRN6I4Zt8DfZu5lbcQGw3ozH9lFejSJgs/ibaef3A9PMXPLeefFGJg== + version "1.13.5" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.13.5.tgz#5e464688fa127e11a660a2c49441c009f6567a43" + integrity sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q== dependencies: - follow-redirects "^1.15.0" - form-data "^4.0.0" + follow-redirects "^1.15.11" + form-data "^4.0.5" proxy-from-env "^1.1.0" babel-code-frame@^6.26.0: @@ -3746,12 +3701,7 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -binary-extensions@^2.3.0: +binary-extensions@^2.0.0, binary-extensions@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== @@ -3892,10 +3842,10 @@ bser@2.1.1: dependencies: node-int64 "^0.4.0" -buffer-equal-constant-time@1.0.1: +buffer-equal-constant-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== buffer-equal@^1.0.0: version "1.0.1" @@ -6098,10 +6048,10 @@ flush-write-stream@^1.0.2: inherits "^2.0.3" readable-stream "^2.3.6" -follow-redirects@^1.15.0: - version "1.15.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.3.tgz#fe2f3ef2690afce7e82ed0b44db08165b207123a" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== +follow-redirects@^1.15.11: + version "1.15.11" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.11.tgz#777d73d72a92f8ec4d2e410eb47352a56b8e8340" + integrity sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ== for-each@^0.3.3: version "0.3.3" @@ -6123,13 +6073,15 @@ foreground-child@^3.1.0: cross-spawn "^7.0.6" signal-exit "^4.0.1" -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== +form-data@^4.0.0, form-data@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.5.tgz#b49e48858045ff4cbf6b03e1805cebcad3679053" + integrity sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + hasown "^2.0.2" mime-types "^2.1.12" forwarded@0.2.0: @@ -6877,7 +6829,7 @@ https-proxy-agent@^5.0.1: agent-base "6" debug "4" -https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1: +https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1, https-proxy-agent@^7.0.5: version "7.0.6" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== @@ -6885,14 +6837,6 @@ https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.1: agent-base "^7.1.2" debug "4" -https-proxy-agent@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== - dependencies: - agent-base "^7.0.2" - debug "4" - human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -8357,14 +8301,20 @@ jsonparse@^1.2.0, jsonparse@^1.3.1: integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== jsonwebtoken@~9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz#d0faf9ba1cc3a56255fe49c0961a67e520c1926d" - integrity sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw== - dependencies: - jws "^3.2.2" - lodash "^4.17.21" + version "9.0.3" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2" + integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== + dependencies: + jws "^4.0.1" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" ms "^2.1.1" - semver "^7.3.8" + semver "^7.5.4" "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.2.0" @@ -8384,21 +8334,21 @@ just-diff@^6.0.0: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-6.0.2.tgz#03b65908543ac0521caf6d8eb85035f7d27ea285" integrity sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA== -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== +jwa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" + integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== dependencies: - buffer-equal-constant-time "1.0.1" + buffer-equal-constant-time "^1.0.1" ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== +jws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" + integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== dependencies: - jwa "^1.4.1" + jwa "^2.0.1" safe-buffer "^5.0.1" keyv@^4.5.4: @@ -8693,21 +8643,36 @@ lodash.deburr@^4.1.0: resolved "https://registry.yarnpkg.com/lodash.deburr/-/lodash.deburr-4.1.0.tgz#ddb1bbb3ef07458c0177ba07de14422cb033ff9b" integrity sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s= -lodash.defaultsdeep@^4.6.1: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6" - integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA== - lodash.escaperegexp@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz#64762c48618082518ac3df4ccf5d5886dae20347" integrity sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw== +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + lodash.isfunction@^3.0.9: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" @@ -8738,6 +8703,11 @@ lodash.mergewith@^4.6.2: resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + lodash.snakecase@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" @@ -11679,12 +11649,7 @@ semver@^6.1.1, semver@^6.1.2, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: - version "7.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.0.tgz#9c6fe61d0c6f9fa9e26575162ee5a9180361b09c" - integrity sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ== - -semver@^7.5.2: +semver@^7.1.1, semver@^7.1.2, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.7, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: version "7.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== @@ -12081,12 +12046,7 @@ split2@~1.0.0: dependencies: through2 "~2.0.0" -sprintf-js@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" - integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== - -sprintf-js@^1.1.3: +sprintf-js@^1.1.1, sprintf-js@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a" integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA== @@ -12123,7 +12083,7 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stream-chat@^8.55.0: +stream-chat@^8.60.0: version "8.60.0" resolved "https://registry.yarnpkg.com/stream-chat/-/stream-chat-8.60.0.tgz#b67d4fbb185da53fb8ac5fc5759986d6ad7e19a3" integrity sha512-7FpO7Wno++r+n+x9aFuXtGYtNO06CIMd2Bxe3doYZLhMfS0nuaXloeFlGcMT0r4U/6bnguz1qQdDJUPNQAS8bQ== @@ -12445,19 +12405,7 @@ symlink-or-copy@^1.1.8, symlink-or-copy@^1.2.0, symlink-or-copy@^1.3.1: resolved "https://registry.yarnpkg.com/symlink-or-copy/-/symlink-or-copy-1.3.1.tgz#9506dd64d8e98fa21dcbf4018d1eab23e77f71fe" integrity sha512-0K91MEXFpBUaywiwSSkmKjnGcasG/rVBXFLJz5DrgGabpYD6N+3yZrfD6uUIfpuTu65DZLHi7N8CizHc07BPZA== -tar@^6.1.11: - version "6.1.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.1.13.tgz#46e22529000f612180601a6fe0680e7da508847b" - integrity sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw== - dependencies: - chownr "^2.0.0" - fs-minipass "^2.0.0" - minipass "^4.0.0" - minizlib "^2.1.1" - mkdirp "^1.0.3" - yallist "^4.0.0" - -tar@^6.2.1: +tar@^6.1.11, tar@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-6.2.1.tgz#717549c541bc3c2af15751bea94b1dd068d4b03a" integrity sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A== From 106b311be7af3934591339aa1809c9cda9e89d40 Mon Sep 17 00:00:00 2001 From: Oliver Lazoroski Date: Thu, 12 Feb 2026 17:07:13 +0100 Subject: [PATCH 2/6] chore: upgrade @types/ms to 2.1.0 --- yarn.lock | 40 +++++----------------------------------- 1 file changed, 5 insertions(+), 35 deletions(-) diff --git a/yarn.lock b/yarn.lock index aca136b881..fb5e7f5654 100644 --- a/yarn.lock +++ b/yarn.lock @@ -302,16 +302,6 @@ "@babel/template" "^7.24.7" "@babel/types" "^7.24.7" -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" - "@babel/node@^7.12.6": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/node/-/node-7.13.10.tgz#8babfc08940722c704136f61283a4cb9af88a2c5" @@ -2732,9 +2722,9 @@ moment "*" "@types/ms@*": - version "0.7.34" - resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.34.tgz#10964ba0dee6ac4cd462e2795b6bebd407303433" - integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g== + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== "@types/node@*": version "20.14.2" @@ -2755,11 +2745,6 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== -"@types/prop-types@*": - version "15.7.14" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.14.tgz#1433419d73b2a7ebfc6918dcefd2ec0d5cd698f2" - integrity sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ== - "@types/react-dom@^19.0.3": version "19.0.3" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.3.tgz#0804dfd279a165d5a0ad8b53a5b9e65f338050a4" @@ -2779,11 +2764,6 @@ dependencies: csstype "^3.0.2" -"@types/scheduler@*": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== - "@types/stack-utils@^2.0.0": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" @@ -3013,7 +2993,7 @@ agent-base@6: dependencies: debug "4" -agent-base@^7.0.2, agent-base@^7.1.0, agent-base@^7.1.2: +agent-base@^7.1.0, agent-base@^7.1.2: version "7.1.3" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== @@ -3979,7 +3959,7 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.3.2, chalk@^2.4.2: +chalk@^2.3.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -9586,11 +9566,6 @@ minipass@^3.0.0: dependencies: yallist "^4.0.0" -minipass@^4.0.0: - version "4.2.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-4.2.4.tgz#7d0d97434b6a19f59c5c3221698b48bbf3b2cd06" - integrity sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ== - minipass@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" @@ -11178,11 +11153,6 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== -regenerator-runtime@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz#356ade10263f685dda125100cd862c1db895327f" - integrity sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw== - regenerator-transform@^0.14.2: version "0.14.5" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" From f4e8fef3ef6074551b61f291c12e1dc9fa79c05d Mon Sep 17 00:00:00 2001 From: Oliver Lazoroski Date: Thu, 12 Feb 2026 17:11:46 +0100 Subject: [PATCH 3/6] chore: add JSX import --- src/components/Message/renderText/renderText.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Message/renderText/renderText.tsx b/src/components/Message/renderText/renderText.tsx index d91f3a351d..c66f14c719 100644 --- a/src/components/Message/renderText/renderText.tsx +++ b/src/components/Message/renderText/renderText.tsx @@ -1,4 +1,4 @@ -import React, { ComponentType } from 'react'; +import React, { ComponentType, JSX } from 'react'; import ReactMarkdown, { defaultUrlTransform } from 'react-markdown'; import { find } from 'linkifyjs'; import uniqBy from 'lodash.uniqby'; From 14bf82c4e78dbb5952e7e6eca25535c1bd7606a0 Mon Sep 17 00:00:00 2001 From: Oliver Lazoroski Date: Thu, 12 Feb 2026 17:15:42 +0100 Subject: [PATCH 4/6] chore: restore peer dependency --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index da150868f3..de4dd3d67a 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,8 @@ "@emoji-mart/react": "^1.1.0", "emoji-mart": "^5.4.0", "react": "^19.0.0 || ^18.0.0 || ^17.0.0 || ^16.14.0", - "react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0 || ^16.14.0" + "react-dom": "^19.0.0 || ^18.0.0 || ^17.0.0 || ^16.14.0", + "stream-chat": "^8.55.0" }, "peerDependenciesMeta": { "@breezystack/lamejs": { From c74fdd9101adb4bfe8dfe13929e01b5bc0b3c889 Mon Sep 17 00:00:00 2001 From: Oliver Lazoroski Date: Thu, 12 Feb 2026 17:17:26 +0100 Subject: [PATCH 5/6] chore: remove unused @ts-expect-error directive --- src/components/Gallery/ModalGallery.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/Gallery/ModalGallery.tsx b/src/components/Gallery/ModalGallery.tsx index 924a9f443f..1f4777d47b 100644 --- a/src/components/Gallery/ModalGallery.tsx +++ b/src/components/Gallery/ModalGallery.tsx @@ -52,7 +52,6 @@ export const ModalGallery = < ); return ( - // @ts-expect-error ignore the TS error as react-image-gallery was on @types/react@18 while stream-chat-react being upgraded to React 19 (https://github.com/xiaolin/react-image-gallery/issues/809) Date: Thu, 12 Feb 2026 17:21:06 +0100 Subject: [PATCH 6/6] chore: disable external lib checks --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index de4dd3d67a..d22e90985e 100644 --- a/package.json +++ b/package.json @@ -259,7 +259,7 @@ "prepare": "husky install", "preversion": "yarn install", "test": "jest", - "types": "tsc --noEmit --skipLibCheck false", + "types": "tsc --noEmit --skipLibCheck true", "validate-translations": "node scripts/validate-translations.js", "validate-cjs": "concurrently 'node scripts/validate-cjs-node-bundle.cjs' 'node scripts/validate-cjs-browser-bundle.cjs'", "semantic-release": "semantic-release",