switches

A distributed system for on/off switches

Usage no npm install needed!

<script type="module">
  import switches from 'https://cdn.skypack.dev/switches';
</script>

README

Switches

Switches is a distributed, eventually consistent, circuit breaker type system for applications. It enables you to turn features on and off while they're running without having to take them completely offline or do a complete deploy

What follows is a novel example where two Switches instances are synchronized via streams. Seeing how synchronization is done via streams the same synchronization interface can be used to synchronize the instances over TCP, HTTP, Websockets or any other transport with a streaming interface

var Switches = require("switches");
var defaults = require("./defaults");

// create two isolated switches instances with sane defaults
var switches1 = new Switches(defaults);
var switches2 = new Switches(defaults);

// connect the two instances together via streams
var s1 = switches1.createStream();
var s2 = switches2.createStream();
s1.pipe(s2).pipe(s1);

// check if registration is enabled in `switches2`
if (switches2.isEnabled("registration")) {
    console.log("registration: enabled");
} else {
    console.log("registration: disabled");
}

// disable registration in `switches1`
switches1.disable("registration");

process.nextTick(function() {
    // check if registration is enabled in `switches2` and `switches1`
    if (switches2.isEnabled("registration")) {
        console.log("registration: enabled");
    } else {
        console.log("registration: disabled");
    }

    if (switches1.isEnabled("registration")) {
        console.log("registration: enabled");
    } else {
        console.log("registration: disabled");
    }

    // disable registration via `switches2`
    switches2.enable("registration");

    process.nextTick(function() {
        if (switches1.isEnabled("registration")) {
            console.log("registration: enabled");
        } else {
            console.log("registration: disabled");
        }
    });
});