From f27cb7e3bf26862d8faf66c18b8559fa5d89d4c5 Mon Sep 17 00:00:00 2001 From: undefined Date: Sun, 23 Aug 2026 05:17:30 +0000 Subject: [PATCH] utils: use rand from webcrypto --- framework/utils/lib/common.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/framework/utils/lib/common.ts b/framework/utils/lib/common.ts index a5e8af46e..a889e506d 100644 --- a/framework/utils/lib/common.ts +++ b/framework/utils/lib/common.ts @@ -1,5 +1,3 @@ -import { randomInt } from 'node:crypto'; - declare global { interface String { format: (...args: Array) => string; @@ -13,9 +11,21 @@ declare global { const defaultDict = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'; +function randomInt(min: number, max: number) { + const range = max - min + 1; + const maxValid = Math.floor(4294967296 / range) * range; + const array = new Uint32Array(1); + let value: number; + do { + crypto.getRandomValues(array); + value = array[0]; + } while (value >= maxValid); + return min + (value % range); +} + export function randomstring(digit = 32, dict = defaultDict) { let str = ''; - for (let i = 1; i <= digit; i++) str += dict[randomInt(dict.length)]; + for (let i = 1; i <= digit; i++) str += dict[randomInt(0, dict.length - 1)]; return str; }