guardlink 1.0.0 → 1.1.0
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/CHANGELOG.md +28 -0
- package/README.md +14 -0
- package/dist/agents/config.d.ts +2 -0
- package/dist/agents/config.d.ts.map +1 -1
- package/dist/agents/config.js +1 -1
- package/dist/agents/config.js.map +1 -1
- package/dist/agents/prompts.d.ts +2 -2
- package/dist/agents/prompts.d.ts.map +1 -1
- package/dist/agents/prompts.js +223 -31
- package/dist/agents/prompts.js.map +1 -1
- package/dist/analyzer/sarif.js +1 -1
- package/dist/cli/index.js +2 -56
- package/dist/cli/index.js.map +1 -1
- package/dist/dashboard/data.d.ts.map +1 -1
- package/dist/dashboard/data.js +19 -12
- package/dist/dashboard/data.js.map +1 -1
- package/dist/dashboard/diagrams.d.ts.map +1 -1
- package/dist/dashboard/diagrams.js +310 -37
- package/dist/dashboard/diagrams.js.map +1 -1
- package/dist/dashboard/generate.d.ts.map +1 -1
- package/dist/dashboard/generate.js +21 -5
- package/dist/dashboard/generate.js.map +1 -1
- package/dist/init/picker.d.ts.map +1 -1
- package/dist/init/picker.js +2 -2
- package/dist/init/picker.js.map +1 -1
- package/dist/init/templates.js +1 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +8 -26
- package/dist/mcp/server.js.map +1 -1
- package/dist/parser/index.d.ts +1 -0
- package/dist/parser/index.d.ts.map +1 -1
- package/dist/parser/index.js +1 -0
- package/dist/parser/index.js.map +1 -1
- package/dist/parser/parse-line.js +3 -3
- package/dist/parser/parse-line.js.map +1 -1
- package/dist/parser/parse-project.js +1 -1
- package/dist/parser/validate.d.ts +19 -0
- package/dist/parser/validate.d.ts.map +1 -0
- package/dist/parser/validate.js +105 -0
- package/dist/parser/validate.js.map +1 -0
- package/dist/tui/commands.d.ts +1 -6
- package/dist/tui/commands.d.ts.map +1 -1
- package/dist/tui/commands.js +96 -221
- package/dist/tui/commands.js.map +1 -1
- package/dist/tui/config.d.ts +2 -0
- package/dist/tui/config.d.ts.map +1 -1
- package/dist/tui/config.js.map +1 -1
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +20 -24
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/input.d.ts +2 -2
- package/dist/tui/input.js +2 -2
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -10,11 +10,47 @@
|
|
|
10
10
|
function mid(s) {
|
|
11
11
|
return s.replace(/[^a-zA-Z0-9_]/g, '_');
|
|
12
12
|
}
|
|
13
|
-
/** Truncate long labels and sanitize for Mermaid (strip
|
|
13
|
+
/** Truncate long labels and sanitize for Mermaid (strip syntax-breaking characters) */
|
|
14
14
|
function label(s, max = 40) {
|
|
15
|
-
const clean = s.replace(/"/g, "'").replace(/[\[\]{}
|
|
15
|
+
const clean = s.replace(/"/g, "'").replace(/[\[\]{}()|`;]/g, '');
|
|
16
16
|
return clean.length > max ? clean.slice(0, max - 1) + '…' : clean;
|
|
17
17
|
}
|
|
18
|
+
/** Sanitize labels without truncation (for long edge text/mechanisms). */
|
|
19
|
+
function labelFull(s) {
|
|
20
|
+
return s.replace(/"/g, "'").replace(/[\[\]{}()|`;]/g, '');
|
|
21
|
+
}
|
|
22
|
+
/** Normalize a ref: strip leading # so that "#sqli" and "sqli" compare equal. */
|
|
23
|
+
function normalizeRef(ref) {
|
|
24
|
+
return ref.startsWith('#') ? ref.slice(1) : ref;
|
|
25
|
+
}
|
|
26
|
+
/** Heuristic icon for data-flow assets to make diagrams easier to scan. */
|
|
27
|
+
function assetIcon(name) {
|
|
28
|
+
const n = normalizeRef(name).toLowerCase();
|
|
29
|
+
if (/(user|client|browser|mobile|frontend|ui)/.test(n))
|
|
30
|
+
return '👤';
|
|
31
|
+
if (/(external|internet|partner|vendor|public|third[_-]?party)/.test(n))
|
|
32
|
+
return '🌐';
|
|
33
|
+
if (/(queue|topic|kafka|pubsub|amqp|broker|stream)/.test(n))
|
|
34
|
+
return '📨';
|
|
35
|
+
if (/(db|database|store|storage|bucket|cache|redis|s3|blob)/.test(n))
|
|
36
|
+
return '🗄️';
|
|
37
|
+
if (/(api|service|backend|server|worker|lambda|function|processor|gateway)/.test(n))
|
|
38
|
+
return '🖥️';
|
|
39
|
+
return '🧩';
|
|
40
|
+
}
|
|
41
|
+
/** Heuristic icon for flow mechanisms/protocols. */
|
|
42
|
+
function flowIcon(mechanism) {
|
|
43
|
+
const m = mechanism.toLowerCase();
|
|
44
|
+
if (/(https|tls|ssl|mtls|ssh)/.test(m))
|
|
45
|
+
return '🔐';
|
|
46
|
+
if (/(http|grpc|rest|graphql|websocket|ws|rpc)/.test(m))
|
|
47
|
+
return '🌐';
|
|
48
|
+
if (/(kafka|queue|amqp|pubsub|stream|event)/.test(m))
|
|
49
|
+
return '📨';
|
|
50
|
+
if (/(sql|db|database|redis|cache|s3|blob|file)/.test(m))
|
|
51
|
+
return '🗄️';
|
|
52
|
+
return '📡';
|
|
53
|
+
}
|
|
18
54
|
/**
|
|
19
55
|
* Diagram 1: Threat Model Graph
|
|
20
56
|
* Shows assets (boxes), threats (red), controls (green), and relationships.
|
|
@@ -23,15 +59,59 @@ export function generateThreatGraph(model) {
|
|
|
23
59
|
// Filter to critical+high severity threats to keep diagram readable
|
|
24
60
|
const highSevThreats = new Set();
|
|
25
61
|
const sevMap = new Map();
|
|
62
|
+
const threatLabelMap = new Map();
|
|
63
|
+
const sevRank = { critical: 0, p0: 0, high: 1, p1: 1, medium: 2, p2: 2, low: 3, p3: 3, unset: 4 };
|
|
64
|
+
const setThreatSeverity = (ref, severity) => {
|
|
65
|
+
if (!ref || !severity)
|
|
66
|
+
return;
|
|
67
|
+
const norm = normalizeRef(ref);
|
|
68
|
+
const current = sevMap.get(ref) || sevMap.get(norm);
|
|
69
|
+
if (!current || (sevRank[severity] ?? 4) < (sevRank[current] ?? 4)) {
|
|
70
|
+
sevMap.set(ref, severity);
|
|
71
|
+
sevMap.set(norm, severity);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
const setThreatLabel = (ref, display) => {
|
|
75
|
+
if (!ref || !display)
|
|
76
|
+
return;
|
|
77
|
+
const norm = normalizeRef(ref);
|
|
78
|
+
const existing = threatLabelMap.get(ref) || threatLabelMap.get(norm);
|
|
79
|
+
// Prefer richer labels (e.g., canonical threat name) over terse id-like refs.
|
|
80
|
+
if (!existing || display.length > existing.length) {
|
|
81
|
+
threatLabelMap.set(ref, display);
|
|
82
|
+
threatLabelMap.set(norm, display);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
26
85
|
for (const t of model.threats) {
|
|
27
86
|
const s = (t.severity || '').toLowerCase();
|
|
28
|
-
|
|
29
|
-
|
|
87
|
+
if (t.id) {
|
|
88
|
+
setThreatSeverity(`#${t.id}`, s);
|
|
89
|
+
setThreatSeverity(t.id, s);
|
|
90
|
+
setThreatLabel(`#${t.id}`, t.name);
|
|
91
|
+
setThreatLabel(t.id, t.name);
|
|
92
|
+
}
|
|
93
|
+
setThreatSeverity(t.name, s);
|
|
94
|
+
setThreatLabel(t.name, t.name);
|
|
30
95
|
if (s === 'critical' || s === 'p0' || s === 'high' || s === 'p1') {
|
|
31
|
-
|
|
96
|
+
if (t.id) {
|
|
97
|
+
highSevThreats.add(`#${t.id}`);
|
|
98
|
+
highSevThreats.add(t.id);
|
|
99
|
+
}
|
|
32
100
|
highSevThreats.add(t.name);
|
|
101
|
+
highSevThreats.add(normalizeRef(t.name));
|
|
33
102
|
}
|
|
34
103
|
}
|
|
104
|
+
// Exposure-level severity can exist even when a threat definition doesn't.
|
|
105
|
+
for (const e of model.exposures) {
|
|
106
|
+
const s = (e.severity || '').toLowerCase();
|
|
107
|
+
setThreatSeverity(e.threat, s);
|
|
108
|
+
setThreatLabel(e.threat, e.threat.replace('#', ''));
|
|
109
|
+
if (s === 'critical' || s === 'p0' || s === 'high' || s === 'p1') {
|
|
110
|
+
highSevThreats.add(e.threat);
|
|
111
|
+
highSevThreats.add(normalizeRef(e.threat));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
const isHighThreat = (ref) => highSevThreats.has(ref) || highSevThreats.has(normalizeRef(ref));
|
|
35
115
|
// If very many threats, filter to critical+high only
|
|
36
116
|
const totalThreats = new Set();
|
|
37
117
|
for (const e of model.exposures)
|
|
@@ -43,13 +123,13 @@ export function generateThreatGraph(model) {
|
|
|
43
123
|
const usedControls = new Set();
|
|
44
124
|
const edges = new Set();
|
|
45
125
|
for (const e of model.exposures) {
|
|
46
|
-
if (filterHigh && !
|
|
126
|
+
if (filterHigh && !isHighThreat(e.threat))
|
|
47
127
|
continue;
|
|
48
128
|
usedAssets.add(e.asset);
|
|
49
129
|
usedThreats.add(e.threat);
|
|
50
130
|
}
|
|
51
131
|
for (const m of model.mitigations) {
|
|
52
|
-
if (filterHigh && !
|
|
132
|
+
if (filterHigh && !isHighThreat(m.threat))
|
|
53
133
|
continue;
|
|
54
134
|
usedAssets.add(m.asset);
|
|
55
135
|
usedThreats.add(m.threat);
|
|
@@ -57,20 +137,133 @@ export function generateThreatGraph(model) {
|
|
|
57
137
|
usedControls.add(m.control);
|
|
58
138
|
}
|
|
59
139
|
for (const a of model.acceptances) {
|
|
60
|
-
if (filterHigh && !
|
|
140
|
+
if (filterHigh && !isHighThreat(a.threat))
|
|
61
141
|
continue;
|
|
62
142
|
usedAssets.add(a.asset);
|
|
63
143
|
usedThreats.add(a.threat);
|
|
64
144
|
}
|
|
65
|
-
|
|
145
|
+
for (const t of model.transfers) {
|
|
146
|
+
if (filterHigh && !isHighThreat(t.threat))
|
|
147
|
+
continue;
|
|
148
|
+
usedAssets.add(t.source);
|
|
149
|
+
usedAssets.add(t.target);
|
|
150
|
+
usedThreats.add(t.threat);
|
|
151
|
+
}
|
|
152
|
+
for (const v of model.validations) {
|
|
153
|
+
usedAssets.add(v.asset);
|
|
154
|
+
usedControls.add(v.control);
|
|
155
|
+
}
|
|
156
|
+
// ── Build data-classification map (asset → classification badges) ──
|
|
157
|
+
const dataClassMap = new Map();
|
|
158
|
+
for (const h of model.data_handling) {
|
|
159
|
+
const norm = normalizeRef(h.asset);
|
|
160
|
+
if (!dataClassMap.has(h.asset))
|
|
161
|
+
dataClassMap.set(h.asset, []);
|
|
162
|
+
dataClassMap.get(h.asset).push(h.classification.toUpperCase());
|
|
163
|
+
if (norm !== h.asset) {
|
|
164
|
+
if (!dataClassMap.has(norm))
|
|
165
|
+
dataClassMap.set(norm, []);
|
|
166
|
+
dataClassMap.get(norm).push(h.classification.toUpperCase());
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// ── Build ownership map (asset → owner) ──
|
|
170
|
+
const ownerMap = new Map();
|
|
171
|
+
for (const o of model.ownership) {
|
|
172
|
+
ownerMap.set(o.asset, o.owner);
|
|
173
|
+
ownerMap.set(normalizeRef(o.asset), o.owner);
|
|
174
|
+
}
|
|
175
|
+
// ── Build external-refs map (threat → CWE/refs) ──
|
|
176
|
+
const extRefMap = new Map();
|
|
177
|
+
const addExtRefs = (ref, refs) => {
|
|
178
|
+
if (!refs || refs.length === 0)
|
|
179
|
+
return;
|
|
180
|
+
const norm = normalizeRef(ref);
|
|
181
|
+
for (const r of [ref, norm]) {
|
|
182
|
+
if (!extRefMap.has(r))
|
|
183
|
+
extRefMap.set(r, []);
|
|
184
|
+
for (const er of refs) {
|
|
185
|
+
if (!extRefMap.get(r).includes(er))
|
|
186
|
+
extRefMap.get(r).push(er);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
};
|
|
190
|
+
for (const t of model.threats) {
|
|
191
|
+
if (t.external_refs.length > 0) {
|
|
192
|
+
addExtRefs(t.name, t.external_refs);
|
|
193
|
+
if (t.id) {
|
|
194
|
+
addExtRefs(`#${t.id}`, t.external_refs);
|
|
195
|
+
addExtRefs(t.id, t.external_refs);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
for (const e of model.exposures) {
|
|
200
|
+
if (e.external_refs.length > 0)
|
|
201
|
+
addExtRefs(e.threat, e.external_refs);
|
|
202
|
+
}
|
|
203
|
+
// ── Determine trust-boundary groupings for used assets ──
|
|
204
|
+
const assetZone = new Map(); // asset → zone id
|
|
205
|
+
const zoneAssets = new Map(); // zone id → assets
|
|
206
|
+
const zoneLabel = new Map(); // zone id → label
|
|
207
|
+
let zIdx = 0;
|
|
208
|
+
for (const b of model.boundaries) {
|
|
209
|
+
// Only include boundaries where at least one side is a used asset
|
|
210
|
+
const aUsed = usedAssets.has(b.asset_a) || usedAssets.has(normalizeRef(b.asset_a));
|
|
211
|
+
const bUsed = usedAssets.has(b.asset_b) || usedAssets.has(normalizeRef(b.asset_b));
|
|
212
|
+
if (!aUsed && !bUsed)
|
|
213
|
+
continue;
|
|
214
|
+
// Assign each side to a zone if not already assigned
|
|
215
|
+
for (const side of [b.asset_a, b.asset_b]) {
|
|
216
|
+
if (!assetZone.has(side) && !assetZone.has(normalizeRef(side))) {
|
|
217
|
+
const zId = `TZ${zIdx++}`;
|
|
218
|
+
assetZone.set(side, zId);
|
|
219
|
+
assetZone.set(normalizeRef(side), zId);
|
|
220
|
+
zoneAssets.set(zId, new Set([side]));
|
|
221
|
+
zoneLabel.set(zId, side);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
// ── Emit trust-boundary subgraphs ──
|
|
226
|
+
const inSubgraph = new Set();
|
|
227
|
+
for (const [zId, members] of zoneAssets) {
|
|
228
|
+
const rep = zoneLabel.get(zId) || [...members][0];
|
|
229
|
+
lines.push(` subgraph ${zId}["🧱 ${label(rep)}"]`);
|
|
230
|
+
for (const m of members) {
|
|
231
|
+
if (!usedAssets.has(m) && !usedAssets.has(normalizeRef(m)))
|
|
232
|
+
continue;
|
|
233
|
+
const badges = dataClassMap.get(m) || dataClassMap.get(normalizeRef(m));
|
|
234
|
+
const owner = ownerMap.get(m) || ownerMap.get(normalizeRef(m));
|
|
235
|
+
let suffix = '';
|
|
236
|
+
if (badges && badges.length > 0)
|
|
237
|
+
suffix += ` [${badges.join(', ')}]`;
|
|
238
|
+
if (owner)
|
|
239
|
+
suffix += ` (${label(owner, 15)})`;
|
|
240
|
+
lines.push(` ${mid(m)}["🔷 ${label(m)}${suffix}"]`);
|
|
241
|
+
inSubgraph.add(m);
|
|
242
|
+
inSubgraph.add(normalizeRef(m));
|
|
243
|
+
}
|
|
244
|
+
lines.push(' end');
|
|
245
|
+
}
|
|
246
|
+
// ── Asset nodes (not already in a subgraph) ──
|
|
66
247
|
for (const a of usedAssets) {
|
|
67
|
-
|
|
248
|
+
if (inSubgraph.has(a) || inSubgraph.has(normalizeRef(a)))
|
|
249
|
+
continue;
|
|
250
|
+
const badges = dataClassMap.get(a) || dataClassMap.get(normalizeRef(a));
|
|
251
|
+
const owner = ownerMap.get(a) || ownerMap.get(normalizeRef(a));
|
|
252
|
+
let suffix = '';
|
|
253
|
+
if (badges && badges.length > 0)
|
|
254
|
+
suffix += ` [${badges.join(', ')}]`;
|
|
255
|
+
if (owner)
|
|
256
|
+
suffix += ` (${label(owner, 15)})`;
|
|
257
|
+
lines.push(` ${mid(a)}["🔷 ${label(a)}${suffix}"]`);
|
|
68
258
|
}
|
|
69
|
-
// Threat nodes
|
|
259
|
+
// Threat nodes (with CWE/external-ref badges)
|
|
70
260
|
for (const t of usedThreats) {
|
|
71
|
-
const sev = sevMap.get(t) || '';
|
|
261
|
+
const sev = sevMap.get(t) || sevMap.get(normalizeRef(t)) || '';
|
|
262
|
+
const display = threatLabelMap.get(t) || threatLabelMap.get(normalizeRef(t)) || t.replace('#', '');
|
|
72
263
|
const icon = sev === 'critical' || sev === 'p0' ? '🔴' : sev === 'high' || sev === 'p1' ? '🟠' : '🟡';
|
|
73
|
-
|
|
264
|
+
const refs = extRefMap.get(t) || extRefMap.get(normalizeRef(t));
|
|
265
|
+
const refSuffix = refs && refs.length > 0 ? ` (${refs.slice(0, 2).join(', ')})` : '';
|
|
266
|
+
lines.push(` ${mid(t)}["${icon} ${label(display, 35)}${refSuffix}"]:::threat`);
|
|
74
267
|
}
|
|
75
268
|
// Control nodes
|
|
76
269
|
for (const c of usedControls) {
|
|
@@ -78,7 +271,7 @@ export function generateThreatGraph(model) {
|
|
|
78
271
|
}
|
|
79
272
|
// Exposure edges (deduplicated)
|
|
80
273
|
for (const e of model.exposures) {
|
|
81
|
-
if (filterHigh && !
|
|
274
|
+
if (filterHigh && !isHighThreat(e.threat))
|
|
82
275
|
continue;
|
|
83
276
|
const key = `${mid(e.asset)}->exp->${mid(e.threat)}`;
|
|
84
277
|
if (!edges.has(key)) {
|
|
@@ -88,7 +281,7 @@ export function generateThreatGraph(model) {
|
|
|
88
281
|
}
|
|
89
282
|
// Mitigation edges
|
|
90
283
|
for (const m of model.mitigations) {
|
|
91
|
-
if (filterHigh && !
|
|
284
|
+
if (filterHigh && !isHighThreat(m.threat))
|
|
92
285
|
continue;
|
|
93
286
|
if (m.control) {
|
|
94
287
|
const k1 = `${mid(m.control)}->mit->${mid(m.threat)}`;
|
|
@@ -102,10 +295,17 @@ export function generateThreatGraph(model) {
|
|
|
102
295
|
lines.push(` ${mid(m.control)} -.- ${mid(m.asset)}`);
|
|
103
296
|
}
|
|
104
297
|
}
|
|
298
|
+
else {
|
|
299
|
+
const key = `${mid(m.asset)}->mit->${mid(m.threat)}`;
|
|
300
|
+
if (!edges.has(key)) {
|
|
301
|
+
edges.add(key);
|
|
302
|
+
lines.push(` ${mid(m.asset)} -. mitigates .-> ${mid(m.threat)}`);
|
|
303
|
+
}
|
|
304
|
+
}
|
|
105
305
|
}
|
|
106
306
|
// Acceptance edges
|
|
107
307
|
for (const a of model.acceptances) {
|
|
108
|
-
if (filterHigh && !
|
|
308
|
+
if (filterHigh && !isHighThreat(a.threat))
|
|
109
309
|
continue;
|
|
110
310
|
const key = `${mid(a.asset)}->acc->${mid(a.threat)}`;
|
|
111
311
|
if (!edges.has(key)) {
|
|
@@ -113,6 +313,55 @@ export function generateThreatGraph(model) {
|
|
|
113
313
|
lines.push(` ${mid(a.asset)} -- accepts --> ${mid(a.threat)}`);
|
|
114
314
|
}
|
|
115
315
|
}
|
|
316
|
+
// Transfer edges (risk moved between parties for a specific threat)
|
|
317
|
+
for (const t of model.transfers) {
|
|
318
|
+
if (filterHigh && !isHighThreat(t.threat))
|
|
319
|
+
continue;
|
|
320
|
+
const threatDisplay = threatLabelMap.get(t.threat) || threatLabelMap.get(normalizeRef(t.threat)) || t.threat.replace('#', '');
|
|
321
|
+
const key = `${mid(t.source)}->xfer->${mid(t.target)}::${mid(t.threat)}`;
|
|
322
|
+
if (!edges.has(key)) {
|
|
323
|
+
edges.add(key);
|
|
324
|
+
lines.push(` ${mid(t.source)} -- "transfers risk: ${label(threatDisplay, 26)}" --> ${mid(t.target)}`);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
// Validation edges (controls validating assets)
|
|
328
|
+
for (const v of model.validations) {
|
|
329
|
+
const key = `${mid(v.control)}->val->${mid(v.asset)}`;
|
|
330
|
+
if (!edges.has(key)) {
|
|
331
|
+
edges.add(key);
|
|
332
|
+
lines.push(` ${mid(v.control)} -. validates .-> ${mid(v.asset)}`);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// Data-flow edges (only between assets already in the graph)
|
|
336
|
+
for (const f of model.flows) {
|
|
337
|
+
const srcIn = usedAssets.has(f.source) || usedAssets.has(normalizeRef(f.source));
|
|
338
|
+
const tgtIn = usedAssets.has(f.target) || usedAssets.has(normalizeRef(f.target));
|
|
339
|
+
if (!srcIn || !tgtIn)
|
|
340
|
+
continue;
|
|
341
|
+
const key = `${mid(f.source)}->flow->${mid(f.target)}`;
|
|
342
|
+
if (!edges.has(key)) {
|
|
343
|
+
edges.add(key);
|
|
344
|
+
if (f.mechanism) {
|
|
345
|
+
lines.push(` ${mid(f.source)} -- "${flowIcon(f.mechanism)} ${label(f.mechanism, 22)}" --> ${mid(f.target)}`);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
lines.push(` ${mid(f.source)} --> ${mid(f.target)}`);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
// Trust-boundary crossing edges (dashed purple line between zones)
|
|
353
|
+
for (const b of model.boundaries) {
|
|
354
|
+
const aIn = usedAssets.has(b.asset_a) || usedAssets.has(normalizeRef(b.asset_a));
|
|
355
|
+
const bIn = usedAssets.has(b.asset_b) || usedAssets.has(normalizeRef(b.asset_b));
|
|
356
|
+
if (!aIn || !bIn)
|
|
357
|
+
continue;
|
|
358
|
+
const key = `${mid(b.asset_a)}->boundary->${mid(b.asset_b)}`;
|
|
359
|
+
if (!edges.has(key)) {
|
|
360
|
+
edges.add(key);
|
|
361
|
+
const desc = b.description ? label(b.description, 26) : 'trust boundary';
|
|
362
|
+
lines.push(` ${mid(b.asset_a)} -.-|🧱 ${desc}| ${mid(b.asset_b)}`);
|
|
363
|
+
}
|
|
364
|
+
}
|
|
116
365
|
lines.push(' classDef threat fill:#991b1b,stroke:#ef4444,color:#fecaca');
|
|
117
366
|
lines.push(' classDef control fill:#065f46,stroke:#10b981,color:#a7f3d0');
|
|
118
367
|
return lines.join('\n');
|
|
@@ -124,28 +373,52 @@ export function generateThreatGraph(model) {
|
|
|
124
373
|
export function generateDataFlowDiagram(model) {
|
|
125
374
|
if (model.flows.length === 0)
|
|
126
375
|
return '';
|
|
127
|
-
const
|
|
128
|
-
|
|
129
|
-
|
|
376
|
+
const maxMechanismLen = model.flows.reduce((max, f) => {
|
|
377
|
+
const len = (f.mechanism || '').length;
|
|
378
|
+
return len > max ? len : max;
|
|
379
|
+
}, 0);
|
|
380
|
+
const spacingBoost = Math.max(0, Math.min(140, (maxMechanismLen - 24) * 3));
|
|
381
|
+
const nodeSpacing = 40 + Math.floor(spacingBoost * 0.4);
|
|
382
|
+
const rankSpacing = 50 + spacingBoost;
|
|
383
|
+
const lines = [
|
|
384
|
+
`%%{init: {"flowchart": {"nodeSpacing": ${nodeSpacing}, "rankSpacing": ${rankSpacing}, "curve": "basis"}}}%%`,
|
|
385
|
+
'graph LR',
|
|
386
|
+
];
|
|
387
|
+
// Collect boundary zones: each side of a boundary is a separate zone
|
|
388
|
+
// An asset may appear in multiple boundaries, so track zone membership
|
|
389
|
+
const assetZone = new Map(); // asset -> zone label
|
|
390
|
+
const zones = new Map(); // zone label -> members
|
|
391
|
+
const boundaryEdges = [];
|
|
392
|
+
let zIdx = 0;
|
|
130
393
|
for (const b of model.boundaries) {
|
|
131
|
-
const
|
|
132
|
-
if
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
394
|
+
const desc = b.description || b.id || `${b.asset_a}/${b.asset_b}`;
|
|
395
|
+
// Assign each side to its own zone if not already in one
|
|
396
|
+
if (!assetZone.has(b.asset_a)) {
|
|
397
|
+
const zoneLabel = `Z${zIdx++}`;
|
|
398
|
+
assetZone.set(b.asset_a, zoneLabel);
|
|
399
|
+
zones.set(zoneLabel, new Set([b.asset_a]));
|
|
400
|
+
}
|
|
401
|
+
if (!assetZone.has(b.asset_b)) {
|
|
402
|
+
const zoneLabel = `Z${zIdx++}`;
|
|
403
|
+
assetZone.set(b.asset_b, zoneLabel);
|
|
404
|
+
zones.set(zoneLabel, new Set([b.asset_b]));
|
|
405
|
+
}
|
|
406
|
+
boundaryEdges.push({ a: b.asset_a, b: b.asset_b, desc });
|
|
136
407
|
}
|
|
137
|
-
// Emit
|
|
408
|
+
// Emit zone subgraphs
|
|
138
409
|
const inBoundary = new Set();
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
lines.push(` subgraph B${bIdx}["🔒 ${label(desc, 50)}"]`);
|
|
410
|
+
for (const [zoneId, members] of zones) {
|
|
411
|
+
const representative = [...members][0];
|
|
412
|
+
lines.push(` subgraph ${zoneId}["🧱 Trust Zone · ${labelFull(representative)}"]`);
|
|
143
413
|
for (const m of members) {
|
|
144
|
-
lines.push(` ${mid(m)}["${
|
|
414
|
+
lines.push(` ${mid(m)}["${assetIcon(m)} ${labelFull(m)}"]`);
|
|
145
415
|
inBoundary.add(m);
|
|
146
416
|
}
|
|
147
417
|
lines.push(' end');
|
|
148
|
-
|
|
418
|
+
}
|
|
419
|
+
// Emit boundary edges between zones (thick dashed line)
|
|
420
|
+
for (const be of boundaryEdges) {
|
|
421
|
+
lines.push(` ${mid(be.a)} -.-|🧱 ${labelFull(be.desc)}| ${mid(be.b)}`);
|
|
149
422
|
}
|
|
150
423
|
// Data handling badges
|
|
151
424
|
const handling = new Map();
|
|
@@ -164,13 +437,13 @@ export function generateDataFlowDiagram(model) {
|
|
|
164
437
|
if (!inBoundary.has(n)) {
|
|
165
438
|
const badges = handling.get(n);
|
|
166
439
|
const suffix = badges ? ` · ${badges.join(', ')}` : '';
|
|
167
|
-
lines.push(` ${mid(n)}["${
|
|
440
|
+
lines.push(` ${mid(n)}["${assetIcon(n)} ${labelFull(n)}${suffix}"]`);
|
|
168
441
|
}
|
|
169
442
|
}
|
|
170
443
|
// Flow edges
|
|
171
444
|
for (const f of model.flows) {
|
|
172
445
|
if (f.mechanism) {
|
|
173
|
-
lines.push(` ${mid(f.source)} -- ${
|
|
446
|
+
lines.push(` ${mid(f.source)} -- "${flowIcon(f.mechanism)} ${labelFull(f.mechanism)}" --> ${mid(f.target)}`);
|
|
174
447
|
}
|
|
175
448
|
else {
|
|
176
449
|
lines.push(` ${mid(f.source)} --> ${mid(f.target)}`);
|
|
@@ -186,12 +459,12 @@ export function generateAttackSurface(model) {
|
|
|
186
459
|
if (model.exposures.length === 0)
|
|
187
460
|
return '';
|
|
188
461
|
const lines = ['graph LR'];
|
|
189
|
-
// Build set of mitigated/accepted
|
|
462
|
+
// Build set of mitigated/accepted (normalize refs for consistent matching)
|
|
190
463
|
const resolved = new Set();
|
|
191
464
|
for (const m of model.mitigations)
|
|
192
|
-
resolved.add(`${m.asset}::${m.threat}`);
|
|
465
|
+
resolved.add(`${normalizeRef(m.asset)}::${normalizeRef(m.threat)}`);
|
|
193
466
|
for (const a of model.acceptances)
|
|
194
|
-
resolved.add(`${a.asset}::${a.threat}`);
|
|
467
|
+
resolved.add(`${normalizeRef(a.asset)}::${normalizeRef(a.threat)}`);
|
|
195
468
|
// Group exposures by asset, deduplicate by threat, keep highest severity
|
|
196
469
|
const sevOrder = { critical: 0, p0: 0, high: 1, p1: 1, medium: 2, p2: 2, low: 3, p3: 3, unset: 4 };
|
|
197
470
|
const byAsset = new Map();
|
|
@@ -201,7 +474,7 @@ export function generateAttackSurface(model) {
|
|
|
201
474
|
const assetMap = byAsset.get(e.asset);
|
|
202
475
|
const existing = assetMap.get(e.threat);
|
|
203
476
|
const sev = (e.severity || 'unset').toLowerCase();
|
|
204
|
-
const isResolved = resolved.has(`${e.asset}::${e.threat}`);
|
|
477
|
+
const isResolved = resolved.has(`${normalizeRef(e.asset)}::${normalizeRef(e.threat)}`);
|
|
205
478
|
if (!existing || (sevOrder[sev] ?? 4) < (sevOrder[existing.severity] ?? 4)) {
|
|
206
479
|
assetMap.set(e.threat, { threat: e.threat, severity: sev, count: (existing?.count || 0) + 1, resolved: isResolved });
|
|
207
480
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diagrams.js","sourceRoot":"","sources":["../../src/dashboard/diagrams.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"diagrams.js","sourceRoot":"","sources":["../../src/dashboard/diagrams.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/dashboard/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAInE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,uBAAuB,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/dashboard/generate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAInE,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,uBAAuB,EAAE,GAAG,MAAM,CAulBrH"}
|
|
@@ -449,7 +449,7 @@ async function getMermaidInstance() {
|
|
|
449
449
|
background: '#ffffff', mainBkg: '#e8f4f8', nodeBorder: '#94a3b8',
|
|
450
450
|
clusterBkg: '#f8fafc', clusterBorder: '#cbd5e1', fontSize: '12px', fontFamily: 'var(--font-ui)'
|
|
451
451
|
},
|
|
452
|
-
flowchart: { curve: 'basis', padding: 15, nodeSpacing: 40, rankSpacing: 50, htmlLabels:
|
|
452
|
+
flowchart: { curve: 'basis', padding: 15, nodeSpacing: 40, rankSpacing: 50, htmlLabels: false, useMaxWidth: false },
|
|
453
453
|
securityLevel: 'loose',
|
|
454
454
|
});
|
|
455
455
|
return mermaid;
|
|
@@ -481,8 +481,23 @@ async function renderMermaidPanel(panel) {
|
|
|
481
481
|
});
|
|
482
482
|
svg.call(zoom);
|
|
483
483
|
|
|
484
|
-
//
|
|
485
|
-
|
|
484
|
+
// Preserve natural SVG size so long labels are not clipped.
|
|
485
|
+
// Container scrolling handles overflow for large graphs.
|
|
486
|
+
const rootNode = inner.node();
|
|
487
|
+
if (rootNode && typeof rootNode.getBBox === 'function') {
|
|
488
|
+
const bbox = rootNode.getBBox();
|
|
489
|
+
const pad = 80;
|
|
490
|
+
const viewX = Math.floor(bbox.x - pad / 2);
|
|
491
|
+
const viewY = Math.floor(bbox.y - pad / 2);
|
|
492
|
+
const viewW = Math.max(900, Math.ceil(bbox.width + pad));
|
|
493
|
+
const viewH = Math.max(520, Math.ceil(bbox.height + pad));
|
|
494
|
+
svg
|
|
495
|
+
.attr('viewBox', viewX + ' ' + viewY + ' ' + viewW + ' ' + viewH)
|
|
496
|
+
.attr('width', viewW)
|
|
497
|
+
.attr('height', viewH)
|
|
498
|
+
.style('max-width', 'none')
|
|
499
|
+
.style('overflow', 'visible');
|
|
500
|
+
}
|
|
486
501
|
|
|
487
502
|
// Double click to reset
|
|
488
503
|
svg.on('dblclick.zoom', null); // disable default dblclick zoom
|
|
@@ -1193,8 +1208,9 @@ tr.clickable { cursor: pointer; } tr.clickable:hover { background: var(--table-h
|
|
|
1193
1208
|
|
|
1194
1209
|
/* ── Diagrams ── */
|
|
1195
1210
|
.diagram-hint { font-size: .75rem; color: var(--muted); margin-bottom: .6rem; }
|
|
1196
|
-
.mermaid-wrap { background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 16px; overflow
|
|
1197
|
-
.mermaid { text-align:
|
|
1211
|
+
.mermaid-wrap { background: var(--surface); border: 1px solid var(--border); border-radius: 6px; padding: 16px; overflow: auto; margin-bottom: 1rem; }
|
|
1212
|
+
.mermaid { text-align: left; width: max-content; min-width: 100%; }
|
|
1213
|
+
.mermaid svg { max-width: none; height: auto; display: block; }
|
|
1198
1214
|
|
|
1199
1215
|
/* ── Heatmap ── */
|
|
1200
1216
|
.heatmap { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 10px; }
|