@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
@@ -0,0 +1,91 @@
1
+ /**
2
+ * Base Provider Classes
3
+ *
4
+ * Abstract classes that define the provider interfaces for
5
+ * platform-specific implementations.
6
+ */
7
+ /**
8
+ * Cryptographic operations provider
9
+ */
10
+ export declare abstract class CryptoProvider {
11
+ abstract sign(data: Uint8Array, privateKey: string): Promise<Uint8Array>;
12
+ abstract verify(data: Uint8Array, signature: Uint8Array, publicKey: string): Promise<boolean>;
13
+ abstract generateKeyPair(): Promise<{
14
+ privateKey: string;
15
+ publicKey: string;
16
+ }>;
17
+ abstract hash(data: Uint8Array): Promise<Uint8Array>;
18
+ abstract randomBytes(length: number): Promise<Uint8Array>;
19
+ }
20
+ /**
21
+ * Clock/timing operations provider
22
+ */
23
+ export declare abstract class ClockProvider {
24
+ abstract now(): number;
25
+ abstract isWithinSkew(timestamp: number, skewSeconds: number): boolean;
26
+ abstract hasExpired(expiresAt: number): boolean;
27
+ abstract calculateExpiry(ttlSeconds: number): number;
28
+ abstract format(timestamp: number): string;
29
+ }
30
+ /**
31
+ * Network fetch operations provider
32
+ */
33
+ export declare abstract class FetchProvider {
34
+ abstract resolveDID(did: string): Promise<any>;
35
+ abstract fetchStatusList(url: string): Promise<any>;
36
+ abstract fetchDelegationChain(id: string): Promise<any[]>;
37
+ abstract fetch(url: string, options?: any): Promise<Response>;
38
+ }
39
+ /**
40
+ * Storage operations provider
41
+ */
42
+ export declare abstract class StorageProvider {
43
+ abstract get(key: string): Promise<string | null>;
44
+ abstract set(key: string, value: string): Promise<void>;
45
+ abstract delete(key: string): Promise<void>;
46
+ abstract exists(key: string): Promise<boolean>;
47
+ abstract list(prefix?: string): Promise<string[]>;
48
+ }
49
+ /**
50
+ * Nonce cache provider
51
+ * Handles replay prevention
52
+ *
53
+ * Nonces should be scoped per agent to prevent cross-agent replay attacks.
54
+ * When agentDid is provided, implementations should use agent-scoped keys.
55
+ */
56
+ export declare abstract class NonceCacheProvider {
57
+ /**
58
+ * Check if a nonce has been used
59
+ * @param nonce - The nonce to check
60
+ * @param agentDid - Optional agent DID for scoping (prevents cross-agent replay attacks)
61
+ */
62
+ abstract has(nonce: string, agentDid?: string): Promise<boolean>;
63
+ /**
64
+ * Add a nonce to the cache
65
+ * @param nonce - The nonce to cache
66
+ * @param ttlSeconds - Time to live in seconds (callers now pass TTL, not absolute timestamp)
67
+ * @param agentDid - Optional agent DID for scoping (prevents cross-agent replay attacks)
68
+ */
69
+ abstract add(nonce: string, ttlSeconds: number, agentDid?: string): Promise<void>;
70
+ abstract cleanup(): Promise<void>;
71
+ abstract destroy(): Promise<void>;
72
+ }
73
+ /**
74
+ * Identity provider for managing agent identities
75
+ */
76
+ export interface AgentIdentity {
77
+ did: string;
78
+ kid: string;
79
+ privateKey: string;
80
+ publicKey: string;
81
+ createdAt: string;
82
+ type: 'development' | 'production';
83
+ metadata?: Record<string, any>;
84
+ }
85
+ export declare abstract class IdentityProvider {
86
+ abstract getIdentity(): Promise<AgentIdentity>;
87
+ abstract saveIdentity(identity: AgentIdentity): Promise<void>;
88
+ abstract rotateKeys(): Promise<AgentIdentity>;
89
+ abstract deleteIdentity(): Promise<void>;
90
+ }
91
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["base.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,OAAgB,cAAc;CAMnC;AAED;;GAEG;AACH,MAAM,OAAgB,aAAa;CAMlC;AAED;;GAEG;AACH,MAAM,OAAgB,aAAa;CAKlC;AAED;;GAEG;AACH,MAAM,OAAgB,eAAe;CAMpC;AAED;;;;;;GAMG;AACH,MAAM,OAAgB,kBAAkB;CAkBvC;AAeD,MAAM,OAAgB,gBAAgB;CAKrC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Base Provider Classes
3
+ *
4
+ * Abstract classes that define the provider interfaces for
5
+ * platform-specific implementations.
6
+ */
7
+
8
+ /**
9
+ * Cryptographic operations provider
10
+ */
11
+ export abstract class CryptoProvider {
12
+ abstract sign(data: Uint8Array, privateKey: string): Promise<Uint8Array>;
13
+ abstract verify(data: Uint8Array, signature: Uint8Array, publicKey: string): Promise<boolean>;
14
+ abstract generateKeyPair(): Promise<{ privateKey: string; publicKey: string }>;
15
+ abstract hash(data: Uint8Array): Promise<Uint8Array>;
16
+ abstract randomBytes(length: number): Promise<Uint8Array>;
17
+ }
18
+
19
+ /**
20
+ * Clock/timing operations provider
21
+ */
22
+ export abstract class ClockProvider {
23
+ abstract now(): number;
24
+ abstract isWithinSkew(timestamp: number, skewSeconds: number): boolean;
25
+ abstract hasExpired(expiresAt: number): boolean;
26
+ abstract calculateExpiry(ttlSeconds: number): number;
27
+ abstract format(timestamp: number): string;
28
+ }
29
+
30
+ /**
31
+ * Network fetch operations provider
32
+ */
33
+ export abstract class FetchProvider {
34
+ abstract resolveDID(did: string): Promise<any>;
35
+ abstract fetchStatusList(url: string): Promise<any>;
36
+ abstract fetchDelegationChain(id: string): Promise<any[]>;
37
+ abstract fetch(url: string, options?: any): Promise<Response>;
38
+ }
39
+
40
+ /**
41
+ * Storage operations provider
42
+ */
43
+ export abstract class StorageProvider {
44
+ abstract get(key: string): Promise<string | null>;
45
+ abstract set(key: string, value: string): Promise<void>;
46
+ abstract delete(key: string): Promise<void>;
47
+ abstract exists(key: string): Promise<boolean>;
48
+ abstract list(prefix?: string): Promise<string[]>;
49
+ }
50
+
51
+ /**
52
+ * Nonce cache provider
53
+ * Handles replay prevention
54
+ *
55
+ * Nonces should be scoped per agent to prevent cross-agent replay attacks.
56
+ * When agentDid is provided, implementations should use agent-scoped keys.
57
+ */
58
+ export abstract class NonceCacheProvider {
59
+ /**
60
+ * Check if a nonce has been used
61
+ * @param nonce - The nonce to check
62
+ * @param agentDid - Optional agent DID for scoping (prevents cross-agent replay attacks)
63
+ */
64
+ abstract has(nonce: string, agentDid?: string): Promise<boolean>;
65
+
66
+ /**
67
+ * Add a nonce to the cache
68
+ * @param nonce - The nonce to cache
69
+ * @param ttlSeconds - Time to live in seconds (callers now pass TTL, not absolute timestamp)
70
+ * @param agentDid - Optional agent DID for scoping (prevents cross-agent replay attacks)
71
+ */
72
+ abstract add(nonce: string, ttlSeconds: number, agentDid?: string): Promise<void>;
73
+
74
+ abstract cleanup(): Promise<void>;
75
+ abstract destroy(): Promise<void>;
76
+ }
77
+
78
+ /**
79
+ * Identity provider for managing agent identities
80
+ */
81
+ export interface AgentIdentity {
82
+ did: string;
83
+ kid: string;
84
+ privateKey: string;
85
+ publicKey: string;
86
+ createdAt: string;
87
+ type: 'development' | 'production';
88
+ metadata?: Record<string, any>;
89
+ }
90
+
91
+ export abstract class IdentityProvider {
92
+ abstract getIdentity(): Promise<AgentIdentity>;
93
+ abstract saveIdentity(identity: AgentIdentity): Promise<void>;
94
+ abstract rotateKeys(): Promise<AgentIdentity>;
95
+ abstract deleteIdentity(): Promise<void>;
96
+ }
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Memory-based provider implementations
3
+ *
4
+ * Simple in-memory implementations for development and testing.
5
+ */
6
+
7
+ import {
8
+ StorageProvider,
9
+ NonceCacheProvider,
10
+ IdentityProvider,
11
+ AgentIdentity
12
+ } from './base';
13
+
14
+ /**
15
+ * In-memory storage provider
16
+ */
17
+ export class MemoryStorageProvider extends StorageProvider {
18
+ private store: Map<string, string> = new Map();
19
+
20
+ async get(key: string): Promise<string | null> {
21
+ return this.store.get(key) ?? null;
22
+ }
23
+
24
+ async set(key: string, value: string): Promise<void> {
25
+ this.store.set(key, value);
26
+ }
27
+
28
+ async delete(key: string): Promise<void> {
29
+ this.store.delete(key);
30
+ }
31
+
32
+ async exists(key: string): Promise<boolean> {
33
+ return this.store.has(key);
34
+ }
35
+
36
+ async list(prefix?: string): Promise<string[]> {
37
+ const keys = Array.from(this.store.keys());
38
+ if (prefix) {
39
+ return keys.filter(k => k.startsWith(prefix));
40
+ }
41
+ return keys;
42
+ }
43
+ }
44
+
45
+ /**
46
+ * In-memory nonce cache provider
47
+ */
48
+ export class MemoryNonceCacheProvider extends NonceCacheProvider {
49
+ private nonces: Map<string, number> = new Map();
50
+
51
+ async has(nonce: string, agentDid?: string): Promise<boolean> {
52
+ const key = agentDid ? `nonce:${agentDid}:${nonce}` : `nonce:${nonce}`;
53
+ const expiry = this.nonces.get(key);
54
+ if (!expiry) return false;
55
+
56
+ if (Date.now() > expiry) {
57
+ this.nonces.delete(key);
58
+ return false;
59
+ }
60
+
61
+ return true;
62
+ }
63
+
64
+ async add(nonce: string, ttlSeconds: number, agentDid?: string): Promise<void> {
65
+ const key = agentDid ? `nonce:${agentDid}:${nonce}` : `nonce:${nonce}`;
66
+ // Convert TTL seconds to absolute expiration timestamp for storage
67
+ const expiresAt = Date.now() + (ttlSeconds * 1000);
68
+ this.nonces.set(key, expiresAt);
69
+ }
70
+
71
+ async cleanup(): Promise<void> {
72
+ const now = Date.now();
73
+ for (const [nonce, expiry] of this.nonces) {
74
+ if (now > expiry) {
75
+ this.nonces.delete(nonce);
76
+ }
77
+ }
78
+ }
79
+
80
+ async destroy(): Promise<void> {
81
+ this.nonces.clear();
82
+ }
83
+ }
84
+
85
+ /**
86
+ * In-memory identity provider
87
+ */
88
+ export class MemoryIdentityProvider extends IdentityProvider {
89
+ private identity?: AgentIdentity;
90
+ private cryptoProvider: any;
91
+
92
+ constructor(cryptoProvider?: any) {
93
+ super();
94
+ this.cryptoProvider = cryptoProvider;
95
+ }
96
+
97
+ async getIdentity(): Promise<AgentIdentity> {
98
+ if (!this.identity) {
99
+ this.identity = await this.generateIdentity();
100
+ }
101
+ return this.identity;
102
+ }
103
+
104
+ async saveIdentity(identity: AgentIdentity): Promise<void> {
105
+ this.identity = identity;
106
+ }
107
+
108
+ async rotateKeys(): Promise<AgentIdentity> {
109
+ this.identity = await this.generateIdentity();
110
+ return this.identity;
111
+ }
112
+
113
+ async deleteIdentity(): Promise<void> {
114
+ this.identity = undefined;
115
+ }
116
+
117
+ private async generateIdentity(): Promise<AgentIdentity> {
118
+ if (!this.cryptoProvider) {
119
+ throw new Error('Crypto provider required for identity generation');
120
+ }
121
+
122
+ const keyPair = await this.cryptoProvider.generateKeyPair();
123
+ const did = this.generateDIDFromPublicKey(keyPair.publicKey);
124
+
125
+ return {
126
+ did,
127
+ kid: `${did}#key-1`,
128
+ privateKey: keyPair.privateKey,
129
+ publicKey: keyPair.publicKey,
130
+ createdAt: new Date().toISOString(),
131
+ type: 'development'
132
+ };
133
+ }
134
+
135
+ private generateDIDFromPublicKey(publicKey: string): string {
136
+ // Simplified DID generation
137
+ const keyHash = Buffer.from(publicKey, 'base64')
138
+ .toString('base64url')
139
+ .substring(0, 32);
140
+ return `did:key:z${keyHash}`;
141
+ }
142
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Audit Logger Interface
3
+ *
4
+ * Platform-agnostic interface for audit logging in the MCP-I framework.
5
+ * Implementations should be provided by platform-specific packages.
6
+ */
7
+
8
+ import type { AuditContext, AuditEventContext } from "@kya-os/contracts/audit";
9
+
10
+ /**
11
+ * Interface for audit logging implementations
12
+ *
13
+ * This interface is platform-agnostic and can be implemented by:
14
+ * - Node.js implementations (using Node.js crypto)
15
+ * - Cloudflare Workers implementations (using Web Crypto API)
16
+ * - Other platform-specific implementations
17
+ */
18
+ export interface IAuditLogger {
19
+ /**
20
+ * Log an audit record (with session deduplication)
21
+ *
22
+ * This method logs audit records using the frozen audit.v1 format.
23
+ * Only the first call per session is logged (deduplication).
24
+ *
25
+ * @param context - Audit context with identity, session, hashes, and verification status
26
+ */
27
+ logAuditRecord(context: AuditContext): Promise<void>;
28
+
29
+ /**
30
+ * Log an event (without session deduplication)
31
+ *
32
+ * This method logs events using the frozen audit.v1 format.
33
+ * Unlike logAuditRecord(), this always logs the event, allowing
34
+ * multiple events per session (e.g., consent events).
35
+ *
36
+ * @param context - Event context with eventType, identity, session, and optional eventData
37
+ */
38
+ logEvent(context: AuditEventContext): Promise<void>;
39
+ }