From 141298cbec9f515bc8ba0ff7f61eabf90d43a87d Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 13 Dec 2024 20:11:03 +0200 Subject: [PATCH 001/119] fix css --- src/components/Group/Group.tsx | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index 9f9966b..f447786 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -157,6 +157,7 @@ export const getPublishesFromAdmins = async (admins: string[], groupId) => { return dateB.getTime() - dateA.getTime(); }); + return sortedData[0]; }; interface GroupProps { @@ -242,6 +243,7 @@ export const getGroupMembers = async (groupNumber: number) => { return groupData; }; + export const decryptResource = async (data: string) => { try { return new Promise((res, rej) => { @@ -519,6 +521,8 @@ export const Group = ({ selectedDirectRef.current = selectedDirect; }, [selectedDirect]); + + const getUserSettings = async () => { try { return new Promise((res, rej) => { @@ -753,8 +757,9 @@ export const Group = ({ if ( secretKeyToPublish && secretKey && - lastFetchedSecretKey.current && - Date.now() - lastFetchedSecretKey.current < 1800000 + lastFetchedSecretKey.current + && + Date.now() - lastFetchedSecretKey.current < 600000 ) return secretKey; if (loadingGroupParam) { @@ -2505,7 +2510,7 @@ export const Group = ({ style={{ display: "flex", width: "100%", - height: "100$", + height: "100%", flexDirection: "column", alignItems: "flex-start", padding: "20px", From 64ffe028690c9aff50c03e12305aa0724f82a191 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 14 Dec 2024 01:55:37 +0200 Subject: [PATCH 002/119] fix encryption single extra data --- src/components/Chat/ChatDirect.tsx | 7 ++-- src/components/Chat/ChatGroup.tsx | 20 +++++++---- src/qdn/encryption/group-encryption.ts | 48 +++++++++++++++++++++++--- 3 files changed, 60 insertions(+), 15 deletions(-) diff --git a/src/components/Chat/ChatDirect.tsx b/src/components/Chat/ChatDirect.tsx index cb40066..9b3dcbb 100644 --- a/src/components/Chat/ChatDirect.tsx +++ b/src/components/Chat/ChatDirect.tsx @@ -363,7 +363,7 @@ useEffect(() => { const htmlContent = editorRef?.current.getHTML(); const stringified = JSON.stringify(htmlContent); const size = new Blob([stringified]).size; - setMessageSize(size + 100); + setMessageSize(size + 200); }; // Add a listener for the editorRef?.current's content updates @@ -646,12 +646,11 @@ useEffect(() => { )} - {messageSize > 750 && ( { )} + + { useEffect(() => { if (!editorRef?.current) return; - handleUpdateRef.current = throttle(() => { + handleUpdateRef.current = throttle(async () => { + try { const htmlContent = editorRef.current.getHTML(); - const size = new TextEncoder().encode(htmlContent).length; - setMessageSize(size + 100); + const message64 = await objectToBase64(JSON.stringify(htmlContent)) + const secretKeyObject = await getSecretKey(false, true) + const encryptSingle = await encryptChatMessage(message64, secretKeyObject) + setMessageSize((encryptSingle?.length || 0) + 200); + } catch (error) { + // calc size error + } }, 1200); const currentEditor = editorRef.current; @@ -822,13 +828,11 @@ const clearEditorContent = () => { - - - {messageSize > 750 && ( + {messageSize > 750 && ( { )} + + { +export const encryptSingle = async ({ data64, secretKeyObject, typeNumber = 2 }: any) => { // Find the highest key in the secretKeyObject const highestKey = Math.max(...Object.keys(secretKeyObject).filter(item => !isNaN(+item)).map(Number)); const highestKeyObject = secretKeyObject[highestKey]; @@ -188,7 +188,22 @@ export const encryptSingle = async ({ data64, secretKeyObject, typeNumber = 1 }: // Concatenate the highest key, type number, nonce, and encrypted data (new format) const highestKeyStr = highestKey.toString().padStart(10, '0'); // Fixed length of 10 digits - finalEncryptedData = btoa(highestKeyStr + typeNumberStr + nonceBase64 + encryptedDataBase64); + + const highestKeyBytes = new TextEncoder().encode(highestKeyStr.padStart(10, '0')); +const typeNumberBytes = new TextEncoder().encode(typeNumberStr.padStart(3, '0')); + +// Step 3: Concatenate all binary +const combinedBinary = new Uint8Array( + highestKeyBytes.length + typeNumberBytes.length + nonce.length + encryptedData.length +); + // finalEncryptedData = btoa(highestKeyStr) + btoa(typeNumberStr) + nonceBase64 + encryptedDataBase64; + combinedBinary.set(highestKeyBytes, 0); +combinedBinary.set(typeNumberBytes, highestKeyBytes.length); +combinedBinary.set(nonce, highestKeyBytes.length + typeNumberBytes.length); +combinedBinary.set(encryptedData, highestKeyBytes.length + typeNumberBytes.length + nonce.length); + +// Step 4: Base64 encode once + finalEncryptedData = uint8ArrayToBase64(combinedBinary); } return finalEncryptedData; @@ -214,10 +229,8 @@ export const decodeBase64ForUIChatMessages = (messages)=> { } return msgs } - - - export const decryptSingle = async ({ data64, secretKeyObject, skipDecodeBase64 }: any) => { +export const decryptSingle = async ({ data64, secretKeyObject, skipDecodeBase64 }: any) => { // First, decode the base64-encoded input (if skipDecodeBase64 is not set) const decodedData = skipDecodeBase64 ? data64 : atob(data64); @@ -249,6 +262,28 @@ export const decodeBase64ForUIChatMessages = (messages)=> { encryptedDataBase64 = decodeForNumber.slice(10); // The remaining part is the encrypted data } else { if (hasTypeNumber) { + // const typeNumberStr = new TextDecoder().decode(typeNumberBytes); + if(decodeForNumber.slice(10, 13) === '002'){ + const decodedBinary = base64ToUint8Array(decodedData); + const highestKeyBytes = decodedBinary.slice(0, 10); // if ASCII digits only + const highestKeyStr = new TextDecoder().decode(highestKeyBytes); + +const nonce = decodedBinary.slice(13, 13 + 24); +const encryptedData = decodedBinary.slice(13 + 24); +const highestKey = parseInt(highestKeyStr, 10); + +const messageKey = base64ToUint8Array(secretKeyObject[+highestKey].messageKey); +const decryptedBytes = nacl.secretbox.open(encryptedData, nonce, messageKey); + + // Check if decryption was successful + if (!decryptedBytes) { + throw new Error("Decryption failed"); + } + + // Convert the decrypted Uint8Array back to a Base64 string + return uint8ArrayToBase64(decryptedBytes); + + } // New format: Extract type number and nonce typeNumberStr = possibleTypeNumberStr; // Extract type number nonceBase64 = decodeForNumber.slice(13, 45); // Extract nonce (next 32 characters after type number) @@ -280,6 +315,9 @@ export const decodeBase64ForUIChatMessages = (messages)=> { // Convert the decrypted Uint8Array back to a Base64 string return uint8ArrayToBase64(decryptedData); }; + + + export const decryptGroupEncryptionWithSharingKey = async ({ data64EncryptedData, key }: any) => { From 1da9fb161e6ac8ebcb72a255b407deed636b4bac Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 14 Dec 2024 14:13:36 +0200 Subject: [PATCH 003/119] accept decline colors --- src/App-styles.ts | 41 +++++++++++++++++++++++++++++++++++++++++ src/App.tsx | 42 +++++++++++++++++++++++++++++++++--------- src/index.css | 3 ++- 3 files changed, 76 insertions(+), 10 deletions(-) diff --git a/src/App-styles.ts b/src/App-styles.ts index bf3a146..08773ea 100644 --- a/src/App-styles.ts +++ b/src/App-styles.ts @@ -136,6 +136,47 @@ border-radius: 5px; } } `; +interface CustomButtonProps { + bgColor?: string; + color?: string; +} +export const CustomButtonAccept = styled(Box)( + ({ bgColor, color }) => ({ + boxSizing: "border-box", + padding: "15px 20px", + gap: "10px", + border: "0.5px solid rgba(255, 255, 255, 0.5)", + filter: "drop-shadow(1px 4px 10.5px rgba(0,0,0,0.3))", + borderRadius: 5, + display: "inline-flex", + justifyContent: "center", + alignItems: "center", + width: "fit-content", + transition: "all 0.2s", + minWidth: 160, + cursor: "pointer", + fontWeight: 600, + fontFamily: "Inter", + textAlign: "center", + opacity: 0.7, + // Use the passed-in props or fallback defaults + backgroundColor: bgColor || "transparent", + color: color || "white", + + "&:hover": { + opacity: 1, + backgroundColor: bgColor + ? bgColor + : "rgba(41, 41, 43, 1)", // fallback hover bg + color: color || "white", + svg: { + path: { + fill: color || "white", + }, + }, + }, + }) +); export const CustomInput = styled(TextField)({ diff --git a/src/App.tsx b/src/App.tsx index 77d2585..3a7339c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -62,6 +62,7 @@ import { AuthenticatedContainerInnerLeft, AuthenticatedContainerInnerRight, CustomButton, + CustomButtonAccept, CustomInput, CustomLabel, TextItalic, @@ -318,7 +319,7 @@ function App() { useState(""); const [isMain, setIsMain] = useState(true); const isMainRef = useRef(false); - const [authenticatePassword, setAuthenticatePassword] = useState(""); + const [authenticatePassword, setAuthenticatePassword] = useState("1234567890"); const [sendqortState, setSendqortState] = useState(null); const [isLoading, setIsLoading] = useState(false); const [ @@ -2683,11 +2684,30 @@ function App() { - - @@ -2966,22 +2986,26 @@ function App() { gap: "14px", }} > - onOkQortalRequestExtension("accepted")} > accept - - + onCancelQortalRequestExtension()} > decline - + {sendPaymentError} diff --git a/src/index.css b/src/index.css index 7db06e7..a9946c7 100644 --- a/src/index.css +++ b/src/index.css @@ -35,7 +35,8 @@ --bg-2: #27282c; --bg-3: rgba(0, 0, 0, 0.1); --unread: #B14646; - --apps-circle: #1F2023 + --apps-circle: #1F2023; + --green: #5EB049; } body { From dc7e0db0d8bebf6694c7e5a77d6b8132b77c7fc7 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 14 Dec 2024 18:06:40 +0200 Subject: [PATCH 004/119] fix new message send stay bottom --- src/MessageQueueContext.tsx | 50 ++++++++++++++++++------------ src/components/Chat/ChatDirect.tsx | 6 ++-- src/components/Chat/ChatGroup.tsx | 6 ++-- src/components/Chat/ChatList.tsx | 3 +- 4 files changed, 37 insertions(+), 28 deletions(-) diff --git a/src/MessageQueueContext.tsx b/src/MessageQueueContext.tsx index 3727b03..7104520 100644 --- a/src/MessageQueueContext.tsx +++ b/src/MessageQueueContext.tsx @@ -92,21 +92,6 @@ export const MessageQueueProvider = ({ children }) => { // Remove the message from the queue after successful sending messageQueueRef.current.shift(); - // Remove the message from queueChats - setQueueChats((prev) => { - const updatedChats = { ...prev }; - if (updatedChats[groupDirectId]) { - updatedChats[groupDirectId] = updatedChats[groupDirectId].filter( - (item) => item.identifier !== identifier - ); - - // If no more chats for this group, delete the groupDirectId entry - if (updatedChats[groupDirectId].length === 0) { - delete updatedChats[groupDirectId]; - } - } - return updatedChats; - }); } catch (error) { console.error('Message sending failed', error); @@ -142,15 +127,25 @@ export const MessageQueueProvider = ({ children }) => { // Method to process with new messages and groupDirectId const processWithNewMessages = (newMessages, groupDirectId) => { + let updatedNewMessages = newMessages if (newMessages.length > 0) { - messageQueueRef.current = messageQueueRef.current.filter((msg) => { - return !newMessages.some(newMsg => newMsg?.specialId === msg?.specialId); - }); - // Remove corresponding entries in queueChats for the provided groupDirectId setQueueChats((prev) => { const updatedChats = { ...prev }; if (updatedChats[groupDirectId]) { + + updatedNewMessages = newMessages?.map((msg)=> { + const findTempMsg = updatedChats[groupDirectId]?.find((msg2)=> msg2?.message?.specialId === msg?.specialId) + if(findTempMsg){ + return { + ...msg, + tempSignature: findTempMsg?.signature + } + } + return msg + }) + + updatedChats[groupDirectId] = updatedChats[groupDirectId].filter((chat) => { return !newMessages.some(newMsg => newMsg?.specialId === chat?.message?.specialId); }); @@ -167,8 +162,23 @@ export const MessageQueueProvider = ({ children }) => { } return updatedChats; }); + } - + setTimeout(() => { + if(!messageQueueRef.current.find((msg) => msg?.groupDirectId === groupDirectId)){ + setQueueChats((prev) => { + const updatedChats = { ...prev }; + if (updatedChats[groupDirectId]) { + delete updatedChats[groupDirectId] + } + + return updatedChats + } + ) + } + }, 300); + + return updatedNewMessages }; return ( diff --git a/src/components/Chat/ChatDirect.tsx b/src/components/Chat/ChatDirect.tsx index 9b3dcbb..5e2014e 100644 --- a/src/components/Chat/ChatDirect.tsx +++ b/src/components/Chat/ChatDirect.tsx @@ -118,9 +118,9 @@ export const ChatDirect = ({ myAddress, isNewChat, selectedDirect, setSelectedDi data: encryptedMessages, involvingAddress: selectedDirect?.address, }) - .then((response) => { - if (!response?.error) { - processWithNewMessages(response, selectedDirect?.address); + .then((decryptResponse) => { + if (!decryptResponse?.error) { + const response = processWithNewMessages(decryptResponse, selectedDirect?.address); res(response); if (isInitiated) { diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index 4aed230..02523a9 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -193,9 +193,9 @@ const [messageSize, setMessageSize] = useState(0) const filterUIMessages = encryptedMessages.filter((item) => !isExtMsg(item.data)); const decodedUIMessages = decodeBase64ForUIChatMessages(filterUIMessages); - const combineUIAndExtensionMsgs = [...decodedUIMessages, ...response]; - processWithNewMessages( - combineUIAndExtensionMsgs.map((item) => ({ + const combineUIAndExtensionMsgsBefore = [...decodedUIMessages, ...response]; + const combineUIAndExtensionMsgs = processWithNewMessages( + combineUIAndExtensionMsgsBefore.map((item) => ({ ...item, ...(item?.decryptedData || {}), })), diff --git a/src/components/Chat/ChatList.tsx b/src/components/Chat/ChatList.tsx index 3cae591..67a05f7 100644 --- a/src/components/Chat/ChatList.tsx +++ b/src/components/Chat/ChatList.tsx @@ -39,11 +39,10 @@ export const ChatList = ({ const scrollingIntervalRef = useRef(null); const lastSeenUnreadMessageTimestamp = useRef(null); - // Initialize the virtualizer const rowVirtualizer = useVirtualizer({ count: messages.length, - getItemKey: (index) => messages[index].signature, + getItemKey: (index) => messages[index]?.tempSignature || messages[index].signature, getScrollElement: () => parentRef?.current, estimateSize: useCallback(() => 80, []), // Provide an estimated height of items, adjust this as needed overscan: 10, // Number of items to render outside the visible area to improve smoothness From b7ca08b00867fccf1c9abb94966532170fc0a1a4 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 14 Dec 2024 18:28:00 +0200 Subject: [PATCH 005/119] added 'all' category for qapps --- src/components/Apps/AppInfoSnippet.tsx | 6 ++- src/components/Apps/AppsCategoryDesktop.tsx | 12 ++++-- src/components/Apps/AppsLibraryDesktop.tsx | 43 ++++++++++++++++++--- 3 files changed, 50 insertions(+), 11 deletions(-) diff --git a/src/components/Apps/AppInfoSnippet.tsx b/src/components/Apps/AppInfoSnippet.tsx index 01a7083..f141222 100644 --- a/src/components/Apps/AppInfoSnippet.tsx +++ b/src/components/Apps/AppInfoSnippet.tsx @@ -22,7 +22,7 @@ import { useRecoilState, useSetRecoilState } from "recoil"; import { settingsLocalLastUpdatedAtom, sortablePinnedAppsAtom } from "../../atoms/global"; import { saveToLocalStorage } from "./AppsNavBar"; -export const AppInfoSnippet = ({ app, myName, isFromCategory }) => { +export const AppInfoSnippet = ({ app, myName, isFromCategory, parentStyles = {} }) => { const isInstalled = app?.status?.status === 'READY' const [sortablePinnedApps, setSortablePinnedApps] = useRecoilState(sortablePinnedAppsAtom); @@ -30,7 +30,9 @@ export const AppInfoSnippet = ({ app, myName, isFromCategory }) => { const isSelectedAppPinned = !!sortablePinnedApps?.find((item)=> item?.name === app?.name && item?.service === app?.service) const setSettingsLocalLastUpdated = useSetRecoilState(settingsLocalLastUpdatedAtom); return ( - + { + if(category?.id === 'all') return availableQapps return availableQapps.filter( (app) => app?.metadata?.category === category?.id ); @@ -133,6 +134,9 @@ export const AppsCategoryDesktop = ({ app={app} myName={myName} isFromCategory={true} + parentStyles={{ + padding: '0px 10px' + }} /> ); }; @@ -206,7 +210,7 @@ export const AppsCategoryDesktop = ({ diff --git a/src/components/Apps/AppsLibraryDesktop.tsx b/src/components/Apps/AppsLibraryDesktop.tsx index 9756d1b..aae46a5 100644 --- a/src/components/Apps/AppsLibraryDesktop.tsx +++ b/src/components/Apps/AppsLibraryDesktop.tsx @@ -24,7 +24,7 @@ import { PublishQAppCTARight, PublishQAppDotsBG, } from "./Apps-styles"; -import { Avatar, Box, ButtonBase, InputBase, styled } from "@mui/material"; +import { Avatar, Box, ButtonBase, InputBase, Typography, styled } from "@mui/material"; import { Add } from "@mui/icons-material"; import { MyContext, getBaseApiReact } from "../../App"; import LogoSelected from "../../assets/svgs/LogoSelected.svg"; @@ -145,6 +145,9 @@ export const AppsLibraryDesktop = ({ key={`${app?.service}-${app?.name}`} app={app} myName={myName} + parentStyles={{ + padding: '0px 10px' + }} /> ); }; @@ -261,7 +264,7 @@ export const AppsLibraryDesktop = ({ + ) : searchedList?.length === 0 && debouncedValue ? ( + + No results + ) : ( <> + { + executeEvent("selectedCategory", { + data: { + id: 'all', + name: 'All' + }, + }); + }} + > + + All + + {categories?.map((category) => { return ( Date: Sat, 14 Dec 2024 19:26:35 +0200 Subject: [PATCH 006/119] re-arrange acct creation --- src/App.tsx | 119 ++++++++++++++++++-- src/components/Apps/AppsCategoryDesktop.tsx | 9 +- src/components/Apps/AppsLibraryDesktop.tsx | 8 +- 3 files changed, 120 insertions(+), 16 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 3a7339c..353289d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -354,7 +354,7 @@ function App() { show: showInfo, message: messageInfo, } = useModal(); - + const { onCancel: onCancelQortalRequest, onOk: onOkQortalRequest, @@ -383,6 +383,9 @@ function App() { const [isOpenSendQortSuccess, setIsOpenSendQortSuccess] = useState(false); const [rootHeight, setRootHeight] = useState("100%"); const [isSettingsOpen, setIsSettingsOpen] = useState(false); + const [showSeed, setShowSeed] = useState(false) + const [creationStep, setCreationStep] = useState(1) + const qortalRequestCheckbox1Ref = useRef(null); useRetrieveDataLocalStorage(); useQortalGetSaveSettings(userInfo?.name); @@ -998,6 +1001,8 @@ function App() { setCountdown(null); setWalletToBeDownloaded(null); setWalletToBeDownloadedPassword(""); + setShowSeed(false) + setCreationStep(1) setExtstate("authenticated"); setIsOpenSendQort(false); setIsOpenSendQortSuccess(false); @@ -1023,6 +1028,9 @@ function App() { setCountdown(null); setWalletToBeDownloaded(null); setWalletToBeDownloadedPassword(""); + setShowSeed(false) + setCreationStep(1) + setWalletToBeDownloadedPasswordConfirm(""); setWalletToBeDownloadedError(""); setSendqortState(null); @@ -2397,6 +2405,7 @@ function App() { value={walletToBeDownloadedPassword} onChange={(e) => setWalletToBeDownloadedPassword(e.target.value) + } /> @@ -2442,7 +2451,15 @@ function App() { cursor: "pointer", }} onClick={() => { + if(creationStep === 2){ + setCreationStep(1) + return + } setExtstate("not-authenticated"); + setShowSeed(false) + setCreationStep(1) + setWalletToBeDownloadedPasswordConfirm('') + setWalletToBeDownloadedPassword('') }} src={Return} /> @@ -2474,33 +2491,110 @@ function App() { justifyContent: 'center', padding: '10px' }}> - Your seedphrase - Only shown once! Please copy and keep safe! + }}> + A ‘ { + setShowSeed(true) + }} style={{ + fontSize: '14px', + color: 'steelblue', + cursor: 'pointer' + }}>SEEDPHRASE ’ has been randomly generated in the background. - + + If you wish to VIEW THE SEEDPHRASE, click the word 'SEEDPHRASE' in this text. Seedphrases are used to generate the private key for your Qortal account. For security by default, seedphrases are NOT displayed unless specifically chosen. + + + Create your Qortal account by clicking NEXT below. + + + + { + setCreationStep(2) + }}> + Next + + +
+ +
+ + + + Your seedphrase + + + {generatorRef.current?.parsedString} - - Export Seedphrase + + + + + + + + + + + Wallet Password @@ -2530,6 +2624,7 @@ function App() { Create Account + {walletToBeDownloadedError} )} diff --git a/src/components/Apps/AppsCategoryDesktop.tsx b/src/components/Apps/AppsCategoryDesktop.tsx index 4c4e334..ab4fef1 100644 --- a/src/components/Apps/AppsCategoryDesktop.tsx +++ b/src/components/Apps/AppsCategoryDesktop.tsx @@ -109,8 +109,13 @@ export const AppsCategoryDesktop = ({ useEffect(() => { const handler = setTimeout(() => { setDebouncedValue(searchValue); + }, 350); - + setTimeout(() => { + virtuosoRef.current.scrollToIndex({ + index: 0 + }); + }, 500); // Cleanup timeout if searchValue changes before the timeout completes return () => { clearTimeout(handler); @@ -122,7 +127,7 @@ export const AppsCategoryDesktop = ({ const searchedList = useMemo(() => { if (!debouncedValue) return categoryList; return categoryList.filter((app) => - app.name.toLowerCase().includes(debouncedValue.toLowerCase()) + app.name.toLowerCase().includes(debouncedValue.toLowerCase()) || (app?.metadata?.title && app?.metadata?.title?.toLowerCase().includes(debouncedValue.toLowerCase())) ); }, [debouncedValue, categoryList]); diff --git a/src/components/Apps/AppsLibraryDesktop.tsx b/src/components/Apps/AppsLibraryDesktop.tsx index aae46a5..08bf50b 100644 --- a/src/components/Apps/AppsLibraryDesktop.tsx +++ b/src/components/Apps/AppsLibraryDesktop.tsx @@ -122,7 +122,11 @@ export const AppsLibraryDesktop = ({ const handler = setTimeout(() => { setDebouncedValue(searchValue); }, 350); - + setTimeout(() => { + virtuosoRef.current.scrollToIndex({ + index: 0 + }); + }, 500); // Cleanup timeout if searchValue changes before the timeout completes return () => { clearTimeout(handler); @@ -134,7 +138,7 @@ export const AppsLibraryDesktop = ({ const searchedList = useMemo(() => { if (!debouncedValue) return []; return availableQapps.filter((app) => - app.name.toLowerCase().includes(debouncedValue.toLowerCase()) + app.name.toLowerCase().includes(debouncedValue.toLowerCase()) || (app?.metadata?.title && app?.metadata?.title?.toLowerCase().includes(debouncedValue.toLowerCase())) ); }, [debouncedValue]); From 46e3d9bcaca1d0c28f36d732a9fc86167b6ddaec Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 14 Dec 2024 20:31:16 +0200 Subject: [PATCH 007/119] remove unused code group --- src/components/Group/Group.tsx | 498 ++------------------------------- 1 file changed, 22 insertions(+), 476 deletions(-) diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index f447786..d3d5b02 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -1,10 +1,7 @@ import { Avatar, Box, - Button, ButtonBase, - Grid, - IconButton, List, ListItem, ListItemAvatar, @@ -12,36 +9,27 @@ import { Typography, } from "@mui/material"; import React, { - useCallback, useContext, useEffect, useMemo, useRef, useState, } from "react"; -import SettingsIcon from "@mui/icons-material/Settings"; import { ChatGroup } from "../Chat/ChatGroup"; import { CreateCommonSecret } from "../Chat/CreateCommonSecret"; import { base64ToUint8Array } from "../../qdn/encryption/group-encryption"; import { uint8ArrayToObject } from "../../backgroundFunctions/encryption"; -import ChatIcon from "@mui/icons-material/Chat"; import CampaignIcon from "@mui/icons-material/Campaign"; import { AddGroup } from "./AddGroup"; -import MarkUnreadChatAltIcon from "@mui/icons-material/MarkUnreadChatAlt"; import AddCircleOutlineIcon from "@mui/icons-material/AddCircleOutline"; import CreateIcon from "@mui/icons-material/Create"; -import RefreshIcon from "@mui/icons-material/Refresh"; -import AnnouncementsIcon from "@mui/icons-material/Notifications"; -import GroupIcon from "@mui/icons-material/Group"; -import PersonIcon from "@mui/icons-material/Person"; + import { AuthenticatedContainerInnerRight, CustomButton, } from "../../App-styles"; -import ForumIcon from "@mui/icons-material/Forum"; import { Spacer } from "../../common/Spacer"; -import PeopleIcon from "@mui/icons-material/People"; import { ManageMembers } from "./ManageMembers"; import MarkChatUnreadIcon from "@mui/icons-material/MarkChatUnread"; import { @@ -58,38 +46,26 @@ import { CustomizedSnackbars } from "../Snackbar/Snackbar"; import { LoadingButton } from "@mui/lab"; import { LoadingSnackbar } from "../Snackbar/LoadingSnackbar"; import { GroupAnnouncements } from "../Chat/GroupAnnouncements"; -import HomeIcon from "@mui/icons-material/Home"; -import CloseIcon from "@mui/icons-material/Close"; -import { ThingsToDoInitial } from "./ThingsToDoInitial"; -import { GroupJoinRequests } from "./GroupJoinRequests"; + + import { GroupForum } from "../Chat/GroupForum"; -import { GroupInvites } from "./GroupInvites"; import { executeEvent, subscribeToEvent, unsubscribeFromEvent, } from "../../utils/events"; -import { ListOfThreadPostsWatched } from "./ListOfThreadPostsWatched"; import { RequestQueueWithPromise } from "../../utils/queue/queue"; import { WebSocketActive } from "./WebsocketActive"; -import { flushSync } from "react-dom"; import { useMessageQueue } from "../../MessageQueueContext"; -import { DrawerComponent } from "../Drawer/Drawer"; import { isExtMsg, isUpdateMsg } from "../../background"; import { ContextMenu } from "../ContextMenu"; -import { MobileFooter } from "../Mobile/MobileFooter"; -import Header from "../Mobile/MobileHeader"; -import { Home } from "./Home"; -import { GroupMenu } from "./GroupMenu"; -import { getRootHeight } from "../../utils/mobile/mobileUtils"; + import { ReturnIcon } from "../../assets/Icons/ReturnIcon"; import { ExitIcon } from "../../assets/Icons/ExitIcon"; import { HomeDesktop } from "./HomeDesktop"; -import { DesktopFooter, IconWrapper } from "../Desktop/DesktopFooter"; +import { IconWrapper } from "../Desktop/DesktopFooter"; import { DesktopHeader } from "../Desktop/DesktopHeader"; -import { Apps } from "../Apps/Apps"; -import { AppsNavBar } from "../Apps/AppsNavBar"; import { AppsDesktop } from "../Apps/AppsDesktop"; import { AppsDevMode } from "../Apps/AppsDevMode"; import { DesktopSideBar } from "../DesktopSideBar"; @@ -101,36 +77,11 @@ import { useSetRecoilState } from "recoil"; import { selectedGroupIdAtom } from "../../atoms/global"; import { sortArrayByTimestampAndGroupName } from "../../utils/time"; -// let touchStartY = 0; -// let disablePullToRefresh = false; -// // Detect when the user touches the screen -// window.addEventListener('touchstart', function(event) { -// if (event.touches.length !== 1) return; // Ignore multi-touch events -// touchStartY = event.touches[0].clientY; -// disablePullToRefresh = window.scrollY === 0; // Only disable if at the top -// }); -// // Detect when the user moves their finger on the screen -// window.addEventListener('touchmove', function(event) { -// let touchY = event.touches[0].clientY; - -// // If pulling down from the top of the page, prevent the default behavior -// if (disablePullToRefresh && touchY > touchStartY) { -// event.preventDefault(); -// } -// }); - -const isWithinLast15Minutes = (timestamp) => { - const now = Date.now(); // Current timestamp in milliseconds - const fifteenMinutes = 15 * 60 * 1000; // 15 minutes in milliseconds - - return now - timestamp < fifteenMinutes; -}; export const getPublishesFromAdmins = async (admins: string[], groupId) => { - // const validApi = await findUsableApi(); const queryString = admins.map((name) => `name=${name}`).join("&"); const url = `${getBaseApiReact()}${getArbitraryEndpointReact()}?mode=ALL&service=DOCUMENT_PRIVATE&identifier=symmetric-qchat-group-${ groupId @@ -163,7 +114,6 @@ export const getPublishesFromAdmins = async (admins: string[], groupId) => { interface GroupProps { myAddress: string; isFocused: boolean; - isMain: boolean; userInfo: any; balance: number; } @@ -331,16 +281,7 @@ export const getGroupAdmins = async (groupNumber: number) => { let members: any = []; let membersAddresses = []; let both = []; - // if (groupData && Array.isArray(groupData?.members)) { - // for (const member of groupData.members) { - // if (member.member) { - // const name = await getNameInfo(member.member); - // if (name) { - // members.push(name); - // } - // } - // } - // } + const getMemNames = groupData?.members?.map(async (member) => { if (member?.member) { @@ -386,17 +327,9 @@ export const getNames = async (listOfMembers) => { return members; }; export const getNamesForAdmins = async (admins) => { - // const validApi = await findUsableApi(); let members: any = []; - // if (admins && Array.isArray(admins)) { - // for (const admin of admins) { - // const name = await getNameInfo(admin); - // if (name) { - // members.push({ address: admin, name }); - // } - // } - // } + const getMemNames = admins?.map(async (admin) => { if (admin) { const name = await requestQueueAdminMemberNames.enqueue(() => { @@ -417,12 +350,9 @@ export const getNamesForAdmins = async (admins) => { export const Group = ({ myAddress, isFocused, - isMain, userInfo, balance, - isOpenDrawerProfile, setIsOpenDrawerProfile, - logoutFunc, setDesktopViewMode, desktopViewMode }: GroupProps) => { @@ -450,7 +380,7 @@ export const Group = ({ const [openAddGroup, setOpenAddGroup] = useState(false); const [isInitialGroups, setIsInitialGroups] = useState(false); const [openManageMembers, setOpenManageMembers] = useState(false); - const { setMemberGroups, memberGroups, rootHeight } = useContext(MyContext); + const { setMemberGroups, rootHeight } = useContext(MyContext); const lastGroupNotification = useRef(null); const [timestampEnterData, setTimestampEnterData] = useState({}); const [chatMode, setChatMode] = useState("groups"); @@ -570,28 +500,7 @@ export const Group = ({ }); } catch (error) {} }; - const getGroupDataSingle = async (groupId) => { - try { - return new Promise((res, rej) => { - window.sendMessage("getGroupDataSingle", { - groupId, - }) - .then((response) => { - if (!response?.error) { - res(response); - return; - } - rej(response.error); - }) - .catch((error) => { - rej(error.message || "An error occurred"); - }); - - }); - } catch (error) { - return {}; - } - }; + const refreshHomeDataFunc = () => { setGroupSection("default"); setTimeout(() => { @@ -633,43 +542,8 @@ export const Group = ({ } catch (error) {} }; - const checkGroupList = React.useCallback(async (address) => { - try { - const url = `${getBaseApiReact()}/chat/active/${address}`; - const response = await fetch(url, { - method: "GET", - headers: { - "Content-Type": "application/json", - }, - }); - const responseData = await response.json(); - if (!Array.isArray(responseData?.groups)) return; - const filterOutGeneral = responseData.groups?.filter( - (item) => item?.groupId !== 0 - ); - const sortedGroups = filterOutGeneral.sort((a, b) => { - // If a has no timestamp, move it down - if (!a.timestamp) return 1; - // If b has no timestamp, move it up - if (!b.timestamp) return -1; - // Otherwise, sort by timestamp in descending order (most recent first) - return b.timestamp - a.timestamp; - }); - setGroups(sortedGroups); - setMemberGroups(sortedGroups); - } catch (error) { - } finally { - } - }, []); - // const checkGroupListFunc = useCallback((myAddress) => { - // let isCalling = false; - // checkGroupInterval.current = setInterval(async () => { - // if (isCalling) return; - // isCalling = true; - // const res = await checkGroupList(myAddress); - // isCalling = false; - // }, 120000); - // }, []); + + const directChatHasUnread = useMemo(() => { let hasUnread = false; @@ -721,15 +595,7 @@ export const Group = ({ return hasUnread; }, [groupAnnouncements, groups]); - // useEffect(() => { - // if (!myAddress) return; - // checkGroupListFunc(myAddress); - // return () => { - // if (checkGroupInterval?.current) { - // clearInterval(checkGroupInterval.current); - // } - // }; - // }, [checkGroupListFunc, myAddress]); + const getSecretKey = async ( @@ -738,22 +604,10 @@ export const Group = ({ ) => { try { setIsLoadingGroupMessage("Locating encryption keys"); - // setGroupDataLastSet(null) pauseAllQueues(); let dataFromStorage; let publishFromStorage; let adminsFromStorage; - // const groupData = await getGroupDataSingle(selectedGroup?.groupId); - // if ( - // groupData?.secretKeyData && - // Date.now() - groupData?.timestampLastSet < 3600000 - // ) { - // dataFromStorage = groupData.secretKeyData; - // publishFromStorage = groupData.secretKeyResource; - // adminsFromStorage = groupData.admins; - // // setGroupDataLastSet(groupData.timestampLastSet) - // } - if ( secretKeyToPublish && secretKey && @@ -844,9 +698,6 @@ export const Group = ({ } finally { setIsLoadingGroup(false); setIsLoadingGroupMessage(""); - if (!secretKeyToPublish) { - // await getAdmins(selectedGroup?.groupId); - } resumeAllQueues(); } }; @@ -864,14 +715,7 @@ export const Group = ({ - const getAdmins = async (groupId) => { - try { - const res = await getGroupAdminsAddress(groupId); - setAdmins(res); - const adminsWithNames = await getNamesForAdmins(res); - setAdminsWithNames(adminsWithNames); - } catch (error) {} - }; + const getCountNewMesg = async (groupId, after)=> { try { @@ -1133,9 +977,7 @@ export const Group = ({ } else { setMobileViewModeKeepOpen("messaging"); } - // setChatMode("directs"); setSelectedDirect(null); - // setSelectedGroup(null); setNewChat(false); @@ -1171,7 +1013,6 @@ export const Group = ({ setMobileViewModeKeepOpen("messaging"); } setSelectedDirect(null); - // setSelectedGroup(null); setNewChat(false); @@ -1485,11 +1326,7 @@ export const Group = ({ if (findGroup?.groupId === selectedGroup?.groupId) { setGroupSection("forum"); setDefaultThread(data); - // setTimeout(() => { - // executeEvent("setThreadByEvent", { - // data: data - // }); - // }, 400); + return; } if (findGroup) { @@ -1541,31 +1378,13 @@ export const Group = ({ } setDesktopViewMode('home') - // setGroupSection("default"); - // clearAllQueues(); + await new Promise((res) => { setTimeout(() => { res(null); }, 200); }); - // setGroupSection("home"); - // setSelectedGroup(null); - // setNewChat(false); - // setSelectedDirect(null); - // setSecretKey(null); - // setGroupOwner(null) - // lastFetchedSecretKey.current = null; - // initiatedGetMembers.current = false; - // setSecretKeyPublishDate(null); - // setAdmins([]); - // setSecretKeyDetails(null); - // setAdminsWithNames([]); - // setMembers([]); - // setMemberCountFromSecretKeyData(null); - // setTriedToFetchSecretKey(false); - // setFirstSecretKeyInCreation(false); - // setIsOpenSideViewDirects(false) - // setIsOpenSideViewGroups(false) + }; const goToAnnouncements = async () => { @@ -1701,54 +1520,6 @@ export const Group = ({ )} - {isMobile && ( - - - - - - - - { - setMobileViewModeKeepOpen('') - }} - > - - - - - - )}
{directs.map((direct: any) => ( @@ -1771,15 +1539,9 @@ export const Group = ({ dense={true} > - // - // - // } onClick={() => { setSelectedDirect(null); setNewChat(false); - // setSelectedGroup(null); setIsOpenDrawer(false); window.sendMessage("addTimestampEnterChat", { timestamp: Date.now(), @@ -1820,7 +1582,6 @@ export const Group = ({ color: "white", }} alt={direct?.name || direct?.address} - // src={`${getBaseApiReact()}/arbitrary/THUMBNAIL/${groupOwner?.name}/qortal_group_avatar_${group.groupId}?async=true`} > {(direct?.name || direct?.address)?.charAt(0)} @@ -1881,7 +1642,6 @@ export const Group = ({ onClick={() => { setNewChat(true); setSelectedDirect(null); - // setSelectedGroup(null); setIsOpenDrawer(false); }} > @@ -1993,11 +1753,6 @@ export const Group = ({ dense={true} > - // - // - // } onClick={() => { setMobileViewMode("group"); setDesktopSideView('groups') @@ -2018,28 +1773,12 @@ export const Group = ({ setMemberCountFromSecretKeyData(null); setHideCommonKeyPopup(false); setFirstSecretKeyInCreation(false); - // setGroupSection("announcement"); setGroupSection("chat"); setIsOpenDrawer(false); setTimeout(() => { setSelectedGroup(group); - // getTimestampEnterChat(); }, 200); - - // window.sendMessage("addTimestampEnterChat", { - // timestamp: Date.now(), - // groupId: group.groupId, - // }).catch((error) => { - // console.error("Failed to add timestamp:", error.message || "An error occurred"); - // }); - - - // setTimeout(() => { - // getTimestampEnterChat(); - // }, 200); - - }} sx={{ display: "flex", @@ -2072,7 +1811,6 @@ export const Group = ({ color: "white", }} alt={group?.groupName} - // src={`${getBaseApiReact()}/arbitrary/THUMBNAIL/${groupOwner?.name}/qortal_group_avatar_${group.groupId}?async=true`} > {group.groupName?.charAt(0)} @@ -2158,7 +1896,6 @@ export const Group = ({ onClick={() => { setNewChat(true); setSelectedDirect(null); - // setSelectedGroup(null); setIsOpenDrawer(false); }} > @@ -2188,26 +1925,7 @@ export const Group = ({ setInfo={setInfoSnack} /> - {isMobile && ( -
- )} +
- {mobileViewMode === "groups" && !mobileViewModeKeepOpen && renderGroups()} - {mobileViewModeKeepOpen === "messaging" && renderDirects()} {newChat && ( <> {isMobile && ( @@ -2358,7 +2074,7 @@ export const Group = ({ )} - {mobileViewMode !== 'groups' && ( +
)} - {isMobile && ( - - - - { - setMobileViewMode("groups"); - }} - > - - - - - {selectedGroup?.groupName} - - - {/* */} - - - - )} + - {isMobile && mobileViewMode === "group" && ( - <> - - - )} + )}
- )} + {selectedDirect && !newChat && ( <> @@ -2701,62 +2351,7 @@ export const Group = ({ )} - {/* {!isMobile && groupSection === "home" && ( - - )} */} - {isMobile && mobileViewMode === "home" && ( - - )} - {isMobile && ( - - )} + {!isMobile && (
- - {(isMobile && mobileViewMode === "home" || (isMobile && mobileViewMode === "apps" && appsMode === 'home')) && !mobileViewModeKeepOpen && ( - <> -
- {/* - {renderGroups()} - */} - {isMobile && ( - - )} - - )} - {(isMobile && mobileViewMode === "apps" && appsMode !== 'home') && !mobileViewModeKeepOpen && ( - <> - - - )} ); }; From 50955941e42844b64d61d3248d6e2de9f079c8fb Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 14 Dec 2024 23:24:34 +0200 Subject: [PATCH 008/119] fix reaction- decryption --- src/qdn/encryption/group-encryption.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qdn/encryption/group-encryption.ts b/src/qdn/encryption/group-encryption.ts index eb83e1e..632252b 100644 --- a/src/qdn/encryption/group-encryption.ts +++ b/src/qdn/encryption/group-encryption.ts @@ -263,7 +263,7 @@ export const decryptSingle = async ({ data64, secretKeyObject, skipDecodeBase64 } else { if (hasTypeNumber) { // const typeNumberStr = new TextDecoder().decode(typeNumberBytes); - if(decodeForNumber.slice(10, 13) === '002'){ + if(decodeForNumber.slice(10, 13) !== '001'){ const decodedBinary = base64ToUint8Array(decodedData); const highestKeyBytes = decodedBinary.slice(0, 10); // if ASCII digits only const highestKeyStr = new TextDecoder().decode(highestKeyBytes); From 4cafd57abeab63c12a27be0d0dcef30d7dffce97 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 15 Dec 2024 08:05:11 +0200 Subject: [PATCH 009/119] chat portion of unencrypted open groups --- src/background.ts | 6 +- src/components/Chat/ChatGroup.tsx | 55 ++++-- src/components/Chat/ChatList.tsx | 14 +- src/components/Chat/ChatOptions.tsx | 224 ++++++++++++++--------- src/components/Chat/MessageDisplay.tsx | 2 +- src/components/Chat/MessageItem.tsx | 12 +- src/components/Chat/styles.css | 2 +- src/components/Desktop/DesktopHeader.tsx | 20 +- src/components/Group/Group.tsx | 139 +++++++++++--- src/qdn/encryption/group-encryption.ts | 4 +- 10 files changed, 335 insertions(+), 143 deletions(-) diff --git a/src/background.ts b/src/background.ts index 27ad8cc..fa786b9 100644 --- a/src/background.ts +++ b/src/background.ts @@ -664,8 +664,7 @@ const handleNotification = async (groups) => { const data = groups.filter( (group) => group?.sender !== address && - !mutedGroups.includes(group.groupId) && - !isUpdateMsg(group?.data) + !mutedGroups.includes(group.groupId) ); const dataWithUpdates = groups.filter( (group) => group?.sender !== address && !mutedGroups.includes(group.groupId) @@ -716,8 +715,7 @@ const handleNotification = async (groups) => { Date.now() - lastGroupNotification >= 120000 ) { if ( - !newestLatestTimestamp?.data || - !isExtMsg(newestLatestTimestamp?.data) + !newestLatestTimestamp?.data ) return; diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index 02523a9..4324913 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -27,7 +27,7 @@ import { throttle } from 'lodash' const uid = new ShortUniqueId({ length: 5 }); -export const ChatGroup = ({selectedGroup, secretKey, setSecretKey, getSecretKey, myAddress, handleNewEncryptionNotification, hide, handleSecretKeyCreationInProgress, triedToFetchSecretKey, myName, balance, getTimestampEnterChatParent, hideView}) => { +export const ChatGroup = ({selectedGroup, secretKey, setSecretKey, getSecretKey, myAddress, handleNewEncryptionNotification, hide, handleSecretKeyCreationInProgress, triedToFetchSecretKey, myName, balance, getTimestampEnterChatParent, hideView, isPrivate}) => { const [messages, setMessages] = useState([]) const [chatReferences, setChatReferences] = useState({}) const [isSending, setIsSending] = useState(false) @@ -223,7 +223,7 @@ const [messageSize, setMessageSize] = useState(0) setChatReferences((prev) => { const organizedChatReferences = { ...prev }; combineUIAndExtensionMsgs - .filter((rawItem) => rawItem && rawItem.chatReference && (rawItem.decryptedData?.type === "reaction" || rawItem.decryptedData?.type === "edit")) + .filter((rawItem) => rawItem && rawItem.chatReference && (rawItem.decryptedData?.type === "reaction" || rawItem.decryptedData?.type === "edit" || rawItem?.type === "edit" || rawItem?.type === "reaction")) .forEach((item) => { try { if(item.decryptedData?.type === "edit"){ @@ -231,11 +231,16 @@ const [messageSize, setMessageSize] = useState(0) ...(organizedChatReferences[item.chatReference] || {}), edit: item.decryptedData, }; + } else if(item?.type === "edit"){ + organizedChatReferences[item.chatReference] = { + ...(organizedChatReferences[item.chatReference] || {}), + edit: item, + }; } else { - const content = item.decryptedData?.content; + const content = item?.content || item.decryptedData?.content; const sender = item.sender; const newTimestamp = item.timestamp; - const contentState = item.decryptedData?.contentState; + const contentState = item?.contentState || item.decryptedData?.contentState; if (!content || typeof content !== "string" || !sender || typeof sender !== "string" || !newTimestamp) { console.warn("Invalid content, sender, or timestamp in reaction data", item); @@ -306,7 +311,7 @@ const [messageSize, setMessageSize] = useState(0) const organizedChatReferences = { ...prev }; combineUIAndExtensionMsgs - .filter((rawItem) => rawItem && rawItem.chatReference && (rawItem.decryptedData?.type === "reaction" || rawItem.decryptedData?.type === "edit")) + .filter((rawItem) => rawItem && rawItem.chatReference && (rawItem.decryptedData?.type === "reaction" || rawItem.decryptedData?.type === "edit" || rawItem?.type === "edit" || rawItem?.type === "reaction")) .forEach((item) => { try { if(item.decryptedData?.type === "edit"){ @@ -314,11 +319,16 @@ const [messageSize, setMessageSize] = useState(0) ...(organizedChatReferences[item.chatReference] || {}), edit: item.decryptedData, }; + } else if(item?.type === "edit"){ + organizedChatReferences[item.chatReference] = { + ...(organizedChatReferences[item.chatReference] || {}), + edit: item, + }; } else { - const content = item.decryptedData?.content; + const content = item?.content || item.decryptedData?.content; const sender = item.sender; const newTimestamp = item.timestamp; - const contentState = item.decryptedData?.contentState; + const contentState = item?.contentState || item.decryptedData?.contentState; if (!content || typeof content !== "string" || !sender || typeof sender !== "string" || !newTimestamp) { console.warn("Invalid content, sender, or timestamp in reaction data", item); @@ -453,10 +463,11 @@ const [messageSize, setMessageSize] = useState(0) setIsLoading(true) initWebsocketMessageGroup() } - }, [triedToFetchSecretKey, secretKey]) + }, [triedToFetchSecretKey, secretKey, isPrivate]) useEffect(()=> { - if(!secretKey || hasInitializedWebsocket.current) return + if(isPrivate === null) return + if(isPrivate === false || !secretKey || hasInitializedWebsocket.current) return forceCloseWebSocket() setMessages([]) setIsLoading(true) @@ -466,7 +477,7 @@ const [messageSize, setMessageSize] = useState(0) }, 6000); initWebsocketMessageGroup() hasInitializedWebsocket.current = true - }, [secretKey]) + }, [secretKey, isPrivate]) useEffect(()=> { @@ -551,6 +562,7 @@ const clearEditorContent = () => { const sendMessage = async ()=> { try { + if(isPrivate === null) throw new Error('Unable to determine if group is private') if(isSending) return if(+balance < 4) throw new Error('You need at least 4 QORT to send a message') pauseAllQueues() @@ -558,8 +570,10 @@ const clearEditorContent = () => { const htmlContent = editorRef.current.getHTML(); if(!htmlContent?.trim() || htmlContent?.trim() === '

') return + + setIsSending(true) - const message = htmlContent + const message = isPrivate === false ? editorRef.current.getJSON() : htmlContent const secretKeyObject = await getSecretKey(false, true) let repliedTo = replyMessage?.signature @@ -569,19 +583,24 @@ const clearEditorContent = () => { } let chatReference = onEditMessage?.signature + const publicData = isPrivate ? {} : { + isEdited : chatReference ? true : false, + } const otherData = { repliedTo, ...(onEditMessage?.decryptedData || {}), type: chatReference ? 'edit' : '', specialId: uid.rnd(), + ...publicData } const objectMessage = { ...(otherData || {}), - message + [isPrivate ? 'message' : 'messageText']: message, + version: 3 } const message64: any = await objectToBase64(objectMessage) - const encryptSingle = await encryptChatMessage(message64, secretKeyObject) + const encryptSingle = isPrivate === false ? JSON.stringify(objectMessage) : await encryptChatMessage(message64, secretKeyObject) // const res = await sendChatGroup({groupId: selectedGroup,messageText: encryptSingle}) const sendMessageFunc = async () => { @@ -591,7 +610,7 @@ const clearEditorContent = () => { // Add the function to the queue const messageObj = { message: { - text: message, + text: htmlContent, timestamp: Date.now(), senderName: myName, sender: myAddress, @@ -668,7 +687,7 @@ const clearEditorContent = () => { const onEdit = useCallback((message)=> { setOnEditMessage(message) setReplyMessage(null) - editorRef.current.chain().focus().setContent(message?.text).run(); + editorRef.current.chain().focus().setContent(message?.messageText || message?.text).run(); }, []) const handleReaction = useCallback(async (reaction, chatMessage, reactionState = true)=> { @@ -696,7 +715,7 @@ const clearEditorContent = () => { } const message64: any = await objectToBase64(objectMessage) const reactiontypeNumber = RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS - const encryptSingle = await encryptChatMessage(message64, secretKeyObject, reactiontypeNumber) + const encryptSingle = isPrivate === false ? JSON.stringify(objectMessage) : await encryptChatMessage(message64, secretKeyObject, reactiontypeNumber) // const res = await sendChatGroup({groupId: selectedGroup,messageText: encryptSingle}) const sendMessageFunc = async () => { @@ -752,9 +771,9 @@ const clearEditorContent = () => { left: hide && '-100000px', }}> - + - {!!secretKey && ( + {(!!secretKey || isPrivate === false) && (
{ const parentRef = useRef(); const [messages, setMessages] = useState(initialMessages); const [showScrollButton, setShowScrollButton] = useState(false); const [showScrollDownButton, setShowScrollDownButton] = useState(false); - const hasLoadedInitialRef = useRef(false); const scrollingIntervalRef = useRef(null); const lastSeenUnreadMessageTimestamp = useRef(null); @@ -272,7 +272,10 @@ export const ChatList = ({ message.text = chatReferences[message.signature]?.edit?.message; message.isEdit = true } - + if (chatReferences[message.signature]?.edit?.messageText && message?.messageText) { + message.messageText = chatReferences[message.signature]?.edit?.messageText; + message.isEdit = true + } } @@ -315,7 +318,6 @@ export const ChatList = ({ ); } - return (
@@ -408,7 +411,7 @@ export const ChatList = ({ )}
- {enableMentions && hasSecretKey && ( + {enableMentions && (hasSecretKey || isPrivate === false) && ( )} diff --git a/src/components/Chat/ChatOptions.tsx b/src/components/Chat/ChatOptions.tsx index 6791d68..87f3329 100644 --- a/src/components/Chat/ChatOptions.tsx +++ b/src/components/Chat/ChatOptions.tsx @@ -13,6 +13,10 @@ import { Spacer } from "../../common/Spacer"; import AlternateEmailIcon from "@mui/icons-material/AlternateEmail"; import CloseIcon from "@mui/icons-material/Close"; import InsertLinkIcon from '@mui/icons-material/InsertLink'; +import Highlight from "@tiptap/extension-highlight"; +import Mention from "@tiptap/extension-mention"; +import StarterKit from "@tiptap/starter-kit"; +import Underline from "@tiptap/extension-underline"; import { AppsSearchContainer, AppsSearchLeft, @@ -32,6 +36,8 @@ import { useVirtualizer } from "@tanstack/react-virtual"; import { formatTimestamp } from "../../utils/time"; import { ContextMenuMentions } from "../ContextMenuMentions"; import { convert } from 'html-to-text'; +import { generateHTML } from "@tiptap/react"; +import ErrorBoundary from "../../common/ErrorBoundary"; const extractTextFromHTML = (htmlString = '') => { return convert(htmlString, { @@ -43,7 +49,7 @@ const cache = new CellMeasurerCache({ defaultHeight: 50, }); -export const ChatOptions = ({ messages, goToMessage, members, myName, selectedGroup, openQManager }) => { +export const ChatOptions = ({ messages : untransformedMessages, goToMessage, members, myName, selectedGroup, openQManager, isPrivate }) => { const [mode, setMode] = useState("default"); const [searchValue, setSearchValue] = useState(""); const [selectedMember, setSelectedMember] = useState(0); @@ -52,7 +58,27 @@ export const ChatOptions = ({ messages, goToMessage, members, myName, selectedGr const parentRefMentions = useRef(); const [lastMentionTimestamp, setLastMentionTimestamp] = useState(null) const [debouncedValue, setDebouncedValue] = useState(""); // Debounced value - + const messages = useMemo(()=> { + return untransformedMessages?.map((item)=> { + if(item?.messageText){ + let transformedMessage = item?.messageText + try { + transformedMessage = generateHTML(item?.messageText, [ + StarterKit, + Underline, + Highlight, + Mention + ]) + return { + ...item, + messageText: transformedMessage + } + } catch (error) { + // error + } + } else return item + }) + }, [untransformedMessages]) const getTimestampMention = async () => { try { return new Promise((res, rej) => { @@ -124,7 +150,7 @@ export const ChatOptions = ({ messages, goToMessage, members, myName, selectedGr .filter( (message) => message?.senderName === selectedMember && - extractTextFromHTML(message?.decryptedData?.message)?.includes( + extractTextFromHTML(isPrivate ? message?.messageText : message?.decryptedData?.message)?.includes( debouncedValue.toLowerCase() ) ) @@ -132,20 +158,27 @@ export const ChatOptions = ({ messages, goToMessage, members, myName, selectedGr } return messages .filter((message) => - extractTextFromHTML(message?.decryptedData?.message)?.includes(debouncedValue.toLowerCase()) + extractTextFromHTML(isPrivate === false ? message?.messageText : message?.decryptedData?.message)?.includes(debouncedValue.toLowerCase()) ) ?.sort((a, b) => b?.timestamp - a?.timestamp); - }, [debouncedValue, messages, selectedMember]); + }, [debouncedValue, messages, selectedMember, isPrivate]); const mentionList = useMemo(() => { if(!messages || messages.length === 0 || !myName) return [] - + if(isPrivate === false){ + return messages + .filter((message) => + extractTextFromHTML(message?.messageText)?.includes(`@${myName}`) + ) + ?.sort((a, b) => b?.timestamp - a?.timestamp); + + } return messages .filter((message) => extractTextFromHTML(message?.decryptedData?.message)?.includes(`@${myName}`) ) ?.sort((a, b) => b?.timestamp - a?.timestamp); - }, [messages, myName]); + }, [messages, myName, isPrivate]); const rowVirtualizer = useVirtualizer({ count: searchedList.length, @@ -291,7 +324,8 @@ export const ChatOptions = ({ messages, goToMessage, members, myName, selectedGr gap: "5px", }} > - + {/* - + */}
); })} @@ -544,6 +578,7 @@ export const ChatOptions = ({ messages, goToMessage, members, myName, selectedGr const index = virtualRow.index; let message = searchedList[index]; return ( +
- - - - - {message?.senderName?.charAt(0)} - - - {message?.senderName} - - - - - {formatTimestamp(message.timestamp)} - { - const findMsgIndex = messages.findIndex( - (item) => - item?.signature === message?.signature - ); - if (findMsgIndex !== -1) { - goToMessage(findMsgIndex); - } - }} - > -

" - } - /> -
-
+ + Error loading content: Invalid Data + + } + > + +
+ ); })}
@@ -705,3 +677,91 @@ export const ChatOptions = ({ messages, goToMessage, members, myName, selectedGr ); }; + + +const ShowMessage = ({message, goToMessage, messages})=> { + + return ( + + + + + {message?.senderName?.charAt(0)} + + + {message?.senderName} + + + + + {formatTimestamp(message.timestamp)} + { + const findMsgIndex = messages.findIndex( + (item) => + item?.signature === message?.signature + ); + if (findMsgIndex !== -1) { + goToMessage(findMsgIndex); + } + }} + > + {message?.messageText && ( + + )} + {message?.decryptedData?.message && ( +

" + } + /> + )} + +
+
+ ) +} \ No newline at end of file diff --git a/src/components/Chat/MessageDisplay.tsx b/src/components/Chat/MessageDisplay.tsx index edda7d8..916c7d4 100644 --- a/src/components/Chat/MessageDisplay.tsx +++ b/src/components/Chat/MessageDisplay.tsx @@ -106,7 +106,7 @@ export const MessageDisplay = ({ htmlContent, isReply }) => { } }; - const embedLink = htmlContent.match(/qortal:\/\/use-embed\/[^\s<>]+/); + const embedLink = htmlContent?.match(/qortal:\/\/use-embed\/[^\s<>]+/); let embedData = null; diff --git a/src/components/Chat/MessageItem.tsx b/src/components/Chat/MessageItem.tsx index bd2d86c..a088c0a 100644 --- a/src/components/Chat/MessageItem.tsx +++ b/src/components/Chat/MessageItem.tsx @@ -8,6 +8,7 @@ import { getBaseApi } from "../../background"; import { getBaseApiReact } from "../../App"; import { generateHTML } from "@tiptap/react"; import Highlight from "@tiptap/extension-highlight"; +import Mention from "@tiptap/extension-mention"; import StarterKit from "@tiptap/starter-kit"; import Underline from "@tiptap/extension-underline"; import { executeEvent } from "../../utils/events"; @@ -33,13 +34,15 @@ export const MessageItem = ({ reactions, isUpdating, lastSignature, - onEdit + onEdit, + isPrivate }) => { const { ref, inView } = useInView({ threshold: 0.7, // Fully visible triggerOnce: false, // Only trigger once when it becomes visible }); + const [anchorEl, setAnchorEl] = useState(null); const [selectedReaction, setSelectedReaction] = useState(null); @@ -136,7 +139,7 @@ export const MessageItem = ({ gap: '10px', alignItems: 'center' }}> - {message?.sender === myAddress && !message?.isNotEncrypted && ( + {message?.sender === myAddress && (!message?.isNotEncrypted || isPrivate === false) && ( { onEdit(message); @@ -205,6 +208,7 @@ export const MessageItem = ({ StarterKit, Underline, Highlight, + Mention ])} /> )} @@ -223,6 +227,7 @@ export const MessageItem = ({ StarterKit, Underline, Highlight, + Mention ])} /> )} @@ -341,7 +346,7 @@ export const MessageItem = ({ alignItems: 'center', gap: '15px' }}> - {message?.isNotEncrypted && ( + {message?.isNotEncrypted && isPrivate && ( { StarterKit, Underline, Highlight, + Mention ])} /> )} diff --git a/src/components/Chat/styles.css b/src/components/Chat/styles.css index 7f3f66e..21680c8 100644 --- a/src/components/Chat/styles.css +++ b/src/components/Chat/styles.css @@ -125,7 +125,7 @@ font-size: 12px !important; } -.tiptap .mention { +.tiptap [data-type="mention"] { box-decoration-break: clone; color: lightblue; padding: 0.1rem 0.3rem; diff --git a/src/components/Desktop/DesktopHeader.tsx b/src/components/Desktop/DesktopHeader.tsx index 7067153..9be4d2f 100644 --- a/src/components/Desktop/DesktopHeader.tsx +++ b/src/components/Desktop/DesktopHeader.tsx @@ -19,6 +19,8 @@ import { ChatIcon } from "../../assets/Icons/ChatIcon"; import { ThreadsIcon } from "../../assets/Icons/ThreadsIcon"; import { MembersIcon } from "../../assets/Icons/MembersIcon"; import { AdminsIcon } from "../../assets/Icons/AdminsIcon"; +import LockIcon from '@mui/icons-material/Lock'; +import NoEncryptionGmailerrorredIcon from '@mui/icons-material/NoEncryptionGmailerrorred'; const IconWrapper = ({ children, label, color, selected, selectColor, customHeight }) => { return ( @@ -80,7 +82,8 @@ export const DesktopHeader = ({ hasUnreadChat, isChat, isForum, - setGroupSection + setGroupSection, + isPrivate }) => { const [value, setValue] = React.useState(0); return ( @@ -95,7 +98,20 @@ export const DesktopHeader = ({ padding: "10px", }} > - + + {isPrivate && ( + + )} + {isPrivate === false && ( + + )} { @@ -347,6 +348,19 @@ export const getNamesForAdmins = async (admins) => { return members; }; +function areKeysEqual(array1, array2) { + // If lengths differ, the arrays cannot be equal + if (array1?.length !== array2?.length) { + return false; + } + + // Sort both arrays and compare their elements + const sortedArray1 = [...array1].sort(); + const sortedArray2 = [...array2].sort(); + + return sortedArray1.every((key, index) => key === sortedArray2[index]); +} + export const Group = ({ myAddress, isFocused, @@ -418,6 +432,17 @@ export const Group = ({ const [appsModeDev, setAppsModeDev] = useState('home') const [isOpenSideViewDirects, setIsOpenSideViewDirects] = useState(false) const [isOpenSideViewGroups, setIsOpenSideViewGroups] = useState(false) + + + const [groupsProperties, setGroupsProperties] = useState({}) + + const isPrivate = useMemo(()=> { + if(!selectedGroup?.groupId || !groupsProperties[selectedGroup?.groupId]) return null + if(groupsProperties[selectedGroup?.groupId]?.isOpen === true) return false + if(groupsProperties[selectedGroup?.groupId]?.isOpen === false) return true + return null + }, [selectedGroup]) + const setSelectedGroupId = useSetRecoilState(selectedGroupIdAtom) const toggleSideViewDirects = ()=> { if(isOpenSideViewGroups){ @@ -569,9 +594,8 @@ export const Group = ({ if ( group?.data && - isExtMsg(group?.data) && group?.sender !== myAddress && - group?.timestamp && (!isUpdateMsg(group?.data) || groupChatTimestamps[group?.groupId]) && + group?.timestamp && groupChatTimestamps[group?.groupId] && ((!timestampEnterData[group?.groupId] && Date.now() - group?.timestamp < timeDifferenceForNotificationChats) || timestampEnterData[group?.groupId] < group?.timestamp) @@ -706,12 +730,19 @@ export const Group = ({ useEffect(() => { - if (selectedGroup) { - setTriedToFetchSecretKey(false); - getSecretKey(true); + if (selectedGroup && isPrivate !== null) { + if(isPrivate){ + setTriedToFetchSecretKey(false); + getSecretKey(true); + } + getGroupOwner(selectedGroup?.groupId); } - }, [selectedGroup]); + if(isPrivate === false){ + setTriedToFetchSecretKey(true); + + } + }, [selectedGroup, isPrivate]); @@ -735,9 +766,8 @@ export const Group = ({ const groupData = {} const getGroupData = groups.map(async(group)=> { - const isUpdate = isUpdateMsg(group?.data) if(!group.groupId || !group?.timestamp) return null - if(isUpdate && (!groupData[group.groupId] || groupData[group.groupId] < group.timestamp)){ + if((!groupData[group.groupId] || groupData[group.groupId] < group.timestamp)){ const hasMoreRecentMsg = await getCountNewMesg(group.groupId, timestampEnterDataRef.current[group?.groupId] || Date.now() - 24 * 60 * 60 * 1000) if(hasMoreRecentMsg){ groupData[group.groupId] = hasMoreRecentMsg @@ -754,6 +784,32 @@ export const Group = ({ } } + const getGroupsProperties = useCallback(async(address)=> { + try { + const url = `${getBaseApiReact()}/groups/member/${address}`; + const response = await fetch(url); + if(!response.ok) throw new Error('Cannot get group properties') + let data = await response.json(); + const transformToObject = data.reduce((result, item) => { + + result[item.groupId] = item + return result; + }, {}); + setGroupsProperties(transformToObject) + } catch (error) { + // error + } + }, []) + + + useEffect(()=> { + if(!myAddress) return + if(areKeysEqual(groups?.map((grp)=> grp?.groupId), Object.keys(groupsProperties))){ + } else { + getGroupsProperties(myAddress) + } + }, [groups, myAddress]) + useEffect(() => { @@ -941,9 +997,9 @@ export const Group = ({ .filter((group) => group?.sender !== myAddress) .find((gr) => gr?.groupId === selectedGroup?.groupId); if (!findGroup) return false; - if (!findGroup?.data || !isExtMsg(findGroup?.data)) return false; + if (!findGroup?.data) return false; return ( - findGroup?.timestamp && (!isUpdateMsg(findGroup?.data) || groupChatTimestamps[findGroup?.groupId]) && + findGroup?.timestamp && groupChatTimestamps[findGroup?.groupId] && ((!timestampEnterData[selectedGroup?.groupId] && Date.now() - findGroup?.timestamp < timeDifferenceForNotificationChats) || @@ -1657,6 +1713,7 @@ export const Group = ({ ); }; + const renderGroups = () => { return (
- - {group.groupName?.charAt(0)} - + display: 'flex', + alignItems: 'center', + justifyContent: 'center' + }}> + + + ): ( + + + + // + // {group.groupName?.charAt(0)} + // + )} + )} {group?.data && - isExtMsg(group?.data) && (!isUpdateMsg(group?.data) || groupChatTimestamps[group?.groupId]) && + groupChatTimestamps[group?.groupId] && group?.sender !== myAddress && group?.timestamp && ((!timestampEnterData[group?.groupId] && @@ -2085,6 +2172,7 @@ export const Group = ({ {!isMobile && ( )} - {firstSecretKeyInCreation && + {isPrivate &&firstSecretKeyInCreation && triedToFetchSecretKey && !secretKeyPublishDate && (
)} - {!admins.includes(myAddress) && + {isPrivate && !admins.includes(myAddress) && !secretKey && triedToFetchSecretKey ? ( <> @@ -2231,7 +2320,7 @@ export const Group = ({ ) : null} ) : admins.includes(myAddress) && - !secretKey && + (!secretKey && isPrivate) && triedToFetchSecretKey ? null : !triedToFetchSecretKey ? null : ( <> - {admins.includes(myAddress) && + {isPrivate && admins.includes(myAddress) && shouldReEncrypt && triedToFetchSecretKey && !firstSecretKeyInCreation && diff --git a/src/qdn/encryption/group-encryption.ts b/src/qdn/encryption/group-encryption.ts index 632252b..82734ee 100644 --- a/src/qdn/encryption/group-encryption.ts +++ b/src/qdn/encryption/group-encryption.ts @@ -217,12 +217,12 @@ export const decodeBase64ForUIChatMessages = (messages)=> { try { const decoded = atob(msg?.data); const parseDecoded =JSON.parse(decodeURIComponent(escape(decoded))) - if(parseDecoded?.messageText){ + msgs.push({ ...msg, ...parseDecoded }) - } + } catch (error) { } From fe9a7acdaa61f6dc94cdffd8ca05d0940f599ab3 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 15 Dec 2024 08:49:56 +0200 Subject: [PATCH 010/119] fix message size --- src/App.tsx | 2 +- src/components/Chat/ChatDirect.tsx | 4 ++-- src/components/Chat/ChatGroup.tsx | 23 ++++++++++++++++------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 353289d..a442e97 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -319,7 +319,7 @@ function App() { useState(""); const [isMain, setIsMain] = useState(true); const isMainRef = useRef(false); - const [authenticatePassword, setAuthenticatePassword] = useState("1234567890"); + const [authenticatePassword, setAuthenticatePassword] = useState(""); const [sendqortState, setSendqortState] = useState(null); const [isLoading, setIsLoading] = useState(false); const [ diff --git a/src/components/Chat/ChatDirect.tsx b/src/components/Chat/ChatDirect.tsx index 5e2014e..ace54ce 100644 --- a/src/components/Chat/ChatDirect.tsx +++ b/src/components/Chat/ChatDirect.tsx @@ -377,7 +377,8 @@ useEffect(() => { const sendMessage = async ()=> { try { - + if(messageSize > 4000) return + if(+balance < 4) throw new Error('You need at least 4 QORT to send a message') if(isSending) return @@ -674,7 +675,6 @@ useEffect(() => { { - if(messageSize > 4000) return if(isSending) return sendMessage() diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index 4324913..25be721 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -562,6 +562,7 @@ const clearEditorContent = () => { const sendMessage = async ()=> { try { + if(messageSize > 4000) return if(isPrivate === null) throw new Error('Unable to determine if group is private') if(isSending) return if(+balance < 4) throw new Error('You need at least 4 QORT to send a message') @@ -647,11 +648,19 @@ const clearEditorContent = () => { handleUpdateRef.current = throttle(async () => { try { - const htmlContent = editorRef.current.getHTML(); - const message64 = await objectToBase64(JSON.stringify(htmlContent)) - const secretKeyObject = await getSecretKey(false, true) - const encryptSingle = await encryptChatMessage(message64, secretKeyObject) - setMessageSize((encryptSingle?.length || 0) + 200); + if(isPrivate){ + const htmlContent = editorRef.current.getHTML(); + const message64 = await objectToBase64(JSON.stringify(htmlContent)) + const secretKeyObject = await getSecretKey(false, true) + const encryptSingle = await encryptChatMessage(message64, secretKeyObject) + setMessageSize((encryptSingle?.length || 0) + 200); + } else { + const htmlContent = editorRef.current.getJSON(); + const message = JSON.stringify(htmlContent) + const size = new Blob([message]).size + setMessageSize(size + 300); + } + } catch (error) { // calc size error } @@ -664,7 +673,7 @@ const clearEditorContent = () => { return () => { currentEditor.off("update", handleUpdateRef.current); }; - }, [editorRef, setMessageSize]); + }, [editorRef, setMessageSize, isPrivate]); useEffect(() => { if (hide) { @@ -874,7 +883,7 @@ const clearEditorContent = () => { { - if(messageSize > 4000) return + if(isSending) return sendMessage() }} From 0cb3c80c2572c4e4a43e99c64254e59b6a7c9437 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 15 Dec 2024 20:14:25 +0200 Subject: [PATCH 011/119] announcements public group non-encrypted --- .../Chat/AnnouncementDiscussion.tsx | 28 +++---- src/components/Chat/GroupAnnouncements.tsx | 74 ++++++++++--------- src/components/Group/Group.tsx | 13 +++- 3 files changed, 67 insertions(+), 48 deletions(-) diff --git a/src/components/Chat/AnnouncementDiscussion.tsx b/src/components/Chat/AnnouncementDiscussion.tsx index cc6af24..5603de0 100644 --- a/src/components/Chat/AnnouncementDiscussion.tsx +++ b/src/components/Chat/AnnouncementDiscussion.tsx @@ -6,7 +6,7 @@ import { objectToBase64 } from "../../qdn/encryption/group-encryption"; import ShortUniqueId from "short-unique-id"; import { LoadingSnackbar } from "../Snackbar/LoadingSnackbar"; import { getBaseApi, getFee } from "../../background"; -import { decryptPublishes, getTempPublish, saveTempPublish } from "./GroupAnnouncements"; +import { decryptPublishes, getTempPublish, handleUnencryptedPublishes, saveTempPublish } from "./GroupAnnouncements"; import { AnnouncementList } from "./AnnouncementList"; import { Spacer } from "../../common/Spacer"; import ArrowBackIcon from '@mui/icons-material/ArrowBack'; @@ -22,7 +22,8 @@ export const AnnouncementDiscussion = ({ secretKey, setSelectedAnnouncement, show, - myName + myName, + isPrivate }) => { const [isSending, setIsSending] = useState(false); const [isLoading, setIsLoading] = useState(false); @@ -49,7 +50,7 @@ export const AnnouncementDiscussion = ({ } }; - const getData = async ({ identifier, name }) => { + const getData = async ({ identifier, name }, isPrivate) => { try { const res = await fetch( @@ -57,7 +58,7 @@ export const AnnouncementDiscussion = ({ ); if(!res?.ok) return const data = await res.text(); - const response = await decryptPublishes([{ data }], secretKey); + const response = isPrivate === false ? handleUnencryptedPublishes([data]) : await decryptPublishes([{ data }], secretKey); const messageData = response[0]; setData((prev) => { @@ -132,10 +133,10 @@ export const AnnouncementDiscussion = ({ extra: {}, message: htmlContent, }; - const secretKeyObject = await getSecretKey(false, true); - const message64: any = await objectToBase64(message); + const secretKeyObject = isPrivate === false ? null : await getSecretKey(false, true); + const message64: any = await objectToBase64(message); - const encryptSingle = await encryptChatMessage( + const encryptSingle = isPrivate === false ? message64 : await encryptChatMessage( message64, secretKeyObject ); @@ -169,7 +170,7 @@ export const AnnouncementDiscussion = ({ }; const getComments = React.useCallback( - async (selectedAnnouncement) => { + async (selectedAnnouncement, isPrivate) => { try { setIsLoading(true); @@ -190,7 +191,7 @@ export const AnnouncementDiscussion = ({ setComments(responseData); setIsLoading(false); for (const data of responseData) { - getData({ name: data.name, identifier: data.identifier }); + getData({ name: data.name, identifier: data.identifier }, isPrivate); } } catch (error) { } finally { @@ -220,7 +221,7 @@ export const AnnouncementDiscussion = ({ setComments((prev)=> [...prev, ...responseData]); setIsLoading(false); for (const data of responseData) { - getData({ name: data.name, identifier: data.identifier }); + getData({ name: data.name, identifier: data.identifier }, isPrivate); } } catch (error) { @@ -245,11 +246,12 @@ export const AnnouncementDiscussion = ({ }, [tempPublishedList, comments]); React.useEffect(() => { - if (selectedAnnouncement && secretKey && !firstMountRef.current) { - getComments(selectedAnnouncement); + if(!secretKey && isPrivate) return + if (selectedAnnouncement && !firstMountRef.current && isPrivate !== null) { + getComments(selectedAnnouncement, isPrivate); firstMountRef.current = true } - }, [selectedAnnouncement, secretKey]); + }, [selectedAnnouncement, secretKey, isPrivate]); return (
{ .then((response) => { if (!response?.error) { res(response); - // if(hasInitialized.current){ - // setMessages((prev) => [...prev, ...formatted]); - // } else { - // const formatted = response.map((item) => ({ - // ...item, - // id: item.signature, - // text: item.text, - // unread: false - // })); - // setMessages(formatted); - // hasInitialized.current = true; - // } return; } rej(response.error); @@ -117,6 +105,20 @@ export const decryptPublishes = async (encryptedMessages: any[], secretKey) => { }); } catch (error) {} }; +export const handleUnencryptedPublishes = (publishes) => { + let publishesData = [] + publishes.forEach((pub)=> { + try { + const decodedData = JSON.parse(atob(pub)) + if(decodedData){ + publishesData.push({decryptedData: decodedData}) + } + } catch (error) { + + } + }) + return publishesData +}; export const GroupAnnouncements = ({ selectedGroup, secretKey, @@ -127,6 +129,7 @@ export const GroupAnnouncements = ({ isAdmin, hide, myName, + isPrivate }) => { const [messages, setMessages] = useState([]); const [isSending, setIsSending] = useState(false); @@ -160,7 +163,7 @@ export const GroupAnnouncements = ({ })(); }, [selectedGroup]); - const getAnnouncementData = async ({ identifier, name, resource }) => { + const getAnnouncementData = async ({ identifier, name, resource }, isPrivate) => { try { let data = dataPublishes.current[`${name}-${identifier}`]; if ( @@ -180,9 +183,9 @@ export const GroupAnnouncements = ({ data = data.data; } - const response = await decryptPublishes([{ data }], secretKey); - + const response = isPrivate === false ? handleUnencryptedPublishes([data]) : await decryptPublishes([{ data }], secretKey); const messageData = response[0]; + if(!messageData) return setAnnouncementData((prev) => { return { ...prev, @@ -195,11 +198,11 @@ export const GroupAnnouncements = ({ }; useEffect(() => { - if (!secretKey || hasInitializedWebsocket.current) return; + if ((!secretKey && isPrivate) || hasInitializedWebsocket.current || isPrivate === null) return; setIsLoading(true); // initWebsocketMessageGroup() hasInitializedWebsocket.current = true; - }, [secretKey]); + }, [secretKey, isPrivate]); const encryptChatMessage = async (data: string, secretKeyObject: any) => { try { @@ -257,12 +260,12 @@ export const GroupAnnouncements = ({ } }; - const setTempData = async () => { + const setTempData = async (selectedGroup) => { try { const getTempAnnouncements = await getTempPublish(); if (getTempAnnouncements?.announcement) { let tempData = []; - Object.keys(getTempAnnouncements?.announcement || {}).map((key) => { + Object.keys(getTempAnnouncements?.announcement || {}).filter((annKey)=> annKey?.startsWith(`grp-${selectedGroup}-anc`)).map((key) => { const value = getTempAnnouncements?.announcement[key]; tempData.push(value.data); }); @@ -289,9 +292,9 @@ export const GroupAnnouncements = ({ extra: {}, message: htmlContent, }; - const secretKeyObject = await getSecretKey(false, true); - const message64: any = await objectToBase64(message); - const encryptSingle = await encryptChatMessage( + const secretKeyObject = isPrivate === false ? null : await getSecretKey(false, true); + const message64: any = await objectToBase64(message); + const encryptSingle = isPrivate === false ? message64 : await encryptChatMessage( message64, secretKeyObject ); @@ -313,7 +316,7 @@ export const GroupAnnouncements = ({ data: dataToSaveToStorage, key: "announcement", }); - setTempData(); + setTempData(selectedGroup); clearEditorContent(); } // send chat message @@ -331,7 +334,7 @@ export const GroupAnnouncements = ({ }; const getAnnouncements = React.useCallback( - async (selectedGroup) => { + async (selectedGroup, isPrivate) => { try { const offset = 0; @@ -346,7 +349,7 @@ export const GroupAnnouncements = ({ }); const responseData = await response.json(); - setTempData(); + setTempData(selectedGroup); setAnnouncements(responseData); setIsLoading(false); for (const data of responseData) { @@ -354,7 +357,7 @@ export const GroupAnnouncements = ({ name: data.name, identifier: data.identifier, resource: data, - }); + }, isPrivate); } } catch (error) { } finally { @@ -365,11 +368,12 @@ export const GroupAnnouncements = ({ ); React.useEffect(() => { - if (selectedGroup && secretKey && !hasInitialized.current && !hide) { - getAnnouncements(selectedGroup); + if(!secretKey && isPrivate) return + if (selectedGroup && !hasInitialized.current && !hide && isPrivate !== null) { + getAnnouncements(selectedGroup, isPrivate); hasInitialized.current = true; } - }, [selectedGroup, secretKey, hide]); + }, [selectedGroup, secretKey, hide, isPrivate]); const loadMore = async () => { try { @@ -389,7 +393,7 @@ export const GroupAnnouncements = ({ setAnnouncements((prev) => [...prev, ...responseData]); setIsLoading(false); for (const data of responseData) { - getAnnouncementData({ name: data.name, identifier: data.identifier }); + getAnnouncementData({ name: data.name, identifier: data.identifier }, isPrivate); } } catch (error) {} }; @@ -414,7 +418,7 @@ export const GroupAnnouncements = ({ getAnnouncementData({ name: data.name, identifier: data.identifier, - }); + }, isPrivate); } catch (error) {} } setAnnouncements(responseData); @@ -429,7 +433,7 @@ export const GroupAnnouncements = ({ for (const data of newArray) { try { - getAnnouncementData({ name: data.name, identifier: data.identifier }); + getAnnouncementData({ name: data.name, identifier: data.identifier }, isPrivate); } catch (error) {} } setAnnouncements((prev) => [...newArray, ...prev]); @@ -449,14 +453,14 @@ export const GroupAnnouncements = ({ }, [checkNewMessages]); useEffect(() => { - if (!secretKey || hide) return; + if ((!secretKey && isPrivate) || hide || isPrivate === null) return; checkNewMessagesFunc(); return () => { if (interval?.current) { clearInterval(interval.current); } }; - }, [checkNewMessagesFunc, hide]); + }, [checkNewMessagesFunc, hide, isPrivate]); const combinedListTempAndReal = useMemo(() => { // Combine the two lists @@ -498,11 +502,13 @@ export const GroupAnnouncements = ({ setSelectedAnnouncement={setSelectedAnnouncement} encryptChatMessage={encryptChatMessage} getSecretKey={getSecretKey} + isPrivate={isPrivate} />
); } + return (
{ + try { + const { names, addresses, both } = + await getGroupAdmins(selectedGroup?.groupId) + setAdmins(addresses); + setAdminsWithNames(both); + } catch (error) { + //error + } + } useEffect(() => { if (selectedGroup && isPrivate !== null) { @@ -740,6 +749,7 @@ export const Group = ({ } if(isPrivate === false){ setTriedToFetchSecretKey(true); + getAdminsForPublic(selectedGroup) } }, [selectedGroup, isPrivate]); @@ -2335,6 +2345,7 @@ export const Group = ({ } myName={userInfo?.name} hide={groupSection !== "announcement"} + isPrivate={isPrivate} /> Date: Sun, 15 Dec 2024 21:09:16 +0200 Subject: [PATCH 012/119] threads unencrypted for public grps --- src/components/Chat/GroupForum.tsx | 5 ++-- src/components/Group/Forum/GroupMail.tsx | 29 +++++++++++++----------- src/components/Group/Forum/NewThread.tsx | 13 ++++++----- src/components/Group/Forum/Thread.tsx | 18 +++++++++------ src/components/Group/Group.tsx | 1 + 5 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/components/Chat/GroupForum.tsx b/src/components/Chat/GroupForum.tsx index bfc1f05..d8dd7e5 100644 --- a/src/components/Chat/GroupForum.tsx +++ b/src/components/Chat/GroupForum.tsx @@ -24,7 +24,8 @@ export const GroupForum = ({ myAddress, hide, defaultThread, - setDefaultThread + setDefaultThread, + isPrivate }) => { const { rootHeight } = useContext(MyContext); const [isMoved, setIsMoved] = useState(false); @@ -50,7 +51,7 @@ export const GroupForum = ({ left: hide && '-1000px' }} > - +
); diff --git a/src/components/Group/Forum/GroupMail.tsx b/src/components/Group/Forum/GroupMail.tsx index d569b27..38d93e9 100644 --- a/src/components/Group/Forum/GroupMail.tsx +++ b/src/components/Group/Forum/GroupMail.tsx @@ -46,7 +46,7 @@ import LazyLoad from "../../../common/LazyLoad"; import { delay } from "../../../utils/helpers"; import { NewThread } from "./NewThread"; import { getBaseApi } from "../../../background"; -import { decryptPublishes, getTempPublish } from "../../Chat/GroupAnnouncements"; +import { decryptPublishes, getTempPublish, handleUnencryptedPublishes } from "../../Chat/GroupAnnouncements"; import CheckSVG from "../../../assets/svgs/Check.svg"; import SortSVG from "../../../assets/svgs/Sort.svg"; import ArrowDownSVG from "../../../assets/svgs/ArrowDown.svg"; @@ -66,7 +66,8 @@ export const GroupMail = ({ secretKey, defaultThread, setDefaultThread, - hide + hide, + isPrivate }) => { const [viewedThreads, setViewedThreads] = React.useState({}); const [filterMode, setFilterMode] = useState("Recently active"); @@ -123,7 +124,7 @@ export const GroupMail = ({ } - const getEncryptedResource = async ({ name, identifier, resource }) => { + const getEncryptedResource = async ({ name, identifier, resource }, isPrivate) => { let data = dataPublishes.current[`${name}-${identifier}`] if(!data || (data?.update || data?.created !== (resource?.updated || resource?.created))){ const res = await fetch( @@ -136,7 +137,7 @@ export const GroupMail = ({ } else { data = data.data } - const response = await decryptPublishes([{ data }], secretKey); + const response = isPrivate === false ? handleUnencryptedPublishes([data]) : await decryptPublishes([{ data }], secretKey); const messageData = response[0]; return messageData.decryptedData; @@ -212,7 +213,7 @@ export const GroupMail = ({ name: message.name, identifier: message.identifier, resource: message - }), + }, isPrivate), delay(5000), ]); } catch (error) {} @@ -255,7 +256,7 @@ export const GroupMail = ({ } } }, - [allThreads] + [allThreads, isPrivate] ); const getMailMessages = React.useCallback( async (groupId: string, members: any) => { @@ -327,7 +328,7 @@ export const GroupMail = ({ name: thread.name, identifier: message.threadId, resource: thread - }), + }, isPrivate), delay(10000), ]); if (threadRes?.title) { @@ -356,16 +357,16 @@ export const GroupMail = ({ // dispatch(setIsLoadingCustom(null)); } }, - [secretKey] + [secretKey, isPrivate] ); const getMessages = React.useCallback(async () => { // if ( !groupId || members?.length === 0) return; - if (!groupId) return; + if (!groupId || isPrivate === null) return; await getMailMessages(groupId, members); - }, [getMailMessages, groupId, members, secretKey]); + }, [getMailMessages, groupId, members, secretKey, isPrivate]); const interval = useRef(null); @@ -378,7 +379,7 @@ export const GroupMail = ({ firstMount.current = false; } // if (groupId && !firstMount.current && members.length > 0) { - if (groupId && !firstMount.current) { + if (groupId && !firstMount.current && isPrivate !== null) { if (filterMode === "Recently active") { getMessages(); } else if (filterMode === "Newest") { @@ -389,7 +390,7 @@ export const GroupMail = ({ setTempData() firstMount.current = true; } - }, [groupId, members, filterMode, hide]); + }, [groupId, members, filterMode, hide, isPrivate]); const closeThread = useCallback(() => { setCurrentThread(null); @@ -468,7 +469,7 @@ export const GroupMail = ({ } else if (filterMode === "Oldest") { getAllThreads(groupId, "Oldest", true); } - }, [filterMode]) + }, [filterMode, isPrivate]) const updateThreadActivityCurrentThread = ()=> { if(!currentThread) return @@ -540,6 +541,7 @@ export const GroupMail = ({ secretKey={secretKey} getSecretKey={getSecretKey} updateThreadActivityCurrentThread={updateThreadActivityCurrentThread} + isPrivate={isPrivate} /> ); @@ -620,6 +622,7 @@ export const GroupMail = ({ userInfo={userInfo} getSecretKey={getSecretKey} myName={userInfo?.name} + isPrivate={isPrivate} /> { const { show } = React.useContext(MyContext); @@ -245,8 +246,8 @@ export const NewThread = ({ reply, }; - const secretKey = await getSecretKey(false, true); - if (!secretKey) { + const secretKey = isPrivate === false ? null : await getSecretKey(false, true); + if (!secretKey && isPrivate) { throw new Error("Cannot get group secret key"); } @@ -254,7 +255,7 @@ export const NewThread = ({ const idThread = uid.rnd(); const idMsg = uid.rnd(); const messageToBase64 = await objectToBase64(mailObject); - const encryptSingleFirstPost = await encryptSingleFunc( + const encryptSingleFirstPost = isPrivate === false ? messageToBase64 : await encryptSingleFunc( messageToBase64, secretKey ); @@ -266,7 +267,7 @@ export const NewThread = ({ }; const threadToBase64 = await objectToBase64(threadObject); - const encryptSingleThread = await encryptSingleFunc( + const encryptSingleThread = isPrivate === false ? threadToBase64 : await encryptSingleFunc( threadToBase64, secretKey ); @@ -321,7 +322,7 @@ export const NewThread = ({ if (!currentThread) throw new Error("unable to locate thread Id"); const idThread = currentThread.threadId; const messageToBase64 = await objectToBase64(mailObject); - const encryptSinglePost = await encryptSingleFunc( + const encryptSinglePost = isPrivate === false ? messageToBase64 : await encryptSingleFunc( messageToBase64, secretKey ); diff --git a/src/components/Group/Forum/Thread.tsx b/src/components/Group/Forum/Thread.tsx index f393d5d..22b2ba3 100644 --- a/src/components/Group/Forum/Thread.tsx +++ b/src/components/Group/Forum/Thread.tsx @@ -37,6 +37,7 @@ import { NewThread } from "./NewThread"; import { decryptPublishes, getTempPublish, + handleUnencryptedPublishes, } from "../../Chat/GroupAnnouncements"; import { LoadingSnackbar } from "../../Snackbar/LoadingSnackbar"; import { subscribeToEvent, unsubscribeFromEvent } from "../../../utils/events"; @@ -71,7 +72,7 @@ const getEncryptedResource = async ({ resource, groupId, dataPublishes, -}) => { +}, isPrivate) => { let data = dataPublishes[`${name}-${identifier}`]; if ( !data || @@ -99,7 +100,7 @@ const getEncryptedResource = async ({ } else { data = data.data; } - const response = await decryptPublishes([{ data }], secretKey); + const response = isPrivate === false ? handleUnencryptedPublishes([data]) : await decryptPublishes([{ data }], secretKey); const messageData = response[0]; return messageData.decryptedData; @@ -114,6 +115,7 @@ export const Thread = ({ secretKey, getSecretKey, updateThreadActivityCurrentThread, + isPrivate }: ThreadProps) => { const [tempPublishedList, setTempPublishedList] = useState([]); const [messages, setMessages] = useState([]); @@ -164,7 +166,7 @@ export const Thread = ({ resource: message, groupId: groupInfo?.groupId, dataPublishes: dataPublishes.current, - }); + }, isPrivate); if (responseDataMessage?.error) { const fullObject = { @@ -323,9 +325,9 @@ export const Thread = ({ [messages, secretKey] ); const getMessages = React.useCallback(async () => { - if (!currentThread || !secretKey || !groupInfo?.groupId) return; + if (!currentThread || (!secretKey && isPrivate) || !groupInfo?.groupId || isPrivate === null) return; await getMailMessages(currentThread, null, null, false, groupInfo?.groupId); - }, [getMailMessages, currentThread, secretKey, groupInfo?.groupId]); + }, [getMailMessages, currentThread, secretKey, groupInfo?.groupId, isPrivate]); const firstMount = useRef(false); const saveTimestamp = useCallback((currentThread: any, username?: string) => { @@ -380,10 +382,11 @@ export const Thread = ({ if (currentThreadRef.current?.threadId !== currentThread?.threadId) { firstMount.current = false; } - if (currentThread && secretKey && !firstMount.current) { + if(!secretKey && isPrivate) return + if (currentThread && !firstMount.current && isPrivate !== null) { getMessagesMiddleware(); } - }, [currentThread, secretKey]); + }, [currentThread, secretKey, isPrivate]); const messageCallback = useCallback((msg: any) => { // dispatch(addToHashMapMail(msg)) // setMessages((prev) => [msg, ...prev]) @@ -576,6 +579,7 @@ export const Thread = ({ myName={userInfo?.name} publishCallback={setTempData} setPostReply={setPostReply} + isPrivate={isPrivate} /> From e2d12880d147d67158d734a1f7aa9a693599bc2e Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 15 Dec 2024 21:55:20 +0200 Subject: [PATCH 013/119] added lock icon to list of groups --- src/components/Group/AddGroup.tsx | 13 +++++-- src/components/Group/AddGroupList.tsx | 27 +++++++++++---- .../Group/ListOfGroupPromotions.tsx | 27 +++++++++++++++ src/components/Group/UserListOfInvites.tsx | 34 ++++++++++++++++--- 4 files changed, 88 insertions(+), 13 deletions(-) diff --git a/src/components/Group/AddGroup.tsx b/src/components/Group/AddGroup.tsx index ed90c8c..af23fd9 100644 --- a/src/components/Group/AddGroup.tsx +++ b/src/components/Group/AddGroup.tsx @@ -217,6 +217,9 @@ export const AddGroup = ({ address, open, setOpen }) => { flexGrow: 1, overflowY: "auto", color: "white", + flexDirection: 'column', + flexGrow: 1, + display: 'flex' }} > @@ -454,7 +457,10 @@ export const AddGroup = ({ address, open, setOpen }) => { {value === 1 && ( @@ -465,7 +471,10 @@ export const AddGroup = ({ address, open, setOpen }) => { {value === 2 && ( diff --git a/src/components/Group/AddGroupList.tsx b/src/components/Group/AddGroupList.tsx index 17eb3a8..977430d 100644 --- a/src/components/Group/AddGroupList.tsx +++ b/src/components/Group/AddGroupList.tsx @@ -26,7 +26,9 @@ import _ from "lodash"; import { MyContext, getBaseApiReact } from "../../App"; import { LoadingButton } from "@mui/lab"; import { getBaseApi, getFee } from "../../background"; - +import LockIcon from '@mui/icons-material/Lock'; +import NoEncryptionGmailerrorredIcon from '@mui/icons-material/NoEncryptionGmailerrorred'; +import { Spacer } from "../../common/Spacer"; const cache = new CellMeasurerCache({ fixedWidth: true, defaultHeight: 50, @@ -231,7 +233,17 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { handlePopoverOpen(event, index)} > - + {group?.isOpen === false && ( + + )} + {group?.isOpen === true && ( + + )} + { }; return ( -
+

Groups list

{
@@ -278,6 +293,6 @@ export const AddGroupList = ({ setInfoSnack, setOpenSnack }) => { )}
-
+
); }; diff --git a/src/components/Group/ListOfGroupPromotions.tsx b/src/components/Group/ListOfGroupPromotions.tsx index fdc13f2..a9ed3de 100644 --- a/src/components/Group/ListOfGroupPromotions.tsx +++ b/src/components/Group/ListOfGroupPromotions.tsx @@ -33,6 +33,8 @@ import { import { getNameInfo } from "./Group"; import { getBaseApi, getFee } from "../../background"; import { LoadingButton } from "@mui/lab"; +import LockIcon from '@mui/icons-material/Lock'; +import NoEncryptionGmailerrorredIcon from '@mui/icons-material/NoEncryptionGmailerrorred'; import { MyContext, getArbitraryEndpointReact, @@ -540,6 +542,31 @@ export const ListOfGroupPromotions = () => { {promotion?.groupName}
+ + + {promotion?.isOpen === false && ( + + )} + {promotion?.isOpen === true && ( + + )} + + {promotion?.isOpen ? 'Public group' : 'Private group' } + + {
handlePopoverOpen(event, index)}> - + {invite?.isOpen === false && ( + + )} + {invite?.isOpen === true && ( + + )} + @@ -194,9 +206,21 @@ export const UserListOfInvites = ({myAddress, setInfoSnack, setOpenSnack}) => { }; return ( -
+

Invite list

-
+
{({ height, width }) => ( { )}
-
+
); } From c17b67106cabd98d85ff8f6363e56cc61239f862 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 16 Dec 2024 03:39:16 +0200 Subject: [PATCH 014/119] fixes --- src/components/Chat/ChatOptions.tsx | 74 +---------------------------- src/components/Group/AddGroup.tsx | 1 - src/components/Group/Group.tsx | 2 +- 3 files changed, 2 insertions(+), 75 deletions(-) diff --git a/src/components/Chat/ChatOptions.tsx b/src/components/Chat/ChatOptions.tsx index 87f3329..42f009c 100644 --- a/src/components/Chat/ChatOptions.tsx +++ b/src/components/Chat/ChatOptions.tsx @@ -325,79 +325,7 @@ export const ChatOptions = ({ messages : untransformedMessages, goToMessage, mem }} > - {/* - - - - {message?.senderName?.charAt(0)} - - - {message?.senderName} - - - - - {formatTimestamp(message.timestamp)} - { - const findMsgIndex = messages.findIndex( - (item) => - item?.signature === message?.signature - ); - if (findMsgIndex !== -1) { - goToMessage(findMsgIndex); - } - }} - > -

" - } - /> -
-
*/} +
); })} diff --git a/src/components/Group/AddGroup.tsx b/src/components/Group/AddGroup.tsx index af23fd9..1cf86fe 100644 --- a/src/components/Group/AddGroup.tsx +++ b/src/components/Group/AddGroup.tsx @@ -218,7 +218,6 @@ export const AddGroup = ({ address, open, setOpen }) => { overflowY: "auto", color: "white", flexDirection: 'column', - flexGrow: 1, display: 'flex' }} > diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index 7d77cc2..c699f48 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -2252,7 +2252,7 @@ export const Group = ({ getTimestampEnterChatParent={getTimestampEnterChat} /> )} - {isPrivate &&firstSecretKeyInCreation && + {isPrivate && firstSecretKeyInCreation && triedToFetchSecretKey && !secretKeyPublishDate && (
Date: Mon, 16 Dec 2024 05:14:44 +0200 Subject: [PATCH 015/119] bug fixes --- src/components/Chat/ChatGroup.tsx | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index 25be721..b7f7d4f 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -223,15 +223,15 @@ const [messageSize, setMessageSize] = useState(0) setChatReferences((prev) => { const organizedChatReferences = { ...prev }; combineUIAndExtensionMsgs - .filter((rawItem) => rawItem && rawItem.chatReference && (rawItem.decryptedData?.type === "reaction" || rawItem.decryptedData?.type === "edit" || rawItem?.type === "edit" || rawItem?.type === "reaction")) + .filter((rawItem) => rawItem && rawItem.chatReference && (rawItem?.decryptedData?.type === "reaction" || rawItem?.decryptedData?.type === "edit" || rawItem?.type === "edit" || rawItem?.isEdited || rawItem?.type === "reaction")) .forEach((item) => { try { - if(item.decryptedData?.type === "edit"){ + if(item?.decryptedData?.type === "edit"){ organizedChatReferences[item.chatReference] = { ...(organizedChatReferences[item.chatReference] || {}), edit: item.decryptedData, }; - } else if(item?.type === "edit"){ + } else if(item?.type === "edit" || item?.isEdited){ organizedChatReferences[item.chatReference] = { ...(organizedChatReferences[item.chatReference] || {}), edit: item, @@ -287,6 +287,7 @@ const [messageSize, setMessageSize] = useState(0) }); } else { let firstUnreadFound = false; + console.log('combineUIAndExtensionMsgs', combineUIAndExtensionMsgs) const formatted = combineUIAndExtensionMsgs .filter((rawItem) => !rawItem?.chatReference) .map((item) => { @@ -311,15 +312,15 @@ const [messageSize, setMessageSize] = useState(0) const organizedChatReferences = { ...prev }; combineUIAndExtensionMsgs - .filter((rawItem) => rawItem && rawItem.chatReference && (rawItem.decryptedData?.type === "reaction" || rawItem.decryptedData?.type === "edit" || rawItem?.type === "edit" || rawItem?.type === "reaction")) + .filter((rawItem) => rawItem && rawItem.chatReference && (rawItem?.decryptedData?.type === "reaction" || rawItem?.decryptedData?.type === "edit" || rawItem?.type === "edit" || rawItem?.isEdited || rawItem?.type === "reaction")) .forEach((item) => { try { - if(item.decryptedData?.type === "edit"){ + if(item?.decryptedData?.type === "edit"){ organizedChatReferences[item.chatReference] = { ...(organizedChatReferences[item.chatReference] || {}), edit: item.decryptedData, }; - } else if(item?.type === "edit"){ + } else if(item?.type === "edit" || item?.isEdited){ organizedChatReferences[item.chatReference] = { ...(organizedChatReferences[item.chatReference] || {}), edit: item, From 900fe2a2fbebb8a2d955174408430eda4f50c0ba Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 16 Dec 2024 11:20:53 +0200 Subject: [PATCH 016/119] changes to saved pinned apps --- src/App.tsx | 2 +- src/atoms/global.ts | 4 + src/components/Apps/AppsDesktop.tsx | 2 +- src/components/Apps/AppsDevMode.tsx | 2 +- src/components/DesktopSideBar.tsx | 4 +- src/components/Save/Save.tsx | 235 ++++++++++++++++++++++++++-- src/useQortalGetSaveSettings.tsx | 10 +- src/useRetrieveDataLocalStorage.tsx | 5 +- 8 files changed, 241 insertions(+), 23 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index a442e97..01d00e1 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -388,7 +388,7 @@ function App() { const qortalRequestCheckbox1Ref = useRef(null); useRetrieveDataLocalStorage(); - useQortalGetSaveSettings(userInfo?.name); + useQortalGetSaveSettings(userInfo?.name, extState === "authenticated"); const [fullScreen, setFullScreen] = useRecoilState(fullScreenAtom); const [isEnabledDevMode, setIsEnabledDevMode] = useRecoilState(enabledDevModeAtom); diff --git a/src/atoms/global.ts b/src/atoms/global.ts index 846753b..dfb9f82 100644 --- a/src/atoms/global.ts +++ b/src/atoms/global.ts @@ -40,6 +40,10 @@ export const sortablePinnedAppsAtom = atom({ { name: 'Q-Manager', service: 'APP' + }, + { + name: 'Q-Blog', + service: 'APP' } ], }); diff --git a/src/components/Apps/AppsDesktop.tsx b/src/components/Apps/AppsDesktop.tsx index 121dd6e..8797a52 100644 --- a/src/components/Apps/AppsDesktop.tsx +++ b/src/components/Apps/AppsDesktop.tsx @@ -407,7 +407,7 @@ export const AppsDesktop = ({ mode, setMode, show , myName, goToHome, setDesktop /> */} - + {isEnabledDevMode && ( { diff --git a/src/components/Apps/AppsDevMode.tsx b/src/components/Apps/AppsDevMode.tsx index 297db33..0514ce3 100644 --- a/src/components/Apps/AppsDevMode.tsx +++ b/src/components/Apps/AppsDevMode.tsx @@ -282,7 +282,7 @@ export const AppsDevMode = ({ mode, setMode, show , myName, goToHome, setDesktop /> - + { setDesktopViewMode('dev') diff --git a/src/components/DesktopSideBar.tsx b/src/components/DesktopSideBar.tsx index ae55a50..9ee123d 100644 --- a/src/components/DesktopSideBar.tsx +++ b/src/components/DesktopSideBar.tsx @@ -11,7 +11,7 @@ import { useRecoilState } from 'recoil'; import { enabledDevModeAtom } from '../atoms/global'; import { AppsIcon } from '../assets/Icons/AppsIcon'; -export const DesktopSideBar = ({goToHome, setDesktopSideView, toggleSideViewDirects, hasUnreadDirects, isDirects, toggleSideViewGroups,hasUnreadGroups, isGroups, isApps, setDesktopViewMode, desktopViewMode }) => { +export const DesktopSideBar = ({goToHome, setDesktopSideView, toggleSideViewDirects, hasUnreadDirects, isDirects, toggleSideViewGroups,hasUnreadGroups, isGroups, isApps, setDesktopViewMode, desktopViewMode, myName }) => { const [isEnabledDevMode, setIsEnabledDevMode] = useRecoilState(enabledDevModeAtom) return ( @@ -98,7 +98,7 @@ export const DesktopSideBar = ({goToHome, setDesktopSideView, toggleSideViewDire /> */} - + {/* */} {isEnabledDevMode && ( { +import { Spacer } from "../../common/Spacer"; +import { LoadingButton } from "@mui/lab"; +import { saveToLocalStorage } from "../Apps/AppsNavBar"; +export const Save = ({ isDesktop, disableWidth, myName }) => { const [pinnedApps, setPinnedApps] = useRecoilState(sortablePinnedAppsAtom); const [settingsQdnLastUpdated, setSettingsQdnLastUpdated] = useRecoilState( settingsQDNLastUpdatedAtom @@ -31,7 +34,7 @@ export const Save = ({ isDesktop, disableWidth }) => { const [isLoading, setIsLoading] = useState(false); const [infoSnack, setInfoSnack] = useState(null); const [oldPinnedApps, setOldPinnedApps] = useRecoilState(oldPinnedAppsAtom); - + const [anchorEl, setAnchorEl] = useState(null); const { show } = useContext(MyContext); const hasChanged = useMemo(() => { @@ -83,9 +86,7 @@ export const Save = ({ isDesktop, disableWidth }) => { .sendMessage( "ENCRYPT_DATA", { - - data64, - + data64, }, 60000 ) @@ -135,6 +136,7 @@ export const Save = ({ isDesktop, disableWidth }) => { message: "Sucessfully published to QDN", }); setOpenSnack(true); + setAnchorEl(null) } } } catch (error) { @@ -147,20 +149,31 @@ export const Save = ({ isDesktop, disableWidth }) => { setIsLoading(false); } }; + const handlePopupClick = (event) => { + event.stopPropagation(); // Prevent parent onClick from firing + setAnchorEl(event.currentTarget); + }; + + const revertChanges = () => { + setPinnedApps(oldPinnedApps); + saveToLocalStorage("ext_saved_settings", "sortablePinnedApps", null); + setAnchorEl(null) + }; + return ( <> {isDesktop ? ( { /> )} + setAnchorEl(null)} // Close popover on click outside + anchorOrigin={{ + vertical: "bottom", + horizontal: "center", + }} + transformOrigin={{ + vertical: "top", + horizontal: "center", + }} + sx={{ + width: "300px", + maxWidth: "90%", + maxHeight: "80%", + overflow: "auto", + }} + > + + {!myName ? ( + + + You need a registered Qortal name to save your pinned apps to QDN. + + + ) : ( + <> + {hasChanged && ( + + + You have unsaved changes to your pinned apps. Save them to QDN. + + + + Save to QDN + + + {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated > 0 && ( + <> + + Don't like your current local changes? Would you like to + reset to your saved QDN pinned apps? + + + + Revert to QDN + + + )} + {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated === 0 && ( + <> + + Don't like your current local changes? Would you like to + reset to the default pinned apps? + + + + Revert to default + + + )} + + )} + {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated === -100 && ( + + + The app was unable to download your existing QDN-saved pinned + apps. Would you like to overwrite those changes? + + + + Overwrite to QDN + + + )} + {!hasChanged && ( + + + You currently do not have any changes to your pinned apps + + + + )} + + )} + + + { ); data = await res.text(); - if(!data) throw new Error('Unable to fetch publish') const decryptedKey: any = await decryptResource(data); @@ -53,7 +52,8 @@ const getPublishRecord = async (myName) => { } }; -export const useQortalGetSaveSettings = (myName) => { + +export const useQortalGetSaveSettings = (myName, isAuthenticated) => { const setSortablePinnedApps = useSetRecoilState(sortablePinnedAppsAtom); const setCanSave = useSetRecoilState(canSaveSettingToQdnAtom); const setSettingsQDNLastUpdated = useSetRecoilState(settingsQDNLastUpdatedAtom); @@ -67,7 +67,7 @@ export const useQortalGetSaveSettings = (myName) => { const settings = await getPublish(myName) if(settings?.sortablePinnedApps && timestamp > settingsLocalLastUpdated){ setSortablePinnedApps(settings.sortablePinnedApps) - + setSettingsQDNLastUpdated(timestamp || 0) } else if(settings?.sortablePinnedApps){ setSettingsQDNLastUpdated(timestamp || 0) @@ -87,8 +87,8 @@ export const useQortalGetSaveSettings = (myName) => { } }, []) useEffect(()=> { - if(!myName || !settingsLocalLastUpdated) return + if(!myName || !settingsLocalLastUpdated || !isAuthenticated) return getSavedSettings(myName, settingsLocalLastUpdated) - }, [getSavedSettings, myName, settingsLocalLastUpdated]) + }, [getSavedSettings, myName, settingsLocalLastUpdated, isAuthenticated]) } diff --git a/src/useRetrieveDataLocalStorage.tsx b/src/useRetrieveDataLocalStorage.tsx index 88e93f4..8f808ab 100644 --- a/src/useRetrieveDataLocalStorage.tsx +++ b/src/useRetrieveDataLocalStorage.tsx @@ -23,8 +23,11 @@ export const useRetrieveDataLocalStorage = () => { const pinnedAppsLocal = fetchFromLocalStorage('ext_saved_settings') if(pinnedAppsLocal?.sortablePinnedApps){ setSortablePinnedApps(pinnedAppsLocal?.sortablePinnedApps) + setSettingsLocalLastUpdated(pinnedAppsLocal?.timestamp || -1) + } else { + setSettingsLocalLastUpdated(-1) } - setSettingsLocalLastUpdated(pinnedAppsLocal?.timestamp || -1) + }, []) useEffect(()=> { From c8a08c9fa365f8da8ebe8bc5dcd6db665ecae362 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 16 Dec 2024 11:38:06 +0200 Subject: [PATCH 017/119] fix mute --- src/background.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/background.ts b/src/background.ts index fa786b9..845df71 100644 --- a/src/background.ts +++ b/src/background.ts @@ -2964,6 +2964,9 @@ function setupMessageListener() { case "publishOnQDN": publishOnQDNCase(request, event); break; + case "getUserSettings": + getUserSettingsCase(request, event); + break; case "handleActiveGroupDataFromSocket": handleActiveGroupDataFromSocketCase(request, event); break; From d77b6caed4fe1c053b0561f3c1d970cfd7834b2e Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 16 Dec 2024 11:48:42 +0200 Subject: [PATCH 018/119] fixes --- src/background.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/background.ts b/src/background.ts index 845df71..c6fdb62 100644 --- a/src/background.ts +++ b/src/background.ts @@ -2220,7 +2220,7 @@ export async function createGroup({ const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } export async function inviteToGroup({ groupId, qortalAddress, inviteTime }) { From 4c4ee5b1d7686a32ebd6020f29c1746c581fbde7 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 16 Dec 2024 14:00:43 +0200 Subject: [PATCH 019/119] added force publish option for admins --- src/components/Chat/AdminSpace.tsx | 5 +- src/components/Chat/AdminSpaceInner.tsx | 376 +++++++++++++-------- src/components/Chat/ChatGroup.tsx | 23 +- src/components/Chat/CreateCommonSecret.tsx | 6 +- src/components/Group/Group.tsx | 14 +- 5 files changed, 269 insertions(+), 155 deletions(-) diff --git a/src/components/Chat/AdminSpace.tsx b/src/components/Chat/AdminSpace.tsx index f340e45..6eaf541 100644 --- a/src/components/Chat/AdminSpace.tsx +++ b/src/components/Chat/AdminSpace.tsx @@ -27,7 +27,8 @@ export const AdminSpace = ({ myAddress, hide, defaultThread, - setDefaultThread + setDefaultThread, + setIsForceShowCreationKeyPopup }) => { const { rootHeight } = useContext(MyContext); const [isMoved, setIsMoved] = useState(false); @@ -59,7 +60,7 @@ export const AdminSpace = ({ justifyContent: 'center', paddingTop: '25px' }}>Sorry, this space is only for Admins.} - {isAdmin && } + {isAdmin && }
); diff --git a/src/components/Chat/AdminSpaceInner.tsx b/src/components/Chat/AdminSpaceInner.tsx index 1307ad1..65852b6 100644 --- a/src/components/Chat/AdminSpaceInner.tsx +++ b/src/components/Chat/AdminSpaceInner.tsx @@ -1,150 +1,248 @@ -import React, { useCallback, useContext, useEffect, useState } from 'react' -import { MyContext, getArbitraryEndpointReact, getBaseApiReact } from '../../App'; -import { Box, Button, Typography } from '@mui/material'; -import { decryptResource, validateSecretKey } from '../Group/Group'; -import { getFee } from '../../background'; -import { base64ToUint8Array } from '../../qdn/encryption/group-encryption'; -import { uint8ArrayToObject } from '../../backgroundFunctions/encryption'; -import { formatTimestampForum } from '../../utils/time'; -import { Spacer } from '../../common/Spacer'; +import React, { useCallback, useContext, useEffect, useState } from "react"; +import { + MyContext, + getArbitraryEndpointReact, + getBaseApiReact, +} from "../../App"; +import { Box, Button, Typography } from "@mui/material"; +import { + decryptResource, + getPublishesFromAdmins, + validateSecretKey, +} from "../Group/Group"; +import { getFee } from "../../background"; +import { base64ToUint8Array } from "../../qdn/encryption/group-encryption"; +import { uint8ArrayToObject } from "../../backgroundFunctions/encryption"; +import { formatTimestampForum } from "../../utils/time"; +import { Spacer } from "../../common/Spacer"; +export const getPublishesFromAdminsAdminSpace = async ( + admins: string[], + groupId +) => { + const queryString = admins.map((name) => `name=${name}`).join("&"); + const url = `${getBaseApiReact()}${getArbitraryEndpointReact()}?mode=ALL&service=DOCUMENT_PRIVATE&identifier=admins-symmetric-qchat-group-${groupId}&exactmatchnames=true&limit=0&reverse=true&${queryString}&prefix=true`; + const response = await fetch(url); + if (!response.ok) { + throw new Error("network error"); + } + const adminData = await response.json(); -export const getPublishesFromAdminsAdminSpace = async (admins: string[], groupId) => { - const queryString = admins.map((name) => `name=${name}`).join("&"); - const url = `${getBaseApiReact()}${getArbitraryEndpointReact()}?mode=ALL&service=DOCUMENT_PRIVATE&identifier=admins-symmetric-qchat-group-${ - groupId - }&exactmatchnames=true&limit=0&reverse=true&${queryString}&prefix=true`; - const response = await fetch(url); - if (!response.ok) { - throw new Error("network error"); + const filterId = adminData.filter( + (data: any) => data.identifier === `admins-symmetric-qchat-group-${groupId}` + ); + if (filterId?.length === 0) { + return false; + } + const sortedData = filterId.sort((a: any, b: any) => { + // Get the most recent date for both a and b + const dateA = a.updated ? new Date(a.updated) : new Date(a.created); + const dateB = b.updated ? new Date(b.updated) : new Date(b.created); + + // Sort by most recent + return dateB.getTime() - dateA.getTime(); + }); + + return sortedData[0]; +}; + +export const AdminSpaceInner = ({ + selectedGroup, + adminsWithNames, + setIsForceShowCreationKeyPopup, +}) => { + const [adminGroupSecretKey, setAdminGroupSecretKey] = useState(null); + const [isFetchingAdminGroupSecretKey, setIsFetchingAdminGroupSecretKey] = + useState(true); + const [isFetchingGroupSecretKey, setIsFetchingGroupSecretKey] = + useState(true); + const [ + adminGroupSecretKeyPublishDetails, + setAdminGroupSecretKeyPublishDetails, + ] = useState(null); + const [groupSecretKeyPublishDetails, setGroupSecretKeyPublishDetails] = + useState(null); + const [isLoadingPublishKey, setIsLoadingPublishKey] = useState(false); + const { show, setTxList, setInfoSnackCustom, setOpenSnackGlobal } = + useContext(MyContext); + + const getAdminGroupSecretKey = useCallback(async () => { + try { + if (!selectedGroup) return; + const getLatestPublish = await getPublishesFromAdminsAdminSpace( + adminsWithNames.map((admin) => admin?.name), + selectedGroup + ); + if (getLatestPublish === false) return; + let data; + + const res = await fetch( + `${getBaseApiReact()}/arbitrary/DOCUMENT_PRIVATE/${ + getLatestPublish.name + }/${getLatestPublish.identifier}?encoding=base64` + ); + data = await res.text(); + + const decryptedKey: any = await decryptResource(data); + const dataint8Array = base64ToUint8Array(decryptedKey.data); + const decryptedKeyToObject = uint8ArrayToObject(dataint8Array); + if (!validateSecretKey(decryptedKeyToObject)) + throw new Error("SecretKey is not valid"); + setAdminGroupSecretKey(decryptedKeyToObject); + setAdminGroupSecretKeyPublishDetails(getLatestPublish); + } catch (error) { + } finally { + setIsFetchingAdminGroupSecretKey(false); } - const adminData = await response.json(); - - const filterId = adminData.filter( - (data: any) => - data.identifier === `admins-symmetric-qchat-group-${groupId}` - ); - if (filterId?.length === 0) { - return false; + }, [adminsWithNames, selectedGroup]); + + const getGroupSecretKey = useCallback(async () => { + try { + if (!selectedGroup) return; + const getLatestPublish = await getPublishesFromAdmins( + adminsWithNames.map((admin) => admin?.name), + selectedGroup + ); + if (getLatestPublish === false) setGroupSecretKeyPublishDetails(false); + setGroupSecretKeyPublishDetails(getLatestPublish); + } catch (error) { + } finally { + setIsFetchingGroupSecretKey(false); } - const sortedData = filterId.sort((a: any, b: any) => { - // Get the most recent date for both a and b - const dateA = a.updated ? new Date(a.updated) : new Date(a.created); - const dateB = b.updated ? new Date(b.updated) : new Date(b.created); - - // Sort by most recent - return dateB.getTime() - dateA.getTime(); - }); - - return sortedData[0]; + }, [adminsWithNames, selectedGroup]); + + const createCommonSecretForAdmins = async () => { + try { + const fee = await getFee("ARBITRARY"); + await show({ + message: "Would you like to perform an ARBITRARY transaction?", + publishFee: fee.fee + " QORT", + }); + setIsLoadingPublishKey(true); + + window + .sendMessage("encryptAndPublishSymmetricKeyGroupChatForAdmins", { + groupId: selectedGroup, + previousData: null, + admins: adminsWithNames, + }) + .then((response) => { + if (!response?.error) { + setInfoSnackCustom({ + type: "success", + message: + "Successfully re-encrypted secret key. It may take a couple of minutes for the changes to propagate. Refresh the group in 5 mins.", + }); + setOpenSnackGlobal(true); + return; + } + setInfoSnackCustom({ + type: "error", + message: response?.error || "unable to re-encrypt secret key", + }); + setOpenSnackGlobal(true); + }) + .catch((error) => { + setInfoSnackCustom({ + type: "error", + message: error?.message || "unable to re-encrypt secret key", + }); + setOpenSnackGlobal(true); + }); + } catch (error) {} }; -export const AdminSpaceInner = ({selectedGroup, adminsWithNames}) => { - const [adminGroupSecretKey, setAdminGroupSecretKey] = useState(null) - const [isFetchingAdminGroupSecretKey, setIsFetchingAdminGroupSecretKey] = useState(true) - const [adminGroupSecretKeyPublishDetails, setAdminGroupSecretKeyPublishDetails] = useState(null) - - const [isLoadingPublishKey, setIsLoadingPublishKey] = useState(false) - const { show, setTxList, setInfoSnackCustom, - setOpenSnackGlobal } = useContext(MyContext); - - - const getAdminGroupSecretKey = useCallback(async ()=> { - try { - if(!selectedGroup) return - const getLatestPublish = await getPublishesFromAdminsAdminSpace(adminsWithNames.map((admin)=> admin?.name), selectedGroup) - if(getLatestPublish === false) return - let data; - - const res = await fetch( - `${getBaseApiReact()}/arbitrary/DOCUMENT_PRIVATE/${getLatestPublish.name}/${ - getLatestPublish.identifier - }?encoding=base64` - ); - data = await res.text(); - - const decryptedKey: any = await decryptResource(data); - const dataint8Array = base64ToUint8Array(decryptedKey.data); - const decryptedKeyToObject = uint8ArrayToObject(dataint8Array); - if (!validateSecretKey(decryptedKeyToObject)) - throw new Error("SecretKey is not valid"); - setAdminGroupSecretKey(decryptedKeyToObject) - setAdminGroupSecretKeyPublishDetails(getLatestPublish) - } catch (error) { - - } finally { - setIsFetchingAdminGroupSecretKey(false) - } - }, [adminsWithNames, selectedGroup]) - - const createCommonSecretForAdmins = async ()=> { - try { - const fee = await getFee('ARBITRARY') - await show({ - message: "Would you like to perform an ARBITRARY transaction?" , - publishFee: fee.fee + ' QORT' - }) - setIsLoadingPublishKey(true) - - - window.sendMessage("encryptAndPublishSymmetricKeyGroupChatForAdmins", { - groupId: selectedGroup, - previousData: null, - admins: adminsWithNames - }) - .then((response) => { - - if (!response?.error) { - setInfoSnackCustom({ - type: "success", - message: "Successfully re-encrypted secret key. It may take a couple of minutes for the changes to propagate. Refresh the group in 5 mins.", - }); - setOpenSnackGlobal(true); - return - } - setInfoSnackCustom({ - type: "error", - message: response?.error || "unable to re-encrypt secret key", - }); - setOpenSnackGlobal(true); - }) - .catch((error) => { - setInfoSnackCustom({ - type: "error", - message: error?.message || "unable to re-encrypt secret key", - }); - setOpenSnackGlobal(true); - }); - - } catch (error) { - - } - } - useEffect(() => { - getAdminGroupSecretKey() - }, [getAdminGroupSecretKey]); + useEffect(() => { + getAdminGroupSecretKey(); + getGroupSecretKey(); + }, [getAdminGroupSecretKey, getGroupSecretKey]); return ( - + + Reminder: After publishing the key, it will take a couple of minutes for it to appear. Please just wait. - - {isFetchingAdminGroupSecretKey && Fetching Admins secret keys} - {!isFetchingAdminGroupSecretKey && !adminGroupSecretKey && No secret key published yet} - {adminGroupSecretKeyPublishDetails && ( - Last encryption date: {formatTimestampForum(adminGroupSecretKeyPublishDetails?.updated || adminGroupSecretKeyPublishDetails?.created)} + + {isFetchingGroupSecretKey && ( + Fetching Group secret key publishes )} - + {!isFetchingGroupSecretKey && + groupSecretKeyPublishDetails === false && ( + No secret key published yet + )} + {groupSecretKeyPublishDetails && ( + + Last encryption date:{" "} + {formatTimestampForum( + groupSecretKeyPublishDetails?.updated || + groupSecretKeyPublishDetails?.created + )}{" "} + {` by ${groupSecretKeyPublishDetails?.name}`} + + )} + + + This key is to encrypt GROUP related content. This is the only one used in this UI as of now. All group members will be able to see content encrypted with this key. + + + + {isFetchingAdminGroupSecretKey && ( + Fetching Admins secret key + )} + {!isFetchingAdminGroupSecretKey && !adminGroupSecretKey && ( + No secret key published yet + )} + {adminGroupSecretKeyPublishDetails && ( + + Last encryption date:{" "} + {formatTimestampForum( + adminGroupSecretKeyPublishDetails?.updated || + adminGroupSecretKeyPublishDetails?.created + )} + + )} + + + This key is to encrypt ADMIN related content. Only admins would see content encrypted with it. - ) -} + ); +}; diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index b7f7d4f..f4ae843 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -54,14 +54,14 @@ const [messageSize, setMessageSize] = useState(0) const handleUpdateRef = useRef(null); - const getTimestampEnterChat = async () => { + const getTimestampEnterChat = async (selectedGroup) => { try { return new Promise((res, rej) => { window.sendMessage("getTimestampEnterChat") .then((response) => { if (!response?.error) { - if(response && selectedGroup && response[selectedGroup]){ - lastReadTimestamp.current = response[selectedGroup] + if(response && selectedGroup){ + lastReadTimestamp.current = response[selectedGroup] || undefined window.sendMessage("addTimestampEnterChat", { timestamp: Date.now(), groupId: selectedGroup @@ -89,8 +89,9 @@ const [messageSize, setMessageSize] = useState(0) }; useEffect(()=> { - getTimestampEnterChat() - }, []) + if(!selectedGroup) return + getTimestampEnterChat(selectedGroup) + }, [selectedGroup]) @@ -208,7 +209,9 @@ const [messageSize, setMessageSize] = useState(0) const formatted = combineUIAndExtensionMsgs .filter((rawItem) => !rawItem?.chatReference) .map((item) => { - + const additionalFields = item?.data === 'NDAwMQ==' ? { + text: "

First group key created.

" + } : {} return { ...item, id: item.signature, @@ -216,6 +219,7 @@ const [messageSize, setMessageSize] = useState(0) repliedTo: item?.repliedTo || item?.decryptedData?.repliedTo, unread: item?.sender === myAddress ? false : !!item?.chatReference ? false : true, isNotEncrypted: !!item?.messageText, + ...additionalFields } }); setMessages((prev) => [...prev, ...formatted]); @@ -287,10 +291,12 @@ const [messageSize, setMessageSize] = useState(0) }); } else { let firstUnreadFound = false; - console.log('combineUIAndExtensionMsgs', combineUIAndExtensionMsgs) const formatted = combineUIAndExtensionMsgs .filter((rawItem) => !rawItem?.chatReference) .map((item) => { + const additionalFields = item?.data === 'NDAwMQ==' ? { + text: "

First group key created.

" + } : {} const divide = lastReadTimestamp.current && !firstUnreadFound && item.timestamp > lastReadTimestamp.current && myAddress !== item?.sender; if(divide){ @@ -303,7 +309,8 @@ const [messageSize, setMessageSize] = useState(0) repliedTo: item?.repliedTo || item?.decryptedData?.repliedTo, isNotEncrypted: !!item?.messageText, unread: false, - divide + divide, + ...additionalFields } }); setMessages(formatted); diff --git a/src/components/Chat/CreateCommonSecret.tsx b/src/components/Chat/CreateCommonSecret.tsx index c371c55..468b35f 100644 --- a/src/components/Chat/CreateCommonSecret.tsx +++ b/src/components/Chat/CreateCommonSecret.tsx @@ -8,7 +8,7 @@ import { decryptResource, getGroupAdmins, validateSecretKey } from '../Group/Gro import { base64ToUint8Array } from '../../qdn/encryption/group-encryption'; import { uint8ArrayToObject } from '../../backgroundFunctions/encryption'; -export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, secretKeyDetails, userInfo, noSecretKey, setHideCommonKeyPopup}) => { +export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, secretKeyDetails, userInfo, noSecretKey, setHideCommonKeyPopup, setIsForceShowCreationKeyPopup}) => { const { show, setTxList } = useContext(MyContext); const [openSnack, setOpenSnack] = React.useState(false); @@ -131,6 +131,9 @@ export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, sec ]); } setIsLoading(false); + setTimeout(() => { + setIsForceShowCreationKeyPopup(false) + }, 1000); }) .catch((error) => { console.error("Failed to encrypt and publish symmetric key for group chat:", error.message || "An error occurred"); @@ -173,6 +176,7 @@ export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, sec }}>
diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index c699f48..ebfa5e2 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -432,7 +432,7 @@ export const Group = ({ const [appsModeDev, setAppsModeDev] = useState('home') const [isOpenSideViewDirects, setIsOpenSideViewDirects] = useState(false) const [isOpenSideViewGroups, setIsOpenSideViewGroups] = useState(false) - + const [isForceShowCreationKeyPopup, setIsForceShowCreationKeyPopup] = useState(false) const [groupsProperties, setGroupsProperties] = useState({}) @@ -2360,8 +2360,11 @@ export const Group = ({ setDefaultThread={setDefaultThread} isPrivate={isPrivate} /> - + {groupSection === "adminSpace" && ( + + )} + )} @@ -2374,11 +2377,11 @@ export const Group = ({ zIndex: 100, }} > - {isPrivate && admins.includes(myAddress) && + {(isPrivate && admins.includes(myAddress) && shouldReEncrypt && triedToFetchSecretKey && !firstSecretKeyInCreation && - !hideCommonKeyPopup && ( + !hideCommonKeyPopup) || isForceShowCreationKeyPopup && ( Date: Mon, 16 Dec 2024 14:11:02 +0200 Subject: [PATCH 020/119] update version --- electron/package.json | 2 +- src/ExtStates/NotAuthenticated.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electron/package.json b/electron/package.json index 78de618..ec3a789 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "qortal-hub", - "version": "0.3.7", + "version": "0.3.8", "description": "A desktop app that gives you access to the Qortal network", "author": { "name": "" diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index d560e7f..548ef0b 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -23,7 +23,7 @@ import { set } from "lodash"; import { cleanUrl, isUsingLocal } from "../background"; const manifestData = { - version: "0.3.7", + version: "0.3.8", }; export const NotAuthenticated = ({ From ac7b00662ff261d1a06666a2d89747432d9b74a5 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 16 Dec 2024 16:18:25 +0200 Subject: [PATCH 021/119] fix local node auth --- src/ExtStates/NotAuthenticated.tsx | 31 ++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 548ef0b..a386186 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -82,8 +82,14 @@ export const NotAuthenticated = ({ const data = await response.json(); if (data?.height) { setHasLocalNode(true); + return true } - } catch (error) {} + return false + + } catch (error) { + return false + + } }, []); useEffect(() => { @@ -122,8 +128,9 @@ export const NotAuthenticated = ({ const validateApiKey = useCallback(async (key, fromStartUp) => { try { if (!currentNodeRef.current) return; + const stillHasLocal = await checkIfUserHasLocalNode() const isLocalKey = cleanUrl(key?.url) === "127.0.0.1:12391"; - if (isLocalKey && !hasLocalNodeRef.current && !fromStartUp) { + if (isLocalKey && !stillHasLocal && !fromStartUp) { throw new Error("Please turn on your local node"); } const isCurrentNodeLocal = @@ -185,6 +192,26 @@ export const NotAuthenticated = ({ } catch (error) { setIsValidApiKey(false); setUseLocalNode(false); + if(fromStartUp){ + setCurrentNode({ + url: "http://127.0.0.1:12391", + }); + window + .sendMessage("setApiKey", null) + .then((response) => { + if (response) { + setApiKey(null); + handleSetGlobalApikey(null); + } + }) + .catch((error) => { + console.error( + "Failed to set API key:", + error.message || "An error occurred" + ); + }); + return + } setInfoSnack({ type: "error", message: error?.message || "Select a valid apikey", From 0f95f947eccd2a988a5996ad4fc3bc88cdb35517 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Tue, 17 Dec 2024 04:03:37 +0200 Subject: [PATCH 022/119] change unread color --- src/App.tsx | 6 ++--- src/Wallets.tsx | 6 ++--- src/components/Apps/AppsDesktop.tsx | 4 ++-- src/components/Apps/AppsNavBarDesktop.tsx | 4 ++-- src/components/Chat/ChatDirect.tsx | 2 +- src/components/Chat/ChatGroup.tsx | 2 +- src/components/Chat/ChatList.tsx | 2 +- src/components/Chat/GroupAnnouncements.tsx | 2 +- src/components/Desktop/DesktopFooter.tsx | 4 ++-- src/components/Desktop/DesktopHeader.tsx | 6 ++--- src/components/DesktopSideBar.tsx | 2 +- src/components/Embeds/AttachmentEmbed.tsx | 2 +- src/components/Embeds/ImageEmbed.tsx | 2 +- src/components/Embeds/PollEmbed.tsx | 2 +- src/components/Group/AddGroupList.tsx | 2 +- src/components/Group/Forum/NewThread.tsx | 2 -- src/components/Group/Group.tsx | 8 +++---- src/components/Group/GroupMenu.tsx | 14 ++++++------ .../Group/ListOfGroupPromotions.tsx | 2 +- src/components/Group/UserListOfInvites.tsx | 2 +- src/components/Mobile/MobileFooter.tsx | 4 ++-- src/components/Mobile/MobileHeader.tsx | 22 +++++++++---------- src/components/Save/Save.tsx | 8 +++---- src/index.css | 3 ++- 24 files changed, 56 insertions(+), 57 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 01d00e1..f6bffc6 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2793,11 +2793,11 @@ function App() { accept diff --git a/src/components/Chat/CreateCommonSecret.tsx b/src/components/Chat/CreateCommonSecret.tsx index 468b35f..e729386 100644 --- a/src/components/Chat/CreateCommonSecret.tsx +++ b/src/components/Chat/CreateCommonSecret.tsx @@ -8,7 +8,7 @@ import { decryptResource, getGroupAdmins, validateSecretKey } from '../Group/Gro import { base64ToUint8Array } from '../../qdn/encryption/group-encryption'; import { uint8ArrayToObject } from '../../backgroundFunctions/encryption'; -export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, secretKeyDetails, userInfo, noSecretKey, setHideCommonKeyPopup, setIsForceShowCreationKeyPopup}) => { +export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, secretKeyDetails, userInfo, noSecretKey, setHideCommonKeyPopup, setIsForceShowCreationKeyPopup, isForceShowCreationKeyPopup}) => { const { show, setTxList } = useContext(MyContext); const [openSnack, setOpenSnack] = React.useState(false); @@ -164,7 +164,7 @@ export const CreateCommonSecret = ({groupId, secretKey, isOwner, myAddress, sec The latest group secret key was published by a non-owner. As the owner of the group please re-encrypt the key as a safeguard - ): ( + ): isForceShowCreationKeyPopup ? null : ( The group member list has changed. Please re-encrypt the secret key. diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index dab3254..f97292b 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -1167,6 +1167,7 @@ export const Group = ({ setSecretKeyDetails(null); setNewEncryptionNotification(null); setMemberCountFromSecretKeyData(null); + setIsForceShowCreationKeyPopup(false) setSelectedGroup(null); setSelectedDirect(null); setGroups([]); @@ -1296,6 +1297,7 @@ export const Group = ({ setAdminsWithNames([]); setMembers([]); setMemberCountFromSecretKeyData(null); + setIsForceShowCreationKeyPopup(false) setTriedToFetchSecretKey(false); setFirstSecretKeyInCreation(false); setGroupSection("chat"); @@ -1349,6 +1351,7 @@ export const Group = ({ setAdminsWithNames([]); setMembers([]); setMemberCountFromSecretKeyData(null); + setIsForceShowCreationKeyPopup(false) setTriedToFetchSecretKey(false); setFirstSecretKeyInCreation(false); setGroupSection("announcement"); @@ -1408,6 +1411,7 @@ export const Group = ({ setAdminsWithNames([]); setMembers([]); setMemberCountFromSecretKeyData(null); + setIsForceShowCreationKeyPopup(false) setTriedToFetchSecretKey(false); setFirstSecretKeyInCreation(false); setGroupSection("forum"); @@ -1512,6 +1516,7 @@ export const Group = ({ }; + const renderDirects = () => { return (
{ setSelectedGroup(group); @@ -2377,12 +2383,13 @@ export const Group = ({ zIndex: 100, }} > - {(isPrivate && admins.includes(myAddress) && + {((isPrivate && admins.includes(myAddress) && shouldReEncrypt && triedToFetchSecretKey && !firstSecretKeyInCreation && - !hideCommonKeyPopup) || isForceShowCreationKeyPopup && ( + !hideCommonKeyPopup) || isForceShowCreationKeyPopup) && ( Date: Tue, 17 Dec 2024 20:11:33 +0200 Subject: [PATCH 025/119] update electron builder config --- electron/assets/png/1024x1024.png | Bin 0 -> 465966 bytes electron/assets/png/128x128.png | Bin 0 -> 17673 bytes electron/assets/png/16x16.png | Bin 0 -> 668 bytes electron/assets/png/24x24.png | Bin 0 -> 1401 bytes electron/assets/png/256x256.png | Bin 0 -> 48544 bytes electron/assets/png/32x32.png | Bin 0 -> 1851 bytes electron/assets/png/48x48.png | Bin 0 -> 4778 bytes electron/assets/png/512x512.png | Bin 0 -> 161313 bytes electron/assets/png/64x64.png | Bin 0 -> 6780 bytes electron/assets/png/96x96.png | Bin 0 -> 11692 bytes electron/electron-builder.config.json | 35 +++++++++++++++++--------- electron/package.json | 4 ++- 12 files changed, 26 insertions(+), 13 deletions(-) create mode 100644 electron/assets/png/1024x1024.png create mode 100644 electron/assets/png/128x128.png create mode 100644 electron/assets/png/16x16.png create mode 100644 electron/assets/png/24x24.png create mode 100644 electron/assets/png/256x256.png create mode 100644 electron/assets/png/32x32.png create mode 100644 electron/assets/png/48x48.png create mode 100644 electron/assets/png/512x512.png create mode 100644 electron/assets/png/64x64.png create mode 100644 electron/assets/png/96x96.png diff --git a/electron/assets/png/1024x1024.png b/electron/assets/png/1024x1024.png new file mode 100644 index 0000000000000000000000000000000000000000..94e2fa36cd1de8ed8b98fa9d7fcbc422e3949ac8 GIT binary patch literal 465966 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�bG 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%0Dbrtd}^6MVYKF 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�&GZ)nEuw1!vA3!N83RRlYa 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%0D$2m$)~+G}r9ukY=BD9I86ogkS! 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 literal 0 HcmV?d00001 diff --git a/electron/assets/png/128x128.png b/electron/assets/png/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..ff31feea84c5ae692d7a79e348b20880c87f7975 GIT binary patch literal 17673 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 jh1Z8&I1)GMg$q)$~Wj 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 z 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 literal 0 HcmV?d00001 diff --git a/electron/assets/png/48x48.png b/electron/assets/png/48x48.png new file mode 100644 index 0000000000000000000000000000000000000000..f7d98a4c84273eca6ffe4c1a2434f70735a469b3 GIT binary patch literal 4778 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 Hd&c}5cl$f6 literal 0 HcmV?d00001 diff --git a/electron/assets/png/512x512.png b/electron/assets/png/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..9ad9dcb955aa288bfb37df3105f82f25e868f05b GIT binary patch literal 161313 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

n6|=fF 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ð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 HM>#vN{_-1Vu#NNKdxdGnefji9i|eF#%gj>L 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ⅈDo$uRB*?;riZWYA`UrK?{4z2!IRM2P zfjlUVmQVD&?4&Pt6W^nlT~A25mH^9@jHLR7&KJFT?HM~GA_@F^8Pyap z#(zLK2paf%eEY6|9XHHG*=Kawm!g%EPB^SQY+Clae@N-0^q|l$->I7zU0PFEdni;Vm&3)He=C6NxV1I^ zRAwR!uD>+L89Mnved{j7FhZOxFY@r`2jH(0-Lv|fs}s%>={*Zqn*abY`{wVv+4tcC zAXcYtJ_qvaEqlabG3cKL{wBno1n`=l$L@l~)&PrRKTU-ddrEYINgeiO& zfLrF`xFibbZU;=^-D|BBZ{2FiwLw4?xQvjRc_w9E72~4C%DqYu5;D{Cl?1c_K1l;v zN&UVYkW%lh;m2AsY@V!E1D?6^tR&U3eRt3|YnGFMc)T6rq~Y~$3a?uMWNLZtc01^H zJE(}2Y=i0Ab!_`VI&S7iIL@|pRP_73I%ct;nZJX-QduCeWzYKGl&81BM0ql!i2J_8 zk{l5X1bUl$ThxxBeptvFjrSFhFNIlN?NwZ+%QCtz?@J1b<`e?5TJ})4&+R)0#7IEX zfir9eQ|t5A2a|!n=}kXsHzkB9NC32-?6(4vY38q8r`5?zo%K_mHbJyWlbEt(vQaU? zz~38E5bwCyE%P}uTykGOVz~MQpa*YO1N+%50~&`|cw{33NEU&7=*}Py@*ik>visc0 zXVf5JRwpHFR$`{flLjda*79qg1}1HAnLJKYA3S~EYU2%`P*jc@HgVt zIsm9ji-E2JLnoUJFU1LB+tb{xNuSkVQa>*MX3avAQ=OK(U&b|S@2Z%$S?4j>i*}If z%b^bRR!3{MnXbW^N?h;qZ1)>UBW1hbbFF<9lUwTmZDY{#5Gu6yfi*;BY_&bKw*W{w zYI@@*8>x+F%%+knvX+LF&r1jj*gNZeR4}Pqnf2R!PeTLzV-_A@9@IRD?ObQ#^*Ps< zvF1OrM&y~l#CAP3T^@c5DZln`%=FRx1sof^i+kFFwi5>$Goxzu7ir-CNWjmX@#KW7 zO#qfQdzfj*&F-$RL-EEjys<>kk_+JFB?HbP&CK0=CHEKw{5nwSdjAl_*0 z*hB{u<<#%DOd#5nchiR*EUe0^^zL_RBOYKW<@YA6&wbW_*Y0WgT#LsTqJ68lDTWaV z0U_U7iS0w_Q`VpJVoG3wS*N_HL=^ZTE%`YJq5<&K?{48s8i z__*dXT%|t;|6X>B<2w}$@QLJcA1JSzBZI>t%usf^TIhfg_zUHEwwZk?eQT0R*NM~Q znESvVXWYA(5aqF5EurJq{DG40>AN*z=8w=74E`E=#1>O54YzJ4@P~uH5p%b85ebNj zw0I2uexfUbKR?sK->nilMF|=FyL@n4C0Uj(zl~Lse43JdZ*}KIg{$WTs3d&-_hN4- zNbwsH;4L83d1{FOXv+d*awSjt8p2u6&K(GEe#d3YAArttS{@iyO#z;DCcglHhE$6- zX>*rhtz$0$(%uT5LO-H7r&ygLFDpbVFAqquc3cB!{3HG?NDrS}Lig3+ZW) zGSK($JG3&+sc>)rR<8Gk*oId7c_-~W)~!(8>Q;7Y#3y}sf|BKdziaRhRJ+dIvDfBD9!vWg{~y0dGczn zmd9m8y0<^Ka{>SIT;qSHd79rz;+8ZSoEGv#ihS-qE4;5f$>yj4Pky+11OR}021^L^ zFc|oX__BaGXDyZmU;=1LufwRwl8M5Us`Q;9(kunAgLQbjOfhL;Ie-EbN&joM1hA*A z^uM{!ZrnMi%d8(Yph#x5IFG$6Qf9dCLC7%9I~G9SSP`x%Q!ccW&rzsqy%N7ON^OWZ z%zvCu`?*3g9260Kp>Ub@>*gJAQbXSGX_jupkjbO#DcTuuj;i{0dnW@lH}||tnLSg< zGb2k#CW>$EA&3)_3P233dUd9sww`(6N_$$R&aQU)JKuA`e)JKfDW`oN*}d4nx-6C$ z^Q41k;qLH9z*k3~IsLiEk@TG{{eF^lOF`PJc-?@)I=U zzT8wZ{C?|en~8*@oLjAW6V078r~$6ZP=*)9R$vzO?Nde1K_ST^;E{Cno5+jTp&g(i z_EH#D*w!B@E&5CCl7S(>KXpKkJFYR7v-DIsN_0&&d(kML9Fqm0=2!1seyEd)au-1C z5|CLi$&|n!=r!oYo{H5*b%MPI%Jf}0>jgQS=Gdh)GWREkJev7)``L2DpprD?1pQ5K zb}PR0dQN>wAuW^{_?sSInfXf}7v~S}O+TMETxlNwF~v8L06CCnb5fH(aR9d2c2NKN z%yMhs-YqgTDw;I_E~{s4u}Nu3S)WRI(Dpwy>qb-XW)cm-H?3_>fvrGx+@&ei28N&! zi;I`h#Z1`xzyN_W9BtQ2iIwj%h&NWKVRaCfhcMedYMuHFmdm>+23=o(R#z;(XAbnR z&3HorTHDA#b*9Mkc1{KLh*v|`DjsrV)8oW z1B7~9(~qcnI}KHpF`{Gst`I@vhzw`8dyM$ z3+MhG&L{O52|)MCZuf>xErXOJl~BS~78ZWXGEDq%e}D<-FT)5>4?Rum;Lg%1<4Xw2 z{S{OMaP`p(lV(X(LGy2p%keRIK3Z71=Lq1bA z0oaV*w72gHaAjn2BA!-W+umO?K-_cNMuZoOXZwY=rNerLPLbkeiD#C5)Mj2Qe+JGm zja#e4IRiJWm5~#PV`f(~k#UT1K6Q{is_easVDbc#6+}NS_|`0tc^c0AIrvhk0<#KY zilO0eCDK>1#QVC={1?S_@VD{}X8!zK^%1cuqk(_s21G2tGyl+0b2>HBNRi}E{Luh^ z;EECeu<};;0V>+Pjv2W3o_uF(NX}R-?XIMqr3UbX*>$~mZ4HZ`E$dso4$MY#8T(-J zYUVYuZ0%@eouO?rlC;4XuK_lt*~`)E=&aw!kQGH!5iTLb0E^XS29p7}F37?r-q zTZ8jy4T*@T#4!m%y2nU?U@!Q)qqEpjQSWCz{EFnztXH(=&s+V5yAjNqsZ(0>kBN)v z>+)xh_jP+)?`MmIJ)36!YC5$yh&4t@*R2|>;C~){afvgncM+~80RYfI*gTEVWlmgp z*gpWM0NX-)MAGl2E;le|wjSTt6>E5^G7HUVFTbZag7CPeFwbO{)waujQUG&XzvTnv zTv#R2lny4#Wx&41due9^gtF!BLgM%842-{5WzBI%XjIdQYtHsfIha@FxdP43JxqRU zQ5GwR8MtZD_%xk-eMh8qjH~);_SnTAHt3qX50J{;A z&!v3(((GlloiwTQUHAi=KL-t?zl}e^zPRa1`vF`S+Z?f^=;$^XFFu>p5or zwoAq2k5hkyEwyX)dy>MF>H~0&R^X}SM9(RUOz$% z__U^<1=Y(V+7ArEVht+MrW$pUD(TqPYhcTyb| zq=DOk*qy?g$>Gb2+GpU(ReyvqQgnHS)IGg;mY>Lhlmda`6>{V4Qh`VIcdNx&kiuH< z@g+$O$%JQLdUm}W0OnG)udr)!yid+AB7}hOsB-yNARY3vC$OXR>=vxnpUIyH(Z@dX zr&K>bpfT^t+hSMDU7}d2d@B?=`sH){5Ahs_H63}zc<#B=l#B3}B zH3K@o)4=cf+LNXe;TCTL1W?HXr|%{-F$EBWsF8rjaE5zVA&@IhP1``hWvI%Tuhj#5 ztZ_z4l$9%A0}KMrSL*`K>3SzInxihuKT1}D1Qdni)v|Pac1=k;;OA_rYh{FUC@gLA z?&)`c@MrxumDS_vpvr@`(=G$%d}^d1m4lT1zQTGQ=MUzMAnDnW%#HI@?~iED+~T#J z*NEwwd_F3$oDoPhF0D6lR>|HZsHt6KEe)1mD5M|j>`tmmItf{KSpv=EZ$zqqf0YGW za$xY6aG-9w+3I7%rp0Fi=clR>-=orAIbGK`P z*Vkdq*}BR9*Z~EeMEAD#49r~3-l!AK7%!x^B;F!P0@~GV&qDJV^<|KX0RA5I{x;i+#QKbtjn%vVDd;mQ!j`3_$@h#t_Ot}Cv?2LkZD+qO@k!ekJrZZ#m+E|A z*7eqNhjRe`FiMq)ec+w1yZ;ERH@Qz`@V%xt0{zP+-{eB+C9v(H6R?mS4t&ifL8|`4 zt%q@}{xm$@Z#^`}Lj!%Dhzy@3@Nc`F`^>+m1!OWK+#QHX(rhn}YY(_qP~lcW2LH8i zZqa?OCRyhTSJDDd+uCs7-wY)r1Tu9!DUi9F$Nl{9mGo^kVsBQ1vDYU2Ky3SKQF-u4 z0)7`Ffxo8JEC_agvBeL@YI`}%j6jwEUQ(zBd9?ictl!u*FmTQeb}lo(`(-aLEWtaB z@}rjotpUB1-#lHG^2xv%>Bjt@{N(px_o57-X_aMH6uT+PIpQ}bO`;$^`|agnV6=|& zEH%>fXSrDI*>;)ESa5(nhXP`4=if)Oo+bHMhBDS_ozMry-dR4Cr>0$jJIzE#X#`|1 zVMc((lGHL!>1Y3=k7Me&m2&Mb%lP^Q1{O!wHRixrO!GBlvp?ya*_`RDOBJ9O`cy~1 zrP;shroPQjJumgUYcqc%9ZemF*+0gmI3W=bi7~y%mM42j5TZVQ)G&j8o%tJ4e^iA5nW&fCaAd#}>@8Vh-q@}2YBC$Eg2Wgz8v zi0iJr6v4~8f^o-IrAPahiZ^~Megs#jgvxK^vT&JGoHLYH!u(R8eah1PAS7R_iL10j z=Tq}hno|Bsc{AJ^+$j!Nc6{cU|J*@e zyjyq+YE3UqY^a}o=HJJJM*)^Hv6%VWB&{6sBhtVhNREUpi#{&4lO| zML#yUDT;bp;G$|a;WD|M0e)NI$hW~#nti19yg|G09hWLNTvo`6GaY5@s(B4`>h%iv z^U5=aKEt@buax2a`rdV-zZ&9 zpVAzvjR9bDf>uxAGV$X>20q9~DSjUaY-Jhcohrknt@0r0ZYf~b1KL+~Z2UZm9O>Y1 zEx(Hk9bd6n_*gOfFJ}HtVG{V;L_|X`VmWz96B##~_Ya!+a~U)W5s}NxKP)hjpmzN( zzAJ#izsrg$u}T03Or;&;)K7B^?NqwuB(D+VL8d zCjy0Z@=%2waF}(*ygxk=UK>L{F)%aP<(gHbV>9(ur+6;SS)Ac^3kK8~aZ7{rd8CZ7 z^1O&Ja=IdA6vNtotH&Fatck&_)o3MuwZp>f8;g$#pK1}&j#ue zp8kTQE2FS6kq95CPNeB<4YQ0!UcFr1M=LC}Bx@|IXUXUl3RjK*jC8Ak@H!zg_Ac>K z2V8*@>F#|%{wR?z9p-D4^g_S#Vf_gXM5fA!j2;&T2RZz(it8qS{e8G?a4 z;+iL0fZsu?UuQ=*vjT{1_bl(XPx3_yhwGpy*GFK_Y1BFny84kPG%IA_EIh6Gj0WyB zh1JB#(j0Biz%85(lc}EB>LE`f85&ij_g5b?QH3>G;^%65BO=SsTtZl@UX3=G`HNXP zy4hbB#I5a!G61iCNOC-3@`EdaC|D5}WUwF4u4Xl|w@R8O4jVmWZik^QX8x)WJ_xAA zCK7{o{Be(OZ`WLDpq>Da<3}DePgJ;a1Rw`f4(%5U@F*sgMI1F-Ei!y__B)&xOYN3%K$(%|FrxVgDyiwRSlxOJJzr_^^$ z2Kpej!P~)G7ta;NzL-IwT&wwTTC9w7SnwiOItDNlb2O=2o1q$kfW_%+ktBzZDdMaJ zHjnzXJ zTwi^4YTm_fq?xV?|l?^$|gl1ufnqbn8dD9s6}?rBLwq@S2*Y3Ne!FKum$!H7TO zUJNb!&2g86Vf`KlR<`xChOR1xO+bL}Sqtnv_v0*B7J9mq^p%eeRysrXp208zr#;o( zb1n2&tYtqM{aXVD1N5H3+L>O)u56R`a4TU?4*;3oETjInLm~;oj3}Q)n1R*0^YuCP zW1Oook~djNmt}2DP9L=&&L8-6&5?uNa^^oGHvJdP{L>ac1M`UJxljFQ--hw*m7jH} zfj?wr)^EC2o7_mB(1}g9tlS;^^H~8_ZlU5)-X_07*SRh{;d1~&@RmVaU4?Mv2!I72 zlLAmLg8_AIKzUzlXOxql_S1w8CSV0nUOT~*-8Q`k47@#X2p^|faN*({hoti1r%$km5`g1f;Qr7bXe>qEoUd` z=`z?a!U%Awy;IRmVHbcG>NkE-lUq)x-9h)PY*PASSiUMFqR)K@ysL-6-_U1rB(VDY1U9Ata_nvS#)Yye!qzk;jjAD<-!_`}jO@b9mE&+llV zZGND<(33*1Q>|1bAVl<{Y(0^xF3hJ&;8JlF!vtz zvE~?PjxS7XY+H)?Bv?L+K`ijYHEb}kW6l~8P#;8>87jI|Wyp%M{SJq~ep(+uaTv(= zrMW=0@~nj!^XU$!uiuC4dK@7?;rw@!=c7wV^KCA2NjK-Y&|eg)ch z8ENyVHyI&)*VI`7-QJ%9)5XmJcHtPP-ABe%E%|GiY|$%xokw&X%Jp=T*!6RJK)JJX z854JFY^P1o#FKl}zIc+t)g}OlvF|_1pjLj{6NRL2fY!M?QV=dY=|Y-uyM8y}STJe^ zrR{>ZTQa$rP(gPD!WqDO?V;s*R@7NZ zRVALUjc3g*g&Et^Bj^{8a2*HeY$_*hre)V|=8Q(lViE!)#0XOmpZj))Z*~gK#Swn7A_nq=%f3< zSHBI}@qBPkz0F0^IUt`=ahBZGakK{VYw<5WggZtC{+QH+xtxPf6liXgXa4Ps06Uz~ z&exCjB1gYPq2_+*jaAcCnhk@;`?_?veN>s5C4lZ*|u>#Ra8^L(Q(*_jh| zlZVRiuWq>V1i*mUbVa&Bpgdd(u$V$KW!@s#KTWu+CBQs`!&i?exsrweN!ujg#~?0ZX39X7X865aOdLE-2Hip)7GNy7Y70?+ zlx2fn9?rXl#U;(<^|mtsFQjJG>S2FVv`=a`Ec0N!JyD$9De$$gK|cFcOnPm9eF6BE zzpfAF#Zp|AGb0T4y~eGbF(Lw^>lYNvM(xR)1)!6FKFXS-bDn*xsyhs`MHAY5ngr@j z$w4mQ?Uv2~u1BKB0Zt6Q=2ImI|VjG{`GZ_c^sf67+Xn5`NPcwhZOR0|xFuZ-Z zoIRS&_}zNf^|qyB7Q8DQu08<(4ZVeaBNn&Rn2R+0Db->w6q2FwAwYgcz*-hvu+*7p zRuKmS@yzO4;My$nu><9|nDNx#`MMyK6vtg(iybNDN;sCp zq5Zmt`(OP!4nF=i4o*%;DbTYO(B14z;OAh)pGqV^>5oC4hyZ4^6Q24(Np?RUVb(v2 zY`@Fy)A}s?xFmqfZ3ln|kd>j|n;M8WZ|&&Op_OBCjp{4X@<{#A+kLX<5o7^#BlGv( z1b*WsOm7PW2LR1ZbFg}aY_!=cpGY|(oRtvNG;3Vh^Z6bGJISygZqk+&`(65B{|@;0RS!O=pz1jRIZT$QZP8iq+iFw|Mz7)|K%Ce@llfji;}=fvz)=c zlcrdQPI}q&;0ytwyB7n=p*pA?@R)KENi3t zvgf&)<^=`9wYpN`b9mB?>M!0Q<=T~qTMLkVhw}b^klxkUP3dE~y{6qP2JGn%ZTtJ1 zF6NnkyJsZAbgrv<1yt8&{t6?saR3^(vN41B=`Si`>(!zG%kx((T-j}aKmb=ZVK)-6 zX6#gFbxYIvvRk|G^o{%mJA7m>%e(fx6@6d61>2KKW%R)y4cO{7JuiV<0%EX;%+7{g zCapZB9!W)$@UB}7EcV4R)eOH1N!(L0=AvyIAglIvK#;vbaI`hhf<472y;&*jTCJnv zRNuhnm6vhve^Na4Gv9&ZKYI%&x36P9xDISKy{JMjCn2D+^e0m~T#o)}Kn5ZO9=8Y+ zm(OR^B}u+lgI8PW(ufqTJhv7ERQ{g-Oy7NvEdhr_A2btTc*QU&ZFjGmie}yV(4Nr*Z4AK9A!+`95rK z-hytfMRW$c%Lr=s&lR35s&FL!Hx&hFPTr9NeCa<72ptr;$qWo7ny?0?w3aBHgIB}y5&Eu#StG>=DyJ!T*{}PU z)JRQ`2bN^N3joj^@bDh+jaML_`W*CAFXQmFQ*3Yt(&ffrh#CS0#%iR?Tc<8DNqKG` zP**t|U90W>-hqO;48Yrbr~_2MK<)E&5)fAfGj@0b(06d~>f4zA zNErJdTc2BX~c|y+(L0rnS^_r}t$$7p9V4||rQDQre zI;Exvvsp1$O#ft7q&&DDwr<6@4g3Kp`l6mu`JiCU?4NfiWoxKipGXyiyaZuktmpTk zAb5aIF%Fp#de#aivJU=_q&qK9&%T>*MG1g}vSC340{nYFB@*CcPO^YX6Cl;{Qj3&j zTMBT8zD^uMWf^E^FjZhNNy2Oj9t*QSJJl@56)V+F2I^o0<)s~HOL^S6rN{Q?1(!zz zd`yPoi(x+HNa;5##!v;eHE`(<5Y~dMXx9{LB>}M%(o)=Fi*IAv-NWXU7jXQ)-N*Fd zXL0ARegMZm@C>%MZeqT6y#c*($cYq1f5&+98PF^c0I-p$-oj*wECi;6?6!Hqo2E;E zJz$}WFan}}-4v;R+BNBx4l0LXoYlL}kkXk609H>gbR}+i3zeDb=A?NBPLF_lZ$ZBB zCE!;-1Nr>7ad>noo58zJDbE)P?aL?%p5+{>SI ztV-l-Z7wF)-cF@|d%6Ozc&@`Eg-ht;#|T%F07xg-YG>X{7B1eapGZJTgoVIDHy0LC z$GibRb7~PlZAPO=PAe&!l%*-QzScGc9QvSSx$D9jb?N|>*6*Xdyd=U2xsQUC$e8mi zK9h8Ud(i^g(~JcGMLjAn`vdfcRtHwZQJ-a{l|w8^z$opJ!sdAKyTv?);_HxyZv&rt z9;bhB9|u4346gr;58~*%p2qg@I&gSB6q17>;FbXsM%VQXh#Xkm<65IL)7m%ntAoGA z(fpan04R;M_8eSx%#&y`w|iP%J<^2sejW?S5Myzts8`KQsQgw|Cl$SpqHSOQ(S1x` z`x@q7{v`0yH*t7ZFyU6ov_e1kd%WPsKqNc;jn14{yNAJdE!XXHSK7NE^Io}s{9wLM zM)u21i0eebJjLX~x}ue~&(&k?F_cgL6t^%~ds8+%QL#rPMy~qFemjKkKmd45P$c+d zQt$!fzEQ`Bg{9@=Q2M>8bd^wg9dCMl+7iW+1>%nrt|S4lFfw~DXS+Rak&%SzJ|H>_ z2^K`6rxI)Js_o>!NxEWddXgQ$hs$C>Qaqej(@D&1+Y@}5Uv5- zu}4IKS)l!>EmmO{87j z>~m@ zKt?+Z%-kg+(4B1&EO~WdpXk-T^`H(BbSp?!dZTpMNz%pDb(6$VwLUN|BLvY<@SLkD zO_3?XK?cD zQ_zF!?QCDIDK*_>95slMy;sFc=WF<(JE6;6 z1OCnAUP8Q`gu#{?EKdtrpT)!n1*m&mOS5)g?XKBsHD&xRWfxw%^<^+3yh%LHOWrP< zwRWXl90Mmnbj?)_} zsQuSi@yAkw;siT<3)9IvkeBY_;G`SUw2j06C1>jaIj+^q!m z9gtn9x5w=;pD%p{`iuV&^1H9&+V&S4kC7(})E^~WZ2~~S z)}5sHK5vn;pxoKWLXjhyIZF6ayTSy5)0pRWPz;u!zwfL8PqaG*n&{i$5SjYGPjK6nZL+3aQZQ8vf>7RYwIl&Hv#(0g;^kFBb*Dg9A7@o6(pu(W zrOvg8E0*6ecKA9rCvRcv0qK+l<|Gm;tJ3@Im#X-E3WYF$l79wZzTzKO;`u5@gUf5@2A@T~MtHoSzYe`2=$G z0P@u@WB#?@hJ5xF9K5aA=xrFuV-mOoGP+>v9wl? zBwLhO7xyk9_&Z3nZ71&JE!OSPyS`fl7{t-#t_zt4qS8KnI5``E{{-?`^0`{vrr0CRZ9)^FUgrkZ!qZ-u~1k1^h#W7Nu`x@xs%1y`tfd00AI{sIdb8h*|Xr zkO4ZlC&^m~q|NBptO1^42UeYTz_jV*P(XRMzP{D2W!r^mGQc-B6H3Ycr-=;J6J2(D z*^1R5ifT+2zD>~H;?;c5F5C?;*AoIwz|Qv*{Xrpsa6G!lJ!1bOpY zz$ZV0`R6~2gSUVK-0WrLmElpz^LS}7^Ne?<{@)M&)}~tSa|@2X1Nj;IK9WC$NqtwB;{E&APdn`mJgKuI6EHj>&bOzi;&u)-wY3_P0^h^x8l& zos9N&l^6~R#6gr6oh%(KUmjnU7F^!b%-{E3bTCu_ zqX)h+iu=8l!AL+qFTfbJ>(F&UVf`rSya5AuTO-rZ#r|a8 z2AJBz2B!oJswyTTIVyEeFDt8y2%a-ytu;O~-54oaARp%|B`y~6)lI7V;*E$w&39C` znoa|XRvUq0hpoPe3HLF*@;)5>?+-D3>K<K5kBAt0OfsO=6w2UtbU z!;7c!$ukn^?IWP;nxE&Qml~{sf2uYS6uV|3YL2Kjh^mu~Sv;hdYthUN0C4gUc;j`* z=l%fr_~$Tv;Vm5O4k0)s*k`w}H82if<)d!x#Xgdr;li93{6}D~^j*sJHJOh4L03lU zKW=OHA&1aq&O12$nnOzfEJ=SLu1mk9)61+b?_mVmW#RzaxXlIvmD ztyb~v1T$X4baWT^&AT{x=^Y&Yh5NYmlh5J!yPm=6^;^K^5NQqEI?K)su)K8|DlO~Z zc3Ju#t#xnKK&RGs5Nv%v?O-U+I9Dtrz?QTEi%S|*mD6L$gL{xKe+l!?eH`+8uj638 zg^k{#sL^*Bz^gnonSukqfxpfBZNvj-oBj8JHjHpx0gBy9goKW&twDF|~ zO4YwNmk!gV6Zp)KI->{R4t=5%osZJ>Y(M0xiDb6OTAAW?zqy#n;$T1gJ3>7hE>lev zkx$xHWzPfSZf7N&6f51IZ7f;=uP*olPb2|2BWUh33$5?E@|8ZIx^S7LwC)mMGMjcV zCBZ}La38i^>KM!2u}?u;^uke*^B#q?Trewq-?Y!d1z2p((Dwd9ie0a>IFoH`PA}*;*E$vCOMY(jQdbM z!sh55?0)$!%!$0>lPCj@C+Z(srvXKe4fUE-6KNYk~9oz?iz<&aua~v_8 zI`n-zHd+4w!W`@4fu`E0>Akc9KJbYgQpvqq(aoq zin*-~h^^&A=2^ll{!$jHA#wK1pA|$+M+a$)8r6=r6$D|NNp>$WXx9-ya@K1TqFA~# zpQ6R=-xW`gh9(BYJfZuoqcmCFkIQsAjj-I*!T)X8~BbPM@+FE1J*P0Iq(D$rK!HM;I0e@Ful~5D` zv9!GzD4khsKy~9wr))Ebct|MIIz5~F+xous8srn7hW^?Yuz7ulgZY}*HP(W;g0-A> zukY(;qT+Bm+FDxE<1n9bpWAOn?eh%&`|^#tgjCI!4*u+IU~Bfmz9qd>vv2upPdWG} zJ<;nS66@wxCyL9ae-jClgQm9-+wHidCPQJ`^k!Rg_^Y*zErV701z|~B{Q#16s%P2_ z6D^gmo|gh#GQoSqaP31+tge8DIaxX8KlAH)81ETZJ z0PRn#o$qgf@7c>=sQ=S%*qmb}4Jp6Z@>@G{82($*cLA`)4zEK_?_+xTIXwJd@8RI1 z@557n^#eHmQ>Qq+bpv{M9l*vFR7;|hrjfl9-l?IW>mfl45;LkFCrV0COa1)#HqF(x z7a^&Yw-6{*;PeD|qUEqsf1%Bbv zke6P?!Gl9=a0goYeB7sey_?F#`Z4NYYyIKzp@{wcRjKDR$MEPMN3+kLjn$sR^KYqw}!}(}`)a1>KNoX)9ea!0)Y2LDG5mqzj4Rk+#&;1NvM>9}C9 z8Nb{kAoL|q9|;l{Dc$%^`5~CG%d=YoY``=42N?it9CbxDYqK~2#MT4Y1q9&UBms78 zLK8bWn9O_(bBQTmcvv3K8!z)gx?Z<@k)q@V-8Z=vZ*bfRRoJK(`ROs~8O{STi8e)VM>+!bu(7T~>8w`-QV`FGpq z$TNPVbzcCfua{}8)pvnH6rTZ^i9#V=Lo&(F*1TGqErEZntd9|R{2O0mi(l6tvuzDr z1gf*P^laxq=AIe^!FrTU|6Vs+g6L&ROQWEsC-B$!Y2=`8bxvFTyx6QzdligaSiwd! zFmEu^pQN`m?n%0Ko^Zi^`2e=iN>gtSI#82MOw5tvlMD8qte@Zf<#WgjQ= z7SM|okCq3|$l7RUM<^j509zI9JvLCW`vy~(X~QjW*9nKMHJ{fKuy3Ys_v@~OQF^_P z{I>wuVv9F0={@Mz-o*C*dQ zin11734+u&ER>M&lug?KC6p=9XG=Ta=m_%KYrrQy+t&HNafE~I4FDVJwl2e~{TRR* zmamxe$JV~w7n#`Y?~DC$xD0Ct`dFNOB%;^B?^X%txcl;X%s?h@74&z3Dd`8I#tSoH zlMC_JSDT}2FMHRgPT4q$?R`UB3RD+tG;$T=(=zuPDVC*8b(f5 zXZ}{F#2f%8)x>Jj`w7kr=Z*K?geyq^91y6Z*N*M2!TYglOntiFw+P1E*d*HD8vwZJZJCYET_-Z{Neo=kMbBkH3IxKluV4yl@@6JGYyEfFP$`lV?Sl z;*P?o_wvKlBLKReL!E622-6e<@HbLf@+1!?yDUE*H%VmN zG_^D+SR`mdn(J2?4;yTD6t;^xPmhyJG@z|s3}V0ZHtbaN13%yMYyO`L9* zGpYI3=lK4h9?We7;q?!+a-5z*-gyUj`76LL{|@k5U&q0{2^&0(Hs&IM4E{jOdNm)O zWifj`Gg+#l^mWERswd}B4NAAwsE(&Pk~$fKS#Q_Ej%r&6`|RPaai{{UN4Z@K;g+RKjWxTV;<6_7!D z1pYPHvWCf@5t}nDYNK!o{rec<>Jb1SmNko+YN4|CSOl7oOLVBSRZBKz?oG!^_6gt& zlhhAqLC`S#dol2=rh>40sttfbIP) z^!_pM>1+{|!2s8`pvB zH=w@kK&+VG(wAm8+$JNS(ehVix{wGvBxv3N4<2Cp<~K3_n@<2g|2Z5UUB`jkgzfaO z#jXr?_Dyrq6h2z8)Nad+V8wGVph& zMpM*O9$M;H4L)8>zgl^0Op!z5$Z~M5a7q3AF2j{101+g21byEN{))Vo-UowBGzb{D z+m-$dOy&x1OC;_y7cN={X3qin+hQFKX}x{{$3@8-dv9Z%gniHkz6CKkLITiUhCA0W zPe&N}0JstNbjHCO4=_D@1M@ys``in__k0iL*FJ*@2mZWJin&F?oX;cxB|dK!%;3st zRnYU*Nti7lV1-G5rBzAAC=b3@?^mKQ3Kl<~V_?e_v%Uqv5vEt3!^uCt5Bbbp-2Sm= zar)usaeC(_^x&}h2b8niTT_xu7F=vIJkz#&if47Hc)6P)$H%}oUITvPcY$B|J#4=6 z00+A}m~aqFXAAHzpx?(Zn~d$aS>7rags*zrkNSgU;wbPg6X4$?oz^ZDvR2GUC$`BK$)@Ub$zM=Sw3@L956*(AQjstDjI%U zIy3lV`LJb}+F+%f*-Fceq*+6xxI&G3uJ9i8@gsyQP5`jf%YZY*_*wh|1Zh3YgipI= zPQ;GDBofep)y(jA&{`q_#u|moQNXzh_N@KAF1$L3oFppKCpJQ zds4o0<(8m5ZiIb6UCDv>ZI|Dm=N`Za;7XpYWJ05bUidveLVKW0&Jmxg7!Ht2}* zyB-!~pzH4|qqIg2U~BpCz4{&W%!n*3iBPybwrlNJ;fI*sx{K4FyNl_i_u;!~U7WkOazI>Hig~)+lG22XSvk^cRjlbyk`h5i0qkiIamV5Yf+?*B@8FO14d;D`= z?+y4b^@{p<^;RH)Xd?}NL^Icc>Y2b$0G+#vRzGns9mB4cK_;V%(N)R}pjdAa&V?(@ zxZiAVKyJ8#_-*C#Ygm*wv6VB!<@fQUgeyn@T9D2%tEX^`&tRZ@s@0i01<0(mcvD`A zL&^ci5&e<1vJY3@fQ8zAf9 zAvWLr0`x0i1aL4ES(zqm-#o&#d#5;g_SzzjkiwV4o0$Lf_drgz*#6sJ!{+D+@s_uq zC#nCstuB**I`glV0c+KL1C1>KI>=Y)j%ljVn*TCQYJn23o*p-{I&ffm%2tFKJG_Yr zccEW>8>j!rJ>b`$#Zy1^B98yeDUNSnhhD$gwwu~{{HpB~zPar{QBSF-t$m^8Xa?@1 zX$6+~c?KRn!1Rr8L4W>}&|moi4&DSd^UWr+nxKPf9Dq>C+hCZ0+jdDxD$p`Xu{Ih3 ze+?tTS+A{u|Gu;$ouFFwn>Vzs5y1B*WDj~t*Jt127o^1A^tbOdxptPmZ~5y=C3X-< zV5tKwmOv`#Ui=Yvx!o^zIoaVn3H(#g$Ykx{x{&3Jf_^7Mcd2vkO21$FrhaXur>U_tlWT~mtp+|mBGyIO^!&xTe)>^Tl{45 zJUWV_9unkce(5{wYh5yhj`S#Q^5O*`oyE)oOyBpNnE%6+B=Zv zUWonS%t87kg#dS+f&AFVaP5145W9c-OW1zl^Vl5QRw!PZ_Xg?Ttc`;Npu~-PthCPp z48Vv(kPyJ$M*z>KdaZLBikw#lxl9@1-@gP8fZyoUu!M8LCQt0%4fyPi|+Zy;1GW?e0TF=^pAOm=v?pc42mCVv#i(;3w3 zii9gp01&LvW;<)0F?56*ILM)s0Augk@Hhl~ScDcA0}?<3M;FW>C!&gezON06mggjr z22YeRkDn++C8|BrXi34xtHg1kyB((Qd;z;>uHo7nJ2wwH z>`s9{_!4&i&nIy3hRw-iMrtj+!$Zh7zk-MV%Tsvj?>&d3KQ7qm7Q2_e0R8#TKz{!% zY#ttB!fmGx8HD%g!L{Ra>-W*UQOaxPc&z-cd0YR~_?2L+?Uop&S6jotKhwxD_}f!! z_bwo)Vcyc&*sAL%kCG2S!^NP$e9no?(O&8%d8I9f4E|k4gtq-9#HT|nC6{xaxlOut zbnf6^*ZjLuv~&Jj_pB&M%PfhU{Wkxty!4ym4Bt_5R=6Bu_in?LCjb)mB0876Mv~~j zVhI?gnf_PUTlI|jF4m*Wd>*nB-R$5AFM~15_8BvK|I*(ASnILy1#rIx14MK)+=NNy zAT5FN9*1koOxNM+>6_3OZ$ZEP7T9bIjwJ&9#yuRo{5m$@_kQfu)^4ec%(8c1Ka2U_e*)WI`UOmP?_<&liVbWnzNsFb`8TyXVFTM9XtC_x(h@K_poc$$ zWU#W1wBkI1rN04_iBbBX-}OGuh{I{}rv=^$xy24|1M@v>UVR(8SD%6Y@@>d>d=>N2 ztI*fJgw6J_zjPgSq5M~Tb7M?`ECf6Xy(RL=Hia@amc;J*g&y7K)3L&Hno$8HxF=KO`&_S(=H z0qjU80BmW~_xtzZ#v?Q9OcZ_G;>UAv9lh8_ZO{7_L26eocYwbgW)$_actYK0-=m*R zFFQf;i_|vuWo;?>ii9gq09@FdmF*z`_POc|vJ4KJU2p@uB>`ztM?9eEL;f-`pPL-_+ekC!Boh ztGNFB9o&ERT3Qc`b}`r#$Zm$pjNLIX9~?q{{3AI0@b_c>^-p5^$xmXscOQZS02|LK z@9q^hs{&>|X2-XYCBWK`zjIxf1Y|8}hX%3YZ~w1(_g4Vt{6=8HaqQZN3@ikC@N0)1 zz74@Um>%B1{0AEx;0VBN7>Qf9MU+Qzf*rn&&G8%1FAA>V1d8hjdKvxs?!yS^$93WZ zg7W>fwpdHo(psY}70}nx9+j=$so>A)oHe_@Bm#hjr*6%C>z4NNa(q?*mYOXEVD3iZKl9xiTb#V`4D@IICJz6}KLS4VVQldbkS$`( zThq7J66}{S`;4R2*G%12u~(4h!9S;Kyz8JH-oi(>j?%3_QTvP2uVtV%g`$=vr?n0e zQHoRS@D3Dj0(hA6%3k$xJ=$xB8F!(02a2PV=etvPTy8DDm*vRyukp^xgX8n>>TO@k z!~I{=<50^Pav2V)I|6?$_h{xn>ibIw8oH64i`9VM>gLt&vZ4U5ug7*_4e;+Tgktco zhyBE9eSj}Tx_=Y(3aMsZ^ADoZfLE9)cmi$a??)7~o|g{TeEhrXa`C2@lJ9coKqco_ zKU_@$P=Yz@Ie-~k8%8z|&fvfA2w`(%Gq%eEyMnlyd`rk((mf94NSlOMcg=r z=UvCB^qGV7yaWKYC&1Bt>>k|1_K&}a>A(H^IQ)nI5c8kwX8vW=YI-;9huANM%yHr zUi{;<^%4J&^2thcUiss?o~39Ar%$!*y^?y51U+B1B7)j5t0QBS?jLlpo zUCI|00QzonC-#G55U>xGd10XKYpli9XADqn7eiYPu=#2quAP0i`j9f9`nyko2zI*} z2Os+(Y+t+$NoRc;35anv?EwAkH!*$c72L!DsfW@Bl!Tj==NXt!Fh9J9(`k$CkN#O4 z{?mVq%}@Oe?4G^@#YwC|ItaJlb3a$T!OGIa8YCcJT?g#iwo2a&R9cSN@4aqAW5zcM zYrs_Vwsd#MVN}+AVN{N}r^|m83@=Ktjqt*vwrkK>NzM$_+1 z4jT#Ja9*?j*#z%#LenKSiRr0#vfuOuI{2#ttn}wt55;?d#85x1oonr^+^)T@rcX6= z$lByY=84ilq$Tl;FFUe6W*n&CZ)ITp>yV&1omA$c&-UQPI9wLVdw1cF1_3~4pF!o| zoxL`Y2Gi+%B*1+Qy8vis0eOuo2!WFZ9~@Xt7;QNK122CsIa39As7Yf@?^Z zSDUSn|8`$0fb6jZ0600=Kz{tgIMRFVc`+5o1Fe1EKp>xc9r7z*!L7Ty-Uj52%fU#S z#+FN&cfjch^z<0V(-!&@e-YRI+0OzW`xv&juR&$oL7r#+W_o33s}Ycfvd+L-fyADx zCgJeB2bIAfA$!J;%*mWTmuW8dYkBKTaz@T$AyhbjsIziQYi(x!IDezOxE!@yHE`W3 zXzuIJ`YZ_d}m{<@8{rT3^a|0-`67ZwMh5or6~ zeVBd{K>G``d1=w~gXHpxZxyt>NUaV}MeE<@CCy{MD)$>e2Yv#3Co1Geki7kSRVLGU_tvwkcGhzoA@UCv&~&FQ1zf*|8~@<1GymWHvio}z~=A&UCiI{LF_g=gns}#VO2|jNkwcM%!;7O z#~J{1@8?CT>>$VxA@pp`k2+?d{A*e2y-Fy!e7X{k>-C4FfX<^JYZ=$tW?x-yD+jsB61s7 z=Q&7#-^q$D0ea#9Z6G&yu!!%Bd(@yrN=}}>jm^*eB|N-w3}EX`){{k;2HQ2kjDw>S z;4`m4{@oXG{deEO^%F@m5N-n_*Iw6tL7>pxG3JMNaWWr4f9xYT_}PDi>2Llu?4G#= z#W8qRx3mPz#jR}7`PR5xabz%HFy~$p%5zt)ar#TAyJ!GbDpH=Q<*Z=Hfr$YB)p#R7 z{lidTqx?rCfvp|YcYvR%fXdfL{s6Tc{5vcw?QZSM_?>0J%D69ZT|*ftmGRPgqYqfA zBE@gT2nuNDibfe- z41|W@fVk9jcrUk>w7hQTA+=9-xS9k2Km{=S-aZ?P6=Q8?2^jq`7!e6L^PK^Z?%UGi zp@ZNVB^Lf-gTrU+wB<#XBu7L#34rGo)&NQIeA^%ESh44({?~*!oev%@($nfqsEYYR z-;K?G`IqtF+Fbyrt?hm0AEVmJE|@XRTO7RpHuU3Ph5Y=Nar3K3xW1iS?Qy?F%l1Db z7c(I97TBI*ck&P?w-2E|`4@2gpZyc)5C1TBHw1Iveg(G#^#TWrAuYkn&gaxCnBvFHO#S6nD+vVbrd*|7v}? zkGX6XM#PIZOj-}mU?XQ97VBGvrzUYgFxK*{q0BJZ{UksZ@hsnQdTE|V>jn{S1CZa`v(NmV(Xhcd9t}=!b9s#lwH`?{VY)48gTfg}zHca=VJ+ zKu@9Hcmwn6_b|QqG;Vz8d2C<2h0~1^53^^ZZHU&i@4GE@x5e(@8s_KkVEV8A4h~-a zD0aW{YuJ7M3z&9-c1}Hz&Gumz2(>-xtC5iG1Ks8CIH<^uH?E%HwZAIasQFu9XS#g= zSf4|QH@d%0bl-ibWg3-d?f0mCfaNnI0#To>>D4mL>3TTKO8-5VK3wzk-`7?wBN_Yw z@$_dgxqKYrl|zzJ-j-xONM!y``py7R+H;F@_k~-V*6rOiC?1bR)Yk7=zp7hxrKvaA z?4NQ1V*~m+vei>=npGgZ34i6)i32^d5vxY)`QfdqF zTU$|VKKg^$987rd&;J!}o;-t%+$8lJ?AjV7-U+b7=JW{ql@pwP?R6Y{--|f>$cs3- zt=MV2J&a!$^z~ADIwi9x@?8_^YhM41KXU>@Y)>*$Iga27%X9@l+iHbJv&axz)JEW#l0<46B zi|C63zkm$xI=gw^P4OJPHiaT~-r3L|fv7SAq=J&2E{jI-SAX zeF%gI%zy;2<=~ORlSLY?HUTIsEP1WMu-}A06JzaSO$S5~^Mggo#9~+kON&5numYi>t17wFP$R&IUgj5v|)QE<^M*adh2bp*BRHNf(7;>p{m-K zfWst+g@ao+X6EKD7EXb?E`$7rK@gBo#TMxM~GftKh!|-0vowmtc&D z)(BkltUagqD8O&vPasSLjzK?0VI^X~db?KekLwlu0i*Pn5EN7kQ$FhB$;NEN?=9hH z;@eZCaHzdw71QENYI^_K^(-&j#=J**RtECiqUuW#3*em(DUTUmZt%9 zu`;HzpD;zERI+(>!WH%b=z-SI7c+Ji1hGycd@Tz@C8`0{iZ1fZdZ{NrCsjp-H|Gt2mU%ZFw{Y5{PfbzN}SF`t> zD4Jiy=`nUkcX4{>5cpev1=s%Be-He*AHi<3g<=ansm(w;Lr5t6Wk$SizXpuqIF`ZP zdaE6PlW9UtW#lYa^IHQ5D<`k>*R6;naIN*dEM+ExzY4@_&v2Zzt&e9BBPM{{HZ>kF zyS%KGhs!W(Q~N-g<{-W1HvSkuFI+9DgF^J}j*AA! zqF|$Vx|O-g5Je2Y7yT6y2>{G?KnWgs`ElL~-3r)Mo$OBQ-51-12Wh@aEYpb#`;LJG zn6}FaOk(V@X>iOYW9m`)4=GNVtXB1vXB9S6yphYTR}|zi6m5}v>~g&5HOcY#}(g)WF5+DNcKepBX5y& z4@N2XLiv1%RF%IiQP5dDE3p&s}7W6Z{ zZ2F>9$nkl?= znCA79jBh!>d@Vj1v|AejqE!H(4trRW}ej6_Olt zhAs(;vV<9(Zt*jO$6P(^ipdi572{POzPEtC<_ac%_Ic#qXW9D7w;8>9im_kCxs{*{ zQ~{bbmi7Z6w2Wp`{Ey$jzkZ6d|Wen@IFSj-H3eS zahe}KO?7IEijhg3yLv4*!4C&gDQVWiHb!0_ZZ2 zcM=xejJHVkvxTAlNq|n#j$yPHG_Bm{x20PUAM)}qLEe^G_KgC3JV@7l6FbsM!}s|M zVXf1Ry<+8$tA+_Z3U0c&-^69e5Pb^P0v zyOeztD(MUDX3Fg0fqu?($ddN9q`~`CXVGoGcZ0UQH{s$W0J>7QKxv!-fe857Q4{AZ z=7f0NceMnlH+-76q6pcQB>A8myd%J__Hjs6sE{(95>_oXj^)Hk#i#9nXiC#GmVw9m zXuZwZeDbN2is{mJ6WgqZh9-`x)F6Yljgk$GBM7ryD~ule2$S1yX8z?zXr6qT)vXmO zH$kLM?W*|)XCGa~gQsd{)Q1}8$JeP|y`0^5Udi_U5v?k*(m_aT8denIT)2H~jx;T8 z+K3g)7?=nT|3 z5hd)DlKD;lwObJ93H)skUHQAX^6#&B&G-($nC`w5(}jVolO-jgH&G=EIr!UqQ({tG zxP^Suwn5NKy_LI>TOh5P(lfhlF#Mt*{p?t}`Y%aC#F#3QsdJkl7ZzE#I0*oxPVddb zL;{AK*&;@k$FKptJSZJQk$w-KizUFR^9o@s4^M2XI;sfhL}H!E7h+04|K7d-TCSNd z5;BSoh?x<932K6pnhNA6PNbKUZpj}&5RoOJ%ht_-irTeIV|F_`2*O@-_9r)4f zOqw<7YL(z;oEjkMk5s1fj2e%B@i6|-8CGt(9Qoj7%r2>EbgRdjAJLD=@lkNNRuDf0 zS23TgP~UYc)%!1}`teIN-+YYf$T6yTl(C8;rN0(bY)e8;1jtfxmbgh|TWh_-*pdsg zT~p+k^2Nj-0w-I8ay;&o7`&aZjAZO2jR1K-hQG#Jysw}4jx$f%j5-aS(#VwvCjBD0 zOUp>!cli^uT_#D&{I*Ih?|fNY2EWSs7C>n5+?d;9b@!=s_(k{cFaBrq94!e^l^a5UhU9ECC>Kakx17u+SGy zxQGdWrI6&E>&QFJkbrEVY;{1?iLOT|({HJaa&M_e0wgH(0e~*=2Z%*DGdyDXhMmUp z)e~Ry4$f>nT*vBdHy}?v z&E{V}%*xR%#`RvD8%0GD`zf-f)D)F#;mjuf`&-CMM_B#Hbu>5cW9riV>uPnu4uw*& z_!g#Hv~G&qw+DXpV~p=PNb?{5k@@$2z^G}cqz;Ot^VYA>b{15jTf&qx(aJod_}wa} zq04|2AncZv1@;PSJILC45X@{pE<5!*L6532FD%o4XFJ~hKw$hDrXvDYcVa@6S>J(@1ZbnDza!1m!(V15q0&F zZQ$YXcIME#7cO1`pdmBim{0(3&-)bOIMB~2Ps?s~fRT5$t~?j6{;d*sDNjYTe)RY^ zBdQU>ih-dqe?cb{{+5W3yG9KwjfAQbe^zH(ItthBgp7P z*lt_udk(U4Sh|?K}WZdCQa}z&C!6TtJi;DWEU>uiBc2`kFKeLZjv+yGO9QT{v-u!0bp61r^d?4 z?p;%Sk%o(t0L1xefM3sXX>eF7n1Qw3(uvG7rs+N?pivoWs)I)}Szr;cBBbAR{8?*6 z-x81~G@pmSU&nPM0YSl3VSl~11(Gt9I2p{`FjfOF){@Z1I`MlUWRQ^?TQ<3jUWE3N z-PE6ckd4rF=lJuLtQy{O$y9oZJwJ(Sq*F_c}dt05v z-||-g49IB;NUs7ho-1}irH+Ax*MGD=NFlFXc}H3Em4A8asdr+aBmsb7I}5m}NpJJe zz5n9pi#1%F1VDq+e?o6~x`9z?XJs_BuY$5I1CwV4_~HM;8Bo*jf*PO9kRATIZ!R$?MFjG7An;vxLu)2w{(3go7J%+_3V z`9gxSHSHA_EKW&T3ylZwnUA2l^;*XN)t}>^dY1OPPvDN7pz<})ISN`eo=ow1|C9i3 zTGBil0(|Hn`BQ?SAXkE z(&a^cqLW?48CFO0%E9e7vvS+@$oHOS<8K~jkZ^@)@pIgvRvf5Z3 za0rde*z>WEGWpzZ(q3~VtyFCP@O#Yv&%b1RxO*>z=9-sLf-m&1e=dWr=7%<5d^RSM zvtL=~A&0+r!wE1g2J$%>q%xcDf_^5>&va)%NEN4U4zjtWfMoh7OjdLAYSzmc&`M7~ z#D1|We`8h6!lI?Q3-S)$_%{$T>xjhkw#>ITKh8I?duQPngaCw)+4DoN_WlJVK*#66 zXbPYhfJ21rdj5hX4x00cQ!kpiBAetaBp?xMg9|ztFmDXhNu?9er9o>65t22Bl4&3J z#5LNGgJWX-!}2DOc0piE0-{3HRYu51kLw^X9o5ti+`+C7UQhG2Z?pN>3ryB4Y8S2* z4)sr)0Y=u&o=@fHRL4)#esi7r8EpeoNd zKL(f5nUT$+FjSkJ23N?QJ2l#8Hid=O?sHptCLg?k%RcuT%zpU+PBxx){S0gzhwCrH zJ$R7j-#x_0*J%u7!Gix#A4nG0`1FTV!|5f)by=De$7T7x_uvo+jHG$!^<_9t;;nzt z&B~-n;wRLPEh|Iy2>NH)xw)R{9Q1wzpuSC!MD$kv~!(0-5&mULRMjdN9U)*Afimf&OhKEA7l2Nmsn}nsHb9 zA6ET+XTL?43k{Ki^B5qmkzpxePNek{J)f>E~ z7bsW$W&aG`5=ap(4lgAWJ83Oj&nhlh;&v-s)Zh=lXaoS#NGtcKG#E=j9FxvvydZNQ z2*{nb!X#&q3-VhO>~WW5tVqN`)5pBhe9h$1$){>@=wcyd%ekc@oe0Q|u?pepV!9(Z z!H**Dy$cC!jWAiU`g;^u#Vwp23%0IKJc*46ZRKdMIl$yke+T*S^KAd^BaB`<#n`Wb z8!LM<`Py|@=Ol=D##^5D*+cj@*V%RO3g$QMW45BVviHfCg+NgerA6i*sVb(URjRvh zp}PJmc=Sn{?><3&X0vlTj28(hsZsD6aul>3YL$OB@KQr&&uv^xdWz?^US*sTx-EF; zK;1WA+cYJREe?yf8cG6`=ap)$`^17=GGgui2iX0GU*P1mSF?Tm47~m-Y@UQ>yURCN z!DQDOT)qc6euBKGE%53y=(l+~+BYPXwt|@d@}4fsD#`Q^_%CnEcND~ey4@CV@%Q|? zV0!bU9FB28VYb`!uQOirydIUFCgm8fLxwMmVk8sJ_}zQq?2=Kt&-PM z$;*Hfq3fLgqWPSh=oq{;I|~6&Ejfs!A(v#>kHN)jJiB`VTx7~U$4Aq&I>A(Kg@hSG zb>|0}-0*(n`_HrewI>+8waK{J3-LudsSEn;Bh)lhr_SKNy-D@cz3e)81(G-d$9m`4z@@-iH77(=<^XC+C7lXLQ?Z-G^&y6b9*J|YfavVvP1)9uZtlLN!RZ{}}|@1o>+oc>;a%5TvTzmj66?V^%m zoc~auwK1QI{@i;}P@Y5Fme=|Sy}kd;0oYV08=+QTIhSA7V^f$F(;#_RX!;N7JVXn^ zPKI+CoDh%w3E4dfQSS|Id0ZUf;wAtKSK2ygOs5a+`(y*P{F}hhXrW@X+wTd1&URgJ z1Zdq3$Vde-kMj0Hdh^3&b<8G}f-nF+n)MCI@9m1DHVv!%$`unVw*+V%^B|#JlMInY zC1G z+6H;+1kK@fMmHW{e9u*E@2_Zeg+6pP*=bEB5jWo=+ncm?jlceC#y8(cb?-sufAhEa zH{YagM>wgGX!^I?9QwU<46~q^04D!#Kc9=zv0$fp43UeWbmuQvXkAvGnC~6@Ra z=$Zpu_Gf?0^uhZ$x;e!kI|iqY!uA;mZ;b3)*8uO4QA;wvmt@w0v&3>c3Cewb1$T*0 zlblKyq{!QT?>`rEvhc3KNdS19`Xd>S2z$#YWGjClfw>{XDrnS`^tUoG7yj7irOq8R z!DbuoNw4(AWe@xlIq7ZMm%-|{Y|r1wV7lId|H7?@rQz+ckasU!lmsA~A`3epbfR~` z7a%4!I#dT$Zcd6<2y6UOccO#77^Fs)GQWjB0jgf~g+D=amGR4)vXcIA`IyxTx&;4S z+$5t;=AQXmqq}bZyPLeu9A_#m0Yl9n6r@XzMLF3Bs?#tT1;xM!LM6M^xovviwoLcz zV)UiY;68dMv#&n|Prb~<@1m~Oq7v&AnDV{+@KuE{_H*Q?hmgZ3S-Is3{B4&q-&@Dm z4#$o+7L`OMh~K1X5ZPc>&!}#?hS5L&Q~1&Iw2wRvZyctk#!(ya&_1z1moEJ62iwsa zhLo8r;6V0 zFIIFJ{IalIdz{m*_;XK+WbU`X-{0#O7CVDlij$tZurXEk`1uMs&=TjD-QJ7@xR}$j zU>L@|e>0ym@Bf&Ck-=tDUejw$>e(>1ir47Z9{AhLU7mJ%;}}Ve?Dq6SL1Max3kThz zg3d0>dl)WC0s!R9Z8$<2Q1R`4#UL9n*O#m`Ztujot20LtS!M8N&2Ql`!6;TT=i89Z z*mqn;9d&IxL}e8{^_8TUI#-6&P{^foPJ&uV8cPT!JaEz=8y^4t*O8wbVeKQ= zF~4~)Tj6bkk?BWbVpM~A13S9arQgQ82EVp~yZ<07_uNkN@Dnr-f1P@JYPJQc+|ps% zH@_jywonNgVXWD9?tNa|<~tAX77W>7<_o5M!>cc6b;G^~e~GpK@=rK+*`>^mpN7|7 zfsGT;&bl0wFKRw+S&hqf6v}$$PKSB>r(R1(5*K^;mk73)$T@SQ@V$WtOK9xiPBIjj zZuA@(NJp#=x-Y#IG2w5Ve%={+Hx&niB}$W zI=-}q4CaxIl|`Yw;PCc>6KE$P>&k^hzz!@r5|A`ZKT}Ej&yYa3XHIkwFP{kCqiJ0S zVHi|)Vk~nEjH_iKSOQ!&xU+4E9wHW#GE;CxU3G#F>|>evpH@GEb?D0IidzOSI%~TI zwD%8mO&9=P^VYW4Hk6=pMX0QwhJrG}%(qkrZ)Nqry^8j+@3Z->A2U9(!Km5|j7V1* zce3U#At7%X+N*Hat7iEGB}WU>O{5+%UEM|fn-5am zaxL=h@6kN-4As`0O6sIsfX*HvDPNQ@CE}74i?(U0l`X(f#HWZ4i~Fk#Z0%4F=8qOM!nV#A~8Rt)HHhpsi!U7thWO{8L{j z)is_k?=JY8%;UzG(@TG_HtL)6P zsv4slduROzz~Ac4!djtDf2#P)ON(O2NXvUe-OhKo_y~Y>3U_ekFCqh0e_BgG7N-x| zT~e1h{M-EE`YoEx3{~xccbar(t6%3h*D+}YKf5iF$x`YoX93#g8&po!Mb7sf(`t8U zRbOsp{}N{2}trL$nQm1hInr$B%pJ8dZ@VZv~TST-?FZ9aoDJ}u>R;LpoS>Y1CXJIh5Eubu|z~gvw0Vmg~iqYbwUf{ zQjg);Rk9Xi$9ya=UvXrsZLM2egosI^@slb`O4em2#pSL|c&uYZ>M zbD!qeo;9XN&%nteuyqRBc^A`6Gk|kn^{0@wUP=a?NSB5FlxAqf4?RLt^qbba%OjmG zuoN%mW3ReB@4?I?={?Ru@65kT<3FAIFMOxM94YVm*WZUu1I6+Uxv=1#)X;!6HL`Pe z_LYBDo){fXm&ThnZR+YDBl8em_;a|qQ7pT;Fv0~!0CwJ(UB6dk7kF5}8e*8yE~Wo0 zV5a)38E|n0Zgr{Z;E-Q_q%W;4N)oWJJ_Kunh^dB@k&-pezO2s>4|^4_CPP=hS-W&< zsB&6*_&39&1lalH3s5B9OzOOTnMbg`tymJ-a5mq}%x?fXOy;3?J$23Q0vYJY(j0KN z-^}>t>)^*fVe4-nW%SB%CgXiLMuD((%G|E#W3PFrU5lLFK%RUBd1;khcfX(J`aMkR z@K(2MQ!|ItjEnlFJ2Bur^U(4#0e^+j6k7a>WB(^UM*aK0%jqkxV!FA7y!uKw&p*Q+>(ep!_N7U1 zU%qKU!iqon_3PdJ#h8x0yr>Q7{g&tB!@p^grB7Y|S91R7RxYBW3h%LxG*bbT{M>(@ zE>@(+1+r~C-KIo6{}+Uzz03&sab*SBq9UC@5(V8TgxmSbzlRT@vBjmW*r**Wv4I}0 z_%;!j9fv;<_&4Ve|J@B27y&r9&;u;W&MjhFVjl1HFXEY%sReDjLe7F^u6phi&EL+J zf$fDt#;Eoc;G?-(MH;GCzeNVcbjh1vw4O?8B8Ydt#uaUx@FjuK371AUY-OfOI3Nz`e(2fGq&O3|1Xu@>wD)n!DlJN&_ zrg``~v@bqKHJziE2z4#*W1X~u_Vj?=5EwR1_oN{o7eix6=#L%C1mAf`^HuPZit%l? zviA=^&-RB8a(rWs96AK+$HP9q&&>Vy*xK6f6EXS;oKF?<;fBl=cU6+q~ z5Ttw);Mfxd=PRTI2oQYXB#b8w-FVZ_<^5(^RxYKm;NN`=^VZvVJE(~QxYL}q0Jpdt zFgllWTlx1wPQNtIg}w@^H$`7-cn(D&4(>RY1n+vds0l#kC2GxP%PaxqEg{Rs%m8Rx z#$Kiq^F7=jk?RTB$r;}S#0>ZX*vToj4g>Prs(16trNL}|v~TvxoFCEX{mgR!?<_G1 zfJ-JWg`9bubaz2w+)7x)8D%Mw?)1=k*vr1_TUT{&8=PITo9gqw#`yj_X}37t z%4|1PwTfQYBT*#d_!p)3jG7tp(}VACrSuGTk?#krs8{OiC;@P}FIv%$gar z^X~luH@~0Jb=M$IKZAet33&OH@V3EpxseNPqUuQ%w9!*}pO8QdZHw&JMPX=EE+P-- z8j{H$2VQ1OZoGlDFMf{ZfqOabD&}t;gEPlr>kRmLo;q>P^8}1t`&8Mt1pMhhpBAg% zyh%a)wNDC?l*xM|t@=}6+SuLi#sGajDr#iu226hQsF^%sPNrCW7R8Y4Pr2)wR{v=P zmc2D-_D{bCogA5760gidYVnK@_hsn?GV=tHx9hM|t00w*kFedbJKEz^OKF(wQ znI%9_!0AXv?hNRHED;t>hVkaa*wjYx75j8)y_!*{EPiYwZ6Dhp=0YNCm9Xr_t`_Za zLPvK1q<#ODto+62k&nK}*1!8Y<5!O}ar=l>zDl=IM8|uvss!>m3J|5xX%%^>RcuNN zCkj|4jEKo=C=9aS!I;a_ByDOe2ne5TPlz;B%m*zv-X2|V}eKPS*LOCMh)^+$`kLsm( zh9ng8yNf7cIHs|mKzm^8q_7n9baXb{th2Fk8n$Wd5J<{uc|!~Uf2Sa-VFFQ_G|QF$ zId{>8#}qD30?-QqFtJPSfq@pIhd9|KK}!aaS-Ho79HKh9F`=`}nrgH1jQJ=^SOBG# zuD$>r@GoYi{fmJl&0AbHZmlICzRW@-JCzpq*zCYAY=ZW@uXEPyzIa9ist^lt6g~>3 zO|$((r>871+Y-__6GU2)#I!JHxA;`5Y12?0yoHq;u0fu7maT`r$LRGljO$BqjH237 z^457AD*;jpw9$$TJX1eTjyyc)5G&#DWu=Trcv2K+@&}DEem?ZaCnbMrz?z{rNz{){D-T#ytthm6?jj>F8~1u z;9*t`or|je?218WG>b^OBnU$17K6#4s5+{plKTTSAZ*SsZFvRgEvXT9PrOTR9Bx!e zM%Jx$jTH&iPW$`Wc7Q(c9_l(O0>e(S)v$FS%uh5J02e543bb{K0O*oQKRTCD0`=i&gy>CP#4K6w|xvUwiT8+G_?Y0H{Xw3Ao-PE7|4aWE1%lvQt zBkfOK2-^aBY%pCPTtc^?d*-F9q=l43K`bEkjNA+y#-u^bpShSO7WLMM<$H(MPJx?;Ms|DDPx=6Z&G3+A!4NET(3HRyT& z+x<&RI@BBw*&@4t0Z&kT-u0_^wxBvsR|l$DqG*M6c4*K4?eY!(p9sLa65@nb5`Z=7 zXru&SS;9CWbkwu3b9<(3NohJj3u();#!H| zk9*W%Lg;IQohjYs8%h)3KV^^uMqt!ZR##W^E{W$<@s-L_#VA&_CcjwKGN?{5M9!KL z^~8bqp6S{u^_PB=`XdLKeeFB&^czgJcTrWVA)_je89gzOL=l9B+B^I!$MMIvSh?kL zCbwP2>=H*y057pZ<&Yw_f15cp4Su}B{JJZt{^F02@BIk*_LIn~uT!-^yjIxskr}W( z2SW2nVL$a&3GyY_rFQN&^YBw$QMZ+6bmKK#`dgo({gsb%WHM&{##?aaL^#&hbn)$( zYgd#kIu5!Y>ZZcIIiq^z6xE3twA-w_Zx{7F2bhkn{L4bBxyweIt&ddzWt{%+$>Ntz z5s2v*yD5-bs54+GfA5l_Y?P(+i3H@a zoT-ZEs@d3lJ6Y{%U5fZY7Ts5D zokMQ9j>#?8<9_@ioB#I9jNdrJ>g4h;3|!WSb_-G)zoLcpP2>kt{7Wa?x9w-U zYDtcpegA-{cHb!D+^CY%!j1LAwc6Lwf?&uG!7@wW}GKSRO2pTcBNp0KSM*64i8}k1ujab1d!k zS0=3#Zh=Z5=;d^NLZpL^?yY|VP8O;s#I|RzZOhfa4SC$2_r5hRI2U$G3=sSDbzv8M)mcHM)J2Ef|6x=@d$LN5JUJ8QRA-sb9H_-M3%C?3z`Yx|4m8 z4(YZRQhtJmW{MZjv>H+W#)C}mzJuoL-=ul^8LEwK9C~6P_YWvf0Z29=NL(kl zZp?7)CipG%xUIueZ_j{L&W;4Bwe!EW{t24%c&TmEfk7!gk$obzee&?npG)>VSp&{L z@B?AB9>2xLwyl=WQ;ZH-qNj9walyqu8pk9U=mLq)OB$9Djoj3kWLy@8fE)p-Oj*Ur zu2MG}eUXPn&j$qo@qL$%pL6(yA^>q;C%ckY3@Dnx5IfnKc!3C11z_7ynzZ6`ioIu- z%68^62K>)L0)TWJt^hK7lb(fuB$X>jK$@(jvW%0gs^SF6ZVI#9Ne^0tysb4PRYgHx zjLddIg=ZDSJ?q#Np*GR-p>1mwgitpBP{@1}v|s{pARQ@;Vu@$Awo3i!kF)a8JDGju zab{nCn$_7_cdalLE_>~8*RNLXIfS}xkk^jl51nLuZFjBk_WthJU}9>iNerjT)`if0jx{xZod@E zH)HqhA7am+|1lf4-Nf-}i+|(I?mYi&BY2q;?^hU_R?#{Vq#Lyr^5Qzx^BYV~&tbj} zvPE}wvY|T}<2{!!1pX!H=TfE=`KsNVpvMwQ1#?I4VnlqNFB*KW z9)fmzn_rhi^&^=+%@zx$f6MOZ-=e3J*p}>K^Jj!431#Gvu=lU*`)#yW$Sb{hwUD)3 zAjZFo%G!Ypao8@qA?dvjzgPqSf+;X`mV0G18ZY^)~W#U-!!K`TI7 z(vc18l9iGZiu?w@L@b1Y5u3Pam2QZLQ+c~gqAJgB*fJsb0%T_Y2y}_dV5-#j36QLL zRgi36IXyuYtK|ea!zH~3+FMW#9-M6s) zcaKv49 zW=K1y9j)MRxSHzEzKDD3N3@T97x&g7suqMAO!=1Zbg*6$f*kPD?(+~h+Hc)TPb#6l z<^Y#|_BY{EpXA7BOnc&FcW?jZsc@d(nH9h5=O{*E2X*6chv)Fj876OTF>1CDzlo#i z+BVE5Yq~x+^)Do9*3%1uk+4h%eJe2bqdVoJl`Qmq?0Z5 zP1zycem-WRr$}1END2#LuTHY@*2XZ$GXPHmoT7P)?KNA*P+fKa{=G$-At|bxot?+a z@*CmA6nF&fOo%1q zZ;2%!^NtQz4G#}gNjJ|$VY12r$w99SF36GJ>Q_u~@;R(=^88!^MAINWnPX;3)-<22 z(YpNflLWiW#OqqdK8IIsQzbK3Ek>cRV{ z?>vZn>)W*7`YzR(GgOQsob{c`v~BZGsfF{9ZzTkZ;2f2zW;LO zXU-reUJK{>XI;AvID{o0XIvK@R8(+mj{ET$MsI8}+TOzXP4Kh0^OeES+g76`*!SB7 z^R)XVy{b3A!9TT(1$a<;sJ|srpn0dZZwF*Nhr8u>7$RYD#J&G=cSp_tQnGwAFQPw= z>)!gOWI@gU5&YxI+RQC$zK@sw(CdP<;3!TF^ujp|0&DHnJO5qY&suhGap+Y)QK&-) z*|GB-h5xh#ur%1EYi`jzr;u2;i$D=sDRiA%MK3gy&=3P5T|g57+{&6jBWI~DEihHX zb?B8ohsW`_;F9ft#JcJB*dhr~F%o<2ZP(fFSs8sRKneBM8L&qJ#N=rvK+dG?NdT8M zwKLsoErY2&^K_Y!Mr^m4$w^Me@*q)61yyk_T0HvKGiyI}&*rNu)DPUj%E6nMfB9Q% zeEn%wHz(B98r>DXRbIX-!_Z<5p=#&2Bd2MPZBqa2Qr7Odis|JO8oO^=_MbyrDOm%2 z1G5(2w)ov+>Q6n$0*|7U#ZNgxO^^Hi-3eSZdM$-?!K2j z|Ljj$zu|psoLGm~Uxm#RFxv(sa@>WN`AAMV#v9;YI8FV+8CJID&~6~Ijk540)jI+H zRFeuFd$#tu&%T*)#WzESVm?X;9M;ZakM`LbcT)H$L+(K!S&iR$F#3)#|3%_GAbC7D z@F?l4{_$F@F(D@vdLbGHP@@Uo=)kCJUHsE?E?i0imQ{VI9ffZ1zfX_*z6Pd((WlHR zZ$0YEI~F9y65d2;<4Oc%jjVi1-&$y$B9l*meuwgY z0A0Pu`^mL#86PqyEp!E?@>&8ERvU{hlZ-!l z2hBrIGW*tZtW0-N*Lz~UGR~#yJv^)soS(xh$M8qbFuCCX;}2cN{L(RV@v%)~Bc#?! z!%&~MGsHKv^%#F(AJrdzj{4<$@eh9s|Lk*AboU2n&z2qnWUEhym0#m%eDCJ$y6Ygj zzVHR6cYctgUT9x^1J+N#_B#5SUM1NbS#jAo(E%oas~q)~z|S^uFKx1Vd>c1k2btoc zT>1Dv-@%AvLVBfdg71>bX}=ouGcsBSzZ75FR;>v+wUM&yLPedI$^y~iMcJlG*e&sO zStCW#Ug(g%_erNi2Cb|?hR7rw;9cSdi{w97@VDuT#aV~vrH71>&FXav{x%QmDSi&3 zxz2;?f(jQF0gxHe&LS?5hHh-;#%utO4NelDkB9 z1@mGc66hN+wRz>BTPi^va4zh<>s(6v@5@J|L?sOU)pF*rLkY;~XrKOOLCKzs$mLJU zLXYHWJ>q_|C@JXL+`gM20d_8H)FDgStgO1$F+Q?e0EWC|@ywQq6KI{IdEXUG{`9vQ zee57xfB7{=KRM1ybqTm}&>2?s3u%RG=Rm4 z5kS@pB2%PkXvY)$?YC0j@P6v=J|e08K()kj;bCCZ^Ky zulhvyJp7I6KmAaYnd#L$-`=CL;tTcr+4S5{9$_3R>374kASI!3Ycd`xOi6%u`AF@>$w3G#IFi46 zG}E#R#5)V1se+Db#0f7E* z*lhtwvI_QA>ft3rpyo&kz*O-kYw>H|v zM))WH>^uK}c1}AQBftC+MmJxFJpNtUAN&w^{3MPsdV(PbH%vj=TP^O=OWFO22dRJS zH#l+iRcxI;1ILeqeg3IQn7}`4xng=bsi==PxaUt%zp}w-dmGno0aHx3hI+nR;IE4Z z1#0~i>Jk6d7MA#nHPxq=_GpasqM)+dtS-wBn|brsnSRN0K5sz`sT$Y<7~HSdc@`8( zF3~VBJ6#YgTbvE(z$|aOZD60pG8ID?D$q%ekSb%ezXuS{=SAdi-cvd+@i-8*1x z-NiS>A5u^3TY?vz}82Kub%p$EzJtb8RR%y8(C9jQs!D+^?nXFBHDCCALy%- z5kb6XzI&DGSMO)#qjxg@`$yRLkKbXJzm&S(W2}hITytz!jIO)s-%oLGw#*Klp}u}U zd+xiI?fo@#-zLk!f)#PhR{-B2vzE4*!)1FIf8leuUwVM~zyCXU=10`jxOlB_u5{H> z*2p$%AGx1P{^h^m)cX%``ospjs^|IheSS!UGd&<{=c=lxrw;$4(^Su&VP)DN%_)#s zH^1ZFu~MUVD`Y($Xr&>zu~+i_eQPyw*{_7y<+%y{T}a;j`FVn5ZHW}#lw$PFyAYOQ zm;M+*lSs}ivDejq-^Zf^=3&qM#qwx53sc2NV)W;txI@H4^@x#EKe>EdbgN8rmHZG} zv6kZHuYK z${a2AEWmsyZD7FJ+0&tPfhA|&=Pu5l&L==ENSW3cAOj|^vtJ;U>f`iWdLr@pEYlQ{ z$O_~W!2(vYaHO)*zC45TqqJZsQ0wbLGb?}=F{m_Bn?${o$*uX>dYz3dWf{e~$8?1p z`2|8m;$z>c=)GsQHlhCFuQR#lHl|;F68D4Gm`o>B)fz|@hE7+e-GxmyjFz#q_@5oa zAK7B{wgZfB-N)>b5p7(RKu__x{HUE1I!D2|(1?f2_fY@&m#Ch-pXSj=;FZ^L)9pmq zLZ*H^V)cU`V9#%VhS>uTaCqM0UwxyyzBlaici^9!eRJ?naO#|++7{faTeuh2Sv|f@ z-E1O$i)8M1W;OQiLB9?8THU(lDZr~epnF1a>B7qL_L!pe36Y*i+hkLjm*q z`3^(S7rr~o_pP2J-T46>Nzdk;{t4}3#&=-kI|9a?p`lS`0!uCE>~PX;3*c&+@e1zl+ZZ3b75C;*>Q`Q) zI`k&9qsQ2N)s=AF4fs3mg4?d=I5o}5Q*iPKY@Y_-nXvPrnzvDT4@O0Wdus|mIK|}X zlzO%WeiNjLa^~9xc0Tobt*Gof3HhmrJjb+0uX5BqSk5m2iv0$3?-}$ay{(VtooqkJ z<$11yze`ajCutlT|MOVmL2TAtMLHoXPc5 z@&O9J#h3nMRDsOv+O|qu{4L-m$`ufr`HX&x{(Qp)L;(H>plxSQpGIcj_KGk|UC5eZH#qf`JPU13SEtBE+@N|T(a z;!t15Udg&_4bW?$!P5x$_#P2PVwNO5Xb00$QhZMYIEHk=Yi~ z%$SW=sBgOgZodt7T|!O8Y&61;E4HU|JUsJ0E$oE}UY8A763gOfMN8ULzo zQMPHuU%9Xj zQrT|Nz&4ZBR<)N?ux!|sbjSqfy;->?@JTfrsDf1xx(yIzHW305^Wi528&{BrXt*u8 zl&Eu|k+*2Gk`Uzg8te>QvXcV3J))-~#NjKb#2LrLur07>7u9Eeg~>S>fh9;Ib6BQQEh=dyH5Sm2IGxwXx0&#Q_)7y%o3fMBI=hQaegl5Lb=k{Z5RsXKg#Wu2Sbh39Yg6?_*OmS-!^=pt2PfT&hL~=^bUpmtfcYl) z1{ZINlelOr!M}UfJ+0>z)l1v(k4ISf;VD*5ox;se;AFc4|3I|G4Epq6XeViz)mu!j zhOO%>whqjg%1OkvX^fmF#p&Yz>dkK_hy`W4_SaY*p+(4#^hwAsKkk=)PqB45sCNqH zrMc*u_+AAi&}IUccI=W=>vkbzByqXiMhC=84s;7qGF_7qhSIA{vHZH(E_lE4({}sKH^+Ns zS9lo_o!TIuaBrNTedPO$Kk;E^Re3~Zc}OcQb!bwpRsjDHn~fwOB#U>IN{>ibkV>oI z6g69n#uZOY86!uDlx-`cH4HhfD~buLmVnHZYa1(>4^Xx+^sWHseRnia+s$NB7zm>5 z{jG}tzC+ln4br=z(UcQp%bLyEvP$xx{UF^6)20zg?=UzAwVSqeNc|yZB_tqKuo8rN zIUKXLp}O^YM*sDfa6f#J?Jqw`^^;?))cbI5oWLJqU!)TQT1QX4xrKl7RruK{);@HA z=EgnDM&QMevD5`QL3Ucg;`+vuVix&D0V<`d#KD_W+;baD4sB6QH*vDnkq8U;PUmeg z?C4HZ%NB|7|-1SP^njF;d# z$xqBn%6P4ihVlDhF)(Z2If8MsQxZ{wg!I{J zJf;n@>}2m>WsR>YSN)E1Y$KAS_)!^~)&H{KP=RB7cVeCDjng>a22yVnT$oJKZhGXz z`dM;+&%*^r0Fc+#+u4=>H}fMOaieR>x2EXMAY-Z6{`Rv>-ggDf2d)kNd1rT+i_zSiMT9XGXmRBX+_f<(>~P`|_h~e&uOa)@y3F8)THVgCzkjDjZMM%yEZL zFh6>d(W?g--xJ<87?h6`{bMCc67Rg8cC}mKsMo>&=p>_;HdvX>5x)U`yPKJzJ@aOj zG}ePm4KwDK!oJUc6#3OVI8}r9-RS^!PpJR+v&^6SznC2E{B7P&7cHt#8m~f532c9+ zz5Vpm#dP*GK%Q4l71EZ2mTfl;^i{!115$gPO&7e=P=a};2lI%XG&(Q!?*E-$gP-Z3 zFu#Sct+;44Zt|8O8v}aQ$e8^F;>95@CCRrJOnF-VPA;FynoV$xAdfxA+u zwY0NSkHgcC!FMmH+W;>-0szuX4?Q$pe|~GS|G=uqDCkwAJ?N&=im#Y|{Rgb=y@ai6 z_S5>lKfn+n=$M3^paBi+CbngVgHmdmPMSsRaiLS1)+iPmsqi3JCzqk{T}+gCoo4#o z4t9I&&Q`HE|IJ&#vMpuJZ=fyg?m)6GbPpF_Xf$Bf4H=1kM*B`BNX**BF6x)D%vn;r zq_+>-$-e`5$+kmOh+zK9&L?M$W^1gvtb38l_R5IrbDv;z&j*-4^d$4|zRY-ILS3yA zE)DLo(Pr=Q6wla0`?DkXL#J4|`AQ}qyqxLYD!g`hN7Y&!LO({ZbdGvM;H3?!mo}K3 z-lhu2`qEX-_DEvPBrSxTqw!Pxr6YEI@*pdp_z>$?>|qw#wQ^M~Q+BT+2j7Q3bQs6^ zA^{nym<5{sCBLrM*zL$$Btdqf0*NZ6-_sMj16_sjY^P!(6;{@FE2xvD9aw1`>y48` z&UumG@1!>(IG2Q23B`a9mswp0_HlObA5d<(_rH+x+SUKi>6%{r{BMOrzV}mBo5_hEb(94r%AoY#nt}zdJqi-2X>=QlEJQ#4JH|-*bHI z4BLPCHFh03)t%Wjd%w$qPPjDoT|yQ}rlcX$6p(D{N$hOW7FGZ$d`9%e~(@IL-SI#-c zZbbF+6ux|fm8VWJIerp1KZf(0q&GiG)X_Ppbq_^^Eq{jkfh)Q6-+YnjAN~?2uUKQQ zAn9zX&_CB*MStYI-H@~0v?H&(^ex@3eaR%BYl)5=bib$f0{WPP-SzK&Nkmt3>S9&B z3xZM(?_CJ>vpUA;vTUqn%3u*nE;#`ZX%>lKM7^X6#I86T+5Ug2tFo-!u5Q0_{2#O=pocvN-3&x0{D)fA~LV?QnsF z3(*1q&`9&re?MD)_CFi%ec&o#Vk}AVZoN2&R?keC|IN2p{k0D>zws*OhNmyz4$xt) zCQ75dhs;t%>NF~rbgDAlWwq5wXh)zxdEI4)fkj@{Bk=cqVyddb>xnZ=` z(mwt&ynKS)AG(tHHET3uiTdrV!`0Ah98|5t9hxC8oM8OMCZp*#&Tk>%7Qfuw-#ggX zNh&SvxS_uN0GIswFEhXMI*zQ=__pa@1Dpm+%+Jn&^9zZBdhaGsSBjy%WH&s@YlCw0 zzGSHtty2HkG#&6~+9pev_vyP!1bU}u5HmO>E(UaD%Bs@EG(TBX$j>cYs00Amdev{g_P?_G=6}uTYS+DgUCiNGGi97GIed!kzy1c3 zU%L-?@6F7l#krd38U%@%U?guP#Ukm>z5 zb7~UitR&~TjEZUZ>$^A3(ii6zI>~$lTo?c5l4~pr^)5Umi`nI&D|b5=>^Rj8or2r~ z)=H4PJ>Grr&l=WpjyPqcJJlj7(n7gPmTNPO&w@_%Wjq#4I3wdAg2&3Fzgn-b_b+Oh zT97njK!YOKf;$3Ud+<-chWpk_tZvM3^K~3k^aW5xJL|g7H}li&eB;&sL$;n7e!BJ$j-x zXN5L6Nd5rf=#yB&P@1(eFxNpR`9z4BXEb}kez+w9CSUJ*8#LLCYg)7|OXGOLYkF0@ zq})r$&M@3%zYNG&0II6dBLA3!Hhl#0yza5d6iAFYP(-L=d!?0D2L1!>nO%aEfs@%H z(Z5v{>tETbF9>}Tr@~nHJfN&H|Ag3TrZATiM?skGUS;%qpP;_$W~Tq}81o+;WwJS< za=U;kUeVk&nU-!>t}XR^ioAA|_V8({YxcA2x_!uj6`D(GT765flQ{0GwtGddoS4HK zXQ-r+(f0KgkB z&(`bz&eePV-^t$lE)%y_0nQ$f0z{$)@r#`efoZ;SMBd!s?x=zH`vLD zZy>8-TF1+<7cC9V096$4G^B~r2d6TNl9ZdZSyJI=_=4SNnsqyKWD$72u}#Gy3OWz`gJ?TYvp^MlT*^rM{GI z+S+l|HAMolu1zZ%+^j`jnZawvk=0eIy{nA&??!gjuvR0@7}=QO&dlNTjB0b!sVVIfFEe`K z2$S_KT(gez+j+eK*D0*dB?vsy$ZYGCzim$b_+P_MHu8clobdkx00960?7exsURPN! z{(bg-hcjhp+L9(|nmKJ~OG|BQOQ9etC=TFNynqT0AS#IHbwID&TSR^i_o`Pu3g|@~ zZ~(nB31x1JEv0lwn>0jkf8fZpV zw}p+ok?$=JXP%lO@@IXrURV{?-(gAk#o?EcB8cW8pQWM zj>^}cM0vtTfjYq`0Md?bd>d>vq>Sgl5fI1lD*?ROSzu@af*J5jAS!@F438ra1Oy^L zyR^x7sD>K3u4`ryWQ2YQ+PxO*fB0nxZoCF(J=Ip(zMKW!-TuWO_5fw&%VQRo1okeh zJei&|cWl3I$g3uYWDKkOX-^3IdBaesZ>+DHQkSdUZjGHKv>8!WKhcU8$h&Kop@_a& zpL1WWP58|K&Yz4b6I=DK8BEoaa(3kj9x7kKZdrQ76TG?r9~}Vi??dNA1%6bKnlRyL z!gSME#m{19gkexQ^;j@<_&vZA)2os2E3A43005%;nZM0W3l!Hz>;AJNmoKfF2 zXERR#OFB(HGgQS1G-GG#9MPF#bc7I=q&a89oJ7eSv7`ixF)@=ZRc+l~$(=isF~u~1 zoqj@k;%4fb-+**rAl+BV0MQj?RdXgi|1&X&n&fXwull>$&XD_@W>!e;=~sQ=T8Eu& zqcU$60#T^|det2$-MSC){ZAlx;AxbrWfc6iPyuaOR)gfrPdlF`GbTo|%YXn8>3XOh z(XJ`HdAtdlZScErgA2|GD8^SfWL&TwqfS6wN|C)-h6V=L)f-{tJ~IM zCd+aTlWIkjnW2LWG!?kgYlY0*icB~+CvUwiYwG&32R=RqJUM{U$Ta*$1te+!B7HD< zl2m$^v3`$CfQZFR5LHfnv@w0`j}bmN*s>c}0aiN$ATd~r8-ssRpNzaR#lP)$?p?#& znJlFwEyc-d4!t9u2_S(&6o8-aN2C7?inm>h;){2o-d!|q8$1su!B()nPPKEHqJCDs zsR@>657+l{nQEJ|HjxwDd8wsby^uK*B5$d63w9)H>v*TS&ZNEsFp3dr`Xmg=l>00YuN9MM-pnsD$L$VVN%{5{ms!bZJ@@ub43Pj^Hqx zw(48*Qo8N}5$atrI$yd6mASuwC<9|9?0=WG(ZM zJfrnAK@n|OcU(5W))piwM5;HK#I9ZHl-(Bpwb}tt$ zBZAL>$CLyqV?7m}g-oEMUPJuwVZ_GuTYigAvFK@+5aHLYfs4 zxs*Ujb<$Hk*C)UvhBIBPGFVCSX7o7>ZE}i&(M#pFiOo9Tn7&ep^R~?akfDL4oFbhM zj7?lt$6m;C%n*iofH`l#u2810-TEg2M%E1A{AT0G{_hqWo?OcWyDnS zrX}RD3a0+1IJIacyBwl825sMr!Y}?P_~0?rzOo<16XPg)>yhl1N!Nqjnx%?$_%fUM zV&nLy5{fuP+!>>I%hg!(s+&;Xeg!HXfrTyg&yVn%7Mqcvwk*y+hlRl=)yb#r3*gQ< z*8h_~b#Rc9cOAwhlaFGG>l8nx}UMX{Gn>qN zUBFmzo?*8x`uvI%1D$J1VximZ5rHP^;Ae*59T`Q(N29y4(~ zi=aOE)oAwU--z15F9WZw0QanV;tyO{3;=+ET3jFaD-jKUI}Rs5US4zK^(bv(pa|&c z31%iDV%A@hr3-%CfIl*d@XO=iX9v*r@*5CrS&xQZAX|9frUz=8Fxe75Q=-F5r%?pF zCE<4pwVrj$NPb$T0Nr{R4H}cRu-MgTvdUVMS(TDoPi?P@0nfMUM9$)xnxmOIIMxVd zlk-yLWf%r06Wzag^|V#>b|afIMd@Zjh9OT~Q`!n=dnd!F_H!DX|Gr&uXU^kqt?LXR z>?ncmxDn->u0`{>AcwVPm=*>2gg)XzoB%@<500_b=XzzNgd(%r%+j|uz zMWh$Tbo~}qmif%n0xb=crQI$~!R}YGzDXhhdxu3@*JTrI#W=9e$=zRIOZ?_ZwFz)Z ziN2~5(mkn&r=6e$qpdSaF_4^GH;3(w{B285@pms#)9LYoZyLqza}2XS~9{Ae#a zr|O`%k_7Z2MfjCs%xa(UgJnj9u+}@-n0)3V+<4@VfZv<~zD~eLF9_lfTyP8k0Dw3e zIv7rSKZ>aO?n3wOHx@c~tRt_783izFpLCKMfn=yF$21lwAw=9efbjo~!@KSpbltQQ z(Z;n1<#@_K6UOEQD5;r6Jq2_Oi{u_M6KrlqAcvq>(x71ikgKX@t2(L*O}8Q1Uo7oO zo|cYe-bt{!^n%T9LZ?Ee&h~RjY0V`cXHu)ea|*~)p{wSo^F%x=kkY(K47+L7$$z9f zH(@APaPAtad{eTw(o9XVQ02yO$N>RhA1|Z z+#&`j0;qQ!I52=x|2PUkP22g2grpUk!!Sk37sDJOZj8=`wbNgZswY3p!LttlFEb7` z7Z5H)20+e^fumuq{_dzT^7%sN>EAD{z5Zsed^Lm0EL~^>fxJWw0AdyQT1s>tVtCam z#FIx69_d5jJNBS-$91Uclhx$=&x|>Cy~Q$8zM_mUd--$nunA#HGl0%NC(w{07M_=A z0`$p*=J8h0M;WAw)RV<)&ZJ})?F{doQy}TK%jzdue<+4ty_|e$KFLD4e3~tqsxMVK zd)traS@IjrPgcnb+>{9w&h|Dy+mFO$p46UsWoP#?#NAy<4G+mqdz$xY!rVq40oQFq zY4(20kdx{jji94(b^=-Y6CTN-n|`#*WZQdbtS}LE0B+yo2^)C zwVgkg$v!XO%zyQ%ocU~BpdtQ{-_mM+lb3PiOCa>qW4a&!{8 z#M+jQng9PJXk-@g!zWNWHGxvt z0HPTXLL|G95+_}&sVvtW`EnQ{ob>5fBRC%Siq%EL?~TfB~Nk zIX-)DI6JzZbn~CQx$>cr6~wa@6>-jn8wc+;jsi=9`>}=ct3Vy*phG*n>GIci9h$ zm$9F*q{g|4P<~%Hq%Ef|84HS2x#s<&nGfqde#=-SxXqj)SUxNa{zx8^QHeQb4^WTJcYzQT+2g8?s7IV~7GD*xa;`M}{ z*WQWv6)(huXZEn`Qz@0{C)G)<=$FGBoM%QrN!woLn*A+pgs_7Lv6D{I1*D~Yqa|?l zTCT)T*3+b)!GgzDQ`qlA=WD&JR%6S0h#Zbh&C9$BTG#W;Y&`dPZVAWCs`4bHJ$s$? zP;Tj_i8}D?2)t(o(J@&`&avP+z-n6`0i@V^{koG9iHYM1;>O5<#_WlYh{`wr6_}jB z(!Hq_!-dTN=+2)VjcUjLNCbnQj%ouxU+miPvwqj^E-I`?vLP^`XnJANbHMPn1rY&* zqlmvW1>SrmI_}zsXxkNN7^+vyU5`2wt zob^p*#CeokC&_1IGPZxGFAQO`{QztZJ~N}NGNkjZl;~kC2+f%Q*8`vRRy_4vscD!K zry$tA1A4uqEVZ2jdc87hktJEGG^xI`>g$Fz&cY!oR*)UR0`ZnBQF_~J5p{nR(fxfW zQg_nMrc8ix5F;=N@Wv9>{oE@sx#vm*o;e{;&loKk%67o`OSI}CHHB763!qj4ck>$Q z|2By?BhlVmpaG)DV?$z|}=Tp3*G41j_F&ITgJ zAyGT~>rrj&6Qy|Ke-?UnzsxIa>>zY8Q9<%|l5UXRd2THS0)9}3cWMCP$XR$V+KsN8 zwjOv}gOC~@OO+7H@L4+KFi_CZ0hJPmVn%%loEEF?^=tMrRi#GYe0;`58j3P@lV6=4M9}WOhUGXO41|n zngZ6o<>ffLZzJN^4&YAabu`oZs5&?6Cw9qcx_!$FcE+R`?uG!9^Nwu0zVVB2--o)F zb}=L?Kb6L2IovW0`CrQ8;?v9}*{^bLI8i;-H8Ypoz5nu_iv9=noLpV?^fZp8CXLNl zENp$#%YZ2fAixh9=$inZIE~WjvnYlQK-5486Jf}DKWw;P-TBNBL^wVhRC^x`XO6rd z(ebB%i6GS*7d$Q&2Eals08Ty}PKQ6m(fAv@!sWkF=-Rv4D{eyKAK;PF>r3l^%LFjs zQH)Zp27c^WM92D3ykQ$kx9mcryNH;R162UH3t%o$vqq-?;M*dhwa}!A9IPaoZph~r zLVyxZ2Ri0^N-b{N$s8uY)B?t4pOqd|uo~OerqbGx4io1)<2(l#C%|0cgCYGHl&IlK z#HMzsZ9YvHDdyy?c^$;YVREc`g0s$>I%~C5Q06taf(l5K#0XH4`8ahzlHK~GHpvd7 zWVkwvjcHW!Vfi~G(vvVersqLi)&uXgccSs(`_UPdEi#oJbIG+R4$$+87h(F^7ii)y zl+;V^liJrJ(^;*Dsfra~T6-Q=RXvB)_^|{1nEwt_Xc2b6mGo0oP9GFZI*lRx>750} zUx2LpLcart`&)9%gTPu$0>QM{2}`ciT5Fmu{VThCifMMEKc=dso?8G+ZIVIdkp~P; zf%o^Lc=9X?l?uGL0w4)%%}y^ni(R7kqnJcAg>d%7^KpIf{c&U93lPtZFQ`%%5H3On zAOVa1v2eEkgP?Vvi|V8ADR%FEZK30uE2(%TF%^l}Q=tP~noLF?01=`%K7r^zrx70; zLdQ$?A=nxUD7L@^CcaZOsKiGeNBtGcE7UKgsGuCI9j6cdo#_g=IM@%94{&xcI~KvhQR zvQGGS??a=I5Hq0|M7Uj+t@}Ko>06>c))5=e8*JjL$h9HXhE(U-^-XH^u1wX*`sK0_ zfI13TjX~E0;YJKxV&c#C+fn15)u72P2F|nUh08RS2_VgQJGL(UJUQdgk^b!oqqpf; z)ofaqEY#J)Ob9;I3wp929kT(vcorrF9pRYbMnp7;1YRqlg${ zXaw;Wrhx5R(D@xZ5pTO34HBsd)I{{LDZ1vCk(~&zm;ie%&^9miY<5S0+Vk#OX01BO zeC+vWmZ#(yO+y?iA#>HwWgXO#NiBPh8J?GX>aCa7JlFO_Yk{@rbyI23VmOQ{(|F-? z3%jA?3!r9wllP?CuCxHE57@5p{5_e~?t>&=gF2nEH4~r+t|AlUv|Uw!-9B-&QGhx) zlL2tK09=1H_{0g2@PS-4b3%}d*KR^^c{c<{Ne!s!8!=_-ak6+25rkk6d2U;l6o$AO z!fWPzIt5vuiXkv0+&cdOfW4K^46o!_Prps|tSO1C_r0|0|5mVxdJDp;$CnB$l1ktZ zaceEJv~&(Xprn5%J>;Y#%xU}2uOz%$1U@nSDC%k;B3On}MP zktz*Q&T$5G=aR`sPa0Sw8P+7W#LN^Qkm(jlT+}bcr?5(|m;{SO%3Ui|y}X3lHw$xY z`_ZKrhJ3I1yrQiBa{8QgeOu1hd8{!RlILhvvd)E`K2|uJanh$!<|DH`%w%o1-H1TR zy2wrX2D;CiItVgrGYSg!eoe zr0F5!3t%x8N%}0&A-fGQ5`G@TkXF~bW&pYHsk*1^-`O={{=~yE0nG7S#_=h|0J&Na zn0CXm-RISk8Sp%vMxAkBc3R5?%Mw)_h9^z%n-PDNA6qT$C?yO*GsX%4d=I57)+0ck zLbXzW^?Pl4P|z~bKGh@n_I${DHc=;?&e-+s{8UPHA|Rk_&F=jyQMcm& znB4;^-T7vWmJm4tiW@ILrqiEuN&iZyN%HVO!0-%ka0vd9+1d5}nFsctd5>-$Ab6kDyGr*})T+p4qI9zHBfW**1)ENIz6pVZ_tepDoV$bfk z6??Ajfxl6JJR*3BaHYqQAzRWiiUJE@bR5xFo=aARP8&EGe+g}teyuP!fDnWYw<}@IX8B8nsH%^W6$mgaC`wgYl5d1JhdL^ zj@3*LG?8gJ2Q7l8Jo^`nxuk#j%1nh}`pzm-F*!OAkT!>SdJ)Q0-}+*cefwJOLrz~e zq5HbtiqVl0WoyR+7arhs6fDiGOP-C!V{vwSO8*e#FjtviS4++W7|Xsfve6csTpCkWPba;UY36m67 z`XSKXYtVJe4uqR8L*!dTHoaxdA(9elBAzDTbHTF5tHnEiVwuI(R$;@DTtr&ak?nOB<4Bq*#vSPZ*c{d+r$ea zA+*A|4yYPuC4IK8+RTIdX=@77=?sKn%;aw)^&|E6m$-vi|3k~S)9S@Bkn5%2h&zV&gziY$0h*iyjDi3O4la_lG*ER4Ct&!cvi=5 zo=LtVw@{;ICh6(z3cQZl+hSf+N7w{VKTApr;7P_Jnf&RrT0&C6Yiwf8Z0yZBl}-o9 z(V76q!N4$5bMieqnVrgOVvBqKP<|J^rP*{@nZHAUF&@Sec`< zE*Z2L002Opfzz`h!k0xfdpHgz-dgJ3_U2;Oo~x;Jg~wDT6;aU0M#NqjsOC{<<= zKl&`ce z#C0wxVksqEau;-4hB4V%Ui$L8A+T=SjjKTp)`%&`&AW9R-UPT z&|Hyv&=6vy5irb-(*nKdTA8KaK~8;4-N|Y9oX|X?de-bdm^X5Ur*ji76X`N|`C5lu z-w~u3z-5KK_dh+_NnTYX#kTvydB#ZlX_JD18wA*m{clVBoN)?V1miXbGK4toM`Eu{ zl2O$Rx)MB`!C=)hquw)XL=FcjKV^Pad2US^9s}Ol8u-8fyk~|`s@CC&8WO2rGT@rk zViSr)b}F-g5S1{l4V(;TPyAI}JNkFPsmX=+-o=eJ1CYU)J`T^kKbWc98`TEiRqWpO z>O%M44JcgBpaN-6DtkvAX*nGPz()jcbR6-Q9tR(~5}kKkhiK=OXsD^rlz&K&LaT)^ zBc5iZSepsRa_2S?mr{sQ=h{Js40X$J06;7q3(crddAN*H)-bUousK;<^0%dOi^)~nb(1Nc5)^bYn`ux4 zo!}66SWI;;vg6b9Jb0B5;)y=cGb1QXRp3Rl05@PGml{XI9neFEkzrZz0J8Gw959H01h9OEZMIQqkJW9)Z|-8*meJFe+qZykU_vQ}8S zYPAntaiRo)Lev1C8bZ)Fg2Iiv&~^K6G%oK(>>H1HYb|OHCymWvw>Xa={k(qE5NF5# z%7#VgoZp&=Avd6qt;SDI)l!5tXZs*YLhM-!t;5T3R!UAwkhTecq(hY^L@r~LCY)Mr z?f5xls@QZHX6I3x{UP(9!{k|{+50RO6p6g zp)+k-LK>(tG&W*Gh?`6Kc15xdeF@D;@BcT~4LjgE6J{lThTGUBZ@4Kht^T)F^74z> zqM4HPeVLm%PyDzcmV?^#~>a(h4Sz$3Q;u)cpwhXeqW(H^p0ZJ&g;F7Er8d} zQW8o?05dZw5fFMpd5BSt1;l}4h))fnc*72qUc3XrWo1Mx7mpl*Wh!8911euD{ag%$ zeLqD|l^vJ!($0x2_h6zJa%y2$nHyr6E;A!3G^>kDBOnj%QFYM^n?-<|AQKYU(QcS_ zG;g|GzaLDgR|Bvu<#8L5SJ&aO_WSB;q=#Ryq#VGkCQw?HO=-7cTIelUIz!UKE4 zVOr+)!N@XZ%L!X@_nd=yDD_Nd%dmw7`eo#~gKLwO#>{_;wk2V7^Hv}+pS_C716$E2n53BvZSYCVGj}?0M zTuuIEV3a%}j~SlS2e6zIO2$;j4oC1OrxAVg5TfUL(ect75MQ?m^`enQ^aQkpUSt=1 zGa=`u*v>q3gqmalP+>BOTFewjT4+sOGquU70GZ-pZwGX9uooKZzO9|G%?XY#Kz{wS z6Pq1vE+;Ii*<#qFZ}qduKbLkfNcx&*%mAsrOZz`%m>#Q*u9?A2YzQvo5VD!P1#T@{ z&~j-z8_qp8+$Sww?L096Y8OCCn$!f{W&_L}^<oi(@Xky^-1`{t%nQ(U+g?Q5E=Qw?%%rhH zttz6ae%q4dyaxILlInEL)Z^sN=k%lVLQ2$hyxSE`Rsu7pRuXabfCwjP69+A>xXY!iTy zEnRPX1#=9tE9oZ;Lv~wW@=P{Qb=}TkuHWYY>9N7`J?hZBR+XCac4Q4=a;K1;-dY)n z2vi9{Pxk|dhEYB<4L`0W;d?o@1t?pOm=J%0AP_S*yr?!j992*MM^x|sD2Lzq1kkA} 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 literal 0 HcmV?d00001 diff --git a/electron/assets/png/64x64.png b/electron/assets/png/64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..96c9fdf71d41e615eede7b02bae3ee8bed698456 GIT binary patch literal 6780 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 literal 0 HcmV?d00001 diff --git a/electron/assets/png/96x96.png b/electron/assets/png/96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..8776f6eb3ef340b8170d7720459833ed5f95b93e GIT binary patch literal 11692 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 literal 0 HcmV?d00001 diff --git a/electron/electron-builder.config.json b/electron/electron-builder.config.json index 055d483..c6de495 100644 --- a/electron/electron-builder.config.json +++ b/electron/electron-builder.config.json @@ -3,12 +3,7 @@ "directories": { "buildResources": "resources" }, - "files": [ - "assets/**/*", - "build/**/*", - "capacitor.config.*", - "app/**/*" - ], + "files": ["assets/**/*", "build/**/*", "capacitor.config.*", "app/**/*"], "nsis": { "allowElevation": true, "oneClick": false, @@ -17,20 +12,36 @@ "publish": [ { "provider": "github", - "owner": "Qortal", - "repo": "Qortal-Hub", + "owner": "Qortal", + "repo": "Qortal-Hub", "releaseType": "draft" } ], "win": { - "target": "nsis", + "target": ["nsis", "portable"], "icon": "assets/appIcon.ico" }, "linux": { "target": ["AppImage"], - "category": "Utility", - "executableName": "Qortal", - "icon": "assets/qortal.png" + "category": "Network", + "packageCategory": "Network", + "desktop": { + "StartupWMClass": "qortal-ui" + }, + "executableName": "Qortal Hub", + "icon": "assets/png", + "asar": true + }, + "deb": { + "artifactName": "Qortal-Hub-Setup.${ext}", + "synopsis": "Qortal Hub for Linux" + }, + "appImage": { + "artifactName": "Qortal-Hub.${ext}" + }, + "snap": { + "artifactName": "Qortal-Hub-Setup.${ext}", + "synopsis": "Qortal Hub for Linux" }, "mac": { "category": "your.app.category.type", diff --git a/electron/package.json b/electron/package.json index ec3a789..acd54c5 100644 --- a/electron/package.json +++ b/electron/package.json @@ -3,8 +3,10 @@ "version": "0.3.8", "description": "A desktop app that gives you access to the Qortal network", "author": { - "name": "" + "name": "", + "email": "qortalblockchain@gmail.com" }, + "homepage": "https://qortal.dev", "repository": { "type": "git", "url": "" From ea3e102bba459bbb529f8e0e1d608b3decadfb11 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Tue, 17 Dec 2024 21:28:39 +0200 Subject: [PATCH 026/119] add warning to logout --- src/App.tsx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/App.tsx b/src/App.tsx index 008e25e..4bd817e 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -974,6 +974,11 @@ function App() { message: "Your settings have changed. If you logout you will lose your changes. Click on the save button in the header to keep your changed settings.", }); + } else { + await showUnsavedChanges({ + message: + "Are you sure you would like to logout?", + }); } window .sendMessage("logout", {}) From 98785e057147d26c2632499ec92d49de099b51c4 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 18 Dec 2024 10:44:21 +0200 Subject: [PATCH 027/119] added tutorials --- package-lock.json | 6 + package.json | 3 +- src/App.tsx | 66 +- src/ExtStates/NotAuthenticated.tsx | 19 +- src/components/Apps/AppsDesktop.tsx | 11 +- src/components/Embeds/VideoPlayer.tsx | 724 ++++++++++++++++++ src/components/Tutorials/Tutorials.tsx | 108 +++ .../Tutorials/useHandleTutorials.tsx | 169 ++++ 8 files changed, 1100 insertions(+), 6 deletions(-) create mode 100644 src/components/Embeds/VideoPlayer.tsx create mode 100644 src/components/Tutorials/Tutorials.tsx create mode 100644 src/components/Tutorials/useHandleTutorials.tsx diff --git a/package-lock.json b/package-lock.json index 9cd9a63..fd9454d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -83,6 +83,7 @@ "slate-react": "^0.109.0", "tippy.js": "^6.3.7", "tiptap-extension-resize-image": "^1.1.8", + "ts-key-enum": "^2.0.12", "vite-plugin-top-level-await": "^1.4.4", "vite-plugin-wasm": "^3.3.0" }, @@ -16224,6 +16225,11 @@ "typescript": ">=4.2.0" } }, + "node_modules/ts-key-enum": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/ts-key-enum/-/ts-key-enum-2.0.13.tgz", + "integrity": "sha512-zixs6j8+NhzazLUQ1SiFrlo1EFWG/DbqLuUGcWWZ5zhwjRT7kbi1hBlofxdqel+h28zrby2It5TrOyKp04kvqw==" + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", diff --git a/package.json b/package.json index b42878b..a688742 100644 --- a/package.json +++ b/package.json @@ -88,7 +88,8 @@ "tippy.js": "^6.3.7", "tiptap-extension-resize-image": "^1.1.8", "vite-plugin-top-level-await": "^1.4.4", - "vite-plugin-wasm": "^3.3.0" + "vite-plugin-wasm": "^3.3.0", + "ts-key-enum": "^2.0.12" }, "devDependencies": { "@testing-library/dom": "^10.3.0", diff --git a/src/App.tsx b/src/App.tsx index 4bd817e..d78713c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -80,6 +80,8 @@ import { LoadingButton } from "@mui/lab"; import { Label } from "./components/Group/AddGroup"; import { CustomizedSnackbars } from "./components/Snackbar/Snackbar"; import SettingsIcon from "@mui/icons-material/Settings"; +import HelpIcon from '@mui/icons-material/Help'; + import { cleanUrl, getFee, @@ -128,6 +130,8 @@ import { CoreSyncStatus } from "./components/CoreSyncStatus"; import { Wallets } from "./Wallets"; import { RandomSentenceGenerator } from "./utils/seedPhrase/RandomSentenceGenerator"; import { useFetchResources } from "./common/useFetchResources"; +import { Tutorials } from "./components/Tutorials/Tutorials"; +import { useHandleTutorials } from "./components/Tutorials/useHandleTutorials"; type extStates = | "not-authenticated" @@ -247,8 +251,12 @@ export const resumeAllQueues = () => { }; - +const defaultValuesGlobal = { + openTutorialModal: null, + setOpenTutorialModal: ()=> {} +} export const MyContext = createContext(defaultValues); +export const GlobalContext = createContext(defaultValuesGlobal); export let globalApiKey: string | null = null; @@ -339,6 +347,7 @@ function App() { const {downloadResource} = useFetchResources() const holdRefExtState = useRef("not-authenticated"); const isFocusedRef = useRef(true); + const {showTutorial, openTutorialModal, shownTutorialsInitiated, setOpenTutorialModal} = useHandleTutorials() const { isShow, onCancel, onOk, show, message } = useModal(); const { isShow: isShowUnsavedChanges, @@ -412,6 +421,17 @@ function App() { } }, []); + useEffect(()=> { + if(!shownTutorialsInitiated) return + if(extState === 'not-authenticated'){ + showTutorial('create-account') + } else if(extState === "create-wallet" && walletToBeDownloaded){ + showTutorial('important-information') + } else if(extState === "authenticated"){ + showTutorial('getting-started') + } + }, [extState, walletToBeDownloaded, shownTutorialsInitiated]) + useEffect(() => { // Attach a global event listener for double-click const handleDoubleClick = () => { @@ -974,7 +994,7 @@ function App() { message: "Your settings have changed. If you logout you will lose your changes. Click on the save button in the header to keep your changed settings.", }); - } else { + } else if(extState === 'authenticated') { await showUnsavedChanges({ message: "Are you sure you would like to logout?", @@ -1541,6 +1561,23 @@ function App() { alignItems: 'center' }} > + {(desktopViewMode === "apps" || desktopViewMode === "home") && ( + { + if(desktopViewMode === "apps"){ + showTutorial('qapps', true) + + } else { + showTutorial('create-account', true) + + } + }} > + + + )} + + { setExtstate("download-wallet"); @@ -1569,6 +1606,13 @@ function App() { // backgroundRepeat: desktopViewMode === "apps" && "no-repeat", }} > + + {extState === "not-authenticated" && ( {renderProfile()} + + {extState === "create-wallet" && walletToBeDownloaded && ( + { + showTutorial('important-information', true) + }} sx={{ + position: 'fixed', + bottom: '25px', + right: '25px' + }}> + + + )} + ); } diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index a386186..e531337 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -1,9 +1,10 @@ -import React, { useCallback, useEffect, useRef, useState } from "react"; +import React, { useCallback, useContext, useEffect, useRef, useState } from "react"; import { Spacer } from "../common/Spacer"; import { CustomButton, TextItalic, TextP, TextSpan } from "../App-styles"; import { Box, Button, + ButtonBase, Checkbox, Dialog, DialogActions, @@ -18,9 +19,11 @@ import { import Logo1 from "../assets/svgs/Logo1.svg"; import Logo1Dark from "../assets/svgs/Logo1Dark.svg"; import Info from "../assets/svgs/Info.svg"; +import HelpIcon from '@mui/icons-material/Help'; import { CustomizedSnackbars } from "../components/Snackbar/Snackbar"; import { set } from "lodash"; import { cleanUrl, isUsingLocal } from "../background"; +import { GlobalContext } from "../App"; const manifestData = { version: "0.3.8", @@ -53,6 +56,8 @@ export const NotAuthenticated = ({ const [customApikey, setCustomApiKey] = React.useState(""); const [customNodeToSaveIndex, setCustomNodeToSaveIndex] = React.useState(null); + const { showTutorial } = useContext(GlobalContext); + const importedApiKeyRef = useRef(null); const currentNodeRef = useRef(null); const hasLocalNodeRef = useRef(null); @@ -291,6 +296,7 @@ export const NotAuthenticated = ({ WELCOME TO YOUR

QORTAL WALLET + )} + { + showTutorial('getting-started', true) + }} sx={{ + position: 'fixed', + bottom: '25px', + right: '25px' + }}> + + ); }; diff --git a/src/components/Apps/AppsDesktop.tsx b/src/components/Apps/AppsDesktop.tsx index 2eb1005..b29f9d5 100644 --- a/src/components/Apps/AppsDesktop.tsx +++ b/src/components/Apps/AppsDesktop.tsx @@ -1,7 +1,7 @@ import React, { useCallback, useContext, useEffect, useMemo, useRef, useState } from "react"; import { AppsHomeDesktop } from "./AppsHomeDesktop"; import { Spacer } from "../../common/Spacer"; -import { MyContext, getBaseApiReact } from "../../App"; +import { GlobalContext, MyContext, getBaseApiReact } from "../../App"; import { AppInfo } from "./AppInfo"; import { executeEvent, @@ -39,6 +39,8 @@ export const AppsDesktop = ({ mode, setMode, show , myName, goToHome, setDesktop const [categories, setCategories] = useState([]) const iframeRefs = useRef({}); const [isEnabledDevMode, setIsEnabledDevMode] = useRecoilState(enabledDevModeAtom) + const { showTutorial } = useContext(GlobalContext); + const myApp = useMemo(()=> { return availableQapps.find((app)=> app.name === myName && app.service === 'APP') @@ -48,6 +50,13 @@ export const AppsDesktop = ({ mode, setMode, show , myName, goToHome, setDesktop return availableQapps.find((app)=> app.name === myName && app.service === 'WEBSITE') }, [myName, availableQapps]) + + useEffect(()=> { + if(show){ + showTutorial('qapps') + } + }, [show]) + useEffect(() => { setTimeout(() => { executeEvent("setTabsToNav", { diff --git a/src/components/Embeds/VideoPlayer.tsx b/src/components/Embeds/VideoPlayer.tsx new file mode 100644 index 0000000..8ddc717 --- /dev/null +++ b/src/components/Embeds/VideoPlayer.tsx @@ -0,0 +1,724 @@ +import React, { useContext, useEffect, useMemo, useRef, useState } from 'react' +import ReactDOM from 'react-dom' +import { Box, IconButton, Slider } from '@mui/material' +import { CircularProgress, Typography } from '@mui/material' +import { Key } from 'ts-key-enum' +import { + PlayArrow, + Pause, + VolumeUp, + Fullscreen, + PictureInPicture, VolumeOff, Calculate +} from '@mui/icons-material' +import { styled } from '@mui/system' +import { Refresh } from '@mui/icons-material' + +import { Menu, MenuItem } from '@mui/material' +import { MoreVert as MoreIcon } from '@mui/icons-material' +import { GlobalContext, getBaseApiReact } from '../../App' +import { resourceKeySelector } from '../../atoms/global' +import { useRecoilValue } from 'recoil' +const VideoContainer = styled(Box)` + position: relative; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + margin: 0px; + padding: 0px; +` + +const VideoElement = styled('video')` + width: 100%; + height: auto; + max-height: calc(100vh - 150px); + background: rgb(33, 33, 33); +` + +const ControlsContainer = styled(Box)` + position: absolute; + display: flex; + align-items: center; + justify-content: space-between; + bottom: 0; + left: 0; + right: 0; + padding: 8px; + background-color: rgba(0, 0, 0, 0.6); +` + +interface VideoPlayerProps { + src?: string + poster?: string + name?: string + identifier?: string + service?: string + autoplay?: boolean + from?: string | null + customStyle?: any + user?: string +} + +export const VideoPlayer: React.FC = ({ + poster, + name, + identifier, + service, + autoplay = true, + from = null, + customStyle = {}, + node +}) => { + + const keyIdentifier = useMemo(()=> { + + if(name && identifier && service){ + return `${service}-${name}-${identifier}` + } else { + return undefined + } + }, [service, name, identifier]) + const download = useRecoilValue(resourceKeySelector(keyIdentifier)); + const { downloadResource } = useContext(GlobalContext); + + const videoRef = useRef(null) + const [playing, setPlaying] = useState(false) + const [volume, setVolume] = useState(1) + const [mutedVolume, setMutedVolume] = useState(1) + const [isMuted, setIsMuted] = useState(false) + const [progress, setProgress] = useState(0) + const [isLoading, setIsLoading] = useState(false) + const [canPlay, setCanPlay] = useState(false) + const [startPlay, setStartPlay] = useState(false) + const [isMobileView, setIsMobileView] = useState(false) + const [playbackRate, setPlaybackRate] = useState(1) + const [anchorEl, setAnchorEl] = useState(null) + const reDownload = useRef(false) + + const resetVideoState = () => { + // Reset all states to their initial values + setPlaying(false); + setVolume(1); + setMutedVolume(1); + setIsMuted(false); + setProgress(0); + setIsLoading(false); + setCanPlay(false); + setStartPlay(false); + setIsMobileView(false); + setPlaybackRate(1); + setAnchorEl(null); + + // Reset refs to their initial values + if (videoRef.current) { + videoRef.current.pause(); // Ensure the video is paused + videoRef.current.currentTime = 0; // Reset video progress + } + reDownload.current = false; + }; + + const src = useMemo(() => { + if(name && identifier && service){ + return `${node || getBaseApiReact()}/arbitrary/${service}/${name}/${identifier}` + } + return '' + }, [service, name, identifier]) + + useEffect(()=> { + resetVideoState() + }, [keyIdentifier]) + const resourceStatus = useMemo(() => { + return download?.status || {} + }, [download]) + + const minSpeed = 0.25; + const maxSpeed = 4.0; + const speedChange = 0.25; + + const updatePlaybackRate = (newSpeed: number) => { + if (videoRef.current) { + if (newSpeed > maxSpeed || newSpeed < minSpeed) + newSpeed = minSpeed + videoRef.current.playbackRate = newSpeed + setPlaybackRate(newSpeed) + } + } + + const increaseSpeed = (wrapOverflow = true) => { + const changedSpeed = playbackRate + speedChange + let newSpeed = wrapOverflow ? changedSpeed : Math.min(changedSpeed, maxSpeed) + + + if (videoRef.current) { + updatePlaybackRate(newSpeed); + } + } + + const decreaseSpeed = () => { + if (videoRef.current) { + updatePlaybackRate(playbackRate - speedChange); + } + } + + + const togglePlay = async () => { + if (!videoRef.current) return + setStartPlay(true) + if (!src || resourceStatus?.status !== 'READY') { + ReactDOM.flushSync(() => { + setIsLoading(true) + }) + getSrc() + } + if (playing) { + videoRef.current.pause() + } else { + videoRef.current.play() + } + setPlaying(!playing) + } + + + const onVolumeChange = (_: any, value: number | number[]) => { + if (!videoRef.current) return + videoRef.current.volume = value as number + setVolume(value as number) + setIsMuted(false) + } + + const onProgressChange = (_: any, value: number | number[]) => { + if (!videoRef.current) return + videoRef.current.currentTime = value as number + setProgress(value as number) + if (!playing) { + videoRef.current.play() + setPlaying(true) + } + } + + const handleEnded = () => { + setPlaying(false) + } + + const updateProgress = () => { + if (!videoRef.current) return + setProgress(videoRef.current.currentTime) + } + + const [isFullscreen, setIsFullscreen] = useState(false) + + const enterFullscreen = () => { + if (!videoRef.current) return + if (videoRef.current.requestFullscreen) { + videoRef.current.requestFullscreen() + } + } + + const exitFullscreen = () => { + if (document.exitFullscreen) { + document.exitFullscreen() + } + } + + const toggleFullscreen = () => { + isFullscreen ? exitFullscreen() : enterFullscreen() + } + + + useEffect(() => { + const handleFullscreenChange = () => { + setIsFullscreen(!!document.fullscreenElement) + } + + document.addEventListener('fullscreenchange', handleFullscreenChange) + return () => { + document.removeEventListener('fullscreenchange', handleFullscreenChange) + } + }, []) + + + + const handleCanPlay = () => { + setIsLoading(false) + setCanPlay(true) + } + + const getSrc = React.useCallback(async () => { + if (!name || !identifier || !service) return + try { + downloadResource({ + name, + service, + identifier + }) + } catch (error) { + console.error(error) + } + }, [identifier, name, service]) + + + + + function formatTime(seconds: number): string { + seconds = Math.floor(seconds) + let minutes: number | string = Math.floor(seconds / 60) + let hours: number | string = Math.floor(minutes / 60) + + let remainingSeconds: number | string = seconds % 60 + let remainingMinutes: number | string = minutes % 60 + + if (remainingSeconds < 10) { + remainingSeconds = '0' + remainingSeconds + } + + if (remainingMinutes < 10) { + remainingMinutes = '0' + remainingMinutes + } + + if (hours === 0) { + hours = '' + } + else { + hours = hours + ':' + } + + return hours + remainingMinutes + ':' + remainingSeconds + } + + const reloadVideo = () => { + if (!videoRef.current) return + const currentTime = videoRef.current.currentTime + videoRef.current.src = src + videoRef.current.load() + videoRef.current.currentTime = currentTime + if (playing) { + videoRef.current.play() + } + } + + useEffect(() => { + if ( + resourceStatus?.status === 'DOWNLOADED' && + reDownload?.current === false + ) { + getSrc() + reDownload.current = true + } + }, [getSrc, resourceStatus]) + + const handleMenuOpen = (event: any) => { + setAnchorEl(event.currentTarget) + } + + const handleMenuClose = () => { + setAnchorEl(null) + } + + useEffect(() => { + const videoWidth = videoRef?.current?.offsetWidth + if (videoWidth && videoWidth <= 600) { + setIsMobileView(true) + } + }, [canPlay]) + + const getDownloadProgress = (current: number, total: number) => { + const progress = current / total * 100; + return Number.isNaN(progress) ? '' : progress.toFixed(0) + '%' + } + const mute = () => { + setIsMuted(true) + setMutedVolume(volume) + setVolume(0) + if (videoRef.current) videoRef.current.volume = 0 + } + const unMute = () => { + setIsMuted(false) + setVolume(mutedVolume) + if (videoRef.current) videoRef.current.volume = mutedVolume + } + + const toggleMute = () => { + isMuted ? unMute() : mute(); + } + + const changeVolume = (volumeChange: number) => { + if (videoRef.current) { + const minVolume = 0; + const maxVolume = 1; + + + let newVolume = volumeChange + volume + + newVolume = Math.max(newVolume, minVolume) + newVolume = Math.min(newVolume, maxVolume) + + setIsMuted(false) + setMutedVolume(newVolume) + videoRef.current.volume = newVolume + setVolume(newVolume); + } + + } + const setProgressRelative = (secondsChange: number) => { + if (videoRef.current) { + const currentTime = videoRef.current?.currentTime + const minTime = 0 + const maxTime = videoRef.current?.duration || 100 + + let newTime = currentTime + secondsChange; + newTime = Math.max(newTime, minTime) + newTime = Math.min(newTime, maxTime) + videoRef.current.currentTime = newTime; + setProgress(newTime); + } + } + + const setProgressAbsolute = (videoPercent: number) => { + if (videoRef.current) { + videoPercent = Math.min(videoPercent, 100) + videoPercent = Math.max(videoPercent, 0) + const finalTime = videoRef.current?.duration * videoPercent / 100 + videoRef.current.currentTime = finalTime + setProgress(finalTime); + } + } + + + const keyboardShortcutsDown = (e: React.KeyboardEvent) => { + e.preventDefault() + + switch (e.key) { + case Key.Add: increaseSpeed(false); break; + case '+': increaseSpeed(false); break; + case '>': increaseSpeed(false); break; + + case Key.Subtract: decreaseSpeed(); break; + case '-': decreaseSpeed(); break; + case '<': decreaseSpeed(); break; + + case Key.ArrowLeft: { + if (e.shiftKey) setProgressRelative(-300); + else if (e.ctrlKey) setProgressRelative(-60); + else if (e.altKey) setProgressRelative(-10); + else setProgressRelative(-5); + } break; + + case Key.ArrowRight: { + if (e.shiftKey) setProgressRelative(300); + else if (e.ctrlKey) setProgressRelative(60); + else if (e.altKey) setProgressRelative(10); + else setProgressRelative(5); + } break; + + case Key.ArrowDown: changeVolume(-0.05); break; + case Key.ArrowUp: changeVolume(0.05); break; + } + } + + const keyboardShortcutsUp = (e: React.KeyboardEvent) => { + e.preventDefault() + + switch (e.key) { + case ' ': togglePlay(); break; + case 'm': toggleMute(); break; + + case 'f': enterFullscreen(); break; + case Key.Escape: exitFullscreen(); break; + + case '0': setProgressAbsolute(0); break; + case '1': setProgressAbsolute(10); break; + case '2': setProgressAbsolute(20); break; + case '3': setProgressAbsolute(30); break; + case '4': setProgressAbsolute(40); break; + case '5': setProgressAbsolute(50); break; + case '6': setProgressAbsolute(60); break; + case '7': setProgressAbsolute(70); break; + case '8': setProgressAbsolute(80); break; + case '9': setProgressAbsolute(90); break; + } + } + +console.log('!src && !isLoading) || !startPlay', startPlay, resourceStatus?.status === 'READY') + return ( + + + {isLoading && ( + + + {resourceStatus && ( + + {resourceStatus?.status === 'REFETCHING' ? ( + <> + <> + {getDownloadProgress(resourceStatus?.localChunkCount, resourceStatus?.totalChunkCount)} + + + <> Refetching data in 25 seconds + + ) : resourceStatus?.status === 'DOWNLOADED' ? ( + <>Download Completed: building tutorial video... + ) : resourceStatus?.status !== 'READY' ? ( + <> + {getDownloadProgress(resourceStatus?.localChunkCount, resourceStatus?.totalChunkCount)} + + + ) : ( + <>Fetching tutorial from the Qortal Network... + )} + + )} + + )} + {((!src && !isLoading) || !startPlay) && ( + { + togglePlay() + }} + sx={{ + cursor: 'pointer' + }} + > + + + )} + + + + + {isMobileView && canPlay ? ( + <> + + {playing ? : } + + + + + + + + +

+ + + + + increaseSpeed()}> + + Speed: {playbackRate}x + + + + + + + + ) : canPlay ? ( + <> + + {playing ? : } + + + + + + + {progress && videoRef.current?.duration && formatTime(progress)}/ + {progress && + videoRef.current?.duration && + formatTime(videoRef.current?.duration)} + + + {isMuted ? : } + + + increaseSpeed()} + > + Speed: {playbackRate}x + + + + + + ) : null} + + + ) +} diff --git a/src/components/Tutorials/Tutorials.tsx b/src/components/Tutorials/Tutorials.tsx new file mode 100644 index 0000000..4f9ea49 --- /dev/null +++ b/src/components/Tutorials/Tutorials.tsx @@ -0,0 +1,108 @@ +import React, { useContext, useState } from 'react' +import { GlobalContext, MyContext } from '../../App'; +import { Button, Dialog, DialogActions, DialogContent, DialogTitle, IconButton, Tab, Tabs, Typography } from '@mui/material'; +import CloseIcon from '@mui/icons-material/Close'; +import { VideoPlayer } from '../Embeds/VideoPlayer'; + +export const Tutorials = () => { + const { openTutorialModal, setOpenTutorialModal } = useContext(GlobalContext); + const [multiNumber, setMultiNumber] = useState(0) + const handleClose = ()=> { + setOpenTutorialModal(null) + setMultiNumber(0) + } + if(!openTutorialModal) return null + if(openTutorialModal?.multi){ + const selectedTutorial = openTutorialModal?.multi[multiNumber] + return ( + + setMultiNumber(value)} aria-label="basic tabs example"> + {openTutorialModal?.multi?.map((item, index)=> { + return ( + + + ) + })} + + + {selectedTutorial?.title} {` Tutorial`} + + ({ + position: 'absolute', + right: 8, + top: 8, + color: theme.palette.grey[500], + })} + > + + + + + + + + + + + ) + } + return ( + <> + + + {openTutorialModal?.title} {` Tutorial`} + + ({ + position: 'absolute', + right: 8, + top: 8, + color: theme.palette.grey[500], + })} + > + + + + + + + + + + + + ) +} diff --git a/src/components/Tutorials/useHandleTutorials.tsx b/src/components/Tutorials/useHandleTutorials.tsx new file mode 100644 index 0000000..95450cd --- /dev/null +++ b/src/components/Tutorials/useHandleTutorials.tsx @@ -0,0 +1,169 @@ +import React, { useCallback, useEffect, useState } from "react"; +import { saveToLocalStorage } from "../Apps/AppsNavBar"; + + +const checkIfGatewayIsOnline = async () => { + try { + const url = `https://ext-node.qortal.link/admin/status`; + const response = await fetch(url, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }); + const data = await response.json(); + if (data?.height) { + return true + } + return false + + } catch (error) { + return false + + } + } +export const useHandleTutorials = () => { + const [openTutorialModal, setOpenTutorialModal] = useState(null); +const [shownTutorials, setShowTutorials] = useState(null) + +useEffect(()=> { + try { + const storedData = localStorage.getItem('shown-tutorials'); + + + if (storedData) { + setShowTutorials(JSON.parse(storedData)); + } else { + setShowTutorials({}) + } + } catch (error) { + //error + } +}, []) + + const saveShowTutorial = useCallback((type)=> { + try { + + setShowTutorials((prev)=> { + return { + ...(prev || {}), + [type]: true + } + }) + saveToLocalStorage('shown-tutorials', type, true) + } catch (error) { + //error + } + }, []) + const showTutorial = useCallback(async (type, isForce) => { + try { + const isOnline = await checkIfGatewayIsOnline() + if(!isOnline) return + switch (type) { + case "create-account": + { + if((shownTutorials || {})['create-account'] && !isForce) return + saveShowTutorial('create-account') + setOpenTutorialModal({ + title: "Account Creation", + resource: { + name: "a-test", + service: "VIDEO", + identifier: "account-creation-hub", + }, + }); + } + break; + case "important-information": + { + if((shownTutorials || {})['important-information'] && !isForce) return + saveShowTutorial('important-information') + + setOpenTutorialModal({ + title: "Important Information!", + resource: { + name: "a-test", + service: "VIDEO", + identifier: "important-information-hub", + }, + }); + } + break; + case "getting-started": + { + if((shownTutorials || {})['getting-started'] && !isForce) return + saveShowTutorial('getting-started') + + setOpenTutorialModal({ + multi: [ + + { + title: "Getting Started", + resource: { + name: "a-test", + service: "VIDEO", + identifier: "getting-started-hub", + }, + }, + { + title: "Overview", + resource: { + name: "a-test", + service: "VIDEO", + identifier: "overview-hub", + }, + }, + { + title: "Qortal Groups", + resource: { + name: "a-test", + service: "VIDEO", + identifier: "groups-hub", + }, + }, + ], + }); + } + break; + case "qapps": + { + if((shownTutorials || {})['qapps'] && !isForce) return + saveShowTutorial('qapps') + + setOpenTutorialModal({ + multi: [ + { + title: "Apps Dashboard", + resource: { + name: "a-test", + service: "VIDEO", + identifier: "apps-dashboard-hub", + }, + }, + { + title: "Apps Navigation", + resource: { + name: "a-test", + service: "VIDEO", + identifier: "apps-navigation-hub", + }, + } + + ], + }); + } + break; + default: + break; + } + } catch (error) { + //error + } + }, [shownTutorials]); + return { + showTutorial, + openTutorialModal, + setOpenTutorialModal, + shownTutorialsInitiated: !!shownTutorials + }; +}; From 9af3def127503d26889aa740625f2da1c6a6c36d Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 19 Dec 2024 05:51:23 +0200 Subject: [PATCH 028/119] change attach download --- src/App.tsx | 2 +- src/common/useFetchResources.tsx | 32 ++++++++++++++++++++--- src/components/Embeds/AttachmentEmbed.tsx | 2 +- 3 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index d78713c..86cf663 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1567,7 +1567,7 @@ function App() { showTutorial('qapps', true) } else { - showTutorial('create-account', true) + showTutorial('getting-started', true) } }} > diff --git a/src/common/useFetchResources.tsx b/src/common/useFetchResources.tsx index 2180966..02123c5 100644 --- a/src/common/useFetchResources.tsx +++ b/src/common/useFetchResources.tsx @@ -1,10 +1,11 @@ -import React, { useCallback } from 'react'; +import React, { useCallback, useRef } from 'react'; import { useRecoilState } from 'recoil'; import { resourceDownloadControllerAtom } from '../atoms/global'; import { getBaseApiReact } from '../App'; export const useFetchResources = () => { const [resources, setResources] = useRecoilState(resourceDownloadControllerAtom); + const intervalId = useRef(null) const downloadResource = useCallback(({ service, name, identifier }, build) => { setResources((prev) => ({ @@ -21,9 +22,11 @@ export const useFetchResources = () => { let isCalling = false; let percentLoaded = 0; let timer = 24; + let tries = 26; let calledFirstTime = false - const intervalId = setInterval(async () => { + const callFunction = async ()=> { + console.log('calledFirstTime', calledFirstTime) if (isCalling) return; isCalling = true; @@ -40,6 +43,22 @@ export const useFetchResources = () => { }, }); res = await resCall.json() + if(tries === 5 && intervalId?.current){ + clearInterval(intervalId?.current) + setResources((prev) => ({ + ...prev, + [`${service}-${name}-${identifier}`]: { + ...(prev[`${service}-${name}-${identifier}`] || {}), + status: { + ...res, + status: 'FAILED_TO_DOWNLOAD', + }, + }, + })); + return + } + tries = tries + 1 + } @@ -103,7 +122,7 @@ export const useFetchResources = () => { // Check if progress is 100% and clear interval if true if (res?.status === 'READY') { - clearInterval(intervalId); + clearInterval(intervalId.current); // Update Recoil state for completion setResources((prev) => ({ @@ -114,7 +133,12 @@ export const useFetchResources = () => { }, })); } - }, !calledFirstTime ? 100 :5000); + } + callFunction() + intervalId.current = setInterval(async () => { + callFunction() + }, 5000); + } catch (error) { console.error('Error during resource fetch:', error); } diff --git a/src/components/Embeds/AttachmentEmbed.tsx b/src/components/Embeds/AttachmentEmbed.tsx index c068d3b..3de63e3 100644 --- a/src/components/Embeds/AttachmentEmbed.tsx +++ b/src/components/Embeds/AttachmentEmbed.tsx @@ -271,7 +271,7 @@ export const AttachmentCard = ({ )} - {resourceDetails && resourceDetails?.status?.status !== 'READY' && ( + {resourceDetails && resourceDetails?.status?.status !== 'READY' && resourceDetails?.status?.status !== 'FAILED_TO_DOWNLOAD' && ( <> Date: Thu, 19 Dec 2024 06:24:42 +0200 Subject: [PATCH 029/119] fix condition create account tutorial --- src/ExtStates/NotAuthenticated.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index e531337..3f48a99 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -693,7 +693,7 @@ export const NotAuthenticated = ({ )} { - showTutorial('getting-started', true) + showTutorial('create-account', true) }} sx={{ position: 'fixed', bottom: '25px', From e5db082a9b3f0a2b0e4483e1e6fbd3dff919cf52 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 19 Dec 2024 12:01:39 +0200 Subject: [PATCH 030/119] tutorial fixes --- src/common/useFetchResources.tsx | 15 ++++++++++----- src/components/Embeds/VideoPlayer.tsx | 3 ++- src/components/Tutorials/useHandleTutorials.tsx | 10 +++++----- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/common/useFetchResources.tsx b/src/common/useFetchResources.tsx index 02123c5..a4964ae 100644 --- a/src/common/useFetchResources.tsx +++ b/src/common/useFetchResources.tsx @@ -22,11 +22,10 @@ export const useFetchResources = () => { let isCalling = false; let percentLoaded = 0; let timer = 24; - let tries = 26; + let tries = 0; let calledFirstTime = false const callFunction = async ()=> { - console.log('calledFirstTime', calledFirstTime) if (isCalling) return; isCalling = true; @@ -43,8 +42,10 @@ export const useFetchResources = () => { }, }); res = await resCall.json() - if(tries === 5 && intervalId?.current){ - clearInterval(intervalId?.current) + if(tries > 18 ){ + if(intervalId?.current){ + clearInterval(intervalId?.current) + } setResources((prev) => ({ ...prev, [`${service}-${name}-${identifier}`]: { @@ -104,6 +105,7 @@ export const useFetchResources = () => { isCalling = false; downloadResource({ name, service, identifier }, true); }, 25000); + return; } @@ -122,7 +124,10 @@ export const useFetchResources = () => { // Check if progress is 100% and clear interval if true if (res?.status === 'READY') { - clearInterval(intervalId.current); + if(intervalId.current){ + clearInterval(intervalId.current); + + } // Update Recoil state for completion setResources((prev) => ({ diff --git a/src/components/Embeds/VideoPlayer.tsx b/src/components/Embeds/VideoPlayer.tsx index 8ddc717..0efa61e 100644 --- a/src/components/Embeds/VideoPlayer.tsx +++ b/src/components/Embeds/VideoPlayer.tsx @@ -440,7 +440,8 @@ export const VideoPlayer: React.FC = ({ } } -console.log('!src && !isLoading) || !startPlay', startPlay, resourceStatus?.status === 'READY') + console.log('resourceStatus', resourceStatus) + return ( { multi: [ { - title: "Getting Started", + title: "1. Getting Started", resource: { name: "a-test", service: "VIDEO", @@ -106,7 +106,7 @@ useEffect(()=> { }, }, { - title: "Overview", + title: "2. Overview", resource: { name: "a-test", service: "VIDEO", @@ -114,7 +114,7 @@ useEffect(()=> { }, }, { - title: "Qortal Groups", + title: "3. Qortal Groups", resource: { name: "a-test", service: "VIDEO", @@ -133,7 +133,7 @@ useEffect(()=> { setOpenTutorialModal({ multi: [ { - title: "Apps Dashboard", + title: "1. Apps Dashboard", resource: { name: "a-test", service: "VIDEO", @@ -141,7 +141,7 @@ useEffect(()=> { }, }, { - title: "Apps Navigation", + title: "2. Apps Navigation", resource: { name: "a-test", service: "VIDEO", From 2a2bfb72674445d7374de0e4b878663860e08717 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 19 Dec 2024 13:54:24 +0200 Subject: [PATCH 031/119] test backward compability wallet 1 --- src/App.tsx | 2 +- src/background-cases.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 86cf663..f1cdb87 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -607,7 +607,7 @@ function App() { let wallet = structuredClone(rawWallet); const res = await decryptStoredWallet(password, wallet); - const wallet2 = new PhraseWallet(res, walletVersion); + const wallet2 = new PhraseWallet(res, wallet?.version || walletVersion); wallet = await wallet2.generateSaveWalletData( password, crypto.kdfThreads, diff --git a/src/background-cases.ts b/src/background-cases.ts index 0eaed21..98aabf4 100644 --- a/src/background-cases.ts +++ b/src/background-cases.ts @@ -232,7 +232,8 @@ export async function userInfoCase(request, event) { export async function decryptWalletCase(request, event) { try { const { password, wallet } = request.payload; - const response = await decryptWallet({password, wallet, walletVersion}); + console.log('wallet', wallet) + const response = await decryptWallet({password, wallet, walletVersion: wallet?.version || walletVersion}); event.source.postMessage( { requestId: request.requestId, From 37bd52aefaf7ff31c4292e87582dba1aa042c66f Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 19 Dec 2024 23:41:06 +0200 Subject: [PATCH 032/119] fix wallet version --- src/background.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/background.ts b/src/background.ts index c6fdb62..bef13d3 100644 --- a/src/background.ts +++ b/src/background.ts @@ -2265,6 +2265,7 @@ export async function sendCoin( let keyPair = ""; if (skipConfirmPassword) { const resKeyPair = await getKeyPair(); + const parsedData = resKeyPair; const uint8PrivateKey = Base58.decode(parsedData.privateKey); const uint8PublicKey = Base58.decode(parsedData.publicKey); @@ -2274,7 +2275,7 @@ export async function sendCoin( }; } else { const response = await decryptStoredWallet(password, wallet); - const wallet2 = new PhraseWallet(response, walletVersion); + const wallet2 = new PhraseWallet(response, wallet?.version || walletVersion); keyPair = wallet2._addresses[0].keyPair; } From 9b0a45858da8bf1e7368f05c5d25ec027d7eeb1e Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 20 Dec 2024 00:15:33 +0200 Subject: [PATCH 033/119] remove logs --- src/background-cases.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/background-cases.ts b/src/background-cases.ts index 98aabf4..07034d2 100644 --- a/src/background-cases.ts +++ b/src/background-cases.ts @@ -232,7 +232,6 @@ export async function userInfoCase(request, event) { export async function decryptWalletCase(request, event) { try { const { password, wallet } = request.payload; - console.log('wallet', wallet) const response = await decryptWallet({password, wallet, walletVersion: wallet?.version || walletVersion}); event.source.postMessage( { From 9fd224cccf0ac17982f3ed1ac8b6a6653a883cc3 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 20 Dec 2024 18:51:05 +0200 Subject: [PATCH 034/119] added import/export settings --- src/App.tsx | 3 + src/atoms/global.ts | 5 + src/components/Apps/AppsNavBar.tsx | 8 +- src/components/Save/Save.tsx | 439 +++++++++++++++++++--------- src/useQortalGetSaveSettings.tsx | 9 +- src/useRetrieveDataLocalStorage.tsx | 22 +- 6 files changed, 335 insertions(+), 151 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index f1cdb87..6e58e83 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -113,6 +113,7 @@ import { enabledDevModeAtom, fullScreenAtom, hasSettingsChangedAtom, + isUsingImportExportSettingsAtom, oldPinnedAppsAtom, settingsLocalLastUpdatedAtom, settingsQDNLastUpdatedAtom, @@ -453,6 +454,7 @@ function App() { const resetAtomSortablePinnedAppsAtom = useResetRecoilState( sortablePinnedAppsAtom ); + const resetAtomIsUsingImportExportSettingsAtom = useResetRecoilState(isUsingImportExportSettingsAtom) const resetAtomCanSaveSettingToQdnAtom = useResetRecoilState( canSaveSettingToQdnAtom ); @@ -470,6 +472,7 @@ function App() { resetAtomSettingsQDNLastUpdatedAtom(); resetAtomSettingsLocalLastUpdatedAtom(); resetAtomOldPinnedAppsAtom(); + resetAtomIsUsingImportExportSettingsAtom() }; useEffect(() => { if (!isMobile) return; diff --git a/src/atoms/global.ts b/src/atoms/global.ts index dfb9f82..025cca6 100644 --- a/src/atoms/global.ts +++ b/src/atoms/global.ts @@ -67,6 +67,11 @@ export const oldPinnedAppsAtom = atom({ key: 'oldPinnedAppsAtom', default: [], }); +export const isUsingImportExportSettingsAtom = atom({ + key: 'isUsingImportExportSettingsAtom', + default: null, +}); + export const fullScreenAtom = atom({ key: 'fullScreenAtom', diff --git a/src/components/Apps/AppsNavBar.tsx b/src/components/Apps/AppsNavBar.tsx index e387a08..67786db 100644 --- a/src/components/Apps/AppsNavBar.tsx +++ b/src/components/Apps/AppsNavBar.tsx @@ -31,8 +31,12 @@ import { sortablePinnedAppsAtom, } from "../../atoms/global"; -export function saveToLocalStorage(key, subKey, newValue) { +export function saveToLocalStorage(key, subKey, newValue, otherRootData = {}, deleteWholeKey) { try { + if(deleteWholeKey){ + localStorage.setItem(key, null); + return + } // Fetch existing data const existingData = localStorage.getItem(key); let combinedData = {}; @@ -43,12 +47,14 @@ export function saveToLocalStorage(key, subKey, newValue) { // Merge with the new data under the subKey combinedData = { ...parsedData, + ...otherRootData, timestamp: Date.now(), // Update the root timestamp [subKey]: newValue, // Assuming the data is an array }; } else { // If no existing data, just use the new data under the subKey combinedData = { + ...otherRootData, timestamp: Date.now(), // Set the initial root timestamp [subKey]: newValue, }; diff --git a/src/components/Save/Save.tsx b/src/components/Save/Save.tsx index ffb23dd..8fc6909 100644 --- a/src/components/Save/Save.tsx +++ b/src/components/Save/Save.tsx @@ -4,12 +4,13 @@ import isEqual from "lodash/isEqual"; // Import deep comparison utility import { canSaveSettingToQdnAtom, hasSettingsChangedAtom, + isUsingImportExportSettingsAtom, oldPinnedAppsAtom, settingsLocalLastUpdatedAtom, settingsQDNLastUpdatedAtom, sortablePinnedAppsAtom, } from "../../atoms/global"; -import { Box, ButtonBase, Popover, Typography } from "@mui/material"; +import { Box, Button, ButtonBase, Popover, Typography } from "@mui/material"; import { objectToBase64 } from "../../qdn/encryption/group-encryption"; import { MyContext } from "../../App"; import { getFee } from "../../background"; @@ -19,6 +20,42 @@ import { IconWrapper } from "../Desktop/DesktopFooter"; import { Spacer } from "../../common/Spacer"; import { LoadingButton } from "@mui/lab"; import { saveToLocalStorage } from "../Apps/AppsNavBar"; +import { decryptData, encryptData } from "../../qortalRequests/get"; +import { saveFileToDiskGeneric } from "../../utils/generateWallet/generateWallet"; +import { base64ToUint8Array, uint8ArrayToObject } from "../../backgroundFunctions/encryption"; + + +export const handleImportClick = async () => { + const fileInput = document.createElement('input'); + fileInput.type = 'file'; + fileInput.accept = '.base64,.txt'; + + // Create a promise to handle file selection and reading synchronously + return await new Promise((resolve, reject) => { + fileInput.onchange = () => { + const file = fileInput.files[0]; + if (!file) { + reject(new Error('No file selected')); + return; + } + + const reader = new FileReader(); + reader.onload = (e) => { + resolve(e.target.result); // Resolve with the file content + }; + reader.onerror = () => { + reject(new Error('Error reading file')); + }; + + reader.readAsText(file); // Read the file as text (Base64 string) + }; + + // Trigger the file input dialog + fileInput.click(); + }); + +} + export const Save = ({ isDesktop, disableWidth, myName }) => { const [pinnedApps, setPinnedApps] = useRecoilState(sortablePinnedAppsAtom); const [settingsQdnLastUpdated, setSettingsQdnLastUpdated] = useRecoilState( @@ -28,6 +65,7 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { settingsLocalLastUpdatedAtom ); const setHasSettingsChangedAtom = useSetRecoilState(hasSettingsChangedAtom); + const [isUsingImportExportSettings, setIsUsingImportExportSettings] = useRecoilState(isUsingImportExportSettingsAtom); const [canSave] = useRecoilState(canSaveSettingToQdnAtom); const [openSnack, setOpenSnack] = useState(false); @@ -66,6 +104,8 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { settingsLocalLastUpdated, ]); + + useEffect(() => { setHasSettingsChangedAtom(hasChanged); }, [hasChanged]); @@ -219,7 +259,8 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { overflow: "auto", }} > - { width: '100%' }} > - {!myName ? ( - - - You need a registered Qortal name to save your pinned apps to QDN. - - - ) : ( - <> - {hasChanged && ( - { fontSize: "14px", }} > - You have unsaved changes to your pinned apps. Save them to QDN. + You are using the export/import way of saving settings. - - - Save to QDN - - - {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated > 0 && ( - <> - - Don't like your current local changes? Would you like to - reset to your saved QDN pinned apps? - - - - Revert to QDN - - - )} - {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated === 0 && ( - <> - - Don't like your current local changes? Would you like to - reset to the default pinned apps? - - - - Revert to default - - - )} - - )} - {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated === -100 && ( - - - The app was unable to download your existing QDN-saved pinned - apps. Would you like to overwrite those changes? - - - + + + + )} + {!isUsingImportExportSettings && ( + {!myName ? ( + { fontSize: "14px", }} > - You currently do not have any changes to your pinned apps + You need a registered Qortal name to save your pinned apps to QDN. - - - )} - - )} - - + + ) : ( + <> + {hasChanged && ( + + + You have unsaved changes to your pinned apps. Save them to QDN. + + + + Save to QDN + + + {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated > 0 && ( + <> + + Don't like your current local changes? Would you like to + reset to your saved QDN pinned apps? + + + + Revert to QDN + + + )} + {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated === 0 && ( + <> + + Don't like your current local changes? Would you like to + reset to the default pinned apps? + + + + Revert to default + + + )} + + )} + {!isNaN(settingsQdnLastUpdated) && settingsQdnLastUpdated === -100 && isUsingImportExportSettings !== true && ( + + + The app was unable to download your existing QDN-saved pinned + apps. Would you like to overwrite those changes? + + + + Overwrite to QDN + + + )} + {!hasChanged && ( + + + You currently do not have any changes to your pinned apps + + + + )} + + )} + + { + try { + const fileContent = await handleImportClick(); + const decryptedData = await decryptData({ + encryptedData: fileContent, + }); + const decryptToUnit8ArraySubject = + base64ToUint8Array(decryptedData); + const responseData = uint8ArrayToObject( + decryptToUnit8ArraySubject + ); + if(Array.isArray(responseData)){ + saveToLocalStorage("ext_saved_settings_import_export", "sortablePinnedApps", responseData, { + isUsingImportExport: true + }); + setPinnedApps(responseData) + setOldPinnedApps(responseData) + setIsUsingImportExportSettings(true) + } + + } catch (error) { + console.log("error", error); + } + }}> + + Import + + { + try { + const data64 = await objectToBase64(pinnedApps); + + const encryptedData = await encryptData({ + data64, + }); + const blob = new Blob([encryptedData], { + type: "text/plain", + }); + + const timestamp = new Date() + .toISOString() + .replace(/:/g, "-"); // Safe timestamp for filenames + const filename = `qortal-new-ui-backup-settings-${timestamp}.txt`; + await saveFileToDiskGeneric(blob, filename) + + } catch (error) { + console.log('error', error) + } + }}> + Export + + + + )} + { const setCanSave = useSetRecoilState(canSaveSettingToQdnAtom); const setSettingsQDNLastUpdated = useSetRecoilState(settingsQDNLastUpdatedAtom); const [settingsLocalLastUpdated] = useRecoilState(settingsLocalLastUpdatedAtom); + const [isUsingImportExportSettings] = useRecoilState(isUsingImportExportSettingsAtom); + const [oldPinnedApps, setOldPinnedApps] = useRecoilState(oldPinnedAppsAtom) const getSavedSettings = useCallback(async (myName, settingsLocalLastUpdated)=> { @@ -87,8 +89,9 @@ export const useQortalGetSaveSettings = (myName, isAuthenticated) => { } }, []) useEffect(()=> { - if(!myName || !settingsLocalLastUpdated || !isAuthenticated) return + if(!myName || !settingsLocalLastUpdated || !isAuthenticated || isUsingImportExportSettings === null) return + if(isUsingImportExportSettings) return getSavedSettings(myName, settingsLocalLastUpdated) - }, [getSavedSettings, myName, settingsLocalLastUpdated, isAuthenticated]) + }, [getSavedSettings, myName, settingsLocalLastUpdated, isAuthenticated, isUsingImportExportSettings]) } diff --git a/src/useRetrieveDataLocalStorage.tsx b/src/useRetrieveDataLocalStorage.tsx index 8f808ab..2a248bd 100644 --- a/src/useRetrieveDataLocalStorage.tsx +++ b/src/useRetrieveDataLocalStorage.tsx @@ -1,6 +1,6 @@ import React, { useCallback, useEffect } from 'react' import { useSetRecoilState } from 'recoil'; -import { settingsLocalLastUpdatedAtom, sortablePinnedAppsAtom } from './atoms/global'; +import { isUsingImportExportSettingsAtom, oldPinnedAppsAtom, settingsLocalLastUpdatedAtom, settingsQDNLastUpdatedAtom, sortablePinnedAppsAtom } from './atoms/global'; function fetchFromLocalStorage(key) { try { @@ -18,7 +18,10 @@ function fetchFromLocalStorage(key) { export const useRetrieveDataLocalStorage = () => { const setSortablePinnedApps = useSetRecoilState(sortablePinnedAppsAtom); const setSettingsLocalLastUpdated = useSetRecoilState(settingsLocalLastUpdatedAtom); - + const setIsUsingImportExportSettings = useSetRecoilState(isUsingImportExportSettingsAtom) + const setSettingsQDNLastUpdated = useSetRecoilState(settingsQDNLastUpdatedAtom); + const setOldPinnedApps = useSetRecoilState(oldPinnedAppsAtom) + const getSortablePinnedApps = useCallback(()=> { const pinnedAppsLocal = fetchFromLocalStorage('ext_saved_settings') if(pinnedAppsLocal?.sortablePinnedApps){ @@ -28,10 +31,25 @@ export const useRetrieveDataLocalStorage = () => { setSettingsLocalLastUpdated(-1) } + }, []) + const getSortablePinnedAppsImportExport = useCallback(()=> { + const pinnedAppsLocal = fetchFromLocalStorage('ext_saved_settings_import_export') + if(pinnedAppsLocal?.sortablePinnedApps){ + setOldPinnedApps(pinnedAppsLocal?.sortablePinnedApps) + + + setIsUsingImportExportSettings(true) + setSettingsQDNLastUpdated(pinnedAppsLocal?.timestamp || 0) + + } else { + setIsUsingImportExportSettings(false) + } + }, []) useEffect(()=> { getSortablePinnedApps() + getSortablePinnedAppsImportExport() }, [getSortablePinnedApps]) } From 995f29a8f185650d76452ddf2f860ff5a0065689 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 20 Dec 2024 19:34:35 +0200 Subject: [PATCH 035/119] fix fetch resource --- src/common/useFetchResources.tsx | 10 ++++++++++ src/components/Chat/ChatGroup.tsx | 3 ++- src/components/Embeds/AttachmentEmbed.tsx | 2 +- src/components/Embeds/VideoPlayer.tsx | 1 - 4 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/common/useFetchResources.tsx b/src/common/useFetchResources.tsx index a4964ae..04359c0 100644 --- a/src/common/useFetchResources.tsx +++ b/src/common/useFetchResources.tsx @@ -138,6 +138,16 @@ export const useFetchResources = () => { }, })); } + if(res?.status === 'DOWNLOADED'){ + const url = `${getBaseApiReact()}/arbitrary/resource/status/${service}/${name}/${identifier}?build=true`; + const resCall = await fetch(url, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }); + res = await resCall.json(); + } } callFunction() intervalId.current = setInterval(async () => { diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index afcb055..7f02588 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -969,7 +969,8 @@ const clearEditorContent = () => { diff --git a/src/components/Embeds/AttachmentEmbed.tsx b/src/components/Embeds/AttachmentEmbed.tsx index 3de63e3..3480c31 100644 --- a/src/components/Embeds/AttachmentEmbed.tsx +++ b/src/components/Embeds/AttachmentEmbed.tsx @@ -263,7 +263,7 @@ export const AttachmentCard = ({ }}> - {resourceDetails?.status?.status} + {resourceDetails?.status?.status === 'DOWNLOADED' ? 'BUILDING' : resourceDetails?.status?.status} {!resourceDetails && ( <> diff --git a/src/components/Embeds/VideoPlayer.tsx b/src/components/Embeds/VideoPlayer.tsx index 0efa61e..69d31cf 100644 --- a/src/components/Embeds/VideoPlayer.tsx +++ b/src/components/Embeds/VideoPlayer.tsx @@ -440,7 +440,6 @@ export const VideoPlayer: React.FC = ({ } } - console.log('resourceStatus', resourceStatus) return ( Date: Fri, 20 Dec 2024 19:38:54 +0200 Subject: [PATCH 036/119] update version --- electron/package.json | 2 +- src/ExtStates/NotAuthenticated.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electron/package.json b/electron/package.json index acd54c5..5066670 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "qortal-hub", - "version": "0.3.8", + "version": "0.3.9", "description": "A desktop app that gives you access to the Qortal network", "author": { "name": "", diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 3f48a99..76802b1 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -26,7 +26,7 @@ import { cleanUrl, isUsingLocal } from "../background"; import { GlobalContext } from "../App"; const manifestData = { - version: "0.3.8", + version: "0.3.9", }; export const NotAuthenticated = ({ From c5f5c65b569bae266e1eb58efdd74d017d840308 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 20 Dec 2024 21:04:46 +0200 Subject: [PATCH 037/119] fix --- src/components/Save/Save.tsx | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/components/Save/Save.tsx b/src/components/Save/Save.tsx index 8fc6909..0c01315 100644 --- a/src/components/Save/Save.tsx +++ b/src/components/Save/Save.tsx @@ -489,7 +489,19 @@ export const Save = ({ isDesktop, disableWidth, myName }) => { )} )} - + )} + + { Export - - )} - + Date: Sat, 21 Dec 2024 01:57:22 +0200 Subject: [PATCH 038/119] fix payment input --- src/App.tsx | 41 ++++++- src/background.ts | 2 +- src/common/BoundedNumericTextField.tsx | 158 +++++++++++++++++++++++++ src/common/numberFunctions.ts | 63 ++++++++++ 4 files changed, 257 insertions(+), 7 deletions(-) create mode 100644 src/common/BoundedNumericTextField.tsx create mode 100644 src/common/numberFunctions.ts diff --git a/src/App.tsx b/src/App.tsx index 6e58e83..eb5b5b0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -133,6 +133,8 @@ import { RandomSentenceGenerator } from "./utils/seedPhrase/RandomSentenceGenera import { useFetchResources } from "./common/useFetchResources"; import { Tutorials } from "./components/Tutorials/Tutorials"; import { useHandleTutorials } from "./components/Tutorials/useHandleTutorials"; +import { removeLeadingZero } from "./utils/helpers"; +import BoundedNumericTextField from "./common/BoundedNumericTextField"; type extStates = | "not-authenticated" @@ -657,7 +659,8 @@ function App() { setLtcBalanceLoading(false); }); }; - const sendCoinFunc = () => { + const sendCoinFunc = async() => { + try { setSendPaymentError(""); setSendPaymentSuccess(""); if (!paymentTo) { @@ -672,6 +675,12 @@ function App() { setSendPaymentError("Please enter your wallet password"); return; } + const fee = await getFee('PAYMENT') + + await show({ + message: `Would you like to transfer ${Number(paymentAmount)} QORT?` , + paymentFee: fee.fee + ' QORT' + }) setIsLoading(true); window .sendMessage("sendCoin", { @@ -692,6 +701,9 @@ function App() { console.error("Failed to send coin:", error); setIsLoading(false); }); + } catch (error) { + // error + } }; const clearAllStates = () => { @@ -1778,12 +1790,22 @@ function App() { Amount - setPaymentAmount(+e.target.value)} autoComplete="off" + onInput={removeLeadingZero} + /> */} + setPaymentAmount(+e)} /> @@ -2822,14 +2844,21 @@ function App() { aria-labelledby="alert-dialog-title" aria-describedby="alert-dialog-description" > - {"Publish"} + {message.paymentFee ? "Payment" : "Publish"} {message.message} - - publish fee: {message.publishFee} - + {message?.paymentFee && ( + + payment fee: {message.paymentFee} + + )} + {message?.publishFee && ( + + publish fee: {message.publishFee} + + )} diff --git a/src/background.ts b/src/background.ts index bef13d3..f466154 100644 --- a/src/background.ts +++ b/src/background.ts @@ -2282,7 +2282,7 @@ export async function sendCoin( const lastRef = await getLastRef(); const fee = await sendQortFee(); - const validApi = await findUsableApi(); + const validApi = null; const res = await makeTransactionRequest( confirmReceiver, diff --git a/src/common/BoundedNumericTextField.tsx b/src/common/BoundedNumericTextField.tsx new file mode 100644 index 0000000..c997f8a --- /dev/null +++ b/src/common/BoundedNumericTextField.tsx @@ -0,0 +1,158 @@ +import { + IconButton, + InputAdornment, + TextField, + TextFieldProps, +} from "@mui/material"; +import React, { useRef, useState } from "react"; +import AddIcon from "@mui/icons-material/Add"; +import RemoveIcon from "@mui/icons-material/Remove"; +import { + removeTrailingZeros, + setNumberWithinBounds, +} from "./numberFunctions.ts"; +import { CustomInput } from "../App-styles.ts"; + +type eventType = React.ChangeEvent; +type BoundedNumericTextFieldProps = { + minValue: number; + maxValue: number; + addIconButtons?: boolean; + allowDecimals?: boolean; + allowNegatives?: boolean; + afterChange?: (s: string) => void; + initialValue?: string; + maxSigDigits?: number; +} & TextFieldProps; + +export const BoundedNumericTextField = ({ + minValue, + maxValue, + addIconButtons = true, + allowDecimals = true, + allowNegatives = false, + afterChange, + initialValue, + maxSigDigits = 6, + ...props +}: BoundedNumericTextFieldProps) => { + const [textFieldValue, setTextFieldValue] = useState( + initialValue || "" + ); + const ref = useRef(null); + + const stringIsEmpty = (value: string) => { + return value === ""; + }; + const isAllZerosNum = /^0*\.?0*$/; + const isFloatNum = /^-?[0-9]*\.?[0-9]*$/; + const isIntegerNum = /^-?[0-9]+$/; + const skipMinMaxCheck = (value: string) => { + const lastIndexIsDecimal = value.charAt(value.length - 1) === "."; + const isEmpty = stringIsEmpty(value); + const isAllZeros = isAllZerosNum.test(value); + const isInteger = isIntegerNum.test(value); + // skipping minMax on all 0s allows values less than 1 to be entered + + return lastIndexIsDecimal || isEmpty || (isAllZeros && !isInteger); + }; + + const setMinMaxValue = (value: string): string => { + if (skipMinMaxCheck(value)) return value; + const valueNum = Number(value); + + const boundedNum = setNumberWithinBounds(valueNum, minValue, maxValue); + + const numberInBounds = boundedNum === valueNum; + return numberInBounds ? value : boundedNum.toString(); + }; + + const getSigDigits = (number: string) => { + if (isIntegerNum.test(number)) return 0; + const decimalSplit = number.split("."); + return decimalSplit[decimalSplit.length - 1].length; + }; + + const sigDigitsExceeded = (number: string, sigDigits: number) => { + return getSigDigits(number) > sigDigits; + }; + + const filterTypes = (value: string) => { + if (allowDecimals === false) value = value.replace(".", ""); + if (allowNegatives === false) value = value.replace("-", ""); + if (sigDigitsExceeded(value, maxSigDigits)) { + value = value.substring(0, value.length - 1); + } + return value; + }; + const filterValue = (value: string) => { + if (stringIsEmpty(value)) return ""; + value = filterTypes(value); + if (isFloatNum.test(value)) { + return setMinMaxValue(value); + } + return textFieldValue; + }; + + const listeners = (e: eventType) => { + const newValue = filterValue(e.target.value); + setTextFieldValue(newValue); + if (afterChange) afterChange(newValue); + }; + + const changeValueWithIncDecButton = (changeAmount: number) => { + const changedValue = (+textFieldValue + changeAmount).toString(); + const inBoundsValue = setMinMaxValue(changedValue); + setTextFieldValue(inBoundsValue); + if (afterChange) afterChange(inBoundsValue); + }; + + const formatValueOnBlur = (e: eventType) => { + let value = e.target.value; + if (stringIsEmpty(value) || value === ".") { + setTextFieldValue(""); + return; + } + + value = setMinMaxValue(value); + value = removeTrailingZeros(value); + if (isAllZerosNum.test(value)) value = minValue.toString(); + + setTextFieldValue(value); + }; + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { onChange, ...noChangeProps } = { ...props }; + return ( + + changeValueWithIncDecButton(1)}> + {" "} + + changeValueWithIncDecButton(-1)}> + {" "} + + + ) : ( + <> + ), + }} + onChange={e => listeners(e as eventType)} + onBlur={e => { + formatValueOnBlur(e as eventType); + }} + autoComplete="off" + value={textFieldValue} + inputRef={ref} + /> + ); +}; + +export default BoundedNumericTextField; diff --git a/src/common/numberFunctions.ts b/src/common/numberFunctions.ts new file mode 100644 index 0000000..583196c --- /dev/null +++ b/src/common/numberFunctions.ts @@ -0,0 +1,63 @@ +export const truncateNumber = (value: string | number, sigDigits: number) => { + return Number(value).toFixed(sigDigits); +}; + +export const removeTrailingZeros = (s: string) => { + return Number(s).toString(); +}; + +export const setNumberWithinBounds = ( + num: number, + minValue: number, + maxValue: number +) => { + if (num > maxValue) return maxValue; + if (num < minValue) return minValue; + return num; +}; + +export const numberToInt = (num: number) => { + return Math.floor(num); +}; + +type ByteFormat = "Decimal" | "Binary"; +export function formatBytes( + bytes: number, + decimals = 2, + format: ByteFormat = "Binary" +) { + if (bytes === 0) return "0 Bytes"; + + const k = format === "Binary" ? 1024 : 1000; + const dm = decimals < 0 ? 0 : decimals; + const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]; + + const i = Math.floor(Math.log(bytes) / Math.log(k)); + + return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + " " + sizes[i]; +} + +export function formatTime(seconds: number): string { + seconds = Math.floor(seconds); + const minutes: number | string = Math.floor(seconds / 60); + let hours: number | string = Math.floor(minutes / 60); + + let remainingSeconds: number | string = seconds % 60; + let remainingMinutes: number | string = minutes % 60; + + if (remainingSeconds < 10) { + remainingSeconds = "0" + remainingSeconds; + } + + if (remainingMinutes < 10) { + remainingMinutes = "0" + remainingMinutes; + } + + if (hours === 0) { + hours = ""; + } else { + hours = hours + ":"; + } + + return hours + remainingMinutes + ":" + remainingSeconds; +} From 9b88887a63fb6940867e5df3f0d60d7a0d0d117e Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 21 Dec 2024 03:56:38 +0200 Subject: [PATCH 039/119] update builder config --- electron/electron-builder.config.json | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/electron/electron-builder.config.json b/electron/electron-builder.config.json index c6de495..c58de0d 100644 --- a/electron/electron-builder.config.json +++ b/electron/electron-builder.config.json @@ -19,7 +19,8 @@ ], "win": { "target": ["nsis", "portable"], - "icon": "assets/appIcon.ico" + "icon": "assets/appIcon.ico", + "artifactName": "Qortal-Hub-Setup_${version}.exe", }, "linux": { "target": ["AppImage"], @@ -28,23 +29,25 @@ "desktop": { "StartupWMClass": "qortal-ui" }, - "executableName": "Qortal Hub", + "executableName": "Qortal-Hub", "icon": "assets/png", "asar": true }, "deb": { - "artifactName": "Qortal-Hub-Setup.${ext}", + "artifactName": "Qortal-Hub-Setup_${version}.${ext}", "synopsis": "Qortal Hub for Linux" }, "appImage": { "artifactName": "Qortal-Hub.${ext}" }, + "snap": { - "artifactName": "Qortal-Hub-Setup.${ext}", + "artifactName": "Qortal-Hub-Setup_${version}.${ext}", "synopsis": "Qortal Hub for Linux" }, "mac": { "category": "your.app.category.type", "target": "dmg" - } + }, + "productName": "Qortal Hub" } From 0e97ee83a16b7d1ce80906cf429afcc835fbfe08 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 21 Dec 2024 10:59:38 +0200 Subject: [PATCH 040/119] fix player issue --- src/common/useFetchResources.tsx | 25 +++++++++++++++---------- src/components/Embeds/VideoPlayer.tsx | 8 ++++---- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/common/useFetchResources.tsx b/src/common/useFetchResources.tsx index 04359c0..1a4cbd8 100644 --- a/src/common/useFetchResources.tsx +++ b/src/common/useFetchResources.tsx @@ -5,7 +5,6 @@ import { getBaseApiReact } from '../App'; export const useFetchResources = () => { const [resources, setResources] = useRecoilState(resourceDownloadControllerAtom); - const intervalId = useRef(null) const downloadResource = useCallback(({ service, name, identifier }, build) => { setResources((prev) => ({ @@ -24,7 +23,8 @@ export const useFetchResources = () => { let timer = 24; let tries = 0; let calledFirstTime = false - + let intervalId + let timeoutId const callFunction = async ()=> { if (isCalling) return; isCalling = true; @@ -43,8 +43,11 @@ export const useFetchResources = () => { }); res = await resCall.json() if(tries > 18 ){ - if(intervalId?.current){ - clearInterval(intervalId?.current) + if(intervalId){ + clearInterval(intervalId) + } + if(timeoutId){ + clearTimeout(timeoutId) } setResources((prev) => ({ ...prev, @@ -64,7 +67,7 @@ export const useFetchResources = () => { if(build || (calledFirstTime === false && res?.status !== 'READY')){ - const url = `${getBaseApiReact()}/arbitrary/resource/status/${service}/${name}/${identifier}?build=true`; + const url = `${getBaseApiReact()}/arbitrary/resource/properties/${service}/${name}/${identifier}?build=true`; const resCall = await fetch(url, { method: "GET", headers: { @@ -101,7 +104,7 @@ export const useFetchResources = () => { }, })); - setTimeout(() => { + timeoutId = setTimeout(() => { isCalling = false; downloadResource({ name, service, identifier }, true); }, 25000); @@ -124,11 +127,13 @@ export const useFetchResources = () => { // Check if progress is 100% and clear interval if true if (res?.status === 'READY') { - if(intervalId.current){ - clearInterval(intervalId.current); + if(intervalId){ + clearInterval(intervalId); } - + if(timeoutId){ + clearTimeout(timeoutId) + } // Update Recoil state for completion setResources((prev) => ({ ...prev, @@ -150,7 +155,7 @@ export const useFetchResources = () => { } } callFunction() - intervalId.current = setInterval(async () => { + intervalId = setInterval(async () => { callFunction() }, 5000); diff --git a/src/components/Embeds/VideoPlayer.tsx b/src/components/Embeds/VideoPlayer.tsx index 69d31cf..aa20573 100644 --- a/src/components/Embeds/VideoPlayer.tsx +++ b/src/components/Embeds/VideoPlayer.tsx @@ -440,7 +440,7 @@ export const VideoPlayer: React.FC = ({ } } - +console.log('tester', startPlay, resourceStatus?.status, src ) return ( = ({ }} > - {resourceStatus && ( + = ({ <>Download Completed: building tutorial video... ) : resourceStatus?.status !== 'READY' ? ( <> - {getDownloadProgress(resourceStatus?.localChunkCount, resourceStatus?.totalChunkCount)} + {getDownloadProgress(resourceStatus?.localChunkCount || 0, resourceStatus?.totalChunkCount || 100)} ) : ( <>Fetching tutorial from the Qortal Network... )} - )} + )} {((!src && !isLoading) || !startPlay) && ( From 1394bb349bf11fae01fd93ff94f9947606784278 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 21 Dec 2024 21:29:43 +0200 Subject: [PATCH 041/119] fix reading publishes --- src/components/Chat/GroupAnnouncements.tsx | 3 ++- src/components/Embeds/VideoPlayer.tsx | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Chat/GroupAnnouncements.tsx b/src/components/Chat/GroupAnnouncements.tsx index 192114b..cdcd5db 100644 --- a/src/components/Chat/GroupAnnouncements.tsx +++ b/src/components/Chat/GroupAnnouncements.tsx @@ -109,7 +109,8 @@ export const handleUnencryptedPublishes = (publishes) => { let publishesData = [] publishes.forEach((pub)=> { try { - const decodedData = JSON.parse(atob(pub)) + const decryptToUnit8Array = base64ToUint8Array(pub); + const decodedData = uint8ArrayToObject(decryptToUnit8Array); if(decodedData){ publishesData.push({decryptedData: decodedData}) } diff --git a/src/components/Embeds/VideoPlayer.tsx b/src/components/Embeds/VideoPlayer.tsx index aa20573..c28bc99 100644 --- a/src/components/Embeds/VideoPlayer.tsx +++ b/src/components/Embeds/VideoPlayer.tsx @@ -440,7 +440,6 @@ export const VideoPlayer: React.FC = ({ } } -console.log('tester', startPlay, resourceStatus?.status, src ) return ( Date: Mon, 23 Dec 2024 01:53:46 +0200 Subject: [PATCH 042/119] added other buy/sell order coins --- src/background.ts | 62 +++++++++++++----- src/qortalRequests/get.ts | 73 +++++++++++++++++----- src/transactions/TradeBotRespondRequest.ts | 41 ++++++++++++ 3 files changed, 148 insertions(+), 28 deletions(-) create mode 100644 src/transactions/TradeBotRespondRequest.ts diff --git a/src/background.ts b/src/background.ts index f466154..e38f0fe 100644 --- a/src/background.ts +++ b/src/background.ts @@ -30,6 +30,7 @@ import { RequestQueueWithPromise } from "./utils/queue/queue"; import { validateAddress } from "./utils/validateAddress"; import { Sha256 } from "asmcrypto.js"; import { TradeBotRespondMultipleRequest } from "./transactions/TradeBotRespondMultipleRequest"; + import { RESOURCE_TYPE_NUMBER_GROUP_CHAT_REACTIONS } from "./constants/resourceTypes"; import { addDataPublishesCase, @@ -98,6 +99,7 @@ import { voteOnPollCase, } from "./background-cases"; import { getData, removeKeysAndLogout, storeData } from "./utils/chromeStorage"; +import TradeBotRespondRequest from "./transactions/TradeBotRespondRequest"; // import {BackgroundFetch} from '@transistorsoft/capacitor-background-fetch'; export let groupSecretkeys = {} @@ -239,7 +241,16 @@ export const getForeignKey = async (foreignBlockchain)=> { switch (foreignBlockchain) { case "LITECOIN": return parsedData.ltcPrivateKey - + case "DOGECOIN": + return parsedData.dogePrivateKey + case "BITCOIN": + return parsedData.btcPrivateKey + case "DIGIBYTE": + return parsedData.dgbPrivateKey + case "RAVENCOIN": + return parsedData.rvnPrivateKey + case "PIRATECHAIN": + return parsedData.arrrSeed58 default: return null } @@ -1762,20 +1773,42 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo const wallet = await getSaveWallet(); const address = wallet.address0; - - const message = { - addresses: crosschainAtInfo.map((order)=> order.qortalAtAddress), - foreignKey: await getForeignKey(foreignBlockchain), - receivingAddress: address, - }; - let responseVar; - const txn = new TradeBotRespondMultipleRequest().createTransaction( - message - ); + let message + if(foreignBlockchain === 'PIRATECHAIN'){ + console.log('crosschainAtInfo', crosschainAtInfo, crosschainAtInfo[0].qortalAtAddress) + message = { + atAddress: crosschainAtInfo[0].qortalAtAddress, + foreignKey: await getForeignKey(foreignBlockchain), + receivingAddress: address, + }; + } else { + message = { + addresses: crosschainAtInfo.map((order)=> order.qortalAtAddress), + foreignKey: await getForeignKey(foreignBlockchain), + receivingAddress: address, + }; + } - - const url = await createEndpoint('/crosschain/tradebot/respondmultiple') - + let responseVar; + let txn + let url + if(foreignBlockchain === 'PIRATECHAIN'){ + txn = new TradeBotRespondRequest().createTransaction( + message + ); + + + url = await createEndpoint('/crosschain/tradebot/respond') + } else { + txn = new TradeBotRespondMultipleRequest().createTransaction( + message + ); + + + url = await createEndpoint('/crosschain/tradebot/respondmultiple') + } + + console.log('txn', txn, JSON.stringify(txn)) const responseFetch = await fetch( url, { @@ -1787,6 +1820,7 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo } ); + if(!responseFetch?.ok) throw new Error('Failed to submit buy order') const res = await responseFetch.json(); if (res === false) { diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index c7f7046..02f97fc 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -58,6 +58,26 @@ const sellerForeignFee = { value: "~0.00005", ticker: "LTC", }, + DOGECOIN: { + value: "~0.005", + ticker: "DOGE", + }, + BITCOIN: { + value: "~0.0001", + ticker: "BTC", + }, + DIGIBYTE: { + value: "~0.0005", + ticker: "DGB", + }, + RAVENCOIN: { + value: "~0.006", + ticker: "RVN", + }, + PIRATECHAIN: { + value: "~0.0002", + ticker: "ARRR", + }, }; const btcFeePerByte = 0.000001; @@ -1873,6 +1893,28 @@ export const getWalletBalance = async ( } }; +const getPirateWallet = async (arrrSeed58)=> { + const bodyToString = arrrSeed58; + const url = await createEndpoint(`/crosschain/arrr/walletaddress`); + const response = await fetch(url, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: bodyToString, + }); + let res; + try { + res = await response.clone().json(); + } catch (e) { + res = await response.text(); + } + if (res?.error && res?.message) { + throw new Error(res.message); + } + return res +} + export const getUserWalletFunc = async (coin) => { let userWallet = {}; const wallet = await getSaveWallet(); @@ -1885,26 +1927,34 @@ export const getUserWalletFunc = async (coin) => { userWallet["publickey"] = parsedData.publicKey; break; case "BTC": + case "BITCOIN": userWallet["address"] = parsedData.btcAddress; userWallet["publickey"] = parsedData.btcPublicKey; break; case "LTC": + case "LITECOIN": userWallet["address"] = parsedData.ltcAddress; userWallet["publickey"] = parsedData.ltcPublicKey; break; case "DOGE": + case "DOGECOIN": userWallet["address"] = parsedData.dogeAddress; userWallet["publickey"] = parsedData.dogePublicKey; break; case "DGB": + case "DIGIBYTE": userWallet["address"] = parsedData.dgbAddress; userWallet["publickey"] = parsedData.dgbPublicKey; break; case "RVN": + case "RAVENCOIN": userWallet["address"] = parsedData.rvnAddress; userWallet["publickey"] = parsedData.rvnPublicKey; break; case "ARRR": + case "PIRATECHAIN": + const arrrAddress = await getPirateWallet(parsedData.arrrSeed58) + userWallet["address"] = arrrAddress break; default: break; @@ -2492,7 +2542,7 @@ export const sendCoin = async (data, isFromExtension) => { throw new Error("Unable to fetch BTC balance"); } const btcWalletBalanceDecimals = Number(btcWalletBalance); - const btcAmountDecimals = Number(amount) * QORT_DECIMALS; + const btcAmountDecimals = Number(amount); const fee = feePerByte * 500; // default 0.00050000 if (btcAmountDecimals + fee > btcWalletBalanceDecimals) { throw new Error("INSUFFICIENT_FUNDS"); @@ -2549,8 +2599,7 @@ export const sendCoin = async (data, isFromExtension) => { throw new Error(errorMsg); } const ltcWalletBalanceDecimals = Number(ltcWalletBalance); - const ltcAmountDecimals = Number(amount) * QORT_DECIMALS; - const balance = (Number(ltcWalletBalance) / 1e8).toFixed(8); + const ltcAmountDecimals = Number(amount); const fee = feePerByte * 1000; // default 0.00030000 if (ltcAmountDecimals + fee > ltcWalletBalanceDecimals) { throw new Error("Insufficient Funds!"); @@ -2596,7 +2645,6 @@ export const sendCoin = async (data, isFromExtension) => { } else if (checkCoin === "DOGE") { const amount = Number(data.amount); const recipient = data.destinationAddress; - const coin = data.coin; const xprv58 = parsedData.dogePrivateKey; const feePerByte = data.fee ? data.fee : dogeFeePerByte; const dogeWalletBalance = await getWalletBalance({ coin: checkCoin }, true); @@ -2605,8 +2653,7 @@ export const sendCoin = async (data, isFromExtension) => { throw new Error(errorMsg); } const dogeWalletBalanceDecimals = Number(dogeWalletBalance); - const dogeAmountDecimals = Number(amount) * QORT_DECIMALS; - const balance = (Number(dogeWalletBalance) / 1e8).toFixed(8); + const dogeAmountDecimals = Number(amount); const fee = feePerByte * 5000; // default 0.05000000 if (dogeAmountDecimals + fee > dogeWalletBalanceDecimals) { let errorMsg = "Insufficient Funds!"; @@ -2663,7 +2710,7 @@ export const sendCoin = async (data, isFromExtension) => { throw new Error(errorMsg); } const dgbWalletBalanceDecimals = Number(dgbWalletBalance); - const dgbAmountDecimals = Number(amount) * QORT_DECIMALS; + const dgbAmountDecimals = Number(amount); const fee = feePerByte * 500; // default 0.00005000 if (dgbAmountDecimals + fee > dgbWalletBalanceDecimals) { let errorMsg = "Insufficient Funds!"; @@ -2712,7 +2759,6 @@ export const sendCoin = async (data, isFromExtension) => { } else if (checkCoin === "RVN") { const amount = Number(data.amount); const recipient = data.destinationAddress; - const coin = data.coin; const xprv58 = parsedData.rvnPrivateKey; const feePerByte = data.fee ? data.fee : rvnFeePerByte; const rvnWalletBalance = await getWalletBalance({ coin: checkCoin }, true); @@ -2721,8 +2767,7 @@ export const sendCoin = async (data, isFromExtension) => { throw new Error(errorMsg); } const rvnWalletBalanceDecimals = Number(rvnWalletBalance); - const rvnAmountDecimals = Number(amount) * QORT_DECIMALS; - const balance = (Number(rvnWalletBalance) / 1e8).toFixed(8); + const rvnAmountDecimals = Number(amount); const fee = feePerByte * 500; // default 0.00562500 if (rvnAmountDecimals + fee > rvnWalletBalanceDecimals) { let errorMsg = "Insufficient Funds!"; @@ -2771,7 +2816,7 @@ export const sendCoin = async (data, isFromExtension) => { } else if (checkCoin === "ARRR") { const amount = Number(data.amount); const recipient = data.destinationAddress; - const memo = data.memo; + const memo = data?.memo; const arrrWalletBalance = await getWalletBalance({ coin: checkCoin }, true); if (isNaN(Number(arrrWalletBalance))) { @@ -2779,7 +2824,7 @@ export const sendCoin = async (data, isFromExtension) => { throw new Error(errorMsg); } const arrrWalletBalanceDecimals = Number(arrrWalletBalance); - const arrrAmountDecimals = Number(amount) * QORT_DECIMALS; + const arrrAmountDecimals = Number(amount); const fee = 0.0001; if (arrrAmountDecimals + fee > arrrWalletBalanceDecimals) { let errorMsg = "Insufficient Funds!"; @@ -2804,7 +2849,7 @@ export const sendCoin = async (data, isFromExtension) => { arrrAmount: amount, memo: memo, }; - const url = await createEndpoint(`/crosschain/btc/send`); + const url = await createEndpoint(`/crosschain/arrr/send`); const response = await fetch(url, { method: "POST", @@ -3023,7 +3068,7 @@ export const createSellOrder = async (data, isFromExtension) => { throw new Error(errorMsg); } - const receivingAddress = await getUserWalletFunc("LTC"); + const receivingAddress = await getUserWalletFunc(data.foreignBlockchain); try { const resPermission = await getUserPermission( { diff --git a/src/transactions/TradeBotRespondRequest.ts b/src/transactions/TradeBotRespondRequest.ts new file mode 100644 index 0000000..fcd1af5 --- /dev/null +++ b/src/transactions/TradeBotRespondRequest.ts @@ -0,0 +1,41 @@ +// @ts-nocheck + +/** + * CrossChain - TradeBot Respond Request (Buy Action) + * + * These are special types of transactions (JSON ENCODED) + */ + +export default class TradeBotRespondRequest { + constructor() { + // ... + } + + createTransaction(txnReq) { + this.atAddress(txnReq.atAddress) + this.foreignKey(txnReq.foreignKey) + this.receivingAddress(txnReq.receivingAddress) + + return this.txnRequest() + } + + atAddress(atAddress) { + this._atAddress = atAddress + } + + foreignKey(foreignKey) { + this._foreignKey = foreignKey + } + + receivingAddress(receivingAddress) { + this._receivingAddress = receivingAddress + } + + txnRequest() { + return { + atAddress: this._atAddress, + foreignKey: this._foreignKey, + receivingAddress: this._receivingAddress + } + } +} From 3d68cbf556aef0bae183dd40e80ff5f042c457d3 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 23 Dec 2024 07:10:04 +0200 Subject: [PATCH 043/119] remove logs --- src/background.ts | 2 -- src/qortalRequests/get.ts | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/background.ts b/src/background.ts index e38f0fe..4e6c9e6 100644 --- a/src/background.ts +++ b/src/background.ts @@ -1775,7 +1775,6 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo const address = wallet.address0; let message if(foreignBlockchain === 'PIRATECHAIN'){ - console.log('crosschainAtInfo', crosschainAtInfo, crosschainAtInfo[0].qortalAtAddress) message = { atAddress: crosschainAtInfo[0].qortalAtAddress, foreignKey: await getForeignKey(foreignBlockchain), @@ -1808,7 +1807,6 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo url = await createEndpoint('/crosschain/tradebot/respondmultiple') } - console.log('txn', txn, JSON.stringify(txn)) const responseFetch = await fetch( url, { diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 02f97fc..53a6277 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -1894,6 +1894,10 @@ export const getWalletBalance = async ( }; const getPirateWallet = async (arrrSeed58)=> { + const isGateway = await isRunningGateway(); + if (isGateway) { + throw new Error("Retrieving PIRATECHAIN balance is not allowed through a gateway."); + } const bodyToString = arrrSeed58; const url = await createEndpoint(`/crosschain/arrr/walletaddress`); const response = await fetch(url, { From 277bc3f9b7daf7b415ecc8e2455600dd9194f47d Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 25 Dec 2024 06:12:45 +0200 Subject: [PATCH 044/119] fix --- src/background.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/background.ts b/src/background.ts index 4e6c9e6..38eb910 100644 --- a/src/background.ts +++ b/src/background.ts @@ -1818,8 +1818,11 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo } ); - if(!responseFetch?.ok) throw new Error('Failed to submit buy order') const res = await responseFetch.json(); + if(res?.error && res?.message){ + throw new Error(res?.message) + } + if(!responseFetch?.ok) throw new Error('Failed to submit buy order') if (res === false) { responseVar = { From a54b8e777418931522acf407113859580190ea5c Mon Sep 17 00:00:00 2001 From: AlphaX-Qortal Date: Wed, 25 Dec 2024 17:58:12 +0100 Subject: [PATCH 045/119] Update electron builds --- capacitor.config.ts | 4 +- electron/capacitor.config.ts | 4 +- electron/electron-builder.config.arm.json | 46 ++ electron/electron-builder.config.json | 4 +- electron/electron-builder.config.lin.json | 56 ++ electron/electron-builder.config.win.json | 44 + electron/package-lock.json | 948 +++++++++++----------- electron/package.json | 18 +- electron/scripts/add-debian-apt-repo.sh | 29 + electron/scripts/afterPack.js | 39 + electron/scripts/notarize.js | 21 + electron/scripts/uninstall-debian-conf.sh | 34 + 12 files changed, 740 insertions(+), 507 deletions(-) create mode 100644 electron/electron-builder.config.arm.json create mode 100644 electron/electron-builder.config.lin.json create mode 100644 electron/electron-builder.config.win.json create mode 100644 electron/scripts/add-debian-apt-repo.sh create mode 100644 electron/scripts/afterPack.js create mode 100644 electron/scripts/notarize.js create mode 100644 electron/scripts/uninstall-debian-conf.sh diff --git a/capacitor.config.ts b/capacitor.config.ts index d64b8cd..c7f641f 100644 --- a/capacitor.config.ts +++ b/capacitor.config.ts @@ -1,8 +1,8 @@ import type { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { - appId: 'com.example.app', - appName: 'Qortal ', + appId: 'org.Qortal.Qortal-Hub', + appName: 'Qortal-Hub', webDir: 'dist', "plugins": { "LocalNotifications": { diff --git a/electron/capacitor.config.ts b/electron/capacitor.config.ts index d64b8cd..c7f641f 100644 --- a/electron/capacitor.config.ts +++ b/electron/capacitor.config.ts @@ -1,8 +1,8 @@ import type { CapacitorConfig } from '@capacitor/cli'; const config: CapacitorConfig = { - appId: 'com.example.app', - appName: 'Qortal ', + appId: 'org.Qortal.Qortal-Hub', + appName: 'Qortal-Hub', webDir: 'dist', "plugins": { "LocalNotifications": { diff --git a/electron/electron-builder.config.arm.json b/electron/electron-builder.config.arm.json new file mode 100644 index 0000000..fb32b66 --- /dev/null +++ b/electron/electron-builder.config.arm.json @@ -0,0 +1,46 @@ +{ + "appId": "org.qortal.Qortal-Hub", + "productName": "Qortal Hub", + "copyright": "Copyright © 2021 - 2025 Qortal", + "compression": "normal", + "asar": "true", + "afterPack": "scripts/afterPack.js", + "files": [ + "assets/**/*", + "build/**/*", + "capacitor.config.*", + "app/**/*" + ], + "linux": { + "target": [ + "AppImage", + "deb" + ], + "category": "Network", + "packageCategory": "Network", + "desktop": { + "StartupWMClass": "qortal-hub" + }, + "executableName": "Qortal Hub", + "icon": "assets/png" + }, + "appImage": { + "artifactName": "Qortal-Hub-Setup-arm64_${version}.${ext}" + }, + "deb": { + "artifactName": "Qortal-Hub-Setup-arm64_${version}.${ext}", + "synopsis": "Qortal Hub for Linux" + }, + "directories": { + "output": "dist", + "buildResources": "resources" + }, + "publish": [ + { + "provider": "github", + "owner": "Qortal", + "repo": "Qortal-Hub", + "releaseType": "draft" + } + ] +} diff --git a/electron/electron-builder.config.json b/electron/electron-builder.config.json index c58de0d..5225e4a 100644 --- a/electron/electron-builder.config.json +++ b/electron/electron-builder.config.json @@ -1,5 +1,5 @@ { - "appId": "com.github.Qortal.Qortal-Hub", + "appId": "org.Qortal.Qortal-Hub", "directories": { "buildResources": "resources" }, @@ -27,7 +27,7 @@ "category": "Network", "packageCategory": "Network", "desktop": { - "StartupWMClass": "qortal-ui" + "StartupWMClass": "qortal-hub" }, "executableName": "Qortal-Hub", "icon": "assets/png", diff --git a/electron/electron-builder.config.lin.json b/electron/electron-builder.config.lin.json new file mode 100644 index 0000000..dc76fd9 --- /dev/null +++ b/electron/electron-builder.config.lin.json @@ -0,0 +1,56 @@ +{ + "appId": "org.qortal.Qortal-Hub", + "productName": "Qortal Hub", + "copyright": "Copyright © 2021 - 2025 Qortal", + "compression": "normal", + "asar": "true", + "afterPack": "scripts/afterPack.js", + "files": [ + "assets/**/*", + "build/**/*", + "capacitor.config.*", + "app/**/*" + ], + "linux": { + "target": [ + "AppImage", + "deb", + "snap", + "rpm" + ], + "category": "Network", + "packageCategory": "Network", + "desktop": { + "StartupWMClass": "qortal-hub" + }, + "executableName": "Qortal Hub", + "icon": "assets/png" + }, + "appImage": { + "artifactName": "Qortal-Hub_${version}.${ext}" + }, + "deb": { + "artifactName": "Qortal-Hub-Setup_${version}.${ext}", + "synopsis": "Qortal Hub for Linux" + }, + "snap": { + "artifactName": "Qortal-Hub-Setup_${version}.${ext}", + "synopsis": "Qortal Hub for Linux" + }, + "rpm": { + "artifactName": "Qortal-Hub-Setup_${version}.${ext}", + "synopsis": "Qortal Hub for Linux" + }, + "directories": { + "output": "dist", + "buildResources": "resources" + }, + "publish": [ + { + "provider": "github", + "owner": "Qortal", + "repo": "Qortal-Hub", + "releaseType": "draft" + } + ] +} diff --git a/electron/electron-builder.config.win.json b/electron/electron-builder.config.win.json new file mode 100644 index 0000000..4097af6 --- /dev/null +++ b/electron/electron-builder.config.win.json @@ -0,0 +1,44 @@ +{ + "appId": "org.qortal.Qortal-Hub", + "productName": "Qortal Hub", + "copyright": "Copyright © 2021 - 2025 Qortal", + "compression": "normal", + "asar": "true", + "files": [ + "assets/**/*", + "build/**/*", + "capacitor.config.*", + "app/**/*" + ], + "win": { + "legalTrademarks": "QORTAL.ORG", + "icon": "assets/appIcon.ico", + "target": [ + "nsis", + "portable" + ] + }, + "nsis": { + "artifactName": "Qortal-Hub-Setup-win64_${version}.${ext}", + "allowElevation": true, + "oneClick": false, + "allowToChangeInstallationDirectory": true, + "perMachine": true, + "runAfterFinish": true, + "deleteAppDataOnUninstall": true, + "createDesktopShortcut": true, + "createStartMenuShortcut": true + }, + "directories": { + "output": "dist", + "buildResources": "resources" + }, + "publish": [ + { + "provider": "github", + "owner": "Qortal", + "repo": "Qortal-Hub", + "releaseType": "draft" + } + ] +} diff --git a/electron/package-lock.json b/electron/package-lock.json index 6642e13..363a9f1 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -1,12 +1,12 @@ { "name": "qortal-hub", - "version": "0.3.3", + "version": "0.3.9", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qortal-hub", - "version": "0.3.3", + "version": "0.3.9", "license": "MIT", "dependencies": { "@capacitor-community/electron": "^5.0.0", @@ -19,9 +19,11 @@ "electron-window-state": "^5.0.3" }, "devDependencies": { - "electron": "^26.2.2", + "@electron/notarize": "^2.5.0", + "@electron/rebuild": "^3.2.10", + "electron": "^33.2.1", "electron-builder": "~23.6.0", - "electron-rebuild": "^3.2.9", + "shelljs": "^0.8.5", "typescript": "^5.0.4" } }, @@ -44,14 +46,13 @@ } }, "node_modules/@capacitor/cli": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.1.2.tgz", - "integrity": "sha512-HKCNGE0RP8U7aiEF2vg5wTivJROS8BVfu8a3yYJb1mRQvzv+czpmtHNsTWS/WukvwoxUjyjRmsNQSAACHfMTmQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@capacitor/cli/-/cli-6.2.0.tgz", + "integrity": "sha512-EWcXG39mZh35zrHhOqzN1ILeSyMRyEqWVtQDXqMGjCXYRH6b6p5TvyvLDN8ZNy26tbhI3i79gfrgirt+mNwuuw==", "license": "MIT", "dependencies": { "@ionic/cli-framework-output": "^2.2.5", "@ionic/utils-fs": "^3.1.6", - "@ionic/utils-process": "^2.1.11", "@ionic/utils-subprocess": "2.1.11", "@ionic/utils-terminal": "^2.3.3", "commander": "^9.3.0", @@ -77,9 +78,9 @@ } }, "node_modules/@capacitor/core": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.1.2.tgz", - "integrity": "sha512-xFy1/4qLFLp5WCIzIhtwUuVNNoz36+V7/BzHmLqgVJcvotc4MMjswW/TshnPQaLLujEOaLkA4h8ZJ0uoK3ImGg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/@capacitor/core/-/core-6.2.0.tgz", + "integrity": "sha512-B9IlJtDpUqhhYb+T8+cp2Db/3RETX36STgjeU2kQZBs/SLAcFiMama227o+msRjLeo3DO+7HJjWVA1+XlyyPEg==", "license": "MIT", "dependencies": { "tslib": "^2.1.0" @@ -160,6 +161,132 @@ "node": ">= 4.0.0" } }, + "node_modules/@electron/node-gyp": { + "version": "10.2.0-electron.1", + "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", + "integrity": "sha512-CrYo6TntjpoMO1SHjl5Pa/JoUsECNqNdB7Kx49WLQpWzPw53eEITJ2Hs9fh/ryUYDn4pxZz11StaBYBrLFJdqg==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^8.1.0", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.2.1", + "nopt": "^6.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "tar": "^6.2.1", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@electron/notarize": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.1", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@electron/notarize/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@electron/notarize/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@electron/rebuild": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.1.tgz", + "integrity": "sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "node-abi": "^3.45.0", + "node-api-version": "^0.2.0", + "ora": "^5.1.0", + "read-binary-file-arch": "^1.0.6", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/@electron/rebuild/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@electron/rebuild/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/@electron/universal": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", @@ -179,6 +306,29 @@ "node": ">=8.6" } }, + "node_modules/@electron/universal/node_modules/@malept/cross-spawn-promise": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", + "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/@electron/universal/node_modules/fs-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -285,33 +435,53 @@ } }, "node_modules/@ionic/utils-object": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.6.tgz", - "integrity": "sha512-vCl7sl6JjBHFw99CuAqHljYJpcE88YaH2ZW4ELiC/Zwxl5tiwn4kbdP/gxi2OT3MQb1vOtgAmSNRtusvgxI8ww==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", + "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==", "license": "MIT", "dependencies": { "debug": "^4.0.0", "tslib": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=10.3.0" } }, "node_modules/@ionic/utils-process": { - "version": "2.1.12", - "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.12.tgz", - "integrity": "sha512-Jqkgyq7zBs/v/J3YvKtQQiIcxfJyplPgECMWgdO0E1fKrrH8EF0QGHNJ9mJCn6PYe2UtHNS8JJf5G21e09DfYg==", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz", + "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==", "license": "MIT", "dependencies": { - "@ionic/utils-object": "2.1.6", - "@ionic/utils-terminal": "2.3.5", + "@ionic/utils-object": "2.1.5", + "@ionic/utils-terminal": "2.3.3", "debug": "^4.0.0", "signal-exit": "^3.0.3", "tree-kill": "^1.2.2", "tslib": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=10.3.0" + } + }, + "node_modules/@ionic/utils-process/node_modules/@ionic/utils-terminal": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz", + "integrity": "sha512-RnuSfNZ5fLEyX3R5mtcMY97cGD1A0NVBbarsSQ6yMMfRJ5YHU7hHVyUfvZeClbqkBC/pAqI/rYJuXKCT9YeMCQ==", + "license": "MIT", + "dependencies": { + "@types/slice-ansi": "^4.0.0", + "debug": "^4.0.0", + "signal-exit": "^3.0.3", + "slice-ansi": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "tslib": "^2.0.1", + "untildify": "^4.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.3.0" } }, "node_modules/@ionic/utils-stream": { @@ -361,36 +531,6 @@ "node": ">=10.3.0" } }, - "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-object": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@ionic/utils-object/-/utils-object-2.1.5.tgz", - "integrity": "sha512-XnYNSwfewUqxq+yjER1hxTKggftpNjFLJH0s37jcrNDwbzmbpFTQTVAp4ikNK4rd9DOebX/jbeZb8jfD86IYxw==", - "license": "MIT", - "dependencies": { - "debug": "^4.0.0", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.3.0" - } - }, - "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-process": { - "version": "2.1.10", - "resolved": "https://registry.npmjs.org/@ionic/utils-process/-/utils-process-2.1.10.tgz", - "integrity": "sha512-mZ7JEowcuGQK+SKsJXi0liYTcXd2bNMR3nE0CyTROpMECUpJeAvvaBaPGZf5ERQUPeWBVuwqAqjUmIdxhz5bxw==", - "license": "MIT", - "dependencies": { - "@ionic/utils-object": "2.1.5", - "@ionic/utils-terminal": "2.3.3", - "debug": "^4.0.0", - "signal-exit": "^3.0.3", - "tree-kill": "^1.2.2", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=10.3.0" - } - }, "node_modules/@ionic/utils-subprocess/node_modules/@ionic/utils-terminal": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@ionic/utils-terminal/-/utils-terminal-2.3.3.tgz", @@ -459,9 +599,9 @@ } }, "node_modules/@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", "dev": true, "funding": [ { @@ -478,7 +618,7 @@ "cross-spawn": "^7.0.1" }, "engines": { - "node": ">= 10" + "node": ">= 12.13.0" } }, "node_modules/@malept/flatpak-bundler": { @@ -555,6 +695,28 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/@npmcli/move-file/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@npmcli/move-file/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -698,12 +860,12 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.8.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.8.5.tgz", - "integrity": "sha512-5iYk6AMPtsMbkZqCO1UGF9W5L38twq11S2pYWkybGHH2ogPUvXWNlQqJBzuEZWKj/WRH+QTeiv6ySWqJtvIEgA==", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "license": "MIT", "dependencies": { - "undici-types": "~6.19.8" + "undici-types": "~6.20.0" } }, "node_modules/@types/plist": { @@ -803,6 +965,7 @@ "version": "0.5.16", "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.16.tgz", "integrity": "sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==", + "license": "MIT", "engines": { "node": ">=12.0" } @@ -984,28 +1147,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/are-we-there-yet": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", - "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1045,6 +1186,28 @@ "node": ">= 6" } }, + "node_modules/asar/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -1399,37 +1562,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/cacache/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/cacache/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/cacache/node_modules/lru-cache": { "version": "7.18.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", @@ -1440,19 +1572,6 @@ "node": ">=12" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cacache/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -1483,17 +1602,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/cacache/node_modules/rimraf/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -1516,19 +1624,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/cacache/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -1578,6 +1673,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -1751,16 +1847,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colors": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", @@ -1810,13 +1896,6 @@ "dev": true, "license": "MIT" }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", - "dev": true, - "license": "ISC" - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1837,9 +1916,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "license": "MIT", "dependencies": { "path-key": "^3.1.0", @@ -1851,9 +1930,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1975,13 +2054,6 @@ "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true, - "license": "MIT" - }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -2149,15 +2221,15 @@ } }, "node_modules/electron": { - "version": "26.6.10", - "resolved": "https://registry.npmjs.org/electron/-/electron-26.6.10.tgz", - "integrity": "sha512-pV2SD0RXzAiNRb/2yZrsVmVkBOMrf+DVsPulIgRjlL0+My9BL5spFuhHVMQO9yHl9tFpWtuRpQv0ofM/i9P8xg==", + "version": "33.2.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-33.2.1.tgz", + "integrity": "sha512-SG/nmSsK9Qg1p6wAW+ZfqU+AV8cmXMTIklUL18NnOKfZLlum4ZsDoVdmmmlL39ZmeCaq27dr7CgslRPahfoVJg==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", - "@types/node": "^18.11.18", + "@types/node": "^20.9.0", "extract-zip": "^2.0.1" }, "bin": { @@ -2339,87 +2411,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/electron-rebuild": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-3.2.9.tgz", - "integrity": "sha512-FkEZNFViUem3P0RLYbZkUjC8LUFIK+wKq09GHoOITSJjfDAVQv964hwaNseTTWt58sITQX3/5fHNYcTefqaCWw==", - "deprecated": "Please use @electron/rebuild moving forward. There is no API change, just a package name change", - "dev": true, - "license": "MIT", - "dependencies": { - "@malept/cross-spawn-promise": "^2.0.0", - "chalk": "^4.0.0", - "debug": "^4.1.1", - "detect-libc": "^2.0.1", - "fs-extra": "^10.0.0", - "got": "^11.7.0", - "lzma-native": "^8.0.5", - "node-abi": "^3.0.0", - "node-api-version": "^0.1.4", - "node-gyp": "^9.0.0", - "ora": "^5.1.0", - "semver": "^7.3.5", - "tar": "^6.0.5", - "yargs": "^17.0.1" - }, - "bin": { - "electron-rebuild": "lib/src/cli.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, - "node_modules/electron-rebuild/node_modules/@malept/cross-spawn-promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", - "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], - "license": "Apache-2.0", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/electron-rebuild/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/electron-rebuild/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, "node_modules/electron-serve": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/electron-serve/-/electron-serve-1.1.0.tgz", @@ -2499,19 +2490,19 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "18.19.62", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.62.tgz", - "integrity": "sha512-UOGhw+yZV/icyM0qohQVh3ktpY40Sp7tdTW7HxG3pTd7AiMrlFlAJNUrGK9t5mdW0+ViQcFV74zCSIx9ZJpncA==", + "version": "20.17.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", + "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/electron/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true, "license": "MIT" }, @@ -2586,15 +2577,12 @@ "license": "MIT" }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -2837,32 +2825,10 @@ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, "license": "MIT", - "optional": true, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2873,27 +2839,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -2911,9 +2856,9 @@ } }, "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", @@ -2921,12 +2866,11 @@ "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "*" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2944,6 +2888,29 @@ "node": ">= 6" } }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/global-agent": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", @@ -3013,14 +2980,14 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", "optional": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3088,48 +3055,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true, - "license": "ISC" - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", - "optional": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -3315,6 +3246,16 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/ip-address": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", @@ -3354,6 +3295,22 @@ "is-ci": "bin.js" } }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -3636,32 +3593,6 @@ "node": ">=10" } }, - "node_modules/lzma-native": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/lzma-native/-/lzma-native-8.0.6.tgz", - "integrity": "sha512-09xfg67mkL2Lz20PrrDeNYZxzeW7ADtpYFbwSQh9U8+76RIzx5QsJBMy8qikv3hbUPfpy6hqwxt6FcGK81g9AA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^3.1.0", - "node-gyp-build": "^4.2.1", - "readable-stream": "^3.6.0" - }, - "bin": { - "lzmajs": "bin/lzmajs" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/lzma-native/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true, - "license": "MIT" - }, "node_modules/make-fetch-happen": { "version": "10.2.1", "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", @@ -3959,70 +3890,15 @@ "optional": true }, "node_modules/node-api-version": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.1.4.tgz", - "integrity": "sha512-KGXihXdUChwJAOHO53bv9/vXcLmdUsZ6jIptbvYvkpKfth+r7jw44JkVxQFA3kX5nQjzjmGu1uAu/xNNLNlI5g==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.0.tgz", + "integrity": "sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==", "dev": true, "license": "MIT", "dependencies": { "semver": "^7.3.5" } }, - "node_modules/node-gyp": { - "version": "9.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", - "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" - } - }, - "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", - "dev": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/nopt": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", @@ -4061,23 +3937,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -4199,6 +4058,13 @@ "node": ">=8" } }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -4262,6 +4128,16 @@ "node": ">=10.4.0" } }, + "node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -4349,6 +4225,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "bin": { + "read-binary-file-arch": "cli.js" + } + }, "node_modules/read-config-file": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", @@ -4392,6 +4281,18 @@ "node": ">=8.10.0" } }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -4402,6 +4303,27 @@ "node": ">=0.10.0" } }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", @@ -4621,13 +4543,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "license": "ISC" - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4649,6 +4564,46 @@ "node": ">=8" } }, + "node_modules/shelljs": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", + "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shelljs/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -4862,6 +4817,19 @@ "node": ">=8" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/tar": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", @@ -5000,9 +4968,9 @@ } }, "node_modules/tslib": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", - "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, "node_modules/type-fest": { @@ -5027,9 +4995,9 @@ } }, "node_modules/typescript": { - "version": "5.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", - "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", "dev": true, "license": "Apache-2.0", "bin": { @@ -5041,9 +5009,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", "license": "MIT" }, "node_modules/unique-filename": { @@ -5153,16 +5121,6 @@ "node": ">= 8" } }, - "node_modules/wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/electron/package.json b/electron/package.json index 5066670..8bdb3cf 100644 --- a/electron/package.json +++ b/electron/package.json @@ -9,10 +9,10 @@ "homepage": "https://qortal.dev", "repository": { "type": "git", - "url": "" + "url": "git+https://github.com/Qortal/Qortal-Hub.git" }, "build": { - "appId": "com.github.Qortal.Qortal-Hub", + "appId": "org.Qortal.Qortal-Hub", "publish": [ { "provider": "github", @@ -29,7 +29,11 @@ "electron:start": "npm run build && electron --inspect=5858 ./", "electron:pack": "npm run build && electron-builder build --dir -c ./electron-builder.config.json", "electron:make": "npm run build && electron-builder build -c ./electron-builder.config.json -p always", - "electron:make-local": "npm run build && electron-builder build -c ./electron-builder.config.json --publish=never" + "electron:make-local": "npm run build && electron-builder build -c ./electron-builder.config.json --publish=never", + "electron:make-lin": "npm run build && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l", + "electron:make-win": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w", + "electron:make-arm": "npm run build && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64", + "electron:make-all": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64" }, "dependencies": { "@capacitor-community/electron": "^5.0.0", @@ -42,10 +46,12 @@ "electron-window-state": "^5.0.3" }, "devDependencies": { - "electron": "^26.2.2", + "electron": "^33.2.1", "electron-builder": "~23.6.0", - "electron-rebuild": "^3.2.9", - "typescript": "^5.0.4" + "@electron/rebuild": "^3.2.10", + "@electron/notarize": "^2.5.0", + "typescript": "^5.0.4", + "shelljs": "^0.8.5" }, "keywords": [ "capacitor", diff --git a/electron/scripts/add-debian-apt-repo.sh b/electron/scripts/add-debian-apt-repo.sh new file mode 100644 index 0000000..ca56444 --- /dev/null +++ b/electron/scripts/add-debian-apt-repo.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +# Make necessary config and add Qortal Hub apt repo + +# SCript to run HUB without sandbox +echo \'/opt/${productFilename}/qortal-hub\' --no-sandbox > '/opt/${productFilename}/run-hub' +chmod +x '/opt/${productFilename}/run-hub' + +# Link to run-ui +ln -sf '/opt/${productFilename}/run-hub' '/usr/bin/${executable}' + +# SUID chrome-sandbox for Electron 5+ +sudo chown root '/opt/${productFilename}/chrome-sandbox' || true +sudo chmod 4755 '/opt/${productFilename}/chrome-sandbox' || true + +update-mime-database /usr/share/mime || true +update-desktop-database /usr/share/applications || true + +# Install curl if not installed on the system +if ! which curl; then sudo apt-get --yes install curl; fi + +# Install apt repository source list if it does not exist +if ! grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep qortal-hub.list; then + curl -sS https://update.qortal-hub.org/qortal-hub.gpg | sudo apt-key add - + sudo rm -rf /usr/share/keyrings/qortal-hub.gpg + sudo apt-key export E191E7C3 | sudo gpg --dearmour -o /usr/share/keyrings/qortal-hub.gpg + sudo rm -rf /etc/apt/sources.list.d/qortal-hub.list + echo 'deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/qortal-hub.gpg] https://update.qortal-hub.org/ ./ ' | sudo tee /etc/apt/sources.list.d/qortal-hub.list +fi diff --git a/electron/scripts/afterPack.js b/electron/scripts/afterPack.js new file mode 100644 index 0000000..f7084bd --- /dev/null +++ b/electron/scripts/afterPack.js @@ -0,0 +1,39 @@ +const path = require('path') +const shell = require("shelljs") + +const runShellCommand = (appOutDir) => { + shell.exec( + `chmod 4755 ${path.join(appOutDir, "chrome-sandbox")}`, + + function (code, stdout, stderr) { + console.log('runShellCommand ==> Exit code:', code) + if (stderr) { + console.log('runShellCommand ==> Program stderr:', stderr) + } + } + ) +} + +async function doLinux(context) { + console.log("Running doLinux ==> ") + + const { targets, appOutDir } = context + + targets.forEach(async target => { + if (!["appimage", "snap"].includes(target.name.toLowerCase())) { + await runShellCommand(appOutDir) + } + }) +} + +async function afterPack(context) { + console.log("Running AfterPack") + + const electronPlatformName = context.electronPlatformName.toLowerCase() + + if (electronPlatformName.includes("linux")) { + await doLinux(context) + } +} + +module.exports = afterPack \ No newline at end of file diff --git a/electron/scripts/notarize.js b/electron/scripts/notarize.js new file mode 100644 index 0000000..d09de36 --- /dev/null +++ b/electron/scripts/notarize.js @@ -0,0 +1,21 @@ +require('dotenv').config() +const { notarize } = require('@electron/notarize') + +exports.default = async function notarizing(context) { + const { electronPlatformName, appOutDir } = context + + if (electronPlatformName !== 'darwin') { + return + } + + const appName = context.packager.appInfo.productFilename + + return await notarize({ + appBundleId: 'org.qortal.Qortal-Hub', + appPath: `${appOutDir}/${appName}.app`, + tool: "notarytool", + teamId: process.env.APPLETEAMID, + appleId: process.env.APPLEID, + appleIdPassword: process.env.APPLEIDPASS + }) +} \ No newline at end of file diff --git a/electron/scripts/uninstall-debian-conf.sh b/electron/scripts/uninstall-debian-conf.sh new file mode 100644 index 0000000..9b3ff50 --- /dev/null +++ b/electron/scripts/uninstall-debian-conf.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +# Remove all conf made by Qortal Hub + +# Remove apt repository source list when user uninstalls app +if grep ^ /etc/apt/sources.list /etc/apt/sources.list.d/* | grep qortal-hub.list; then + sudo rm /etc/apt/sources.list.d/qortal-hub.list; +fi + +# Get the root user +if [ $SUDO_USER ]; + then getSudoUser=$SUDO_USER; + else getSudoUser=`whoami`; +fi + +getDesktopEntry=/home/$getSudoUser/.config/autostart/qortal-hub.desktop; + +# Remove desktop entry if exists +if [ -f $getDesktopEntry ]; then + sudo rm $getDesktopEntry; +fi + +# App directory which contains all the config and settings files +appDirectory=/home/$getSudoUser/.config/qortal-hub/; + +if [ -d $appDirectory ]; then + sudo rm -rf $appDirectory; +fi + +# Delete the link to the binary +rm -f '/usr/bin/${executable}' + +# Delete run-hub +rm -f '/opt/${productFilename}/run-hub' From 82ddd72e299a0781b43ea46a64a61bf4d51cb37a Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 26 Dec 2024 09:19:14 +0200 Subject: [PATCH 046/119] added gateway single buy trade for arrr --- src/background.ts | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/background.ts b/src/background.ts index 38eb910..b9225e1 100644 --- a/src/background.ts +++ b/src/background.ts @@ -1462,7 +1462,7 @@ export async function handleActiveGroupDataFromSocket({ groups, directs }) { } catch (error) {} } -async function sendChatForBuyOrder({ qortAddress, recipientPublicKey, message, atAddresses }) { +async function sendChatForBuyOrder({ qortAddress, recipientPublicKey, message, atAddresses, isSingle }) { let _reference = new Uint8Array(64); self.crypto.getRandomValues(_reference); @@ -1487,7 +1487,9 @@ async function sendChatForBuyOrder({ qortAddress, recipientPublicKey, message, a }; const finalJson = { callRequest: jsonData, - extra: "whatever additional data goes here", + extra: { + type: isSingle ? "single" : "multiple" + }, }; const messageStringified = JSON.stringify(finalJson); @@ -1538,7 +1540,6 @@ async function sendChatForBuyOrder({ qortAddress, recipientPublicKey, message, a signature } } - const path = `${import.meta.env.BASE_URL}memory-pow.wasm.full`; const chatBytes = tx.chatBytes; @@ -1839,7 +1840,7 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo callResponse: response, extra: { message: "Transaction processed successfully!", - atAddresses: crosschainAtInfo.map((order)=> order.qortalAtAddress), + atAddresses: foreignBlockchain === 'PIRATECHAIN' ? [crosschainAtInfo[0].qortalAtAddress] : crosschainAtInfo.map((order)=> order.qortalAtAddress), senderAddress: address, node: url }, @@ -1849,7 +1850,7 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo callResponse: "ERROR", extra: { message: response, - atAddresses: crosschainAtInfo.map((order)=> order.qortalAtAddress), + atAddresses: foreignBlockchain === 'PIRATECHAIN' ? [crosschainAtInfo[0].qortalAtAddress] : crosschainAtInfo.map((order)=> order.qortalAtAddress), senderAddress: address, node: url }, @@ -1863,7 +1864,7 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo const message = { - addresses: crosschainAtInfo.map((order)=> order.qortalAtAddress), + addresses: foreignBlockchain === 'PIRATECHAIN' ? [crosschainAtInfo[0].qortalAtAddress] : crosschainAtInfo.map((order)=> order.qortalAtAddress), foreignKey: await getForeignKey(foreignBlockchain), receivingAddress: address, }; @@ -1871,7 +1872,8 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo qortAddress: proxyAccountAddress, recipientPublicKey: proxyAccountPublicKey, message, - atAddresses: crosschainAtInfo.map((order)=> order.qortalAtAddress), + atAddresses: foreignBlockchain === 'PIRATECHAIN' ? [crosschainAtInfo[0].qortalAtAddress] : crosschainAtInfo.map((order)=> order.qortalAtAddress), + isSingle: foreignBlockchain === 'PIRATECHAIN' }); @@ -1890,7 +1892,7 @@ export async function createBuyOrderTx({ crosschainAtInfo, isGateway, foreignBlo message: message?.extra?.message, senderAddress: address, node: buyTradeNodeBaseUrl, - atAddresses: crosschainAtInfo.map((order)=> order.qortalAtAddress), + atAddresses: foreignBlockchain === 'PIRATECHAIN' ? [crosschainAtInfo[0].qortalAtAddress] : crosschainAtInfo.map((order)=> order.qortalAtAddress), } } From 73a609b18ba95dc79e9320cee456591db087f7ea Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 26 Dec 2024 09:32:58 +0200 Subject: [PATCH 047/119] added missing tiptap plugin --- src/components/Chat/MessageItem.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/Chat/MessageItem.tsx b/src/components/Chat/MessageItem.tsx index a088c0a..cd9d605 100644 --- a/src/components/Chat/MessageItem.tsx +++ b/src/components/Chat/MessageItem.tsx @@ -18,7 +18,7 @@ import { Spacer } from "../../common/Spacer"; import { ReactionPicker } from "../ReactionPicker"; import KeyOffIcon from '@mui/icons-material/KeyOff'; import EditIcon from '@mui/icons-material/Edit'; - +import TextStyle from '@tiptap/extension-text-style'; export const MessageItem = ({ message, onSeen, @@ -208,7 +208,8 @@ export const MessageItem = ({ StarterKit, Underline, Highlight, - Mention + Mention, + TextStyle ])} /> )} @@ -227,7 +228,8 @@ export const MessageItem = ({ StarterKit, Underline, Highlight, - Mention + Mention, + TextStyle ])} /> )} @@ -461,7 +463,8 @@ export const ReplyPreview = ({message, isEdit})=> { StarterKit, Underline, Highlight, - Mention + Mention, + TextStyle ])} /> )} From 8e3f0fdacd2c1905c338788556506eb120f2cec3 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 27 Dec 2024 03:18:24 +0200 Subject: [PATCH 048/119] revert electron version back to 26 --- electron/package-lock.json | 29 +++++++++++++---------------- electron/package.json | 2 +- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/electron/package-lock.json b/electron/package-lock.json index 363a9f1..fb53e72 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -21,7 +21,7 @@ "devDependencies": { "@electron/notarize": "^2.5.0", "@electron/rebuild": "^3.2.10", - "electron": "^33.2.1", + "electron": "^26.2.2", "electron-builder": "~23.6.0", "shelljs": "^0.8.5", "typescript": "^5.0.4" @@ -2221,15 +2221,14 @@ } }, "node_modules/electron": { - "version": "33.2.1", - "resolved": "https://registry.npmjs.org/electron/-/electron-33.2.1.tgz", - "integrity": "sha512-SG/nmSsK9Qg1p6wAW+ZfqU+AV8cmXMTIklUL18NnOKfZLlum4ZsDoVdmmmlL39ZmeCaq27dr7CgslRPahfoVJg==", + "version": "26.6.10", + "resolved": "https://registry.npmjs.org/electron/-/electron-26.6.10.tgz", + "integrity": "sha512-pV2SD0RXzAiNRb/2yZrsVmVkBOMrf+DVsPulIgRjlL0+My9BL5spFuhHVMQO9yHl9tFpWtuRpQv0ofM/i9P8xg==", "dev": true, "hasInstallScript": true, - "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", - "@types/node": "^20.9.0", + "@types/node": "^18.11.18", "extract-zip": "^2.0.1" }, "bin": { @@ -2490,21 +2489,19 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "20.17.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", - "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", + "version": "18.19.68", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", + "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", "dev": true, - "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~5.26.4" } }, "node_modules/electron/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true }, "node_modules/elementtree": { "version": "0.1.7", diff --git a/electron/package.json b/electron/package.json index 8bdb3cf..487c69b 100644 --- a/electron/package.json +++ b/electron/package.json @@ -46,7 +46,7 @@ "electron-window-state": "^5.0.3" }, "devDependencies": { - "electron": "^33.2.1", + "electron": "^26.2.2", "electron-builder": "~23.6.0", "@electron/rebuild": "^3.2.10", "@electron/notarize": "^2.5.0", From 8dbf4302d82a6450d1ee40a00f5fe09634ec4fe7 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 28 Dec 2024 11:18:28 +0200 Subject: [PATCH 049/119] add missing qortalrequest --- src/components/Apps/useQortalMessageListener.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index 00bff36..3583f02 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -182,7 +182,7 @@ const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY' ]; From 3416ef9bcad6d8967789afe0df0fceb1cb9bb1ce Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 28 Dec 2024 20:36:51 +0200 Subject: [PATCH 050/119] fix reaction in public --- src/components/Chat/ChatGroup.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index 7f02588..c41265d 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -244,7 +244,7 @@ const [messageSize, setMessageSize] = useState(0) const content = item?.content || item.decryptedData?.content; const sender = item.sender; const newTimestamp = item.timestamp; - const contentState = item?.contentState || item.decryptedData?.contentState; + const contentState = item?.contentState !== undefined ? item?.contentState : item.decryptedData?.contentState; if (!content || typeof content !== "string" || !sender || typeof sender !== "string" || !newTimestamp) { console.warn("Invalid content, sender, or timestamp in reaction data", item); @@ -336,7 +336,7 @@ const [messageSize, setMessageSize] = useState(0) const content = item?.content || item.decryptedData?.content; const sender = item.sender; const newTimestamp = item.timestamp; - const contentState = item?.contentState || item.decryptedData?.contentState; + const contentState = item?.contentState !== undefined ? item?.contentState : item.decryptedData?.contentState; if (!content || typeof content !== "string" || !sender || typeof sender !== "string" || !newTimestamp) { console.warn("Invalid content, sender, or timestamp in reaction data", item); @@ -771,7 +771,7 @@ const clearEditorContent = () => { setIsSending(false) resumeAllQueues() } - }, []) + }, [isPrivate]) const openQManager = useCallback(()=> { setIsOpenQManager(true) From d5bfc968726b43bf30a6b3be2bf6afa135ce32c5 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 29 Dec 2024 09:43:50 +0200 Subject: [PATCH 051/119] add missing value --- src/components/Chat/AdminSpaceInner.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Chat/AdminSpaceInner.tsx b/src/components/Chat/AdminSpaceInner.tsx index 381302d..fa70120 100644 --- a/src/components/Chat/AdminSpaceInner.tsx +++ b/src/components/Chat/AdminSpaceInner.tsx @@ -123,7 +123,7 @@ export const AdminSpaceInner = ({ window .sendMessage("encryptAndPublishSymmetricKeyGroupChatForAdmins", { groupId: selectedGroup, - previousData: null, + previousData: adminGroupSecretKey, admins: adminsWithNames, }) .then((response) => { From 825ae7ffb8ee417ac185bc7905f8cfc3844ef4d0 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 29 Dec 2024 12:17:24 +0200 Subject: [PATCH 052/119] remove unused import --- src/App.tsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index eb5b5b0..7106971 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -133,7 +133,6 @@ import { RandomSentenceGenerator } from "./utils/seedPhrase/RandomSentenceGenera import { useFetchResources } from "./common/useFetchResources"; import { Tutorials } from "./components/Tutorials/Tutorials"; import { useHandleTutorials } from "./components/Tutorials/useHandleTutorials"; -import { removeLeadingZero } from "./utils/helpers"; import BoundedNumericTextField from "./common/BoundedNumericTextField"; type extStates = @@ -1790,14 +1789,6 @@ function App() { Amount - {/* setPaymentAmount(+e.target.value)} - autoComplete="off" - onInput={removeLeadingZero} - /> */} Date: Mon, 30 Dec 2024 09:52:44 +0200 Subject: [PATCH 053/119] hosted data qortalrequests --- .../Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 41 ++++++++++- src/qortalRequests/get.ts | 72 +++++++++++++++++++ 3 files changed, 113 insertions(+), 2 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index 3583f02..e25c1bb 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -182,7 +182,7 @@ const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 658badf..bd3e688 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,5 +1,5 @@ import { gateways, getApiKeyFromStorage } from "./background"; -import { addForeignServer, addListItems, adminAction, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, joinGroup, openNewTab, publishMultipleQDNResources, publishQDNResource, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addListItems, adminAction, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, joinGroup, openNewTab, publishMultipleQDNResources, publishQDNResource, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -827,6 +827,45 @@ export const isRunningGateway = async ()=> { } break; } + + case "DELETE_HOSTED_DATA" : { + try { + const res = await deleteHostedData(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } + case "GET_HOSTED_DATA" : { + try { + const res = await getHostedData(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 53a6277..0764722 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -656,6 +656,78 @@ export const decryptDataWithSharingKey = async (data, sender) => { return base64ToObject.data }; +export const getHostedData = async (data, isFromExtension) => { + + const resPermission = await getUserPermission( + { + text1: "Do you give this application permission to", + text2: `Get a list of your hosted data?`, + }, + isFromExtension + ); + const { accepted } = resPermission; + + if(accepted){ + const limit = data?.limit ? data?.limit : 20; + const query = data?.query ? data?.query : undefined + const offset = data?.offset ? data?.offset : 0 + + try { + + const url = await createEndpoint(`/arbitrary/hosted/resources/?limit=${limit}&query=${query}&offset=${offset}`); + const response = await fetch(url); + const data = await response.json(); + return data + } catch (error) { + throw error + } + + } else { + throw new Error("User declined to get list of hosted resources"); + } + +}; + +export const deleteHostedData = async (data, isFromExtension) => { + const requiredFields = ["hostedData"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const resPermission = await getUserPermission( + { + text1: "Do you give this application permission to", + text2: `Delete ${data?.hostedData?.length} hosted resources?`, + }, + isFromExtension + ); + const { accepted } = resPermission; + + if(accepted){ + const { hostedData } = data; + + for (const hostedDataItem of hostedData){ + try { + const url = await createEndpoint(`/arbitrary/resource/${hostedDataItem.service}/${hostedDataItem.name}/${hostedDataItem.identifer}`); + await fetch(url, { + method: "DELETE", + headers: { + "Content-Type": "application/json", + } + }); + } catch (error) { + //error + } + } + + return true + } else { + throw new Error("User declined delete hosted resources"); + } + +}; export const decryptData = async (data) => { const { encryptedData, publicKey } = data; From b4cdd19a0afe55e997190d61fcf9cbf15685ca70 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 30 Dec 2024 10:01:55 +0200 Subject: [PATCH 054/119] added q-mintership default --- src/atoms/global.ts | 4 ++++ src/components/Apps/AppsLibraryDesktop.tsx | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/atoms/global.ts b/src/atoms/global.ts index 025cca6..fbbb213 100644 --- a/src/atoms/global.ts +++ b/src/atoms/global.ts @@ -44,6 +44,10 @@ export const sortablePinnedAppsAtom = atom({ { name: 'Q-Blog', service: 'APP' + }, + { + name: 'Q-Mintership', + service: 'APP' } ], }); diff --git a/src/components/Apps/AppsLibraryDesktop.tsx b/src/components/Apps/AppsLibraryDesktop.tsx index 08bf50b..f64b666 100644 --- a/src/components/Apps/AppsLibraryDesktop.tsx +++ b/src/components/Apps/AppsLibraryDesktop.tsx @@ -59,7 +59,8 @@ const officialAppList = [ "q-trade", "q-support", "nodeinfo", - "q-manager" + "q-manager", + "q-mintership" ]; const ScrollerStyled = styled("div")({ From 1ec0028c0f4ae503abfc6094198a013be86d8406 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 30 Dec 2024 12:26:31 +0200 Subject: [PATCH 055/119] added badges in chat --- src/App.tsx | 5 +- src/assets/badges/level-0.png | Bin 0 -> 4938 bytes src/assets/badges/level-1.png | Bin 0 -> 4426 bytes src/assets/badges/level-10.png | Bin 0 -> 6404 bytes src/assets/badges/level-2.png | Bin 0 -> 5373 bytes src/assets/badges/level-3.png | Bin 0 -> 5608 bytes src/assets/badges/level-4.png | Bin 0 -> 7542 bytes src/assets/badges/level-5.png | Bin 0 -> 6771 bytes src/assets/badges/level-6.png | Bin 0 -> 6806 bytes src/assets/badges/level-7.png | Bin 0 -> 6012 bytes src/assets/badges/level-8.png | Bin 0 -> 6797 bytes src/assets/badges/level-9.png | Bin 0 -> 6331 bytes src/atoms/global.ts | 13 ++++ src/components/Chat/MessageItem.tsx | 67 ++++++++++++++++++--- src/components/Group/Group.tsx | 4 +- src/components/Group/useHandleUserInfo.tsx | 36 +++++++++++ 16 files changed, 115 insertions(+), 10 deletions(-) create mode 100644 src/assets/badges/level-0.png create mode 100644 src/assets/badges/level-1.png create mode 100644 src/assets/badges/level-10.png create mode 100644 src/assets/badges/level-2.png create mode 100644 src/assets/badges/level-3.png create mode 100644 src/assets/badges/level-4.png create mode 100644 src/assets/badges/level-5.png create mode 100644 src/assets/badges/level-6.png create mode 100644 src/assets/badges/level-7.png create mode 100644 src/assets/badges/level-8.png create mode 100644 src/assets/badges/level-9.png create mode 100644 src/components/Group/useHandleUserInfo.tsx diff --git a/src/App.tsx b/src/App.tsx index 7106971..f3602e2 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -134,6 +134,7 @@ import { useFetchResources } from "./common/useFetchResources"; import { Tutorials } from "./components/Tutorials/Tutorials"; import { useHandleTutorials } from "./components/Tutorials/useHandleTutorials"; import BoundedNumericTextField from "./common/BoundedNumericTextField"; +import { useHandleUserInfo } from "./components/Group/useHandleUserInfo"; type extStates = | "not-authenticated" @@ -396,7 +397,7 @@ function App() { const [isSettingsOpen, setIsSettingsOpen] = useState(false); const [showSeed, setShowSeed] = useState(false) const [creationStep, setCreationStep] = useState(1) - + const {getIndividualUserInfo} = useHandleUserInfo() const qortalRequestCheckbox1Ref = useRef(null); useRetrieveDataLocalStorage(); useQortalGetSaveSettings(userInfo?.name, extState === "authenticated"); @@ -1661,7 +1662,7 @@ function App() { infoSnackCustom: infoSnack, setInfoSnackCustom: setInfoSnack, downloadResource, - + getIndividualUserInfo }} > 002t}1^@s6I8J)%00001b5ch_0Itp) z=>Px#1ZP1_K>z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA65mNgK~#8N?VJaY zRmHZ3n;{B_5xgRLeSjtE6$O3e71RqNpopX7G#H+!7zVTN3aB7KKv6_cQA-eB3XMtONlukO~9BV-yjTB=N1U&+ehmp5DFpa0j*O`B$y#z5ATq-Rs}0SFaA|s6X*1 z{>1N%Qb8JtJ$v>%B1xOnT_Nn}4g@LC`CGPZInc0S!&0kOtRqC88i?sm6^PtJSMl2RR49^Rs5nQWsx*agb9yj2}Nrg~2Jt(Cp_U+r} zY)hO_ZW0uWtfWHa`}gk;N+^my8d)OIZ`MLAS*`{r5uatD@UQY6Ex-PnejUCKrEz4r z+LA<);ILU%Y&R6ewa{4mI(#2W_j<_MyLYd%JqaY<5es6;Dtz0;5XeaEv!t=+8mkdU ztByPFIK1w`&&_uv-R&WZuJ3A35=nwsvM_C1_6JfVPa10HCnif8YDlVCv!<$Ey}CO7 z_~TWr+O<`+s#W#)Zd;eH8≈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 IM6N<$g6eW^jQ{`u literal 0 HcmV?d00001 diff --git a/src/assets/badges/level-1.png b/src/assets/badges/level-1.png new file mode 100644 index 0000000000000000000000000000000000000000..9955cc9f03ac61f680c8ff9641e2f8fef8ce0f98 GIT binary patch literal 4426 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 QH~;_u07*qoM6N<$f`QDh;Q#;t literal 0 HcmV?d00001 diff --git a/src/assets/badges/level-10.png b/src/assets/badges/level-10.png new file mode 100644 index 0000000000000000000000000000000000000000..22dfc605b35514b382bccc1030c994b8557c09a5 GIT binary patch literal 6404 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 b3;_He$DBd4+x`})00000NkvXXu0mjfws>X9 literal 0 HcmV?d00001 diff --git a/src/assets/badges/level-3.png b/src/assets/badges/level-3.png new file mode 100644 index 0000000000000000000000000000000000000000..e7a196aca3c5c6b8cbf387673944225a5dfbed71 GIT binary patch literal 5608 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 M07*qoM6N<$f{a+}zW@LL literal 0 HcmV?d00001 diff --git a/src/assets/badges/level-5.png b/src/assets/badges/level-5.png new file mode 100644 index 0000000000000000000000000000000000000000..b74772903ab671eeda3a6e121b2693be837852dd GIT binary patch literal 6771 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 literal 0 HcmV?d00001 diff --git a/src/assets/badges/level-7.png b/src/assets/badges/level-7.png new file mode 100644 index 0000000000000000000000000000000000000000..b9141272f49291e9db8f243ff9118f13ab1f7099 GIT binary patch literal 6012 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 Y`u_h8^%jw|j}8D81x@*Hvak>T0}VE)WdHyG literal 0 HcmV?d00001 diff --git a/src/assets/badges/level-8.png b/src/assets/badges/level-8.png new file mode 100644 index 0000000000000000000000000000000000000000..b5dede1779cf2d3ecc91e1bd93ce6288760f9b2c GIT binary patch literal 6797 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 literal 0 HcmV?d00001 diff --git a/src/assets/badges/level-9.png b/src/assets/badges/level-9.png new file mode 100644 index 0000000000000000000000000000000000000000..77fa2d522e3199c3137297df084a3f413f921f69 GIT binary patch literal 6331 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 PCxCP{4K=FNZKM7NuusgP literal 0 HcmV?d00001 diff --git a/src/atoms/global.ts b/src/atoms/global.ts index fbbb213..fb4f74e 100644 --- a/src/atoms/global.ts +++ b/src/atoms/global.ts @@ -141,4 +141,17 @@ export const blobKeySelector = selectorFamily({ export const selectedGroupIdAtom = atom({ key: 'selectedGroupIdAtom', default: null, +}); + +export const addressInfoControllerAtom = atom({ + key: 'addressInfoControllerAtom', + default: {}, +}); + +export const addressInfoKeySelector = selectorFamily({ + key: 'addressInfoKeySelector', + get: (key) => ({ get }) => { + const userInfo = get(addressInfoControllerAtom); + return userInfo[key] || null; // Return the value for the key or null if not found + }, }); \ No newline at end of file diff --git a/src/components/Chat/MessageItem.tsx b/src/components/Chat/MessageItem.tsx index cd9d605..e325840 100644 --- a/src/components/Chat/MessageItem.tsx +++ b/src/components/Chat/MessageItem.tsx @@ -1,11 +1,11 @@ import { Message } from "@chatscope/chat-ui-kit-react"; -import React, { useEffect, useState } from "react"; +import React, { useContext, useEffect, useState } from "react"; import { useInView } from "react-intersection-observer"; import { MessageDisplay } from "./MessageDisplay"; -import { Avatar, Box, Button, ButtonBase, List, ListItem, ListItemText, Popover, Typography } from "@mui/material"; +import { Avatar, Box, Button, ButtonBase, List, ListItem, ListItemText, Popover, Tooltip, Typography } from "@mui/material"; import { formatTimestamp } from "../../utils/time"; import { getBaseApi } from "../../background"; -import { getBaseApiReact } from "../../App"; +import { MyContext, getBaseApiReact } from "../../App"; import { generateHTML } from "@tiptap/react"; import Highlight from "@tiptap/extension-highlight"; import Mention from "@tiptap/extension-mention"; @@ -19,6 +19,37 @@ import { ReactionPicker } from "../ReactionPicker"; import KeyOffIcon from '@mui/icons-material/KeyOff'; import EditIcon from '@mui/icons-material/Edit'; import TextStyle from '@tiptap/extension-text-style'; +import { addressInfoKeySelector } from "../../atoms/global"; +import { useRecoilValue } from "recoil"; +import level0Img from "../../assets/badges/level-0.png" +import level1Img from "../../assets/badges/level-1.png" +import level2Img from "../../assets/badges/level-2.png" +import level3Img from "../../assets/badges/level-3.png" +import level4Img from "../../assets/badges/level-4.png" +import level5Img from "../../assets/badges/level-5.png" +import level6Img from "../../assets/badges/level-6.png" +import level7Img from "../../assets/badges/level-7.png" +import level8Img from "../../assets/badges/level-8.png" +import level9Img from "../../assets/badges/level-9.png" +import level10Img from "../../assets/badges/level-10.png" + +const getBadgeImg = (level)=> { + switch(level?.toString()){ + + case '0': return level0Img + case '1': return level1Img + case '2': return level2Img + case '3': return level3Img + case '4': return level4Img + case '5': return level5Img + case '6': return level6Img + case '7': return level7Img + case '8': return level8Img + case '9': return level9Img + case '10': return level10Img + default: return level0Img + } +} export const MessageItem = ({ message, onSeen, @@ -41,11 +72,10 @@ export const MessageItem = ({ threshold: 0.7, // Fully visible triggerOnce: false, // Only trigger once when it becomes visible }); - - +const {getIndividualUserInfo} = useContext(MyContext) const [anchorEl, setAnchorEl] = useState(null); const [selectedReaction, setSelectedReaction] = useState(null); - + const userInfo = useRecoilValue(addressInfoKeySelector(message?.sender)); useEffect(() => { if (inView && isLast && onSeen) { @@ -53,7 +83,11 @@ export const MessageItem = ({ } }, [inView, message.id, isLast]); - +useEffect(()=> { + if(message?.sender){ + getIndividualUserInfo(message?.sender) + } +}, [message?.sender]) return ( <> @@ -82,11 +116,18 @@ export const MessageItem = ({ }} /> ) : ( + + {message?.senderName?.charAt(0)} + + + + + + + + )} { if(!selectedGroup?.groupId || !groupsProperties[selectedGroup?.groupId]) return null @@ -1834,6 +1835,7 @@ export const Group = ({ setTriedToFetchSecretKey(false); setNewChat(false); setSelectedGroup(null); + setUserInfoForLevels({}) setSecretKey(null); lastFetchedSecretKey.current = null; setSecretKeyPublishDate(null); diff --git a/src/components/Group/useHandleUserInfo.tsx b/src/components/Group/useHandleUserInfo.tsx new file mode 100644 index 0000000..db6993a --- /dev/null +++ b/src/components/Group/useHandleUserInfo.tsx @@ -0,0 +1,36 @@ +import React, { useCallback, useEffect, useState } from "react"; +import { getBaseApiReact } from "../../App"; +import { useRecoilState, useSetRecoilState } from "recoil"; +import { addressInfoControllerAtom } from "../../atoms/global"; + + + +export const useHandleUserInfo = () => { + const [userInfo, setUserInfo] = useRecoilState(addressInfoControllerAtom); + + + + const getIndividualUserInfo = useCallback(async (address)=> { + try { + if(!address || userInfo[address]) return + const url = `${getBaseApiReact()}/addresses/${address}`; + const response = await fetch(url); + if (!response.ok) { + throw new Error("network error"); + } + const data = await response.json(); + setUserInfo((prev)=> { + return { + ...prev, + [address]: data + } + }) + } catch (error) { + //error + } + }, [userInfo]) + + return { + getIndividualUserInfo, + }; +}; From 3347b68b2fd766645b44fc3878bf335f8adb5c19 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 30 Dec 2024 12:31:54 +0200 Subject: [PATCH 056/119] update version --- electron/package.json | 2 +- src/ExtStates/NotAuthenticated.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electron/package.json b/electron/package.json index 487c69b..026dba5 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "qortal-hub", - "version": "0.3.9", + "version": "0.4.0", "description": "A desktop app that gives you access to the Qortal network", "author": { "name": "", diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 76802b1..604c1d1 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -26,7 +26,7 @@ import { cleanUrl, isUsingLocal } from "../background"; import { GlobalContext } from "../App"; const manifestData = { - version: "0.3.9", + version: "0.4.0", }; export const NotAuthenticated = ({ From 164b21321d7a43044f75e3124d60e93e4a144474 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Tue, 31 Dec 2024 05:55:37 +0200 Subject: [PATCH 057/119] changed fetch publickeys to a queue --- src/backgroundFunctions/encryption.ts | 81 +++++++++++++++------------ 1 file changed, 46 insertions(+), 35 deletions(-) diff --git a/src/backgroundFunctions/encryption.ts b/src/backgroundFunctions/encryption.ts index badd0aa..8c7ec8b 100644 --- a/src/backgroundFunctions/encryption.ts +++ b/src/backgroundFunctions/encryption.ts @@ -2,6 +2,10 @@ import { getBaseApi } from "../background"; import { createSymmetricKeyAndNonce, decryptGroupData, encryptDataGroup, objectToBase64 } from "../qdn/encryption/group-encryption"; import { publishData } from "../qdn/publish/pubish"; import { getData } from "../utils/chromeStorage"; +import { RequestQueueWithPromise } from "../utils/queue/queue"; + + +export const requestQueueGetPublicKeys = new RequestQueueWithPromise(10); const apiEndpoints = [ "https://api.qortal.org", @@ -65,44 +69,51 @@ async function getKeyPair() { throw new Error("Wallet not authenticated"); } } -const getPublicKeys = async (groupNumber: number) => { - const validApi = await getBaseApi() - const response = await fetch(`${validApi}/groups/members/${groupNumber}?limit=0`); - const groupData = await response.json(); - - let members: any = []; - if (groupData && Array.isArray(groupData?.members)) { - for (const member of groupData.members) { - if (member.member) { + const getPublicKeys = async (groupNumber: number) => { + const validApi = await getBaseApi(); + const response = await fetch(`${validApi}/groups/members/${groupNumber}?limit=0`); + const groupData = await response.json(); + + if (groupData && Array.isArray(groupData.members)) { + // Use the request queue for fetching public keys + const memberPromises = groupData.members + .filter((member) => member.member) + .map((member) => + requestQueueGetPublicKeys.enqueue(async () => { const resAddress = await fetch(`${validApi}/addresses/${member.member}`); - const resData = await resAddress.json(); - const publicKey = resData.publicKey; - members.push(publicKey) - } - } - } + const resData = await resAddress.json(); + return resData.publicKey; + }) + ); + + const members = await Promise.all(memberPromises); + return members; + } + + return []; + }; - return members - } - - export const getPublicKeysByAddress = async (admins) => { - const validApi = await getBaseApi() - - - let members: any = []; - if (Array.isArray(admins)) { - for (const address of admins) { - if (address) { + export const getPublicKeysByAddress = async (admins: string[]) => { + const validApi = await getBaseApi(); + + if (Array.isArray(admins)) { + // Use the request queue to limit concurrent fetches + const memberPromises = admins + .filter((address) => address) // Ensure the address is valid + .map((address) => + requestQueueGetPublicKeys.enqueue(async () => { const resAddress = await fetch(`${validApi}/addresses/${address}`); - const resData = await resAddress.json(); - const publicKey = resData.publicKey; - members.push(publicKey) - } - } - } - - return members - } + const resData = await resAddress.json(); + return resData.publicKey; + }) + ); + + const members = await Promise.all(memberPromises); + return members; + } + + return []; // Return empty array if admins is not an array + }; From 91d33c5761b1c4376b3e25034e8abaf1aa7340da Mon Sep 17 00:00:00 2001 From: PhilReact Date: Tue, 31 Dec 2024 22:31:19 +0200 Subject: [PATCH 058/119] added disable enter in chat --- src/App.tsx | 16 +++++++++ src/atoms/global.ts | 5 +++ src/components/Chat/TipTap.tsx | 60 +++++++++++++++++++++++++++++++--- 3 files changed, 76 insertions(+), 5 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index f3602e2..24c5af4 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -113,6 +113,7 @@ import { enabledDevModeAtom, fullScreenAtom, hasSettingsChangedAtom, + isDisabledEditorEnterAtom, isUsingImportExportSettingsAtom, oldPinnedAppsAtom, settingsLocalLastUpdatedAtom, @@ -404,6 +405,7 @@ function App() { const [fullScreen, setFullScreen] = useRecoilState(fullScreenAtom); const [isEnabledDevMode, setIsEnabledDevMode] = useRecoilState(enabledDevModeAtom); + const setIsDisabledEditorEnter = useSetRecoilState(isDisabledEditorEnterAtom) const { toggleFullScreen } = useAppFullScreen(setFullScreen); const generatorRef = useRef(null) @@ -526,6 +528,20 @@ function App() { } }, [extState]); + useEffect(()=> { + try { + const val = localStorage.getItem('settings-disable-editor-enter'); + if(val){ + const parsedVal = JSON.parse(val) + if(parsedVal === false || parsedVal === true){ + setIsDisabledEditorEnter(parsedVal) + } + } + } catch (error) { + + } + }, []) + useEffect(() => { isFocusedRef.current = isFocused; }, [isFocused]); diff --git a/src/atoms/global.ts b/src/atoms/global.ts index fb4f74e..2aab4ef 100644 --- a/src/atoms/global.ts +++ b/src/atoms/global.ts @@ -154,4 +154,9 @@ export const addressInfoKeySelector = selectorFamily({ const userInfo = get(addressInfoControllerAtom); return userInfo[key] || null; // Return the value for the key or null if not found }, +}); + +export const isDisabledEditorEnterAtom = atom({ + key: 'isDisabledEditorEnterAtom', + default: false, }); \ No newline at end of file diff --git a/src/components/Chat/TipTap.tsx b/src/components/Chat/TipTap.tsx index 234d66e..4493482 100644 --- a/src/components/Chat/TipTap.tsx +++ b/src/components/Chat/TipTap.tsx @@ -1,4 +1,4 @@ -import React, { useEffect, useMemo, useRef, useState } from "react"; +import React, { useCallback, useEffect, useMemo, useRef, useState } from "react"; import { EditorProvider, useCurrentEditor, useEditor } from "@tiptap/react"; import StarterKit from "@tiptap/starter-kit"; import { Color } from "@tiptap/extension-color"; @@ -34,6 +34,9 @@ import ListItemButton from '@mui/material/ListItemButton'; import ListItemText from '@mui/material/ListItemText'; import { ReactRenderer } from '@tiptap/react' import MentionList from './MentionList.jsx' +import { useRecoilState } from "recoil"; +import { isDisabledEditorEnterAtom } from "../../atoms/global.js"; +import { Box, Checkbox, Typography } from "@mui/material"; function textMatcher(doc, from) { const textBeforeCursor = doc.textBetween(0, from, ' ', ' '); @@ -44,7 +47,7 @@ function textMatcher(doc, from) { const query = match[0]; return { start, query }; } -const MenuBar = ({ setEditorRef, isChat }) => { +const MenuBar = ({ setEditorRef, isChat, isDisabledEditorEnter, setIsDisabledEditorEnter }) => { const { editor } = useCurrentEditor(); const fileInputRef = useRef(null); @@ -120,7 +123,9 @@ const MenuBar = ({ setEditorRef, isChat }) => { return ( Set up your Qortal account @@ -2686,7 +2683,7 @@ function App() { If you wish to VIEW THE SEEDPHRASE, click the word 'SEEDPHRASE' in this text. Seedphrases are used to generate the private key for your Qortal account. For security by default, seedphrases are NOT displayed unless specifically chosen. ( + +))(({ theme }) => ({ + [`& .${tooltipClasses.tooltip}`]: { + backgroundColor: '#232428', + color: 'white', + maxWidth: 320, + padding: '20px', + fontSize: theme.typography.pxToRem(12), + }, +})); function removeTrailingSlash(url) { return url.replace(/\/+$/, ''); } @@ -66,7 +78,7 @@ export const NotAuthenticated = ({ const [customApikey, setCustomApiKey] = React.useState(""); const [customNodeToSaveIndex, setCustomNodeToSaveIndex] = React.useState(null); - const { showTutorial } = useContext(GlobalContext); + const { showTutorial, hasSeenGettingStarted } = useContext(GlobalContext); const importedApiKeyRef = useRef(null); const currentNodeRef = useRef(null); @@ -354,18 +366,22 @@ export const NotAuthenticated = ({ height: "154px", }} > - - +
-
+
editor.chain().focus().toggleBold().run()} disabled={!editor.can().chain().focus().toggleBold().run()} @@ -244,6 +249,43 @@ const MenuBar = ({ setEditorRef, isChat }) => { > + {isChat && ( + { + setIsDisabledEditorEnter(!isDisabledEditorEnter) + }} + > + + + disable enter + + + )} {!isChat && ( <> { + const [isDisabledEditorEnter, setIsDisabledEditorEnter] = useRecoilState(isDisabledEditorEnterAtom) const extensionsFiltered = isChat ? extensions.filter((item) => item?.name !== "image") @@ -421,12 +464,19 @@ export default ({ ] }, [enableMentions]) + const handleSetIsDisabledEditorEnter = useCallback((val)=> { + setIsDisabledEditorEnter(val) + localStorage.setItem('settings-disable-editor-enter', JSON.stringify(val)); + + }, []) + + return (
+ ) } extensions={[...extensionsFiltered, ...additionalExtensions @@ -450,7 +500,7 @@ export default ({ }; max-height:calc(100svh - ${customEditorHeight || "140px"})`: `overflow: auto; max-height: 250px`, }, handleKeyDown(view, event) { - if (!disableEnter && event.key === "Enter") { + if (!disableEnter && !isDisabledEditorEnter && event.key === "Enter") { if (event.shiftKey) { view.dispatch( view.state.tr.replaceSelectionWith( From d917412988ccf4c6cbf8ad2cbe4be6b84eb331e6 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 3 Jan 2025 15:15:41 +0200 Subject: [PATCH 059/119] added minting page --- package-lock.json | 101 +- package.json | 5 +- src/App.tsx | 70 +- src/background-cases.ts | 142 +- src/background.ts | 14 +- src/components/Minting/Minting.tsx | 1191 +++++++++++++++++ src/components/TaskManager/TaskManger.tsx | 33 +- .../RemoveRewardShareTransaction.ts | 46 + src/transactions/RewardShareTransaction.ts | 60 + src/transactions/transactions.ts | 8 +- 10 files changed, 1637 insertions(+), 33 deletions(-) create mode 100644 src/components/Minting/Minting.tsx create mode 100644 src/transactions/RemoveRewardShareTransaction.ts create mode 100644 src/transactions/RewardShareTransaction.ts diff --git a/package-lock.json b/package-lock.json index fd9454d..e8c249f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -72,6 +72,7 @@ "react-infinite-scroller": "^1.2.6", "react-intersection-observer": "^9.13.0", "react-json-view-lite": "^2.0.1", + "react-loader-spinner": "^6.1.6", "react-qr-code": "^2.0.15", "react-quill": "^2.0.0", "react-redux": "^9.1.2", @@ -4450,6 +4451,11 @@ "resolved": "https://registry.npmjs.org/@types/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-+OpjSaq85gvlZAYINyzKpLeiFkSC4EsC6IIiT6v6TLSU5k5U83fHGj9Lel8oKEXM0HqgrMVCjXPDPVICtxF7EQ==" }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==" + }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -5899,6 +5905,14 @@ "node": ">=6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001674", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001674.tgz", @@ -6678,6 +6692,24 @@ "node": ">= 8" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", @@ -13882,9 +13914,9 @@ } }, "node_modules/postcss": { - "version": "8.4.37", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.37.tgz", - "integrity": "sha512-7iB/v/r7Woof0glKLH8b1SPHrsX7uhdO+Geb41QpF/+mWZHU3uxxSlN+UXGVit1PawOYDToO+AbZzhBzWRDwbQ==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "funding": [ { "type": "opencollective", @@ -13908,6 +13940,11 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, "node_modules/postject": { "version": "1.0.0-alpha.6", "resolved": "https://registry.npmjs.org/postject/-/postject-1.0.0-alpha.6.tgz", @@ -14484,6 +14521,27 @@ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" }, + "node_modules/react-loader-spinner": { + "version": "6.1.6", + "resolved": "https://registry.npmjs.org/react-loader-spinner/-/react-loader-spinner-6.1.6.tgz", + "integrity": "sha512-x5h1Jcit7Qn03MuKlrWcMG9o12cp9SNDVHVJTNRi9TgtGPKcjKiXkou4NRfLAtXaFB3+Z8yZsVzONmPzhv2ErA==", + "dependencies": { + "react-is": "^18.2.0", + "styled-components": "^6.1.2" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "react": "^16.0.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.0.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/react-loader-spinner/node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" + }, "node_modules/react-qr-code": { "version": "2.0.15", "resolved": "https://registry.npmjs.org/react-qr-code/-/react-qr-code-2.0.15.tgz", @@ -15374,6 +15432,11 @@ "node": ">= 0.4" } }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -15855,6 +15918,38 @@ "node": ">=0.10.0" } }, + "node_modules/styled-components": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.13.tgz", + "integrity": "sha512-M0+N2xSnAtwcVAQeFEsGWFFxXDftHUD7XrKla06QbpUMmbmtFBMMTcKWvFXtWxuD5qQkB8iU5gk6QASlx2ZRMw==", + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.38", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==" + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", diff --git a/package.json b/package.json index a688742..dcf359a 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "react-infinite-scroller": "^1.2.6", "react-intersection-observer": "^9.13.0", "react-json-view-lite": "^2.0.1", + "react-loader-spinner": "^6.1.6", "react-qr-code": "^2.0.15", "react-quill": "^2.0.0", "react-redux": "^9.1.2", @@ -87,9 +88,9 @@ "slate-react": "^0.109.0", "tippy.js": "^6.3.7", "tiptap-extension-resize-image": "^1.1.8", + "ts-key-enum": "^2.0.12", "vite-plugin-top-level-await": "^1.4.4", - "vite-plugin-wasm": "^3.3.0", - "ts-key-enum": "^2.0.12" + "vite-plugin-wasm": "^3.3.0" }, "devDependencies": { "@testing-library/dom": "^10.3.0", diff --git a/src/App.tsx b/src/App.tsx index 24c5af4..7131676 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -44,7 +44,7 @@ import Success from "./assets/svgs/Success.svg"; import Info from "./assets/svgs/Info.svg"; import CloseIcon from "@mui/icons-material/Close"; import './utils/seedPhrase/RandomSentenceGenerator'; - +import EngineeringIcon from '@mui/icons-material/Engineering'; import { createAccount, generateRandomSentence, @@ -136,6 +136,8 @@ import { Tutorials } from "./components/Tutorials/Tutorials"; import { useHandleTutorials } from "./components/Tutorials/useHandleTutorials"; import BoundedNumericTextField from "./common/BoundedNumericTextField"; import { useHandleUserInfo } from "./components/Group/useHandleUserInfo"; +import { Minting } from "./components/Minting/Minting"; +import { isRunningGateway } from "./qortalRequests"; type extStates = | "not-authenticated" @@ -406,7 +408,7 @@ function App() { const [isEnabledDevMode, setIsEnabledDevMode] = useRecoilState(enabledDevModeAtom); const setIsDisabledEditorEnter = useSetRecoilState(isDisabledEditorEnterAtom) - + const [isOpenMinting, setIsOpenMinting] = useState(false) const { toggleFullScreen } = useAppFullScreen(setFullScreen); const generatorRef = useRef(null) const exportSeedphrase = ()=> { @@ -1592,6 +1594,54 @@ function App() { alignItems: 'center' }} > + {extState === "authenticated" && isMainWindow && ( + + + + )} + + { + try { + const res = await isRunningGateway() + if(res) throw new Error('Cannot view minting details on the gateway') + setIsOpenMinting(true) + + } catch (error) { + setOpenSnack(true) + setInfoSnack({ + type: 'error', + message: error?.message + }) + } + }}> + + + + + {(desktopViewMode === "apps" || desktopViewMode === "home") && ( { if(desktopViewMode === "apps"){ @@ -1705,17 +1755,7 @@ function App() { {!isMobile && renderProfile()} - - - + )} {isOpenSendQort && isMainWindow && ( @@ -3273,7 +3313,9 @@ function App() { }} /> )} - + {isOpenMinting && ( + + )} ); } diff --git a/src/background-cases.ts b/src/background-cases.ts index 07034d2..b017579 100644 --- a/src/background-cases.ts +++ b/src/background-cases.ts @@ -26,6 +26,7 @@ import { getGroupDataSingle, getKeyPair, getLTCBalance, + getLastRef, getNameInfo, getTempPublish, getTimestampEnterChat, @@ -41,6 +42,7 @@ import { makeAdmin, notifyAdminRegenerateSecretKey, pauseAllQueues, + processTransactionVersion2, registerName, removeAdmin, resumeAllQueues, @@ -56,8 +58,10 @@ import { } from "./background"; import { decryptGroupEncryption, encryptAndPublishSymmetricKeyGroupChat, encryptAndPublishSymmetricKeyGroupChatForAdmins, publishGroupEncryptedResource, publishOnQDN } from "./backgroundFunctions/encryption"; import { PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY } from "./constants/codes"; +import Base58 from "./deps/Base58"; import { encryptSingle } from "./qdn/encryption/group-encryption"; import { _createPoll, _voteOnPoll } from "./qortalRequests/get"; +import { createTransaction } from "./transactions/transactions"; import { getData, storeData } from "./utils/chromeStorage"; export function versionCase(request, event) { @@ -1895,4 +1899,140 @@ export async function publishGroupEncryptedResourceCase(request, event) { event.origin ); } - } \ No newline at end of file + } + + export async function createRewardShareCase(request, event) { + try { + const {recipientPublicKey} = request.payload; + const resKeyPair = await getKeyPair(); + const parsedData = resKeyPair; + const uint8PrivateKey = Base58.decode(parsedData.privateKey); + const uint8PublicKey = Base58.decode(parsedData.publicKey); + const keyPair = { + privateKey: uint8PrivateKey, + publicKey: uint8PublicKey, + }; + let lastRef = await getLastRef(); + + const tx = await createTransaction(38, keyPair, { + recipientPublicKey, + percentageShare: 0, + lastReference: lastRef, + }); + + const signedBytes = Base58.encode(tx.signedBytes); + + const res = await processTransactionVersion2(signedBytes); + if (!res?.signature) + throw new Error("Transaction was not able to be processed"); + event.source.postMessage( + { + requestId: request.requestId, + action: "createRewardShare", + payload: res, + type: "backgroundMessageResponse", + }, + event.origin + ); + } catch (error) { + event.source.postMessage( + { + requestId: request.requestId, + action: "createRewardShare", + error: error?.message, + type: "backgroundMessageResponse", + }, + event.origin + ); + } + } + + export async function removeRewardShareCase(request, event) { + try { + const {rewardShareKeyPairPublicKey, recipient, percentageShare} = request.payload; + const resKeyPair = await getKeyPair(); + const parsedData = resKeyPair; + const uint8PrivateKey = Base58.decode(parsedData.privateKey); + const uint8PublicKey = Base58.decode(parsedData.publicKey); + const keyPair = { + privateKey: uint8PrivateKey, + publicKey: uint8PublicKey, + }; + let lastRef = await getLastRef(); + + const tx = await createTransaction(381, keyPair, { + rewardShareKeyPairPublicKey, + recipient, + percentageShare, + lastReference: lastRef, + }); + + const signedBytes = Base58.encode(tx.signedBytes); + + const res = await processTransactionVersion2(signedBytes); + if (!res?.signature) + throw new Error("Transaction was not able to be processed"); + event.source.postMessage( + { + requestId: request.requestId, + action: "removeRewardShare", + payload: res, + type: "backgroundMessageResponse", + }, + event.origin + ); + } catch (error) { + event.source.postMessage( + { + requestId: request.requestId, + action: "removeRewardShare", + error: error?.message, + type: "backgroundMessageResponse", + }, + event.origin + ); + } + } + + export async function getRewardSharePrivateKeyCase(request, event) { + try { + const {recipientPublicKey} = request.payload; + const resKeyPair = await getKeyPair(); + const parsedData = resKeyPair; + const uint8PrivateKey = Base58.decode(parsedData.privateKey); + const uint8PublicKey = Base58.decode(parsedData.publicKey); + const keyPair = { + privateKey: uint8PrivateKey, + publicKey: uint8PublicKey, + }; + let lastRef = await getLastRef(); + + const tx = await createTransaction(38, keyPair, { + recipientPublicKey, + percentageShare: 0, + lastReference: lastRef, + }); + + event.source.postMessage( + { + requestId: request.requestId, + action: "getRewardSharePrivateKey", + payload: tx?._base58RewardShareSeed, + type: "backgroundMessageResponse", + }, + event.origin + ); + } catch (error) { + event.source.postMessage( + { + requestId: request.requestId, + action: "getRewardSharePrivateKey", + error: error?.message, + type: "backgroundMessageResponse", + }, + event.origin + ); + } + } + + \ No newline at end of file diff --git a/src/background.ts b/src/background.ts index b9225e1..f4e839c 100644 --- a/src/background.ts +++ b/src/background.ts @@ -47,6 +47,7 @@ import { clearAllNotificationsCase, createGroupCase, createPollCase, + createRewardShareCase, decryptDirectCase, decryptGroupEncryptionCase, decryptSingleCase, @@ -61,6 +62,7 @@ import { getEnteredQmailTimestampCase, getGroupDataSingleCase, getGroupNotificationTimestampCase, + getRewardSharePrivateKeyCase, getTempPublishCase, getThreadActivityCase, getTimestampEnterChatCase, @@ -82,6 +84,7 @@ import { publishOnQDNCase, registerNameCase, removeAdminCase, + removeRewardShareCase, resumeAllQueuesCase, saveTempPublishCase, sendChatDirectCase, @@ -1105,7 +1108,7 @@ export const sendQortFee = async (): Promise => { return qortFee; }; -async function getNameOrAddress(receiver) { +export async function getNameOrAddress(receiver) { try { const isAddress = validateAddress(receiver); if (isAddress) { @@ -3046,6 +3049,15 @@ function setupMessageListener() { case "setupGroupWebsocket": setupGroupWebsocketCase(request, event); break; + case "createRewardShare": + createRewardShareCase(request, event); + break; + case "getRewardSharePrivateKey": + getRewardSharePrivateKeyCase(request, event); + break; + case "removeRewardShare" : + removeRewardShareCase(request, event); + break; case "addEnteredQmailTimestamp": addEnteredQmailTimestampCase(request, event); break; diff --git a/src/components/Minting/Minting.tsx b/src/components/Minting/Minting.tsx new file mode 100644 index 0000000..070c085 --- /dev/null +++ b/src/components/Minting/Minting.tsx @@ -0,0 +1,1191 @@ +import { + Alert, + Box, + Button, + Card, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + Divider, + IconButton, + InputBase, + InputLabel, + Snackbar, + Typography, +} from "@mui/material"; +import React, { + useCallback, + useContext, + useEffect, + useMemo, + useState, +} from "react"; +import CloseIcon from "@mui/icons-material/Close"; +import { MyContext, getBaseApiReact } from "../../App"; +import { + executeEvent, + subscribeToEvent, + unsubscribeFromEvent, +} from "../../utils/events"; +import { getFee, getNameOrAddress } from "../../background"; +import CopyToClipboard from "react-copy-to-clipboard"; +import { AddressBox } from "../../App-styles"; +import { Spacer } from "../../common/Spacer"; +import Copy from "../../assets/svgs/Copy.svg"; +import { Loader } from "../Loader"; +import { FidgetSpinner } from "react-loader-spinner"; +import { useModal } from "../../common/useModal"; + +export const Minting = ({ + setIsOpenMinting, + myAddress, + groups, + show, + setTxList, + txList, +}) => { + const [mintingAccounts, setMintingAccounts] = useState([]); + const [accountInfo, setAccountInfo] = useState(null); + const [rewardSharePublicKey, setRewardSharePublicKey] = useState(""); + const [mintingKey, setMintingKey] = useState(""); + const [rewardsharekey, setRewardsharekey] = useState(""); + const [rewardShares, setRewardShares] = useState([]); + const [nodeInfos, setNodeInfos] = useState({}); + const [openSnack, setOpenSnack] = useState(false); + const [isLoading, setIsLoading] = useState(false); + const { isShow, onCancel, onOk, show: showKey, message } = useModal(); + const [info, setInfo] = useState(null); + const [names, setNames] = useState({}); + const [accountInfos, setAccountInfos] = useState({}); + + + + + const isPartOfMintingGroup = useMemo(() => { + if (groups?.length === 0) return false; + return !!groups?.find((item) => item?.groupId?.toString() === "694"); + }, [groups]); + const getMintingAccounts = useCallback(async () => { + try { + const url = `${getBaseApiReact()}/admin/mintingaccounts`; + const response = await fetch(url); + if (!response.ok) { + throw new Error("network error"); + } + const data = await response.json(); + setMintingAccounts(data); + } catch (error) {} + }, []); + + const accountIsMinting = useMemo(() => { + return !!mintingAccounts?.find( + (item) => item?.recipientAccount === myAddress + ); + }, [mintingAccounts, myAddress]); + + const getName = async (address) => { + try { + const response = await fetch( + `${getBaseApiReact()}/names/address/${address}` + ); + const nameData = await response.json(); + if (nameData?.length > 0) { + setNames((prev) => { + return { + ...prev, + [address]: nameData[0].name, + }; + }); + } else { + setNames((prev) => { + return { + ...prev, + [address]: null, + }; + }); + } + } catch (error) { + // error + } + }; + + const getAccountInfo = async (address: string, others?: boolean) => { + try { + if (!others) { + setIsLoading(true); + } + const url = `${getBaseApiReact()}/addresses/${address}`; + const response = await fetch(url); + if (!response.ok) { + throw new Error("network error"); + } + const data = await response.json(); + if (others) { + setAccountInfos((prev) => { + return { + ...prev, + [address]: data, + }; + }); + } else { + setAccountInfo(data); + } + } catch (error) { + } finally { + if (!others) { + setIsLoading(false); + } + } + }; + + const refreshRewardShare = () => { + if (!myAddress) return; + getRewardShares(myAddress); + }; + + useEffect(() => { + subscribeToEvent("refresh-rewardshare-list", refreshRewardShare); + + return () => { + unsubscribeFromEvent("refresh-rewardshare-list", refreshRewardShare); + }; + }, [myAddress]); + + const handleNames = (address) => { + if (!address) return undefined; + if (names[address]) return names[address]; + if (names[address] === null) return address; + getName(address); + return address; + }; + + const handleAccountInfos = (address, field) => { + if (!address) return undefined; + if (accountInfos[address]) return accountInfos[address]?.[field]; + if (accountInfos[address] === null) return undefined; + getAccountInfo(address, true); + return undefined; + }; + + const calculateBlocksRemainingToLevel1 = (address) => { + if (!address) return undefined; + if (!accountInfos[address]) return undefined; + return 7200 - accountInfos[address]?.blocksMinted || 0; + }; + + const getNodeInfos = async () => { + try { + const url = `${getBaseApiReact()}/admin/status`; + const response = await fetch(url, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }); + const data = await response.json(); + setNodeInfos(data); + } catch (error) { + console.error("Request failed", error); + } + }; + + const getRewardShares = useCallback(async (address) => { + try { + const url = `${getBaseApiReact()}/addresses/rewardshares?involving=${address}`; + const response = await fetch(url); + if (!response.ok) { + throw new Error("network error"); + } + const data = await response.json(); + setRewardShares(data); + } catch (error) {} + }, []); + + const addMintingAccount = useCallback(async (val) => { + try { + setIsLoading(true); + return await new Promise((res, rej) => { + window + .sendMessage( + "ADMIN_ACTION", + + { + type: "addmintingaccount", + value: val, + }, + 180000, + true + ) + .then((response) => { + if (!response?.error) { + res(response); + setMintingKey(""); + setTimeout(() => { + getMintingAccounts(); + }, 300); + return; + } + rej({ message: response.error }); + }) + .catch((error) => { + rej({ message: error.message || "An error occurred" }); + }); + }); + } catch (error) { + setInfo({ + type: "error", + message: error?.message || "Unable to add minting account", + }); + setOpenSnack(true); + } finally { + setIsLoading(false); + } + }, []); + + const removeMintingAccount = useCallback(async (val, acct) => { + try { + setIsLoading(true); + return await new Promise((res, rej) => { + window + .sendMessage( + "ADMIN_ACTION", + + { + type: "removemintingaccount", + value: val, + }, + 180000, + true + ) + .then((response) => { + if (!response?.error) { + res(response); + + setTimeout(() => { + getMintingAccounts(); + }, 300); + return; + } + rej({ message: response.error }); + }) + .catch((error) => { + rej({ message: error.message || "An error occurred" }); + }); + }); + } catch (error) { + setInfo({ + type: "error", + message: error?.message || "Unable to remove minting account", + }); + setOpenSnack(true); + } finally { + setIsLoading(false); + } + }, []); + + const createRewardShare = useCallback(async (publicKey, recipient) => { + const fee = await getFee("REWARD_SHARE"); + await show({ + message: "Would you like to perform an REWARD_SHARE transaction?", + publishFee: fee.fee + " QORT", + }); + return await new Promise((res, rej) => { + window + .sendMessage("createRewardShare", { + recipientPublicKey: publicKey, + }) + .then((response) => { + if (!response?.error) { + setTxList((prev) => [ + { + recipient, + ...response, + type: "add-rewardShare", + label: `Add rewardshare: awaiting confirmation`, + labelDone: `Add rewardshare: success!`, + done: false, + }, + ...prev, + ]); + res(response); + return; + } + rej({ message: response.error }); + }) + .catch((error) => { + rej({ message: error.message || "An error occurred" }); + }); + }); + }, []); + + const getRewardSharePrivateKey = useCallback(async (publicKey) => { + return await new Promise((res, rej) => { + window + .sendMessage("getRewardSharePrivateKey", { + recipientPublicKey: publicKey, + }) + .then((response) => { + if (!response?.error) { + res(response); + return; + } + rej({ message: response.error }); + }) + .catch((error) => { + rej({ message: error.message || "An error occurred" }); + }); + }); + }, []); + + const startMinting = async () => { + try { + setIsLoading(true); + const findRewardShare = rewardShares?.find( + (item) => + item?.recipient === myAddress && item?.mintingAccount === myAddress + ); + if (findRewardShare) { + const privateRewardShare = await getRewardSharePrivateKey( + accountInfo?.publicKey + ); + addMintingAccount(privateRewardShare); + } else { + await createRewardShare(accountInfo?.publicKey, myAddress); + const privateRewardShare = await getRewardSharePrivateKey( + accountInfo?.publicKey + ); + addMintingAccount(privateRewardShare); + } + } catch (error) { + setInfo({ + type: "error", + message: error?.message || "Unable to start minting", + }); + setOpenSnack(true); + } finally { + setIsLoading(false); + } + }; + + const getPublicKeyFromAddress = async (address) => { + const url = `${getBaseApiReact()}/addresses/publickey/${address}`; + const response = await fetch(url); + const data = await response.text(); + return data; + }; + + const checkIfMinterGroup = async (address) => { + const url = `${getBaseApiReact()}/groups/member/${address}`; + const response = await fetch(url); + const data = await response.json(); + return !!data?.find((grp) => grp?.groupId?.toString() === "694"); + }; + + const removeRewardShare = useCallback(async (rewardShare) => { + return await new Promise((res, rej) => { + window + .sendMessage("removeRewardShare", { + rewardShareKeyPairPublicKey: rewardShare.rewardSharePublicKey, + recipient: rewardShare.recipient, + percentageShare: -1, + }) + .then((response) => { + if (!response?.error) { + res(response); + setTxList((prev) => [ + { + ...rewardShare, + ...response, + type: "remove-rewardShare", + label: `Remove rewardshare: awaiting confirmation`, + labelDone: `Remove rewardshare: success!`, + done: false, + }, + ...prev, + ]); + return; + } + rej({ message: response.error }); + }) + .catch((error) => { + rej({ message: error.message || "An error occurred" }); + }); + }); + }, []); + + const handleRemoveRewardShare = async (rewardShare) => { + try { + setIsLoading(true); + + const privateRewardShare = await removeRewardShare(rewardShare); + } catch (error) { + setInfo({ + type: "error", + message: error?.message || "Unable to remove reward share", + }); + setOpenSnack(true); + } finally { + setIsLoading(false); + } + }; + + const createRewardShareForPotentialMinter = async (receiver) => { + try { + setIsLoading(true); + const confirmReceiver = await getNameOrAddress(receiver); + if (confirmReceiver.error) + throw new Error("Invalid receiver address or name"); + const isInMinterGroup = await checkIfMinterGroup(confirmReceiver) + if(!isInMinterGroup) throw new Error('Account not in Minter Group') + const publicKey = await getPublicKeyFromAddress(confirmReceiver); + const findRewardShare = rewardShares?.find( + (item) => + item?.recipient === confirmReceiver && + item?.mintingAccount === myAddress + ); + if (findRewardShare) { + const privateRewardShare = await getRewardSharePrivateKey(publicKey); + setRewardsharekey(privateRewardShare); + } else { + await createRewardShare(publicKey, confirmReceiver); + const privateRewardShare = await getRewardSharePrivateKey(publicKey); + setRewardsharekey(privateRewardShare); + } + } catch (error) { + setInfo({ + type: "error", + message: error?.message || "Unable to create reward share", + }); + setOpenSnack(true); + } finally { + setIsLoading(false); + } + }; + + useEffect(() => { + getNodeInfos(); + getMintingAccounts(); + }, []); + + useEffect(() => { + if (!myAddress) return; + getRewardShares(myAddress); + + getAccountInfo(myAddress); + }, [myAddress]); + + const _blocksNeed = () => { + if (accountInfo?.level === 0) { + return 7200; + } else if (accountInfo?.level === 1) { + return 72000; + } else if (accountInfo?.level === 2) { + return 201600; + } else if (accountInfo?.level === 3) { + return 374400; + } else if (accountInfo?.level === 4) { + return 618400; + } else if (accountInfo?.level === 5) { + return 964000; + } else if (accountInfo?.level === 6) { + return 1482400; + } else if (accountInfo?.level === 7) { + return 2173600; + } else if (accountInfo?.level === 8) { + return 3037600; + } else if (accountInfo?.level === 9) { + return 4074400; + } + }; + + const handleClose = () => { + setOpenSnack(false); + setTimeout(() => { + setInfo(null); + }, 250); + }; + + const _levelUpBlocks = () => { + if ( + accountInfo?.blocksMinted === undefined || + nodeInfos?.height === undefined + ) + return null; + let countBlocks = + _blocksNeed() - + (accountInfo?.blocksMinted + accountInfo?.blocksMintedAdjustment); + + let countBlocksString = countBlocks.toString(); + return "" + countBlocksString; + }; + + const showAndCopySponsorshipKey = async (rs) => { + try { + const sponsorshipKey = await getRewardSharePrivateKey( + rs?.rewardSharePublicKey + ); + await showKey({ + message: sponsorshipKey, + }); + } catch (error) {} + }; + + + return ( + + {"Manage your minting"} + + {isLoading && ( + + + + )} + + Account: {handleNames(accountInfo?.address)} + Level: {accountInfo?.level} + + blocks remaining until next level: {_levelUpBlocks()} + + + This node is minting: {nodeInfos?.isMintingPossible?.toString()} + + + + {accountInfo?.level >= 1 && !accountIsMinting && ( + + + {mintingAccounts?.length > 1 && ( + + Only 2 minting keys are allowed per node. Please remove one if + you would like to mint with this account. + + )} + + )} + + {mintingAccounts?.length > 0 && ( + Node's minting accounts + )} + + {accountIsMinting && ( + + + You currently have a minting key for this account attached to + this node + + + )} + + {mintingAccounts?.map((acct) => ( + + + Minting account: {handleNames(acct?.mintingAccount)} + + + Recipient account: {handleNames(acct?.recipientAccount)} + + {acct?.mintingAccount !== accountInfo?.address && + acct?.recipientAccount === accountInfo?.address && + (accountInfo?.level || 0) > 0 && ( + + You have reached level 1+. Remove this minting key and then + click "Start Minting". + + )} + + + + + ))} + + {mintingAccounts?.length > 1 && ( + + Only 2 minting keys are allowed per node. Please remove one if you + would like to add a different account. + + )} + + {txList?.filter( + (item) => + !item?.done && + (item?.type === "remove-rewardShare" || + item?.type === "add-rewardShare") + )?.length > 0 && ( + <> + + Ongoing transactions + + + {txList + ?.filter( + (item) => + !item.done && + (item?.type === "remove-rewardShare" || + item?.type === "add-rewardShare") + ) + ?.map((txItem) => ( + + {txItem?.type === "remove-rewardShare" && ( + Reward share being removed + )} + {txItem?.type === "add-rewardShare" && ( + Reward share being created + )} + + Recipient: {handleNames(txItem?.recipient)} + + + + + + ))} + + + + )} + + {!isPartOfMintingGroup && ( + + + + You are currently not part of the MINTER group + + + Visit the Q-Mintership app to apply to be a minter + + + + + + )} + {isPartOfMintingGroup && ( + <> + {accountInfo?.level >= 5 && ( + + {rewardShares?.filter((item) => item?.recipient !== myAddress) + ?.length > 0 && ( + <> + Active sponsorships + + {rewardShares + ?.filter((item) => item?.recipient !== myAddress) + .map((rs) => ( + + + Recipient: {handleNames(rs?.recipient)} + + + Level:{" "} + {handleAccountInfos(rs?.recipient, "level")} + + {handleAccountInfos(rs?.recipient, "level") !== + undefined && ( + <> + {handleAccountInfos(rs?.recipient, "level") === + 0 && ( + + Blocks remaining until level 1:{" "} + {calculateBlocksRemainingToLevel1( + rs?.recipient + )} + + )} + {(handleAccountInfos(rs?.recipient, "level") || + 0) > 0 && ( + + This account is above level 0. You may + remove this rewardshare + + )} + + )} + + + + + + ))} + + + )} + + + + Sponsor a new Minter + + {rewardShares?.filter((item) => item?.recipient !== myAddress) + ?.length > 0 ? ( + <> + + You are currently sponsoring one account. To sponsor + another account please remove the existing reward share. + + + ) : ( + <> + + Enter in the new Minter's address or name into the + input. Next, click on "Create reward share". If + successful, you will see a rewardshare key generated. + Copy the key and send it to your new Minter. + + + + setRewardSharePublicKey(e.target.value) + } + sx={{ + border: "0.5px solid var(--50-white, #FFFFFF80)", + padding: "0px 15px", + borderRadius: "5px", + height: "36px", + width: "350px", + maxWidth: "95%", + }} + placeholder="New minter's address or name" + inputProps={{ + "aria-label": "New minter's address or name", + fontSize: "14px", + fontWeight: 400, + }} + /> + + {rewardsharekey && ( + <> + + + + Click to copy the reward share key and share it with + your new minter + + + + + {rewardsharekey} + + + + )} + + )} + + + )} + {accountInfo?.level === 0 && !accountIsMinting && ( + <> + Become a minter! + + + + Ask a level 5+ minter to send you a minting key + + + Add the minting key in the input below and click "Add + minting key" + + + setMintingKey(e.target.value)} + sx={{ + border: "0.5px solid var(--50-white, #FFFFFF80)", + padding: "0px 15px", + borderRadius: "5px", + height: "36px", + width: "250px", + }} + placeholder="Add minting key" + inputProps={{ + "aria-label": "Add minting key", + fontSize: "14px", + fontWeight: 400, + }} + /> + + + + + )} + {accountInfo?.level === 0 && accountIsMinting && ( + + + You are currently on your way to level 1 + + + )} + + )} + {isShow && ( + + + {"Copy sponsorship key"} + + + + Click to copy the reward share key and share it with your new + minter + + + + + {message?.message} + + + + + + + + )} + + + + + + + {info?.message} + + + + ); +}; diff --git a/src/components/TaskManager/TaskManger.tsx b/src/components/TaskManager/TaskManger.tsx index 466344f..a835ae1 100644 --- a/src/components/TaskManager/TaskManger.tsx +++ b/src/components/TaskManager/TaskManger.tsx @@ -12,6 +12,7 @@ import TaskAltIcon from "@mui/icons-material/TaskAlt"; import ExpandLess from "@mui/icons-material/ExpandLess"; import ExpandMore from "@mui/icons-material/ExpandMore"; import { MyContext, getBaseApiReact, isMobile } from "../../App"; +import { executeEvent } from "../../utils/events"; export const TaskManager = ({ getUserInfo }) => { const { txList, setTxList, memberGroups } = useContext(MyContext); @@ -39,7 +40,7 @@ export const TaskManager = ({ getUserInfo }) => { await new Promise((res) => setTimeout(() => { res(null); - }, 300000) + }, 60000) ); setTxList((prev) => { let previousData = [...prev]; @@ -62,7 +63,7 @@ export const TaskManager = ({ getUserInfo }) => { } }; - intervals.current[signature] = setInterval(getAnswer, 120000); + intervals.current[signature] = setInterval(getAnswer, 60000); }; useEffect(() => { @@ -96,7 +97,15 @@ export const TaskManager = ({ getUserInfo }) => { } }); - prev.forEach((tx) => { + + + return previousData; + }); + }, [memberGroups, getUserInfo]); + + useEffect(()=> { + + txList.forEach((tx) => { if ( ["created-common-secret", "joined-group-request", "join-request-accept"].includes( tx?.type @@ -113,11 +122,17 @@ export const TaskManager = ({ getUserInfo }) => { getStatus({ signature: tx.signature }, getUserInfo); } } + if((tx?.type === "remove-rewardShare" || tx?.type === "add-rewardShare") && tx?.signature && !tx.done){ + if (!intervals.current[tx.signature]) { + const sendEventForRewardShare = ()=> { + executeEvent('refresh-rewardshare-list', {}) + } + getStatus({ signature: tx.signature }, sendEventForRewardShare); + } + } }); - return previousData; - }); - }, [memberGroups, getUserInfo]); + }, [txList]) if (isMobile || txList?.length === 0 || txList.every((item) => item?.done)) return null; @@ -128,9 +143,9 @@ export const TaskManager = ({ getUserInfo }) => { = DYNAMIC_FEE_TIMESTAMP) { + this.fee = _address === recipient ? 0 : 0.01 + } else { + this.fee = _address === recipient ? 0 : 0.001 + } + } + + set percentageShare(share) { + this._percentageShare = share * 100 + this._percentageShareBytes = this.constructor.utils.int64ToBytes(this._percentageShare) + } + + get params() { + const params = super.params + params.push( + this._recipient, + this._rewardShareKeyPairPublicKey, + this._percentageShareBytes, + this._feeBytes + ) + return params + } +} diff --git a/src/transactions/RewardShareTransaction.ts b/src/transactions/RewardShareTransaction.ts new file mode 100644 index 0000000..8419432 --- /dev/null +++ b/src/transactions/RewardShareTransaction.ts @@ -0,0 +1,60 @@ +// @ts-nocheck + +import TransactionBase from './TransactionBase' + +import { Sha256 } from 'asmcrypto.js' +import nacl from '../deps/nacl-fast' +import ed2curve from '../deps/ed2curve' +import { DYNAMIC_FEE_TIMESTAMP } from '../constants/constants' +import publicKeyToAddress from '../utils/generateWallet/publicKeyToAddress' + +export default class RewardShareTransaction extends TransactionBase { + constructor() { + super() + this.type = 38 + } + + + + set recipientPublicKey(recipientPublicKey) { + this._base58RecipientPublicKey = recipientPublicKey instanceof Uint8Array ? this.constructor.Base58.encode(recipientPublicKey) : recipientPublicKey + this._recipientPublicKey = this.constructor.Base58.decode(this._base58RecipientPublicKey) + this.recipient = publicKeyToAddress(this._recipientPublicKey) + + const convertedPrivateKey = ed2curve.convertSecretKey(this._keyPair.privateKey) + const convertedPublicKey = ed2curve.convertPublicKey(this._recipientPublicKey) + const sharedSecret = new Uint8Array(32) + + nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey) + + this._rewardShareSeed = new Sha256().process(sharedSecret).finish().result + this._base58RewardShareSeed = this.constructor.Base58.encode(this._rewardShareSeed) + this._rewardShareKeyPair = nacl.sign.keyPair.fromSeed(this._rewardShareSeed) + + if (new Date(this._timestamp).getTime() >= DYNAMIC_FEE_TIMESTAMP) { + this.fee = (recipientPublicKey === this.constructor.Base58.encode(this._keyPair.publicKey) ? 0 : 0.01) + } else { + this.fee = (recipientPublicKey === this.constructor.Base58.encode(this._keyPair.publicKey) ? 0 : 0.001) + } + } + + set recipient(recipient) { + this._recipient = recipient instanceof Uint8Array ? recipient : this.constructor.Base58.decode(recipient) + } + + set percentageShare(share) { + this._percentageShare = share * 100 + this._percentageShareBytes = this.constructor.utils.int64ToBytes(this._percentageShare) + } + + get params() { + const params = super.params + params.push( + this._recipient, + this._rewardShareKeyPair.publicKey, + this._percentageShareBytes, + this._feeBytes + ) + return params + } +} diff --git a/src/transactions/transactions.ts b/src/transactions/transactions.ts index 400418c..bcae4c0 100644 --- a/src/transactions/transactions.ts +++ b/src/transactions/transactions.ts @@ -17,6 +17,8 @@ import RegisterNameTransaction from './RegisterNameTransaction.js' import VoteOnPollTransaction from './VoteOnPollTransaction.js' import CreatePollTransaction from './CreatePollTransaction.js' import DeployAtTransaction from './DeployAtTransaction.js' +import RewardShareTransaction from './RewardShareTransaction.js' +import RemoveRewardShareTransaction from './RemoveRewardShareTransaction.js' export const transactionTypes = { @@ -36,14 +38,14 @@ export const transactionTypes = { 29: GroupInviteTransaction, 30: CancelGroupInviteTransaction, 31: JoinGroupTransaction, - 32: LeaveGroupTransaction + 32: LeaveGroupTransaction, + 38: RewardShareTransaction, + 381: RemoveRewardShareTransaction } export const createTransaction = (type, keyPair, params) => { - const tx = new transactionTypes[type]() - tx.keyPair = keyPair Object.keys(params).forEach(param => { From fddcd4ff134fc2914e31aca7693583583717c16a Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 4 Jan 2025 14:31:33 +0200 Subject: [PATCH 060/119] added processing to qortal request --- src/components/Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 2 +- src/qortalRequests/get.ts | 11 +++++++++-- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index e25c1bb..63e5fe6 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -182,7 +182,7 @@ const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_AND_PROCESS_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index bd3e688..c752814 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -729,7 +729,7 @@ export const isRunningGateway = async ()=> { } break; } - case "SIGN_TRANSACTION": { + case "SIGN_AND_PROCESS_TRANSACTION": { try { const res = await signTransaction(request.payload, isFromExtension) event.source.postMessage({ diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 0764722..a952a04 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -3423,7 +3423,7 @@ export const signTransaction = async (data, isFromExtension) => { const decodedData = await response.json(); const resPermission = await getUserPermission( { - text1: `Do you give this application permission to sign a transaction?`, + text1: `Do you give this application permission to SIGN and PROCESS a transaction?`, highlightedText: "Read the transaction carefully before accepting!", text2: `Tx type: ${decodedData.type}`, json: decodedData, @@ -3468,7 +3468,14 @@ export const signTransaction = async (data, isFromExtension) => { keyPair.privateKey ); const signedBytes = utils.appendBuffer(arbitraryBytesBuffer, signature); - return uint8ArrayToBase64(signedBytes); + const signedBytesToBase58 = Base58.encode(signedBytes); + + const res = await processTransactionVersion2(signedBytesToBase58); + if (!res?.signature) + throw new Error( + res?.message || "Transaction was not able to be processed" + ); + return res; } else { throw new Error("User declined request"); From b5a69291e4740184f1ab0da424fa582f4b0f16db Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 4 Jan 2025 17:38:11 +0200 Subject: [PATCH 061/119] added afterInstall --- electron/electron-builder.config.lin.json | 6 ++++-- electron/scripts/add-debian-apt-repo.sh | 0 2 files changed, 4 insertions(+), 2 deletions(-) mode change 100644 => 100755 electron/scripts/add-debian-apt-repo.sh diff --git a/electron/electron-builder.config.lin.json b/electron/electron-builder.config.lin.json index dc76fd9..863557d 100644 --- a/electron/electron-builder.config.lin.json +++ b/electron/electron-builder.config.lin.json @@ -9,7 +9,8 @@ "assets/**/*", "build/**/*", "capacitor.config.*", - "app/**/*" + "app/**/*", + "scripts/**/*" ], "linux": { "target": [ @@ -31,7 +32,8 @@ }, "deb": { "artifactName": "Qortal-Hub-Setup_${version}.${ext}", - "synopsis": "Qortal Hub for Linux" + "synopsis": "Qortal Hub for Linux", + "afterInstall": "scripts/add-debian-apt-repo.sh" }, "snap": { "artifactName": "Qortal-Hub-Setup_${version}.${ext}", diff --git a/electron/scripts/add-debian-apt-repo.sh b/electron/scripts/add-debian-apt-repo.sh old mode 100644 new mode 100755 From 137290347b1a3160dd4b57f16daca28283cee728 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 4 Jan 2025 20:48:14 +0200 Subject: [PATCH 062/119] update sign_transaction --- src/components/Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 2 +- src/qortalRequests/get.ts | 7 +++++-- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index 63e5fe6..e25c1bb 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -182,7 +182,7 @@ const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_AND_PROCESS_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index c752814..bd3e688 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -729,7 +729,7 @@ export const isRunningGateway = async ()=> { } break; } - case "SIGN_AND_PROCESS_TRANSACTION": { + case "SIGN_TRANSACTION": { try { const res = await signTransaction(request.payload, isFromExtension) event.source.postMessage({ diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index a952a04..45fb960 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -3407,6 +3407,7 @@ export const signTransaction = async (data, isFromExtension) => { throw new Error(errorMsg); } + const shouldProcess = data?.process || false; let _url = await createEndpoint( "/transactions/decode?ignoreValidityChecks=false" ); @@ -3423,7 +3424,7 @@ export const signTransaction = async (data, isFromExtension) => { const decodedData = await response.json(); const resPermission = await getUserPermission( { - text1: `Do you give this application permission to SIGN and PROCESS a transaction?`, + text1: `Do you give this application permission to ${ shouldProcess ? 'SIGN and PROCESS' : 'SIGN' } a transaction?`, highlightedText: "Read the transaction carefully before accepting!", text2: `Tx type: ${decodedData.type}`, json: decodedData, @@ -3469,7 +3470,9 @@ export const signTransaction = async (data, isFromExtension) => { ); const signedBytes = utils.appendBuffer(arbitraryBytesBuffer, signature); const signedBytesToBase58 = Base58.encode(signedBytes); - + if(!shouldProcess){ + return uint8ArrayToBase64(signedBytes); + } const res = await processTransactionVersion2(signedBytesToBase58); if (!res?.signature) throw new Error( From 10fb5886d9aede1d62f6961038658dcf22f10ba4 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 5 Jan 2025 14:23:06 +0200 Subject: [PATCH 063/119] mac icons --- electron/assets/mac/appIcon.icns | Bin 0 -> 634931 bytes electron/electron-builder.config.json | 5 +++-- 2 files changed, 3 insertions(+), 2 deletions(-) create mode 100644 electron/assets/mac/appIcon.icns diff --git a/electron/assets/mac/appIcon.icns b/electron/assets/mac/appIcon.icns new file mode 100644 index 0000000000000000000000000000000000000000..5c1296ed3c8495ce9071c0a0ee9093c9e66699db GIT binary patch literal 634931 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�a^>Cn8azWjTUPO z_CKZo9|%LYupGWAh9L!v<-o>v6lq|x2}8NbOx|JhnI_z~iPZkTb_f<}nQhRtBY*V; zSdv}2!xT{nqro`9*tggF+CbLM8*LA6x&|Jb>7^G(Rq`0npf24f`gZPYDD?j z8GE*2WArfj4IVy@8MsVJ*LmPbIP9ag;1lnHMo{W(h9$xm|n%_f=kc z<0V#B9=^_L6<`W%Y125DzV43$yY)iO`#D-Kl?1@Q`(0{%cMpN~3}z~AD(Fdpf>2EA_-iwIT30we3)Z=w9LBI%UV&tqouGI6C3@In3K;!;4 zZyd4qx9)Wzj{0qv^2*Q0pGFDV)8w96pF7Ge+^&y;`u~Tg){~a>n=I|sOJFY zFNCRzrkX|?QZvm#QV)%O-C!iKC>S&7GgezQc$=R1lcarBI`iT>515{F@zXK#nAOZg zcb!*kL0+yZ=OMUz{nz-ef2R4>Y4?y-5z0EAq|WZYvZY%&H|q!ko2Tw@OjJ%iE(1JG#l$A*UJp^Uo&(&mh`Tz;W$(9XU}(KJ`2O- z5IF9J%XZShF1g~XIx0NPF1JQG_Suy+Ktq(^E*=6ej8GH?0x!XsvQlspX{$)b-lMB_ zTqm_`7QIs4gC;RohvmjK##D*wY}D{C9VdOlgc1-!{*XybfEGie=i1&Y7av;xONx_i zRzvn41LV;eG+_|V>0yNzr`#Bg+$E9cp?FJ%IhG_%V3!&7{Q%WTeXrJt3J3EYPk~q} zsyDD$A654}9J(Dy>e!7=`zMbCf zEM<8VoV0Hp`s8nN;SQ1rf@Aj+9?{|9Rp8XFBr{eaD&4xTmsfnu8J2nYO75zm?5&{O z7W(FejH{UAGI8h6UjUO=SrmI#LxshBVM#Q2TntJoZVeyDM^`qmks4-65oXEGi)Ni1 zX=JI<*y!G(+9fb6H3`J6kN(&c#(l`KeSH*tk@!p6m~oS+Hp|ojw`$I3XxpezWI&B+ z!`8hsOZR##JIp3$)!Uu9a6$dIgU=i+HQ$q;x&t=mwC$mGi;9GwQ`F`2g20R0ruy#j zo7`ox`{5CF#QhkYzvFeZ?o-(d!x5s&S z-O%0p(NL6@(rqd-=(#Vf&^e zAyc#k-u&}~Si%d4(a`|HRL=C}!+Wd`+7MQ{)cr~oJQC*MlG6p&CYN!|lz?LWhb72Q zRQGMU0*a*^WvD9tGrE&_HUf+%LJ>6B{dTGYYQCT8y~q!QVxA8lrj8QwmVe;=%{G~u ze*G)HOGVbJBjE0B;ydiP%KW0)vr5_u1Eex8zamVPXgSNTYDbP^%Ss4!bkcQb&uJ|) z8AhdF%fV$gVh(OX7l9?MgAdm9SjBikhwZy;BF=4)brQy0g-I7|LGF=BHx-+m# z0aEO`4 zsg@4vhibCZU8#SFY#C&10hfNPrNEaU!dqcs%bDr~wj?_CI(M*~2L$macg&z{;>$#&8y9VK_sM!!-Ygw9BNx5O|9g{*n5*E|yRF)Shc`^B{Q+1C788~@S!@C2 zAsux{tAa5dHJ^NK2v;MWjn%KOi`U!KoW=~T!J?pzM$O|OjPEG(itAH!J3jQjMe)nD z%$p=NG$p0Nk*UHAr+mEMFCU~(yxPXjXR5-L0yh0!Mq4kWuagcxBs%bVgD?bYiO9Y04HreiK5xL7irVchwzA6}Yw9uY61_AaOj4&6r-Fw8 zn^2q|eeSr_M2qn5KFynV2gZ&z zUqJ6)HM?X#Jd|_1IKo89rjkO1TfGl~;H>5Poh=D{fY4-^KqOfJi}S8LoBm@*-(mCs zckmlqQrOBGOpDnmchHfc#`<-z4)Ur)?lD_UQy}-716JwT{M7x@6(mI$3qzjguWS&# z)fLps z$}#t63*R@t!QsocYg0mwso?T6o*I&kLl0sdltORTD+)`!#JoyE={ z128ZlPHX%nHVz6BF#E}^vW?B|ZZur)hlFdqCgHTEuOWb=;nJU&r_&){I=IiB;C3pz z;}<4mhXbkp%(3)Dz>?>EYB@{S92C)V2md9{eh#d&Z@QKsQjP0uhQR%&%5K!^+GTD2 zJ-Yr^>gMLDg4<}`HM&7^QVf(1;XHUUA=>`sOi_S-6175r%F%wf=V#wSuNcoH@;kz~UR3jd zVOsA_vWp(BPcb(-;8d64iBr}FaYp?t_t3(9i$<=HbgH))U|J`5;7)6aEybtVpq=V;CiaH*bL-{#;s)xd*< zuF+$NzW&QrESs{}ejbxFp)cJY)87>AV6r!Tx#Ht=(p za`b2cRgIk<=AIgTD~+_~(@^o4E=n;H0%wsdl3#Rpf>0I>;;$NzgSwa*|MvZ7Lv+om zT$~c=vZKukB(nOLKHd7BE0Rq0ZJR@%n*>u=t}lEa1sfSZ9XbLv*T+#SR}<)l{3zmX z{!wv9aN*g%ozjaxzoKpPws-}wVdo#;-N>i#MY&6nE$OyJ^%Tca>gB5raEQ!}nT0U5HovmV96c|zQ##kHrjZ&B^Jq_WDjQ&C4O&c1 za+EvXbW9xpW18#gR+sas*Om@6sM`^qb9|0WiHwRxwG}tof2srKDsG#x;AH^ zxI;l2W0XXOTN>y~g5hY4|y|bV-?$));RHD z1F2~*A~~AnWef8=!A|MXJ0`zapD+korV&x}vzmx{TSSIZJyf0LUopQT&iI$gr{uQm z@!}#%)6<(X3|f3cefyxZ8dLAm3-V)su2{ifXuU6S{(pRm<6OAncRl^D82qR!a(qzx zH3*u62wGkZU_1ldHo|i6!4AQlr;Y^%VAMnU`}+a!F$jW?ED5OqmMk%+*Q)XA z$6GO)f|pq2Smc-;j_b1M_Q1)pE2_WUyu%31@kRJ#O7Y3mPYp>85%&x37w7j{NOaGF zP>4|F)LsO=sy3|1)$g{(v{Eu@`d<^0dZ>Ya|7PWC8!9;44bvqy*5-`SGsI@tAb{@1AB3q%um;}kjENP>4+ zA+2%p#Do1zzZSUN+=*L~)b(vqob)(QAl3$Y=?eNK3xuJoR1}01 zM!97b*1fGT$`vLbG^}gg`_f!^A+<20;iuP>TUI3q?7)*%60*HN!KW2fIin|P*64ab zdK&vC@gU3Jk)Q8R9^U87x-awZyO;V4QGIinEsi@-xKnm7Pn06w>6$Z2lA3bZWHf`nHle8?$MV1 zGEE?4j-33MGJ^wA3E^p|1MG3E2!DGp)sM`_>RYBq175@XJb=u;o!w-HPkz%z77Nao ziYgA3$|PaZ5UP{W2qGe3Pl<+VW$G$KVPMut@2S0y9N$=&P1O0^!g`0DCzkY1^~=m5 z3$&SClyTT|TlTun>}HeGIL$Qo?=qqNw{YTOp+|oN@*m`D)o5si(w5}YeVMka-!>f@ zHbsXbvnVr6GvyJOX&Lr4KU>qDMmC18tWF9*+o{)IF)(V9aUn5NSS72)gEbP{d0%U$ zohgi*X&-&&PCilb=wNGy9M;qQ8XvX^7YF$_&Zz&!xmz%I2dm$m09<;Kdp`O>cWYv+ z4-Bo5mJ3~-flh;KC()t4aTf}P-sBs!EOdc63>{L12>B70Ym$bY_kM(5j!^j6mYxm?z71wo9@GbMdu3)6__)};Hii8fg7*kb)Mj2re>Gr>Jsq#wP{OKrbujR^<9 z@VOoy*YHh<5TCr{F0C5nui-xUVW`Cn_Iq9X@EMV@YjWYUb;lQR^Aqy~95_M7X>BK^ zW$_5-!v&=+zHbzj=E?aXt}r69AXKO#;ItxWHEAI-IPtN~wQ(bHL_|naKKE)vnU-~a zp0CeTaWkA(?8~SP87{x7AG)wmFVwBhfb9XtK$(}Dm`-u-gnxZn73n`)7z;;FXYF66 zSPEfTA_uOxR|vXQtPE|h7|mUF%; z=XqiSOK>nkVPP0WJ>#RIeVf;#=M>(Rf>f!!s7bC{DZ4GNI8r2ey_l>8`cb;mdY_5n z_SpZo{T#yowJ$w;cd3fscM4F@fDS0$CoA{`_L;NLMUlK_i6I1Hd3{0f(#jfdrYT@Y z|E#5*i>&gv1l@ku+3F9foZUS9wwT`=f=9U9MIM1hS|XE%ILK7PvX8pgtRNhAMzi0c zt4Qqp&2F2a8_4-UjyO6rkNFR**#2{SdV0X#gAgFHpuff;#Bq{i)R0f;A`h%#c*%EH znRp;xAt?3GAuNCjWJC=Py!!C4pjuiKN3-CVeB=22+|wLNJ)V^rc!h@a*--@HJh-oI zdquaa9`o8&TP(zZgUBvZ$#^nqf*E()c>X8Af8CkAx_lIl)!sMgcVn~<=!bNF4Hdxn z72)r!#H;es@eGzFkrM-z*<<2wvoel-houeM4l_l^S@5-�Ww1M%Ce=k!z(t4o~^+ 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𝔧= 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

WxOTG zgZgcB)Z4FN19VO_FWR6qp_Bq~CJG@hExAYwMj>1=FxL4O8?w@R4(;k%c0;=sX{z|v z7*+P`!(?Qhw;gUpML!+S;y~HBQwp%gdoRgQ8?Mc=dJ~kkbv1L<$i8-6D&f+Zhxo2R zH^tz^^=1QuiN)WBYZxx`$299tKO;c1|1VxpP5kd?r?`#!Z7*|+kPh;@kIbXJvOi@R zFpZ;=(`T-<)nGz0o!HbOODj6To_V+wRcR969IHlg2TMc9r8XyBoY8jC0ib_6FT3$X zV@>TIqtvc+6&fFibt*Kcj=9zU%1iK3Nj9FbG0(&Pdo!%a1oyyGNv=?pzejvIZGD+; zhApkGv50H+}v(lnbNgCxLCwsJHBKWb8Qnu1Z)82_fF&?hg}aGb5-Op4&2C zf2m}~SvBL^RD8=NVTdKuEWjU?I*c)UC4LHiEU>gO8_uz^r2(r$5l&xt^&l!wjPTQ{LTveVCwQLsiG&xgq^Ep!(kPmICkXcDDswmF= zChtD-f5?B;BnpDMI;78EtsYNkeR(pRD_Y5qS-io?JPxsW=^P09IvPHCzn6HrN#@=`91=?LA4lBZz6a{oU5T9K71QLA317(eKW(Om%|cAeOe}dzUse9f zEM@N+!5u2FPe7|XOfSD(1YASe@J)N~r%^3Xo5yPzj=D+x#G^Vw7B2sY=}e4y6?)*l zRTLR**Z1&XjMgiAeuH^*>O8(D5&rl<^gS-X_P?p4SZw>$Kk`!#h9X%s=dZm*0DzEK z54w$uMkSeX)Ud5`sGLWpNYdTI*7h;mXTjU%v*A#2n|b1r#k#>HmRUB5#N{bSK!z7(JdiY z%V0_eCP?5o(8P)&8ZWfUPBSk07Fz5}#0%Pl20QI&9?M9(R?(`Fj=wOJ|04JCmGSfS zlel|GGu_LpD$Lq`^~@?-LiFR8%^*5oGKiek;$1Y#oHobkfGnKWoZ%1rUfRHz_>lCP zW~lGH1%-=^og-1%o4bD$*NRQ^z4g+X(pSO;jZQay%{?s=;r^g)$(vp$527xNvxLPD zi;a;vNj5-cOLXYMaa4D8jI=}Zc&N={gb8=($h%0mj5-A9q>tc=4VijXkswPa=fKYU zwb~}B#z;6NE4l|8_)19!&@}3Zs^bbKF

|mAvVc7yK@YbN@}3`lX{i!@BDHwgp3v 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 literal 0 HcmV?d00001 diff --git a/electron/electron-builder.config.json b/electron/electron-builder.config.json index 5225e4a..6f3bf7c 100644 --- a/electron/electron-builder.config.json +++ b/electron/electron-builder.config.json @@ -46,8 +46,9 @@ "synopsis": "Qortal Hub for Linux" }, "mac": { - "category": "your.app.category.type", - "target": "dmg" + "icon": "assets/mac/appIcon.icns", + "category": "public.app-category.utilities", + "target": ["dmg"] }, "productName": "Qortal Hub" } From c507616fc23c29fc3e24d1a3ad9ba01dec041b29 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 5 Jan 2025 15:01:33 +0200 Subject: [PATCH 064/119] update version --- electron/package.json | 2 +- src/ExtStates/NotAuthenticated.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electron/package.json b/electron/package.json index 026dba5..6d16118 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "qortal-hub", - "version": "0.4.0", + "version": "0.5.0", "description": "A desktop app that gives you access to the Qortal network", "author": { "name": "", diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 604c1d1..0b0ef42 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -26,7 +26,7 @@ import { cleanUrl, isUsingLocal } from "../background"; import { GlobalContext } from "../App"; const manifestData = { - version: "0.4.0", + version: "0.5.0", }; export const NotAuthenticated = ({ From d4f78403c65f8e0a0d8cbaa52361a2d90c0194aa Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 6 Jan 2025 09:22:54 +0200 Subject: [PATCH 065/119] update config --- .gitignore | 1 + electron/electron-builder.config-mac.json | 30 +++++++++++++++++++++++ electron/electron-builder.config.arm.json | 8 +++--- electron/package.json | 1 + 4 files changed, 36 insertions(+), 4 deletions(-) create mode 100644 electron/electron-builder.config-mac.json diff --git a/.gitignore b/.gitignore index e7e5b37..e494b90 100644 --- a/.gitignore +++ b/.gitignore @@ -23,3 +23,4 @@ dist-ssr *.sln *.sw? release-builds/ +.env \ No newline at end of file diff --git a/electron/electron-builder.config-mac.json b/electron/electron-builder.config-mac.json new file mode 100644 index 0000000..e53fbf3 --- /dev/null +++ b/electron/electron-builder.config-mac.json @@ -0,0 +1,30 @@ +{ + "appId": "org.Qortal.Qortal-Hub", + "directories": { + "buildResources": "resources" + }, + + "files": ["assets/**/*", "build/**/*", "capacitor.config.*", "app/**/*", "scripts/**/*" ], + "afterPack": "scripts/afterPack.js", + "afterSign": "scripts/notarize.js", + "nsis": { + "allowElevation": true, + "oneClick": false, + "allowToChangeInstallationDirectory": true + }, + "publish": [ + { + "provider": "github", + "owner": "Qortal", + "repo": "Qortal-Hub", + "releaseType": "draft" + } + ], + + "mac": { + "icon": "assets/mac/appIcon.icns", + "category": "public.app-category.utilities", + "target": ["dmg", "zip"] + }, + "productName": "Qortal Hub" +} diff --git a/electron/electron-builder.config.arm.json b/electron/electron-builder.config.arm.json index fb32b66..fd1aea7 100644 --- a/electron/electron-builder.config.arm.json +++ b/electron/electron-builder.config.arm.json @@ -9,12 +9,12 @@ "assets/**/*", "build/**/*", "capacitor.config.*", - "app/**/*" + "app/**/*", + "scripts/**/*" ], "linux": { "target": [ - "AppImage", - "deb" + "AppImage" ], "category": "Network", "packageCategory": "Network", @@ -29,7 +29,7 @@ }, "deb": { "artifactName": "Qortal-Hub-Setup-arm64_${version}.${ext}", - "synopsis": "Qortal Hub for Linux" + "synopsis": "Qortal Hub for Linux", }, "directories": { "output": "dist", diff --git a/electron/package.json b/electron/package.json index 6d16118..fc59bb8 100644 --- a/electron/package.json +++ b/electron/package.json @@ -31,6 +31,7 @@ "electron:make": "npm run build && electron-builder build -c ./electron-builder.config.json -p always", "electron:make-local": "npm run build && electron-builder build -c ./electron-builder.config.json --publish=never", "electron:make-lin": "npm run build && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l", + "electron:make-mac": "npm run build && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac", "electron:make-win": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w", "electron:make-arm": "npm run build && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64", "electron:make-all": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64" From 059f05ed200fab2ad3f711d567e259fc572ae1e0 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 6 Jan 2025 10:59:07 +0200 Subject: [PATCH 066/119] add gettimestamp at mount --- src/components/Group/Group.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index 1d90ff4..955d593 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -554,6 +554,13 @@ export const Group = ({ } catch (error) {} }; + useEffect(()=> { + if(myAddress){ + getGroupAnnouncements() + getTimestampEnterChat() + } + }, [myAddress]) + const getGroupOwner = async (groupId) => { try { const url = `${getBaseApiReact()}/groups/${groupId}`; From ae12c31fd061dbc4e3ccf0b5fa7d1e1cf05b017a Mon Sep 17 00:00:00 2001 From: PhilReact Date: Tue, 7 Jan 2025 16:51:19 +0200 Subject: [PATCH 067/119] added qmail status --- src/App.tsx | 9 ++++++ src/assets/QMailLogo.png | Bin 0 -> 7877 bytes src/atoms/global.ts | 10 ++++++ src/components/Group/Group.tsx | 6 +++- src/components/Group/HomeDesktop.tsx | 13 +++++--- src/components/Group/QMailMessages.tsx | 12 ++++--- src/components/QMailStatus.tsx | 43 +++++++++++++++++++++++++ 7 files changed, 84 insertions(+), 9 deletions(-) create mode 100644 src/assets/QMailLogo.png create mode 100644 src/components/QMailStatus.tsx diff --git a/src/App.tsx b/src/App.tsx index 7131676..c8704cb 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -115,7 +115,9 @@ import { hasSettingsChangedAtom, isDisabledEditorEnterAtom, isUsingImportExportSettingsAtom, + mailsAtom, oldPinnedAppsAtom, + qMailLastEnteredTimestampAtom, settingsLocalLastUpdatedAtom, settingsQDNLastUpdatedAtom, sortablePinnedAppsAtom, @@ -138,6 +140,7 @@ import BoundedNumericTextField from "./common/BoundedNumericTextField"; import { useHandleUserInfo } from "./components/Group/useHandleUserInfo"; import { Minting } from "./components/Minting/Minting"; import { isRunningGateway } from "./qortalRequests"; +import { QMailStatus } from "./components/QMailStatus"; type extStates = | "not-authenticated" @@ -471,6 +474,8 @@ function App() { settingsLocalLastUpdatedAtom ); const resetAtomOldPinnedAppsAtom = useResetRecoilState(oldPinnedAppsAtom); + const resetAtomQMailLastEnteredTimestampAtom = useResetRecoilState(qMailLastEnteredTimestampAtom) + const resetAtomMailsAtom = useResetRecoilState(mailsAtom) const resetAllRecoil = () => { resetAtomSortablePinnedAppsAtom(); @@ -479,6 +484,8 @@ function App() { resetAtomSettingsLocalLastUpdatedAtom(); resetAtomOldPinnedAppsAtom(); resetAtomIsUsingImportExportSettingsAtom() + resetAtomQMailLastEnteredTimestampAtom() + resetAtomMailsAtom() }; useEffect(() => { if (!isMobile) return; @@ -1585,6 +1592,8 @@ function App() { )} + + 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 + )} diff --git a/src/components/Group/HomeDesktop.tsx b/src/components/Group/HomeDesktop.tsx index 67bf811..e3b847d 100644 --- a/src/components/Group/HomeDesktop.tsx +++ b/src/components/Group/HomeDesktop.tsx @@ -21,18 +21,18 @@ export const HomeDesktop = ({ setOpenManageMembers, setOpenAddGroup, setMobileViewMode, - setDesktopViewMode + setDesktopViewMode, + desktopViewMode }) => { return ( @@ -85,7 +85,9 @@ export const HomeDesktop = ({ hasGroups={groups?.length !== 0} /> - + + + )} + )} {!isLoadingGroups && ( diff --git a/src/components/Group/QMailMessages.tsx b/src/components/Group/QMailMessages.tsx index 6603e27..ccce59b 100644 --- a/src/components/Group/QMailMessages.tsx +++ b/src/components/Group/QMailMessages.tsx @@ -13,7 +13,9 @@ import MailIcon from '@mui/icons-material/Mail'; import MailOutlineIcon from '@mui/icons-material/MailOutline'; import { executeEvent } from '../../utils/events'; import { CustomLoader } from '../../common/CustomLoader'; -const isLessThanOneWeekOld = (timestamp) => { +import { useRecoilState } from 'recoil'; +import { mailsAtom, qMailLastEnteredTimestampAtom } from '../../atoms/global'; +export const isLessThanOneWeekOld = (timestamp) => { // Current time in milliseconds const now = Date.now(); @@ -39,8 +41,8 @@ export function formatEmailDate(timestamp: number) { } } export const QMailMessages = ({userName, userAddress}) => { - const [mails, setMails] = useState([]) - const [lastEnteredTimestamp, setLastEnteredTimestamp] = useState(null) + const [mails, setMails] = useRecoilState(mailsAtom) + const [lastEnteredTimestamp, setLastEnteredTimestamp] = useRecoilState(qMailLastEnteredTimestampAtom) const [loading, setLoading] = useState(true) const getMails = useCallback(async () => { @@ -187,6 +189,8 @@ export const QMailMessages = ({userName, userAddress}) => { onClick={()=> { executeEvent("addTab", { data: { service: 'APP', name: 'q-mail' } }); executeEvent("open-apps-mode", { }); + setLastEnteredTimestamp(Date.now()) + }} > { - ): lastEnteredTimestamp < mail?.created ? ( + ): (lastEnteredTimestamp < mail?.created) && isLessThanOneWeekOld(mail?.created) ? ( diff --git a/src/components/QMailStatus.tsx b/src/components/QMailStatus.tsx new file mode 100644 index 0000000..2787336 --- /dev/null +++ b/src/components/QMailStatus.tsx @@ -0,0 +1,43 @@ +import React, { useMemo } from 'react' +import QMailLogo from '../assets/QMailLogo.png' +import { useRecoilState } from 'recoil' +import { mailsAtom, qMailLastEnteredTimestampAtom } from '../atoms/global' +import { isLessThanOneWeekOld } from './Group/QMailMessages' +import { ButtonBase } from '@mui/material' +import { executeEvent } from '../utils/events' +export const QMailStatus = () => { + const [lastEnteredTimestamp, setLastEnteredTimestamp] = useRecoilState(qMailLastEnteredTimestampAtom) + const [mails, setMails] = useRecoilState(mailsAtom) + + const hasNewMail = useMemo(()=> { + if(mails?.length === 0) return false + const latestMail = mails[0] + if(!lastEnteredTimestamp && isLessThanOneWeekOld(latestMail?.created)) return true + if((lastEnteredTimestamp < latestMail?.created) && isLessThanOneWeekOld(latestMail?.created)) return true + return false + }, [lastEnteredTimestamp, mails]) + return ( + { + executeEvent("addTab", { data: { service: 'APP', name: 'q-mail' } }); + executeEvent("open-apps-mode", { }); + setLastEnteredTimestamp(Date.now()) + }} style={{ + position: 'relative' + }}>{hasNewMail && ( +

+ )} + ) +} From 06c68dd8e8576199c199920a43bde81c23adc270 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 8 Jan 2025 20:51:47 +0200 Subject: [PATCH 068/119] change response to base58 --- src/qortalRequests/get.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 45fb960..38284f7 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -3471,7 +3471,7 @@ export const signTransaction = async (data, isFromExtension) => { const signedBytes = utils.appendBuffer(arbitraryBytesBuffer, signature); const signedBytesToBase58 = Base58.encode(signedBytes); if(!shouldProcess){ - return uint8ArrayToBase64(signedBytes); + return signedBytesToBase58 } const res = await processTransactionVersion2(signedBytesToBase58); if (!res?.signature) From cc92b7d9bd2624e32f4a40896fd9e03fdb2c0364 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 9 Jan 2025 03:12:59 +0200 Subject: [PATCH 069/119] fix fetch arrr balance --- src/qortalRequests/get.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 38284f7..1a964ce 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -1058,6 +1058,41 @@ export const publishQDNResource = async ( } }; +export const checkArrrSyncStatus = async (seed) => { + const _url = await createEndpoint(`/crosschain/arrr/syncstatus`); + let tries = 0; // Track the number of attempts + + while (tries < 36) { + const response = await fetch(_url, { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: seed, + }); + + let res; + try { + res = await response.clone().json(); + } catch (e) { + res = await response.text(); + } + + if (res.indexOf('<') > -1 || res !== "Synchronized") { + // Wait 2 seconds before trying again + await new Promise((resolve) => setTimeout(resolve, 2000)); + tries += 1; + } else { + // If the response doesn't meet the two conditions, exit the function + return; + } + } + + // If we exceed 6 tries, throw an error + throw new Error("Failed to synchronize after 36 attempts"); +}; + + export const publishMultipleQDNResources = async ( data: any, sender, @@ -1928,6 +1963,7 @@ export const getWalletBalance = async ( _body = parsedData.rvnPublicKey; break; case "ARRR": + await checkArrrSyncStatus(parsedData.arrrSeed58) _url = await createEndpoint(`/crosschain/arrr/walletbalance`); _body = parsedData.arrrSeed58; break; @@ -1971,6 +2007,7 @@ const getPirateWallet = async (arrrSeed58)=> { throw new Error("Retrieving PIRATECHAIN balance is not allowed through a gateway."); } const bodyToString = arrrSeed58; + await checkArrrSyncStatus(bodyToString) const url = await createEndpoint(`/crosschain/arrr/walletaddress`); const response = await fetch(url, { method: "POST", From ef5e68d0a9abae5975eb89082ad6fb614a382925 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 9 Jan 2025 18:36:43 +0200 Subject: [PATCH 070/119] fix saving of apikeys --- src/App.tsx | 102 +++++++++++++++++++---------- src/ExtStates/NotAuthenticated.tsx | 93 ++++++++++++++++++++++---- 2 files changed, 149 insertions(+), 46 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index c8704cb..9de3b2c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -400,6 +400,11 @@ function App() { const [isOpenSendQort, setIsOpenSendQort] = useState(false); const [isOpenSendQortSuccess, setIsOpenSendQortSuccess] = useState(false); const [rootHeight, setRootHeight] = useState("100%"); + const [currentNode, setCurrentNode] = useState({ + url: "http://127.0.0.1:12391", + }); + const [useLocalNode, setUseLocalNode] = useState(false); + const [isSettingsOpen, setIsSettingsOpen] = useState(false); const [showSeed, setShowSeed] = useState(false) const [creationStep, setCreationStep] = useState(1) @@ -516,7 +521,9 @@ function App() { globalApiKey = key; }; useEffect(() => { - window + try { + setIsLoading(true); + window .sendMessage("getApiKey") .then((response) => { if (response) { @@ -529,7 +536,36 @@ function App() { "Failed to get API key:", error?.message || "An error occurred" ); - }); + }).finally(()=> { + window + .sendMessage("getWalletInfo") + .then((response) => { + if (response && response?.walletInfo) { + setRawWallet(response?.walletInfo); + if ( + holdRefExtState.current === "web-app-request-payment" || + holdRefExtState.current === "web-app-request-connection" || + holdRefExtState.current === "web-app-request-buy-order" + ) + return; + if (response?.hasKeyPair) { + setExtstate("authenticated"); + } else { + setExtstate("wallet-dropped"); + } + } + }) + .catch((error) => { + console.error("Failed to get wallet info:", error); + }); + }) + } catch (error) { + + } finally { + setIsLoading(false); + + } + }, []); useEffect(() => { if (extState) { @@ -627,8 +663,6 @@ function App() { setdecryptedWallet(null); } catch (e) { console.log(e); - - error = e; } }, }); @@ -848,36 +882,6 @@ function App() { // REMOVED FOR MOBILE APP }; - useEffect(() => { - try { - setIsLoading(true); - - window - .sendMessage("getWalletInfo") - .then((response) => { - if (response && response?.walletInfo) { - setRawWallet(response?.walletInfo); - if ( - holdRefExtState.current === "web-app-request-payment" || - holdRefExtState.current === "web-app-request-connection" || - holdRefExtState.current === "web-app-request-buy-order" - ) - return; - if (response?.hasKeyPair) { - setExtstate("authenticated"); - } else { - setExtstate("wallet-dropped"); - } - } - }) - .catch((error) => { - console.error("Failed to get wallet info:", error); - }); - } catch (error) { - } finally { - setIsLoading(false); - } - }, []); const getUserInfo = useCallback(async (useTimer?: boolean) => { try { @@ -1712,6 +1716,10 @@ function App() { globalApiKey={globalApiKey} setApiKey={setApiKey} handleSetGlobalApikey={handleSetGlobalApikey} + currentNode={currentNode} + setCurrentNode={setCurrentNode} + setUseLocalNode={setUseLocalNode} + useLocalNode={useLocalNode} /> )} {/* {extState !== "not-authenticated" && ( @@ -2467,7 +2475,31 @@ function App() { }} ref={passwordRef} /> - + {useLocalNode ? ( + <> + + + {"Using node: "} {currentNode?.url} + + + ) : ( + <> + + + {"Using gateway"} + + + )} + + Authenticate diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 0b0ef42..f7f4e91 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -22,13 +22,19 @@ import Info from "../assets/svgs/Info.svg"; import HelpIcon from '@mui/icons-material/Help'; import { CustomizedSnackbars } from "../components/Snackbar/Snackbar"; import { set } from "lodash"; -import { cleanUrl, isUsingLocal } from "../background"; +import { cleanUrl, gateways, isUsingLocal } from "../background"; import { GlobalContext } from "../App"; const manifestData = { version: "0.5.0", }; + +function removeTrailingSlash(url) { + return url.replace(/\/+$/, ''); +} + + export const NotAuthenticated = ({ getRootProps, getInputProps, @@ -38,18 +44,22 @@ export const NotAuthenticated = ({ setApiKey, globalApiKey, handleSetGlobalApikey, + currentNode, + setCurrentNode, + useLocalNode, + setUseLocalNode }) => { const [isValidApiKey, setIsValidApiKey] = useState(null); const [hasLocalNode, setHasLocalNode] = useState(null); - const [useLocalNode, setUseLocalNode] = useState(false); + // const [useLocalNode, setUseLocalNode] = useState(false); const [openSnack, setOpenSnack] = React.useState(false); const [infoSnack, setInfoSnack] = React.useState(null); const [show, setShow] = React.useState(false); const [mode, setMode] = React.useState("list"); const [customNodes, setCustomNodes] = React.useState(null); - const [currentNode, setCurrentNode] = React.useState({ - url: "http://127.0.0.1:12391", - }); + // const [currentNode, setCurrentNode] = React.useState({ + // url: "http://127.0.0.1:12391", + // }); const [importedApiKey, setImportedApiKey] = React.useState(null); //add and edit states const [url, setUrl] = React.useState("http://"); @@ -70,6 +80,34 @@ export const NotAuthenticated = ({ const text = e.target.result; // Get the file content setImportedApiKey(text); // Store the file content in the state + if(customNodes){ + setCustomNodes((prev)=> { + const copyPrev = [...prev] + const findLocalIndex = copyPrev?.findIndex((item)=> item?.url === 'http://127.0.0.1:12391') + if(findLocalIndex === -1){ + copyPrev.unshift({ + url: "http://127.0.0.1:12391", + apikey: text + }) + } else { + copyPrev[findLocalIndex] = { + url: "http://127.0.0.1:12391", + apikey: text + } + } + window + .sendMessage("setCustomNodes", copyPrev) + .catch((error) => { + console.error( + "Failed to set custom nodes:", + error.message || "An error occurred" + ); + }); + return copyPrev + }) + + } + }; reader.readAsText(file); // Read the file as text } @@ -105,11 +143,16 @@ export const NotAuthenticated = ({ window .sendMessage("getCustomNodesFromStorage") .then((response) => { - if (response) { + setCustomNodes(response || []); window.electronAPI.setAllowedDomains(response?.map((node)=> node.url)) - - } + if(Array.isArray(response)){ + const findLocal = response?.find((item)=> item?.url === 'http://127.0.0.1:12391') + if(findLocal && findLocal?.apikey){ + setImportedApiKey(findLocal?.apikey) + } + } + }) .catch((error) => { console.error( @@ -130,14 +173,42 @@ export const NotAuthenticated = ({ hasLocalNodeRef.current = hasLocalNode; }, [hasLocalNode]); + + const validateApiKey = useCallback(async (key, fromStartUp) => { try { + const isLocalKey = cleanUrl(key?.url) === "127.0.0.1:12391"; + if(fromStartUp && key?.url && key?.apikey && !isLocalKey && !gateways.some(gateway => apiKey?.url?.includes(gateway))){ + setCurrentNode({ + url: key?.url, + apikey: key?.apikey, + }); + const url = `${key?.url}/admin/apikey/test`; + const response = await fetch(url, { + method: "GET", + headers: { + accept: "text/plain", + "X-API-KEY": key?.apikey, // Include the API key here + }, + }); + + // Assuming the response is in plain text and will be 'true' or 'false' + const data = await response.text(); + if (data === "true") { + setIsValidApiKey(true); + setUseLocalNode(true); + return + } + + } if (!currentNodeRef.current) return; const stillHasLocal = await checkIfUserHasLocalNode() - const isLocalKey = cleanUrl(key?.url) === "127.0.0.1:12391"; + if (isLocalKey && !stillHasLocal && !fromStartUp) { throw new Error("Please turn on your local node"); } + //check custom nodes + // !gateways.some(gateway => apiKey?.url?.includes(gateway)) const isCurrentNodeLocal = cleanUrl(currentNodeRef.current?.url) === "127.0.0.1:12391"; if (isLocalKey && !isCurrentNodeLocal) { @@ -240,12 +311,12 @@ export const NotAuthenticated = ({ let nodes = [...(myNodes || [])]; if (customNodeToSaveIndex !== null) { nodes.splice(customNodeToSaveIndex, 1, { - url, + url: removeTrailingSlash(url), apikey: customApikey, }); } else if (url && customApikey) { nodes.push({ - url, + url: removeTrailingSlash(url), apikey: customApikey, }); } From ac1e2d9ce0555565ff042c86b6a2ee1650d98582 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 9 Jan 2025 20:11:57 +0200 Subject: [PATCH 071/119] add safeguard --- electron/src/setup.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/electron/src/setup.ts b/electron/src/setup.ts index 2e85c55..0136138 100644 --- a/electron/src/setup.ts +++ b/electron/src/setup.ts @@ -324,7 +324,10 @@ export function setupContentSecurityPolicy(customScheme: string): void { // IPC listener for updating allowed domains ipcMain.on('set-allowed-domains', (event, domains: string[]) => { - + console.log('domains', domains) + if (!Array.isArray(domains)) { + return; + } // Validate and transform user-provided domains const validatedUserDomains = domains .flatMap((domain) => { From dc9e166383dab766de94880d9b3713c091502052 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 9 Jan 2025 20:15:10 +0200 Subject: [PATCH 072/119] remove log --- electron/src/setup.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/electron/src/setup.ts b/electron/src/setup.ts index 0136138..7f6a726 100644 --- a/electron/src/setup.ts +++ b/electron/src/setup.ts @@ -324,7 +324,6 @@ export function setupContentSecurityPolicy(customScheme: string): void { // IPC listener for updating allowed domains ipcMain.on('set-allowed-domains', (event, domains: string[]) => { - console.log('domains', domains) if (!Array.isArray(domains)) { return; } From 7b17039ee8b87a0a814572dae51feeedec42664b Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 10 Jan 2025 21:55:08 +0200 Subject: [PATCH 073/119] fixes --- src/components/Chat/ChatOptions.tsx | 4 ++-- src/components/Chat/MessageDisplay.tsx | 2 +- src/components/Chat/styles.css | 3 ++- src/qortalRequests/get.ts | 32 +++++++++++++++++++++----- 4 files changed, 31 insertions(+), 10 deletions(-) diff --git a/src/components/Chat/ChatOptions.tsx b/src/components/Chat/ChatOptions.tsx index 42f009c..3640bd1 100644 --- a/src/components/Chat/ChatOptions.tsx +++ b/src/components/Chat/ChatOptions.tsx @@ -168,14 +168,14 @@ export const ChatOptions = ({ messages : untransformedMessages, goToMessage, mem if(isPrivate === false){ return messages .filter((message) => - extractTextFromHTML(message?.messageText)?.includes(`@${myName}`) + extractTextFromHTML(message?.messageText)?.includes(`@${myName?.toLowerCase()}`) ) ?.sort((a, b) => b?.timestamp - a?.timestamp); } return messages .filter((message) => - extractTextFromHTML(message?.decryptedData?.message)?.includes(`@${myName}`) + extractTextFromHTML(message?.decryptedData?.message)?.includes(`@${myName?.toLowerCase()}`) ) ?.sort((a, b) => b?.timestamp - a?.timestamp); }, [messages, myName, isPrivate]); diff --git a/src/components/Chat/MessageDisplay.tsx b/src/components/Chat/MessageDisplay.tsx index 916c7d4..67b8538 100644 --- a/src/components/Chat/MessageDisplay.tsx +++ b/src/components/Chat/MessageDisplay.tsx @@ -80,7 +80,7 @@ export const MessageDisplay = ({ htmlContent, isReply }) => { const sanitizedContent = DOMPurify.sanitize(linkify(htmlContent), { ALLOWED_TAGS: [ 'a', 'b', 'i', 'em', 'strong', 'p', 'br', 'div', 'span', 'img', - 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'code', 'pre', 'table', 'thead', 'tbody', 'tr', 'th', 'td' + 'ul', 'ol', 'li', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'code', 'pre', 'table', 'thead', 'tbody', 'tr', 'th', 'td', 's', 'hr' ], ALLOWED_ATTR: [ 'href', 'target', 'rel', 'class', 'src', 'alt', 'title', diff --git a/src/components/Chat/styles.css b/src/components/Chat/styles.css index 21680c8..ba97bb3 100644 --- a/src/components/Chat/styles.css +++ b/src/components/Chat/styles.css @@ -93,7 +93,7 @@ .tiptap hr { border: none; border-top: 1px solid var(--gray-2); - margin: 2rem 0; + margin: 1rem 0; } .ProseMirror:focus-visible { @@ -103,6 +103,7 @@ .tiptap p { font-size: 16px; color: white; /* Ensure paragraph text color is white */ + margin: 0px; } .tiptap p.is-editor-empty:first-child::before { color: #adb5bd; diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 1a964ce..aa9b30b 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -889,7 +889,7 @@ export const deleteListItems = async (data, isFromExtension) => { if (isGateway) { throw new Error("This action cannot be done through a gateway"); } - const requiredFields = ["list_name", "item"]; + const requiredFields = ["list_name"]; const missingFields: string[] = []; requiredFields.forEach((field) => { if (!data[field]) { @@ -901,15 +901,18 @@ export const deleteListItems = async (data, isFromExtension) => { const errorMsg = `Missing fields: ${missingFieldsString}`; throw new Error(errorMsg); } - - const item = data.item; + if(!data?.item && !data?.items){ + throw new Error('Missing fields: items') + } + const item = data?.item; + const items = data?.items const list_name = data.list_name; const resPermission = await getUserPermission( { text1: "Do you give this application permission to", text2: `Remove the following from the list ${list_name}:`, - highlightedText: item, + highlightedText: items ? JSON.stringify(items) : item, }, isFromExtension ); @@ -918,7 +921,7 @@ export const deleteListItems = async (data, isFromExtension) => { if (accepted) { const url = await createEndpoint(`/lists/${list_name}`); const body = { - items: [item], + items: items || [item], }; const bodyToString = JSON.stringify(body); const response = await fetch(url, { @@ -1781,10 +1784,17 @@ export const getUserWallet = async (data, isFromExtension) => { const errorMsg = `Missing fields: ${missingFieldsString}`; throw new Error(errorMsg); } + const isGateway = await isRunningGateway(); + + if (data?.coin === "ARRR" && isGateway) + throw new Error( + "Cannot view ARRR wallet info through the gateway. Please use your local node." + ); const resPermission = await getUserPermission( { text1: "Do you give this application permission to get your wallet information?", + highlightedText: `coin: ${data.coin}`, }, isFromExtension ); @@ -1827,7 +1837,7 @@ export const getUserWallet = async (data, isFromExtension) => { break; case "BTC": userWallet["address"] = parsedData.btcAddress; - userWallet["publickey"] = parsedData.derivedMasterPublicKey; + userWallet["publickey"] = parsedData.btcPublicKey; break; case "LTC": userWallet["address"] = parsedData.ltcAddress; @@ -1846,6 +1856,7 @@ export const getUserWallet = async (data, isFromExtension) => { userWallet["publickey"] = parsedData.rvnPublicKey; break; case "ARRR": + await checkArrrSyncStatus(parsedData.arrrSeed58) userWallet["address"] = arrrAddress; break; default: @@ -2088,10 +2099,17 @@ export const getUserWalletInfo = async (data, isFromExtension) => { const errorMsg = `Missing fields: ${missingFieldsString}`; throw new Error(errorMsg); } + if(data?.coin === 'ARRR'){ + + throw new Error( + "ARRR is not supported for this call." + ); + } const resPermission = await getUserPermission( { text1: "Do you give this application permission to retrieve your wallet information", + highlightedText: `coin: ${data.coin}`, }, isFromExtension ); @@ -2100,6 +2118,8 @@ export const getUserWalletInfo = async (data, isFromExtension) => { if (accepted) { let coin = data.coin; let walletKeys = await getUserWalletFunc(coin); + + const _url = await createEndpoint( `/crosschain/` + data.coin.toLowerCase() + `/addressinfos` ); From 83ebfff6114ff9285e080595e1547bded1e7f7f9 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 11 Jan 2025 18:29:14 +0200 Subject: [PATCH 074/119] update send chat message qortalRequest --- src/components/Apps/AppViewer.tsx | 3 +- src/qortalRequests.ts | 4 +- src/qortalRequests/get.ts | 149 ++++++++++++++++++++++++------ 3 files changed, 126 insertions(+), 30 deletions(-) diff --git a/src/components/Apps/AppViewer.tsx b/src/components/Apps/AppViewer.tsx index 6b55ed0..cef2d8d 100644 --- a/src/components/Apps/AppViewer.tsx +++ b/src/components/Apps/AppViewer.tsx @@ -189,7 +189,8 @@ export const AppViewer = React.forwardRef(({ app , hide, isDevMode}, iframeRef) height: !isMobile ? '100vh' : `calc(${rootHeight} - 60px - 45px )`, border: 'none', width: '100%' - }} id="browser-iframe" src={defaultUrl} sandbox="allow-scripts allow-same-origin allow-forms allow-downloads allow-modals" allow="fullscreen"> + }} id="browser-iframe" src={defaultUrl} sandbox="allow-scripts allow-same-origin allow-forms allow-downloads allow-modals" + allow="fullscreen; clipboard-read; clipboard-write"> diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index bd3e688..78a305a 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -376,7 +376,7 @@ export const isRunningGateway = async ()=> { case "GET_USER_WALLET": { try { - const res = await getUserWallet(request.payload, isFromExtension); + const res = await getUserWallet(request.payload, isFromExtension, appInfo); event.source.postMessage({ requestId: request.requestId, action: request.action, @@ -416,7 +416,7 @@ export const isRunningGateway = async ()=> { case "GET_USER_WALLET_INFO": { try { - const res = await getUserWalletInfo(request.payload, isFromExtension); + const res = await getUserWalletInfo(request.payload, isFromExtension, appInfo); event.source.postMessage({ requestId: request.requestId, action: request.action, diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index aa9b30b..ff3c63c 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -1416,15 +1416,42 @@ export const createPoll = async (data, isFromExtension) => { } }; + +function isBase64(str) { + const base64Regex = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/; + return base64Regex.test(str) && str.length % 4 === 0; +} + +function checkValue(value) { + if (typeof value === "string") { + if (isBase64(value)) { + return 'string' + } else { + return 'string' + } + } else if (typeof value === "object" && value !== null) { + return 'object' + } else { + throw new Error('Field fullContent is in an invalid format. Either use a string, base64 or an object.') + } +} + + export const sendChatMessage = async (data, isFromExtension, appInfo) => { const message = data?.message; - const fullMessageObject = data?.fullMessageObject - const recipient = data.destinationAddress; + const fullMessageObject = data?.fullMessageObject || data?.fullContent + const recipient = data?.destinationAddress || data.recipient; const groupId = data.groupId; - const isRecipient = !groupId; - - const value = - (await getPermission(`qAPPSendChatMessage-${appInfo?.name}`)) || false; + const isRecipient = groupId === undefined; + const chatReference = data?.chatReference + if(groupId === undefined && recipient === undefined){ + throw new Error('Please provide a recipient or groupId') + } + let fullMessageObjectType + if(fullMessageObject){ + fullMessageObjectType = checkValue(fullMessageObject) + } + const value = (await getPermission(`qAPPSendChatMessage-${appInfo?.name}`)) || false; let skip = false; if (value) { skip = true; @@ -1436,7 +1463,7 @@ if (!skip) { text1: "Do you give this application permission to send this chat message?", text2: `To: ${isRecipient ? recipient : `group ${groupId}`}`, - text3: `${message?.slice(0, 25)}${message?.length > 25 ? "..." : ""}`, + text3: fullMessageObject ? fullMessageObjectType === 'string' ? `${fullMessageObject?.slice(0, 25)}${fullMessageObject?.length > 25 ? "..." : ""}` : `${JSON.stringify(fullMessageObject)?.slice(0, 25)}${JSON.stringify(fullMessageObject)?.length > 25 ? "..." : ""}` : `${message?.slice(0, 25)}${message?.length > 25 ? "..." : ""}`, checkbox1: { value: false, label: "Always allow chat messages from this app", @@ -1471,7 +1498,10 @@ if (!skip) { version: 3, }; - const stringifyMessageObject = JSON.stringify(messageObject); + let stringifyMessageObject = JSON.stringify(messageObject); + if(fullMessageObjectType === 'string'){ + stringifyMessageObject = messageObject + } const balance = await getBalanceInfo(); const hasEnoughBalance = +balance < 4 ? false : true; @@ -1527,16 +1557,22 @@ if (!skip) { publicKey: uint8PublicKey, }; + let handleDynamicValues = {} + if(chatReference){ + handleDynamicValues['chatReference'] = chatReference + } + const tx = await createTransaction(18, keyPair, { timestamp: sendTimestamp, recipient: recipient, recipientPublicKey: key, - hasChatReference: 0, + hasChatReference: chatReference ? 1 : 0, message: stringifyMessageObject, lastReference: reference, proofOfWorkNonce: 0, isEncrypted: 1, isText: 1, + ...handleDynamicValues }); const chatBytes = tx.chatBytes; @@ -1565,16 +1601,22 @@ if (!skip) { publicKey: uint8PublicKey, }; + let handleDynamicValues = {} + if(chatReference){ + handleDynamicValues['chatReference'] = chatReference + } + const txBody = { timestamp: Date.now(), groupID: Number(groupId), hasReceipient: 0, - hasChatReference: 0, + hasChatReference: chatReference ? 1 : 0, message: stringifyMessageObject, lastReference: reference, proofOfWorkNonce: 0, isEncrypted: 0, // Set default to not encrypted for groups isText: 1, + ...handleDynamicValues }; const tx = await createTransaction(181, keyPair, txBody); @@ -1771,7 +1813,7 @@ export const deployAt = async (data, isFromExtension) => { } }; -export const getUserWallet = async (data, isFromExtension) => { +export const getUserWallet = async (data, isFromExtension, appInfo) => { const requiredFields = ["coin"]; const missingFields: string[] = []; requiredFields.forEach((field) => { @@ -1790,17 +1832,43 @@ export const getUserWallet = async (data, isFromExtension) => { throw new Error( "Cannot view ARRR wallet info through the gateway. Please use your local node." ); - const resPermission = await getUserPermission( + + const value = + (await getPermission( + `qAPPAutoGetUserWallet-${appInfo?.name}-${data.coin}` + )) || false; + let skip = false; + if (value) { + skip = true; + } + + let resPermission; + + if (!skip) { + resPermission = await getUserPermission( { text1: "Do you give this application permission to get your wallet information?", highlightedText: `coin: ${data.coin}`, + checkbox1: { + value: true, + label: "Always allow wallet to be retrieved automatically", + }, }, isFromExtension ); - const { accepted } = resPermission; - if (accepted) { +} +const { accepted = false, checkbox1 = false } = resPermission || {}; + +if (resPermission) { + setPermission( + `qAPPAutoGetUserWallet-${appInfo?.name}-${data.coin}`, + checkbox1 + ); +} + + if (accepted || skip) { let coin = data.coin; let userWallet = {}; let arrrAddress = ""; @@ -2086,7 +2154,7 @@ export const getUserWalletFunc = async (coin) => { return userWallet; }; -export const getUserWalletInfo = async (data, isFromExtension) => { +export const getUserWalletInfo = async (data, isFromExtension, appInfo) => { const requiredFields = ["coin"]; const missingFields: string[] = []; requiredFields.forEach((field) => { @@ -2105,17 +2173,41 @@ export const getUserWalletInfo = async (data, isFromExtension) => { "ARRR is not supported for this call." ); } - const resPermission = await getUserPermission( + const value = + (await getPermission( + `getUserWalletInfo-${appInfo?.name}-${data.coin}` + )) || false; +let skip = false; +if (value) { + skip = true; +} + let resPermission; + + if (!skip) { + + resPermission = await getUserPermission( { text1: "Do you give this application permission to retrieve your wallet information", highlightedText: `coin: ${data.coin}`, + checkbox1: { + value: true, + label: "Always allow wallet info to be retrieved automatically", + }, }, isFromExtension ); - const { accepted } = resPermission; +} +const { accepted = false, checkbox1 = false } = resPermission || {}; - if (accepted) { +if (resPermission) { + setPermission( + `getUserWalletInfo-${appInfo?.name}-${data.coin}`, + checkbox1 + ); +} + + if (accepted || skip) { let coin = data.coin; let walletKeys = await getUserWalletFunc(coin); @@ -2579,7 +2671,7 @@ export const getDaySummary = async () => { }; export const sendCoin = async (data, isFromExtension) => { - const requiredFields = ["coin", "destinationAddress", "amount"]; + const requiredFields = ["coin", "amount"]; const missingFields: string[] = []; requiredFields.forEach((field) => { if (!data[field]) { @@ -2591,6 +2683,9 @@ export const sendCoin = async (data, isFromExtension) => { const errorMsg = `Missing fields: ${missingFieldsString}`; throw new Error(errorMsg); } + if(!data?.destinationAddress && !data?.recipient){ + throw new Error('Missing fields: recipient') + } let checkCoin = data.coin; const wallet = await getSaveWallet(); const address = wallet.address0; @@ -2603,12 +2698,12 @@ export const sendCoin = async (data, isFromExtension) => { "Cannot send a non-QORT coin through the gateway. Please use your local node." ); if (checkCoin === "QORT") { - // Params: data.coin, data.destinationAddress, data.amount, data.fee + // Params: data.coin, data.recipient, data.amount, data.fee // TODO: prompt user to send. If they confirm, call `POST /crosschain/:coin/send`, or for QORT, broadcast a PAYMENT transaction // then set the response string from the core to the `response` variable (defined above) // If they decline, send back JSON that includes an `error` key, such as `{"error": "User declined request"}` const amount = Number(data.amount); - const recipient = data.destinationAddress; + const recipient = data?.recipient || data.destinationAddress; const url = await createEndpoint(`/addresses/balance/${address}`); const response = await fetch(url); @@ -2665,7 +2760,7 @@ export const sendCoin = async (data, isFromExtension) => { } } else if (checkCoin === "BTC") { const amount = Number(data.amount); - const recipient = data.destinationAddress; + const recipient = data?.recipient || data.destinationAddress; const xprv58 = parsedData.btcPrivateKey; const feePerByte = data.fee ? data.fee : btcFeePerByte; @@ -2722,7 +2817,7 @@ export const sendCoin = async (data, isFromExtension) => { } } else if (checkCoin === "LTC") { const amount = Number(data.amount); - const recipient = data.destinationAddress; + const recipient = data?.recipient || data.destinationAddress; const xprv58 = parsedData.ltcPrivateKey; const feePerByte = data.fee ? data.fee : ltcFeePerByte; const ltcWalletBalance = await getWalletBalance({ coin: checkCoin }, true); @@ -2777,7 +2872,7 @@ export const sendCoin = async (data, isFromExtension) => { } } else if (checkCoin === "DOGE") { const amount = Number(data.amount); - const recipient = data.destinationAddress; + const recipient = data?.recipient || data.destinationAddress; const xprv58 = parsedData.dogePrivateKey; const feePerByte = data.fee ? data.fee : dogeFeePerByte; const dogeWalletBalance = await getWalletBalance({ coin: checkCoin }, true); @@ -2834,7 +2929,7 @@ export const sendCoin = async (data, isFromExtension) => { } } else if (checkCoin === "DGB") { const amount = Number(data.amount); - const recipient = data.destinationAddress; + const recipient = data?.recipient || data.destinationAddress; const xprv58 = parsedData.dbgPrivateKey; const feePerByte = data.fee ? data.fee : dgbFeePerByte; const dgbWalletBalance = await getWalletBalance({ coin: checkCoin }, true); @@ -2891,7 +2986,7 @@ export const sendCoin = async (data, isFromExtension) => { } } else if (checkCoin === "RVN") { const amount = Number(data.amount); - const recipient = data.destinationAddress; + const recipient = data?.recipient || data.destinationAddress; const xprv58 = parsedData.rvnPrivateKey; const feePerByte = data.fee ? data.fee : rvnFeePerByte; const rvnWalletBalance = await getWalletBalance({ coin: checkCoin }, true); @@ -2948,7 +3043,7 @@ export const sendCoin = async (data, isFromExtension) => { } } else if (checkCoin === "ARRR") { const amount = Number(data.amount); - const recipient = data.destinationAddress; + const recipient = data?.recipient || data.destinationAddress; const memo = data?.memo; const arrrWalletBalance = await getWalletBalance({ coin: checkCoin }, true); From e3af586c8878f18442d007c66d163744a2540b7d Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 13 Jan 2025 19:11:02 +0200 Subject: [PATCH 075/119] update minting page --- src/components/Minting/Minting.tsx | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/components/Minting/Minting.tsx b/src/components/Minting/Minting.tsx index 070c085..a852965 100644 --- a/src/components/Minting/Minting.tsx +++ b/src/components/Minting/Minting.tsx @@ -593,7 +593,7 @@ export const Minting = ({ - {accountInfo?.level >= 1 && !accountIsMinting && ( + {isPartOfMintingGroup && !accountIsMinting && ( Minting account: {handleNames(acct?.mintingAccount)} - + {/* Recipient account: {handleNames(acct?.recipientAccount)} - - {acct?.mintingAccount !== accountInfo?.address && + */} + {/* {acct?.mintingAccount !== accountInfo?.address && acct?.recipientAccount === accountInfo?.address && (accountInfo?.level || 0) > 0 && ( You have reached level 1+. Remove this minting key and then click "Start Minting". - )} + )} */}
`, - highlightedText: `isEncrypted: ${!!data.encrypt}`, - fee: fee.fee * resources.length, + fee: +fee.fee * resources.length, + ...handleDynamicValues }, isFromExtension ); - const { accepted } = resPermission; + const { accepted, checkbox1 = false } = resPermission; if (!accepted) { throw new Error("User declined request"); } @@ -1224,7 +1297,7 @@ export const publishMultipleQDNResources = async ( }); continue; } - if (!resource.fileId && !resource.data64) { + if (!resource.fileId && !resource.data64 && !resource?.base64) { const errorMsg = "No data or file was submitted"; failedPublishesIdentifiers.push({ reason: errorMsg, @@ -1234,20 +1307,26 @@ export const publishMultipleQDNResources = async ( } const service = resource.service; let identifier = resource.identifier; - let data64 = resource.data64; + let data64 = resource?.data64 || resource?.base64; const filename = resource.filename; const title = resource.title; const description = resource.description; const category = resource.category; - const tag1 = resource.tag1; - const tag2 = resource.tag2; - const tag3 = resource.tag3; - const tag4 = resource.tag4; - const tag5 = resource.tag5; + const tags = resource?.tags || []; + const result = {}; + + // Fill tags dynamically while maintaining backward compatibility + for (let i = 0; i < 5; i++) { + result[`tag${i + 1}`] = tags[i] || resource[`tag${i + 1}`] || undefined; + } + + // Access tag1 to tag5 from result + const { tag1, tag2, tag3, tag4, tag5 } = result; + const resourceEncrypt = encrypt && resource?.disableEncrypt !== true if (resource.identifier == null) { identifier = "default"; } - if (!data.encrypt && service.endsWith("_PRIVATE")) { + if (!resourceEncrypt && service.endsWith("_PRIVATE")) { const errorMsg = "Only encrypted data can go into private services"; failedPublishesIdentifiers.push({ reason: errorMsg, @@ -1258,7 +1337,7 @@ export const publishMultipleQDNResources = async ( if (resource.fileId) { data64 = await getFileFromContentScript(resource.fileId); } - if (data.encrypt) { + if (resourceEncrypt) { try { const resKeyPair = await getKeyPair(); const parsedData = resKeyPair; @@ -1318,7 +1397,7 @@ export const publishMultipleQDNResources = async ( } } catch (error) { failedPublishesIdentifiers.push({ - reason: "Unknown error", + reason: error?.message || "Unknown error", identifier: resource.identifier, }); } @@ -1330,6 +1409,12 @@ export const publishMultipleQDNResources = async ( }; return obj; } + if(hasAppFee && checkbox1){ + sendCoinFunc({ + amount: appFee, + receiver: appFeeRecipient + }, true) + } return true; }; From 94c75bb23e4275770c1bec14037613b5519cba01 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 15 Jan 2025 17:36:10 +0200 Subject: [PATCH 077/119] enlarge app icons --- src/components/Apps/AppInfoSnippet.tsx | 4 ++-- src/components/Apps/Apps-styles.tsx | 14 +++++++++----- src/components/Apps/AppsHomeDesktop.tsx | 2 +- src/components/Apps/AppsLibraryDesktop.tsx | 13 ++++++++----- src/components/Apps/SortablePinnedApps.tsx | 7 +++---- 5 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/components/Apps/AppInfoSnippet.tsx b/src/components/Apps/AppInfoSnippet.tsx index f141222..4870474 100644 --- a/src/components/Apps/AppInfoSnippet.tsx +++ b/src/components/Apps/AppInfoSnippet.tsx @@ -59,8 +59,8 @@ export const AppInfoSnippet = ({ app, myName, isFromCategory, parentStyles = {} > ({ - fontSize: '12px', + fontSize: '14px', fontWeight: 500, lineHeight: 1.2, - whiteSpace: 'nowrap', + // whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', - width: '100%' + width: '120%', + '-webkit-line-clamp': '2', + '-webkit-box-orient': 'vertical', + 'display': '-webkit-box', + })); export const AppLibrarySubTitle = styled(Typography)(({ theme }) => ({ fontSize: '16px', @@ -109,9 +113,9 @@ import { })); export const AppCircle = styled(Box)(({ theme }) => ({ display: "flex", - width: "60px", + width: "75px", flexDirection: "column", - height: "60px", + height: "75px", alignItems: 'center', justifyContent: 'center', borderRadius: '50%', diff --git a/src/components/Apps/AppsHomeDesktop.tsx b/src/components/Apps/AppsHomeDesktop.tsx index 8856a34..7c548d1 100644 --- a/src/components/Apps/AppsHomeDesktop.tsx +++ b/src/components/Apps/AppsHomeDesktop.tsx @@ -115,7 +115,7 @@ export const AppsHomeDesktop = ({ diff --git a/src/components/Apps/AppsLibraryDesktop.tsx b/src/components/Apps/AppsLibraryDesktop.tsx index f64b666..8da2e28 100644 --- a/src/components/Apps/AppsLibraryDesktop.tsx +++ b/src/components/Apps/AppsLibraryDesktop.tsx @@ -298,13 +298,16 @@ export const AppsLibraryDesktop = ({ Official Apps - + {officialApps?.map((qapp) => { return ( { // executeEvent("addTab", { @@ -327,8 +330,8 @@ export const AppsLibraryDesktop = ({ > { { > Date: Thu, 16 Jan 2025 15:09:30 +0200 Subject: [PATCH 078/119] fixes: minting and publish --- .eslintrc.cjs | 2 +- .../Apps/useQortalMessageListener.tsx | 21 +- src/components/Chat/TipTap.tsx | 7 +- src/components/Minting/Minting.tsx | 491 +++--------------- src/qortalRequests/get.ts | 28 +- src/utils/fileReading/index.ts | 44 +- 6 files changed, 119 insertions(+), 474 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index d6c9537..92d403a 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -11,7 +11,7 @@ module.exports = { plugins: ['react-refresh'], rules: { 'react-refresh/only-export-components': [ - 'warn', + 'off', { allowConstantExport: true }, ], }, diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index e25c1bb..f8bd7a0 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -320,7 +320,7 @@ const UIQortalRequests = [ // Handle the obj.file if it exists and is a File instance if (obj.file) { - const fileId = "objFile_qortalfile"; + const fileId = Date.now() + "objFile_qortalfile"; // Store the file in IndexedDB const fileData = { @@ -334,7 +334,7 @@ const UIQortalRequests = [ delete obj.file; } if (obj.blob) { - const fileId = "objFile_qortalfile"; + const fileId = Date.now() + "objFile_qortalfile"; // Store the file in IndexedDB const fileData = { @@ -355,8 +355,8 @@ const UIQortalRequests = [ // Iterate through resources to find files and save them to IndexedDB for (let resource of (obj?.resources || [])) { if (resource.file) { - const fileId = resource.identifier + "_qortalfile"; - + const fileId = resource.identifier + Date.now() + "_qortalfile"; + // Store the file in IndexedDB const fileData = { id: fileId, @@ -484,17 +484,8 @@ isDOMContentLoaded: false event?.data?.action === 'ENCRYPT_DATA' || event?.data?.action === 'ENCRYPT_DATA_WITH_SHARING_KEY' || event?.data?.action === 'ENCRYPT_QORTAL_GROUP_DATA' ) { - let data; - try { - data = await storeFilesInIndexedDB(event.data); - } catch (error) { - console.error('Error storing files in IndexedDB:', error); - event.ports[0].postMessage({ - result: null, - error: 'Failed to store files in IndexedDB', - }); - return; - } + const data = event.data; + if (data) { sendMessageToRuntime( { action: event.data.action, type: 'qortalRequest', payload: data, isExtension: true }, diff --git a/src/components/Chat/TipTap.tsx b/src/components/Chat/TipTap.tsx index 4493482..929ab41 100644 --- a/src/components/Chat/TipTap.tsx +++ b/src/components/Chat/TipTap.tsx @@ -472,7 +472,12 @@ export default ({ return ( - - - +
+
{ if (groups?.length === 0) return false; return !!groups?.find((item) => item?.groupId?.toString() === "694"); @@ -199,6 +198,7 @@ export const Minting = ({ } const data = await response.json(); setRewardShares(data); + return data } catch (error) {} }, []); @@ -338,6 +338,31 @@ export const Minting = ({ }); }, []); + const waitUntilRewardShareIsConfirmed = async (timeoutMs = 600000) => { + const pollingInterval = 30000; + const startTime = Date.now(); + + const sleep = (ms) => new Promise((res) => setTimeout(res, ms)); + + while (Date.now() - startTime < timeoutMs) { + + const rewardShares = await getRewardShares(myAddress); + const findRewardShare = rewardShares?.find( + (item) => + item?.recipient === myAddress && item?.mintingAccount === myAddress + ); + + if (findRewardShare) { + return true; // Exit early if found + } + + + await sleep(pollingInterval); // Wait before the next poll + } + + throw new Error("Timeout waiting for reward share confirmation"); + }; + const startMinting = async () => { try { setIsLoading(true); @@ -352,12 +377,20 @@ export const Minting = ({ addMintingAccount(privateRewardShare); } else { await createRewardShare(accountInfo?.publicKey, myAddress); + setShowWaitDialog(true) + await waitUntilRewardShareIsConfirmed() + await showNext({ + message: '' + }) const privateRewardShare = await getRewardSharePrivateKey( accountInfo?.publicKey ); + setShowWaitDialog(false) addMintingAccount(privateRewardShare); + } } catch (error) { + setShowWaitDialog(false) setInfo({ type: "error", message: error?.message || "Unable to start minting", @@ -436,8 +469,8 @@ export const Minting = ({ const confirmReceiver = await getNameOrAddress(receiver); if (confirmReceiver.error) throw new Error("Invalid receiver address or name"); - const isInMinterGroup = await checkIfMinterGroup(confirmReceiver) - if(!isInMinterGroup) throw new Error('Account not in Minter Group') + const isInMinterGroup = await checkIfMinterGroup(confirmReceiver); + if (!isInMinterGroup) throw new Error("Account not in Minter Group"); const publicKey = await getPublicKeyFromAddress(confirmReceiver); const findRewardShare = rewardShares?.find( (item) => @@ -520,18 +553,8 @@ export const Minting = ({ return "" + countBlocksString; }; - const showAndCopySponsorshipKey = async (rs) => { - try { - const sponsorshipKey = await getRewardSharePrivateKey( - rs?.rewardSharePublicKey - ); - await showKey({ - message: sponsorshipKey, - }); - } catch (error) {} - }; - + return ( {"Manage your minting"} setIsOpenMinting(false)} - aria-label="close" - > - - + sx={{ + position: "absolute", + right: 8, + top: 8, + }} + color="inherit" + onClick={() => setIsOpenMinting(false)} + aria-label="close" + > + + Minting account: {handleNames(acct?.mintingAccount)} - {/* - Recipient account: {handleNames(acct?.recipientAccount)} - */} - {/* {acct?.mintingAccount !== accountInfo?.address && - acct?.recipientAccount === accountInfo?.address && - (accountInfo?.level || 0) > 0 && ( - - You have reached level 1+. Remove this minting key and then - click "Start Minting". - - )} */} - - - - - ))} - - - )} - - - Sponsor a new Minter - - {rewardShares?.filter((item) => item?.recipient !== myAddress) - ?.length > 0 ? ( - <> - - You are currently sponsoring one account. To sponsor - another account please remove the existing reward share. - - - ) : ( - <> - - Enter in the new Minter's address or name into the - input. Next, click on "Create reward share". If - successful, you will see a rewardshare key generated. - Copy the key and send it to your new Minter. - - - - setRewardSharePublicKey(e.target.value) - } - sx={{ - border: "0.5px solid var(--50-white, #FFFFFF80)", - padding: "0px 15px", - borderRadius: "5px", - height: "36px", - width: "350px", - maxWidth: "95%", - }} - placeholder="New minter's address or name" - inputProps={{ - "aria-label": "New minter's address or name", - fontSize: "14px", - fontWeight: 400, - }} - /> - - {rewardsharekey && ( - <> - - - - Click to copy the reward share key and share it with - your new minter - - - - - {rewardsharekey} - - - - )} - - )} - - - )} - {accountInfo?.level === 0 && !accountIsMinting && ( - <> - Become a minter! - - - - Ask a level 5+ minter to send you a minting key - - - Add the minting key in the input below and click "Add - minting key" - - - setMintingKey(e.target.value)} - sx={{ - border: "0.5px solid var(--50-white, #FFFFFF80)", - padding: "0px 15px", - borderRadius: "5px", - height: "36px", - width: "250px", - }} - placeholder="Add minting key" - inputProps={{ - "aria-label": "Add minting key", - fontSize: "14px", - fontWeight: 400, - }} - /> - - - - - )} - {accountInfo?.level === 0 && accountIsMinting && ( - - - You are currently on your way to level 1 - - - )} - - )} */} - {/* {isShow && ( + {showWaitDialog && ( - {"Copy sponsorship key"} + {isShowNext ? "Confirmed" : "Please Wait"} - - Click to copy the reward share key and share it with your new - minter + {!isShowNext && ( + + Confirming creation of rewardshare on chain. Please be patient, this could take up to 90 seconds. - - - - {message?.message} - - + )} + {isShowNext && ( + + Rewardshare confirmed. Please click Next. + + )} + - - + + - )} */} + )} + + + + + + {loading && promotions.length === 0 && ( + + + + )} + {!loading && promotions.length === 0 && ( + + + Nothing to display + + + )} +
+
+
+
+ {rowVirtualizer.getVirtualItems().map((virtualRow) => { + const index = virtualRow.index; + const promotion = promotions[index]; + return ( + +
+ + Error loading content: Invalid Data + + } + > + { -
- )} - - ); - }; + +
+ + ); + })} +
+
+
+
- - return ( - - - - - Group Promotions - - - - - - - - {loading && promotions.length === 0 && ( - - - - )} - {!loading && promotions.length === 0 && ( - - - Nothing to display - - - )} -
- - {({ height, width }) => ( - - )} - -
diff --git a/src/components/Group/ManageMembers.tsx b/src/components/Group/ManageMembers.tsx index dedc5be..8dab53f 100644 --- a/src/components/Group/ManageMembers.tsx +++ b/src/components/Group/ManageMembers.tsx @@ -17,9 +17,9 @@ import { InviteMember } from "./InviteMember"; import { ListOfInvites } from "./ListOfInvites"; import { ListOfBans } from "./ListOfBans"; import { ListOfJoinRequests } from "./ListOfJoinRequests"; -import { Box, Tab, Tabs } from "@mui/material"; +import { Box, Card, Tab, Tabs } from "@mui/material"; import { CustomizedSnackbars } from "../Snackbar/Snackbar"; -import { MyContext, isMobile } from "../../App"; +import { MyContext, getBaseApiReact, isMobile } from "../../App"; import { getGroupMembers, getNames } from "./Group"; import { LoadingSnackbar } from "../Snackbar/LoadingSnackbar"; import { getFee } from "../../background"; @@ -59,6 +59,7 @@ export const ManageMembers = ({ const [infoSnack, setInfoSnack] = React.useState(null); const [isLoadingMembers, setIsLoadingMembers] = React.useState(false) const [isLoadingLeave, setIsLoadingLeave] = React.useState(false) + const [groupInfo, setGroupInfo] = React.useState(null) const handleChange = (event: React.SyntheticEvent, newValue: number) => { setValue(newValue); }; @@ -68,6 +69,7 @@ export const ManageMembers = ({ setOpen(false); }; + const handleLeaveGroup = async () => { try { setIsLoadingLeave(true) @@ -130,10 +132,20 @@ export const ManageMembers = ({ setMembersWithNames(res?.members || []); } catch (error) {} }; + const getGroupInfo = async (groupId) => { + try { + const response = await fetch( + `${getBaseApiReact()}/groups/${groupId}` + ); + const groupData = await response.json(); + setGroupInfo(groupData) + } catch (error) {} + }; React.useEffect(()=> { if(selectedGroup?.groupId){ getMembers(selectedGroup?.groupId) + getGroupInfo(selectedGroup?.groupId) } }, [selectedGroup?.groupId]) @@ -248,14 +260,23 @@ export const ManageMembers = ({ />
- + + + GroupId: {groupInfo?.groupId} + GroupName: {groupInfo?.groupName} + Number of members: {groupInfo?.memberCount} + + {selectedGroup?.groupId && !isOwner && ( - Leave Group )} - + {value === 0 && ( { } break; } - + case "SHOW_ACTIONS" : { + try { + + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: listOfAllQortalRequests, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index bf4eee5..b569acd 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -427,7 +427,7 @@ export const encryptData = async (data, sender) => { }; export const encryptQortalGroupData = async (data, sender) => { - let data64 = data.data64; + let data64 = data?.data64 || data?.base64; let groupId = data?.groupId let isAdmins = data?.isAdmins if(!groupId){ @@ -462,7 +462,8 @@ export const encryptQortalGroupData = async (data, sender) => { url ); const resData = await res.text(); - const decryptedKey: any = await decryptResource(resData); + + const decryptedKey: any = await decryptResource(resData, true); const dataint8Array = base64ToUint8Array(decryptedKey.data); const decryptedKeyToObject = uint8ArrayToObject(dataint8Array); @@ -496,8 +497,7 @@ url url ); const resData = await res.text(); - const decryptedKey: any = await decryptResource(resData); - + const decryptedKey: any = await decryptResource(resData, true); const dataint8Array = base64ToUint8Array(decryptedKey.data); const decryptedKeyToObject = uint8ArrayToObject(dataint8Array); @@ -526,7 +526,7 @@ url }; export const decryptQortalGroupData = async (data, sender) => { - let data64 = data.data64; + let data64 = data?.data64 || data?.base64; let groupId = data?.groupId let isAdmins = data?.isAdmins if(!groupId){ @@ -557,7 +557,7 @@ export const decryptQortalGroupData = async (data, sender) => { url ); const resData = await res.text(); - const decryptedKey: any = await decryptResource(resData); + const decryptedKey: any = await decryptResource(resData, true); const dataint8Array = base64ToUint8Array(decryptedKey.data); const decryptedKeyToObject = uint8ArrayToObject(dataint8Array); @@ -588,7 +588,7 @@ url url ); const resData = await res.text(); - const decryptedKey: any = await decryptResource(resData); + const decryptedKey: any = await decryptResource(resData, true); const dataint8Array = base64ToUint8Array(decryptedKey.data); const decryptedKeyToObject = uint8ArrayToObject(dataint8Array); @@ -615,7 +615,7 @@ url }; export const encryptDataWithSharingKey = async (data, sender) => { - let data64 = data.data64; + let data64 = data?.data64 || data?.base64; let publicKeys = data.publicKeys || []; if (data?.file || data?.blob) { data64 = await fileToBase64(data?.file || data?.blob); @@ -663,7 +663,10 @@ export const decryptDataWithSharingKey = async (data, sender) => { }; export const getHostedData = async (data, isFromExtension) => { - + const isGateway = await isRunningGateway(); + if (isGateway) { + throw new Error("This action cannot be done through a gateway"); + } const resPermission = await getUserPermission( { text1: "Do you give this application permission to", @@ -675,18 +678,19 @@ export const getHostedData = async (data, isFromExtension) => { if(accepted){ const limit = data?.limit ? data?.limit : 20; - const query = data?.query ? data?.query : undefined + const query = data?.query ? data?.query : "" const offset = data?.offset ? data?.offset : 0 - try { - - const url = await createEndpoint(`/arbitrary/hosted/resources/?limit=${limit}&query=${query}&offset=${offset}`); - const response = await fetch(url); - const data = await response.json(); - return data - } catch (error) { - throw error + let urlPath = `/arbitrary/hosted/resources/?limit=${limit}&offset=${offset}` + if(query){ + urlPath = urlPath + `&query=${query}` } + + const url = await createEndpoint(urlPath); + const response = await fetch(url); + const dataResponse = await response.json(); + return dataResponse + } else { throw new Error("User declined to get list of hosted resources"); @@ -695,6 +699,10 @@ export const getHostedData = async (data, isFromExtension) => { }; export const deleteHostedData = async (data, isFromExtension) => { + const isGateway = await isRunningGateway(); + if (isGateway) { + throw new Error("This action cannot be done through a gateway"); + } const requiredFields = ["hostedData"]; const missingFields: string[] = []; requiredFields.forEach((field) => { @@ -716,7 +724,7 @@ export const deleteHostedData = async (data, isFromExtension) => { for (const hostedDataItem of hostedData){ try { - const url = await createEndpoint(`/arbitrary/resource/${hostedDataItem.service}/${hostedDataItem.name}/${hostedDataItem.identifer}`); + const url = await createEndpoint(`/arbitrary/resource/${hostedDataItem.service}/${hostedDataItem.name}/${hostedDataItem.identifier}`); await fetch(url, { method: "DELETE", headers: { @@ -971,7 +979,7 @@ export const publishQDNResource = async ( if (!data.file && !data.data64 && !data.base64) { throw new Error("No data or file was submitted"); } - // Use "default" if user hasn't specified an identifer + // Use "default" if user hasn't specified an identifier const service = data.service; const appFee = data?.appFee ? +data.appFee : undefined const appFeeRecipient = data?.appFeeRecipient From e8e8911972b8569fb6fd5a71660163fb7d42fa08 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 20 Jan 2025 21:52:45 +0200 Subject: [PATCH 082/119] added apps to dev mode --- src/assets/svgs/swagger.svg | 1 + src/components/Apps/AppsDevMode.tsx | 2 +- src/components/Apps/AppsDevModeHome.tsx | 587 ++++++++++-------- .../Apps/AppsDevModeTabComponent.tsx | 112 ++-- 4 files changed, 390 insertions(+), 312 deletions(-) create mode 100644 src/assets/svgs/swagger.svg diff --git a/src/assets/svgs/swagger.svg b/src/assets/svgs/swagger.svg new file mode 100644 index 0000000..b82236f --- /dev/null +++ b/src/assets/svgs/swagger.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/components/Apps/AppsDevMode.tsx b/src/components/Apps/AppsDevMode.tsx index 0514ce3..f3079f7 100644 --- a/src/components/Apps/AppsDevMode.tsx +++ b/src/components/Apps/AppsDevMode.tsx @@ -332,7 +332,7 @@ export const AppsDevMode = ({ mode, setMode, show , myName, goToHome, setDesktop isSelected={tab?.tabId === selectedTab?.tabId} app={tab} ref={iframeRefs.current[tab.tabId]} - isDevMode={true} + isDevMode={tab?.service ? false : true} /> ); })} diff --git a/src/components/Apps/AppsDevModeHome.tsx b/src/components/Apps/AppsDevModeHome.tsx index db1bab2..d9def9b 100644 --- a/src/components/Apps/AppsDevModeHome.tsx +++ b/src/components/Apps/AppsDevModeHome.tsx @@ -7,7 +7,7 @@ import { AppsContainer, AppsParent, } from "./Apps-styles"; -import {Buffer} from 'buffer' +import { Buffer } from "buffer"; import { Avatar, @@ -29,249 +29,239 @@ import { Spacer } from "../../common/Spacer"; import { useModal } from "../../common/useModal"; import { createEndpoint, isUsingLocal } from "../../background"; import { Label } from "../Group/AddGroup"; +import ShortUniqueId from "short-unique-id"; +import swaggerSVG from '../../assets/svgs/swagger.svg' +const uid = new ShortUniqueId({ length: 8 }); export const AppsDevModeHome = ({ setMode, myApp, myWebsite, availableQapps, - myName + myName, }) => { + const [domain, setDomain] = useState("127.0.0.1"); + const [port, setPort] = useState(""); + const [selectedPreviewFile, setSelectedPreviewFile] = useState(null); - const [domain, setDomain] = useState("127.0.0.1"); - const [port, setPort] = useState(""); - const [selectedPreviewFile, setSelectedPreviewFile] = useState(null); + const { isShow, onCancel, onOk, show, message } = useModal(); + const { + openSnackGlobal, + setOpenSnackGlobal, + infoSnackCustom, + setInfoSnackCustom, + } = useContext(MyContext); - const { isShow, onCancel, onOk, show, message } = useModal(); - const { - openSnackGlobal, - setOpenSnackGlobal, - infoSnackCustom, - setInfoSnackCustom, - } = useContext(MyContext); + const handleSelectFile = async (existingFilePath) => { + const filePath = existingFilePath || (await window.electron.selectFile()); + if (filePath) { + const content = await window.electron.readFile(filePath); + return { buffer: content, filePath }; + } else { + console.log("No file selected."); + } + }; + const handleSelectDirectry = async (existingDirectoryPath) => { + const { buffer, directoryPath } = + await window.electron.selectAndZipDirectory(existingDirectoryPath); + if (buffer) { + return { buffer, directoryPath }; + } else { + console.log("No file selected."); + } + }; - const handleSelectFile = async (existingFilePath) => { - const filePath = existingFilePath || await window.electron.selectFile(); - if (filePath) { - - const content = await window.electron.readFile(filePath); - return {buffer: content, filePath} - } else { - console.log('No file selected.'); - } - }; - const handleSelectDirectry = async (existingDirectoryPath) => { - const {buffer, directoryPath} = await window.electron.selectAndZipDirectory(existingDirectoryPath); - if (buffer) { - - - return {buffer, directoryPath} - } else { - console.log('No file selected.'); - } - }; + const addDevModeApp = async () => { + try { + const usingLocal = await isUsingLocal(); + if (!usingLocal) { + setOpenSnackGlobal(true); - const addDevModeApp = async () => { - try { - const usingLocal = await isUsingLocal(); - if (!usingLocal) { - setOpenSnackGlobal(true); - - setInfoSnackCustom({ - type: "error", - message: - "Please use your local node for dev mode! Logout and use Local node.", - }); - return; - } - const {portVal, domainVal} = await show({ - message: "", - publishFee: "", + setInfoSnackCustom({ + type: "error", + message: + "Please use your local node for dev mode! Logout and use Local node.", }); - const framework = domainVal + ":" + portVal; - const response = await fetch( - `${getBaseApiReact()}/developer/proxy/start`, - { - method: "POST", - headers: { - "Content-Type": "text/plain", - }, - body: framework, - } - ); - const responseData = await response.text(); - executeEvent("appsDevModeAddTab", { - data: { - url: "http://127.0.0.1:" + responseData, + return; + } + const { portVal, domainVal } = await show({ + message: "", + publishFee: "", + }); + const framework = domainVal + ":" + portVal; + const response = await fetch( + `${getBaseApiReact()}/developer/proxy/start`, + { + method: "POST", + headers: { + "Content-Type": "text/plain", }, + body: framework, + } + ); + const responseData = await response.text(); + executeEvent("appsDevModeAddTab", { + data: { + url: "http://127.0.0.1:" + responseData, + }, + }); + } catch (error) {} + }; + + const addPreviewApp = async (isRefresh, existingFilePath, tabId) => { + try { + const usingLocal = await isUsingLocal(); + if (!usingLocal) { + setOpenSnackGlobal(true); + + setInfoSnackCustom({ + type: "error", + message: + "Please use your local node for dev mode! Logout and use Local node.", }); - } catch (error) {} - }; + return; + } + if (!myName) { + setOpenSnackGlobal(true); - const addPreviewApp = async (isRefresh, existingFilePath, tabId) => { - try { - const usingLocal = await isUsingLocal(); - if (!usingLocal) { - setOpenSnackGlobal(true); + setInfoSnackCustom({ + type: "error", + message: "You need a name to use preview", + }); + return; + } - setInfoSnackCustom({ - type: "error", - message: - "Please use your local node for dev mode! Logout and use Local node.", - }); - return; - } - if (!myName) { - setOpenSnackGlobal(true); + const { buffer, filePath } = await handleSelectFile(existingFilePath); - setInfoSnackCustom({ - type: "error", - message: - "You need a name to use preview", - }); - return; - } + if (!buffer) { + setOpenSnackGlobal(true); - - const {buffer, filePath} = await handleSelectFile(existingFilePath) - - if (!buffer) { - setOpenSnackGlobal(true); + setInfoSnackCustom({ + type: "error", + message: "Please select a file", + }); + return; + } + const postBody = Buffer.from(buffer).toString("base64"); - setInfoSnackCustom({ - type: "error", - message: - "Please select a file", - }); - return; - } - const postBody = Buffer.from(buffer).toString('base64') - - const endpoint = await createEndpoint(`/arbitrary/APP/${myName}/zip?preview=true`) - const response = await fetch( - endpoint - , - { - method: "POST", - headers: { - "Content-Type": "text/plain", - }, - body: postBody, - } - ); - if(!response?.ok) throw new Error('Invalid zip') - const previewPath = await response.text(); - if(tabId){ + const endpoint = await createEndpoint( + `/arbitrary/APP/${myName}/zip?preview=true` + ); + const response = await fetch(endpoint, { + method: "POST", + headers: { + "Content-Type": "text/plain", + }, + body: postBody, + }); + if (!response?.ok) throw new Error("Invalid zip"); + const previewPath = await response.text(); + if (tabId) { executeEvent("appsDevModeUpdateTab", { data: { - url: "http://127.0.0.1:12391" + previewPath, + url: "http://127.0.0.1:12391" + previewPath, isPreview: true, filePath, - refreshFunc: (tabId)=> { - addPreviewApp(true, filePath, tabId) + refreshFunc: (tabId) => { + addPreviewApp(true, filePath, tabId); }, - tabId + tabId, }, }); - return + return; } - executeEvent("appsDevModeAddTab", { - data: { - url: "http://127.0.0.1:12391" + previewPath, - isPreview: true, - filePath, - refreshFunc: (tabId)=> { - addPreviewApp(true, filePath, tabId) - } + executeEvent("appsDevModeAddTab", { + data: { + url: "http://127.0.0.1:12391" + previewPath, + isPreview: true, + filePath, + refreshFunc: (tabId) => { + addPreviewApp(true, filePath, tabId); }, + }, + }); + } catch (error) { + console.error(error); + } + }; + + const addPreviewAppWithDirectory = async (isRefresh, existingDir, tabId) => { + try { + const usingLocal = await isUsingLocal(); + if (!usingLocal) { + setOpenSnackGlobal(true); + + setInfoSnackCustom({ + type: "error", + message: + "Please use your local node for dev mode! Logout and use Local node.", }); - } catch (error) { - console.error(error) + return; } - }; + if (!myName) { + setOpenSnackGlobal(true); - const addPreviewAppWithDirectory = async (isRefresh, existingDir, tabId) => { - try { - const usingLocal = await isUsingLocal(); - if (!usingLocal) { - setOpenSnackGlobal(true); + setInfoSnackCustom({ + type: "error", + message: "You need a name to use preview", + }); + return; + } - setInfoSnackCustom({ - type: "error", - message: - "Please use your local node for dev mode! Logout and use Local node.", - }); - return; - } - if (!myName) { - setOpenSnackGlobal(true); + const { buffer, directoryPath } = await handleSelectDirectry(existingDir); - setInfoSnackCustom({ - type: "error", - message: - "You need a name to use preview", - }); - return; - } + if (!buffer) { + setOpenSnackGlobal(true); - - const {buffer, directoryPath} = await handleSelectDirectry(existingDir) - - if (!buffer) { - setOpenSnackGlobal(true); + setInfoSnackCustom({ + type: "error", + message: "Please select a file", + }); + return; + } + const postBody = Buffer.from(buffer).toString("base64"); - setInfoSnackCustom({ - type: "error", - message: - "Please select a file", - }); - return; - } - const postBody = Buffer.from(buffer).toString('base64') - - const endpoint = await createEndpoint(`/arbitrary/APP/${myName}/zip?preview=true`) - const response = await fetch( - endpoint - , - { - method: "POST", - headers: { - "Content-Type": "text/plain", - }, - body: postBody, - } - ); - if(!response?.ok) throw new Error('Invalid zip') - const previewPath = await response.text(); - if(tabId){ + const endpoint = await createEndpoint( + `/arbitrary/APP/${myName}/zip?preview=true` + ); + const response = await fetch(endpoint, { + method: "POST", + headers: { + "Content-Type": "text/plain", + }, + body: postBody, + }); + if (!response?.ok) throw new Error("Invalid zip"); + const previewPath = await response.text(); + if (tabId) { executeEvent("appsDevModeUpdateTab", { data: { - url: "http://127.0.0.1:12391" + previewPath, + url: "http://127.0.0.1:12391" + previewPath, isPreview: true, directoryPath, - refreshFunc: (tabId)=> { - addPreviewAppWithDirectory(true, directoryPath, tabId) + refreshFunc: (tabId) => { + addPreviewAppWithDirectory(true, directoryPath, tabId); }, - tabId + tabId, }, }); - return + return; } - executeEvent("appsDevModeAddTab", { - data: { - url: "http://127.0.0.1:12391" + previewPath, - isPreview: true, - directoryPath, - refreshFunc: (tabId)=> { - addPreviewAppWithDirectory(true, directoryPath, tabId) - } + executeEvent("appsDevModeAddTab", { + data: { + url: "http://127.0.0.1:12391" + previewPath, + isPreview: true, + directoryPath, + refreshFunc: (tabId) => { + addPreviewAppWithDirectory(true, directoryPath, tabId); }, - }); - } catch (error) { - console.error(error) - } - }; - + }, + }); + } catch (error) { + console.error(error); + } + }; + return ( <> Directory + { + executeEvent("appsDevModeAddTab", { + data: { + service: "APP", + name: "Q-Sandbox", + tabId: uid.rnd(), + }, + }); + }} + > + + + + center-icon + + + Q-Sandbox + + + { + executeEvent("appsDevModeAddTab", { + data: { + url: "http://127.0.0.1:12391", + isPreview: false, + customIcon: swaggerSVG + }, + }); + }} + > + + + + center-icon + + + API + + {isShow && ( - { - if (e.key === 'Enter' && domain && port) { - onOk({ portVal: port, domainVal: domain }); - } - }} - > - - {"Add custom framework"} - - - - - setDomain(e.target.value)} - /> - - - - setPort(e.target.value)} - /> - - - - - - - - + { + if (e.key === "Enter" && domain && port) { + onOk({ portVal: port, domainVal: domain }); + } + }} + > + + {"Add custom framework"} + + + + + setDomain(e.target.value)} + /> + + + + setPort(e.target.value)} + /> + + + + + + + )} ); diff --git a/src/components/Apps/AppsDevModeTabComponent.tsx b/src/components/Apps/AppsDevModeTabComponent.tsx index eee87e2..46372a5 100644 --- a/src/components/Apps/AppsDevModeTabComponent.tsx +++ b/src/components/Apps/AppsDevModeTabComponent.tsx @@ -1,59 +1,67 @@ -import React from 'react' -import { TabParent } from './Apps-styles' +import React from "react"; +import { TabParent } from "./Apps-styles"; import NavCloseTab from "../../assets/svgs/NavCloseTab.svg"; -import { getBaseApiReact } from '../../App'; -import { Avatar, ButtonBase } from '@mui/material'; +import { getBaseApiReact } from "../../App"; +import { Avatar, ButtonBase } from "@mui/material"; import LogoSelected from "../../assets/svgs/LogoSelected.svg"; -import { executeEvent } from '../../utils/events'; +import { executeEvent } from "../../utils/events"; -export const AppsDevModeTabComponent = ({isSelected, app}) => { +export const AppsDevModeTabComponent = ({ isSelected, app }) => { return ( - { - if(isSelected){ - executeEvent('removeTabDevMode', { - data: app - }) - return - } - executeEvent('setSelectedTabDevMode', { + { + if (isSelected) { + executeEvent("removeTabDevMode", { data: app, - isDevMode: true - }) - }}> - + }); + return; + } + executeEvent("setSelectedTabDevMode", { + data: app, + isDevMode: true, + }); + }} + > + {isSelected && ( - - - - ) } - - center-icon - - + + )} + + center-icon + + - ) -} - + ); +}; From f90bec1c6780e2c835d8e680b3181f1e3ce9a610 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Tue, 21 Jan 2025 09:08:28 +0200 Subject: [PATCH 083/119] added group link, poster, and copy address --- src/App.tsx | 4 + src/components/Chat/MessageDisplay.tsx | 22 ++ .../GlobalActions/GlobalActions.tsx | 10 + src/components/GlobalActions/JoinGroup.tsx | 284 ++++++++++++++++++ src/components/Tutorials/img/creation.webp | Bin 0 -> 22394 bytes src/components/Tutorials/img/dashboard.webp | Bin 0 -> 22400 bytes src/components/Tutorials/img/groups.webp | Bin 0 -> 21596 bytes src/components/Tutorials/img/important.webp | Bin 0 -> 19076 bytes src/components/Tutorials/img/navigation.webp | Bin 0 -> 20976 bytes src/components/Tutorials/img/overview.webp | Bin 0 -> 17842 bytes src/components/Tutorials/img/started.webp | Bin 0 -> 19312 bytes .../Tutorials/useHandleTutorials.tsx | 15 +- src/components/WrapperUserAction.tsx | 20 +- 13 files changed, 352 insertions(+), 3 deletions(-) create mode 100644 src/components/GlobalActions/GlobalActions.tsx create mode 100644 src/components/GlobalActions/JoinGroup.tsx create mode 100644 src/components/Tutorials/img/creation.webp create mode 100644 src/components/Tutorials/img/dashboard.webp create mode 100644 src/components/Tutorials/img/groups.webp create mode 100644 src/components/Tutorials/img/important.webp create mode 100644 src/components/Tutorials/img/navigation.webp create mode 100644 src/components/Tutorials/img/overview.webp create mode 100644 src/components/Tutorials/img/started.webp diff --git a/src/App.tsx b/src/App.tsx index 118143c..03e3e03 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -141,6 +141,7 @@ import { useHandleUserInfo } from "./components/Group/useHandleUserInfo"; import { Minting } from "./components/Minting/Minting"; import { isRunningGateway } from "./qortalRequests"; import { QMailStatus } from "./components/QMailStatus"; +import { GlobalActions } from "./components/GlobalActions/GlobalActions"; type extStates = | "not-authenticated" @@ -1631,6 +1632,8 @@ function App() { }} > + + )} @@ -3357,6 +3360,7 @@ function App() { > {renderProfile()} + {extState === "create-wallet" && walletToBeDownloaded && ( { diff --git a/src/components/Chat/MessageDisplay.tsx b/src/components/Chat/MessageDisplay.tsx index 67b8538..ce55803 100644 --- a/src/components/Chat/MessageDisplay.tsx +++ b/src/components/Chat/MessageDisplay.tsx @@ -97,6 +97,28 @@ export const MessageDisplay = ({ htmlContent, isReply }) => { window.electronAPI.openExternal(href); } else if (target.getAttribute('data-url')) { const url = target.getAttribute('data-url'); + + let copyUrl = url + + try { + copyUrl = copyUrl.replace(/^(qortal:\/\/)/, '') + if (copyUrl.startsWith('use-')) { + // Handle the new 'use' format + const parts = copyUrl.split('/') + const type = parts[0].split('-')[1] // e.g., 'group' from 'use-group' + parts.shift() + const action = parts.length > 0 ? parts[0].split('-')[1] : null // e.g., 'invite' from 'action-invite' + parts.shift() + const idPrefix = parts.length > 0 ? parts[0].split('-')[0] : null // e.g., 'groupid' from 'groupid-321' + const id = parts.length > 0 ? parts[0].split('-')[1] : null // e.g., '321' from 'groupid-321' + if(action === 'join'){ + executeEvent("globalActionJoinGroup", { groupId: id}); + return + } + } + } catch (error) { + //error + } const res = extractComponents(url); if (res) { const { service, name, identifier, path } = res; diff --git a/src/components/GlobalActions/GlobalActions.tsx b/src/components/GlobalActions/GlobalActions.tsx new file mode 100644 index 0000000..6dd845c --- /dev/null +++ b/src/components/GlobalActions/GlobalActions.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import { JoinGroup } from './JoinGroup' + +export const GlobalActions = ({memberGroups}) => { + return ( + <> + + + ) +} diff --git a/src/components/GlobalActions/JoinGroup.tsx b/src/components/GlobalActions/JoinGroup.tsx new file mode 100644 index 0000000..f03430b --- /dev/null +++ b/src/components/GlobalActions/JoinGroup.tsx @@ -0,0 +1,284 @@ +import React, { useContext, useEffect, useMemo, useState } from "react"; +import { subscribeToEvent, unsubscribeFromEvent } from "../../utils/events"; +import { + Box, + Button, + ButtonBase, + CircularProgress, + Dialog, + DialogActions, + DialogContent, + Typography, +} from "@mui/material"; +import { CustomButton, CustomButtonAccept } from "../../App-styles"; +import { getBaseApiReact, MyContext } from "../../App"; +import { getFee } from "../../background"; +import { CustomizedSnackbars } from "../Snackbar/Snackbar"; +import { FidgetSpinner } from "react-loader-spinner"; + +export const JoinGroup = ({ memberGroups }) => { + const { show, setTxList } = useContext(MyContext); + const [openSnack, setOpenSnack] = useState(false); + const [infoSnack, setInfoSnack] = useState(null); + const [groupInfo, setGroupInfo] = useState(null); + const [isLoadingInfo, setIsLoadingInfo] = useState(false); + const [isOpen, setIsOpen] = useState(false); + const [isLoadingJoinGroup, setIsLoadingJoinGroup] = useState(false); + const handleJoinGroup = async (e) => { + setGroupInfo(null); + const groupId = e?.detail?.groupId; + if (groupId) { + try { + setIsOpen(true); + setIsLoadingInfo(true); + const response = await fetch(`${getBaseApiReact()}/groups/${groupId}`); + const groupData = await response.json(); + setGroupInfo(groupData); + } catch (error) { + } finally { + setIsLoadingInfo(false); + } + } + }; + + useEffect(() => { + subscribeToEvent("globalActionJoinGroup", handleJoinGroup); + + return () => { + unsubscribeFromEvent("globalActionJoinGroup", handleJoinGroup); + }; + }, []); + + const isInGroup = useMemo(()=> { + return !!memberGroups.find((item)=> +item?.groupId === +groupInfo?.groupId) + }, [memberGroups, groupInfo]) + const joinGroup = async (group, isOpen) => { + try { + const groupId = group.groupId; + const fee = await getFee("JOIN_GROUP"); + await show({ + message: "Would you like to perform an JOIN_GROUP transaction?", + publishFee: fee.fee + " QORT", + }); + setIsLoadingJoinGroup(true); + await new Promise((res, rej) => { + window + .sendMessage("joinGroup", { + groupId, + }) + .then((response) => { + if (!response?.error) { + setInfoSnack({ + type: "success", + message: + "Successfully requested to join group. It may take a couple of minutes for the changes to propagate", + }); + + if (isOpen) { + setTxList((prev) => [ + { + ...response, + type: "joined-group", + label: `Joined Group ${group?.groupName}: awaiting confirmation`, + labelDone: `Joined Group ${group?.groupName}: success!`, + done: false, + groupId, + }, + ...prev, + ]); + } else { + setTxList((prev) => [ + { + ...response, + type: "joined-group-request", + label: `Requested to join Group ${group?.groupName}: awaiting confirmation`, + labelDone: `Requested to join Group ${group?.groupName}: success!`, + done: false, + groupId, + }, + ...prev, + ]); + } + + setOpenSnack(true); + res(response); + return; + } else { + setInfoSnack({ + type: "error", + message: response?.error, + }); + setOpenSnack(true); + rej(response.error); + } + }) + .catch((error) => { + setInfoSnack({ + type: "error", + message: error.message || "An error occurred", + }); + setOpenSnack(true); + rej(error); + }); + }); + setIsLoadingJoinGroup(false); + } catch (error) { + } finally { + setIsLoadingJoinGroup(false); + } + }; + return ( + <> + + + {!groupInfo && ( + + {" "} + {" "} + + )} + + + Group name: {` ${groupInfo?.groupName}`} + + + Number of members: {` ${groupInfo?.memberCount}`} + + {groupInfo?.description && ( + + {groupInfo?.description} + + )} + {isInGroup && ( + + *You are already in this group! + + )} + {!isInGroup && groupInfo?.isOpen === false && ( + + *This is a closed/private group, so you will need to wait until + an admin accepts your request + + )} + + + + { + joinGroup(groupInfo, groupInfo?.isOpen); + + setIsOpen(false); + }} disabled={isInGroup}> + + Join + + + + setIsOpen(false)} + > + Close + + + + + + {isLoadingJoinGroup && ( + + + + )} + + ); +}; diff --git a/src/components/Tutorials/img/creation.webp b/src/components/Tutorials/img/creation.webp new file mode 100644 index 0000000000000000000000000000000000000000..46310e07345cf5e94b7a6686fde176330679ffd0 GIT binary patch literal 22394 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

K6;38S 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 literal 0 HcmV?d00001 diff --git a/src/components/Tutorials/img/navigation.webp b/src/components/Tutorials/img/navigation.webp new file mode 100644 index 0000000000000000000000000000000000000000..a56896014a46da8879e8956fb48f4e44bf468a1b GIT binary patch literal 20976 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 literal 0 HcmV?d00001 diff --git a/src/components/Tutorials/img/overview.webp b/src/components/Tutorials/img/overview.webp new file mode 100644 index 0000000000000000000000000000000000000000..bc413b4ebc2aa938b5b69de22f5322a34d58c93b GIT binary patch literal 17842 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 Fe*h)0IU@i7 literal 0 HcmV?d00001 diff --git a/src/components/Tutorials/img/started.webp b/src/components/Tutorials/img/started.webp new file mode 100644 index 0000000000000000000000000000000000000000..76099a5cbf714ebe7afd86f04c552c82d44780ca GIT binary patch literal 19312 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 literal 0 HcmV?d00001 diff --git a/src/components/Tutorials/useHandleTutorials.tsx b/src/components/Tutorials/useHandleTutorials.tsx index 9d9445e..2ff1793 100644 --- a/src/components/Tutorials/useHandleTutorials.tsx +++ b/src/components/Tutorials/useHandleTutorials.tsx @@ -1,5 +1,12 @@ import React, { useCallback, useEffect, useState } from "react"; import { saveToLocalStorage } from "../Apps/AppsNavBar"; +import creationImg from './img/creation.webp' +import dashboardImg from './img/dashboard.webp' +import groupsImg from './img/groups.webp' +import importantImg from './img/important.webp' +import navigationImg from './img/navigation.webp' +import overviewImg from './img/overview.webp' +import startedImg from './img/started.webp' const checkIfGatewayIsOnline = async () => { @@ -70,6 +77,7 @@ useEffect(()=> { name: "a-test", service: "VIDEO", identifier: "account-creation-hub", + poster: creationImg }, }); } @@ -85,6 +93,7 @@ useEffect(()=> { name: "a-test", service: "VIDEO", identifier: "important-information-hub", + poster: importantImg }, }); } @@ -103,6 +112,7 @@ useEffect(()=> { name: "a-test", service: "VIDEO", identifier: "getting-started-hub", + poster: startedImg }, }, { @@ -111,6 +121,7 @@ useEffect(()=> { name: "a-test", service: "VIDEO", identifier: "overview-hub", + poster: overviewImg }, }, { @@ -119,6 +130,7 @@ useEffect(()=> { name: "a-test", service: "VIDEO", identifier: "groups-hub", + poster: groupsImg }, }, ], @@ -138,6 +150,7 @@ useEffect(()=> { name: "a-test", service: "VIDEO", identifier: "apps-dashboard-hub", + poster: dashboardImg }, }, { @@ -146,9 +159,9 @@ useEffect(()=> { name: "a-test", service: "VIDEO", identifier: "apps-navigation-hub", + poster: navigationImg }, } - ], }); } diff --git a/src/components/WrapperUserAction.tsx b/src/components/WrapperUserAction.tsx index aa0d19a..8758c99 100644 --- a/src/components/WrapperUserAction.tsx +++ b/src/components/WrapperUserAction.tsx @@ -80,7 +80,8 @@ export const WrapperUserAction = ({ children, address, name, disabled }) => { }, 200); }} sx={{ - color: 'white' + color: 'white', + justifyContent: 'flex-start' }} > Message @@ -98,11 +99,26 @@ export const WrapperUserAction = ({ children, address, name, disabled }) => { }} sx={{ - color: 'white' + color: 'white', + justifyContent: 'flex-start' }} > Send QORT + From 74b682ce38c45eb42754803705e6099edb4c71ae Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 22 Jan 2025 03:40:41 +0200 Subject: [PATCH 084/119] fixes --- src/App.tsx | 1 + src/background.ts | 2 +- src/components/Apps/useQortalMessageListener.tsx | 5 ++++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 03e3e03..2f29a8c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1265,6 +1265,7 @@ function App() { const registerName = async () => { try { if (!userInfo?.address) throw new Error("Your address was not found"); + if(!registerNameValue) throw new Error('Enter a name') const fee = await getFee("REGISTER_NAME"); await show({ message: "Would you like to register this name?", diff --git a/src/background.ts b/src/background.ts index f4e839c..2adb950 100644 --- a/src/background.ts +++ b/src/background.ts @@ -2099,7 +2099,7 @@ export async function registerName({ name }) { const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } export async function makeAdmin({ groupId, qortalAddress }) { diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index ddeb62d..92de759 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -481,7 +481,10 @@ isDOMContentLoaded: false if (response.error) { eventPort.postMessage({ result: null, - error: response, + error: { + error: response?.error, + message: typeof response?.error === 'string' ? response?.error : 'An error has occurred' + }, }); } else { eventPort.postMessage({ From d9f34486a6f9f3f10565fff5c1ca0bf4530468bc Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 22 Jan 2025 03:50:29 +0200 Subject: [PATCH 085/119] fix dev mode chat notification --- src/components/Apps/AppsDevMode.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/Apps/AppsDevMode.tsx b/src/components/Apps/AppsDevMode.tsx index f3079f7..7bc7d4f 100644 --- a/src/components/Apps/AppsDevMode.tsx +++ b/src/components/Apps/AppsDevMode.tsx @@ -266,14 +266,14 @@ export const AppsDevMode = ({ mode, setMode, show , myName, goToHome, setDesktop }} > Date: Wed, 22 Jan 2025 09:41:54 +0200 Subject: [PATCH 086/119] update version --- electron/package.json | 2 +- src/ExtStates/NotAuthenticated.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electron/package.json b/electron/package.json index fc59bb8..9219934 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "qortal-hub", - "version": "0.5.0", + "version": "0.5.1", "description": "A desktop app that gives you access to the Qortal network", "author": { "name": "", diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index f7f4e91..e6d0c17 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -26,7 +26,7 @@ import { cleanUrl, gateways, isUsingLocal } from "../background"; import { GlobalContext } from "../App"; const manifestData = { - version: "0.5.0", + version: "0.5.1", }; From 42424c08b8e815df9742463f424d72bfc964f84c Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 29 Jan 2025 02:52:31 +0200 Subject: [PATCH 087/119] added qortalRequests register name, update name --- src/background.ts | 31 +++++++++- .../Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 40 ++++++++++++- src/qortalRequests/get.ts | 59 +++++++++++++++++++ src/transactions/UpdateNameTransaction.ts | 51 ++++++++++++++++ src/transactions/transactions.ts | 2 + 6 files changed, 181 insertions(+), 4 deletions(-) create mode 100644 src/transactions/UpdateNameTransaction.ts diff --git a/src/background.ts b/src/background.ts index 2adb950..e78d185 100644 --- a/src/background.ts +++ b/src/background.ts @@ -2076,7 +2076,7 @@ export async function cancelBan({ groupId, qortalAddress }) { throw new Error("Transaction was not able to be processed"); return res; } -export async function registerName({ name }) { +export async function registerName({ name, description = "" }) { const lastReference = await getLastRef(); const resKeyPair = await getKeyPair(); const parsedData = resKeyPair; @@ -2091,7 +2091,34 @@ export async function registerName({ name }) { const tx = await createTransaction(3, keyPair, { fee: feeres.fee, name, - value: "", + value: description || "", + lastReference: lastReference, + }); + + const signedBytes = Base58.encode(tx.signedBytes); + + const res = await processTransactionVersion2(signedBytes); + if (!res?.signature) + throw new Error(res?.message || "Transaction was not able to be processed"); + return res; +} +export async function updateName({ newName, oldName, description }) { + const lastReference = await getLastRef(); + const resKeyPair = await getKeyPair(); + const parsedData = resKeyPair; + const uint8PrivateKey = Base58.decode(parsedData.privateKey); + const uint8PublicKey = Base58.decode(parsedData.publicKey); + const keyPair = { + privateKey: uint8PrivateKey, + publicKey: uint8PublicKey, + }; + const feeres = await getFee("UPDATE_NAME"); + + const tx = await createTransaction(4, keyPair, { + fee: feeres.fee, + name: oldName, + newName, + newData: description || "", lastReference: lastReference, }); diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index 92de759..11edcc5 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -219,7 +219,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 83421f7..6cd772c 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addListItems, adminAction, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, joinGroup, openNewTab, publishMultipleQDNResources, publishQDNResource, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addListItems, adminAction, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, joinGroup, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -886,6 +886,44 @@ export const isRunningGateway = async ()=> { } break; } + case "REGISTER_NAME" : { + try { + const res = await registerNameRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } + case "UPDATE_NAME" : { + try { + const res = await updateNameRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index b569acd..28c787c 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -17,6 +17,8 @@ import { performPowTask, parseErrorResponse, groupSecretkeys, + registerName, + updateName, } from "../background"; import { getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { showSaveFilePicker } from "../components/Apps/useQortalMessageListener"; @@ -3851,4 +3853,61 @@ export const createAndCopyEmbedLink = async (data, isFromExtension) => { throw new Error('Invalid type') } +}; + +export const registerNameRequest = async (data, isFromExtension) => { + const requiredFields = ["name"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to register this name?`, + highlightedText: data.name, + text2: data?.description + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const name = data.name + const description = data?.description + const response = await registerName({ name, description }); + return response + + } else { + throw new Error("User declined request"); + } +}; + +export const updateNameRequest = async (data, isFromExtension) => { + const requiredFields = ["newName", "oldName"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const oldName = data.oldName + const newName = data.newName + const description = data?.description + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to register this name?`, + highlightedText: data.newName, + text2: data?.description + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await updateName({ oldName, newName, description }); + return response + + } else { + throw new Error("User declined request"); + } }; \ No newline at end of file diff --git a/src/transactions/UpdateNameTransaction.ts b/src/transactions/UpdateNameTransaction.ts new file mode 100644 index 0000000..e90b388 --- /dev/null +++ b/src/transactions/UpdateNameTransaction.ts @@ -0,0 +1,51 @@ +// @ts-nocheck + +import { QORT_DECIMALS } from "../constants/constants" +import TransactionBase from "./TransactionBase" + + +export default class UpdateNameTransaction extends TransactionBase { + constructor() { + super() + this.type = 4 + } + + + + set fee(fee) { + this._fee = fee * QORT_DECIMALS + this._feeBytes = this.constructor.utils.int64ToBytes(this._fee) + } + + set name(name) { + this.nameText = name + this._nameBytes = this.constructor.utils.stringtoUTF8Array(name) + this._nameLength = this.constructor.utils.int32ToBytes(this._nameBytes.length) + } + + set newName(newName) { + this.newNameText = newName + this._newNameBytes = this.constructor.utils.stringtoUTF8Array(newName) + this._newNameLength = this.constructor.utils.int32ToBytes(this._newNameBytes.length) + } + + set newData(newData) { + this.newDataText = newData.length === 0 ? "Registered Name on the Qortal Chain" : newData + this._newDataBytes = this.constructor.utils.stringtoUTF8Array(this.newDataText) + this._newDataLength = this.constructor.utils.int32ToBytes(this._newDataBytes.length) + } + + get params() { + const params = super.params + params.push( + this._nameLength, + this._nameBytes, + this._newNameLength, + this._newNameBytes, + this._newDataLength, + this._newDataBytes, + this._feeBytes + ) + return params + } +} diff --git a/src/transactions/transactions.ts b/src/transactions/transactions.ts index bcae4c0..62c5e6a 100644 --- a/src/transactions/transactions.ts +++ b/src/transactions/transactions.ts @@ -19,10 +19,12 @@ import CreatePollTransaction from './CreatePollTransaction.js' import DeployAtTransaction from './DeployAtTransaction.js' import RewardShareTransaction from './RewardShareTransaction.js' import RemoveRewardShareTransaction from './RemoveRewardShareTransaction.js' +import UpdateNameTransaction from './UpdateNameTransaction.js' export const transactionTypes = { 3: RegisterNameTransaction, + 4: UpdateNameTransaction, 2: PaymentTransaction, 8: CreatePollTransaction, 9: VoteOnPollTransaction, From e2d57ccae51910422fb498b5c12cd133be773a48 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 29 Jan 2025 03:55:10 +0200 Subject: [PATCH 088/119] added leave and invite to group qortalRequests --- src/background.ts | 11 ++ .../Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 42 +++++++- src/qortalRequests/get.ts | 100 +++++++++++++++++- 4 files changed, 151 insertions(+), 4 deletions(-) diff --git a/src/background.ts b/src/background.ts index e78d185..1cbe97e 100644 --- a/src/background.ts +++ b/src/background.ts @@ -833,6 +833,17 @@ export async function getNameInfo() { return ""; } } + +export async function getNameInfoForOthers(address) { + const validApi = await getBaseApi(); + const response = await fetch(validApi + "/names/address/" + address); + const nameData = await response.json(); + if (nameData?.length > 0) { + return nameData[0].name; + } else { + return ""; + } +} async function getAddressInfo(address) { const validApi = await getBaseApi(); const response = await fetch(validApi + "/addresses/" + address); diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index 11edcc5..a17791e 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -219,7 +219,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 6cd772c..018e559 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addListItems, adminAction, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, joinGroup, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addListItems, adminAction, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -924,6 +924,46 @@ export const isRunningGateway = async ()=> { } break; } + + case "LEAVE_GROUP" : { + try { + const res = await leaveGroupRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } + + case "INVITE_TO_GROUP" : { + try { + const res = await inviteToGroupRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 28c787c..6d70bfa 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -19,6 +19,9 @@ import { groupSecretkeys, registerName, updateName, + leaveGroup, + inviteToGroup, + getNameInfoForOthers, } from "../background"; import { getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { showSaveFilePicker } from "../components/Apps/useQortalMessageListener"; @@ -3863,11 +3866,13 @@ export const registerNameRequest = async (data, isFromExtension) => { missingFields.push(field); } }); + const fee = await getFee("REGISTER_NAME"); const resPermission = await getUserPermission( { text1: `Do you give this application permission to register this name?`, highlightedText: data.name, - text2: data?.description + text2: data?.description, + fee: fee.fee }, isFromExtension ); @@ -3894,11 +3899,13 @@ export const updateNameRequest = async (data, isFromExtension) => { const oldName = data.oldName const newName = data.newName const description = data?.description + const fee = await getFee("UPDATE_NAME"); const resPermission = await getUserPermission( { text1: `Do you give this application permission to register this name?`, highlightedText: data.newName, - text2: data?.description + text2: data?.description, + fee: fee.fee, }, isFromExtension ); @@ -3907,6 +3914,95 @@ export const updateNameRequest = async (data, isFromExtension) => { const response = await updateName({ oldName, newName, description }); return response + } else { + throw new Error("User declined request"); + } +}; + +export const leaveGroupRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const fee = await getFee("LEAVE_GROUP"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to leave the following group?`, + highlightedText: `${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await leaveGroup({ groupId }); + return response + + } else { + throw new Error("User declined request"); + } +}; + +export const inviteToGroupRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "inviteTime", "inviteeAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.inviteeAddress + const inviteTime = data?.inviteTime + + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("GROUP_INVITE"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to invite ${displayInvitee || qortalAddress}?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await inviteToGroup({ + groupId, + qortalAddress, + inviteTime, + }) + return response + } else { throw new Error("User declined request"); } From 7767a4370acc6e35ffcc3fbf404e0c31ada163f6 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 30 Jan 2025 03:10:10 +0200 Subject: [PATCH 089/119] added kick and ban qortalRequests --- .../Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 40 ++++++- src/qortalRequests/get.ts | 103 +++++++++++++++++- 3 files changed, 142 insertions(+), 3 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index a17791e..fc26b54 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -219,7 +219,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 018e559..ffcd220 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addListItems, adminAction, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addListItems, adminAction, banFromGroupRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -964,6 +964,44 @@ export const isRunningGateway = async ()=> { } break; } + case "KICK_FROM_GROUP" : { + try { + const res = await kickFromGroupRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } + case "BAN_FROM_GROUP" : { + try { + const res = await banFromGroupRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 6d70bfa..e133245 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -22,6 +22,8 @@ import { leaveGroup, inviteToGroup, getNameInfoForOthers, + kickFromGroup, + banFromGroup, } from "../background"; import { getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { showSaveFilePicker } from "../components/Apps/useQortalMessageListener"; @@ -2854,7 +2856,7 @@ export const sendCoin = async (data, isFromExtension) => { text1: "Do you give this application permission to send coins?", text2: `To: ${recipient}`, highlightedText: `${amount} ${checkCoin}`, - fee: fee * QORT_DECIMALS, + fee: fee, }, isFromExtension ); @@ -4003,6 +4005,105 @@ export const inviteToGroupRequest = async (data, isFromExtension) => { }) return response + } else { + throw new Error("User declined request"); + } +}; + +export const kickFromGroupRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.qortalAddress + const reason = data?.reason + + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("GROUP_KICK"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to kick ${displayInvitee || qortalAddress} from the group?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await kickFromGroup({ + groupId, + qortalAddress, + rBanReason: reason + }) + return response + + } else { + throw new Error("User declined request"); + } +}; + +export const banFromGroupRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.qortalAddress + const rBanTime = data?.banTime + const reason = data?.reason + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("GROUP_BAN"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to ban ${displayInvitee || qortalAddress} from the group?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await banFromGroup({ + groupId, + qortalAddress, + rBanTime, + rBanReason: reason + }) + return response + } else { throw new Error("User declined request"); } From 99e01c7df7d3066fc8e8f1a5d78bb514ee681ea0 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 31 Jan 2025 06:20:41 +0200 Subject: [PATCH 090/119] added cancel ban qortal request --- .../Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 22 ++++++++- src/qortalRequests/get.ts | 48 +++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index fc26b54..a95cb7d 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -219,7 +219,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index ffcd220..f5c9395 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addListItems, adminAction, banFromGroupRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -1002,6 +1002,26 @@ export const isRunningGateway = async ()=> { } break; } + + case "CANCEL_GROUP_BAN" : { + try { + const res = await cancelGroupBanRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index e133245..49c8e70 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -24,6 +24,7 @@ import { getNameInfoForOthers, kickFromGroup, banFromGroup, + cancelBan, } from "../background"; import { getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { showSaveFilePicker } from "../components/Apps/useQortalMessageListener"; @@ -4104,6 +4105,53 @@ export const banFromGroupRequest = async (data, isFromExtension) => { }) return response + } else { + throw new Error("User declined request"); + } +}; + +export const cancelGroupBanRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.qortalAddress + + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("CANCEL_GROUP_BAN"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to cancel the group ban for user ${displayInvitee || qortalAddress}?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await cancelBan({ + groupId, + qortalAddress, + }) + return response + } else { throw new Error("User declined request"); } From ba47989febb888c54cf8119385f678f2829ec9da Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 31 Jan 2025 16:50:35 +0200 Subject: [PATCH 091/119] new user tooltips --- src/App.tsx | 25 +++--- src/ExtStates/NotAuthenticated.tsx | 83 +++++++++++++++++-- src/Wallets.tsx | 29 ++++++- .../Tutorials/useHandleTutorials.tsx | 1 + src/index.css | 2 +- 5 files changed, 115 insertions(+), 25 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 2f29a8c..01129ed 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -357,7 +357,7 @@ function App() { const {downloadResource} = useFetchResources() const holdRefExtState = useRef("not-authenticated"); const isFocusedRef = useRef(true); - const {showTutorial, openTutorialModal, shownTutorialsInitiated, setOpenTutorialModal} = useHandleTutorials() + const {showTutorial, openTutorialModal, shownTutorialsInitiated, setOpenTutorialModal, hasSeenGettingStarted} = useHandleTutorials() const { isShow, onCancel, onOk, show, message } = useModal(); const { isShow: isShowUnsavedChanges, @@ -1708,7 +1708,8 @@ function App() { showTutorial, openTutorialModal, setOpenTutorialModal, - downloadResource + downloadResource, + hasSeenGettingStarted }}> {extState === "not-authenticated" && ( @@ -2277,8 +2278,7 @@ function App() { height: "154px", }} > - - +

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 z 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%0AGqXe)45HH=wZu-~WX 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%0DxJYOMC@E|+#kv^ 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 z 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

- - +
- - +
- - +
- WELCOME TO YOUR

- QORTAL WALLET + WELCOME TO YOUR

+ QORTAL WALLET
@@ -375,11 +391,23 @@ export const NotAuthenticated = ({ gap: "10px", alignItems: "center", }} + > + + Your wallet is like your digital ID on Qortal, and is how you will login to the Qortal User Interface. It holds your public address and the Qortal name you will eventually choose. Every transaction you make is linked to your ID, and this is where you manage all your QORT and other tradeable cryptocurrencies on Qortal. + + } > setExtstate('wallets')}> {/* */} Wallets + {/* */} @@ -391,16 +419,41 @@ export const NotAuthenticated = ({ display: "flex", gap: "10px", alignItems: "center", + }} + > + + New users start here! + + Creating an account means creating a new wallet and digital ID to start using Qortal. Once you have made your account, you can start doing things like obtaining some QORT, buying a name and avatar, publishing videos and blogs, and much more. + + } > { setExtstate("create-wallet"); }} + sx={{ + backgroundColor: hasSeenGettingStarted === false && 'var(--green)', + color: hasSeenGettingStarted === false && 'black', + "&:hover": { + backgroundColor: hasSeenGettingStarted === false && 'var(--green)', + color: hasSeenGettingStarted === false && 'black' + } + }} > - Create account + Create wallet - +
@@ -421,9 +474,15 @@ export const NotAuthenticated = ({ gap: "10px", alignItems: "center", flexDirection: "column", + outline: '0.5px solid rgba(255, 255, 255, 0.5)', + padding: '20px 30px', + borderRadius: '5px', }} > <> + For advanced users { return filename.startsWith("qortal_backup_") ? filename.slice(14) : filename; @@ -30,6 +32,7 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { const [seedValue, setSeedValue] = useState(""); const [seedName, setSeedName] = useState(""); const [seedError, setSeedError] = useState(""); + const { hasSeenGettingStarted } = useContext(GlobalContext); const [password, setPassword] = useState(""); const [isOpenSeedModal, setIsOpenSeedModal] = useState(false); @@ -228,6 +231,17 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { bottom: wallets?.length === 0 ? 'unset' : '20px', right: wallets?.length === 0 ? 'unset' : '20px' }} + > + + Already have a Qortal account? Enter your secret backup phrase here to access it. This phrase is one of the ways to recover your account. + + } > { Add seed-phrase + + + Use this option to connect additional Qortal wallets you've already made, in order to login with them afterwards. You will need access to your backup JSON file in order to do so. + + } + > Add wallets + { }, [shownTutorials]); return { showTutorial, + hasSeenGettingStarted: shownTutorials === null ? null : !!(shownTutorials || {})['getting-started'], openTutorialModal, setOpenTutorialModal, shownTutorialsInitiated: !!shownTutorials diff --git a/src/index.css b/src/index.css index 836bc3b..867382c 100644 --- a/src/index.css +++ b/src/index.css @@ -65,7 +65,7 @@ body { } .image-container:hover .base-image { - opacity: 0; + opacity: 0.6; } ::-webkit-scrollbar-track { From b0deac7170b350bf3abee8a67f2f85ea36c8cc12 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sat, 1 Feb 2025 12:01:03 +0200 Subject: [PATCH 092/119] added qortalRequest --- src/background.ts | 14 +++--- .../Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 21 +++++++- src/qortalRequests/get.ts | 48 +++++++++++++++++++ 4 files changed, 76 insertions(+), 9 deletions(-) diff --git a/src/background.ts b/src/background.ts index 1cbe97e..fe104b7 100644 --- a/src/background.ts +++ b/src/background.ts @@ -2001,7 +2001,7 @@ export async function leaveGroup({ groupId }) { const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } @@ -2057,7 +2057,7 @@ export async function cancelInvitationToGroup({ groupId, qortalAddress }) { const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } @@ -2084,7 +2084,7 @@ export async function cancelBan({ groupId, qortalAddress }) { const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } export async function registerName({ name, description = "" }) { @@ -2163,7 +2163,7 @@ export async function makeAdmin({ groupId, qortalAddress }) { const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } @@ -2190,7 +2190,7 @@ export async function removeAdmin({ groupId, qortalAddress }) { const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } @@ -2224,7 +2224,7 @@ export async function banFromGroup({ const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } @@ -2256,7 +2256,7 @@ export async function kickFromGroup({ const res = await processTransactionVersion2(signedBytes); if (!res?.signature) - throw new Error("Transaction was not able to be processed"); + throw new Error(res?.message || "Transaction was not able to be processed"); return res; } diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index a95cb7d..dc23bd7 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -219,7 +219,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN' ]; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index f5c9395..df03a8f 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -1022,6 +1022,25 @@ export const isRunningGateway = async ()=> { } break; } + case "ADD_GROUP_ADMIN" : { + try { + const res = await addGroupAdminRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 49c8e70..1c77974 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -25,6 +25,7 @@ import { kickFromGroup, banFromGroup, cancelBan, + makeAdmin, } from "../background"; import { getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { showSaveFilePicker } from "../components/Apps/useQortalMessageListener"; @@ -4152,6 +4153,53 @@ export const cancelGroupBanRequest = async (data, isFromExtension) => { }) return response + } else { + throw new Error("User declined request"); + } +}; + +export const addGroupAdminRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.qortalAddress + + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("ADD_GROUP_ADMIN"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to add user ${displayInvitee || qortalAddress} as an admin?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await makeAdmin({ + groupId, + qortalAddress, + }) + return response + } else { throw new Error("User declined request"); } From aaec322b981be103750381c8eb2acec619d48fff Mon Sep 17 00:00:00 2001 From: PhilReact Date: Sun, 2 Feb 2025 15:16:35 +0200 Subject: [PATCH 093/119] added remove admin qortalRequest --- .../Apps/useQortalMessageListener.tsx | 3 +- src/qortalRequests.ts | 21 +++++++- src/qortalRequests/get.ts | 48 +++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index dc23bd7..9a0e0e9 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -219,8 +219,9 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN' ]; +// TODO listOfAllQortalRequests diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index df03a8f..5dceb6e 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, removeGroupAdminRequest, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -1041,6 +1041,25 @@ export const isRunningGateway = async ()=> { } break; } + case "REMOVE_GROUP_ADMIN" : { + try { + const res = await removeGroupAdminRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 1c77974..204515b 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -26,6 +26,7 @@ import { banFromGroup, cancelBan, makeAdmin, + removeAdmin, } from "../background"; import { getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { showSaveFilePicker } from "../components/Apps/useQortalMessageListener"; @@ -4200,6 +4201,53 @@ export const addGroupAdminRequest = async (data, isFromExtension) => { }) return response + } else { + throw new Error("User declined request"); + } +}; + +export const removeGroupAdminRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.qortalAddress + + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("REMOVE_GROUP_ADMIN"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to remove user ${displayInvitee || qortalAddress} as admin?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await removeAdmin({ + groupId, + qortalAddress, + }) + return response + } else { throw new Error("User declined request"); } From e10b3ce97d667283a0177b87beb5e1ba9872095e Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 3 Feb 2025 20:51:24 +0200 Subject: [PATCH 094/119] added cancel group invite and decrypt aesgcm --- .../Apps/useQortalMessageListener.tsx | 2 +- src/qortalRequests.ts | 42 ++++++- src/qortalRequests/get.ts | 106 +++++++++++++++++- 3 files changed, 147 insertions(+), 3 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index 9a0e0e9..3fb7764 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -219,7 +219,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN', 'DECRYPT_AESGCM', 'CANCEL_GROUP_INVITE' ]; // TODO listOfAllQortalRequests diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 5dceb6e..8623d13 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, removeGroupAdminRequest, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelGroupInviteRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptAESGCMRequest, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, removeGroupAdminRequest, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -1025,6 +1025,26 @@ export const isRunningGateway = async ()=> { case "ADD_GROUP_ADMIN" : { try { const res = await addGroupAdminRequest(request.payload, isFromExtension) + + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } + case "DECRYPT_AESGCM" : { + try { + const res = await decryptAESGCMRequest(request.payload, isFromExtension) event.source.postMessage({ requestId: request.requestId, action: request.action, @@ -1060,6 +1080,26 @@ export const isRunningGateway = async ()=> { } break; } + + case "CANCEL_GROUP_INVITE" : { + try { + const res = await cancelGroupInviteRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 204515b..f0cbb80 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -1,3 +1,4 @@ +import { Sha256 } from "asmcrypto.js"; import { computePow, createEndpoint, @@ -27,6 +28,7 @@ import { cancelBan, makeAdmin, removeAdmin, + cancelInvitationToGroup, } from "../background"; import { getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { showSaveFilePicker } from "../components/Apps/useQortalMessageListener"; @@ -35,6 +37,7 @@ import { extractComponents } from "../components/Chat/MessageDisplay"; import { decryptResource, getGroupAdmins, getPublishesFromAdmins, validateSecretKey } from "../components/Group/Group"; import { QORT_DECIMALS } from "../constants/constants"; import Base58 from "../deps/Base58"; +import ed2curve from "../deps/ed2curve"; import nacl from "../deps/nacl-fast"; @@ -4251,4 +4254,105 @@ export const removeGroupAdminRequest = async (data, isFromExtension) => { } else { throw new Error("User declined request"); } -}; \ No newline at end of file +}; + +export const cancelGroupInviteRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupId = data.groupId + const qortalAddress = data?.qortalAddress + + let groupInfo = null; + try { + const url = await createEndpoint(`/groups/${groupId}`); + const response = await fetch(url); + if (!response.ok) throw new Error("Failed to fetch group"); + + groupInfo = await response.json(); + } catch (error) { + const errorMsg = (error && error.message) || "Group not found"; + throw new Error(errorMsg); + } + + const displayInvitee = await getNameInfoForOthers(qortalAddress) + + const fee = await getFee("CANCEL_GROUP_INVITE"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to cancel the group invite for ${displayInvitee || qortalAddress}?`, + highlightedText: `Group: ${groupInfo.groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await cancelInvitationToGroup({ + groupId, + qortalAddress, + }) + return response + + } else { + throw new Error("User declined request"); + } +}; +export const decryptAESGCMRequest = async (data, isFromExtension) => { + const requiredFields = ["encryptedData", "iv", "senderPublicKey"]; + requiredFields.forEach((field) => { + if (!data[field]) { + throw new Error(`Missing required field: ${field}`); + } + }); + + const encryptedData = data.encryptedData; + const iv = data.iv; + const senderPublicKeyBase58 = data.senderPublicKey; + + + // Decode keys and IV + const senderPublicKey = Base58.decode(senderPublicKeyBase58); + const resKeyPair = await getKeyPair(); // Assume this retrieves the current user's keypair + const uint8PrivateKey = Base58.decode(resKeyPair.privateKey); + + // Convert ed25519 keys to Curve25519 + const convertedPrivateKey = ed2curve.convertSecretKey(uint8PrivateKey); + const convertedPublicKey = ed2curve.convertPublicKey(senderPublicKey); + + // Generate shared secret + const sharedSecret = new Uint8Array(32); + nacl.lowlevel.crypto_scalarmult(sharedSecret, convertedPrivateKey, convertedPublicKey); + + // Derive encryption key + const encryptionKey: Uint8Array = new Sha256().process(sharedSecret).finish().result; + + // Convert IV and ciphertext from Base64 + const base64ToUint8Array = (base64) => Uint8Array.from(atob(base64), c => c.charCodeAt(0)); + const ivUint8Array = base64ToUint8Array(iv); + const ciphertext = base64ToUint8Array(encryptedData); + // Validate IV and key lengths + if (ivUint8Array.length !== 12) { + throw new Error("Invalid IV: AES-GCM requires a 12-byte IV."); + } + if (encryptionKey.length !== 32) { + throw new Error("Invalid key: AES-GCM requires a 256-bit key."); + } + + try { + // Decrypt data + const algorithm = { name: "AES-GCM", iv: ivUint8Array }; + const cryptoKey = await crypto.subtle.importKey("raw", encryptionKey, algorithm, false, ["decrypt"]); + const decryptedArrayBuffer = await crypto.subtle.decrypt(algorithm, cryptoKey, ciphertext); + + // Return decrypted data as Base64 + return uint8ArrayToBase64(new Uint8Array(decryptedArrayBuffer)); + } catch (error) { + console.error("Decryption failed:", error); + throw new Error("Failed to decrypt the message. Ensure the data and keys are correct."); + } +}; From 8c616edcec122a509a63dd5aef10126577f43278 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 3 Feb 2025 23:28:05 +0200 Subject: [PATCH 095/119] IS_USING_PUBLIC_NODE --- src/components/Apps/useQortalMessageListener.tsx | 4 ++-- src/messaging/messagesToBackground.tsx | 2 +- src/qortalRequests.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index 3fb7764..a2792c7 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -181,7 +181,7 @@ export const listOfAllQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'PUBLISH_MULTIPLE_QDN_RESOURCES', + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_PUBLIC_NODE', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'PUBLISH_MULTIPLE_QDN_RESOURCES', 'PUBLISH_QDN_RESOURCE', 'ENCRYPT_DATA', 'ENCRYPT_DATA_WITH_SHARING_KEY', @@ -219,7 +219,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_GATEWAY', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN', 'DECRYPT_AESGCM', 'CANCEL_GROUP_INVITE' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_PUBLIC_NODE', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN', 'DECRYPT_AESGCM', 'CANCEL_GROUP_INVITE' ]; // TODO listOfAllQortalRequests diff --git a/src/messaging/messagesToBackground.tsx b/src/messaging/messagesToBackground.tsx index 1d5c724..7da16d4 100644 --- a/src/messaging/messagesToBackground.tsx +++ b/src/messaging/messagesToBackground.tsx @@ -52,7 +52,7 @@ export const sendMessageBackground = (action, data = {}, timeout = 180000, isExt }); }).then((response) => { // Return payload or error based on response content - if (response?.payload) { + if (response?.payload !== null && response?.payload !== undefined) { return response.payload; } else if (response?.error) { return { error: response.error, message: response?.message || "An error occurred" }; diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 8623d13..591300d 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -692,13 +692,13 @@ export const isRunningGateway = async ()=> { } break; } - case "IS_USING_GATEWAY": { + case "IS_USING_PUBLIC_NODE": { try { let isGateway = await isRunningGateway() event.source.postMessage({ requestId: request.requestId, action: request.action, - payload: {isGateway}, + payload: isGateway, type: "backgroundMessageResponse", }, event.origin); } catch (error) { From 3515c0b6c9b3f9a50cc7235d6bdcc120747f3969 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Tue, 4 Feb 2025 13:59:31 +0200 Subject: [PATCH 096/119] added create group qortalRequest --- .../Apps/useQortalMessageListener.tsx | 4 +- src/qortalRequests.ts | 21 ++++++++- src/qortalRequests/get.ts | 45 +++++++++++++++++++ 3 files changed, 67 insertions(+), 3 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index a2792c7..c0c7973 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -209,7 +209,7 @@ export const listOfAllQortalRequests = [ 'FETCH_BLOCK_RANGE', 'SEARCH_TRANSACTIONS', 'GET_PRICE', - 'SHOW_ACTIONS' + 'SHOW_ACTIONS', ] export const UIQortalRequests = [ @@ -219,7 +219,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_PUBLIC_NODE', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN', 'DECRYPT_AESGCM', 'CANCEL_GROUP_INVITE' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_PUBLIC_NODE', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN', 'DECRYPT_AESGCM', 'CANCEL_GROUP_INVITE', 'CREATE_GROUP' ]; // TODO listOfAllQortalRequests diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index 591300d..c5283d5 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelGroupInviteRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createPoll, createSellOrder, decryptAESGCMRequest, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, removeGroupAdminRequest, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelGroupInviteRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createGroupRequest, createPoll, createSellOrder, decryptAESGCMRequest, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, removeGroupAdminRequest, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -1100,6 +1100,25 @@ export const isRunningGateway = async ()=> { } break; } + case "CREATE_GROUP" : { + try { + const res = await createGroupRequest(request.payload, isFromExtension) + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error?.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } default: break; } diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index f0cbb80..151d6db 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -29,6 +29,7 @@ import { makeAdmin, removeAdmin, cancelInvitationToGroup, + createGroup, } from "../background"; import { getNameInfo, uint8ArrayToObject } from "../backgroundFunctions/encryption"; import { showSaveFilePicker } from "../components/Apps/useQortalMessageListener"; @@ -4302,6 +4303,50 @@ export const cancelGroupInviteRequest = async (data, isFromExtension) => { throw new Error("User declined request"); } }; + + +export const createGroupRequest = async (data, isFromExtension) => { + const requiredFields = ["groupId", "qortalAddress"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + const groupName = data.groupName + const description = data?.description + const type = +data.type + const approvalThreshold = +data?.approvalThreshold + const minBlock = +data?.minBlock + const maxBlock = +data.maxBlock + + + const fee = await getFee("CREATE_GROUP"); + const resPermission = await getUserPermission( + { + text1: `Do you give this application permission to create a group?`, + highlightedText: `Group name: ${groupName}`, + fee: fee.fee, + }, + isFromExtension + ); + const { accepted } = resPermission; + if (accepted) { + const response = await createGroup({ + groupName, + groupDescription: description, + groupType: type, + groupApprovalThreshold: approvalThreshold, + minBlock, + maxBlock + }) + return response + + } else { + throw new Error("User declined request"); + } +}; + export const decryptAESGCMRequest = async (data, isFromExtension) => { const requiredFields = ["encryptedData", "iv", "senderPublicKey"]; requiredFields.forEach((field) => { From b82de8d84bce555dc67e5da57f2d5df7227be3c5 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 19 Feb 2025 15:39:05 +0200 Subject: [PATCH 097/119] fixes --- src/App.tsx | 15 ++++- src/Wallets.tsx | 56 +++++++++++------- .../Tutorials/img/obtaining-qort.jpg | Bin 0 -> 37477 bytes .../Tutorials/useHandleTutorials.tsx | 11 +++- 4 files changed, 60 insertions(+), 22 deletions(-) create mode 100644 src/components/Tutorials/img/obtaining-qort.jpg diff --git a/src/App.tsx b/src/App.tsx index 01129ed..c6dbd42 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -40,6 +40,7 @@ import { CopyToClipboard } from "react-copy-to-clipboard"; import Download from "./assets/svgs/Download.svg"; import Logout from "./assets/svgs/Logout.svg"; import Return from "./assets/svgs/Return.svg"; +import WarningIcon from '@mui/icons-material/Warning'; import Success from "./assets/svgs/Success.svg"; import Info from "./assets/svgs/Info.svg"; import CloseIcon from "@mui/icons-material/Close"; @@ -2784,6 +2785,8 @@ function App() { setWalletToBeDownloadedPasswordConfirm(e.target.value) } /> + + There is no minimum length requirement @@ -2807,7 +2810,17 @@ function App() { > Congrats, you’re all set up! - + + + + Save your account in a place where you will remember it! + + { await saveFileToDiskFunc(); diff --git a/src/Wallets.tsx b/src/Wallets.tsx index 1fd732f..8641a34 100644 --- a/src/Wallets.tsx +++ b/src/Wallets.tsx @@ -200,9 +200,11 @@ export const Wallets = ({ setExtState, setRawWallet, rawWallet }) => { sx={{ width: "100%", maxWidth: "500px", - bgcolor: "background.paper", maxHeight: "60vh", - overflow: "auto", + overflowY: "auto", + overflowX: "hidden", + backgroundColor: "rgb(30 30 32 / 70%)", + }} > {wallets?.map((wallet, idx) => { @@ -371,33 +373,26 @@ const WalletItem = ({ wallet, updateWalletItem, idx, setSelectedWallet }) => { setSelectedWallet(wallet); }} sx={{ - width: '100%' + width: '100%', + padding: '10px' }} + > { - e.stopPropagation(); - setIsEdit(true); - }} - edge="end" - aria-label="edit" - > - - - } + sx={{ + bgcolor: "background.paper", + flexGrow: 1, + "&:hover": { backgroundColor: "secondary.main", transform: "scale(1.01)" }, + transition: "all 0.1s ease-in-out", + }} + alignItems="flex-start" > { {wallet?.address0} {wallet?.note} + Login } /> + { + e.stopPropagation(); + setIsEdit(true); + }} + edge="end" + aria-label="edit" + > + + {isEdit && ( U0PMMA?T#K$4T!okIP zs{{lb0s;~O@*Nb^I~-(0WSoEd_1XhKh6bI40Dysz06>vJz>q;+`v7>rt^z>8fR}%~ zK%k&OAt1rQfK=SKaR90RpaB3NpukZ;LcJ~m-U07}B7q?R@BKWZ%?9|=7N8}Pi~!Ir zYXE4Vqk`bRAfkYpY!E$w9H3?rj@B1|23_MPNezGifat-|0w6FTXsghm0cZf)1^_@5 z4Rpj80#ptFK&OTP`2YbT3?k~77d&77-xdEiEB;$5{(n&rBEa8O8tmZSBQn)voQonj z@0^p!E!r7?CI?3izyK;V937x$2mm4&PKj2N4b*oGKus4wUQb~ZM9>#R5Oh=z04^^` zTMUpR2SQ0rwj7$E92yatssyK3*a#>9bVOdurMY)UF$U_?YRVJDb#;VS=)E>hV35NraUPkC*;C80=F@9Q^h3?6a3?$4Y;{K$O0N z`xwUP{Al?p_bZ@w^ZUJFu(gT9gD2g^9)G9K5zoU7U!(Sl+bf`#eQVrQeH%)B?Pblh z>IT0vy=RSIu78Jn76qVWLg1tS0@ zl-=|#Zqt2qFh9ZIt{RbRbSVJhs>77(vgMoX&l{}Z_6zL^i%1)>LzW5Ub9V-@%_^Rb zy`A<~K&Ct4*u%>!0BJ(z^Wy{k?ev`hMDKvNj?J=%Wni>Drqj-OQQUQ=Z0>c&fNmeQ zPvd2WSm8Xrl^}^o-*S4V)rK#cS=WC=OJ=b6$|kMx(i@IcpJ1ur z8r$&Oz$+k&B5*2N;K+W>W6GtYb9bKQ;@L-l^vcKLYju$9RVE?MJ#9%;%Qum0<5SFI z9$mg|yUv!gcG*0WHmcNnEto(D6%1@ij7J#`4x){*!QDq2uJDXt!$}VY>BCO!171jm z5j9mdrcDtntNWAVuNm|_%|;OL%Z)h5;)sV2T^zSILhu` z0lF(A>l+LrSDr66OGXn=r@S@}yPgn7HW@eVHY>eTmeb1*?;Q5-pZRS!ww|-B_Np0_ z4?UAoZ;A7g{*N`0fgg_fr;pz=gWC>sTF=wdYAvxhr$_VF#e=NBPQX0)(7VRf&9&Oe zyH4`^i>2Zs#>;?P7%SwrD)8IuIv;_tf7bkfEZKeS7XQl%8b7P zvhfFHm#w#U`SI>N2vhX@Hu;Nz@P2i^OYe1UQF>f_3E9bK8rKvUY?xZmRer@t!}ku( zp;OqvRR5>CP4*~_U!nU)2-6(DlwZl{nH>(03-*1KBi>th^*@eOm}SA42fltYjM-Jg z&*a5%Wnoi6Z(h4hf)w!SS%*kTs!h@J$T-tZH!T`L_NR9~uaBB$R1d*ki0o!)-5AB8 zjc8mo%!FzF3AgM`oJe-9aBt#q)wEZ3obyZCv*WaTC$MH&@P89UcY5^^r#T!9lkZgz zJUitF-|hOFneNqauVfMgI9=sAoez0BFjVgxxVwD6`leZu79MfJscGdzVfFRB9^lY} zzMj>2UD-0Gp-0iOR#9gC^3kAzpM2fZ$K4aURXDeX(psxW zV439v(k<*u%Xc;ogFCE^j&-%X+`7{j^KI95W1gwar0YqiPVHX@7oae-oF=w7&MB+@ z_okd6&EbsRdyr%ALBDoj6LEYen0GMfnYsZB9mt+ULCvWnsjuVcFC zmEh3no|S4<;Vy|G;F+(anSH(*xW$*>!9H+#hVlmT=;WN+ukpbzv4v%hhkRbD{nCrO zk&V!_o`%+5r^lRqX>?S#0V+qE#^LGa{E}eE;vW(PxnlKOqKuQR&Iz`}T~M}`4AUc$ z#@)F-hMlT}?FD^Wq|;ucQnO&*C~=ywb$qn7|9J$7+a}gHjbG8^PKbW2$bfycgQMD# zs+!sEJCYnuzm=wX6QEh%r!(FEDBb4OV%Nguh~=Yo!=iO-*GxVk_uG5R{a4Z1|B6Yp z$B@C+5u=lCSyCxxMg1*J;k1kb3#s-SgEPsyb9ncKm;{G!sy4tjti!F%*({xjRcm>k z={0a;U|K{Vw&>b+)%p_9Suuxm>zX0B^ei~4jeTf}N8F;e_X`qN5CE?>;9*?S%DT(< zb?*6VFFVA98oDj};b)mc<6sZkUhAO8HOQsG)zfL6227PRmEX+yMrMUkd5l)hmSQ{8 zve(4z)x>3S0|vh+vU1g~bHaZ4tT9#d(D-Gzz@wzV?O@1*G|wXie=zEX*4b=uqtVsH zIzn>)nO%hWZg!~mVXxYKzctdb`QSGOp$TSF`esuKQdY*>KBC71kRal7WBb$vK`Rmk zL495D1?*a*lkXfhj=YWip+X+A0eo4JL08V)(pAZO3A)iodFKMwtppY;gVpD|YVPnq ze?|zS9lA=~e)Y;`4S}b)v z{82l*q7$RpysX!@U*>|(y1dL}nz#UOvjF~28dfvL{>zEOPE(|8&1k|+$8h>!dCF>k z%JO>KD|dD!H-+&(DOg>2#nHpclX`W_-ot1+1NyP!1rAWd)H6HcmhViy^Yq_*uJoE6 z8vZtVJ;>Czea^|habWwUwdp2B@3)X56^_L1dZdKb@5fS000EJ zyzz&;NKIohI1nLp%P`Io?k~php(f|_N#P(`cVRFLHZ{{2mt@D4IvzioIEg*fuso`DM{;#BoB;q$TbHF0KsHv ze@kWni2g`s2r2!Q%z!2Or&tF7{a?j8RP#UklP*r11{q)uJjmL8l5W8?&u;GS4q11W zoVX4NOYXOiiW2N5@E!?fqjV9ou6sc?r1yRu{jfOjtaLw_Kd`-dJq@!i;KR1;pHH| z4kmigLsanI`c3u zSE0t|T22-$(=yvsH&u^UfKF{~uhIEStB5sE$n>0=ix>4yIkPWq6#z{Qt)@$k=q&^F zPafC5Es67NU;nz60HSYNqk;hpRn`7{~~a=ch%X`?aLG$EkLdNJ)wXKi9*HbSmig zjiZP036&Qd{0?sXM7;1?xxdNP|C}WIx8;hRg40}P$uJGXbhU0O>hScJL$4!G+vm8d zi5`z?H8Boz(Ttn1{r87O`{6awd-OrfI;<1QGOO)#({4WU-z*4>_#7B3Z+<1->_q?Y z=G=Q^tQ3+}z|5cR^zpx#qyKLE@$AOS)U?b89$^h1VFE!#>-t|O0sdVx0@8>Ry(roC z4fFWD4?Fj8-vAf8uTGKpZ7YnH)3o9B;7!wMIF`|q!`3F>&_L$pDOk1+j>W25`gLRD zhua$6qK(H6JclVC<()LvQ+N29eH@U z)E#C3YM`S45K%u#S_n{}WB;Gx&X9l8Wrw5glxZxE*U%X(}Oo`u&b@x&Y9* zzQE`vTLPGAHvVVp3J&b$->j>;8Q|-GSNz-2_-|JH!{_?HfEEAAOZ?yOF=)X*E6D#% z6@LS+I57j4lOVuAAfVqCm%xC@Vql67xZnf=iNpqlhC#%PjDn8I!pg3P%4o|(Ttz}A z2waGQ1};*8K!Cmi8ogTBY#R}1X{;+GeDK3(Kw5mF`VRmr0tKv5^`DV$az5>eJH*tC zU^>`xaDe@JLH%?P`MrzVR3f{ekA9B}k{b}Sdq3ZOHnh777aN+NZQ;j|~ zx!?ti@S5b23wvj3F^kTUVWortO+gDLR8t?E^(Kja<%-id<6Y}eiZ*(9ZChaK2_ z5FW4+QX!~CFa@(k5{;Zp<}(yK_#|$J?SDC-j^*qz{q=a!a+UZ2Xy6UN=D?@k*hT$bOEloMvWm z6W@H;3`F-atZBJ)td; zrb`0cr(5H`N9zj%xHY)&GNu#Conj5T(rb;iY};XzgokpSZ20L3XzTg)y9Dtql_KZr zjir=w5jJcxG!FNT-c!>MFIK99aEDn;s8(d|kS4xDTn|(4pGZN+(I_yp6itoOB^se| zF8QcegU-oJ#Tt@BQwtS;w2sxdqET!f!@}h1z{WMcVpQBBL7^1yf7`QpFsd3>%Z*x0 ziDDZ&&tzsl1eBa-g*U<2Ys_#~k`z7lgTLT189jv#oTG6x+mPTqZ_FE54H#{eOAekE z&Mfv*ZMu>ioIP+d+6)Q~=Z3;WX|_7fc+}E7@hC!xNjpX}*r2Wp(e94@R9sk7AVjWI zIzsU_OGJx47qsN+vrB)>QHb+W@3{KzN`H3yS-NHE?%AG5?+S!Qxu2l{eYITfRJVAsP{9*}%Xw5Qf~m$uDA4pw%4?lp=!pR{!dk zUF`%3m7x3ptNn7!j_o8S*l-sZPAO;S4dqXv1YBi}gukWPN0dfGx$Q9iv*gzt$%tz> z0o(P1aq2Q1lUj*-k&r~lZ?5ywBDs#%5W_O0lnR?l-7eJ4?24J{%v8KJp}Sei(_xigg$y}VLsVd8ic7HhSkO5G^{&q|OC_EG>bE6fcMe>b`w2%}wVYMiVZI4Zz{*b6A=eOB>;d$fP zE8y?wGx#R(S<~1yLz0kboJIPyl>Pzpa=QpOwi2O|_QIqw;a1msiFu>)JH;0>Zss(# zicmcKF%nVp&3f5iBF;k@=)`_gt1jlqsvUJ@yw&uu2N|u#|M|96giCd$#_P2;&$XhmTjRczEVRL7Y zoAd+cl&=7~!6c9^QMKkV(YVd(RV_q%uz|1fUC*cs6<(VhVDucQJh!wd3~zZfNwJq}_Zq-r^5rd_fAI zM$54Js>_+223*rQ-jCPQT9G0x$}sRacuTV1ga$r)AnFWEv7Vbh`CwYLZ+`C_*_^oB zeb1&Rj4iS>r(m@&Ay>DPUbiSIKW$iRcLm)ph+C97*l70QqAXqxhEvpAa&aXu9~`4L zm_EiN3ArzdB&=ApM@Bq+KSxVQU4ZNvg`k(6%=(sM*x{qA(txv5iQ#9?pdSuyORfI% zjdfBChx6_??BPXls$2K%6{|aTrcVy2I8`+j2kc@reAe@1&!yM>D|UAVx~G%B0n7|~ z0wW$c@PPD^#P#-{&JO7#Si#I68@~mn;T7hL(8x^L_uqYJ!>A2E-D+wy!iY}j->yJu zlyE?4UGi&hLW)vl?V#^fO1!yQx3Px2YImdiH1RG7y#h{3cPeen`L7Pzw~*N<^h4(3 zPT80x>&{hOA6a3_V0;_AFqqtFA)8@{L}&jVLv>Q2$+G*9 zv$cb3RBym~>aKOW?W2WhEMI?h9p&ml)52UqWd0_ucz->=_<(E6@qrYZFP$V@;IqY> zWI1jCB@0QhFP@+N6N+?gJqkAxR?2KSth2De6Q49U9Yc)06`b?~_?vO~UYp=C)wIYW z5p()}JXPuRyiT+=##UpTj10HGVJk#_5XrA#8tLk;g)Y8evVw;ugwGVyWsr+>Ayeo8 zI;Mt1-6?I*_NxAakye|-gKC4n34d%%A>Aka+6qZr@jmvrkY=`AosUDLloJU)8ofWO z>$EvFIthECRie{^5+#h2Xa_24cRZ%l7QxJm-qQ)hI8Qq7nQ53#lDrvC3y^1ANdsr1 zIQj8K+WrAtcIC}8q@BR1{%7L0k!}mlju)OZs>RCnb4QLm^(Ud<{2H#EUwv51y^UBl z9(dC{3ZUj$dH7C74cQmVi2jX1C>oKS?D@EJhlTqD;u)Hzr=9Pj=s(%uL@ASI7t(!q z!4;n7_xo)XNUE1A;3?Dlyvg;k$KG$5?4EKgv}F7W!H~=En<=$DKcsbm1@@+S3nMXf z9Y%lWsp@lWqbaWkxS@u@u|~L-TELv0i>CuQos5~MaSJSQ#Q9BsPoyJRYZGvDCF zO&pJP4d%P0T^Rm@NiQKKNw%Y+x>5vFY@ezbbMrsMHcmq-C8W48HW1ZkYNQ4tkk7N_ zXHH@_=0~KZsAB)Y6Lurh;9i5oKO1iq|r9JqY zp;?P0*it&ML)xKynZcGxdJPJ- z`tOn;x})F%@Gv1c>EGcD2QoU;4v6K~7Z9Th&d2j){zb9X!dh=)>b5oXUmt`NihB12 zWeB-0Yccmt37lyYV;n%N*aIX}omVV4<0I_PWzJGf)Fn+OB^cX&#LyW}X87yC&mmoL zo#HBekSS#}7dnCW<-;Px&2ZDVAiZ=nntvZ++1~j*m_4{TV7&pPuE!*+I0oB2?Lbpg_mu zK5&A{L~B7o5^F5V2t;qKM&W5V19tft$q=si!uc&T`8sLa;A{d9ULXI_1Qi(u%zd8P zg{bN77VnkcHCwK98d_Rm2-oc_%mjMa)tNl+^6=T*lb?GFlzsA+guhRd+Pt#4KVJV` z$pUhin5e;>M%Xg;-|M&)9hl_tbU~5}m*H)$K<$HrYYbtkgNHL&ZD3DWS{Syvxx1ma z0ucWKiw#5d%LxV(fm9h&ayut`rW~+N$KOgH{Jg#*VEsGzXt3UD`-v;6uO&KAL3{C@ z3fkF(4)N2Hew$Jyd(>{AY3(3klqTj9Y-{j#HJ0+sID;vn|0=XQ-VcTEB=Swx7;OEEc*{ z^amW7=#M7iXc*#Q{GtHI=a%1Yee_oyx*7PPIXi|apG<)>a1|aWtFmTngG-4qwqRjv zE4M*ckx4|pOj_}iV>>(HSS$Y$dz=Z?oG z=y&w|hyS`&TyBJZerr%Wekl9c*a?i)Igx?8LBYWwz+u4u4AtLac5nz}BornhVivn< zR3SNeG;|VH1wFr*98zZejj!E|if6wgcHoXv0gzV!!+E+o%s75mj#~QVlV=u7mk;R_ zytBz6(mD?rQ}PQ^+k&nVV)Qcu_}Bz(X74Mi8`Hv>-)8D(7>tX}w* z#4y8dOOe%5bWHKSckmtC2W3mN^9xR73_5*xpw~yTzSN#uMQU22<%I`le^o8kaT7=( z7s%0M?Gjro(;`V1c+&2Mx(Q}hS6`BE`P za&hY-`y%lNBg@K3^DK#Y2m7D}PJS7_)yvIu`PNN{p@=M@KFK- z_8Ucie17GXkosAE#UES7+~5ydd1>+N!^fWa_B@Nq`p@N*43{qn?^VG2IIto+u9cJg z=x;)Fjj3hJNY-8fW+enS{H5j`dEJhpknhBkxL3LoK1DA`8F6#TdX&pZB%DS*T=g{I z=~vxqe;P~-@Loxh)0-|N3GU^2YNI#xeG$vWIZ`3Uip`HYK8Rx-HXGy*RL&E#NWHVZ z@rhB3Dvn_8J!vU8g`h{%%^c%oVeAX z^`d-D?llVV1F0?94puDE}R zatU&Z+gLoaFmx`t%=V&aw6i$Lj962w=%F_al1*5X7@rzUhXNPWVxv=>cJcI0N&4Pf z@iT*Glg0ORhGFhF_TDDlgKYV&wwJ>7)X9OMMxhNwUZ@K`q@UaOnPB$>Ar=>&e~9*C zO#{0Mb-&t%v2lDEdi+*=c@Zvpd^UYex_!K8qJoNoZ_AL~ko;#Xjl)`+TFP+OcYl<7 z1$@b=QgjZYfc%w_Yl48)&hgRHA!K_Bs8L})Qu zhc3Q1*a(<*l$m0|WP?Zh(A|t`Bt3T}&JXq{bjXl`RDJAifQ4RPL9LVO!ri?3{fVcO zmg^m25h1(sk6QJOEn%_L-yzUob@?MqKM@ z<2z3Q5>N$QR+gQfmg^jv9AHWC_L;ga$KLZk1ea*tjvj<_`40S#A)bwv-J$*Q^`8Gv z#aKdN0>jmtHP$OfHaD+Qf$df!-K_m{l=@Dduvprzm zMGCo*0Ah*2aPIa;hpN~ma6!`T~iY~yi zRu4YW$aXBWGkolfaOg@zH*N?4gJzOk;E-^)7l`I8Kr{yf1%m{hQTTJi|8F#Z19J!< zn#A$kGxh0ux;#&Zu}I& z<GK&wf(gqAgzu&IhJ2$t5x3Ot7~iqns8w9;F}xD!h>AbkQOebg8FqvNX$*-h z%cUj#JiZV@g7+UyZQ*vRpGS%dJn@`h6O)y6_Czn{JmMN`5DSLC#xaI2ql=>IM{{xt z36n)|^(%F+^N+lDjfQ_L`IYw0czpxUI$=R0tv2N`J*&1o5ZM}^`mKA-qDYDQKBB7f zXXnf2Y1%y69@(0_y4^b9DIsRwKTDNp*BYd-3 z-@>vJ2}MPCW0Op&Til3khm^UTl(zb|jFkoa@CQojYXdwA6DRPWVY98p3D#;VGe2d5 z!R92YYdDltoJS}>`R7FUe`OOV)dzh}a8%zM<3s1*DsB8~yO3{cUlOKHx6v{pPQ9rQ zjFnF%gOgW(oyhSrd-IpJKuHr$7b`LK30VxH4K!e=nW6JpkbX~_DYC+n{IvB2ukc1p zSXZI zh3%LT@vX@2%4=Ej3i8|oY;GUR4?Ak#H6N^y$x zrv0QoEa=>YUtzgLoo<{2TJY&=?Y#@%oT0e_a~39uyzf`C`7 zBE={&4=R~Q4ws+hP;%^VafAle5OqC!2EFO>5z3JysAQ=^W)@ztnq;1hQx6ZB6!P;V zF_5?X^2-hDT{%t2B1%V}x=R*wN}WNFJ#qc4szHCj{jMZhs-{u+KZbX~5P9AKWs9af zJ3ISO$2)K}Fe(j|OUD0_{r#n~nP0W7T6M>arAdW~Py`2#P zfrUhXhJg5eatQbn0FH!=LPSi$BqVQV?|@3mqEOupLB`0;$|kI*9}}B1wTWiy7Z8`1 zUn8Pu;NOF8n7eUa_2<$KqyTVf=ddFv){>fCjCxtKC-1;5vXn-3<`P#)rE}xHw3;vfnh9ks*GSMUlCTaW2^&G8Yt3X zgQfZikM(H7X?oAwD+N4XzzVxn*zfR#3PyPza@2Fy&^&B*nLd%us*Pe=vQZ|dkh38c zsu1)&YBy>Y8(K62wQM0RhhO%jcFIX!_h2Km`)FGEjNCdT;z2YN!LmTHJP(?oHgY4h zB{Td`%~J81-Ej|Q>@Q6??ZoA9!|uU)ILjJ{Ng$!#Fx&>FV5vxM8c$OkY#M|GW_|dg zR{j&;jZy|AG}i|TCC+sWV38QvN>E+v%{59KPKP`!ku)?5gHS7MCCe{4_y?j1nr?pG zrCIZ419`4LJ{tARK+Fy`3^nYNPB~ymHQp408ml@MvHZGJe-jE@*uCOZuJ1C`=AakZ z%Togy7zs4s_J)hd!_j8KiFJVZ4bEA^ zt3A4#wLAJ4$>aWJsERYx2fiwEzwA_AMDE23tsT9*j&N`aWoATW82Kt_`1)ZA{$vM( zNK1M6dle0*p7Ht~-Tds!m=r&1 zylnkBhz9f>eQD68u3xwP;l|#@n4jr5(vu~v!co${7GbUyy`wT8$+P@Z0Q9Nc>T;m? z!_=alIR&T1fXwbA%e=-KxMz45K3XYIHI)fbPv2!#!v*n>_f@x)KEvu0K{CCR28zc- zgvR`aeEvry1%3S=N|RVHc^(9R3=G7Koe~cc!1>KodSAqUpMo+lCvYX(wBwK2rxB_a z?;+X8zm3np3>=j970%G{aZ;bhN4n`QR)7z~eg|HLezYaMq43?;Gzz}*gU?9lEaDN4 zEj0pg?OX0p^46guW72tKrF;YR6^4^-1xM3>5M5^Gnd$7FEi=x&Ik^=Q}6jJmH-;oFGE z9+7Ag1v`qziPm~mlQ=2tkh~pp>hCy1Re)A(ifmXcnfdF?;dl`3hkW@GrfhlfDmh5L zK{)XzIwEa220AQ~{`mthrbv3Prp;uqAIf<4$2inb;1Ng-qh=t&Bjf|)%!aXI9k3Xq z#$@{bb!602CRp2PUn=_i>}jh+{SuD?-*3RwsatJoHc3?4Y8b|Tpt>SvFJra;6eUh@ zx1AOxj)YW4PO@YxI&DtHAF>6i6~X)pxQwFvnql5R=jQyt`&<66c?V|E%l?Me-%57b ziz{>$$E@TvS`%s_2oUeXx{@2*ZI^QLuLqcQbQ(!Pbv_o6EMWJ<<@7CKjMZA`j(tRS z?Q5SMgsn;|qpRUHeeg;BUtO3y$PgO%%^I`^O!zRCuLhwwM;3GfVc95p&Une2ezI?4 z3`PLA5?+e^zrKn@0eu&3Euzwiyr-X)Qc^7q@=o^QF^RlPuK>B|cRn-3nK0%~Ngp9- zqz}u_UIAk3Q%+X>vrUErK1KI=ZAZJxk$TOC~6+gAtu?`~Y4=#_X-kOd9!|j!aiy0g+^lRKH3x<76$_nYu2f-H4l|wH6sU zsLKlQhfOe}_F2WYV% zF48Sw+$vosD)ID}=$Dj(dTo+v-v;CFLBW~sWKYG_&XMj>Z1Y(~4CMfCLAf#PC?ePO zW)KG|G4+$pw8GJJ=;!Jk%E1Wo=ce;7osF3GC*(8x;tiENJEO&v?nj~0lFvm=->nm- zTul-=oAqA-r0$R67_8;a*SNzK6WSiwx1C$!bR+Hz{2A{v=WMt9wsD566;;_I;77`+ zIu7!KPAku~W8-9~c76yr8P(I=rjDN`Obac*)SZtbP!f`JWK=y$ThT&SrzECxqf}X3 zsf#)<1u!tWeF3Um>2s(JQJQKE5jkjI1VFCDh@2GWJ=&mwl3EgBAO1xLlG0{aynP&q zba9RdF;XHAeI<54Kp-%m>YI8``qM_d*35-aq@r}vAlXF6IoIs?uQ6Y&pm$bowvt?yqSPm>&*RJ0 z4%-Y~7By^PbM3$g)HW74;xsc`Zdguz24XeiuXN~&Vlfu`!=QLE&PoC|K6^)^eO)fB zw8FwoP*L=n6^CEb-jL}3Ap`nOn-wPB@!V7_H}FV&Zs33sGTO9 z`74Q2aAm_dwoP0t_d?w8G7uT7NB3Y{9?;mC%%WzEy$1r3>Se7MTVzpXg*dCF(g6BV z_)oG7_EO!p1-94}Y$3YjuWN;6iSf2o578WcU zQvj%?Gxgrgey8KU=M`)LSL}%Use}Vnf-;53@L?$YgNJ|I{8Ai^39}~WF02Zy5_7;m z1~!_mHkiW6E~?YaUN?ae)#)ifQo9y~jB_~~dNb(L-#n}Sce$o9FP9p1#h2A~Re`dq zWAZ6B3q{J&e;3wVr)RCKE`6&^#^L3Zl4RdEHrkXe#>Ku<5n9bcxA9q9o^olJQp38( zZ;35qjiwOIv8}Q+epgaFKWgf^@J7>Xb{7ul_Lto!-bXDRq9>%{ABHq>55BC9jos66 zINW4CmA87{wvdQ;r>2DVYq7#7E?Bxsbi(LDpCx#sbRZ%19axVW`)8(>>^puL&)4I9 z1qg-18@UYcm%j`>_gsgXwC*Vzv5yM(5pz(XCELr_b3c!hC@?M&fG{12pnf{?97HSg z7@M+sPcEZegsEdjrB*Ehf|j~`{j)mDEYjk}D~h?kPb+8M_MoAm`fv$?oNr45Yk z{%Xkebqt$ePX|3YoTED|kGkh$%UU38(rM@4iwRk6d+uxVGgKrwvX~J6`_wVeI>u4% zZ$U;&K{N=*mJ@~l{5vYudhA?v*=iK3`ptYs3QksDvcSk+eZwY1iQ@HS={&X4R2it4 zh=r@3G&gbtvibb<*(2|Jw!}3jH~-(zgivR#65tpIFIDfG`OG`5nKD-)cdEi1axA{R z{L2n`NpT3~6<~$Y9~-%qdEXm9JDkKA;|H^crCFI)P`*O>Ha@MoiV0|?xJYc{R{-iu z9&P8Q&y4eSuN5iZI8)G0foNnNxoLc+t!xRAikN3+>cmm>G6SdroqQL#(vP>zQW>ivc38`Ov|`$*B@8j_H4#7>3>xz$_Wf{pC$P-Kz#6^z ze)=1qZW35{!+v`l>fiBJ*9+&fcGKkO1da{fBGawJU&izMY0|VjF=r)Tb${`_!G()w zWvW`MGW8y120;w8ySn~B($}cS$fUtJrqeciA&w;)dnz* zThvgA%Xq(-&{mfN#vS=pk$frIosr@v9@$~y!fL*ew2{mHen*dG)O@-z;Ti;Aq)@6Z z=Vl??Wu^8vcE8e#e@qyzLVwhlUD!css(5{~zAf8cySI>O`xfqDnd0{d6ZnxE+2_8w zy~_58$F=kP#2r4&@168z!E#pOUpiK)2cVF@vpJY`Etl4$os@pEemLal(3Mu$lAzR( zE+J*r#zkdbg;M;fzH-rG;Y8Ucvc_(Y1(Pc9!9}>neVwWRB7YCEA(>bG@v=sZLy2f2^4H+_NMjNFF6t3LtEG^ zG(R>DqNtVQ&4C44CFcC_EaUX{KQeqkzaf7Gw7P6Tq%_1&2Qak>F{??4ohO|~gFfv% z8FqDY`Cy$fjOz~Y!d)hvN1&9-6e*ua%_KX;J*!Qss|0tWrO?O&MI zb<;Z|Tru|;wg@2ZNALc{P4-dHorV>vPg8rEZ^@eVP&cKOrY3N;qbaQMCx*KzJ4Q&- zJj%e)?}a;`Zy(I#S!3&q=ihv_%umh^l#?s305Hy#pKR*Wc(_f+G;t2n8VmT{USE&w z=`DK>4f8*Aob&OG_;^-kanHX^4FdZ1&C=%V17ui2TlSZC`N_?QC0j3xbm5u!Qdzf1 zA0X+rtdWWIBr7M_b%QnR0amNDi$+!h*RotyR*9Vu)QHM8Q7H^{K7D4bBTjjb%0 z!P{rESATjwXfBfCp}%XktJf-)uZR()QUet&gyTzr{MEo1=&t8 z;@UhESrWuN1)B1mvRcj}#`sQ0)=?}^HXeiyPa8Tz*3vi&XbR{t!o7I@uK=_`qRxIs zyu^4}XlAMpWrdYvW4K6uhup+JS5BAZ<=f(y^Kye#Gme1j_iayYJTTDx6>w2gTY|;K zb}f(cqZeCU#;*{SftEcX<0G_O9p2>Cc1bk?N!J>Cjs5-HhHBX>K!3M0^{1$-5}Yz^ z*|%E0U*6;N>KtO~!|Hw+KjIO!aTYM2$PROGARP!t6UAKD)Z72w<`M!fj!(F%YDeYB zSh%LGnqDJgnkL^?07(vmWO>7ZJu*mW8BPXvE%4tov|-m5a@JixZfaQEoA;LSlACde z%hlnam21TLhA3W?(2L`-U$V_GyQ1WPLE#OtzwDw=WQ$ zudizw=y_qpa5eqZL#LgA8C_Jp{obeuDOr<+lCCB5{(aW|H1(FocEv@Ut5UNLyeW@) zbGXt{Sazy$rz8lp#qJNRhaZKuBx5t)UuED7~ALZo}lFKX(9QnI8a>jhgz zj*nHcyf~*XO(7>0rEddX<}s=C6%d%Noj$XtWIM5$t!LF?R;Ec3hghZ&1K|c(0#OaNWlF713)yu#>r_QN`+g z6A=g75-?7dAGq#n_4zfr+rqsSmTK&tjvUSS!>L>hmwSO5IdTdDKh$LJdC(h4C(TKw z$sw%|jOPoP4}=f&+3B!u4}ma+UA#XOT02f@0&vTGoEa%As|N`X3t3FKUD*iy2ypLd z?!}I&8V4;Dy&@klpB);u5Lg^9iWj+5Vt=xLl~7{Z_O;^5uVJV217R zFQjt?f{zAcj$Q#bYrw=k4KQ&J0s#pL+?w(G+y(Ho6*2&cn30J{NM1kZOi<6xFQ&SC z>Rj%Rg+Jh#3jyLJ&+4uyA{o?RN*F^wJi&Ad1i22ibulCgnBI8szeu{Ywxl7bUp7WS z{~|FYaw7M^^w{oz{6)eX#e?1i-{7?O{fh**69sMuYMag_DETKT@L~{@(~naIFPr>N zlJNast)l!%%K5iC^tV>YB6}DUpA7l}5lPMdY!>BItM1SCLR~5~Fu2(ysuI8s7>xaL zBZ9kI7Ueud=^j2llX}N=ep<^n5b`4B_?2RR-4pd5RuBHsM2*f}`cnmx)uYKXi+4(= z)ND^T*-LOuIiKJ|z=GZC} ziYUfcRMhwTy9APodM_qPm`c#bykN!R$f?HY!i8$*$fH)>t7DdF5NbAoQ5!<3ItU1S zbyT_HUrUJ7AZCsNqmZn=o7M;cD3fJ8d)Kt|SH7xG+-OoDUp|pw{Fo10|3&wBBk1^p zh%>jz&@S0|nnP?-&kPrUKm>{vF+X2*sL*BAtmcn}iY9vI z6@)C=yBVlt2ZQ42VcTFUb$8vv|L|pk`ue4s{(2aIrS!dIvYVRUV5$Kp{+$}o2b033 zWMqR;g*_oaeS}0@-gB-!UV@~@FV}*N5|9ZtkD?FP@7_d~zg88-E34|?#)C}h61~Hf zw5~=lrUGUG)pYmQ=R4o|eX-9ujs2u1mBGqfN_etVmwhA`2<%@SSdrP)gP8evh@pQM z3ffeg3sgoWWW)OIRX~pc4l_glfN}qAT~J$>En$c-9P+rfZ|mL!88mf!{p}Gq1CiV23ARs5~q}L0L!Jq5kzys+ibC21;~`_iY!<~_8vN?kAHZ>t`Flf!`x@F9LKk! z!Va2+na!`hrlt_{ek#+th=E- z$ks()u9+3k^Kti*5}C0!kz(Lc0H*bN7~o=lAtXW0>RF=f5VWcYa4_I0*Mra6dJHvD zC!4aP{%TNH?3s_;I+{4;FhI^#oU6>F@^MIt`C!sUpK6^2_S@%!OZK?FU(JK#NXFKj z%3`Go*!JI*3&RdXN&a^LlrfRd6W558!HNK5)I)E`Fr$E6>J+v3hfQs_^M z&2!izf85j4d}&^?%~r?3_U1AL1L~6a%Q5Oe@r8Y4G{|9}(qq?dyJF?B%m}x;yF;M5 z{-anN0sLKmFN-BkH2mAa6snAz&z}=<;gAA_WlIwe@FXho8$1YXu93D+>fJe}yW&$Ir5II*wK+N(-MGC~a4&|Jby{7Po`gTn#Dc>L zgSmClLgmmACL_a+k;6|yEv{GD(HBZybYYXkGF{8y!^e|K!|)B@HXwaao;tASoL=!i!gdb7Jc^fZ(Opzn0%1 zor9EL-~_-$vEIu9@Ijrn+9SFQx`qu8*yW+UfL9K%3!JR1P=E>v8Jy@fLP2;aDu=XL zJpkR*!#9fy9AdBiW|f+u6QjvPuGlKf@__pUlYv3Bx73?k1Fc!i0d8Un=%zwg-aN-YMu?|SEAp^^pte-9KH4MnHwoqUK;PeE*J#85@S+^^R zLMFY6EKR%5t=xq0Qs>+GC}W})FB~o{M**B81VcjI5hZ-GrHnPwVbK>t^}lR1-p6Lm!MZ=yL$rgTgXH z+n+yncUtFVEOz7_7FoY?$R)F%3)1(4eHSl)7f9*oE-X*FHX0gKIB)$qGMFh*<|H#j zibw_$XzAXr-U%Ll2*Enn6;jXna$izOW*aBX==+dT>njoiPOMCxS?)X}cId)fm9}ed zb(MC1Bp|UetAGvgOg9sq?|ii?4-qB~Al{SE)(I&X)wu9mp5an!aGK@_wajfnR~3*d z4IcooLC+> zt-969z%9e9%-X~eaB%zXZl_F<;>3Lb{ciw#X5%|=daT^f2n20cKH)Z7IX|a* zIy?TyfPT;sh@hBt;)e1Uh_cQ!cW}$DJv-^05rFaY`R-gJTn1m-l};F~YTW*3&^6** z8V>A(43H^e8YE*{FT)sE!8Z3M?NO}7UAy@hIzjWnjyNEd>TPUji5TBmo?rTsN>xO!Kk~(fRO`8TXAm+jd19RUoAHqXGx& z=v@)m+^f$Mbk*LM%dRLFK_2D zDeU0U@H<6c*#u7=e+y@xX~%fyCa7>OQ87~)OHfY%*gu6Tk^uV6E82Xmrq2~~EzW5pYbVY+qS?Qv`0wWte>R=ag>W0hP?nX36r z1Dd*JT}TpL@4N2-p8_c?@i0UUcF&RHe)u@`9l&z$6h)9=uAs;$|1Y`pbxdrahWe`Cvvw+3^9gBe<%C&`uqw`Fc+mLnW;Nka5%3H z+{e`5z0k?Fn9C!@e|jG}@NxdR3l&VJY|%p&p0yc>DXUL{yuLr1nM;jx3Y)Jt!=*LWeo7x>~Wt8p9nQqzqLX)7wUZFLZ2{ofHr|!2m5zO_B%BWV^XFe z%oY2G0IzjHiR5PURNI`4fq`sK=mR-enKl3&+3A&#kof}o>btD~8Q+-(a|ZNLlPe`n zD&?qL2?c8zIeL;UDZ;l!NIn4n^U!#IICeXDnZf@X;Fdml0q3T*dDBxHXoCqm!d!iK+rMI|I>MI)utzz@l>>*PgefFy@R zc*-L%3(m@Nef0(!udcRO!5%g_vNKMU<=VZAdV2yp155->P@~c;RH$&D!32jkT5%?Z zOB*-DH-A0AJTu&8FSZ5Z?2%gCJRF{Y(}U!qGz+Q00vgE00;AvdYp;7(k|?2@AlpDS zZCeZpLpQfJuKbV!(+Zd;j-go4_uVF*y5!Qu{GALl->?Jc2D8<(lz!e%+Hu45 zp5$$tsQS{ zr!Xy~lN@V)Zl04VM|!1W=n*vmJ>}zWd-Qmu{?)=*hQMa%zEtEpe8g9CPF$A#rVqF7 zZT2wODSd(zI=BeUdhwvP^Sb+$t(_#8QMTB9B%0xRePt{E0`00AxaoE!gdoWQ)?=B- z`<)9l9RM^-SGo&Tiuhq6q=6|h#f+|I!=4O81{~d6-M+XE14*<{uv*x2*niu+jVnCalJyj1G{ zd4K<*?*FZ-_l~*La;TT zz|qmwP-Sa!3ZMk&qdq_$4+4c_w3V7?LHuw3`?Mex=v)vaR4_4k7W)KNfvm@Az6n6* zmXQIVa~2slr?GhbmG*aAhlc+^Hq0T23olp@BQRdb5@6VT>v{rPa2%XRzULINwBi_aEcR|TDzWJ6+01!nBHU}CG;XuGy|2{3I8322Kc9K|9e^>i7Z8|EFnoC z9eq4I432{5-}!~VrG)}8Apk5?GH%_ESAa%qCQ5?*$F!j02jpR#P%==cqbe1&T($_s z>)-gJzik&3M)42`xMdd~q78&U!tvjS|8rW*8f;nM9sf`wJZ*)IplAOf?O$vT+S45h zh%+`$AX;o;E;i@#-}C&px&Q)P>Mtaq2u+?I%?x0MV)^g-`)_Hl$^7rx$$#ee|82Yf zJZAWB+W%r%{l#AWv+>3KTU+;EMvHor$w34JfKW@*FJEQ;c$WzT5Ya>U7+|tGGUlk) zn7i2(O?z_#zgD6{-Zyo%4ZLp}X*{J-&U{Tp&D{5@^2fK~?6AV(Kx2UkZ= z9v;n?yxeU~Eo*fJ9iU+%mi6vgE_@_lr!`IN@Aqim;JTpHOnG3ZzS;S1t! zlku%}W3pm$Q`lX@$(!rx43Se94Qwas-vFv`9^`D9+6Gix#4hyRkEeV&pV{{*6+e;m z^VL@H(HI`D^ZIav0JC2!Ig>u+zz)vvksl{=h_E=|eHm2bU|4rJ@w%S}P9ndzuL!H= zmKDd}BhU6?^&)(_>Dju=^j>dIfj-CGwBxv$J2aZ$civs^Z~%_#8j;BIoVWI)lBhT6 z=gE%t`)_t=L*8U$ww?*0WtEeNvJGNmm@=2=7*5pf5IzAMkmYtCqDtL`|>=li2g>#08fC()?z|vbJX}o)d+7)tLi3MqkZq0^dN3(D50MJ*VJO|qlNuGE*Hr! z(uMVBh5L`o1kDpH8gI^>KcVHd4rzFH=9t)xe-KkOw$P+p?cjtOA3GibI*ln|Ny{Q< zcgZy6`E6Wrs&}1ZzIPb935gU>YR>HJeJq{c2=5^009iP%CXXz5;%KJBj`q{JlId#`%;jWh~+wF4?@aHQK@uaA!m44|8ZQ@|kdlgz5X9aC#`H4q1%Eg9` zQjar-C%GIyPd0irb&a$w)zpYS7I7IpjLw2oJW;7l9N ze!+!hwe0QfuayVjgTTPM`s}o=*E+KNVv^Ty`!8c1Qm85$UonlwD#c-Emk2X?^0Zn+ zV(tV78aKKhhT~>2lz8Y+ru-)1voP9n^?A#4%qG+%q_RxS*zy?C@hhJ^I0C>b2QOnQ z?O1{(AE%#Xm(S%Z^^w|Ne|}J;3b$2uB5eLtg{qSg4p#~RZQgteDl)eqA#SWfcPEs0 zE8Txfxp+a`b;h!DS9FSM>r?LnC)zUB5rU=6DD2%x%Tnl54BC*t0M@Byf6Qs&>73I+ ztq00xTxus_!FDQb#czh>&y(%@dsk(zncrvzkDGW>w8eoADJtoWh^_W>Th!hvP7%)*E%Uk4#Ws+ouV-|F^UKb9dg%*(O)MAy;2J(nBwX;5H{PQ;4ZFKjPDsbfSUBW=3`KXIFlU+~^d`H|aw zEAxV5q`$(uAzQMWFXWv|)k47o`E?@q{V?ehkvRo}woQ(&V&{*sehOj4WkB1I=h>b7 zEDceL`;D@8jIS_P}Y7q$~mxyxu7oYRH$Gqf#?f)D(3P!&_?SKAv-w);T*)Lr_2#AK-iRP!z z2Ld2O^xs{+d3HtIfTMrY-0t45Eejwyf;Km@HK?wT3@DgaXpksfA^C#iD#)Z1EKV|z z{o};t6)lIt8*=|o+)9V3{gqLfw}(nlm?I~w#o`%zq%g-e$-0eF6pqWWR;5D}35SE9 z^ykxXaqEl58^zMG-vE!fwmDHLioJw%-~9f3XAwr?A0ca?P>m-{YYI=_qAJXg5Bm;HzQ3!5J&1lhoq z3-uOa5D1=^q1#qz9~Afw2gz>aemQx<-I-3PlE6D}CSkVfBCXTi9dJQUbRd0WxzTy$ zqVS^3!V;N7ZiV#nI+aVKq~6=u;eQCsq?O+ExveMvh5y30kM9s8H@DTQK5(~+EKah) zqD<61vlIuYphJp64Hu{Hiw2W9QLnwL4bIzVd4( zbWmQ*4#cf3#h@nCX98zGCX(f4Y?pz)aYO1cjUA3?hW;-iI*`l&~W0GUIKZ=TE zZ8y_uj*31v-aMkLc;&0Kwvtz4;US0%I3!JILx4vZqjoC=Fn18a5p#0a$*-_+QkqA) z^BZ8alMYBCtXD$SYb9~7_n`suxC6ny7=ZC<7`6Cvm{?l*keW=Q!E}I1jj|*1r1cHG zWu#}&t(F4Ew7ABlv|?UuZ6lv@JHodc@xGXb z+_MR-8YCZ~yKHYL;kb$Bo!-k}$>wwo?15~}Oz@E=QLem&g`*-7VuF|`CD@{ZulTPx z>K`q5!i4|CCI>cJSaYK|n@W&lXiloDSx|T092WRY8==lhEC6bupkmaFy=o)oZ$V(o zP97Gwf$m7uo&DY{U{6I1QAD&*`8%m%dtjJY+JXK($s`gp!EL=!Y=LlNNch$fJQg&C6en&NM|p%iMKV~uxdgO#09GRA&y zRqbx3LXRB%vS5m}L6V35PAw@eumo9JV$1zo z`$n`({n3)(9=o%aYB%)^Wqhd0v%i6Wa_YmxC4yLI@;u{m@fomU4h_HEyc+ zu@PS_ZdF$dNmmrqp|Jg{;#?&&3n59V2ek_z0(;x>NW#cCaz_8<9>HZx;~PpLZNF2m zMyfM^1FR`U{XpkmTE?;Y8{GC6{6BZA>17HJK_%|!7-$$MZ~kWr4}&o9>Fmn-XQQ%s z)Li7ffj_4rLy(oaytvJK9$v_Lv_pTOL5zpE4xq=C;$8MKN1TI<6p&A z&x^f!G=aDl3o^2)H=!-(CCBMuVabW#t!HX6?|o!z!b_-69ua&uK7K&e!-QzAd|9}9 zCMklItOHNcRptCW6@QWHSy+h4k}0f(Kw1T?Ds?v?2%DHHe+DaXFr61^zMDi661;=i zhT#w;eV;j~iDVX23d!e3)FW`ffW2Mpr(zwefe8pU=W8|M_2dI0I?a&qXTvn*2o~ce zUH1+Nxn3yK`6RTSJXyZ}WYiM}d zS~O~T2fjKQxxi7y<1gXZeKm^6EqPaK`BiM~8>KJgb-pn5T);kiOtYYU1L)y(ewc-s zm-Gk__<11SXBmn`>5T>;E7|e%@DIBEHbqmzEsQXJpb{nC-BIT&`ocZjUAv3Vnrkg%Wp86#i%Iwjp}JfevA>yf*}wR`~?uf?>EPzQ0TwgHxp&vo3% zjBP1#WsF9Ghc4HlqFWU$cJLOqs=BQNxR;OZ1Miwz(&hDaByXqYU^JG^{Oe}zXhG#$ zvPrh`pR;%J2?hK+zRcy%O;mYPJZOHspK^ryOkhN<_2yhLYD7dl5OBm}U)2^P-iqUH zT1oUw`ed3E&(+Gmf?tFOh^GP>PxQw;>PZNt?FQnftzkXzV{ z*wVc+m@;rtt0kn|>!JhiMs&|K0_k_?&4^C=Xksj%cGjh^PD*sX?)RV7XZgzG&=S6& zTi^B8Duu+~*yj7$hdL>PbS96DkJsOg;z)H~Jwz2Y)-;2{3sl(b*2c>JwJ)3jr`gHq zS2Js6ZFm(z`$PJAyTvPUa%{=dK=Se1jJP7NI5fK{04B0CEkAKyT0p| zEv>Th24+W3GTEz6R}lkcQAJACB*?^{coO#BYkfU;b_-_4Vn9}tULktygL;|ffbir-G4x9z-9v<%bb{+zp`0&eNeulUTP&`+ri<$oNb zM5VX?3_wreG7W5NAM51$tIf13N)VHSbw;R{JtvLzwmOr~h+;xABt0tq~UyR!f&z%MGg3Vys2RBJ_@Eq+G0?UW0G7335oJ-KwW_^E!(tJ#4 zxLFc&&P~L17HAWD;&l)U6!l%)f6=!Jk9tWnlfN2_(SPV~Ui0ERhqtbAY7O+UMb5hw z68pcB_=}UWS+6a~a=&0Qd~ltvEbK}xT`a@+*4VLm!?}d)J9_SG#5?MztLc(YjI`4= zt?#AbPMxto4I5B9{!EPUTr?lCVRU$qQ2zDM_I&32mO;O@Qnc0_24x09q}Vseac0qB zW)UL67^rv5G#w%xhs4WGz|H5qmPqDtQ)~+3x|2Or)`u;&fiIo6=#warKvkA8yi7B# zk}WLe;bfnBA-cUt%cM_l8=`VaO-$Mz-;2OhSGgT&{J~_mXqoa;QH+iN6|R_KcW)2P z%p0B!?QR!W<+7re4p>auF|~U@jZv*8!Z!DNb1`R4O`BdT#C>wTW)FXNbMUo;#Yi~* zZ8V$a=;M=Wf0xIRkVFLqm(@&Rzmv)Rg98*>e*@nyx(GuOyGZ0oan?v{5TfdOjZLwbN;L zT-vi*fW>7RcprX|pEqP;WK$}be0N6ReVe`$Fk>{caa3o!`>bpE-(W#PcD$mY{u}WUZyLUfb32WFm(5 ztyomInWqP~GU3N-+ z?G&V^9Kb{#rjRYp!XgCDeCqmm_!5aeEn#SN_3u9=@9Y8HvlQ?WX5ry%DaJU+1Tv> zel!f9udwjv4Gb`^OWuPmo-~_0M=}fW_mOjIRj+JYNMJUbhX@GKNL2x=*VnO7Ha1u*f zTVcKk-uWjG3-#-9nS6gdyy=KSuv;n? zRZ}N=C!C4FwJlo~s47-wHSK7yAPBhD-pkCEqY^$4Kr#1P8$Iiaj90$%CI;H%>MC5q ztlecV3~qZ4sqlDS`mjcSv~GX_t^yX@Hs{V;PFd+EN?uu#jfZsvv^m+(y~@!mOjs_z zNoJXU%IpXjqLp@WzLJRCKQ0|u>}L$s4x$&FZ2m-nrtT@ZD>FjqdDdak=#rK^D2vBH zc$B4qHl3=-GXE)CDFy)!He4FDU%?kitgh|XTEdlP`KAnNu>PmOZRl7*`Vv;6HY!%$IqYT<4`qQ*gAU#@iL&fS$`6(<(73EyK6 zTRm3)QzN|R*ai)f&1l!Hn^~E(=zeN9#M52GF37OLK_ur!(@x-fR_|z*v1ijXrsX~B zl+{as2dwz$dmfDOKU2f+QMlfV7nR2CS2$>UqZo{gy4gLAq}Cy=;0-8aSc1ZnaTT`+OxM zzT_SOSMR;f55muM<6V^ET4}qmJoJF=dA!s>J9^C=-_;p)t4>2;I^(CH515x|G+V9G zIgTawJ~xF+QwU4m5On$ym?UQX{x0jd@>syjAmxus%eaSJ(?rApE=s61-qb#{*m?Da z9H<;vLYTV!Bk}lvm*JyUv~kayUV(^Ip(g|Dr2RsAHkr591ze|_=Y_}Qx0Rfnq=-|u zsJdmFHOJU;+yk=(g zM3n|g>e%bzhe=C!3I30P0G@0_3ZpE6?MSc7adq~G?dWSx2wIawLnX`jS}V#kKN2VJ zU6SBHAu8|Idy4qLv&W@aShqejuzKLAUD}o|l^;2!m474)OLXQ(%9J4i%jk0RXI5v- zJ;X&-Y)d@a#Y$f%s%`U@11NPoH+@TwnKN5TWze zz~B?Qr|8{pGv8oH3WGKaPTR7(|`eABL)b_tEfd7Ux&T^Mu9PV_m$=UfR*s?W@eJ6x1K zRfFcxyDu?FbQH;ETwk^ggYKKk{85AW12ATXOOImljk3Z~;l&y6CqpNthobU$L;~+c z6xS@g3NCZ!G2d&m48)k&)DXH*VZ}AQ4jEM*2ZS!*m z9=~#n=dhGl1TUP9N7~hfL{CfdDE;4$S4H;{i+1hsW4SRmR>jn$h-TaQH{2LE@aZNd z)>%{-c0e4yQYGv;o5vc_p(iN8xR-BK9kBxZP%W>)AMmq6B;OM65JQ`i@h;zNNO&~!iHMmiaND=ymH%KNy$g2u zRiLW#fBPO?!ahOr2r3 z_8U#%!^-O^69ih1I3k~OwRS~}=Eq;k zI@?|n7>y-;d4{LY>5^tI=I2pRs&p1J0DZ0QP3@7v?m+@xy3mhg&etGjZ5qGlj4nl_CcLYtJ?;eqNut$iPWDO*2)he5<=e;)B zQwble^{y(30lvw*EExW&HG0DS?v3Y`56zNx#J&L>=q(#uq*vpl$h1xyy&&0zc~;@L zUq2F~o9r7}09fhnol~eSmrRq+ISRK>ILq%Re?+IahM~R0iTXzMXddRe^S&l^#`w5E zo48g@1*$aT8;7guuc}F;;+(oYX4FN1h~;GTmHc_d=EC zQJde$`C6RLP|kah$3lZS%QPb>(3;A^?D&XlSe4kCQs-3k8vqvj>BCi?W^4(yE>+EU zO<5KiBWZ8dcdQ$B7msG+UM(`xpS0vJ?&7-guOb4464GXQmoR^0rtMdm&)}7IuL?$V z1(wXw-7n!8V`S2fp%LqTgECvfn1S#{u7l&ZL^b#`8;H*ZJZR1p%crb|2{4{VbNe2rx z59Kyn+Ec2vx2bL7=NYsML#0PiJ2-kW1pZkTcVn$tRbn|S=XO7tdLng8Thaqp(CGxD z8DQ)85G+{hY~_J!>50J?>7(m|xxQ#JN9^bhABym { try { @@ -133,6 +133,15 @@ useEffect(()=> { poster: groupsImg }, }, + { + title: "4. Obtaining Qort", + resource: { + name: "a-test", + service: "VIDEO", + identifier: "obtaining-qort", + poster: obtainingImg + }, + }, ], }); } From 56950c7e553e23f5711ff6acb646b190591741df Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 19 Feb 2025 17:03:59 +0200 Subject: [PATCH 098/119] update version --- electron/package.json | 2 +- src/ExtStates/NotAuthenticated.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/electron/package.json b/electron/package.json index 9219934..1fa9009 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,6 +1,6 @@ { "name": "qortal-hub", - "version": "0.5.1", + "version": "0.5.2", "description": "A desktop app that gives you access to the Qortal network", "author": { "name": "", diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 2d76403..47fc411 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -27,7 +27,7 @@ import { GlobalContext } from "../App"; import Tooltip, { TooltipProps, tooltipClasses } from '@mui/material/Tooltip'; const manifestData = { - version: "0.5.1", + version: "0.5.2", }; From df87ca4d9272ee0a269724e7c98e6b0b82b86ddf Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 20 Feb 2025 15:15:01 +0200 Subject: [PATCH 099/119] add condition for setAllowedDomains --- src/ExtStates/NotAuthenticated.tsx | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 47fc411..e3a30ec 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -157,7 +157,9 @@ export const NotAuthenticated = ({ .then((response) => { setCustomNodes(response || []); - window.electronAPI.setAllowedDomains(response?.map((node)=> node.url)) + if(window?.electronAPI?.setAllowedDomains){ + window.electronAPI.setAllowedDomains(response?.map((node)=> node.url)) + } if(Array.isArray(response)){ const findLocal = response?.find((item)=> item?.url === 'http://127.0.0.1:12391') if(findLocal && findLocal?.apikey){ @@ -334,8 +336,9 @@ export const NotAuthenticated = ({ } setCustomNodes(nodes); + if(window?.electronAPI?.setAllowedDomains){ window.electronAPI.setAllowedDomains(nodes?.map((node)=> node.url)) - + } setCustomNodeToSaveIndex(null); if (!nodes) return; window From fe04bd5b978b38f0724cc8fc9b2263900de19bca Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 20 Feb 2025 18:50:21 +0200 Subject: [PATCH 100/119] change apikey validation --- src/ExtStates/NotAuthenticated.tsx | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index e3a30ec..6bfd456 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -197,18 +197,13 @@ export const NotAuthenticated = ({ url: key?.url, apikey: key?.apikey, }); - const url = `${key?.url}/admin/apikey/test`; - const response = await fetch(url, { - method: "GET", - headers: { - accept: "text/plain", - "X-API-KEY": key?.apikey, // Include the API key here - }, - }); + const url = `${key?.url}/lists/testlist?apiKey=${key?.apikey}`; + const response = await fetch(url); // Assuming the response is in plain text and will be 'true' or 'false' - const data = await response.text(); - if (data === "true") { + const data = await response.json(); + + if (data && !data?.error) { setIsValidApiKey(true); setUseLocalNode(true); return @@ -240,18 +235,13 @@ export const NotAuthenticated = ({ } else if (currentNodeRef.current) { payload = currentNodeRef.current; } - const url = `${payload?.url}/admin/apikey/test`; - const response = await fetch(url, { - method: "GET", - headers: { - accept: "text/plain", - "X-API-KEY": payload?.apikey, // Include the API key here - }, - }); + const url = `${payload?.url}/lists/testlist?apiKey=${payload?.apikey}`; + const response = await fetch(url); // Assuming the response is in plain text and will be 'true' or 'false' - const data = await response.text(); - if (data === "true") { + const data = await response.json(); + + if (data && !data?.error) { window .sendMessage("setApiKey", payload) .then((response) => { From 84039050ffefc8d15a61f261c941116ee3ede0c3 Mon Sep 17 00:00:00 2001 From: AlphaX-Qortal <67390536+AlphaX-Qortal@users.noreply.github.com> Date: Sun, 23 Feb 2025 14:58:58 +0100 Subject: [PATCH 101/119] Added mac build files --- electron/buildmac/entitlements.mac.plist | 8 ++++++++ electron/buildmac/logo-hub.png | Bin 0 -> 11356 bytes 2 files changed, 8 insertions(+) create mode 100644 electron/buildmac/entitlements.mac.plist create mode 100644 electron/buildmac/logo-hub.png diff --git a/electron/buildmac/entitlements.mac.plist b/electron/buildmac/entitlements.mac.plist new file mode 100644 index 0000000..d6b93bc --- /dev/null +++ b/electron/buildmac/entitlements.mac.plist @@ -0,0 +1,8 @@ + + + + + com.apple.security.cs.allow-unsigned-executable-memory + + + diff --git a/electron/buildmac/logo-hub.png b/electron/buildmac/logo-hub.png new file mode 100644 index 0000000000000000000000000000000000000000..c9e096cbd5366f79e4fa592629653fc3ca91d934 GIT binary patch literal 11356 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 Date: Sun, 23 Feb 2025 17:26:25 +0100 Subject: [PATCH 102/119] Added build mac configs --- electron/electron-builder.config-mac.json | 30 --------- electron/electron-builder.config.mac.json | 81 +++++++++++++++++++++++ electron/package.json | 4 +- 3 files changed, 83 insertions(+), 32 deletions(-) delete mode 100644 electron/electron-builder.config-mac.json create mode 100644 electron/electron-builder.config.mac.json diff --git a/electron/electron-builder.config-mac.json b/electron/electron-builder.config-mac.json deleted file mode 100644 index e53fbf3..0000000 --- a/electron/electron-builder.config-mac.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "appId": "org.Qortal.Qortal-Hub", - "directories": { - "buildResources": "resources" - }, - - "files": ["assets/**/*", "build/**/*", "capacitor.config.*", "app/**/*", "scripts/**/*" ], - "afterPack": "scripts/afterPack.js", - "afterSign": "scripts/notarize.js", - "nsis": { - "allowElevation": true, - "oneClick": false, - "allowToChangeInstallationDirectory": true - }, - "publish": [ - { - "provider": "github", - "owner": "Qortal", - "repo": "Qortal-Hub", - "releaseType": "draft" - } - ], - - "mac": { - "icon": "assets/mac/appIcon.icns", - "category": "public.app-category.utilities", - "target": ["dmg", "zip"] - }, - "productName": "Qortal Hub" -} diff --git a/electron/electron-builder.config.mac.json b/electron/electron-builder.config.mac.json new file mode 100644 index 0000000..a38aefb --- /dev/null +++ b/electron/electron-builder.config.mac.json @@ -0,0 +1,81 @@ +{ + "appId": "org.Qortal.Qortal-Hub", + "productName": "Qortal Hub", + "copyright": "Copyright © 2021 - 2025 Qortal", + "artifactName": "Qortal-Hub-Setup-macOS.${ext}", + + "compression": "normal", + + "asar": true, + + "afterPack": "scripts/afterPack.js", + + "afterSign": "scripts/notarize.js", + + "files": [ + "assets/**/*", + "build/**/*", + "capacitor.config.*", + "app/**/*", + "scripts/**/*" + ], + + "mac": { + "icon": "assets/mac/appIcon.icns", + "hardenedRuntime": true, + "gatekeeperAssess": false, + "entitlements": "buildmac/entitlements.mac.plist", + "entitlementsInherit": "buildmac/entitlements.mac.plist", + "category": "public.app-category.utilities", + "asarUnpack": ["**/*.node"], + "target": ["dmg", "pkg"] + }, + + "dmg": { + "sign": false, + "artifactName": "Qortal-Hub-Setup-macOS.${ext}", + "icon": "assets/mac/appIcon.icns", + "iconSize": 100, + "contents": [ + { + "x": 130, + "y": 220 + }, + { + "x": 410, + "y": 220, + "type": "link", + "path": "/Applications" + } + ] + }, + + "pkg": { + "artifactName": "Qortal-Hub-Setup-macOS.${ext}", + "installLocation": "/Applications", + "background": { + "file": "buildmac/logo-hub.png", + "alignment": "bottomleft", + "scaling": "none" + }, + "allowAnywhere": true, + "allowCurrentUserHome": true, + "allowRootDirectory": true, + "isVersionChecked": true, + "isRelocatable": false, + "overwriteAction": "upgrade" + }, + + "directories": { + "buildResources": "resources" + }, + + "publish": [ + { + "provider": "github", + "owner": "Qortal", + "repo": "Qortal-Hub", + "releaseType": "draft" + } + ] +} \ No newline at end of file diff --git a/electron/package.json b/electron/package.json index 1fa9009..cc5c289 100644 --- a/electron/package.json +++ b/electron/package.json @@ -31,7 +31,7 @@ "electron:make": "npm run build && electron-builder build -c ./electron-builder.config.json -p always", "electron:make-local": "npm run build && electron-builder build -c ./electron-builder.config.json --publish=never", "electron:make-lin": "npm run build && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l", - "electron:make-mac": "npm run build && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac", + "electron:make-mac": "npm run build && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac dmg && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac pkg && electron-builder build -c ./electron-builder.config.mac.json --publish=never --mac zip", "electron:make-win": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w", "electron:make-arm": "npm run build && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64", "electron:make-all": "npm run build && electron-builder build -c ./electron-builder.config.win.json --publish=never -w && electron-builder build -c ./electron-builder.config.lin.json --publish=never -l && electron-builder build -c ./electron-builder.config.arm.json --publish=never --linux --arm64" @@ -58,4 +58,4 @@ "capacitor", "electron" ] -} +} \ No newline at end of file From a1bcb1cb665e016076de03afe3b9afd403267a83 Mon Sep 17 00:00:00 2001 From: AlphaX-Qortal Date: Mon, 24 Feb 2025 11:46:13 +0100 Subject: [PATCH 103/119] Update electron builder --- electron/electron-builder.config.arm.json | 5 +- electron/electron-builder.config.mac.json | 6 +- electron/package-lock.json | 1864 ++++++++++++++++----- electron/package.json | 3 +- 4 files changed, 1440 insertions(+), 438 deletions(-) diff --git a/electron/electron-builder.config.arm.json b/electron/electron-builder.config.arm.json index fd1aea7..1490123 100644 --- a/electron/electron-builder.config.arm.json +++ b/electron/electron-builder.config.arm.json @@ -14,7 +14,8 @@ ], "linux": { "target": [ - "AppImage" + "AppImage", + "deb" ], "category": "Network", "packageCategory": "Network", @@ -25,7 +26,7 @@ "icon": "assets/png" }, "appImage": { - "artifactName": "Qortal-Hub-Setup-arm64_${version}.${ext}" + "artifactName": "Qortal-Hub-arm64_${version}.${ext}" }, "deb": { "artifactName": "Qortal-Hub-Setup-arm64_${version}.${ext}", diff --git a/electron/electron-builder.config.mac.json b/electron/electron-builder.config.mac.json index a38aefb..056babc 100644 --- a/electron/electron-builder.config.mac.json +++ b/electron/electron-builder.config.mac.json @@ -2,7 +2,7 @@ "appId": "org.Qortal.Qortal-Hub", "productName": "Qortal Hub", "copyright": "Copyright © 2021 - 2025 Qortal", - "artifactName": "Qortal-Hub-Setup-macOS.${ext}", + "artifactName": "Qortal-Hub-Setup-macOS_${version}.${ext}", "compression": "normal", @@ -33,7 +33,7 @@ "dmg": { "sign": false, - "artifactName": "Qortal-Hub-Setup-macOS.${ext}", + "artifactName": "Qortal-Hub-Setup-macOS_${version}.${ext}", "icon": "assets/mac/appIcon.icns", "iconSize": 100, "contents": [ @@ -51,7 +51,7 @@ }, "pkg": { - "artifactName": "Qortal-Hub-Setup-macOS.${ext}", + "artifactName": "Qortal-Hub-Setup-macOS_${version}.${ext}", "installLocation": "/Applications", "background": { "file": "buildmac/logo-hub.png", diff --git a/electron/package-lock.json b/electron/package-lock.json index fb53e72..c1b2723 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -1,12 +1,12 @@ { "name": "qortal-hub", - "version": "0.3.9", + "version": "0.5.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "qortal-hub", - "version": "0.3.9", + "version": "0.5.2", "license": "MIT", "dependencies": { "@capacitor-community/electron": "^5.0.0", @@ -20,9 +20,8 @@ }, "devDependencies": { "@electron/notarize": "^2.5.0", - "@electron/rebuild": "^3.2.10", "electron": "^26.2.2", - "electron-builder": "~23.6.0", + "electron-builder": "^25.1.8", "shelljs": "^0.8.5", "typescript": "^5.0.4" } @@ -104,6 +103,56 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/@electron/asar": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.3.1.tgz", + "integrity": "sha512-WtpC/+34p0skWZiarRjLAyqaAX78DofhDxnREy/V5XHfu1XEXbFCSSMcDQ6hNCPJFaPy8/NnUgYuf9uiCkvKPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^5.0.0", + "glob": "^7.1.6", + "minimatch": "^3.0.4" + }, + "bin": { + "asar": "bin/asar.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@electron/asar/node_modules/commander": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@electron/asar/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@electron/get": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", @@ -161,31 +210,6 @@ "node": ">= 4.0.0" } }, - "node_modules/@electron/node-gyp": { - "version": "10.2.0-electron.1", - "resolved": "git+ssh://git@github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", - "integrity": "sha512-CrYo6TntjpoMO1SHjl5Pa/JoUsECNqNdB7Kx49WLQpWzPw53eEITJ2Hs9fh/ryUYDn4pxZz11StaBYBrLFJdqg==", - "dev": true, - "license": "MIT", - "dependencies": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^8.1.0", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.2.1", - "nopt": "^6.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "tar": "^6.2.1", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" - }, - "engines": { - "node": ">=12.13.0" - } - }, "node_modules/@electron/notarize": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", @@ -230,36 +254,29 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/@electron/rebuild": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.7.1.tgz", - "integrity": "sha512-sKGD+xav4Gh25+LcLY0rjIwcCFTw+f/HU1pB48UVbwxXXRGaXEqIH0AaYKN46dgd/7+6kuiDXzoyAEvx1zCsdw==", + "node_modules/@electron/osx-sign": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz", + "integrity": "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "@electron/node-gyp": "git+https://github.com/electron/node-gyp.git#06b29aafb7708acef8b3669835c8a7857ebc92d2", - "@malept/cross-spawn-promise": "^2.0.0", - "chalk": "^4.0.0", - "debug": "^4.1.1", - "detect-libc": "^2.0.1", + "compare-version": "^0.1.2", + "debug": "^4.3.4", "fs-extra": "^10.0.0", - "got": "^11.7.0", - "node-abi": "^3.45.0", - "node-api-version": "^0.2.0", - "ora": "^5.1.0", - "read-binary-file-arch": "^1.0.6", - "semver": "^7.3.5", - "tar": "^6.0.5", - "yargs": "^17.0.1" + "isbinaryfile": "^4.0.8", + "minimist": "^1.2.6", + "plist": "^3.0.5" }, "bin": { - "electron-rebuild": "lib/cli.js" + "electron-osx-flat": "bin/electron-osx-flat.js", + "electron-osx-sign": "bin/electron-osx-sign.js" }, "engines": { - "node": ">=12.13.0" + "node": ">=12.0.0" } }, - "node_modules/@electron/rebuild/node_modules/fs-extra": { + "node_modules/@electron/osx-sign/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", @@ -274,7 +291,20 @@ "node": ">=12" } }, - "node_modules/@electron/rebuild/node_modules/jsonfile": { + "node_modules/@electron/osx-sign/node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/@electron/osx-sign/node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", @@ -288,74 +318,48 @@ } }, "node_modules/@electron/universal": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.2.1.tgz", - "integrity": "sha512-7323HyMh7KBAl/nPDppdLsC87G6RwRU02dy5FPeGB1eS7rUePh55+WNWiDPLhFQqqVPHzh77M69uhmoT8XnwMQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz", + "integrity": "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==", "dev": true, "license": "MIT", "dependencies": { - "@malept/cross-spawn-promise": "^1.1.0", - "asar": "^3.1.0", + "@electron/asar": "^3.2.7", + "@malept/cross-spawn-promise": "^2.0.0", "debug": "^4.3.1", - "dir-compare": "^2.4.0", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4", - "plist": "^3.0.4" + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" }, "engines": { - "node": ">=8.6" + "node": ">=16.4" } }, - "node_modules/@electron/universal/node_modules/@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], - "license": "Apache-2.0", - "dependencies": { - "cross-spawn": "^7.0.1" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@electron/universal/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" + "balanced-match": "^1.0.0" } }, - "node_modules/@electron/universal/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "universalify": "^2.0.0" + "brace-expansion": "^2.0.1" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@gar/promisify": { @@ -598,6 +602,109 @@ "node": ">=16.0.0" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@malept/cross-spawn-promise": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", @@ -747,6 +854,17 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", @@ -815,18 +933,6 @@ "@types/node": "*" } }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", @@ -844,18 +950,10 @@ "@types/node": "*" } }, - "node_modules/@types/minimatch": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", - "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", - "dev": true, - "license": "MIT", - "optional": true - }, "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", "dev": true, "license": "MIT" }, @@ -910,23 +1008,6 @@ "license": "MIT", "optional": true }, - "node_modules/@types/yargs": { - "version": "17.0.33", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", - "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true, - "license": "MIT" - }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", @@ -948,9 +1029,9 @@ } }, "node_modules/7zip-bin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.1.1.tgz", - "integrity": "sha512-sAP4LldeWNz0lNzmTird3uWfFDWWTeg6V/MsmyyLR9X1idwKBWIgt/ZvinqQldJm3LecKEs1emkbquO6PCiLVQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", + "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", "dev": true, "license": "MIT" }, @@ -1075,48 +1156,121 @@ } }, "node_modules/app-builder-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", - "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", + "version": "5.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.10.tgz", + "integrity": "sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==", "dev": true, "license": "MIT" }, "node_modules/app-builder-lib": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-23.6.0.tgz", - "integrity": "sha512-dQYDuqm/rmy8GSCE6Xl/3ShJg6Ab4bZJMT8KaTKGzT436gl1DN4REP3FCWfXoh75qGTJ+u+WsdnnpO9Jl8nyMA==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-25.1.8.tgz", + "integrity": "sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==", "dev": true, "license": "MIT", "dependencies": { "@develar/schema-utils": "~2.6.5", - "@electron/universal": "1.2.1", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.1", + "@electron/rebuild": "3.6.1", + "@electron/universal": "2.0.1", "@malept/flatpak-bundler": "^0.4.0", - "7zip-bin": "~5.1.1", + "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "23.6.0", - "builder-util-runtime": "9.1.1", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "chromium-pickle-js": "^0.2.0", + "config-file-ts": "0.2.8-rc1", "debug": "^4.3.4", - "ejs": "^3.1.7", - "electron-osx-sign": "^0.6.0", - "electron-publish": "23.6.0", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", + "ejs": "^3.1.8", + "electron-publish": "25.1.7", "form-data": "^4.0.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "is-ci": "^3.0.0", - "isbinaryfile": "^4.0.10", + "isbinaryfile": "^5.0.0", "js-yaml": "^4.1.0", + "json5": "^2.2.3", "lazy-val": "^1.0.5", - "minimatch": "^3.1.2", - "read-config-file": "6.2.0", + "minimatch": "^10.0.0", + "resedit": "^1.7.0", "sanitize-filename": "^1.6.3", - "semver": "^7.3.7", - "tar": "^6.1.11", + "semver": "^7.3.8", + "tar": "^6.1.12", "temp-file": "^3.4.0" }, "engines": { "node": ">=14.0.0" + }, + "peerDependencies": { + "dmg-builder": "25.1.8", + "electron-builder-squirrel-windows": "25.1.8" + } + }, + "node_modules/app-builder-lib/node_modules/@electron/rebuild": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.1.tgz", + "integrity": "sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "node-abi": "^3.45.0", + "node-api-version": "^0.2.0", + "node-gyp": "^9.0.0", + "ora": "^5.1.0", + "read-binary-file-arch": "^1.0.6", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/app-builder-lib/node_modules/@types/fs-extra": { + "version": "9.0.13", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", + "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/app-builder-lib/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/app-builder-lib/node_modules/builder-util-runtime": { + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", + "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/app-builder-lib/node_modules/fs-extra": { @@ -1147,52 +1301,80 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "license": "Python-2.0" - }, - "node_modules/asar": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/asar/-/asar-3.2.0.tgz", - "integrity": "sha512-COdw2ZQvKdFGFxXwX3oYh2/sOsJWJegrdJCGxnN4MZ7IULgRBp9P6665aqj9z1v9VwP4oP1hRBojRDQ//IGgAg==", - "deprecated": "Please use @electron/asar moving forward. There is no API change, just a package name change", + "node_modules/app-builder-lib/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "chromium-pickle-js": "^0.2.0", - "commander": "^5.0.0", - "glob": "^7.1.6", - "minimatch": "^3.0.4" - }, - "bin": { - "asar": "bin/asar.js" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10.12.0" + "node": "20 || >=22" }, - "optionalDependencies": { - "@types/glob": "^7.1.1" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/asar/node_modules/commander": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", - "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", "dev": true, "license": "MIT", + "peer": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, "engines": { "node": ">= 6" } }, - "node_modules/asar/node_modules/glob": { + "node_modules/archiver-utils/node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, "license": "ISC", + "peer": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -1208,6 +1390,63 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -1404,24 +1643,6 @@ "ieee754": "^1.1.13" } }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true, - "license": "MIT" - }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -1431,23 +1652,6 @@ "node": "*" } }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha512-tcBWO2Dl4e7Asr9hTGcpVrCe+F7DubpmqWCTbj4FHLmjqO2hIaC383acQubWtRJhdceqs5uBHs6Es+Sk//RKiQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true, - "license": "MIT" - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -1456,24 +1660,23 @@ "license": "MIT" }, "node_modules/builder-util": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-23.6.0.tgz", - "integrity": "sha512-QiQHweYsh8o+U/KNCZFSvISRnvRctb8m/2rB2I1JdByzvNKxPeFLlHFRPQRXab6aYeXc18j9LpsDLJ3sGQmWTQ==", + "version": "25.1.7", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-25.1.7.tgz", + "integrity": "sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==", "dev": true, "license": "MIT", "dependencies": { "@types/debug": "^4.1.6", - "@types/fs-extra": "^9.0.11", - "7zip-bin": "~5.1.1", - "app-builder-bin": "4.0.0", + "7zip-bin": "~5.2.0", + "app-builder-bin": "5.0.0-alpha.10", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.1.1", - "chalk": "^4.1.1", + "builder-util-runtime": "9.2.10", + "chalk": "^4.1.2", "cross-spawn": "^7.0.3", "debug": "^4.3.4", - "fs-extra": "^10.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", + "fs-extra": "^10.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", "is-ci": "^3.0.0", "js-yaml": "^4.1.0", "source-map-support": "^0.5.19", @@ -1494,14 +1697,28 @@ "node": ">=12.0.0" } }, - "node_modules/builder-util/node_modules/@types/fs-extra": { - "version": "9.0.13", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", - "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", + "node_modules/builder-util/node_modules/agent-base": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/builder-util/node_modules/builder-util-runtime": { + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", + "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", "dev": true, "license": "MIT", "dependencies": { - "@types/node": "*" + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/builder-util/node_modules/fs-extra": { @@ -1519,6 +1736,34 @@ "node": ">=12" } }, + "node_modules/builder-util/node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/builder-util/node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/builder-util/node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -1653,6 +1898,20 @@ "node": ">=8" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1847,14 +2106,14 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "license": "MIT" }, - "node_modules/colors": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.0.3.tgz", - "integrity": "sha512-pFGrxThWcWQ2MsAz6RtgeWe4NK2kUE1WfsrvvlctdII745EW9I0yflqhe7++M5LEc7bV2c/9/5zc8sFcpL0Drw==", + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.1.90" + "license": "ISC", + "bin": { + "color-support": "bin.js" } }, "node_modules/combined-stream": { @@ -1889,6 +2148,23 @@ "node": ">=0.10.0" } }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1896,13 +2172,87 @@ "dev": true, "license": "MIT" }, + "node_modules/config-file-ts": { + "version": "0.2.8-rc1", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", + "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^10.3.12", + "typescript": "^5.4.3" + } + }, + "node_modules/config-file-ts/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/config-file-ts/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/config-file-ts/node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true, + "license": "ISC" + }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", "dev": true, - "license": "MIT", - "optional": true + "license": "MIT" }, "node_modules/crc": { "version": "3.8.0", @@ -1915,6 +2265,35 @@ "buffer": "^5.1.0" } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -2054,6 +2433,13 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true, + "license": "MIT" + }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -2073,58 +2459,27 @@ "optional": true }, "node_modules/dir-compare": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-2.4.0.tgz", - "integrity": "sha512-l9hmu8x/rjVC9Z2zmGzkhOEowZvW7pmYws5CWHutg8u1JgvsKWMx7Q/UODeu4djLZ4FgW5besw5yvMQnBHzuCA==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", "dev": true, "license": "MIT", "dependencies": { - "buffer-equal": "1.0.0", - "colors": "1.0.3", - "commander": "2.9.0", - "minimatch": "3.0.4" - }, - "bin": { - "dircompare": "src/cli/dircompare.js" - } - }, - "node_modules/dir-compare/node_modules/commander": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", - "integrity": "sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, - "engines": { - "node": ">= 0.6.x" - } - }, - "node_modules/dir-compare/node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " } }, "node_modules/dmg-builder": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-23.6.0.tgz", - "integrity": "sha512-jFZvY1JohyHarIAlTbfQOk+HnceGjjAdFjVn3n8xlDWKsYNqbO4muca6qXEZTfGXeQMG7TYim6CeS5XKSfSsGA==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-25.1.8.tgz", + "integrity": "sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==", "dev": true, "license": "MIT", "dependencies": { - "app-builder-lib": "23.6.0", - "builder-util": "23.6.0", - "builder-util-runtime": "9.1.1", - "fs-extra": "^10.0.0", + "app-builder-lib": "25.1.8", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", + "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" }, @@ -2132,6 +2487,20 @@ "dmg-license": "^1.0.11" } }, + "node_modules/dmg-builder/node_modules/builder-util-runtime": { + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", + "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/dmg-builder/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -2188,21 +2557,55 @@ } }, "node_modules/dotenv": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", "dev": true, "license": "BSD-2-Clause", "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, - "license": "BSD-2-Clause" + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", @@ -2239,24 +2642,22 @@ } }, "node_modules/electron-builder": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-23.6.0.tgz", - "integrity": "sha512-y8D4zO+HXGCNxFBV/JlyhFnoQ0Y0K7/sFH+XwIbj47pqaW8S6PGYQbjoObolKBR1ddQFPt4rwp4CnwMJrW3HAw==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-25.1.8.tgz", + "integrity": "sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==", "dev": true, "license": "MIT", "dependencies": { - "@types/yargs": "^17.0.1", - "app-builder-lib": "23.6.0", - "builder-util": "23.6.0", - "builder-util-runtime": "9.1.1", - "chalk": "^4.1.1", - "dmg-builder": "23.6.0", - "fs-extra": "^10.0.0", + "app-builder-lib": "25.1.8", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", + "chalk": "^4.1.2", + "dmg-builder": "25.1.8", + "fs-extra": "^10.1.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", - "read-config-file": "6.2.0", - "simple-update-notifier": "^1.0.7", - "yargs": "^17.5.1" + "simple-update-notifier": "2.0.0", + "yargs": "^17.6.2" }, "bin": { "electron-builder": "cli.js", @@ -2266,6 +2667,64 @@ "node": ">=14.0.0" } }, + "node_modules/electron-builder-squirrel-windows": { + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-25.1.8.tgz", + "integrity": "sha512-2ntkJ+9+0GFP6nAISiMabKt6eqBB0kX1QqHNWFWAXgi0VULKGisM46luRFpIBiU3u/TDmhZMM8tzvo2Abn3ayg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "app-builder-lib": "25.1.8", + "archiver": "^5.3.1", + "builder-util": "25.1.7", + "fs-extra": "^10.1.0" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/electron-builder-squirrel-windows/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/electron-builder/node_modules/builder-util-runtime": { + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", + "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/electron-builder/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -2303,71 +2762,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/electron-osx-sign": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.6.0.tgz", - "integrity": "sha512-+hiIEb2Xxk6eDKJ2FFlpofCnemCbjbT5jz+BKGpVBrRNT3kWTGs4DfNX6IzGwgi33hUcXF+kFs9JW+r6Wc1LRg==", - "deprecated": "Please use @electron/osx-sign moving forward. Be aware the API is slightly different", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "bluebird": "^3.5.0", - "compare-version": "^0.1.2", - "debug": "^2.6.8", - "isbinaryfile": "^3.0.2", - "minimist": "^1.2.0", - "plist": "^3.0.1" - }, - "bin": { - "electron-osx-flat": "bin/electron-osx-flat.js", - "electron-osx-sign": "bin/electron-osx-sign.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/electron-osx-sign/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/electron-osx-sign/node_modules/isbinaryfile": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.3.tgz", - "integrity": "sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-alloc": "^1.2.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/electron-osx-sign/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true, - "license": "MIT" - }, "node_modules/electron-publish": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-23.6.0.tgz", - "integrity": "sha512-jPj3y+eIZQJF/+t5SLvsI5eS4mazCbNYqatv5JihbqOstIM13k0d1Z3vAWntvtt13Itl61SO6seicWdioOU5dg==", + "version": "25.1.7", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-25.1.7.tgz", + "integrity": "sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==", "dev": true, "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "23.6.0", - "builder-util-runtime": "9.1.1", - "chalk": "^4.1.1", - "fs-extra": "^10.0.0", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", + "chalk": "^4.1.2", + "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", "mime": "^2.5.2" } @@ -2382,6 +2788,20 @@ "@types/node": "*" } }, + "node_modules/electron-publish/node_modules/builder-util-runtime": { + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", + "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "sax": "^1.2.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/electron-publish/node_modules/fs-extra": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", @@ -2579,7 +2999,6 @@ "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" } @@ -2590,7 +3009,35 @@ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, "license": "MIT", - "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, "engines": { "node": ">= 0.4" } @@ -2743,21 +3190,60 @@ "node": ">=8" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/form-data": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", - "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" }, "engines": { "node": ">= 6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -2826,6 +3312,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2836,6 +3343,45 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", @@ -2982,7 +3528,6 @@ "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "optional": true, "engines": { "node": ">= 0.4" }, @@ -3022,13 +3567,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "node_modules/graceful-readlink": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==", - "dev": true, - "license": "MIT" - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3052,6 +3590,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true, + "license": "ISC" + }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -3402,14 +3976,22 @@ "node": ">=8" } }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/isbinaryfile": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", - "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.4.tgz", + "integrity": "sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 8.0.0" + "node": ">= 18.0.0" }, "funding": { "url": "https://github.com/sponsors/gjtorikian/" @@ -3421,6 +4003,22 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jake": { "version": "10.9.2", "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", @@ -3526,6 +4124,56 @@ "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", "license": "MIT" }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", @@ -3539,18 +4187,58 @@ "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", "license": "MIT" }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "license": "MIT" }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", "license": "MIT" }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true, + "license": "MIT", + "peer": true + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3642,6 +4330,16 @@ "node": ">=10" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -3896,6 +4594,71 @@ "semver": "^7.3.5" } }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/nopt": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", @@ -3934,6 +4697,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -4020,6 +4800,22 @@ "node": ">=8" } }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-map": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", @@ -4036,6 +4832,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -4093,6 +4896,21 @@ "node": ">=16 || 14 >=14.17" } }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -4125,15 +4943,13 @@ "node": ">=10.4.0" } }, - "node_modules/proc-log": { + "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", - "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "license": "MIT", + "peer": true }, "node_modules/progress": { "version": "2.0.3", @@ -4235,23 +5051,6 @@ "read-binary-file-arch": "cli.js" } }, - "node_modules/read-config-file": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.2.0.tgz", - "integrity": "sha512-gx7Pgr5I56JtYz+WuqEbQHj/xWo+5Vwua2jhb1VwM4Wid5PqYmZ4i00ZB0YEGIfkVBsCv9UrjgyqCiQfS/Oosg==", - "dev": true, - "license": "MIT", - "dependencies": { - "dotenv": "^9.0.2", - "dotenv-expand": "^5.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.0", - "lazy-val": "^1.0.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -4266,6 +5065,42 @@ "node": ">= 6" } }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -4300,6 +5135,24 @@ "node": ">=0.10.0" } }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, "node_modules/resolve": { "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", @@ -4540,6 +5393,13 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true, + "license": "ISC" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -4608,26 +5468,16 @@ "license": "ISC" }, "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, "license": "MIT", "dependencies": { - "semver": "~7.0.0" + "semver": "^7.5.3" }, "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=10" } }, "node_modules/sisteransi": { @@ -4777,6 +5627,22 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4789,6 +5655,20 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/sumchecker": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", @@ -4844,6 +5724,24 @@ "node": ">=10" } }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/tar/node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -5118,6 +6016,16 @@ "node": ">= 8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -5135,6 +6043,25 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -5227,6 +6154,81 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } } } } diff --git a/electron/package.json b/electron/package.json index cc5c289..e2c4966 100644 --- a/electron/package.json +++ b/electron/package.json @@ -48,8 +48,7 @@ }, "devDependencies": { "electron": "^26.2.2", - "electron-builder": "~23.6.0", - "@electron/rebuild": "^3.2.10", + "electron-builder": "^25.1.8", "@electron/notarize": "^2.5.0", "typescript": "^5.0.4", "shelljs": "^0.8.5" From 7222a082e05b6af39273f886398a5d7869fc1a57 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Mon, 24 Feb 2025 18:41:50 +0200 Subject: [PATCH 104/119] upgrade electron and fix apikey not-authenticated --- electron/package-lock.json | 24 ++++---- electron/package.json | 2 +- src/ExtStates/NotAuthenticated.tsx | 93 +++++++++++++++++++++--------- 3 files changed, 79 insertions(+), 40 deletions(-) diff --git a/electron/package-lock.json b/electron/package-lock.json index c1b2723..b3b1a6b 100644 --- a/electron/package-lock.json +++ b/electron/package-lock.json @@ -20,7 +20,7 @@ }, "devDependencies": { "@electron/notarize": "^2.5.0", - "electron": "^26.2.2", + "electron": "^32.3.1", "electron-builder": "^25.1.8", "shelljs": "^0.8.5", "typescript": "^5.0.4" @@ -2624,14 +2624,14 @@ } }, "node_modules/electron": { - "version": "26.6.10", - "resolved": "https://registry.npmjs.org/electron/-/electron-26.6.10.tgz", - "integrity": "sha512-pV2SD0RXzAiNRb/2yZrsVmVkBOMrf+DVsPulIgRjlL0+My9BL5spFuhHVMQO9yHl9tFpWtuRpQv0ofM/i9P8xg==", + "version": "32.3.1", + "resolved": "https://registry.npmjs.org/electron/-/electron-32.3.1.tgz", + "integrity": "sha512-gjHN9NagNajvllKrTZVwGuCqX1hPF7OI6hkCDFRCbqT5Zr05d17qjDhjyTNBmTca2DpvZIYQMRbqieNCcglVYQ==", "dev": true, "hasInstallScript": true, "dependencies": { "@electron/get": "^2.0.0", - "@types/node": "^18.11.18", + "@types/node": "^20.9.0", "extract-zip": "^2.0.1" }, "bin": { @@ -2909,18 +2909,18 @@ } }, "node_modules/electron/node_modules/@types/node": { - "version": "18.19.68", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.68.tgz", - "integrity": "sha512-QGtpFH1vB99ZmTa63K4/FU8twThj4fuVSBkGddTp7uIL/cuoLWIUSL2RcOaigBhfR+hg5pgGkBnkoOxrTVBMKw==", + "version": "20.17.19", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.19.tgz", + "integrity": "sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==", "dev": true, "dependencies": { - "undici-types": "~5.26.4" + "undici-types": "~6.19.2" } }, "node_modules/electron/node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, "node_modules/elementtree": { diff --git a/electron/package.json b/electron/package.json index e2c4966..b520190 100644 --- a/electron/package.json +++ b/electron/package.json @@ -47,7 +47,7 @@ "electron-window-state": "^5.0.3" }, "devDependencies": { - "electron": "^26.2.2", + "electron": "^32.3.1", "electron-builder": "^25.1.8", "@electron/notarize": "^2.5.0", "typescript": "^5.0.4", diff --git a/src/ExtStates/NotAuthenticated.tsx b/src/ExtStates/NotAuthenticated.tsx index 6bfd456..a1aaf19 100644 --- a/src/ExtStates/NotAuthenticated.tsx +++ b/src/ExtStates/NotAuthenticated.tsx @@ -191,28 +191,45 @@ export const NotAuthenticated = ({ const validateApiKey = useCallback(async (key, fromStartUp) => { try { + if(key === "isGateway") return const isLocalKey = cleanUrl(key?.url) === "127.0.0.1:12391"; - if(fromStartUp && key?.url && key?.apikey && !isLocalKey && !gateways.some(gateway => apiKey?.url?.includes(gateway))){ + if (fromStartUp && key?.url && key?.apikey && !isLocalKey && !gateways.some(gateway => key?.url?.includes(gateway))) { setCurrentNode({ url: key?.url, apikey: key?.apikey, }); - const url = `${key?.url}/lists/testlist?apiKey=${key?.apikey}`; - const response = await fetch(url); - - // Assuming the response is in plain text and will be 'true' or 'false' - const data = await response.json(); - if (data && !data?.error) { - setIsValidApiKey(true); - setUseLocalNode(true); - return - } + let isValid = false + + const url = `${key?.url}/admin/settings/localAuthBypassEnabled`; + const response = await fetch(url); + + // Assuming the response is in plain text and will be 'true' or 'false' + const data = await response.text(); + if(data && data === 'true'){ + isValid = true + } else { + const url2 = `${key?.url}/admin/apikey/test?apiKey=${key?.apikey}`; + const response2 = await fetch(url2); + + // Assuming the response is in plain text and will be 'true' or 'false' + const data2 = await response2.text(); + if (data2 === "true") { + isValid = true + } + } + + if (isValid) { + setIsValidApiKey(true); + setUseLocalNode(true); + return + } + } if (!currentNodeRef.current) return; const stillHasLocal = await checkIfUserHasLocalNode() - + if (isLocalKey && !stillHasLocal && !fromStartUp) { throw new Error("Please turn on your local node"); } @@ -235,13 +252,29 @@ export const NotAuthenticated = ({ } else if (currentNodeRef.current) { payload = currentNodeRef.current; } - const url = `${payload?.url}/lists/testlist?apiKey=${payload?.apikey}`; + let isValid = false + + + const url = `${payload?.url}/admin/settings/localAuthBypassEnabled`; const response = await fetch(url); // Assuming the response is in plain text and will be 'true' or 'false' - const data = await response.json(); + const data = await response.text(); + if(data && data === 'true'){ + isValid = true + } else { + const url2 = `${payload?.url}/admin/apikey/test?apiKey=${payload?.apikey}`; + const response2 = await fetch(url2); + + // Assuming the response is in plain text and will be 'true' or 'false' + const data2 = await response2.text(); + if (data2 === "true") { + isValid = true + } + } + - if (data && !data?.error) { + if (isValid) { window .sendMessage("setApiKey", payload) .then((response) => { @@ -263,21 +296,24 @@ export const NotAuthenticated = ({ } else { setIsValidApiKey(false); setUseLocalNode(false); - setInfoSnack({ - type: "error", - message: "Select a valid apikey", - }); - setOpenSnack(true); + if(!fromStartUp){ + setInfoSnack({ + type: "error", + message: "Select a valid apikey", + }); + setOpenSnack(true); + } + } } catch (error) { setIsValidApiKey(false); setUseLocalNode(false); - if(fromStartUp){ + if (fromStartUp) { setCurrentNode({ url: "http://127.0.0.1:12391", }); window - .sendMessage("setApiKey", null) + .sendMessage("setApiKey", "isGateway") .then((response) => { if (response) { setApiKey(null); @@ -292,11 +328,13 @@ export const NotAuthenticated = ({ }); return } + if(!fromStartUp){ setInfoSnack({ type: "error", message: error?.message || "Select a valid apikey", }); setOpenSnack(true); + } console.error("Error validating API key:", error); } }, []); @@ -318,7 +356,7 @@ export const NotAuthenticated = ({ url: removeTrailingSlash(url), apikey: customApikey, }); - } else if (url && customApikey) { + } else if (url) { nodes.push({ url: removeTrailingSlash(url), apikey: customApikey, @@ -326,9 +364,7 @@ export const NotAuthenticated = ({ } setCustomNodes(nodes); - if(window?.electronAPI?.setAllowedDomains){ - window.electronAPI.setAllowedDomains(nodes?.map((node)=> node.url)) - } + setCustomNodeToSaveIndex(null); if (!nodes) return; window @@ -338,6 +374,9 @@ export const NotAuthenticated = ({ setMode("list"); setUrl("http://"); setCustomApiKey(""); + if(window?.electronAPI?.setAllowedDomains){ + window.electronAPI.setAllowedDomains(nodes?.map((node) => node.url)) + } // add alert if needed } }) @@ -810,7 +849,7 @@ export const NotAuthenticated = ({ - - {/* Option 2: Send QORT */} - - - - + {open && ( + event.stopPropagation(), // Stop propagation inside popover + }, + }} + > + + {/* Option 1: Message */} + + + {/* Option 2: Send QORT */} + + + + + )} ); }; From 19b183aabf88d8633f93041c0c2ee1c47a7ad070 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 26 Feb 2025 02:51:03 +0200 Subject: [PATCH 108/119] fix --- src/components/Chat/MessageItem.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/Chat/MessageItem.tsx b/src/components/Chat/MessageItem.tsx index 1fd7203..8b43e77 100644 --- a/src/components/Chat/MessageItem.tsx +++ b/src/components/Chat/MessageItem.tsx @@ -311,10 +311,12 @@ const onSeenFunc = useCallback(()=> { )} - + {htmlText && ( + htmlContent={htmlText} + /> + )} + {message?.decryptedData?.type === "notification" ? ( From ce530293ab5339deabf3bda17d5d16274870e9c8 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 26 Feb 2025 16:03:20 +0200 Subject: [PATCH 109/119] blocking --- src/App.tsx | 16 +- src/background-cases.ts | 80 +++++++++ src/background.ts | 15 +- src/components/Chat/ChatGroup.tsx | 33 +++- src/components/Chat/MessageItem.tsx | 10 +- src/components/Group/BlockedUsersModal.tsx | 190 ++++++++++++++++++++ src/components/Group/Group.tsx | 38 +++- src/components/Group/WebsocketActive.tsx | 2 +- src/components/Group/useBlockUsers.tsx | 192 +++++++++++++++++++++ src/components/WrapperUserAction.tsx | 63 ++++++- 10 files changed, 617 insertions(+), 22 deletions(-) create mode 100644 src/components/Group/BlockedUsersModal.tsx create mode 100644 src/components/Group/useBlockUsers.tsx diff --git a/src/App.tsx b/src/App.tsx index c6dbd42..3453234 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -143,6 +143,7 @@ import { Minting } from "./components/Minting/Minting"; import { isRunningGateway } from "./qortalRequests"; import { QMailStatus } from "./components/QMailStatus"; import { GlobalActions } from "./components/GlobalActions/GlobalActions"; +import { useBlockedAddresses } from "./components/Group/useBlockUsers"; type extStates = | "not-authenticated" @@ -402,6 +403,9 @@ function App() { const [isOpenSendQort, setIsOpenSendQort] = useState(false); const [isOpenSendQortSuccess, setIsOpenSendQortSuccess] = useState(false); const [rootHeight, setRootHeight] = useState("100%"); + const {isUserBlocked, + addToBlockList, + removeBlockFromList, getAllBlockedUsers} = useBlockedAddresses() const [currentNode, setCurrentNode] = useState({ url: "http://127.0.0.1:12391", }); @@ -1630,7 +1634,11 @@ function App() { infoSnackCustom: infoSnack, setInfoSnackCustom: setInfoSnack, downloadResource, - getIndividualUserInfo + getIndividualUserInfo, + isUserBlocked, + addToBlockList, + removeBlockFromList, + getAllBlockedUsers }} > @@ -1751,7 +1759,11 @@ function App() { infoSnackCustom: infoSnack, setInfoSnackCustom: setInfoSnack, downloadResource, - getIndividualUserInfo + getIndividualUserInfo, + isUserBlocked, + addToBlockList, + removeBlockFromList, + getAllBlockedUsers }} > { }, }); const data = await response.json(); + const copyGroups = [...(data?.groups || [])] + const findIndex = copyGroups?.findIndex(item => item?.groupId === 0) + if(findIndex !== -1){ + copyGroups[findIndex] = { + ...(copyGroups[findIndex] || {}), + groupId: "0" + } + } + const filteredGroups = copyGroups - const filteredGroups = - data.groups?.filter((item) => item?.groupId !== 0) || []; const sortedGroups = filteredGroups.sort( (a, b) => (b.timestamp || 0) - (a.timestamp || 0) ); diff --git a/src/components/Chat/ChatGroup.tsx b/src/components/Chat/ChatGroup.tsx index c41265d..e054bd9 100644 --- a/src/components/Chat/ChatGroup.tsx +++ b/src/components/Chat/ChatGroup.tsx @@ -1,4 +1,4 @@ -import React, { useCallback, useEffect, useMemo, useReducer, useRef, useState } from 'react' +import React, { useCallback, useContext, useEffect, useMemo, useReducer, useRef, useState } from 'react' import { CreateCommonSecret } from './CreateCommonSecret' import { reusableGet } from '../../qdn/publish/pubish' import { uint8ArrayToObject } from '../../backgroundFunctions/encryption' @@ -10,11 +10,11 @@ import Tiptap from './TipTap' import { CustomButton } from '../../App-styles' import CircularProgress from '@mui/material/CircularProgress'; import { LoadingSnackbar } from '../Snackbar/LoadingSnackbar' -import { getBaseApiReact, getBaseApiReactSocket, isMobile, pauseAllQueues, resumeAllQueues } from '../../App' +import { getBaseApiReact, getBaseApiReactSocket, isMobile, MyContext, pauseAllQueues, resumeAllQueues } from '../../App' import { CustomizedSnackbars } from '../Snackbar/Snackbar' import { PUBLIC_NOTIFICATION_CODE_FIRST_SECRET_KEY } from '../../constants/codes' import { useMessageQueue } from '../../MessageQueueContext' -import { executeEvent } from '../../utils/events' +import { executeEvent, subscribeToEvent, unsubscribeFromEvent } from '../../utils/events' import { Box, ButtonBase, Divider, Typography } from '@mui/material' import ShortUniqueId from "short-unique-id"; import { ReplyPreview } from './MessageItem' @@ -28,6 +28,7 @@ import { throttle } from 'lodash' const uid = new ShortUniqueId({ length: 5 }); export const ChatGroup = ({selectedGroup, secretKey, setSecretKey, getSecretKey, myAddress, handleNewEncryptionNotification, hide, handleSecretKeyCreationInProgress, triedToFetchSecretKey, myName, balance, getTimestampEnterChatParent, hideView, isPrivate}) => { + const {isUserBlocked} = useContext(MyContext) const [messages, setMessages] = useState([]) const [chatReferences, setChatReferences] = useState({}) const [isSending, setIsSending] = useState(false) @@ -158,10 +159,28 @@ const [messageSize, setMessageSize] = useState(0) }) } + const updateChatMessagesWithBlocksFunc = (e) => { + if(e.detail){ + setMessages((prev)=> prev?.filter((item)=> { + return !isUserBlocked(item?.sender, item?.senderName) + })) + } + }; + + useEffect(() => { + subscribeToEvent("updateChatMessagesWithBlocks", updateChatMessagesWithBlocksFunc); + + return () => { + unsubscribeFromEvent("updateChatMessagesWithBlocks", updateChatMessagesWithBlocksFunc); + }; + }, []); + const middletierFunc = async (data: any, groupId: string) => { try { if (hasInitialized.current) { - decryptMessages(data, true); + const dataRemovedBlock = data?.filter((item)=> !isUserBlocked(item?.sender, item?.senderName)) + + decryptMessages(dataRemovedBlock, true); return; } hasInitialized.current = true; @@ -173,7 +192,11 @@ const [messageSize, setMessageSize] = useState(0) }, }); const responseData = await response.json(); - decryptMessages(responseData, false); + const dataRemovedBlock = responseData?.filter((item)=> { + return !isUserBlocked(item?.sender, item?.senderName) + }) + + decryptMessages(dataRemovedBlock, false); } catch (error) { console.error(error); } diff --git a/src/components/Chat/MessageItem.tsx b/src/components/Chat/MessageItem.tsx index 8b43e77..5123ee2 100644 --- a/src/components/Chat/MessageItem.tsx +++ b/src/components/Chat/MessageItem.tsx @@ -132,13 +132,16 @@ const onSeenFunc = useCallback(()=> { return ( - - - {message?.divide && ( + <> + {message?.divide && (
Unread messages below
)} + + + +
{
+ ); }); diff --git a/src/components/Group/BlockedUsersModal.tsx b/src/components/Group/BlockedUsersModal.tsx new file mode 100644 index 0000000..84fa3fa --- /dev/null +++ b/src/components/Group/BlockedUsersModal.tsx @@ -0,0 +1,190 @@ +import { + Box, + Button, + Dialog, + DialogActions, + DialogContent, + DialogContentText, + DialogTitle, + TextField, + Typography, +} from "@mui/material"; +import React, { useContext, useEffect, useState } from "react"; +import { MyContext } from "../../App"; +import { Spacer } from "../../common/Spacer"; +import { executeEvent } from "../../utils/events"; + +export const BlockedUsersModal = ({ close }) => { + const [hasChanged, setHasChanged] = useState(false); + const [value, setValue] = useState(""); + + const { getAllBlockedUsers, removeBlockFromList, addToBlockList } = useContext(MyContext); + const [blockedUsers, setBlockedUsers] = useState({ + addresses: {}, + names: {}, + }); + const fetchBlockedUsers = () => { + setBlockedUsers(getAllBlockedUsers()); + }; + + useEffect(() => { + fetchBlockedUsers(); + }, []); + return ( + + Blocked Users + + + { + setValue(e.target.value); + }} + /> + + + + {Object.entries(blockedUsers?.addresses).length > 0 && ( + <> + + + Blocked Users for Chat ( addresses ) + + + + )} + + + {Object.entries(blockedUsers?.addresses || {})?.map( + ([key, value]) => { + return ( + + {key} + + + ); + } + )} + + {Object.entries(blockedUsers?.names).length > 0 && ( + <> + + + Blocked Users for QDN and Chat (names) + + + + )} + + + {Object.entries(blockedUsers?.names || {})?.map(([key, value]) => { + return ( + + {key} + + + ); + })} + + + + + + + ); +}; diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index 73d80ba..48ef02c 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -77,9 +77,10 @@ import { AdminSpace } from "../Chat/AdminSpace"; import { useSetRecoilState } from "recoil"; import { addressInfoControllerAtom, selectedGroupIdAtom } from "../../atoms/global"; import { sortArrayByTimestampAndGroupName } from "../../utils/time"; - +import BlockIcon from '@mui/icons-material/Block'; import LockIcon from '@mui/icons-material/Lock'; import NoEncryptionGmailerrorredIcon from '@mui/icons-material/NoEncryptionGmailerrorred'; +import { BlockedUsersModal } from "./BlockedUsersModal"; export const getPublishesFromAdmins = async (admins: string[], groupId) => { @@ -419,6 +420,8 @@ export const Group = ({ const [groupAnnouncements, setGroupAnnouncements] = React.useState({}); const [defaultThread, setDefaultThread] = React.useState(null); const [isOpenDrawer, setIsOpenDrawer] = React.useState(false); + const [isOpenBlockedUserModal, setIsOpenBlockedUserModal] = React.useState(false); + const [hideCommonKeyPopup, setHideCommonKeyPopup] = React.useState(false); const [isLoadingGroupMessage, setIsLoadingGroupMessage] = React.useState(""); const [drawerMode, setDrawerMode] = React.useState("groups"); @@ -768,7 +771,10 @@ export const Group = ({ } if(isPrivate === false){ setTriedToFetchSecretKey(true); - getAdminsForPublic(selectedGroup) + if(selectedGroup?.groupId !== '0'){ + getAdminsForPublic(selectedGroup) + } + } }, [selectedGroup, isPrivate]); @@ -853,7 +859,7 @@ export const Group = ({ // Update the component state with the received 'sendqort' state setGroups(sortArrayByTimestampAndGroupName(message.payload)); getLatestRegularChat(message.payload); - setMemberGroups(message.payload); + setMemberGroups(message.payload?.filter((item)=> item?.groupId !== '0')); if (selectedGroupRef.current && groupSectionRef.current === "chat") { window.sendMessage("addTimestampEnterChat", { @@ -944,7 +950,7 @@ export const Group = ({ !initiatedGetMembers.current && selectedGroup?.groupId && secretKey && - admins.includes(myAddress) + admins.includes(myAddress) && selectedGroup?.groupId !== '0' ) { // getAdmins(selectedGroup?.groupId); getMembers(selectedGroup?.groupId); @@ -1998,9 +2004,11 @@ export const Group = ({ width: "100%", justifyContent: "center", padding: "10px", + gap: '10px' }} > {chatMode === "groups" && ( + <> { setOpenAddGroup(true); @@ -2013,6 +2021,22 @@ export const Group = ({ /> Group Mgmt + { + setIsOpenBlockedUserModal(true); + }} + sx={{ + minWidth: 'unset', + padding: '10px' + }} + > + + + )} {chatMode === "directs" && ( )}
- + {isOpenBlockedUserModal && ( + { + setIsOpenBlockedUserModal(false) + }} /> + )} {selectedDirect && !newChat && ( <> diff --git a/src/components/Group/WebsocketActive.tsx b/src/components/Group/WebsocketActive.tsx index 63359a4..b9da4d2 100644 --- a/src/components/Group/WebsocketActive.tsx +++ b/src/components/Group/WebsocketActive.tsx @@ -91,7 +91,7 @@ export const WebSocketActive = ({ myAddress, setIsLoadingGroups }) => { const sortedDirects = (data?.direct || []).filter(item => item?.name !== 'extension-proxy' && item?.address !== 'QSMMGSgysEuqDCuLw3S4cHrQkBrh3vP3VH' ).sort((a, b) => (b.timestamp || 0) - (a.timestamp || 0)); - + window.sendMessage("handleActiveGroupDataFromSocket", { groups: sortedGroups, directs: sortedDirects, diff --git a/src/components/Group/useBlockUsers.tsx b/src/components/Group/useBlockUsers.tsx new file mode 100644 index 0000000..05cbe90 --- /dev/null +++ b/src/components/Group/useBlockUsers.tsx @@ -0,0 +1,192 @@ +import React, { useCallback, useEffect, useRef } from "react"; +import { getBaseApiReact } from "../../App"; +import { truncate } from "lodash"; + + + +export const useBlockedAddresses = () => { + const userBlockedRef = useRef({}) + const userNamesBlockedRef = useRef({}) + + const getAllBlockedUsers = useCallback(()=> { + + return { + names: userNamesBlockedRef.current, + addresses: userBlockedRef.current + } + }, []) + + const isUserBlocked = useCallback((address, name)=> { + try { + if(!address) return false + if(userBlockedRef.current[address] || userNamesBlockedRef.current[name]) return true + return false + + + } catch (error) { + //error + } + }, []) + + useEffect(()=> { + const fetchBlockedList = async ()=> { + try { + const response = await new Promise((res, rej) => { + window.sendMessage("listActions", { + + type: 'get', + listName: `blockedAddresses`, + + }) + .then((response) => { + if (response.error) { + rej(response?.message); + return; + } else { + res(response); + } + }) + .catch((error) => { + console.error("Failed qortalRequest", error); + }); + }) + const blockedUsers = {} + response?.forEach((item)=> { + blockedUsers[item] = true + }) + userBlockedRef.current = blockedUsers + + const response2 = await new Promise((res, rej) => { + window.sendMessage("listActions", { + + type: 'get', + listName: `blockedNames`, + + }) + .then((response) => { + if (response.error) { + rej(response?.message); + return; + } else { + res(response); + } + }) + .catch((error) => { + console.error("Failed qortalRequest", error); + }); + }) + const blockedUsers2 = {} + response2?.forEach((item)=> { + blockedUsers2[item] = true + }) + userNamesBlockedRef.current = blockedUsers2 + + + } catch (error) { + console.error(error) + } + } + fetchBlockedList() + }, []) + + const removeBlockFromList = useCallback(async (address, name)=> { + await new Promise((res, rej) => { + window.sendMessage("listActions", { + + type: 'remove', + items: name ? [name] : [address], + listName: name ? 'blockedNames' : 'blockedAddresses' + + }) + .then((response) => { + if (response.error) { + rej(response?.message); + return; + } else { + if(!name){ + const copyObject = {...userBlockedRef.current} + delete copyObject[address] + userBlockedRef.current = copyObject + } else { + const copyObject = {...userNamesBlockedRef.current} + delete copyObject[name] + userNamesBlockedRef.current = copyObject + } + + res(response); + } + }) + .catch((error) => { + console.error("Failed qortalRequest", error); + }); + }) + if(name && userBlockedRef.current[address]){ + await new Promise((res, rej) => { + window.sendMessage("listActions", { + + type: 'remove', + items: !name ? [name] : [address], + listName: !name ? 'blockedNames' : 'blockedAddresses' + + }) + .then((response) => { + if (response.error) { + rej(response?.message); + return; + } else { + const copyObject = {...userBlockedRef.current} + delete copyObject[address] + userBlockedRef.current = copyObject + res(response); + } + }) + .catch((error) => { + console.error("Failed qortalRequest", error); + }); + }) + } + + }, []) + + const addToBlockList = useCallback(async (address, name)=> { + await new Promise((res, rej) => { + window.sendMessage("listActions", { + + type: 'add', + items: name ? [name] : [address], + listName: name ? 'blockedNames' : 'blockedAddresses' + + }) + .then((response) => { + if (response.error) { + rej(response?.message); + return; + } else { + if(name){ + + const copyObject = {...userNamesBlockedRef.current} + copyObject[name] = true + userNamesBlockedRef.current = copyObject + }else { + const copyObject = {...userBlockedRef.current} + copyObject[address] = true + userBlockedRef.current = copyObject + + } + + res(response); + } + }) + .catch((error) => { + console.error("Failed qortalRequest", error); + }); + }) + }, []) + + return { + isUserBlocked, + addToBlockList, + removeBlockFromList, + getAllBlockedUsers + }; +}; diff --git a/src/components/WrapperUserAction.tsx b/src/components/WrapperUserAction.tsx index f7af63e..8bcc03a 100644 --- a/src/components/WrapperUserAction.tsx +++ b/src/components/WrapperUserAction.tsx @@ -1,6 +1,7 @@ -import React, { useState } from 'react'; -import { Popover, Button, Box } from '@mui/material'; +import React, { useCallback, useContext, useEffect, useState } from 'react'; +import { Popover, Button, Box, CircularProgress } from '@mui/material'; import { executeEvent } from '../utils/events'; +import { MyContext } from '../App'; export const WrapperUserAction = ({ children, address, name, disabled }) => { const [anchorEl, setAnchorEl] = useState(null); @@ -12,9 +13,9 @@ export const WrapperUserAction = ({ children, address, name, disabled }) => { }; // Handle closing the Popover - const handleClose = () => { + const handleClose = useCallback(() => { setAnchorEl(null); - }; + }, []); // Determine if the popover is open const open = Boolean(anchorEl); @@ -120,9 +121,63 @@ export const WrapperUserAction = ({ children, address, name, disabled }) => { > Copy address +
)} ); }; + + +const BlockUser = ({address, name, handleClose})=> { + const [isAlreadyBlocked, setIsAlreadyBlocked] = useState(null) + const [isLoading, setIsLoading] = useState(false) + const {isUserBlocked, + addToBlockList, + removeBlockFromList} = useContext(MyContext) + +useEffect(()=> { + if(!address) return + setIsAlreadyBlocked(isUserBlocked(address, name)) +}, [address, setIsAlreadyBlocked, isUserBlocked, name]) + + return ( + + ) +} \ No newline at end of file From e5168d93d486541eabd41a7950b7cd72b5fd01cc Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 26 Feb 2025 16:17:48 +0200 Subject: [PATCH 110/119] fix --- src/components/Group/GroupJoinRequests.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Group/GroupJoinRequests.tsx b/src/components/Group/GroupJoinRequests.tsx index 4c484aa..03c2258 100644 --- a/src/components/Group/GroupJoinRequests.tsx +++ b/src/components/Group/GroupJoinRequests.tsx @@ -34,7 +34,7 @@ export const GroupJoinRequests = ({ myAddress, groups, setOpenManageMembers, get setLoading(true) let groupsAsAdmin = [] - const getAllGroupsAsAdmin = groups.map(async (group)=> { + const getAllGroupsAsAdmin = groups.filter((item)=> item.groupId !== '0').map(async (group)=> { const isAdminResponse = await requestQueueGroupJoinRequests.enqueue(()=> { return fetch( From 02b9b054190f92806f1a313e70e3bb3dfe0d01f0 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Wed, 26 Feb 2025 16:44:34 +0200 Subject: [PATCH 111/119] fix edit --- src/components/Chat/MessageDisplay.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/Chat/MessageDisplay.tsx b/src/components/Chat/MessageDisplay.tsx index afc1b8a..a686a00 100644 --- a/src/components/Chat/MessageDisplay.tsx +++ b/src/components/Chat/MessageDisplay.tsx @@ -90,7 +90,7 @@ export const MessageDisplay = ({ htmlContent, isReply }) => { 'width', 'height', 'style', 'align', 'valign', 'colspan', 'rowspan', 'border', 'cellpadding', 'cellspacing', 'data-url' ], }).replace(/]*data-url="qortal:\/\/use-embed\/[^"]*"[^>]*>.*?<\/span>/g, ''); - }, []) + }, [htmlContent]) const handleClick = async (e) => { e.preventDefault(); From 519a0bb6520cfd08442f6a2395a21965012d389c Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 27 Feb 2025 00:11:36 +0200 Subject: [PATCH 112/119] added private app feature --- src/components/Apps/AppViewer.tsx | 2 +- src/components/Apps/AppsDesktop.tsx | 5 +- src/components/Apps/AppsHomeDesktop.tsx | 4 +- src/components/Apps/AppsNavBarDesktop.tsx | 132 +++-- src/components/Apps/AppsPrivate.tsx | 542 +++++++++++++++++++ src/components/Apps/SortablePinnedApps.tsx | 52 +- src/components/Apps/TabComponent.tsx | 48 +- src/components/Apps/useHandlePrivateApps.tsx | 237 ++++++++ src/components/ContextMenuPinnedApps.tsx | 18 +- src/components/Snackbar/Snackbar.tsx | 2 +- 10 files changed, 958 insertions(+), 84 deletions(-) create mode 100644 src/components/Apps/AppsPrivate.tsx create mode 100644 src/components/Apps/useHandlePrivateApps.tsx diff --git a/src/components/Apps/AppViewer.tsx b/src/components/Apps/AppViewer.tsx index cef2d8d..902c6d8 100644 --- a/src/components/Apps/AppViewer.tsx +++ b/src/components/Apps/AppViewer.tsx @@ -46,7 +46,7 @@ export const AppViewer = React.forwardRef(({ app , hide, isDevMode}, iframeRef) if(isDevMode){ resetHistory() - if(!app?.isPreview){ + if(!app?.isPreview || app?.isPrivate){ setUrl(app?.url + `?time=${Date.now()}`) } return diff --git a/src/components/Apps/AppsDesktop.tsx b/src/components/Apps/AppsDesktop.tsx index b29f9d5..20a3d54 100644 --- a/src/components/Apps/AppsDesktop.tsx +++ b/src/components/Apps/AppsDesktop.tsx @@ -450,7 +450,7 @@ export const AppsDesktop = ({ mode, setMode, show , myName, goToHome, setDesktop }}> - +
)} @@ -479,6 +479,7 @@ export const AppsDesktop = ({ mode, setMode, show , myName, goToHome, setDesktop isSelected={tab?.tabId === selectedTab?.tabId} app={tab} ref={iframeRefs.current[tab.tabId]} + isDevMode={tab?.service ? false : true} /> ); })} @@ -494,7 +495,7 @@ export const AppsDesktop = ({ mode, setMode, show , myName, goToHome, setDesktop }}> - + )} diff --git a/src/components/Apps/AppsHomeDesktop.tsx b/src/components/Apps/AppsHomeDesktop.tsx index 7c548d1..32f5abe 100644 --- a/src/components/Apps/AppsHomeDesktop.tsx +++ b/src/components/Apps/AppsHomeDesktop.tsx @@ -16,11 +16,13 @@ import { Spacer } from "../../common/Spacer"; import { SortablePinnedApps } from "./SortablePinnedApps"; import { extractComponents } from "../Chat/MessageDisplay"; import ArrowOutwardIcon from '@mui/icons-material/ArrowOutward'; +import { AppsPrivate } from "./AppsPrivate"; export const AppsHomeDesktop = ({ setMode, myApp, myWebsite, availableQapps, + myName }) => { const [qortalUrl, setQortalUrl] = useState('') @@ -135,7 +137,7 @@ export const AppsHomeDesktop = ({ Library
- + { - const isSelectedAppPinned = !!sortablePinnedApps?.find( - (item) => - item?.name === selectedTab?.name && item?.service === selectedTab?.service - ); + const isSelectedAppPinned = useMemo(()=> { + if(selectedTab?.isPrivate){ + return !!sortablePinnedApps?.find( + (item) => + item?.privateAppProperties?.name === selectedTab?.privateAppProperties?.name && item?.privateAppProperties?.service === selectedTab?.privateAppProperties?.service && item?.privateAppProperties?.identifier === selectedTab?.privateAppProperties?.identifier + ); + } else { + return !!sortablePinnedApps?.find( + (item) => + item?.name === selectedTab?.name && item?.service === selectedTab?.service + ); + } + }, [selectedTab,sortablePinnedApps]) return ( { if (isSelectedAppPinned) { // Remove the selected app if it is pinned - updatedApps = prev.filter( - (item) => - !( - item?.name === selectedTab?.name && - item?.service === selectedTab?.service - ) - ); + if(selectedTab?.isPrivate){ + updatedApps = prev.filter( + (item) => + !( + item?.privateAppProperties?.name === selectedTab?.privateAppProperties?.name && + item?.privateAppProperties?.service === selectedTab?.privateAppProperties?.service && + item?.privateAppProperties?.identifier === selectedTab?.privateAppProperties?.identifier + ) + ); + } else { + updatedApps = prev.filter( + (item) => + !( + item?.name === selectedTab?.name && + item?.service === selectedTab?.service + ) + ); + } + } else { // Add the selected app if it is not pinned - updatedApps = [ + if(selectedTab?.isPrivate){ + updatedApps = [ ...prev, { - name: selectedTab?.name, - service: selectedTab?.service, + isPreview: true, + isPrivate: true, + privateAppProperties: { + ...(selectedTab?.privateAppProperties || {}) + } + }, ]; + } else { + updatedApps = [ + ...prev, + { + name: selectedTab?.name, + service: selectedTab?.service, + }, + ]; + } + } saveToLocalStorage( @@ -338,9 +374,15 @@ export const AppsNavBarDesktop = ({disableBack}) => { { - executeEvent("refreshApp", { - tabId: selectedTab?.tabId, - }); + if (selectedTab?.refreshFunc) { + selectedTab.refreshFunc(selectedTab?.tabId); + + } else { + executeEvent("refreshApp", { + tabId: selectedTab?.tabId, + }); + } + handleClose(); }} > @@ -368,38 +410,40 @@ export const AppsNavBarDesktop = ({disableBack}) => { primary="Refresh" /> - { - executeEvent("copyLink", { - tabId: selectedTab?.tabId, - }); - handleClose(); - }} - > - { + executeEvent("copyLink", { + tabId: selectedTab?.tabId, + }); + handleClose(); }} > - + + + - - - + + )} ); diff --git a/src/components/Apps/AppsPrivate.tsx b/src/components/Apps/AppsPrivate.tsx new file mode 100644 index 0000000..b014cd2 --- /dev/null +++ b/src/components/Apps/AppsPrivate.tsx @@ -0,0 +1,542 @@ +import React, { useContext, useState } from "react"; +import { + Avatar, + Box, + Button, + ButtonBase, + Dialog, + DialogActions, + DialogContent, + DialogTitle, + Input, + MenuItem, + Select, + Tab, + Tabs, + Typography, +} from "@mui/material"; +import { useDropzone } from "react-dropzone"; +import { useHandlePrivateApps } from "./useHandlePrivateApps"; +import { useRecoilState, useSetRecoilState } from "recoil"; +import { myGroupsWhereIAmAdminAtom } from "../../atoms/global"; +import { Label } from "../Group/AddGroup"; +import { Spacer } from "../../common/Spacer"; +import { + Add, + AppCircle, + AppCircleContainer, + AppCircleLabel, + PublishQAppChoseFile, + PublishQAppInfo, +} from "./Apps-styles"; +import ImageUploader from "../../common/ImageUploader"; +import { isMobile, MyContext } from "../../App"; +import { fileToBase64 } from "../../utils/fileReading"; +import { objectToBase64 } from "../../qdn/encryption/group-encryption"; +import { getFee } from "../../background"; + +const maxFileSize = 50 * 1024 * 1024; // 50MB + +export const AppsPrivate = ({myName}) => { + const { openApp } = useHandlePrivateApps(); + const [file, setFile] = useState(null); + const [logo, setLogo] = useState(null); + const [qortalUrl, setQortalUrl] = useState(""); + const [selectedGroup, setSelectedGroup] = useState(0); + + const [valueTabPrivateApp, setValueTabPrivateApp] = useState(0); + const [myGroupsWhereIAmAdmin, setMyGroupsWhereIAmAdmin] = useRecoilState( + myGroupsWhereIAmAdminAtom + ); + const [isOpenPrivateModal, setIsOpenPrivateModal] = useState(false); + const { show, setInfoSnackCustom, setOpenSnackGlobal, memberGroups } = useContext(MyContext); + + const [privateAppValues, setPrivateAppValues] = useState({ + name: "", + service: "DOCUMENT", + identifier: "", + groupId: 0, + }); + + const [newPrivateAppValues, setNewPrivateAppValues] = useState({ + service: "DOCUMENT", + identifier: "", + name: "", + }); + const { getRootProps, getInputProps } = useDropzone({ + accept: { + "application/zip": [".zip"], // Only accept zip files + }, + maxSize: maxFileSize, + multiple: false, // Disable multiple file uploads + onDrop: (acceptedFiles) => { + if (acceptedFiles.length > 0) { + setFile(acceptedFiles[0]); // Set the file name + } + }, + onDropRejected: (fileRejections) => { + fileRejections.forEach(({ file, errors }) => { + errors.forEach((error) => { + if (error.code === "file-too-large") { + console.error( + `File ${file.name} is too large. Max size allowed is ${ + maxFileSize / (1024 * 1024) + } MB.` + ); + } + }); + }); + }, + }); + + const addPrivateApp = async () => { + try { + if (privateAppValues?.groupId === 0) return; + + await openApp(privateAppValues, true); + } catch (error) { + console.log('error', error?.message) + + } + }; + + const clearFields = () => { + setPrivateAppValues({ + name: "", + service: "DOCUMENT", + identifier: "", + groupId: 0, + }); + setNewPrivateAppValues({ + service: "DOCUMENT", + identifier: "", + name: "", + }); + setFile(null); + setValueTabPrivateApp(0); + setSelectedGroup(0); + setLogo(null); + }; + + const publishPrivateApp = async () => { + try { + if (selectedGroup === 0) return; + if (!logo) throw new Error("Please select an image for a logo"); + if (!myName) throw new Error("You need a Qortal name to publish"); + if (!newPrivateAppValues?.name) throw new Error("Your app needs a name"); + const base64Logo = await fileToBase64(logo); + const base64App = await fileToBase64(file); + const objectToSave = { + app: base64App, + logo: base64Logo, + name: newPrivateAppValues.name, + }; + const object64 = await objectToBase64(objectToSave); + const decryptedData = await window.sendMessage( + "ENCRYPT_QORTAL_GROUP_DATA", + + { + base64: object64, + groupId: selectedGroup, + } + ); + if (decryptedData?.error) { + throw new Error( + decryptedData?.error || "Unable to encrypt app. App not published" + ); + } + const fee = await getFee("ARBITRARY"); + + await show({ + message: "Would you like to publish this app?", + publishFee: fee.fee + " QORT", + }); + await new Promise((res, rej) => { + window + .sendMessage("publishOnQDN", { + data: decryptedData, + identifier: newPrivateAppValues?.identifier, + service: newPrivateAppValues?.service, + }) + .then((response) => { + if (!response?.error) { + res(response); + return; + } + rej(response.error); + }) + .catch((error) => { + rej(error.message || "An error occurred"); + }); + }); + openApp( + { + identifier: newPrivateAppValues?.identifier, + service: newPrivateAppValues?.service, + name: myName, + groupId: selectedGroup, + }, + true + ); + clearFields(); + } catch (error) { + setOpenSnackGlobal(true) + setInfoSnackCustom({ + type: "error", + message: error?.message || "Unable to publish app", + }); + } + }; + + const handleChange = (event: React.SyntheticEvent, newValue: number) => { + setValueTabPrivateApp(newValue); + }; + + function a11yProps(index: number) { + return { + id: `simple-tab-${index}`, + "aria-controls": `simple-tabpanel-${index}`, + }; + } + return ( + <> + { + setIsOpenPrivateModal(true); + }} + sx={{ + width: "80px", + }} + > + + + + + + Private + + + {isOpenPrivateModal && ( + { + if (e.key === "Enter") { + if (valueTabPrivateApp === 0) { + if ( + !privateAppValues.name || + !privateAppValues.service || + !privateAppValues.identifier || + !privateAppValues?.groupId + ) + return; + addPrivateApp(); + } + } + }} + maxWidth="md" + fullWidth={true} + > + + {valueTabPrivateApp === 0 + ? "Access private app" + : "Publish private app"} + + + + + + + + + {valueTabPrivateApp === 0 && ( + <> + + + + + + + + + + + setPrivateAppValues((prev) => { + return { + ...prev, + name: e.target.value, + }; + }) + } + /> + + + + + setPrivateAppValues((prev) => { + return { + ...prev, + identifier: e.target.value, + }; + }) + } + /> + + + + + + + + )} + {valueTabPrivateApp === 1 && ( + <> + + + Select .zip file containing static content:{" "} + + + {` + 50mb MB maximum`} + {file && ( + <> + + {`Selected: (${file?.name})`} + + )} + + + + {" "} + + {file ? "Change" : "Choose"} File + + + + + + + + + + + + + setNewPrivateAppValues((prev) => { + return { + ...prev, + identifier: e.target.value, + }; + }) + } + /> + + + + + + setNewPrivateAppValues((prev) => { + return { + ...prev, + name: e.target.value, + }; + }) + } + /> + + + + setLogo(file)}> + + + {logo?.name} + + + + + + + + )} + + )} + + ); +}; diff --git a/src/components/Apps/SortablePinnedApps.tsx b/src/components/Apps/SortablePinnedApps.tsx index 15f54b9..98c2287 100644 --- a/src/components/Apps/SortablePinnedApps.tsx +++ b/src/components/Apps/SortablePinnedApps.tsx @@ -1,18 +1,21 @@ -import React, { useEffect, useMemo, useRef, useState } from 'react'; +import React, { useContext, useEffect, useMemo, useRef, useState } from 'react'; import { DndContext, closestCenter } from '@dnd-kit/core'; import { arrayMove, SortableContext, sortableKeyboardCoordinates, useSortable } from '@dnd-kit/sortable'; import { KeyboardSensor, PointerSensor, TouchSensor, useSensor, useSensors } from '@dnd-kit/core'; import { CSS } from '@dnd-kit/utilities'; import { Avatar, ButtonBase } from '@mui/material'; import { AppCircle, AppCircleContainer, AppCircleLabel } from './Apps-styles'; -import { getBaseApiReact } from '../../App'; +import { getBaseApiReact, MyContext } from '../../App'; import { executeEvent } from '../../utils/events'; import { settingsLocalLastUpdatedAtom, sortablePinnedAppsAtom } from '../../atoms/global'; import { useRecoilState, useSetRecoilState } from 'recoil'; import { saveToLocalStorage } from './AppsNavBar'; import { ContextMenuPinnedApps } from '../ContextMenuPinnedApps'; - +import LockIcon from "@mui/icons-material/Lock"; +import { useHandlePrivateApps } from './useHandlePrivateApps'; const SortableItem = ({ id, name, app, isDesktop }) => { + const {openApp} = useHandlePrivateApps() + const { attributes, listeners, setNodeRef, transform, transition } = useSortable({ id }); const style = { transform: CSS.Transform.toString(transform), @@ -28,17 +31,27 @@ const SortableItem = ({ id, name, app, isDesktop }) => { return ( - { - executeEvent("addTab", { - data: app - }) + onClick={async ()=> { + if(app?.isPrivate){ + try { + await openApp(app?.privateAppProperties) + } catch (error) { + console.error(error) + } + + } else { + executeEvent("addTab", { + data: app + }) + } + }} > { border: "none", }} > - + ) : ( + { } }} alt={app?.metadata?.title || app?.name} - src={`${getBaseApiReact()}/arbitrary/THUMBNAIL/${ + src={ app?.privateAppProperties?.logo ? app?.privateAppProperties?.logo :`${getBaseApiReact()}/arbitrary/THUMBNAIL/${ app?.name }/qortal_avatar?async=true`} > @@ -72,10 +93,19 @@ const SortableItem = ({ id, name, app, isDesktop }) => { alt="center-icon" /> + )} + - + {app?.isPrivate ? ( + + {`${app?.privateAppProperties?.appName || "Private"}`} + + ) : ( + {app?.metadata?.title || app?.name} + )} + diff --git a/src/components/Apps/TabComponent.tsx b/src/components/Apps/TabComponent.tsx index aca6b55..ecf17a7 100644 --- a/src/components/Apps/TabComponent.tsx +++ b/src/components/Apps/TabComponent.tsx @@ -5,6 +5,7 @@ import { getBaseApiReact } from '../../App'; import { Avatar, ButtonBase } from '@mui/material'; import LogoSelected from "../../assets/svgs/LogoSelected.svg"; import { executeEvent } from '../../utils/events'; +import LockIcon from "@mui/icons-material/Lock"; const TabComponent = ({isSelected, app}) => { return ( @@ -34,25 +35,34 @@ const TabComponent = ({isSelected, app}) => { } src={NavCloseTab}/> ) } - - center-icon - + {app?.isPrivate && !app?.privateAppProperties?.logo ? ( + + ) : ( + + center-icon + + )}
) diff --git a/src/components/Apps/useHandlePrivateApps.tsx b/src/components/Apps/useHandlePrivateApps.tsx new file mode 100644 index 0000000..2eaa5f9 --- /dev/null +++ b/src/components/Apps/useHandlePrivateApps.tsx @@ -0,0 +1,237 @@ +import React, { useContext, useState } from "react"; +import { executeEvent } from "../../utils/events"; +import { getBaseApiReact, MyContext } from "../../App"; +import { createEndpoint } from "../../background"; +import { useRecoilState, useSetRecoilState } from "recoil"; +import { + settingsLocalLastUpdatedAtom, + sortablePinnedAppsAtom, +} from "../../atoms/global"; +import { saveToLocalStorage } from "./AppsNavBarDesktop"; +import { base64ToBlobUrl } from "../../utils/fileReading"; +import { base64ToUint8Array } from "../../qdn/encryption/group-encryption"; +import { uint8ArrayToObject } from "../../backgroundFunctions/encryption"; + +export const useHandlePrivateApps = () => { + const [status, setStatus] = useState(""); + const { + openSnackGlobal, + setOpenSnackGlobal, + infoSnackCustom, + setInfoSnackCustom, + } = useContext(MyContext); + const [sortablePinnedApps, setSortablePinnedApps] = useRecoilState( + sortablePinnedAppsAtom + ); + const setSettingsLocalLastUpdated = useSetRecoilState( + settingsLocalLastUpdatedAtom + ); + const openApp = async ( + privateAppProperties, + addToPinnedApps, + setLoadingStatePrivateApp + ) => { + try { + + + if(setLoadingStatePrivateApp){ + setLoadingStatePrivateApp(`Downloading and decrypting private app.`); + + } + setOpenSnackGlobal(true); + + setInfoSnackCustom({ + type: "info", + message: "Fetching app data", + duration: null + }); + const urlData = `${getBaseApiReact()}/arbitrary/${ + privateAppProperties?.service + }/${privateAppProperties?.name}/${ + privateAppProperties?.identifier + }?encoding=base64`; + let data; + try { + const responseData = await fetch(urlData, { + method: "GET", + headers: { + "Content-Type": "application/json", + }, + }); + + if(!responseData?.ok){ + if(setLoadingStatePrivateApp){ + setLoadingStatePrivateApp("Error! Unable to download private app."); + } + + throw new Error("Unable to fetch app"); + } + + data = await responseData.text(); + if (data?.error) { + if(setLoadingStatePrivateApp){ + + setLoadingStatePrivateApp("Error! Unable to download private app."); + } + throw new Error("Unable to fetch app"); + } + } catch (error) { + if(setLoadingStatePrivateApp){ + + setLoadingStatePrivateApp("Error! Unable to download private app."); + } + throw error; + } + + let decryptedData; + // eslint-disable-next-line no-useless-catch + try { + decryptedData = await window.sendMessage( + "DECRYPT_QORTAL_GROUP_DATA", + + { + base64: data, + groupId: privateAppProperties?.groupId, + } + ); + if (decryptedData?.error) { + if(setLoadingStatePrivateApp){ + + setLoadingStatePrivateApp("Error! Unable to decrypt private app."); + } + throw new Error(decryptedData?.error); + } + } catch (error) { + if(setLoadingStatePrivateApp){ + + setLoadingStatePrivateApp("Error! Unable to decrypt private app."); + } + throw error; + } + + try { + const convertToUint = base64ToUint8Array(decryptedData); + const UintToObject = uint8ArrayToObject(convertToUint); + + if (decryptedData) { + setInfoSnackCustom({ + type: "info", + message: "Building app", + }); + const endpoint = await createEndpoint( + `/arbitrary/APP/${privateAppProperties?.name}/zip?preview=true` + ); + const response = await fetch(endpoint, { + method: "POST", + headers: { + "Content-Type": "text/plain", + }, + body: UintToObject?.app, + }); + const previewPath = await response.text(); + const refreshfunc = async (tabId, privateAppProperties) => { + const checkIfPreviewLinkStillWorksUrl = await createEndpoint( + `/render/hash/HmtnZpcRPwisMfprUXuBp27N2xtv5cDiQjqGZo8tbZS?secret=E39WTiG4qBq3MFcMPeRZabtQuzyfHg9ZuR5SgY7nW1YH` + ); + const res = await fetch(checkIfPreviewLinkStillWorksUrl); + if (res.ok) { + executeEvent("refreshApp", { + tabId: tabId, + }); + } else { + const endpoint = await createEndpoint( + `/arbitrary/APP/${privateAppProperties?.name}/zip?preview=true` + ); + const response = await fetch(endpoint, { + method: "POST", + headers: { + "Content-Type": "text/plain", + }, + body: UintToObject?.app, + }); + const previewPath = await response.text(); + executeEvent("updateAppUrl", { + tabId: tabId, + url: await createEndpoint(previewPath), + }); + + setTimeout(() => { + executeEvent("refreshApp", { + tabId: tabId, + }); + }, 300); + } + }; + + const appName = UintToObject?.name; + const logo = UintToObject?.logo + ? `data:image/png;base64,${UintToObject?.logo}` + : null; + + const dataBody = { + url: await createEndpoint(previewPath), + isPreview: true, + isPrivate: true, + privateAppProperties: { ...privateAppProperties, logo, appName }, + filePath: "", + refreshFunc: (tabId) => { + refreshfunc(tabId, privateAppProperties); + }, + }; + executeEvent("addTab", { + data: dataBody, + }); + setInfoSnackCustom({ + type: "success", + message: "Opened", + }); + if(setLoadingStatePrivateApp){ + + setLoadingStatePrivateApp(``); + } + if (addToPinnedApps) { + setSortablePinnedApps((prev) => { + const updatedApps = [ + ...prev, + { + isPrivate: true, + isPreview: true, + privateAppProperties: { + ...privateAppProperties, + logo, + appName, + }, + }, + ]; + + saveToLocalStorage( + "ext_saved_settings", + "sortablePinnedApps", + updatedApps + ); + return updatedApps; + }); + setSettingsLocalLastUpdated(Date.now()); + } + } + } catch (error) { + if(setLoadingStatePrivateApp){ + + setLoadingStatePrivateApp(`Error! ${error?.message || 'Unable to build private app.'}`); + } + throw error + } + } + catch (error) { + setInfoSnackCustom({ + type: "error", + message: error?.message || "Unable to fetch app", + }); + } + + }; + return { + openApp, + status, + }; +}; diff --git a/src/components/ContextMenuPinnedApps.tsx b/src/components/ContextMenuPinnedApps.tsx index be0ae46..bb64a4c 100644 --- a/src/components/ContextMenuPinnedApps.tsx +++ b/src/components/ContextMenuPinnedApps.tsx @@ -124,11 +124,19 @@ export const ContextMenuPinnedApps = ({ children, app, isMine }) => { { handleClose(e); setSortablePinnedApps((prev) => { - const updatedApps = prev.filter( - (item) => !(item?.name === app?.name && item?.service === app?.service) - ); - saveToLocalStorage('ext_saved_settings', 'sortablePinnedApps', updatedApps); - return updatedApps; + if(app?.isPrivate){ + const updatedApps = prev.filter( + (item) => !(item?.privateAppProperties?.name === app?.privateAppProperties?.name && item?.privateAppProperties?.service === app?.privateAppProperties?.service && item?.privateAppProperties?.identifier === app?.privateAppProperties?.identifier) + ); + saveToLocalStorage('ext_saved_settings', 'sortablePinnedApps', updatedApps); + return updatedApps; + } else { + const updatedApps = prev.filter( + (item) => !(item?.name === app?.name && item?.service === app?.service) + ); + saveToLocalStorage('ext_saved_settings', 'sortablePinnedApps', updatedApps); + return updatedApps; + } }); }}> diff --git a/src/components/Snackbar/Snackbar.tsx b/src/components/Snackbar/Snackbar.tsx index 3e5fccb..59fa295 100644 --- a/src/components/Snackbar/Snackbar.tsx +++ b/src/components/Snackbar/Snackbar.tsx @@ -22,7 +22,7 @@ export const CustomizedSnackbars = ({open, setOpen, info, setInfo, duration}) = if(!open) return null return (
- + Date: Thu, 27 Feb 2025 10:15:28 +0100 Subject: [PATCH 113/119] Add tooltips --- src/App.tsx | 227 ++++++++++++++++++++++------ src/components/Chat/ChatOptions.tsx | 73 ++++++++- src/components/QMailStatus.tsx | 32 +++- 3 files changed, 272 insertions(+), 60 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 3453234..176d140 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1547,18 +1547,38 @@ function App() { {!isMobile && ( <> - { - logoutFunc(); - setIsOpenDrawerProfile(false); + LOG OUT} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, }} - style={{ - cursor: "pointer", - width: '20px', - height: 'auto' - }} - /> + > + { + logoutFunc(); + setIsOpenDrawerProfile(false); + }} + style={{ + cursor: "pointer", + width: '20px', + height: 'auto' + }} + /> + )} @@ -1568,38 +1588,98 @@ function App() { setIsSettingsOpen(true); }} > - SETTINGS} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, }} - /> + > + + {authenticatedMode === "qort" && ( - { - setAuthenticatedMode("ltc"); + LITECOIN WALLET} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, }} - src={ltcLogo} - style={{ - cursor: "pointer", - width: "20px", - height: "auto", - }} - /> + > + { + setAuthenticatedMode("ltc"); + }} + src={ltcLogo} + style={{ + cursor: "pointer", + width: "20px", + height: "auto", + }} + /> + )} {authenticatedMode === "ltc" && ( - { - setAuthenticatedMode("qort"); + QORTAL WALLET} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, }} - src={qortLogo} - style={{ - cursor: "pointer", - width: "20px", - height: "auto", - }} - /> + > + { + setAuthenticatedMode("qort"); + }} + src={qortLogo} + style={{ + cursor: "pointer", + width: "20px", + height: "auto", + }} + /> + )} @@ -1636,9 +1716,9 @@ function App() { downloadResource, getIndividualUserInfo, isUserBlocked, - addToBlockList, - removeBlockFromList, - getAllBlockedUsers + addToBlockList, + removeBlockFromList, + getAllBlockedUsers }} > @@ -1661,30 +1741,82 @@ function App() { }) } }}> - + MINTING STATUS} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + + - {(desktopViewMode === "apps" || desktopViewMode === "home") && ( { if(desktopViewMode === "apps"){ showTutorial('qapps', true) - } else { showTutorial('getting-started', true) - } }} > - + TUTORIAL} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + + )} + BACKUP WALLET} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > { setExtstate("download-wallet"); @@ -1696,6 +1828,7 @@ function App() { width: '20px' }} /> + diff --git a/src/components/Chat/ChatOptions.tsx b/src/components/Chat/ChatOptions.tsx index 3640bd1..4e7a7d3 100644 --- a/src/components/Chat/ChatOptions.tsx +++ b/src/components/Chat/ChatOptions.tsx @@ -6,6 +6,7 @@ import { MenuItem, Select, Typography, + Tooltip } from "@mui/material"; import React, { useEffect, useMemo, useRef, useState } from "react"; import SearchIcon from "@mui/icons-material/Search"; @@ -575,7 +576,27 @@ export const ChatOptions = ({ messages : untransformedMessages, goToMessage, mem { setMode("search") }}> - + SEARCH} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + + { setMode("default") @@ -583,9 +604,27 @@ export const ChatOptions = ({ messages : untransformedMessages, goToMessage, mem setSelectedMember(0) openQManager() }}> - + Q-MANAGER} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + + { @@ -593,9 +632,29 @@ export const ChatOptions = ({ messages : untransformedMessages, goToMessage, mem setSearchValue('') setSelectedMember(0) }}> - 0 && (!lastMentionTimestamp || lastMentionTimestamp < mentionList[0]?.timestamp) ? 'var(--unread)' : 'white' - }} /> + MENTIONED} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + 0 && (!lastMentionTimestamp || lastMentionTimestamp < mentionList[0]?.timestamp) ? 'var(--unread)' : 'white' + }} /> + diff --git a/src/components/QMailStatus.tsx b/src/components/QMailStatus.tsx index 2787336..cb1642a 100644 --- a/src/components/QMailStatus.tsx +++ b/src/components/QMailStatus.tsx @@ -3,7 +3,7 @@ import QMailLogo from '../assets/QMailLogo.png' import { useRecoilState } from 'recoil' import { mailsAtom, qMailLastEnteredTimestampAtom } from '../atoms/global' import { isLessThanOneWeekOld } from './Group/QMailMessages' -import { ButtonBase } from '@mui/material' +import { ButtonBase, Tooltip } from '@mui/material' import { executeEvent } from '../utils/events' export const QMailStatus = () => { const [lastEnteredTimestamp, setLastEnteredTimestamp] = useRecoilState(qMailLastEnteredTimestampAtom) @@ -23,7 +23,8 @@ export const QMailStatus = () => { setLastEnteredTimestamp(Date.now()) }} style={{ position: 'relative' - }}>{hasNewMail && ( + }}> + {hasNewMail && (
{ borderRadius: '50%', outline: '1px solid white' }} /> - )} + )} + Q-MAIL} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + + + ) } From ae5ca83963282014f5aaf063fa8ca50a87e93fae Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 27 Feb 2025 21:14:41 +0200 Subject: [PATCH 114/119] reworked homepage --- src/assets/Icons/q-trade-logo.webp | Bin 0 -> 1072 bytes src/common/Spinners/BarSpinner/BarSpinner.tsx | 10 + src/common/Spinners/BarSpinner/barSpinner.css | 19 + src/components/Explore/Explore.tsx | 101 +++ src/components/Group/Group.tsx | 4 +- src/components/Group/GroupInvites.tsx | 206 +++--- src/components/Group/GroupJoinRequests.tsx | 32 +- src/components/Group/HomeDesktop.tsx | 243 +++--- .../Group/ListOfGroupPromotions.tsx | 695 ++++++++++-------- src/components/Group/QMailMessages.tsx | 47 +- src/components/Group/ThingsToDoInitial.tsx | 4 +- src/components/Home/NewUsersCTA.tsx | 91 +++ src/components/Home/QortPrice.tsx | 209 ++++++ 13 files changed, 1137 insertions(+), 524 deletions(-) create mode 100644 src/assets/Icons/q-trade-logo.webp create mode 100644 src/common/Spinners/BarSpinner/BarSpinner.tsx create mode 100644 src/common/Spinners/BarSpinner/barSpinner.css create mode 100644 src/components/Explore/Explore.tsx create mode 100644 src/components/Home/NewUsersCTA.tsx create mode 100644 src/components/Home/QortPrice.tsx diff --git a/src/assets/Icons/q-trade-logo.webp b/src/assets/Icons/q-trade-logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..77ba972fd9dfc951386d0da4052e014cf97d80ab GIT binary patch literal 1072 zcmWIYbaT^SVPFV%bqWXzu!!JdU|>)HVs$X`baoCn!3g9sFrEOBECvh=xp^f;LGDfp z5s^^}><<_ife;K5lZy)=EUY9@)wgR9wU>3Vs=zPEnUY$Z3{>&~h*gS!mIK`+0%VJ% zL)aQ1b`peb17eq#6qEqf1c2B@AwkYSb_$TKk&eVpLSiQu6oJ(D0M*#!=9Gf$0s)Zk zcvAC1gMl;$5X&$WGXycXGdO|#599+u{vrkji?0j}%o7k|Ni!K3wzo1cNZdk*sVrb% z;BR4I*mfQvh6s~_#G*v7alqJMU`k74VEDA0fq^%YfkF5J0|QqySPn?waGL^9N(Shz zd>~9`$YDrjP+;(6$YV%m&;zoJ7z`K;8O(q&tYF2&z)--&FqctFgF%DAZlc8$57otr z3k|R3Fl-RwOlDBNIsJk6@xsPi?~h%GS##sB^NUM?lfx$p=*mCRE@g>796p!R=lO@^ z^oX-IlNR}|;jcHY>O#98(db~Y5_xBCcJR7Fpf4q0}1zg?o<+hoh*2?&_#)O&a z=W8va?Z01%t~qIGwX46$YPB`P(o0ir-tzfT|KIAAvdc>T|FeG_m4&Jpa0rjB252;?B>Ud zDu>&6RVW+&Sf%;?>9M=Nx%bx{x*t{*vUJx^edqn2yq0l$<05}n{@Z>*D)HGPO(hS- z6}^nJrW~7Nu6iQ(?}tED#xA?Cb3JSO|L=PDoO{Z)|I=137q?HG*gw^Di;m`p`#ZTPw$98Ye&%KAL z&d*!Q>csJd_sgy)VOzOA$j#S(J25)gEm-J8M|;!T4XbuLvT7chmA-T5y83wsUT7K{ RP0Zo^x0p-*5Dzf@0{{=bYLfr} literal 0 HcmV?d00001 diff --git a/src/common/Spinners/BarSpinner/BarSpinner.tsx b/src/common/Spinners/BarSpinner/BarSpinner.tsx new file mode 100644 index 0000000..a51a512 --- /dev/null +++ b/src/common/Spinners/BarSpinner/BarSpinner.tsx @@ -0,0 +1,10 @@ +import React from 'react' +import './barSpinner.css' +export const BarSpinner = ({width = '20px', color}) => { + return ( +
+ ) +} diff --git a/src/common/Spinners/BarSpinner/barSpinner.css b/src/common/Spinners/BarSpinner/barSpinner.css new file mode 100644 index 0000000..529bc50 --- /dev/null +++ b/src/common/Spinners/BarSpinner/barSpinner.css @@ -0,0 +1,19 @@ +/* HTML:
*/ +.loader-bar { + width: 45px; + aspect-ratio: .75; + --c:no-repeat linear-gradient(currentColor 0 0); + background: + var(--c) 0% 100%, + var(--c) 50% 100%, + var(--c) 100% 100%; + background-size: 20% 65%; + animation: l8 1s infinite linear; + } + @keyframes l8 { + 16.67% {background-position: 0% 0% ,50% 100%,100% 100%} + 33.33% {background-position: 0% 0% ,50% 0% ,100% 100%} + 50% {background-position: 0% 0% ,50% 0% ,100% 0% } + 66.67% {background-position: 0% 100%,50% 0% ,100% 0% } + 83.33% {background-position: 0% 100%,50% 100%,100% 0% } + } \ No newline at end of file diff --git a/src/components/Explore/Explore.tsx b/src/components/Explore/Explore.tsx new file mode 100644 index 0000000..7cc96a0 --- /dev/null +++ b/src/components/Explore/Explore.tsx @@ -0,0 +1,101 @@ +import { Box, ButtonBase, Typography } from "@mui/material"; +import React from "react"; +import ChatIcon from "@mui/icons-material/Chat"; +import qTradeLogo from "../../assets/Icons/q-trade-logo.webp"; +import AppsIcon from "@mui/icons-material/Apps"; +import { executeEvent } from "../../utils/events"; +export const Explore = ({setDesktopViewMode}) => { + return ( + + { + executeEvent("addTab", { + data: { service: "APP", name: "q-trade" }, + }); + executeEvent("open-apps-mode", {}); + }} + > + + + Trade QORT + + + { + setDesktopViewMode('apps') + + }} + > + + + See Apps + + + { + executeEvent("openGroupMessage", { + from: "0" , + }); + }} + > + + + General Chat + + + + ); +}; diff --git a/src/components/Group/Group.tsx b/src/components/Group/Group.tsx index 48ef02c..08f75e9 100644 --- a/src/components/Group/Group.tsx +++ b/src/components/Group/Group.tsx @@ -1299,11 +1299,11 @@ export const Group = ({ if (isLoadingOpenSectionFromNotification.current) return; const groupId = e.detail?.from; - const findGroup = groups?.find((group) => +group?.groupId === +groupId); if (findGroup?.groupId === selectedGroup?.groupId) { isLoadingOpenSectionFromNotification.current = false; - + setChatMode("groups"); + setDesktopViewMode('chat') return; } if (findGroup) { diff --git a/src/components/Group/GroupInvites.tsx b/src/components/Group/GroupInvites.tsx index 0eda0f6..13e5850 100644 --- a/src/components/Group/GroupInvites.tsx +++ b/src/components/Group/GroupInvites.tsx @@ -10,16 +10,20 @@ import CommentIcon from "@mui/icons-material/Comment"; import InfoIcon from "@mui/icons-material/Info"; import GroupAddIcon from "@mui/icons-material/GroupAdd"; import { executeEvent } from "../../utils/events"; -import { Box, Typography } from "@mui/material"; +import { Box, ButtonBase, Collapse, Typography } from "@mui/material"; import { Spacer } from "../../common/Spacer"; import { getGroupNames } from "./UserListOfInvites"; import { CustomLoader } from "../../common/CustomLoader"; import { getBaseApiReact, isMobile } from "../../App"; +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import ExpandLessIcon from "@mui/icons-material/ExpandLess"; export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { const [groupsWithJoinRequests, setGroupsWithJoinRequests] = React.useState( [] ); + const [isExpanded, setIsExpanded] = React.useState(false); + const [loading, setLoading] = React.useState(true); const getJoinRequests = async () => { @@ -53,121 +57,129 @@ export const GroupInvites = ({ myAddress, setOpenAddGroup }) => { alignItems: "center", }} > - setIsExpanded((prev)=> !prev)} > - Group Invites: + Group Invites {groupsWithJoinRequests?.length > 0 && ` (${groupsWithJoinRequests?.length})`} - - + {isExpanded ? : ( + + )} + + + - {loading && groupsWithJoinRequests.length === 0 && ( - + {loading && groupsWithJoinRequests.length === 0 && ( + + + + )} + {!loading && groupsWithJoinRequests.length === 0 && ( + + + Nothing to display + + + )} + - - - )} - {!loading && groupsWithJoinRequests.length === 0 && ( - - - Nothing to display - - - )} - - {groupsWithJoinRequests?.map((group) => { - return ( - { - setOpenAddGroup(true); - setTimeout(() => { - executeEvent("openGroupInvitesRequest", {}); - }, 300); - }} - disablePadding - secondaryAction={ - - { + return ( + { + setOpenAddGroup(true); + setTimeout(() => { + executeEvent("openGroupInvitesRequest", {}); + }, 300); + }} + disablePadding + secondaryAction={ + + + + } + > + + - - } - > - - - - - ); - })} - - + + + ); + })} + + + ); }; diff --git a/src/components/Group/GroupJoinRequests.tsx b/src/components/Group/GroupJoinRequests.tsx index 03c2258..76f958a 100644 --- a/src/components/Group/GroupJoinRequests.tsx +++ b/src/components/Group/GroupJoinRequests.tsx @@ -11,16 +11,20 @@ import InfoIcon from "@mui/icons-material/Info"; import { RequestQueueWithPromise } from "../../utils/queue/queue"; import GroupAddIcon from '@mui/icons-material/GroupAdd'; import { executeEvent } from "../../utils/events"; -import { Box, Typography } from "@mui/material"; +import { Box, ButtonBase, Collapse, Typography } from "@mui/material"; import { Spacer } from "../../common/Spacer"; import { CustomLoader } from "../../common/CustomLoader"; import { getBaseApi } from "../../background"; import { MyContext, getBaseApiReact, isMobile } from "../../App"; import { myGroupsWhereIAmAdminAtom } from "../../atoms/global"; import { useSetRecoilState } from "recoil"; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import ExpandLessIcon from '@mui/icons-material/ExpandLess'; export const requestQueueGroupJoinRequests = new RequestQueueWithPromise(2) export const GroupJoinRequests = ({ myAddress, groups, setOpenManageMembers, getTimestampEnterChat, setSelectedGroup, setGroupSection, setMobileViewMode, setDesktopViewMode }) => { + const [isExpanded, setIsExpanded] = React.useState(false) + const [groupsWithJoinRequests, setGroupsWithJoinRequests] = React.useState([]) const [loading, setLoading] = React.useState(true) const {txList, setTxList} = React.useContext(MyContext) @@ -109,26 +113,33 @@ export const GroupJoinRequests = ({ myAddress, groups, setOpenManageMembers, get flexDirection: "column", alignItems: 'center' }}> - setIsExpanded((prev)=> !prev)} > - Join Requests: + Join Requests {filteredJoinRequests?.filter((group)=> group?.data?.length > 0)?.length > 0 && ` (${filteredJoinRequests?.filter((group)=> group?.data?.length > 0)?.length})`} - - - + {isExpanded ? : ( + + )} + + + ); }; diff --git a/src/components/Group/HomeDesktop.tsx b/src/components/Group/HomeDesktop.tsx index e3b847d..26cf612 100644 --- a/src/components/Group/HomeDesktop.tsx +++ b/src/components/Group/HomeDesktop.tsx @@ -1,4 +1,4 @@ -import { Box, Button, Typography } from "@mui/material"; +import { Box, Button, Divider, Typography } from "@mui/material"; import React from "react"; import { Spacer } from "../../common/Spacer"; import { ListOfThreadPostsWatched } from "./ListOfThreadPostsWatched"; @@ -7,7 +7,10 @@ import { GroupJoinRequests } from "./GroupJoinRequests"; import { GroupInvites } from "./GroupInvites"; import RefreshIcon from "@mui/icons-material/Refresh"; import { ListOfGroupPromotions } from "./ListOfGroupPromotions"; - +import { QortPrice } from "../Home/QortPrice"; +import ExploreIcon from "@mui/icons-material/Explore"; +import { Explore } from "../Explore/Explore"; +import { NewUsersCTA } from "../Home/NewUsersCTA"; export const HomeDesktop = ({ refreshHomeDataFunc, myAddress, @@ -22,12 +25,12 @@ export const HomeDesktop = ({ setOpenAddGroup, setMobileViewMode, setDesktopViewMode, - desktopViewMode + desktopViewMode, }) => { return ( - - 15 ? "16px" : "20px", - padding: '10px' + display: "flex", + width: "100%", + flexDirection: "column", + height: "100%", + alignItems: "flex-start", + maxWidth: "1036px", }} > - Welcome - {userInfo?.name ? ( - {`, ${userInfo?.name}`} - ) : null} - - - {!isLoadingGroups && ( - 15 ? "16px" : "20px", + padding: "10px", }} > - - - - {desktopViewMode === 'home' && ( - <> - {`, ${userInfo?.name}`} + ) : null} + + + {!isLoadingGroups && ( + + + + item?.groupId !== "0").length !== 0 + } + /> + + + {desktopViewMode === "home" && ( + <> + {/* + */} + + + + + + + + )} + + - - + )} + + {!isLoadingGroups && ( + <> + + + + {" "} + + Explore + {" "} - - + + + + - - )} - - - )} - {!isLoadingGroups && ( - - )} + + + + )} - {/* */} - + ); diff --git a/src/components/Group/ListOfGroupPromotions.tsx b/src/components/Group/ListOfGroupPromotions.tsx index 2f474d3..a983f56 100644 --- a/src/components/Group/ListOfGroupPromotions.tsx +++ b/src/components/Group/ListOfGroupPromotions.tsx @@ -9,6 +9,8 @@ import { Avatar, Box, Button, + ButtonBase, + Collapse, Dialog, DialogActions, DialogContent, @@ -28,8 +30,8 @@ import { import { getNameInfo } from "./Group"; import { getBaseApi, getFee } from "../../background"; import { LoadingButton } from "@mui/lab"; -import LockIcon from '@mui/icons-material/Lock'; -import NoEncryptionGmailerrorredIcon from '@mui/icons-material/NoEncryptionGmailerrorred'; +import LockIcon from "@mui/icons-material/Lock"; +import NoEncryptionGmailerrorredIcon from "@mui/icons-material/NoEncryptionGmailerrorred"; import { MyContext, getArbitraryEndpointReact, @@ -40,7 +42,11 @@ import { Spacer } from "../../common/Spacer"; import { CustomLoader } from "../../common/CustomLoader"; import { RequestQueueWithPromise } from "../../utils/queue/queue"; import { useRecoilState } from "recoil"; -import { myGroupsWhereIAmAdminAtom, promotionTimeIntervalAtom, promotionsAtom } from "../../atoms/global"; +import { + myGroupsWhereIAmAdminAtom, + promotionTimeIntervalAtom, + promotionsAtom, +} from "../../atoms/global"; import { Label } from "./AddGroup"; import ShortUniqueId from "short-unique-id"; import { CustomizedSnackbars } from "../Snackbar/Snackbar"; @@ -48,7 +54,8 @@ import { getGroupNames } from "./UserListOfInvites"; import { WrapperUserAction } from "../WrapperUserAction"; import { useVirtualizer } from "@tanstack/react-virtual"; import ErrorBoundary from "../../common/ErrorBoundary"; - +import ExpandMoreIcon from "@mui/icons-material/ExpandMore"; +import ExpandLessIcon from "@mui/icons-material/ExpandLess"; export const requestQueuePromos = new RequestQueueWithPromise(20); export function utf8ToBase64(inputString: string): string { @@ -65,8 +72,6 @@ export function utf8ToBase64(inputString: string): string { const uid = new ShortUniqueId({ length: 8 }); - - export function getGroupId(str) { const match = str.match(/group-(\d+)-/); return match ? match[1] : null; @@ -82,12 +87,12 @@ export const ListOfGroupPromotions = () => { const [myGroupsWhereIAmAdmin, setMyGroupsWhereIAmAdmin] = useRecoilState( myGroupsWhereIAmAdminAtom ); - const [promotions, setPromotions] = useRecoilState( - promotionsAtom - ); + const [promotions, setPromotions] = useRecoilState(promotionsAtom); const [promotionTimeInterval, setPromotionTimeInterval] = useRecoilState( promotionTimeIntervalAtom ); + const [isExpanded, setIsExpanded] = React.useState(false); + const [openSnack, setOpenSnack] = useState(false); const [infoSnack, setInfoSnack] = useState(null); const [fee, setFee] = useState(null); @@ -96,16 +101,16 @@ export const ListOfGroupPromotions = () => { const { show, setTxList } = useContext(MyContext); const listRef = useRef(); - const rowVirtualizer = useVirtualizer({ - count: promotions.length, - getItemKey: React.useCallback( - (index) => promotions[index]?.identifier, - [promotions] - ), - getScrollElement: () => listRef.current, - estimateSize: () => 80, // Provide an estimated height of items, adjust this as needed - overscan: 10, // Number of items to render outside the visible area to improve smoothness - }); + const rowVirtualizer = useVirtualizer({ + count: promotions.length, + getItemKey: React.useCallback( + (index) => promotions[index]?.identifier, + [promotions] + ), + getScrollElement: () => listRef.current, + estimateSize: () => 80, // Provide an estimated height of items, adjust this as needed + overscan: 10, // Number of items to render outside the visible area to improve smoothness + }); useEffect(() => { try { @@ -117,7 +122,7 @@ export const ListOfGroupPromotions = () => { }, []); const getPromotions = useCallback(async () => { try { - setPromotionTimeInterval(Date.now()) + setPromotionTimeInterval(Date.now()); const identifier = `group-promotions-ui24-`; const url = `${getBaseApiReact()}${getArbitraryEndpointReact()}?mode=ALL&service=DOCUMENT&identifier=${identifier}&limit=100&includemetadata=false&reverse=true&prefix=true`; const response = await fetch(url, { @@ -168,7 +173,9 @@ export const ListOfGroupPromotions = () => { }); await Promise.all(getPromos); - const groupWithInfo = await getGroupNames(data.sort((a, b) => b.created - a.created)); + const groupWithInfo = await getGroupNames( + data.sort((a, b) => b.created - a.created) + ); setPromotions(groupWithInfo); } catch (error) { console.error(error); @@ -177,22 +184,23 @@ export const ListOfGroupPromotions = () => { useEffect(() => { const now = Date.now(); - + const timeSinceLastFetch = now - promotionTimeInterval; - const initialDelay = timeSinceLastFetch >= THIRTY_MINUTES - ? 0 - : THIRTY_MINUTES - timeSinceLastFetch; + const initialDelay = + timeSinceLastFetch >= THIRTY_MINUTES + ? 0 + : THIRTY_MINUTES - timeSinceLastFetch; const initialTimeout = setTimeout(() => { getPromotions(); - + // Start a 30-minute interval const interval = setInterval(() => { getPromotions(); }, THIRTY_MINUTES); - + return () => clearInterval(interval); }, initialDelay); - + return () => clearTimeout(initialTimeout); }, [getPromotions, promotionTimeInterval]); @@ -328,100 +336,143 @@ export const ListOfGroupPromotions = () => { } }; - - return ( - - + setIsExpanded((prev) => !prev)} > - Group Promotions + Group promotions {promotions.length > 0 && ` (${promotions.length})`} - - - + {isExpanded ? ( + + ) : ( + + )} + + - - {loading && promotions.length === 0 && ( + + <> - - - )} - {!loading && promotions.length === 0 && ( - - - Nothing to display - + + + + - )} + + {loading && promotions.length === 0 && ( + + + + )} + {!loading && promotions.length === 0 && ( + + + Nothing to display + + + )}
{ const index = virtualRow.index; const promotion = promotions[index]; return ( -
{ gap: "5px", }} > - - Error loading content: Invalid Data - - } - > - - { - if (reason === "backdropClick") { - // Prevent closing on backdrop click - return; - } - handlePopoverClose(); // Close only on other events like Esc key press - }} - anchorOrigin={{ - vertical: "top", - horizontal: "center", - }} - transformOrigin={{ - vertical: "bottom", - horizontal: "center", - }} - style={{ marginTop: "8px" }} - > - - - Group name: {` ${promotion?.groupName}`} - - - Number of members: {` ${promotion?.memberCount}`} - - {promotion?.description && ( - - {promotion?.description} - - )} - {promotion?.isOpen === false && ( - - *This is a closed/private group, so you will need to wait - until an admin accepts your request - - )} - - - - Close - - - handleJoinGroup(promotion, promotion?.isOpen) - } - > - Join - - - - + + Error loading content: Invalid Data + + } + > + + { + if (reason === "backdropClick") { + // Prevent closing on backdrop click + return; + } + handlePopoverClose(); // Close only on other events like Esc key press + }} + anchorOrigin={{ + vertical: "top", + horizontal: "center", + }} + transformOrigin={{ + vertical: "bottom", + horizontal: "center", + }} + style={{ marginTop: "8px" }} + > + + + Group name: {` ${promotion?.groupName}`} + + + Number of members:{" "} + {` ${promotion?.memberCount}`} + + {promotion?.description && ( + + {promotion?.description} + + )} + {promotion?.isOpen === false && ( + + *This is a closed/private group, so you + will need to wait until an admin accepts + your request + + )} + + + + Close + + + handleJoinGroup( + promotion, + promotion?.isOpen + ) + } + > + Join + + + + - - - - {promotion?.name?.charAt(0)} - - - {promotion?.name} - - - - {promotion?.groupName} - - - - - {promotion?.isOpen === false && ( - - )} - {promotion?.isOpen === true && ( - - )} - - {promotion?.isOpen ? 'Public group' : 'Private group' } - - - - - {promotion?.data} - - - - - - - + + + + {promotion?.name?.charAt(0)} + + + {promotion?.name} + + + + {promotion?.groupName} + + + + + {promotion?.isOpen === false && ( + + )} + {promotion?.isOpen === true && ( + + )} + + {promotion?.isOpen + ? "Public group" + : "Private group"} + + + + + {promotion?.data} + + + + + + +
- ); })}
- - + + + {isShowModal && ( diff --git a/src/components/Group/QMailMessages.tsx b/src/components/Group/QMailMessages.tsx index ccce59b..ee62a4c 100644 --- a/src/components/Group/QMailMessages.tsx +++ b/src/components/Group/QMailMessages.tsx @@ -1,11 +1,11 @@ -import React, { useCallback, useEffect, useState } from 'react' +import React, { useCallback, useEffect, useMemo, useState } from 'react' import List from "@mui/material/List"; import ListItem from "@mui/material/ListItem"; import ListItemButton from "@mui/material/ListItemButton"; import ListItemIcon from "@mui/material/ListItemIcon"; import ListItemText from "@mui/material/ListItemText"; import moment from 'moment' -import { Box, Typography } from "@mui/material"; +import { Box, ButtonBase, Collapse, Typography } from "@mui/material"; import { Spacer } from "../../common/Spacer"; import { getBaseApiReact, isMobile } from "../../App"; import { MessagingIcon } from '../../assets/Icons/MessagingIcon'; @@ -15,6 +15,10 @@ import { executeEvent } from '../../utils/events'; import { CustomLoader } from '../../common/CustomLoader'; import { useRecoilState } from 'recoil'; import { mailsAtom, qMailLastEnteredTimestampAtom } from '../../atoms/global'; +import ExpandMoreIcon from '@mui/icons-material/ExpandMore'; +import ExpandLessIcon from '@mui/icons-material/ExpandLess'; +import MarkEmailUnreadIcon from '@mui/icons-material/MarkEmailUnread'; +import { last } from 'slate'; export const isLessThanOneWeekOld = (timestamp) => { // Current time in milliseconds const now = Date.now(); @@ -41,6 +45,7 @@ export function formatEmailDate(timestamp: number) { } } export const QMailMessages = ({userName, userAddress}) => { + const [isExpanded, setIsExpanded] = useState(false) const [mails, setMails] = useRecoilState(mailsAtom) const [lastEnteredTimestamp, setLastEnteredTimestamp] = useRecoilState(qMailLastEnteredTimestampAtom) const [loading, setLoading] = useState(true) @@ -99,7 +104,16 @@ export const QMailMessages = ({userName, userAddress}) => { }, [getMails, userName, userAddress]); - + const anyUnread = useMemo(()=> { + let unread = false + + mails.forEach((mail)=> { + if(lastEnteredTimestamp && isLessThanOneWeekOld(mail?.created)){ + unread = true + } + }) + return unread + }, [mails, lastEnteredTimestamp]) return ( { }} > - setIsExpanded((prev)=> !prev)} > Latest Q-Mails - - - + + {isExpanded ? : ( + + )} +
+ { + ) } diff --git a/src/components/Group/ThingsToDoInitial.tsx b/src/components/Group/ThingsToDoInitial.tsx index 6825947..0a02f36 100644 --- a/src/components/Group/ThingsToDoInitial.tsx +++ b/src/components/Group/ThingsToDoInitial.tsx @@ -64,6 +64,7 @@ if(hasDoneNameAndBalanceAndIsLoaded){ ); } +if(!isLoaded) return null return ( @@ -96,7 +97,6 @@ if(hasDoneNameAndBalanceAndIsLoaded){ { + if (balance === undefined || +balance > 0) return null; + return ( + + + + + + Are you a new user? + + + + Please message us on Telegram or Discord if you need 4 QORT to start + chatting without any limitations + + + + { + if (window?.electronAPI?.openExternal) { + window.electronAPI.openExternal( + "https://link.qortal.dev/telegram-invite" + ); + } else { + window.open( + "https://link.qortal.dev/telegram-invite", + "_blank" + ); + } + }} + > + Telegram + + { + if (window?.electronAPI?.openExternal) { + window.electronAPI.openExternal( + "https://link.qortal.dev/discord-invite" + ); + } else { + window.open("https://link.qortal.dev/discord-invite", "_blank"); + } + }} + > + Discord + + + + + ); +}; diff --git a/src/components/Home/QortPrice.tsx b/src/components/Home/QortPrice.tsx new file mode 100644 index 0000000..3d54a04 --- /dev/null +++ b/src/components/Home/QortPrice.tsx @@ -0,0 +1,209 @@ +import React, { useCallback, useEffect, useState } from 'react' +import { getBaseApiReact } from '../../App'; +import { Box, Tooltip, Typography } from '@mui/material'; +import { BarSpinner } from '../../common/Spinners/BarSpinner/BarSpinner'; + +function getAverageLtcPerQort(trades) { + let totalQort = 0; + let totalLtc = 0; + + trades.forEach((trade) => { + const qort = parseFloat(trade.qortAmount); + const ltc = parseFloat(trade.foreignAmount); + + totalQort += qort; + totalLtc += ltc; + }); + + // Avoid division by zero + if (totalQort === 0) return 0; + + // Weighted average price + return parseFloat((totalLtc / totalQort).toFixed(8)); + } + + function getTwoWeeksAgoTimestamp() { + const now = new Date(); + now.setDate(now.getDate() - 14); // Subtract 14 days + return now.getTime(); // Get timestamp in milliseconds + } + + function formatWithCommasAndDecimals(number) { + + return Number(number).toLocaleString(); + } + + +export const QortPrice = () => { + const [ltcPerQort, setLtcPerQort] = useState(null) + const [supply, setSupply] = useState(null) + const [lastBlock, setLastBlock] = useState(null) + const [loading, setLoading] = useState(true) + + const getPrice = useCallback(async () => { + try { + setLoading(true) + + const response = await fetch(`${getBaseApiReact()}/crosschain/trades?foreignBlockchain=LITECOIN&minimumTimestamp=${getTwoWeeksAgoTimestamp()}&limit=20&reverse=true`); + const data = await response.json(); + + + setLtcPerQort(getAverageLtcPerQort(data)); + } catch (error) { + console.error(error); + } finally { + setLoading(false) + + } + }, []) + + const getLastBlock = useCallback(async () => { + try { + setLoading(true) + + const response = await fetch(`${getBaseApiReact()}/blocks/last`); + const data = await response.json(); + + setLastBlock(data); + } catch (error) { + console.error(error); + } finally { + setLoading(false) + + } + }, []) + + const getSupplyInCirculation = useCallback(async () => { + try { + setLoading(true) + + const response = await fetch(`${getBaseApiReact()}/stats/supply/circulating`); + const data = await response.text(); + formatWithCommasAndDecimals(data) + setSupply(formatWithCommasAndDecimals(data)); + } catch (error) { + console.error(error); + } finally { + setLoading(false) + + } + }, []) + + + + + useEffect(() => { + + getPrice(); + getSupplyInCirculation() + getLastBlock() + const interval = setInterval(() => { + getPrice(); + getSupplyInCirculation() + getLastBlock() + }, 900000); + + return () => clearInterval(interval); + + }, [getPrice]); + + console.log('supply', supply) + + return ( + + Based on the latest 20 trades} + placement="bottom" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + + Price + {!ltcPerQort ? ( + + ): ( + {ltcPerQort} LTC/QORT + )} + + + + + + Supply + {!supply ? ( + + ): ( + {supply} QORT + )} + + + + Last height + {!lastBlock?.height ? ( + + ): ( + {lastBlock?.height} + + )} + + + + ) +} From b4cc55b6e9c5b571cbc3d089b1d993cd4c4d68ca Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 27 Feb 2025 21:43:20 +0200 Subject: [PATCH 115/119] fixed line break --- src/components/Chat/styles.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/components/Chat/styles.css b/src/components/Chat/styles.css index ba97bb3..3c7c570 100644 --- a/src/components/Chat/styles.css +++ b/src/components/Chat/styles.css @@ -113,6 +113,11 @@ pointer-events: none; } + .tiptap p:empty::before { + content: ''; + display: inline-block; + } + .tiptap a { color: cadetblue } From 971c6291f35c367eb2c91b34590765ca4f4e6e1a Mon Sep 17 00:00:00 2001 From: crowetic <5431064+crowetic@users.noreply.github.com> Date: Thu, 27 Feb 2025 13:15:25 -0800 Subject: [PATCH 116/119] Update README.md Initial Readme for Qortal Hub, to be expanded in the future. --- README.md | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 0d6babe..25f4e90 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,21 @@ -# React + TypeScript + Vite +# Qortal Hub - Desktop Interface for Qortal -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. +Qortal Hub is the newest interface for Qortal, part of the 'Qortal Trifecta' series of new User Interfaces for the platform/network. -Currently, two official plugins are available: +It is likely that Qortal Hub will become the new 'primary interface' for Qortal, and that the primary development focus surrounding Qortal Interface development, will be focused here instead of the previous 'qortal-ui' repo. -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh +## Qortal Hub - Next-Level Secure Communications and More -## Expanding the ESLint configuration +Qortal Hub came along with the new Group Encryption methodologies applied, which provide **encrypted chat in Q-Chat for private groups.** Qortal Hub was the first to implement the new method of group encryption, which allows new users to see previously published data, unlike the previous group encryption methodology of things like 'threads' in Q-Mail. -If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: +Allowing new users to view older messages also comes along with a massive boost to the usability of the group encryption, and as such has been leveraged in multiple places inside Qortal Hub, Qortal Extension, and Qortal Go. -- Configure the top-level `parserOptions` property like this: +## Ease of Use Expanded + +Qortal Hub has a focus on ease of use for new users. Providing both the ability to utlilize Qortal without needing to run a local node (though running a local node is still the recommended method to access Qortal), and multiple built-in (QDN-published) walk-thru videos (by Qortal Justin) that explain the various basics of any given section of the application. This allows new users to 'jump right in' to utilizing Qortal Hub, and Qortal overall, in a much more streamlined fashion than that which was previously required by the 'legacy UI' (qortal-ui). + +Leveraging a redundant set of publicly accessible nodes provided by crowetic, Qortal Hub, Qortal Go, and Qortal Extension, all allow the use of Qortal without running a node, making it very simple to 'install and go' and start making use of the extensive functionality provided within the Qortal Ecosystem. + +Many additional details and a fully featured wiki will be created over time. Reach out on the chat on https://qortal.dev or in any of the community locations for Qortal, if you have any issues. Thank you! -```js -export default { - // other rules... - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - project: ['./tsconfig.json', './tsconfig.node.json'], - tsconfigRootDir: __dirname, - }, -} -``` -- Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` -- Optionally add `plugin:@typescript-eslint/stylistic-type-checked` -- Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list From 3273fac1f20d66957d6f88eae4bc9ebf8a35fd66 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Thu, 27 Feb 2025 23:23:53 +0200 Subject: [PATCH 117/119] added crosschain txs qortal request --- .../Apps/useQortalMessageListener.tsx | 3 +- src/qortalRequests.ts | 22 ++++- src/qortalRequests/get.ts | 93 +++++++++++++++++++ 3 files changed, 116 insertions(+), 2 deletions(-) diff --git a/src/components/Apps/useQortalMessageListener.tsx b/src/components/Apps/useQortalMessageListener.tsx index c0c7973..635aba6 100644 --- a/src/components/Apps/useQortalMessageListener.tsx +++ b/src/components/Apps/useQortalMessageListener.tsx @@ -210,6 +210,7 @@ export const listOfAllQortalRequests = [ 'SEARCH_TRANSACTIONS', 'GET_PRICE', 'SHOW_ACTIONS', + 'GET_USER_WALLET_TRANSACTIONS' ] export const UIQortalRequests = [ @@ -219,7 +220,7 @@ export const UIQortalRequests = [ 'GET_WALLET_BALANCE', 'GET_USER_WALLET_INFO', 'GET_CROSSCHAIN_SERVER_INFO', 'GET_TX_ACTIVITY_SUMMARY', 'GET_FOREIGN_FEE', 'UPDATE_FOREIGN_FEE', 'GET_SERVER_CONNECTION_HISTORY', 'SET_CURRENT_FOREIGN_SERVER', - 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_PUBLIC_NODE', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN', 'DECRYPT_AESGCM', 'CANCEL_GROUP_INVITE', 'CREATE_GROUP' + 'ADD_FOREIGN_SERVER', 'REMOVE_FOREIGN_SERVER', 'GET_DAY_SUMMARY', 'CREATE_TRADE_BUY_ORDER', 'CREATE_TRADE_SELL_ORDER', 'CANCEL_TRADE_SELL_ORDER', 'IS_USING_PUBLIC_NODE', 'ADMIN_ACTION', 'SIGN_TRANSACTION', 'OPEN_NEW_TAB', 'CREATE_AND_COPY_EMBED_LINK', 'DECRYPT_QORTAL_GROUP_DATA', 'DECRYPT_DATA_WITH_SHARING_KEY', 'DELETE_HOSTED_DATA', 'GET_HOSTED_DATA', 'SHOW_ACTIONS', 'REGISTER_NAME', 'UPDATE_NAME', 'LEAVE_GROUP', 'INVITE_TO_GROUP', 'KICK_FROM_GROUP', 'BAN_FROM_GROUP', 'CANCEL_GROUP_BAN', 'ADD_GROUP_ADMIN', 'REMOVE_GROUP_ADMIN', 'DECRYPT_AESGCM', 'CANCEL_GROUP_INVITE', 'CREATE_GROUP', 'GET_USER_WALLET_TRANSACTIONS' ]; // TODO listOfAllQortalRequests diff --git a/src/qortalRequests.ts b/src/qortalRequests.ts index c5283d5..0397538 100644 --- a/src/qortalRequests.ts +++ b/src/qortalRequests.ts @@ -1,6 +1,6 @@ import { gateways, getApiKeyFromStorage } from "./background"; import { listOfAllQortalRequests } from "./components/Apps/useQortalMessageListener"; -import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelGroupInviteRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createGroupRequest, createPoll, createSellOrder, decryptAESGCMRequest, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, removeGroupAdminRequest, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; +import { addForeignServer, addGroupAdminRequest, addListItems, adminAction, banFromGroupRequest, cancelGroupBanRequest, cancelGroupInviteRequest, cancelSellOrder, createAndCopyEmbedLink, createBuyOrder, createGroupRequest, createPoll, createSellOrder, decryptAESGCMRequest, decryptData, decryptDataWithSharingKey, decryptQortalGroupData, deleteHostedData, deleteListItems, deployAt, encryptData, encryptDataWithSharingKey, encryptQortalGroupData, getCrossChainServerInfo, getDaySummary, getForeignFee, getHostedData, getListItems, getServerConnectionHistory, getTxActivitySummary, getUserAccount, getUserWallet, getUserWalletInfo, getUserWalletTransactions, getWalletBalance, inviteToGroupRequest, joinGroup, kickFromGroupRequest, leaveGroupRequest, openNewTab, publishMultipleQDNResources, publishQDNResource, registerNameRequest, removeForeignServer, removeGroupAdminRequest, saveFile, sendChatMessage, sendCoin, setCurrentForeignServer, signTransaction, updateForeignFee, updateNameRequest, voteOnPoll } from "./qortalRequests/get"; import { getData, storeData } from "./utils/chromeStorage"; @@ -414,6 +414,26 @@ export const isRunningGateway = async ()=> { } break; } + + case "GET_USER_WALLET_TRANSACTIONS": { + try { + const res = await getUserWalletTransactions(request.payload, isFromExtension, appInfo); + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + payload: res, + type: "backgroundMessageResponse", + }, event.origin); + } catch (error) { + event.source.postMessage({ + requestId: request.requestId, + action: request.action, + error: error.message, + type: "backgroundMessageResponse", + }, event.origin); + } + break; + } case "GET_USER_WALLET_INFO": { try { diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index 151d6db..b14a57c 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -2357,6 +2357,99 @@ if (resPermission) { } }; +export const getUserWalletTransactions = async (data, isFromExtension, appInfo) => { + const requiredFields = ["coin"]; + const missingFields: string[] = []; + requiredFields.forEach((field) => { + if (!data[field]) { + missingFields.push(field); + } + }); + if (missingFields.length > 0) { + const missingFieldsString = missingFields.join(", "); + const errorMsg = `Missing fields: ${missingFieldsString}`; + throw new Error(errorMsg); + } + + const value = + (await getPermission( + `getUserWalletTransactions-${appInfo?.name}-${data.coin}` + )) || false; +let skip = false; +if (value) { + skip = true; +} + let resPermission; + + if (!skip) { + + resPermission = await getUserPermission( + { + text1: + "Do you give this application permission to retrieve your wallet transactions", + highlightedText: `coin: ${data.coin}`, + checkbox1: { + value: true, + label: "Always allow wallet txs to be retrieved automatically", + }, + }, + isFromExtension + ); +} +const { accepted = false, checkbox1 = false } = resPermission || {}; + +if (resPermission) { + setPermission( + `getUserWalletTransactions-${appInfo?.name}-${data.coin}`, + checkbox1 + ); +} + + if (accepted || skip) { + const coin = data.coin; + const walletKeys = await getUserWalletFunc(coin); + let publicKey + if(data?.coin === 'ARRR'){ + const resKeyPair = await getKeyPair(); + const parsedData = resKeyPair; + publicKey = parsedData.arrrSeed58; + } else { + publicKey = walletKeys["publickey"] + } + + const _url = await createEndpoint( + `/crosschain/` + data.coin.toLowerCase() + `/wallettransactions` + ); + const _body = publicKey; + try { + const response = await fetch(_url, { + method: "POST", + headers: { + Accept: "*/*", + "Content-Type": "application/json", + }, + body: _body, + }); + if (!response?.ok) throw new Error("Unable to fetch wallet transactions"); + let res; + try { + res = await response.clone().json(); + } catch (e) { + res = await response.text(); + } + if (res?.error && res?.message) { + throw new Error(res.message); + } + + return res; + } catch (error) { + throw new Error(error?.message || "Fetch Wallet Transactions Failed"); + } + } else { + throw new Error("User declined request"); + } +}; + export const getCrossChainServerInfo = async (data) => { const requiredFields = ["coin"]; const missingFields: string[] = []; From bbad09b5f55ce04007e8dc79908d24b4688fc5ee Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 28 Feb 2025 02:07:06 +0200 Subject: [PATCH 118/119] re-arrange profile --- src/App.tsx | 447 ++++++++++++++++++++------------ src/assets/Icons/WalletIcon.tsx | 2 +- 2 files changed, 284 insertions(+), 165 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 176d140..9e14601 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -144,6 +144,7 @@ import { isRunningGateway } from "./qortalRequests"; import { QMailStatus } from "./components/QMailStatus"; import { GlobalActions } from "./components/GlobalActions/GlobalActions"; import { useBlockedAddresses } from "./components/Group/useBlockUsers"; +import { WalletIcon } from "./assets/Icons/WalletIcon"; type extStates = | "not-authenticated" @@ -1334,6 +1335,244 @@ function App() { } }; + const renderProfileLeft = ()=> { + + return + + + {authenticatedMode === "qort" && ( + LITECOIN WALLET} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + { + + setAuthenticatedMode("ltc"); + }} + src={ltcLogo} + style={{ + cursor: "pointer", + width: "20px", + height: "auto", + }} + /> + + )} + {authenticatedMode === "ltc" && ( + QORTAL WALLET} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + { + setAuthenticatedMode("qort"); + }} + src={qortLogo} + style={{ + cursor: "pointer", + width: "20px", + height: "auto", + }} + /> + + )} + + + + {authenticatedMode === "ltc" ? ( + <> + + + + + {rawWallet?.ltcAddress?.slice(0, 6)}... + {rawWallet?.ltcAddress?.slice(-4)} + + + + {ltcBalanceLoading && ( + + )} + {!isNaN(+ltcBalance) && !ltcBalanceLoading && ( + + + {ltcBalance} LTC + + + + )} + + + ) : ( + <> + + + + {userInfo?.name} + + + + + {rawWallet?.address0?.slice(0, 6)}... + {rawWallet?.address0?.slice(-4)} + + + + {qortBalanceLoading && ( + + )} + {!qortBalanceLoading && balance >= 0 && ( + + + {balance?.toFixed(2)} QORT + + + + )} + + + {userInfo && !userInfo?.name && ( + { + setOpenRegisterName(true); + }} + > + REGISTER NAME + + )} + + { + setIsOpenSendQort(true); + // setExtstate("send-qort"); + setIsOpenDrawerProfile(false); + }} + > + Transfer QORT + + + + )} + { + executeEvent("addTab", { + data: { service: "APP", name: "q-trade" }, + }); + executeEvent("open-apps-mode", {}); + }} + > + Get QORT at Q-Trade + + + } + const renderProfile = () => { return ( - - - {authenticatedMode === "ltc" ? ( - <> - - - - - {rawWallet?.ltcAddress?.slice(0, 6)}... - {rawWallet?.ltcAddress?.slice(-4)} - - - - {ltcBalanceLoading && ( - - )} - {!isNaN(+ltcBalance) && !ltcBalanceLoading && ( - - - {ltcBalance} LTC - - - - )} - - - ) : ( - <> - - - - {userInfo?.name} - - - - - {rawWallet?.address0?.slice(0, 6)}... - {rawWallet?.address0?.slice(-4)} - - - - {qortBalanceLoading && ( - - )} - {!qortBalanceLoading && balance >= 0 && ( - - - {balance?.toFixed(2)} QORT - - - - )} - - - {userInfo && !userInfo?.name && ( - { - setOpenRegisterName(true); - }} - > - REGISTER NAME - - )} - - { - setIsOpenSendQort(true); - // setExtstate("send-qort"); - setIsOpenDrawerProfile(false); - }} - > - Transfer QORT - - - - )} - { - executeEvent("addTab", { - data: { service: "APP", name: "q-trade" }, - }); - executeEvent("open-apps-mode", {}); - }} - > - Get QORT at Q-Trade - - + <> + {renderProfileLeft()} + )} - - {authenticatedMode === "qort" && ( + + {desktopViewMode !== 'home' && ( + <> + + + WALLET} + placement="left" + arrow + sx={{ fontSize: "24" }} + slotProps={{ + tooltip: { + sx: { + color: "#ffffff", + backgroundColor: "#444444", + }, + }, + arrow: { + sx: { + color: "#444444", + }, + }, + }} + > + { + setIsOpenDrawerProfile(true); + }}> + + + + + + + )} + + {/* {authenticatedMode === "qort" && ( LITECOIN WALLET} placement="left" @@ -1637,6 +1753,9 @@ function App() { > { + if(desktopViewMode !== 'home'){ + setIsOpenDrawerProfile((prev)=> !prev) + } setAuthenticatedMode("ltc"); }} src={ltcLogo} @@ -1680,7 +1799,7 @@ function App() { }} /> - )} + )} */} @@ -3514,7 +3633,7 @@ function App() { open={isOpenDrawerProfile} setOpen={setIsOpenDrawerProfile} > - {renderProfile()} + {renderProfileLeft()} diff --git a/src/assets/Icons/WalletIcon.tsx b/src/assets/Icons/WalletIcon.tsx index ff993d4..7a0cc58 100644 --- a/src/assets/Icons/WalletIcon.tsx +++ b/src/assets/Icons/WalletIcon.tsx @@ -2,7 +2,7 @@ import React from 'react'; export const WalletIcon= ({ color, height, width }) => { return ( - + From f9b1e2784f7b14aacbe553170c136b0cdb4b6fa7 Mon Sep 17 00:00:00 2001 From: PhilReact Date: Fri, 28 Feb 2025 13:54:32 +0200 Subject: [PATCH 119/119] fixed sell order foreign amount parsing --- src/qortalRequests/get.ts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/qortalRequests/get.ts b/src/qortalRequests/get.ts index b14a57c..956fa07 100644 --- a/src/qortalRequests/get.ts +++ b/src/qortalRequests/get.ts @@ -3522,6 +3522,8 @@ export const createSellOrder = async (data, isFromExtension) => { throw new Error(errorMsg); } + const parsedForeignAmount = Number(data.foreignAmount)?.toFixed(8) + const receivingAddress = await getUserWalletFunc(data.foreignBlockchain); try { const resPermission = await getUserPermission( @@ -3530,7 +3532,7 @@ export const createSellOrder = async (data, isFromExtension) => { "Do you give this application permission to perform a sell order?", text2: `${data.qortAmount}${" "} ${`QORT`}`, - text3: `FOR ${data.foreignAmount} ${data.foreignBlockchain}`, + text3: `FOR ${parsedForeignAmount} ${data.foreignBlockchain}`, fee: "0.02", }, isFromExtension @@ -3550,9 +3552,9 @@ export const createSellOrder = async (data, isFromExtension) => { { creatorPublicKey: userPublicKey, qortAmount: parseFloat(data.qortAmount), - fundingQortAmount: parseFloat(data.qortAmount) + 0.001, + fundingQortAmount: parseFloat(data.qortAmount) + 0.01, foreignBlockchain: data.foreignBlockchain, - foreignAmount: parseFloat(data.foreignAmount), + foreignAmount: parseFloat(parsedForeignAmount), tradeTimeout: 120, receivingAddress: receivingAddress.address, },