s3db.js 18.0.11-next.1534f717 → 18.0.11-next.47047b5d
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/clients/recker-http-handler.js +56 -8
- package/dist/clients/recker-http-handler.js.map +1 -1
- package/dist/concerns/id/alphabets.js +150 -0
- package/dist/concerns/id/alphabets.js.map +1 -0
- package/dist/concerns/id/entropy.js +243 -0
- package/dist/concerns/id/entropy.js.map +1 -0
- package/dist/concerns/id/generators/nanoid.js +74 -0
- package/dist/concerns/id/generators/nanoid.js.map +1 -0
- package/dist/concerns/id/generators/sid.js +73 -0
- package/dist/concerns/id/generators/sid.js.map +1 -0
- package/dist/concerns/id/generators/ulid.js +208 -0
- package/dist/concerns/id/generators/ulid.js.map +1 -0
- package/dist/concerns/id/generators/uuid-v7.js +150 -0
- package/dist/concerns/id/generators/uuid-v7.js.map +1 -0
- package/dist/concerns/id/index.js +74 -0
- package/dist/concerns/id/index.js.map +1 -0
- package/dist/concerns/plugin-storage.js +114 -0
- package/dist/concerns/plugin-storage.js.map +1 -1
- package/dist/concerns/s3-errors.js +72 -0
- package/dist/concerns/s3-errors.js.map +1 -0
- package/dist/concerns/s3-key.js +54 -0
- package/dist/concerns/s3-key.js.map +1 -0
- package/dist/concerns/safe-merge.js +47 -0
- package/dist/concerns/safe-merge.js.map +1 -0
- package/dist/core/resource-config-validator.js +12 -2
- package/dist/core/resource-config-validator.js.map +1 -1
- package/dist/core/resource-partitions.class.js +12 -1
- package/dist/core/resource-partitions.class.js.map +1 -1
- package/dist/core/resource-persistence.class.js +41 -12
- package/dist/core/resource-persistence.class.js.map +1 -1
- package/dist/core/resource-query.class.js +21 -47
- package/dist/core/resource-query.class.js.map +1 -1
- package/dist/plugins/concerns/s3-mutex.class.js +155 -0
- package/dist/plugins/concerns/s3-mutex.class.js.map +1 -0
- package/dist/plugins/recon/stages/recker-asn-stage.js +279 -0
- package/dist/plugins/recon/stages/recker-asn-stage.js.map +1 -0
- package/dist/plugins/recon/stages/recker-dns-stage.js +227 -0
- package/dist/plugins/recon/stages/recker-dns-stage.js.map +1 -0
- package/dist/plugins/recon/stages/recker-scrape-stage.js +369 -0
- package/dist/plugins/recon/stages/recker-scrape-stage.js.map +1 -0
- package/dist/plugins/spider/recker-link-discoverer.js +544 -0
- package/dist/plugins/spider/recker-link-discoverer.js.map +1 -0
- package/dist/plugins/spider/recker-llms-validator.js +334 -0
- package/dist/plugins/spider/recker-llms-validator.js.map +1 -0
- package/dist/plugins/spider/recker-robots-validator.js +336 -0
- package/dist/plugins/spider/recker-robots-validator.js.map +1 -0
- package/dist/plugins/spider/recker-security-adapter.js +325 -0
- package/dist/plugins/spider/recker-security-adapter.js.map +1 -0
- package/dist/plugins/spider/recker-seo-adapter.js +399 -0
- package/dist/plugins/spider/recker-seo-adapter.js.map +1 -0
- package/dist/plugins/spider/recker-sitemap-validator.js +406 -0
- package/dist/plugins/spider/recker-sitemap-validator.js.map +1 -0
- package/dist/resource.class.js +2 -0
- package/dist/resource.class.js.map +1 -1
- package/dist/s3db.cjs +353 -71
- package/dist/s3db.cjs.map +1 -1
- package/dist/s3db.es.js +354 -72
- package/dist/s3db.es.js.map +1 -1
- package/dist/types/clients/recker-http-handler.d.ts +1 -0
- package/dist/types/clients/recker-http-handler.d.ts.map +1 -1
- package/dist/types/clients/types.d.ts +14 -0
- package/dist/types/clients/types.d.ts.map +1 -1
- package/dist/types/concerns/id/alphabets.d.ts +125 -0
- package/dist/types/concerns/id/alphabets.d.ts.map +1 -0
- package/dist/types/concerns/id/entropy.d.ts +84 -0
- package/dist/types/concerns/id/entropy.d.ts.map +1 -0
- package/dist/types/concerns/id/generators/nanoid.d.ts +46 -0
- package/dist/types/concerns/id/generators/nanoid.d.ts.map +1 -0
- package/dist/types/concerns/id/generators/sid.d.ts +45 -0
- package/dist/types/concerns/id/generators/sid.d.ts.map +1 -0
- package/dist/types/concerns/id/generators/ulid.d.ts +71 -0
- package/dist/types/concerns/id/generators/ulid.d.ts.map +1 -0
- package/dist/types/concerns/id/generators/uuid-v7.d.ts +60 -0
- package/dist/types/concerns/id/generators/uuid-v7.d.ts.map +1 -0
- package/dist/types/concerns/id/index.d.ts +51 -0
- package/dist/types/concerns/id/index.d.ts.map +1 -0
- package/dist/types/concerns/plugin-storage.d.ts +25 -0
- package/dist/types/concerns/plugin-storage.d.ts.map +1 -1
- package/dist/types/concerns/s3-errors.d.ts +20 -0
- package/dist/types/concerns/s3-errors.d.ts.map +1 -0
- package/dist/types/concerns/s3-key.d.ts +30 -0
- package/dist/types/concerns/s3-key.d.ts.map +1 -0
- package/dist/types/concerns/safe-merge.d.ts +22 -0
- package/dist/types/concerns/safe-merge.d.ts.map +1 -0
- package/dist/types/core/resource-config-validator.d.ts.map +1 -1
- package/dist/types/core/resource-partitions.class.d.ts.map +1 -1
- package/dist/types/core/resource-persistence.class.d.ts.map +1 -1
- package/dist/types/core/resource-query.class.d.ts.map +1 -1
- package/dist/types/plugins/concerns/s3-mutex.class.d.ts +30 -0
- package/dist/types/plugins/concerns/s3-mutex.class.d.ts.map +1 -0
- package/dist/types/plugins/recon/stages/recker-asn-stage.d.ts +90 -0
- package/dist/types/plugins/recon/stages/recker-asn-stage.d.ts.map +1 -0
- package/dist/types/plugins/recon/stages/recker-dns-stage.d.ts +125 -0
- package/dist/types/plugins/recon/stages/recker-dns-stage.d.ts.map +1 -0
- package/dist/types/plugins/recon/stages/recker-scrape-stage.d.ts +96 -0
- package/dist/types/plugins/recon/stages/recker-scrape-stage.d.ts.map +1 -0
- package/dist/types/plugins/spider/recker-link-discoverer.d.ts +54 -0
- package/dist/types/plugins/spider/recker-link-discoverer.d.ts.map +1 -0
- package/dist/types/plugins/spider/recker-llms-validator.d.ts +105 -0
- package/dist/types/plugins/spider/recker-llms-validator.d.ts.map +1 -0
- package/dist/types/plugins/spider/recker-robots-validator.d.ts +92 -0
- package/dist/types/plugins/spider/recker-robots-validator.d.ts.map +1 -0
- package/dist/types/plugins/spider/recker-security-adapter.d.ts +83 -0
- package/dist/types/plugins/spider/recker-security-adapter.d.ts.map +1 -0
- package/dist/types/plugins/spider/recker-seo-adapter.d.ts +187 -0
- package/dist/types/plugins/spider/recker-seo-adapter.d.ts.map +1 -0
- package/dist/types/plugins/spider/recker-sitemap-validator.d.ts +121 -0
- package/dist/types/plugins/spider/recker-sitemap-validator.d.ts.map +1 -0
- package/dist/types/resource.class.d.ts.map +1 -1
- package/mcp/prompts/index.ts +275 -0
- package/mcp/resources/index.ts +322 -0
- package/mcp/tools/plugins.ts +1137 -0
- package/mcp/tools/streams.ts +340 -0
- package/package.json +20 -21
- package/src/clients/recker-http-handler.ts +74 -8
- package/src/clients/types.ts +14 -0
- package/src/concerns/id/alphabets.ts +175 -0
- package/src/concerns/id/entropy.ts +286 -0
- package/src/concerns/id/generators/sid.ts +90 -0
- package/src/concerns/id/generators/ulid.ts +249 -0
- package/src/concerns/id/generators/uuid-v7.ts +179 -0
- package/src/concerns/id/index.ts +167 -0
- package/src/concerns/plugin-storage.ts +144 -0
- package/src/concerns/s3-errors.ts +97 -0
- package/src/concerns/s3-key.ts +62 -0
- package/src/concerns/safe-merge.ts +60 -0
- package/src/core/resource-config-validator.ts +9 -2
- package/src/core/resource-partitions.class.ts +14 -1
- package/src/core/resource-persistence.class.ts +47 -13
- package/src/core/resource-query.class.ts +21 -46
- package/src/plugins/concerns/s3-mutex.class.ts +228 -0
- package/src/plugins/recon/stages/recker-asn-stage.ts +385 -0
- package/src/plugins/recon/stages/recker-dns-stage.ts +360 -0
- package/src/plugins/recon/stages/recker-scrape-stage.ts +509 -0
- package/src/plugins/spider/recker-link-discoverer.ts +645 -0
- package/src/plugins/spider/recker-llms-validator.ts +500 -0
- package/src/plugins/spider/recker-robots-validator.ts +473 -0
- package/src/plugins/spider/recker-security-adapter.ts +489 -0
- package/src/plugins/spider/recker-seo-adapter.ts +605 -0
- package/src/plugins/spider/recker-sitemap-validator.ts +621 -0
- package/src/resource.class.ts +2 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createClient } from 'recker';
|
|
1
|
+
import { createClient, expandHTTP2Options, Http2Error, parseHttp2Error, createHttp2MetricsHooks, getGlobalHttp2Metrics, } from 'recker';
|
|
2
2
|
import { Readable } from 'node:stream';
|
|
3
3
|
class CircuitBreaker {
|
|
4
4
|
threshold;
|
|
@@ -98,6 +98,15 @@ function calculateRetryDelay(attempt, baseDelay, maxDelay, useJitter = true) {
|
|
|
98
98
|
}
|
|
99
99
|
function isRetryableError(error, statusCode) {
|
|
100
100
|
if (error) {
|
|
101
|
+
// Check for HTTP/2 specific errors first
|
|
102
|
+
const h2Error = parseHttp2Error(error);
|
|
103
|
+
if (h2Error) {
|
|
104
|
+
return h2Error.retriable;
|
|
105
|
+
}
|
|
106
|
+
// Check for native HTTP/2 errors
|
|
107
|
+
if (error instanceof Http2Error) {
|
|
108
|
+
return error.retriable;
|
|
109
|
+
}
|
|
101
110
|
const code = error.code;
|
|
102
111
|
if (code === 'ECONNRESET' || code === 'ETIMEDOUT' || code === 'ENOTFOUND' ||
|
|
103
112
|
code === 'ECONNREFUSED' || code === 'EPIPE' || code === 'UND_ERR_SOCKET' ||
|
|
@@ -114,6 +123,17 @@ function isRetryableError(error, statusCode) {
|
|
|
114
123
|
}
|
|
115
124
|
return false;
|
|
116
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Get additional retry delay for HTTP/2 errors like ENHANCE_YOUR_CALM
|
|
128
|
+
*/
|
|
129
|
+
function getHttp2RetryDelay(error) {
|
|
130
|
+
const h2Error = parseHttp2Error(error);
|
|
131
|
+
if (h2Error && h2Error.errorCode === 'ENHANCE_YOUR_CALM') {
|
|
132
|
+
// Server is rate limiting, wait longer (5-10 seconds)
|
|
133
|
+
return 5000 + Math.random() * 5000;
|
|
134
|
+
}
|
|
135
|
+
return undefined;
|
|
136
|
+
}
|
|
117
137
|
function parseRetryAfter(headerValue) {
|
|
118
138
|
if (!headerValue)
|
|
119
139
|
return undefined;
|
|
@@ -135,6 +155,7 @@ export class ReckerHttpHandler {
|
|
|
135
155
|
deduplicator;
|
|
136
156
|
circuitBreaker;
|
|
137
157
|
metrics;
|
|
158
|
+
http2MetricsEnabled;
|
|
138
159
|
constructor(options = {}) {
|
|
139
160
|
this.options = {
|
|
140
161
|
connectTimeout: 10000,
|
|
@@ -146,6 +167,9 @@ export class ReckerHttpHandler {
|
|
|
146
167
|
pipelining: 10,
|
|
147
168
|
http2: true,
|
|
148
169
|
http2MaxConcurrentStreams: 100,
|
|
170
|
+
http2Preset: 'performance', // Default to performance preset for S3 workloads
|
|
171
|
+
expectContinue: 2 * 1024 * 1024, // 2MB threshold for Expect: 100-Continue
|
|
172
|
+
enableHttp2Metrics: false,
|
|
149
173
|
enableDedup: true,
|
|
150
174
|
enableCircuitBreaker: true,
|
|
151
175
|
circuitBreakerThreshold: 5,
|
|
@@ -158,6 +182,15 @@ export class ReckerHttpHandler {
|
|
|
158
182
|
respectRetryAfter: true,
|
|
159
183
|
...options,
|
|
160
184
|
};
|
|
185
|
+
this.http2MetricsEnabled = this.options.enableHttp2Metrics;
|
|
186
|
+
// Build HTTP/2 configuration using presets
|
|
187
|
+
const http2Config = this.options.http2
|
|
188
|
+
? this.options.http2Preset
|
|
189
|
+
? expandHTTP2Options(this.options.http2Preset)
|
|
190
|
+
: { enabled: true, maxConcurrentStreams: this.options.http2MaxConcurrentStreams }
|
|
191
|
+
: false;
|
|
192
|
+
// Build hooks for HTTP/2 observability
|
|
193
|
+
const hooks = this.http2MetricsEnabled ? createHttp2MetricsHooks() : undefined;
|
|
161
194
|
this.client = createClient({
|
|
162
195
|
timeout: {
|
|
163
196
|
lookup: 5000,
|
|
@@ -166,10 +199,8 @@ export class ReckerHttpHandler {
|
|
|
166
199
|
response: this.options.headersTimeout,
|
|
167
200
|
request: this.options.bodyTimeout,
|
|
168
201
|
},
|
|
169
|
-
http2:
|
|
170
|
-
|
|
171
|
-
maxConcurrentStreams: this.options.http2MaxConcurrentStreams,
|
|
172
|
-
} : false,
|
|
202
|
+
http2: http2Config,
|
|
203
|
+
expectContinue: this.options.expectContinue,
|
|
173
204
|
concurrency: {
|
|
174
205
|
max: this.options.connections * 10,
|
|
175
206
|
agent: {
|
|
@@ -180,7 +211,8 @@ export class ReckerHttpHandler {
|
|
|
180
211
|
keepAliveMaxTimeout: this.options.keepAliveMaxTimeout,
|
|
181
212
|
},
|
|
182
213
|
},
|
|
183
|
-
|
|
214
|
+
hooks,
|
|
215
|
+
observability: this.http2MetricsEnabled,
|
|
184
216
|
});
|
|
185
217
|
this.deduplicator = this.options.enableDedup ? new RequestDeduplicator() : null;
|
|
186
218
|
this.circuitBreaker = this.options.enableCircuitBreaker ? new CircuitBreaker({
|
|
@@ -270,7 +302,11 @@ export class ReckerHttpHandler {
|
|
|
270
302
|
}
|
|
271
303
|
if (this.options.enableRetry && attempt < maxAttempts && isRetryableError(error)) {
|
|
272
304
|
this.metrics.retries++;
|
|
273
|
-
|
|
305
|
+
// Check for HTTP/2 specific retry delay (e.g., ENHANCE_YOUR_CALM)
|
|
306
|
+
const h2Delay = getHttp2RetryDelay(error);
|
|
307
|
+
const delay = h2Delay !== undefined
|
|
308
|
+
? Math.min(h2Delay, this.options.maxRetryDelay)
|
|
309
|
+
: calculateRetryDelay(attempt, this.options.retryDelay, this.options.maxRetryDelay, this.options.retryJitter);
|
|
274
310
|
await new Promise(resolve => setTimeout(resolve, delay));
|
|
275
311
|
continue;
|
|
276
312
|
}
|
|
@@ -296,13 +332,25 @@ export class ReckerHttpHandler {
|
|
|
296
332
|
return { ...this.options };
|
|
297
333
|
}
|
|
298
334
|
getMetrics() {
|
|
299
|
-
|
|
335
|
+
const metrics = {
|
|
300
336
|
...this.metrics,
|
|
301
337
|
circuitStates: this.circuitBreaker
|
|
302
338
|
? Object.fromEntries(this.circuitBreaker.circuits)
|
|
303
339
|
: {},
|
|
304
340
|
pendingDeduped: this.deduplicator?.size || 0,
|
|
305
341
|
};
|
|
342
|
+
// Include HTTP/2 metrics if enabled
|
|
343
|
+
if (this.http2MetricsEnabled) {
|
|
344
|
+
const h2Summary = getGlobalHttp2Metrics().getSummary();
|
|
345
|
+
metrics.http2 = {
|
|
346
|
+
sessions: h2Summary.totals.sessions,
|
|
347
|
+
activeSessions: h2Summary.totals.activeSessions,
|
|
348
|
+
streams: h2Summary.totals.streams,
|
|
349
|
+
activeStreams: h2Summary.totals.activeStreams,
|
|
350
|
+
errors: h2Summary.totals.errors,
|
|
351
|
+
};
|
|
352
|
+
}
|
|
353
|
+
return metrics;
|
|
306
354
|
}
|
|
307
355
|
resetMetrics() {
|
|
308
356
|
this.metrics = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recker-http-handler.js","sourceRoot":"","sources":["../../src/clients/recker-http-handler.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"recker-http-handler.js","sourceRoot":"","sources":["../../src/clients/recker-http-handler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,uBAAuB,EACvB,qBAAqB,GAEtB,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAevC,MAAM,cAAc;IACV,SAAS,CAAS;IAClB,YAAY,CAAS;IAC7B,QAAQ,CAA4B;IAEpC,YAAY,UAAiC,EAAE;QAC7C,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC;QACxC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC;QAClD,IAAI,CAAC,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,CAAC,QAAgB;QACrB,OAAO,QAAQ,IAAI,SAAS,CAAC;IAC/B,CAAC;IAED,QAAQ,CAAC,GAAW;QAClB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE;gBACrB,QAAQ,EAAE,CAAC;gBACX,eAAe,EAAE,CAAC;gBAClB,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;IACjC,CAAC;IAED,UAAU,CAAC,QAAgB;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACvB,IAAI,GAAG,GAAG,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpD,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC;gBAC1B,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEjC,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC5D,KAAK,CAAC,KAAK,GAAG,QAAQ,CAAC;YACvB,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IAED,aAAa,CAAC,QAAgB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEjC,KAAK,CAAC,QAAQ,EAAE,CAAC;QACjB,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAChC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACvB,CAAC;aAAM,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACxE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;QACvB,CAAC;IACH,CAAC;IAED,QAAQ,CAAC,QAAgB;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IAClC,CAAC;CACF;AAED,MAAM,mBAAmB;IACf,OAAO,CAAsD;IAErE;QACE,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,WAAW,CAAC,MAAc,EAAE,GAAW;QACrC,OAAO,GAAG,MAAM,IAAI,GAAG,EAAE,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,MAAM,CACV,MAAc,EACd,GAAW,EACX,SAAuD;QAEvD,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1C,OAAO,SAAS,EAAE,CAAC;QACrB,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;QAChC,CAAC;QAED,MAAM,OAAO,GAAG,SAAS,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;YACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;CACF;AAED,SAAS,mBAAmB,CAC1B,OAAe,EACf,SAAiB,EACjB,QAAgB,EAChB,YAAqB,IAAI;IAEzB,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC;IACjD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAElC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,CAAC;QACjC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,GAAG,CAAC,CAAC,GAAG,WAAW,CAAC;QACrE,KAAK,IAAI,YAAY,CAAC;IACxB,CAAC;IAED,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAmB,EAAE,UAAmB;IAChE,IAAI,KAAK,EAAE,CAAC;QACV,yCAAyC;QACzC,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,OAAO,CAAC,SAAS,CAAC;QAC3B,CAAC;QAED,iCAAiC;QACjC,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC,SAAS,CAAC;QACzB,CAAC;QAED,MAAM,IAAI,GAAI,KAA+B,CAAC,IAAI,CAAC;QACnD,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,WAAW;YACrE,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,gBAAgB;YACxE,IAAI,KAAK,yBAAyB,IAAI,IAAI,KAAK,yBAAyB;YACxE,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACpC,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACxE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAC7D,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,KAAY;IACtC,MAAM,OAAO,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACvC,IAAI,OAAO,IAAI,OAAO,CAAC,SAAS,KAAK,mBAAmB,EAAE,CAAC;QACzD,sDAAsD;QACtD,OAAO,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC;IACrC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,WAA0B;IACjD,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IAEnC,MAAM,OAAO,GAAG,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACpC,OAAO,OAAO,GAAG,IAAI,CAAC;IACxB,CAAC;IAED,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjB,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAChC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACvC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAkBD,MAAM,OAAO,iBAAiB;IAC5B,QAAQ,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC;IAE7B,OAAO,CAAqC;IAC5C,MAAM,CAAsB;IAC5B,YAAY,CAA6B;IACzC,cAAc,CAAwB;IACtC,OAAO,CAAiB;IACxB,mBAAmB,CAAU;IAErC,YAAY,UAAoC,EAAE;QAChD,IAAI,CAAC,OAAO,GAAG;YACb,cAAc,EAAE,KAAK;YACrB,cAAc,EAAE,KAAK;YACrB,WAAW,EAAE,KAAK;YAClB,gBAAgB,EAAE,IAAI;YACtB,mBAAmB,EAAE,MAAM;YAC3B,WAAW,EAAE,GAAG;YAChB,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,IAAI;YACX,yBAAyB,EAAE,GAAG;YAC9B,WAAW,EAAE,aAAa,EAAE,iDAAiD;YAC7E,cAAc,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,yCAAyC;YAC1E,kBAAkB,EAAE,KAAK;YACzB,WAAW,EAAE,IAAI;YACjB,oBAAoB,EAAE,IAAI;YAC1B,uBAAuB,EAAE,CAAC;YAC1B,0BAA0B,EAAE,KAAK;YACjC,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,IAAI;YAChB,aAAa,EAAE,KAAK;YACpB,WAAW,EAAE,IAAI;YACjB,iBAAiB,EAAE,IAAI;YACvB,GAAG,OAAO;SACX,CAAC;QAEF,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC;QAE3D,2CAA2C;QAC3C,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;YACpC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW;gBACxB,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,WAA0B,CAAC;gBAC7D,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,CAAC,OAAO,CAAC,yBAAyB,EAAE;YACnF,CAAC,CAAC,KAAK,CAAC;QAEV,uCAAuC;QACvC,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE/E,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;YACzB,OAAO,EAAE;gBACP,MAAM,EAAE,IAAI;gBACZ,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;gBACpC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;gBAC1C,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;gBACrC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;aAClC;YACD,KAAK,EAAE,WAAW;YAClB,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;YAC3C,WAAW,EAAE;gBACX,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE;gBAClC,KAAK,EAAE;oBACL,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW;oBACrC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU;oBACnC,SAAS,EAAE,IAAI;oBACf,gBAAgB,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB;oBAC/C,mBAAmB,EAAE,IAAI,CAAC,OAAO,CAAC,mBAAmB;iBACtD;aACF;YACD,KAAK;YACL,aAAa,EAAE,IAAI,CAAC,mBAAmB;SACxC,CAA4B,CAAC;QAE9B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,mBAAmB,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEhF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC;YAC3E,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,uBAAuB;YAC/C,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,0BAA0B;SACtD,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAEV,IAAI,CAAC,OAAO,GAAG;YACb,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,MAAM,CACV,OAAuB,EACvB,EAAE,WAAW,EAAE,cAAc,KAAoB,EAAE;QAEnD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAC9C,MAAM,WAAW,GAAG,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAElC,MAAM,GAAG,GAAG,GAAG,QAAQ,KAAK,QAAQ,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;QAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;QAE9B,IAAI,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,4BAA4B,QAAQ,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3D,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACvB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,KAAK,IAA4C,EAAE;YACnE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAExB,IAAI,SAA4B,CAAC;YACjC,IAAI,OAAO,GAAG,CAAC,CAAC;YAChB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE/E,OAAO,OAAO,GAAG,WAAW,EAAE,CAAC;gBAC7B,OAAO,EAAE,CAAC;gBAEV,IAAI,CAAC;oBACH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAO,CAAC,OAAO,CAAC,GAAG,EAAE;wBACrD,MAAM;wBACN,OAAO;wBACP,IAAI,EAAE,OAAO,CAAC,IAAI;wBAClB,MAAM,EAAE,WAAW;wBACnB,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW;wBACnD,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;qBAC1B,CAAC,CAAC;oBAEH,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,GAAG,WAAW;wBACjD,gBAAgB,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC;wBAClD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;wBAEvB,IAAI,KAAa,CAAC;wBAClB,IAAI,IAAI,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC;4BACnC,MAAM,UAAU,GAAG,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;4BAC9E,KAAK,GAAG,UAAU,KAAK,SAAS;gCAC9B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;gCAClD,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;wBAClH,CAAC;6BAAM,CAAC;4BACN,KAAK,GAAG,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;wBACtH,CAAC;wBAED,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;wBACzD,SAAS;oBACX,CAAC;oBAED,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;wBACxB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAC9C,CAAC;oBAED,IAAI,IAA0B,CAAC;oBAC/B,IAAI,cAAc,CAAC,IAAI,EAAE,CAAC;wBACxB,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,IAA8C,CAAC,CAAC;oBACzF,CAAC;oBAED,MAAM,eAAe,GAA2B,EAAE,CAAC;oBACnD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAK,cAAc,CAAC,OAAe,CAAC,OAAO,EAAE,EAAE,CAAC;wBACrE,eAAe,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;oBAC/B,CAAC;oBAED,OAAO;wBACL,QAAQ,EAAE;4BACR,UAAU,EAAE,cAAc,CAAC,MAAM;4BACjC,MAAM,EAAE,cAAc,CAAC,UAAU;4BACjC,OAAO,EAAE,eAAe;4BACxB,IAAI;yBACL;qBACF,CAAC;gBAEJ,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,SAAS,GAAG,KAAc,CAAC;oBAE3B,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;wBACxB,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;oBAC9C,CAAC;oBAED,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,GAAG,WAAW,IAAI,gBAAgB,CAAC,KAAc,CAAC,EAAE,CAAC;wBAC1F,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;wBAEvB,kEAAkE;wBAClE,MAAM,OAAO,GAAG,kBAAkB,CAAC,KAAc,CAAC,CAAC;wBACnD,MAAM,KAAK,GAAG,OAAO,KAAK,SAAS;4BACjC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC;4BAC/C,CAAC,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;wBAEhH,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;wBACzD,SAAS;oBACX,CAAC;oBAED,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YAED,MAAM,SAAS,CAAC;QAClB,CAAC,CAAC;QAEF,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;YACtE,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACzB,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,SAAS,EAAE,CAAC;IACrB,CAAC;IAED,sBAAsB,CAAC,GAAmC,EAAE,KAAc;QACvE,IAAI,CAAC,OAAmC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACzD,CAAC;IAED,kBAAkB;QAChB,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;IAED,UAAU;QACR,MAAM,OAAO,GAAmB;YAC9B,GAAG,IAAI,CAAC,OAAO;YACf,aAAa,EAAE,IAAI,CAAC,cAAc;gBAChC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;gBAClD,CAAC,CAAC,EAAE;YACN,cAAc,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,IAAI,CAAC;SAC7C,CAAC;QAEF,oCAAoC;QACpC,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,qBAAqB,EAAE,CAAC,UAAU,EAAE,CAAC;YACvD,OAAO,CAAC,KAAK,GAAG;gBACd,QAAQ,EAAE,SAAS,CAAC,MAAM,CAAC,QAAQ;gBACnC,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,cAAc;gBAC/C,OAAO,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO;gBACjC,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,aAAa;gBAC7C,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM;aAChC,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,YAAY;QACV,IAAI,CAAC,OAAO,GAAG;YACb,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;IAC7B,CAAC;CACF;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL-safe alphabet (64 chars).
|
|
3
|
+
* Entropy: 6 bits per character
|
|
4
|
+
* 21 chars = 126 bits of entropy
|
|
5
|
+
*/
|
|
6
|
+
export const URL_SAFE = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';
|
|
7
|
+
/**
|
|
8
|
+
* URL-safe alphabet without special chars (62 chars).
|
|
9
|
+
* Alphanumeric only: a-z, A-Z, 0-9
|
|
10
|
+
* Entropy: ~5.95 bits per character
|
|
11
|
+
* 22 chars = ~131 bits of entropy
|
|
12
|
+
*/
|
|
13
|
+
export const ALPHANUMERIC = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
|
|
14
|
+
/**
|
|
15
|
+
* Lowercase alphanumeric (36 chars).
|
|
16
|
+
* Entropy: ~5.17 bits per character
|
|
17
|
+
* 25 chars = ~129 bits of entropy
|
|
18
|
+
*/
|
|
19
|
+
export const ALPHANUMERIC_LOWER = '0123456789abcdefghijklmnopqrstuvwxyz';
|
|
20
|
+
/**
|
|
21
|
+
* Uppercase alphanumeric (36 chars).
|
|
22
|
+
* Entropy: ~5.17 bits per character
|
|
23
|
+
*/
|
|
24
|
+
export const ALPHANUMERIC_UPPER = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
25
|
+
/**
|
|
26
|
+
* Hexadecimal lowercase (16 chars).
|
|
27
|
+
* Entropy: 4 bits per character
|
|
28
|
+
* 32 chars = 128 bits of entropy
|
|
29
|
+
*/
|
|
30
|
+
export const HEX_LOWER = '0123456789abcdef';
|
|
31
|
+
/**
|
|
32
|
+
* Hexadecimal uppercase (16 chars).
|
|
33
|
+
*/
|
|
34
|
+
export const HEX_UPPER = '0123456789ABCDEF';
|
|
35
|
+
/**
|
|
36
|
+
* Crockford Base32 (32 chars) - Used by ULID.
|
|
37
|
+
* Excludes I, L, O, U to avoid confusion.
|
|
38
|
+
* Entropy: 5 bits per character
|
|
39
|
+
* 26 chars = 130 bits of entropy
|
|
40
|
+
*/
|
|
41
|
+
export const CROCKFORD_BASE32 = '0123456789ABCDEFGHJKMNPQRSTVWXYZ';
|
|
42
|
+
/**
|
|
43
|
+
* Base58 Bitcoin alphabet (58 chars).
|
|
44
|
+
* Excludes 0, O, I, l to avoid confusion.
|
|
45
|
+
* Entropy: ~5.86 bits per character
|
|
46
|
+
*/
|
|
47
|
+
export const BASE58 = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
|
|
48
|
+
/**
|
|
49
|
+
* Base64 URL-safe alphabet (64 chars).
|
|
50
|
+
* Standard RFC 4648 with - and _ instead of + and /
|
|
51
|
+
* Entropy: 6 bits per character
|
|
52
|
+
*/
|
|
53
|
+
export const BASE64_URL = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';
|
|
54
|
+
/**
|
|
55
|
+
* Numeric only (10 chars).
|
|
56
|
+
* Entropy: ~3.32 bits per character
|
|
57
|
+
* 39 chars = ~129 bits of entropy
|
|
58
|
+
*/
|
|
59
|
+
export const NUMERIC = '0123456789';
|
|
60
|
+
/**
|
|
61
|
+
* Lowercase letters only (26 chars).
|
|
62
|
+
* Entropy: ~4.7 bits per character
|
|
63
|
+
*/
|
|
64
|
+
export const LOWERCASE = 'abcdefghijklmnopqrstuvwxyz';
|
|
65
|
+
/**
|
|
66
|
+
* Uppercase letters only (26 chars).
|
|
67
|
+
*/
|
|
68
|
+
export const UPPERCASE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
69
|
+
/**
|
|
70
|
+
* Human-readable alphabet (32 chars).
|
|
71
|
+
* Excludes similar-looking characters: 0, O, I, l, 1
|
|
72
|
+
* Good for manual entry scenarios.
|
|
73
|
+
* Entropy: 5 bits per character
|
|
74
|
+
*/
|
|
75
|
+
export const HUMAN_READABLE = '23456789ABCDEFGHJKMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz';
|
|
76
|
+
/**
|
|
77
|
+
* No-look-alike lowercase (23 chars).
|
|
78
|
+
* Excludes: 0, 1, l, o, i
|
|
79
|
+
* Entropy: ~4.52 bits per character
|
|
80
|
+
*/
|
|
81
|
+
export const NO_LOOKALIKE_LOWER = '23456789abcdefghjkmnpqrstuvwxyz';
|
|
82
|
+
/**
|
|
83
|
+
* Binary alphabet (2 chars).
|
|
84
|
+
* Entropy: 1 bit per character
|
|
85
|
+
*/
|
|
86
|
+
export const BINARY = '01';
|
|
87
|
+
/**
|
|
88
|
+
* Emoji alphabet (64 emojis) - Fun but use with caution.
|
|
89
|
+
* UTF-8 encoding varies (2-4 bytes per emoji).
|
|
90
|
+
*/
|
|
91
|
+
export const EMOJI = '🚀🎉💡🔥⚡🌟💎🎯🏆🎨🎭🎪🎢🎡🎠🏰🗼🗽⛩️🏯🏟️🎸🎺🎻🥁🎹🎼🎤🎧🎬🎥📸🔮🎱🎲🎰🃏🀄🎴🎭🎨🖼️🎪🎢🎡🎠🏰🗼🗽⛩️🏯🏟️🎸🎺🎻🥁🎹🎼🎤🎧';
|
|
92
|
+
export const alphabets = {
|
|
93
|
+
URL_SAFE,
|
|
94
|
+
ALPHANUMERIC,
|
|
95
|
+
ALPHANUMERIC_LOWER,
|
|
96
|
+
ALPHANUMERIC_UPPER,
|
|
97
|
+
HEX_LOWER,
|
|
98
|
+
HEX_UPPER,
|
|
99
|
+
CROCKFORD_BASE32,
|
|
100
|
+
BASE58,
|
|
101
|
+
BASE64_URL,
|
|
102
|
+
NUMERIC,
|
|
103
|
+
LOWERCASE,
|
|
104
|
+
UPPERCASE,
|
|
105
|
+
HUMAN_READABLE,
|
|
106
|
+
NO_LOOKALIKE_LOWER,
|
|
107
|
+
BINARY,
|
|
108
|
+
EMOJI
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Get alphabet by name or return custom alphabet string.
|
|
112
|
+
*/
|
|
113
|
+
export function getAlphabet(nameOrCustom) {
|
|
114
|
+
if (nameOrCustom in alphabets) {
|
|
115
|
+
return alphabets[nameOrCustom];
|
|
116
|
+
}
|
|
117
|
+
return nameOrCustom;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Calculate recommended ID length for target entropy bits.
|
|
121
|
+
*/
|
|
122
|
+
export function recommendedLength(alphabet, targetEntropyBits = 128) {
|
|
123
|
+
const bitsPerChar = Math.log2(alphabet.length);
|
|
124
|
+
return Math.ceil(targetEntropyBits / bitsPerChar);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Validate an alphabet string.
|
|
128
|
+
* Returns null if valid, error message if invalid.
|
|
129
|
+
*/
|
|
130
|
+
export function validateAlphabet(alphabet) {
|
|
131
|
+
if (!alphabet || alphabet.length === 0) {
|
|
132
|
+
return 'Alphabet cannot be empty';
|
|
133
|
+
}
|
|
134
|
+
if (alphabet.length === 1) {
|
|
135
|
+
return 'Alphabet must have at least 2 characters';
|
|
136
|
+
}
|
|
137
|
+
if (alphabet.length > 65536) {
|
|
138
|
+
return 'Alphabet cannot exceed 65536 characters';
|
|
139
|
+
}
|
|
140
|
+
const seen = new Set();
|
|
141
|
+
for (const char of alphabet) {
|
|
142
|
+
if (seen.has(char)) {
|
|
143
|
+
return `Duplicate character in alphabet: "${char}"`;
|
|
144
|
+
}
|
|
145
|
+
seen.add(char);
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
export default alphabets;
|
|
150
|
+
//# sourceMappingURL=alphabets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alphabets.js","sourceRoot":"","sources":["../../../src/concerns/id/alphabets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import { randomFillSync } from 'node:crypto';
|
|
2
|
+
const DEFAULT_POOL_SIZE = 2048;
|
|
3
|
+
const MIN_POOL_SIZE = 256;
|
|
4
|
+
let pool;
|
|
5
|
+
let poolOffset = 0;
|
|
6
|
+
/**
|
|
7
|
+
* Initialize or resize the entropy pool.
|
|
8
|
+
* Uses a pre-allocated buffer to reduce GC pressure and improve performance.
|
|
9
|
+
*/
|
|
10
|
+
export function initPool(size = DEFAULT_POOL_SIZE) {
|
|
11
|
+
const actualSize = Math.max(size, MIN_POOL_SIZE);
|
|
12
|
+
pool = new Uint8Array(actualSize);
|
|
13
|
+
randomFillSync(pool);
|
|
14
|
+
poolOffset = 0;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get cryptographically secure random bytes from the pool.
|
|
18
|
+
* Automatically refills the pool when exhausted.
|
|
19
|
+
*/
|
|
20
|
+
export function getRandomBytes(count) {
|
|
21
|
+
if (!pool) {
|
|
22
|
+
initPool();
|
|
23
|
+
}
|
|
24
|
+
if (count > pool.length) {
|
|
25
|
+
const bytes = new Uint8Array(count);
|
|
26
|
+
randomFillSync(bytes);
|
|
27
|
+
return bytes;
|
|
28
|
+
}
|
|
29
|
+
if (poolOffset + count > pool.length) {
|
|
30
|
+
randomFillSync(pool);
|
|
31
|
+
poolOffset = 0;
|
|
32
|
+
}
|
|
33
|
+
const bytes = pool.slice(poolOffset, poolOffset + count);
|
|
34
|
+
poolOffset += count;
|
|
35
|
+
return bytes;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Fill a pre-allocated buffer with random bytes.
|
|
39
|
+
* More efficient than getRandomBytes when you already have a buffer.
|
|
40
|
+
*/
|
|
41
|
+
export function fillRandomBytes(buffer) {
|
|
42
|
+
if (!pool) {
|
|
43
|
+
initPool();
|
|
44
|
+
}
|
|
45
|
+
const needed = buffer.length;
|
|
46
|
+
if (poolOffset + needed <= pool.length) {
|
|
47
|
+
buffer.set(pool.subarray(poolOffset, poolOffset + needed));
|
|
48
|
+
poolOffset += needed;
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const remaining = pool.length - poolOffset;
|
|
52
|
+
if (remaining > 0) {
|
|
53
|
+
buffer.set(pool.subarray(poolOffset, pool.length), 0);
|
|
54
|
+
}
|
|
55
|
+
randomFillSync(pool);
|
|
56
|
+
poolOffset = 0;
|
|
57
|
+
buffer.set(pool.subarray(0, needed - remaining), remaining);
|
|
58
|
+
poolOffset = needed - remaining;
|
|
59
|
+
}
|
|
60
|
+
return buffer;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate a random index into an alphabet using rejection sampling.
|
|
64
|
+
* This eliminates modulo bias for non-power-of-2 alphabet sizes.
|
|
65
|
+
*
|
|
66
|
+
* For an alphabet of size N, we find the largest multiple of N that fits
|
|
67
|
+
* in 256 (or 65536 for larger alphabets). Any random value >= that threshold
|
|
68
|
+
* is rejected and we try again.
|
|
69
|
+
*
|
|
70
|
+
* Example: For alphabet size 62:
|
|
71
|
+
* - threshold = 256 - (256 % 62) = 256 - 8 = 248
|
|
72
|
+
* - We accept bytes 0-247 (maps evenly to 0-61, 4 times each)
|
|
73
|
+
* - We reject bytes 248-255 (would cause bias)
|
|
74
|
+
* - Rejection rate: 8/256 = 3.125%
|
|
75
|
+
*/
|
|
76
|
+
export function randomIndexUnbiased(alphabetSize) {
|
|
77
|
+
if (alphabetSize <= 0 || alphabetSize > 65536) {
|
|
78
|
+
throw new Error(`Invalid alphabet size: ${alphabetSize}. Must be 1-65536.`);
|
|
79
|
+
}
|
|
80
|
+
if (alphabetSize === 1) {
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
if (alphabetSize <= 256) {
|
|
84
|
+
const threshold = 256 - (256 % alphabetSize);
|
|
85
|
+
let byte;
|
|
86
|
+
do {
|
|
87
|
+
const bytes = getRandomBytes(1);
|
|
88
|
+
byte = bytes[0];
|
|
89
|
+
} while (byte >= threshold);
|
|
90
|
+
return byte % alphabetSize;
|
|
91
|
+
}
|
|
92
|
+
const threshold = 65536 - (65536 % alphabetSize);
|
|
93
|
+
let value;
|
|
94
|
+
do {
|
|
95
|
+
const bytes = getRandomBytes(2);
|
|
96
|
+
value = (bytes[0] << 8) | bytes[1];
|
|
97
|
+
} while (value >= threshold);
|
|
98
|
+
return value % alphabetSize;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Generate multiple unbiased random indices efficiently.
|
|
102
|
+
* Pre-calculates rejection threshold and batches random byte generation.
|
|
103
|
+
*/
|
|
104
|
+
export function randomIndicesUnbiased(alphabetSize, count) {
|
|
105
|
+
if (alphabetSize <= 0 || alphabetSize > 65536) {
|
|
106
|
+
throw new Error(`Invalid alphabet size: ${alphabetSize}. Must be 1-65536.`);
|
|
107
|
+
}
|
|
108
|
+
const result = new Uint16Array(count);
|
|
109
|
+
if (alphabetSize === 1) {
|
|
110
|
+
return result;
|
|
111
|
+
}
|
|
112
|
+
if (alphabetSize <= 256) {
|
|
113
|
+
const threshold = 256 - (256 % alphabetSize);
|
|
114
|
+
const estimatedBytes = Math.ceil(count * (256 / threshold) * 1.1);
|
|
115
|
+
let bytes = getRandomBytes(Math.max(estimatedBytes, count * 2));
|
|
116
|
+
let byteIndex = 0;
|
|
117
|
+
let resultIndex = 0;
|
|
118
|
+
while (resultIndex < count) {
|
|
119
|
+
if (byteIndex >= bytes.length) {
|
|
120
|
+
const extraBytes = getRandomBytes(Math.max(16, (count - resultIndex) * 2));
|
|
121
|
+
const newBytes = new Uint8Array(bytes.length + extraBytes.length);
|
|
122
|
+
newBytes.set(bytes);
|
|
123
|
+
newBytes.set(extraBytes, bytes.length);
|
|
124
|
+
bytes = newBytes;
|
|
125
|
+
byteIndex = 0;
|
|
126
|
+
}
|
|
127
|
+
const byte = bytes[byteIndex++];
|
|
128
|
+
if (byte < threshold) {
|
|
129
|
+
result[resultIndex++] = byte % alphabetSize;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
return result;
|
|
133
|
+
}
|
|
134
|
+
const threshold = 65536 - (65536 % alphabetSize);
|
|
135
|
+
const estimatedBytes = Math.ceil(count * 2 * (65536 / threshold) * 1.1);
|
|
136
|
+
let bytes = getRandomBytes(Math.max(estimatedBytes, count * 4));
|
|
137
|
+
let byteIndex = 0;
|
|
138
|
+
let resultIndex = 0;
|
|
139
|
+
while (resultIndex < count) {
|
|
140
|
+
if (byteIndex + 1 >= bytes.length) {
|
|
141
|
+
const extraBytes = getRandomBytes(Math.max(32, (count - resultIndex) * 4));
|
|
142
|
+
const newBytes = new Uint8Array(bytes.length + extraBytes.length);
|
|
143
|
+
newBytes.set(bytes);
|
|
144
|
+
newBytes.set(extraBytes, bytes.length);
|
|
145
|
+
bytes = newBytes;
|
|
146
|
+
}
|
|
147
|
+
const value = (bytes[byteIndex] << 8) | bytes[byteIndex + 1];
|
|
148
|
+
byteIndex += 2;
|
|
149
|
+
if (value < threshold) {
|
|
150
|
+
result[resultIndex++] = value % alphabetSize;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Generate a string from an alphabet using unbiased random selection.
|
|
157
|
+
* This is the core function for generating IDs.
|
|
158
|
+
*/
|
|
159
|
+
export function randomString(alphabet, length) {
|
|
160
|
+
const alphabetSize = alphabet.length;
|
|
161
|
+
const indices = randomIndicesUnbiased(alphabetSize, length);
|
|
162
|
+
let result = '';
|
|
163
|
+
for (let i = 0; i < length; i++) {
|
|
164
|
+
result += alphabet[indices[i]];
|
|
165
|
+
}
|
|
166
|
+
return result;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Generate a random 48-bit integer for timestamp-based IDs.
|
|
170
|
+
* Uses 6 bytes of entropy.
|
|
171
|
+
*/
|
|
172
|
+
export function random48() {
|
|
173
|
+
const bytes = getRandomBytes(6);
|
|
174
|
+
return ((BigInt(bytes[0]) << 40n) |
|
|
175
|
+
(BigInt(bytes[1]) << 32n) |
|
|
176
|
+
(BigInt(bytes[2]) << 24n) |
|
|
177
|
+
(BigInt(bytes[3]) << 16n) |
|
|
178
|
+
(BigInt(bytes[4]) << 8n) |
|
|
179
|
+
BigInt(bytes[5]));
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Generate a random 62-bit integer (fits in signed 64-bit).
|
|
183
|
+
* Uses 8 bytes of entropy with top 2 bits masked.
|
|
184
|
+
*/
|
|
185
|
+
export function random62() {
|
|
186
|
+
const bytes = getRandomBytes(8);
|
|
187
|
+
return ((BigInt(bytes[0] & 0x3f) << 56n) |
|
|
188
|
+
(BigInt(bytes[1]) << 48n) |
|
|
189
|
+
(BigInt(bytes[2]) << 40n) |
|
|
190
|
+
(BigInt(bytes[3]) << 32n) |
|
|
191
|
+
(BigInt(bytes[4]) << 24n) |
|
|
192
|
+
(BigInt(bytes[5]) << 16n) |
|
|
193
|
+
(BigInt(bytes[6]) << 8n) |
|
|
194
|
+
BigInt(bytes[7]));
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Generate a random 80-bit integer for ULID random component.
|
|
198
|
+
* Uses 10 bytes of entropy.
|
|
199
|
+
*/
|
|
200
|
+
export function random80() {
|
|
201
|
+
const bytes = getRandomBytes(10);
|
|
202
|
+
let result = 0n;
|
|
203
|
+
for (let i = 0; i < 10; i++) {
|
|
204
|
+
result = (result << 8n) | BigInt(bytes[i]);
|
|
205
|
+
}
|
|
206
|
+
return result;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Calculate the entropy bits for a given alphabet size and ID length.
|
|
210
|
+
*/
|
|
211
|
+
export function calculateEntropyBits(alphabetSize, length) {
|
|
212
|
+
return Math.log2(alphabetSize) * length;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Calculate the collision probability for a given number of IDs.
|
|
216
|
+
* Uses birthday paradox approximation: p ≈ n² / (2 * 2^bits)
|
|
217
|
+
*/
|
|
218
|
+
export function calculateCollisionProbability(entropyBits, idCount) {
|
|
219
|
+
const totalCombinations = Math.pow(2, entropyBits);
|
|
220
|
+
return (idCount * idCount) / (2 * totalCombinations);
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Reset the entropy pool (useful for testing).
|
|
224
|
+
*/
|
|
225
|
+
export function resetPool() {
|
|
226
|
+
pool = undefined;
|
|
227
|
+
poolOffset = 0;
|
|
228
|
+
}
|
|
229
|
+
export default {
|
|
230
|
+
initPool,
|
|
231
|
+
getRandomBytes,
|
|
232
|
+
fillRandomBytes,
|
|
233
|
+
randomIndexUnbiased,
|
|
234
|
+
randomIndicesUnbiased,
|
|
235
|
+
randomString,
|
|
236
|
+
random48,
|
|
237
|
+
random62,
|
|
238
|
+
random80,
|
|
239
|
+
calculateEntropyBits,
|
|
240
|
+
calculateCollisionProbability,
|
|
241
|
+
resetPool
|
|
242
|
+
};
|
|
243
|
+
//# sourceMappingURL=entropy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entropy.js","sourceRoot":"","sources":["../../../src/concerns/id/entropy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { randomString, calculateEntropyBits } from '../entropy.js';
|
|
2
|
+
import { URL_SAFE, getAlphabet, validateAlphabet } from '../alphabets.js';
|
|
3
|
+
const DEFAULT_SIZE = 21;
|
|
4
|
+
/**
|
|
5
|
+
* Generate a nanoid-compatible ID.
|
|
6
|
+
* Default: 21 characters using URL-safe alphabet (126 bits of entropy).
|
|
7
|
+
*
|
|
8
|
+
* Unlike original nanoid which uses `bytes[i] & 63` (modulo bias for non-64 alphabets),
|
|
9
|
+
* this implementation uses rejection sampling for true uniform distribution.
|
|
10
|
+
*/
|
|
11
|
+
export function nanoid(size = DEFAULT_SIZE) {
|
|
12
|
+
return randomString(URL_SAFE, size);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Create a custom nanoid generator with specified alphabet.
|
|
16
|
+
* Returns a function that generates IDs with that alphabet.
|
|
17
|
+
*/
|
|
18
|
+
export function customAlphabet(alphabet, defaultSize = DEFAULT_SIZE) {
|
|
19
|
+
const error = validateAlphabet(alphabet);
|
|
20
|
+
if (error) {
|
|
21
|
+
throw new Error(`Invalid alphabet: ${error}`);
|
|
22
|
+
}
|
|
23
|
+
return (size = defaultSize) => {
|
|
24
|
+
return randomString(alphabet, size);
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Create a custom nanoid generator with alphabet name.
|
|
29
|
+
* Supports: URL_SAFE, ALPHANUMERIC, BASE58, HEX_LOWER, etc.
|
|
30
|
+
*/
|
|
31
|
+
export function customAlphabetByName(name, defaultSize = DEFAULT_SIZE) {
|
|
32
|
+
const alphabet = getAlphabet(name);
|
|
33
|
+
return customAlphabet(alphabet, defaultSize);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Generate a nanoid with options object.
|
|
37
|
+
*/
|
|
38
|
+
export function nanoidWithOptions(options = {}) {
|
|
39
|
+
const { alphabet = URL_SAFE, size = DEFAULT_SIZE } = options;
|
|
40
|
+
const resolvedAlphabet = getAlphabet(alphabet);
|
|
41
|
+
const error = validateAlphabet(resolvedAlphabet);
|
|
42
|
+
if (error) {
|
|
43
|
+
throw new Error(`Invalid alphabet: ${error}`);
|
|
44
|
+
}
|
|
45
|
+
return randomString(resolvedAlphabet, size);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Calculate entropy bits for a nanoid configuration.
|
|
49
|
+
*/
|
|
50
|
+
export function nanoidEntropyBits(alphabet = URL_SAFE, size = DEFAULT_SIZE) {
|
|
51
|
+
const resolvedAlphabet = getAlphabet(alphabet);
|
|
52
|
+
return calculateEntropyBits(resolvedAlphabet.length, size);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Async version for compatibility with original nanoid/async.
|
|
56
|
+
* Note: Our implementation is already synchronous and fast,
|
|
57
|
+
* this is just for API compatibility.
|
|
58
|
+
*/
|
|
59
|
+
export async function nanoidAsync(size = DEFAULT_SIZE) {
|
|
60
|
+
return nanoid(size);
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Async version with custom alphabet.
|
|
64
|
+
*/
|
|
65
|
+
export function customAlphabetAsync(alphabet, defaultSize = DEFAULT_SIZE) {
|
|
66
|
+
const syncFn = customAlphabet(alphabet, defaultSize);
|
|
67
|
+
return async (size) => syncFn(size);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* URL-safe ID shorthand (backward compatibility).
|
|
71
|
+
*/
|
|
72
|
+
export const urlAlphabet = URL_SAFE;
|
|
73
|
+
export default nanoid;
|
|
74
|
+
//# sourceMappingURL=nanoid.js.map
|