@kya-os/mcp 1.18.0 → 1.20.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 +336 -0
- package/CONFORMANCE.md +10 -4
- package/README.md +57 -0
- package/SPEC.md +37 -3
- package/dist/card/cimd.js +6 -2
- package/dist/card/cimd.js.map +1 -1
- package/dist/card/index.d.ts +1 -0
- package/dist/card/index.js +1 -0
- package/dist/card/index.js.map +1 -1
- package/dist/card/revocation.d.ts +15 -4
- package/dist/card/revocation.js +9 -4
- package/dist/card/revocation.js.map +1 -1
- package/dist/card/status-list-proof.d.ts +32 -0
- package/dist/card/status-list-proof.js +102 -0
- package/dist/card/status-list-proof.js.map +1 -0
- package/dist/delegation/verification-method-key.d.ts +4 -1
- package/dist/delegation/verification-method-key.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/middleware/index.d.ts +3 -1
- package/dist/middleware/index.js +2 -0
- package/dist/middleware/index.js.map +1 -1
- package/dist/middleware/kya-os-transport.d.ts +43 -12
- package/dist/middleware/kya-os-transport.js +151 -28
- package/dist/middleware/kya-os-transport.js.map +1 -1
- package/dist/middleware/mcp-tool-callback.d.ts +48 -0
- package/dist/middleware/mcp-tool-callback.js +38 -0
- package/dist/middleware/mcp-tool-callback.js.map +1 -0
- package/dist/middleware/serve-in-process.d.ts +41 -0
- package/dist/middleware/serve-in-process.js +86 -0
- package/dist/middleware/serve-in-process.js.map +1 -0
- package/dist/middleware/with-kya-os-server.d.ts +14 -3
- package/dist/middleware/with-kya-os-server.js +4 -1
- package/dist/middleware/with-kya-os-server.js.map +1 -1
- package/dist/middleware/with-kya-os.config-types.d.ts +24 -0
- package/dist/middleware/with-kya-os.d.ts +4 -0
- package/dist/middleware/with-kya-os.delegation-gate.d.ts +2 -1
- package/dist/middleware/with-kya-os.delegation-gate.js +12 -18
- package/dist/middleware/with-kya-os.delegation-gate.js.map +1 -1
- package/dist/middleware/with-kya-os.delegation-verify.d.ts +7 -12
- package/dist/middleware/with-kya-os.delegation-verify.js +37 -9
- package/dist/middleware/with-kya-os.delegation-verify.js.map +1 -1
- package/dist/middleware/with-kya-os.deps.d.ts +15 -4
- package/dist/middleware/with-kya-os.helpers.d.ts +5 -0
- package/dist/middleware/with-kya-os.helpers.js +13 -0
- package/dist/middleware/with-kya-os.helpers.js.map +1 -1
- package/dist/middleware/with-kya-os.js +23 -0
- package/dist/middleware/with-kya-os.js.map +1 -1
- package/dist/middleware/with-kya-os.outcome.d.ts +18 -0
- package/dist/middleware/with-kya-os.outcome.js +36 -0
- package/dist/middleware/with-kya-os.outcome.js.map +1 -0
- package/dist/middleware/with-kya-os.policy-gate.d.ts +2 -1
- package/dist/middleware/with-kya-os.policy-gate.js +2 -1
- package/dist/middleware/with-kya-os.policy-gate.js.map +1 -1
- package/dist/middleware/with-kya-os.session.d.ts +76 -10
- package/dist/middleware/with-kya-os.session.js +739 -164
- package/dist/middleware/with-kya-os.session.js.map +1 -1
- package/dist/middleware/with-kya-os.types.d.ts +102 -8
- package/dist/proof/generator.d.ts +13 -0
- package/dist/proof/generator.js +15 -0
- package/dist/proof/generator.js.map +1 -1
- package/dist/proof/verifier.js +14 -9
- package/dist/proof/verifier.js.map +1 -1
- package/package.json +3 -1
|
@@ -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,
|
|
14
|
-
*
|
|
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
|
|
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
|
/**
|
|
@@ -72,6 +75,14 @@ export interface RevocationCheckerDeps {
|
|
|
72
75
|
now?: () => number;
|
|
73
76
|
/** `statusPurpose` to honour; default {@link STATUS_PURPOSE_REVOCATION}. */
|
|
74
77
|
statusPurpose?: string;
|
|
78
|
+
/**
|
|
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;
|
|
75
86
|
/**
|
|
76
87
|
* Injectable GZIP inflation seam ({@link Decompress}). DEFAULT = `node:zlib` `gunzipSync` bounded
|
|
77
88
|
* to the 16 MiB {@link MAX_STATUS_LIST_BYTES} `maxOutputLength` cap (so a decompression bomb
|
package/dist/card/revocation.js
CHANGED
|
@@ -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,
|
|
14
|
-
*
|
|
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
|
|
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
|
|
@@ -44,6 +46,9 @@ export function createRevocationChecker(deps) {
|
|
|
44
46
|
return async function check(entry) {
|
|
45
47
|
try {
|
|
46
48
|
const credential = await fetchStatusList(entry.statusListCredential, deps.fetch);
|
|
49
|
+
if (deps.verifyStatusList && (await deps.verifyStatusList(credential)) !== true) {
|
|
50
|
+
throw new Error('revocation: status-list proof rejected');
|
|
51
|
+
}
|
|
47
52
|
assertStatusPurpose(statusListSubject(credential).statusPurpose, wantedPurpose);
|
|
48
53
|
const bits = await decodeStatusList(credential, decompress);
|
|
49
54
|
const revoked = readStatusBit(bits, parseStatusListIndex(entry.statusListIndex));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revocation.js","sourceRoot":"","sources":["../../src/card/revocation.ts"],"names":[],"mappings":"AAAA
|
|
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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"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import type { VerificationMethod } from './vc-verifier.types.js';
|
|
2
|
+
/** The verification-method fields that can carry an Ed25519 public key. */
|
|
3
|
+
type VerificationMethodKeyMaterial = Pick<VerificationMethod, 'publicKeyJwk' | 'publicKeyMultibase' | 'publicKeyBase58'>;
|
|
2
4
|
/**
|
|
3
5
|
* The verification method's public key as an Ed25519 OKP JWK: an existing
|
|
4
6
|
* `publicKeyJwk` is returned untouched (byte-for-byte — zero behavior change
|
|
@@ -7,8 +9,9 @@ import type { VerificationMethod } from './vc-verifier.types.js';
|
|
|
7
9
|
* prefix) or legacy `publicKeyBase58`. `undefined` when no usable Ed25519 key
|
|
8
10
|
* is present (fail-closed).
|
|
9
11
|
*/
|
|
10
|
-
export declare function verificationMethodJwk(method:
|
|
12
|
+
export declare function verificationMethodJwk(method: VerificationMethodKeyMaterial): {
|
|
11
13
|
kty: string;
|
|
12
14
|
crv: string;
|
|
13
15
|
x: string;
|
|
14
16
|
} | undefined;
|
|
17
|
+
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verification-method-key.js","sourceRoot":"","sources":["../../src/delegation/verification-method-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,sCAAsC;AACtC,MAAM,mBAAmB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"verification-method-key.js","sourceRoot":"","sources":["../../src/delegation/verification-method-key.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,cAAc,EACd,yBAAyB,EACzB,yBAAyB,GAC1B,MAAM,uBAAuB,CAAC;AAG/B,sCAAsC;AACtC,MAAM,mBAAmB,GAAG,GAAG,CAAC;AAQhC;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,MAAqC;IAErC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,YAAuD,CAAC;IACxE,CAAC;IAED,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,OAAO,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/C,CAAC;AAED,iHAAiH;AACjH,SAAS,aAAa,CAAC,MAAqC;IAC1D,IAAI,CAAC;QACH,IAAI,MAAM,CAAC,kBAAkB,EAAE,UAAU,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/D,wEAAwE;YACxE,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,wBAAwB,CAAC,CAAC;YAC3F,MAAM,QAAQ,GACZ,OAAO,CAAC,MAAM,KAAK,yBAAyB,GAAG,yBAAyB,CAAC,MAAM;gBAC/E,OAAO,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBAC3C,OAAO,CAAC,CAAC,CAAC,KAAK,yBAAyB,CAAC,CAAC,CAAC;gBACzC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,MAAM,CAAC;gBACjD,CAAC,CAAC,OAAO,CAAC;YACd,OAAO,QAAQ,CAAC,MAAM,KAAK,yBAAyB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9E,CAAC;QACD,IAAI,MAAM,CAAC,eAAe,EAAE,CAAC;YAC3B,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC,CAAC;YAC/E,OAAO,OAAO,CAAC,MAAM,KAAK,yBAAyB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5E,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC,CAAC,iCAAiC;IACrD,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ export { AuditLogProvider, MemoryAuditLogProvider, NoopAuditLogProvider, buildAu
|
|
|
51
51
|
export * from './audit/index.js';
|
|
52
52
|
export { GrantStore, MemoryGrantStore, type Grant, type MemoryGrantStoreOptions, } from './providers/grant-store.js';
|
|
53
53
|
export { PendingFlowStore, MemoryPendingFlowStore, type PendingFlow, type MemoryPendingFlowStoreOptions, } from './authz/oidc/pending-flow-store.js';
|
|
54
|
-
export { createKyaOsMiddleware, type KyaOsConfig, type KyaOsDelegationConfig, type KyaOsIdentityConfig, type KyaOsMiddleware, type KyaOsToolDefinition, type KyaOsToolHandler, type KyaOsServer, withKyaOs, generateIdentity, type WithKyaOsOptions, } from './middleware/index.js';
|
|
54
|
+
export { createKyaOsMiddleware, type KyaOsConfig, type KyaOsDelegationConfig, type KyaOsIdentityConfig, type KyaOsMiddleware, type KyaOsToolDefinition, type KyaOsToolHandler, type KyaOsToolResult, type KyaOsServer, type KyaOsAuthorizationOutcome, type KyaOsOutcomeProofRequest, type KyaOsOutcomeProver, type KyaOsChallengeResult, type KyaOsChallengeFormatter, withKyaOs, generateIdentity, type WithKyaOsOptions, toMcpToolCallback, type McpToolCallback, type McpToolCallbackResult, createKyaOsTransport, serveInProcess, type InProcessServer, } from './middleware/index.js';
|
|
55
55
|
export * from './policy/index.js';
|
|
56
56
|
export { matchScope, scopeSatisfies, type ScopeMatcher, type ScopeSatisfaction, } from './delegation/scope-matcher.js';
|
|
57
57
|
export { logger, createDefaultConsoleLogger, type Logger, type Level, } from './logging/index.js';
|
package/dist/index.js
CHANGED
|
@@ -63,7 +63,7 @@ export { GrantStore, MemoryGrantStore, } from './providers/grant-store.js';
|
|
|
63
63
|
// Pending OAuth/OIDC PKCE-flow store (durable resume across instances/restarts).
|
|
64
64
|
export { PendingFlowStore, MemoryPendingFlowStore, } from './authz/oidc/pending-flow-store.js';
|
|
65
65
|
// Middleware
|
|
66
|
-
export { createKyaOsMiddleware, withKyaOs, generateIdentity, } from './middleware/index.js';
|
|
66
|
+
export { createKyaOsMiddleware, withKyaOs, generateIdentity, toMcpToolCallback, createKyaOsTransport, serveInProcess, } from './middleware/index.js';
|
|
67
67
|
// Policy-as-Code subsystem + step-up gate
|
|
68
68
|
export * from './policy/index.js';
|
|
69
69
|
export { matchScope, scopeSatisfies, } from './delegation/scope-matcher.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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"}
|
|
@@ -6,8 +6,10 @@
|
|
|
6
6
|
*
|
|
7
7
|
* For the low-level `Server` API or custom patterns, use `createKyaOsMiddleware` directly.
|
|
8
8
|
*/
|
|
9
|
-
export { createKyaOsMiddleware, type KyaOsConfig, type KyaOsDelegationConfig, type KyaOsIdentityConfig, type KyaOsMiddleware, type KyaOsToolDefinition, type KyaOsToolHandler, type KyaOsServer, } from './with-kya-os.js';
|
|
9
|
+
export { createKyaOsMiddleware, type KyaOsConfig, type KyaOsDelegationConfig, type KyaOsIdentityConfig, type KyaOsMiddleware, type KyaOsToolDefinition, type KyaOsToolHandler, type KyaOsToolResult, type KyaOsServer, type KyaOsAuthorizationOutcome, type KyaOsOutcomeProofRequest, type KyaOsOutcomeProver, type KyaOsChallengeResult, type KyaOsChallengeFormatter, } from './with-kya-os.js';
|
|
10
10
|
export { withKyaOs, generateIdentity, type WithKyaOsOptions, } from './with-kya-os-server.js';
|
|
11
|
+
export { toMcpToolCallback, type McpToolCallback, type McpToolCallbackResult, } from './mcp-tool-callback.js';
|
|
11
12
|
export { createKyaOsTransport, type Transport, type JSONRPCMessage, } from './kya-os-transport.js';
|
|
13
|
+
export { serveInProcess, type InProcessServer } from './serve-in-process.js';
|
|
12
14
|
export { card, CardBuilder, type CardBuilderInit, type AccountableToOptions, type VcInput, } from '../card/builder.js';
|
|
13
15
|
export { withKyaOsCard, requireProof, readCardProof, type KyaOsCardMount, type ServerJsonLike, type DidDocumentLike, type ProofGuard, type ProofGateResult, type ProofGateError, type ProofGateCode, type RequireProofOptions, type MinProofLevel, } from '../card/middleware.js';
|
package/dist/middleware/index.js
CHANGED
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
*/
|
|
9
9
|
export { createKyaOsMiddleware, } from './with-kya-os.js';
|
|
10
10
|
export { withKyaOs, generateIdentity, } from './with-kya-os-server.js';
|
|
11
|
+
export { toMcpToolCallback, } from './mcp-tool-callback.js';
|
|
11
12
|
export { createKyaOsTransport, } from './kya-os-transport.js';
|
|
13
|
+
export { serveInProcess } from './serve-in-process.js';
|
|
12
14
|
// Entity Card DevX surface — the 10-minute adoption path. The fluent `card()` builder and the
|
|
13
15
|
// `withKyaOsCard` / `requireProof` wrappers hide the RFC 9421/9449/8785 machinery behind
|
|
14
16
|
// ergonomics (see `src/card/builder.ts` + `src/card/middleware.ts`).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EACL,qBAAqB,GActB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,SAAS,EACT,gBAAgB,GAEjB,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EACL,iBAAiB,GAGlB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EACL,oBAAoB,GAGrB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,cAAc,EAAwB,MAAM,uBAAuB,CAAC;AAE7E,8FAA8F;AAC9F,yFAAyF;AACzF,qEAAqE;AACrE,OAAO,EACL,IAAI,EACJ,WAAW,GAIZ,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,aAAa,GAUd,MAAM,uBAAuB,CAAC"}
|
|
@@ -13,30 +13,61 @@
|
|
|
13
13
|
* 1. Incoming `tools/call` requests are captured (by id) to record tool
|
|
14
14
|
* name and arguments for proof generation.
|
|
15
15
|
* 2. Outgoing responses for those ids get a proof injected into `_meta`,
|
|
16
|
-
* unless the middleware's own wrappers
|
|
17
|
-
*
|
|
18
|
-
* 3.
|
|
19
|
-
*
|
|
16
|
+
* unless the middleware's own wrappers produced the result, which they
|
|
17
|
+
* mark with a private per-middleware stamp.
|
|
18
|
+
* 3. The wrappers leave their proofs here, and every proof is made in
|
|
19
|
+
* `send()`, over the result as the MCP SDK finished it: the SDK changes
|
|
20
|
+
* a result after the handler returns (`resultType` on the 2026-07-28
|
|
21
|
+
* revision, a filled-in or appended `content`), and the proof covers
|
|
22
|
+
* what it covers of the result the client receives.
|
|
23
|
+
* 4. All other message types pass through unmodified, except that the
|
|
24
|
+
* middleware's private members are removed from every result before it
|
|
25
|
+
* is sent.
|
|
20
26
|
*
|
|
21
27
|
* @module kya-os-transport
|
|
22
28
|
*/
|
|
23
29
|
import type { KyaOsMiddleware } from "./with-kya-os.js";
|
|
24
|
-
/**
|
|
30
|
+
/**
|
|
31
|
+
* Minimal Transport interface — matches @modelcontextprotocol/sdk Transport.
|
|
32
|
+
* The callbacks are declared as methods, so an SDK transport, whose callbacks
|
|
33
|
+
* take the SDK's own message type, is accepted as it is (SDK 1 and SDK 2).
|
|
34
|
+
* The SDK's send options and message context (`extra`: the session id,
|
|
35
|
+
* `authInfo`, `requestInfo`) are opaque here and passed through unchanged.
|
|
36
|
+
*/
|
|
25
37
|
export interface Transport {
|
|
26
38
|
start(): Promise<void>;
|
|
27
|
-
send(message: JSONRPCMessage): Promise<void>;
|
|
39
|
+
send(message: JSONRPCMessage, options?: unknown): Promise<void>;
|
|
28
40
|
close(): Promise<void>;
|
|
29
|
-
onmessage
|
|
30
|
-
onclose
|
|
31
|
-
onerror
|
|
41
|
+
onmessage?(message: JSONRPCMessage, extra?: unknown): void;
|
|
42
|
+
onclose?(): void;
|
|
43
|
+
onerror?(error: Error): void;
|
|
44
|
+
sessionId?: string;
|
|
45
|
+
setProtocolVersion?(version: string): void;
|
|
46
|
+
setSupportedProtocolVersions?(versions: string[]): void;
|
|
47
|
+
/** SDK 2: installs per-tool OAuth `scopeChallenge` enforcement on an HTTP transport. */
|
|
48
|
+
setScopeChallengeResolver?(resolver: unknown): void;
|
|
49
|
+
readonly hasPerRequestStream?: boolean;
|
|
32
50
|
}
|
|
33
51
|
export type JSONRPCMessage = Record<string, unknown>;
|
|
34
52
|
/**
|
|
35
53
|
* Creates a transport wrapper that injects KYA-OS proofs into `tools/call`
|
|
36
|
-
* responses
|
|
54
|
+
* responses, and makes the proofs the middleware's wrappers and
|
|
55
|
+
* `proveOutcome` leave to it, over each result as it is sent. A server on the
|
|
56
|
+
* low-level `Server` API connects through it:
|
|
57
|
+
* `server.connect(createKyaOsTransport(transport, kyaos))`.
|
|
58
|
+
*
|
|
59
|
+
* It proves and audits the result of every tool it is not told to exclude,
|
|
60
|
+
* including tools registered without a wrapper, as `withKyaOs` does. A
|
|
61
|
+
* low-level server that used only the wrappers on an unwrapped transport,
|
|
62
|
+
* which 1.19.0 allowed, sent its unwrapped tools' results unproven; through
|
|
63
|
+
* this transport they carry a proof too.
|
|
37
64
|
*
|
|
38
65
|
* @param inner - The real transport (Stdio, HTTP, etc.)
|
|
39
66
|
* @param kyaos - Configured KyaOsMiddleware instance
|
|
40
|
-
* @param exclude -
|
|
67
|
+
* @param exclude - More tool names whose results are not proved by the
|
|
68
|
+
* transport itself, in addition to the protocol tools `_kyaos` and
|
|
69
|
+
* `_kyaos_handshake`, which are always excluded (as `excludeTools` adds
|
|
70
|
+
* to them in `withKyaOs`). A wrapper's own proof is made whatever this
|
|
71
|
+
* says.
|
|
41
72
|
*/
|
|
42
|
-
export declare function createKyaOsTransport(inner: Transport, kyaos: KyaOsMiddleware, exclude?: string[]): Transport;
|
|
73
|
+
export declare function createKyaOsTransport(inner: Transport, kyaos: KyaOsMiddleware, exclude?: readonly string[]): Transport;
|