mirror of
https://github.com/logos-messaging/examples.waku.org.git
synced 2026-01-03 21:33:08 +00:00
feat: use light push and filter to access Waku network
This commit is contained in:
parent
257e4910a1
commit
a3fe2709db
@ -5,7 +5,8 @@
|
|||||||
- Private Messaging
|
- Private Messaging
|
||||||
- React/TypeScript
|
- React/TypeScript
|
||||||
- Waku Light Push
|
- Waku Light Push
|
||||||
- Signature with Web3
|
- Waku Filter
|
||||||
|
- Signature with Web3 (EIP-712, sign typed data)
|
||||||
- Asymmetric Encryption
|
- Asymmetric Encryption
|
||||||
- Symmetric Encryption
|
- Symmetric Encryption
|
||||||
|
|
||||||
|
|||||||
@ -67,6 +67,10 @@ const useStyles = makeStyles({
|
|||||||
|
|
||||||
function App() {
|
function App() {
|
||||||
const [waku, setWaku] = useState<Waku>();
|
const [waku, setWaku] = useState<Waku>();
|
||||||
|
const [unsubscribePublicKeyMsg, setUnsubscribePublicKeyMsg] =
|
||||||
|
useState<() => Promise<void>>();
|
||||||
|
const [unsubscribePrivateMsg, setUnsubscribePrivateMsg] =
|
||||||
|
useState<() => Promise<void>>();
|
||||||
const [provider, setProvider] = useState<Web3Provider>();
|
const [provider, setProvider] = useState<Web3Provider>();
|
||||||
const [encryptionKeyPair, setEncryptionKeyPair] = useState<
|
const [encryptionKeyPair, setEncryptionKeyPair] = useState<
|
||||||
KeyPair | undefined
|
KeyPair | undefined
|
||||||
@ -77,10 +81,10 @@ function App() {
|
|||||||
const [messages, setMessages] = useState<Message[]>([]);
|
const [messages, setMessages] = useState<Message[]>([]);
|
||||||
const [address, setAddress] = useState<string>();
|
const [address, setAddress] = useState<string>();
|
||||||
const [peerStats, setPeerStats] = useState<{
|
const [peerStats, setPeerStats] = useState<{
|
||||||
relayPeers: number;
|
filterPeers: number;
|
||||||
lightPushPeers: number;
|
lightPushPeers: number;
|
||||||
}>({
|
}>({
|
||||||
relayPeers: 0,
|
filterPeers: 0,
|
||||||
lightPushPeers: 0,
|
lightPushPeers: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -88,15 +92,15 @@ function App() {
|
|||||||
|
|
||||||
// Waku initialization
|
// Waku initialization
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (waku) return;
|
(async () => {
|
||||||
initWaku()
|
if (waku) return;
|
||||||
.then((_waku) => {
|
|
||||||
console.log("waku: ready");
|
const _waku = await initWaku();
|
||||||
setWaku(_waku);
|
console.log("waku: ready");
|
||||||
})
|
setWaku(_waku);
|
||||||
.catch((e) => {
|
})().catch((e) => {
|
||||||
console.error("Failed to initiate Waku", e);
|
console.error("Failed to initiate Waku", e);
|
||||||
});
|
});
|
||||||
}, [waku]);
|
}, [waku]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -108,30 +112,40 @@ function App() {
|
|||||||
setPublicKeys
|
setPublicKeys
|
||||||
);
|
);
|
||||||
|
|
||||||
waku.relay.addDecryptionKey(PublicKeyMessageEncryptionKey);
|
waku.filter.addDecryptionKey(PublicKeyMessageEncryptionKey);
|
||||||
waku.relay.addObserver(observerPublicKeyMessage, [PublicKeyContentTopic]);
|
waku.filter
|
||||||
|
.subscribe(observerPublicKeyMessage, [PublicKeyContentTopic])
|
||||||
|
.then(
|
||||||
|
(unsubscribe) => {
|
||||||
|
setUnsubscribePublicKeyMsg(unsubscribe);
|
||||||
|
},
|
||||||
|
(e) => {
|
||||||
|
console.error("Failed to subscribe", e);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
return function cleanUp() {
|
return function cleanUp() {
|
||||||
if (!waku) return;
|
if (!waku) return;
|
||||||
|
if (!unsubscribePublicKeyMsg) return;
|
||||||
|
|
||||||
waku.relay.deleteDecryptionKey(PublicKeyMessageEncryptionKey);
|
waku.filter.deleteDecryptionKey(PublicKeyMessageEncryptionKey);
|
||||||
waku.relay.deleteObserver(observerPublicKeyMessage, [
|
unsubscribePublicKeyMsg().catch((e) =>
|
||||||
PublicKeyContentTopic,
|
console.error("Failed to unsubscribe", e)
|
||||||
]);
|
);
|
||||||
};
|
};
|
||||||
}, [waku, address]);
|
}, [waku, address, unsubscribePublicKeyMsg]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!waku) return;
|
if (!waku) return;
|
||||||
if (!encryptionKeyPair) return;
|
if (!encryptionKeyPair) return;
|
||||||
|
|
||||||
waku.relay.addDecryptionKey(encryptionKeyPair.privateKey);
|
waku.filter.addDecryptionKey(encryptionKeyPair.privateKey);
|
||||||
|
|
||||||
return function cleanUp() {
|
return function cleanUp() {
|
||||||
if (!waku) return;
|
if (!waku) return;
|
||||||
if (!encryptionKeyPair) return;
|
if (!encryptionKeyPair) return;
|
||||||
|
|
||||||
waku.relay.deleteDecryptionKey(encryptionKeyPair.privateKey);
|
waku.filter.deleteDecryptionKey(encryptionKeyPair.privateKey);
|
||||||
};
|
};
|
||||||
}, [waku, encryptionKeyPair]);
|
}, [waku, encryptionKeyPair]);
|
||||||
|
|
||||||
@ -146,28 +160,35 @@ function App() {
|
|||||||
address
|
address
|
||||||
);
|
);
|
||||||
|
|
||||||
waku.relay.addObserver(observerPrivateMessage, [
|
waku.filter
|
||||||
PrivateMessageContentTopic,
|
.subscribe(observerPrivateMessage, [PrivateMessageContentTopic])
|
||||||
]);
|
.then(
|
||||||
|
(unsubscribe) => {
|
||||||
|
setUnsubscribePrivateMsg(unsubscribe);
|
||||||
|
},
|
||||||
|
(e) => {
|
||||||
|
console.error("Failed to subscribe", e);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
return function cleanUp() {
|
return function cleanUp() {
|
||||||
if (!waku) return;
|
if (!waku) return;
|
||||||
if (!observerPrivateMessage) return;
|
if (!unsubscribePrivateMsg) return;
|
||||||
waku.relay.deleteObserver(observerPrivateMessage, [
|
unsubscribePrivateMsg().catch((e) =>
|
||||||
PrivateMessageContentTopic,
|
console.error("Failed to unsubscribe", e)
|
||||||
]);
|
);
|
||||||
};
|
};
|
||||||
}, [waku, address, encryptionKeyPair]);
|
}, [waku, address, encryptionKeyPair, unsubscribePrivateMsg]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (!waku) return;
|
if (!waku) return;
|
||||||
|
|
||||||
const interval = setInterval(async () => {
|
const interval = setInterval(async () => {
|
||||||
const lightPushPeers = await waku.store.peers();
|
const lightPushPeers = await waku.store.peers();
|
||||||
const relayPeers = waku.relay.getMeshPeers();
|
const filterPeers = await waku.filter.peers();
|
||||||
|
|
||||||
setPeerStats({
|
setPeerStats({
|
||||||
relayPeers: relayPeers.length,
|
filterPeers: filterPeers.length,
|
||||||
lightPushPeers: lightPushPeers.length,
|
lightPushPeers: lightPushPeers.length,
|
||||||
});
|
});
|
||||||
}, 1000);
|
}, 1000);
|
||||||
@ -196,7 +217,7 @@ function App() {
|
|||||||
/>
|
/>
|
||||||
</IconButton>
|
</IconButton>
|
||||||
<Typography className={classes.peers} aria-label="connected-peers">
|
<Typography className={classes.peers} aria-label="connected-peers">
|
||||||
Peers: {peerStats.relayPeers} relay, {peerStats.lightPushPeers}{" "}
|
Peers: {peerStats.filterPeers} filter, {peerStats.lightPushPeers}{" "}
|
||||||
light push
|
light push
|
||||||
</Typography>
|
</Typography>
|
||||||
<Typography variant="h6" className={classes.title}>
|
<Typography variant="h6" className={classes.title}>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user