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

socketchat

v1.0.5

Published

A socket chat library including addon for authentication

Downloads

10

Readme

Socketchat is a chat application library using websockets, written in JavaScript for node.js to ease building of chat application easy using websockets.

This library relies on WebSocket to create websocket server.

Message format

The client communicate with server using JSON format with some important fields. The server supports two operations as of now: authentication and messaging. Clients cannot exchange messages without authenticating themselves.

Steps #1

Authentication is used to register client's socket information in server, so that others can communicate using username of the user. Authentication Message must be in the format : {type:'authenticate',username:'xyz',password:'1234'}

Steps #2

Messaging also follows a certain format. Messages must be in the format {type:'message',to:'username',message:'xyz'}

Installation

npm install socketchat

Server-side Example

var socketchatlib=require('./app.js');
//Sample users list
var users={
  //"username":"password"
  "rx":"r123",
  "2":"1234",
  "3":"12345"
};
//Sample Authentication function
var auth=function(username,password){
  return (users[username]===password)
}
//Creating a object of the library.
//Passing portnumber and authentication function
var socketchat=new socketchatlib(1337,auth);
//Start listening in the specified port
socketchat.listen();
//Upon successfully listening this event will be fired
socketchat.on('listen',function(message){
  console.log(message);
});
//Whenever a client tries authenticate, this event will be fired
socketchat.on('authentication',function(origin,stat){
  console.log(origin+": "+JSON.stringify(stat));
});
//When users exchange message, this event is also fired
socketchat.on('message',function(message){
  console.log("Message: "+JSON.stringify(message));
});
//Errors can be listener using this event listener
socketchat.on('error',function(err){
  console.log("Error: "+err);
});

output:

Connected
listening on port 1337

Client-side Example

    var ws;
    function init() {
      ws = new WebSocket("ws://localhost:1337/");

      // Set event handlers.
      ws.onopen = function() {
        output("Connection established");
      };
      ws.onmessage = function(e) {
        // e.data contains received string.
        var json=JSON.parse(e.data);
        console.log(json);
        if(json.type==='authentication'&&json.status==='success')
        {
          document.getElementById("login").style.display = "none";
          document.getElementById("message").style.display = "block";
        }
        else if(json.type==='authentication'&&json.status==='fail'){
          output("Login Failed");
        }
        else if(json.type==='message'){
          output("Message from " + json.from+" : "+json.message);
        }
      };
      ws.onclose = function() {
        output("onclose");
      };
      ws.onerror = function() {
        output("onerror");
      };
    }
    function onSubmit() {
      var input = document.getElementById("input");
      var to = document.getElementById("to");
      var data={type:'message'};
      data.message=input.value;
      data.to=to.value;
      // You can send message to the Web Socket using ws.send.
      if(input.value.length>0){
        ws.send(JSON.stringify(data));
        output("Send to "+to.value+" : "+input.value);
        input.value = "";
        input.focus();
      }

    }
    function login() {
      var username = document.getElementById("username");
      var password = document.getElementById("password");
      var data={type:'authenticate'};
      data.username=username.value;
      data.password=password.value;
      ws.send(JSON.stringify(data));
    }
    function onCloseClick() {
      ws.close();
    }
    function output(str) {
      var log = document.getElementById("log");
      log.innerHTML = "<strong>"+str + "</strong><br>"+new Date()+"<br><br>" + log.innerHTML;
    }

## API

  • new socketchat()
  • socketchat.listen()

new socketchat(port,authenticationFunction)

The passed port number is used for listening and the passed authentication function is used to authenticate users.


socketchat.listen()

Starts listening on the port number passed in the constructor


## Events

  • listen
  • authentication
  • message
  • error

listen

Emitted when starting to listen


authentication

Emitted whenever a user tries to authenticate. Emits origin of the connection and status of authentication. socketchat.on('authentication',function(origin,stat){ }); stat is a JSON in the format: {type:'authentication',status:'success'} if authentication is successful otherwise {type:'authentication',status:'fail'}


message

Emitted whenever a user sends message. Messages are in the format: {type:'message',to:'username',message:'xyz'}


error

Emitted when error occurs.


License

MIT