156 lines
4.2 KiB
JavaScript
156 lines
4.2 KiB
JavaScript
import React, {
|
|
createContext,
|
|
useCallback,
|
|
useEffect,
|
|
useMemo,
|
|
useState,
|
|
} from 'react';
|
|
import { addDataToCollection } from '../db';
|
|
import { decryptMessage } from '../app/functions/messaging/encodingAndDecodingMessages';
|
|
import { useKeysContext } from './keys';
|
|
|
|
// Create a context for the WebView ref
|
|
const GlobalAppData = createContext(null);
|
|
|
|
export const GlobalAppDataProvider = ({ children }) => {
|
|
const { contactsPrivateKey, publicKey } = useKeysContext();
|
|
|
|
const [globalAppDataInformation, setGlobalAppDatasInformation] = useState({});
|
|
const [giftCardsList, setGiftCardsList] = useState([]);
|
|
const [decodedChatGPT, setDecodedChatGPT] = useState(null);
|
|
const [decodedMessages, setDecodedMessages] = useState(null);
|
|
const [decodedVPNS, setDecodedVPNS] = useState(null);
|
|
const [decodedGiftCards, setDecodedGiftCards] = useState(null);
|
|
|
|
const toggleGlobalAppDataInformation = (newData, writeToDB) => {
|
|
setGlobalAppDatasInformation(prev => {
|
|
const newAppData = { ...prev, ...newData };
|
|
|
|
if (writeToDB) {
|
|
addDataToCollection(
|
|
{ appData: newAppData },
|
|
'blitzWalletUsers',
|
|
publicKey,
|
|
);
|
|
}
|
|
return newAppData;
|
|
});
|
|
};
|
|
|
|
const toggleGiftCardsList = useCallback(giftCards => {
|
|
setGiftCardsList(giftCards);
|
|
}, []);
|
|
|
|
const decryptData = (key, defaultValue) => {
|
|
try {
|
|
let data;
|
|
if (key === 'chatGPT') {
|
|
data = globalAppDataInformation[key]?.conversation;
|
|
} else {
|
|
data = globalAppDataInformation[key];
|
|
}
|
|
if (!publicKey || typeof data !== 'string') return defaultValue;
|
|
|
|
const decryptedString = decryptMessage(
|
|
contactsPrivateKey,
|
|
publicKey,
|
|
data,
|
|
);
|
|
|
|
if (
|
|
!decryptedString ||
|
|
typeof decryptedString !== 'string' ||
|
|
decryptedString.trim() === ''
|
|
) {
|
|
console.warn(`Decryption returned invalid data for key: ${key}`);
|
|
return defaultValue;
|
|
}
|
|
|
|
return JSON.parse(decryptedString);
|
|
} catch (error) {
|
|
console.error(`Error decrypting data for key "${key}":`, error.message);
|
|
return defaultValue;
|
|
}
|
|
};
|
|
|
|
useEffect(() => {
|
|
if (!publicKey || !contactsPrivateKey) return;
|
|
try {
|
|
const data = decryptData('chatGPT', []);
|
|
setDecodedChatGPT({
|
|
conversation: data,
|
|
credits: globalAppDataInformation?.chatGPT?.credits || 0,
|
|
});
|
|
} catch (error) {
|
|
console.error('Error decoding ChatGPT data:', error);
|
|
setDecodedChatGPT({
|
|
conversation: [],
|
|
credits: 0,
|
|
});
|
|
}
|
|
}, [globalAppDataInformation.chatGPT, publicKey, contactsPrivateKey]);
|
|
|
|
useEffect(() => {
|
|
if (!publicKey || !contactsPrivateKey) return;
|
|
try {
|
|
setDecodedMessages(
|
|
decryptData('messagesApp', { received: [], sent: [] }),
|
|
);
|
|
} catch (error) {
|
|
console.error('Error decoding messages:', error);
|
|
setDecodedMessages({ received: [], sent: [] });
|
|
}
|
|
}, [globalAppDataInformation.messagesApp, publicKey, contactsPrivateKey]);
|
|
|
|
useEffect(() => {
|
|
if (!publicKey || !contactsPrivateKey) return;
|
|
try {
|
|
setDecodedVPNS(decryptData('VPNplans', []));
|
|
} catch (error) {
|
|
console.error('Error decoding VPN plans:', error);
|
|
setDecodedVPNS([]);
|
|
}
|
|
}, [globalAppDataInformation.VPNplans, publicKey, contactsPrivateKey]);
|
|
|
|
useEffect(() => {
|
|
if (!publicKey || !contactsPrivateKey) return;
|
|
try {
|
|
setDecodedGiftCards(decryptData('giftCards', {}));
|
|
} catch (error) {
|
|
console.error('Error decoding gift cards:', error);
|
|
setDecodedGiftCards({});
|
|
}
|
|
}, [globalAppDataInformation.giftCards, publicKey, contactsPrivateKey]);
|
|
|
|
const contextValue = useMemo(
|
|
() => ({
|
|
decodedChatGPT,
|
|
decodedMessages,
|
|
decodedVPNS,
|
|
decodedGiftCards,
|
|
globalAppDataInformation,
|
|
toggleGlobalAppDataInformation,
|
|
giftCardsList,
|
|
toggleGiftCardsList,
|
|
}),
|
|
[
|
|
decodedChatGPT,
|
|
decodedMessages,
|
|
decodedVPNS,
|
|
decodedGiftCards,
|
|
globalAppDataInformation,
|
|
giftCardsList,
|
|
],
|
|
);
|
|
|
|
return (
|
|
<GlobalAppData.Provider value={contextValue}>
|
|
{children}
|
|
</GlobalAppData.Provider>
|
|
);
|
|
};
|
|
|
|
export const useGlobalAppData = () => {
|
|
return React.useContext(GlobalAppData);
|
|
};
|