@kya-os/mcp-i-core 1.2.3-canary.7 → 1.3.0-canary.clientinfo.20251126003544
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/.turbo/turbo-build.log +4 -0
- package/.turbo/turbo-test$colon$coverage.log +4239 -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 +24 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -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/index.d.ts +2 -0
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js +4 -1
- package/dist/services/index.js.map +1 -1
- 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/session-registration.service.d.ts +80 -0
- package/dist/services/session-registration.service.d.ts.map +1 -0
- package/dist/services/session-registration.service.js +172 -0
- package/dist/services/session-registration.service.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 +271 -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 +18 -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/session-registration.service.ts +251 -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
|
@@ -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,38 @@
|
|
|
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 class CryptoProvider {
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Clock/timing operations provider
|
|
14
|
+
*/
|
|
15
|
+
export class ClockProvider {
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Network fetch operations provider
|
|
19
|
+
*/
|
|
20
|
+
export class FetchProvider {
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Storage operations provider
|
|
24
|
+
*/
|
|
25
|
+
export class StorageProvider {
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Nonce cache provider
|
|
29
|
+
* Handles replay prevention
|
|
30
|
+
*
|
|
31
|
+
* Nonces should be scoped per agent to prevent cross-agent replay attacks.
|
|
32
|
+
* When agentDid is provided, implementations should use agent-scoped keys.
|
|
33
|
+
*/
|
|
34
|
+
export class NonceCacheProvider {
|
|
35
|
+
}
|
|
36
|
+
export class IdentityProvider {
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -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
|
+
}
|