@kya-os/mcp 1.18.0 → 1.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +377 -0
- package/CONFORMANCE.md +10 -4
- package/README.md +58 -1
- 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 +21 -10
- package/dist/card/revocation.js +12 -16
- 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/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/delegation/verification-method-key.d.ts +4 -1
- package/dist/delegation/verification-method-key.js.map +1 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +2 -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/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 +3 -1
|
@@ -29,8 +29,11 @@ import { createDelegationVerification } from "./with-kya-os.delegation-verify.js
|
|
|
29
29
|
import { createGrantResolution } from "./with-kya-os.grants.js";
|
|
30
30
|
import { createPolicyGate } from "./with-kya-os.policy-gate.js";
|
|
31
31
|
import { createDelegationGate } from "./with-kya-os.delegation-gate.js";
|
|
32
|
+
import { createOutcomeProver } from "./with-kya-os.outcome.js";
|
|
32
33
|
import { createSessionProof } from "./with-kya-os.session.js";
|
|
33
34
|
import { createProtocol } from "./with-kya-os.protocol.js";
|
|
35
|
+
/** The longest timer a JavaScript runtime keeps (2^31 - 1 ms, about 24.8 days). */
|
|
36
|
+
const MAX_PENDING_PROOF_TTL_MS = 2_147_483_647;
|
|
34
37
|
// The public type surface lives in `./with-kya-os.types.ts`; re-export it here so
|
|
35
38
|
// `import { KyaOsConfig, ... } from './with-kya-os'` continues to resolve unchanged.
|
|
36
39
|
export * from "./with-kya-os.types.js";
|
|
@@ -46,6 +49,10 @@ export * from "./with-kya-os.types.js";
|
|
|
46
49
|
* - You need custom request handler patterns
|
|
47
50
|
* - You want per-tool control over proof/delegation wrapping
|
|
48
51
|
*
|
|
52
|
+
* Connect such a server through `createKyaOsTransport`: proofs are made where
|
|
53
|
+
* that transport sends a result, and the wrappers refuse to run while no
|
|
54
|
+
* KYA-OS transport is open.
|
|
55
|
+
*
|
|
49
56
|
* @param config - Agent identity and session configuration
|
|
50
57
|
* @param cryptoProvider - Platform-specific crypto implementation
|
|
51
58
|
* @returns Middleware components for session management and proof generation
|
|
@@ -60,6 +67,13 @@ export * from "./with-kya-os.types.js";
|
|
|
60
67
|
* durable `SessionStore` via `config.session.sessionStore`.
|
|
61
68
|
*/
|
|
62
69
|
export function createKyaOsMiddleware(config, cryptoProvider) {
|
|
70
|
+
if (config.pendingProofTtlMs !== undefined &&
|
|
71
|
+
!(Number.isFinite(config.pendingProofTtlMs) &&
|
|
72
|
+
config.pendingProofTtlMs > 0 &&
|
|
73
|
+
config.pendingProofTtlMs <= MAX_PENDING_PROOF_TTL_MS)) {
|
|
74
|
+
// A timer longer than this overflows, and Node and browsers fire it at once.
|
|
75
|
+
throw new TypeError(`pendingProofTtlMs must be a positive number of milliseconds, at most ${MAX_PENDING_PROOF_TTL_MS}`);
|
|
76
|
+
}
|
|
63
77
|
if (config.audit && config.auditLog) {
|
|
64
78
|
throw new TypeError('Configure either audit or legacy auditLog, not both');
|
|
65
79
|
}
|
|
@@ -166,11 +180,19 @@ export function createKyaOsMiddleware(config, cryptoProvider) {
|
|
|
166
180
|
const { wrapWithDelegation } = createDelegationGate(deps, {
|
|
167
181
|
delegationVerification,
|
|
168
182
|
attachOutcomeProof: session.attachOutcomeProof,
|
|
183
|
+
requireProofLayer: session.requireProofLayer,
|
|
169
184
|
resolveExistingGrant,
|
|
170
185
|
bindGrantOnSuccess,
|
|
171
186
|
});
|
|
172
187
|
const { withPolicyGate } = createPolicyGate(deps, {
|
|
173
188
|
attachOutcomeProof: session.attachOutcomeProof,
|
|
189
|
+
requireProofLayer: session.requireProofLayer,
|
|
190
|
+
});
|
|
191
|
+
// Application code proves the outcomes it decides through the same
|
|
192
|
+
// attachOutcomeProof the gates use.
|
|
193
|
+
const { proveOutcome } = createOutcomeProver({
|
|
194
|
+
attachOutcomeProof: session.attachOutcomeProof,
|
|
195
|
+
requireProofLayer: session.requireProofLayer,
|
|
174
196
|
});
|
|
175
197
|
return {
|
|
176
198
|
identity: config.identity,
|
|
@@ -183,6 +205,7 @@ export function createKyaOsMiddleware(config, cryptoProvider) {
|
|
|
183
205
|
wrapWithProof: session.wrapWithProof,
|
|
184
206
|
wrapWithDelegation,
|
|
185
207
|
withPolicyGate,
|
|
208
|
+
proveOutcome,
|
|
186
209
|
};
|
|
187
210
|
}
|
|
188
211
|
//# sourceMappingURL=with-kya-os.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-kya-os.js","sourceRoot":"","sources":["../../src/middleware/with-kya-os.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AACxF,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EACL,cAAc,EACd,2BAA2B,GAE5B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAM7C,OAAO,EAAE,4BAA4B,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,kFAAkF;AAClF,qFAAqF;AACrF,cAAc,wBAAwB,CAAC;AAEvC
|
|
1
|
+
{"version":3,"file":"with-kya-os.js","sourceRoot":"","sources":["../../src/middleware/with-kya-os.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KYA-OS Middleware — `proveOutcome`, the public entry to outcome proofs.
|
|
3
|
+
*
|
|
4
|
+
* Application code that decides an authorization outcome itself (a provider
|
|
5
|
+
* enforcing OAuth scopes in-server, say) proves it here with the proof the
|
|
6
|
+
* gates attach to theirs. There is one implementation, `attachOutcomeProof`
|
|
7
|
+
* in `./with-kya-os.session.ts`; this module only adapts a request object to
|
|
8
|
+
* it, so the claims, `_meta` keys, profile handling, audit events and
|
|
9
|
+
* lifecycle stamp cannot drift between the gates and application code.
|
|
10
|
+
*/
|
|
11
|
+
import type { KyaOsOutcomeProver } from "./with-kya-os.types.js";
|
|
12
|
+
import type { AttachOutcomeProof, RequireProofLayer } from "./with-kya-os.deps.js";
|
|
13
|
+
/** Collaborators the outcome prover borrows from the session/proof sub-factory. */
|
|
14
|
+
export interface OutcomeProverWiring {
|
|
15
|
+
attachOutcomeProof: AttachOutcomeProof;
|
|
16
|
+
requireProofLayer: RequireProofLayer;
|
|
17
|
+
}
|
|
18
|
+
export declare function createOutcomeProver(wiring: OutcomeProverWiring): KyaOsOutcomeProver;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KYA-OS Middleware — `proveOutcome`, the public entry to outcome proofs.
|
|
3
|
+
*
|
|
4
|
+
* Application code that decides an authorization outcome itself (a provider
|
|
5
|
+
* enforcing OAuth scopes in-server, say) proves it here with the proof the
|
|
6
|
+
* gates attach to theirs. There is one implementation, `attachOutcomeProof`
|
|
7
|
+
* in `./with-kya-os.session.ts`; this module only adapts a request object to
|
|
8
|
+
* it, so the claims, `_meta` keys, profile handling, audit events and
|
|
9
|
+
* lifecycle stamp cannot drift between the gates and application code.
|
|
10
|
+
*/
|
|
11
|
+
import { withoutOutcomeMeta } from "./with-kya-os.session.js";
|
|
12
|
+
import { withoutControlArgs } from "./with-kya-os.helpers.js";
|
|
13
|
+
const OUTCOMES = new Set([
|
|
14
|
+
"needs_authorization",
|
|
15
|
+
"step_up_required",
|
|
16
|
+
"denied",
|
|
17
|
+
]);
|
|
18
|
+
export function createOutcomeProver(wiring) {
|
|
19
|
+
const { attachOutcomeProof, requireProofLayer } = wiring;
|
|
20
|
+
return {
|
|
21
|
+
async proveOutcome(request) {
|
|
22
|
+
requireProofLayer();
|
|
23
|
+
if (!OUTCOMES.has(request.outcome)) {
|
|
24
|
+
throw new TypeError(`proveOutcome: unknown outcome ${JSON.stringify(request.outcome)}; ` +
|
|
25
|
+
`expected one of ${[...OUTCOMES].join(", ")}`);
|
|
26
|
+
}
|
|
27
|
+
const params = withoutControlArgs(request.args);
|
|
28
|
+
// A copy, so the caller's result is never changed, without the `_meta`
|
|
29
|
+
// members only the middleware may set.
|
|
30
|
+
const result = { ...withoutOutcomeMeta(request.result) };
|
|
31
|
+
// The same members, plus `_meta`: still an R.
|
|
32
|
+
return attachOutcomeProof(result, request.toolName, params, request.sessionId, request.reason, request.outcome, params);
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=with-kya-os.outcome.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-kya-os.outcome.js","sourceRoot":"","sources":["../../src/middleware/with-kya-os.outcome.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AASH,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAA4B;IACvE,qBAAqB;IACrB,kBAAkB;IAClB,QAAQ;CACT,CAAC,CAAC;AAQH,MAAM,UAAU,mBAAmB,CAAC,MAA2B;IAC7D,MAAM,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,GAAG,MAAM,CAAC;IAEzD,OAAO;QACL,KAAK,CAAC,YAAY,CAA4B,OAAoC;YAChF,iBAAiB,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;gBACnC,MAAM,IAAI,SAAS,CACjB,iCAAiC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI;oBAClE,mBAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAChD,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAChD,uEAAuE;YACvE,uCAAuC;YACvC,MAAM,MAAM,GAAG,EAAE,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACzD,8CAA8C;YAC9C,OAAO,kBAAkB,CACvB,MAAM,EACN,OAAO,CAAC,QAAQ,EAChB,MAAM,EACN,OAAO,CAAC,SAAS,EACjB,OAAO,CAAC,MAAM,EACd,OAAO,CAAC,OAAO,EACf,MAAM,CACO,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -7,9 +7,10 @@
|
|
|
7
7
|
* human approval before the handler runs. Extracted from `./with-kya-os.ts`.
|
|
8
8
|
*/
|
|
9
9
|
import type { KyaOsPolicyGate } from "./with-kya-os.types.js";
|
|
10
|
-
import type { MiddlewareDeps, AttachOutcomeProof } from "./with-kya-os.deps.js";
|
|
10
|
+
import type { MiddlewareDeps, AttachOutcomeProof, RequireProofLayer } from "./with-kya-os.deps.js";
|
|
11
11
|
/** Collaborators the policy gate borrows from the session/proof sub-factory. */
|
|
12
12
|
export interface PolicyGateWiring {
|
|
13
13
|
attachOutcomeProof: AttachOutcomeProof;
|
|
14
|
+
requireProofLayer: RequireProofLayer;
|
|
14
15
|
}
|
|
15
16
|
export declare function createPolicyGate(deps: MiddlewareDeps, wiring: PolicyGateWiring): Pick<KyaOsPolicyGate, "withPolicyGate">;
|
|
@@ -17,7 +17,7 @@ import { KYA_OS_ERROR_CODES } from "../errors.js";
|
|
|
17
17
|
import { sanitizeForMessage, extractPolicyPrincipal } from "./with-kya-os.helpers.js";
|
|
18
18
|
export function createPolicyGate(deps, wiring) {
|
|
19
19
|
const { proofGenerator, cryptoProvider, audit } = deps;
|
|
20
|
-
const { attachOutcomeProof } = wiring;
|
|
20
|
+
const { attachOutcomeProof, requireProofLayer } = wiring;
|
|
21
21
|
const defaultRiskClassifier = new RiskClassifier();
|
|
22
22
|
const defaultPolicyEngine = new DefaultPolicyEngine();
|
|
23
23
|
function withPolicyGate(toolName, handler, opts = {}) {
|
|
@@ -26,6 +26,7 @@ export function createPolicyGate(deps, wiring) {
|
|
|
26
26
|
const approvalsKey = opts.approvalsArgKey ?? "_kyaos_approvals";
|
|
27
27
|
const isValidApprovalSignature = opts.isValidApprovalSignature ?? (async () => false);
|
|
28
28
|
return async (callArgs, sessionId, context) => {
|
|
29
|
+
requireProofLayer();
|
|
29
30
|
// Composed after wrapWithDelegation, the approvals argument has already
|
|
30
31
|
// been stripped and arrives in the call context; restore it so a step-up
|
|
31
32
|
// resume verifies the same grants either way.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"with-kya-os.policy-gate.js","sourceRoot":"","sources":["../../src/middleware/with-kya-os.policy-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAsB,MAAM,uBAAuB,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAoB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAQlD,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"with-kya-os.policy-gate.js","sourceRoot":"","sources":["../../src/middleware/with-kya-os.policy-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,17 @@
|
|
|
5
5
|
* live here, so the borrowing semantics are preserved exactly) and the two proof
|
|
6
6
|
* paths: `wrapWithProof` (success responses) and `attachOutcomeProof` (denied /
|
|
7
7
|
* step-up / needs-authorization outcomes). Extracted from `./with-kya-os.ts`.
|
|
8
|
+
*
|
|
9
|
+
* Neither path signs in the handler. The MCP SDK changes a result after the
|
|
10
|
+
* handler returns: SDK 2 adds `resultType` on the 2026-07-28 revision, which
|
|
11
|
+
* the envelope profile covers; both SDKs fill in a missing `content`, and SDK
|
|
12
|
+
* 2 appends a text item to `content` when `structuredContent` is not an
|
|
13
|
+
* object, which the body profile covers. Both paths therefore leave the proof
|
|
14
|
+
* to the outer layer, the withKyaOs transport, which makes it over the result
|
|
15
|
+
* it sends, under either profile.
|
|
8
16
|
*/
|
|
9
|
-
import type { KyaOsToolHandler } from "./with-kya-os.types.js";
|
|
10
|
-
import type { MiddlewareDeps, AttachOutcomeProof } from "./with-kya-os.deps.js";
|
|
17
|
+
import type { KyaOsToolHandler, KyaOsToolResult } from "./with-kya-os.types.js";
|
|
18
|
+
import type { MiddlewareDeps, AttachOutcomeProof, RequireProofLayer } from "./with-kya-os.deps.js";
|
|
11
19
|
/**
|
|
12
20
|
* The private `_meta` member a middleware's wrappers stamp their results with
|
|
13
21
|
* while an outer layer (the withKyaOs transport) reads them. It holds a random
|
|
@@ -17,7 +25,16 @@ import type { MiddlewareDeps, AttachOutcomeProof } from "./with-kya-os.deps.js";
|
|
|
17
25
|
* that.
|
|
18
26
|
*/
|
|
19
27
|
export declare const LIFECYCLE_STAMP_META_KEY = "org.kya-os/lifecycle-stamp";
|
|
20
|
-
|
|
28
|
+
/**
|
|
29
|
+
* The private `_meta` member that names the proof a wrapper left for the
|
|
30
|
+
* transport to make: a one-time id. What the proof
|
|
31
|
+
* claims stays in the middleware, keyed by that id, so code that can write a
|
|
32
|
+
* result cannot choose the claims. The transport redeems the id only on a
|
|
33
|
+
* result that also carries the middleware's stamp, and strips it as it strips
|
|
34
|
+
* the stamp. A string, so a copy of the result carries it too.
|
|
35
|
+
*/
|
|
36
|
+
export declare const PENDING_PROOF_META_KEY = "org.kya-os/pending-proof";
|
|
37
|
+
type ToolResult = KyaOsToolResult;
|
|
21
38
|
/**
|
|
22
39
|
* Remove the `_meta` members only the middleware may set (proofs, proof error,
|
|
23
40
|
* audit marker, lifecycle stamp) from a result it did not produce, keeping
|
|
@@ -25,16 +42,62 @@ type ToolResult = Awaited<ReturnType<KyaOsToolHandler>>;
|
|
|
25
42
|
* is removed.
|
|
26
43
|
*/
|
|
27
44
|
export declare function withoutOutcomeMeta<T extends ToolResult>(result: T): T;
|
|
28
|
-
/**
|
|
29
|
-
|
|
45
|
+
/**
|
|
46
|
+
* Remove the middleware's private members, which must never leave the
|
|
47
|
+
* process, from `result` and from everything nested in it, at any depth.
|
|
48
|
+
*/
|
|
49
|
+
export declare function withoutPrivateMeta<T extends ToolResult>(result: T): T;
|
|
50
|
+
/** Any value without the middleware's private `_meta` members, at any depth. */
|
|
51
|
+
export declare function withoutPrivateMembers(value: unknown): unknown;
|
|
52
|
+
/** What the outer layer (the withKyaOs transport) does with a middleware's results. */
|
|
53
|
+
export interface OuterProofLayer {
|
|
54
|
+
/**
|
|
55
|
+
* Count one more open transport, until the returned function is called.
|
|
56
|
+
* The wrappers refuse to run while none is open.
|
|
57
|
+
* Calling the returned function again does nothing.
|
|
58
|
+
*/
|
|
59
|
+
open(): () => void;
|
|
60
|
+
/** Whether the middleware's wrappers returned `result`: it carries their stamp. */
|
|
61
|
+
owns(result: ToolResult): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* `result` as it may leave the process: without the private members, and,
|
|
64
|
+
* when a wrapper left its proof to the transport, carrying that proof, made
|
|
65
|
+
* over `result` as it is now. Never throws: a proof that cannot be made is
|
|
66
|
+
* reported on the result, as one that fails in a wrapper is. A pending
|
|
67
|
+
* proof is redeemed once, and, when the result answers a `tools/call` the
|
|
68
|
+
* transport tracked, only by a proof left for that tool (`answering`).
|
|
69
|
+
*/
|
|
70
|
+
send(result: ToolResult, answering?: {
|
|
71
|
+
toolName: string;
|
|
72
|
+
}): Promise<ToolResult>;
|
|
73
|
+
/**
|
|
74
|
+
* Any other part of an outgoing message (a notification's or request's
|
|
75
|
+
* `params`, an error's `data`) as it may leave the process: without the
|
|
76
|
+
* private members at any depth. A waiting proof whose id is found there
|
|
77
|
+
* is closed, so nothing can redeem it. Never throws.
|
|
78
|
+
*/
|
|
79
|
+
scrub(value: unknown): unknown;
|
|
80
|
+
}
|
|
30
81
|
/**
|
|
31
82
|
* Tell the middleware behind `wrapWithProof` that an outer layer (the withKyaOs
|
|
32
83
|
* transport) reads its results. From then on its wrappers stamp what they
|
|
33
|
-
* return with the middleware's token
|
|
84
|
+
* return with the middleware's token and leave their proofs to the layer.
|
|
85
|
+
* Returns the layer's view of those results, or
|
|
34
86
|
* undefined for a middleware this module did not create, whose results are
|
|
35
87
|
* then never treated as its own.
|
|
36
88
|
*/
|
|
37
|
-
export declare function attachOuterProofLayer(wrapWithProof: object):
|
|
89
|
+
export declare function attachOuterProofLayer(wrapWithProof: object): OuterProofLayer | undefined;
|
|
90
|
+
/**
|
|
91
|
+
* The fallback session for a call that threaded none, or why there is none:
|
|
92
|
+
* `ambiguous` when several sessions are live and the middleware refuses to
|
|
93
|
+
* pick one, which might be another client's.
|
|
94
|
+
*/
|
|
95
|
+
export type FallbackSession = {
|
|
96
|
+
sessionId: string;
|
|
97
|
+
} | {
|
|
98
|
+
sessionId: undefined;
|
|
99
|
+
ambiguous: boolean;
|
|
100
|
+
};
|
|
38
101
|
export interface SessionProof {
|
|
39
102
|
/** Establish a session from a handshake and cache it as the fallback. */
|
|
40
103
|
handleHandshake(args: Record<string, unknown>): Promise<{
|
|
@@ -46,14 +109,17 @@ export interface SessionProof {
|
|
|
46
109
|
}>;
|
|
47
110
|
/**
|
|
48
111
|
* Resolve the single-process fallback session for a call that threaded none —
|
|
49
|
-
* or auto-create one when `config.autoSession` is set. Returns
|
|
50
|
-
* the proof) when
|
|
112
|
+
* or auto-create one when `config.autoSession` is set. Returns no session
|
|
113
|
+
* (skip the proof) when there is none, or, marked `ambiguous`, when
|
|
114
|
+
* attribution would be ambiguous (multiple live sessions).
|
|
51
115
|
*/
|
|
52
|
-
ensureSession(): Promise<
|
|
116
|
+
ensureSession(): Promise<FallbackSession>;
|
|
53
117
|
/** Wrap a tool handler to attach a holder-of-key proof to success responses. */
|
|
54
118
|
wrapWithProof<T extends Record<string, unknown> = Record<string, unknown>>(toolName: string, handler: KyaOsToolHandler<T>): KyaOsToolHandler;
|
|
55
119
|
/** Attach a signed proof recording an authorization outcome to a response. */
|
|
56
120
|
attachOutcomeProof: AttachOutcomeProof;
|
|
121
|
+
/** Refuse a wrapped call whose proof could not be made where it is sent. */
|
|
122
|
+
requireProofLayer: RequireProofLayer;
|
|
57
123
|
}
|
|
58
124
|
export declare function createSessionProof(deps: MiddlewareDeps): SessionProof;
|
|
59
125
|
export {};
|