fix(anon mode): refreshing page could generate a new anon address for thread

This commit is contained in:
Tom (plebeius.eth)
2024-09-20 15:13:53 +02:00
parent 641db5defe
commit f247f0e995
2 changed files with 48 additions and 40 deletions
+20 -25
View File
@@ -1,47 +1,42 @@
import { useAccount } from '@plebbit/plebbit-react-hooks';
import useAnonModeStore from '../stores/use-anon-mode-store';
import { useCallback, useMemo } from 'react';
import { useCallback } from 'react';
const useAnonMode = (postCid?: string) => {
const { anonMode, threadSigners, setThreadSigner, setAddressSigner, getAddressSigner } = useAnonModeStore((state) => ({
const { anonMode, getThreadSigner, setThreadSigner, setAddressSigner, getAddressSigner } = useAnonModeStore((state) => ({
anonMode: state.anonMode,
threadSigners: state.threadSigners,
getThreadSigner: state.getThreadSigner,
setThreadSigner: state.setThreadSigner,
setAddressSigner: state.setAddressSigner,
getAddressSigner: state.getAddressSigner,
}));
const threadSigner = useMemo(() => (postCid ? threadSigners[postCid] : undefined), [postCid, threadSigners]);
const account = useAccount();
const getNewSigner = useCallback(async () => {
if (anonMode) {
if (!postCid || !threadSigner) {
try {
const signer = await account?.plebbit.createSigner();
if (signer) {
if (postCid) {
setThreadSigner(postCid, signer);
} else {
setAddressSigner(signer);
}
if (postCid) {
const existingSigner = getThreadSigner(postCid);
if (existingSigner) {
return existingSigner;
}
}
try {
const signer = await account?.plebbit.createSigner();
if (signer) {
if (postCid) {
setThreadSigner(postCid, signer);
} else {
setAddressSigner(signer);
}
return signer;
} catch (error) {
console.error('Failed to create anonymous signer:', error);
}
} else {
try {
const signer = await account?.plebbit.createSigner({ type: 'ed25519', privateKey: threadSigner?.privateKey });
return signer;
} catch (error) {
console.error('Failed to retrieve anonymous signer:', error);
}
return signer;
} catch (error) {
console.error('Failed to create anonymous signer:', error);
}
}
return null;
}, [anonMode, postCid, threadSigner, account, setThreadSigner, setAddressSigner]);
}, [anonMode, postCid, account, getThreadSigner, setThreadSigner, setAddressSigner]);
const getExistingSigner = useCallback(
(address: string) => {