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

restserver-api

v0.1.0

Published

8devices sensor network REST server API and demo

Downloads

1

Readme

Build Status codecov

restserver-api

Example program This example shows basic restserver-api usage.

const restAPI = require('restserver-api');

const { Lwm2m } = restAPI;
const { RESOURCE_TYPE, encodeResource, decodeResource } = Lwm2m.TLV;

console.log('Initialize service and endpoint');
const service = new restAPI.Service();
const device = new restAPI.Device(service, 'urn:uuid:17200d69-ec9b-43b3-9051-73df2207907c');

console.log('Encode resource to TLV format');
const tlvBuffer = encodeResource({
  identifier: 3,
  type: RESOURCE_TYPE.INTEGER,
  value: 60
});

console.log('Start service');
service.start().then(() => {
  console.log('Service started');
  console.log('Writing into device\'s resource');
  device.write('/3/0/7', (status) => {
    console.log('Received response with status: ', status);
    console.log('Stopping service');
    service.stop().then(() => {
      console.log('Service stopped');
    });
  }, tlvBuffer);
});

Classes

Constants

Functions

Device

This class represents device (endpoint).

Kind: global class

new Device(service, id)

Constructor initiliazes given service object, device's id and starts listening for events emited by service (when device registers, updates, deregisters, sends data), handles "async responses" and emits "register", "update", "deregister" events.

| Param | Type | Description | | --- | --- | --- | | service | object | Service object | | id | string | Endpoint id |

Example

const restAPI = require('restserver-api');

const service = new restAPI.Service(serviceOptions);
const device = new restAPI.Device(service, 'deviceId');

device.getObjects() ⇒ Promise

Sends request to get all device's objects.

Kind: instance method of Device
Returns: Promise - Promise object with device's objects
Example

device.getObjects().then((resp) => {
  // resp = [ { uri: '/1/0' }, { uri: '/2/0' }, ... ]
}).catch((err) => {
  // err - exception message object or status code
});

device.read(path, callback) ⇒ Promise

Sends request to read device's resource data.

Kind: instance method of Device
Returns: Promise - Promise with async response id

| Param | Type | Description | | --- | --- | --- | | path | string | Resource path | | callback | function | Callback which will be called when async response is received |

Example

device.read(path, (status, payload) => {
  // status = 200
  // payload = 4RbaAA==
}).then((asyncResponseId) => {
  // asyncResponseId = 1533889157#42f26784-1a8d-4861-36aa-d88f
}).catch((err) => {
  // err - exception object or status code
});

device.write(path, callback, payload, type) ⇒ Promise

Sends request to write a value into device's resource.

Kind: instance method of Device
Returns: Promise - Promise with async response id

| Param | Type | Default | Description | | --- | --- | --- | --- | | path | string | | Resource path | | callback | function | | Callback which will be called when async response is received | | payload | buffer | | Data (optional) | | type | string | "application/vnd.oma.lwm2m+tlv" | Content type (optional) |

Example

device.write(path, (status) => {
  // status = 202
}, payload).then((asyncResponseId) => {
  // asyncResponseId = 1533889926#870a3f17-3e21-b6ad-f63d-5cfe
}).catch((err) => {
  // err - exception object or status code
});

device.execute(path, callback, payload, type) ⇒ Promise

Sends request to execute device's resource.

Kind: instance method of Device
Returns: Promise - Promise with async response id

| Param | Type | Default | Description | | --- | --- | --- | --- | | path | string | | Resource path | | callback | function | | Callback which will be called when async response is received | | payload | buffer | | Data (optional) | | type | string | "text/plain" | Content type (optional) |

Example

device.execute(path, (status) => {
  // status = 202
}).then((asyncResponseId) => {
  // asyncResponseId = 1533889926#870a3f17-3e21-b6ad-f63d-5cfe
}).catch((err) => {
  // err - exception object or status code
});

device.observe(path, callback) ⇒ Promise

Sends request to subscribe to resource.

Kind: instance method of Device
Returns: Promise - Promise with async response id

| Param | Type | Description | | --- | --- | --- | | path | string | Resource path | | callback | function | Callback which will be called when async response is received |

Example

device.observe(path, (status, payload) => {
  // status = 200
  // payload = 4RbaAA==
}).then((asyncResponseId) => {
  // asyncResponseId = 1533889157#42f26784-1a8d-4861-36aa-d88f
}).catch((err) => {
  // err - exception object or status code
});

device.cancelObserve(path) ⇒ Promise

Sends request to cancel subscriptions.

Kind: instance method of Device
Returns: Promise - Promise with HTTP status code

| Param | Type | Description | | --- | --- | --- | | path | string | Resource path |

Example

device.cancelObserve(path).then((status) => {
  // status - status code
}).catch((err) => {
  // err - exception object
});

Service

This class represents REST API service.

Kind: global class

new Service(opts)

Initializes default configurations. Reconfigures with given options.

| Param | Type | Description | | --- | --- | --- | | opts | object | Options object (optional) |

Example

const options = {
  // REST server's address
  host: 'http://localhost:8888',
  // CA certificate
  ca: '',
  // authentication (true or false)
  authentication: false,
  username: '',
  password: '',
  // notification polling (true or false)
  polling: false,
  // time between each poll in miliseconds
  interval: 1234,
  // port for socket listener (not relevant if polling is enabled)
  port: 5728,
};
new Service(options);

service.start(opts) ⇒ Promise

(Re)starts authentication, socket listener creation and notification callback registration or notification polling processes.

Kind: instance method of Service
Returns: Promise - Promise which fulfills when service is started

| Param | Type | Description | | --- | --- | --- | | opts | object | Options object (optional) |

Example

service.start().then(() => {
  // started service
}).catch((err) => {
  // err - exception object
});

Example (Passing options object)

const options = {
  // REST server's address
  host: 'http://localhost:8888',
  // CA certificate
  ca: '',
  // authentication (true or false)
  authentication: false,
  username: '',
  password: '',
  // notification polling (true or false)
  polling: false,
  // time between each poll in miliseconds
  interval: 1234,
  // port for socket listener (not relevant if polling is enabled)
  port: 5728,
};
service.start(options);

service.stop() ⇒ Promise

Stops receiving and processing events Stops this service and all it's subservices that were started in start(). Cleans up resources

Kind: instance method of Service
Returns: Promise - Promise which fulfills when service is stopped
Example

service.stop().then(() => {
  // stopped service
});

service.authenticate() ⇒ Promise

Sends request to authenticate user.

Kind: instance method of Service
Returns: Promise - Promise with authentication data (token and after what time it expires)
Example

service.authenticate().then((resp) => {
  // resp = { access_token: 'token-value', expires_in: 3600 }
}).catch((err) => {
  // err - exception message object or status code
});

service.registerNotificationCallback() ⇒ Promise

Sends request to register notification callback.

Kind: instance method of Service
Returns: Promise - Promise which fulfills when notification callback is registered
Example

service.registerNotificationCallback().then(() => {
  // notification callback has been registered
}).catch((err) => {
  // err - exception object or status code
});

service.deleteNotificationCallback() ⇒ Promise

Sends request to delete notification callback.

Kind: instance method of Service
Returns: Promise - Promise with HTTP status code
Example

service.deleteNotificationCallback().then((status) => {
  // status - status code
}).catch((err) => {
  // err - exception object
});

service.checkNotificationCallback() ⇒ Promise

Sends request to check whether or not notification callback is registered.

Kind: instance method of Service
Returns: Promise - Promise with notification callback data
Example

service.checkNotificationCallback().then((resp) => {
  // resp = { url: 'http://localhost:5728/notification', headers: {} }
}).catch((err) => {
  // err - exception message object or status code
});

service.pullNotification() ⇒ Promise

Sends request to get pending/queued notifications.

Kind: instance method of Service
Returns: Promise - Promise with notification data (registrations, deregistrations, updates, async responses)
Example

service.pullNotification().then((resp) => {
  // resp = { registrations: [...], 'reg-updates': [...], ... }
}).catch((err) => {
  // err - exception object
});

service.getDevices() ⇒ Promise

Sends request to get all registered endpoints.

Kind: instance method of Service
Returns: Promise - Promise with a list of endpoints
Example

service.getDevices().then((resp) => {
  // resp = [ { name: 'uuid-4567', type: '8dev_3700', ... }, ... ]
}).catch((err) => {
  // err - exception message object or status code
});

service.getVersion() ⇒ Promise

Sends request to get REST server version.

Kind: instance method of Service
Returns: Promise - Promise with REST server's version
Example

service.getVersion().then((resp) => {
  // resp = '1.0.0'
}).catch((err) => {
  // err - exception object
});

service.get(path) ⇒ Promise

Performs GET requests with given path.

Kind: instance method of Service
Returns: Promise - Promise with data and response object

| Param | Type | Description | | --- | --- | --- | | path | string | Request path |

Example

service.get(path).then((dataAndResponse) => {
  // dataAndResponse.data - data object
  // dataAndResponse.resp - response object
}).catch((err) => {
  // err - exception object
});

service.put(path, argument, type) ⇒ Promise

Performs PUT requests with given path, data and data type.

Kind: instance method of Service
Returns: Promise - Promise with data and response object

| Param | Type | Default | Description | | --- | --- | --- | --- | | path | string | | Request path | | argument | object | | Data which will be sent (optional) | | type | string | "application/vnd.oma.lwm2m+tlv" | Data type (optional) |

service.delete(path) ⇒ Promise

Performs DELETE requests with given path.

Kind: instance method of Service
Returns: Promise - Promise with data and response object

| Param | Type | Description | | --- | --- | --- | | path | string | Request path |

service.post(path, argument, type) ⇒ Promise

Performs POST requests with given path, data and data type.

Kind: instance method of Service
Returns: Promise - Promise with data and response object

| Param | Type | Default | Description | | --- | --- | --- | --- | | path | string | | Request path | | argument | object | | Data which will be sent (optional) | | type | string | "application/vnd.oma.lwm2m+tlv" | Data type (optional) |

TYPE

Represents LwM2M variable (identifier) types (OBJECT_INSTANCE, MULTIPLE_RESOURCE, RESOURCE_INSTANCE, RESOURCE).

Kind: global constant

RESOURCE_TYPE

Represents resource type (NONE, BOOLEAN, INTEGER, FLOAT, STRING, OPAQUE).

Kind: global constant

getDictionaryByValue(dictionaryList, keyName, value) ⇒ Object | string | number

Gets dictionary by given name of the key and value.

Kind: global function
Returns: Object | string | number - dictionary

| Param | Type | Description | | --- | --- | --- | | dictionaryList | object | Dictionary list. | | keyName | Object | string | Name of the key | | value | Object | string | number | Value |

encodeResourceValue(resource) ⇒ object

Encodes value of the resource.

Kind: global function
Returns: object - buffer - Buffer of encoded value.

| Param | Type | Description | | --- | --- | --- | | resource | object | Object which stores resource value and value's type. |

Example

const resource = {
 type: TLV.RESOURCE_TYPE.INTEGER,
 value: 1
};

const encodedValue = encodeResourceValue(resource);
// encodedValue = <Buffer 01>

decodeResourceValue(buffer, resource) ⇒ Object | string | number | boolean

Decodes value of the resource.

Kind: global function
Returns: Object | string | number | boolean - value - Decoded value in specified type

| Param | Type | Description | | --- | --- | --- | | buffer | object | Buffer which will be decoded. | | resource | object | Object which stores resource value's type. |

Example

const buffer = Buffer.from([0x01]);
const resource = {
  type: TLV.RESOURCE_TYPE.INTEGER,
};

const decodedValue = decodeResourceValue(buffer, resource);
// decodedValue = 1

encode(object) ⇒ object

Encodes ant type of instance (Object instance, multiple resources, resources instance, resource).

Kind: global function
Returns: object - buffer - encoded TLV buffer.

| Param | Type | Description | | --- | --- | --- | | object | object | object which stores type, identifier and value. |

Example

const resource = {
  identifier: 5850,
  type: TLV.RESOURCE_TYPE.BOOLEAN,
  value: true
};

const encoded = encode({
  type: TYPE.RESOURCE,
  identifier: resource.identifier,
  value: encodeResourceValue(resource),
});
// encoded = <Buffer e1 16 da 01>

encodeResourceInstance(resourceInstance) ⇒ object

Encodes resource instance to TLV buffer.

Kind: global function
Returns: object - buffer - Buffer in TLV format

| Param | Type | Description | | --- | --- | --- | | resourceInstance | object | Object which stores resource identifier, value and it's type. |

Example

const resourceInstance = {
  identifier: 5850,
  type: TLV.RESOURCE_TYPE.BOOLEAN,
  value: true
};

const encoded = encodeResourceInstance(resourceInstance);
// encoded = <Buffer e1 16 da 01>

encodeMultipleResourcesTLV(resources) ⇒ object

Encodes multiple resource values to TLV buffer.

Kind: global function
Returns: object - buffer - TLV buffer.

| Param | Type | Description | | --- | --- | --- | | resources | object | Object which stores identifier, resource type, and multiple values. |

Example

const resources = {
  identifier: 5850,
  type: TLV.RESOURCE_TYPE.BOOLEAN,
  value: [true, false]
};

const encoded = encodeMultipleResources(resources);
// encoded = <Buffer a6 16 da 41 00 01 41 01 00>

encodeResource(resource) ⇒ object

Encodes resource to TLV buffer.

Kind: global function
Returns: object - buffer - TLV buffer.

| Param | Type | Description | | --- | --- | --- | | resource | object | Object which stores resource identifier, type and value. |

Example

const resource = {
  identifier: 5850,
  type: TLV.RESOURCE_TYPE.BOOLEAN,
  value: true
};

const encoded = encodeResourcez(resource);
// encoded = <Buffer e1 16 da 01>

encodeObjectInstance(objectInstance) ⇒ object

Encodes LwM2M object instance to TLV buffer.

Kind: global function
Returns: object - buffer - TLV buffer.

| Param | Type | Description | | --- | --- | --- | | objectInstance | object | LwM2M object. |

Example

const objectInstance = {
  identifier: 0,
  resources: [
    {
      identifier: 5815,
      type: TLV.RESOURCE_TYPE.FLOAT,
      value: 999.99
    }
  ]
};

const encoded = encodeObjectInstanceTLV(objectInstance);
// encoded = <Buffer 07 00 e4 16 b7 44 79 ff 5c>

encodeObject(object) ⇒ object

Encodes LwM2M object to TLV buffer.

Kind: global function
Returns: object - buffer - TLV buffer.

| Param | Type | Description | | --- | --- | --- | | object | object | LwM2M object. |

Example

const object = {
  identifier: 3305,
  objectInstances: [{
    identifier: 0,
    resources: [
      {
        identifier: 5815,
        type: TLV.RESOURCE_TYPE.FLOAT,
        value: 999.99
      }
    ]
  }]
};

const encoded = encodeObject(object);
// encoded = <Buffer 07 00 e4 16 b7 44 79 ff 5c>

decode(buffer) ⇒ object

Decodes any TLV buffer.

Kind: global function
Returns: object - object - Decoded object.

| Param | Type | Description | | --- | --- | --- | | buffer | object | encoded TLV buffer. |

Example

const buffer = Buffer.from([0xe1, 0x16, 0xda, 0x01]);

const decoded = TLV.decode(buffer);
// decoded = { type: 3, identifier: 5850, value: <Buffer 01>, tlvSize: 4 }

decodeResourceInstance(buffer, resources) ⇒ object

Decodes resource instance.

Kind: global function
Returns: object - decodedResource - Object which stores resource identifier, tlvSize resource type and value.

| Param | Type | Description | | --- | --- | --- | | buffer | object | Resource instance TLV buffer. | | resources | object | Object which stores resource identifier and resource type. |

Example

const buffer = Buffer.from([0x61, 0x16, 0xda, 0x01]);
const resources = {
  identifier: 5850,
  type: TLV.RESOURCE_TYPE.BOOLEAN,
};

const decoded = decodeResourceInstance(buffer, resources);
// decoded = { identifier: 5850, tlvSize: 4, type: TLV.RESOURCE_TYPE.BOOLEAN, value: true }

decodeResourceInstanceValue(buffer, resourceInstance) ⇒ object

Decodes resource instance value

Kind: global function
Returns: object - decodedResourceValue - Decoded resource value

| Param | Type | Description | | --- | --- | --- | | buffer | object | Resource instance value TLV buffer | | resourceInstance | object | Object which stores resource type |

Example

const buffer = Buffer.from([0x01]);
const resourceInstance = {
  type: TLV.RESOURCE_TYPE.INTEGER,
};

const decoded = decodeResourceInstance(buffer, resources);
// decoded = 1

decodeResource(buffer, resource) ⇒ object

Decodes resource.

Kind: global function
Returns: object - buffer - Decoded resource.

| Param | Type | Description | | --- | --- | --- | | buffer | object | Resource TLV buffer | | resource | object | Object which stores identifier and resource type. |

Example

const buffer = Buffer.from([0xe1, 0x16, 0xda, 0x01]);
const resource = {
  identifier: 5850,
  type: TLV.RESOURCE_TYPE.BOOLEAN,
};

const decoded = decodeResource(buffer, resource);
// decoded = { identifier: 5850, type: 1, value: true, tlvSize: 4 }

decodeObjectInstance(buffer, objectInstance) ⇒ object

Decodes object instance from TLV buffer.

Kind: global function
Returns: object - object - Decoded object instance.

| Param | Type | Description | | --- | --- | --- | | buffer | object | TLV buffer. | | objectInstance | object | Object which stores object instance identifier and resources. |

Example

const buffer = Buffer.from([0x07, 0x00, 0xe4, 0x16, 0xb7, 0x44, 0x79, 0xff, 0x5c]);
const objectInstance: {
  identifier: 0,
  resources: [
    {
      identifier: 5815,
      type: TLV.RESOURCE_TYPE.FLOAT,
    },
  ]
};

const decoded = decodeObjectInstance(buffer, objectInstance);
// decoded = { identifier: 0, resources: [ { identifier: 5815, type: 3 } ] }

decodeObject(buffer, object) ⇒ object

Decodes LwM2M object to TLV buffer.

Kind: global function
Returns: object - object - Decoded object.

| Param | Type | Description | | --- | --- | --- | | buffer | object | TLV buffer. | | object | object | Object which stores object instances with their resources. |

Example

const buffer = Buffer.from([0x07, 0x00, 0xe4, 0x16, 0xb7, 0x44, 0x79, 0xff, 0x5c]);
const object = {
  identifier: 3305,
  objectInstances: [{
    identifier: 0,
    resources: [
      {
        identifier: 5815,
        type: TLV.RESOURCE_TYPE.FLOAT,
      },
    ]
  }]
};

const decoded = decodeObject(buffer, object);
/*
decoded = {
  identifier: 3305,
  objectInstances: [
    {
      identifier: 0,
      resources: [
        {
          identifier: 5815,
          type: 3,
          value: 999.989990234375,
          tlvSize: 7
        }
      ]
    }
  ]
}
*/