UNPKG

@react-native-module/get-random-values

Version:
49 lines (46 loc) 2.01 kB
import { Environment } from '../node_modules/@react-native-module/utility/lib/es/index.js'; function getRandomBase64(byteLength) { // For running on Nodejs - testing, console etc. if (Environment !== 'NativeMobile') { try { if (Environment === 'Browser') { if (Buffer && globalThis.crypto && globalThis.crypto.getRandomValues) { return Buffer.from(globalThis.crypto.getRandomValues(new Uint8Array(byteLength))).toString('base64'); } } else if (Environment === 'NodeJs') { // in react-native got error directly // Error: Unable to resolve module crypto from ${path}: crypto could not be found within the project or in these directories: // so, set value to package.json "react-native": { "crypto": "react-native "} // eslint-disable-next-line @typescript-eslint/no-var-requires const nodeCryptoModule = require('crypto'); return nodeCryptoModule.randomBytes(byteLength).toString('base64'); } } catch (error) { // do nothing } } try { // eslint-disable-next-line @typescript-eslint/no-var-requires const { NativeModules } = require('react-native'); if (NativeModules.RNGetRandomValues) { return NativeModules.RNGetRandomValues.getRandomBase64(byteLength); } else if (NativeModules.ExpoRandom) { // Expo SDK 41-44 return NativeModules.ExpoRandom.getRandomBase64String(byteLength); } else if (global.ExpoModules) { // Expo SDK 45+ return global.ExpoModules.ExpoRandom.getRandomBase64String(byteLength); } else { throw Error('Native module not found'); } } catch (error) { throw Error('Native module not found'); } } export { getRandomBase64 };