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 🙏

© 2025 – Pkg Stats / Ryan Hefner

charonservernode

v1.0.3

Published

a couple of utility functions for making API requests to Charon, can also work as express middleware.

Readme

Charon - NodeJS Server SDK

This is the NodeJS server SDK for Charon: A new form of secure, passwordless authentication.

The SDK currently serves as a layer built on top of the Charon Authentication server API. With support for verifying users as an express middleware function and setting up pre-built endpoints for your client to interact with. Works well when paired with any CharonClient libraries (such as charonclientnode).

This SDK can be used client side, however it is strongly discouraged to do so doing this would compromise your API token.

Before you start

  1. Create your app on Charon
  2. Create a new instance of the CharonServer with the APIKey
  3. Use the different functions supported by the API

Express setup using the pre-built endpoints (for easy use with any CharonClient SDKs)

    var app = express();
    var charonServer = new CharonAPIEndpoints("API TOKEN HERE");

    //our endpoints use async code by default

    //endpoint for creating a new user
    app.post('/api/v1/charon/create',charonServer.createUserEndpoint);

    //endpoint for getting all pending device sign ins for a particular user
    app.post('/api/v1/charon/pending',charonServer.getPendingAuthDevicesEndpoint);

    //endpoint for requesting a login to an account from a device
    app.post('/api/v1/charon/login',charonServer.requestLoginEndpoint);
    
    //endpoint for authenticate a pending login request
    app.post('/api/v1/charon/authenticate',charonServer.authenticatePendingEndpoint);

    app.listen(8080);

Using the verifyAccount middleware for any endpoints that require authentication to use (such as creating a post)

    var app = express();
    app.use(express.bodyParser());

    var charonServer = new CharonServer("API TOKEN HERE");

    //for requests that require authentication, ADD THE USERNAME AND KEY OF THE ACCOUNT TO THE HTTP POST BODY
    app.post('/post/create',charonServer.verifyAccountMiddleware,async function(req,res,next){
        if(req.charon.auth == true){
        //write your own post logic here:
        //EXAMPLE
        PostHandler.createPost(req.charon.username,{'test':req.body.test});

        }else if(req.charon.auth == false){
            res.json({'status':'invalidkey'});
        }
    });