gun 0.1.2

The Gun database, in Rust
Documentation
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>
  <script src="./get.js"></script>
  <script src="./ham.js"></script>
  <script src="./dup.js"></script>
	<script>
var graph = {};
var dup = Dup();
var peer = new WebSocket('ws://localhost:8080');
peer.onopen = function(o){ 
  console.log('open', o);
  setTimeout(function(){
    var msg = {
      '#': dup.track(Dup.random()),
      get: {'#': 'FDSA', '.': 'species'}
    }
    peer.send(JSON.stringify(msg));
  },2000);
  setTimeout(function(){
    var msg = {
      '#': dup.track(Dup.random()),
      put: {
        ASDF: {_: {'#': 'ASDF', '>': {name: 2, boss: 2}},
          name: "Mark Nadal",
          boss: {'#': 'FDSA'}
        },
        FDSA: {_: {'#': 'FDSA', '>': {name: 2, species: 2, slave: 2}},
          name: "Fluffy",
          species: "a kitty",
          slave: {'#': 'ASDF'}
        }
      }
    }
    peer.send(JSON.stringify(msg)); 
  },1000 * Math.random());
  setTimeout(function(){
    var msg = {
      '#': dup.track(Dup.random()),
      put: {
        ASDF: {_: {'#': 'ASDF', '>': {name: 1}},
          name: "Mark",
        },
        FDSA: {_: {'#': 'FDSA', '>': {species: 2, color: 3}},
          species: "felis silvestris",
          color: 'ginger'
        }
      }
    }
    peer.send(JSON.stringify(msg));
  },1000 * Math.random());
};
peer.onclose = function(c){ console.log('close', c) };
peer.onmessage = function(m){
  var msg = JSON.parse(m.data);
  if(dup.check(msg['#'])){ return }
  dup.track(msg['#']);
  if(msg.put){
    HAM.mix(msg.put, graph);
  }
  if(msg.get){
    var ack = GET(msg.get, graph);
    ack = JSON.stringify({
      '#': dup.track(Dup.random()),
      '@': msg['#'],
      put: ack
    });
    peer.send(ack);
  }
  console.log('data', msg);
  peer.send(m.data);
};
peer.onerror = function(e){ console.log('error', e) };
	</script>
</body>
</html>