@kya-os/mcp 1.12.0 → 1.13.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 +28 -0
- package/CONFORMANCE.md +6 -0
- package/SPEC.md +1 -1
- package/dist/delegation/index.d.ts +1 -0
- package/dist/delegation/index.d.ts.map +1 -1
- package/dist/delegation/index.js +1 -0
- package/dist/delegation/index.js.map +1 -1
- package/dist/delegation/status-cache.d.ts +9 -0
- package/dist/delegation/status-cache.d.ts.map +1 -0
- package/dist/delegation/status-cache.js +20 -0
- package/dist/delegation/status-cache.js.map +1 -0
- package/dist/delegation/vc-verifier.d.ts +31 -15
- package/dist/delegation/vc-verifier.d.ts.map +1 -1
- package/dist/delegation/vc-verifier.js +71 -78
- package/dist/delegation/vc-verifier.js.map +1 -1
- package/dist/delegation/vc-verifier.types.d.ts +18 -0
- package/dist/delegation/vc-verifier.types.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.config-types.d.ts +13 -0
- package/dist/middleware/with-kya-os.config-types.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.delegation-verify.d.ts.map +1 -1
- package/dist/middleware/with-kya-os.delegation-verify.js +2 -0
- package/dist/middleware/with-kya-os.delegation-verify.js.map +1 -1
- package/dist/utils/ttl-cache.d.ts +26 -0
- package/dist/utils/ttl-cache.d.ts.map +1 -0
- package/dist/utils/ttl-cache.js +68 -0
- package/dist/utils/ttl-cache.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,34 @@ Versioning: https://semver.org/spec/v2.0.0.html
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [1.13.0] - 2026-08-12
|
|
11
|
+
|
|
12
|
+
### Security
|
|
13
|
+
|
|
14
|
+
- **Delegation verifier: revocation status and expiry are now evaluated on
|
|
15
|
+
every verification.** The per-instance cache previously stored the entire
|
|
16
|
+
verdict for `cacheTtl` (default 60 s), so a cache hit skipped the
|
|
17
|
+
credential-status check — a revoked credential kept verifying (and, on the
|
|
18
|
+
Data Integrity path, an expired one) until the entry lapsed. The cache now
|
|
19
|
+
holds only the signature/DID-validity result; basic checks and revocation
|
|
20
|
+
status run on every call, with signature and status still checked in
|
|
21
|
+
parallel. Warm-path latency now includes one status read — freshness policy
|
|
22
|
+
belongs in your `StatusListResolver`, never in the verdict. The `cached`
|
|
23
|
+
result flag now means "signature served from cache".
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
|
|
27
|
+
- **`withStatusCache(resolver, { maxStalenessMs, maxEntries? })`** — wraps any
|
|
28
|
+
`StatusListResolver` to cache status *bits* for an explicitly declared
|
|
29
|
+
staleness bound: the deployment names its revocation SLA instead of
|
|
30
|
+
inheriting a silent verdict cache. Throws are never cached (fail-closed
|
|
31
|
+
retry); `maxStalenessMs: 0` is a pass-through.
|
|
32
|
+
- **`delegation.verificationCache` middleware config** (`{ ttlMs, maxEntries }`)
|
|
33
|
+
tuning the signature-verification cache; `ttlMs: 0` disables signature
|
|
34
|
+
caching (immediate issuer key-rotation pickup). Constructor `cacheTtl: 0`
|
|
35
|
+
is now honored (`??`, previously swallowed by `||`), and
|
|
36
|
+
`createDelegationVerifier` gains `maxCacheSize` parity.
|
|
37
|
+
|
|
10
38
|
## [1.12.0] - 2026-08-04
|
|
11
39
|
|
|
12
40
|
### Added
|
package/CONFORMANCE.md
CHANGED
|
@@ -430,6 +430,12 @@ protocol, and `negotiation` exercises the MCP extension admission gate
|
|
|
430
430
|
A `fail` vector passes the suite only when the implementation correctly **rejects**
|
|
431
431
|
it. The runner exits non-zero on any mismatch.
|
|
432
432
|
|
|
433
|
+
**On `signed-proof/tampered-meta`.**
|
|
434
|
+
The proof's `meta` block mirrors the claims signed inside the JWS, but it is a convenience for consumers that read the proof without decoding the token, not an authoritative copy.
|
|
435
|
+
This vector leaves the JWS byte-identical to `valid-basic` and alters only the mirrored `meta.requestHash`, so the JWS signature still verifies.
|
|
436
|
+
A conformant verifier MUST reconcile `meta` against the decoded JWS payload and reject on any mismatch.
|
|
437
|
+
Signature validity alone does not pass this vector: it is the `requestHash` counterpart of the `responseHash` recompute rule in L2.11.
|
|
438
|
+
|
|
433
439
|
### Running the reference implementation
|
|
434
440
|
|
|
435
441
|
```bash
|
package/SPEC.md
CHANGED
|
@@ -23,7 +23,7 @@ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "S
|
|
|
23
23
|
|
|
24
24
|
## Status
|
|
25
25
|
|
|
26
|
-
**Stable 1.0.0** — Donated to DIF TAAWG (Decentralized Identity Foundation, Trusted AI Agents Working Group)
|
|
26
|
+
**Stable 1.0.0** — Donated to DIF TAAWG (Decentralized Identity Foundation, Trusted AI Agents Working Group) and ratified as a DIF standard. The wire format is stable: any future change that breaks compatibility with this version will require a major version bump.
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/delegation/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,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,EAChB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","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,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,EAChB,KAAK,4BAA4B,EACjC,KAAK,uBAAuB,GAC7B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,uBAAuB,EAAE,MAAM,wCAAwC,CAAC;AACjF,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC"}
|
package/dist/delegation/index.js
CHANGED
|
@@ -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,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,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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { StatusListResolver } from './vc-verifier.types.js';
|
|
2
|
+
export interface StatusCacheOptions {
|
|
3
|
+
/** Upper bound on served staleness, in ms — your declared revocation SLA. `<= 0` disables caching. */
|
|
4
|
+
maxStalenessMs: number;
|
|
5
|
+
/** Maximum cached entries (FIFO eviction). Default 1000. */
|
|
6
|
+
maxEntries?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function withStatusCache(resolver: StatusListResolver, options: StatusCacheOptions): StatusListResolver;
|
|
9
|
+
//# sourceMappingURL=status-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-cache.d.ts","sourceRoot":"","sources":["../../src/delegation/status-cache.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAGjE,MAAM,WAAW,kBAAkB;IACjC,sGAAsG;IACtG,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,kBAAkB,EAC5B,OAAO,EAAE,kBAAkB,GAC1B,kBAAkB,CAiBpB"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TtlCache } from '../utils/ttl-cache.js';
|
|
2
|
+
export function withStatusCache(resolver, options) {
|
|
3
|
+
const cache = new TtlCache({
|
|
4
|
+
ttlMs: options.maxStalenessMs,
|
|
5
|
+
maxEntries: options.maxEntries ?? 1000,
|
|
6
|
+
});
|
|
7
|
+
return {
|
|
8
|
+
async checkStatus(status) {
|
|
9
|
+
const key = `${status.statusListCredential}\0${status.statusListIndex}\0${status.statusPurpose}`;
|
|
10
|
+
const hit = cache.get(key);
|
|
11
|
+
if (hit !== undefined)
|
|
12
|
+
return hit;
|
|
13
|
+
// A throw propagates uncached — fail-closed deny now, retry next call.
|
|
14
|
+
const revoked = await resolver.checkStatus(status);
|
|
15
|
+
cache.set(key, revoked);
|
|
16
|
+
return revoked;
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=status-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status-cache.js","sourceRoot":"","sources":["../../src/delegation/status-cache.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AASjD,MAAM,UAAU,eAAe,CAC7B,QAA4B,EAC5B,OAA2B;IAE3B,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAU;QAClC,KAAK,EAAE,OAAO,CAAC,cAAc;QAC7B,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,IAAI;KACvC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,CAAC,WAAW,CAAC,MAAwB;YACxC,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,oBAAoB,KAAK,MAAM,CAAC,eAAe,KAAK,MAAM,CAAC,aAAa,EAAE,CAAC;YACjG,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG,KAAK,SAAS;gBAAE,OAAO,GAAG,CAAC;YAClC,uEAAuE;YACvE,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;YACnD,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACxB,OAAO,OAAO,CAAC;QACjB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -10,7 +10,8 @@
|
|
|
10
10
|
*
|
|
11
11
|
* The stateless checks live in `./vc-verification-checks.ts`; the shapes in
|
|
12
12
|
* `./vc-verifier.types.ts` (re-exported below). This class owns orchestration
|
|
13
|
-
* and the per-instance result cache
|
|
13
|
+
* and the per-instance SIGNATURE-result cache — revocation status and basic
|
|
14
|
+
* checks (expiry) are evaluated on every call, never served from cache.
|
|
14
15
|
*
|
|
15
16
|
* Related Spec: KYA-OS §4.3, W3C VC Data Model 1.1
|
|
16
17
|
*/
|
|
@@ -21,19 +22,17 @@ export declare class DelegationCredentialVerifier {
|
|
|
21
22
|
private didResolver?;
|
|
22
23
|
private statusListResolver?;
|
|
23
24
|
private signatureVerifier?;
|
|
24
|
-
private cache;
|
|
25
|
-
private cacheInsertionOrder;
|
|
26
|
-
private cacheTtl;
|
|
27
25
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
26
|
+
* Signature-result cache (FIFO eviction, TTL-bounded). Holds only REAL
|
|
27
|
+
* signature verifications; size `maxCacheSize` to the expected number of
|
|
28
|
+
* DISTINCT live credentials — the default of 1000 suits most deployments.
|
|
31
29
|
*/
|
|
32
|
-
private
|
|
30
|
+
private cache;
|
|
33
31
|
constructor(options?: {
|
|
34
32
|
didResolver?: DIDResolver;
|
|
35
33
|
statusListResolver?: StatusListResolver;
|
|
36
34
|
signatureVerifier?: SignatureVerificationFunction;
|
|
35
|
+
/** Signature-result TTL in ms. `0` disables signature caching. Default 60_000. */
|
|
37
36
|
cacheTtl?: number;
|
|
38
37
|
/** Maximum cache entries. Default: 1000 */
|
|
39
38
|
maxCacheSize?: number;
|
|
@@ -63,18 +62,32 @@ export declare class DelegationCredentialVerifier {
|
|
|
63
62
|
*/
|
|
64
63
|
verifyDelegationJwt(jwt: string, options?: VerifyDelegationVCOptions): Promise<DelegationVCVerificationResult>;
|
|
65
64
|
/**
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
69
|
-
* `
|
|
65
|
+
* Resolve the signature dimension: an unexpired cached result when
|
|
66
|
+
* available, else `run()` — cached only when valid (failures are never
|
|
67
|
+
* cached). Returned as a promise so callers can race it with the status
|
|
68
|
+
* check; a hit reports `durationMs: 0` (the retrieval, not the original
|
|
69
|
+
* compute).
|
|
70
|
+
*/
|
|
71
|
+
private cachedSignature;
|
|
72
|
+
/**
|
|
73
|
+
* Await the parallel signature + status checks and fold them into the final
|
|
74
|
+
* result via {@link combineVerificationResult}. The combined verdict is
|
|
75
|
+
* NEVER cached — only the signature dimension is (inside
|
|
76
|
+
* {@link cachedSignature}) — so revocation status is consulted on every
|
|
77
|
+
* call. Shared by the Data Integrity and VC-JWT paths; both reach here only
|
|
78
|
+
* after `validateBasicProperties` has passed.
|
|
70
79
|
*/
|
|
71
80
|
private finalizeVerification;
|
|
72
81
|
private cacheKeyForCredential;
|
|
73
82
|
private cacheKeyForJwt;
|
|
83
|
+
/**
|
|
84
|
+
* The cache holds only REAL signature verifications: a `skipSignature` run
|
|
85
|
+
* fabricates `{ valid: true }` at zero cost, so it neither reads nor writes
|
|
86
|
+
* the cache (which is what lets the key drop the old per-profile
|
|
87
|
+
* dimension). Per-call resolver overrides also bypass — conservative,
|
|
88
|
+
* unchanged.
|
|
89
|
+
*/
|
|
74
90
|
private cacheAllowed;
|
|
75
|
-
private verificationProfile;
|
|
76
|
-
private getFromCache;
|
|
77
|
-
private setInCache;
|
|
78
91
|
clearCache(): void;
|
|
79
92
|
clearCacheEntry(id: string): void;
|
|
80
93
|
}
|
|
@@ -82,6 +95,9 @@ export declare function createDelegationVerifier(options?: {
|
|
|
82
95
|
didResolver?: DIDResolver;
|
|
83
96
|
statusListResolver?: StatusListResolver;
|
|
84
97
|
signatureVerifier?: SignatureVerificationFunction;
|
|
98
|
+
/** Signature-result TTL in ms. `0` disables signature caching. Default 60_000. */
|
|
85
99
|
cacheTtl?: number;
|
|
100
|
+
/** Maximum cache entries. Default: 1000 */
|
|
101
|
+
maxCacheSize?: number;
|
|
86
102
|
}): DelegationCredentialVerifier;
|
|
87
103
|
//# sourceMappingURL=vc-verifier.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vc-verifier.d.ts","sourceRoot":"","sources":["../../src/delegation/vc-verifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vc-verifier.d.ts","sourceRoot":"","sources":["../../src/delegation/vc-verifier.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EACV,8BAA8B,EAC9B,yBAAyB,EACzB,WAAW,EACX,kBAAkB,EAElB,6BAA6B,EAE9B,MAAM,wBAAwB,CAAC;AAiBhC,cAAc,wBAAwB,CAAC;AAEvC,qBAAa,4BAA4B;IACvC,OAAO,CAAC,WAAW,CAAC,CAAc;IAClC,OAAO,CAAC,kBAAkB,CAAC,CAAqB;IAChD,OAAO,CAAC,iBAAiB,CAAC,CAAgC;IAC1D;;;;OAIG;IACH,OAAO,CAAC,KAAK,CAAwC;gBAEzC,OAAO,CAAC,EAAE;QACpB,WAAW,CAAC,EAAE,WAAW,CAAC;QAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;QACxC,iBAAiB,CAAC,EAAE,6BAA6B,CAAC;QAClD,kFAAkF;QAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,2CAA2C;QAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB;IAWD;;;;;;;;;;OAUG;IACG,0BAA0B,CAC9B,EAAE,EAAE,oBAAoB,EACxB,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,8BAA8B,CAAC;IA6D1C;;;;;;;;;;OAUG;IACG,mBAAmB,CACvB,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,yBAA8B,GACtC,OAAO,CAAC,8BAA8B,CAAC;IA2C1C;;;;;;OAMG;YACW,eAAe;IAiB7B;;;;;;;OAOG;YACW,oBAAoB;IA4BlC,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,cAAc;IAStB;;;;;;OAMG;IACH,OAAO,CAAC,YAAY;IAOpB,UAAU,IAAI,IAAI;IAIlB,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;CAOlC;AAED,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE;IACjD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,iBAAiB,CAAC,EAAE,6BAA6B,CAAC;IAClD,kFAAkF;IAClF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,4BAA4B,CAE/B"}
|
|
@@ -10,13 +10,15 @@
|
|
|
10
10
|
*
|
|
11
11
|
* The stateless checks live in `./vc-verification-checks.ts`; the shapes in
|
|
12
12
|
* `./vc-verifier.types.ts` (re-exported below). This class owns orchestration
|
|
13
|
-
* and the per-instance result cache
|
|
13
|
+
* and the per-instance SIGNATURE-result cache — revocation status and basic
|
|
14
|
+
* checks (expiry) are evaluated on every call, never served from cache.
|
|
14
15
|
*
|
|
15
16
|
* Related Spec: KYA-OS §4.3, W3C VC Data Model 1.1
|
|
16
17
|
*/
|
|
17
18
|
import { validateBasicProperties, verifySignature, checkCredentialStatus, combineVerificationResult, } from "./vc-verification-checks.js";
|
|
18
19
|
import { verifyVcJwtSignature, prepareVcJwtCredential, } from "./vc-jwt-verify.js";
|
|
19
20
|
import { canonicalizeJson } from "../utils/canonical-json.js";
|
|
21
|
+
import { TtlCache } from "../utils/ttl-cache.js";
|
|
20
22
|
// Re-export the shared type surface so existing imports of DIDResolver /
|
|
21
23
|
// SignatureVerificationFunction / StatusListResolver / … are unchanged.
|
|
22
24
|
export * from "./vc-verifier.types.js";
|
|
@@ -24,21 +26,21 @@ export class DelegationCredentialVerifier {
|
|
|
24
26
|
didResolver;
|
|
25
27
|
statusListResolver;
|
|
26
28
|
signatureVerifier;
|
|
27
|
-
cache = new Map();
|
|
28
|
-
cacheInsertionOrder = [];
|
|
29
|
-
cacheTtl;
|
|
30
29
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
30
|
+
* Signature-result cache (FIFO eviction, TTL-bounded). Holds only REAL
|
|
31
|
+
* signature verifications; size `maxCacheSize` to the expected number of
|
|
32
|
+
* DISTINCT live credentials — the default of 1000 suits most deployments.
|
|
34
33
|
*/
|
|
35
|
-
|
|
34
|
+
cache;
|
|
36
35
|
constructor(options) {
|
|
37
36
|
this.didResolver = options?.didResolver;
|
|
38
37
|
this.statusListResolver = options?.statusListResolver;
|
|
39
38
|
this.signatureVerifier = options?.signatureVerifier;
|
|
40
|
-
this.
|
|
41
|
-
|
|
39
|
+
this.cache = new TtlCache({
|
|
40
|
+
// `??`, not `||`: cacheTtl 0 means "no signature caching", not "the default".
|
|
41
|
+
ttlMs: options?.cacheTtl ?? 60_000,
|
|
42
|
+
maxEntries: options?.maxCacheSize ?? 1000,
|
|
43
|
+
});
|
|
42
44
|
}
|
|
43
45
|
/**
|
|
44
46
|
* Verify a delegation credential through progressive enhancement.
|
|
@@ -54,12 +56,8 @@ export class DelegationCredentialVerifier {
|
|
|
54
56
|
async verifyDelegationCredential(vc, options = {}) {
|
|
55
57
|
const startTime = Date.now();
|
|
56
58
|
const cacheKey = this.cacheKeyForCredential('di', vc, options);
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
if (cached) {
|
|
60
|
-
return { ...cached, cached: true };
|
|
61
|
-
}
|
|
62
|
-
}
|
|
59
|
+
// Basic checks run on EVERY call — expiry is time-sensitive, so a warm
|
|
60
|
+
// signature cache must never carry a credential past its window.
|
|
63
61
|
const basicCheckStart = Date.now();
|
|
64
62
|
const basicValidation = validateBasicProperties(vc);
|
|
65
63
|
const basicCheckMs = Date.now() - basicCheckStart;
|
|
@@ -78,19 +76,22 @@ export class DelegationCredentialVerifier {
|
|
|
78
76
|
};
|
|
79
77
|
return result;
|
|
80
78
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
// Both promises are constructed before either is awaited: a signature
|
|
80
|
+
// cache hit resolves instantly ALONGSIDE the live status read; a miss
|
|
81
|
+
// runs signature and status concurrently (unchanged parallelism).
|
|
82
|
+
const signaturePromise = this.cachedSignature(cacheKey, () => options.skipSignature
|
|
83
|
+
? Promise.resolve({
|
|
84
84
|
valid: true,
|
|
85
85
|
durationMs: 0,
|
|
86
|
-
})
|
|
86
|
+
})
|
|
87
|
+
: verifySignature(vc, options.didResolver || this.didResolver, this.signatureVerifier));
|
|
87
88
|
const statusPromise = !options.skipStatus && vc.credentialStatus
|
|
88
89
|
? checkCredentialStatus(vc.credentialStatus, options.statusListResolver || this.statusListResolver)
|
|
89
90
|
: Promise.resolve({
|
|
90
91
|
valid: true,
|
|
91
92
|
durationMs: 0,
|
|
92
93
|
});
|
|
93
|
-
return this.finalizeVerification(signaturePromise, statusPromise, basicCheckMs, startTime
|
|
94
|
+
return this.finalizeVerification(signaturePromise, statusPromise, basicCheckMs, startTime);
|
|
94
95
|
}
|
|
95
96
|
/**
|
|
96
97
|
* Verify a delegation credential presented as a compact VC-JWT — the JWT
|
|
@@ -111,37 +112,56 @@ export class DelegationCredentialVerifier {
|
|
|
111
112
|
}
|
|
112
113
|
const { vc, issuerDid, kid, basicCheckMs } = prepared;
|
|
113
114
|
const cacheKey = this.cacheKeyForJwt(jwt, vc, options);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
const signaturePromise = !options.skipSignature
|
|
121
|
-
? verifyVcJwtSignature(jwt, issuerDid, kid, options.didResolver || this.didResolver)
|
|
122
|
-
: Promise.resolve({ valid: true, durationMs: 0 });
|
|
115
|
+
// Same construction as the Data Integrity path: both promises exist
|
|
116
|
+
// before either is awaited, so a cached signature races a LIVE status
|
|
117
|
+
// read and a miss keeps full signature/status parallelism.
|
|
118
|
+
const signaturePromise = this.cachedSignature(cacheKey, () => options.skipSignature
|
|
119
|
+
? Promise.resolve({ valid: true, durationMs: 0 })
|
|
120
|
+
: verifyVcJwtSignature(jwt, issuerDid, kid, options.didResolver || this.didResolver));
|
|
123
121
|
const statusPromise = !options.skipStatus && vc.credentialStatus
|
|
124
122
|
? checkCredentialStatus(vc.credentialStatus, options.statusListResolver || this.statusListResolver)
|
|
125
123
|
: Promise.resolve({
|
|
126
124
|
valid: true,
|
|
127
125
|
durationMs: 0,
|
|
128
126
|
});
|
|
129
|
-
return this.finalizeVerification(signaturePromise, statusPromise, basicCheckMs, startTime
|
|
127
|
+
return this.finalizeVerification(signaturePromise, statusPromise, basicCheckMs, startTime);
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Resolve the signature dimension: an unexpired cached result when
|
|
131
|
+
* available, else `run()` — cached only when valid (failures are never
|
|
132
|
+
* cached). Returned as a promise so callers can race it with the status
|
|
133
|
+
* check; a hit reports `durationMs: 0` (the retrieval, not the original
|
|
134
|
+
* compute).
|
|
135
|
+
*/
|
|
136
|
+
async cachedSignature(cacheKey, run) {
|
|
137
|
+
if (cacheKey !== null) {
|
|
138
|
+
const hit = this.cache.get(cacheKey);
|
|
139
|
+
if (hit) {
|
|
140
|
+
return { result: { ...hit, durationMs: 0 }, cached: true };
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
const result = await run();
|
|
144
|
+
if (result.valid && cacheKey !== null) {
|
|
145
|
+
this.cache.set(cacheKey, result);
|
|
146
|
+
}
|
|
147
|
+
return { result, cached: false };
|
|
130
148
|
}
|
|
131
149
|
/**
|
|
132
|
-
* Await the parallel signature + status checks
|
|
133
|
-
* result via {@link combineVerificationResult}
|
|
134
|
-
*
|
|
135
|
-
*
|
|
150
|
+
* Await the parallel signature + status checks and fold them into the final
|
|
151
|
+
* result via {@link combineVerificationResult}. The combined verdict is
|
|
152
|
+
* NEVER cached — only the signature dimension is (inside
|
|
153
|
+
* {@link cachedSignature}) — so revocation status is consulted on every
|
|
154
|
+
* call. Shared by the Data Integrity and VC-JWT paths; both reach here only
|
|
155
|
+
* after `validateBasicProperties` has passed.
|
|
136
156
|
*/
|
|
137
|
-
async finalizeVerification(signaturePromise, statusPromise, basicCheckMs, startTime
|
|
138
|
-
const [
|
|
157
|
+
async finalizeVerification(signaturePromise, statusPromise, basicCheckMs, startTime) {
|
|
158
|
+
const [signature, statusResult] = await Promise.all([
|
|
139
159
|
signaturePromise,
|
|
140
160
|
statusPromise,
|
|
141
161
|
]);
|
|
142
|
-
const result = combineVerificationResult(
|
|
143
|
-
if (
|
|
144
|
-
|
|
162
|
+
const result = combineVerificationResult(signature.result, statusResult, basicCheckMs, startTime);
|
|
163
|
+
if (signature.cached) {
|
|
164
|
+
result.cached = true;
|
|
145
165
|
}
|
|
146
166
|
return result;
|
|
147
167
|
}
|
|
@@ -149,7 +169,7 @@ export class DelegationCredentialVerifier {
|
|
|
149
169
|
if (!this.cacheAllowed(options))
|
|
150
170
|
return null;
|
|
151
171
|
try {
|
|
152
|
-
return `${mode}\0${vc.id ?? ''}\0${
|
|
172
|
+
return `${mode}\0${vc.id ?? ''}\0${canonicalizeJson(vc)}`;
|
|
153
173
|
}
|
|
154
174
|
catch {
|
|
155
175
|
return null;
|
|
@@ -158,55 +178,28 @@ export class DelegationCredentialVerifier {
|
|
|
158
178
|
cacheKeyForJwt(jwt, vc, options) {
|
|
159
179
|
if (!this.cacheAllowed(options))
|
|
160
180
|
return null;
|
|
161
|
-
return `jwt\0${vc.id ?? ''}\0${
|
|
181
|
+
return `jwt\0${vc.id ?? ''}\0${jwt}`;
|
|
162
182
|
}
|
|
183
|
+
/**
|
|
184
|
+
* The cache holds only REAL signature verifications: a `skipSignature` run
|
|
185
|
+
* fabricates `{ valid: true }` at zero cost, so it neither reads nor writes
|
|
186
|
+
* the cache (which is what lets the key drop the old per-profile
|
|
187
|
+
* dimension). Per-call resolver overrides also bypass — conservative,
|
|
188
|
+
* unchanged.
|
|
189
|
+
*/
|
|
163
190
|
cacheAllowed(options) {
|
|
164
191
|
return !options.skipCache &&
|
|
192
|
+
!options.skipSignature &&
|
|
165
193
|
options.didResolver === undefined &&
|
|
166
194
|
options.statusListResolver === undefined;
|
|
167
195
|
}
|
|
168
|
-
verificationProfile(options) {
|
|
169
|
-
return `signature:${options.skipSignature ? 'skip' : 'verify'}|status:${options.skipStatus ? 'skip' : 'verify'}`;
|
|
170
|
-
}
|
|
171
|
-
getFromCache(id) {
|
|
172
|
-
const entry = this.cache.get(id);
|
|
173
|
-
if (!entry)
|
|
174
|
-
return null;
|
|
175
|
-
if (Date.now() > entry.expiresAt) {
|
|
176
|
-
this.cache.delete(id);
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
|
-
return entry.result;
|
|
180
|
-
}
|
|
181
|
-
setInCache(id, result) {
|
|
182
|
-
// Evict oldest entry if cache exceeds maxCacheSize (simple FIFO)
|
|
183
|
-
while (this.cache.size >= this.maxCacheSize && this.cacheInsertionOrder.length > 0) {
|
|
184
|
-
const oldestId = this.cacheInsertionOrder.shift();
|
|
185
|
-
if (oldestId) {
|
|
186
|
-
this.cache.delete(oldestId);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
this.cache.set(id, {
|
|
190
|
-
result,
|
|
191
|
-
expiresAt: Date.now() + this.cacheTtl,
|
|
192
|
-
});
|
|
193
|
-
this.cacheInsertionOrder.push(id);
|
|
194
|
-
}
|
|
195
196
|
clearCache() {
|
|
196
197
|
this.cache.clear();
|
|
197
|
-
this.cacheInsertionOrder = [];
|
|
198
198
|
}
|
|
199
199
|
clearCacheEntry(id) {
|
|
200
200
|
const diPrefix = `di\0${id}\0`;
|
|
201
201
|
const jwtPrefix = `jwt\0${id}\0`;
|
|
202
|
-
|
|
203
|
-
if (!key.startsWith(diPrefix) && !key.startsWith(jwtPrefix))
|
|
204
|
-
continue;
|
|
205
|
-
this.cache.delete(key);
|
|
206
|
-
const index = this.cacheInsertionOrder.indexOf(key);
|
|
207
|
-
if (index !== -1)
|
|
208
|
-
this.cacheInsertionOrder.splice(index, 1);
|
|
209
|
-
}
|
|
202
|
+
this.cache.deleteWhere((key) => key.startsWith(diPrefix) || key.startsWith(jwtPrefix));
|
|
210
203
|
}
|
|
211
204
|
}
|
|
212
205
|
export function createDelegationVerifier(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vc-verifier.js","sourceRoot":"","sources":["../../src/delegation/vc-verifier.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vc-verifier.js","sourceRoot":"","sources":["../../src/delegation/vc-verifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,17 @@ import type { CredentialStatus } from "../types/protocol.js";
|
|
|
16
16
|
* good; safe to retry once status resolution recovers.
|
|
17
17
|
*/
|
|
18
18
|
export type StatusOutcome = "revoked" | "status_unresolvable";
|
|
19
|
+
/**
|
|
20
|
+
* The signature/DID-validity dimension of a verification — the expensive,
|
|
21
|
+
* slow-changing half that the verifier caches. Shared by the Data Integrity
|
|
22
|
+
* path (`verifySignature`) and the VC-JWT path (`verifyVcJwtSignature`,
|
|
23
|
+
* whose `VcJwtSignatureResult` is structurally identical).
|
|
24
|
+
*/
|
|
25
|
+
export interface SignatureVerificationResult {
|
|
26
|
+
valid: boolean;
|
|
27
|
+
reason?: string;
|
|
28
|
+
durationMs?: number;
|
|
29
|
+
}
|
|
19
30
|
export interface DelegationVCVerificationResult {
|
|
20
31
|
valid: boolean;
|
|
21
32
|
reason?: string;
|
|
@@ -26,6 +37,13 @@ export interface DelegationVCVerificationResult {
|
|
|
26
37
|
*/
|
|
27
38
|
statusOutcome?: StatusOutcome;
|
|
28
39
|
stage: "basic" | "signature" | "status" | "complete";
|
|
40
|
+
/**
|
|
41
|
+
* True when the SIGNATURE verification was served from the per-instance
|
|
42
|
+
* cache. Basic checks (schema/expiry) and revocation status are always
|
|
43
|
+
* evaluated fresh on every call — only the signature/DID-validity result
|
|
44
|
+
* is ever cached. On a hit, `metrics.signatureCheckMs` reports the
|
|
45
|
+
* near-zero cache retrieval, not the original compute.
|
|
46
|
+
*/
|
|
29
47
|
cached?: boolean;
|
|
30
48
|
metrics?: {
|
|
31
49
|
basicCheckMs?: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vc-verifier.types.d.ts","sourceRoot":"","sources":["../../src/delegation/vc-verifier.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,qBAAqB,CAAC;AAE9D,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC1C,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,CACE,EAAE,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,EACvD,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC;QACT,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ"}
|
|
1
|
+
{"version":3,"file":"vc-verifier.types.d.ts","sourceRoot":"","sources":["../../src/delegation/vc-verifier.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;;;;;GAQG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,qBAAqB,CAAC;AAE9D;;;;;GAKG;AACH,MAAM,WAAW,2BAA2B;IAC1C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,8BAA8B;IAC7C,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,KAAK,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrD;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,MAAM,CAAC,EAAE;QACP,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,OAAO,CAAC;KACvB,CAAC;CACH;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CACzC;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,kBAAkB,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAC1C,cAAc,CAAC,EAAE,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC;IACjD,eAAe,CAAC,EAAE,CAAC,MAAM,GAAG,kBAAkB,CAAC,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACzD;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,6BAA6B;IAC5C,CACE,EAAE,EAAE,OAAO,sBAAsB,EAAE,oBAAoB,EACvD,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC;QACT,KAAK,EAAE,OAAO,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ"}
|
|
@@ -91,6 +91,19 @@ export interface KyaOsDelegationConfig {
|
|
|
91
91
|
* rejected — so enabling `'enforce'` never breaks did:web traffic.
|
|
92
92
|
*/
|
|
93
93
|
holderBinding?: "off" | "warn" | "enforce";
|
|
94
|
+
/**
|
|
95
|
+
* Tuning for the delegation verifier's SIGNATURE-verification cache (the
|
|
96
|
+
* expensive DID-resolve + crypto dimension). Revocation status and basic
|
|
97
|
+
* checks (expiry) are always evaluated fresh on every call and are NOT
|
|
98
|
+
* affected by this setting. Set `ttlMs: 0` to disable signature caching
|
|
99
|
+
* entirely (e.g. when issuer key rotation must take effect immediately).
|
|
100
|
+
*/
|
|
101
|
+
verificationCache?: {
|
|
102
|
+
/** Signature-result TTL in milliseconds. Default 60_000. `0` disables caching. */
|
|
103
|
+
ttlMs?: number;
|
|
104
|
+
/** Maximum cached signature results (FIFO eviction). Default 1000. */
|
|
105
|
+
maxEntries?: number;
|
|
106
|
+
};
|
|
94
107
|
}
|
|
95
108
|
export interface KyaOsConfig {
|
|
96
109
|
/** Agent identity (DID + key material) */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-kya-os.config-types.d.ts","sourceRoot":"","sources":["../../src/middleware/with-kya-os.config-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAEtF,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,oFAAoF;IACpF,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AACD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC3D,OAAO,KAAK,EACV,WAAW,EACX,kBAAkB,EACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAClF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAC5E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAEjE,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ;;;;;;OAMG;IACH,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,cAAc,kDAAmD,CAAC;AAC/E,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;;OAGG;IACH,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B;;;;OAIG;IACH,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC;;;OAGG;IACH,sBAAsB,CAAC,EAAE,CACvB,cAAc,EAAE,oBAAoB,KACjC,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAAC;IACrC;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;;;;;;;;;;;;;OAeG;IACH,aAAa,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"with-kya-os.config-types.d.ts","sourceRoot":"","sources":["../../src/middleware/with-kya-os.config-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-kya-os.delegation-verify.d.ts","sourceRoot":"","sources":["../../src/middleware/with-kya-os.delegation-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,CAChB,SAAS,EAAE,uBAAuB,KAC/B,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,uBAAuB,CACrB,cAAc,EAAE,oBAAoB,EACpC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GACpC,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,8EAA8E;IAC9E,4BAA4B,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzC;;;;;OAKG;IACH,gCAAgC,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC;QACT,gBAAgB,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACxD,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,cAAc,GACnB,sBAAsB,
|
|
1
|
+
{"version":3,"file":"with-kya-os.delegation-verify.d.ts","sourceRoot":"","sources":["../../src/middleware/with-kya-os.delegation-verify.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAiBH,OAAO,EAGL,KAAK,oBAAoB,EACzB,KAAK,uBAAuB,EAC7B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,kFAAkF;AAClF,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,CAChB,SAAS,EAAE,uBAAuB,KAC/B,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACrC;;;;;OAKG;IACH,uBAAuB,CACrB,cAAc,EAAE,oBAAoB,EACpC,OAAO,CAAC,EAAE;QAAE,aAAa,CAAC,EAAE,OAAO,CAAA;KAAE,GACpC,OAAO,CAAC;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,8EAA8E;IAC9E,4BAA4B,CAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACzC;;;;;OAKG;IACH,gCAAgC,CAC9B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC;QACT,gBAAgB,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACxD,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,cAAc,GACnB,sBAAsB,CAyLxB"}
|
|
@@ -98,6 +98,8 @@ export function createDelegationVerification(deps) {
|
|
|
98
98
|
didResolver,
|
|
99
99
|
signatureVerifier,
|
|
100
100
|
statusListResolver: delegationConfig?.statusListResolver,
|
|
101
|
+
cacheTtl: delegationConfig?.verificationCache?.ttlMs,
|
|
102
|
+
maxCacheSize: delegationConfig?.verificationCache?.maxEntries,
|
|
101
103
|
});
|
|
102
104
|
const buildDelegationErrorResponse = (error, reason) => ({
|
|
103
105
|
content: [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-kya-os.delegation-verify.js","sourceRoot":"","sources":["../../src/middleware/with-kya-os.delegation-verify.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"with-kya-os.delegation-verify.js","sourceRoot":"","sources":["../../src/middleware/with-kya-os.delegation-verify.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal TTL + FIFO-bounded map — the ONE eviction implementation shared by
|
|
3
|
+
* the delegation verifier's signature-result cache and the `withStatusCache`
|
|
4
|
+
* resolver wrapper (DRY). Internal utility; not exported from the package
|
|
5
|
+
* surface.
|
|
6
|
+
*
|
|
7
|
+
* Semantics: `ttlMs <= 0` or `maxEntries <= 0` disables storage entirely (an
|
|
8
|
+
* entry that is born expired or unstorable must never serve); expired entries
|
|
9
|
+
* are deleted on read; overwriting a key re-inserts it as newest; when full,
|
|
10
|
+
* the oldest inserted entry is evicted (simple FIFO, no LRU bookkeeping).
|
|
11
|
+
*/
|
|
12
|
+
export declare class TtlCache<T> {
|
|
13
|
+
private options;
|
|
14
|
+
private entries;
|
|
15
|
+
private insertionOrder;
|
|
16
|
+
constructor(options: {
|
|
17
|
+
ttlMs: number;
|
|
18
|
+
maxEntries: number;
|
|
19
|
+
});
|
|
20
|
+
get(key: string): T | undefined;
|
|
21
|
+
set(key: string, value: T): void;
|
|
22
|
+
delete(key: string): void;
|
|
23
|
+
deleteWhere(predicate: (key: string) => boolean): void;
|
|
24
|
+
clear(): void;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=ttl-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ttl-cache.d.ts","sourceRoot":"","sources":["../../src/utils/ttl-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,qBAAa,QAAQ,CAAC,CAAC;IAIT,OAAO,CAAC,OAAO;IAH3B,OAAO,CAAC,OAAO,CAAsD;IACrE,OAAO,CAAC,cAAc,CAAgB;gBAElB,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE;IAElE,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAU/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IAyBhC,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAMzB,WAAW,CAAC,SAAS,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI;IAMtD,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimal TTL + FIFO-bounded map — the ONE eviction implementation shared by
|
|
3
|
+
* the delegation verifier's signature-result cache and the `withStatusCache`
|
|
4
|
+
* resolver wrapper (DRY). Internal utility; not exported from the package
|
|
5
|
+
* surface.
|
|
6
|
+
*
|
|
7
|
+
* Semantics: `ttlMs <= 0` or `maxEntries <= 0` disables storage entirely (an
|
|
8
|
+
* entry that is born expired or unstorable must never serve); expired entries
|
|
9
|
+
* are deleted on read; overwriting a key re-inserts it as newest; when full,
|
|
10
|
+
* the oldest inserted entry is evicted (simple FIFO, no LRU bookkeeping).
|
|
11
|
+
*/
|
|
12
|
+
export class TtlCache {
|
|
13
|
+
options;
|
|
14
|
+
entries = new Map();
|
|
15
|
+
insertionOrder = [];
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = options;
|
|
18
|
+
}
|
|
19
|
+
get(key) {
|
|
20
|
+
const entry = this.entries.get(key);
|
|
21
|
+
if (!entry)
|
|
22
|
+
return undefined;
|
|
23
|
+
if (Date.now() > entry.expiresAt) {
|
|
24
|
+
this.delete(key);
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
return entry.value;
|
|
28
|
+
}
|
|
29
|
+
set(key, value) {
|
|
30
|
+
if (this.options.ttlMs <= 0 || this.options.maxEntries <= 0)
|
|
31
|
+
return;
|
|
32
|
+
// Overwrite = delete + re-insert, keeping `entries` and `insertionOrder`
|
|
33
|
+
// in bijection. Without this, N concurrent misses on one key leave N-1
|
|
34
|
+
// phantom order entries (a slow leak keyed by KB-scale cache keys), and
|
|
35
|
+
// an at-capacity refresh evicts an innocent neighbor.
|
|
36
|
+
if (this.entries.has(key))
|
|
37
|
+
this.delete(key);
|
|
38
|
+
// Evict oldest entries if the cache is full (simple FIFO)
|
|
39
|
+
while (this.entries.size >= this.options.maxEntries &&
|
|
40
|
+
this.insertionOrder.length > 0) {
|
|
41
|
+
const oldest = this.insertionOrder.shift();
|
|
42
|
+
if (oldest)
|
|
43
|
+
this.entries.delete(oldest);
|
|
44
|
+
}
|
|
45
|
+
this.entries.set(key, {
|
|
46
|
+
value,
|
|
47
|
+
expiresAt: Date.now() + this.options.ttlMs,
|
|
48
|
+
});
|
|
49
|
+
this.insertionOrder.push(key);
|
|
50
|
+
}
|
|
51
|
+
delete(key) {
|
|
52
|
+
this.entries.delete(key);
|
|
53
|
+
const index = this.insertionOrder.indexOf(key);
|
|
54
|
+
if (index !== -1)
|
|
55
|
+
this.insertionOrder.splice(index, 1);
|
|
56
|
+
}
|
|
57
|
+
deleteWhere(predicate) {
|
|
58
|
+
for (const key of [...this.entries.keys()]) {
|
|
59
|
+
if (predicate(key))
|
|
60
|
+
this.delete(key);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
clear() {
|
|
64
|
+
this.entries.clear();
|
|
65
|
+
this.insertionOrder = [];
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=ttl-cache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ttl-cache.js","sourceRoot":"","sources":["../../src/utils/ttl-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,MAAM,OAAO,QAAQ;IAIC;IAHZ,OAAO,GAAG,IAAI,GAAG,EAA2C,CAAC;IAC7D,cAAc,GAAa,EAAE,CAAC;IAEtC,YAAoB,OAA8C;QAA9C,YAAO,GAAP,OAAO,CAAuC;IAAG,CAAC;IAEtE,GAAG,CAAC,GAAW;QACb,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjB,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,GAAW,EAAE,KAAQ;QACvB,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,CAAC;YAAE,OAAO;QAEpE,yEAAyE;QACzE,uEAAuE;QACvE,wEAAwE;QACxE,sDAAsD;QACtD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE5C,0DAA0D;QAC1D,OACE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU;YAC5C,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAC9B,CAAC;YACD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAC3C,IAAI,MAAM;gBAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,KAAK;YACL,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK;SAC3C,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,GAAW;QAChB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC/C,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACzD,CAAC;IAED,WAAW,CAAC,SAAmC;QAC7C,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC3C,IAAI,SAAS,CAAC,GAAG,CAAC;gBAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kya-os/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.13.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",
|