Files
5chan/src/hooks/use-anon-mode.ts
T

53 lines
1.6 KiB
TypeScript

import { useAccount } from '@plebbit/plebbit-react-hooks';
import useAnonModeStore from '../stores/use-anon-mode-store';
const useAnonMode = (postCid?: string) => {
const { anonMode, threadSigners, setThreadSigner, setAddressSigner, getAddressSigner } = useAnonModeStore((state) => ({
anonMode: state.anonMode,
threadSigners: state.threadSigners,
setThreadSigner: state.setThreadSigner,
setAddressSigner: state.setAddressSigner,
getAddressSigner: state.getAddressSigner,
}));
const threadSigner = postCid ? threadSigners[postCid] : undefined;
const account = useAccount();
const getNewSigner = async () => {
if (anonMode) {
if (!postCid || !threadSigner) {
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 null;
};
const getExistingSigner = (address: string) => {
return getAddressSigner(address);
};
return { anonMode, getNewSigner, getExistingSigner };
};
export default useAnonMode;