npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

libp2p-mplex-curltech

v0.10.3

Published

JavaScript implementation of https://github.com/libp2p/mplex

Downloads

11

Readme

js-libp2p-mplex

Discourse posts Dependency Status js-standard-style

JavaScript implementation of mplex.

Lead Maintainer

Vasco Santos

Install

npm install libp2p-mplex

Usage

const Mplex = require('libp2p-mplex')
const pipe = require('it-pipe')

const muxer = new Mplex({
  onStream: stream => { // Receive a duplex stream from the remote
    // ...receive data from the remote and optionally send data back
  },
  onStreamEnd: stream => {
    // ...handle any tracking you may need of stream closures
  }
})

pipe(conn, muxer, conn) // conn is duplex connection to another peer

const stream = muxer.newStream() // Create a new duplex stream to the remote

// Use the duplex stream to send some data to the remote...
pipe([1, 2, 3], stream)

API

const muxer = new Mplex([options])

Create a new duplex stream that can be piped together with a connection in order to allow multiplexed communications.

e.g.

const Mplex = require('libp2p-mplex')
const pipe = require('it-pipe')

// Create a duplex muxer
const muxer = new Mplex()

// Use the muxer in a pipeline
pipe(conn, muxer, conn) // conn is duplex connection to another peer

options is an optional Object that may have the following properties:

  • onStream - A function called when receiving a new stream from the remote. e.g.
    // Receive a new stream on the muxed connection
    const onStream = stream => {
      // Read from this stream and write back to it (echo server)
      pipe(
        stream,
        source => (async function * () {
          for await (const data of source) yield data
        })(),
        stream
      )
    }
    const muxer = new Mplex({ onStream })
    // ...
    Note: The onStream function can be passed in place of the options object. i.e.
    new Mplex(stream => { /* ... */ })
  • onStreamEnd - A function called when a stream ends
    // Receive a notification when a stream ends
    const onStreamEnd = stream => {
      // Manage any tracking changes, etc
    }
    const muxer = new Mplex({ onStreamEnd })
    // ...
  • signal - An AbortSignal which can be used to abort the muxer, including all of it's multiplexed connections. e.g.
    const controller = new AbortController()
    const muxer = new Mplex({ signal: controller.signal })
    
    pipe(conn, muxer, conn)
    
    controller.abort()
  • maxMsgSize - The maximum size in bytes the data field of multiplexed messages may contain (default 1MB)

muxer.onStream

Use this property as an alternative to passing onStream as an option to the Mplex constructor.

muxer.onStreamEnd

Use this property as an alternative to passing onStreamEnd as an option to the Mplex constructor.

muxer.streams

Returns an Array of streams that are currently open. Closed streams will not be returned.

const stream = muxer.newStream([options])

Initiate a new stream with the remote. Returns a duplex stream.

e.g.

// Create a new stream on the muxed connection
const stream = muxer.newStream()

// Use this new stream like any other duplex stream:
pipe([1, 2, 3], stream, consume)

In addition to sink and source properties, this stream also has the following API, that will normally not be used by stream consumers.

stream.close()

Closes the stream for reading. If iterating over the source of this stream in a for await of loop, it will return (exit the loop) after any buffered data has been consumed.

This function is called automatically by the muxer when it receives a CLOSE message from the remote.

The source will return normally, the sink will continue to consume.

stream.abort([err])

Closes the stream for reading and writing. This should be called when a local error has occurred.

Note, if called without an error any buffered data in the source can still be consumed and the stream will end normally.

This will cause a RESET message to be sent to the remote, unless the sink has already ended.

The sink will return and the source will throw if an error is passed or return normally if not.

stream.reset()

Closes the stream immediately for reading and writing. This should be called when a remote error has occurred.

This function is called automatically by the muxer when it receives a RESET message from the remote.

The sink will return and the source will throw.

stream.timeline

Returns an object with close and open times of the stream.

stream.id

Returns a string with an identifier unique to this muxer. Identifiers are not unique across muxers.

Contribute

The libp2p implementation in JavaScript is a work in progress. As such, there are a few things you can do right now to help out:

  • Go through the modules and check out existing issues. This is especially useful for modules in active development. Some knowledge of IPFS/libp2p may be required, as well as the infrastructure behind it - for instance, you may need to read up on p2p and more complex operations like muxing to be able to help technically.
  • Perform code reviews. More eyes will help a) speed the project along b) ensure quality and c) reduce possible future bugs.
  • Add tests. There can never be enough tests.

License

MIT © Protocol Labs