Client library for the Hypertopic protocol
Install and run Argos (on port 80) with test data.
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
db . getView ( '/user/vitraux' )
. then ( _log ) ;
db . getView ( '/item/Vitraux - Bénel/85bb03f5e4930f3b9d1ef9afbfa92421b8e2e23b' )
. then ( _log ) ;
on a corpus (with all its items)
db . getView ( '/corpus/Vitraux - Bénel' )
. then ( _log ) ;
db . getView ( '/viewpoint/a76306e4f17ed4f79e7e481eb9a1bd06' )
. then ( _log ) ;
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 ) ;
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)
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 ) ;
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 ) ;
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 ) ;
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 ) ;