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

fruster-bus

v0.7.13

Published

NATS message bus helper for Fruster micro services

Downloads

590

Readme

Fruster Bus Wrapper

Promisifies NATS Client and makes it aware of Fruster messages.

Usage

Add to your project:

npm install fruster-bus --save

Add this to your file:

var bus = require('fruster-bus');

Connect to bus:

# Pass in multiple if NATS cluster
bus.connect(['nats://localhost:4222'])

Publish message:

bus.publish('a.subject', { foo: 'bar' });

Send request and handle response:

bus.request('a.subject', {})
  .then(handleMessage)
  .catch(handleError);

Send request with 500 ms timeout:

bus.request('a.subject', {}, 500)
  .then(handleMessage)
  .catch(handleError);

Subscribe:

bus.subscribe('a.subject', function(req, replyTo) {
  // return response by publishing to replyTo
  bus.publish(replyTo, { /* your response msg */ });
});

Subscibe and return response:

bus.subscribe('a.subject', function(req) {    
  // return of callback will be sent as response to `toReply`
  return { status: 200 };      
});

Subscribe and return response as promise:

bus.subscribe('user.get', function(req) {          
  // ok to return a promise that resolves response message
  return getUser(req.msg.data.userId).then(function(user) {
    return { status: 200 /*... */ };
  });      
});

All subscriptions will create a queue group by default with name of subject. Pass in boolean false as last argument to disable queue group:

bus.subscribe("user.get", handle, false);

Permissions for subscribe

Must be logged in to access. Anyone logged in can access, no matter permissions.

bus.subscribe('a.subject', function(req) {    
  // return of callback will be sent as response to `toReply`
  return { status: 200 };      
})
.mustBeLoggedIn();

Must have specific permissions to access. When using permissions .mustBeLoggedIn() is not required since permissions only work on logged in users anyway.

bus.subscribe('a.subject', function(req) {    
  // return of callback will be sent as response to `toReply`
  return { status: 200 };      
})
.permissions(["user.get", "user.create"]);

Open to public without any permissions.

bus.subscribe('a.subject', function(req) {    
  // return of callback will be sent as response to `toReply`
  return { status: 200 };      
});

Defining permissions

A permission is defined in the following way {{entity}}.{{action}}. E.g. user.create. The action can be a wildcard, accepting any action within that entity.

Defining params

Fruster bus features a specific fruster bus param definition for http requests.

"http.post.user.:userId" - Translates to "http.post.user.*" in NATS.

Any param defined with a colon (:userId) will be accessible from the subscription handler via the object request.params

Run in mocked mode

Nats client will run in mocked mode if connection string is nats://mock. All messages will be published and subscribing from memory and not connecting to an actual bus. Needless to say, but this is only for development purposes, i.e. running tests wo the need to spin up NATS server.

Test

You need gnatsd to run tests. Read installation instructions here.

npm test