hypertopic
v3.6.1
Published
Client library for the Hypertopic protocol.
Downloads
8
Readme
Client library for the Hypertopic protocol
Requirements
- Install and run Argos (on port 80) with test data.
Install
npm install hypertopic
Use
Set the services to be called
const hypertopic = require('hypertopic');
let db = hypertopic([
"http://localhost",
"https://steatite.utt.fr"
]);
const _log = (x) => console.log(JSON.stringify(x, null, 2));
const _error = (x) => console.error(x.message);
Send distributed requests
- on a user
db.getView('/user/vitraux')
.then(_log);
- on an item
db.getView('/item/Vitraux - Bénel/85bb03f5e4930f3b9d1ef9afbfa92421b8e2e23b')
.then(_log);
- on a corpus (with all its items)
db.getView('/corpus/Vitraux - Bénel')
.then(_log);
- on a viewpoint
db.getView('/viewpoint/a76306e4f17ed4f79e7e481eb9a1bd06')
.then(_log);
- on several of them
db.getView(['/corpus/Vitraux - Bénel','/corpus/Vitraux - Recensement'])
.then(_log);
- on all corpora and viewpoints of a user
db.getView('/user/vitraux')
.then(x => [
...x.vitraux.viewpoint.map(y => `/viewpoint/${y.id}`),
...x.vitraux.corpus.map(y => `/corpus/${y.id}`)
])
.then(db.getView)
.then(_log);
Update objects with generic methods
- Create an object (with an automatic ID)
db.auth('alice', 'whiterabbit')
.post({item_name:'Bond', item_corpus:'TEST'})
.then(_log)
.catch(_error);
- Create an object with a given ID
db.auth('alice', 'whiterabbit')
.post({_id:'007', item_name:'Bond', item_corpus:'TEST'})
.then(_log)
.catch(_error);
- Update an object
db.auth('alice', 'whiterabbit')
.get({_id:'007'})
.then(x => Object.assign(x, {item_name:'James Bond'}))
.then(db.post)
.then(_log)
.catch(_error);
- Delete an object with update conflict detection
db.auth('alice', 'whiterabbit')
.delete({_id:'007', _rev:'1-xxxxxxxxx'})
.then(_log)
.catch(_error);
- Delete an object with no conflict detection (to be used with caution!)
db.auth('alice', 'whiterabbit')
.get({_id:'007'})
.then(db.delete)
.then(_log)
.catch(_error);
Update (or create) Hypertopic objects (experimental)
- Item attributes
db.auth('alice', 'whiterabbit')
.item({_id:'007', item_corpus:'agents'})
.setAttributes({item_name:'James Bond', weapon:'Walther PPK'})
.then(_log)
.catch(_error);
db.auth('alice', 'whiterabbit')
.item({_id:'007', item_corpus:'agents'})
.unsetAttribute('weapon')
.then(_log)
.catch(_error);
- Item topics
db.auth('alice', 'whiterabbit')
.item({_id:'007', item_corpus:'agents'})
.setTopic('topic-octopussy', 'viewpoint-missions')
.then(_log)
.catch(_error);
db.auth('alice', 'whiterabbit')
.item({_id:'007', item_corpus:'agents'})
.unsetTopic('topic-octopussy')
.then(_log)
.catch(_error);
- Item resources
db.auth('alice', 'whiterabbit')
.item({_id:'007', item_corpus:'agents'})
.setResource('hello.txt', 'text/plain', 'My name is Bond, James Bond.')
.then(_log)
.catch(_error);
db.auth('alice', 'whiterabbit')
.item({_id:'007', item_corpus:'agents'})
.unsetResource('hello.txt')
.then(_log)
.catch(_error);
- Item links
db.auth('alice', 'whiterabbit')
.item({_id:'007', item_corpus:'agents'})
.setLink('has for superior', 'executives', 'M')
.then(_log)
.catch(_error);
db.auth('alice', 'whiterabbit')
.item({_id:'007', item_corpus:'agents'})
.unsetLink('has for superior', 'executives', 'M')
.then(_log)
.catch(_error);