UNPKG

@libp2p/multistream-select

Version:
47 lines 1.99 kB
import type { MultistreamSelectInit } from './index.js'; import type { MessageStream } from '@libp2p/interface'; /** * Negotiate a protocol to use from a list of protocols. * * @param stream - A duplex iterable stream to dial on * @param protocols - A list of protocols (or single protocol) to negotiate with. Protocols are attempted in order until a match is made. * @param options - An options object containing an AbortSignal and an optional boolean `writeBytes` - if this is true, `Uint8Array`s will be written into `duplex`, otherwise `Uint8ArrayList`s will * @returns A stream for the selected protocol and the protocol that was selected from the list of protocols provided to `select`. * @example * * ```TypeScript * 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 * // } * ``` */ export declare function select<Stream extends MessageStream>(stream: Stream, protocols: string | string[], options?: MultistreamSelectInit): Promise<string>; //# sourceMappingURL=select.d.ts.map