@mcp-i/core 0.1.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/LICENSE +21 -0
- package/README.md +390 -0
- package/dist/auth/handshake.d.ts +104 -0
- package/dist/auth/handshake.d.ts.map +1 -0
- package/dist/auth/handshake.js +230 -0
- package/dist/auth/handshake.js.map +1 -0
- package/dist/auth/index.d.ts +3 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/types.d.ts +31 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +7 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/delegation/audience-validator.d.ts +9 -0
- package/dist/delegation/audience-validator.d.ts.map +1 -0
- package/dist/delegation/audience-validator.js +17 -0
- package/dist/delegation/audience-validator.js.map +1 -0
- package/dist/delegation/bitstring.d.ts +37 -0
- package/dist/delegation/bitstring.d.ts.map +1 -0
- package/dist/delegation/bitstring.js +117 -0
- package/dist/delegation/bitstring.js.map +1 -0
- package/dist/delegation/cascading-revocation.d.ts +45 -0
- package/dist/delegation/cascading-revocation.d.ts.map +1 -0
- package/dist/delegation/cascading-revocation.js +148 -0
- package/dist/delegation/cascading-revocation.js.map +1 -0
- package/dist/delegation/delegation-graph.d.ts +49 -0
- package/dist/delegation/delegation-graph.d.ts.map +1 -0
- package/dist/delegation/delegation-graph.js +99 -0
- package/dist/delegation/delegation-graph.js.map +1 -0
- package/dist/delegation/did-key-resolver.d.ts +64 -0
- package/dist/delegation/did-key-resolver.d.ts.map +1 -0
- package/dist/delegation/did-key-resolver.js +154 -0
- package/dist/delegation/did-key-resolver.js.map +1 -0
- package/dist/delegation/did-web-resolver.d.ts +83 -0
- package/dist/delegation/did-web-resolver.d.ts.map +1 -0
- package/dist/delegation/did-web-resolver.js +218 -0
- package/dist/delegation/did-web-resolver.js.map +1 -0
- package/dist/delegation/index.d.ts +21 -0
- package/dist/delegation/index.d.ts.map +1 -0
- package/dist/delegation/index.js +21 -0
- package/dist/delegation/index.js.map +1 -0
- package/dist/delegation/outbound-headers.d.ts +81 -0
- package/dist/delegation/outbound-headers.d.ts.map +1 -0
- package/dist/delegation/outbound-headers.js +139 -0
- package/dist/delegation/outbound-headers.js.map +1 -0
- package/dist/delegation/outbound-proof.d.ts +43 -0
- package/dist/delegation/outbound-proof.d.ts.map +1 -0
- package/dist/delegation/outbound-proof.js +52 -0
- package/dist/delegation/outbound-proof.js.map +1 -0
- package/dist/delegation/statuslist-manager.d.ts +44 -0
- package/dist/delegation/statuslist-manager.d.ts.map +1 -0
- package/dist/delegation/statuslist-manager.js +126 -0
- package/dist/delegation/statuslist-manager.js.map +1 -0
- package/dist/delegation/storage/memory-graph-storage.d.ts +70 -0
- package/dist/delegation/storage/memory-graph-storage.d.ts.map +1 -0
- package/dist/delegation/storage/memory-graph-storage.js +145 -0
- package/dist/delegation/storage/memory-graph-storage.js.map +1 -0
- package/dist/delegation/storage/memory-statuslist-storage.d.ts +19 -0
- package/dist/delegation/storage/memory-statuslist-storage.d.ts.map +1 -0
- package/dist/delegation/storage/memory-statuslist-storage.js +33 -0
- package/dist/delegation/storage/memory-statuslist-storage.js.map +1 -0
- package/dist/delegation/utils.d.ts +49 -0
- package/dist/delegation/utils.d.ts.map +1 -0
- package/dist/delegation/utils.js +131 -0
- package/dist/delegation/utils.js.map +1 -0
- package/dist/delegation/vc-issuer.d.ts +56 -0
- package/dist/delegation/vc-issuer.d.ts.map +1 -0
- package/dist/delegation/vc-issuer.js +80 -0
- package/dist/delegation/vc-issuer.js.map +1 -0
- package/dist/delegation/vc-verifier.d.ts +112 -0
- package/dist/delegation/vc-verifier.d.ts.map +1 -0
- package/dist/delegation/vc-verifier.js +280 -0
- package/dist/delegation/vc-verifier.js.map +1 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +53 -0
- package/dist/index.js.map +1 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.d.ts.map +1 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/index.js.map +1 -0
- package/dist/logging/logger.d.ts +23 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +82 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/middleware/index.d.ts +7 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +7 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/with-mcpi.d.ts +152 -0
- package/dist/middleware/with-mcpi.d.ts.map +1 -0
- package/dist/middleware/with-mcpi.js +472 -0
- package/dist/middleware/with-mcpi.js.map +1 -0
- package/dist/proof/errors.d.ts +49 -0
- package/dist/proof/errors.d.ts.map +1 -0
- package/dist/proof/errors.js +61 -0
- package/dist/proof/errors.js.map +1 -0
- package/dist/proof/generator.d.ts +65 -0
- package/dist/proof/generator.d.ts.map +1 -0
- package/dist/proof/generator.js +163 -0
- package/dist/proof/generator.js.map +1 -0
- package/dist/proof/index.d.ts +4 -0
- package/dist/proof/index.d.ts.map +1 -0
- package/dist/proof/index.js +4 -0
- package/dist/proof/index.js.map +1 -0
- package/dist/proof/verifier.d.ts +108 -0
- package/dist/proof/verifier.d.ts.map +1 -0
- package/dist/proof/verifier.js +299 -0
- package/dist/proof/verifier.js.map +1 -0
- package/dist/providers/base.d.ts +64 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +19 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/index.d.ts +3 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +3 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/memory.d.ts +33 -0
- package/dist/providers/memory.d.ts.map +1 -0
- package/dist/providers/memory.js +102 -0
- package/dist/providers/memory.js.map +1 -0
- package/dist/session/index.d.ts +2 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +2 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +77 -0
- package/dist/session/manager.d.ts.map +1 -0
- package/dist/session/manager.js +251 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/types/protocol.d.ts +320 -0
- package/dist/types/protocol.d.ts.map +1 -0
- package/dist/types/protocol.js +229 -0
- package/dist/types/protocol.js.map +1 -0
- package/dist/utils/base58.d.ts +31 -0
- package/dist/utils/base58.d.ts.map +1 -0
- package/dist/utils/base58.js +104 -0
- package/dist/utils/base58.js.map +1 -0
- package/dist/utils/base64.d.ts +13 -0
- package/dist/utils/base64.d.ts.map +1 -0
- package/dist/utils/base64.js +99 -0
- package/dist/utils/base64.js.map +1 -0
- package/dist/utils/crypto-service.d.ts +37 -0
- package/dist/utils/crypto-service.d.ts.map +1 -0
- package/dist/utils/crypto-service.js +153 -0
- package/dist/utils/crypto-service.js.map +1 -0
- package/dist/utils/did-helpers.d.ts +156 -0
- package/dist/utils/did-helpers.d.ts.map +1 -0
- package/dist/utils/did-helpers.js +193 -0
- package/dist/utils/did-helpers.js.map +1 -0
- package/dist/utils/ed25519-constants.d.ts +18 -0
- package/dist/utils/ed25519-constants.d.ts.map +1 -0
- package/dist/utils/ed25519-constants.js +21 -0
- package/dist/utils/ed25519-constants.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +105 -0
- package/src/__tests__/integration/full-flow.test.ts +362 -0
- package/src/__tests__/providers/base.test.ts +173 -0
- package/src/__tests__/providers/memory.test.ts +332 -0
- package/src/__tests__/utils/mock-providers.ts +319 -0
- package/src/__tests__/utils/node-crypto-provider.ts +93 -0
- package/src/auth/handshake.ts +411 -0
- package/src/auth/index.ts +11 -0
- package/src/auth/types.ts +40 -0
- package/src/delegation/__tests__/audience-validator.test.ts +110 -0
- package/src/delegation/__tests__/bitstring.test.ts +346 -0
- package/src/delegation/__tests__/cascading-revocation.test.ts +624 -0
- package/src/delegation/__tests__/delegation-graph.test.ts +623 -0
- package/src/delegation/__tests__/did-key-resolver.test.ts +265 -0
- package/src/delegation/__tests__/did-web-resolver.test.ts +467 -0
- package/src/delegation/__tests__/outbound-headers.test.ts +230 -0
- package/src/delegation/__tests__/outbound-proof.test.ts +179 -0
- package/src/delegation/__tests__/statuslist-manager.test.ts +515 -0
- package/src/delegation/__tests__/utils.test.ts +185 -0
- package/src/delegation/__tests__/vc-issuer.test.ts +487 -0
- package/src/delegation/__tests__/vc-verifier.test.ts +1029 -0
- package/src/delegation/audience-validator.ts +24 -0
- package/src/delegation/bitstring.ts +160 -0
- package/src/delegation/cascading-revocation.ts +224 -0
- package/src/delegation/delegation-graph.ts +143 -0
- package/src/delegation/did-key-resolver.ts +181 -0
- package/src/delegation/did-web-resolver.ts +270 -0
- package/src/delegation/index.ts +33 -0
- package/src/delegation/outbound-headers.ts +193 -0
- package/src/delegation/outbound-proof.ts +90 -0
- package/src/delegation/statuslist-manager.ts +219 -0
- package/src/delegation/storage/__tests__/memory-graph-storage.test.ts +366 -0
- package/src/delegation/storage/__tests__/memory-statuslist-storage.test.ts +228 -0
- package/src/delegation/storage/memory-graph-storage.ts +178 -0
- package/src/delegation/storage/memory-statuslist-storage.ts +42 -0
- package/src/delegation/utils.ts +189 -0
- package/src/delegation/vc-issuer.ts +137 -0
- package/src/delegation/vc-verifier.ts +440 -0
- package/src/index.ts +264 -0
- package/src/logging/__tests__/logger.test.ts +366 -0
- package/src/logging/index.ts +6 -0
- package/src/logging/logger.ts +91 -0
- package/src/middleware/__tests__/with-mcpi.test.ts +504 -0
- package/src/middleware/index.ts +16 -0
- package/src/middleware/with-mcpi.ts +766 -0
- package/src/proof/__tests__/proof-generator.test.ts +483 -0
- package/src/proof/__tests__/verifier.test.ts +488 -0
- package/src/proof/errors.ts +75 -0
- package/src/proof/generator.ts +255 -0
- package/src/proof/index.ts +22 -0
- package/src/proof/verifier.ts +449 -0
- package/src/providers/base.ts +68 -0
- package/src/providers/index.ts +15 -0
- package/src/providers/memory.ts +130 -0
- package/src/session/__tests__/session-manager.test.ts +342 -0
- package/src/session/index.ts +7 -0
- package/src/session/manager.ts +332 -0
- package/src/types/protocol.ts +596 -0
- package/src/utils/__tests__/base58.test.ts +281 -0
- package/src/utils/__tests__/base64.test.ts +239 -0
- package/src/utils/__tests__/crypto-service.test.ts +530 -0
- package/src/utils/__tests__/did-helpers.test.ts +156 -0
- package/src/utils/base58.ts +115 -0
- package/src/utils/base64.ts +116 -0
- package/src/utils/crypto-service.ts +209 -0
- package/src/utils/did-helpers.ts +210 -0
- package/src/utils/ed25519-constants.ts +23 -0
- package/src/utils/index.ts +9 -0
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP-I Middleware for @modelcontextprotocol/sdk Server
|
|
3
|
+
*
|
|
4
|
+
* Adds identity, session management, and proof generation to a standard
|
|
5
|
+
* MCP SDK Server.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* const { handshakeTool, registerToolWithProof } = createMCPIMiddleware(config, crypto);
|
|
9
|
+
* server.setRequestHandler(ListToolsRequestSchema, () => ({ tools: [handshakeTool, ...] }));
|
|
10
|
+
* registerToolWithProof(server, myToolDef, myHandler);
|
|
11
|
+
*/
|
|
12
|
+
import { FetchProvider, } from "../providers/base.js";
|
|
13
|
+
import { SessionManager, } from "../session/manager.js";
|
|
14
|
+
import { ProofGenerator, } from "../proof/generator.js";
|
|
15
|
+
import { validateHandshakeFormat } from "../session/manager.js";
|
|
16
|
+
import { DelegationCredentialVerifier, } from "../delegation/vc-verifier.js";
|
|
17
|
+
import { createDidKeyResolver } from "../delegation/did-key-resolver.js";
|
|
18
|
+
import { createDidWebResolver } from "../delegation/did-web-resolver.js";
|
|
19
|
+
import { verifyDelegationAudience } from "../delegation/audience-validator.js";
|
|
20
|
+
import { createNeedsAuthorizationError, extractDelegationFromVC, } from "../types/protocol.js";
|
|
21
|
+
import { logger } from "../logging/index.js";
|
|
22
|
+
import { canonicalizeJSON } from "../delegation/utils.js";
|
|
23
|
+
import { base64urlDecodeToBytes, base64urlEncodeFromBytes, bytesToBase64 } from "../utils/base64.js";
|
|
24
|
+
class RuntimeFetchProvider extends FetchProvider {
|
|
25
|
+
async resolveDID() {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
async fetchStatusList() {
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
async fetchDelegationChain() {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
async fetch(url, options) {
|
|
35
|
+
if (typeof globalThis.fetch !== "function") {
|
|
36
|
+
throw new Error("Global fetch is not available in this runtime");
|
|
37
|
+
}
|
|
38
|
+
return globalThis.fetch(url, options);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
function getDelegationScopes(credential) {
|
|
42
|
+
const scopes = new Set();
|
|
43
|
+
for (const scope of credential.credentialSubject.delegation.scopes ?? []) {
|
|
44
|
+
scopes.add(scope);
|
|
45
|
+
}
|
|
46
|
+
for (const scope of credential.credentialSubject.delegation.constraints.scopes ?? []) {
|
|
47
|
+
scopes.add(scope);
|
|
48
|
+
}
|
|
49
|
+
return Array.from(scopes);
|
|
50
|
+
}
|
|
51
|
+
function validateScopeAttenuation(parentCredential, childCredential) {
|
|
52
|
+
const parentScopes = getDelegationScopes(parentCredential);
|
|
53
|
+
const childScopes = getDelegationScopes(childCredential);
|
|
54
|
+
const childDelegation = childCredential.credentialSubject.delegation;
|
|
55
|
+
if (parentScopes.length === 0) {
|
|
56
|
+
return { valid: true };
|
|
57
|
+
}
|
|
58
|
+
if (childScopes.length === 0) {
|
|
59
|
+
return {
|
|
60
|
+
valid: false,
|
|
61
|
+
reason: `Delegation ${childDelegation.id} omits scopes required to prove attenuation from parent ${parentCredential.credentialSubject.delegation.id}`,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const parentScopeSet = new Set(parentScopes);
|
|
65
|
+
const widenedScopes = childScopes.filter((scope) => !parentScopeSet.has(scope));
|
|
66
|
+
if (widenedScopes.length > 0) {
|
|
67
|
+
return {
|
|
68
|
+
valid: false,
|
|
69
|
+
reason: `Delegation ${childDelegation.id} widens scopes beyond parent ${parentCredential.credentialSubject.delegation.id}: ${widenedScopes.join(", ")}`,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
return { valid: true };
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Create MCP-I middleware for a standard MCP SDK Server.
|
|
76
|
+
*
|
|
77
|
+
* @param config - Agent identity and session configuration
|
|
78
|
+
* @param cryptoProvider - Platform-specific crypto implementation
|
|
79
|
+
* @returns Middleware components for session management and proof generation
|
|
80
|
+
*
|
|
81
|
+
* @remarks
|
|
82
|
+
* **Single-process only**: This middleware stores session state in memory using closure
|
|
83
|
+
* variables (`activeSessionId`, `sessionNonces`). It is NOT suitable for multi-instance
|
|
84
|
+
* deployments behind a load balancer. For distributed deployments, implement a custom
|
|
85
|
+
* `SessionStore` backed by Redis, DynamoDB, or similar and pass it via `config.session`.
|
|
86
|
+
*/
|
|
87
|
+
export function createMCPIMiddleware(config, cryptoProvider) {
|
|
88
|
+
const identity = {
|
|
89
|
+
did: config.identity.did,
|
|
90
|
+
kid: config.identity.kid,
|
|
91
|
+
privateKey: config.identity.privateKey,
|
|
92
|
+
publicKey: config.identity.publicKey,
|
|
93
|
+
};
|
|
94
|
+
const sessionManager = new SessionManager(cryptoProvider, {
|
|
95
|
+
...config.session,
|
|
96
|
+
serverDid: identity.did,
|
|
97
|
+
});
|
|
98
|
+
const proofGenerator = new ProofGenerator(identity, cryptoProvider);
|
|
99
|
+
const delegationConfig = config.delegation;
|
|
100
|
+
// Session map: sessionId → last nonce (for proof generation)
|
|
101
|
+
const sessionNonces = new Map();
|
|
102
|
+
// Active session tracking — set after handshake (manual or auto)
|
|
103
|
+
let activeSessionId;
|
|
104
|
+
const handshakeTool = {
|
|
105
|
+
name: "_mcpi_handshake",
|
|
106
|
+
description: "MCP-I identity handshake — establishes a cryptographic session",
|
|
107
|
+
inputSchema: {
|
|
108
|
+
type: "object",
|
|
109
|
+
properties: {
|
|
110
|
+
nonce: { type: "string", description: "Client-generated unique nonce" },
|
|
111
|
+
audience: {
|
|
112
|
+
type: "string",
|
|
113
|
+
description: "Intended audience (server DID or URL)",
|
|
114
|
+
},
|
|
115
|
+
timestamp: { type: "number", description: "Unix epoch seconds" },
|
|
116
|
+
agentDid: {
|
|
117
|
+
type: "string",
|
|
118
|
+
description: "Client agent DID (optional)",
|
|
119
|
+
},
|
|
120
|
+
},
|
|
121
|
+
required: ["nonce", "audience", "timestamp"],
|
|
122
|
+
},
|
|
123
|
+
};
|
|
124
|
+
async function handleHandshake(args) {
|
|
125
|
+
if (!validateHandshakeFormat(args)) {
|
|
126
|
+
return {
|
|
127
|
+
content: [
|
|
128
|
+
{
|
|
129
|
+
type: "text",
|
|
130
|
+
text: JSON.stringify({
|
|
131
|
+
success: false,
|
|
132
|
+
error: {
|
|
133
|
+
code: "MCPI_INVALID_HANDSHAKE",
|
|
134
|
+
message: "Invalid handshake format: requires nonce (string), audience (string), and timestamp (positive integer)",
|
|
135
|
+
},
|
|
136
|
+
}),
|
|
137
|
+
},
|
|
138
|
+
],
|
|
139
|
+
isError: true,
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
const result = await sessionManager.validateHandshake(args);
|
|
143
|
+
if (result.success && result.session) {
|
|
144
|
+
sessionNonces.set(result.session.sessionId, result.session.nonce);
|
|
145
|
+
activeSessionId = result.session.sessionId;
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
content: [
|
|
149
|
+
{
|
|
150
|
+
type: "text",
|
|
151
|
+
text: JSON.stringify({
|
|
152
|
+
success: result.success,
|
|
153
|
+
...(result.session && {
|
|
154
|
+
sessionId: result.session.sessionId,
|
|
155
|
+
serverDid: identity.did,
|
|
156
|
+
serverKid: identity.kid,
|
|
157
|
+
}),
|
|
158
|
+
...(result.error && { error: result.error }),
|
|
159
|
+
}),
|
|
160
|
+
},
|
|
161
|
+
],
|
|
162
|
+
...(result.error && { isError: true }),
|
|
163
|
+
};
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Auto-create a session for proof generation when no handshake has occurred.
|
|
167
|
+
* In production, MCP-I-aware clients handle the handshake automatically.
|
|
168
|
+
* This convenience mode allows non-MCP-I clients (like MCP Inspector) to
|
|
169
|
+
* still see proofs without manual handshake.
|
|
170
|
+
*/
|
|
171
|
+
async function ensureSession() {
|
|
172
|
+
if (activeSessionId) {
|
|
173
|
+
const existing = await sessionManager.getSession(activeSessionId);
|
|
174
|
+
if (existing)
|
|
175
|
+
return activeSessionId;
|
|
176
|
+
}
|
|
177
|
+
if (!config.autoSession)
|
|
178
|
+
return undefined;
|
|
179
|
+
// Generate a server-side session with cryptographically random nonce (SPEC.md §4)
|
|
180
|
+
const nonceBytes = await cryptoProvider.randomBytes(16);
|
|
181
|
+
const nonce = base64urlEncodeFromBytes(nonceBytes);
|
|
182
|
+
const timestamp = Math.floor(Date.now() / 1000);
|
|
183
|
+
const result = await sessionManager.validateHandshake({
|
|
184
|
+
nonce,
|
|
185
|
+
audience: identity.did,
|
|
186
|
+
timestamp,
|
|
187
|
+
});
|
|
188
|
+
if (result.success && result.session) {
|
|
189
|
+
activeSessionId = result.session.sessionId;
|
|
190
|
+
sessionNonces.set(result.session.sessionId, result.session.nonce);
|
|
191
|
+
return activeSessionId;
|
|
192
|
+
}
|
|
193
|
+
return undefined;
|
|
194
|
+
}
|
|
195
|
+
function wrapWithProof(toolName, handler) {
|
|
196
|
+
return async (args, sessionId) => {
|
|
197
|
+
const result = await handler(args, sessionId);
|
|
198
|
+
if (result.isError) {
|
|
199
|
+
return result;
|
|
200
|
+
}
|
|
201
|
+
// Resolve session: explicit param → active session → auto-create
|
|
202
|
+
const resolvedSessionId = sessionId ?? await ensureSession();
|
|
203
|
+
if (!resolvedSessionId) {
|
|
204
|
+
return result;
|
|
205
|
+
}
|
|
206
|
+
const session = await sessionManager.getSession(resolvedSessionId);
|
|
207
|
+
if (!session) {
|
|
208
|
+
return result;
|
|
209
|
+
}
|
|
210
|
+
try {
|
|
211
|
+
const request = { method: toolName, params: args };
|
|
212
|
+
const response = { data: result.content };
|
|
213
|
+
const proof = await proofGenerator.generateProof(request, response, session);
|
|
214
|
+
// Attach proof as _meta (rendered by MCP Inspector, invisible to LLMs)
|
|
215
|
+
result._meta = { proof };
|
|
216
|
+
}
|
|
217
|
+
catch {
|
|
218
|
+
// Proof generation failure is non-fatal — the tool result is still valid
|
|
219
|
+
}
|
|
220
|
+
return result;
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
function wrapWithDelegation(toolName, config, handler) {
|
|
224
|
+
const legacyUnsafeDelegationEnabled = delegationConfig?.allowLegacyUnsafeDelegation === true;
|
|
225
|
+
const didKeyResolver = createDidKeyResolver();
|
|
226
|
+
const fetchProvider = delegationConfig?.fetchProvider ??
|
|
227
|
+
(typeof globalThis.fetch === "function"
|
|
228
|
+
? new RuntimeFetchProvider()
|
|
229
|
+
: undefined);
|
|
230
|
+
const didWebResolver = fetchProvider
|
|
231
|
+
? createDidWebResolver(fetchProvider)
|
|
232
|
+
: undefined;
|
|
233
|
+
const didResolver = {
|
|
234
|
+
async resolve(did) {
|
|
235
|
+
const customResolver = delegationConfig?.didResolver;
|
|
236
|
+
if (customResolver) {
|
|
237
|
+
const resolved = await customResolver.resolve(did);
|
|
238
|
+
if (resolved) {
|
|
239
|
+
return resolved;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
if (did.startsWith("did:key:")) {
|
|
243
|
+
return didKeyResolver.resolve(did);
|
|
244
|
+
}
|
|
245
|
+
if (did.startsWith("did:web:")) {
|
|
246
|
+
return didWebResolver?.resolve(did) ?? null;
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
},
|
|
250
|
+
};
|
|
251
|
+
const signatureVerifier = async (vc, publicKeyJwk) => {
|
|
252
|
+
const proof = vc.proof;
|
|
253
|
+
if (!proof) {
|
|
254
|
+
return { valid: false, reason: "Missing proof" };
|
|
255
|
+
}
|
|
256
|
+
const proofValue = proof["proofValue"];
|
|
257
|
+
if (!proofValue) {
|
|
258
|
+
return { valid: false, reason: "Missing proofValue in proof" };
|
|
259
|
+
}
|
|
260
|
+
// Reconstruct the unsigned VC (without proof) for signature verification
|
|
261
|
+
const vcRecord = vc;
|
|
262
|
+
const vcWithoutProof = {};
|
|
263
|
+
for (const [k, v] of Object.entries(vcRecord)) {
|
|
264
|
+
if (k !== "proof")
|
|
265
|
+
vcWithoutProof[k] = v;
|
|
266
|
+
}
|
|
267
|
+
const canonical = canonicalizeJSON(vcWithoutProof);
|
|
268
|
+
const data = new TextEncoder().encode(canonical);
|
|
269
|
+
// Decode signature from base64url proof value
|
|
270
|
+
const sigBytes = base64urlDecodeToBytes(proofValue);
|
|
271
|
+
// Get public key from JWK (x is base64url-encoded raw key bytes)
|
|
272
|
+
const jwk = publicKeyJwk;
|
|
273
|
+
if (!jwk.x) {
|
|
274
|
+
return { valid: false, reason: "No x field in publicKeyJwk" };
|
|
275
|
+
}
|
|
276
|
+
// Convert base64url key to standard base64 for the crypto provider
|
|
277
|
+
const pubKeyBytes = base64urlDecodeToBytes(jwk.x);
|
|
278
|
+
const pubKeyBase64 = bytesToBase64(pubKeyBytes);
|
|
279
|
+
const valid = await cryptoProvider.verify(data, sigBytes, pubKeyBase64);
|
|
280
|
+
return {
|
|
281
|
+
valid,
|
|
282
|
+
reason: valid ? undefined : "Signature verification failed",
|
|
283
|
+
};
|
|
284
|
+
};
|
|
285
|
+
const verifier = new DelegationCredentialVerifier({
|
|
286
|
+
didResolver,
|
|
287
|
+
signatureVerifier,
|
|
288
|
+
statusListResolver: delegationConfig?.statusListResolver,
|
|
289
|
+
});
|
|
290
|
+
const buildDelegationErrorResponse = (error, reason) => ({
|
|
291
|
+
content: [
|
|
292
|
+
{
|
|
293
|
+
type: "text",
|
|
294
|
+
text: JSON.stringify({ error, reason }),
|
|
295
|
+
},
|
|
296
|
+
],
|
|
297
|
+
isError: true,
|
|
298
|
+
});
|
|
299
|
+
const validateDelegationChain = async (leafCredential) => {
|
|
300
|
+
const leafDelegation = extractDelegationFromVC(leafCredential);
|
|
301
|
+
let chain = [leafCredential];
|
|
302
|
+
if (leafDelegation.parentId) {
|
|
303
|
+
if (!delegationConfig?.resolveDelegationChain) {
|
|
304
|
+
if (legacyUnsafeDelegationEnabled) {
|
|
305
|
+
logger.warn(`[mcpi] Legacy delegation mode enabled: accepting parent-linked credential ${leafDelegation.id} without resolveDelegationChain`);
|
|
306
|
+
return { valid: true };
|
|
307
|
+
}
|
|
308
|
+
return {
|
|
309
|
+
valid: false,
|
|
310
|
+
reason: `Delegation ${leafDelegation.id} references parent ${leafDelegation.parentId} but no resolveDelegationChain handler is configured`,
|
|
311
|
+
};
|
|
312
|
+
}
|
|
313
|
+
let resolvedChain;
|
|
314
|
+
try {
|
|
315
|
+
resolvedChain =
|
|
316
|
+
await delegationConfig.resolveDelegationChain(leafCredential);
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
return {
|
|
320
|
+
valid: false,
|
|
321
|
+
reason: `Failed to resolve delegation chain: ${error instanceof Error ? error.message : "Unknown error"}`,
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
if (resolvedChain.length === 0) {
|
|
325
|
+
return {
|
|
326
|
+
valid: false,
|
|
327
|
+
reason: `Delegation ${leafDelegation.id} references parent ${leafDelegation.parentId} but the resolved chain is empty`,
|
|
328
|
+
};
|
|
329
|
+
}
|
|
330
|
+
const leafIndex = resolvedChain.findIndex((credential) => credential.credentialSubject.delegation.id === leafDelegation.id);
|
|
331
|
+
if (leafIndex !== -1 && leafIndex !== resolvedChain.length - 1) {
|
|
332
|
+
return {
|
|
333
|
+
valid: false,
|
|
334
|
+
reason: `Resolved delegation chain for ${leafDelegation.id} must end with the leaf credential`,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
chain =
|
|
338
|
+
leafIndex === -1 ? [...resolvedChain, leafCredential] : resolvedChain;
|
|
339
|
+
}
|
|
340
|
+
const seenIds = new Set();
|
|
341
|
+
let previousDelegation;
|
|
342
|
+
let previousCredential;
|
|
343
|
+
for (const credential of chain) {
|
|
344
|
+
const delegation = extractDelegationFromVC(credential);
|
|
345
|
+
if (seenIds.has(delegation.id)) {
|
|
346
|
+
return {
|
|
347
|
+
valid: false,
|
|
348
|
+
reason: `Delegation chain contains a circular reference at ${delegation.id}`,
|
|
349
|
+
};
|
|
350
|
+
}
|
|
351
|
+
seenIds.add(delegation.id);
|
|
352
|
+
if (credential.credentialStatus && !delegationConfig?.statusListResolver) {
|
|
353
|
+
if (legacyUnsafeDelegationEnabled) {
|
|
354
|
+
logger.warn(`[mcpi] Legacy delegation mode enabled: skipping status-list verification for ${delegation.id}`);
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
return {
|
|
358
|
+
valid: false,
|
|
359
|
+
reason: `Delegation ${delegation.id} has credentialStatus but no statusListResolver is configured`,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
const credentialVerification = await verifier.verifyDelegationCredential(credential);
|
|
364
|
+
if (!credentialVerification.valid) {
|
|
365
|
+
return {
|
|
366
|
+
valid: false,
|
|
367
|
+
reason: `Delegation ${delegation.id} invalid: ${credentialVerification.reason}`,
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
if (!verifyDelegationAudience(delegation, identity.did)) {
|
|
371
|
+
return {
|
|
372
|
+
valid: false,
|
|
373
|
+
reason: `Delegation ${delegation.id} audience does not include server DID ${identity.did}`,
|
|
374
|
+
};
|
|
375
|
+
}
|
|
376
|
+
if (!previousDelegation || !previousCredential) {
|
|
377
|
+
if (delegation.parentId) {
|
|
378
|
+
return {
|
|
379
|
+
valid: false,
|
|
380
|
+
reason: `Resolved delegation chain is incomplete: root delegation ${delegation.id} still references parent ${delegation.parentId}`,
|
|
381
|
+
};
|
|
382
|
+
}
|
|
383
|
+
previousDelegation = delegation;
|
|
384
|
+
previousCredential = credential;
|
|
385
|
+
continue;
|
|
386
|
+
}
|
|
387
|
+
if (delegation.parentId !== previousDelegation.id) {
|
|
388
|
+
return {
|
|
389
|
+
valid: false,
|
|
390
|
+
reason: `Delegation ${delegation.id} references parent ${delegation.parentId} but expected ${previousDelegation.id}`,
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
if (delegation.issuerDid !== previousDelegation.subjectDid) {
|
|
394
|
+
return {
|
|
395
|
+
valid: false,
|
|
396
|
+
reason: `Delegation ${delegation.id} issued by ${delegation.issuerDid} but parent subject is ${previousDelegation.subjectDid}`,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
const scopeValidation = validateScopeAttenuation(previousCredential, credential);
|
|
400
|
+
if (!scopeValidation.valid) {
|
|
401
|
+
return scopeValidation;
|
|
402
|
+
}
|
|
403
|
+
previousDelegation = delegation;
|
|
404
|
+
previousCredential = credential;
|
|
405
|
+
}
|
|
406
|
+
const finalDelegation = extractDelegationFromVC(chain[chain.length - 1]);
|
|
407
|
+
if (finalDelegation.id !== leafDelegation.id) {
|
|
408
|
+
return {
|
|
409
|
+
valid: false,
|
|
410
|
+
reason: `Resolved delegation chain ended at ${finalDelegation.id} instead of leaf ${leafDelegation.id}`,
|
|
411
|
+
};
|
|
412
|
+
}
|
|
413
|
+
return { valid: true };
|
|
414
|
+
};
|
|
415
|
+
return async (args, sessionId) => {
|
|
416
|
+
const delegationArg = args["_mcpi_delegation"];
|
|
417
|
+
if (delegationArg === undefined || delegationArg === null) {
|
|
418
|
+
// No delegation provided — return needs_authorization response
|
|
419
|
+
const tokenBytes = await cryptoProvider.randomBytes(16);
|
|
420
|
+
const hex = Array.from(tokenBytes)
|
|
421
|
+
.map((b) => b.toString(16).padStart(2, "0"))
|
|
422
|
+
.join("");
|
|
423
|
+
const resumeToken = [
|
|
424
|
+
hex.slice(0, 8),
|
|
425
|
+
hex.slice(8, 12),
|
|
426
|
+
hex.slice(12, 16),
|
|
427
|
+
hex.slice(16, 20),
|
|
428
|
+
hex.slice(20),
|
|
429
|
+
].join("-");
|
|
430
|
+
const expiresAt = Math.floor(Date.now() / 1000) + 300;
|
|
431
|
+
const authError = createNeedsAuthorizationError({
|
|
432
|
+
message: `Tool "${toolName}" requires delegation with scope: ${config.scopeId}`,
|
|
433
|
+
authorizationUrl: config.consentUrl,
|
|
434
|
+
resumeToken,
|
|
435
|
+
expiresAt,
|
|
436
|
+
scopes: [config.scopeId],
|
|
437
|
+
});
|
|
438
|
+
return {
|
|
439
|
+
content: [{ type: "text", text: JSON.stringify(authError) }],
|
|
440
|
+
};
|
|
441
|
+
}
|
|
442
|
+
const vc = delegationArg;
|
|
443
|
+
const verificationResult = await validateDelegationChain(vc);
|
|
444
|
+
if (!verificationResult.valid) {
|
|
445
|
+
logger.warn(`[mcpi] Delegation verification failed for "${toolName}": ${verificationResult.reason}`);
|
|
446
|
+
return buildDelegationErrorResponse("delegation_invalid", verificationResult.reason ?? "Unknown delegation validation error");
|
|
447
|
+
}
|
|
448
|
+
const scopes = getDelegationScopes(vc);
|
|
449
|
+
if (!scopes.includes(config.scopeId)) {
|
|
450
|
+
logger.warn(`[mcpi] Delegation missing required scope "${config.scopeId}" for "${toolName}"`);
|
|
451
|
+
return buildDelegationErrorResponse("delegation_scope_missing", `Required scope "${config.scopeId}" not in delegation scopes`);
|
|
452
|
+
}
|
|
453
|
+
// Strip _mcpi_delegation from args before passing to handler
|
|
454
|
+
const cleanArgs = {};
|
|
455
|
+
for (const [k, v] of Object.entries(args)) {
|
|
456
|
+
if (k !== "_mcpi_delegation")
|
|
457
|
+
cleanArgs[k] = v;
|
|
458
|
+
}
|
|
459
|
+
logger.debug(`[mcpi] Delegation verified for "${toolName}", scope "${config.scopeId}"`);
|
|
460
|
+
return handler(cleanArgs, sessionId);
|
|
461
|
+
};
|
|
462
|
+
}
|
|
463
|
+
return {
|
|
464
|
+
sessionManager,
|
|
465
|
+
proofGenerator,
|
|
466
|
+
handshakeTool,
|
|
467
|
+
handleHandshake,
|
|
468
|
+
wrapWithProof,
|
|
469
|
+
wrapWithDelegation,
|
|
470
|
+
};
|
|
471
|
+
}
|
|
472
|
+
//# sourceMappingURL=with-mcpi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"with-mcpi.js","sourceRoot":"","sources":["../../src/middleware/with-mcpi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Verification Error Codes and Types
|
|
3
|
+
*
|
|
4
|
+
* Specific error codes for proof verification failures to enable
|
|
5
|
+
* better error handling and debugging.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Error codes for proof verification
|
|
9
|
+
*/
|
|
10
|
+
export declare const PROOF_VERIFICATION_ERROR_CODES: {
|
|
11
|
+
readonly INVALID_PROOF_STRUCTURE: "INVALID_PROOF_STRUCTURE";
|
|
12
|
+
readonly MISSING_REQUIRED_FIELD: "MISSING_REQUIRED_FIELD";
|
|
13
|
+
readonly NONCE_REPLAY_DETECTED: "NONCE_REPLAY_DETECTED";
|
|
14
|
+
readonly TIMESTAMP_SKEW_EXCEEDED: "TIMESTAMP_SKEW_EXCEEDED";
|
|
15
|
+
readonly TIMESTAMP_INVALID: "TIMESTAMP_INVALID";
|
|
16
|
+
readonly INVALID_JWS_SIGNATURE: "INVALID_JWS_SIGNATURE";
|
|
17
|
+
readonly INVALID_JWS_FORMAT: "INVALID_JWS_FORMAT";
|
|
18
|
+
readonly INVALID_JWS_HEADER: "INVALID_JWS_HEADER";
|
|
19
|
+
readonly INVALID_JWS_PAYLOAD: "INVALID_JWS_PAYLOAD";
|
|
20
|
+
readonly INVALID_JWS_SIGNATURE_BASE64: "INVALID_JWS_SIGNATURE_BASE64";
|
|
21
|
+
readonly UNSUPPORTED_ALGORITHM: "UNSUPPORTED_ALGORITHM";
|
|
22
|
+
readonly INVALID_JWK_FORMAT: "INVALID_JWK_FORMAT";
|
|
23
|
+
readonly INVALID_JWK_KTY: "INVALID_JWK_KTY";
|
|
24
|
+
readonly INVALID_JWK_CRV: "INVALID_JWK_CRV";
|
|
25
|
+
readonly INVALID_JWK_X_FIELD: "INVALID_JWK_X_FIELD";
|
|
26
|
+
readonly INVALID_JWK_KEY_LENGTH: "INVALID_JWK_KEY_LENGTH";
|
|
27
|
+
readonly JWK_KID_MISMATCH: "JWK_KID_MISMATCH";
|
|
28
|
+
readonly DID_RESOLUTION_FAILED: "DID_RESOLUTION_FAILED";
|
|
29
|
+
readonly DID_DOCUMENT_NOT_FOUND: "DID_DOCUMENT_NOT_FOUND";
|
|
30
|
+
readonly VERIFICATION_METHOD_NOT_FOUND: "VERIFICATION_METHOD_NOT_FOUND";
|
|
31
|
+
readonly PUBLIC_KEY_NOT_FOUND: "PUBLIC_KEY_NOT_FOUND";
|
|
32
|
+
readonly UNSUPPORTED_DID_METHOD: "UNSUPPORTED_DID_METHOD";
|
|
33
|
+
readonly VERIFICATION_ERROR: "VERIFICATION_ERROR";
|
|
34
|
+
readonly INTERNAL_ERROR: "INTERNAL_ERROR";
|
|
35
|
+
};
|
|
36
|
+
export type ProofVerificationErrorCode = typeof PROOF_VERIFICATION_ERROR_CODES[keyof typeof PROOF_VERIFICATION_ERROR_CODES];
|
|
37
|
+
/**
|
|
38
|
+
* Proof verification error with specific error code
|
|
39
|
+
*/
|
|
40
|
+
export declare class ProofVerificationError extends Error {
|
|
41
|
+
readonly code: ProofVerificationErrorCode;
|
|
42
|
+
readonly details?: Record<string, unknown> | undefined;
|
|
43
|
+
constructor(code: ProofVerificationErrorCode, message: string, details?: Record<string, unknown> | undefined);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create a proof verification error
|
|
47
|
+
*/
|
|
48
|
+
export declare function createProofVerificationError(code: ProofVerificationErrorCode, message: string, details?: Record<string, unknown>): ProofVerificationError;
|
|
49
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/proof/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;CAoCjC,CAAC;AAEX,MAAM,MAAM,0BAA0B,GACpC,OAAO,8BAA8B,CAAC,MAAM,OAAO,8BAA8B,CAAC,CAAC;AAErF;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,KAAK;aAE7B,IAAI,EAAE,0BAA0B;aAEhC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjC,IAAI,EAAE,0BAA0B,EAChD,OAAO,EAAE,MAAM,EACC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAKpD;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,0BAA0B,EAChC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,sBAAsB,CAExB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proof Verification Error Codes and Types
|
|
3
|
+
*
|
|
4
|
+
* Specific error codes for proof verification failures to enable
|
|
5
|
+
* better error handling and debugging.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Error codes for proof verification
|
|
9
|
+
*/
|
|
10
|
+
export const PROOF_VERIFICATION_ERROR_CODES = {
|
|
11
|
+
// Proof structure errors
|
|
12
|
+
INVALID_PROOF_STRUCTURE: "INVALID_PROOF_STRUCTURE",
|
|
13
|
+
MISSING_REQUIRED_FIELD: "MISSING_REQUIRED_FIELD",
|
|
14
|
+
// Security errors
|
|
15
|
+
NONCE_REPLAY_DETECTED: "NONCE_REPLAY_DETECTED",
|
|
16
|
+
TIMESTAMP_SKEW_EXCEEDED: "TIMESTAMP_SKEW_EXCEEDED",
|
|
17
|
+
TIMESTAMP_INVALID: "TIMESTAMP_INVALID",
|
|
18
|
+
// Signature errors
|
|
19
|
+
INVALID_JWS_SIGNATURE: "INVALID_JWS_SIGNATURE",
|
|
20
|
+
INVALID_JWS_FORMAT: "INVALID_JWS_FORMAT",
|
|
21
|
+
INVALID_JWS_HEADER: "INVALID_JWS_HEADER",
|
|
22
|
+
INVALID_JWS_PAYLOAD: "INVALID_JWS_PAYLOAD",
|
|
23
|
+
INVALID_JWS_SIGNATURE_BASE64: "INVALID_JWS_SIGNATURE_BASE64",
|
|
24
|
+
UNSUPPORTED_ALGORITHM: "UNSUPPORTED_ALGORITHM",
|
|
25
|
+
// JWK errors
|
|
26
|
+
INVALID_JWK_FORMAT: "INVALID_JWK_FORMAT",
|
|
27
|
+
INVALID_JWK_KTY: "INVALID_JWK_KTY",
|
|
28
|
+
INVALID_JWK_CRV: "INVALID_JWK_CRV",
|
|
29
|
+
INVALID_JWK_X_FIELD: "INVALID_JWK_X_FIELD",
|
|
30
|
+
INVALID_JWK_KEY_LENGTH: "INVALID_JWK_KEY_LENGTH",
|
|
31
|
+
JWK_KID_MISMATCH: "JWK_KID_MISMATCH",
|
|
32
|
+
// DID resolution errors
|
|
33
|
+
DID_RESOLUTION_FAILED: "DID_RESOLUTION_FAILED",
|
|
34
|
+
DID_DOCUMENT_NOT_FOUND: "DID_DOCUMENT_NOT_FOUND",
|
|
35
|
+
VERIFICATION_METHOD_NOT_FOUND: "VERIFICATION_METHOD_NOT_FOUND",
|
|
36
|
+
PUBLIC_KEY_NOT_FOUND: "PUBLIC_KEY_NOT_FOUND",
|
|
37
|
+
UNSUPPORTED_DID_METHOD: "UNSUPPORTED_DID_METHOD",
|
|
38
|
+
// Generic errors
|
|
39
|
+
VERIFICATION_ERROR: "VERIFICATION_ERROR",
|
|
40
|
+
INTERNAL_ERROR: "INTERNAL_ERROR",
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Proof verification error with specific error code
|
|
44
|
+
*/
|
|
45
|
+
export class ProofVerificationError extends Error {
|
|
46
|
+
code;
|
|
47
|
+
details;
|
|
48
|
+
constructor(code, message, details) {
|
|
49
|
+
super(message);
|
|
50
|
+
this.code = code;
|
|
51
|
+
this.details = details;
|
|
52
|
+
this.name = "ProofVerificationError";
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a proof verification error
|
|
57
|
+
*/
|
|
58
|
+
export function createProofVerificationError(code, message, details) {
|
|
59
|
+
return new ProofVerificationError(code, message, details);
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/proof/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG;IAC5C,yBAAyB;IACzB,uBAAuB,EAAE,yBAAyB;IAClD,sBAAsB,EAAE,wBAAwB;IAEhD,kBAAkB;IAClB,qBAAqB,EAAE,uBAAuB;IAC9C,uBAAuB,EAAE,yBAAyB;IAClD,iBAAiB,EAAE,mBAAmB;IAEtC,mBAAmB;IACnB,qBAAqB,EAAE,uBAAuB;IAC9C,kBAAkB,EAAE,oBAAoB;IACxC,kBAAkB,EAAE,oBAAoB;IACxC,mBAAmB,EAAE,qBAAqB;IAC1C,4BAA4B,EAAE,8BAA8B;IAC5D,qBAAqB,EAAE,uBAAuB;IAE9C,aAAa;IACb,kBAAkB,EAAE,oBAAoB;IACxC,eAAe,EAAE,iBAAiB;IAClC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,sBAAsB,EAAE,wBAAwB;IAChD,gBAAgB,EAAE,kBAAkB;IAEpC,wBAAwB;IACxB,qBAAqB,EAAE,uBAAuB;IAC9C,sBAAsB,EAAE,wBAAwB;IAChD,6BAA6B,EAAE,+BAA+B;IAC9D,oBAAoB,EAAE,sBAAsB;IAC5C,sBAAsB,EAAE,wBAAwB;IAEhD,iBAAiB;IACjB,kBAAkB,EAAE,oBAAoB;IACxC,cAAc,EAAE,gBAAgB;CACxB,CAAC;AAKX;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAE7B;IAEA;IAHlB,YACkB,IAAgC,EAChD,OAAe,EACC,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAA4B;QAEhC,YAAO,GAAP,OAAO,CAA0B;QAGjD,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAgC,EAChC,OAAe,EACf,OAAiC;IAEjC,OAAO,IAAI,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC"}
|