libp2p
    Preparing search index...
    • Negotiate a protocol to use from a list of protocols.

      Type Parameters

      Parameters

      • stream: Stream

        A duplex iterable stream to dial on

      • protocols: string | string[]

        A list of protocols (or single protocol) to negotiate with. Protocols are attempted in order until a match is made.

      • options: MultistreamSelectInit

        An options object containing an AbortSignal and an optional boolean writeBytes - if this is true, Uint8Arrays will be written into duplex, otherwise Uint8ArrayLists will

      Returns Promise<ProtocolStream<Stream>>

      A stream for the selected protocol and the protocol that was selected from the list of protocols provided to select.

      import { pipe } from 'it-pipe'
      import * as mss from '@libp2p/multistream-select'
      import { Mplex } from '@libp2p/mplex'

      const muxer = new Mplex()
      const muxedStream = muxer.newStream()

      // mss.select(protocol(s))
      // Select from one of the passed protocols (in priority order)
      // Returns selected stream and protocol
      const { stream: dhtStream, protocol } = await mss.select(muxedStream, [
      // This might just be different versions of DHT, but could be different implementations
      '/ipfs-dht/2.0.0', // Most of the time this will probably just be one item.
      '/ipfs-dht/1.0.0'
      ])

      // Typically this stream will be passed back to the caller of libp2p.dialProtocol
      //
      // ...it might then do something like this:
      // try {
      // await pipe(
      // [uint8ArrayFromString('Some DHT data')]
      // dhtStream,
      // async source => {
      // for await (const chunk of source)
      // // DHT response data
      // }
      // )
      // } catch (err) {
      // // Error in stream
      // }