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

@dataquiver/websocket-manager

v0.1.1

Published

Websocket manager for DQ

Downloads

9

Readme

Websocket-manager

This is the websocket infrastucture for our servers. It provides a class which will attached a websocket to your express server. You may then set up endpoints and clients as you please.

Table of Contents

  1. Table of Contents
  2. Required Technologies
  3. Installation
  4. Useage
  5. API

Required Technologies

  • Node / NPM: Node version 12 or greater is recommended.
  • Express: You should use express for your webserver. The constructor for SocketManager takes a server instance which you can get via server = app.listen(...)

Installation

To install, run:

npm install @dataquiver/websocket-manager --save

Useage

The intent of this package is to make websockets easy to use, and easy to integrate with the @dataquiver/mongo package.

  1. To initialize a socketManager all you must do is construct it with your middleware function (likely from @dataquiver/middleware). Then initialize it with your server instance
    const socketManager = new SocketManager(socketMiddleware.middleware);
    await socketManager.init(server);

API

socketManager.addEventListener(event, callback)

addEventListener is how you tell socketManager to listen to events from the client.

  • event
    • your event string
  • callback
    • the function to execute when a the client hits the event
    • must return a promise
    • will be passed parameters callback(requestData, user)
      • the user object will be added to every client in the middleware, and passed to all callbacks so you may do accessControl and filtering.

socketManager.clients

  • Object
  • key: socketio clientId
  • value: socketio client socket

This is useful if you want to emit asynchronous events to those clients like:

// Promisified loop over clients object
return Promise.all(Object.keys(this.socketManager.clients).map((socketId) => {
  //get the client's socket
  const clientSocket = this.socketManager.clients[socketId];

  // ensure the client may receive this data
  return this.filterFunction(clientSocket.user, event, data)
  .then(() => {
    // emit the event
    clientSocket.emit(`coolSocketEvent`, data);
  })
  .catch((e) => {
    // do not emit the event
    console.log('I shal not emit to you', e);
  });
}));

Middleware

This expects a middleware which will be ran when a client attempts to connect. It is expected that this middleware add a user to the socket. If you do not want/need this, mock a user object in your middleware. Sorry :\

We have a socketMiddleware that works with AWS cognito at @dataquiver/middleware

Contributing

  1. Clone this repo
  2. Run npm install to download dependencies
  3. Run npm run build to compile typescript into javascript for distribution
  4. Run npm run lint to run lint checks. This is also in a pre-commit hook.

Publishing

  1. Run npm publish to publish to npm. You'll need to be authorized. This ought to run the build automatically.

Testing in an app

  1. In this repo, run npm link to register it for overriding
  2. In the app, run npm link @dataquiver/websocket-manager to override the package from NPM with a symlink to this local copy
  3. Run your app

If you make changes, you'll need to run npm run build in this repo and likely restart your app to pick them up.

When you're done, in the app, run npm unlink @dataquiver/websocket-manager --no-save to remove the symlink and go back to using the NPM package. Use npm install then to redownload from the internet.