@kya-os/mcp 1.18.0 → 1.21.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.
Files changed (80) hide show
  1. package/CHANGELOG.md +377 -0
  2. package/CONFORMANCE.md +10 -4
  3. package/README.md +58 -1
  4. package/SPEC.md +37 -3
  5. package/dist/card/cimd.js +6 -2
  6. package/dist/card/cimd.js.map +1 -1
  7. package/dist/card/index.d.ts +1 -0
  8. package/dist/card/index.js +1 -0
  9. package/dist/card/index.js.map +1 -1
  10. package/dist/card/revocation.d.ts +21 -10
  11. package/dist/card/revocation.js +12 -16
  12. package/dist/card/revocation.js.map +1 -1
  13. package/dist/card/status-list-proof.d.ts +32 -0
  14. package/dist/card/status-list-proof.js +102 -0
  15. package/dist/card/status-list-proof.js.map +1 -0
  16. package/dist/delegation/bitstring.d.ts +41 -6
  17. package/dist/delegation/bitstring.js +36 -21
  18. package/dist/delegation/bitstring.js.map +1 -1
  19. package/dist/delegation/index.d.ts +1 -0
  20. package/dist/delegation/index.js +1 -0
  21. package/dist/delegation/index.js.map +1 -1
  22. package/dist/delegation/statuslist-manager.d.ts +20 -4
  23. package/dist/delegation/statuslist-manager.js +16 -0
  24. package/dist/delegation/statuslist-manager.js.map +1 -1
  25. package/dist/delegation/verification-method-key.d.ts +4 -1
  26. package/dist/delegation/verification-method-key.js.map +1 -1
  27. package/dist/index.d.ts +2 -1
  28. package/dist/index.js +2 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/middleware/index.d.ts +3 -1
  31. package/dist/middleware/index.js +2 -0
  32. package/dist/middleware/index.js.map +1 -1
  33. package/dist/middleware/kya-os-transport.d.ts +43 -12
  34. package/dist/middleware/kya-os-transport.js +151 -28
  35. package/dist/middleware/kya-os-transport.js.map +1 -1
  36. package/dist/middleware/mcp-tool-callback.d.ts +48 -0
  37. package/dist/middleware/mcp-tool-callback.js +38 -0
  38. package/dist/middleware/mcp-tool-callback.js.map +1 -0
  39. package/dist/middleware/serve-in-process.d.ts +41 -0
  40. package/dist/middleware/serve-in-process.js +86 -0
  41. package/dist/middleware/serve-in-process.js.map +1 -0
  42. package/dist/middleware/with-kya-os-server.d.ts +14 -3
  43. package/dist/middleware/with-kya-os-server.js +4 -1
  44. package/dist/middleware/with-kya-os-server.js.map +1 -1
  45. package/dist/middleware/with-kya-os.config-types.d.ts +24 -0
  46. package/dist/middleware/with-kya-os.d.ts +4 -0
  47. package/dist/middleware/with-kya-os.delegation-gate.d.ts +2 -1
  48. package/dist/middleware/with-kya-os.delegation-gate.js +12 -18
  49. package/dist/middleware/with-kya-os.delegation-gate.js.map +1 -1
  50. package/dist/middleware/with-kya-os.delegation-verify.d.ts +7 -12
  51. package/dist/middleware/with-kya-os.delegation-verify.js +37 -9
  52. package/dist/middleware/with-kya-os.delegation-verify.js.map +1 -1
  53. package/dist/middleware/with-kya-os.deps.d.ts +15 -4
  54. package/dist/middleware/with-kya-os.helpers.d.ts +5 -0
  55. package/dist/middleware/with-kya-os.helpers.js +13 -0
  56. package/dist/middleware/with-kya-os.helpers.js.map +1 -1
  57. package/dist/middleware/with-kya-os.js +23 -0
  58. package/dist/middleware/with-kya-os.js.map +1 -1
  59. package/dist/middleware/with-kya-os.outcome.d.ts +18 -0
  60. package/dist/middleware/with-kya-os.outcome.js +36 -0
  61. package/dist/middleware/with-kya-os.outcome.js.map +1 -0
  62. package/dist/middleware/with-kya-os.policy-gate.d.ts +2 -1
  63. package/dist/middleware/with-kya-os.policy-gate.js +2 -1
  64. package/dist/middleware/with-kya-os.policy-gate.js.map +1 -1
  65. package/dist/middleware/with-kya-os.session.d.ts +76 -10
  66. package/dist/middleware/with-kya-os.session.js +739 -164
  67. package/dist/middleware/with-kya-os.session.js.map +1 -1
  68. package/dist/middleware/with-kya-os.types.d.ts +102 -8
  69. package/dist/proof/generator.d.ts +13 -0
  70. package/dist/proof/generator.js +15 -0
  71. package/dist/proof/generator.js.map +1 -1
  72. package/dist/proof/verifier.js +14 -9
  73. package/dist/proof/verifier.js.map +1 -1
  74. package/dist/utils/statuslist-bits.d.ts +15 -0
  75. package/dist/utils/statuslist-bits.js +44 -6
  76. package/dist/utils/statuslist-bits.js.map +1 -1
  77. package/dist/utils/statuslist-gzip.d.ts +18 -0
  78. package/dist/utils/statuslist-gzip.js +45 -0
  79. package/dist/utils/statuslist-gzip.js.map +1 -0
  80. package/package.json +3 -1
@@ -39,4 +39,5 @@ export * from './delegation.js';
39
39
  export * from './builder.js';
40
40
  export * from './middleware.js';
41
41
  export * from './revocation.js';
42
+ export * from './status-list-proof.js';
42
43
  export { createSafeFetch, fetchTransport, isBlockedAddress, type SafeFetch, type SafeFetchOptions, type SafeFetchResponse, type SafeFetchTransport, type TransportInit, type DnsLookup, type DnsAddress, } from '../utils/safe-fetch.js';
@@ -39,6 +39,7 @@ export * from './delegation.js';
39
39
  export * from './builder.js';
40
40
  export * from './middleware.js';
41
41
  export * from './revocation.js';
42
+ export * from './status-list-proof.js';
42
43
  // The SSRF-hardened fetch is the card's production wiring for resolveCard / status-list
43
44
  // resolution — export it (and the address classifier) so consumers can actually reach it,
44
45
  // not just the mocked-transport unit tests.
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/card/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAEhC,wFAAwF;AACxF,0FAA0F;AAC1F,4CAA4C;AAC5C,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,GAQjB,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/card/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,cAAc,CAAC;AAC7B,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC;AAEvC,wFAAwF;AACxF,0FAA0F;AAC1F,4CAA4C;AAC5C,OAAO,EACL,eAAe,EACf,cAAc,EACd,gBAAgB,GAQjB,MAAM,wBAAwB,CAAC"}
@@ -10,11 +10,13 @@
10
10
  *
11
11
  * `createRevocationChecker` is the DEFAULT implementation over W3C Bitstring Status List v1.0
12
12
  * (`BitstringStatusListEntry` — the StatusList2021 SUCCESSOR). It resolves the entry's
13
- * `statusListCredential` through the injected, SSRF-hardened {@link SafeFetch} seam, inflates
14
- * the multibase / GZIP `encodedList` bitstring, and reads the bit at `statusListIndex`.
13
+ * `statusListCredential` through the injected, SSRF-hardened {@link SafeFetch} seam, checks the
14
+ * list's proof through the injected `verifyStatusList` seam when one is given, inflates the
15
+ * multibase / GZIP `encodedList` bitstring, and reads the bit at `statusListIndex`.
15
16
  *
16
- * FAIL-CLOSED is the invariant: an unreachable status list, a malformed credential, a
17
- * mismatched `statusPurpose`, or an out-of-range index all resolve to `{ revoked: true }` —
17
+ * FAIL-CLOSED is the invariant: an unreachable status list, a malformed credential, a list whose
18
+ * proof is rejected, a mismatched `statusPurpose`, or an out-of-range index all resolve to
19
+ * `{ revoked: true }` —
18
20
  * the absence of proof-of-liveness is treated as revoked, never as "probably fine".
19
21
  *
20
22
  * Each verdict also reports `fresh`: `true` only when read from a LIVE, in-validity-window
@@ -27,6 +29,7 @@
27
29
  */
28
30
  import type { SafeFetch } from '../utils/safe-fetch.js';
29
31
  import type { BitstringStatusListEntry } from './schema.js';
32
+ import type { StatusListProofVerifier } from './status-list-proof.js';
30
33
  /** The `statusPurpose` this checker evaluates by default (revocation, not suspension). */
31
34
  export declare const STATUS_PURPOSE_REVOCATION = "revocation";
32
35
  /**
@@ -73,12 +76,20 @@ export interface RevocationCheckerDeps {
73
76
  /** `statusPurpose` to honour; default {@link STATUS_PURPOSE_REVOCATION}. */
74
77
  statusPurpose?: string;
75
78
  /**
76
- * Injectable GZIP inflation seam ({@link Decompress}). DEFAULT = `node:zlib` `gunzipSync` bounded
77
- * to the 16 MiB {@link MAX_STATUS_LIST_BYTES} `maxOutputLength` cap (so a decompression bomb
78
- * THROWS mid-inflation ⇒ fail-closed, never allocating the whole payload). Non-Node runtimes
79
- * inject a `DecompressionStream`-based impl; when they do, the default is never referenced so a
80
- * bundler tree-shakes `node:zlib` out of the graph. An injected impl SHOULD bound its own output
81
- * — {@link decodeStatusList} still applies the cap as a post-inflation backstop regardless.
79
+ * Checks the fetched status-list credential's proof before any bit is read, as W3C Bitstring
80
+ * Status List v1.0 requires (SPEC.md §6.10). A list it rejects (`false` or a throw) resolves
81
+ * {@link FAIL_CLOSED}. {@link createStatusListProofVerifier} covers `eddsa-jcs-2022` lists.
82
+ * Without it the bits are read unchecked, so whoever serves the list can clear a revocation;
83
+ * it stays optional until 2.0 only so existing callers keep working.
84
+ */
85
+ verifyStatusList?: StatusListProofVerifier;
86
+ /**
87
+ * Injectable GZIP inflation seam ({@link Decompress}). DEFAULT = `statusListGzipCodec.decompress`,
88
+ * which loads `node:zlib` on first use and bounds inflation to the 16 MiB cap (so a decompression
89
+ * bomb THROWS mid-inflation ⇒ fail-closed, never allocating the whole payload). Non-Node
90
+ * runtimes inject a `DecompressionStream`-based impl; when they do, `node:zlib` is never loaded.
91
+ * An injected impl SHOULD bound its own output — {@link decodeStatusList} still applies the cap
92
+ * as a post-inflation backstop regardless.
82
93
  */
83
94
  decompress?: Decompress;
84
95
  }
@@ -10,11 +10,13 @@
10
10
  *
11
11
  * `createRevocationChecker` is the DEFAULT implementation over W3C Bitstring Status List v1.0
12
12
  * (`BitstringStatusListEntry` — the StatusList2021 SUCCESSOR). It resolves the entry's
13
- * `statusListCredential` through the injected, SSRF-hardened {@link SafeFetch} seam, inflates
14
- * the multibase / GZIP `encodedList` bitstring, and reads the bit at `statusListIndex`.
13
+ * `statusListCredential` through the injected, SSRF-hardened {@link SafeFetch} seam, checks the
14
+ * list's proof through the injected `verifyStatusList` seam when one is given, inflates the
15
+ * multibase / GZIP `encodedList` bitstring, and reads the bit at `statusListIndex`.
15
16
  *
16
- * FAIL-CLOSED is the invariant: an unreachable status list, a malformed credential, a
17
- * mismatched `statusPurpose`, or an out-of-range index all resolve to `{ revoked: true }` —
17
+ * FAIL-CLOSED is the invariant: an unreachable status list, a malformed credential, a list whose
18
+ * proof is rejected, a mismatched `statusPurpose`, or an out-of-range index all resolve to
19
+ * `{ revoked: true }` —
18
20
  * the absence of proof-of-liveness is treated as revoked, never as "probably fine".
19
21
  *
20
22
  * Each verdict also reports `fresh`: `true` only when read from a LIVE, in-validity-window
@@ -27,7 +29,8 @@
27
29
  */
28
30
  import { isRecord } from '../utils/guards.js';
29
31
  import { assertStatusPurpose } from '../utils/statuslist-purpose.js';
30
- import { MAX_STATUS_LIST_BYTES, decodeStatusListPayload, parseStatusListIndex, readStatusBit, } from '../utils/statuslist-bits.js';
32
+ import { decodeStatusListPayload, parseStatusListIndex, readStatusBit, } from '../utils/statuslist-bits.js';
33
+ import { statusListGzipCodec } from '../utils/statuslist-gzip.js';
31
34
  /** The `statusPurpose` this checker evaluates by default (revocation, not suspension). */
32
35
  export const STATUS_PURPOSE_REVOCATION = 'revocation';
33
36
  /** Fail-closed verdict: status indeterminate ⇒ treat as revoked AND not fresh. */
@@ -40,10 +43,13 @@ const FAIL_CLOSED = { revoked: true, fresh: false };
40
43
  export function createRevocationChecker(deps) {
41
44
  const clock = deps.now ?? (() => Date.now());
42
45
  const wantedPurpose = deps.statusPurpose ?? STATUS_PURPOSE_REVOCATION;
43
- const decompress = deps.decompress ?? defaultNodeGunzip;
46
+ const decompress = deps.decompress ?? statusListGzipCodec.decompress;
44
47
  return async function check(entry) {
45
48
  try {
46
49
  const credential = await fetchStatusList(entry.statusListCredential, deps.fetch);
50
+ if (deps.verifyStatusList && (await deps.verifyStatusList(credential)) !== true) {
51
+ throw new Error('revocation: status-list proof rejected');
52
+ }
47
53
  assertStatusPurpose(statusListSubject(credential).statusPurpose, wantedPurpose);
48
54
  const bits = await decodeStatusList(credential, decompress);
49
55
  const revoked = readStatusBit(bits, parseStatusListIndex(entry.statusListIndex));
@@ -100,16 +106,6 @@ function statusListSubject(credential) {
100
106
  throw new Error('revocation: status-list has no credentialSubject');
101
107
  return subject;
102
108
  }
103
- /**
104
- * DEFAULT {@link Decompress}: `node:zlib` `gunzipSync` bounded to {@link MAX_STATUS_LIST_BYTES}
105
- * so an oversized inflation THROWS mid-stream (fail-closed) instead of allocating the whole bomb.
106
- * Pulled in via a DYNAMIC `import('node:zlib')` — only when no `decompress` was injected — so a
107
- * Workers / Deno / browser bundle that supplies its own seam keeps `node:zlib` out of the graph.
108
- */
109
- async function defaultNodeGunzip(bytes) {
110
- const { gunzipSync } = await import('node:zlib');
111
- return new Uint8Array(gunzipSync(bytes, { maxOutputLength: MAX_STATUS_LIST_BYTES }));
112
- }
113
109
  /**
114
110
  * Inflate the multibase / GZIP `encodedList` into the raw status bitstring bytes via the shared
115
111
  * `decodeStatusListPayload` primitive (strip + decode + POST-inflation 16 MiB backstop): the
@@ -1 +1 @@
1
- {"version":3,"file":"revocation.js","sourceRoot":"","sources":["../../src/card/revocation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"revocation.js","sourceRoot":"","sources":["../../src/card/revocation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * KYA-OS Entity Card — status-list PROOF check (W3C Data Integrity, `eddsa-jcs-2022`).
3
+ *
4
+ * W3C Bitstring Status List v1.0 has a verifier check every proof on the status-list credential
5
+ * before it reads a bit: the list is what says a credential is revoked, so a list nobody verified
6
+ * lets whoever serves it clear a revocation. {@link createRevocationChecker} takes that check as
7
+ * its `verifyStatusList` seam, the way the rest of the card layer takes credential proofs, and
8
+ * {@link createStatusListProofVerifier} is a ready implementation for lists signed with
9
+ * `DataIntegrityProof` / `eddsa-jcs-2022` by an Ed25519 key in the list issuer's DID document.
10
+ *
11
+ * The construction is the cryptosuite's, step for step: the proof options without `proofValue`,
12
+ * carrying the document's `@context`, and the document without `proof`, each RFC 8785-canonicalized
13
+ * and SHA-256 hashed; the signature is Ed25519 over the two hashes concatenated, `proofValue` is
14
+ * base58btc multibase. The key is the issuer's verification method `proof.verificationMethod`
15
+ * names, and that method must belong to the list's `issuer`. Every failure returns `false`.
16
+ */
17
+ import type { DIDResolver } from '../delegation/vc-verifier.types.js';
18
+ /**
19
+ * Checks a fetched status-list credential's proof. Resolves `true` only when the proof verifies;
20
+ * `false` or a throw rejects the list, and the revocation checker then fails closed.
21
+ */
22
+ export type StatusListProofVerifier = (credential: Record<string, unknown>) => boolean | Promise<boolean>;
23
+ /** Dependencies for {@link createStatusListProofVerifier}. */
24
+ export interface StatusListProofVerifierDeps {
25
+ /** Resolves the list issuer's DID document, e.g. `createDidWebResolver` or `createDidKeyResolver`. */
26
+ didResolver: DIDResolver;
27
+ }
28
+ /**
29
+ * Build a {@link StatusListProofVerifier} for `DataIntegrityProof` / `eddsa-jcs-2022` status lists.
30
+ * Pass it to {@link createRevocationChecker} as `verifyStatusList`.
31
+ */
32
+ export declare function createStatusListProofVerifier(deps: StatusListProofVerifierDeps): StatusListProofVerifier;
@@ -0,0 +1,102 @@
1
+ /**
2
+ * KYA-OS Entity Card — status-list PROOF check (W3C Data Integrity, `eddsa-jcs-2022`).
3
+ *
4
+ * W3C Bitstring Status List v1.0 has a verifier check every proof on the status-list credential
5
+ * before it reads a bit: the list is what says a credential is revoked, so a list nobody verified
6
+ * lets whoever serves it clear a revocation. {@link createRevocationChecker} takes that check as
7
+ * its `verifyStatusList` seam, the way the rest of the card layer takes credential proofs, and
8
+ * {@link createStatusListProofVerifier} is a ready implementation for lists signed with
9
+ * `DataIntegrityProof` / `eddsa-jcs-2022` by an Ed25519 key in the list issuer's DID document.
10
+ *
11
+ * The construction is the cryptosuite's, step for step: the proof options without `proofValue`,
12
+ * carrying the document's `@context`, and the document without `proof`, each RFC 8785-canonicalized
13
+ * and SHA-256 hashed; the signature is Ed25519 over the two hashes concatenated, `proofValue` is
14
+ * base58btc multibase. The key is the issuer's verification method `proof.verificationMethod`
15
+ * names, and that method must belong to the list's `issuer`. Every failure returns `false`.
16
+ */
17
+ import { canonicalize } from 'json-canonicalize';
18
+ import { isRecord } from '../utils/guards.js';
19
+ import { base58Decode } from '../utils/base58.js';
20
+ import { verificationMethodJwk } from '../delegation/verification-method-key.js';
21
+ import { ed25519VerifyRaw, sha256 } from './proof/canonical.js';
22
+ const ED25519_SIGNATURE_LENGTH = 64;
23
+ /** A 64-byte signature is at most 88 base58 characters; bound the decode before it runs. */
24
+ const MAX_PROOF_VALUE_BASE58 = 100;
25
+ /**
26
+ * Build a {@link StatusListProofVerifier} for `DataIntegrityProof` / `eddsa-jcs-2022` status lists.
27
+ * Pass it to {@link createRevocationChecker} as `verifyStatusList`.
28
+ */
29
+ export function createStatusListProofVerifier(deps) {
30
+ return async function verifyStatusList(credential) {
31
+ try {
32
+ return await verifyEddsaJcs2022(credential, deps.didResolver);
33
+ }
34
+ catch {
35
+ return false;
36
+ }
37
+ };
38
+ }
39
+ async function verifyEddsaJcs2022(document, didResolver) {
40
+ const proof = document.proof;
41
+ // One proof object: a proof set or chain is not a shape this check reads.
42
+ if (!isRecord(proof))
43
+ return false;
44
+ if (proof.type !== 'DataIntegrityProof' || proof.cryptosuite !== 'eddsa-jcs-2022')
45
+ return false;
46
+ if (proof.proofPurpose !== 'assertionMethod')
47
+ return false;
48
+ const { proofValue, verificationMethod } = proof;
49
+ if (typeof proofValue !== 'string' || !proofValue.startsWith('z'))
50
+ return false;
51
+ if (typeof verificationMethod !== 'string')
52
+ return false;
53
+ const issuer = issuerOf(document);
54
+ const did = verificationMethod.split('#')[0];
55
+ if (issuer === undefined || did !== issuer)
56
+ return false;
57
+ const signature = base58Decode(proofValue.slice(1), MAX_PROOF_VALUE_BASE58);
58
+ if (signature.length !== ED25519_SIGNATURE_LENGTH)
59
+ return false;
60
+ const didDocument = await didResolver.resolve(did);
61
+ const method = didDocument?.verificationMethod?.find((vm) => methodId(vm, did) === verificationMethod);
62
+ const jwk = method ? verificationMethodJwk(method) : undefined;
63
+ if (!jwk || jwk.kty !== 'OKP' || jwk.crv !== 'Ed25519')
64
+ return false;
65
+ const unsecured = { ...document };
66
+ delete unsecured.proof;
67
+ const options = { ...proof };
68
+ delete options.proofValue;
69
+ if (options['@context'] !== undefined) {
70
+ // The proof may name its own @context only as a prefix of the document's.
71
+ if (!startsWith(contexts(document['@context']), contexts(options['@context'])))
72
+ return false;
73
+ unsecured['@context'] = options['@context'];
74
+ }
75
+ if (unsecured['@context'] !== undefined)
76
+ options['@context'] = unsecured['@context'];
77
+ const encoder = new TextEncoder();
78
+ const proofHash = await sha256(encoder.encode(canonicalize(options)));
79
+ const documentHash = await sha256(encoder.encode(canonicalize(unsecured)));
80
+ const hashData = new Uint8Array(proofHash.length + documentHash.length);
81
+ hashData.set(proofHash, 0);
82
+ hashData.set(documentHash, proofHash.length);
83
+ return ed25519VerifyRaw(jwk, signature, hashData);
84
+ }
85
+ /** The credential's `issuer` DID, whether a bare string or an `{ id }` object. */
86
+ function issuerOf(document) {
87
+ const issuer = document.issuer;
88
+ if (typeof issuer === 'string')
89
+ return issuer;
90
+ return isRecord(issuer) && typeof issuer.id === 'string' ? issuer.id : undefined;
91
+ }
92
+ /** A verification method's absolute id: DID documents may write it relative (`#key-1`). */
93
+ function methodId(method, did) {
94
+ return method.id.startsWith('#') ? `${did}${method.id}` : method.id;
95
+ }
96
+ function contexts(value) {
97
+ return Array.isArray(value) ? value : value === undefined ? [] : [value];
98
+ }
99
+ function startsWith(whole, prefix) {
100
+ return prefix.length <= whole.length && prefix.every((entry, i) => canonicalize(entry) === canonicalize(whole[i]));
101
+ }
102
+ //# sourceMappingURL=status-list-proof.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status-list-proof.js","sourceRoot":"","sources":["../../src/card/status-list-proof.ts"],"names":[],"mappings":"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"}
@@ -13,9 +13,20 @@
13
13
  *
14
14
  * Related Spec: W3C Bitstring Status List v1.0 (successor to StatusList2021)
15
15
  */
16
+ /**
17
+ * Compresses a status bitstring for publication. MUST produce GZIP: it is the
18
+ * only compression a status-list reader accepts, and `encode()` throws on
19
+ * anything else. {@link statusListGzipCodec} is the shipped implementation
20
+ * and the default.
21
+ */
16
22
  export interface CompressionFunction {
17
23
  compress(data: Uint8Array): Promise<Uint8Array>;
18
24
  }
25
+ /**
26
+ * Inflates a GZIP status-list payload. MUST reject input that is not GZIP;
27
+ * a decoder throws when it returns its input unchanged. {@link statusListGzipCodec}
28
+ * is the shipped implementation and the default.
29
+ */
19
30
  export interface DecompressionFunction {
20
31
  decompress(data: Uint8Array): Promise<Uint8Array>;
21
32
  }
@@ -23,22 +34,46 @@ export declare class BitstringManager {
23
34
  private compressor;
24
35
  private bits;
25
36
  private size;
26
- constructor(size: number, compressor: CompressionFunction, _decompressor: DecompressionFunction);
37
+ /**
38
+ * @param compressor - GZIP-compresses the bitstring on `encode()`. Defaults
39
+ * to {@link statusListGzipCodec}; `encode()` throws on output that is not GZIP.
40
+ * @param _decompressor - Accepted for signature symmetry with `decode()` and
41
+ * `fromSetBits()`, and for back-compat. The instance never decompresses:
42
+ * `decode()` inflates before construction, so nothing is stored.
43
+ */
44
+ constructor(size: number, compressor?: CompressionFunction, _decompressor?: DecompressionFunction);
27
45
  setBit(index: number, value: boolean): void;
28
46
  getBit(index: number): boolean;
29
47
  getSetBits(): number[];
30
48
  encode(): Promise<string>;
31
- static decode(encodedList: string, compressor: CompressionFunction, decompressor: DecompressionFunction): Promise<BitstringManager>;
49
+ /**
50
+ * Decode an `encodedList` into a manager.
51
+ *
52
+ * @param compressor - Used by the returned manager's `encode()`. Defaults to
53
+ * {@link statusListGzipCodec}.
54
+ * @param decompressor - Inflates the GZIP payload. Defaults to
55
+ * {@link statusListGzipCodec}; decoding throws on a payload that is not
56
+ * GZIP and on a decompressor that returns its input unchanged.
57
+ */
58
+ static decode(encodedList: string, compressor?: CompressionFunction, decompressor?: DecompressionFunction): Promise<BitstringManager>;
32
59
  getRawBits(): Uint8Array;
33
60
  getSize(): number;
34
- private base64urlEncode;
35
- private bytesToBase64;
36
- static fromSetBits(size: number, setBits: number[], compressor: CompressionFunction, decompressor: DecompressionFunction): BitstringManager;
61
+ /**
62
+ * A manager of `size` entries with `setBits` set.
63
+ *
64
+ * @param compressor - Used by `encode()`. Defaults to {@link statusListGzipCodec}.
65
+ * @param decompressor - Accepted for symmetry with `decode()`; unused.
66
+ */
67
+ static fromSetBits(size: number, setBits: number[], compressor?: CompressionFunction, decompressor?: DecompressionFunction): BitstringManager;
37
68
  }
38
69
  /**
39
70
  * Read one status bit straight off an `encodedList` (decode + bounded inflate +
40
71
  * MSB-first read via `utils/statuslist-bits`). Fail-CLOSED: an out-of-range or
41
72
  * NaN index cannot be proven clear, so `readStatusBit` throws rather than
42
73
  * reading as "not set".
74
+ *
75
+ * @param decompressor - Inflates the GZIP payload. Defaults to
76
+ * {@link statusListGzipCodec}; reading throws on a payload that is not GZIP
77
+ * and on a decompressor that returns its input unchanged.
43
78
  */
44
- export declare function isIndexSet(encodedList: string, index: number, decompressor: DecompressionFunction): Promise<boolean>;
79
+ export declare function isIndexSet(encodedList: string, index: number, decompressor?: DecompressionFunction): Promise<boolean>;
@@ -13,16 +13,24 @@
13
13
  *
14
14
  * Related Spec: W3C Bitstring Status List v1.0 (successor to StatusList2021)
15
15
  */
16
- import { MULTIBASE_BASE64URL, decodeStatusListPayload, readStatusBit, } from '../utils/statuslist-bits.js';
16
+ import { decodeStatusListPayload, encodeStatusListPayload, readStatusBit, } from '../utils/statuslist-bits.js';
17
+ import { statusListGzipCodec } from '../utils/statuslist-gzip.js';
18
+ /** Inflate an `encodedList` to its raw bitstring, with the shipped GZIP codec by default. */
19
+ function inflate(encodedList, decompressor = statusListGzipCodec) {
20
+ return decodeStatusListPayload(encodedList, (bytes) => decompressor.decompress(bytes));
21
+ }
17
22
  export class BitstringManager {
18
23
  compressor;
19
24
  bits;
20
25
  size;
21
- constructor(size, compressor,
22
- // Accepted for signature symmetry with decode()/fromSetBits() and public
23
- // back-compat, but the INSTANCE never decompresses: decode() inflates via
24
- // the shared inflateStatusList() before construction, so no field is stored.
25
- _decompressor) {
26
+ /**
27
+ * @param compressor - GZIP-compresses the bitstring on `encode()`. Defaults
28
+ * to {@link statusListGzipCodec}; `encode()` throws on output that is not GZIP.
29
+ * @param _decompressor - Accepted for signature symmetry with `decode()` and
30
+ * `fromSetBits()`, and for back-compat. The instance never decompresses:
31
+ * `decode()` inflates before construction, so nothing is stored.
32
+ */
33
+ constructor(size, compressor = statusListGzipCodec, _decompressor) {
26
34
  this.compressor = compressor;
27
35
  this.size = size;
28
36
  const byteCount = Math.ceil(size / 8);
@@ -63,11 +71,19 @@ export class BitstringManager {
63
71
  return setBits;
64
72
  }
65
73
  async encode() {
66
- const compressed = await this.compressor.compress(this.bits);
67
- return MULTIBASE_BASE64URL + this.base64urlEncode(compressed);
74
+ return encodeStatusListPayload(this.bits, (bytes) => this.compressor.compress(bytes));
68
75
  }
76
+ /**
77
+ * Decode an `encodedList` into a manager.
78
+ *
79
+ * @param compressor - Used by the returned manager's `encode()`. Defaults to
80
+ * {@link statusListGzipCodec}.
81
+ * @param decompressor - Inflates the GZIP payload. Defaults to
82
+ * {@link statusListGzipCodec}; decoding throws on a payload that is not
83
+ * GZIP and on a decompressor that returns its input unchanged.
84
+ */
69
85
  static async decode(encodedList, compressor, decompressor) {
70
- const decompressed = await decodeStatusListPayload(encodedList, (bytes) => decompressor.decompress(bytes));
86
+ const decompressed = await inflate(encodedList, decompressor);
71
87
  const size = decompressed.length * 8;
72
88
  const manager = new BitstringManager(size, compressor, decompressor);
73
89
  manager.bits = decompressed;
@@ -79,16 +95,12 @@ export class BitstringManager {
79
95
  getSize() {
80
96
  return this.size;
81
97
  }
82
- base64urlEncode(data) {
83
- const base64 = this.bytesToBase64(data);
84
- return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
85
- }
86
- bytesToBase64(bytes) {
87
- const binary = Array.from(bytes)
88
- .map((byte) => String.fromCharCode(byte))
89
- .join('');
90
- return btoa(binary);
91
- }
98
+ /**
99
+ * A manager of `size` entries with `setBits` set.
100
+ *
101
+ * @param compressor - Used by `encode()`. Defaults to {@link statusListGzipCodec}.
102
+ * @param decompressor - Accepted for symmetry with `decode()`; unused.
103
+ */
92
104
  static fromSetBits(size, setBits, compressor, decompressor) {
93
105
  const manager = new BitstringManager(size, compressor, decompressor);
94
106
  for (const index of setBits) {
@@ -102,9 +114,12 @@ export class BitstringManager {
102
114
  * MSB-first read via `utils/statuslist-bits`). Fail-CLOSED: an out-of-range or
103
115
  * NaN index cannot be proven clear, so `readStatusBit` throws rather than
104
116
  * reading as "not set".
117
+ *
118
+ * @param decompressor - Inflates the GZIP payload. Defaults to
119
+ * {@link statusListGzipCodec}; reading throws on a payload that is not GZIP
120
+ * and on a decompressor that returns its input unchanged.
105
121
  */
106
122
  export async function isIndexSet(encodedList, index, decompressor) {
107
- const decompressed = await decodeStatusListPayload(encodedList, (bytes) => decompressor.decompress(bytes));
108
- return readStatusBit(decompressed, index);
123
+ return readStatusBit(await inflate(encodedList, decompressor), index);
109
124
  }
110
125
  //# sourceMappingURL=bitstring.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bitstring.js","sourceRoot":"","sources":["../../src/delegation/bitstring.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bitstring.js","sourceRoot":"","sources":["../../src/delegation/bitstring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,aAAa,GACd,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAqBlE,6FAA6F;AAC7F,SAAS,OAAO,CACd,WAAmB,EACnB,eAAsC,mBAAmB;IAEzD,OAAO,uBAAuB,CAAC,WAAW,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AACzF,CAAC;AAED,MAAM,OAAO,gBAAgB;IAajB;IAZF,IAAI,CAAa;IACjB,IAAI,CAAS;IAErB;;;;;;OAMG;IACH,YACE,IAAY,EACJ,aAAkC,mBAAmB,EAC7D,aAAqC;QAD7B,eAAU,GAAV,UAAU,CAA2C;QAG7D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,KAAa,EAAE,KAAc;QAClC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAChE,2FAA2F;YAC3F,+FAA+F;YAC/F,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,oBAAoB,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAE3B,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,IAAI,CAAC,SAAS,CAAE,IAAI,IAAI,IAAI,QAAQ,CAAC,CAAC,kCAAkC;QAC/E,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,SAAS,CAAE,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IAED,MAAM,CAAC,KAAa;QAClB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAChE,2FAA2F;YAC3F,+FAA+F;YAC/F,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,oBAAoB,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1E,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,KAAK,GAAG,CAAC,CAAC;QAE3B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAE,GAAG,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,kBAAkB;IAC/E,CAAC;IAED,UAAU;QACR,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM;QACV,OAAO,uBAAuB,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,CAAC;IAED;;;;;;;;OAQG;IACH,MAAM,CAAC,KAAK,CAAC,MAAM,CACjB,WAAmB,EACnB,UAAgC,EAChC,YAAoC;QAEpC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;QAE9D,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACrE,OAAO,CAAC,IAAI,GAAG,YAAY,CAAC;QAC5B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,OAAO;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,WAAW,CAChB,IAAY,EACZ,OAAiB,EACjB,UAAgC,EAChC,YAAoC;QAEpC,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;QACrE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,WAAmB,EACnB,KAAa,EACb,YAAoC;IAEpC,OAAO,aAAa,CAAC,MAAM,OAAO,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,KAAK,CAAC,CAAC;AACxE,CAAC"}
@@ -10,6 +10,7 @@ export * from './status-cache.js';
10
10
  export * from './verification-method-key.js';
11
11
  export * from './vc-jwt-verify.js';
12
12
  export * from './bitstring.js';
13
+ export { statusListGzipCodec } from '../utils/statuslist-gzip.js';
13
14
  export * from './statuslist-manager.js';
14
15
  export * from './delegation-graph.js';
15
16
  export * from './cascading-revocation.js';
@@ -10,6 +10,7 @@ export * from './status-cache.js';
10
10
  export * from './verification-method-key.js';
11
11
  export * from './vc-jwt-verify.js';
12
12
  export * from './bitstring.js';
13
+ export { statusListGzipCodec } from '../utils/statuslist-gzip.js';
13
14
  export * from './statuslist-manager.js';
14
15
  export * from './delegation-graph.js';
15
16
  export * from './cascading-revocation.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delegation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,GAGjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/delegation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AACtC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,YAAY,CAAC;AAC3B,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC;AACvC,cAAc,4BAA4B,CAAC;AAC3C,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,0BAA0B,EAC1B,cAAc,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,cAAc,EACd,oBAAoB,EACpB,QAAQ,EACR,WAAW,EACX,WAAW,EACX,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,gBAAgB,GAGjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC"}
@@ -26,8 +26,8 @@ export declare class StatusList2021Manager {
26
26
  private storage;
27
27
  private identity;
28
28
  private signingFunction;
29
- private compressor;
30
- private decompressor;
29
+ private compressor?;
30
+ private decompressor?;
31
31
  private statusListBaseUrl;
32
32
  private defaultListSize;
33
33
  /**
@@ -36,7 +36,18 @@ export declare class StatusList2021Manager {
36
36
  * bit with a stale copy.
37
37
  */
38
38
  private updateLocks;
39
- constructor(storage: StatusListStorageProvider, identity: StatusListIdentityProvider, signingFunction: VCSigningFunction, compressor: CompressionFunction, decompressor: DecompressionFunction, options?: {
39
+ /**
40
+ * @param compressor - GZIP-compresses the bitstring of every list this
41
+ * manager publishes. Defaults to `statusListGzipCodec` (through
42
+ * {@link BitstringManager}). Status-list readers accept only GZIP, so a
43
+ * list published without it would read as revoked everywhere; publishing
44
+ * throws instead.
45
+ * @param decompressor - Inflates the GZIP lists this manager reads. Defaults
46
+ * to `statusListGzipCodec` (through {@link BitstringManager}). Reading
47
+ * throws on a list that is not GZIP and on a decompressor that returns its
48
+ * input unchanged.
49
+ */
50
+ constructor(storage: StatusListStorageProvider, identity: StatusListIdentityProvider, signingFunction: VCSigningFunction, compressor?: CompressionFunction | undefined, decompressor?: DecompressionFunction | undefined, options?: {
40
51
  statusListBaseUrl?: string;
41
52
  defaultListSize?: number;
42
53
  });
@@ -62,7 +73,12 @@ export declare class StatusList2021Manager {
62
73
  getStatusListBaseUrl(): string;
63
74
  getDefaultListSize(): number;
64
75
  }
65
- export declare function createStatusListManager(storage: StatusListStorageProvider, identity: StatusListIdentityProvider, signingFunction: VCSigningFunction, compressor: CompressionFunction, decompressor: DecompressionFunction, options?: {
76
+ /**
77
+ * Build a {@link StatusList2021Manager}. `compressor` and `decompressor`
78
+ * default to `statusListGzipCodec`; when supplied they MUST GZIP and
79
+ * inflate GZIP, as the manager's constructor documents.
80
+ */
81
+ export declare function createStatusListManager(storage: StatusListStorageProvider, identity: StatusListIdentityProvider, signingFunction: VCSigningFunction, compressor?: CompressionFunction, decompressor?: DecompressionFunction, options?: {
66
82
  statusListBaseUrl?: string;
67
83
  defaultListSize?: number;
68
84
  }): StatusList2021Manager;
@@ -23,6 +23,17 @@ export class StatusList2021Manager {
23
23
  * bit with a stale copy.
24
24
  */
25
25
  updateLocks = new Map();
26
+ /**
27
+ * @param compressor - GZIP-compresses the bitstring of every list this
28
+ * manager publishes. Defaults to `statusListGzipCodec` (through
29
+ * {@link BitstringManager}). Status-list readers accept only GZIP, so a
30
+ * list published without it would read as revoked everywhere; publishing
31
+ * throws instead.
32
+ * @param decompressor - Inflates the GZIP lists this manager reads. Defaults
33
+ * to `statusListGzipCodec` (through {@link BitstringManager}). Reading
34
+ * throws on a list that is not GZIP and on a decompressor that returns its
35
+ * input unchanged.
36
+ */
26
37
  constructor(storage, identity, signingFunction, compressor, decompressor, options) {
27
38
  this.storage = storage;
28
39
  this.identity = identity;
@@ -167,6 +178,11 @@ export class StatusList2021Manager {
167
178
  return this.defaultListSize;
168
179
  }
169
180
  }
181
+ /**
182
+ * Build a {@link StatusList2021Manager}. `compressor` and `decompressor`
183
+ * default to `statusListGzipCodec`; when supplied they MUST GZIP and
184
+ * inflate GZIP, as the manager's constructor documents.
185
+ */
170
186
  export function createStatusListManager(storage, identity, signingFunction, compressor, decompressor, options) {
171
187
  return new StatusList2021Manager(storage, identity, signingFunction, compressor, decompressor, options);
172
188
  }
@@ -1 +1 @@
1
- {"version":3,"file":"statuslist-manager.js","sourceRoot":"","sources":["../../src/delegation/statuslist-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"statuslist-manager.js","sourceRoot":"","sources":["../../src/delegation/statuslist-manager.ts"],"names":[],"mappings":"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"}