UNPKG

@datadayrepos/js-id-web

Version:

Utils for generating identifiers in javascript browser environment. Using web crypto engine for random number generation.

45 lines (44 loc) 1.98 kB
import { randInt1 } from '../crypto/index.js'; export function randomString(keys = 12) { let randomText = ''; const charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890&$#!§_-+?'; const seed = Date.now() % charset.length; for (let i = 0; i < keys; i++) { const randomIndex = (randInt1() + seed) % charset.length; randomText += charset.charAt(randomIndex); } return { error: null, result: randomText }; } export async function generateSecureRandomPin(length = 6) { if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) { const randomBytes = new Uint8Array(length); window.crypto.getRandomValues(randomBytes); const pin = Array.from(randomBytes, byte => (byte % 10).toString()).join(''); return { error: null, result: pin }; } return { error: 'Secure random generation is not supported in this environment', result: null }; } export async function generateSecureRandomBase64() { if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) { const randomBytes = new Uint8Array(32); window.crypto.getRandomValues(randomBytes); const base64String = btoa(String.fromCharCode(...randomBytes)); return { error: null, result: base64String }; } return { error: 'Secure random generation is not supported in this environment', result: null }; } export function randomCrockford(keys = 12) { let randomText = ''; const charset = '0123456789abcdefghjkmnpqrstvwxyz'; const seed = Date.now() % charset.length; for (let i = 0; i < keys; i++) { const randomIndex = (randInt1() + seed) % charset.length; randomText += charset.charAt(randomIndex); } return { error: null, result: randomText }; } export function getRandomInt(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min) + min); }