diff --git a/package.json b/package.json index 45fb108f8f..f4acd493ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "@pushprotocol/dapp", - "version": "0.6.2", + "name": "@project/react-app", + "version": "0.6.3", "homepage": "https://app.push.org", "browserslist": { "production": [ @@ -34,7 +34,7 @@ "@mui/lab": "^5.0.0-alpha.72", "@mui/material": "^5.5.0", "@pushprotocol/ledgerlive": "0.0.1", - "@pushprotocol/restapi": "1.0.0", + "@pushprotocol/restapi": "^1.0.0", "@pushprotocol/socket": "0.4.2", "@pushprotocol/uiweb": "0.5.0", "@reduxjs/toolkit": "^1.7.1", @@ -108,7 +108,7 @@ "react-player": "2.9.0", "react-query": "^3.39.1", "react-redux": "^7.2.6", - "react-router-dom": "6", + "react-router-dom": "^6.9.0", "react-scripts": "^5.0.1", "react-scroll-to-bottom": "^4.2.0", "react-select": "^5.2.2", diff --git a/public/index-alpha.html b/public/index-alpha.html index 6f3ac3b160..1967c8e613 100644 --- a/public/index-alpha.html +++ b/public/index-alpha.html @@ -1,6 +1,7 @@ + @@ -13,7 +14,7 @@ - + - Push Dev App (Previously EPNS) | Communication Protocol of Web3 - + Push App (Previously EPNS) | Communication Protocol of Web3 + - + - - - + + + - - - - - + + + + + diff --git a/src/components/chat/chatsnap/ChatSnap.tsx b/src/components/chat/chatsnap/ChatSnap.tsx index afb5f23d07..50108ded11 100644 --- a/src/components/chat/chatsnap/ChatSnap.tsx +++ b/src/components/chat/chatsnap/ChatSnap.tsx @@ -35,8 +35,7 @@ const ChatSnap = ({ pfp, username, chatSnapMsg, timestamp, selected, onClick, is const theme = useTheme(); // get ens name const ensName = useResolveEns(!isGroup ? username : null); - // get reverse name - + // get short username const walletAddress = !isGroup ? caip10ToWallet(username) : null; const shortUsername = !isGroup ? shortenText(walletAddress, 8, 7) : null; @@ -66,7 +65,7 @@ const ChatSnap = ({ pfp, username, chatSnapMsg, timestamp, selected, onClick, is className="fa fa-picture-o" aria-hidden="true" >{' '} - Media + Image ) : chatSnapMsg.type === 'File' ? ( @@ -76,7 +75,7 @@ const ChatSnap = ({ pfp, username, chatSnapMsg, timestamp, selected, onClick, is >{' '} File - ) : chatSnapMsg.type === 'GIF' ? ( + ) : chatSnapMsg.type === 'GIF' || chatSnapMsg.type === 'MediaEmbed' ? ( { receivedIntents, inbox, messages, + activeTab, setActiveTab, setMessages, setChat, @@ -80,6 +83,8 @@ const ChatBox = ({ setVideoCallInfo, showGroupInfoModal }): JSX.Element => { setReceivedIntents, setBlockedLoading, }: AppContext = useContext(Context); + const [chatMeta, setChatMeta] = useState(null); + const [newMessage, setNewMessage] = useState(''); const { chainId, account ,library} = useWeb3React(); const [Loading, setLoading] = useState(true); @@ -108,6 +113,16 @@ const ChatBox = ({ setVideoCallInfo, showGroupInfoModal }): JSX.Element => { //get ens name const ensName = useResolveEns(!isGroup ? currentChat?.wallets?.split(',')[0].toString() : null); + const navigate = useNavigate(); + const location = useLocation(); + + useEffect(() => { + // if ens is resolved, update browse to match ens name is it doesn't match + if (ensName && location.pathname !== `/chat/${ensName}`) { + // lastly, set navigation for dynamic linking + navigate(`/chat/${ensName}`, {replace: true}); + } + }, [ensName]); const onScroll = async () => { if (listInnerRef.current) { @@ -133,14 +148,14 @@ const ChatBox = ({ setVideoCallInfo, showGroupInfoModal }): JSX.Element => { }; - const scrollToBottom = () => { - bottomRef?.current?.scrollIntoView({ behavior: "smooth" }) + const scrollToBottom = (behavior) => { + bottomRef?.current?.scrollIntoView(!behavior ? true : { behavior: 'smooth' }) } useEffect(() => { if (messages.length <= chatsFetchedLimit) - scrollToBottom(); + scrollToBottom(null); }, [messages]); @@ -227,8 +242,6 @@ useEffect(() => { }): Promise => { setMessageBeingSent(true); - scrollToBottom(); - try { let createdUser; if(!connectedUser.publicKey){ @@ -246,13 +259,15 @@ useEffect(() => { }); if (typeof sendResponse !== 'string') { - intitializeDb('Insert', 'CID_store', sendResponse.cid, sendResponse, 'cid'); + intitializeDb('Insert', 'CID_store', sendResponse.cid, sendResponse, 'cid'); sendResponse.messageContent = message; const updatedCurrentChat = currentChat; updatedCurrentChat.msg = sendResponse; setChat(updatedCurrentChat); setNewMessage(''); setMessages([...messages, sendResponse]); + + setMessageBeingSent(false); } else { chatBoxToast.showMessageToast({ toastTitle: 'Error', @@ -265,6 +280,8 @@ useEffect(() => { /> ), }); + + setMessageBeingSent(false); } } catch (error) { chatBoxToast.showMessageToast({ @@ -278,12 +295,17 @@ useEffect(() => { /> ), }); - } - setTimeout(() => { + setMessageBeingSent(false); - }, 3000); + } }; + useEffect(() => { + if (messageBeingSent == false) { + scrollToBottom(true); + } + }, [messageBeingSent]) + async function resolveThreadhash(): Promise { setLoading(true); let getIntent; @@ -401,7 +423,7 @@ useEffect(() => { progressEnabled: true, progress: 0, progressNotice: - 'Reminder: Push Chat is in alpha, Things might break. It seems you are not whitelisted, join our discord channel where we will be frequently dropping new invites: https://discord.com/invite/cHRmsnmyKx', + 'Reminder: Push Chat is in alpha, Things might break.', }); } // Display toaster @@ -478,19 +500,19 @@ useEffect(() => { }; const InfoMessages = [ - { id: 1, content: 'You can send up to 10 chat requests in alpha' }, + { id: 1, content: 'You can send up to 10 group requests in alpha' }, // { id: 2, content: 'You can send a chat request to anyone including non-whitelisted users' }, // { id: 3, content: 'You can chat with non-whitelisted users but they cannot send a chat request to anyone.' }, { id: 4, - content: 'You will have access to 100 latest messages. Encryption is enabled after a chat request is accepted', + content: 'You will have access to 1000 latest messages. Encryption is enabled after a chat request is accepted', }, { id: 5, content: 'Messages will only be encrypted if the receiver has encryption keys' }, - { - id: 6, - content: - 'Due to certain limitations Push Chat does not support Ledger Wallet yet. We are working on adding support.', - }, + // { + // id: 6, + // content: + // 'Due to certain limitations Push Chat does not support Ledger Wallet yet. We are working on adding support.', + // }, { id: 7, content: 'Access to more chat requests and messages will be added in the near future' }, ]; @@ -498,44 +520,56 @@ useEffect(() => { {!viewChatBox ? ( - - Say - - to Push Chat - + } - - - Push Chat is in alpha and things might break. - - - We would love to hear your feedback - - - - {InfoMessages.map((item) => ( - - - {item.content} - - ))} - - + {activeTab != 4 && + <> + + Say + + to Push Chat + + + + + Push Chat is in alpha and things might break. + + + + We would love to hear your feedback + + + + {InfoMessages.map((item) => ( + + + {item.content} + + ))} + + + + } ) : ( <> diff --git a/src/components/chat/w2wChat/chats/Chats.tsx b/src/components/chat/w2wChat/chats/Chats.tsx index 8e8b3f393f..bcebd7e954 100644 --- a/src/components/chat/w2wChat/chats/Chats.tsx +++ b/src/components/chat/w2wChat/chats/Chats.tsx @@ -2,30 +2,29 @@ import React, { useContext, useEffect, useState } from 'react'; // External Packages -import styled from 'styled-components'; import { TwitterTweetEmbed } from 'react-twitter-embed'; +import styled from 'styled-components'; // Internal Components -import { ImageV2, ItemHV2, SpanV2 } from 'components/reusables/SharedStylingV2'; -import tickIcon from '../../../../assets/chat/tick.svg'; -import { MessageIPFSWithCID, TwitterFeedReturnType } from 'types/chat'; -import Files, { FileMessageContent } from '../TypeBar/Files/Files'; -import Modal from '../Modal/Modal'; +import * as PushAPI from '@pushprotocol/restapi'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; +import { ImageV2, ItemHV2, ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; +import { shortenText } from 'helpers/UtilityHelper'; +import { caip10ToWallet } from 'helpers/w2w'; import { checkTwitterUrl } from 'helpers/w2w/twitter'; import { useResolveEns } from 'hooks/useResolveEns'; -import { caip10ToWallet } from 'helpers/w2w'; -import { shortenText } from 'helpers/UtilityHelper'; -import { AppContext } from 'types/chat'; import { Context } from 'modules/chat/ChatModule'; -import { SentMessageWrapper } from './MessageWrappers/SentMessageWrapper'; +import { AppContext, MessageIPFSWithCID, TwitterFeedReturnType } from 'types/chat'; +import tickIcon from '../../../../assets/chat/tick.svg'; import { getMemberDetails } from '../../../../helpers/w2w/groupChat'; +import Modal from '../Modal/Modal'; +import Files, { FileMessageContent } from '../TypeBar/Files/Files'; import { ReceivedMessageWrapper } from './MessageWrappers/ReceivedMessageWrapper'; -import * as PushAPI from '@pushprotocol/restapi'; +import { SentMessageWrapper } from './MessageWrappers/SentMessageWrapper'; // Internal Configs -import GLOBALS, { device } from 'config/Globals'; import { appConfig } from 'config'; +import GLOBALS, { device } from 'config/Globals'; interface ChatProps { @@ -55,7 +54,7 @@ export default function Chats({ msg, caip10, messageBeingSent, ApproveIntent, is setProfilePicture(member.image); } else { - console.log(msg) + // console.log(msg) let user = await PushAPI.user.get({account:msg.fromCAIP10,env:appConfig.appEnv}); setProfilePicture(user.profilePicture); } @@ -67,9 +66,10 @@ export default function Chats({ msg, caip10, messageBeingSent, ApproveIntent, is }, []); return ( - <> - {messageType === 'TwitterFeedLink' ? ( - <> + + {/* Support Msg Type = TwitterFeedLink */} + {msg.messageType === 'TwitterFeedLink' && + {msg.fromCAIP10 === caip10 ? ( )} - - ) : msg.messageType === 'Text' ? ( - <> + + } + + {/* Support Msg Type = Text */} + {msg.messageType === 'Text' && + {msg.fromCAIP10 === caip10 ? ( {msg.messageContent.split('\n').map((str) => ( - {str} + {str} ))} {date} @@ -133,15 +136,18 @@ export default function Chats({ msg, caip10, messageBeingSent, ApproveIntent, is > {msg.messageContent.split('\n').map((str) => ( - {str} + {str} ))} {date} )} - - ) : msg.messageType === 'Intent' ? ( - <> + + } + + {/* Support Msg Type = Intent */} + {msg.messageType === 'Intent' && + - - ) : msg.messageType === 'Image' ? ( - <> + + } + + {/* Support Msg Type = Image */} + {msg.messageType === 'Image' && + {msg.fromCAIP10 === caip10 ? ( )} - - ) : msg.messageType === 'GIF' ? ( - <> + + } + + {/* Support Msg Type = GIF OR Support Msg Type = MediaEmbed */} + {(msg.messageType === 'GIF' || msg.messageType === 'MediaEmbed') && + {msg.fromCAIP10 === caip10 ? ( )} - - ) : msg.messageType === 'File' ? ( - <> + + } + + {/* Support Msg Type = GIF OR Support Msg Type = MediaEmbed */} + {msg.messageType === 'File' && + {msg.fromCAIP10 === caip10 ? ( )} - - ) : null} - + + } + ); } diff --git a/src/components/chat/w2wChat/messageFeed/MessageFeed.tsx b/src/components/chat/w2wChat/messageFeed/MessageFeed.tsx index d9a6d7b82f..9fa83a12ec 100644 --- a/src/components/chat/w2wChat/messageFeed/MessageFeed.tsx +++ b/src/components/chat/w2wChat/messageFeed/MessageFeed.tsx @@ -2,41 +2,41 @@ import React, { useContext, useEffect, useState } from 'react'; // External Packages -import styled, { useTheme } from 'styled-components'; import { MdError } from 'react-icons/md'; -import { ethers } from 'ethers'; +import styled, { useTheme } from 'styled-components'; // Internal Components import { useWeb3React } from '@web3-react/core'; -import { AppContext, Feeds, User } from 'types/chat'; import ChatSnap from 'components/chat/chatsnap/ChatSnap'; import LoaderSpinner, { LOADER_TYPE } from 'components/reusables/loaders/LoaderSpinner'; import { ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; +import { ChatUserContext } from 'contexts/ChatUserContext'; import { decryptFeeds, walletToCAIP10 } from 'helpers/w2w'; -import useToast from 'hooks/useToast'; import { fetchInbox } from 'helpers/w2w/user'; +import useToast from 'hooks/useToast'; import { Context } from 'modules/chat/ChatModule'; -import { intitializeDb } from '../w2wIndexeddb'; -import { ChatUserContext } from 'contexts/ChatUserContext'; +import { AppContext, Feeds, User } from 'types/chat'; import { checkIfGroup, getChatsnapMessage, getGroupImage, getName } from '../../../../helpers/w2w/groupChat'; import { getDefaultFeed } from '../../../../helpers/w2w/user'; +import { intitializeDb } from '../w2wIndexeddb'; // Internal Configs -interface MessageFeedProps { +interface MessageFeedPropsI { filteredUserData: User[]; hasUserBeenSearched: boolean; isInvalidAddress: boolean; + automatedSearch: boolean; } -const MessageFeed = (props: MessageFeedProps): JSX.Element => { +const MessageFeed = (props: MessageFeedPropsI): JSX.Element => { const theme = useTheme(); - const { setChat, setInbox,currentChat,receivedIntents,setActiveTab, activeTab, inbox, setHasUserBeenSearched, filteredUserData, setFilteredUserData }: AppContext = useContext(Context); + const { setChat, setInbox, currentChat, receivedIntents, setActiveTab, activeTab, inbox, setHasUserBeenSearched, filteredUserData, setFilteredUserData }: AppContext = useContext(Context); - const {connectedUser} = useContext(ChatUserContext); + const { connectedUser } = useContext(ChatUserContext); const [feeds, setFeeds] = useState([]); const [messagesLoading, setMessagesLoading] = useState(true); @@ -70,6 +70,7 @@ const MessageFeed = (props: MessageFeedProps): JSX.Element => { return inboxes; } }; + const fetchInboxApi = async (): Promise => { try { const inboxes:Feeds[] = await fetchInbox(connectedUser); @@ -112,6 +113,12 @@ const MessageFeed = (props: MessageFeedProps): JSX.Element => { setFeeds(inbox); },[inbox]); + useEffect(() => { + if(feeds && feeds.length > 0 && props.automatedSearch) { + onFeedClick(feeds[0], 0); + setActiveTab(0); + } + }, [feeds]); useEffect(() => { if(!props.hasUserBeenSearched) @@ -160,7 +167,13 @@ const MessageFeed = (props: MessageFeedProps): JSX.Element => { }); } - setFeeds([]); + // reset if active tab is 4 + if (activeTab == 4) { + setActiveTab(0); + } + else { + setFeeds([]); + } } setMessagesLoading(false); }; @@ -179,7 +192,7 @@ const MessageFeed = (props: MessageFeedProps): JSX.Element => { justifyContent="flex-start" > {/* hey there */} - {activeTab !== 3 && ( + {activeTab !== 3 && activeTab !== 4 && ( { /> ) : ( <> - {!feeds?.length && !messagesLoading && activeTab!==3 ? ( + {!feeds?.length && !messagesLoading && activeTab!==3 && activeTab!==4 ? ( Start a new chat by using the + button ) : !messagesLoading ? ( feeds.map((feed: Feeds, i) => ( - { +const SearchBar = ({ autofilled }) => { // get theme const theme = useTheme(); @@ -48,6 +49,10 @@ const SearchBar = () => { const provider = new ethers.providers.InfuraProvider(appConfig.coreContractChain, appConfig.infuraAPIKey); const searchFeedToast = useToast(); + if (autofilled) { + // console.log("Search is autofilled:", autofilled); + } + useEffect(() => { if (searchedUser !== '' && userShouldBeSearched) { handleSearch(); @@ -56,6 +61,23 @@ const SearchBar = () => { return () => setUserShouldBeSearched(false); }, []); + useEffect(() => { + if (autofilled && !userShouldBeSearched) { + // automate search + setSearchedUser(autofilled); + } + + }, [userShouldBeSearched, autofilled]); + + useEffect(() => { + if (searchedUser) { + const event = new KeyboardEvent('keypress', { + key: 'enter', + }); + submitSearch(event); + } + }, [searchedUser]); + useEffect(() => { if (isInValidAddress) { searchFeedToast.showMessageToast({ @@ -69,6 +91,10 @@ const SearchBar = () => { /> ), }); + + if (activeTab == 4) { + setActiveTab(0); + } } }, [isInValidAddress]); @@ -99,7 +125,7 @@ const SearchBar = () => { // this ensures address are checksummed address = ethers.utils.getAddress(address.toLowerCase()); - console.log("searched address", address) + // console.log("searched address", address) if (address) { handleUserSearch(address); } else { @@ -113,7 +139,7 @@ const SearchBar = () => { setHasUserBeenSearched(true); } } else { - handleUserSearch(searchedUser); + await handleUserSearch(searchedUser); } setIsLoadingSearch(false); }; @@ -132,7 +158,12 @@ const SearchBar = () => { if (filteredData !== null && isUserConnected) { if (activeTab !== 0) { setUserShouldBeSearched(true); - setActiveTab(0); + + if (autofilled) { + setActiveTab(4); + } else { + setActiveTab(0); + } } setFilteredUserData([filteredData]); setSearchedUser('') @@ -141,7 +172,11 @@ const SearchBar = () => { else { if (ethers.utils.isAddress(userSearchData)) { setUserShouldBeSearched(true); - setActiveTab(3); + if (autofilled) { + setActiveTab(4); + } else { + setActiveTab(3); + } const displayUser = displayDefaultUser({ caip10 }); setFilteredUserData([displayUser]); setSearchedUser('') @@ -168,7 +203,7 @@ const SearchBar = () => { justifyContent="flex-start" flex="0" > - {activeTab === 3 && ( + {(activeTab === 3 || activeTab === 4) && ( { color="#D53893" margin="0px 0px 0px 7px" > - New Chat + {activeTab == 3 ? "New Chat" : "All Chats"} )} @@ -200,50 +235,56 @@ const SearchBar = () => { width="100%" flex="initial" > - - - {searchedUser.length > 0 && ( + + + + {searchedUser.length > 0 && ( + + + + )} - + {isLoadingSearch && ( + + )} + {!isLoadingSearch && ( + + )} - )} - - {isLoadingSearch && ( - - )} - {!isLoadingSearch && ( - - )} - - - {activeTab !== 3 && ( + + + + {activeTab !== 3 && activeTab !== 4 && ( { {isLoadingSearch ? ( - + + + ) : ( filteredUserData.length > 0 && ( ) )} diff --git a/src/modules/chat/ChatModule.tsx b/src/modules/chat/ChatModule.tsx index 3e83f20929..952a98d775 100644 --- a/src/modules/chat/ChatModule.tsx +++ b/src/modules/chat/ChatModule.tsx @@ -1,45 +1,46 @@ // React + Web3 Essentials -import React, { useContext, useEffect, useState } from 'react'; import { useWeb3React } from '@web3-react/core'; import { ethers } from 'ethers'; +import React, { useContext, useEffect, useState } from 'react'; +import { useNavigate } from "react-router-dom"; // External Packages import ReactGA from 'react-ga'; -import styled, { useTheme } from 'styled-components'; import { QueryClient, QueryClientProvider } from 'react-query'; import { ReactQueryDevtools } from 'react-query/devtools'; import { ToastOptions } from 'react-toastify'; import 'react-toastify/dist/ReactToastify.css'; import { useClickAway } from 'react-use'; +import styled, { useTheme } from 'styled-components'; // Internal Compoonents -import { AppContext, Feeds, MessageIPFS, MessageIPFSWithCID, User } from 'types/chat'; -import { ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; +import ChatQR from 'components/chat/w2wChat/chatQR/chatQR'; +import MobileView from 'components/chat/w2wChat/chatQR/mobileView'; +import { CreateGroupModalContent } from 'components/chat/w2wChat/groupChat/createGroup/CreateGroupModalContent'; +import { GroupInfoModalContent } from 'components/chat/w2wChat/groupChat/groupInfo/groupInfoModalContent'; import LoaderSpinner, { LOADER_OVERLAY, LOADER_SPINNER_TYPE, LOADER_TYPE, - PROGRESS_POSITIONING, + PROGRESS_POSITIONING } from 'components/reusables/loaders/LoaderSpinner'; +import { ItemHV2, ItemVV2 } from 'components/reusables/SharedStylingV2'; +import { ChatUserContext } from 'contexts/ChatUserContext'; import { VideoCallContext } from 'contexts/VideoCallContext'; +import * as w2wHelper from 'helpers/w2w/'; +import { checkIfGroup, rearrangeMembers } from 'helpers/w2w/groupChat'; +import { useDeviceWidthCheck, useSDKSocket } from 'hooks'; +import { default as useModalBlur } from 'hooks/useModalBlur'; +import { default as useToast } from 'hooks/useToast'; import ChatBoxSection from 'sections/chat/ChatBoxSection'; import ChatSidebarSection from 'sections/chat/ChatSidebarSection'; import VideoCallSection, { VideoCallInfoI } from 'sections/video/VideoCallSection'; -import useToast from 'hooks/useToast'; -import { GroupInfoModalContent } from 'components/chat/w2wChat/groupChat/groupInfo/groupInfoModalContent'; -import useModalBlur from 'hooks/useModalBlur'; -import { CreateGroupModalContent } from 'components/chat/w2wChat/groupChat/createGroup/CreateGroupModalContent'; -import { useDeviceWidthCheck, useSDKSocket } from 'hooks'; -import MobileView from 'components/chat/w2wChat/chatQR/mobileView'; -import { checkIfGroup, rearrangeMembers } from 'helpers/w2w/groupChat'; -import { ChatUserContext } from 'contexts/ChatUserContext'; -import ChatQR from 'components/chat/w2wChat/chatQR/chatQR'; -import * as w2wHelper from 'helpers/w2w/'; +import { AppContext, Feeds, MessageIPFS, MessageIPFSWithCID, User } from 'types/chat'; // Internal Configs -import GLOBALS, { device, globalsMargin } from 'config/Globals'; import { appConfig } from 'config'; +import GLOBALS, { device, globalsMargin } from 'config/Globals'; import { fetchIntent } from 'helpers/w2w/user'; export const ToastPosition: ToastOptions = { @@ -55,7 +56,7 @@ export const ToastPosition: ToastOptions = { export const Context = React.createContext(null); // Create Header -function Chat() { +function Chat({ chatid }) { const { account, chainId, library } = useWeb3React(); const { getUser, connectedUser, setConnectedUser, blockedLoading, setBlockedLoading, displayQR, setDisplayQR } = useContext(ChatUserContext); @@ -248,7 +249,7 @@ function Chat() { title: 'Step 1/4: Getting Account Info', progressEnabled: true, progress: 25, - progressNotice: 'Reminder: Push Chat is in alpha, you might need to sign a decrypt transaction to continue', + progressNotice: 'Important: Push Chat encryption standard is updated, you might need to sign 3-4 transactions to upgrade (required once).', }); if (!connectedUser) { @@ -264,6 +265,14 @@ function Chat() { }); setIsLoading(false); + + if (chatid) { + // reformat chatid first + chatid = reformatChatId(chatid); + + // dynamic url + setCurrentTab(4); + } }; const setActiveTab = (tab: number): void => { @@ -276,9 +285,52 @@ function Chat() { } else if (tab === 3) { setChat(null); setCurrentTab(tab); + } else if (tab === 4) { + setCurrentTab(tab); } }; + const reformatChatId = (chatid: string): string => { + let isWallet = false; + + // check if chatid: is appened, then skip anything else + if (chatid.startsWith('chatid:')) { + return chatid; + } + + // check if .eth is at the end, then skip anything else + if (chatid.endsWith('.eth')) { + return chatid; + } + + // check if this is eip155: which is considered default and therefore remove it + if (chatid.startsWith('eip155:')) { + chatid = chatid.replace('eip155:', ''); + isWallet = true; + } + + // check if this is eip155: which is considered default and therefore remove it + if (chatid.startsWith('eip155:')) { + chatid = chatid.replace('eip155:', ''); + isWallet = true; + } + + // check if this is an account address or not and based on that take appropriate action + if (!isWallet && ethers.utils.isAddress(chatid)) { + isWallet = true; + } + + // if all checks fail then this is probably a chat id + // WARNING: THIS WILL FAIL WITH NON-EVMS, NEED NODES TO INDICATE CHATID: + if (!isWallet) { + // append chatid: + chatid = `chatid:${chatid}`; + } + + return chatid; + } + + let navigate = useNavigate(); const setChat = (feed: Feeds): void => { if (feed) { setViewChatBox(true); @@ -286,9 +338,24 @@ function Chat() { { rearrangeMembers(feed,connectedUser); } + + // check and set to wallet or chat id + let chatid = feed.did; + if (!chatid) { + // check group information + if (feed.groupInformation) { + chatid = feed.groupInformation.chatId; + } + } + chatid = reformatChatId(chatid); + // console.log(feed); setCurrentChat(feed); + + // lastly, set navigation for dynamic linking + navigate(`/chat/${chatid}`); } else { setViewChatBox(false); + navigate(`/chat`); } }; @@ -332,7 +399,7 @@ function Chat() { background={theme.default.bg} chatActive={viewChatBox} > - + { + let { chatid } = useParams(); + // RENDER return ( - + ); } diff --git a/src/sections/chat/ChatSidebarSection.tsx b/src/sections/chat/ChatSidebarSection.tsx index dec5f8e6cf..497bab3712 100644 --- a/src/sections/chat/ChatSidebarSection.tsx +++ b/src/sections/chat/ChatSidebarSection.tsx @@ -9,27 +9,28 @@ import { useClickAway } from 'react-use'; import styled, { useTheme } from 'styled-components'; // Internal Compoonents -import IntentFeed from 'components/chat/w2wChat/intentFeed/IntentFeed'; import * as PushAPI from "@pushprotocol/restapi"; +import { ReactComponent as CreateGroupIcon } from 'assets/chat/group-chat/creategroup.svg'; +import { ReactComponent as CreateGroupFillIcon } from 'assets/chat/group-chat/creategroupfill.svg'; +import IntentFeed from 'components/chat/w2wChat/intentFeed/IntentFeed'; +import MessageFeed from 'components/chat/w2wChat/messageFeed/MessageFeed'; import ProfileHeader from 'components/chat/w2wChat/profile'; import SearchBar from 'components/chat/w2wChat/searchBar/SearchBar'; import { fetchIntent } from 'helpers/w2w/user'; -import { Feeds } from 'types/chat'; import { intitializeDb } from 'components/chat/w2wChat/w2wIndexeddb'; import { ButtonV2, ItemHV2, ItemVV2, SpanV2 } from 'components/reusables/SharedStylingV2'; -import * as w2wHelper from 'helpers/w2w/'; -import StyleHelper from 'helpers/StyleHelper'; -import MessageFeed from 'components/chat/w2wChat/messageFeed/MessageFeed'; -import { Context } from 'modules/chat/ChatModule'; import { ChatUserContext } from 'contexts/ChatUserContext'; -import { ReactComponent as CreateGroupIcon } from 'assets/chat/group-chat/creategroup.svg'; -import { ReactComponent as CreateGroupFillIcon } from 'assets/chat/group-chat/creategroupfill.svg'; +import StyleHelper from 'helpers/StyleHelper'; import { getIsNewTagVisible } from 'helpers/TimerHelper'; -import NewTag from 'components/NewTag'; +import * as w2wHelper from 'helpers/w2w/'; +import { checkConnectedUser } from 'helpers/w2w/user'; +import { Context } from 'modules/chat/ChatModule'; +import { Feeds } from 'types/chat'; // Internal Configs +import NewTag from 'components/NewTag'; import GLOBALS from 'config/Globals'; import { appConfig } from '../../config'; @@ -63,11 +64,11 @@ const createGroupOnMouseLeave = [{ // Chat Sections // Divided into two, left and right -const ChatSidebarSection = ({showCreateGroupModal}) => { +const ChatSidebarSection = ({ showCreateGroupModal, autofilledSearch }) => { // theme context const theme = useTheme(); - const { receivedIntents,searchedUser, setReceivedIntents, filteredUserData } = useContext(Context); + const { receivedIntents, searchedUser, setReceivedIntents, filteredUserData } = useContext(Context); const isNewTagVisible = getIsNewTagVisible(new Date("2023-02-22T00:00:00.000"), 90); @@ -240,6 +241,7 @@ useClickAway(containerRef, () => closeQRDropdown()) hasUserBeenSearched={false} filteredUserData={[]} isInvalidAddress={false} + automatedSearch={false} /> )} {activeTab == 1 && ( @@ -247,7 +249,8 @@ useClickAway(containerRef, () => closeQRDropdown()) )} - {activeTab == 3 && } + {activeTab == 3 && } + {activeTab == 4 && } {/* Footer */} diff --git a/src/structure/MasterInterfacePage.tsx b/src/structure/MasterInterfacePage.tsx index a73b41bc65..2376fa42a2 100644 --- a/src/structure/MasterInterfacePage.tsx +++ b/src/structure/MasterInterfacePage.tsx @@ -1,5 +1,5 @@ // React + Web3 Essentials -import React, { lazy, Suspense, useState } from 'react'; +import React, { lazy, Suspense } from 'react'; // External Packages import { VscClose } from 'react-icons/vsc'; @@ -76,6 +76,7 @@ function MasterInterfacePage() { > } /> + } /> } /> {/* } /> */} diff --git a/src/types/chat.ts b/src/types/chat.ts index 9c4cd7c6ff..fa70f8f449 100644 --- a/src/types/chat.ts +++ b/src/types/chat.ts @@ -57,7 +57,23 @@ export interface IGroup { groupDescription: string | null, groupCreator: string, chatId: string - } +} + +export interface ChatMetaI { + did: string; + wallets: string; + profilePicture: string | null; + publicKey: string | null; + about: string | null; + threadhash: string | null; + intent: string | null; + intentSentBy: string | null; + intentTimestamp: Date; + combinedDID: string; + cid?: string; + groupInformation?: IGroup +} + export interface Feeds { msg: MessageIPFS; did: string; diff --git a/yarn.lock b/yarn.lock index a9cd095f9c..aea30c4139 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4175,10 +4175,33 @@ __metadata: languageName: node linkType: hard -"@mui/core-downloads-tracker@npm:^5.11.14": - version: 5.11.14 - resolution: "@mui/core-downloads-tracker@npm:5.11.14" - checksum: 8b1b42e125b15136ee82d2cb48354202b87beb8e20defcf3a8b758b033732444d09446d85a28c23b0dcaa8b5d067bc20bdd654c9adf551d826b142b4b09d7dd7 +"@mui/base@npm:5.0.0-alpha.123": + version: 5.0.0-alpha.123 + resolution: "@mui/base@npm:5.0.0-alpha.123" + dependencies: + "@babel/runtime": ^7.21.0 + "@emotion/is-prop-valid": ^1.2.0 + "@mui/types": ^7.2.3 + "@mui/utils": ^5.11.13 + "@popperjs/core": ^2.11.7 + clsx: ^1.2.1 + prop-types: ^15.8.1 + react-is: ^18.2.0 + peerDependencies: + "@types/react": ^17.0.0 || ^18.0.0 + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: a17c266d0a922903e43c08cce8f42d1a35716b5d1574393c90ac89290029f6c08ef7261ba7af3609917a32fce1a1c0efdab06320df4d1ab351fd987e429f6dfd + languageName: node + linkType: hard + +"@mui/core-downloads-tracker@npm:^5.11.15": + version: 5.11.15 + resolution: "@mui/core-downloads-tracker@npm:5.11.15" + checksum: 8dc377b415ac1c18ec11a55fe916aeb0317e4c454759e3c3c0d3bdeaef75236486f17cb9ef3ae01eaee5f51e2cc7ada6a7e7ca452a64ddbbb8638c32e2615938 languageName: node linkType: hard @@ -4229,13 +4252,13 @@ __metadata: linkType: hard "@mui/material@npm:^5.5.0": - version: 5.11.14 - resolution: "@mui/material@npm:5.11.14" + version: 5.11.15 + resolution: "@mui/material@npm:5.11.15" dependencies: "@babel/runtime": ^7.21.0 - "@mui/base": 5.0.0-alpha.122 - "@mui/core-downloads-tracker": ^5.11.14 - "@mui/system": ^5.11.14 + "@mui/base": 5.0.0-alpha.123 + "@mui/core-downloads-tracker": ^5.11.15 + "@mui/system": ^5.11.15 "@mui/types": ^7.2.3 "@mui/utils": ^5.11.13 "@types/react-transition-group": ^4.4.5 @@ -4257,7 +4280,7 @@ __metadata: optional: true "@types/react": optional: true - checksum: 48fdd56ee55da6d551b8b716b8a080afe2276a62e0441efdd58be3b10ab1204d196a8ecc5f35ac23b8e9c7f5d6884ce37966cdcf8846771fe8ccc5ca626a8e1e + checksum: 53726a8aa2ab541c967eda43fe0094486e2f2ac743c39f09a5326aeffdba0be414187f216346c45135751b63a28a9871f4e68f4d6ab89b5b1d86e468f869d328 languageName: node linkType: hard @@ -4299,9 +4322,9 @@ __metadata: languageName: node linkType: hard -"@mui/system@npm:^5.11.14": - version: 5.11.14 - resolution: "@mui/system@npm:5.11.14" +"@mui/system@npm:^5.11.14, @mui/system@npm:^5.11.15": + version: 5.11.15 + resolution: "@mui/system@npm:5.11.15" dependencies: "@babel/runtime": ^7.21.0 "@mui/private-theming": ^5.11.13 @@ -4323,7 +4346,7 @@ __metadata: optional: true "@types/react": optional: true - checksum: a9df588ee7358438244ba5115f1f3bfe548b4c9077280204b6f6d4b98f20fd93f76bc36bf1430848b64e5c3a495ecb0e5000379932faa3dfb92360a34262f301 + checksum: c8b8ffcf48b204f8e0ff6cc2ef5a35b6a3ef3517c9626dbb2fda073b81992c93750167440737459b82ff1ac2bf6d4e9eb9ce3b39887bdc4dbded5bc8266032ac languageName: node linkType: hard @@ -4609,89 +4632,16 @@ __metadata: languageName: node linkType: hard -"@popperjs/core@npm:^2.11.6, @popperjs/core@npm:^2.4.4": +"@popperjs/core@npm:^2.11.6, @popperjs/core@npm:^2.11.7, @popperjs/core@npm:^2.4.4": version: 2.11.7 resolution: "@popperjs/core@npm:2.11.7" checksum: 5b6553747899683452a1d28898c1b39173a4efd780e74360bfcda8eb42f1c5e819602769c81a10920fc68c881d07fb40429604517d499567eac079cfa6470f19 languageName: node linkType: hard -"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": - version: 1.1.2 - resolution: "@protobufjs/aspromise@npm:1.1.2" - checksum: 011fe7ef0826b0fd1a95935a033a3c0fd08483903e1aa8f8b4e0704e3233406abb9ee25350ec0c20bbecb2aad8da0dcea58b392bbd77d6690736f02c143865d2 - languageName: node - linkType: hard - -"@protobufjs/base64@npm:^1.1.2": - version: 1.1.2 - resolution: "@protobufjs/base64@npm:1.1.2" - checksum: 67173ac34de1e242c55da52c2f5bdc65505d82453893f9b51dc74af9fe4c065cf4a657a4538e91b0d4a1a1e0a0642215e31894c31650ff6e3831471061e1ee9e - languageName: node - linkType: hard - -"@protobufjs/codegen@npm:^2.0.4": - version: 2.0.4 - resolution: "@protobufjs/codegen@npm:2.0.4" - checksum: 59240c850b1d3d0b56d8f8098dd04787dcaec5c5bd8de186fa548de86b86076e1c50e80144b90335e705a044edf5bc8b0998548474c2a10a98c7e004a1547e4b - languageName: node - linkType: hard - -"@protobufjs/eventemitter@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/eventemitter@npm:1.1.0" - checksum: 0369163a3d226851682f855f81413cbf166cd98f131edb94a0f67f79e75342d86e89df9d7a1df08ac28be2bc77e0a7f0200526bb6c2a407abbfee1f0262d5fd7 - languageName: node - linkType: hard - -"@protobufjs/fetch@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/fetch@npm:1.1.0" - dependencies: - "@protobufjs/aspromise": ^1.1.1 - "@protobufjs/inquire": ^1.1.0 - checksum: 3fce7e09eb3f1171dd55a192066450f65324fd5f7cc01a431df01bb00d0a895e6bfb5b0c5561ce157ee1d886349c90703d10a4e11a1a256418ff591b969b3477 - languageName: node - linkType: hard - -"@protobufjs/float@npm:^1.0.2": - version: 1.0.2 - resolution: "@protobufjs/float@npm:1.0.2" - checksum: 5781e1241270b8bd1591d324ca9e3a3128d2f768077a446187a049e36505e91bc4156ed5ac3159c3ce3d2ba3743dbc757b051b2d723eea9cd367bfd54ab29b2f - languageName: node - linkType: hard - -"@protobufjs/inquire@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/inquire@npm:1.1.0" - checksum: ca06f02eaf65ca36fb7498fc3492b7fc087bfcc85c702bac5b86fad34b692bdce4990e0ef444c1e2aea8c034227bd1f0484be02810d5d7e931c55445555646f4 - languageName: node - linkType: hard - -"@protobufjs/path@npm:^1.1.2": - version: 1.1.2 - resolution: "@protobufjs/path@npm:1.1.2" - checksum: 856eeb532b16a7aac071cacde5c5620df800db4c80cee6dbc56380524736205aae21e5ae47739114bf669ab5e8ba0e767a282ad894f3b5e124197cb9224445ee - languageName: node - linkType: hard - -"@protobufjs/pool@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/pool@npm:1.1.0" - checksum: d6a34fbbd24f729e2a10ee915b74e1d77d52214de626b921b2d77288bd8f2386808da2315080f2905761527cceffe7ec34c7647bd21a5ae41a25e8212ff79451 - languageName: node - linkType: hard - -"@protobufjs/utf8@npm:^1.1.0": - version: 1.1.0 - resolution: "@protobufjs/utf8@npm:1.1.0" - checksum: f9bf3163d13aaa3b6f5e6fbf37a116e094ea021c0e1f2a7ccd0e12a29e2ce08dafba4e8b36e13f8ed7397e1591610ce880ed1289af4d66cf4ace8a36a9557278 - languageName: node - linkType: hard - -"@pushprotocol/dapp@workspace:.": +"@project/react-app@workspace:.": version: 0.0.0-use.local - resolution: "@pushprotocol/dapp@workspace:." + resolution: "@project/react-app@workspace:." dependencies: "@3id/connect": 0.4.1 "@apollo/client": ^3.3.7 @@ -4713,7 +4663,7 @@ __metadata: "@mui/lab": ^5.0.0-alpha.72 "@mui/material": ^5.5.0 "@pushprotocol/ledgerlive": 0.0.1 - "@pushprotocol/restapi": 1.0.0 + "@pushprotocol/restapi": ^1.0.0 "@pushprotocol/socket": 0.4.2 "@pushprotocol/uiweb": 0.5.0 "@reduxjs/toolkit": ^1.7.1 @@ -4799,7 +4749,7 @@ __metadata: react-player: 2.9.0 react-query: ^3.39.1 react-redux: ^7.2.6 - react-router-dom: 6 + react-router-dom: ^6.9.0 react-scripts: ^5.0.1 react-scroll-to-bottom: ^4.2.0 react-select: ^5.2.2 @@ -4825,6 +4775,79 @@ __metadata: languageName: unknown linkType: soft +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 011fe7ef0826b0fd1a95935a033a3c0fd08483903e1aa8f8b4e0704e3233406abb9ee25350ec0c20bbecb2aad8da0dcea58b392bbd77d6690736f02c143865d2 + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 67173ac34de1e242c55da52c2f5bdc65505d82453893f9b51dc74af9fe4c065cf4a657a4538e91b0d4a1a1e0a0642215e31894c31650ff6e3831471061e1ee9e + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 59240c850b1d3d0b56d8f8098dd04787dcaec5c5bd8de186fa548de86b86076e1c50e80144b90335e705a044edf5bc8b0998548474c2a10a98c7e004a1547e4b + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 0369163a3d226851682f855f81413cbf166cd98f131edb94a0f67f79e75342d86e89df9d7a1df08ac28be2bc77e0a7f0200526bb6c2a407abbfee1f0262d5fd7 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": ^1.1.1 + "@protobufjs/inquire": ^1.1.0 + checksum: 3fce7e09eb3f1171dd55a192066450f65324fd5f7cc01a431df01bb00d0a895e6bfb5b0c5561ce157ee1d886349c90703d10a4e11a1a256418ff591b969b3477 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 5781e1241270b8bd1591d324ca9e3a3128d2f768077a446187a049e36505e91bc4156ed5ac3159c3ce3d2ba3743dbc757b051b2d723eea9cd367bfd54ab29b2f + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: ca06f02eaf65ca36fb7498fc3492b7fc087bfcc85c702bac5b86fad34b692bdce4990e0ef444c1e2aea8c034227bd1f0484be02810d5d7e931c55445555646f4 + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 856eeb532b16a7aac071cacde5c5620df800db4c80cee6dbc56380524736205aae21e5ae47739114bf669ab5e8ba0e767a282ad894f3b5e124197cb9224445ee + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: d6a34fbbd24f729e2a10ee915b74e1d77d52214de626b921b2d77288bd8f2386808da2315080f2905761527cceffe7ec34c7647bd21a5ae41a25e8212ff79451 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: f9bf3163d13aaa3b6f5e6fbf37a116e094ea021c0e1f2a7ccd0e12a29e2ce08dafba4e8b36e13f8ed7397e1591610ce880ed1289af4d66cf4ace8a36a9557278 + languageName: node + linkType: hard + "@pushprotocol/ledgerlive@npm:0.0.1": version: 0.0.1 resolution: "@pushprotocol/ledgerlive@npm:0.0.1" @@ -4837,7 +4860,7 @@ __metadata: languageName: node linkType: hard -"@pushprotocol/restapi@npm:1.0.0": +"@pushprotocol/restapi@npm:^1.0.0": version: 1.0.0 resolution: "@pushprotocol/restapi@npm:1.0.0" dependencies: @@ -7965,18 +7988,7 @@ __metadata: languageName: node linkType: hard -"acorn-node@npm:^1.8.2": - version: 1.8.2 - resolution: "acorn-node@npm:1.8.2" - dependencies: - acorn: ^7.0.0 - acorn-walk: ^7.0.0 - xtend: ^4.0.2 - checksum: 02e1564a1ccf8bd1fcefcd01235398af4a9effaf032c5397994ddd275590a72894cb3e26e4b82579ccdda1e48ade7486aef61e771ddae3563ca452b927f443d8 - languageName: node - linkType: hard - -"acorn-walk@npm:^7.0.0, acorn-walk@npm:^7.1.1": +"acorn-walk@npm:^7.1.1": version: 7.2.0 resolution: "acorn-walk@npm:7.2.0" checksum: 9252158a79b9d92f1bc0dd6acc0fcfb87a67339e84bcc301bb33d6078936d27e35d606b4d35626d2962cd43c256d6f27717e70cbe15c04fff999ab0b2260b21f @@ -8008,7 +8020,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^7.0.0, acorn@npm:^7.1.1, acorn@npm:^7.4.0": +"acorn@npm:^7.1.1, acorn@npm:^7.4.0": version: 7.4.1 resolution: "acorn@npm:7.4.1" bin: @@ -8244,6 +8256,13 @@ __metadata: languageName: node linkType: hard +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + "any-signal@npm:^2.0.0, any-signal@npm:^2.1.0": version: 2.1.2 resolution: "any-signal@npm:2.1.2" @@ -11249,6 +11268,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + "commander@npm:^7.2.0": version: 7.2.0 resolution: "commander@npm:7.2.0" @@ -12441,7 +12467,7 @@ __metadata: languageName: node linkType: hard -"defined@npm:^1.0.0, defined@npm:~1.0.1": +"defined@npm:~1.0.1": version: 1.0.1 resolution: "defined@npm:1.0.1" checksum: b1a852300bdb57f297289b55eafdd0c517afaa3ec8190e78fce91b9d8d0c0369d4505ecbdacfd3d98372e664f4a267d9bd793938d4a8c76209c9d9516fbe2101 @@ -12566,19 +12592,6 @@ __metadata: languageName: node linkType: hard -"detective@npm:^5.2.1": - version: 5.2.1 - resolution: "detective@npm:5.2.1" - dependencies: - acorn-node: ^1.8.2 - defined: ^1.0.0 - minimist: ^1.2.6 - bin: - detective: bin/detective.js - checksum: dc4601bbc6be850edb3c2dab7a0eaf5a6169a15ad201679c66d40ea1986df816eeaecd590047f15b0780285f3eeea13b82dca0d4c52a47e744a571e326a72dc9 - languageName: node - linkType: hard - "did-jwt@npm:^4.0.0, did-jwt@npm:^4.6.2": version: 4.9.0 resolution: "did-jwt@npm:4.9.0" @@ -13125,9 +13138,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.3.47, electron-to-chromium@npm:^1.3.585, electron-to-chromium@npm:^1.4.284": - version: 1.4.341 - resolution: "electron-to-chromium@npm:1.4.341" - checksum: b97377e4e622266953da2c92276b9c0a948ab7e8a0a9c9947da340269f8eb959b8678f76158b78b473a56912c697d89e37a93d82b4d2db84f622e9be7850a540 + version: 1.4.342 + resolution: "electron-to-chromium@npm:1.4.342" + checksum: 61ecf9f3ea65a6044cdcea092dd56b42d0961fdb8fb3942ba808c6aa6ab3213d3218e599748d6d6ae8b43ddc9f76f428af0b96eaee2f0b4b2f0195c643f36f3d languageName: node linkType: hard @@ -15973,6 +15986,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:7.1.6": + version: 7.1.6 + resolution: "glob@npm:7.1.6" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 351d549dd90553b87c2d3f90ce11aed9e1093c74130440e7ae0592e11bbcd2ce7f0ebb8ba6bfe63aaf9b62166a7f4c80cb84490ae5d78408bb2572bf7d4ee0a6 + languageName: node + linkType: hard + "glob@npm:^6.0.1": version: 6.0.4 resolution: "glob@npm:6.0.4" @@ -19020,6 +19047,15 @@ __metadata: languageName: node linkType: hard +"jiti@npm:^1.17.2": + version: 1.18.2 + resolution: "jiti@npm:1.18.2" + bin: + jiti: bin/jiti.js + checksum: 46c41cd82d01c6efdee3fc0ae9b3e86ed37457192d6366f19157d863d64961b07982ab04e9d5879576a1af99cc4d132b0b73b336094f86a5ce9fb1029ec2d29f + languageName: node + linkType: hard + "jotai-immer@npm:^0.2.0": version: 0.2.0 resolution: "jotai-immer@npm:0.2.0" @@ -21557,6 +21593,17 @@ __metadata: languageName: node linkType: hard +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + "nan@npm:2.14.0": version: 2.14.0 resolution: "nan@npm:2.14.0" @@ -23112,7 +23159,7 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 @@ -25275,7 +25322,7 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:6": +"react-router-dom@npm:^6.9.0": version: 6.9.0 resolution: "react-router-dom@npm:6.9.0" dependencies: @@ -28110,6 +28157,23 @@ __metadata: languageName: node linkType: hard +"sucrase@npm:^3.29.0": + version: 3.31.0 + resolution: "sucrase@npm:3.31.0" + dependencies: + commander: ^4.0.0 + glob: 7.1.6 + lines-and-columns: ^1.1.6 + mz: ^2.7.0 + pirates: ^4.0.1 + ts-interface-checker: ^0.1.9 + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 333990b1bca57acc010ae07c763dddfd34f01fd38afe9e53cf43f4a5096bd7a66f924fed65770288fba475f914f3aa5277cc4490ed9e74c50b4cea7f147e9e63 + languageName: node + linkType: hard + "super-regex@npm:^0.2.0": version: 0.2.0 resolution: "super-regex@npm:0.2.0" @@ -28266,18 +28330,18 @@ __metadata: linkType: hard "tailwindcss@npm:^3.0.2": - version: 3.2.7 - resolution: "tailwindcss@npm:3.2.7" + version: 3.3.0 + resolution: "tailwindcss@npm:3.3.0" dependencies: arg: ^5.0.2 chokidar: ^3.5.3 color-name: ^1.1.4 - detective: ^5.2.1 didyoumean: ^1.2.2 dlv: ^1.1.3 fast-glob: ^3.2.12 glob-parent: ^6.0.2 is-glob: ^4.0.3 + jiti: ^1.17.2 lilconfig: ^2.0.6 micromatch: ^4.0.5 normalize-path: ^3.0.0 @@ -28292,12 +28356,13 @@ __metadata: postcss-value-parser: ^4.2.0 quick-lru: ^5.1.1 resolve: ^1.22.1 + sucrase: ^3.29.0 peerDependencies: postcss: ^8.0.9 bin: tailwind: lib/cli.js tailwindcss: lib/cli.js - checksum: 819446bf67acea1fc738f345d80f328b7bb6e6ef4b24070249a11219307045881cf97baed6258cbdcede7fa18886e9c9c41fd0fa087b3e987cf2948560a2f164 + checksum: 00a9c603064b15e57be96603112a9e6385b1d1dc229fc49e9267d7f1fd0588a91e07e413ab9422e54afd49fffe9667f317eb5a4e49c44353342128fa3dbb8b0c languageName: node linkType: hard @@ -28499,6 +28564,24 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + "throat@npm:^6.0.1": version: 6.0.2 resolution: "throat@npm:6.0.2" @@ -28836,6 +28919,13 @@ __metadata: languageName: node linkType: hard +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e + languageName: node + linkType: hard + "ts-invariant@npm:^0.10.3": version: 0.10.3 resolution: "ts-invariant@npm:0.10.3"