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

jayeth

v2.0.1

Published

A highly experimental JSON RPC router/loadbalancer/aggregator server. Allows you to expose multiple JSON RPC services on one interface.

Downloads

6

Readme

JavaScript Style Guide npm version

Jayeth

A highly experimental JSON RPC router/loadbalancer/aggregator server. Allows you to expose multiple JSON RPC services on one interface.

With Jayeth you can round-robin requests across multiple RPC servers, route requests per method, define a fallback server, or call a method on multiple server at the same time.

But why?

While experimenting with JSON RPC ethereum clients, i found there are some things that seem nice to have:

  • If my local ethereum node drops, automatically fallback RPC calls to Infura.
  • Call specific RPC methods on specific ethereum clients (eg. automatically call parity_allTransactions on Parity node, clique_getSingers on Pantheon node without having to manage two different Web3.js instances)
  • Possibility to loadbalance requests across multiple rpc nodes
  • Call a RPC method on multiple nodes at the same time (helpful when comparing RPC responses on different ethereum client implementations)

Although my motivation for Jayeth came from using Ethereum JSON RPC, you can use it for any services exposing any JSON RPC interface.

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Installing

Install Jayeth:

npm install jayeth

or if you want to develop Jayeth locally:

git clone https://github.com/DAPowerPlay/jayeth
cd jayeth
npm install
npm test

Use it:

const Jayeth = require('jayeth')

const config = {
  // port where jayeth server will listen
  "port": 3001,
  // in this example, for every 20 requests, 5 will go to rpc_server_1, 5 will go to rpc_server_2, 10 will go to rpc_server_3, none will go to rpc_server_4
  "endpoints": {
    "rpc_server_1": {
      "server": "http://localhost:3012",
      "weight": 5
    },
    "rpc_server_2": {
      "server": "http://localhost:3013",
      "weight": 5
    },
    "rpc_server_3": {
      "server": "http://localhost:3014",
      "weight": 10
    },
    "rpc_server_4": {
      "server": "http://localhost:3015",
      "weight": -1
    }
  },
  // if a client requests "add" method, the request will be routed explicitly to rpc_server_3, "substract" method to rpc_server_4
  "methods": {
    "add": "rpc_server_3",
    "substract": "rpc_server_4"
  },
  // requests to the jayeth will be round-robined across endpoints defined in config.endpoints
  "default": "round-robin",
  // if an error is encountered , jayeth will attempt to call the endpoint defined in "fallback"
  "fallback" : "rpc_server_4"
}

const jayeth = new Jayeth(config)

jayeth.listen()

// jayeth server is now available on port 3001.
// See /test folder for more configuration examples

Running the tests

Tests are written in Mocha. Test script will also run standard.js style guide, linter, and formatter.

Running tests

npm test

If standard.js is complaining about code formmating/style you can try to run:

npm run fix

Debug

jayeth is using the debug module, set DEBUG environment variable to see the logs:

export DEBUG=jayeth:*

Deployment

This is a highly experimental module, please read the source before running this in production. Tested only with http:// transport.

Built With

Contributing

If you see anything, please raise an issue, or open a PR.

License

Copyright 2018 Nikola Jokić

Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.