@kya-os/mcp 1.20.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.
- package/CHANGELOG.md +41 -0
- package/README.md +1 -1
- package/dist/card/revocation.d.ts +6 -6
- package/dist/card/revocation.js +3 -12
- package/dist/card/revocation.js.map +1 -1
- package/dist/delegation/bitstring.d.ts +41 -6
- package/dist/delegation/bitstring.js +36 -21
- package/dist/delegation/bitstring.js.map +1 -1
- package/dist/delegation/index.d.ts +1 -0
- package/dist/delegation/index.js +1 -0
- package/dist/delegation/index.js.map +1 -1
- package/dist/delegation/statuslist-manager.d.ts +20 -4
- package/dist/delegation/statuslist-manager.js +16 -0
- package/dist/delegation/statuslist-manager.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/utils/statuslist-bits.d.ts +15 -0
- package/dist/utils/statuslist-bits.js +44 -6
- package/dist/utils/statuslist-bits.js.map +1 -1
- package/dist/utils/statuslist-gzip.d.ts +18 -0
- package/dist/utils/statuslist-gzip.js +45 -0
- package/dist/utils/statuslist-gzip.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,47 @@ Versioning: https://semver.org/spec/v2.0.0.html
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.21.0] - 2026-10-21
|
|
11
|
+
|
|
12
|
+
### Upgrading
|
|
13
|
+
|
|
14
|
+
- **A status-list manager given a compressor that does not GZIP now throws
|
|
15
|
+
instead of publishing.** Status-list readers accept only GZIP, so such a
|
|
16
|
+
list read as revoked for every credential it covered. A decompressor that
|
|
17
|
+
hands back its input unchanged now makes every read throw, where it read
|
|
18
|
+
the GZIP header as status bits. Drop the compressor and decompressor
|
|
19
|
+
arguments to use the shipped codec, or pass `statusListGzipCodec`. A list
|
|
20
|
+
already stored without GZIP, such as one published with the pass-through
|
|
21
|
+
pair the status-list example used, can no longer be read or updated:
|
|
22
|
+
reissue it, and the credentials it covers, with the codec.
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- **`statusListGzipCodec`, a GZIP codec for status lists.** One object is
|
|
27
|
+
both the `CompressionFunction` and the `DecompressionFunction` that
|
|
28
|
+
`StatusList2021Manager` and `BitstringManager` take. It loads `node:zlib`
|
|
29
|
+
on first use, so a bundle that injects its own codec does not pull it in,
|
|
30
|
+
and bounds inflation to the 16 MiB status-list cap. The Entity Card
|
|
31
|
+
revocation checker uses it as its default `decompress`.
|
|
32
|
+
- **The compressor and decompressor of `StatusList2021Manager`,
|
|
33
|
+
`createStatusListManager`, `BitstringManager` (its constructor, `decode`
|
|
34
|
+
and `fromSetBits`) and `isIndexSet` are optional** and default to
|
|
35
|
+
`statusListGzipCodec`.
|
|
36
|
+
|
|
37
|
+
### Fixed
|
|
38
|
+
|
|
39
|
+
- **`StatusList2021Manager` could publish status lists that every other
|
|
40
|
+
reader took as revoked.** The manager required a compressor and
|
|
41
|
+
decompressor, the package shipped none, and its example passed a pair that
|
|
42
|
+
did not compress, so the lists it published were not GZIP and the Entity
|
|
43
|
+
Card revocation checker reported every entry revoked. Publishing now
|
|
44
|
+
refuses a list that is not GZIP, and the example uses the shipped codec.
|
|
45
|
+
- **A pass-through decompressor read revoked entries as live.** Reading a
|
|
46
|
+
GZIP list without inflating it took the GZIP header as status bits, which
|
|
47
|
+
left the first three entries clear whatever the issuer had set. Reading a
|
|
48
|
+
payload that is not GZIP, or one the decompressor returns unchanged, now
|
|
49
|
+
throws, on the delegation and Entity Card paths alike. Fixes #254.
|
|
50
|
+
|
|
10
51
|
## [1.20.0] - 2026-10-13
|
|
11
52
|
|
|
12
53
|
1.19.0 was tagged but never published to npm; its changes (listed under
|
package/README.md
CHANGED
|
@@ -308,7 +308,7 @@ The server is operated by a maintainer on pinned releases; this repo does not de
|
|
|
308
308
|
| **Entity Card** | Typed, DID-anchored identity: fluent `card()` builder, `requireProof` per-request holder-of-key guard, CIMD OAuth on-ramp (`client_id` ⇄ `did:web`, MCP's default client auth), and `withKyaOsCard` projections that embed into MCP `server.json` / Server Cards (draft SEP-2127), A2A AgentCards, and NANDA AgentFacts |
|
|
309
309
|
| **Signed proofs** | Detached JWS over JCS-canonicalized request/response hashes |
|
|
310
310
|
| **Delegation credentials** | W3C Verifiable Credentials with scope constraints, rooted at a Responsible Party |
|
|
311
|
-
| **Revocation** | StatusList2021 bitstring with cascading revocation |
|
|
311
|
+
| **Revocation** | StatusList2021 bitstring with cascading revocation; lists are GZIP-compressed by the shipped `statusListGzipCodec`, the manager's default |
|
|
312
312
|
| **Replay prevention** | Nonce-based handshake with timestamp skew validation |
|
|
313
313
|
| **Verifiable auditability** | Typed producer events, authoritative atomic recorder, signed chain receipts, RFC 9162 checkpoints, independent observation, encrypted evidence references, replay bundles, and offline CLI |
|
|
314
314
|
| **Extensible** | Bring your own KMS, HSM, atomic nonce provider, or DID method |
|
|
@@ -84,12 +84,12 @@ export interface RevocationCheckerDeps {
|
|
|
84
84
|
*/
|
|
85
85
|
verifyStatusList?: StatusListProofVerifier;
|
|
86
86
|
/**
|
|
87
|
-
* Injectable GZIP inflation seam ({@link Decompress}). DEFAULT = `
|
|
88
|
-
* to the 16 MiB
|
|
89
|
-
* THROWS mid-inflation ⇒ fail-closed, never allocating the whole payload). Non-Node
|
|
90
|
-
* inject a `DecompressionStream`-based impl; when they do,
|
|
91
|
-
*
|
|
92
|
-
*
|
|
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.
|
|
93
93
|
*/
|
|
94
94
|
decompress?: Decompress;
|
|
95
95
|
}
|
package/dist/card/revocation.js
CHANGED
|
@@ -29,7 +29,8 @@
|
|
|
29
29
|
*/
|
|
30
30
|
import { isRecord } from '../utils/guards.js';
|
|
31
31
|
import { assertStatusPurpose } from '../utils/statuslist-purpose.js';
|
|
32
|
-
import {
|
|
32
|
+
import { decodeStatusListPayload, parseStatusListIndex, readStatusBit, } from '../utils/statuslist-bits.js';
|
|
33
|
+
import { statusListGzipCodec } from '../utils/statuslist-gzip.js';
|
|
33
34
|
/** The `statusPurpose` this checker evaluates by default (revocation, not suspension). */
|
|
34
35
|
export const STATUS_PURPOSE_REVOCATION = 'revocation';
|
|
35
36
|
/** Fail-closed verdict: status indeterminate ⇒ treat as revoked AND not fresh. */
|
|
@@ -42,7 +43,7 @@ const FAIL_CLOSED = { revoked: true, fresh: false };
|
|
|
42
43
|
export function createRevocationChecker(deps) {
|
|
43
44
|
const clock = deps.now ?? (() => Date.now());
|
|
44
45
|
const wantedPurpose = deps.statusPurpose ?? STATUS_PURPOSE_REVOCATION;
|
|
45
|
-
const decompress = deps.decompress ??
|
|
46
|
+
const decompress = deps.decompress ?? statusListGzipCodec.decompress;
|
|
46
47
|
return async function check(entry) {
|
|
47
48
|
try {
|
|
48
49
|
const credential = await fetchStatusList(entry.statusListCredential, deps.fetch);
|
|
@@ -105,16 +106,6 @@ function statusListSubject(credential) {
|
|
|
105
106
|
throw new Error('revocation: status-list has no credentialSubject');
|
|
106
107
|
return subject;
|
|
107
108
|
}
|
|
108
|
-
/**
|
|
109
|
-
* DEFAULT {@link Decompress}: `node:zlib` `gunzipSync` bounded to {@link MAX_STATUS_LIST_BYTES}
|
|
110
|
-
* so an oversized inflation THROWS mid-stream (fail-closed) instead of allocating the whole bomb.
|
|
111
|
-
* Pulled in via a DYNAMIC `import('node:zlib')` — only when no `decompress` was injected — so a
|
|
112
|
-
* Workers / Deno / browser bundle that supplies its own seam keeps `node:zlib` out of the graph.
|
|
113
|
-
*/
|
|
114
|
-
async function defaultNodeGunzip(bytes) {
|
|
115
|
-
const { gunzipSync } = await import('node:zlib');
|
|
116
|
-
return new Uint8Array(gunzipSync(bytes, { maxOutputLength: MAX_STATUS_LIST_BYTES }));
|
|
117
|
-
}
|
|
118
109
|
/**
|
|
119
110
|
* Inflate the multibase / GZIP `encodedList` into the raw status bitstring bytes via the shared
|
|
120
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"revocation.js","sourceRoot":"","sources":["../../src/card/revocation.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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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
|
|
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 {
|
|
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
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"bitstring.js","sourceRoot":"","sources":["../../src/delegation/bitstring.ts"],"names":[],"mappings":"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"}
|
|
@@ -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';
|
package/dist/delegation/index.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
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":"AAAA;;;;;;GAMG;AAMH,OAAO,EAAE,gBAAgB,EAAwD,MAAM,gBAAgB,CAAC;AACxG,OAAO,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAsBrE,MAAM,OAAO,qBAAqB;
|
|
1
|
+
{"version":3,"file":"statuslist-manager.js","sourceRoot":"","sources":["../../src/delegation/statuslist-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -24,6 +24,7 @@ export { DelegationGraphManager, createDelegationGraph, type DelegationNode, typ
|
|
|
24
24
|
export { StatusList2021Manager, createStatusListManager, type StatusListStorageProvider, type StatusListIdentityProvider, } from './delegation/statuslist-manager.js';
|
|
25
25
|
export { CascadingRevocationManager, createCascadingRevocationManager, type RevocationEvent, type RevocationHook, type CascadingRevocationOptions, } from './delegation/cascading-revocation.js';
|
|
26
26
|
export { BitstringManager, isIndexSet, type CompressionFunction, type DecompressionFunction, } from './delegation/bitstring.js';
|
|
27
|
+
export { statusListGzipCodec } from './utils/statuslist-gzip.js';
|
|
27
28
|
export { verifyDelegationAudience, } from './delegation/audience-validator.js';
|
|
28
29
|
export { buildDelegationProofJWT, buildChainString, type DelegationProofOptions, type Ed25519PrivateJWK, } from './delegation/outbound-proof.js';
|
|
29
30
|
export { buildOutboundDelegationHeaders, OUTBOUND_HEADER_NAMES, type OutboundDelegationContext, type OutboundDelegationHeaders, } from './delegation/outbound-headers.js';
|
package/dist/index.js
CHANGED
|
@@ -26,6 +26,7 @@ export { DelegationGraphManager, createDelegationGraph, } from './delegation/del
|
|
|
26
26
|
export { StatusList2021Manager, createStatusListManager, } from './delegation/statuslist-manager.js';
|
|
27
27
|
export { CascadingRevocationManager, createCascadingRevocationManager, } from './delegation/cascading-revocation.js';
|
|
28
28
|
export { BitstringManager, isIndexSet, } from './delegation/bitstring.js';
|
|
29
|
+
export { statusListGzipCodec } from './utils/statuslist-gzip.js';
|
|
29
30
|
export { verifyDelegationAudience, } from './delegation/audience-validator.js';
|
|
30
31
|
export { buildDelegationProofJWT, buildChainString, } from './delegation/outbound-proof.js';
|
|
31
32
|
export { buildOutboundDelegationHeaders, OUTBOUND_HEADER_NAMES, } from './delegation/outbound-headers.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,14 @@ export declare const MULTIBASE_BASE64URL = "u";
|
|
|
19
19
|
* so a revoked credential could read as live.
|
|
20
20
|
*/
|
|
21
21
|
export declare function parseStatusListIndex(raw: string): number;
|
|
22
|
+
/**
|
|
23
|
+
* Encode a raw status bitstring as an `encodedList`: run the injected
|
|
24
|
+
* compressor, then base64url-encode under the multibase `u` prefix. Refuses
|
|
25
|
+
* (throws) when the compressor's output is not GZIP: every conforming reader
|
|
26
|
+
* gunzips the list, so a list published with any other compression reads as
|
|
27
|
+
* unresolvable, and every credential it covers as revoked.
|
|
28
|
+
*/
|
|
29
|
+
export declare function encodeStatusListPayload(bits: Uint8Array, compress: (bytes: Uint8Array) => Uint8Array | Promise<Uint8Array>): Promise<string>;
|
|
22
30
|
/**
|
|
23
31
|
* Decode a status-list `encodedList` to the raw bitstring: strip the optional
|
|
24
32
|
* multibase `u` prefix, base64url-decode, run the injected decompressor, and
|
|
@@ -27,6 +35,13 @@ export declare function parseStatusListIndex(raw: string): number;
|
|
|
27
35
|
* The decompressor is the bare-function common denominator — an
|
|
28
36
|
* object-shaped `DecompressionFunction` adapts inline:
|
|
29
37
|
* `(b) => decompressor.decompress(b)`.
|
|
38
|
+
*
|
|
39
|
+
* Throws when the payload is not GZIP, and when the decompressor hands back
|
|
40
|
+
* its GZIP input unchanged (a pass-through): read as a bitstring, the GZIP
|
|
41
|
+
* header clears bits the issuer set, so a revoked credential would read as
|
|
42
|
+
* live. The pass-through check compares the output with the input rather
|
|
43
|
+
* than looking for the GZIP magic in the output, which a genuine bitstring
|
|
44
|
+
* can begin with.
|
|
30
45
|
*/
|
|
31
46
|
export declare function decodeStatusListPayload(encodedList: string, decompress: (bytes: Uint8Array) => Uint8Array | Promise<Uint8Array>): Promise<Uint8Array>;
|
|
32
47
|
/**
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Status-list primitives — the ONE home for the mechanics every W3C
|
|
3
3
|
* status-list reader AND publisher in this package shares (StatusList2021 /
|
|
4
|
-
* Bitstring Status List v1.0): canonical index parsing,
|
|
5
|
-
* inflation, the MSB-first bit read, and the
|
|
4
|
+
* Bitstring Status List v1.0): canonical index parsing, GZIP-checked payload
|
|
5
|
+
* encoding and bounded inflation, the MSB-first bit read, and the
|
|
6
|
+
* anchor-fitness guard.
|
|
6
7
|
*
|
|
7
8
|
* Consumers: `delegation/bitstring.ts` (+ `statuslist-manager.ts`) and
|
|
8
9
|
* `card/revocation.ts` — previously each carried its own copy of exactly this
|
|
@@ -11,10 +12,11 @@
|
|
|
11
12
|
* caller maps to `status_unresolvable`; the card path catches everything into
|
|
12
13
|
* `FAIL_CLOSED` and models freshness) — only the mechanics live here.
|
|
13
14
|
*
|
|
14
|
-
* FAIL-CLOSED throughout: a non-canonical index, an oversized inflation,
|
|
15
|
-
* an unreadable bit throws rather than reading
|
|
15
|
+
* FAIL-CLOSED throughout: a non-canonical index, an oversized inflation, a
|
|
16
|
+
* payload that is not GZIP, or an unreadable bit throws rather than reading
|
|
17
|
+
* as "not revoked".
|
|
16
18
|
*/
|
|
17
|
-
import { base64urlDecodeToBytes } from './base64.js';
|
|
19
|
+
import { base64urlDecodeToBytes, base64urlEncodeFromBytes } from './base64.js';
|
|
18
20
|
import { isRecord } from './guards.js';
|
|
19
21
|
/**
|
|
20
22
|
* Hard ceiling on an INFLATED status bitstring (16 MiB ≈ 134M entries — far
|
|
@@ -46,6 +48,28 @@ export function parseStatusListIndex(raw) {
|
|
|
46
48
|
}
|
|
47
49
|
return index;
|
|
48
50
|
}
|
|
51
|
+
/** Whether `bytes` opens with the GZIP member magic `1f 8b` (RFC 1952 §2.3.1). */
|
|
52
|
+
function isGzip(bytes) {
|
|
53
|
+
return bytes[0] === 0x1f && bytes[1] === 0x8b;
|
|
54
|
+
}
|
|
55
|
+
/** Whether two byte arrays hold the same bytes. */
|
|
56
|
+
function sameBytes(a, b) {
|
|
57
|
+
return a.length === b.length && a.every((byte, i) => byte === b[i]);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Encode a raw status bitstring as an `encodedList`: run the injected
|
|
61
|
+
* compressor, then base64url-encode under the multibase `u` prefix. Refuses
|
|
62
|
+
* (throws) when the compressor's output is not GZIP: every conforming reader
|
|
63
|
+
* gunzips the list, so a list published with any other compression reads as
|
|
64
|
+
* unresolvable, and every credential it covers as revoked.
|
|
65
|
+
*/
|
|
66
|
+
export async function encodeStatusListPayload(bits, compress) {
|
|
67
|
+
const compressed = await compress(bits);
|
|
68
|
+
if (!isGzip(compressed)) {
|
|
69
|
+
throw new Error('Refusing to publish a status list whose encodedList is not GZIP: the compressor must GZIP the bitstring');
|
|
70
|
+
}
|
|
71
|
+
return MULTIBASE_BASE64URL + base64urlEncodeFromBytes(compressed);
|
|
72
|
+
}
|
|
49
73
|
/**
|
|
50
74
|
* Decode a status-list `encodedList` to the raw bitstring: strip the optional
|
|
51
75
|
* multibase `u` prefix, base64url-decode, run the injected decompressor, and
|
|
@@ -54,10 +78,24 @@ export function parseStatusListIndex(raw) {
|
|
|
54
78
|
* The decompressor is the bare-function common denominator — an
|
|
55
79
|
* object-shaped `DecompressionFunction` adapts inline:
|
|
56
80
|
* `(b) => decompressor.decompress(b)`.
|
|
81
|
+
*
|
|
82
|
+
* Throws when the payload is not GZIP, and when the decompressor hands back
|
|
83
|
+
* its GZIP input unchanged (a pass-through): read as a bitstring, the GZIP
|
|
84
|
+
* header clears bits the issuer set, so a revoked credential would read as
|
|
85
|
+
* live. The pass-through check compares the output with the input rather
|
|
86
|
+
* than looking for the GZIP magic in the output, which a genuine bitstring
|
|
87
|
+
* can begin with.
|
|
57
88
|
*/
|
|
58
89
|
export async function decodeStatusListPayload(encodedList, decompress) {
|
|
59
90
|
const payload = encodedList[0] === MULTIBASE_BASE64URL ? encodedList.slice(1) : encodedList;
|
|
60
|
-
const
|
|
91
|
+
const compressed = base64urlDecodeToBytes(payload);
|
|
92
|
+
if (!isGzip(compressed)) {
|
|
93
|
+
throw new Error('Status list encodedList is not GZIP');
|
|
94
|
+
}
|
|
95
|
+
const inflated = await decompress(compressed);
|
|
96
|
+
if (sameBytes(inflated, compressed)) {
|
|
97
|
+
throw new Error('Status list decompressor returned its GZIP input unchanged: it must inflate GZIP');
|
|
98
|
+
}
|
|
61
99
|
if (inflated.length > MAX_STATUS_LIST_BYTES) {
|
|
62
100
|
throw new Error(`Status list too large: ${inflated.length} bytes exceeds ${MAX_STATUS_LIST_BYTES}`);
|
|
63
101
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statuslist-bits.js","sourceRoot":"","sources":["../../src/utils/statuslist-bits.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"statuslist-bits.js","sourceRoot":"","sources":["../../src/utils/statuslist-bits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** GZIP-compress a raw status bitstring. */
|
|
2
|
+
declare function gzip(bits: Uint8Array): Promise<Uint8Array>;
|
|
3
|
+
/**
|
|
4
|
+
* Inflate a GZIP status-list payload, refusing (rejecting) one that is not
|
|
5
|
+
* GZIP or that inflates past {@link MAX_STATUS_LIST_BYTES}.
|
|
6
|
+
*/
|
|
7
|
+
declare function gunzip(payload: Uint8Array): Promise<Uint8Array>;
|
|
8
|
+
/**
|
|
9
|
+
* The default status-list codec. One object serves as both the
|
|
10
|
+
* `CompressionFunction` and the `DecompressionFunction` that
|
|
11
|
+
* `StatusList2021Manager` and `BitstringManager` take, and its `decompress`
|
|
12
|
+
* is the bare `Decompress` the Entity Card revocation checker takes.
|
|
13
|
+
*/
|
|
14
|
+
export declare const statusListGzipCodec: {
|
|
15
|
+
readonly compress: typeof gzip;
|
|
16
|
+
readonly decompress: typeof gunzip;
|
|
17
|
+
};
|
|
18
|
+
export {};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The GZIP codec for status-list bitstrings — the ONE implementation every
|
|
3
|
+
* publisher and reader in this package defaults to (StatusList2021 and W3C
|
|
4
|
+
* Bitstring Status List v1.0 both require the `encodedList` bitstring to be
|
|
5
|
+
* GZIP-compressed).
|
|
6
|
+
*
|
|
7
|
+
* `node:zlib` is loaded with a DYNAMIC import on first use, never statically,
|
|
8
|
+
* so a Workers / Deno / browser bundle that injects its own codec (for example
|
|
9
|
+
* one built on `CompressionStream` / `DecompressionStream`) keeps `node:zlib`
|
|
10
|
+
* out of its graph.
|
|
11
|
+
*
|
|
12
|
+
* Inflation is bounded to {@link MAX_STATUS_LIST_BYTES} while it runs, so a
|
|
13
|
+
* decompression bomb is refused mid-stream rather than allocated whole.
|
|
14
|
+
*/
|
|
15
|
+
import { MAX_STATUS_LIST_BYTES } from './statuslist-bits.js';
|
|
16
|
+
/** Run a callback-style `node:zlib` operation as a promise of a plain `Uint8Array`. */
|
|
17
|
+
function settle(run) {
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
run((error, result) => (error ? reject(error) : resolve(new Uint8Array(result))));
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
/** GZIP-compress a raw status bitstring. */
|
|
23
|
+
async function gzip(bits) {
|
|
24
|
+
const zlib = await import('node:zlib');
|
|
25
|
+
return settle((done) => zlib.gzip(bits, done));
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Inflate a GZIP status-list payload, refusing (rejecting) one that is not
|
|
29
|
+
* GZIP or that inflates past {@link MAX_STATUS_LIST_BYTES}.
|
|
30
|
+
*/
|
|
31
|
+
async function gunzip(payload) {
|
|
32
|
+
const zlib = await import('node:zlib');
|
|
33
|
+
return settle((done) => zlib.gunzip(payload, { maxOutputLength: MAX_STATUS_LIST_BYTES }, done));
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The default status-list codec. One object serves as both the
|
|
37
|
+
* `CompressionFunction` and the `DecompressionFunction` that
|
|
38
|
+
* `StatusList2021Manager` and `BitstringManager` take, and its `decompress`
|
|
39
|
+
* is the bare `Decompress` the Entity Card revocation checker takes.
|
|
40
|
+
*/
|
|
41
|
+
export const statusListGzipCodec = {
|
|
42
|
+
compress: gzip,
|
|
43
|
+
decompress: gunzip,
|
|
44
|
+
};
|
|
45
|
+
//# sourceMappingURL=statuslist-gzip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statuslist-gzip.js","sourceRoot":"","sources":["../../src/utils/statuslist-gzip.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAI7D,uFAAuF;AACvF,SAAS,MAAM,CAAC,GAAiC;IAC/C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACpF,CAAC,CAAC,CAAC;AACL,CAAC;AAED,4CAA4C;AAC5C,KAAK,UAAU,IAAI,CAAC,IAAgB;IAClC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACjD,CAAC;AAED;;;GAGG;AACH,KAAK,UAAU,MAAM,CAAC,OAAmB;IACvC,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IACvC,OAAO,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,eAAe,EAAE,qBAAqB,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;AAClG,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,IAAI;IACd,UAAU,EAAE,MAAM;CACV,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kya-os/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"description": "Reference implementation of the KYA-OS protocol for Model Context Protocol servers: identity, delegation, proofs, sessions, and verifiable audit trails",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|