SEA.recall and .alive for async so User done

This commit is contained in:
mhelander 2018-02-03 13:05:51 +02:00
parent 2902b3df97
commit 351623a487
2 changed files with 19 additions and 31 deletions

48
sea.js
View File

@ -547,7 +547,7 @@
}).filter((props) => !!props)) }).filter((props) => !!props))
if (!key) { if (!key) {
throw new { err: err || 'Public key does not exist!' } throw { err: err || 'Public key does not exist!' }
} }
// now we have AES decrypted the private key, // now we have AES decrypted the private key,
@ -760,31 +760,21 @@
}, },
// If authentication is to be remembered over reloads or browser closing, // If authentication is to be remembered over reloads or browser closing,
// set validity time in minutes. // set validity time in minutes.
recall(setvalidity, cb, options) { async recall(setvalidity, options) {
const root = this.back(-1) const root = this.back(-1)
let validity let validity
let callback
let opts let opts
if (!options && typeof cb !== 'function' && !Gun.val.is(cb)) { if (!Gun.val.is(setvalidity)) {
opts = cb opts = setvalidity
validity = _initial_authsettings.validity
} else { } else {
callback = cb opts = options
validity = setvalidity * 60 // minutes to seconds
} }
if (!callback) { // TODO: for some reasong authrecall doesn't work with await here...
if (typeof setvalidity === 'function') { return await new Promise((resolve, reject) => {
callback = setvalidity
validity = _initial_authsettings.validity
} else if (!Gun.val.is(setvalidity)) {
opts = setvalidity
validity = _initial_authsettings.validity
} else {
validity = setvalidity * 60 // minutes to seconds
}
}
var doIt = function(resolve, reject){
// opts = { hook: function({ iat, exp, alias, proof }) } // opts = { hook: function({ iat, exp, alias, proof }) }
// iat == Date.now() when issued, exp == seconds to expire from iat // iat == Date.now() when issued, exp == seconds to expire from iat
// How this works: // How this works:
@ -801,21 +791,19 @@
Gun.log(err) Gun.log(err)
resolve({ err: (e && e.err) || err }) resolve({ err: (e && e.err) || err })
}) })
} })
if (callback) { doIt(callback, callback) } else { return new Promise(doIt) }
}, },
alive(cb) { async alive() {
const root = this.back(-1) const root = this.back(-1)
const doIt = (resolve, reject) => { try {
// All is good. Should we do something more with actual recalled data? // All is good. Should we do something more with actual recalled data?
authrecall(root).then(() => resolve(root._.user._)) await authrecall(root)
.catch((e) => { return root._.user._
const err = 'No session!' } catch (e) {
Gun.log(err) const err = 'No session!'
reject({ err }) Gun.log(err)
}) throw { err }
} }
if (cb) { doIt(cb, cb) } else { return new Promise(doIt) }
} }
}) })

View File

@ -914,7 +914,7 @@ Gun().user && describe('Gun', function(){
expect(props.err).to.not.be(undefined); expect(props.err).to.not.be(undefined);
expect(props.err).to.not.be(''); expect(props.err).to.not.be('');
expect(props.err.toLowerCase() expect(props.err.toLowerCase()
.indexOf('no session')).not.to.be(-1); .indexOf('failed to decrypt')).not.to.be(-1);
done(); done();
}).catch(done); }).catch(done);
}).catch(done); }).catch(done);