@mindpeeker/entropy 0.1.0
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/LICENSE +21 -0
- package/README.md +496 -0
- package/dist/errors.d.ts +14 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +13 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/bits.d.ts +9 -0
- package/dist/internal/bits.d.ts.map +1 -0
- package/dist/internal/bits.js +29 -0
- package/dist/internal/bits.js.map +1 -0
- package/dist/internal/byte-source.d.ts +16 -0
- package/dist/internal/byte-source.d.ts.map +1 -0
- package/dist/internal/byte-source.js +96 -0
- package/dist/internal/byte-source.js.map +1 -0
- package/dist/internal/bytes.d.ts +5 -0
- package/dist/internal/bytes.d.ts.map +1 -0
- package/dist/internal/bytes.js +56 -0
- package/dist/internal/bytes.js.map +1 -0
- package/dist/internal/composite.d.ts +15 -0
- package/dist/internal/composite.d.ts.map +1 -0
- package/dist/internal/composite.js +36 -0
- package/dist/internal/composite.js.map +1 -0
- package/dist/internal/condition.d.ts +38 -0
- package/dist/internal/condition.d.ts.map +1 -0
- package/dist/internal/condition.js +49 -0
- package/dist/internal/condition.js.map +1 -0
- package/dist/internal/encoding.d.ts +14 -0
- package/dist/internal/encoding.d.ts.map +1 -0
- package/dist/internal/encoding.js +91 -0
- package/dist/internal/encoding.js.map +1 -0
- package/dist/internal/health.d.ts +25 -0
- package/dist/internal/health.d.ts.map +1 -0
- package/dist/internal/health.js +84 -0
- package/dist/internal/health.js.map +1 -0
- package/dist/internal/http.d.ts +25 -0
- package/dist/internal/http.d.ts.map +1 -0
- package/dist/internal/http.js +76 -0
- package/dist/internal/http.js.map +1 -0
- package/dist/internal/nist-pulse.d.ts +31 -0
- package/dist/internal/nist-pulse.d.ts.map +1 -0
- package/dist/internal/nist-pulse.js +62 -0
- package/dist/internal/nist-pulse.js.map +1 -0
- package/dist/internal/provider.d.ts +19 -0
- package/dist/internal/provider.d.ts.map +1 -0
- package/dist/internal/provider.js +62 -0
- package/dist/internal/provider.js.map +1 -0
- package/dist/internal/rate-limit.d.ts +15 -0
- package/dist/internal/rate-limit.d.ts.map +1 -0
- package/dist/internal/rate-limit.js +47 -0
- package/dist/internal/rate-limit.js.map +1 -0
- package/dist/internal/sampled.d.ts +25 -0
- package/dist/internal/sampled.d.ts.map +1 -0
- package/dist/internal/sampled.js +49 -0
- package/dist/internal/sampled.js.map +1 -0
- package/dist/internal/stream.d.ts +29 -0
- package/dist/internal/stream.d.ts.map +1 -0
- package/dist/internal/stream.js +78 -0
- package/dist/internal/stream.js.map +1 -0
- package/dist/internal/validate.d.ts +5 -0
- package/dist/internal/validate.d.ts.map +1 -0
- package/dist/internal/validate.js +39 -0
- package/dist/internal/validate.js.map +1 -0
- package/dist/node/ffmpeg-frames.d.ts +27 -0
- package/dist/node/ffmpeg-frames.d.ts.map +1 -0
- package/dist/node/ffmpeg-frames.js +102 -0
- package/dist/node/ffmpeg-frames.js.map +1 -0
- package/dist/node/ffmpeg-samples.d.ts +21 -0
- package/dist/node/ffmpeg-samples.d.ts.map +1 -0
- package/dist/node/ffmpeg-samples.js +81 -0
- package/dist/node/ffmpeg-samples.js.map +1 -0
- package/dist/node/hwrng.d.ts +12 -0
- package/dist/node/hwrng.d.ts.map +1 -0
- package/dist/node/hwrng.js +43 -0
- package/dist/node/hwrng.js.map +1 -0
- package/dist/node/index.d.ts +9 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +7 -0
- package/dist/node/index.js.map +1 -0
- package/dist/node/rtl-sdr.d.ts +31 -0
- package/dist/node/rtl-sdr.d.ts.map +1 -0
- package/dist/node/rtl-sdr.js +63 -0
- package/dist/node/rtl-sdr.js.map +1 -0
- package/dist/node/serial-source.d.ts +22 -0
- package/dist/node/serial-source.d.ts.map +1 -0
- package/dist/node/serial-source.js +63 -0
- package/dist/node/serial-source.js.map +1 -0
- package/dist/providers/anu-legacy.d.ts +17 -0
- package/dist/providers/anu-legacy.d.ts.map +1 -0
- package/dist/providers/anu-legacy.js +56 -0
- package/dist/providers/anu-legacy.js.map +1 -0
- package/dist/providers/anu.d.ts +14 -0
- package/dist/providers/anu.d.ts.map +1 -0
- package/dist/providers/anu.js +42 -0
- package/dist/providers/anu.js.map +1 -0
- package/dist/providers/bitcoin.d.ts +14 -0
- package/dist/providers/bitcoin.d.ts.map +1 -0
- package/dist/providers/bitcoin.js +95 -0
- package/dist/providers/bitcoin.js.map +1 -0
- package/dist/providers/camera.d.ts +49 -0
- package/dist/providers/camera.d.ts.map +1 -0
- package/dist/providers/camera.js +123 -0
- package/dist/providers/camera.js.map +1 -0
- package/dist/providers/crypto.d.ts +8 -0
- package/dist/providers/crypto.d.ts.map +1 -0
- package/dist/providers/crypto.js +26 -0
- package/dist/providers/crypto.js.map +1 -0
- package/dist/providers/curby.d.ts +17 -0
- package/dist/providers/curby.d.ts.map +1 -0
- package/dist/providers/curby.js +113 -0
- package/dist/providers/curby.js.map +1 -0
- package/dist/providers/drand.d.ts +19 -0
- package/dist/providers/drand.d.ts.map +1 -0
- package/dist/providers/drand.js +87 -0
- package/dist/providers/drand.js.map +1 -0
- package/dist/providers/flow.d.ts +15 -0
- package/dist/providers/flow.d.ts.map +1 -0
- package/dist/providers/flow.js +82 -0
- package/dist/providers/flow.js.map +1 -0
- package/dist/providers/index.d.ts +56 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +32 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/inmetro.d.ts +17 -0
- package/dist/providers/inmetro.d.ts.map +1 -0
- package/dist/providers/inmetro.js +25 -0
- package/dist/providers/inmetro.js.map +1 -0
- package/dist/providers/jitter.d.ts +33 -0
- package/dist/providers/jitter.d.ts.map +1 -0
- package/dist/providers/jitter.js +81 -0
- package/dist/providers/jitter.js.map +1 -0
- package/dist/providers/lfdr.d.ts +11 -0
- package/dist/providers/lfdr.d.ts.map +1 -0
- package/dist/providers/lfdr.js +34 -0
- package/dist/providers/lfdr.js.map +1 -0
- package/dist/providers/microphone.d.ts +26 -0
- package/dist/providers/microphone.d.ts.map +1 -0
- package/dist/providers/microphone.js +120 -0
- package/dist/providers/microphone.js.map +1 -0
- package/dist/providers/nist-beacon.d.ts +11 -0
- package/dist/providers/nist-beacon.d.ts.map +1 -0
- package/dist/providers/nist-beacon.js +20 -0
- package/dist/providers/nist-beacon.js.map +1 -0
- package/dist/providers/nqsn.d.ts +11 -0
- package/dist/providers/nqsn.d.ts.map +1 -0
- package/dist/providers/nqsn.js +16 -0
- package/dist/providers/nqsn.js.map +1 -0
- package/dist/providers/outshift.d.ts +14 -0
- package/dist/providers/outshift.d.ts.map +1 -0
- package/dist/providers/outshift.js +52 -0
- package/dist/providers/outshift.js.map +1 -0
- package/dist/providers/padova.d.ts +12 -0
- package/dist/providers/padova.d.ts.map +1 -0
- package/dist/providers/padova.js +56 -0
- package/dist/providers/padova.js.map +1 -0
- package/dist/providers/qbck.d.ts +13 -0
- package/dist/providers/qbck.d.ts.map +1 -0
- package/dist/providers/qbck.js +62 -0
- package/dist/providers/qbck.js.map +1 -0
- package/dist/providers/qci.d.ts +14 -0
- package/dist/providers/qci.d.ts.map +1 -0
- package/dist/providers/qci.js +91 -0
- package/dist/providers/qci.js.map +1 -0
- package/dist/providers/qrandom.d.ts +12 -0
- package/dist/providers/qrandom.d.ts.map +1 -0
- package/dist/providers/qrandom.js +39 -0
- package/dist/providers/qrandom.js.map +1 -0
- package/dist/providers/randao.d.ts +14 -0
- package/dist/providers/randao.d.ts.map +1 -0
- package/dist/providers/randao.js +81 -0
- package/dist/providers/randao.js.map +1 -0
- package/dist/providers/random-org.d.ts +13 -0
- package/dist/providers/random-org.d.ts.map +1 -0
- package/dist/providers/random-org.js +89 -0
- package/dist/providers/random-org.js.map +1 -0
- package/dist/providers/sdr.d.ts +21 -0
- package/dist/providers/sdr.d.ts.map +1 -0
- package/dist/providers/sdr.js +63 -0
- package/dist/providers/sdr.js.map +1 -0
- package/dist/providers/sensor.d.ts +24 -0
- package/dist/providers/sensor.d.ts.map +1 -0
- package/dist/providers/sensor.js +119 -0
- package/dist/providers/sensor.js.map +1 -0
- package/dist/providers/serial.d.ts +35 -0
- package/dist/providers/serial.d.ts.map +1 -0
- package/dist/providers/serial.js +78 -0
- package/dist/providers/serial.js.map +1 -0
- package/dist/providers/solana.d.ts +13 -0
- package/dist/providers/solana.d.ts.map +1 -0
- package/dist/providers/solana.js +83 -0
- package/dist/providers/solana.js.map +1 -0
- package/dist/providers/superrand.d.ts +35 -0
- package/dist/providers/superrand.d.ts.map +1 -0
- package/dist/providers/superrand.js +215 -0
- package/dist/providers/superrand.js.map +1 -0
- package/dist/providers/tezos.d.ts +13 -0
- package/dist/providers/tezos.d.ts.map +1 -0
- package/dist/providers/tezos.js +92 -0
- package/dist/providers/tezos.js.map +1 -0
- package/dist/providers/uchile.d.ts +11 -0
- package/dist/providers/uchile.d.ts.map +1 -0
- package/dist/providers/uchile.js +22 -0
- package/dist/providers/uchile.js.map +1 -0
- package/dist/strategies/fallback.d.ts +12 -0
- package/dist/strategies/fallback.d.ts.map +1 -0
- package/dist/strategies/fallback.js +45 -0
- package/dist/strategies/fallback.js.map +1 -0
- package/dist/strategies/race.d.ts +7 -0
- package/dist/strategies/race.d.ts.map +1 -0
- package/dist/strategies/race.js +41 -0
- package/dist/strategies/race.js.map +1 -0
- package/dist/strategies/xor.d.ts +9 -0
- package/dist/strategies/xor.d.ts.map +1 -0
- package/dist/strategies/xor.js +56 -0
- package/dist/strategies/xor.js.map +1 -0
- package/dist/types.d.ts +36 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"race.js","sourceRoot":"","sources":["../../src/strategies/race.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EACL,YAAY,EACZ,UAAU,EACV,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACf,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAA;AAGxD;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,SAA4B;IAC/C,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IACnC,MAAM,OAAO,GAAG,CAAC,GAAG,SAAS,CAAC,CAAA;IAC9B,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAE3C,OAAO,cAAc,CAAC;QACpB,IAAI;QACJ,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC;QACzB,OAAO,EAAE,kBAAkB,CAAC,OAAO,CAAC;QAEpC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO;YAC5B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;YACxC,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM;gBAC5B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;gBACtD,CAAC,CAAC,UAAU,CAAC,MAAM,CAAA;YAErB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACnC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACjF,MAAM,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAA;YAC1C,CAAC,CAAC,CACH,CAAA;YACD,IAAI,CAAC;gBACH,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;YACjC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,EAAE,MAAM,EAAE,OAAO;oBAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;gBACtD,MAAM,IAAI,YAAY,CACpB,sBAAsB,EACtB,OAAO,OAAO,CAAC,MAAM,wBAAwB,IAAI,EAAE,EACnD;oBACE,QAAQ,EAAE,IAAI;oBACd,KAAK,EAAE,KAAK;iBACb,CACF,CAAA;YACH,CAAC;oBAAS,CAAC;gBACT,UAAU,CAAC,KAAK,EAAE,CAAA,CAAC,kDAAkD;YACvE,CAAC;QACH,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EntropyProvider } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Fetch from ALL members in parallel and XOR the results — the output is as
|
|
4
|
+
* strong as the strongest independent input. Fails closed: any member failure
|
|
5
|
+
* fails the whole call (compose inside `fallback` if you want degradation).
|
|
6
|
+
* Attribution lists every member's sources.
|
|
7
|
+
*/
|
|
8
|
+
export declare function xorMix(providers: EntropyProvider[]): EntropyProvider;
|
|
9
|
+
//# sourceMappingURL=xor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xor.d.ts","sourceRoot":"","sources":["../../src/strategies/xor.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAiB,MAAM,aAAa,CAAA;AAEjE;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,GAAG,eAAe,CAqDpE"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { EntropyError } from '../errors.js';
|
|
2
|
+
import { xorBytes } from '../internal/bytes.js';
|
|
3
|
+
import { abortedError, anyPrivatePrivacy, commonKind, compositeName, requireProviders, toEntropyError, } from '../internal/composite.js';
|
|
4
|
+
import { defineProvider } from '../internal/provider.js';
|
|
5
|
+
/**
|
|
6
|
+
* Fetch from ALL members in parallel and XOR the results — the output is as
|
|
7
|
+
* strong as the strongest independent input. Fails closed: any member failure
|
|
8
|
+
* fails the whole call (compose inside `fallback` if you want degradation).
|
|
9
|
+
* Attribution lists every member's sources.
|
|
10
|
+
*/
|
|
11
|
+
export function xorMix(providers) {
|
|
12
|
+
requireProviders(providers, 'xor');
|
|
13
|
+
const members = [...providers];
|
|
14
|
+
const name = compositeName('xor', members);
|
|
15
|
+
return defineProvider({
|
|
16
|
+
name,
|
|
17
|
+
kind: commonKind(members),
|
|
18
|
+
privacy: anyPrivatePrivacy(members),
|
|
19
|
+
async getBytes(length, reqOpts) {
|
|
20
|
+
const controller = new AbortController();
|
|
21
|
+
const signal = reqOpts?.signal
|
|
22
|
+
? AbortSignal.any([reqOpts.signal, controller.signal])
|
|
23
|
+
: controller.signal;
|
|
24
|
+
const tasks = members.map((member) => member.getBytes(length, { signal, timeoutMs: reqOpts?.timeoutMs }).catch((error) => {
|
|
25
|
+
controller.abort(); // fail fast: stop the remaining in-flight requests
|
|
26
|
+
throw toEntropyError(error, member.name);
|
|
27
|
+
}));
|
|
28
|
+
const settled = await Promise.allSettled(tasks);
|
|
29
|
+
const failures = settled
|
|
30
|
+
.filter((s) => s.status === 'rejected')
|
|
31
|
+
.map((s) => toEntropyError(s.reason, name));
|
|
32
|
+
if (failures.length > 0) {
|
|
33
|
+
if (reqOpts?.signal?.aborted)
|
|
34
|
+
throw abortedError(name);
|
|
35
|
+
const primary = failures.filter((f) => f.code !== 'aborted');
|
|
36
|
+
throw new EntropyError('insufficient_entropy', `${failures.length}/${members.length} providers failed in ${name}`, {
|
|
37
|
+
provider: name,
|
|
38
|
+
cause: new AggregateError(primary.length > 0 ? primary : failures),
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const results = settled.map((s) => s.value);
|
|
42
|
+
let bytes;
|
|
43
|
+
try {
|
|
44
|
+
bytes = xorBytes(results.map((r) => r.bytes));
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
throw new EntropyError('bad_response', 'a member returned the wrong byte count', {
|
|
48
|
+
provider: name,
|
|
49
|
+
cause: error,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return { bytes, sources: results.flatMap((r) => [...r.sources]) };
|
|
53
|
+
},
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=xor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xor.js","sourceRoot":"","sources":["../../src/strategies/xor.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/** What kind of physical (or algorithmic) process the randomness comes from. */
|
|
2
|
+
export type EntropyKind = 'qrng' | 'trng' | 'beacon' | 'csprng' | 'mixed';
|
|
3
|
+
/**
|
|
4
|
+
* Whether the randomness is served privately to the caller or published for
|
|
5
|
+
* everyone. `public` sources (beacons) must NEVER seed secrets on their own —
|
|
6
|
+
* everyone in the world sees the same bytes.
|
|
7
|
+
*/
|
|
8
|
+
export type EntropyPrivacy = 'private' | 'public';
|
|
9
|
+
/** Static identity + classification of an entropy source. */
|
|
10
|
+
export interface EntropySourceInfo {
|
|
11
|
+
readonly name: string;
|
|
12
|
+
readonly kind: EntropyKind;
|
|
13
|
+
readonly privacy: EntropyPrivacy;
|
|
14
|
+
}
|
|
15
|
+
export interface EntropyRequestOptions {
|
|
16
|
+
signal?: AbortSignal;
|
|
17
|
+
/** Budget for the whole call including internal chunking/retries. Default 10_000. */
|
|
18
|
+
timeoutMs?: number;
|
|
19
|
+
}
|
|
20
|
+
export interface EntropyResult {
|
|
21
|
+
/** Exactly as many bytes as requested. */
|
|
22
|
+
bytes: Uint8Array;
|
|
23
|
+
/** Provider(s) that actually contributed bytes to this result. */
|
|
24
|
+
sources: readonly EntropySourceInfo[];
|
|
25
|
+
}
|
|
26
|
+
export interface EntropyStreamOptions extends EntropyRequestOptions {
|
|
27
|
+
/** Desired chunk size in bytes. Default: the provider's natural chunk size. */
|
|
28
|
+
chunkBytes?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface EntropyProvider extends EntropySourceInfo {
|
|
31
|
+
/** Resolve with exactly `length` bytes or throw `EntropyError`. Never partial. */
|
|
32
|
+
getBytes(length: number, opts?: EntropyRequestOptions): Promise<EntropyResult>;
|
|
33
|
+
/** Lazy, pull-based. No I/O before the first `next()`. Ends via `return()`/abort. */
|
|
34
|
+
stream(opts?: EntropyStreamOptions): AsyncIterable<Uint8Array>;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAA;AAEzE;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,QAAQ,CAAA;AAEjD,6DAA6D;AAC7D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAA;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,qFAAqF;IACrF,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,KAAK,EAAE,UAAU,CAAA;IACjB,kEAAkE;IAClE,OAAO,EAAE,SAAS,iBAAiB,EAAE,CAAA;CACtC;AAED,MAAM,WAAW,oBAAqB,SAAQ,qBAAqB;IACjE,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,eAAgB,SAAQ,iBAAiB;IACxD,kFAAkF;IAClF,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IAC9E,qFAAqF;IACrF,MAAM,CAAC,IAAI,CAAC,EAAE,oBAAoB,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;CAC/D"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@mindpeeker/entropy",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Provider-pluggable quantum (QRNG) and true (TRNG) randomness for web and Node — ANU, RANDOM.ORG, drand, NIST beacon and more, with composable fallback/xor/race strategies and streaming.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"license": "MIT",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=20.3"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
14
|
+
"exports": {
|
|
15
|
+
".": {
|
|
16
|
+
"types": "./dist/index.d.ts",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./providers": {
|
|
20
|
+
"types": "./dist/providers/index.d.ts",
|
|
21
|
+
"default": "./dist/providers/index.js"
|
|
22
|
+
},
|
|
23
|
+
"./node": {
|
|
24
|
+
"types": "./dist/node/index.d.ts",
|
|
25
|
+
"node": "./dist/node/index.js"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"scripts": {
|
|
29
|
+
"build": "tsc -p tsconfig.build.json && tsc -p tsconfig.build.node.json",
|
|
30
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
31
|
+
"test": "bun test",
|
|
32
|
+
"bench": "bun scripts/bench.ts",
|
|
33
|
+
"bench:stream": "bun scripts/stream-bench.ts",
|
|
34
|
+
"quality": "bun scripts/quality.ts",
|
|
35
|
+
"demo:negentropy": "bun scripts/negentropy-demo.ts"
|
|
36
|
+
},
|
|
37
|
+
"publishConfig": {
|
|
38
|
+
"access": "public"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"qrng",
|
|
42
|
+
"trng",
|
|
43
|
+
"entropy",
|
|
44
|
+
"random",
|
|
45
|
+
"quantum",
|
|
46
|
+
"randomness",
|
|
47
|
+
"drand",
|
|
48
|
+
"csprng",
|
|
49
|
+
"anu",
|
|
50
|
+
"random.org"
|
|
51
|
+
]
|
|
52
|
+
}
|