New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

slimq

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

slimq

A simple message queue for based on MQTT protocol.

latest
Source
npmnpm
Version
0.1.1
Version published
Maintainers
1
Created
Source

Slim Message Queue

Instead of using MQTT protocol directly, this module uses BSP protocol to encode and decode data in order to transfer arbitrary types of data.

Any other program intend to connect and transmit data along with this module must implement the encode and decode functions according to BSP documentation.

WARN: Unlike traditional MQTT protocol, this module also uses . instead of / to construct namespace of the topic, for a more universal experience when working with other protocols.

API

declare class SliMQ {
    protected config: mqtt.IClientOptions & { scope?: string; };
    protected topics: { [topic: string]: (data: any) => void };
    protected channel: mqtt.Client;
    constructor(config: mqtt.IClientOptions & { scope?: string; });
    connect(): Promise<this>;
    disconnect(): Promise<this>;
    publish<T = any, R = any>(topic: string, data: T, reply?: (data: R) => void): this;
    publish<T = any, R = any>(topic: string, data: T, options: {
        qos?: 0 | 1 | 2;
        retain?: boolean;
        dup?: boolean;
    }, reply?: (data: R) => void): this;
    subscribe<T = any, R = any>(topic: string, handler: (data: T, reply: (data: R) => void) => void): this;
    subscribe<T = any, R = any>(topic: string, options: {
        qos: 0 | 1 | 2
    }, handler: (data: T, reply: (data: R) => void) => void): this;
    unsubscribe(topic: string): this;
}

NOTE:

  • mqtt package must be installed before using this module.
  • If scope is provided in the config, it will be used as prefix to every topic that the current instance binds and sends.
  • If calls subscribe on the same topic multiple times, the later ones will erase the former ones.

Example

Node.js

import SliMQ from "slimq";

const mq = new SliMQ({
    protocol: "mqtt",
    host: "test.mosquitto.org",
    port: 1883,
    scope: "test"
});

(async () => {
    await mq.connect();

    mq.subscribe<string>("greeting", (text) => {
        // `text` would be a string.
    }).subscribe<Buffer>("transmit-file", (file) => {
        // `file` would be a buffer.
    }).subscribe<string, string>("send-reply", (text, reply) => {
        // `text` would be a string, and `reply` must take a string argument.
        reply("You just sent: " + text);
    });

    mq.publish("greeting", "Hello, World!");
    mq.publish("transmit-file", fs.readFileSync("some-file.txt", "utf8"));
    mq.publish<string, string>("send-reply", "Hello, World!", (text) => {
        console.log(text); // You just sent: Hello, World!
    });
})();

Browser

In the browser, the mqtt package must be explicitly loaded to the global scope.

<script src="https://unpkg.com/mqtt@3.0.0/dist/mqtt.min.js"></script>
<script src="./bundle/slimq.js"></script>
<script>
const mq = new SliMQ({ /* config */ });

(async () => {
    await mq.connect();

    mq.subscribe<string>("greeting", (text) => {
        // `text` would be a string.
    }).subscribe<Uint8Array>("transmit-file", (file) => {
        // `file` would be a Uint8Array instance.
    }).subscribe<string, string>("send-reply", (text, reply) => {
        // `text` would be a string, and `reply` must take a string argument.
        reply("You just sent: " + text);
    });
})();
</script>

Keywords

slim

FAQs

Package last updated on 29 Jun 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts