A Nodejs library used by databox apps and drivers to interfac with Databox APIs.
To use this library in your node project, run:
npm install --save node-databox
and then within your project:
const databox = require('node-databox');
⚠️ While this library is at 1.0.0 the API may change.
Examples of usage are provided in the https://github.com/me-box/databox-quickstart repository.
These functions are useful for parsing the configuration data passed to your app or driver.
Returns An object containing the HTTPS credentials to pass to https.createServer when offering an https server. These are read from /run/secrets/DATABOX.pem and are generated by the container-manager at run time. This is useful for apps and driver offering interfaces over https.
Returns An empty DataSourceMetadata object
DataSourceMetadata objects are used to describe your data source when creating a new one. They look like this:
{
Description: "", // Text Description of your dataSource
ContentType: "", // The format the data is written in
// JSON,BINARY or TEXT.
Vendor: "", // Your company name.
DataSourceType: "", // A short type string that represents your data
// it is used by apps to find the data you offer.
DataSourceID: "", // the ID of this data source, as the creator you
// are responsible for ensuring this is unique
// within your data store.
StoreType: "", // The type of store this uses
// (ts,ts/blob or kv)
IsActuator: false, // is this an IsActuator? it true other apps can
// request write access to this datasource
Unit: "", // Text representation of the units
Location: "", // Text representation of location Information
};
Name | Type | Description |
---|---|---|
DataSourceMetadata | Object |
An object of the form returned by NewDataSourceMetadata |
Returns An object representing the hypercat item represented by DataSourceMetadata.
Name | Type | Description |
---|---|---|
hyperCatString | String |
A string representation of the hypercat Item representing a data source |
Returns an object of the form { "DataSourceMetadata": , "DataSourceURL":store_url}
Name | Type | Description |
---|---|---|
hyperCatString | String |
A string representation of the hypercat Item representing a data source |
Returns a string holding the store endpoint URL (for use in NewStoreClient)
The databox core-store supports the reading, writing, querying of time series and key value data. It is the default store for Databox version 0.3.0 and greater.
The time series API has support for writing generic JSON blobs (see TSBlob) or data in a specific format (see TS) which allows extra functionality such as joining, filtering and aggregation on the data. The key value API stores data against keys (see KV). All three type of data can be accessed through the databox.StoreClient.
Name | Type | Description |
---|---|---|
STORE_URI | String |
dataStore to access found in DATABOX_STORE_URL for drivers and in GetStoreURLFromHypercat( DATASOURCE_[clientId] ) for each datasource required by an app |
ARBITER_URI | String |
the URI to the arbiter available in DATABOX_ARBITER_ENDPOINT env var within databox |
enableLogging | Bool |
Turns on verbose debug output |
Returns a new StoreClient that is connected to the provided store.
example To create a new client to access a store:
const databox = require('node-databox');
let client = databox.NewStoreClient(STORE_URI, ARBITER_URI, false)
This function registers your data sources with your store. Registering your data source makes them available to other databox apps.
Name | Type | Description |
---|---|---|
DataSourceMetadata | Object |
of the form returned by NewDataSourceMetadata |
Returns a Promise
that resolves with "created" on success or rejects with error message on error.
These functions allow you to manage structured json data in the time series store and allow for filtering and aggregation of the data.
Data written into a TimeSeriesStore must contain, A value (integer or floating point number) and a tag is an identifier with corresponding string value. For example:{"room": "lounge", "value": 1}. Tagging a value provides a way to group values together when accessing them. In the example provided you could retrieve all values that are in a room called 'lounge'.
Data returned from a query is a JSON dictionary containing a timestamp in epoch milliseconds and the actual data. For example:{"timestamp":1513160985841,"data":{"foo":"bar","value":1}}. Data can also be aggregated by applying functions across values. Aggregation functions result in a response of a single value. For example: {"result":1}.
The storeClient.TS supports the following functions:
Data written to the store for the given dataSourceID data is timestamped with milliseconds since the unix epoch on insert.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
payload | Object |
A JSON serializable Object to write to the store |
Returns a Promise
that resolves with "created" on success or rejects with error message on error.
Writes data to the store for the given dataSourceID at the given timestamp. Timestamp should be in milliseconds since the unix epoch.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
timestamp | Int |
milliseconds since the unix epoch |
payload | Object |
A JSON serializable Object to write to the store |
Returns a Promise
that resolves with "created" on success or rejects with error message on error.
Reads the latest data written to the provided dataSourceID.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
Returns a Promise
that resolves with an array of Objects of the form
{
timestamp: 1510768103558,
data: { value:[numeric value] ,[tag name]:[tag value] }
}
on success or rejects with error message on error.
Reads the last N items written to the provided dataSourceID.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
N | Int |
number of results to return |
aggregation | String sum |
count |
filterTagName | String |
The name of the tag to filter on |
filterType | String equals |
contains |
filterValue | String |
the value to search for in the tag data |
Returns a Promise
that resolves with an array of Objects of the form
{
timestamp: 1510768103558,
data: { value:[numeric value] ,[tag name]:[tag value] }
}
on success or rejects with error message on error.
storeClient.TS.Since (dataSourceID, sinceTimeStamp, aggregation, filterTagName, filterType, filterValue)
Read all entries since a time (inclusive)
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
sinceTimeStamp | Int |
timestamp im ms form to return data after |
aggregation | String sum |
count |
filterTagName | String |
Optional name of the tag to filter on |
filterType | String equals |
contains |
filterValue | String |
Optional value to search for in the tag data |
Returns a Promise
that resolves with an array of Objects of the form
{
timestamp: 1510768103558,
data: { value:[numeric value] ,[tag name]:[tag value] }
}
storeClient.TS.Range (dataSourceID, fromTimeStamp, toTimeStamp, aggregation, filterTagName, filterType, filterValue)
Read all entries in a time range (inclusive)
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
fromTimeStamp | Int |
timestamp in ms form which to return data after |
toTimeStamp | Int |
timestamp in ms before which data will be returned |
aggregation | String sum |
count |
filterTagName | String |
Optional name of the tag to filter on |
filterType | String equals |
contains |
filterValue | String |
Optional value to search for in the tag data |
Returns a Promise
that resolves with an array of Objects of the form
{
timestamp: 1510768103558,
data: { value:[numeric value] ,[tag name]:[tag value] }
}
This function allows you to receive data from a data source as soon as it is written.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
timeout | int |
stop sending data after timeout seconds |
Returns A Promise
that resolves with an EventEmitter
that emits data
when data is written to the observed dataSourceID, the Promise
rejects with an error. The data
event will contain an Object of the form
{
"timestamp" : 1510768103558,
"datasourceid" : dataSourceID,
"key" : key name,
"data" : { value:[numeric value] ,[tag name]:[tag value] }
}
Closes the connection to stop observing data on the provided dataSourceID.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
Returns Void
These functions allow you to manage unstructured json data in the time series store.
⚠️ If data is written into a TimeSeriesBlobStore filtering and aggregation functions are not supported.
The StoreClient.TSBlob supports the following functions:
Writes data to the store for the given dataSourceID data is timestamped with milliseconds since the unix epoch on insert.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
payload | Object |
A JSON serializable Object to write to the store |
Returns a Promise
that resolves with "created" on success or rejects with error message on error.
Writes data to the store for the given dataSourceID at the given timestamp. Timestamp should be in milliseconds since the unix epoch.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
timestamp | Int |
milliseconds since the unix epoch |
payload | Object |
A JSON serializable Object to write to the store |
Returns a Promise
that resolves with "created" on success or rejects with error message on error.
Reads the latest data written to the provided dataSourceID.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
Returns a Promise
that resolves with an Object of the form
{
timestamp: 1510768103558,
data: { data written by driver }
}
on success or rejects with error message on error.
Reads the last N items written to the provided dataSourceID.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
N | Int |
number of results to return |
Returns a Promise
that resolves with an array of Objects of the form
{
timestamp: 1510768103558,
data: { data written by driver }
}
on success or rejects with error message on error.
Read all entries since a time (inclusive)
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
sinceTimeStamp | Int |
timestamp im ms form which to return data after |
Returns a Promise
that resolves with an array of Objects of the form
{
timestamp: 1510768103558,
data: { value:[numeric value] ,[tag name]:[tag value] }
}
Read all entries in a time range (inclusive)
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
fromTimeStamp | Int |
timestamp in ms form which to return data after |
toTimeStamp | Int |
timestamp in ms before which data will be returned |
Returns a Promise
that resolves with an array of Objects of the form
{
timestamp: 1510768103558,
data: { value:[numeric value] ,[tag name]:[tag value] }
}
This function allows you to receive data from a data source as soon as it is written.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
timeout | int |
stop sending data after timeout seconds |
Returns A Promise
that resolves with an EventEmitter
that emits data
when data is written to the observed dataSourceID, the Promise
rejects with an error. The data
event will contain an Object of the form
{
"timestamp" : 1510768103558,
"datasourceid" : dataSourceID,
"key" : key name,
"data" : { data written by driver },
}
Closes the connection to stop observing data on the provided dataSourceID.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
Returns Void
The Key Value Store allows the storage of TEXT, JSON and binary data agents keys. The default content format is JSON.
The StoreClient.KV encapsulates the following functions:
Writes data to the store for the given dataSourceID data. Writes to the same key overwrite the data.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
KeyName | String |
the key you wish to write to |
payload | Object |
A JSON serializable Object to write to the store |
contentFormat | String |
JSON TEXT or BINARY |
Returns a Promise
that resolves with "created" on success or rejects with error message on error.
Lists the stored keys for this dataSourceID
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to read from |
Returns as Promise
that resolves with the data on success or rejects with error message on error. The type of the returned data is an Array
of Strings
.
Reads data from the store for the given dataSourceID. data is timestamped with milliseconds since the unix epoch on insert.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to read from |
KeyName | String |
the key you wish read from |
contentFormat | String |
JSON TEXT or BINARY |
Returns a Promise
that resolves with the data on success or rejects with error message on error. The type of the returned data depends on the contentFormat read.
This function allows you to receive data from all keys under a data source as soon as it is written. This will observe all keys under a single data source
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
timeout | int |
stop sending data after timeout seconds |
contentFormat | String |
JSON TEXT or BINARY |
Returns A Promise
that resolves with an EventEmitter
that emits data
when data is written to the observed dataSourceID, the Promise
rejects with an error. The data
event will contain data stored at the provided dataSourceID. The type of the return data depends on contentFormat.
{
"timestamp" : 1510768103558,
"datasourceid" : dataSourceID,
"key" : key name,
"data" : { data written by driver },
}
This function allows you to receive data from a data source as soon as it is written. This will observe a single key under a single data source
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
timeout | int |
stop sending data after timeout seconds |
contentFormat | String |
JSON TEXT or BINARY |
Returns A Promise
that resolves with an EventEmitter
that emits data
when data is written to the observed dataSourceID, the Promise
rejects with an error. The data
event will contain data stored at the provided dataSourceID. The type of the return data depends on contentFormat.
{
"timestamp" : 1510768103558,
"datasourceid" : dataSourceID,
"key" : key name,
"data" : { data written by driver },
}
Closes the connection to stop observing data on the provided dataSourceID.
Name | Type | Description |
---|---|---|
dataSourceID | String |
dataSourceID to write to |
Returns Void
The databox export-service allows apps (not drivers) to POST
data to whitelisted URLs (see manifest export-whitelist
).
Note that drivers can access remote URLs directly (see manifest
external-whitelist
).
The details of the export-service are under review, and this API is subject to change or withdrawal in future versions.
Create a new export service client.
Name | Type | Description |
---|---|---|
ARBITER_URI | String |
the URI to the arbiter available in DATABOX_ARBITER_ENDPOINT env var within databox |
Returns a new Export (client)
Asks the export service to POST the payload to the destination URL. Note, requestId not currently supported.
Name | Type | Description |
---|---|---|
destination | String |
Destination URL |
payload | Object |
Data to POST to destination |
id | String |
optional request ID, required to poll previous request state |
Returns a Promise
that resolves with the destination server's response or rejects with an error
e.g.
{ id: 'cdaa2127-dfaa-4b52-a1e1-bb20345aa31c',
state: 'Pending',
ext_response: {}
}
State can be Pending
, Processing
or Finished
. If Finished
ext_reponse
will be a JSON object like {status: <status code>, body: <response body>}
.
If id
is not specified in the initial request then it will be generated by the
export service.
example post some data to a remote URL:
const databox = require('node-databox')
const exportClient = databox.NewExportClient( DATABOX_ARIBTER_ENDPOINT )
exportClient.Logpoll('https://www.example.com/nosuch', { eg: "hello" })
.then((res) => {
console.log('export success', res)
})
.catch((err) => {
console.warn('export error', err)
})
EP/N028260/1, Databox: Privacy-Aware Infrastructure for Managing Personal Data
EP/N028260/2, Databox: Privacy-Aware Infrastructure for Managing Personal Data
EP/N014243/1, Future Everyday Interaction with the Autonomous Internet of Things
EP/M001636/1, Privacy-by-Design: Building Accountability into the Internet of Things (IoTDatabox)
EP/M02315X/1, From Human Data to Personal Experience