idmint 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +4 -4
- package/dist/index.js +27 -6
- package/package.json +7 -1
package/dist/index.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Generate a
|
|
2
|
+
* Generate a secure unique ID
|
|
3
3
|
*/
|
|
4
4
|
export declare function generateId(size?: number): string;
|
|
5
5
|
/**
|
|
6
|
-
* Generate ID with prefix
|
|
6
|
+
* Generate ID with prefix
|
|
7
7
|
*/
|
|
8
8
|
export declare function generateIdWithPrefix(prefix: string, size?: number): string;
|
|
9
9
|
/**
|
|
10
|
-
* Time-sortable ID
|
|
10
|
+
* Time-based sortable ID
|
|
11
11
|
*/
|
|
12
12
|
export declare function timeBasedId(size?: number): string;
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
14
|
+
* Preset generators
|
|
15
15
|
*/
|
|
16
16
|
export declare const trueid: {
|
|
17
17
|
short: () => string;
|
package/dist/index.js
CHANGED
|
@@ -1,17 +1,32 @@
|
|
|
1
|
-
import { randomBytes } from "crypto";
|
|
2
1
|
/**
|
|
3
2
|
* URL-safe alphabet (64 chars)
|
|
4
3
|
* Each character = 6 bits of entropy
|
|
5
4
|
*/
|
|
6
5
|
const ALPHABET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-_";
|
|
7
6
|
/**
|
|
8
|
-
*
|
|
7
|
+
* Cross-platform secure random bytes
|
|
8
|
+
* - Browser: crypto.getRandomValues
|
|
9
|
+
* - Node.js: require("crypto").randomBytes
|
|
10
|
+
*/
|
|
11
|
+
function getRandomBytes(size) {
|
|
12
|
+
// Browser & modern runtimes
|
|
13
|
+
if (typeof globalThis.crypto !== "undefined" &&
|
|
14
|
+
globalThis.crypto.getRandomValues) {
|
|
15
|
+
return globalThis.crypto.getRandomValues(new Uint8Array(size));
|
|
16
|
+
}
|
|
17
|
+
// Node.js fallback
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
19
|
+
const { randomBytes } = require("crypto");
|
|
20
|
+
return randomBytes(size);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate a secure unique ID
|
|
9
24
|
*/
|
|
10
25
|
export function generateId(size = 21) {
|
|
11
26
|
if (!Number.isInteger(size) || size < 4 || size > 64) {
|
|
12
27
|
throw new Error("size must be an integer between 4 and 64");
|
|
13
28
|
}
|
|
14
|
-
const bytes =
|
|
29
|
+
const bytes = getRandomBytes(size);
|
|
15
30
|
let id = "";
|
|
16
31
|
for (let i = 0; i < size; i++) {
|
|
17
32
|
id += ALPHABET[bytes[i] & 63];
|
|
@@ -19,21 +34,27 @@ export function generateId(size = 21) {
|
|
|
19
34
|
return id;
|
|
20
35
|
}
|
|
21
36
|
/**
|
|
22
|
-
* Generate ID with prefix
|
|
37
|
+
* Generate ID with prefix
|
|
23
38
|
*/
|
|
24
39
|
export function generateIdWithPrefix(prefix, size = 21) {
|
|
40
|
+
if (!prefix) {
|
|
41
|
+
throw new Error("prefix is required");
|
|
42
|
+
}
|
|
25
43
|
return `${prefix}_${generateId(size)}`;
|
|
26
44
|
}
|
|
27
45
|
/**
|
|
28
|
-
* Time-sortable ID
|
|
46
|
+
* Time-based sortable ID
|
|
29
47
|
*/
|
|
30
48
|
export function timeBasedId(size = 21) {
|
|
31
49
|
const time = Date.now().toString(36);
|
|
50
|
+
if (size <= time.length) {
|
|
51
|
+
throw new Error("size too small for time-based ID");
|
|
52
|
+
}
|
|
32
53
|
const randomPart = generateId(size - time.length);
|
|
33
54
|
return time + randomPart;
|
|
34
55
|
}
|
|
35
56
|
/**
|
|
36
|
-
*
|
|
57
|
+
* Preset generators
|
|
37
58
|
*/
|
|
38
59
|
export const trueid = {
|
|
39
60
|
short: () => generateId(8),
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "idmint",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Enterprise-grade, collision-resistant unique ID generator",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -12,6 +12,12 @@
|
|
|
12
12
|
"build": "tsc",
|
|
13
13
|
"dev": "ts-node src/index.ts"
|
|
14
14
|
},
|
|
15
|
+
"exports": {
|
|
16
|
+
".": {
|
|
17
|
+
"import": "./dist/index.js",
|
|
18
|
+
"types": "./dist/index.d.ts"
|
|
19
|
+
}
|
|
20
|
+
},
|
|
15
21
|
"keywords": [
|
|
16
22
|
"unique-id",
|
|
17
23
|
"uid",
|