telehash-mantle is a shared repository and cli tool for building a telehash sdk for node, electron, and cordova.
To leverage JavaScript code portability
Because Javascript code portability is a dirty lie.
npm install -g telehash-mantle cd myproject mantle -o ground.js --platform=<node/electron/cordova> --target=<version (electron only)> --format=<es/cjs> --transports=<serial-host,ble-central> --keystore=local This will generate a ground.js file that is tailored to your platform.
Usage is modeled after express. The flow is to initialize your app, configure middlewares, and turn it on
//main.jsvarGround=require("./ground.js");varapp=Ground({/*options*/},function(err){if(err)console.log("error initializing telehash");})//whitelist connectionsapp.accept("asdf1234");app.accept("mnbv9876");//blacklist connectionsapp.reject("lkjhgfds");// asyncronously accept connectionsapp.on('discover',function(greeting,accept){promtUserToAcceptLink(greeting.json.hashname,function(){link=accept();//do stuff with link;})})//handle new linksapp.on('link',function(link){//send a console command to a linklink.console("report()",function(err,result){if(err)returnconsole.log(err);console.log(result);})// create a generic channel, inherits from node streamsvarchan=link.channel({json: {type : "event",label: "report"},body: newBuffer("binary payload")});//data events;chan.on('data',function(packet){console.log(packet.json,packet.body)//{stuff}, <Buffer >})//pipe as streamchan.pipe(fs.createWriteStream("out.txt"));// send a one-off channel packet, no replylink.direct({type : "event",label:"stuff"},newBuffer("payload"));// set an init scriptlink.init(fs.readFileSync("path/to/script.js"),function(err,res){})})// iterate through all open linksapp._links.forEach((link)=>{link.console("parralel execution", ...)})// use middlewares (coming soon)letmysql_sink=require("telehash-mysql-sink");varinstance1=mysql_sink({host: localhost...});varinstance2=mysql_sink({host : amazon...});app.use(instance1);app.use(instance2);//generic event middlewareletevents=require("filement-event");app.use(events({label:"adfadf",callback: function(label,stuff){doStuffWithMatchingNetworkEvent(label,stuff)})//start appapp.start()app.listen();// -- OR --app.start(true);