update sea's init code from chat discussion

This commit is contained in:
Brock Atkinson 2018-01-23 17:54:11 +08:00
parent 14497ac7ad
commit 537f2ed23d

23
sea.js
View File

@ -17,19 +17,16 @@
let subtle
let subtleossl
let TextEncoder
let TextDecoder
let getRandomBytes
let sessionStorage
let localStorage
let indexedDB
let crypto
let funcsSetter
if (typeof window !== 'undefined') {
const wc = window.crypto || window.msCrypto // STD or M$
subtle = wc.subtle || wc.webkitSubtle // STD or iSafari
getRandomBytes = (len) => Buffer.from(wc.getRandomValues(new Uint8Array(Buffer.alloc(len))))
({ TextEncoder, TextDecoder, sessionStorage, localStorage }) = window
funcsSetter = () => window
indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB
|| window.msIndexedDB || window.shimIndexedDB
} else {
@ -39,18 +36,20 @@
subtleossl = webcrypto.subtle
subtle = require('@trust/webcrypto').subtle // All but ECDH
getRandomBytes = (len) => Buffer.from(crypto.randomBytes(len))
const textEncoding = require('text-encoding')
TextEncoder = textEncoding.TextEncoder
TextDecoder = textEncoding.TextDecoder
// Let's have Storage for NodeJS / testing
sessionStorage = new require('node-localstorage').LocalStorage('.sessionStorage')
localStorage = new require('node-localstorage').LocalStorage('.localStorage')
funcsSetter = () => {
const { TextEncoder, TextDecoder } = require('text-encoding')
// Let's have Storage for NodeJS / testing
const sessionStorage = new require('node-localstorage').LocalStorage('.sessionStorage')
const localStorage = new require('node-localstorage').LocalStorage('.localStorage')
return { TextEncoder, TextDecoder, sessionStorage, localStorage }
}
indexedDB = require('fake-indexeddb')
if (typeof global !== 'undefined') {
global.sessionStorage = sessionStorage
global.localStorage = localStorage
}
}
const { TextEncoder, TextDecoder, sessionStorage, localStorage } = funcsSetter()
// This is Array extended to have .toString(['utf8'|'hex'|'base64'])
function SeaArray() {}
@ -1333,4 +1332,4 @@ Object.assign(User, {
try {
module.exports = SEA
} catch (e) {} //eslint-disable-line no-empty
}());
}());