diff --git a/package.json b/package.json index c206c8ba5c..ec08fc8902 100644 --- a/package.json +++ b/package.json @@ -34,9 +34,9 @@ "@metamask/eth-sig-util": "^4.0.0", "@mui/icons-material": "^5.8.4", "@mui/material": "^5.5.0", - "@pushprotocol/restapi": "1.7.25", + "@pushprotocol/restapi": "1.7.29", "@pushprotocol/socket": "0.5.3", - "@pushprotocol/uiweb": "1.7.1", + "@pushprotocol/uiweb": "1.7.2", "@radix-ui/react-dialog": "^1.1.1", "@radix-ui/react-dropdown-menu": "^2.1.1", "@radix-ui/react-switch": "^1.1.0", diff --git a/src/blocks/icons/components/FillCircle.tsx b/src/blocks/icons/components/FillCircle.tsx new file mode 100644 index 0000000000..271e50b978 --- /dev/null +++ b/src/blocks/icons/components/FillCircle.tsx @@ -0,0 +1,32 @@ +import { FC } from 'react'; +import { IconWrapper } from '../IconWrapper'; +import { IconProps } from '../Icons.types'; + +const FillCircle: FC = (allProps) => { + const { svgProps: props, ...restProps } = allProps; + return ( + + + + } + {...restProps} + /> + ); +}; + +export default FillCircle; diff --git a/src/blocks/icons/components/Image.tsx b/src/blocks/icons/components/Image.tsx new file mode 100644 index 0000000000..b89b65265f --- /dev/null +++ b/src/blocks/icons/components/Image.tsx @@ -0,0 +1,55 @@ +import { FC } from 'react'; +import { IconWrapper } from '../IconWrapper'; +import { IconProps } from '../Icons.types'; + +const Image: FC = (allProps) => { + const { svgProps: props, ...restProps } = allProps; + return ( + + + + + + + } + {...restProps} + /> + ); +}; + +export default Image; diff --git a/src/blocks/icons/index.ts b/src/blocks/icons/index.ts index 089304d5b5..9b49da2f6b 100644 --- a/src/blocks/icons/index.ts +++ b/src/blocks/icons/index.ts @@ -70,10 +70,12 @@ export { default as ErrorFilled } from './components/ErrorFilled'; export { default as ExternalLink } from './components/ExternalLink'; export { default as Front } from './components/Front'; +export { default as FillCircle } from './components/FillCircle'; export { default as Gif } from './components/Gif'; export { default as InfoFilled } from './components/InfoFilled'; +export { default as Image } from './components/Image'; export { default as Governance } from './components/Governance'; export { default as GovernanceFilled } from './components/GovernanceFilled'; diff --git a/src/blocks/notification/Notification.tsx b/src/blocks/notification/Notification.tsx index 9750a8f66a..8fefbe50af 100644 --- a/src/blocks/notification/Notification.tsx +++ b/src/blocks/notification/Notification.tsx @@ -116,12 +116,14 @@ const toastIds: Array = []; // Export the notification object with show and hide methods const notification = { - show: (config: NotificationProps) => { + show: (config: NotificationProps, id?: string) => { const toastId = toast.custom(() => , { + id: id, duration: config.duration || Infinity, position: config.position || 'bottom-right', + onAutoClose: config.onAutoClose, }); - toastIds.push(toastId); + if (!toastIds.find((toastId) => toastId === id)) toastIds.push(toastId); }, hide: () => { if (toastIds.length > 0) { diff --git a/src/blocks/notification/Notification.types.ts b/src/blocks/notification/Notification.types.ts index 924f78109a..313bd31f02 100644 --- a/src/blocks/notification/Notification.types.ts +++ b/src/blocks/notification/Notification.types.ts @@ -16,4 +16,6 @@ export type NotificationProps = { position?: 'bottom-right' | 'bottom-left' | 'top-center'; /* Optional duration of the notification component */ duration?: number; + /* Optional onAutoClose event for the notification called after it's timeout */ + onAutoClose?: () => void; }; diff --git a/src/common/Common.utils.tsx b/src/common/Common.utils.tsx index ea6c7b8c83..7b33acc08f 100644 --- a/src/common/Common.utils.tsx +++ b/src/common/Common.utils.tsx @@ -2,6 +2,7 @@ import { appConfig } from 'config'; import { LOGO_ALIAS_CHAIN } from './Common.constants'; import { networkName } from 'helpers/UtilityHelper'; import { EnvType } from './Common.types'; +import moment from 'moment'; export const allowedNetworks = appConfig.allowedNetworks.filter( (chain: number) => chain != appConfig.coreContractChain @@ -53,3 +54,19 @@ export const isValidURL = (str: string | undefined) => { export const getCurrentEnv = (): EnvType => { return appConfig.appEnv; }; + +export function convertTimeStamp(timestamp: string) { + const date = moment.unix(Number(timestamp)); + const now = moment(); + + const diffInSeconds = now.diff(date, 'seconds'); + const diffInMinutes = now.diff(date, 'minutes'); + + if (diffInSeconds < 60) { + return 'now'; + } else if (diffInMinutes < 60) { + return `${diffInMinutes} minutes ago`; + } else { + return date.format('hh:mm A'); + } +} diff --git a/src/common/components/InAppChatNotifications.tsx b/src/common/components/InAppChatNotifications.tsx new file mode 100644 index 0000000000..e4e33aa84d --- /dev/null +++ b/src/common/components/InAppChatNotifications.tsx @@ -0,0 +1,222 @@ +import { FC, useContext } from 'react'; + +import { useNavigate } from 'react-router-dom'; +import { css } from 'styled-components'; + +import { Box, Cross, Pin, Text, Image, FillCircle, ChatFilled, EditProfile } from 'blocks'; + +import { AppContextType } from 'types/context'; +import { AppContext } from 'contexts/AppContext'; + +import { convertTimeStamp } from 'common/Common.utils'; +import { shortenText } from 'helpers/UtilityHelper'; +import { caip10ToWallet } from 'helpers/w2w'; + +import { useResolveWeb3Name } from 'hooks/useResolveWeb3Name'; +import { useGetGroupInfo, useGetUserProfileDetails } from 'queries'; + +type InAppChatNotificationsProps = { + chatDetails: Array; + onClose: () => void; +}; + +const getContentText = (chatDetail: any) => { + if (chatDetail.message.type === 'Text') return chatDetail.message.content; + if (chatDetail.message.type === 'Image') return 'Image'; + if (chatDetail.message.type === 'File') return 'File'; + if (chatDetail.message.type === 'MediaEmbed' || chatDetail.message.type === 'GIF') return 'GIF'; +}; +const getContentImage = (chatDetail: any) => { + if ( + chatDetail.message.type === 'Image' || + chatDetail.message.type === 'MediaEmbed' || + chatDetail.message.type === 'GIF' + ) + return ( + + ); + if (chatDetail.message.type === 'File') + return ( + + ); +}; + +const InAppChatNotifications: FC = ({ chatDetails, onClose }) => { + const { web3NameList }: AppContextType = useContext(AppContext)!; + const fromAddress = caip10ToWallet(chatDetails[0]?.from); + const { data: userProfileDetails } = useGetUserProfileDetails(fromAddress, { + refetchOnWindowFocus: false, + staleTime: Infinity, + refetchInterval: 3600000, // 1 hour, + }); + const { data: groupInfo } = useGetGroupInfo(chatDetails[0]?.meta?.group ? chatDetails[0].chatId : '', { + refetchOnWindowFocus: false, + staleTime: Infinity, + refetchInterval: 3600000, // 1 hour, + }); + + const navigate = useNavigate(); + + useResolveWeb3Name(fromAddress); + const web3Name = web3NameList[fromAddress]; + const sender = web3Name ? web3Name : shortenText(fromAddress, 6); + const displayName = chatDetails[0]?.meta?.group + ? groupInfo?.groupName || shortenText(chatDetails[0]?.chatId, 6) + : web3Name || shortenText(fromAddress, 6); + + const latestTimestamp = convertTimeStamp(chatDetails[chatDetails.length - 1]?.timestamp); + + //optimise it and fix the close button z-index + return ( + + {chatDetails && userProfileDetails && ( + navigate(`/chat/chatid:${chatDetails[0].chatId}`)} + > + + + + {chatDetails[0].event === 'chat.request' ? ( + + ) : ( + {displayName} + )} + + + {chatDetails[0].event === 'chat.request' ? 'Push Chat' : displayName} + + + + {latestTimestamp} + + + { + e.stopPropagation(); + onClose(); + }} + cursor="pointer" + > + + + + {chatDetails.map((chatDetail: any) => + chatDetail.event === 'chat.request' ? ( + + + + + {displayName}{' '} + + + has sent you a chat request + + + + ) : ( + + + {chatDetails[0]?.meta?.group && ( + + {sender}{' '} + + )} + {chatDetail.message.type !== 'Text' ? {getContentImage(chatDetail)} : null} + + {getContentText(chatDetail)} + + + + ) + )} + + )} + + ); +}; + +export { InAppChatNotifications }; diff --git a/src/common/components/index.ts b/src/common/components/index.ts index 465df82dad..4b5412cac5 100644 --- a/src/common/components/index.ts +++ b/src/common/components/index.ts @@ -9,3 +9,4 @@ export * from './TokenFaucet'; export * from './CopyButton'; export * from './VerifiedChannelTooltipContent'; export * from './InAppChannelNotifications'; +export * from './InAppChatNotifications'; diff --git a/src/common/hooks/useInAppNotifications.tsx b/src/common/hooks/useInAppNotifications.tsx index 592b596648..2f58a684ab 100644 --- a/src/common/hooks/useInAppNotifications.tsx +++ b/src/common/hooks/useInAppNotifications.tsx @@ -1,15 +1,16 @@ import { useEffect, useState } from 'react'; -import { CONSTANTS, NotificationEvent } from '@pushprotocol/restapi'; import { useSelector } from 'react-redux'; +import { CONSTANTS, NotificationEvent } from '@pushprotocol/restapi'; import { deviceSizes, notification } from 'blocks'; -import { InAppChannelNotifications } from 'common'; +import { InAppChannelNotifications, InAppChatNotifications } from 'common'; import { useDeviceWidthCheck } from 'hooks'; export const useInAppNotifications = () => { const [isStreamConnected, setIsStreamConnected] = useState(false); + const [newMessages, setNewMessages] = useState>>({}); const isMobile = useDeviceWidthCheck(parseInt(deviceSizes.mobileL)); const { userPushSDKInstance } = useSelector((state: any) => { return state.user; @@ -42,27 +43,87 @@ export const useInAppNotifications = () => { userPushSDKInstance?.stream?.uid, userPushSDKInstance?.stream ); - notification.show({ - overlay: , - position: isMobile ? 'top-center' : 'bottom-right', - duration: 5000, - onClick: () => { - notification.hide(); - }, - }); + if (data.source != 'PUSH_CHAT') + notification.show({ + overlay: , + position: isMobile ? 'top-center' : 'bottom-right', + duration: 5000, + onClick: () => { + notification.hide(); + }, + }); }); - }; + userPushSDKInstance?.stream?.on(CONSTANTS.STREAM.CHAT, (data: any) => { + console.debug( + 'src::common::hooks::useStream::attachListeners::CHAT::', + userPushSDKInstance?.uid, + userPushSDKInstance?.stream.connected(), + userPushSDKInstance?.stream?.uid, + userPushSDKInstance?.stream + ); - useEffect(() => { - (async () => { - if (userPushSDKInstance && userPushSDKInstance?.stream) { - await attachListeners(); + if ((data.event === 'chat.message' || data.event === 'chat.request') && data.origin === 'other') { + let updatedMessages: Record> = newMessages; + if (!updatedMessages[data.chatId]) { + updatedMessages[data.chatId] = []; + } + // Ensure the chat array length does not exceed 5 messages + if (updatedMessages[data.chatId].length > 5) { + updatedMessages[data.chatId] = updatedMessages[data.chatId].slice(-5); + } + if (!(updatedMessages[data.chatId].length && data.event === 'chat.request')) { + updatedMessages[data.chatId].push(data); + } + setNewMessages(updatedMessages); + notification.show( + { + overlay: ( + { + resetChatMessages(data.chatId); + notification.hide(); + }} + /> + ), + position: isMobile ? 'top-center' : 'bottom-right', + duration: 5000, + onAutoClose: () => resetChatMessages(data.chatId), + onClick: () => { + resetChatMessages(data.chatId); + notification.hide(); + }, + }, + data.chatId + ); } - })(); + }); + }; + + /* remove previous messages for a particular chat*/ + const resetChatMessages = (chatId: string) => { + const updatedMessages = newMessages; + delete updatedMessages[chatId]; + setNewMessages(updatedMessages); + }; - // Cleanup listener on unmount - return () => {}; - }, [userPushSDKInstance?.account]); + const streamAttach = () => { + if (userPushSDKInstance && userPushSDKInstance?.stream) { + attachListeners(); + } + }; + const streamCleanup = () => { + if (userPushSDKInstance && userPushSDKInstance?.stream) { + userPushSDKInstance?.stream?.disconnect(); + } + }; + + useEffect(() => { + streamAttach(); + return () => { + streamCleanup(); + }; + }, [userPushSDKInstance?.account, userPushSDKInstance?.readmode()]); return { isStreamConnected }; }; diff --git a/src/contexts/AppContext.tsx b/src/contexts/AppContext.tsx index 7ef381d0b3..1ecc055873 100644 --- a/src/contexts/AppContext.tsx +++ b/src/contexts/AppContext.tsx @@ -223,7 +223,7 @@ const AppContextProvider = ({ children }: { children: ReactNode }) => { // call initializePushSDK if decryptedPGPKeys is not null if (decryptedPGPKeys) { console.debug('src::contexts::AppContext::initializePushSdkReadMode::Called initializePushSDK()'); - return initializePushSDK(); + return initializePushSDK(wallet); } // else initialize push sdk in read mode @@ -288,10 +288,10 @@ const AppContextProvider = ({ children }: { children: ReactNode }) => { progress: 100, }); } - dispatch(setUserPushSDKInstance(userInstance)); // connect stream as well await setupStream(userInstance); + dispatch(setUserPushSDKInstance(userInstance)); return userInstance; } catch (error) { // Handle initialization error @@ -307,12 +307,11 @@ const AppContextProvider = ({ children }: { children: ReactNode }) => { CONSTANTS.STREAM.CONNECT, CONSTANTS.STREAM.DISCONNECT, CONSTANTS.STREAM.CHAT, - CONSTANTS.STREAM.CHAT_OPS, CONSTANTS.STREAM.NOTIF, CONSTANTS.STREAM.VIDEO, ]); - if (userInstance.readmode()) await stream.connect(); + await stream.connect(); console.debug('src::contexts::AppContext::setupStream::User Intance Stream Connected', userInstance); } }; @@ -489,7 +488,7 @@ const AppContextProvider = ({ children }: { children: ReactNode }) => { } }; initialize(); - }, [account, provider]); + }, [account]); const createUserIfNecessary = async (): Promise => { try { diff --git a/src/queries/hooks/chat/index.ts b/src/queries/hooks/chat/index.ts new file mode 100644 index 0000000000..11c0ddb952 --- /dev/null +++ b/src/queries/hooks/chat/index.ts @@ -0,0 +1 @@ +export * from './useGetGroupInfo'; diff --git a/src/queries/hooks/chat/useGetGroupInfo.ts b/src/queries/hooks/chat/useGetGroupInfo.ts new file mode 100644 index 0000000000..c23394e410 --- /dev/null +++ b/src/queries/hooks/chat/useGetGroupInfo.ts @@ -0,0 +1,26 @@ +import { useQuery, UseQueryOptions } from '@tanstack/react-query'; +import { useSelector } from 'react-redux'; + +import { groupInfo } from '../../queryKeys'; +import { getGroupInfo } from '../../services'; + +import { UserStoreType } from 'types'; +import { GroupInfoResponse } from '../../types'; + +/** + * @param chainId + * @returns query response + */ +export const useGetGroupInfo = (chatId?: string, config?: Partial>) => { + const { userPushSDKInstance } = useSelector((state: UserStoreType) => { + return state.user; + }); + + const query = useQuery({ + queryKey: [groupInfo, userPushSDKInstance?.account, chatId], + enabled: !!chatId, + queryFn: () => getGroupInfo(userPushSDKInstance, chatId!), + ...config, + }); + return query; +}; diff --git a/src/queries/hooks/index.ts b/src/queries/hooks/index.ts index af7cf2c265..5ceff9be7e 100644 --- a/src/queries/hooks/index.ts +++ b/src/queries/hooks/index.ts @@ -1,5 +1,6 @@ export * from './createChannel'; export * from './channels'; +export * from './chat'; export * from './user'; export * from './rewards'; export * from './pointsVault'; diff --git a/src/queries/hooks/user/index.ts b/src/queries/hooks/user/index.ts index fe7160ed77..9df9805f44 100644 --- a/src/queries/hooks/user/index.ts +++ b/src/queries/hooks/user/index.ts @@ -2,3 +2,4 @@ export * from './useGetUserSubscriptions'; export * from './useSubscribeChannel'; export * from './useUnsubscribeChannel'; export * from './useUpdateNotificationSettings'; +export * from './useGetUserProfileDetails'; diff --git a/src/queries/hooks/user/useGetUserProfileDetails.ts b/src/queries/hooks/user/useGetUserProfileDetails.ts new file mode 100644 index 0000000000..f109872ef4 --- /dev/null +++ b/src/queries/hooks/user/useGetUserProfileDetails.ts @@ -0,0 +1,29 @@ +import { useQuery, UseQueryOptions } from '@tanstack/react-query'; +import { useSelector } from 'react-redux'; + +import { userProfileDetails } from '../../queryKeys'; +import { getUserProfileDetails } from '../../services'; + +import { UserStoreType } from 'types'; +import { UserProfileDetailsResponse } from '../../types'; + +/** + * @param userAddress + * @returns query response + */ +export const useGetUserProfileDetails = ( + userAddress?: string, + config?: Partial> +) => { + const { userPushSDKInstance } = useSelector((state: UserStoreType) => { + return state.user; + }); + + const query = useQuery({ + queryKey: [userProfileDetails, userPushSDKInstance?.account, userAddress], + enabled: !!userAddress, + queryFn: () => getUserProfileDetails(userPushSDKInstance, userAddress!), + ...config, + }); + return query; +}; diff --git a/src/queries/models/chat/getGroupInfoModelCreator.ts b/src/queries/models/chat/getGroupInfoModelCreator.ts new file mode 100644 index 0000000000..520141820c --- /dev/null +++ b/src/queries/models/chat/getGroupInfoModelCreator.ts @@ -0,0 +1,4 @@ +import { GroupInfoResponse } from '../../types'; + +//any remodelling needed in the response can be done here +export const getGroupInfoModelCreator = (response: GroupInfoResponse): GroupInfoResponse => response; diff --git a/src/queries/models/chat/index.ts b/src/queries/models/chat/index.ts new file mode 100644 index 0000000000..09b7b550d4 --- /dev/null +++ b/src/queries/models/chat/index.ts @@ -0,0 +1 @@ +export * from './getGroupInfoModelCreator'; diff --git a/src/queries/models/index.ts b/src/queries/models/index.ts index fdcb1f07a9..66edccfb44 100644 --- a/src/queries/models/index.ts +++ b/src/queries/models/index.ts @@ -2,3 +2,4 @@ export * from './channels'; export * from './user'; export * from './rewards'; export * from './pointsVault'; +export * from './chat'; diff --git a/src/queries/models/user/getUserProfileDetailsModelCreator.ts b/src/queries/models/user/getUserProfileDetailsModelCreator.ts new file mode 100644 index 0000000000..c44fc6bf87 --- /dev/null +++ b/src/queries/models/user/getUserProfileDetailsModelCreator.ts @@ -0,0 +1,5 @@ +import { UserProfileDetailsResponse } from '../../types'; + +//any remodelling needed in the response can be done here +export const getUserProfileDetailsModelCreator = (response: UserProfileDetailsResponse): UserProfileDetailsResponse => + response; diff --git a/src/queries/models/user/index.ts b/src/queries/models/user/index.ts index ea78fdbc11..ce1d94afca 100644 --- a/src/queries/models/user/index.ts +++ b/src/queries/models/user/index.ts @@ -1 +1,2 @@ export * from './getUserSubscriptionsModelCreator'; +export * from './getUserProfileDetailsModelCreator'; diff --git a/src/queries/queryKeys.ts b/src/queries/queryKeys.ts index 0270b2b84d..c9b8fab717 100644 --- a/src/queries/queryKeys.ts +++ b/src/queries/queryKeys.ts @@ -18,6 +18,7 @@ export const creatingNewChannel = 'creatingNewChannel'; export const deactivatingChannel = 'deactivatingChannel'; export const discordDetails = 'discordDetails'; export const generateUserIdByWallet = 'generateUserIdByWallet'; +export const groupInfo = 'groupInfo'; export const initiateNewChain = 'initiateNewChain'; export const pointsVaultApprovedUsers = 'pointsVaultApprovedUsers'; export const pointsVaultPendingUsers = 'pointsVaultPendingUsers'; @@ -45,4 +46,5 @@ export const userRewardsDetails = 'userRewardsDetails'; export const UserRewardsDetails = 'userRewardsDetails'; export const userSubscription = 'userSubscription'; export const userTwitterDetails = 'userTwitterDetails'; +export const userProfileDetails = 'userProfileDetails'; export const verifyAliasChain = 'verifyAliasChain'; diff --git a/src/queries/services/chat/getGroupInfo.ts b/src/queries/services/chat/getGroupInfo.ts new file mode 100644 index 0000000000..61b0724718 --- /dev/null +++ b/src/queries/services/chat/getGroupInfo.ts @@ -0,0 +1,5 @@ +import { PushAPI } from '@pushprotocol/restapi'; +import { getGroupInfoModelCreator } from '../../models'; + +export const getGroupInfo = (userPushSDKInstance: PushAPI, chatId: string) => + userPushSDKInstance.chat.group.info(chatId).then(getGroupInfoModelCreator); diff --git a/src/queries/services/chat/index.ts b/src/queries/services/chat/index.ts new file mode 100644 index 0000000000..df1c03bbc6 --- /dev/null +++ b/src/queries/services/chat/index.ts @@ -0,0 +1 @@ +export * from './getGroupInfo'; diff --git a/src/queries/services/index.ts b/src/queries/services/index.ts index 632b38dfaa..0697336462 100644 --- a/src/queries/services/index.ts +++ b/src/queries/services/index.ts @@ -5,3 +5,4 @@ export * from './pointsVault'; export * from './createChannel'; export * from './analytics'; export * from './notificationSettings'; +export * from './chat'; diff --git a/src/queries/services/user/getUserProfileDetails.ts b/src/queries/services/user/getUserProfileDetails.ts new file mode 100644 index 0000000000..0cc61ff422 --- /dev/null +++ b/src/queries/services/user/getUserProfileDetails.ts @@ -0,0 +1,5 @@ +import { PushAPI } from '@pushprotocol/restapi'; +import { getUserProfileDetailsModelCreator } from 'queries/models'; + +export const getUserProfileDetails = (userPushSDKInstance: PushAPI, address: string) => + userPushSDKInstance.profile.info({ overrideAccount: address }).then(getUserProfileDetailsModelCreator); diff --git a/src/queries/services/user/index.ts b/src/queries/services/user/index.ts index 6618895a84..da46eb1d04 100644 --- a/src/queries/services/user/index.ts +++ b/src/queries/services/user/index.ts @@ -2,3 +2,4 @@ export * from './getUserSubscriptions'; export * from './subscribeToChannel'; export * from './unsubscribeChannel'; export * from './updateNotificationSettings'; +export * from './getUserProfileDetails'; diff --git a/src/queries/types/chat.ts b/src/queries/types/chat.ts new file mode 100644 index 0000000000..1d742c1797 --- /dev/null +++ b/src/queries/types/chat.ts @@ -0,0 +1,3 @@ +import { GroupDTO, GroupInfoDTO } from '@pushprotocol/restapi'; + +export type GroupInfoResponse = GroupDTO | GroupInfoDTO; diff --git a/src/queries/types/index.ts b/src/queries/types/index.ts index a99590a6c3..05869cb58f 100644 --- a/src/queries/types/index.ts +++ b/src/queries/types/index.ts @@ -4,3 +4,4 @@ export * from './rewards'; export * from './pointsVault'; export * from './createChannel'; export * from './notificationsettings'; +export * from './chat'; diff --git a/src/queries/types/user.ts b/src/queries/types/user.ts index dbdf8eec16..209d773ce9 100644 --- a/src/queries/types/user.ts +++ b/src/queries/types/user.ts @@ -32,3 +32,11 @@ export type UnsubscribeChannelResponse = { status: string; message: string; }; + +export type UserProfileDetailsResponse = { + blockedUsersList: Array; + desc: string | null; + name: string | null; + picture: string; + profileVerificationProof: string | null; +}; diff --git a/yarn.lock b/yarn.lock index 85ec33ec3c..a59457cd38 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4055,9 +4055,9 @@ __metadata: languageName: node linkType: hard -"@pushprotocol/restapi@npm:1.7.25": - version: 1.7.25 - resolution: "@pushprotocol/restapi@npm:1.7.25" +"@pushprotocol/restapi@npm:1.7.29": + version: 1.7.29 + resolution: "@pushprotocol/restapi@npm:1.7.29" dependencies: "@metamask/eth-sig-util": "npm:^5.0.2" axios: "npm:^0.27.2" @@ -4080,7 +4080,7 @@ __metadata: peerDependenciesMeta: ethers: optional: true - checksum: 10/1da9268e81c3038871904336f16b6161fb039e9d0995a060f403f95c553a8ca8c9faada73c1806fb8ba3557cbdcc33b53c0e223c4cb743ddc9ed24da0b91c992 + checksum: 10/13afab4147598627c470f09706b859af116ffd4831bbb4de1e2f6b3490b5c10f5f06754b820a766614ac145912b9a455c974570a2763b82289aa57f37d55421a languageName: node linkType: hard @@ -4096,9 +4096,9 @@ __metadata: languageName: node linkType: hard -"@pushprotocol/uiweb@npm:1.7.1": - version: 1.7.1 - resolution: "@pushprotocol/uiweb@npm:1.7.1" +"@pushprotocol/uiweb@npm:1.7.2": + version: 1.7.2 + resolution: "@pushprotocol/uiweb@npm:1.7.2" dependencies: "@livekit/components-react": "npm:^1.2.2" "@livekit/components-styles": "npm:^1.0.6" @@ -4132,7 +4132,7 @@ __metadata: react-twitter-embed: "npm:^4.0.4" uuid: "npm:^9.0.1" peerDependencies: - "@pushprotocol/restapi": 1.7.25 + "@pushprotocol/restapi": 1.7.29 "@pushprotocol/socket": ^0.5.0 axios: ^0.27.2 openpgp: ^5.8.0 @@ -4140,7 +4140,7 @@ __metadata: react-dom: 17.0.2 styled-components: ^6.0.8 viem: ^1.3.0 - checksum: 10/218d56a0f9df43755ae8988cec94e93af7c8c4b5db5c88acee3a9062e0a6c1cbb510e43cd7706cf1b679964bf9cee6148f62e69f4d932560bfd1d6cdea785b8a + checksum: 10/8594689a4c814dae1cbc43500ae6e16e04a3cdadfc0b81130796ad06f64268e6b8ff986686323911266700972ec3a64870b335a97ed4e8766e826cbc504f13cf languageName: node linkType: hard @@ -18491,9 +18491,9 @@ __metadata: "@metamask/eth-sig-util": "npm:^4.0.0" "@mui/icons-material": "npm:^5.8.4" "@mui/material": "npm:^5.5.0" - "@pushprotocol/restapi": "npm:1.7.25" + "@pushprotocol/restapi": "npm:1.7.29" "@pushprotocol/socket": "npm:0.5.3" - "@pushprotocol/uiweb": "npm:1.7.1" + "@pushprotocol/uiweb": "npm:1.7.2" "@radix-ui/react-dialog": "npm:^1.1.1" "@radix-ui/react-dropdown-menu": "npm:^2.1.1" "@radix-ui/react-switch": "npm:^1.1.0"