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 🙏

© 2026 – Pkg Stats / Ryan Hefner

who-are-you

v0.1.0

Published

A connect middleware to provide private-public key authentication.

Downloads

12

Readme

who-are-you

Authentication module for connect using a private public key scheme.

It reads a series of http headers and authorize (or not) the caller to access the API.

Usage:

  • Provide the client with a private and public key.
  • Create names (or use the defaults) for the http headers the client will use to make the request.
  • Choice a public value that will be used to generate the hash with the private key.
  • At the moment it uses sha1 to generate the (hash) token.

Ex:

Given the keys:

  • apiKey: 90ijUhj88uY
  • secretKey: ppKJHnmm09Iu564ghfB=

And using the default custom http headers:

The client should send a request with the following headers:

x-api-key: 90ijUhj88uY
x-request-time: '1357169907984'
x-token: 'a001880c10e2a61231311b1b56cecd98c71a7fe4'

The hash is calculated (in node) using the crypto module.

var hash = crypto.createHmac('sha1', 'ppKJHnmm09Iu564ghfB=')
    .update('1357169907984')
    .digest('hex');

On the server application you can add the module as usual:

var whoareyou = require('whoareyou');
server.use(whoareyou.privatePublicKey(accountStore, null));

If you want to use custom headers use an options argument as this:

var whoareyou = require('whoareyou');
var options = {
  "apiKey": "X-key",
  "dateTime": "X-date",
  "token": "X-hash"
};
server.use(whoareyou.privatePublicKey(accountStore, options));

The accountStore is expected to have one method get(apiKey, cb) the callback takes two arguments and error and an account object. The account object is expected to have at least one property secretKey that contains exactly that.

The middleware will add two properties to the request authenticated a boolean indicating if the authentication have been succesful and currentAccount that contains a clone of the account object returned by the accountStore.get method.