mirror of
https://github.com/amark/gun.git
synced 2025-03-30 15:08:33 +00:00
feat: globalThis along with window
This commit is contained in:
parent
93ba2115c4
commit
21ddaa980f
2
gun.js
2
gun.js
@ -758,7 +758,7 @@
|
||||
Gun.log = function(){ return (!Gun.log.off && C.log.apply(C, arguments)), [].slice.call(arguments).join(' ') };
|
||||
Gun.log.once = function(w,s,o){ return (o = Gun.log.once)[w] = o[w] || 0, o[w]++ || Gun.log(s) };
|
||||
|
||||
if(typeof window !== "undefined"){ (window.GUN = window.Gun = Gun).window = window }
|
||||
((typeof globalThis !== "undefined" && typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined") ? ((globalThis.GUN = globalThis.Gun = Gun).window = globalThis) : (typeof window !== "undefined" ? ((window.GUN = window.Gun = Gun).window = window) : undefined));
|
||||
try{ if(typeof MODULE !== "undefined"){ MODULE.exports = Gun } }catch(e){}
|
||||
module.exports = Gun;
|
||||
|
||||
|
2
gun.min.js
vendored
2
gun.min.js
vendored
File diff suppressed because one or more lines are too long
@ -39,6 +39,7 @@ function serve(req, res, next){ var tmp;
|
||||
}
|
||||
var S = +new Date;
|
||||
var rs = fs.createReadStream(path);
|
||||
if(req.url.slice(-3) === '.js'){ res.writeHead(200, {'Content-Type': 'text/javascript'}) }
|
||||
rs.on('open', function(){ console.STAT && console.STAT(S, +new Date - S, 'serve file open'); rs.pipe(res) });
|
||||
rs.on('error', function(err){ res.end(404+'') });
|
||||
rs.on('end', function(){ console.STAT && console.STAT(S, +new Date - S, 'serve file end') });
|
||||
|
3
sea.js
3
sea.js
@ -19,8 +19,7 @@
|
||||
// IT IS IMPLEMENTED IN A POLYFILL/SHIM APPROACH.
|
||||
// THIS IS AN EARLY ALPHA!
|
||||
|
||||
if(typeof self !== "undefined"){ module.window = self } // should be safe for at least browser/worker/nodejs, need to check other envs like RN etc.
|
||||
if(typeof window !== "undefined"){ module.window = window }
|
||||
module.window = (typeof globalThis !== "undefined" && typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined") ? globalThis : (typeof window !== "undefined" ? window : undefined);
|
||||
|
||||
var tmp = module.window || module, u;
|
||||
var SEA = tmp.SEA || {};
|
||||
|
@ -9,7 +9,7 @@
|
||||
opt = opt || {};
|
||||
const combo = key + (salt || shim.random(8)).toString('utf8'); // new
|
||||
const hash = shim.Buffer.from(await sha256hash(combo), 'binary')
|
||||
|
||||
|
||||
const jwkKey = S.keyToJwk(hash)
|
||||
return await shim.subtle.importKey('jwk', jwkKey, {name:'AES-GCM'}, false, ['encrypt', 'decrypt'])
|
||||
}
|
||||
|
@ -11,13 +11,13 @@
|
||||
var retries = typeof opt.retries === 'number' ? opt.retries : 9;
|
||||
|
||||
var gun = this, cat = (gun._), root = gun.back(-1);
|
||||
|
||||
|
||||
if(cat.ing){
|
||||
(cb || noop)({err: Gun.log("User is already being created or authenticated!"), wait: true});
|
||||
return gun;
|
||||
}
|
||||
cat.ing = true;
|
||||
|
||||
|
||||
var act = {}, u;
|
||||
act.a = function(data){
|
||||
if(!data){ return act.b() }
|
||||
|
@ -9,7 +9,7 @@
|
||||
var pass = pair && (pair.pub || pair.epub) ? pair : alias && typeof args[1] === 'string' ? args[1] : null;
|
||||
var cb = args.filter(arg => typeof arg === 'function')[0] || null; // cb now can stand anywhere, after alias/pass or pair
|
||||
var opt = args && args.length > 1 && typeof args[args.length-1] === 'object' ? args[args.length-1] : {}; // opt is always the last parameter which typeof === 'object' and stands after cb
|
||||
|
||||
|
||||
var gun = this, cat = (gun._), root = gun.back(-1);
|
||||
cb = cb || noop;
|
||||
opt = opt || {};
|
||||
|
11
sea/index.js
11
sea/index.js
@ -50,7 +50,7 @@
|
||||
return; // omit!
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if('~@' === soul){ // special case for shared system data, the list of aliases.
|
||||
check.alias(eve, msg, val, key, soul, at, no); return;
|
||||
}
|
||||
@ -130,7 +130,7 @@
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
if ('pub' === key && '~' + pub === soul) {
|
||||
if (val === pub) return eve.to.next(msg) // the account MUST match `pub` property that equals the ID of the public key.
|
||||
return no("Account not same!")
|
||||
@ -142,7 +142,7 @@
|
||||
if (u === data) return no(SEA.err || 'Signature fail.')
|
||||
msg.put[':'] = {':': tmp = SEA.opt.unpack(data.m), '~': data.s}
|
||||
msg.put['='] = tmp
|
||||
|
||||
|
||||
// if writing to own graph, just allow it
|
||||
if (pub === user.is.pub) {
|
||||
if (tmp = link_is(val)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1
|
||||
@ -153,7 +153,7 @@
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
// if writing to other's graph, check if cert exists then try to inject cert into put, also inject self pub so that everyone can verify the put
|
||||
if (pub !== user.is.pub && ((msg._.msg || {}).opt || {}).cert) {
|
||||
const cert = await S.parse(msg._.msg.opt.cert)
|
||||
@ -180,7 +180,7 @@
|
||||
data = SEA.opt.unpack(data);
|
||||
if (u === data) return no("Unverified data.") // make sure the signature matches the account it claims to be on. // reject any updates that are signed with a mismatched account.
|
||||
if ((tmp = link_is(data)) && pub === SEA.opt.pub(tmp)) (at.sea.own[tmp] = at.sea.own[tmp] || {})[pub] = 1
|
||||
|
||||
|
||||
// check if cert ('+') and putter's pub ('*') exist
|
||||
if (raw['+'] && raw['+']['m'] && raw['+']['s'] && raw['*'])
|
||||
// now verify certificate
|
||||
@ -250,6 +250,5 @@
|
||||
SEA.opt.shuffle_attack = 1546329600000; // Jan 1, 2019
|
||||
var fl = Math.floor; // TODO: Still need to fix inconsistent state issue.
|
||||
// TODO: Potential bug? If pub/priv key starts with `-`? IDK how possible.
|
||||
|
||||
|
||||
}());
|
@ -1,4 +1,5 @@
|
||||
;(function(){
|
||||
|
||||
var SEA = require('./root');
|
||||
var shim = require('./shim');
|
||||
|
||||
@ -57,4 +58,5 @@
|
||||
}});
|
||||
|
||||
module.exports = SEA.pair;
|
||||
}());
|
||||
|
||||
}());
|
@ -5,8 +5,7 @@
|
||||
// IT IS IMPLEMENTED IN A POLYFILL/SHIM APPROACH.
|
||||
// THIS IS AN EARLY ALPHA!
|
||||
|
||||
if(typeof self !== "undefined"){ module.window = self } // should be safe for at least browser/worker/nodejs, need to check other envs like RN etc.
|
||||
if(typeof window !== "undefined"){ module.window = window }
|
||||
module.window = (typeof globalThis !== "undefined" && typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined") ? globalThis : (typeof window !== "undefined" ? window : undefined);
|
||||
|
||||
var tmp = module.window || module, u;
|
||||
var SEA = tmp.SEA || {};
|
||||
@ -16,4 +15,4 @@
|
||||
try{ if(u+'' !== typeof MODULE){ MODULE.exports = SEA } }catch(e){}
|
||||
module.exports = SEA;
|
||||
|
||||
}());
|
||||
}());
|
||||
|
@ -19,7 +19,7 @@
|
||||
if(d){ jwk.d = d }
|
||||
return jwk;
|
||||
};
|
||||
|
||||
|
||||
s.keyToJwk = function(keyBytes) {
|
||||
const keyB64 = keyBytes.toString('base64');
|
||||
const k = keyB64.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '');
|
||||
|
@ -77,6 +77,5 @@
|
||||
return r;
|
||||
}
|
||||
SEA.opt.fallback = 2;
|
||||
|
||||
|
||||
}());
|
@ -83,6 +83,7 @@ function list(each){ each = each || function(x){return x}
|
||||
}
|
||||
|
||||
function set(word, is){
|
||||
// TODO: Perf on random write is decent, but short keys or seq seems significantly slower.
|
||||
var b = this, has = b.all[word];
|
||||
if(has){ return b(word, is) } // updates to in-memory items will always match exactly.
|
||||
var page = b.page(word=''+word), tmp; // before we assume this is an insert tho, we need to check
|
||||
@ -103,21 +104,22 @@ function set(word, is){
|
||||
|
||||
function split(p, b){ // TODO: use closest hash instead of half.
|
||||
//console.time();
|
||||
//var S = performance.now();
|
||||
var L = sort(p), l = L.length, i = l/2 >> 0, j = i, half = L[j], tmp;
|
||||
//console.timeEnd();
|
||||
var next = {first: half.substring(), size: 0, substring: sub, toString: to, book: b, get: b, read: list}, f = next.from = [];
|
||||
//console.time();
|
||||
while(tmp = L[i++]){
|
||||
f.push(tmp);
|
||||
next.size += (tmp.is||'').length||1;
|
||||
tmp.page = next;
|
||||
}
|
||||
//console.timeEnd(); console.time();
|
||||
p.from = p.from.slice(0, j);
|
||||
p.size -= next.size;
|
||||
b.list.splice(spot(next.first, b.list)+1, 0, next); // TODO: BUG! Make sure next.first is decoded text. // TODO: BUG! spot may need parse too?
|
||||
//console.timeEnd();
|
||||
if(b.split){ b.split(next, p) }
|
||||
//console.log(S = (performance.now() - S), 'split');
|
||||
//console.BIG = console.BIG > S? console.BIG : S;
|
||||
}
|
||||
|
||||
function slot(t){ return heal((t=t||'').substring(1, t.length-1).split(t[0]), t[0]) } B.slot = slot; // TODO: check first=last & pass `s`.
|
||||
|
@ -76,10 +76,10 @@ function Mesh(root){
|
||||
if((tmp = msg['><']) && 'string' == typeof tmp){ tmp.slice(0,99).split(',').forEach(function(k){ this[k] = 1 }, (msg._).yo = {}) } // Peers already sent to, do not resend.
|
||||
// DAM ^
|
||||
if(tmp = msg.dam){
|
||||
(dup_track(id)||{}).via = peer;
|
||||
if(tmp = mesh.hear[tmp]){
|
||||
tmp(msg, peer, root);
|
||||
}
|
||||
dup_track(id);
|
||||
return;
|
||||
}
|
||||
if(tmp = msg.ok){ msg._.near = tmp['/'] }
|
||||
|
@ -300,7 +300,7 @@ var obj_each = function(o,f){ Object.keys(o).forEach(f,o) }, text_rand = String.
|
||||
Gun.log = function(){ return (!Gun.log.off && C.log.apply(C, arguments)), [].slice.call(arguments).join(' ') };
|
||||
Gun.log.once = function(w,s,o){ return (o = Gun.log.once)[w] = o[w] || 0, o[w]++ || Gun.log(s) };
|
||||
|
||||
if(typeof window !== "undefined"){ (window.GUN = window.Gun = Gun).window = window }
|
||||
((typeof globalThis !== "undefined" && typeof window === "undefined" && typeof WorkerGlobalScope !== "undefined") ? ((globalThis.GUN = globalThis.Gun = Gun).window = globalThis) : (typeof window !== "undefined" ? ((window.GUN = window.Gun = Gun).window = window) : undefined));
|
||||
try{ if(typeof MODULE !== "undefined"){ MODULE.exports = Gun } }catch(e){}
|
||||
module.exports = Gun;
|
||||
|
||||
|
@ -19,10 +19,10 @@ Gun.on('opt', function(root){
|
||||
|
||||
var mesh = opt.mesh = opt.mesh || Gun.Mesh(root);
|
||||
|
||||
var wire = mesh.wire || opt.wire;
|
||||
var wired = mesh.wire || opt.wire;
|
||||
mesh.wire = opt.wire = open;
|
||||
function open(peer){ try{
|
||||
if(!peer || !peer.url){ return wire && wire(peer) }
|
||||
if(!peer || !peer.url){ return wired && wired(peer) }
|
||||
var url = peer.url.replace(/^http/, 'ws');
|
||||
var wire = peer.wire = new opt.WebSocket(url);
|
||||
wire.onclose = function(){
|
||||
|
Loading…
x
Reference in New Issue
Block a user