@kya-os/mcp-i-core 1.2.3-canary.6 → 1.3.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/.claude/settings.local.json +9 -0
- package/.turbo/turbo-build.log +4 -0
- package/.turbo/turbo-test$colon$coverage.log +4514 -0
- package/.turbo/turbo-test.log +2973 -0
- package/COMPLIANCE_IMPROVEMENT_REPORT.md +483 -0
- package/Composer 3.md +615 -0
- package/GPT-5.md +1169 -0
- package/OPUS-plan.md +352 -0
- package/PHASE_3_AND_4.1_SUMMARY.md +585 -0
- package/PHASE_3_SUMMARY.md +317 -0
- package/PHASE_4.1.3_SUMMARY.md +428 -0
- package/PHASE_4.1_COMPLETE.md +525 -0
- package/PHASE_4_USER_DID_IDENTITY_LINKING_PLAN.md +1240 -0
- package/SCHEMA_COMPLIANCE_REPORT.md +275 -0
- package/TEST_PLAN.md +571 -0
- package/coverage/coverage-final.json +57 -0
- package/dist/__tests__/utils/mock-providers.d.ts +1 -2
- package/dist/__tests__/utils/mock-providers.d.ts.map +1 -1
- package/dist/__tests__/utils/mock-providers.js.map +1 -1
- package/dist/cache/oauth-config-cache.d.ts +69 -0
- package/dist/cache/oauth-config-cache.d.ts.map +1 -0
- package/dist/cache/oauth-config-cache.js +76 -0
- package/dist/cache/oauth-config-cache.js.map +1 -0
- package/dist/identity/idp-token-resolver.d.ts +53 -0
- package/dist/identity/idp-token-resolver.d.ts.map +1 -0
- package/dist/identity/idp-token-resolver.js +108 -0
- package/dist/identity/idp-token-resolver.js.map +1 -0
- package/dist/identity/idp-token-storage.interface.d.ts +42 -0
- package/dist/identity/idp-token-storage.interface.d.ts.map +1 -0
- package/dist/identity/idp-token-storage.interface.js +12 -0
- package/dist/identity/idp-token-storage.interface.js.map +1 -0
- package/dist/identity/user-did-manager.d.ts +39 -1
- package/dist/identity/user-did-manager.d.ts.map +1 -1
- package/dist/identity/user-did-manager.js +69 -3
- package/dist/identity/user-did-manager.js.map +1 -1
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +39 -1
- package/dist/index.js.map +1 -1
- package/dist/runtime/audit-logger.d.ts +37 -0
- package/dist/runtime/audit-logger.d.ts.map +1 -0
- package/dist/runtime/audit-logger.js +9 -0
- package/dist/runtime/audit-logger.js.map +1 -0
- package/dist/runtime/base.d.ts +58 -2
- package/dist/runtime/base.d.ts.map +1 -1
- package/dist/runtime/base.js +266 -11
- package/dist/runtime/base.js.map +1 -1
- package/dist/services/access-control.service.d.ts.map +1 -1
- package/dist/services/access-control.service.js +200 -35
- package/dist/services/access-control.service.js.map +1 -1
- package/dist/services/authorization/authorization-registry.d.ts +29 -0
- package/dist/services/authorization/authorization-registry.d.ts.map +1 -0
- package/dist/services/authorization/authorization-registry.js +57 -0
- package/dist/services/authorization/authorization-registry.js.map +1 -0
- package/dist/services/authorization/types.d.ts +53 -0
- package/dist/services/authorization/types.d.ts.map +1 -0
- package/dist/services/authorization/types.js +10 -0
- package/dist/services/authorization/types.js.map +1 -0
- package/dist/services/batch-delegation.service.d.ts +53 -0
- package/dist/services/batch-delegation.service.d.ts.map +1 -0
- package/dist/services/batch-delegation.service.js +95 -0
- package/dist/services/batch-delegation.service.js.map +1 -0
- package/dist/services/oauth-config.service.d.ts +53 -0
- package/dist/services/oauth-config.service.d.ts.map +1 -0
- package/dist/services/oauth-config.service.js +117 -0
- package/dist/services/oauth-config.service.js.map +1 -0
- package/dist/services/oauth-provider-registry.d.ts +77 -0
- package/dist/services/oauth-provider-registry.d.ts.map +1 -0
- package/dist/services/oauth-provider-registry.js +112 -0
- package/dist/services/oauth-provider-registry.js.map +1 -0
- package/dist/services/oauth-service.d.ts +77 -0
- package/dist/services/oauth-service.d.ts.map +1 -0
- package/dist/services/oauth-service.js +348 -0
- package/dist/services/oauth-service.js.map +1 -0
- package/dist/services/oauth-token-retrieval.service.d.ts +49 -0
- package/dist/services/oauth-token-retrieval.service.d.ts.map +1 -0
- package/dist/services/oauth-token-retrieval.service.js +150 -0
- package/dist/services/oauth-token-retrieval.service.js.map +1 -0
- package/dist/services/provider-resolver.d.ts +48 -0
- package/dist/services/provider-resolver.d.ts.map +1 -0
- package/dist/services/provider-resolver.js +120 -0
- package/dist/services/provider-resolver.js.map +1 -0
- package/dist/services/provider-validator.d.ts +55 -0
- package/dist/services/provider-validator.d.ts.map +1 -0
- package/dist/services/provider-validator.js +135 -0
- package/dist/services/provider-validator.js.map +1 -0
- package/dist/services/tool-context-builder.d.ts +57 -0
- package/dist/services/tool-context-builder.d.ts.map +1 -0
- package/dist/services/tool-context-builder.js +125 -0
- package/dist/services/tool-context-builder.js.map +1 -0
- package/dist/services/tool-protection.service.d.ts +87 -10
- package/dist/services/tool-protection.service.d.ts.map +1 -1
- package/dist/services/tool-protection.service.js +282 -112
- package/dist/services/tool-protection.service.js.map +1 -1
- package/dist/types/oauth-required-error.d.ts +40 -0
- package/dist/types/oauth-required-error.d.ts.map +1 -0
- package/dist/types/oauth-required-error.js +40 -0
- package/dist/types/oauth-required-error.js.map +1 -0
- package/dist/utils/did-helpers.d.ts +33 -0
- package/dist/utils/did-helpers.d.ts.map +1 -1
- package/dist/utils/did-helpers.js +40 -0
- package/dist/utils/did-helpers.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/docs/API_REFERENCE.md +1362 -0
- package/docs/COMPLIANCE_MATRIX.md +691 -0
- package/docs/STATUSLIST2021_GUIDE.md +696 -0
- package/docs/W3C_VC_DELEGATION_GUIDE.md +710 -0
- package/package.json +24 -50
- package/scripts/audit-compliance.ts +724 -0
- package/src/__tests__/cache/tool-protection-cache.test.ts +640 -0
- package/src/__tests__/config/provider-runtime-config.test.ts +309 -0
- package/src/__tests__/delegation-e2e.test.ts +690 -0
- package/src/__tests__/identity/user-did-manager.test.ts +213 -0
- package/src/__tests__/index.test.ts +56 -0
- package/src/__tests__/integration/full-flow.test.ts +776 -0
- package/src/__tests__/integration.test.ts +281 -0
- package/src/__tests__/providers/base.test.ts +173 -0
- package/src/__tests__/providers/memory.test.ts +319 -0
- package/src/__tests__/regression/phase2-regression.test.ts +427 -0
- package/src/__tests__/runtime/audit-logger.test.ts +154 -0
- package/src/__tests__/runtime/base-extensions.test.ts +593 -0
- package/src/__tests__/runtime/base.test.ts +869 -0
- package/src/__tests__/runtime/delegation-flow.test.ts +164 -0
- package/src/__tests__/runtime/proof-client-did.test.ts +375 -0
- package/src/__tests__/runtime/route-interception.test.ts +686 -0
- package/src/__tests__/runtime/tool-protection-enforcement.test.ts +908 -0
- package/src/__tests__/services/agentshield-integration.test.ts +784 -0
- package/src/__tests__/services/provider-resolver-edge-cases.test.ts +487 -0
- package/src/__tests__/services/tool-protection-oauth-provider.test.ts +480 -0
- package/src/__tests__/services/tool-protection.service.test.ts +1366 -0
- package/src/__tests__/utils/mock-providers.ts +340 -0
- package/src/cache/oauth-config-cache.d.ts +69 -0
- package/src/cache/oauth-config-cache.d.ts.map +1 -0
- package/src/cache/oauth-config-cache.js +71 -0
- package/src/cache/oauth-config-cache.js.map +1 -0
- package/src/cache/oauth-config-cache.ts +123 -0
- package/src/cache/tool-protection-cache.ts +171 -0
- package/src/compliance/EXAMPLE.md +412 -0
- package/src/compliance/__tests__/schema-verifier.test.ts +797 -0
- package/src/compliance/index.ts +8 -0
- package/src/compliance/schema-registry.ts +460 -0
- package/src/compliance/schema-verifier.ts +708 -0
- package/src/config/__tests__/remote-config.spec.ts +268 -0
- package/src/config/remote-config.ts +174 -0
- package/src/config.ts +309 -0
- package/src/delegation/__tests__/audience-validator.test.ts +112 -0
- package/src/delegation/__tests__/bitstring.test.ts +346 -0
- package/src/delegation/__tests__/cascading-revocation.test.ts +628 -0
- package/src/delegation/__tests__/delegation-graph.test.ts +584 -0
- package/src/delegation/__tests__/utils.test.ts +152 -0
- package/src/delegation/__tests__/vc-issuer.test.ts +442 -0
- package/src/delegation/__tests__/vc-verifier.test.ts +922 -0
- package/src/delegation/audience-validator.ts +52 -0
- package/src/delegation/bitstring.ts +278 -0
- package/src/delegation/cascading-revocation.ts +370 -0
- package/src/delegation/delegation-graph.ts +299 -0
- package/src/delegation/index.ts +14 -0
- package/src/delegation/statuslist-manager.ts +353 -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/index.ts +9 -0
- package/src/delegation/storage/memory-graph-storage.ts +178 -0
- package/src/delegation/storage/memory-statuslist-storage.ts +77 -0
- package/src/delegation/utils.ts +42 -0
- package/src/delegation/vc-issuer.ts +232 -0
- package/src/delegation/vc-verifier.ts +568 -0
- package/src/identity/idp-token-resolver.ts +147 -0
- package/src/identity/idp-token-storage.interface.ts +59 -0
- package/src/identity/user-did-manager.ts +370 -0
- package/src/index.ts +260 -0
- package/src/providers/base.d.ts +91 -0
- package/src/providers/base.d.ts.map +1 -0
- package/src/providers/base.js +38 -0
- package/src/providers/base.js.map +1 -0
- package/src/providers/base.ts +96 -0
- package/src/providers/memory.ts +142 -0
- package/src/runtime/audit-logger.ts +39 -0
- package/src/runtime/base.ts +1329 -0
- package/src/services/__tests__/access-control.integration.test.ts +443 -0
- package/src/services/__tests__/access-control.proof-response-validation.test.ts +578 -0
- package/src/services/__tests__/access-control.service.test.ts +970 -0
- package/src/services/__tests__/batch-delegation.service.test.ts +351 -0
- package/src/services/__tests__/crypto.service.test.ts +531 -0
- package/src/services/__tests__/oauth-provider-registry.test.ts +142 -0
- package/src/services/__tests__/proof-verifier.integration.test.ts +485 -0
- package/src/services/__tests__/proof-verifier.test.ts +489 -0
- package/src/services/__tests__/provider-resolution.integration.test.ts +198 -0
- package/src/services/__tests__/provider-resolver.test.ts +217 -0
- package/src/services/__tests__/storage.service.test.ts +358 -0
- package/src/services/access-control.service.ts +990 -0
- package/src/services/authorization/authorization-registry.ts +66 -0
- package/src/services/authorization/types.ts +71 -0
- package/src/services/batch-delegation.service.ts +137 -0
- package/src/services/crypto.service.ts +302 -0
- package/src/services/errors.ts +76 -0
- package/src/services/index.ts +9 -0
- package/src/services/oauth-config.service.d.ts +53 -0
- package/src/services/oauth-config.service.d.ts.map +1 -0
- package/src/services/oauth-config.service.js +113 -0
- package/src/services/oauth-config.service.js.map +1 -0
- package/src/services/oauth-config.service.ts +166 -0
- package/src/services/oauth-provider-registry.d.ts +57 -0
- package/src/services/oauth-provider-registry.d.ts.map +1 -0
- package/src/services/oauth-provider-registry.js +73 -0
- package/src/services/oauth-provider-registry.js.map +1 -0
- package/src/services/oauth-provider-registry.ts +123 -0
- package/src/services/oauth-service.ts +510 -0
- package/src/services/oauth-token-retrieval.service.ts +245 -0
- package/src/services/proof-verifier.ts +478 -0
- package/src/services/provider-resolver.d.ts +48 -0
- package/src/services/provider-resolver.d.ts.map +1 -0
- package/src/services/provider-resolver.js +106 -0
- package/src/services/provider-resolver.js.map +1 -0
- package/src/services/provider-resolver.ts +144 -0
- package/src/services/provider-validator.ts +170 -0
- package/src/services/storage.service.ts +566 -0
- package/src/services/tool-context-builder.ts +172 -0
- package/src/services/tool-protection.service.ts +958 -0
- package/src/types/oauth-required-error.ts +63 -0
- package/src/types/tool-protection.ts +155 -0
- package/src/utils/__tests__/did-helpers.test.ts +101 -0
- package/src/utils/base64.ts +148 -0
- package/src/utils/cors.ts +83 -0
- package/src/utils/did-helpers.ts +150 -0
- package/src/utils/index.ts +8 -0
- package/src/utils/storage-keys.ts +278 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +56 -0
package/src/config.ts
ADDED
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider-based Runtime Configuration
|
|
3
|
+
*
|
|
4
|
+
* Core configuration for MCP-I runtime using the provider pattern.
|
|
5
|
+
* This is the foundation for all platform-specific implementations.
|
|
6
|
+
*
|
|
7
|
+
* @module @kya-os/mcp-i-core/config
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type {
|
|
11
|
+
MCPIBaseConfig,
|
|
12
|
+
RuntimeIdentityConfig,
|
|
13
|
+
ProofingConfig,
|
|
14
|
+
DelegationConfig,
|
|
15
|
+
ToolProtectionSourceConfig
|
|
16
|
+
} from '@kya-os/contracts/config';
|
|
17
|
+
|
|
18
|
+
import type {
|
|
19
|
+
CryptoProvider,
|
|
20
|
+
ClockProvider,
|
|
21
|
+
FetchProvider,
|
|
22
|
+
StorageProvider,
|
|
23
|
+
NonceCacheProvider,
|
|
24
|
+
IdentityProvider
|
|
25
|
+
} from './providers/base';
|
|
26
|
+
|
|
27
|
+
import type { ToolProtectionService } from './services/tool-protection.service';
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Provider-based runtime configuration
|
|
31
|
+
*
|
|
32
|
+
* This configuration is used internally by MCPIRuntimeBase and provides
|
|
33
|
+
* the foundation for all platform-specific implementations. It uses the
|
|
34
|
+
* provider pattern for platform abstraction, allowing different implementations
|
|
35
|
+
* for Node.js, Cloudflare Workers, and other environments.
|
|
36
|
+
*/
|
|
37
|
+
export interface ProviderRuntimeConfig extends MCPIBaseConfig {
|
|
38
|
+
/**
|
|
39
|
+
* Cryptographic operations provider
|
|
40
|
+
* Handles signing, verification, and key generation
|
|
41
|
+
*/
|
|
42
|
+
cryptoProvider: CryptoProvider;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Time operations provider
|
|
46
|
+
* Provides current time and timestamp generation
|
|
47
|
+
*/
|
|
48
|
+
clockProvider: ClockProvider;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* HTTP fetch operations provider
|
|
52
|
+
* Handles external API calls
|
|
53
|
+
*/
|
|
54
|
+
fetchProvider: FetchProvider;
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Storage operations provider
|
|
58
|
+
* Handles persistent data storage
|
|
59
|
+
*/
|
|
60
|
+
storageProvider: StorageProvider;
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* Nonce cache provider
|
|
64
|
+
* Handles replay prevention
|
|
65
|
+
*/
|
|
66
|
+
nonceCacheProvider: NonceCacheProvider;
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Identity management provider
|
|
70
|
+
* Handles agent identity and DID operations
|
|
71
|
+
*/
|
|
72
|
+
identityProvider: IdentityProvider;
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Session configuration
|
|
76
|
+
* Controls session handling and timeouts
|
|
77
|
+
*/
|
|
78
|
+
session?: {
|
|
79
|
+
/**
|
|
80
|
+
* Allowed timestamp skew in seconds
|
|
81
|
+
* @default 120
|
|
82
|
+
*/
|
|
83
|
+
timestampSkewSeconds?: number;
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Session TTL in minutes
|
|
87
|
+
* @default 30
|
|
88
|
+
*/
|
|
89
|
+
ttlMinutes?: number;
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* Identity configuration (optional)
|
|
94
|
+
* When provided, enables identity features
|
|
95
|
+
*/
|
|
96
|
+
identity?: RuntimeIdentityConfig;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Proofing configuration (optional)
|
|
100
|
+
* When provided, enables proof generation
|
|
101
|
+
*/
|
|
102
|
+
proofing?: ProofingConfig;
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Delegation configuration (optional)
|
|
106
|
+
* When provided, enables delegation verification
|
|
107
|
+
*/
|
|
108
|
+
delegation?: DelegationConfig;
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Tool protection service (optional)
|
|
112
|
+
* When provided, enables runtime tool protection
|
|
113
|
+
* Note: This is different from tool registry which is compile-time
|
|
114
|
+
*/
|
|
115
|
+
toolProtectionService?: ToolProtectionService;
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Tool protection source configuration (optional)
|
|
119
|
+
* Alternative to toolProtectionService for configuration-based setup
|
|
120
|
+
*/
|
|
121
|
+
toolProtection?: ToolProtectionSourceConfig;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Builder for provider runtime configuration
|
|
126
|
+
* Helps create valid configurations with proper defaults
|
|
127
|
+
*/
|
|
128
|
+
export class ProviderRuntimeConfigBuilder {
|
|
129
|
+
private config: Partial<ProviderRuntimeConfig> = {
|
|
130
|
+
environment: 'development'
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Set the providers (required)
|
|
135
|
+
*/
|
|
136
|
+
withProviders(providers: {
|
|
137
|
+
cryptoProvider: CryptoProvider;
|
|
138
|
+
clockProvider: ClockProvider;
|
|
139
|
+
fetchProvider: FetchProvider;
|
|
140
|
+
storageProvider: StorageProvider;
|
|
141
|
+
nonceCacheProvider: NonceCacheProvider;
|
|
142
|
+
identityProvider: IdentityProvider;
|
|
143
|
+
}): this {
|
|
144
|
+
Object.assign(this.config, providers);
|
|
145
|
+
return this;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
/**
|
|
149
|
+
* Set the environment
|
|
150
|
+
*/
|
|
151
|
+
withEnvironment(env: 'development' | 'production'): this {
|
|
152
|
+
this.config.environment = env;
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Configure session handling
|
|
158
|
+
*/
|
|
159
|
+
withSession(session: {
|
|
160
|
+
timestampSkewSeconds?: number;
|
|
161
|
+
ttlMinutes?: number;
|
|
162
|
+
}): this {
|
|
163
|
+
this.config.session = session;
|
|
164
|
+
return this;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Enable identity features
|
|
169
|
+
*/
|
|
170
|
+
withIdentity(identity: RuntimeIdentityConfig): this {
|
|
171
|
+
this.config.identity = identity;
|
|
172
|
+
return this;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/**
|
|
176
|
+
* Enable proofing features
|
|
177
|
+
*/
|
|
178
|
+
withProofing(proofing: ProofingConfig): this {
|
|
179
|
+
this.config.proofing = proofing;
|
|
180
|
+
return this;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Enable delegation features
|
|
185
|
+
*/
|
|
186
|
+
withDelegation(delegation: DelegationConfig): this {
|
|
187
|
+
this.config.delegation = delegation;
|
|
188
|
+
return this;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Set tool protection service
|
|
193
|
+
*/
|
|
194
|
+
withToolProtectionService(service: ToolProtectionService): this {
|
|
195
|
+
this.config.toolProtectionService = service;
|
|
196
|
+
return this;
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Set tool protection configuration
|
|
201
|
+
*/
|
|
202
|
+
withToolProtection(config: ToolProtectionSourceConfig): this {
|
|
203
|
+
this.config.toolProtection = config;
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Enable audit features
|
|
209
|
+
*/
|
|
210
|
+
withAudit(audit: {
|
|
211
|
+
enabled: boolean;
|
|
212
|
+
includeProofHashes?: boolean;
|
|
213
|
+
}): this {
|
|
214
|
+
this.config.audit = audit;
|
|
215
|
+
return this;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Enable well-known endpoints
|
|
220
|
+
*/
|
|
221
|
+
withWellKnown(wellKnown: {
|
|
222
|
+
enabled: boolean;
|
|
223
|
+
serviceName?: string;
|
|
224
|
+
}): this {
|
|
225
|
+
this.config.wellKnown = wellKnown;
|
|
226
|
+
return this;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Build the configuration
|
|
231
|
+
* Validates that all required providers are set
|
|
232
|
+
*/
|
|
233
|
+
build(): ProviderRuntimeConfig {
|
|
234
|
+
const required = [
|
|
235
|
+
'cryptoProvider',
|
|
236
|
+
'clockProvider',
|
|
237
|
+
'fetchProvider',
|
|
238
|
+
'storageProvider',
|
|
239
|
+
'nonceCacheProvider',
|
|
240
|
+
'identityProvider'
|
|
241
|
+
];
|
|
242
|
+
|
|
243
|
+
for (const field of required) {
|
|
244
|
+
if (!(field in this.config)) {
|
|
245
|
+
throw new Error(`Missing required provider: ${field}`);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Apply defaults
|
|
250
|
+
return {
|
|
251
|
+
environment: 'development',
|
|
252
|
+
session: {
|
|
253
|
+
timestampSkewSeconds: 120,
|
|
254
|
+
ttlMinutes: 30
|
|
255
|
+
},
|
|
256
|
+
...this.config
|
|
257
|
+
} as ProviderRuntimeConfig;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
/**
|
|
262
|
+
* Re-export base types for convenience
|
|
263
|
+
*/
|
|
264
|
+
export type {
|
|
265
|
+
MCPIBaseConfig,
|
|
266
|
+
RuntimeIdentityConfig as BaseIdentityConfig,
|
|
267
|
+
ProofingConfig,
|
|
268
|
+
DelegationConfig,
|
|
269
|
+
ToolProtectionSourceConfig
|
|
270
|
+
} from '@kya-os/contracts/config';
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Re-export remote config utilities
|
|
274
|
+
*/
|
|
275
|
+
export {
|
|
276
|
+
fetchRemoteConfig,
|
|
277
|
+
type RemoteConfigOptions,
|
|
278
|
+
type RemoteConfigCache
|
|
279
|
+
} from './config/remote-config';
|
|
280
|
+
|
|
281
|
+
/**
|
|
282
|
+
* Create a provider runtime configuration
|
|
283
|
+
* Convenience function for creating configurations
|
|
284
|
+
*/
|
|
285
|
+
export function createProviderRuntimeConfig(
|
|
286
|
+
providers: {
|
|
287
|
+
cryptoProvider: CryptoProvider;
|
|
288
|
+
clockProvider: ClockProvider;
|
|
289
|
+
fetchProvider: FetchProvider;
|
|
290
|
+
storageProvider: StorageProvider;
|
|
291
|
+
nonceCacheProvider: NonceCacheProvider;
|
|
292
|
+
identityProvider: IdentityProvider;
|
|
293
|
+
},
|
|
294
|
+
options?: Partial<Omit<ProviderRuntimeConfig, keyof typeof providers>>
|
|
295
|
+
): ProviderRuntimeConfig {
|
|
296
|
+
return new ProviderRuntimeConfigBuilder()
|
|
297
|
+
.withProviders(providers)
|
|
298
|
+
.withEnvironment(options?.environment || 'development')
|
|
299
|
+
.withSession(options?.session || {})
|
|
300
|
+
.withIdentity(options?.identity || { enabled: false, environment: 'development' })
|
|
301
|
+
.withProofing(options?.proofing || { enabled: false })
|
|
302
|
+
.withDelegation(options?.delegation || {
|
|
303
|
+
enabled: false,
|
|
304
|
+
verifier: { type: 'memory' }
|
|
305
|
+
})
|
|
306
|
+
.withAudit(options?.audit || { enabled: false })
|
|
307
|
+
.withWellKnown(options?.wellKnown || { enabled: true })
|
|
308
|
+
.build();
|
|
309
|
+
}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for Delegation Audience Validation
|
|
3
|
+
*
|
|
4
|
+
* @package @kya-os/mcp-i-core/delegation/__tests__
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { describe, it, expect } from "vitest";
|
|
8
|
+
import { verifyDelegationAudience } from "../audience-validator";
|
|
9
|
+
import type { DelegationRecord } from "@kya-os/contracts/delegation";
|
|
10
|
+
|
|
11
|
+
describe("verifyDelegationAudience", () => {
|
|
12
|
+
const serverDid = "did:web:server.example.com";
|
|
13
|
+
|
|
14
|
+
it("should return true when delegation has no audience", () => {
|
|
15
|
+
const delegation: DelegationRecord = {
|
|
16
|
+
id: "del_001",
|
|
17
|
+
issuerDid: "did:web:user.com",
|
|
18
|
+
subjectDid: "did:key:zagent123",
|
|
19
|
+
controller: "user_alice",
|
|
20
|
+
vcId: "vc_001",
|
|
21
|
+
constraints: {
|
|
22
|
+
scopes: ["tool:execute"],
|
|
23
|
+
// No audience field
|
|
24
|
+
},
|
|
25
|
+
createdAt: Date.now(),
|
|
26
|
+
expiresAt: Date.now() + 3600000,
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
expect(verifyDelegationAudience(delegation, serverDid)).toBe(true);
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it("should return true when delegation audience matches server DID", () => {
|
|
33
|
+
const delegation: DelegationRecord = {
|
|
34
|
+
id: "del_002",
|
|
35
|
+
issuerDid: "did:web:user.com",
|
|
36
|
+
subjectDid: "did:key:zagent123",
|
|
37
|
+
controller: "user_bob",
|
|
38
|
+
vcId: "vc_002",
|
|
39
|
+
constraints: {
|
|
40
|
+
scopes: ["tool:execute"],
|
|
41
|
+
audience: serverDid, // Matches server DID
|
|
42
|
+
},
|
|
43
|
+
createdAt: Date.now(),
|
|
44
|
+
expiresAt: Date.now() + 3600000,
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
expect(verifyDelegationAudience(delegation, serverDid)).toBe(true);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("should return false when delegation audience does not match server DID", () => {
|
|
51
|
+
const delegation: DelegationRecord = {
|
|
52
|
+
id: "del_003",
|
|
53
|
+
issuerDid: "did:web:user.com",
|
|
54
|
+
subjectDid: "did:key:zagent123",
|
|
55
|
+
controller: "user_charlie",
|
|
56
|
+
vcId: "vc_003",
|
|
57
|
+
constraints: {
|
|
58
|
+
scopes: ["tool:execute"],
|
|
59
|
+
audience: "did:web:other-server.com", // Different server
|
|
60
|
+
},
|
|
61
|
+
createdAt: Date.now(),
|
|
62
|
+
expiresAt: Date.now() + 3600000,
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
expect(verifyDelegationAudience(delegation, serverDid)).toBe(false);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it("should return true when server DID is in audience array", () => {
|
|
69
|
+
const delegation: DelegationRecord = {
|
|
70
|
+
id: "del_004",
|
|
71
|
+
issuerDid: "did:web:user.com",
|
|
72
|
+
subjectDid: "did:key:zagent123",
|
|
73
|
+
controller: "user_dave",
|
|
74
|
+
vcId: "vc_004",
|
|
75
|
+
constraints: {
|
|
76
|
+
scopes: ["tool:execute"],
|
|
77
|
+
audience: [
|
|
78
|
+
"did:web:server1.com",
|
|
79
|
+
serverDid, // Server DID is in array
|
|
80
|
+
"did:web:server3.com",
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
createdAt: Date.now(),
|
|
84
|
+
expiresAt: Date.now() + 3600000,
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
expect(verifyDelegationAudience(delegation, serverDid)).toBe(true);
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("should return false when server DID is not in audience array", () => {
|
|
91
|
+
const delegation: DelegationRecord = {
|
|
92
|
+
id: "del_005",
|
|
93
|
+
issuerDid: "did:web:user.com",
|
|
94
|
+
subjectDid: "did:key:zagent123",
|
|
95
|
+
controller: "user_eve",
|
|
96
|
+
vcId: "vc_005",
|
|
97
|
+
constraints: {
|
|
98
|
+
scopes: ["tool:execute"],
|
|
99
|
+
audience: [
|
|
100
|
+
"did:web:server1.com",
|
|
101
|
+
"did:web:server2.com",
|
|
102
|
+
// serverDid not in array
|
|
103
|
+
],
|
|
104
|
+
},
|
|
105
|
+
createdAt: Date.now(),
|
|
106
|
+
expiresAt: Date.now() + 3600000,
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
expect(verifyDelegationAudience(delegation, serverDid)).toBe(false);
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
|