@kya-os/mcp-i-core 1.2.3-canary.7 → 1.3.1

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.
Files changed (225) hide show
  1. package/.claude/settings.local.json +9 -0
  2. package/.turbo/turbo-build.log +4 -0
  3. package/.turbo/turbo-test.log +2979 -0
  4. package/COMPLIANCE_IMPROVEMENT_REPORT.md +483 -0
  5. package/Composer 3.md +615 -0
  6. package/GPT-5.md +1169 -0
  7. package/OPUS-plan.md +352 -0
  8. package/PHASE_3_AND_4.1_SUMMARY.md +585 -0
  9. package/PHASE_3_SUMMARY.md +317 -0
  10. package/PHASE_4.1.3_SUMMARY.md +428 -0
  11. package/PHASE_4.1_COMPLETE.md +525 -0
  12. package/PHASE_4_USER_DID_IDENTITY_LINKING_PLAN.md +1240 -0
  13. package/SCHEMA_COMPLIANCE_REPORT.md +275 -0
  14. package/TEST_PLAN.md +571 -0
  15. package/coverage/coverage-final.json +57 -0
  16. package/dist/__tests__/utils/mock-providers.d.ts +1 -2
  17. package/dist/__tests__/utils/mock-providers.d.ts.map +1 -1
  18. package/dist/__tests__/utils/mock-providers.js.map +1 -1
  19. package/dist/cache/oauth-config-cache.d.ts +69 -0
  20. package/dist/cache/oauth-config-cache.d.ts.map +1 -0
  21. package/dist/cache/oauth-config-cache.js +76 -0
  22. package/dist/cache/oauth-config-cache.js.map +1 -0
  23. package/dist/identity/idp-token-resolver.d.ts +53 -0
  24. package/dist/identity/idp-token-resolver.d.ts.map +1 -0
  25. package/dist/identity/idp-token-resolver.js +108 -0
  26. package/dist/identity/idp-token-resolver.js.map +1 -0
  27. package/dist/identity/idp-token-storage.interface.d.ts +42 -0
  28. package/dist/identity/idp-token-storage.interface.d.ts.map +1 -0
  29. package/dist/identity/idp-token-storage.interface.js +12 -0
  30. package/dist/identity/idp-token-storage.interface.js.map +1 -0
  31. package/dist/identity/user-did-manager.d.ts +39 -1
  32. package/dist/identity/user-did-manager.d.ts.map +1 -1
  33. package/dist/identity/user-did-manager.js +69 -3
  34. package/dist/identity/user-did-manager.js.map +1 -1
  35. package/dist/index.d.ts +22 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +39 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/runtime/audit-logger.d.ts +37 -0
  40. package/dist/runtime/audit-logger.d.ts.map +1 -0
  41. package/dist/runtime/audit-logger.js +9 -0
  42. package/dist/runtime/audit-logger.js.map +1 -0
  43. package/dist/runtime/base.d.ts +58 -2
  44. package/dist/runtime/base.d.ts.map +1 -1
  45. package/dist/runtime/base.js +266 -11
  46. package/dist/runtime/base.js.map +1 -1
  47. package/dist/services/access-control.service.d.ts.map +1 -1
  48. package/dist/services/access-control.service.js +200 -35
  49. package/dist/services/access-control.service.js.map +1 -1
  50. package/dist/services/authorization/authorization-registry.d.ts +29 -0
  51. package/dist/services/authorization/authorization-registry.d.ts.map +1 -0
  52. package/dist/services/authorization/authorization-registry.js +57 -0
  53. package/dist/services/authorization/authorization-registry.js.map +1 -0
  54. package/dist/services/authorization/types.d.ts +53 -0
  55. package/dist/services/authorization/types.d.ts.map +1 -0
  56. package/dist/services/authorization/types.js +10 -0
  57. package/dist/services/authorization/types.js.map +1 -0
  58. package/dist/services/batch-delegation.service.d.ts +53 -0
  59. package/dist/services/batch-delegation.service.d.ts.map +1 -0
  60. package/dist/services/batch-delegation.service.js +95 -0
  61. package/dist/services/batch-delegation.service.js.map +1 -0
  62. package/dist/services/oauth-config.service.d.ts +53 -0
  63. package/dist/services/oauth-config.service.d.ts.map +1 -0
  64. package/dist/services/oauth-config.service.js +119 -0
  65. package/dist/services/oauth-config.service.js.map +1 -0
  66. package/dist/services/oauth-provider-registry.d.ts +88 -0
  67. package/dist/services/oauth-provider-registry.d.ts.map +1 -0
  68. package/dist/services/oauth-provider-registry.js +128 -0
  69. package/dist/services/oauth-provider-registry.js.map +1 -0
  70. package/dist/services/oauth-service.d.ts +77 -0
  71. package/dist/services/oauth-service.d.ts.map +1 -0
  72. package/dist/services/oauth-service.js +348 -0
  73. package/dist/services/oauth-service.js.map +1 -0
  74. package/dist/services/oauth-token-retrieval.service.d.ts +49 -0
  75. package/dist/services/oauth-token-retrieval.service.d.ts.map +1 -0
  76. package/dist/services/oauth-token-retrieval.service.js +150 -0
  77. package/dist/services/oauth-token-retrieval.service.js.map +1 -0
  78. package/dist/services/provider-resolver.d.ts +48 -0
  79. package/dist/services/provider-resolver.d.ts.map +1 -0
  80. package/dist/services/provider-resolver.js +121 -0
  81. package/dist/services/provider-resolver.js.map +1 -0
  82. package/dist/services/provider-validator.d.ts +55 -0
  83. package/dist/services/provider-validator.d.ts.map +1 -0
  84. package/dist/services/provider-validator.js +135 -0
  85. package/dist/services/provider-validator.js.map +1 -0
  86. package/dist/services/tool-context-builder.d.ts +57 -0
  87. package/dist/services/tool-context-builder.d.ts.map +1 -0
  88. package/dist/services/tool-context-builder.js +125 -0
  89. package/dist/services/tool-context-builder.js.map +1 -0
  90. package/dist/services/tool-protection.service.d.ts +87 -10
  91. package/dist/services/tool-protection.service.d.ts.map +1 -1
  92. package/dist/services/tool-protection.service.js +282 -112
  93. package/dist/services/tool-protection.service.js.map +1 -1
  94. package/dist/types/oauth-required-error.d.ts +40 -0
  95. package/dist/types/oauth-required-error.d.ts.map +1 -0
  96. package/dist/types/oauth-required-error.js +40 -0
  97. package/dist/types/oauth-required-error.js.map +1 -0
  98. package/dist/utils/did-helpers.d.ts +33 -0
  99. package/dist/utils/did-helpers.d.ts.map +1 -1
  100. package/dist/utils/did-helpers.js +40 -0
  101. package/dist/utils/did-helpers.js.map +1 -1
  102. package/dist/utils/index.d.ts +1 -0
  103. package/dist/utils/index.d.ts.map +1 -1
  104. package/dist/utils/index.js +1 -0
  105. package/dist/utils/index.js.map +1 -1
  106. package/docs/API_REFERENCE.md +1362 -0
  107. package/docs/COMPLIANCE_MATRIX.md +691 -0
  108. package/docs/STATUSLIST2021_GUIDE.md +696 -0
  109. package/docs/W3C_VC_DELEGATION_GUIDE.md +710 -0
  110. package/package.json +24 -50
  111. package/scripts/audit-compliance.ts +724 -0
  112. package/src/__tests__/cache/tool-protection-cache.test.ts +640 -0
  113. package/src/__tests__/config/provider-runtime-config.test.ts +309 -0
  114. package/src/__tests__/delegation-e2e.test.ts +690 -0
  115. package/src/__tests__/identity/user-did-manager.test.ts +213 -0
  116. package/src/__tests__/index.test.ts +56 -0
  117. package/src/__tests__/integration/full-flow.test.ts +776 -0
  118. package/src/__tests__/integration.test.ts +281 -0
  119. package/src/__tests__/providers/base.test.ts +173 -0
  120. package/src/__tests__/providers/memory.test.ts +319 -0
  121. package/src/__tests__/regression/phase2-regression.test.ts +429 -0
  122. package/src/__tests__/runtime/audit-logger.test.ts +154 -0
  123. package/src/__tests__/runtime/base-extensions.test.ts +593 -0
  124. package/src/__tests__/runtime/base.test.ts +869 -0
  125. package/src/__tests__/runtime/delegation-flow.test.ts +164 -0
  126. package/src/__tests__/runtime/proof-client-did.test.ts +375 -0
  127. package/src/__tests__/runtime/route-interception.test.ts +686 -0
  128. package/src/__tests__/runtime/tool-protection-enforcement.test.ts +908 -0
  129. package/src/__tests__/services/agentshield-integration.test.ts +784 -0
  130. package/src/__tests__/services/provider-resolver-edge-cases.test.ts +591 -0
  131. package/src/__tests__/services/tool-protection-oauth-provider.test.ts +480 -0
  132. package/src/__tests__/services/tool-protection.service.test.ts +1366 -0
  133. package/src/__tests__/utils/mock-providers.ts +340 -0
  134. package/src/cache/oauth-config-cache.d.ts +69 -0
  135. package/src/cache/oauth-config-cache.d.ts.map +1 -0
  136. package/src/cache/oauth-config-cache.js.map +1 -0
  137. package/src/cache/oauth-config-cache.ts +123 -0
  138. package/src/cache/tool-protection-cache.ts +171 -0
  139. package/src/compliance/EXAMPLE.md +412 -0
  140. package/src/compliance/__tests__/schema-verifier.test.ts +797 -0
  141. package/src/compliance/index.ts +8 -0
  142. package/src/compliance/schema-registry.ts +460 -0
  143. package/src/compliance/schema-verifier.ts +708 -0
  144. package/src/config/__tests__/remote-config.spec.ts +268 -0
  145. package/src/config/remote-config.ts +174 -0
  146. package/src/config.ts +309 -0
  147. package/src/delegation/__tests__/audience-validator.test.ts +112 -0
  148. package/src/delegation/__tests__/bitstring.test.ts +346 -0
  149. package/src/delegation/__tests__/cascading-revocation.test.ts +628 -0
  150. package/src/delegation/__tests__/delegation-graph.test.ts +584 -0
  151. package/src/delegation/__tests__/utils.test.ts +152 -0
  152. package/src/delegation/__tests__/vc-issuer.test.ts +442 -0
  153. package/src/delegation/__tests__/vc-verifier.test.ts +922 -0
  154. package/src/delegation/audience-validator.ts +52 -0
  155. package/src/delegation/bitstring.ts +278 -0
  156. package/src/delegation/cascading-revocation.ts +370 -0
  157. package/src/delegation/delegation-graph.ts +299 -0
  158. package/src/delegation/index.ts +14 -0
  159. package/src/delegation/statuslist-manager.ts +353 -0
  160. package/src/delegation/storage/__tests__/memory-graph-storage.test.ts +366 -0
  161. package/src/delegation/storage/__tests__/memory-statuslist-storage.test.ts +228 -0
  162. package/src/delegation/storage/index.ts +9 -0
  163. package/src/delegation/storage/memory-graph-storage.ts +178 -0
  164. package/src/delegation/storage/memory-statuslist-storage.ts +77 -0
  165. package/src/delegation/utils.ts +42 -0
  166. package/src/delegation/vc-issuer.ts +232 -0
  167. package/src/delegation/vc-verifier.ts +568 -0
  168. package/src/identity/idp-token-resolver.ts +147 -0
  169. package/src/identity/idp-token-storage.interface.ts +59 -0
  170. package/src/identity/user-did-manager.ts +370 -0
  171. package/src/index.ts +260 -0
  172. package/src/providers/base.d.ts +91 -0
  173. package/src/providers/base.d.ts.map +1 -0
  174. package/src/providers/base.js.map +1 -0
  175. package/src/providers/base.ts +96 -0
  176. package/src/providers/memory.ts +142 -0
  177. package/src/runtime/audit-logger.ts +39 -0
  178. package/src/runtime/base.ts +1329 -0
  179. package/src/services/__tests__/access-control.integration.test.ts +443 -0
  180. package/src/services/__tests__/access-control.proof-response-validation.test.ts +578 -0
  181. package/src/services/__tests__/access-control.service.test.ts +970 -0
  182. package/src/services/__tests__/batch-delegation.service.test.ts +351 -0
  183. package/src/services/__tests__/crypto.service.test.ts +531 -0
  184. package/src/services/__tests__/oauth-provider-registry.test.ts +142 -0
  185. package/src/services/__tests__/proof-verifier.integration.test.ts +485 -0
  186. package/src/services/__tests__/proof-verifier.test.ts +489 -0
  187. package/src/services/__tests__/provider-resolution.integration.test.ts +202 -0
  188. package/src/services/__tests__/provider-resolver.test.ts +213 -0
  189. package/src/services/__tests__/storage.service.test.ts +358 -0
  190. package/src/services/access-control.service.ts +990 -0
  191. package/src/services/authorization/authorization-registry.ts +66 -0
  192. package/src/services/authorization/types.ts +71 -0
  193. package/src/services/batch-delegation.service.ts +137 -0
  194. package/src/services/crypto.service.ts +302 -0
  195. package/src/services/errors.ts +76 -0
  196. package/src/services/index.ts +9 -0
  197. package/src/services/oauth-config.service.d.ts +53 -0
  198. package/src/services/oauth-config.service.d.ts.map +1 -0
  199. package/src/services/oauth-config.service.js.map +1 -0
  200. package/src/services/oauth-config.service.ts +169 -0
  201. package/src/services/oauth-provider-registry.d.ts +57 -0
  202. package/src/services/oauth-provider-registry.d.ts.map +1 -0
  203. package/src/services/oauth-provider-registry.js.map +1 -0
  204. package/src/services/oauth-provider-registry.ts +141 -0
  205. package/src/services/oauth-service.ts +510 -0
  206. package/src/services/oauth-token-retrieval.service.ts +245 -0
  207. package/src/services/proof-verifier.ts +478 -0
  208. package/src/services/provider-resolver.d.ts +48 -0
  209. package/src/services/provider-resolver.d.ts.map +1 -0
  210. package/src/services/provider-resolver.js.map +1 -0
  211. package/src/services/provider-resolver.ts +146 -0
  212. package/src/services/provider-validator.ts +170 -0
  213. package/src/services/storage.service.ts +566 -0
  214. package/src/services/tool-context-builder.ts +172 -0
  215. package/src/services/tool-protection.service.ts +958 -0
  216. package/src/types/oauth-required-error.ts +63 -0
  217. package/src/types/tool-protection.ts +155 -0
  218. package/src/utils/__tests__/did-helpers.test.ts +101 -0
  219. package/src/utils/base64.ts +148 -0
  220. package/src/utils/cors.ts +83 -0
  221. package/src/utils/did-helpers.ts +150 -0
  222. package/src/utils/index.ts +8 -0
  223. package/src/utils/storage-keys.ts +278 -0
  224. package/tsconfig.json +21 -0
  225. 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
+