@mcpose/audit 2.0.2 → 2.0.3

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.
@@ -0,0 +1,12 @@
1
+ import type { MerkleProof } from './types.js';
2
+ export declare function sha256hex(data: string | Buffer): string;
3
+ export declare function hmacSha256hex(data: string | Buffer, key: Buffer): string;
4
+ /**
5
+ * HMAC-SHA256(JSON(entryWithoutChainHash) + prevChainHash, signingKey).
6
+ * The entry is serialized without its own chainHash to avoid circular dependency.
7
+ */
8
+ export declare function computeChainHash(entryWithoutChainHash: Record<string, unknown>, prevChainHash: string, signingKey: Buffer): string;
9
+ export declare function computeMerkleRoot(hashes: string[]): string;
10
+ export declare function computeMerkleProof(hashes: string[], index: number): MerkleProof;
11
+ export declare function verifyMerkleProof(leafHash: string, proof: MerkleProof, root: string): boolean;
12
+ //# sourceMappingURL=chain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.d.ts","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAExE;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9C,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,GACjB,MAAM,CAGR;AAaD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ1D;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAoB/E;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,WAAW,EAClB,IAAI,EAAE,MAAM,GACX,OAAO,CAUT"}
package/dist/chain.js ADDED
@@ -0,0 +1,66 @@
1
+ import { createHash, createHmac } from 'node:crypto';
2
+ export function sha256hex(data) {
3
+ return createHash('sha256').update(data).digest('hex');
4
+ }
5
+ export function hmacSha256hex(data, key) {
6
+ return createHmac('sha256', key).update(data).digest('hex');
7
+ }
8
+ /**
9
+ * HMAC-SHA256(JSON(entryWithoutChainHash) + prevChainHash, signingKey).
10
+ * The entry is serialized without its own chainHash to avoid circular dependency.
11
+ */
12
+ export function computeChainHash(entryWithoutChainHash, prevChainHash, signingKey) {
13
+ const data = JSON.stringify(entryWithoutChainHash) + prevChainHash;
14
+ return hmacSha256hex(data, signingKey);
15
+ }
16
+ function nextPow2Layer(hashes) {
17
+ const layer = [...hashes];
18
+ // Pad to even length by duplicating the last node (standard Merkle convention)
19
+ if (layer.length % 2 === 1)
20
+ layer.push(layer[layer.length - 1]);
21
+ const next = [];
22
+ for (let i = 0; i < layer.length; i += 2) {
23
+ next.push(sha256hex(layer[i] + layer[i + 1]));
24
+ }
25
+ return next;
26
+ }
27
+ export function computeMerkleRoot(hashes) {
28
+ if (hashes.length === 0)
29
+ return sha256hex('');
30
+ if (hashes.length === 1)
31
+ return hashes[0];
32
+ let layer = [...hashes];
33
+ while (layer.length > 1) {
34
+ layer = nextPow2Layer(layer);
35
+ }
36
+ return layer[0];
37
+ }
38
+ export function computeMerkleProof(hashes, index) {
39
+ const siblings = [];
40
+ const directions = [];
41
+ let layer = [...hashes];
42
+ let idx = index;
43
+ while (layer.length > 1) {
44
+ // Pad odd layers
45
+ if (layer.length % 2 === 1)
46
+ layer.push(layer[layer.length - 1]);
47
+ const siblingIdx = idx % 2 === 0 ? idx + 1 : idx - 1;
48
+ siblings.push(layer[siblingIdx]);
49
+ directions.push(idx % 2 === 0 ? 'right' : 'left');
50
+ layer = nextPow2Layer(layer.slice(0, layer.length));
51
+ idx = Math.floor(idx / 2);
52
+ }
53
+ return { index, siblings, directions };
54
+ }
55
+ export function verifyMerkleProof(leafHash, proof, root) {
56
+ let current = leafHash;
57
+ for (let i = 0; i < proof.siblings.length; i++) {
58
+ const sibling = proof.siblings[i];
59
+ const dir = proof.directions[i];
60
+ current = dir === 'right'
61
+ ? sha256hex(current + sibling)
62
+ : sha256hex(sibling + current);
63
+ }
64
+ return current === root;
65
+ }
66
+ //# sourceMappingURL=chain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chain.js","sourceRoot":"","sources":["../src/chain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { SensitivityTier, SensitivityResolverFn, HashAlgorithm, SigningKeyProvider, CostMetadata, AuditEventBase, LowAuditEvent, MediumAuditEvent, HighAuditEvent, AuditEvent, MerkleProof, ReplayManifest, AuditOptions, AuditMiddlewareHandle, } from './types.js';
2
+ export { createSensitivityResolver } from './sensitivity.js';
3
+ export { createDefaultSigningKeyProvider } from './signingKey.js';
4
+ export { createAuditMiddleware } from './middleware.js';
5
+ export { computeMerkleRoot, computeMerkleProof, verifyMerkleProof } from './chain.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,eAAe,EACf,qBAAqB,EACrB,aAAa,EACb,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,WAAW,EACX,cAAc,EACd,YAAY,EACZ,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,5 @@
1
+ export { createSensitivityResolver } from './sensitivity.js';
2
+ export { createDefaultSigningKeyProvider } from './signingKey.js';
3
+ export { createAuditMiddleware } from './middleware.js';
4
+ export { computeMerkleRoot, computeMerkleProof, verifyMerkleProof } from './chain.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AuditMiddlewareHandle, AuditOptions } from './types.js';
2
+ export declare function createAuditMiddleware(options: AuditOptions): AuditMiddlewareHandle;
3
+ //# sourceMappingURL=middleware.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,qBAAqB,EACrB,YAAY,EAKb,MAAM,YAAY,CAAC;AAuCpB,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,YAAY,GAAG,qBAAqB,CAyGlF"}
@@ -0,0 +1,157 @@
1
+ import { createCipheriv, randomBytes, createHmac } from 'node:crypto';
2
+ import { computeChainHash, computeMerkleProof, computeMerkleRoot, sha256hex } from './chain.js';
3
+ // Domain-separation labels for subkey derivation. The version segment lets the
4
+ // derivation scheme rotate without colliding with chains written under an old scheme.
5
+ const DOMAIN_CHAIN = Buffer.from('mcpose/v1/chain');
6
+ const DOMAIN_ENC = Buffer.from('mcpose/v1/enc');
7
+ function aesEncrypt(plaintext, key) {
8
+ const iv = randomBytes(12);
9
+ const cipher = createCipheriv('aes-256-gcm', key.subarray(0, 32), iv);
10
+ const encrypted = Buffer.concat([cipher.update(plaintext, 'utf8'), cipher.final()]);
11
+ const tag = cipher.getAuthTag();
12
+ return Buffer.concat([iv, tag, encrypted]).toString('base64');
13
+ }
14
+ function deriveEventKey(encRoot, eventId) {
15
+ return createHmac('sha256', encRoot).update(eventId).digest();
16
+ }
17
+ function anonymousIdentity() {
18
+ return {
19
+ sub: 'anonymous',
20
+ type: 'service',
21
+ roles: [],
22
+ claims: {},
23
+ resolvedAt: new Date().toISOString(),
24
+ source: 'custom',
25
+ };
26
+ }
27
+ export function createAuditMiddleware(options) {
28
+ const sessions = new Map();
29
+ // Private subkeys, derived once from the signing secret THROUGH the oracle with
30
+ // domain separation. The provider never exposes raw key bytes, and keyId must
31
+ // NOT be used as key material — keyId is a public identifier, published in
32
+ // ReplayManifest.signedBy. sign() is HMAC-SHA256 per the SigningKeyProvider
33
+ // contract, hence a PRF suitable for key derivation.
34
+ // chainKey — keys the per-entry HMAC chain (forgery resistance)
35
+ // encRoot — root for per-event AES-256 keys (high-tier confidentiality)
36
+ // Cache the promise so concurrent first calls share one derivation.
37
+ let subkeys;
38
+ const deriveSubkeys = () => (subkeys ?? (subkeys = (async () => {
39
+ const [chainKey, encRoot] = await Promise.all([
40
+ options.signingKey.sign(DOMAIN_CHAIN),
41
+ options.signingKey.sign(DOMAIN_ENC),
42
+ ]);
43
+ return { chainKey, encRoot };
44
+ })()));
45
+ const middleware = async (req, next, ctx) => {
46
+ const { chainKey, encRoot } = await deriveSubkeys();
47
+ const start = Date.now();
48
+ const identity = ctx.identity ?? anonymousIdentity();
49
+ const sessionId = ctx.sessionId;
50
+ if (sessionId && !sessions.has(sessionId)) {
51
+ sessions.set(sessionId, {
52
+ events: [],
53
+ prevChainHash: '',
54
+ startedAt: new Date().toISOString(),
55
+ identity,
56
+ });
57
+ }
58
+ const session = sessionId ? sessions.get(sessionId) : undefined;
59
+ const position = session?.events.length ?? 0;
60
+ const tool = req.params.name;
61
+ const args = req.params.arguments ?? {};
62
+ const tier = options.sensitivityResolver(tool, identity, args);
63
+ let outcome = 'success';
64
+ let result;
65
+ let threw = false;
66
+ try {
67
+ result = await next(req);
68
+ }
69
+ catch (err) {
70
+ outcome = 'error';
71
+ threw = true;
72
+ result = undefined;
73
+ const event = buildEvent({
74
+ ctx, identity, tool, args, result: undefined,
75
+ duration_ms: Date.now() - start, outcome, position,
76
+ prevChainHash: session?.prevChainHash ?? '',
77
+ tier, chainKey, encRoot,
78
+ });
79
+ advanceSession(session, event);
80
+ await options.onEvent(event);
81
+ throw err;
82
+ }
83
+ if (!threw) {
84
+ const event = buildEvent({
85
+ ctx, identity, tool, args, result,
86
+ duration_ms: Date.now() - start, outcome, position,
87
+ prevChainHash: session?.prevChainHash ?? '',
88
+ tier, chainKey, encRoot,
89
+ });
90
+ advanceSession(session, event);
91
+ await options.onEvent(event);
92
+ }
93
+ return result;
94
+ };
95
+ const closeSession = async (sessionId) => {
96
+ const session = sessions.get(sessionId);
97
+ if (!session || session.events.length === 0)
98
+ return undefined;
99
+ sessions.delete(sessionId);
100
+ const hashes = session.events.map((e) => e.chainHash);
101
+ const merkleRoot = computeMerkleRoot(hashes);
102
+ const merkleProofs = hashes.map((_, i) => computeMerkleProof(hashes, i));
103
+ const signature = (await options.signingKey.sign(Buffer.from(merkleRoot))).toString('hex');
104
+ const manifest = {
105
+ sessionId,
106
+ identity: session.identity,
107
+ startedAt: session.startedAt,
108
+ closedAt: new Date().toISOString(),
109
+ eventCount: session.events.length,
110
+ merkleRoot,
111
+ merkleProofs,
112
+ signedBy: options.signingKey.keyId,
113
+ signature,
114
+ };
115
+ await options.onManifest?.(manifest);
116
+ return manifest;
117
+ };
118
+ return { middleware, closeSession };
119
+ }
120
+ // ── Helpers ────────────────────────────────────────────────────────────────────
121
+ function advanceSession(session, event) {
122
+ if (!session)
123
+ return;
124
+ session.events.push(event);
125
+ session.prevChainHash = event.chainHash;
126
+ }
127
+ function buildEvent(p) {
128
+ const stableFields = {
129
+ id: p.ctx.requestId,
130
+ timestamp: new Date().toISOString(),
131
+ ...(p.ctx.sessionId !== undefined ? { sessionId: p.ctx.sessionId } : {}),
132
+ ...(p.ctx.delegatedFrom !== undefined ? { delegatedFrom: p.ctx.delegatedFrom } : {}),
133
+ identity: p.identity,
134
+ tool: p.tool,
135
+ duration_ms: p.duration_ms,
136
+ outcome: p.outcome,
137
+ inputHash: sha256hex(JSON.stringify(p.args)),
138
+ outputHash: sha256hex(JSON.stringify(p.result ?? null)),
139
+ replayManifestPosition: p.position,
140
+ };
141
+ const chainHash = computeChainHash(stableFields, p.prevChainHash, p.chainKey);
142
+ const base = { ...stableFields, chainHash };
143
+ if (p.tier === 'high') {
144
+ const eventKey = deriveEventKey(p.encRoot, base.id);
145
+ return {
146
+ ...base,
147
+ sensitivityTier: 'high',
148
+ inputEncrypted: aesEncrypt(JSON.stringify(p.args), eventKey),
149
+ outputEncrypted: aesEncrypt(JSON.stringify(p.result ?? null), eventKey),
150
+ };
151
+ }
152
+ if (p.tier === 'medium') {
153
+ return { ...base, sensitivityTier: 'medium', inputRaw: p.args, outputRaw: p.result };
154
+ }
155
+ return { ...base, sensitivityTier: 'low', inputRaw: p.args, outputRaw: p.result };
156
+ }
157
+ //# sourceMappingURL=middleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware.js","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { SensitivityTier, SensitivityResolverFn } from './types.js';
2
+ export declare function createSensitivityResolver(map: Record<string, SensitivityTier>, override?: SensitivityResolverFn): SensitivityResolverFn;
3
+ //# sourceMappingURL=sensitivity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitivity.d.ts","sourceRoot":"","sources":["../src/sensitivity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEzE,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,EACpC,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,qBAAqB,CAKvB"}
@@ -0,0 +1,8 @@
1
+ export function createSensitivityResolver(map, override) {
2
+ return (tool, identity, args) => {
3
+ if (override)
4
+ return override(tool, identity, args);
5
+ return map[tool] ?? 'high';
6
+ };
7
+ }
8
+ //# sourceMappingURL=sensitivity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sensitivity.js","sourceRoot":"","sources":["../src/sensitivity.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,yBAAyB,CACvC,GAAoC,EACpC,QAAgC;IAEhC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE;QAC9B,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;QACpD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SigningKeyProvider } from './types.js';
2
+ export declare function createDefaultSigningKeyProvider(secret: Buffer | string): SigningKeyProvider;
3
+ //# sourceMappingURL=signingKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signingKey.d.ts","sourceRoot":"","sources":["../src/signingKey.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,MAAM,GAAG,MAAM,GACtB,kBAAkB,CAWpB"}
@@ -0,0 +1,13 @@
1
+ import { createHmac, createHash } from 'node:crypto';
2
+ export function createDefaultSigningKeyProvider(secret) {
3
+ const secretBuf = typeof secret === 'string' ? Buffer.from(secret) : secret;
4
+ const keyId = createHash('sha256').update(secretBuf).digest('hex');
5
+ return {
6
+ algorithm: 'HMAC-SHA256',
7
+ keyId,
8
+ async sign(data) {
9
+ return createHmac('sha256', secretBuf).update(data).digest();
10
+ },
11
+ };
12
+ }
13
+ //# sourceMappingURL=signingKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signingKey.js","sourceRoot":"","sources":["../src/signingKey.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGrD,MAAM,UAAU,+BAA+B,CAC7C,MAAuB;IAEvB,MAAM,SAAS,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5E,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAEnE,OAAO;QACL,SAAS,EAAE,aAAa;QACxB,KAAK;QACL,KAAK,CAAC,IAAI,CAAC,IAAY;YACrB,OAAO,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;QAC/D,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,98 @@
1
+ import type { Identity, RejectionReason, ToolMiddleware } from 'mcpose';
2
+ export type { ToolMiddleware };
3
+ export type SensitivityTier = 'low' | 'medium' | 'high';
4
+ export type SensitivityResolverFn = (tool: string, identity: Identity, args: Record<string, unknown>) => SensitivityTier;
5
+ export type HashAlgorithm = 'SHA-256';
6
+ export interface SigningKeyProvider {
7
+ sign(data: Buffer): Promise<Buffer>;
8
+ keyId: string;
9
+ algorithm: 'HMAC-SHA256';
10
+ }
11
+ export interface CostMetadata {
12
+ inputTokens?: number;
13
+ outputTokens?: number;
14
+ totalCostUsd?: number;
15
+ }
16
+ export interface AuditEventBase {
17
+ /** Equals the ProxyContext requestId. */
18
+ id: string;
19
+ timestamp: string;
20
+ sessionId?: string;
21
+ identity: Identity;
22
+ delegatedFrom?: Identity[];
23
+ tool: string;
24
+ duration_ms: number;
25
+ streamedChunkCount?: number;
26
+ outcome: 'success' | 'rejected' | 'error';
27
+ rejectionReason?: RejectionReason;
28
+ cost?: CostMetadata;
29
+ inputHash: string;
30
+ outputHash: string;
31
+ chainHash: string;
32
+ replayManifestPosition: number;
33
+ }
34
+ export type LowAuditEvent = AuditEventBase & {
35
+ sensitivityTier: 'low';
36
+ inputRaw: Record<string, unknown>;
37
+ outputRaw: unknown;
38
+ };
39
+ export type MediumAuditEvent = AuditEventBase & {
40
+ sensitivityTier: 'medium';
41
+ inputRaw: Record<string, unknown>;
42
+ outputRaw: unknown;
43
+ };
44
+ export type HighAuditEvent = AuditEventBase & {
45
+ sensitivityTier: 'high';
46
+ inputEncrypted: string;
47
+ outputEncrypted: string;
48
+ };
49
+ export type AuditEvent = LowAuditEvent | MediumAuditEvent | HighAuditEvent;
50
+ export interface MerkleProof {
51
+ index: number;
52
+ siblings: string[];
53
+ directions: ('left' | 'right')[];
54
+ }
55
+ export interface ReplayManifest {
56
+ sessionId: string;
57
+ identity: Identity;
58
+ startedAt: string;
59
+ closedAt: string;
60
+ eventCount: number;
61
+ merkleRoot: string;
62
+ merkleProofs: MerkleProof[];
63
+ signedBy: string;
64
+ signature: string;
65
+ }
66
+ export interface AuditOptions {
67
+ signingKey: SigningKeyProvider;
68
+ hashAlgorithm?: HashAlgorithm;
69
+ sensitivityResolver: SensitivityResolverFn;
70
+ onEvent: (event: AuditEvent) => void | Promise<void>;
71
+ /**
72
+ * Called with the finished ReplayManifest when the host calls closeSession().
73
+ *
74
+ * Why this exists: ToolMiddleware is a pure per-request function with no
75
+ * lifecycle hooks. Sessions are owned by the HTTP transport, not by
76
+ * middleware. There is no in-band way for middleware to observe session close.
77
+ * This callback gives consumers a push-based way to receive the manifest
78
+ * exactly when the host signals the session has ended — mirroring how audit
79
+ * substrates in financial systems work: the host controls the flush boundary;
80
+ * the audit layer reacts.
81
+ */
82
+ onManifest?: (manifest: ReplayManifest) => void | Promise<void>;
83
+ /** @default true */
84
+ includeRejections?: boolean;
85
+ /** @default true */
86
+ includeCost?: boolean;
87
+ }
88
+ export interface AuditMiddlewareHandle {
89
+ middleware: ToolMiddleware;
90
+ /**
91
+ * Signal that a session has ended. Computes the Merkle tree over all audit
92
+ * events for the session, signs the root, fires onManifest, and returns the
93
+ * ReplayManifest. Returns undefined if the session had no events or is
94
+ * unknown.
95
+ */
96
+ closeSession(sessionId: string): Promise<ReplayManifest | undefined>;
97
+ }
98
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcpose/audit",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "Integrity-chained audit middleware for mcpose — HMAC chain, Merkle proofs, ReplayManifest",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,7 +23,8 @@
23
23
  "scripts": {
24
24
  "build": "tsc -p tsconfig.build.json",
25
25
  "ts:ci": "tsc --noEmit",
26
- "test": "vitest run --passWithNoTests"
26
+ "test": "vitest run --passWithNoTests",
27
+ "prepublishOnly": "pnpm run ts:ci && pnpm run test && pnpm run build"
27
28
  },
28
29
  "peerDependencies": {
29
30
  "mcpose": ">=2.0.0"