diff --git a/examples/eth-dm/src/App.tsx b/examples/eth-dm/src/App.tsx index c6d81b64a9..d10044f7ff 100644 --- a/examples/eth-dm/src/App.tsx +++ b/examples/eth-dm/src/App.tsx @@ -27,6 +27,7 @@ function App() { const [ethDmKeyPair, setEthDmKeyPair] = useState(); const [publicKeyMsg, setPublicKeyMsg] = useState(); const [publicKeys, setPublicKeys] = useState>(new Map()); + const [messages, setMessages] = useState([]); useEffect(() => { if (provider) return; @@ -68,11 +69,22 @@ function App() { setPublicKeys ); + const observerDirectMessage = handleDirectMessage.bind({}, setMessages); + useEffect(() => { if (!waku) return; waku.relay.addObserver(observerPublicKeyMessage, [PublicKeyContentTopic]); }); + useEffect(() => { + if (!waku) return; + if (!ethDmKeyPair) return; + waku.relay.addObserver( + observerDirectMessage.bind({}, ethDmKeyPair.privateKey), + [DirectMessageContentTopic] + ); + }); + const broadcastPublicKey = () => { if (!ethDmKeyPair) return; if (!provider) return; @@ -99,6 +111,7 @@ function App() { }; const sendDummyMessage = () => { + console.log(`Sending messages to ${publicKeys.size} peers`); publicKeys.forEach(async (publicKey, address) => { const msg = await encodeEncryptedWakuMessage( 'Here is a secret message', @@ -122,8 +135,9 @@ function App() { onClick={sendDummyMessage} disabled={!waku || publicKeys.size === 0} > - Public Direct Message + Publish Direct Message + {messages} ); @@ -189,6 +203,27 @@ function handlePublicKeyMessage( }); } +async function handleDirectMessage( + setter: Dispatch>, + privateKey: string, + wakuMsg: WakuMessage +) { + console.log('Waku Message received:', wakuMsg); + if (!wakuMsg.payload) return; + const directMessage: DirectMessage = decode(wakuMsg.payload); + const msg = await EthCrypto.decryptWithPrivateKey( + privateKey, + directMessage.encMessage + ); + + console.log('Message decrypted:', msg); + setter((prevMsgs: string[]) => { + const copy = prevMsgs.slice(); + copy.push(msg); + return copy; + }); +} + function encode(msg: T): Buffer { const jsonStr = JSON.stringify(msg); return Buffer.from(jsonStr, 'utf-8');