@claude-flow/plugin-agent-federation 1.0.0-alpha.2

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 (70) hide show
  1. package/README.md +45 -0
  2. package/dist/application/federation-coordinator.d.ts +51 -0
  3. package/dist/application/federation-coordinator.d.ts.map +1 -0
  4. package/dist/application/federation-coordinator.js +201 -0
  5. package/dist/application/federation-coordinator.js.map +1 -0
  6. package/dist/application/policy-engine.d.ts +41 -0
  7. package/dist/application/policy-engine.d.ts.map +1 -0
  8. package/dist/application/policy-engine.js +175 -0
  9. package/dist/application/policy-engine.js.map +1 -0
  10. package/dist/application/trust-evaluator.d.ts +42 -0
  11. package/dist/application/trust-evaluator.d.ts.map +1 -0
  12. package/dist/application/trust-evaluator.js +132 -0
  13. package/dist/application/trust-evaluator.js.map +1 -0
  14. package/dist/bin.d.ts +13 -0
  15. package/dist/bin.d.ts.map +1 -0
  16. package/dist/bin.js +189 -0
  17. package/dist/bin.js.map +1 -0
  18. package/dist/cli-commands.d.ts +7 -0
  19. package/dist/cli-commands.d.ts.map +1 -0
  20. package/dist/cli-commands.js +198 -0
  21. package/dist/cli-commands.js.map +1 -0
  22. package/dist/domain/entities/federation-envelope.d.ts +45 -0
  23. package/dist/domain/entities/federation-envelope.d.ts.map +1 -0
  24. package/dist/domain/entities/federation-envelope.js +68 -0
  25. package/dist/domain/entities/federation-envelope.js.map +1 -0
  26. package/dist/domain/entities/federation-node.d.ts +49 -0
  27. package/dist/domain/entities/federation-node.d.ts.map +1 -0
  28. package/dist/domain/entities/federation-node.js +66 -0
  29. package/dist/domain/entities/federation-node.js.map +1 -0
  30. package/dist/domain/entities/federation-session.d.ts +55 -0
  31. package/dist/domain/entities/federation-session.d.ts.map +1 -0
  32. package/dist/domain/entities/federation-session.js +105 -0
  33. package/dist/domain/entities/federation-session.js.map +1 -0
  34. package/dist/domain/entities/trust-level.d.ts +17 -0
  35. package/dist/domain/entities/trust-level.d.ts.map +1 -0
  36. package/dist/domain/entities/trust-level.js +35 -0
  37. package/dist/domain/entities/trust-level.js.map +1 -0
  38. package/dist/domain/services/audit-service.d.ts +69 -0
  39. package/dist/domain/services/audit-service.d.ts.map +1 -0
  40. package/dist/domain/services/audit-service.js +149 -0
  41. package/dist/domain/services/audit-service.js.map +1 -0
  42. package/dist/domain/services/discovery-service.d.ts +51 -0
  43. package/dist/domain/services/discovery-service.d.ts.map +1 -0
  44. package/dist/domain/services/discovery-service.js +140 -0
  45. package/dist/domain/services/discovery-service.js.map +1 -0
  46. package/dist/domain/services/handshake-service.d.ts +48 -0
  47. package/dist/domain/services/handshake-service.d.ts.map +1 -0
  48. package/dist/domain/services/handshake-service.js +94 -0
  49. package/dist/domain/services/handshake-service.js.map +1 -0
  50. package/dist/domain/services/pii-pipeline-service.d.ts +65 -0
  51. package/dist/domain/services/pii-pipeline-service.d.ts.map +1 -0
  52. package/dist/domain/services/pii-pipeline-service.js +208 -0
  53. package/dist/domain/services/pii-pipeline-service.js.map +1 -0
  54. package/dist/domain/services/routing-service.d.ts +51 -0
  55. package/dist/domain/services/routing-service.d.ts.map +1 -0
  56. package/dist/domain/services/routing-service.js +147 -0
  57. package/dist/domain/services/routing-service.js.map +1 -0
  58. package/dist/index.d.ts +14 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +14 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/mcp-tools.d.ts +8 -0
  63. package/dist/mcp-tools.d.ts.map +1 -0
  64. package/dist/mcp-tools.js +217 -0
  65. package/dist/mcp-tools.js.map +1 -0
  66. package/dist/plugin.d.ts +17 -0
  67. package/dist/plugin.d.ts.map +1 -0
  68. package/dist/plugin.js +174 -0
  69. package/dist/plugin.js.map +1 -0
  70. package/package.json +33 -0
@@ -0,0 +1,68 @@
1
+ export class FederationEnvelope {
2
+ envelopeId;
3
+ sourceNodeId;
4
+ targetNodeId;
5
+ sessionId;
6
+ messageType;
7
+ payload;
8
+ timestamp;
9
+ nonce;
10
+ hmacSignature;
11
+ piiScanResult;
12
+ constructor(props) {
13
+ this.envelopeId = props.envelopeId;
14
+ this.sourceNodeId = props.sourceNodeId;
15
+ this.targetNodeId = props.targetNodeId;
16
+ this.sessionId = props.sessionId;
17
+ this.messageType = props.messageType;
18
+ this.payload = props.payload;
19
+ this.timestamp = props.timestamp;
20
+ this.nonce = props.nonce;
21
+ this.hmacSignature = props.hmacSignature;
22
+ this.piiScanResult = props.piiScanResult;
23
+ }
24
+ isExpired(maxAgeMs) {
25
+ return Date.now() - this.timestamp.getTime() > maxAgeMs;
26
+ }
27
+ toJSON() {
28
+ return {
29
+ envelopeId: this.envelopeId,
30
+ sourceNodeId: this.sourceNodeId,
31
+ targetNodeId: this.targetNodeId,
32
+ sessionId: this.sessionId,
33
+ messageType: this.messageType,
34
+ payload: this.payload,
35
+ timestamp: this.timestamp.toISOString(),
36
+ nonce: this.nonce,
37
+ hmacSignature: this.hmacSignature,
38
+ piiScanResult: this.piiScanResult,
39
+ };
40
+ }
41
+ toSignablePayload() {
42
+ return JSON.stringify({
43
+ envelopeId: this.envelopeId,
44
+ sourceNodeId: this.sourceNodeId,
45
+ targetNodeId: this.targetNodeId,
46
+ sessionId: this.sessionId,
47
+ messageType: this.messageType,
48
+ payload: this.payload,
49
+ timestamp: this.timestamp.toISOString(),
50
+ nonce: this.nonce,
51
+ });
52
+ }
53
+ static emptyScanResult() {
54
+ return {
55
+ scanned: false,
56
+ piiFound: false,
57
+ detections: [],
58
+ actionsApplied: [],
59
+ scanDurationMs: 0,
60
+ };
61
+ }
62
+ }
63
+ export const CONSENSUS_REQUIRED_TYPES = new Set([
64
+ 'trust-change',
65
+ 'topology-change',
66
+ 'agent-spawn',
67
+ ]);
68
+ //# sourceMappingURL=federation-envelope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation-envelope.js","sourceRoot":"","sources":["../../../src/domain/entities/federation-envelope.ts"],"names":[],"mappings":"AA8CA,MAAM,OAAO,kBAAkB;IACpB,UAAU,CAAS;IACnB,YAAY,CAAS;IACrB,YAAY,CAAS;IACrB,SAAS,CAAS;IAClB,WAAW,CAAwB;IACnC,OAAO,CAAI;IACX,SAAS,CAAO;IAChB,KAAK,CAAS;IACd,aAAa,CAAS;IACtB,aAAa,CAAgB;IAEtC,YAAY,KAAiC;QAC3C,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACrC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QACzC,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;IAC3C,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC1D,CAAC;IAED,MAAM;QACJ,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;IACJ,CAAC;IAED,iBAAiB;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;YACpB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE;YACvC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,eAAe;QACpB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,EAAE;YACd,cAAc,EAAE,EAAE;YAClB,cAAc,EAAE,CAAC;SAClB,CAAC;IACJ,CAAC;CACF;AAED,MAAM,CAAC,MAAM,wBAAwB,GAAuC,IAAI,GAAG,CAAC;IAClF,cAAc;IACd,iBAAiB;IACjB,aAAa;CACd,CAAC,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { TrustLevel } from './trust-level.js';
2
+ export interface FederationNodeCapabilities {
3
+ readonly agentTypes: readonly string[];
4
+ readonly maxConcurrentSessions: number;
5
+ readonly supportedProtocols: readonly string[];
6
+ readonly complianceModes: readonly string[];
7
+ }
8
+ export interface FederationNodeMetadata {
9
+ readonly organizationId?: string;
10
+ readonly region?: string;
11
+ readonly version?: string;
12
+ readonly [key: string]: unknown;
13
+ }
14
+ export interface FederationNodeProps {
15
+ readonly nodeId: string;
16
+ readonly publicKey: string;
17
+ readonly endpoint: string;
18
+ readonly capabilities: FederationNodeCapabilities;
19
+ readonly trustLevel: TrustLevel;
20
+ readonly trustScore: number;
21
+ readonly lastSeen: Date;
22
+ readonly metadata: FederationNodeMetadata;
23
+ }
24
+ export declare class FederationNode {
25
+ readonly nodeId: string;
26
+ readonly publicKey: string;
27
+ readonly endpoint: string;
28
+ readonly capabilities: FederationNodeCapabilities;
29
+ private _trustLevel;
30
+ private _trustScore;
31
+ private _lastSeen;
32
+ private readonly _metadata;
33
+ constructor(props: FederationNodeProps);
34
+ get trustLevel(): TrustLevel;
35
+ get trustScore(): number;
36
+ get lastSeen(): Date;
37
+ get metadata(): FederationNodeMetadata;
38
+ updateTrustLevel(level: TrustLevel): void;
39
+ updateTrustScore(score: number): void;
40
+ markSeen(): void;
41
+ isStale(maxAgeMs: number): boolean;
42
+ toProps(): FederationNodeProps;
43
+ static create(props: Omit<FederationNodeProps, 'trustLevel' | 'trustScore' | 'lastSeen'> & {
44
+ trustLevel?: TrustLevel;
45
+ trustScore?: number;
46
+ lastSeen?: Date;
47
+ }): FederationNode;
48
+ }
49
+ //# sourceMappingURL=federation-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation-node.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/federation-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IACvC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,0BAA0B,CAAC;IAClD,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC;CAC3C;AAED,qBAAa,cAAc;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,0BAA0B,CAAC;IAElD,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAyB;gBAEvC,KAAK,EAAE,mBAAmB;IAWtC,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,QAAQ,IAAI,IAAI,CAEnB;IAED,IAAI,QAAQ,IAAI,sBAAsB,CAErC;IAED,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIzC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIrC,QAAQ,IAAI,IAAI;IAIhB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIlC,OAAO,IAAI,mBAAmB;IAa9B,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC,GAAG;QACzF,UAAU,CAAC,EAAE,UAAU,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,IAAI,CAAC;KACjB,GAAG,cAAc;CAQnB"}
@@ -0,0 +1,66 @@
1
+ import { TrustLevel } from './trust-level.js';
2
+ export class FederationNode {
3
+ nodeId;
4
+ publicKey;
5
+ endpoint;
6
+ capabilities;
7
+ _trustLevel;
8
+ _trustScore;
9
+ _lastSeen;
10
+ _metadata;
11
+ constructor(props) {
12
+ this.nodeId = props.nodeId;
13
+ this.publicKey = props.publicKey;
14
+ this.endpoint = props.endpoint;
15
+ this.capabilities = props.capabilities;
16
+ this._trustLevel = props.trustLevel;
17
+ this._trustScore = props.trustScore;
18
+ this._lastSeen = props.lastSeen;
19
+ this._metadata = props.metadata;
20
+ }
21
+ get trustLevel() {
22
+ return this._trustLevel;
23
+ }
24
+ get trustScore() {
25
+ return this._trustScore;
26
+ }
27
+ get lastSeen() {
28
+ return this._lastSeen;
29
+ }
30
+ get metadata() {
31
+ return this._metadata;
32
+ }
33
+ updateTrustLevel(level) {
34
+ this._trustLevel = level;
35
+ }
36
+ updateTrustScore(score) {
37
+ this._trustScore = Math.max(0, Math.min(1, score));
38
+ }
39
+ markSeen() {
40
+ this._lastSeen = new Date();
41
+ }
42
+ isStale(maxAgeMs) {
43
+ return Date.now() - this._lastSeen.getTime() > maxAgeMs;
44
+ }
45
+ toProps() {
46
+ return {
47
+ nodeId: this.nodeId,
48
+ publicKey: this.publicKey,
49
+ endpoint: this.endpoint,
50
+ capabilities: this.capabilities,
51
+ trustLevel: this._trustLevel,
52
+ trustScore: this._trustScore,
53
+ lastSeen: this._lastSeen,
54
+ metadata: this._metadata,
55
+ };
56
+ }
57
+ static create(props) {
58
+ return new FederationNode({
59
+ ...props,
60
+ trustLevel: props.trustLevel ?? TrustLevel.UNTRUSTED,
61
+ trustScore: props.trustScore ?? 0,
62
+ lastSeen: props.lastSeen ?? new Date(),
63
+ });
64
+ }
65
+ }
66
+ //# sourceMappingURL=federation-node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation-node.js","sourceRoot":"","sources":["../../../src/domain/entities/federation-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AA2B9C,MAAM,OAAO,cAAc;IAChB,MAAM,CAAS;IACf,SAAS,CAAS;IAClB,QAAQ,CAAS;IACjB,YAAY,CAA6B;IAE1C,WAAW,CAAa;IACxB,WAAW,CAAS;IACpB,SAAS,CAAO;IACP,SAAS,CAAyB;IAEnD,YAAY,KAA0B;QACpC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC;QACvC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,UAAU,CAAC;QACpC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC;IAClC,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,gBAAgB,CAAC,KAAiB;QAChC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;IAC3B,CAAC;IAED,gBAAgB,CAAC,KAAa;QAC5B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,QAAQ;QACN,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC9B,CAAC;IAED,OAAO,CAAC,QAAgB;QACtB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;IAC1D,CAAC;IAED,OAAO;QACL,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,QAAQ,EAAE,IAAI,CAAC,SAAS;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,KAIb;QACC,OAAO,IAAI,cAAc,CAAC;YACxB,GAAG,KAAK;YACR,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,UAAU,CAAC,SAAS;YACpD,UAAU,EAAE,KAAK,CAAC,UAAU,IAAI,CAAC;YACjC,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,IAAI,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;CACF"}
@@ -0,0 +1,55 @@
1
+ import { TrustLevel } from './trust-level.js';
2
+ export interface SessionMetrics {
3
+ messagesSent: number;
4
+ messagesReceived: number;
5
+ piiRedactions: number;
6
+ threatDetections: number;
7
+ hmacFailures: number;
8
+ totalInteractions: number;
9
+ }
10
+ export interface FederationSessionProps {
11
+ readonly sessionId: string;
12
+ readonly localNodeId: string;
13
+ readonly remoteNodeId: string;
14
+ readonly trustLevel: TrustLevel;
15
+ readonly negotiatedCapabilities: readonly string[];
16
+ readonly createdAt: Date;
17
+ readonly expiresAt: Date;
18
+ readonly heartbeatInterval: number;
19
+ readonly sessionToken: string;
20
+ readonly metrics: SessionMetrics;
21
+ }
22
+ export declare class FederationSession {
23
+ readonly sessionId: string;
24
+ readonly localNodeId: string;
25
+ readonly remoteNodeId: string;
26
+ readonly negotiatedCapabilities: readonly string[];
27
+ readonly createdAt: Date;
28
+ readonly heartbeatInterval: number;
29
+ readonly sessionToken: string;
30
+ private _trustLevel;
31
+ private _expiresAt;
32
+ private _lastHeartbeat;
33
+ private _metrics;
34
+ private _active;
35
+ constructor(props: FederationSessionProps);
36
+ get trustLevel(): TrustLevel;
37
+ get expiresAt(): Date;
38
+ get lastHeartbeat(): Date;
39
+ get metrics(): Readonly<SessionMetrics>;
40
+ get active(): boolean;
41
+ isExpired(): boolean;
42
+ isHeartbeatOverdue(): boolean;
43
+ recordHeartbeat(): void;
44
+ renew(newExpiresAt: Date): void;
45
+ updateTrustLevel(level: TrustLevel): void;
46
+ recordMessageSent(): void;
47
+ recordMessageReceived(): void;
48
+ recordPiiRedaction(): void;
49
+ recordThreatDetection(): void;
50
+ recordHmacFailure(): void;
51
+ terminate(): void;
52
+ toProps(): FederationSessionProps;
53
+ static createMetrics(): SessionMetrics;
54
+ }
55
+ //# sourceMappingURL=federation-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation-session.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/federation-session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;CAClC;AAED,qBAAa,iBAAiB;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAE9B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,UAAU,CAAO;IACzB,OAAO,CAAC,cAAc,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,OAAO,CAAU;gBAEb,KAAK,EAAE,sBAAsB;IAezC,IAAI,UAAU,IAAI,UAAU,CAE3B;IAED,IAAI,SAAS,IAAI,IAAI,CAEpB;IAED,IAAI,aAAa,IAAI,IAAI,CAExB;IAED,IAAI,OAAO,IAAI,QAAQ,CAAC,cAAc,CAAC,CAEtC;IAED,IAAI,MAAM,IAAI,OAAO,CAEpB;IAED,SAAS,IAAI,OAAO;IAIpB,kBAAkB,IAAI,OAAO;IAK7B,eAAe,IAAI,IAAI;IAIvB,KAAK,CAAC,YAAY,EAAE,IAAI,GAAG,IAAI;IAK/B,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI;IAIzC,iBAAiB,IAAI,IAAI;IAKzB,qBAAqB,IAAI,IAAI;IAK7B,kBAAkB,IAAI,IAAI;IAI1B,qBAAqB,IAAI,IAAI;IAI7B,iBAAiB,IAAI,IAAI;IAIzB,SAAS,IAAI,IAAI;IAIjB,OAAO,IAAI,sBAAsB;IAejC,MAAM,CAAC,aAAa,IAAI,cAAc;CAUvC"}
@@ -0,0 +1,105 @@
1
+ export class FederationSession {
2
+ sessionId;
3
+ localNodeId;
4
+ remoteNodeId;
5
+ negotiatedCapabilities;
6
+ createdAt;
7
+ heartbeatInterval;
8
+ sessionToken;
9
+ _trustLevel;
10
+ _expiresAt;
11
+ _lastHeartbeat;
12
+ _metrics;
13
+ _active;
14
+ constructor(props) {
15
+ this.sessionId = props.sessionId;
16
+ this.localNodeId = props.localNodeId;
17
+ this.remoteNodeId = props.remoteNodeId;
18
+ this._trustLevel = props.trustLevel;
19
+ this.negotiatedCapabilities = props.negotiatedCapabilities;
20
+ this.createdAt = props.createdAt;
21
+ this._expiresAt = props.expiresAt;
22
+ this.heartbeatInterval = props.heartbeatInterval;
23
+ this.sessionToken = props.sessionToken;
24
+ this._metrics = { ...props.metrics };
25
+ this._lastHeartbeat = new Date();
26
+ this._active = true;
27
+ }
28
+ get trustLevel() {
29
+ return this._trustLevel;
30
+ }
31
+ get expiresAt() {
32
+ return this._expiresAt;
33
+ }
34
+ get lastHeartbeat() {
35
+ return this._lastHeartbeat;
36
+ }
37
+ get metrics() {
38
+ return this._metrics;
39
+ }
40
+ get active() {
41
+ return this._active;
42
+ }
43
+ isExpired() {
44
+ return Date.now() >= this._expiresAt.getTime();
45
+ }
46
+ isHeartbeatOverdue() {
47
+ const overdueThreshold = this.heartbeatInterval * 3;
48
+ return Date.now() - this._lastHeartbeat.getTime() > overdueThreshold;
49
+ }
50
+ recordHeartbeat() {
51
+ this._lastHeartbeat = new Date();
52
+ }
53
+ renew(newExpiresAt) {
54
+ this._expiresAt = newExpiresAt;
55
+ this._lastHeartbeat = new Date();
56
+ }
57
+ updateTrustLevel(level) {
58
+ this._trustLevel = level;
59
+ }
60
+ recordMessageSent() {
61
+ this._metrics.messagesSent++;
62
+ this._metrics.totalInteractions++;
63
+ }
64
+ recordMessageReceived() {
65
+ this._metrics.messagesReceived++;
66
+ this._metrics.totalInteractions++;
67
+ }
68
+ recordPiiRedaction() {
69
+ this._metrics.piiRedactions++;
70
+ }
71
+ recordThreatDetection() {
72
+ this._metrics.threatDetections++;
73
+ }
74
+ recordHmacFailure() {
75
+ this._metrics.hmacFailures++;
76
+ }
77
+ terminate() {
78
+ this._active = false;
79
+ }
80
+ toProps() {
81
+ return {
82
+ sessionId: this.sessionId,
83
+ localNodeId: this.localNodeId,
84
+ remoteNodeId: this.remoteNodeId,
85
+ trustLevel: this._trustLevel,
86
+ negotiatedCapabilities: this.negotiatedCapabilities,
87
+ createdAt: this.createdAt,
88
+ expiresAt: this._expiresAt,
89
+ heartbeatInterval: this.heartbeatInterval,
90
+ sessionToken: this.sessionToken,
91
+ metrics: { ...this._metrics },
92
+ };
93
+ }
94
+ static createMetrics() {
95
+ return {
96
+ messagesSent: 0,
97
+ messagesReceived: 0,
98
+ piiRedactions: 0,
99
+ threatDetections: 0,
100
+ hmacFailures: 0,
101
+ totalInteractions: 0,
102
+ };
103
+ }
104
+ }
105
+ //# sourceMappingURL=federation-session.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation-session.js","sourceRoot":"","sources":["../../../src/domain/entities/federation-session.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export declare enum TrustLevel {
2
+ UNTRUSTED = 0,
3
+ VERIFIED = 1,
4
+ ATTESTED = 2,
5
+ TRUSTED = 3,
6
+ PRIVILEGED = 4
7
+ }
8
+ export interface TrustTransitionThreshold {
9
+ upgradeScore: number;
10
+ downgradeScore: number;
11
+ minInteractions: number;
12
+ }
13
+ export declare const TRUST_TRANSITION_THRESHOLDS: Record<string, TrustTransitionThreshold>;
14
+ export declare const CAPABILITY_GATES: Record<TrustLevel, readonly string[]>;
15
+ export declare function isOperationAllowed(trustLevel: TrustLevel, operation: string): boolean;
16
+ export declare function getTrustLevelLabel(level: TrustLevel): string;
17
+ //# sourceMappingURL=trust-level.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-level.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/trust-level.ts"],"names":[],"mappings":"AAAA,oBAAY,UAAU;IACpB,SAAS,IAAI;IACb,QAAQ,IAAI;IACZ,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,UAAU,IAAI;CACf;AAED,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAIhF,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAMlE,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAGrF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAS5D"}
@@ -0,0 +1,35 @@
1
+ export var TrustLevel;
2
+ (function (TrustLevel) {
3
+ TrustLevel[TrustLevel["UNTRUSTED"] = 0] = "UNTRUSTED";
4
+ TrustLevel[TrustLevel["VERIFIED"] = 1] = "VERIFIED";
5
+ TrustLevel[TrustLevel["ATTESTED"] = 2] = "ATTESTED";
6
+ TrustLevel[TrustLevel["TRUSTED"] = 3] = "TRUSTED";
7
+ TrustLevel[TrustLevel["PRIVILEGED"] = 4] = "PRIVILEGED";
8
+ })(TrustLevel || (TrustLevel = {}));
9
+ export const TRUST_TRANSITION_THRESHOLDS = {
10
+ '1->2': { upgradeScore: 0.7, downgradeScore: 0.5, minInteractions: 50 },
11
+ '2->3': { upgradeScore: 0.85, downgradeScore: 0.65, minInteractions: 500 },
12
+ '3->4': { upgradeScore: 0.95, downgradeScore: 0.8, minInteractions: 5000 },
13
+ };
14
+ export const CAPABILITY_GATES = {
15
+ [TrustLevel.UNTRUSTED]: ['discovery'],
16
+ [TrustLevel.VERIFIED]: ['discovery', 'status', 'ping'],
17
+ [TrustLevel.ATTESTED]: ['discovery', 'status', 'ping', 'send', 'receive', 'query-redacted'],
18
+ [TrustLevel.TRUSTED]: ['discovery', 'status', 'ping', 'send', 'receive', 'query-redacted', 'share-context', 'collaborative-task'],
19
+ [TrustLevel.PRIVILEGED]: ['discovery', 'status', 'ping', 'send', 'receive', 'query-redacted', 'share-context', 'collaborative-task', 'full-memory', 'remote-spawn'],
20
+ };
21
+ export function isOperationAllowed(trustLevel, operation) {
22
+ const allowed = CAPABILITY_GATES[trustLevel];
23
+ return allowed.includes(operation);
24
+ }
25
+ export function getTrustLevelLabel(level) {
26
+ const labels = {
27
+ [TrustLevel.UNTRUSTED]: 'UNTRUSTED',
28
+ [TrustLevel.VERIFIED]: 'VERIFIED',
29
+ [TrustLevel.ATTESTED]: 'ATTESTED',
30
+ [TrustLevel.TRUSTED]: 'TRUSTED',
31
+ [TrustLevel.PRIVILEGED]: 'PRIVILEGED',
32
+ };
33
+ return labels[level];
34
+ }
35
+ //# sourceMappingURL=trust-level.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trust-level.js","sourceRoot":"","sources":["../../../src/domain/entities/trust-level.ts"],"names":[],"mappings":"AAAA,MAAM,CAAN,IAAY,UAMX;AAND,WAAY,UAAU;IACpB,qDAAa,CAAA;IACb,mDAAY,CAAA;IACZ,mDAAY,CAAA;IACZ,iDAAW,CAAA;IACX,uDAAc,CAAA;AAChB,CAAC,EANW,UAAU,KAAV,UAAU,QAMrB;AAQD,MAAM,CAAC,MAAM,2BAA2B,GAA6C;IACnF,MAAM,EAAE,EAAE,YAAY,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,EAAE,eAAe,EAAE,EAAE,EAAE;IACvE,MAAM,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE;IAC1E,MAAM,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,EAAE,eAAe,EAAE,IAAI,EAAE;CAC3E,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAA0C;IACrE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,CAAC;IACrC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,CAAC;IACtD,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC;IAC3F,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,CAAC;IACjI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,gBAAgB,EAAE,eAAe,EAAE,oBAAoB,EAAE,aAAa,EAAE,cAAc,CAAC;CACpK,CAAC;AAEF,MAAM,UAAU,kBAAkB,CAAC,UAAsB,EAAE,SAAiB;IAC1E,MAAM,OAAO,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAC7C,OAAO,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAiB;IAClD,MAAM,MAAM,GAA+B;QACzC,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,WAAW;QACnC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU;QACjC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,UAAU;QACjC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,SAAS;QAC/B,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,YAAY;KACtC,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,69 @@
1
+ export type FederationAuditEventType = 'peer_discovered' | 'peer_manifest_published' | 'handshake_initiated' | 'handshake_completed' | 'handshake_failed' | 'handshake_rejected' | 'session_created' | 'session_renewed' | 'session_expired' | 'session_terminated' | 'message_sent' | 'message_received' | 'message_rejected' | 'message_timeout' | 'pii_detected' | 'pii_stripped' | 'pii_blocked' | 'threat_detected' | 'threat_blocked' | 'threat_learned' | 'claim_checked' | 'claim_denied' | 'trust_level_changed' | 'consensus_proposed' | 'consensus_voted' | 'consensus_reached' | 'consensus_failed';
2
+ export type AuditSeverity = 'info' | 'warn' | 'error' | 'critical';
3
+ export type AuditCategory = 'discovery' | 'handshake' | 'message' | 'pii' | 'security' | 'consensus';
4
+ export type ComplianceMode = 'hipaa' | 'soc2' | 'gdpr' | 'none';
5
+ export interface FederationAuditEvent {
6
+ readonly eventId: string;
7
+ readonly timestamp: string;
8
+ readonly nodeId: string;
9
+ readonly sessionId?: string;
10
+ readonly eventType: FederationAuditEventType;
11
+ readonly severity: AuditSeverity;
12
+ readonly category: AuditCategory;
13
+ readonly sourceNodeId?: string;
14
+ readonly targetNodeId?: string;
15
+ readonly agentId?: string;
16
+ readonly trustLevel?: number;
17
+ readonly piiDetected?: boolean;
18
+ readonly piiTypesFound?: string[];
19
+ readonly piiAction?: string;
20
+ readonly threatDetected?: boolean;
21
+ readonly threatTypes?: string[];
22
+ readonly claimsChecked?: string[];
23
+ readonly claimsResult?: 'granted' | 'denied';
24
+ readonly latencyMs?: number;
25
+ readonly messageSizeBytes?: number;
26
+ readonly complianceMode?: ComplianceMode;
27
+ readonly dataResidency?: string;
28
+ readonly metadata?: Record<string, unknown>;
29
+ }
30
+ export interface AuditQuery {
31
+ readonly eventType?: FederationAuditEventType;
32
+ readonly severity?: AuditSeverity;
33
+ readonly category?: AuditCategory;
34
+ readonly nodeId?: string;
35
+ readonly sessionId?: string;
36
+ readonly since?: Date;
37
+ readonly until?: Date;
38
+ readonly limit?: number;
39
+ readonly offset?: number;
40
+ }
41
+ export type AuditExportFormat = 'json' | 'csv' | 'ndjson';
42
+ export interface AuditServiceDeps {
43
+ generateEventId: () => string;
44
+ getLocalNodeId: () => string;
45
+ persistEvent: (event: FederationAuditEvent) => Promise<void>;
46
+ queryEvents: (query: AuditQuery) => Promise<FederationAuditEvent[]>;
47
+ onAuditEvent?: (event: FederationAuditEvent) => void;
48
+ }
49
+ export interface AuditServiceConfig {
50
+ readonly complianceMode: ComplianceMode;
51
+ readonly dataResidency?: string;
52
+ readonly retentionDays: number;
53
+ readonly batchSize: number;
54
+ }
55
+ export declare class AuditService {
56
+ private readonly deps;
57
+ private readonly config;
58
+ private readonly buffer;
59
+ constructor(deps: AuditServiceDeps, config?: Partial<AuditServiceConfig>);
60
+ log(eventType: FederationAuditEventType, details?: Partial<Omit<FederationAuditEvent, 'eventId' | 'timestamp' | 'nodeId' | 'eventType' | 'severity' | 'category' | 'complianceMode'>>): Promise<FederationAuditEvent>;
61
+ query(query: AuditQuery): Promise<FederationAuditEvent[]>;
62
+ export(query: AuditQuery, format: AuditExportFormat): Promise<string>;
63
+ flush(): Promise<void>;
64
+ getBufferSize(): number;
65
+ private buildEvent;
66
+ private applyHipaaCompliance;
67
+ private toCsv;
68
+ }
69
+ //# sourceMappingURL=audit-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-service.d.ts","sourceRoot":"","sources":["../../../src/domain/services/audit-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ const DEFAULT_AUDIT_CONFIG = {
2
+ complianceMode: 'none',
3
+ retentionDays: 90,
4
+ batchSize: 100,
5
+ };
6
+ const SEVERITY_BY_EVENT_TYPE = {
7
+ peer_discovered: 'info',
8
+ peer_manifest_published: 'info',
9
+ handshake_initiated: 'info',
10
+ handshake_completed: 'info',
11
+ handshake_failed: 'warn',
12
+ handshake_rejected: 'warn',
13
+ session_created: 'info',
14
+ session_renewed: 'info',
15
+ session_expired: 'info',
16
+ session_terminated: 'info',
17
+ message_sent: 'info',
18
+ message_received: 'info',
19
+ message_rejected: 'warn',
20
+ message_timeout: 'warn',
21
+ pii_detected: 'warn',
22
+ pii_stripped: 'info',
23
+ pii_blocked: 'warn',
24
+ threat_detected: 'error',
25
+ threat_blocked: 'critical',
26
+ threat_learned: 'info',
27
+ claim_checked: 'info',
28
+ claim_denied: 'warn',
29
+ trust_level_changed: 'warn',
30
+ consensus_proposed: 'info',
31
+ consensus_voted: 'info',
32
+ consensus_reached: 'info',
33
+ consensus_failed: 'warn',
34
+ };
35
+ const CATEGORY_BY_EVENT_TYPE = {
36
+ peer_discovered: 'discovery',
37
+ peer_manifest_published: 'discovery',
38
+ handshake_initiated: 'handshake',
39
+ handshake_completed: 'handshake',
40
+ handshake_failed: 'handshake',
41
+ handshake_rejected: 'handshake',
42
+ session_created: 'handshake',
43
+ session_renewed: 'handshake',
44
+ session_expired: 'handshake',
45
+ session_terminated: 'handshake',
46
+ message_sent: 'message',
47
+ message_received: 'message',
48
+ message_rejected: 'message',
49
+ message_timeout: 'message',
50
+ pii_detected: 'pii',
51
+ pii_stripped: 'pii',
52
+ pii_blocked: 'pii',
53
+ threat_detected: 'security',
54
+ threat_blocked: 'security',
55
+ threat_learned: 'security',
56
+ claim_checked: 'security',
57
+ claim_denied: 'security',
58
+ trust_level_changed: 'security',
59
+ consensus_proposed: 'consensus',
60
+ consensus_voted: 'consensus',
61
+ consensus_reached: 'consensus',
62
+ consensus_failed: 'consensus',
63
+ };
64
+ export class AuditService {
65
+ deps;
66
+ config;
67
+ buffer;
68
+ constructor(deps, config) {
69
+ this.deps = deps;
70
+ this.config = { ...DEFAULT_AUDIT_CONFIG, ...config };
71
+ this.buffer = [];
72
+ }
73
+ async log(eventType, details = {}) {
74
+ const event = this.buildEvent(eventType, details);
75
+ this.buffer.push(event);
76
+ this.deps.onAuditEvent?.(event);
77
+ if (this.buffer.length >= this.config.batchSize || event.severity === 'critical') {
78
+ await this.flush();
79
+ }
80
+ return event;
81
+ }
82
+ async query(query) {
83
+ await this.flush();
84
+ return this.deps.queryEvents(query);
85
+ }
86
+ async export(query, format) {
87
+ const events = await this.query(query);
88
+ switch (format) {
89
+ case 'json':
90
+ return JSON.stringify(events, null, 2);
91
+ case 'ndjson':
92
+ return events.map(e => JSON.stringify(e)).join('\n');
93
+ case 'csv':
94
+ return this.toCsv(events);
95
+ }
96
+ }
97
+ async flush() {
98
+ const eventsToFlush = this.buffer.splice(0, this.buffer.length);
99
+ for (const event of eventsToFlush) {
100
+ await this.deps.persistEvent(event);
101
+ }
102
+ }
103
+ getBufferSize() {
104
+ return this.buffer.length;
105
+ }
106
+ buildEvent(eventType, details) {
107
+ const event = {
108
+ eventId: this.deps.generateEventId(),
109
+ timestamp: new Date().toISOString(),
110
+ nodeId: this.deps.getLocalNodeId(),
111
+ eventType,
112
+ severity: SEVERITY_BY_EVENT_TYPE[eventType],
113
+ category: CATEGORY_BY_EVENT_TYPE[eventType],
114
+ complianceMode: this.config.complianceMode,
115
+ dataResidency: this.config.dataResidency,
116
+ ...details,
117
+ };
118
+ if (this.config.complianceMode === 'hipaa') {
119
+ return this.applyHipaaCompliance(event);
120
+ }
121
+ return event;
122
+ }
123
+ applyHipaaCompliance(event) {
124
+ if (event.piiDetected && event.metadata) {
125
+ const sanitizedMetadata = { ...event.metadata };
126
+ delete sanitizedMetadata['rawContent'];
127
+ delete sanitizedMetadata['originalValue'];
128
+ return { ...event, metadata: sanitizedMetadata };
129
+ }
130
+ return event;
131
+ }
132
+ toCsv(events) {
133
+ if (events.length === 0)
134
+ return '';
135
+ const headers = [
136
+ 'eventId', 'timestamp', 'nodeId', 'eventType', 'severity',
137
+ 'category', 'sourceNodeId', 'targetNodeId', 'sessionId',
138
+ 'trustLevel', 'piiDetected', 'threatDetected', 'latencyMs',
139
+ ];
140
+ const rows = events.map(e => headers.map(h => {
141
+ const val = e[h];
142
+ if (val === undefined || val === null)
143
+ return '';
144
+ return String(val);
145
+ }).join(','));
146
+ return [headers.join(','), ...rows].join('\n');
147
+ }
148
+ }
149
+ //# sourceMappingURL=audit-service.js.map