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

msgsrouter

v1.0.15

Published

Message Switch Router (MSR) is a WebSocket server implementation. It works together with PeerCom to create a peer-to-peer communication application.

Downloads

4

Readme

Message Switch Router (msgsrouter)

Message Switch Router (MSR) is a univeral message exchange application realization built on WebSocket technology. The idea is to provide a simple, easy, and standard method to all kinds of applications to construct a communication network for one-to-one or one-to-many information exchange.

MSR is also designed to be as least dependent on the server as possible. MSR uses MongoDB to keep tracking the user (peer) online state (as registation) and basic user identity information. However, MSR does not provide a strong authentication on the users which keeps the server loading at the minimal and remove all the security risk from the server side attacks. A simple self-integrity validation is designed into MSR to make sure each peer plays the game by the rules, but MSR does not gaurantee any real-world identity validation. Therefore, it is the responsibility of the applications and users to bring in proper authentication if there is any concerns.

Installation

npm install msrsrouter

Key Components

  • Base Module (base.js)

  • Config Module (config.js)

  • Server Module (msg_srouter.js)

  • Client Module (client.js)

Run MSR Sever

You may configure MSR server through environment variables or config.js file.

  • Configuration:
$ export SERVER=<ip_address>		# configure MSR server listening IP address
$ export PORT=<port_number>			# configure MSR server listening port
$ export SRC=<source_url>			# configure accepted source URL (your webpage URL), i.e. http://127.0.0.1, only request from the source URL will be accepted, you can set 'ANY' if you want to accept connection from any sources.
$ export DBSRC=<database_source>	# configure the MongoDB server and datebase source URL, i.e. mongodb://127.0.0.1:27017/msgsrouter
$ export KEY=<ssl_private_key>		# configure the SSL private key if you want to enable secure communication
$ export CERT=<ssl_certificate>		# configure the SSL certificate if you want to enable secure communication, only when both KEY nd CERT are provided with valid files the secure communication can be enabled

Once you have the server configuration ready, you may start the server by,

npm start

OR

node msg_srouter.js

Use MSR Client

A MSR client module is provided to save developers from taking care of some basic details. The client module is implemented to be running in both NodeJS console or a web browser, but it is still under development and not fully tested. There might be a chance you will encounter some bugs.

To use the client module, simply require it in your Javascript. The client module returns MSR client module instance when you require it, so you can use the instance directly. Here is the example,

var client = require('msgsrouter/client');

// configure client
client.server = 'ws://127.0.0.1:55688';
client.name = 'Quark Li';
client.email = '[email protected]';
client.secret = 'password';

// You may skip this if you simply want to show message in the console which has been implemented by default
// Replay onmessage function with your own to add your own application logics
client.onmessaage = function(msg) { console.log(msg); }

// connect to the MSR server
client.connect();

// check the connection state, client.STATE = {CLOSED: 0, OPENED: 1, REGISTERED: 2}
console.log(client.state);

// check the time offset if client received registration response from server
// this time offset is to provide a simple time synchronizatioin among all connected clients
// it does not provide high procision but to keep the difference of timestamp used by each client as minimal as possible
// it is automatically set from the server response and user cannot set the value
console.log(client.offset);

// send a message to self, prototype: send([to], subject, content)
client.send(client.credential, 'test', {mydata: 'something'});

You may need to add Peer and Message from Base module to help you easily construct peer ane message.

var Peer = require('msgsrouter/base').Peer;
var peer = new Peer();

console.log(peer.value());

>>>>>>>>>>>> output example
{ credential: '3ccb7d82bb030d0c902bfac1b6d4eb96',
  name: '',
  email: '',
  secret: 'd41d8cd98f00b204e9800998ecf8427e',
  location: { city: 'unknown', country: 'unknown', addr: 'unknown' },
  publish: false 
}

var Message = require('msgsrouter/base').Message;
var message = new Messaage();

console.log(message.value());

>>>>>>>>>>>> output example
{ checksum: 'beb5e001c6fc99a03467a1b1095c4f28',
  to: [],
  from: '',
  subject: '',
  timestamp: 1459091247561,
  content: {} 
}

Please note Peer.credential and Message.checksum is automatically calculated when you set the Peer and Messaage values. You can call validation functions to check if a Peer/Message is valid.

var Base = require('msgsrouter/base');

Base.validateCredential(peer);
Base.validateMessage(message);

Peer Object

Peer Object is the representation of a MSR client. Here is the description of its properties,

  • Credential: Client's key identity used as the communication destination
  • Name: Client's display name/title
  • Email: Client's email - Name and Email helps the others to identify who you are
  • Secret: Client's secret phrase to keep the integrity
  • Location: Client's location information, location information is also help others to identify a peer
  • Publish: Whether a client wants to publish its contact informatin so it can be browsed/searched

A peer keeps its integrity by hashing from (name + email + secret). As long as a user keeps using the same (name + email + secret), the same credential will be produced even on different devices. Changing any one of them will produce another credential. There is a very small chance to produce duplicated credential from differnt (name + email + secret), but not very likely in probability. Another risk is someone intentionly to fake the other's identity, so user should not trust the name and email provided by a client unless validated through other method. Since secret and credential as stored in hash value in the memory of user's device and transmitted over secure (strongly recommended) channel, they are not easily to be hacked unless there is a direct access to user's device.

Message Object

Message Object is designed as a standard mail in the JSON format. It consists To, From, Subject, Timestamp, and Content with an additional Checksum for integrity validation.

  • Checksum: Hash value for message integrity check
  • To: Message destination which should be one or some peer's credential in an array, (a Hub ID can be used for group communication which is still in development)
  • From: Message source identity which should be the credential of the sender client. A message will be blocked if the message's From is not the sender's credential.
  • Subject: A brief identification of the content. There are some predefined subjects, such as, 'register', 'bye', 'query'.
  • Timestamp: A tag of time of the message so the receive may order messages from differnt clients.
  • Content: The actual message content which can be any data user wants to put in.

If there is any question or issue, please feel free to contact with me [email protected]

License

msgsrouter is released and distributed under the permissive MIT License: Copyright (c) Quark Li, [email protected]