Created
September 14, 2023 21:03
-
-
Save SgtPooki/588b9527bff706a7d2a32afbdb52708e to your computer and use it in GitHub Desktop.
use Helia to test if certain peers are listening on webtransport
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { multiaddr } from '@multiformats/multiaddr' | |
import { WebTransport } from '@multiformats/multiaddr-matcher' | |
import { createHelia } from 'helia' | |
const helia = await createHelia() | |
const multiaddrs = [ | |
// fill out multiaddrs for peers you want to check here: | |
'/ip4/123.45.67.89/tcp/4001/ipfs/Qmabcdefg...', | |
'/ip4/98.76.54.32/tcp/4004/ipfs/bafyka...', | |
].map(multiaddr) | |
// group all listed multiaddrs by peerId | |
const groupedMultiaddrs = multiaddrs.reduce((acc, ma) => { | |
const peerId = ma.getPeerId() | |
if (!acc[peerId]) { | |
acc[peerId] = [] | |
} | |
acc[peerId].push(ma) | |
return acc | |
}, {}) | |
// console.log('groupedMultiaddrs: ', groupedMultiaddrs) | |
function confirmMultiaddrsSupportWebTransport (multiaddrs) { | |
return multiaddrs.some((ma) => WebTransport.matches(ma)) | |
} | |
// loop through each peerId and try to connect to all of it's multiaddrs | |
for (const [peerId, multiaddrs] of Object.entries(groupedMultiaddrs)) { | |
// console.log('multiaddrs: ', multiaddrs) | |
console.log('trying to connect to peerId: ', peerId) | |
try { | |
const connection = await helia.libp2p.dial(multiaddrs) | |
// console.log('Connected, running identify') | |
const ctlr = new AbortController() | |
const { signal } = ctlr | |
setTimeout(() => ctlr.abort(), 60000) | |
const response = await helia.libp2p.services.identify.identify(connection, { | |
signal | |
}) | |
const { listenAddrs } = response | |
if (confirmMultiaddrsSupportWebTransport(listenAddrs)) { | |
console.log('confirmed webtransport listen on peerId: ', peerId) | |
console.log('listenAddrs: ', listenAddrs) | |
} | |
} catch (e) { | |
console.error(e) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment