@korekoi/react-native-get-random-values
Version:
⚡️ A fast implementation of `crypto.getRandomValues` for React Native
33 lines (30 loc) • 1.32 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getRandomValues = exports.TypeMismatchError = exports.QuotaExceededError = exports.MAX_BYTE_ARRAY_LENGTH = void 0;
var _reactNativeNitroModules = require("react-native-nitro-modules");
// 4byte
const MAX_BYTE_ARRAY_LENGTH = exports.MAX_BYTE_ARRAY_LENGTH = 65536;
const sodium = _reactNativeNitroModules.NitroModules.createHybridObject("Sodium");
// port correct types as the browser/node implementation https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues#exceptions
class TypeMismatchError extends Error {}
exports.TypeMismatchError = TypeMismatchError;
class QuotaExceededError extends Error {}
exports.QuotaExceededError = QuotaExceededError;
const getRandomValues = array => {
if (array.byteLength > MAX_BYTE_ARRAY_LENGTH) {
throw new QuotaExceededError("ArrayBuffer length exceeds maximum length of 65536 bytes.");
}
sodium.getRandomValues(array.buffer);
return array;
};
exports.getRandomValues = getRandomValues;
if (typeof global.crypto !== "object") {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
global.crypto = {};
}
if (typeof global.crypto.getRandomValues === "undefined") {
global.crypto.getRandomValues = getRandomValues;
}
//# sourceMappingURL=index.js.map