@kya-os/mcp-i-core 1.3.13 → 1.3.15
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/dist/config/remote-config.js +9 -12
- package/dist/runtime/base.d.ts +2 -1
- package/dist/runtime/base.js +34 -6
- package/dist/services/access-control.service.js +5 -0
- package/dist/services/tool-protection.service.js +17 -8
- package/package.json +2 -2
- package/.turbo/turbo-build.log +0 -4
- package/.turbo/turbo-test$colon$coverage.log +0 -4586
- package/.turbo/turbo-test.log +0 -4631
- package/COMPLIANCE_IMPROVEMENT_REPORT.md +0 -483
- package/Composer 3.md +0 -615
- package/GPT-5.md +0 -1169
- package/OPUS-plan.md +0 -352
- package/PHASE_3_AND_4.1_SUMMARY.md +0 -585
- package/PHASE_3_SUMMARY.md +0 -317
- package/PHASE_4.1.3_SUMMARY.md +0 -428
- package/PHASE_4.1_COMPLETE.md +0 -525
- package/PHASE_4_USER_DID_IDENTITY_LINKING_PLAN.md +0 -1240
- package/SCHEMA_COMPLIANCE_REPORT.md +0 -275
- package/TEST_PLAN.md +0 -571
- package/coverage/coverage-final.json +0 -60
- package/dist/cache/oauth-config-cache.d.ts.map +0 -1
- package/dist/cache/oauth-config-cache.js.map +0 -1
- package/dist/cache/tool-protection-cache.d.ts.map +0 -1
- package/dist/cache/tool-protection-cache.js.map +0 -1
- package/dist/compliance/index.d.ts.map +0 -1
- package/dist/compliance/index.js.map +0 -1
- package/dist/compliance/schema-registry.d.ts.map +0 -1
- package/dist/compliance/schema-registry.js.map +0 -1
- package/dist/compliance/schema-verifier.d.ts.map +0 -1
- package/dist/compliance/schema-verifier.js.map +0 -1
- package/dist/config/remote-config.d.ts.map +0 -1
- package/dist/config/remote-config.js.map +0 -1
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/delegation/audience-validator.d.ts.map +0 -1
- package/dist/delegation/audience-validator.js.map +0 -1
- package/dist/delegation/bitstring.d.ts.map +0 -1
- package/dist/delegation/bitstring.js.map +0 -1
- package/dist/delegation/cascading-revocation.d.ts.map +0 -1
- package/dist/delegation/cascading-revocation.js.map +0 -1
- package/dist/delegation/delegation-graph.d.ts.map +0 -1
- package/dist/delegation/delegation-graph.js.map +0 -1
- package/dist/delegation/did-key-resolver.d.ts.map +0 -1
- package/dist/delegation/did-key-resolver.js.map +0 -1
- package/dist/delegation/index.d.ts.map +0 -1
- package/dist/delegation/index.js.map +0 -1
- package/dist/delegation/statuslist-manager.d.ts.map +0 -1
- package/dist/delegation/statuslist-manager.js.map +0 -1
- package/dist/delegation/storage/index.d.ts.map +0 -1
- package/dist/delegation/storage/index.js.map +0 -1
- package/dist/delegation/storage/memory-graph-storage.d.ts.map +0 -1
- package/dist/delegation/storage/memory-graph-storage.js.map +0 -1
- package/dist/delegation/storage/memory-statuslist-storage.d.ts.map +0 -1
- package/dist/delegation/storage/memory-statuslist-storage.js.map +0 -1
- package/dist/delegation/utils.d.ts.map +0 -1
- package/dist/delegation/utils.js.map +0 -1
- package/dist/delegation/vc-issuer.d.ts.map +0 -1
- package/dist/delegation/vc-issuer.js.map +0 -1
- package/dist/delegation/vc-verifier.d.ts.map +0 -1
- package/dist/delegation/vc-verifier.js.map +0 -1
- package/dist/identity/idp-token-resolver.d.ts.map +0 -1
- package/dist/identity/idp-token-resolver.js.map +0 -1
- package/dist/identity/idp-token-storage.interface.d.ts.map +0 -1
- package/dist/identity/idp-token-storage.interface.js.map +0 -1
- package/dist/identity/user-did-manager.d.ts.map +0 -1
- package/dist/identity/user-did-manager.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/providers/base.d.ts.map +0 -1
- package/dist/providers/base.js.map +0 -1
- package/dist/providers/memory.d.ts.map +0 -1
- package/dist/providers/memory.js.map +0 -1
- package/dist/runtime/audit-logger.d.ts.map +0 -1
- package/dist/runtime/audit-logger.js.map +0 -1
- package/dist/runtime/base.d.ts.map +0 -1
- package/dist/runtime/base.js.map +0 -1
- package/dist/services/access-control.service.d.ts.map +0 -1
- package/dist/services/access-control.service.js.map +0 -1
- package/dist/services/authorization/authorization-registry.d.ts.map +0 -1
- package/dist/services/authorization/authorization-registry.js.map +0 -1
- package/dist/services/authorization/types.d.ts.map +0 -1
- package/dist/services/authorization/types.js.map +0 -1
- package/dist/services/batch-delegation.service.d.ts.map +0 -1
- package/dist/services/batch-delegation.service.js.map +0 -1
- package/dist/services/crypto.service.d.ts.map +0 -1
- package/dist/services/crypto.service.js.map +0 -1
- package/dist/services/errors.d.ts.map +0 -1
- package/dist/services/errors.js.map +0 -1
- package/dist/services/index.d.ts.map +0 -1
- package/dist/services/index.js.map +0 -1
- package/dist/services/oauth-config.service.d.ts.map +0 -1
- package/dist/services/oauth-config.service.js.map +0 -1
- package/dist/services/oauth-provider-registry.d.ts.map +0 -1
- package/dist/services/oauth-provider-registry.js.map +0 -1
- package/dist/services/oauth-service.d.ts.map +0 -1
- package/dist/services/oauth-service.js.map +0 -1
- package/dist/services/oauth-token-retrieval.service.d.ts.map +0 -1
- package/dist/services/oauth-token-retrieval.service.js.map +0 -1
- package/dist/services/proof-verifier.d.ts.map +0 -1
- package/dist/services/proof-verifier.js.map +0 -1
- package/dist/services/provider-resolver.d.ts.map +0 -1
- package/dist/services/provider-resolver.js.map +0 -1
- package/dist/services/provider-validator.d.ts.map +0 -1
- package/dist/services/provider-validator.js.map +0 -1
- package/dist/services/session-registration.service.d.ts.map +0 -1
- package/dist/services/session-registration.service.js.map +0 -1
- package/dist/services/storage.service.d.ts.map +0 -1
- package/dist/services/storage.service.js.map +0 -1
- package/dist/services/tool-context-builder.d.ts.map +0 -1
- package/dist/services/tool-context-builder.js.map +0 -1
- package/dist/services/tool-protection.service.d.ts.map +0 -1
- package/dist/services/tool-protection.service.js.map +0 -1
- package/dist/types/oauth-required-error.d.ts.map +0 -1
- package/dist/types/oauth-required-error.js.map +0 -1
- package/dist/types/tool-protection.d.ts.map +0 -1
- package/dist/types/tool-protection.js.map +0 -1
- package/dist/utils/base58.d.ts.map +0 -1
- package/dist/utils/base58.js.map +0 -1
- package/dist/utils/base64.d.ts.map +0 -1
- package/dist/utils/base64.js.map +0 -1
- package/dist/utils/cors.d.ts.map +0 -1
- package/dist/utils/cors.js.map +0 -1
- package/dist/utils/did-helpers.d.ts.map +0 -1
- package/dist/utils/did-helpers.js.map +0 -1
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/storage-keys.d.ts.map +0 -1
- package/dist/utils/storage-keys.js.map +0 -1
- package/docs/API_REFERENCE.md +0 -1362
- package/docs/COMPLIANCE_MATRIX.md +0 -691
- package/docs/STATUSLIST2021_GUIDE.md +0 -696
- package/docs/W3C_VC_DELEGATION_GUIDE.md +0 -710
- package/src/__tests__/cache/tool-protection-cache.test.ts +0 -640
- package/src/__tests__/config/provider-runtime-config.test.ts +0 -309
- package/src/__tests__/delegation-e2e.test.ts +0 -690
- package/src/__tests__/identity/user-did-manager.test.ts +0 -232
- package/src/__tests__/index.test.ts +0 -56
- package/src/__tests__/integration/full-flow.test.ts +0 -789
- package/src/__tests__/integration.test.ts +0 -281
- package/src/__tests__/providers/base.test.ts +0 -173
- package/src/__tests__/providers/memory.test.ts +0 -319
- package/src/__tests__/regression/phase2-regression.test.ts +0 -429
- package/src/__tests__/runtime/audit-logger.test.ts +0 -154
- package/src/__tests__/runtime/base-extensions.test.ts +0 -595
- package/src/__tests__/runtime/base.test.ts +0 -869
- package/src/__tests__/runtime/delegation-flow.test.ts +0 -164
- package/src/__tests__/runtime/proof-client-did.test.ts +0 -376
- package/src/__tests__/runtime/route-interception.test.ts +0 -686
- package/src/__tests__/runtime/tool-protection-enforcement.test.ts +0 -908
- package/src/__tests__/services/agentshield-integration.test.ts +0 -791
- package/src/__tests__/services/cache-busting.test.ts +0 -125
- package/src/__tests__/services/oauth-service-pkce.test.ts +0 -556
- package/src/__tests__/services/provider-resolver-edge-cases.test.ts +0 -591
- package/src/__tests__/services/tool-protection-merged-config.test.ts +0 -485
- package/src/__tests__/services/tool-protection-oauth-provider.test.ts +0 -480
- package/src/__tests__/services/tool-protection.service.test.ts +0 -1373
- package/src/__tests__/utils/mock-providers.ts +0 -340
- package/src/cache/oauth-config-cache.d.ts +0 -69
- package/src/cache/oauth-config-cache.d.ts.map +0 -1
- package/src/cache/oauth-config-cache.js.map +0 -1
- package/src/cache/oauth-config-cache.ts +0 -123
- package/src/cache/tool-protection-cache.ts +0 -171
- package/src/compliance/EXAMPLE.md +0 -412
- package/src/compliance/__tests__/schema-verifier.test.ts +0 -797
- package/src/compliance/index.ts +0 -8
- package/src/compliance/schema-registry.ts +0 -460
- package/src/compliance/schema-verifier.ts +0 -708
- package/src/config/__tests__/merged-config.spec.ts +0 -445
- package/src/config/__tests__/remote-config.spec.ts +0 -268
- package/src/config/remote-config.ts +0 -264
- package/src/config.ts +0 -312
- package/src/delegation/__tests__/audience-validator.test.ts +0 -112
- package/src/delegation/__tests__/bitstring.test.ts +0 -346
- package/src/delegation/__tests__/cascading-revocation.test.ts +0 -628
- package/src/delegation/__tests__/delegation-graph.test.ts +0 -584
- package/src/delegation/__tests__/did-key-resolver.test.ts +0 -265
- package/src/delegation/__tests__/utils.test.ts +0 -152
- package/src/delegation/__tests__/vc-issuer.test.ts +0 -442
- package/src/delegation/__tests__/vc-verifier.test.ts +0 -922
- package/src/delegation/audience-validator.ts +0 -52
- package/src/delegation/bitstring.ts +0 -278
- package/src/delegation/cascading-revocation.ts +0 -370
- package/src/delegation/delegation-graph.ts +0 -299
- package/src/delegation/did-key-resolver.ts +0 -179
- package/src/delegation/index.ts +0 -14
- package/src/delegation/statuslist-manager.ts +0 -353
- package/src/delegation/storage/__tests__/memory-graph-storage.test.ts +0 -366
- package/src/delegation/storage/__tests__/memory-statuslist-storage.test.ts +0 -228
- package/src/delegation/storage/index.ts +0 -9
- package/src/delegation/storage/memory-graph-storage.ts +0 -178
- package/src/delegation/storage/memory-statuslist-storage.ts +0 -77
- package/src/delegation/utils.ts +0 -221
- package/src/delegation/vc-issuer.ts +0 -232
- package/src/delegation/vc-verifier.ts +0 -568
- package/src/identity/idp-token-resolver.ts +0 -181
- package/src/identity/idp-token-storage.interface.ts +0 -94
- package/src/identity/user-did-manager.ts +0 -526
- package/src/index.ts +0 -310
- package/src/providers/base.d.ts +0 -91
- package/src/providers/base.d.ts.map +0 -1
- package/src/providers/base.js.map +0 -1
- package/src/providers/base.ts +0 -96
- package/src/providers/memory.ts +0 -142
- package/src/runtime/audit-logger.ts +0 -39
- package/src/runtime/base.ts +0 -1392
- package/src/services/__tests__/access-control.integration.test.ts +0 -443
- package/src/services/__tests__/access-control.proof-response-validation.test.ts +0 -578
- package/src/services/__tests__/access-control.service.test.ts +0 -970
- package/src/services/__tests__/batch-delegation.service.test.ts +0 -351
- package/src/services/__tests__/crypto.service.test.ts +0 -531
- package/src/services/__tests__/oauth-provider-registry.test.ts +0 -142
- package/src/services/__tests__/proof-verifier.integration.test.ts +0 -485
- package/src/services/__tests__/proof-verifier.test.ts +0 -489
- package/src/services/__tests__/provider-resolution.integration.test.ts +0 -202
- package/src/services/__tests__/provider-resolver.test.ts +0 -213
- package/src/services/__tests__/storage.service.test.ts +0 -358
- package/src/services/access-control.service.ts +0 -990
- package/src/services/authorization/authorization-registry.ts +0 -66
- package/src/services/authorization/types.ts +0 -71
- package/src/services/batch-delegation.service.ts +0 -137
- package/src/services/crypto.service.ts +0 -302
- package/src/services/errors.ts +0 -76
- package/src/services/index.ts +0 -18
- package/src/services/oauth-config.service.d.ts +0 -53
- package/src/services/oauth-config.service.d.ts.map +0 -1
- package/src/services/oauth-config.service.js.map +0 -1
- package/src/services/oauth-config.service.ts +0 -192
- package/src/services/oauth-provider-registry.d.ts +0 -57
- package/src/services/oauth-provider-registry.d.ts.map +0 -1
- package/src/services/oauth-provider-registry.js.map +0 -1
- package/src/services/oauth-provider-registry.ts +0 -141
- package/src/services/oauth-service.ts +0 -544
- package/src/services/oauth-token-retrieval.service.ts +0 -245
- package/src/services/proof-verifier.ts +0 -478
- package/src/services/provider-resolver.d.ts +0 -48
- package/src/services/provider-resolver.d.ts.map +0 -1
- package/src/services/provider-resolver.js.map +0 -1
- package/src/services/provider-resolver.ts +0 -146
- package/src/services/provider-validator.ts +0 -170
- package/src/services/session-registration.service.ts +0 -251
- package/src/services/storage.service.ts +0 -566
- package/src/services/tool-context-builder.ts +0 -237
- package/src/services/tool-protection.service.ts +0 -1070
- package/src/types/oauth-required-error.ts +0 -63
- package/src/types/tool-protection.ts +0 -155
- package/src/utils/__tests__/did-helpers.test.ts +0 -156
- package/src/utils/base58.ts +0 -109
- package/src/utils/base64.ts +0 -148
- package/src/utils/cors.ts +0 -83
- package/src/utils/did-helpers.ts +0 -210
- package/src/utils/index.ts +0 -8
- package/src/utils/storage-keys.ts +0 -278
- package/tsconfig.json +0 -21
- package/vitest.config.ts +0 -56
|
@@ -54,20 +54,17 @@ async function fetchRemoteConfig(options, cache) {
|
|
|
54
54
|
}
|
|
55
55
|
// Fetch from API
|
|
56
56
|
try {
|
|
57
|
-
//
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
// Use agent-scoped endpoint
|
|
65
|
-
url = `${apiUrl}/api/v1/bouncer/config?agent_did=${encodeURIComponent(agentDid)}`;
|
|
66
|
-
}
|
|
67
|
-
else {
|
|
68
|
-
console.warn('[RemoteConfig] Neither projectId nor agentDid provided');
|
|
57
|
+
// ❌ REMOVED: Legacy agent-scoped endpoint fallback
|
|
58
|
+
// Agent-only scoping causes cross-user delegation leakage (Priority 3 fallback issue)
|
|
59
|
+
// projectId is now REQUIRED for proper user isolation
|
|
60
|
+
if (!projectId) {
|
|
61
|
+
console.error('[RemoteConfig] projectId is required for user-scoped delegation. ' +
|
|
62
|
+
'Agent-only scoping has been deprecated due to security concerns (cross-user delegation leakage). ' +
|
|
63
|
+
'Please configure AGENTSHIELD_PROJECT_ID environment variable.');
|
|
69
64
|
return null;
|
|
70
65
|
}
|
|
66
|
+
// ✅ PROJECT-SCOPED ENDPOINT: Ensures delegations are properly scoped to user+agent
|
|
67
|
+
const url = `${apiUrl}${agentshield_api_1.AGENTSHIELD_ENDPOINTS.CONFIG(projectId)}`;
|
|
71
68
|
const response = await fetchProvider(url, {
|
|
72
69
|
headers: {
|
|
73
70
|
'Authorization': `Bearer ${apiKey}`,
|
package/dist/runtime/base.d.ts
CHANGED
|
@@ -122,9 +122,10 @@ export declare class MCPIRuntimeBase {
|
|
|
122
122
|
* @param session - Current session context
|
|
123
123
|
* @param resumeToken - Token to resume after delegation
|
|
124
124
|
* @param projectId - Project ID for AgentShield API
|
|
125
|
+
* @param provider - Provider name (e.g., "github", "credentials") to select specific auth method
|
|
125
126
|
* @returns Full consent URL with snake_case parameters
|
|
126
127
|
*/
|
|
127
|
-
protected buildConsentUrl(toolName: string, scopes: string[], session?: any, resumeToken?: string, projectId?: string): string;
|
|
128
|
+
protected buildConsentUrl(toolName: string, scopes: string[], session?: any, resumeToken?: string, projectId?: string, provider?: string): string;
|
|
128
129
|
/**
|
|
129
130
|
* Issue a new nonce and register it in the cache
|
|
130
131
|
* Use this to get a nonce for the session context before calling processToolCall
|
package/dist/runtime/base.js
CHANGED
|
@@ -271,7 +271,10 @@ class MCPIRuntimeBase {
|
|
|
271
271
|
const resumeToken = this.generateResumeToken(interceptedCall);
|
|
272
272
|
// Build consent URL with resume token
|
|
273
273
|
// Note: projectId is not available in base class - subclasses should override buildConsentUrl
|
|
274
|
-
|
|
274
|
+
// Pass oauthProvider to ensure correct auth method is selected (e.g., "credentials" vs "github")
|
|
275
|
+
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken, undefined, // projectId - handled by subclass override
|
|
276
|
+
protection.oauthProvider // Provider from tool config
|
|
277
|
+
);
|
|
275
278
|
// Create error with intercepted call context and pre-generated resume token
|
|
276
279
|
const error = new tool_protection_js_1.DelegationRequiredError(toolName, protection.requiredScopes, consentUrl, interceptedCall, resumeToken);
|
|
277
280
|
// Store intercepted call for resumption
|
|
@@ -321,6 +324,17 @@ class MCPIRuntimeBase {
|
|
|
321
324
|
agent_did: identity.did,
|
|
322
325
|
scopes: protection.requiredScopes,
|
|
323
326
|
};
|
|
327
|
+
// ✅ CRITICAL: Include user_did for user-scoped delegation verification
|
|
328
|
+
// This prevents cross-user delegation leakage (Priority 3 fallback issue)
|
|
329
|
+
// Without user_did, AgentShield cannot validate user isolation
|
|
330
|
+
if (session?.userDid) {
|
|
331
|
+
verifyRequest.user_did = session.userDid;
|
|
332
|
+
if (this.config.audit?.enabled) {
|
|
333
|
+
console.log("[MCP-I] 🔐 Including user_did in verification request", {
|
|
334
|
+
userDid: session.userDid.slice(0, 20) + "...",
|
|
335
|
+
});
|
|
336
|
+
}
|
|
337
|
+
}
|
|
324
338
|
// Add delegation token if available (preferred over consent proof)
|
|
325
339
|
if (delegationToken) {
|
|
326
340
|
verifyRequest.delegation_token = delegationToken;
|
|
@@ -368,7 +382,9 @@ class MCPIRuntimeBase {
|
|
|
368
382
|
expiresAt: this.clock.calculateExpiry(1800), // 30 minutes
|
|
369
383
|
};
|
|
370
384
|
const resumeToken = this.generateResumeToken(interceptedCall);
|
|
371
|
-
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken
|
|
385
|
+
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken, undefined, // projectId - handled by subclass override
|
|
386
|
+
protection.oauthProvider // Provider from tool config
|
|
387
|
+
);
|
|
372
388
|
this.interceptedCalls.set(resumeToken, interceptedCall);
|
|
373
389
|
this.cleanupExpiredInterceptedCalls();
|
|
374
390
|
throw new tool_protection_js_1.DelegationRequiredError(toolName, protection.requiredScopes, consentUrl, interceptedCall, resumeToken);
|
|
@@ -402,7 +418,9 @@ class MCPIRuntimeBase {
|
|
|
402
418
|
expiresAt: this.clock.calculateExpiry(1800), // 30 minutes
|
|
403
419
|
};
|
|
404
420
|
const resumeToken = this.generateResumeToken(interceptedCall);
|
|
405
|
-
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken
|
|
421
|
+
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken, undefined, // projectId - handled by subclass override
|
|
422
|
+
protection.oauthProvider // Provider from tool config
|
|
423
|
+
);
|
|
406
424
|
this.interceptedCalls.set(resumeToken, interceptedCall);
|
|
407
425
|
this.cleanupExpiredInterceptedCalls();
|
|
408
426
|
throw new tool_protection_js_1.DelegationRequiredError(toolName, protection.requiredScopes, consentUrl, interceptedCall, resumeToken);
|
|
@@ -466,7 +484,9 @@ class MCPIRuntimeBase {
|
|
|
466
484
|
expiresAt: this.clock.calculateExpiry(1800),
|
|
467
485
|
};
|
|
468
486
|
const resumeToken = this.generateResumeToken(interceptedCall);
|
|
469
|
-
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken
|
|
487
|
+
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken, undefined, // projectId - handled by subclass override
|
|
488
|
+
protection.oauthProvider // Provider from tool config
|
|
489
|
+
);
|
|
470
490
|
this.interceptedCalls.set(resumeToken, interceptedCall);
|
|
471
491
|
this.cleanupExpiredInterceptedCalls();
|
|
472
492
|
throw new tool_protection_js_1.DelegationRequiredError(toolName, protection.requiredScopes, consentUrl, interceptedCall, resumeToken);
|
|
@@ -489,7 +509,9 @@ class MCPIRuntimeBase {
|
|
|
489
509
|
expiresAt: this.clock.calculateExpiry(1800),
|
|
490
510
|
};
|
|
491
511
|
const resumeToken = this.generateResumeToken(interceptedCall);
|
|
492
|
-
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken
|
|
512
|
+
const consentUrl = this.buildConsentUrl(toolName, protection.requiredScopes, session, resumeToken, undefined, // projectId - handled by subclass override
|
|
513
|
+
protection.oauthProvider // Provider from tool config
|
|
514
|
+
);
|
|
493
515
|
this.interceptedCalls.set(resumeToken, interceptedCall);
|
|
494
516
|
this.cleanupExpiredInterceptedCalls();
|
|
495
517
|
throw new tool_protection_js_1.DelegationRequiredError(toolName, protection.requiredScopes, consentUrl, interceptedCall, resumeToken);
|
|
@@ -605,9 +627,10 @@ class MCPIRuntimeBase {
|
|
|
605
627
|
* @param session - Current session context
|
|
606
628
|
* @param resumeToken - Token to resume after delegation
|
|
607
629
|
* @param projectId - Project ID for AgentShield API
|
|
630
|
+
* @param provider - Provider name (e.g., "github", "credentials") to select specific auth method
|
|
608
631
|
* @returns Full consent URL with snake_case parameters
|
|
609
632
|
*/
|
|
610
|
-
buildConsentUrl(toolName, scopes, session, resumeToken, projectId) {
|
|
633
|
+
buildConsentUrl(toolName, scopes, session, resumeToken, projectId, provider) {
|
|
611
634
|
// Default implementation - override in subclasses
|
|
612
635
|
// This URL should point to AgentShield's consent page
|
|
613
636
|
// Parameter names use snake_case for AgentShield API compatibility
|
|
@@ -625,6 +648,11 @@ class MCPIRuntimeBase {
|
|
|
625
648
|
if (resumeToken) {
|
|
626
649
|
params.set("resume_token", resumeToken);
|
|
627
650
|
}
|
|
651
|
+
// Add provider if specified (allows selecting specific auth method like "credentials" or "github")
|
|
652
|
+
// This is critical when multiple providers are configured for a project
|
|
653
|
+
if (provider) {
|
|
654
|
+
params.set("provider", provider);
|
|
655
|
+
}
|
|
628
656
|
// Use AgentShield consent endpoint
|
|
629
657
|
return `https://kya.vouched.id/bouncer/consent?${params.toString()}`;
|
|
630
658
|
}
|
|
@@ -113,6 +113,11 @@ class AccessControlApiService {
|
|
|
113
113
|
if (request.scopes !== undefined) {
|
|
114
114
|
requestBody.scopes = request.scopes;
|
|
115
115
|
}
|
|
116
|
+
// ✅ CRITICAL: Include user_did for user-scoped delegation verification
|
|
117
|
+
// This prevents cross-user delegation leakage (Priority 3 fallback issue)
|
|
118
|
+
if (request.user_did !== undefined) {
|
|
119
|
+
requestBody.user_did = request.user_did;
|
|
120
|
+
}
|
|
116
121
|
// Handle credential_jwt: prefer request, fallback to context
|
|
117
122
|
if (request.credential_jwt !== undefined) {
|
|
118
123
|
requestBody.credential_jwt = request.credential_jwt;
|
|
@@ -409,6 +409,10 @@ class ToolProtectionService {
|
|
|
409
409
|
if (errorMessage.includes("API key is missing or empty")) {
|
|
410
410
|
throw error;
|
|
411
411
|
}
|
|
412
|
+
// Re-throw projectId required errors (security fix - don't fallback)
|
|
413
|
+
if (errorMessage.includes("projectId is required")) {
|
|
414
|
+
throw error;
|
|
415
|
+
}
|
|
412
416
|
// Re-throw HTTP errors (4xx, 5xx) - these indicate API issues, not network failures
|
|
413
417
|
// Exception: 429 (rate limit) should fallback if fallback config is available
|
|
414
418
|
if (errorMessage.includes("Failed to fetch bouncer config:")) {
|
|
@@ -541,15 +545,20 @@ class ToolProtectionService {
|
|
|
541
545
|
// This endpoint returns config.toolProtection.tools with all tool rules
|
|
542
546
|
let url;
|
|
543
547
|
let useMergedEndpoint = false;
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
548
|
+
// ❌ REMOVED: Legacy agent-scoped endpoint fallback
|
|
549
|
+
// Agent-only scoping causes cross-user delegation leakage (Priority 3 fallback issue)
|
|
550
|
+
// projectId is now REQUIRED for proper user isolation
|
|
551
|
+
if (!this.config.projectId) {
|
|
552
|
+
const error = new Error("[ToolProtectionService] projectId is required for user-scoped delegation. " +
|
|
553
|
+
"Agent-only scoping has been deprecated due to security concerns (cross-user delegation leakage). " +
|
|
554
|
+
"Please configure AGENTSHIELD_PROJECT_ID environment variable.");
|
|
555
|
+
console.error("[ToolProtectionService]", error.message);
|
|
556
|
+
throw error;
|
|
552
557
|
}
|
|
558
|
+
// ✅ PROJECT-SCOPED ENDPOINT: Returns config with embedded toolProtection.tools
|
|
559
|
+
// This endpoint ensures delegations are properly scoped to user+agent
|
|
560
|
+
url = `${this.config.apiUrl}/api/v1/bouncer/projects/${encodeURIComponent(this.config.projectId)}/config`;
|
|
561
|
+
useMergedEndpoint = true;
|
|
553
562
|
// Add cache-busting query param when bypassing CDN cache
|
|
554
563
|
// This is used during cache invalidation (clearAndRefresh) to ensure we get fresh data
|
|
555
564
|
// from the origin server, not stale CDN-cached data
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kya-os/mcp-i-core",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.15",
|
|
4
4
|
"description": "Core runtime and types for MCP-I framework",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"prepublishOnly": "npm run build && node ../create-mcpi-app/scripts/validate-no-workspace.js"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@kya-os/contracts": "^1.6.
|
|
31
|
+
"@kya-os/contracts": "^1.6.8",
|
|
32
32
|
"jose": "^5.6.3",
|
|
33
33
|
"json-canonicalize": "^2.0.0",
|
|
34
34
|
"zod": "^3.25.76"
|
package/.turbo/turbo-build.log
DELETED