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

webcat

v3.0.0

Published

Mad science p2p pipe across the web using webrtc that uses your Github private/public key for authentication and a signalhub for discovery

Downloads

23

Readme

webcat

Mad science p2p pipe across the web using webrtc that uses your Github private/public key for authentication and a signalhub for discovery

We also want to support other key hosts beyond Github. If you have suggestions or want to help implement this check out this issue.

npm install -g webcat

If you have trouble getting it to compile try following the wrtc install instructions

Usage

webcat lets you establish a p2p pipe to other github users over the web. Let's say I wanted to connect to @maxogden

First I need to configure webcat once

webcat --configure
Enter your github username: mafintosh

Then on my machine I run

webcat maxogden
hello max

On Max's machine he runs

webcat mafintosh
hi mathias

webcat will create a p2p pipe between connect me and max by using a signalhub to exchange webrtc metadata and Github private/public keys to authenticate that Max is actually @maxogden and that I am actually @mafintosh

On my machine my prompt now looks like

webcat maxogden
hello max
hi mathias

And on Max's machine it now looks like

webcat mafintosh
hi mathias
hello max

How it works

webcat works the following way

  1. First you sign a message that says you want to connect to another user using your Github private key
  2. You post this message to a known signalhub in the channel /{another-username}
  3. The other user does the same thing only they posts it to the channel /{my-username}
  4. One of you receives the connect message and verifies that it came from the right person by looking up the other users public key using https://github.com/{another-username}.keys (and this will work in the browser if Github adds CORS GET to this API!)
  5. You then create a webrtc signal handshake, sign it and post it to the other user's lobby
  6. The other user receives this and posts back a signed version of their signaling data
  7. You use this data to establish a secure webrtc connection between eachother that is encrypted using DTLS
  8. You are now connected :)

warning. we invented the first 6 parts of this scheme. it has not been properly peer reviewed so use at your own risk :)

we use the following crypto dependencies:

  • openssl from node core (rsa signing and https for fetching public keys)
  • dtls from webrtc

Use cases

You can use webcat to pipe files across the internet!

On my machine

webcat maxogden < some-file

On Max's machine

webcat mafintosh > some-file

Pipe to yourself

Assuming you have your github key on two different machines you can also open and pipe between them by using the same username.

On one machine connected to the internet that has your Github key

echo machine one | webcat mafintosh

On another machine connected to the internet that has your Github key

echo machine two | webcat mafintosh

Programmatic usage

You can use webcat from node as well.

var webcat = require('webcat')

var stream = webcat('mafintosh') // put in the name of the person you want to talk to
process.stdin.pipe(stream).pipe(process.stdout)

License

MIT