Signalz

Signals is an event-emitter-like library meant to be used across different node projects without setting up a websocket or a server, with the use of Firebase and soon can also be used with MongoDB

Documentation

Hello this is the documentation

Installation

Simply just run:

$ npm i signalz

Importing

// Using Node.js `require()`
const Signalz = require("signalz");

// Using ES6 imports
import Signalz from "signalz";

Firebase

Heres how to setup Signalz with the firebase method

Getting Started

First import firebase-admin and initialize firebase, this is explained further here

const firebase = require("firebase-admin");

const serviceAccount = require("./serviceAccountKey.json");
if (firebase.apps.length === 0) {
  firebase.initializeApp({
    credential: firebase.credential.cert(serviceAccount),
    databaseURL: "YOUR_DB_URL",
  });
}

Then initialize Signals itself:

const client = new Signalz.Client("CLIENT_ID", firebase.database());

Client ID is explained here

Sending a Signal

await client.sendSignal("SIGNAL_ID", "TARGET_CLIENT_ID", data);
// Data can be a number, string, boolean, or object.

Signal ID and Target Client ID are exmplaned here

Receiving a Signal

client.on("signal", (signal) => {
  // do stuff
});

Replying to Signal

After doing the code when receiving a signal, its a good practice to reply to that signal with a status of "accept" or "error" to make the other project know the status of the signal, optionally, you can add a message to the reply

client.on("signal", (signal) => {
  // do stuff
  signal.reply("accept", "good!");
  // OR
  signal.reply("error", "invalid yada yada");

  // Message can be number, string, boolean, or object.
});

Awaiting a Reply

const sentSignal = await client.sendSignal(
  "SIGNAL_ID",
  "TARGET_CLIENT_ID",
  data
);
sentSignal.awaitReply(60000).then((data) => {
  console.log(data);
});

Ending a Signal

Its important that you end a signal after you are done with it, it is optional but very recommended as it frees up space from your database.

const sentSignal = await client.sendSignal(
  "SIGNAL_ID",
  "TARGET_CLIENT_ID",
  data
);
sentSignal.awaitReply(60000).then((data) => {
  console.log(data);
});
sentSignal.end();

OR

client.on("signal", (signal) => {
  // do stuff
  signal.reply("accept", "good!");
  // OR
  signal.reply("error", "invalid yada yada");
  signal.end();
});

Explaining Some Terms

Term

Meaning

CLIENT_ID

This is used so signals can be targetted to only the project(s) with that client id

TARGET_CLIENT_ID

You set this in the signal so the signal only goes to the projects with that client id

SIGNAL_ID

This is a custom id that is passed when sending the the signal so the receiving end knows which type of signal its receiving

Last updated