mirror of
https://github.com/fluxerapp/fluxer
synced 2026-10-19 05:55:34 +09:00
refactor(api): tidy the api and shared packages (#2733)
This commit is contained in:
1 parent
580401d2dc
commit
5afbf67a70
333 files changed
+10180
-7910
No files matched your search
@@ -1,12 +1,14 @@
|
||||
// SPDX-License-Identifier: AGPL-3.0-or-later
|
||||
|
||||
import assert from 'node:assert/strict';
|
||||
import crypto from 'node:crypto';
|
||||
|
||||
const RANDOM_STRING_ALPHABET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
|
||||
const RANDOM_DIGIT_ALPHABET = '0123456789';
|
||||
|
||||
export function randomNumericCode(length: number): string {
|
||||
const alphabetLength = RANDOM_DIGIT_ALPHABET.length;
|
||||
function randomFromAlphabet(length: number, alphabet: string): string {
|
||||
assert(Number.isSafeInteger(length) && length >= 0, 'Random string length must be a nonnegative safe integer');
|
||||
const alphabetLength = alphabet.length;
|
||||
const rangeSize = 256 - (256 % alphabetLength);
|
||||
const randomBytes = new Uint8Array(length * 2);
|
||||
crypto.getRandomValues(randomBytes);
|
||||
@@ -19,28 +21,15 @@ export function randomNumericCode(length: number): string {
|
||||
}
|
||||
const randomByte = randomBytes[byteIndex++]!;
|
||||
if (randomByte >= rangeSize) continue;
|
||||
result += RANDOM_DIGIT_ALPHABET.charAt(randomByte % alphabetLength);
|
||||
result += alphabet.charAt(randomByte % alphabetLength);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
export function randomString(length: number) {
|
||||
const alphabetLength = RANDOM_STRING_ALPHABET.length;
|
||||
const rangeSize = 256 - (256 % alphabetLength);
|
||||
const randomBytes = new Uint8Array(length * 2);
|
||||
crypto.getRandomValues(randomBytes);
|
||||
let result = '';
|
||||
let byteIndex = 0;
|
||||
while (result.length < length) {
|
||||
if (byteIndex >= randomBytes.length) {
|
||||
crypto.getRandomValues(randomBytes);
|
||||
byteIndex = 0;
|
||||
}
|
||||
const randomByte = randomBytes[byteIndex++];
|
||||
if (randomByte >= rangeSize) {
|
||||
continue;
|
||||
}
|
||||
result += RANDOM_STRING_ALPHABET.charAt(randomByte % alphabetLength);
|
||||
}
|
||||
return result;
|
||||
export function randomNumericCode(length: number): string {
|
||||
return randomFromAlphabet(length, RANDOM_DIGIT_ALPHABET);
|
||||
}
|
||||
|
||||
export function randomString(length: number): string {
|
||||
return randomFromAlphabet(length, RANDOM_STRING_ALPHABET);
|
||||
}
|
||||
Reference in new issue
Block a user