@claude-flow/plugin-agent-federation 1.0.0-alpha.13 → 1.0.0-alpha.14
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/dist/application/federation-breaker-service.d.ts +11 -1
- package/dist/application/federation-breaker-service.d.ts.map +1 -1
- package/dist/application/federation-breaker-service.js +12 -10
- package/dist/application/federation-breaker-service.js.map +1 -1
- package/dist/application/federation-coordinator.d.ts +24 -0
- package/dist/application/federation-coordinator.d.ts.map +1 -1
- package/dist/application/federation-coordinator.js +43 -0
- package/dist/application/federation-coordinator.js.map +1 -1
- package/dist/domain/services/discovery-service.d.ts +8 -0
- package/dist/domain/services/discovery-service.d.ts.map +1 -1
- package/dist/domain/services/discovery-service.js.map +1 -1
- package/dist/domain/services/wg-mesh-service.d.ts +144 -0
- package/dist/domain/services/wg-mesh-service.d.ts.map +1 -0
- package/dist/domain/services/wg-mesh-service.js +244 -0
- package/dist/domain/services/wg-mesh-service.js.map +1 -0
- package/dist/domain/value-objects/wg-config.d.ts +70 -0
- package/dist/domain/value-objects/wg-config.d.ts.map +1 -0
- package/dist/domain/value-objects/wg-config.js +104 -0
- package/dist/domain/value-objects/wg-config.js.map +1 -0
- package/package.json +1 -1
|
@@ -132,11 +132,21 @@ export declare function evaluatePolicy(samples: readonly NormalizedSample[], nod
|
|
|
132
132
|
* Construct once per federation coordinator. Inject the policy if you need
|
|
133
133
|
* non-default thresholds (Phase 4 doctor surface will let users tune them).
|
|
134
134
|
*/
|
|
135
|
+
/**
|
|
136
|
+
* ADR-111 Phase 3 — callback invoked after the breaker applies a successful
|
|
137
|
+
* state transition. Used by the coordinator to propagate suspends to the
|
|
138
|
+
* WG mesh layer (clearing AllowedIPs). Not invoked for `apply=false` dry runs
|
|
139
|
+
* or `NONE` / `REACTIVATE_ELIGIBLE` decisions. Errors thrown from the callback
|
|
140
|
+
* are swallowed at the breaker — the entity transition has already happened,
|
|
141
|
+
* and side-effect failures shouldn't unwind the breaker's internal state.
|
|
142
|
+
*/
|
|
143
|
+
export type BreakerTransitionListener = (node: FederationNode, decision: BreakerDecision) => void | Promise<void>;
|
|
135
144
|
export declare class FederationBreakerService {
|
|
136
145
|
private readonly policy;
|
|
137
146
|
private readonly samples;
|
|
138
147
|
private readonly maxSamplesPerPeer;
|
|
139
|
-
|
|
148
|
+
private readonly onTransition?;
|
|
149
|
+
constructor(policy?: BreakerPolicy, maxSamplesPerPeer?: number, onTransition?: BreakerTransitionListener);
|
|
140
150
|
/** Read the active policy (handy for tests + doctor surface). */
|
|
141
151
|
getPolicy(): BreakerPolicy;
|
|
142
152
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation-breaker-service.d.ts","sourceRoot":"","sources":["../../src/application/federation-breaker-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAEL,gBAAgB,EAMjB,MAAM,kDAAkD,CAAC;AAE1D,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,wDAAwD;IACxD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,wFAAwF;IACxF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,eAAO,MAAM,sBAAsB,EAAE,aAQnC,CAAC;AAEH,wDAAwD;AACxD,eAAO,MAAM,4BAA4B,SAAU,CAAC;AAEpD,6EAA6E;AAC7E,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IACE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,IAAI,GACR,eAAe,CAqDjB;AAED;;;;;;GAMG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;
|
|
1
|
+
{"version":3,"file":"federation-breaker-service.d.ts","sourceRoot":"","sources":["../../src/application/federation-breaker-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,uCAAuC,CAAC;AACvE,OAAO,EAEL,gBAAgB,EAMjB,MAAM,kDAAkD,CAAC;AAE1D,yDAAyD;AACzD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,sFAAsF;IACtF,QAAQ,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;CACpB;AAED,sEAAsE;AACtE,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,+DAA+D;IAC/D,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;IACvC,wDAAwD;IACxD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,wFAAwF;IACxF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,sEAAsE;IACtE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,gEAAgE;IAChE,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;CACpC;AAED,eAAO,MAAM,sBAAsB,EAAE,aAQnC,CAAC;AAEH,wDAAwD;AACxD,eAAO,MAAM,4BAA4B,SAAU,CAAC;AAEpD,6EAA6E;AAC7E,UAAU,gBAAgB;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CACnB;AAED;;;;;GAKG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACpD;IACE,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;CACnC,GACD;IACE,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB,CAAC;AAEN;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,aAAa,EACrB,GAAG,EAAE,IAAI,GACR,eAAe,CAqDjB;AAED;;;;;;GAMG;AACH;;;;;;;GAOG;AACH,MAAM,MAAM,yBAAyB,GAAG,CACtC,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,eAAe,KACtB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAE1B,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAkC;IAC1D,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAS;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,CAA4B;gBAGxD,MAAM,GAAE,aAAsC,EAC9C,iBAAiB,GAAE,MAAqC,EACxD,YAAY,CAAC,EAAE,yBAAyB;IAQ1C,iEAAiE;IACjE,SAAS,IAAI,aAAa;IAI1B;;;;;;;;;;OAUG;IACH,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI;IAkBjE;;;;;;OAMG;IACH,QAAQ,CACN,IAAI,EAAE,cAAc,EACpB,GAAG,GAAE,IAAiB,EACtB,KAAK,GAAE,OAAc,GACpB,eAAe;IAqClB;;;;OAIG;IACH,IAAI,CAAC,KAAK,EAAE,SAAS,cAAc,EAAE,EAAE,GAAG,GAAE,IAAiB,GAAG,eAAe,EAAE;IAIjF,oEAAoE;IACpE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAI5B;;;OAGG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG;QAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;QAChC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9C;CAqBF"}
|
|
@@ -128,21 +128,16 @@ export function evaluatePolicy(samples, node, policy, now) {
|
|
|
128
128
|
}
|
|
129
129
|
return { action: 'NONE', nodeId: node.nodeId };
|
|
130
130
|
}
|
|
131
|
-
/**
|
|
132
|
-
* Stateful service: owns the per-peer sample buffer, applies decisions to
|
|
133
|
-
* entities, and exposes the breaker control surface to the coordinator.
|
|
134
|
-
*
|
|
135
|
-
* Construct once per federation coordinator. Inject the policy if you need
|
|
136
|
-
* non-default thresholds (Phase 4 doctor surface will let users tune them).
|
|
137
|
-
*/
|
|
138
131
|
export class FederationBreakerService {
|
|
139
132
|
policy;
|
|
140
133
|
samples;
|
|
141
134
|
maxSamplesPerPeer;
|
|
142
|
-
|
|
135
|
+
onTransition;
|
|
136
|
+
constructor(policy = DEFAULT_BREAKER_POLICY, maxSamplesPerPeer = DEFAULT_MAX_SAMPLES_PER_PEER, onTransition) {
|
|
143
137
|
this.policy = policy;
|
|
144
138
|
this.samples = new Map();
|
|
145
139
|
this.maxSamplesPerPeer = maxSamplesPerPeer;
|
|
140
|
+
this.onTransition = onTransition;
|
|
146
141
|
}
|
|
147
142
|
/** Read the active policy (handy for tests + doctor surface). */
|
|
148
143
|
getPolicy() {
|
|
@@ -187,15 +182,16 @@ export class FederationBreakerService {
|
|
|
187
182
|
const decision = evaluatePolicy(buf, node, this.policy, now);
|
|
188
183
|
if (!apply)
|
|
189
184
|
return decision;
|
|
185
|
+
let transitioned = false;
|
|
190
186
|
switch (decision.action) {
|
|
191
187
|
case 'SUSPEND': {
|
|
192
188
|
const reason = { reason: decision.reason };
|
|
193
|
-
node.suspend(reason, now);
|
|
189
|
+
transitioned = node.suspend(reason, now);
|
|
194
190
|
break;
|
|
195
191
|
}
|
|
196
192
|
case 'EVICT': {
|
|
197
193
|
const reason = { reason: decision.reason };
|
|
198
|
-
node.evict(reason, now);
|
|
194
|
+
transitioned = node.evict(reason, now);
|
|
199
195
|
break;
|
|
200
196
|
}
|
|
201
197
|
case 'REACTIVATE_ELIGIBLE':
|
|
@@ -206,6 +202,12 @@ export class FederationBreakerService {
|
|
|
206
202
|
case 'NONE':
|
|
207
203
|
break;
|
|
208
204
|
}
|
|
205
|
+
if (transitioned && this.onTransition) {
|
|
206
|
+
// Side-effect listener (ADR-111 Phase 3). Errors are swallowed so a
|
|
207
|
+
// failing WG propagation can't unwind the entity transition that
|
|
208
|
+
// already succeeded — coordinator should log via its own audit trail.
|
|
209
|
+
Promise.resolve(this.onTransition(node, decision)).catch(() => { });
|
|
210
|
+
}
|
|
209
211
|
return decision;
|
|
210
212
|
}
|
|
211
213
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation-breaker-service.js","sourceRoot":"","sources":["../../src/application/federation-breaker-service.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"federation-breaker-service.js","sourceRoot":"","sources":["../../src/application/federation-breaker-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,7 @@ import { PolicyEngine } from './policy-engine.js';
|
|
|
13
13
|
import { enforceBudget, validateBudget } from '../domain/value-objects/federation-budget.js';
|
|
14
14
|
import type { FederationBreakerService } from './federation-breaker-service.js';
|
|
15
15
|
import type { SpendReporter } from './spend-reporter.js';
|
|
16
|
+
import type { WgMeshService, WgCommand } from '../domain/services/wg-mesh-service.js';
|
|
16
17
|
/**
|
|
17
18
|
* Optional per-call budget controls (ADR-097 Phase 1). All fields are
|
|
18
19
|
* optional; omitted means "no limit on that axis" (the default unbounded
|
|
@@ -64,6 +65,20 @@ export interface FederationStatus {
|
|
|
64
65
|
export interface FederationCoordinatorIntegrations {
|
|
65
66
|
readonly spendReporter?: SpendReporter;
|
|
66
67
|
readonly breakerService?: FederationBreakerService;
|
|
68
|
+
/**
|
|
69
|
+
* ADR-111 Phase 3 — optional WG mesh service. When present, peer state
|
|
70
|
+
* transitions (evict/reactivate/breaker-suspend) emit `wg set` commands
|
|
71
|
+
* to a sink supplied by `wgCommandSink`. No-op for peers without a `wg`
|
|
72
|
+
* manifest block, so wiring the service is safe even in mixed deployments.
|
|
73
|
+
*/
|
|
74
|
+
readonly wgMesh?: WgMeshService;
|
|
75
|
+
/**
|
|
76
|
+
* Where emitted WG commands go. Defaults to the audit log only. Integrators
|
|
77
|
+
* can plug in a shell executor here (after operator approval — bringing up
|
|
78
|
+
* a network interface is destructive). Commands include shell-ready
|
|
79
|
+
* `wg set <iface> ...` strings; the sink should still validate before exec.
|
|
80
|
+
*/
|
|
81
|
+
readonly wgCommandSink?: (cmd: WgCommand) => void | Promise<void>;
|
|
67
82
|
}
|
|
68
83
|
export declare class FederationCoordinator {
|
|
69
84
|
private readonly config;
|
|
@@ -78,7 +93,16 @@ export declare class FederationCoordinator {
|
|
|
78
93
|
private initialized;
|
|
79
94
|
private readonly spendReporter?;
|
|
80
95
|
private readonly breakerService?;
|
|
96
|
+
private readonly wgMesh?;
|
|
97
|
+
private readonly wgCommandSink?;
|
|
81
98
|
constructor(config: FederationCoordinatorConfig, discovery: DiscoveryService, handshake: HandshakeService, routing: RoutingService, audit: AuditService, piiPipeline: PIIPipelineService, trustEvaluator: TrustEvaluator, policyEngine: PolicyEngine, integrations?: FederationCoordinatorIntegrations);
|
|
99
|
+
/**
|
|
100
|
+
* ADR-111 Phase 3 — emit a WG command for an audited peer transition.
|
|
101
|
+
* No-op if no wgMesh is configured or the peer lacks a `wg` manifest
|
|
102
|
+
* block. Commands flow to `wgCommandSink` (if any) and always to the
|
|
103
|
+
* audit log so reactivation is fully traceable.
|
|
104
|
+
*/
|
|
105
|
+
private emitWgCommand;
|
|
82
106
|
initialize(manifest: Omit<FederationManifest, 'signature'>): Promise<void>;
|
|
83
107
|
shutdown(): Promise<void>;
|
|
84
108
|
joinPeer(endpoint: string): Promise<FederationSession>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation-coordinator.d.ts","sourceRoot":"","sources":["../../src/application/federation-coordinator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,yBAAyB,EAAE,MAAM,uCAAuC,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,2CAA2C,CAAC;AACvF,OAAO,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAC;AAC/D,OAAO,EAEL,KAAK,gBAAgB,EACtB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AACpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,EAAE,cAAc,EAAiC,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAGL,aAAa,EACb,cAAc,EACf,MAAM,8CAA8C,CAAC;AACtD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAEV,aAAa,EACd,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"federation-coordinator.d.ts","sourceRoot":"","sources":["../../src/application/federation-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,6 +14,8 @@ export class FederationCoordinator {
|
|
|
14
14
|
initialized;
|
|
15
15
|
spendReporter;
|
|
16
16
|
breakerService;
|
|
17
|
+
wgMesh;
|
|
18
|
+
wgCommandSink;
|
|
17
19
|
constructor(config, discovery, handshake, routing, audit, piiPipeline, trustEvaluator, policyEngine, integrations = {}) {
|
|
18
20
|
this.config = config;
|
|
19
21
|
this.discovery = discovery;
|
|
@@ -27,6 +29,36 @@ export class FederationCoordinator {
|
|
|
27
29
|
this.initialized = false;
|
|
28
30
|
this.spendReporter = integrations.spendReporter;
|
|
29
31
|
this.breakerService = integrations.breakerService;
|
|
32
|
+
this.wgMesh = integrations.wgMesh;
|
|
33
|
+
this.wgCommandSink = integrations.wgCommandSink;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* ADR-111 Phase 3 — emit a WG command for an audited peer transition.
|
|
37
|
+
* No-op if no wgMesh is configured or the peer lacks a `wg` manifest
|
|
38
|
+
* block. Commands flow to `wgCommandSink` (if any) and always to the
|
|
39
|
+
* audit log so reactivation is fully traceable.
|
|
40
|
+
*/
|
|
41
|
+
async emitWgCommand(peer, builder) {
|
|
42
|
+
if (!this.wgMesh)
|
|
43
|
+
return;
|
|
44
|
+
const wgPubkey = peer.metadata.wgPublicKey;
|
|
45
|
+
const wgMeshIP = peer.metadata.wgMeshIP;
|
|
46
|
+
if (!wgPubkey || !wgMeshIP)
|
|
47
|
+
return;
|
|
48
|
+
const cmd = builder(wgPubkey, wgMeshIP);
|
|
49
|
+
if (!cmd)
|
|
50
|
+
return;
|
|
51
|
+
await this.audit.log('peer_manifest_published', {
|
|
52
|
+
targetNodeId: peer.nodeId,
|
|
53
|
+
metadata: {
|
|
54
|
+
wgCommand: cmd.cmd,
|
|
55
|
+
wgVerb: cmd.verb,
|
|
56
|
+
wgRationale: cmd.rationale,
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
if (this.wgCommandSink) {
|
|
60
|
+
await this.wgCommandSink(cmd);
|
|
61
|
+
}
|
|
30
62
|
}
|
|
31
63
|
async initialize(manifest) {
|
|
32
64
|
await this.discovery.publishManifest(manifest);
|
|
@@ -294,6 +326,10 @@ export class FederationCoordinator {
|
|
|
294
326
|
session.terminate();
|
|
295
327
|
this.sessions.delete(session.sessionId);
|
|
296
328
|
}
|
|
329
|
+
// ADR-111 Phase 3 — propagate eviction to the WG mesh. No-op if the
|
|
330
|
+
// peer never published a wg block; otherwise drops the peer from the
|
|
331
|
+
// mesh runtime (config rebuild will also exclude it).
|
|
332
|
+
await this.emitWgCommand(peer, (pubkey) => this.wgMesh.removePeer(peer, pubkey, reason));
|
|
297
333
|
}
|
|
298
334
|
return ok;
|
|
299
335
|
}
|
|
@@ -362,6 +398,13 @@ export class FederationCoordinator {
|
|
|
362
398
|
applied: ok,
|
|
363
399
|
},
|
|
364
400
|
});
|
|
401
|
+
if (ok) {
|
|
402
|
+
// ADR-111 Phase 3 — restore the WG AllowedIPs slice the peer had
|
|
403
|
+
// before suspension. removePeer-then-reactivate stays evicted at the
|
|
404
|
+
// mesh layer because removePeer marks the peer terminally evicted;
|
|
405
|
+
// the operator must reconfigure manually for an evicted peer to rejoin.
|
|
406
|
+
await this.emitWgCommand(peer, (pubkey, meshIP) => this.wgMesh.restoreAllowedIPs(peer, meshIP, pubkey));
|
|
407
|
+
}
|
|
365
408
|
return ok;
|
|
366
409
|
}
|
|
367
410
|
getSession(sessionId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"federation-coordinator.js","sourceRoot":"","sources":["../../src/application/federation-coordinator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"federation-coordinator.js","sourceRoot":"","sources":["../../src/application/federation-coordinator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { FederationNode } from '../entities/federation-node.js';
|
|
2
|
+
import type { WgManifestSection } from '../value-objects/wg-config.js';
|
|
2
3
|
export type DiscoveryMechanism = 'static' | 'dns-sd' | 'ipfs-registry';
|
|
3
4
|
export interface FederationManifest {
|
|
4
5
|
readonly nodeId: string;
|
|
@@ -13,6 +14,13 @@ export interface FederationManifest {
|
|
|
13
14
|
readonly version: string;
|
|
14
15
|
readonly signature: string;
|
|
15
16
|
readonly timestamp: string;
|
|
17
|
+
/**
|
|
18
|
+
* ADR-111 — optional WG mesh identity. Present only when the publishing
|
|
19
|
+
* node has opted into the in-tree WG layer (`config.wgMesh: true`).
|
|
20
|
+
* The Ed25519 manifest signature covers this block too — peers verifying
|
|
21
|
+
* the manifest also verify the WG-key binding.
|
|
22
|
+
*/
|
|
23
|
+
readonly wg?: WgManifestSection;
|
|
16
24
|
}
|
|
17
25
|
export interface DiscoveryServiceDeps {
|
|
18
26
|
signManifest: (manifest: Omit<FederationManifest, 'signature'>) => Promise<string>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-service.d.ts","sourceRoot":"","sources":["../../../src/domain/services/discovery-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA4B,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery-service.d.ts","sourceRoot":"","sources":["../../../src/domain/services/discovery-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA4B,MAAM,gCAAgC,CAAC;AAE1F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,eAAe,CAAC;AAEvE,MAAM,WAAW,kBAAkB;IACjC,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;QACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;QACvC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC;QACvC,QAAQ,CAAC,kBAAkB,EAAE,SAAS,MAAM,EAAE,CAAC;QAC/C,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;KAC7C,CAAC;IACF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,CAAC,EAAE,iBAAiB,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnF,cAAc,EAAE,CAAC,QAAQ,EAAE,kBAAkB,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACnE,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,kBAAkB,EAAE,OAAO,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAUD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAuB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA8B;IACzD,OAAO,CAAC,aAAa,CAA4B;IACjD,OAAO,CAAC,cAAc,CAAwC;gBAElD,IAAI,EAAE,oBAAoB,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC;IAQnE,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAMnG,gBAAgB,IAAI,kBAAkB,GAAG,IAAI;IAIvC,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;IA2B1C,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,cAAc,CAAC;IAqC7F,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAInC,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAInD,SAAS,IAAI,cAAc,EAAE;IAI7B,eAAe,IAAI,cAAc,EAAE;IAInC,UAAU,IAAI,MAAM,EAAE;IAWtB,sBAAsB,IAAI,IAAI;IAO9B,qBAAqB,IAAI,IAAI;IAO7B,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,YAAY;CASrB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discovery-service.js","sourceRoot":"","sources":["../../../src/domain/services/discovery-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAA4B,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"discovery-service.js","sourceRoot":"","sources":["../../../src/domain/services/discovery-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-111 Phase 2 — WgMeshService.
|
|
3
|
+
*
|
|
4
|
+
* Pure-projection service: takes the federation peer registry + local
|
|
5
|
+
* WG identity and produces (a) a `wg-quick`-compatible config string,
|
|
6
|
+
* (b) per-peer `wg set` commands the operator runs to converge an
|
|
7
|
+
* already-running interface, and (c) the AllowedIPs slice that maps to
|
|
8
|
+
* each peer's trust level.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately does NOT shell out. Bringing up a network interface
|
|
11
|
+
* requires root and modifies system state — per CLAUDE.md's
|
|
12
|
+
* destructive-actions guidance the service emits the commands; the
|
|
13
|
+
* operator (or a thin shell wrapper they audit) runs them.
|
|
14
|
+
*
|
|
15
|
+
* Phase 3 (breaker integration) consumes this service: peer state
|
|
16
|
+
* transitions invoke removeAllowedIPs/removePeer/restoreAllowedIPs,
|
|
17
|
+
* which produce commands without side effects.
|
|
18
|
+
*/
|
|
19
|
+
import { TrustLevel } from '../entities/trust-level.js';
|
|
20
|
+
import { FederationNode } from '../entities/federation-node.js';
|
|
21
|
+
import type { WgLocalKey } from '../value-objects/wg-config.js';
|
|
22
|
+
export interface WgPortRule {
|
|
23
|
+
readonly proto: 'tcp' | 'udp' | 'all';
|
|
24
|
+
readonly port?: number;
|
|
25
|
+
readonly portRange?: readonly [number, number];
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Trust-level → reachability. ADR-111's `WG_NETWORK_GATES`.
|
|
29
|
+
*
|
|
30
|
+
* Note: WireGuard's `AllowedIPs` is L3 routing, not L4 ACL — these port
|
|
31
|
+
* rules describe what the L4 firewall (Phase 4: nftables/pf) should
|
|
32
|
+
* enforce. v1 (this phase) only produces the rules; Phase 4 projects
|
|
33
|
+
* them into kernel firewall syntax. Until then, callers using v1
|
|
34
|
+
* fall back to the simpler "AllowedIPs = peer's mesh IP" model (option
|
|
35
|
+
* (b) in the ADR — app-layer auth carries the access decision).
|
|
36
|
+
*/
|
|
37
|
+
export declare const WG_NETWORK_GATES: Record<TrustLevel, readonly WgPortRule[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Minimum trust level whose peers get a `[Peer]` block in the WG config.
|
|
40
|
+
* UNTRUSTED stays out of the mesh entirely — it's the explicit drop bucket.
|
|
41
|
+
*/
|
|
42
|
+
export declare const WG_MIN_MESH_TRUST: TrustLevel;
|
|
43
|
+
export interface WgMeshServiceConfig {
|
|
44
|
+
/** Local interface name. Defaults to `ruflo-fed`. */
|
|
45
|
+
readonly interfaceName?: string;
|
|
46
|
+
/** Local UDP listen port. WireGuard's standard is 51820. */
|
|
47
|
+
readonly listenPort?: number;
|
|
48
|
+
/** Mesh subnet for AllowedIPs filtering. Defaults to DEFAULT_MESH_SUBNET. */
|
|
49
|
+
readonly meshSubnet?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface WgPeerSummary {
|
|
52
|
+
readonly nodeId: string;
|
|
53
|
+
readonly trustLevel: TrustLevel;
|
|
54
|
+
readonly trustLabel: string;
|
|
55
|
+
readonly meshIP: string;
|
|
56
|
+
readonly endpoint: string;
|
|
57
|
+
readonly publicKey: string;
|
|
58
|
+
readonly state: 'active' | 'suspended' | 'evicted';
|
|
59
|
+
readonly allowedIPs: readonly string[];
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* A planned `wg(8)` mutation. Service consumers either execute these or
|
|
63
|
+
* surface them to the operator. Strings are validated for shell metachars
|
|
64
|
+
* before being formatted into a command — callers should still review.
|
|
65
|
+
*/
|
|
66
|
+
export interface WgCommand {
|
|
67
|
+
readonly verb: 'set-allowed-ips' | 'remove-allowed-ips' | 'remove-peer' | 'add-peer';
|
|
68
|
+
/** Public key of the peer this command targets. */
|
|
69
|
+
readonly peerPublicKey: string;
|
|
70
|
+
/** Render to a `wg set <iface> peer <pk> ...` shell-ready string. */
|
|
71
|
+
readonly cmd: string;
|
|
72
|
+
/** Human-readable rationale for audit logs. */
|
|
73
|
+
readonly rationale: string;
|
|
74
|
+
}
|
|
75
|
+
export declare class WgMeshService {
|
|
76
|
+
private readonly interfaceName;
|
|
77
|
+
private readonly listenPort;
|
|
78
|
+
private readonly meshSubnet;
|
|
79
|
+
private localKey;
|
|
80
|
+
private localMeshIP;
|
|
81
|
+
/** Per-peer AllowedIPs after the last applyTrustLevelToAllowedIPs() call. Drives restore from breaker. */
|
|
82
|
+
private readonly lastAppliedAllowedIPs;
|
|
83
|
+
/** Peer-pubkey → suspended flag for breaker integration. */
|
|
84
|
+
private readonly suspended;
|
|
85
|
+
/** Peer-pubkey → evicted flag. */
|
|
86
|
+
private readonly evicted;
|
|
87
|
+
constructor(config?: WgMeshServiceConfig);
|
|
88
|
+
/** Bind the local WG identity. Required before buildInterfaceConfig(). */
|
|
89
|
+
setLocalIdentity(key: WgLocalKey, meshIP: string): void;
|
|
90
|
+
getInterfaceName(): string;
|
|
91
|
+
getMeshSubnet(): string;
|
|
92
|
+
/**
|
|
93
|
+
* Build a `wg-quick`-compatible config string from current peers.
|
|
94
|
+
*
|
|
95
|
+
* Peers below WG_MIN_MESH_TRUST (UNTRUSTED) are excluded entirely.
|
|
96
|
+
* Suspended peers stay in the config but with `AllowedIPs =` empty
|
|
97
|
+
* (soft-block). Evicted peers are dropped completely.
|
|
98
|
+
*
|
|
99
|
+
* Operator writes this to `/etc/wireguard/<interface>.conf` and runs
|
|
100
|
+
* `wg-quick up <interface>`.
|
|
101
|
+
*/
|
|
102
|
+
buildInterfaceConfig(peers: readonly FederationNode[]): string;
|
|
103
|
+
/**
|
|
104
|
+
* Compute the AllowedIPs slice for a peer at its current trust level.
|
|
105
|
+
* v1: each peer gets its own /32 mesh IP. Phase 4 will narrow this
|
|
106
|
+
* further via firewall rules; v1 keeps L3 broad and relies on the app
|
|
107
|
+
* layer + trust gates for access decisions.
|
|
108
|
+
*/
|
|
109
|
+
computeAllowedIPs(peer: FederationNode, meshIP: string): readonly string[];
|
|
110
|
+
/**
|
|
111
|
+
* Apply trust level → AllowedIPs as a `wg set` command for an
|
|
112
|
+
* already-running interface. Used when a peer joins or its trust level
|
|
113
|
+
* changes without needing a full config rewrite.
|
|
114
|
+
*/
|
|
115
|
+
applyTrustLevelToAllowedIPs(peer: FederationNode, meshIP: string, pubkey: string): WgCommand;
|
|
116
|
+
/**
|
|
117
|
+
* Phase 3 hook — peer SUSPENDED. Clear AllowedIPs (soft-block: keeps
|
|
118
|
+
* the peer's public key registered with the interface but blocks all
|
|
119
|
+
* routing to/from it).
|
|
120
|
+
*/
|
|
121
|
+
removeAllowedIPs(peer: FederationNode, pubkey: string, reason?: string): WgCommand;
|
|
122
|
+
/**
|
|
123
|
+
* Phase 3 hook — peer reactivated. Restore the AllowedIPs slice that
|
|
124
|
+
* was active before suspension. Returns null if the peer was never
|
|
125
|
+
* suspended (idempotent).
|
|
126
|
+
*/
|
|
127
|
+
restoreAllowedIPs(peer: FederationNode, meshIP: string, pubkey: string): WgCommand | null;
|
|
128
|
+
/**
|
|
129
|
+
* Phase 3 hook — peer EVICTED. Terminal removal from the mesh; the
|
|
130
|
+
* peer's `[Peer]` block is dropped on next config rebuild and an
|
|
131
|
+
* immediate `wg set <iface> peer <pk> remove` is emitted to flush
|
|
132
|
+
* runtime state without a config reload.
|
|
133
|
+
*/
|
|
134
|
+
removePeer(peer: FederationNode, pubkey: string, reason?: string): WgCommand;
|
|
135
|
+
/** Summarize the mesh state for `federation_wg_status` (Phase 6) and audit. */
|
|
136
|
+
summarize(peers: readonly FederationNode[]): readonly WgPeerSummary[];
|
|
137
|
+
/**
|
|
138
|
+
* Defense-in-depth: validate that all bits we splice into a shell
|
|
139
|
+
* command are alphanumeric / base64 / WG-allowed chars. Refuses the
|
|
140
|
+
* command rather than ship a substring that might escape its slot.
|
|
141
|
+
*/
|
|
142
|
+
private formatCmd;
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=wg-mesh-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wg-mesh-service.d.ts","sourceRoot":"","sources":["../../../src/domain/services/wg-mesh-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-111 Phase 2 — WgMeshService.
|
|
3
|
+
*
|
|
4
|
+
* Pure-projection service: takes the federation peer registry + local
|
|
5
|
+
* WG identity and produces (a) a `wg-quick`-compatible config string,
|
|
6
|
+
* (b) per-peer `wg set` commands the operator runs to converge an
|
|
7
|
+
* already-running interface, and (c) the AllowedIPs slice that maps to
|
|
8
|
+
* each peer's trust level.
|
|
9
|
+
*
|
|
10
|
+
* Deliberately does NOT shell out. Bringing up a network interface
|
|
11
|
+
* requires root and modifies system state — per CLAUDE.md's
|
|
12
|
+
* destructive-actions guidance the service emits the commands; the
|
|
13
|
+
* operator (or a thin shell wrapper they audit) runs them.
|
|
14
|
+
*
|
|
15
|
+
* Phase 3 (breaker integration) consumes this service: peer state
|
|
16
|
+
* transitions invoke removeAllowedIPs/removePeer/restoreAllowedIPs,
|
|
17
|
+
* which produce commands without side effects.
|
|
18
|
+
*/
|
|
19
|
+
import { TrustLevel, getTrustLevelLabel } from '../entities/trust-level.js';
|
|
20
|
+
import { DEFAULT_MESH_SUBNET } from '../value-objects/wg-config.js';
|
|
21
|
+
/**
|
|
22
|
+
* Trust-level → reachability. ADR-111's `WG_NETWORK_GATES`.
|
|
23
|
+
*
|
|
24
|
+
* Note: WireGuard's `AllowedIPs` is L3 routing, not L4 ACL — these port
|
|
25
|
+
* rules describe what the L4 firewall (Phase 4: nftables/pf) should
|
|
26
|
+
* enforce. v1 (this phase) only produces the rules; Phase 4 projects
|
|
27
|
+
* them into kernel firewall syntax. Until then, callers using v1
|
|
28
|
+
* fall back to the simpler "AllowedIPs = peer's mesh IP" model (option
|
|
29
|
+
* (b) in the ADR — app-layer auth carries the access decision).
|
|
30
|
+
*/
|
|
31
|
+
export const WG_NETWORK_GATES = {
|
|
32
|
+
[TrustLevel.UNTRUSTED]: [],
|
|
33
|
+
[TrustLevel.VERIFIED]: [
|
|
34
|
+
{ proto: 'tcp', port: 9100 },
|
|
35
|
+
],
|
|
36
|
+
[TrustLevel.ATTESTED]: [
|
|
37
|
+
{ proto: 'tcp', port: 9100 },
|
|
38
|
+
{ proto: 'tcp', portRange: [9101, 9199] },
|
|
39
|
+
],
|
|
40
|
+
[TrustLevel.TRUSTED]: [
|
|
41
|
+
{ proto: 'tcp', port: 9100 },
|
|
42
|
+
{ proto: 'tcp', portRange: [9101, 9199] },
|
|
43
|
+
{ proto: 'tcp', port: 22 },
|
|
44
|
+
{ proto: 'tcp', portRange: [80, 443] },
|
|
45
|
+
],
|
|
46
|
+
[TrustLevel.PRIVILEGED]: [
|
|
47
|
+
{ proto: 'all' },
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
/**
|
|
51
|
+
* Minimum trust level whose peers get a `[Peer]` block in the WG config.
|
|
52
|
+
* UNTRUSTED stays out of the mesh entirely — it's the explicit drop bucket.
|
|
53
|
+
*/
|
|
54
|
+
export const WG_MIN_MESH_TRUST = TrustLevel.VERIFIED;
|
|
55
|
+
const DEFAULT_INTERFACE = 'ruflo-fed';
|
|
56
|
+
const DEFAULT_LISTEN_PORT = 51820;
|
|
57
|
+
export class WgMeshService {
|
|
58
|
+
interfaceName;
|
|
59
|
+
listenPort;
|
|
60
|
+
meshSubnet;
|
|
61
|
+
localKey = null;
|
|
62
|
+
localMeshIP = null;
|
|
63
|
+
/** Per-peer AllowedIPs after the last applyTrustLevelToAllowedIPs() call. Drives restore from breaker. */
|
|
64
|
+
lastAppliedAllowedIPs = new Map();
|
|
65
|
+
/** Peer-pubkey → suspended flag for breaker integration. */
|
|
66
|
+
suspended = new Set();
|
|
67
|
+
/** Peer-pubkey → evicted flag. */
|
|
68
|
+
evicted = new Set();
|
|
69
|
+
constructor(config = {}) {
|
|
70
|
+
this.interfaceName = config.interfaceName ?? DEFAULT_INTERFACE;
|
|
71
|
+
this.listenPort = config.listenPort ?? DEFAULT_LISTEN_PORT;
|
|
72
|
+
this.meshSubnet = config.meshSubnet ?? DEFAULT_MESH_SUBNET;
|
|
73
|
+
}
|
|
74
|
+
/** Bind the local WG identity. Required before buildInterfaceConfig(). */
|
|
75
|
+
setLocalIdentity(key, meshIP) {
|
|
76
|
+
this.localKey = key;
|
|
77
|
+
this.localMeshIP = meshIP;
|
|
78
|
+
}
|
|
79
|
+
getInterfaceName() {
|
|
80
|
+
return this.interfaceName;
|
|
81
|
+
}
|
|
82
|
+
getMeshSubnet() {
|
|
83
|
+
return this.meshSubnet;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Build a `wg-quick`-compatible config string from current peers.
|
|
87
|
+
*
|
|
88
|
+
* Peers below WG_MIN_MESH_TRUST (UNTRUSTED) are excluded entirely.
|
|
89
|
+
* Suspended peers stay in the config but with `AllowedIPs =` empty
|
|
90
|
+
* (soft-block). Evicted peers are dropped completely.
|
|
91
|
+
*
|
|
92
|
+
* Operator writes this to `/etc/wireguard/<interface>.conf` and runs
|
|
93
|
+
* `wg-quick up <interface>`.
|
|
94
|
+
*/
|
|
95
|
+
buildInterfaceConfig(peers) {
|
|
96
|
+
if (!this.localKey || !this.localMeshIP) {
|
|
97
|
+
throw new Error('WgMeshService.buildInterfaceConfig: local identity not set; call setLocalIdentity() first');
|
|
98
|
+
}
|
|
99
|
+
const lines = [];
|
|
100
|
+
lines.push('# Generated by ruflo federation plugin — ADR-111 Phase 2.');
|
|
101
|
+
lines.push('# Operator MUST review before `wg-quick up`. Trust-graded port');
|
|
102
|
+
lines.push('# rules (WG_NETWORK_GATES) are not enforced here — Phase 4 will');
|
|
103
|
+
lines.push('# project them into nftables/pf. v1 uses mesh-IP isolation only.');
|
|
104
|
+
lines.push('[Interface]');
|
|
105
|
+
lines.push(`PrivateKey = ${this.localKey.privateKey}`);
|
|
106
|
+
lines.push(`Address = ${this.localMeshIP}`);
|
|
107
|
+
lines.push(`ListenPort = ${this.listenPort}`);
|
|
108
|
+
lines.push('');
|
|
109
|
+
for (const peer of peers) {
|
|
110
|
+
if (peer.trustLevel < WG_MIN_MESH_TRUST)
|
|
111
|
+
continue;
|
|
112
|
+
const meshIP = peer.metadata.wgMeshIP;
|
|
113
|
+
const wgPubkey = peer.metadata.wgPublicKey;
|
|
114
|
+
const endpoint = peer.metadata.wgEndpoint;
|
|
115
|
+
if (!meshIP || !wgPubkey || !endpoint)
|
|
116
|
+
continue;
|
|
117
|
+
if (this.evicted.has(wgPubkey))
|
|
118
|
+
continue;
|
|
119
|
+
const allowed = this.suspended.has(wgPubkey) ? '' : this.computeAllowedIPs(peer, meshIP).join(', ');
|
|
120
|
+
lines.push(`# Peer ${peer.nodeId} — trust=${getTrustLevelLabel(peer.trustLevel)}${this.suspended.has(wgPubkey) ? ' (SUSPENDED)' : ''}`);
|
|
121
|
+
lines.push('[Peer]');
|
|
122
|
+
lines.push(`PublicKey = ${wgPubkey}`);
|
|
123
|
+
lines.push(`Endpoint = ${endpoint}`);
|
|
124
|
+
lines.push(`AllowedIPs = ${allowed}`);
|
|
125
|
+
lines.push('');
|
|
126
|
+
}
|
|
127
|
+
return lines.join('\n');
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Compute the AllowedIPs slice for a peer at its current trust level.
|
|
131
|
+
* v1: each peer gets its own /32 mesh IP. Phase 4 will narrow this
|
|
132
|
+
* further via firewall rules; v1 keeps L3 broad and relies on the app
|
|
133
|
+
* layer + trust gates for access decisions.
|
|
134
|
+
*/
|
|
135
|
+
computeAllowedIPs(peer, meshIP) {
|
|
136
|
+
if (peer.trustLevel === TrustLevel.UNTRUSTED)
|
|
137
|
+
return [];
|
|
138
|
+
const ips = [meshIP];
|
|
139
|
+
this.lastAppliedAllowedIPs.set(peer.nodeId, ips);
|
|
140
|
+
return ips;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Apply trust level → AllowedIPs as a `wg set` command for an
|
|
144
|
+
* already-running interface. Used when a peer joins or its trust level
|
|
145
|
+
* changes without needing a full config rewrite.
|
|
146
|
+
*/
|
|
147
|
+
applyTrustLevelToAllowedIPs(peer, meshIP, pubkey) {
|
|
148
|
+
const ips = this.computeAllowedIPs(peer, meshIP);
|
|
149
|
+
return {
|
|
150
|
+
verb: 'set-allowed-ips',
|
|
151
|
+
peerPublicKey: pubkey,
|
|
152
|
+
cmd: this.formatCmd(`peer ${pubkey} allowed-ips ${ips.join(',')}`),
|
|
153
|
+
rationale: `apply AllowedIPs for ${peer.nodeId} at trust=${getTrustLevelLabel(peer.trustLevel)}`,
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Phase 3 hook — peer SUSPENDED. Clear AllowedIPs (soft-block: keeps
|
|
158
|
+
* the peer's public key registered with the interface but blocks all
|
|
159
|
+
* routing to/from it).
|
|
160
|
+
*/
|
|
161
|
+
removeAllowedIPs(peer, pubkey, reason) {
|
|
162
|
+
this.suspended.add(pubkey);
|
|
163
|
+
return {
|
|
164
|
+
verb: 'remove-allowed-ips',
|
|
165
|
+
peerPublicKey: pubkey,
|
|
166
|
+
cmd: this.formatCmd(`peer ${pubkey} allowed-ips ""`),
|
|
167
|
+
rationale: `SUSPEND ${peer.nodeId}${reason ? ` (${reason})` : ''} — clear AllowedIPs (soft-block)`,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Phase 3 hook — peer reactivated. Restore the AllowedIPs slice that
|
|
172
|
+
* was active before suspension. Returns null if the peer was never
|
|
173
|
+
* suspended (idempotent).
|
|
174
|
+
*/
|
|
175
|
+
restoreAllowedIPs(peer, meshIP, pubkey) {
|
|
176
|
+
if (!this.suspended.has(pubkey))
|
|
177
|
+
return null;
|
|
178
|
+
this.suspended.delete(pubkey);
|
|
179
|
+
const previous = this.lastAppliedAllowedIPs.get(peer.nodeId);
|
|
180
|
+
const ips = previous && previous.length > 0 ? previous : this.computeAllowedIPs(peer, meshIP);
|
|
181
|
+
return {
|
|
182
|
+
verb: 'set-allowed-ips',
|
|
183
|
+
peerPublicKey: pubkey,
|
|
184
|
+
cmd: this.formatCmd(`peer ${pubkey} allowed-ips ${ips.join(',')}`),
|
|
185
|
+
rationale: `REACTIVATE ${peer.nodeId} — restore AllowedIPs ${ips.join(',')}`,
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Phase 3 hook — peer EVICTED. Terminal removal from the mesh; the
|
|
190
|
+
* peer's `[Peer]` block is dropped on next config rebuild and an
|
|
191
|
+
* immediate `wg set <iface> peer <pk> remove` is emitted to flush
|
|
192
|
+
* runtime state without a config reload.
|
|
193
|
+
*/
|
|
194
|
+
removePeer(peer, pubkey, reason) {
|
|
195
|
+
this.evicted.add(pubkey);
|
|
196
|
+
this.suspended.delete(pubkey);
|
|
197
|
+
this.lastAppliedAllowedIPs.delete(peer.nodeId);
|
|
198
|
+
return {
|
|
199
|
+
verb: 'remove-peer',
|
|
200
|
+
peerPublicKey: pubkey,
|
|
201
|
+
cmd: this.formatCmd(`peer ${pubkey} remove`),
|
|
202
|
+
rationale: `EVICT ${peer.nodeId}${reason ? ` (${reason})` : ''} — drop from mesh`,
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
/** Summarize the mesh state for `federation_wg_status` (Phase 6) and audit. */
|
|
206
|
+
summarize(peers) {
|
|
207
|
+
return peers
|
|
208
|
+
.filter(p => p.trustLevel >= WG_MIN_MESH_TRUST)
|
|
209
|
+
.map(peer => {
|
|
210
|
+
const meshIP = peer.metadata.wgMeshIP ?? '';
|
|
211
|
+
const pubkey = peer.metadata.wgPublicKey ?? '';
|
|
212
|
+
const endpoint = peer.metadata.wgEndpoint ?? '';
|
|
213
|
+
let state = 'active';
|
|
214
|
+
if (this.evicted.has(pubkey))
|
|
215
|
+
state = 'evicted';
|
|
216
|
+
else if (this.suspended.has(pubkey))
|
|
217
|
+
state = 'suspended';
|
|
218
|
+
return {
|
|
219
|
+
nodeId: peer.nodeId,
|
|
220
|
+
trustLevel: peer.trustLevel,
|
|
221
|
+
trustLabel: getTrustLevelLabel(peer.trustLevel),
|
|
222
|
+
meshIP,
|
|
223
|
+
endpoint,
|
|
224
|
+
publicKey: pubkey,
|
|
225
|
+
state,
|
|
226
|
+
allowedIPs: state === 'active' ? this.computeAllowedIPs(peer, meshIP) : [],
|
|
227
|
+
};
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Defense-in-depth: validate that all bits we splice into a shell
|
|
232
|
+
* command are alphanumeric / base64 / WG-allowed chars. Refuses the
|
|
233
|
+
* command rather than ship a substring that might escape its slot.
|
|
234
|
+
*/
|
|
235
|
+
formatCmd(args) {
|
|
236
|
+
// Allow: base64 pubkey chars [A-Za-z0-9+/=], IPv4 mesh chars
|
|
237
|
+
// [0-9./], plus a handful of fixed verbs. Reject everything else.
|
|
238
|
+
if (!/^[A-Za-z0-9+/=., "/-]*$/.test(args)) {
|
|
239
|
+
throw new Error(`WgMeshService.formatCmd: refusing arg with unsafe chars: ${JSON.stringify(args)}`);
|
|
240
|
+
}
|
|
241
|
+
return `wg set ${this.interfaceName} ${args}`;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=wg-mesh-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wg-mesh-service.js","sourceRoot":"","sources":["../../../src/domain/services/wg-mesh-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-111 Phase 1 — WireGuard configuration value objects.
|
|
3
|
+
*
|
|
4
|
+
* Pure types + deterministic helpers. No I/O, no shell calls. Used by
|
|
5
|
+
* WgMeshService (Phase 2) and surfaced in FederationManifest (Phase 1) so
|
|
6
|
+
* peers can publish their WG identity inside the same Ed25519-signed
|
|
7
|
+
* manifest that already carries their federation identity.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The WG section of a FederationManifest. Optional — present only when
|
|
11
|
+
* the local node has opted in via `config.wgMesh: true`.
|
|
12
|
+
*
|
|
13
|
+
* - publicKey is the X25519 public key in base64 (32-byte raw → 44 chars
|
|
14
|
+
* including '=' padding), exactly the format `wg-quick`/`wg setconf`
|
|
15
|
+
* accept. Never include the private key in the manifest.
|
|
16
|
+
* - endpoint is `host:port` reachable on UDP. May be a hostname (resolved
|
|
17
|
+
* by the consumer) or an IPv4/v6 literal. The port is WireGuard's, not
|
|
18
|
+
* federation's WS port — usually 51820.
|
|
19
|
+
* - meshIP is the assigned /32 inside the federation mesh subnet
|
|
20
|
+
* (10.50.0.0/16 by default). Stored as `a.b.c.d/32`.
|
|
21
|
+
*/
|
|
22
|
+
export interface WgManifestSection {
|
|
23
|
+
readonly publicKey: string;
|
|
24
|
+
readonly endpoint: string;
|
|
25
|
+
readonly meshIP: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* A locally-generated WG keypair. Kept entirely off the wire — `publicKey`
|
|
29
|
+
* is what gets published in the manifest; `privateKey` stays on disk
|
|
30
|
+
* (mode 0600) and in this in-memory object.
|
|
31
|
+
*/
|
|
32
|
+
export interface WgLocalKey {
|
|
33
|
+
readonly publicKey: string;
|
|
34
|
+
readonly privateKey: string;
|
|
35
|
+
readonly createdAt: string;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Default federation mesh subnet. RFC1918 private space outside the
|
|
39
|
+
* common LAN/k8s ranges and Tailscale's 100.64.0.0/10. Documented in
|
|
40
|
+
* the ADR. Birthday-collision probability stays under 1% up to ~36
|
|
41
|
+
* peers and under 50% at ~302 peers — within the v1 ≤50-peer target.
|
|
42
|
+
*/
|
|
43
|
+
export declare const DEFAULT_MESH_SUBNET = "10.50.0.0/16";
|
|
44
|
+
/**
|
|
45
|
+
* Generate an X25519 keypair in the format WireGuard accepts.
|
|
46
|
+
*
|
|
47
|
+
* WireGuard keys are 32 raw bytes encoded base64 (44 chars with '='
|
|
48
|
+
* padding). Node's `generateKeyPairSync('x25519')` returns PKCS8/SPKI
|
|
49
|
+
* DER envelopes — we extract the trailing 32 bytes which are the raw
|
|
50
|
+
* key material (the DER prefix is constant for X25519).
|
|
51
|
+
*
|
|
52
|
+
* No new dependencies: Node 18+ has X25519 support in core crypto.
|
|
53
|
+
*/
|
|
54
|
+
export declare function generateWgKeyPair(): WgLocalKey;
|
|
55
|
+
/**
|
|
56
|
+
* Derive a deterministic mesh IP for `nodeId` inside `subnet`.
|
|
57
|
+
*
|
|
58
|
+
* Strategy: sha256(nodeId) → top bytes interpreted as host portion of the
|
|
59
|
+
* subnet, clamped to avoid the network address (.0) and broadcast (.255)
|
|
60
|
+
* of any /24 inside the subnet. This is collision-resistant in the
|
|
61
|
+
* birthday-paradox sense — see ADR for thresholds.
|
|
62
|
+
*
|
|
63
|
+
* `usedIPs` (when provided) gives previously-assigned IPs in the mesh.
|
|
64
|
+
* If the derived IP is already taken, the function probes `nodeId + '\x00'`,
|
|
65
|
+
* `nodeId + '\x01'`, … until a free slot is found. Bounded to 1024 probes;
|
|
66
|
+
* exceeding that means the subnet is functionally exhausted and the caller
|
|
67
|
+
* should jump to a larger range (see ADR `10.50.0.0/12` recommendation).
|
|
68
|
+
*/
|
|
69
|
+
export declare function deriveMeshIP(nodeId: string, subnet?: string, usedIPs?: ReadonlySet<string>): string;
|
|
70
|
+
//# sourceMappingURL=wg-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wg-config.d.ts","sourceRoot":"","sources":["../../../src/domain/value-objects/wg-config.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,UAAU,CAgB9C;AAuBD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,MAA4B,EACpC,OAAO,GAAE,WAAW,CAAC,MAAM,CAAa,GACvC,MAAM,CAsBR"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ADR-111 Phase 1 — WireGuard configuration value objects.
|
|
3
|
+
*
|
|
4
|
+
* Pure types + deterministic helpers. No I/O, no shell calls. Used by
|
|
5
|
+
* WgMeshService (Phase 2) and surfaced in FederationManifest (Phase 1) so
|
|
6
|
+
* peers can publish their WG identity inside the same Ed25519-signed
|
|
7
|
+
* manifest that already carries their federation identity.
|
|
8
|
+
*/
|
|
9
|
+
import { createHash, generateKeyPairSync } from 'node:crypto';
|
|
10
|
+
/**
|
|
11
|
+
* Default federation mesh subnet. RFC1918 private space outside the
|
|
12
|
+
* common LAN/k8s ranges and Tailscale's 100.64.0.0/10. Documented in
|
|
13
|
+
* the ADR. Birthday-collision probability stays under 1% up to ~36
|
|
14
|
+
* peers and under 50% at ~302 peers — within the v1 ≤50-peer target.
|
|
15
|
+
*/
|
|
16
|
+
export const DEFAULT_MESH_SUBNET = '10.50.0.0/16';
|
|
17
|
+
/**
|
|
18
|
+
* Generate an X25519 keypair in the format WireGuard accepts.
|
|
19
|
+
*
|
|
20
|
+
* WireGuard keys are 32 raw bytes encoded base64 (44 chars with '='
|
|
21
|
+
* padding). Node's `generateKeyPairSync('x25519')` returns PKCS8/SPKI
|
|
22
|
+
* DER envelopes — we extract the trailing 32 bytes which are the raw
|
|
23
|
+
* key material (the DER prefix is constant for X25519).
|
|
24
|
+
*
|
|
25
|
+
* No new dependencies: Node 18+ has X25519 support in core crypto.
|
|
26
|
+
*/
|
|
27
|
+
export function generateWgKeyPair() {
|
|
28
|
+
const { publicKey, privateKey } = generateKeyPairSync('x25519');
|
|
29
|
+
const privDer = privateKey.export({ format: 'der', type: 'pkcs8' });
|
|
30
|
+
const pubDer = publicKey.export({ format: 'der', type: 'spki' });
|
|
31
|
+
// The PKCS8 prefix for X25519 is 16 bytes, leaving 32 raw bytes.
|
|
32
|
+
// The SPKI prefix for X25519 is 12 bytes, leaving 32 raw bytes.
|
|
33
|
+
const privRaw = privDer.subarray(privDer.length - 32);
|
|
34
|
+
const pubRaw = pubDer.subarray(pubDer.length - 32);
|
|
35
|
+
if (privRaw.length !== 32 || pubRaw.length !== 32) {
|
|
36
|
+
throw new Error(`generateWgKeyPair: unexpected DER layout (priv=${privRaw.length}B pub=${pubRaw.length}B)`);
|
|
37
|
+
}
|
|
38
|
+
return {
|
|
39
|
+
publicKey: pubRaw.toString('base64'),
|
|
40
|
+
privateKey: privRaw.toString('base64'),
|
|
41
|
+
createdAt: new Date().toISOString(),
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Parse a `a.b.c.d/M` CIDR into a numeric base + mask-prefix-length.
|
|
46
|
+
* Limited to IPv4 — v1 of ADR-111 is IPv4-only inside the mesh.
|
|
47
|
+
*/
|
|
48
|
+
function parseCidr(cidr) {
|
|
49
|
+
const m = cidr.match(/^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\/(\d{1,2})$/);
|
|
50
|
+
if (!m)
|
|
51
|
+
throw new Error(`invalid CIDR: ${cidr}`);
|
|
52
|
+
const [, a, b, c, d, p] = m;
|
|
53
|
+
const octets = [a, b, c, d].map(Number);
|
|
54
|
+
const prefix = Number(p);
|
|
55
|
+
if (octets.some(o => o < 0 || o > 255) || prefix < 0 || prefix > 32) {
|
|
56
|
+
throw new Error(`out-of-range CIDR: ${cidr}`);
|
|
57
|
+
}
|
|
58
|
+
const base = ((octets[0] << 24) | (octets[1] << 16) | (octets[2] << 8) | octets[3]) >>> 0;
|
|
59
|
+
return { base, prefix };
|
|
60
|
+
}
|
|
61
|
+
function ipToString(n) {
|
|
62
|
+
return `${(n >>> 24) & 0xff}.${(n >>> 16) & 0xff}.${(n >>> 8) & 0xff}.${n & 0xff}`;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Derive a deterministic mesh IP for `nodeId` inside `subnet`.
|
|
66
|
+
*
|
|
67
|
+
* Strategy: sha256(nodeId) → top bytes interpreted as host portion of the
|
|
68
|
+
* subnet, clamped to avoid the network address (.0) and broadcast (.255)
|
|
69
|
+
* of any /24 inside the subnet. This is collision-resistant in the
|
|
70
|
+
* birthday-paradox sense — see ADR for thresholds.
|
|
71
|
+
*
|
|
72
|
+
* `usedIPs` (when provided) gives previously-assigned IPs in the mesh.
|
|
73
|
+
* If the derived IP is already taken, the function probes `nodeId + '\x00'`,
|
|
74
|
+
* `nodeId + '\x01'`, … until a free slot is found. Bounded to 1024 probes;
|
|
75
|
+
* exceeding that means the subnet is functionally exhausted and the caller
|
|
76
|
+
* should jump to a larger range (see ADR `10.50.0.0/12` recommendation).
|
|
77
|
+
*/
|
|
78
|
+
export function deriveMeshIP(nodeId, subnet = DEFAULT_MESH_SUBNET, usedIPs = new Set()) {
|
|
79
|
+
const { base, prefix } = parseCidr(subnet);
|
|
80
|
+
if (prefix > 30)
|
|
81
|
+
throw new Error(`subnet ${subnet} too small for mesh IPs`);
|
|
82
|
+
const hostBits = 32 - prefix;
|
|
83
|
+
const hostMask = hostBits >= 32 ? 0xffffffff : ((1 << hostBits) - 1) >>> 0;
|
|
84
|
+
const networkBase = (base & ~hostMask) >>> 0;
|
|
85
|
+
for (let probe = 0; probe < 1024; probe++) {
|
|
86
|
+
const input = probe === 0 ? nodeId : `${nodeId}\x00${probe}`;
|
|
87
|
+
const hash = createHash('sha256').update(input).digest();
|
|
88
|
+
// Use the first 4 bytes as the host portion.
|
|
89
|
+
const hashHost = ((hash[0] << 24) | (hash[1] << 16) | (hash[2] << 8) | hash[3]) >>> 0;
|
|
90
|
+
let candidate = (networkBase | (hashHost & hostMask)) >>> 0;
|
|
91
|
+
const lastOctet = candidate & 0xff;
|
|
92
|
+
// Avoid .0 (network) and .255 (broadcast) of each /24 slice. Cheap
|
|
93
|
+
// clamp: bump to .1 if landing on .0, or .254 if landing on .255.
|
|
94
|
+
if (lastOctet === 0)
|
|
95
|
+
candidate = (candidate | 1) >>> 0;
|
|
96
|
+
else if (lastOctet === 255)
|
|
97
|
+
candidate = (candidate & ~1) >>> 0;
|
|
98
|
+
const ip = `${ipToString(candidate)}/32`;
|
|
99
|
+
if (!usedIPs.has(ip))
|
|
100
|
+
return ip;
|
|
101
|
+
}
|
|
102
|
+
throw new Error(`deriveMeshIP: subnet ${subnet} exhausted after 1024 probes for ${nodeId}; jump to a wider range`);
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=wg-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wg-config.js","sourceRoot":"","sources":["../../../src/domain/value-objects/wg-config.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@claude-flow/plugin-agent-federation",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.14",
|
|
4
4
|
"description": "Cross-installation agent federation with zero-trust security, PII-gated data flow, and compliance-grade audit trails.",
|
|
5
5
|
"homepage": "https://github.com/ruvnet/ruflo",
|
|
6
6
|
"type": "module",
|