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

gateway-bg-interface

v1.0.6

Published

Back-end interface of gateway project, test task

Downloads

3

Readme

gateway-bg-interface

Back-end interface of gateway project, test task

Description

Provides interface of client-server interaction for project gateway. API described in the openapi.yaml file. You can read it with https://app.swaggerhub.com/.

Usage:

npm install gateway-bg-interface

In the code you have to create DataProvider class that extends DataProviderInterface:

/**
 * @typedef {Object} SimpleGateway
 * @property {string} serial
 * @property {string} name
 */

/**
 * @typedef {Object} Gateway
 * @property {string} serial
 * @property {string} name
 * @property {number} ip
 * @property {number[]} devices
 */

/**
 * @typedef {Object} OptionalGateway
 * @property {string} [serial]
 * @property {string} [name]
 * @property {number} [ip]
 * @property {number[]} [devices]
 */

/**
 * @typedef {Object} SimpleDevice
 * @property {number} uid
 * @property {string} vendor
 */

/**
 * @typedef {'online'|'offline'} Status
 */

/**
 * @typedef {Object} Device
 * @property {number} uid
 * @property {string} vendor
 * @property {number} date_created
 * @property {Status} status
 */

/**
 * @typedef {Object} OptionalDevice
 * @property {string} [uid]
 * @property {string} [vendor]
 * @property {Status} [status]
 */

export default class DataProducerInterface {
  /**
   * @public
   * Returns list of available gateways
   * @return {SimpleGateway[]}
   */
  getGateways() {
    throw new Error('Unimplemented method getGateways');
  }

  /**
   * @public
   * Returns information about gateway
   * @param {string} serial - gateway's unique serial number
   * @return {Gateway|null}
   */
  getGateway(serial) {
    throw new Error('Unimplemented method getGateway');
  }

  /**
   * @public
   * Modifies or creates new gateway
   * @param {OptionalGateway} gateway
   * @return {{serial: string}}
   */
  putGateway(gateway) {
    throw new Error('Unimplemented method putGateway');
  }

  /**
   * @public
   * Deletes gateway
   * @param {string} serial - gateway's unique serial number
   */
  deleteGateway(serial) {
    throw new Error('Unimplemented method deleteGateway');
  }

  /**
   * @public
   * Returns list of available devices
   * @param {string} [serial] - unique gateway's serial number, should return all devices
   * @return {SimpleDevice[]|null}
   */
  getDevices(serial) {
    throw new Error('Unimplemented method getDevices');
  }

  /**
   * @public
   * Returns information about devices
   * @param {number} uid - device's uid
   * @return {Device|null}
   */
  getDevice(uid) {
    throw new Error('Unimplemented method getDevice');
  }

  /**
   * @public
   * Modifies or creates new device
   * @param {OptionalDevice} device
   * @return {{uid: number}}
   */
  putDevice(device) {
    throw new Error('Unimplemented method putDevice');
  }

  /**
   * @public
   * Deletes device
   * @param {number} uid - gateway's unique serial number
   */
  deleteDevice(uid) {
    throw new Error('Unimplemented method deleteDevice');
  }

  /**
   * @public
   * Binds devices to gateway
   * @param {string} serial - gateway's unique serial number
   * @param {number[]} devices - list of devices' uids
   * @return {{bound: number[]}} - list of successfully bound devices' uids
   */
  bind(serial, devices) {
    throw new Error('Unimplemented method bind');
  }

  /**
   * @public
   * Unbinds devices to gateway
   * @param {string} serial - gateway's unique serial number
   * @param {number[]} devices - list of devices' uids
   */
  unbind(serial, devices) {
    throw new Error('Unimplemented method unbind');
  }
}

For example:

import Server, {getInterface} from 'gateway-bg-interface';

//Proxy class to interact with DB.
class DataProvider extends getInterface() {
    //Implement methods of DataProviderInterface here
}

const port = 8080; //Server port (optional, by default 8080)

const server = new Server(new DataProvider(), port);
server.start();

License

MIT Copyright (c) 2023 kuznetsovlv