put back scan & once tweak

This commit is contained in:
Mark Nadal 2020-09-18 04:53:55 -07:00
parent bac0e5b7ed
commit 2d72ebdfa2
3 changed files with 31 additions and 15 deletions

37
gun.js
View File

@ -624,7 +624,6 @@
});
}
if((msg.seen||'')[cat.id]){ return } (msg.seen || (msg.seen = function(){}))[cat.id] = cat;
//if(cat.ask && key){
if(key){
if(cat.soul && cat.ask && state >= state_is(root.graph[soul], key)){ // faster than HAM
@ -929,6 +928,18 @@
function get(as){
var at = as.via._, tmp;
as.via = as.via.back(function(at){
if(at.soul){ return at.$ }
tmp = as.data; (as.data = {})[at.get] = tmp;
});
if(!as.via || !as.via._.soul){
console.log("TODO: Error! Handle non-soul put backs");
return;
}
as.via.put(as.data, as.ack, as);
return;
if(at.get && at.back.soul){
tmp = as.data;
as.via = at.back.$;
@ -969,19 +980,24 @@
opt.ok = tag;
//opt.last = {};
//gun.get(ok, opt); // TODO: PERF! Event listener leak!!!?
((cat.act||(cat.act={}))[id = tmp||String.random(7)] = function one(msg, eve){
function one(msg, eve){
if(one.stun){ return }
var at = msg.$._, data = at.put, tmp;
if(opt.not===u && u === data){ return }
if(opt.stun===u && (tmp = root.stun) && (tmp = tmp[at.id] || tmp[at.back.id])){ // Remember! If you port this into `.get(cb` make sure you allow stun:0 skip option for `.put(`.
tmp[id] = function(){one(msg,eve)};
return;
}
// call:
if(opt.as){
opt.ok.call(opt.as, msg, eve);
opt.ok.call(opt.as, msg, eve || one);
} else {
opt.ok.call(at.$, data, msg.get || at.get, msg, eve);
opt.ok.call(at.$, data, msg.get || at.get, msg, eve || one);
}
}).at = cat;
};
one.at = cat;
(cat.act||(cat.act={}))[id = tmp||String.random(7)] = one;
one.off = function(){ one.stun = 1; if(!cat.act){ return } delete cat.act[id] }
cat.on('out', {get: {}});
return gun;
}
@ -993,11 +1009,11 @@
var gun = this, cat = gun._, root = cat.root, data = cat.put, id, one, tmp;
//(root.act[tmp = ++root.acts] = cat.act[tmp] = function(msg, eve, to){
((cat.act||(cat.act={}))[id = tmp||String.random(7)] = function(msg, eve, to){
if(!(tmp = msg.put)){
/*if(!(tmp = msg.put)){
console.log('not found');
return;
}
if('string' == typeof Gun.valid(tmp = tmp['=']||tmp[':'])){
}*/
if((tmp = msg.put) && 'string' == typeof Gun.valid(tmp = tmp['=']||tmp[':'])){
// probably already getting it.
return;
}
@ -1009,7 +1025,7 @@
one[id] = ''; if(cat.soul || cat.has){ delete cat.act[id] }
if(u === (tmp = ((msg.$||'')._||'').put)){ tmp = ((msg.$$||'')._||'').put }
cb.call(at.$, tmp, msg.get || at.get);
}
};
}).at = cat;
cat.on('out', {get: {}});
return gun;
@ -1082,7 +1098,6 @@
if(!put){ return }
var soul = put['#'], k = put['.'], val = put['=']||put[':'];
// TODO: lex match!
//console.log("let's go!!!!!!!!!!!!!!!!!", k, gun._.id, gun._.get);
((tmp = gun.get(k)._).echo || (tmp.echo = {}))[cat.id] = tmp.echo[cat.id] || cat;
}
var noop = function(){}, event = {stun: noop, off: noop}, u;
@ -1486,13 +1501,13 @@
data = Gun.state.ify({}, tmp, Gun.state.is(data, tmp), data[tmp], soul);
}
if(data){ (tmp = {})[soul] = data } // back into a graph.
console.log("lS got:", tmp);
root.on('in', {'@': msg['#'], put: tmp, lS:1});// || root.$});
});
root.on('put', function(msg){
this.to.next(msg); // remember to call next middleware adapter
var put = msg.put, soul = put['#'], key = put['.'], tmp; // pull data off wire envelope
//console.log('lS put:', key, put[':']);
disk[soul] = Gun.state.ify(disk[soul], key, put['>'], put[':'], soul); // merge into disk object
if(!msg['@']){ acks.push(msg['#']) } // then ack any non-ack write. // TODO: use batch id.
if(to){ return }

View File

@ -4,6 +4,7 @@
var yson = {}, u, sI = setTimeout.turn || (typeof setImmediate != ''+u && setImmediate) || setTimeout;
yson.parseAsync = function(text, done, revive, M){
if('string' != typeof text){ try{ done(u,JSON.parse(text)) }catch(e){ done(e) } return }
var ctx = {i: 0, text: text, done: done, l: text.length, up: []};
//M = 1024 * 1024 * 100;
//M = M || 1024 * 64;

View File

@ -27,6 +27,7 @@ var Gun;
}
}(this));
;(function(){
Gun = root.Gun
var SEA = Gun.SEA
@ -72,13 +73,12 @@ describe('SEA', function(){
SEA.sign('asdf', alice, function(data){
SEA.verify(data, bob.pub, function(msg){
expect(msg).to.be(undefined);
SEA.verify(data+1, alice.pub, function(msg){
SEA.verify(data.slice(0,20)+data.slice(21), alice.pub, function(msg){
expect(msg).to.be(undefined);
SEA.encrypt('secret', alice, function(enc){
SEA.decrypt(enc, bob, function(dec){
expect(dec).to.be(undefined);
SEA.decrypt(enc+1, alice, function(dec){
SEA.decrypt(enc.slice(0,20)+enc.slice(21), alice, function(dec){
expect(dec).to.be(undefined);
done();
});});});});});});});});
@ -218,7 +218,7 @@ describe('SEA', function(){
var old = JSON.parse(atob("eyJfIjp7IiMiOiJ+VThkS0dySFJhX01sMFZ1YlR5OUZBYTlQS1ZlYlh0eTFjS05zWWxnYjduNC5QeVd5cUVVb0ZpYVduUElOV0Nad0xBbzFobjN1MldPWTU3SzZHZnpsNjhVIiwiPiI6eyJwdWIiOjE1NDY5MDI1MDQ5NzksImFsaWFzIjoxNTQ2OTAyNTA0OTc5LCJlcHViIjoxNTQ2OTAyNTA0OTc5LCJhdXRoIjoxNTQ2OTAyNTA0OTc5fX0sInB1YiI6IlU4ZEtHckhSYV9NbDBWdWJUeTlGQWE5UEtWZWJYdHkxY0tOc1lsZ2I3bjQuUHlXeXFFVW9GaWFXblBJTldDWndMQW8xaG4zdTJXT1k1N0s2R2Z6bDY4VSIsImFsaWFzIjoiU0VBe1wibVwiOltcIn5VOGRLR3JIUmFfTWwwVnViVHk5RkFhOVBLVmViWHR5MWNLTnNZbGdiN240LlB5V3lxRVVvRmlhV25QSU5XQ1p3TEFvMWhuM3UyV09ZNTdLNkdmemw2OFVcIixcImFsaWFzXCIsXCJhbGljZVwiLDE1NDY5MDI1MDQ5NzldLFwic1wiOlwienpuaGtIZjhZdFpZM2lGd3FVd0lJUldMTjhZMmlHbmNkcnVTaStGNDNmU1BLYWpSZlI0VzhXVHM4bElSMDBndGJmTWJxS0NjQkpGN3VNSkdGRC9WV2c9PVwifSIsImVwdWIiOiJTRUF7XCJtXCI6W1wiflU4ZEtHckhSYV9NbDBWdWJUeTlGQWE5UEtWZWJYdHkxY0tOc1lsZ2I3bjQuUHlXeXFFVW9GaWFXblBJTldDWndMQW8xaG4zdTJXT1k1N0s2R2Z6bDY4VVwiLFwiZXB1YlwiLFwiRkRzM1VvNTNFZEp6eFNocEpDaVctRGZPQ3lUS0M2U3cxeS1PZVJxam5ZRS5xVGdyYTlFQk1maEpNdVlMVmNaejRZYklLRm85enNBMHpMcV82dEVPMHI0XCIsMTU0NjkwMjUwNDk3OV0sXCJzXCI6XCJPZzRVVjY4OTluSjE4dC9ybWVnV0lkdnNqN01KaEpFc29ranZYQmdteVVRUXVNVjFTdnh4cXJqOFoyV1o2Q25XSkZnTlVDbEVYYWxuMURjUFE3M1R6UT09XCJ9IiwiYXV0aCI6IlNFQXtcIm1cIjpbXCJ+VThkS0dySFJhX01sMFZ1YlR5OUZBYTlQS1ZlYlh0eTFjS05zWWxnYjduNC5QeVd5cUVVb0ZpYVduUElOV0Nad0xBbzFobjN1MldPWTU3SzZHZnpsNjhVXCIsXCJhdXRoXCIsXCJ7XFxcImVrXFxcIjpcXFwiU0VBe1xcXFxcXFwiY3RcXFxcXFxcIjpcXFxcXFxcIi94ZnNPdVNkQUtrNkJiR00zbUV6MnVlSjI3Y0tJNThYMEtUL1FsaExSZXpWcjRkNzVZb2M5QlZNRjkzejl4QXI4N080S2FDNjJUWGVoeERQN0FFa2V4N1paaEpYL2hsVm9kK1FIcVFaaUZMK2lVQzFvL2hpUEJGWElBZmtINGRrcklGOFdqcEVaU3NIVmRSOVRhY2ZzbTB3aHN5NGJXN1ZLSEUySGc9PVxcXFxcXFwiLFxcXFxcXFwiaXZcXFxcXFxcIjpcXFxcXFxcIjhWekduTStEc1lTUktIU3Z4cSszTGc9PVxcXFxcXFwiLFxcXFxcXFwic1xcXFxcXFwiOlxcXFxcXFwibVVSSlJ4TzUvdXM9XFxcXFxcXCJ9XFxcIixcXFwic1xcXCI6XFxcImE1SlA3VFpuVE9jYjEwMGJOejlscEU4dnpqcUE3TWl0NHcwN3pjQTdIOFV0bml1WnVHSmdpZnNNQlFNSGdRdE5cXFwifVwiLDE1NDY5MDI1MDQ5NzldLFwic1wiOlwiSGFzMytJaHFEZTYyN016cElXZVE1cVFrZ2NOMlk3WHRpNGw0TFU3T2JyaktxSlBnSllrVWE2bk9YdlRmQkFzV1BPVzVnemh4Q2RPVGNFQm5icWlpWXc9PVwifSJ9"));
var okey = {"pub":"U8dKGrHRa_Ml0VubTy9FAa9PKVebXty1cKNsYlgb7n4.PyWyqEUoFiaWnPINWCZwLAo1hn3u2WOY57K6Gfzl68U","epub":"FDs3Uo53EdJzxShpJCiW-DfOCyTKC6Sw1y-OeRqjnYE.qTgra9EBMfhJMuYLVcZz4YbIKFo9zsA0zLq_6tEO0r4","priv":"jMy7WfcldJ4esZEijAj4LTb99smtY_H0yKJLemJl2HI","epriv":"1DszMh-85pGTPLYtRunG-Q-xB78AE4k07PPkbedYYwk"}
var gun = Gun({super: true}), tmp = Gun.node.soul(old);
var gun = Gun({super: true}), tmp = old._['#'];//Gun.node.soul(old);
var graph = {};
graph[tmp] = old;
var alias = SEA.opt.unpack(await SEA.verify(old.alias, false), 'alias', old);