openclaw/src/infra/secure-random.ts

25 lines
825 B
TypeScript

import { randomBytes, randomInt, randomUUID } from "node:crypto";
export function generateSecureUuid(): string {
return randomUUID();
}
export function generateSecureToken(bytes = 16): string {
return randomBytes(bytes).toString("base64url");
}
export function generateSecureHex(bytes = 16): string {
return randomBytes(bytes).toString("hex");
}
/** Returns a cryptographically secure fraction in the range [0, 1). */
export function generateSecureFraction(): number {
return randomBytes(4).readUInt32BE(0) / 0x1_0000_0000;
}
export function generateSecureInt(maxExclusive: number): number;
export function generateSecureInt(minInclusive: number, maxExclusive: number): number;
export function generateSecureInt(a: number, b?: number): number {
return typeof b === "number" ? randomInt(a, b) : randomInt(a);
}