UNPKG

edichain

Version:

Provides a basic integration for ipfs (storage/distribution) and ethereum blockchain (validation/authorization) based EDIfact message exchange.

186 lines (160 loc) 5.13 kB
/* EDIserver Provides a JSON RPC service to interact with edichain */ Error.stackTraceLimit = Infinity; require("./edichain.js"); var forge = require('node-forge'); var rpc = require('json-rpc2'); var fs = require('fs'); var rpcServer = function() { function receivedMessageCount(args, opt, callback) { var error, result; result=edichain.getReceivedMessageCount(); callback(error, result); }; function sentMessageCount(args, opt, callback) { var error, result; result=edichain.getSentMessageCount(); callback(error, result); } function chainAccount(args, opt, callback) { var error, result; result=edichain.config.fromAddress; callback(error, result); }; function getBalance(args, opt, callback) { var error, result; result=edichain.getBalance(); callback(error, result); }; function getMessageByNumber(args, opt, callback) { var error, result; var reload=false; if(args.length>1) reload=true; callback(error,edichain.getMessageByNumber(args[0],reload)); }; function getSentByNumber(args, opt, callback) { var error, result; var reload=false; if(args.length>1) reload=true; callback(error,edichain.getSentByNumber(args[0],reload)); }; function decryptMessageByNumber(para, opt, callback) { var error, result; result=edichain.decryptMessageByNumber(para[0]); callback(error,result); }; function decryptSentByNumber(para, opt, callback) { var error, result; result=edichain.decryptSentByNumber(para[0]); callback(error,result); }; function ackMessageByAddr(para,opt,callback) { var error, result; try { edichain.ackMessageByAddr(para[0],para[1],function() { callback(error,result); }); } catch(e) {error=e;callback(error,result);} }; function getAck(para,opt,callback) { var error, result; result=edichain.getAck(para[0],para[1]); callback(error,result); } function getTx(para,opt,callback) { var error, result; result=edichain.getTx(para[0]); callback(error,result); } function getSentAddrs(para,opt,callback) { var error, result; result=edichain.getSentAddrs(); callback(error,result); } function getMesssageAddrs(para,opt,callback) { var error, result; result=edichain.getMesssageAddrs(); callback(error,result); } function getTxLog(para,opt,callback) { var error, result; edichain.getTxLog(function(r) { callback(error,r); }); } function sendEdi(para, opt, callback) { var error, result; var recipient="unknown"; var data=para[0]; if(para.length==1) { // determine recipient from EDIFACT var segSplit=data.substr(4,1); var unb_start=data.indexOf("UNB"+segSplit); for(var j=0;j<3;j++) { unb_start=data.indexOf(segSplit,unb_start+1); } var recipient_end=data.indexOf(segSplit,unb_start+1); recipient=data.substr(unb_start+1,recipient_end-unb_start-1); } else { // determine recipient from filename recipient=para[1]; } var msg = { filename:'adhoc', data:forge.util.encode64(data) } edichain.sendData(recipient,JSON.stringify(msg),function(tx,hash) { result=hash; callback(error,result); }) }; var server = rpc.Server.$create({ 'websocket': true, // is true by default 'headers': { // allow custom headers is empty by default 'Access-Control-Allow-Origin': '*' } }); server.expose('edichain',{ 'sendEdi':sendEdi, 'receivedMessageCount':receivedMessageCount, 'sentMessageCount':sentMessageCount, 'decryptMessageByNumber':decryptMessageByNumber, 'decryptSentByNumber':decryptSentByNumber, 'getMessageByNumber':getMessageByNumber, 'getSentByNumber':getSentByNumber, 'chainAccount':chainAccount, 'ackMessageByAddr':ackMessageByAddr, 'getTxLog':getTxLog, 'getAck':getAck, 'getBalance':getBalance, 'getTx':getTx, 'getSentAddrs':getSentAddrs, 'getMesssageAddrs':getMesssageAddrs }); server.listen(8000, '0.0.0.0'); try { var c = edichain.getReceivedMessageCount(); /* console.log("Preload some cache data.."); for(var i=c-1;((i>=0)&&(i>c-3));i--) { edichain.getMessageByNumber(i); } */ console.log("RPC Server started on http://localhost:8000"); console.log("Web UI might be available on http://localhost:8080/ipns/QmSPtbb8VUVs1k5spJfDhrUc1mzdsC5FKGZpx1FSfhjmze/index.html "); //var tx=edichain.getTx("0xe41e88cc3608f6af0072291182492ea7ea8089f7"); } catch(e) { console.log("Backend Trapped",e); } setInterval(function() { edichain.init2() },8640000); } var config = {}; try { config=JSON.parse(readFileSync("../../server.conf.json")); } catch(e) {} config.bootstrap_callback=rpcServer; config.pfsPeer='/ip4/62.75.241.218/tcp/4001/ipfs/QmSPtbb8VUVs1k5spJfDhrUc1mzdsC5FKGZpx1FSfhjmze'; config.path="../../"; var echain = new edichain.bootstrap(config);