
happner-client
The client for happner-2 and happner cluster services.
npm install happner-client
Usage
Create client instance.
var HappnerClient = require('happner-client');
var client = new HappnerClient({
requestTimeout: 10 * 1000,
responseTimeout: 20 * 1000,
logger: null
});
Connect
var optionalInfo = {
}
client.connect(
{
host: 'localhost',
port: 55000
},
{
protocol: 'https',
username: '_ADMIN',
password: 'happn',
allowSelfSignedCerts: true,
info: {}
}
).then(...).catch(...);
client.connect(null, {username: '_ADMIN', password: 'happn'}, function (e) {
})
Events
client.on('connected', function () {
});
client.on('reconnected', function () {
});
client.on('disconnected', function () {
});
client.on('reconnecting', function () {
});
client.on('error', function (e) {
});
Construct your API
var kitchenModel = {
fridge: {
version: '^1.0.0',
methods: {
getTemperature: {
params: [
{name: 'shelves', type: 'array'}
]
}
}
}
};
var kitchen = client.construct(kitchenModel);
Use API functions
kitchen.exchange.fridge.getTemperature(['top', 'middle'], function (e, temps) {});
kitchen.exchange.fridge.getTemperature(['top', 'middle'])
.then(function (temps) {})
.catch(function (e) {})
Listen to API events
kitchen.event.fridge.on('/eventName', function (data) {});
Discover component methods
NB: this will only work if you connect before you construct
const client = new HappnerClient({ discoverMethods: true });
var model = {
component1: {
version: '^1.0.0'
},
component2: {
version: '^1.0.0'
}
};
await client.connect(null, {
username: '_ADMIN',
password: 'xxx'
});
const createdApi = createdClient.construct(model);
await createdApi.component1.discoveredMethod();
Access happn data points directly, via the dataClient
var dataClient = client.dataClient();
dataClient.on('/test/point', function(data){
}).then(...);
dataClient.set('/test/point', {my: 'data'}).then(...)
dataClient.get('/test/point').then(...)
dataClient.remove('/test/point').then(...)
see this test for a full demonstration
Browser usage
Assuming served from happner-2 packaged /api/client
script
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="/api/client"></script>
</head>
<body>
<script>
var client = new Happner.HappnerClient({
requestTimeout: 10 * 1000,
responseTimeout: 20 * 1000
});
var model = {
'component': {
version: '^2.0.0',
methods: {
method1: {}
}
}
};
var api = client.construct(model);
client.connect()
.then(function () {
api.event.component.on('test/event', function (data, meta) {
console.log('EVENT', meta.path);
});
})
.catch(function (error) {
console.error('connection error', error);
});
setInterval(function () {
api.exchange.component.method1()
.then(function (reply) {
console.log('REPLY', reply);
})
.catch(function (error) {
console.error('ERROR', error);
});
}, 1000);
</script>
</body>
</html>