263b94428a
Change the interface again, hopefully this time a bit more normal. Now we wrap the emscripten module completely and just expose the high level objects. The olm library export is now imported as normal (ie. returns a module rather than a function returning a module) but has an `init` method which *must* be called. This returns a promise which resolves when the module is ready. It also rejects if the module failed to set up, unlike before (and unlike the promise-not-a-promise that emscripten returns). Generally catch failures to init the module.
39 lines
1.3 KiB
JavaScript
39 lines
1.3 KiB
JavaScript
var get_random_values;
|
|
|
|
if (typeof(window) !== 'undefined') {
|
|
// We're in a browser (directly, via browserify, or via webpack).
|
|
get_random_values = function(buf) {
|
|
window.crypto.getRandomValues(buf);
|
|
};
|
|
} else if (module["exports"]) {
|
|
// We're running in node.
|
|
var nodeCrypto = require("crypto");
|
|
get_random_values = function(buf) {
|
|
// [''] syntax needed here rather than '.' to prevent
|
|
// closure compiler from mangling the import(!)
|
|
var bytes = nodeCrypto['randomBytes'](buf.length);
|
|
buf.set(bytes);
|
|
};
|
|
process = global["process"];
|
|
} else {
|
|
throw new Error("Cannot find global to attach library to");
|
|
}
|
|
|
|
/* applications should define OLM_OPTIONS in the environment to override
|
|
* emscripten module settings
|
|
*/
|
|
if (typeof(OLM_OPTIONS) !== 'undefined') {
|
|
for (var olm_option_key in OLM_OPTIONS) {
|
|
if (OLM_OPTIONS.hasOwnProperty(olm_option_key)) {
|
|
Module[olm_option_key] = OLM_OPTIONS[olm_option_key];
|
|
}
|
|
}
|
|
}
|
|
|
|
/* The 'length' argument to Pointer_stringify doesn't work if the input
|
|
* includes characters >= 128, which makes Pointer_stringify unreliable. We
|
|
* could use it on strings which are known to be ascii, but that seems
|
|
* dangerous. Instead we add a NULL character to all of our strings and just
|
|
* use UTF8ToString.
|
|
*/
|
|
var NULL_BYTE_PADDING_LENGTH = 1;
|