diff --git a/packages/util-crypto/src/schnorrkel/ready.spec.ts b/packages/util-crypto/src/schnorrkel/ready.spec.ts new file mode 100644 index 000000000..05761db7d --- /dev/null +++ b/packages/util-crypto/src/schnorrkel/ready.spec.ts @@ -0,0 +1,25 @@ +// Copyright 2017-2019 @polkadot/util-crypto authors & contributors +// This software may be modified and distributed under the terms +// of the Apache-2.0 license. See the LICENSE file for details. + +describe('ready', () => { + let globalWA: typeof WebAssembly; + + beforeEach(() => { + globalWA = (global as any).WebAssembly; + (global as any).WebAssembly = null; + }); + + afterEach(() => { + (global as any).WebAssembly = globalWA; + }); + + it('returns false when Webassembly is not available', async () => { + (global as any).WebAssembly = null; + + const schnorrkelWaitReady = require('./ready').default; + const isReady = await schnorrkelWaitReady(); + + expect(isReady).toBe(false); + }); +}); diff --git a/packages/util-crypto/src/schnorrkel/schnorrkel-js/schnorrkel_js.js b/packages/util-crypto/src/schnorrkel/schnorrkel-js/schnorrkel_js.js index adc1b26b9..087ee0d43 100644 --- a/packages/util-crypto/src/schnorrkel/schnorrkel-js/schnorrkel_js.js +++ b/packages/util-crypto/src/schnorrkel/schnorrkel-js/schnorrkel_js.js @@ -255,9 +255,9 @@ wasmImports.__wbindgen_jsval_eq = function(a, b) { const createPromise = require('./schnorrkel_js_bg'); -const wasmPromise = createPromise(wasmImports); +const wasmPromise = createPromise(wasmImports).catch(() => null); module.exports.isReady = function () { return !!wasm; } module.exports.waitReady = function () { return wasmPromise.then(() => !!wasm); } -wasmPromise.then((_wasm) => { wasm = _wasm }).catch(() => {}); +wasmPromise.then((_wasm) => { wasm = _wasm }); diff --git a/packages/util-crypto/src/schnorrkel/schnorrkel-js/schnorrkel_js_bg.js b/packages/util-crypto/src/schnorrkel/schnorrkel-js/schnorrkel_js_bg.js index a64b0fac4..cc76a7d32 100644 --- a/packages/util-crypto/src/schnorrkel/schnorrkel-js/schnorrkel_js_bg.js +++ b/packages/util-crypto/src/schnorrkel/schnorrkel-js/schnorrkel_js_bg.js @@ -6,7 +6,15 @@ module.exports = async function createExportPromise (wasmImports) { './schnorrkel_js': wasmImports }; - return WebAssembly - .instantiate(bytes, imports) - .then((wasm) => wasm.instance.exports); + if (!WebAssembly) { + return null; + } + + try { + const { instance } = await WebAssembly.instantiate(bytes, imports); + + return instance.exports; + } catch (error) { + return null; + } }