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

simple-peerjs

v1.0.1

Published

Simple peer-to-peer with WebRTC (peerjs singal exchange with simple-peer library)

Downloads

28

Readme

Simple Peer JS

Simple peer-to-peer with WebRTC.

Basically: simple-peer + PeerJs

This project uses the signal exchange mechanism of PeerJs with the WebRTC implementation of simple-peer.

This works in nodeand the browser

See examples for code examples!

Setup

Include the library

with npm: npm install simple-peerjs and the usage:

const SimplePeerJs = require('simple-peerjs');

Create a peer

const connMan = new SimplePeerJs('pick-an-id');
// You can pick your own id or omit the id if you want to get a random one from the server.

Data Connections

Connect

const conn = await connMan.connect('another-peer-id');

// conn.peer is an instance of simple-peer
conn.peer.send('hi!');

Receive

connMan.on('connection', conn => {
  console.log('Peer connected:', conn.peerId);

  // conn.peer is an instance of simple-peer
  conn.peer.send('hello!');

  conn.peer.on('data', data => {
    console.log(data.toString());
  });
});

Media calls

Passing a stream is similar to simple-peer

const SimplePeerJs = require('simple-peerjs');

async function main() {
  const peer = new SimplePeerJs();

  peer.on('connection', connection => {
    connection.peer.on('stream', stream => {
      // got remote video stream, now let's show it in a video tag
      const video = document.querySelector('video');
      video.srcObject = stream;
      video.play();
    });
  });

  // get peer id
  const peerId = await peer.id;

  // get video/voice stream
  const stream = navigator.mediaDevices.getUserMedia({
    video: true,
    audio: true,
  });

  const initiator = new SimplePeerJs();
  const initiatorConnection = await initiator.connect(peerId, { stream });
}

main();

It also can be done dynamically

const SimplePeerJs = require('simple-peerjs');

async function main() {
  const peer = new SimplePeerJs();

  peer.on('connection', connection => {
    connection.peer.on('stream', stream => {
      // got remote video stream, now let's show it in a video tag
      const video = document.querySelector('video');
      video.srcObject = stream;
      video.play();
    });
  });

  // get peer id
  const peerId = await peer.id;

  const initiator = new SimplePeerJs();
  const initiatorConnection = await initiator.connect(peerId);

  setTimeout(async () => {
    // get video/voice stream
    const stream = navigator.mediaDevices.getUserMedia({
      video: true,
      audio: true,
    });

    initiator.addStream(stream);
  }, 10000);
}

main();

In Node

To use this library in Node, pass in opts.wrtc, opts.fetch and opts.WebSocket as a parameters:

const wrtc = require('wrtc');
const fetch = require('node-fetch');
const WebSocket = require('ws');
const SimplePeerJs = require('simple-peerjs');

const peer = new SimplePeerJs({
  wrtc,
  fetch,
  WebSocket,
})

Api

peer = new SimplePeerJs(opts)

Creates a SimplePeerJs instance which delegates signaling to PeerJs and creates simple-peer WebRTC channels.

The following properties can be specified on opts:

peer.id

Promise that resolves to the peer id

peer.connect(peerId, opts)

Tries to connect to peerId. Returns a promise with an object that has a simple-peer instance on the peer property.

The second parameter, opts, is optional. If passed, it will be used as the simple-peer configuration.

peer.close()

Closes Signaling connection to PeerJS and all active peer connections.

Events

SimplePeerJs objects are instances of EventEmitter.

peer.on('connect', connection)

Emitted when a new connection has been created. connection has a peer property which is a simple-peer object.

peer.on('error', error)

Emitted on every error.

License

SimplePeerJS is licensed under the MIT License.