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
- Device
This class represents device (endpoint).
- Service
This class represents REST API service.
Constants
- TYPE
Represents LwM2M variable (identifier) types (OBJECT_INSTANCE,
MULTIPLE_RESOURCE, RESOURCE_INSTANCE, RESOURCE).
- RESOURCE_TYPE
Represents resource type (NONE, BOOLEAN, INTEGER, FLOAT, STRING, OPAQUE).
Functions
- getDictionaryByValue(dictionaryList, keyName, value) ⇒
Object
| string
| number
Gets dictionary by given name of the key and value.
- encodeResourceValue(resource) ⇒
object
Encodes value of the resource.
- decodeResourceValue(buffer, resource) ⇒
Object
| string
| number
| boolean
Decodes value of the resource.
- encode(object) ⇒
object
Encodes ant type of instance (Object instance, multiple resources, resources instance, resource).
- encodeResourceInstance(resourceInstance) ⇒
object
Encodes resource instance to TLV buffer.
- encodeMultipleResourcesTLV(resources) ⇒
object
Encodes multiple resource values to TLV buffer.
- encodeResource(resource) ⇒
object
Encodes resource to TLV buffer.
- encodeObjectInstance(objectInstance) ⇒
object
Encodes LwM2M object instance to TLV buffer.
- encodeObject(object) ⇒
object
Encodes LwM2M object to TLV buffer.
- decode(buffer) ⇒
object
Decodes any TLV buffer.
- decodeResourceInstance(buffer, resources) ⇒
object
Decodes resource instance.
- decodeResourceInstanceValue(buffer, resourceInstance) ⇒
object
Decodes resource instance value
- decodeResource(buffer, resource) ⇒
object
Decodes resource.
- decodeObjectInstance(buffer, objectInstance) ⇒
object
Decodes object instance from TLV buffer.
- decodeObject(buffer, object) ⇒
object
Decodes LwM2M object to TLV buffer.
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) => {
}).catch((err) => {
});
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) => {
}).then((asyncResponseId) => {
}).catch((err) => {
});
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) => {
}, payload).then((asyncResponseId) => {
}).catch((err) => {
});
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) => {
}).then((asyncResponseId) => {
}).catch((err) => {
});
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) => {
}).then((asyncResponseId) => {
}).catch((err) => {
});
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) => {
}).catch((err) => {
});
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 = {
host: 'http://localhost:8888',
ca: '',
authentication: false,
username: '',
password: '',
polling: false,
interval: 1234,
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(() => {
}).catch((err) => {
});
Example (Passing options object)
const options = {
host: 'http://localhost:8888',
ca: '',
authentication: false,
username: '',
password: '',
polling: false,
interval: 1234,
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(() => {
});
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) => {
}).catch((err) => {
});
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(() => {
}).catch((err) => {
});
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) => {
}).catch((err) => {
});
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) => {
}).catch((err) => {
});
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) => {
}).catch((err) => {
});
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) => {
}).catch((err) => {
});
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) => {
}).catch((err) => {
});
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) => {
}).catch((err) => {
});
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);
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);
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),
});
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);