Skip to content

Repository files navigation

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

consthypertopic=require('hypertopic');letdb=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);

Releases

Packages

Used by

Contributors

Languages