@x12i/memorix-descriptors 1.22.0 → 1.32.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.
Files changed (73) hide show
  1. package/README.md +1 -1
  2. package/dist/admin/create-admin.d.ts.map +1 -1
  3. package/dist/admin/create-admin.js +1 -1
  4. package/dist/admin/create-admin.js.map +1 -1
  5. package/dist/catalog/ensure-catalogs.d.ts +4 -1
  6. package/dist/catalog/ensure-catalogs.d.ts.map +1 -1
  7. package/dist/catalog/ensure-catalogs.js +100 -2
  8. package/dist/catalog/ensure-catalogs.js.map +1 -1
  9. package/dist/catalog/ids.d.ts +10 -0
  10. package/dist/catalog/ids.d.ts.map +1 -1
  11. package/dist/catalog/ids.js +10 -0
  12. package/dist/catalog/ids.js.map +1 -1
  13. package/dist/catalox/client.d.ts.map +1 -1
  14. package/dist/catalox/client.js +1 -2
  15. package/dist/catalox/client.js.map +1 -1
  16. package/dist/collections/mongo-env.d.ts +18 -0
  17. package/dist/collections/mongo-env.d.ts.map +1 -1
  18. package/dist/collections/mongo-env.js +71 -0
  19. package/dist/collections/mongo-env.js.map +1 -1
  20. package/dist/having-narratives/derive-common-property.d.ts +19 -0
  21. package/dist/having-narratives/derive-common-property.d.ts.map +1 -0
  22. package/dist/having-narratives/derive-common-property.js +87 -0
  23. package/dist/having-narratives/derive-common-property.js.map +1 -0
  24. package/dist/having-narratives/discover-signals.d.ts +4 -0
  25. package/dist/having-narratives/discover-signals.d.ts.map +1 -1
  26. package/dist/having-narratives/discover-signals.js +80 -63
  27. package/dist/having-narratives/discover-signals.js.map +1 -1
  28. package/dist/having-narratives/meta-narratives.d.ts +15 -0
  29. package/dist/having-narratives/meta-narratives.d.ts.map +1 -0
  30. package/dist/having-narratives/meta-narratives.js +50 -0
  31. package/dist/having-narratives/meta-narratives.js.map +1 -0
  32. package/dist/having-narratives/narrative-keys.d.ts +18 -0
  33. package/dist/having-narratives/narrative-keys.d.ts.map +1 -0
  34. package/dist/having-narratives/narrative-keys.js +131 -0
  35. package/dist/having-narratives/narrative-keys.js.map +1 -0
  36. package/dist/having-narratives/record-predicates.d.ts +11 -0
  37. package/dist/having-narratives/record-predicates.d.ts.map +1 -0
  38. package/dist/having-narratives/record-predicates.js +58 -0
  39. package/dist/having-narratives/record-predicates.js.map +1 -0
  40. package/dist/index.d.ts +10 -3
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +8 -2
  43. package/dist/index.js.map +1 -1
  44. package/dist/record/association.d.ts +52 -0
  45. package/dist/record/association.d.ts.map +1 -0
  46. package/dist/record/association.js +115 -0
  47. package/dist/record/association.js.map +1 -0
  48. package/dist/record/envelope.d.ts +3 -1
  49. package/dist/record/envelope.d.ts.map +1 -1
  50. package/dist/record/envelope.js +6 -1
  51. package/dist/record/envelope.js.map +1 -1
  52. package/dist/record/index.d.ts +2 -0
  53. package/dist/record/index.d.ts.map +1 -1
  54. package/dist/record/index.js +1 -0
  55. package/dist/record/index.js.map +1 -1
  56. package/dist/types/canonical-v2.d.ts +3 -1
  57. package/dist/types/canonical-v2.d.ts.map +1 -1
  58. package/dist/types/canonical-v2.js.map +1 -1
  59. package/dist/types/descriptors.d.ts +77 -2
  60. package/dist/types/descriptors.d.ts.map +1 -1
  61. package/dist/types/index.d.ts +1 -1
  62. package/dist/types/index.d.ts.map +1 -1
  63. package/dist/types/index.js.map +1 -1
  64. package/dist/validation/canonical-v2-validation.d.ts.map +1 -1
  65. package/dist/validation/canonical-v2-validation.js +19 -0
  66. package/dist/validation/canonical-v2-validation.js.map +1 -1
  67. package/dist/validation/descriptor-validation.d.ts +3 -1
  68. package/dist/validation/descriptor-validation.d.ts.map +1 -1
  69. package/dist/validation/descriptor-validation.js +72 -3
  70. package/dist/validation/descriptor-validation.js.map +1 -1
  71. package/docs/MEMORIX-CATALOX-CATALOG-MAP.md +8 -1
  72. package/docs/MEMORIX-DATABASE-CONVENTIONS.md +17 -0
  73. package/package.json +2 -2
@@ -0,0 +1,87 @@
1
+ import { COMMON_PROPERTY_FIELDS, ZONE_NAME_FIELDS, buildDerivedCommonPropertyKey, normalizeEntityTargetSlug, targetSlugFromSignalParts, toKebab, } from "./narrative-keys.js";
2
+ function shouldDeriveField(field) {
3
+ if (!COMMON_PROPERTY_FIELDS.has(field))
4
+ return false;
5
+ if (ZONE_NAME_FIELDS.has(field))
6
+ return false;
7
+ return true;
8
+ }
9
+ export function deriveCommonPropertyNarrativesFromItems(items, signal, options) {
10
+ const target = signal.targetEntity === "vulnerabilities-groups"
11
+ ? normalizeEntityTargetSlug("vulnerabilities-groups")
12
+ : targetSlugFromSignalParts(signal.targetEntity, signal.sourceRef);
13
+ if (!target)
14
+ return [];
15
+ const sourceRef = options?.primarySourceRef ?? signal.sourceRef;
16
+ const out = [];
17
+ const seen = new Set();
18
+ for (const item of items) {
19
+ for (const [field, value] of Object.entries(item)) {
20
+ if (!shouldDeriveField(field))
21
+ continue;
22
+ if (typeof value === "boolean") {
23
+ if (!value)
24
+ continue;
25
+ const key = buildDerivedCommonPropertyKey(target, field, value);
26
+ if (!key || seen.has(key))
27
+ continue;
28
+ seen.add(key);
29
+ out.push({
30
+ key,
31
+ detail: {
32
+ kind: "association-common-property",
33
+ sourceRef,
34
+ property: field,
35
+ value: "true",
36
+ targetEntity: signal.targetEntity,
37
+ },
38
+ });
39
+ continue;
40
+ }
41
+ const key = buildDerivedCommonPropertyKey(target, field, value);
42
+ if (!key || seen.has(key))
43
+ continue;
44
+ seen.add(key);
45
+ out.push({
46
+ key,
47
+ detail: {
48
+ kind: "association-common-property",
49
+ sourceRef,
50
+ property: field,
51
+ value: String(value),
52
+ targetEntity: signal.targetEntity,
53
+ },
54
+ });
55
+ }
56
+ }
57
+ return out;
58
+ }
59
+ export function mergeAssociatedItems(record, sourceRefs) {
60
+ const out = [];
61
+ const seen = new Set();
62
+ for (const sourceRef of sourceRefs) {
63
+ const value = record[sourceRef];
64
+ if (!Array.isArray(value))
65
+ continue;
66
+ for (const item of value) {
67
+ if (item === null || typeof item !== "object" || Array.isArray(item))
68
+ continue;
69
+ const key = JSON.stringify(item);
70
+ if (seen.has(key))
71
+ continue;
72
+ seen.add(key);
73
+ out.push(item);
74
+ }
75
+ }
76
+ return out;
77
+ }
78
+ export function readAssociatedItems(record, sourceRef) {
79
+ const value = record[sourceRef];
80
+ if (!Array.isArray(value))
81
+ return [];
82
+ return value.filter((item) => {
83
+ return item !== null && typeof item === "object" && !Array.isArray(item);
84
+ });
85
+ }
86
+ export { toKebab };
87
+ //# sourceMappingURL=derive-common-property.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"derive-common-property.js","sourceRoot":"","sources":["../../src/having-narratives/derive-common-property.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,14 @@ export declare function havingNarrativeSummaryFromSignal(signal: MemorixHavingNa
9
9
  entity: string;
10
10
  key: string;
11
11
  label: string;
12
+ displayName: string;
13
+ visibility: "pipeline";
14
+ origin: "platform";
12
15
  target: "entity" | "event" | "knowledge";
13
16
  detectionMethod: string;
14
17
  generated: true;
15
18
  signalKind: MemorixHavingNarrativeSignal["kind"];
16
19
  propertyFamily?: MemorixHavingNarrativeSignal["propertyFamily"];
20
+ blocked?: boolean;
17
21
  };
18
22
  //# sourceMappingURL=discover-signals.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"discover-signals.d.ts","sourceRoot":"","sources":["../../src/having-narratives/discover-signals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAG7B,MAAM,yBAAyB,CAAC;AAIjC,eAAO,MAAM,0BAA0B,mCAAmC,CAAC;AA8L3E;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,uBAAuB,EACnC,cAAc,GAAE,uBAAuB,EAAO,GAC7C,4BAA4B,EAAE,CA+HhC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,4BAA4B,EACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,GACvC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,4BAA4B,CAAC,gBAAgB,CAAC,CAAC;CACjE,CAWA"}
1
+ {"version":3,"file":"discover-signals.d.ts","sourceRoot":"","sources":["../../src/having-narratives/discover-signals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,4BAA4B,EAI7B,MAAM,yBAAyB,CAAC;AAWjC,eAAO,MAAM,0BAA0B,mCAAmC,CAAC;AAwM3E;;;GAGG;AACH,wBAAgB,8BAA8B,CAC5C,UAAU,EAAE,uBAAuB,EACnC,cAAc,GAAE,uBAAuB,EAAO,GAC7C,4BAA4B,EAAE,CAsIhC;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,4BAA4B,EACpC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,GACvC;IACD,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,CAAC;IACzC,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,IAAI,CAAC;IAChB,UAAU,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,4BAA4B,CAAC,gBAAgB,CAAC,CAAC;IAChE,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAeA"}
@@ -1,6 +1,17 @@
1
- const NARRATIVE_KEY_RE = /^[a-z][a-z0-9_-]*$/;
1
+ import { discoverMetaNarrativeSignals } from "./meta-narratives.js";
2
+ import { buildHasKey, normalizeEntityTargetSlug, pluralizeSlug, singularizeSlug, toKebab, } from "./narrative-keys.js";
3
+ import { discoverRecordPredicateSignals } from "./record-predicates.js";
2
4
  export const NARRATIVE_SYNC_DETECTED_BY = "entity-pipeline.narrative-sync";
3
- const DEFAULT_IGNORED_COMMON_VALUES = ["", "unknown", "none", "n/a", "na", "null", "undefined", "not_applicable"];
5
+ const DEFAULT_IGNORED_COMMON_VALUES = [
6
+ "",
7
+ "unknown",
8
+ "none",
9
+ "n/a",
10
+ "na",
11
+ "null",
12
+ "undefined",
13
+ "not_applicable",
14
+ ];
4
15
  const SECURITY_OPS_PROPERTY_PATTERNS = [
5
16
  "severity",
6
17
  "status",
@@ -21,43 +32,17 @@ const SECURITY_OPS_PROPERTY_PATTERNS = [
21
32
  "remote-access-adjacent",
22
33
  "partner-link-adjacent",
23
34
  "dmz-adjacent",
24
- "zone",
25
35
  "zone-class",
26
36
  "vr",
27
37
  ];
28
- function pascalToKebab(value) {
29
- return value
30
- .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
31
- .replace(/_/g, "-")
32
- .toLowerCase();
33
- }
34
- function singularize(value) {
35
- if (value.endsWith("ies"))
36
- return value.slice(0, -3) + "y";
37
- if (value.endsWith("ses"))
38
- return value.slice(0, -2);
39
- if (value.endsWith("s") && value.length > 1)
40
- return value.slice(0, -1);
41
- return value;
42
- }
43
- function entitySlug(entityName) {
44
- return pascalToKebab(entityName);
45
- }
46
38
  function contentPostfixLabel(postfix) {
47
39
  return postfix.charAt(0).toUpperCase() + postfix.slice(1);
48
40
  }
49
- function buildHasKey(target) {
50
- const key = `has-${pascalToKebab(target)}`;
51
- if (!NARRATIVE_KEY_RE.test(key)) {
52
- throw new Error(`Invalid generated narrative key: ${key}`);
53
- }
54
- return key;
55
- }
56
41
  function buildHasLabel(target) {
57
42
  return `Has ${contentPostfixLabel(target)}`;
58
43
  }
59
44
  function propertySlug(propertyKey) {
60
- const slug = pascalToKebab(propertyKey).replace(/^xdr-/, "");
45
+ const slug = toKebab(propertyKey).replace(/^xdr-/, "");
61
46
  if (slug === "operational-status")
62
47
  return "operational-status";
63
48
  if (slug === "agent-status")
@@ -68,13 +53,9 @@ function propertyLabel(propertyKey, descriptor) {
68
53
  return descriptor?.label?.replace(/^XDR\s+/i, "") ?? contentPostfixLabel(propertySlug(propertyKey));
69
54
  }
70
55
  function propertySearchText(propertyKey, descriptor) {
71
- return [
72
- propertyKey,
73
- descriptor.label,
74
- descriptor.source?.path,
75
- ]
56
+ return [propertyKey, descriptor.label, descriptor.source?.path]
76
57
  .filter((value) => typeof value === "string")
77
- .map((value) => pascalToKebab(value).replace(/\./g, "-"))
58
+ .map((value) => toKebab(value).replace(/\./g, "-"))
78
59
  .join(" ");
79
60
  }
80
61
  function classifyCommonProperty(propertyKey, descriptor) {
@@ -91,51 +72,44 @@ function propertyPathFromDescriptor(propertyKey, descriptor) {
91
72
  return descriptor.source?.path ?? propertyKey;
92
73
  }
93
74
  function linkedCommonPropertyLabel(targetEntity, propertyKey, propertyDescriptor) {
94
- const target = pluralizeEntity(entitySlug(targetEntity));
75
+ const target = normalizeEntityTargetSlug(targetEntity);
95
76
  const propSlug = propertySlug(propertyKey);
96
77
  return {
97
78
  key: buildHasKey(`${target}-with-${propSlug}`),
98
79
  label: `Has ${contentPostfixLabel(target)} With ${propertyLabel(propertyKey, propertyDescriptor)}`,
99
80
  };
100
81
  }
101
- function pluralizeEntity(slug) {
102
- if (slug.endsWith("y"))
103
- return slug.slice(0, -1) + "ies";
104
- if (slug.endsWith("s"))
105
- return slug;
106
- return slug + "s";
107
- }
108
82
  function associatedPropertyTargetLabel(propertyName, linkedObjectType, linkedContentType) {
109
83
  if (linkedObjectType) {
110
- const slug = entitySlug(linkedObjectType);
84
+ const entityPlural = normalizeEntityTargetSlug(linkedObjectType);
111
85
  const contentSuffix = linkedContentType && linkedContentType !== "snapshots"
112
- ? `-${pascalToKebab(linkedContentType)}`
86
+ ? `-${toKebab(linkedContentType)}`
113
87
  : "";
114
88
  return {
115
- key: buildHasKey(`${slug}${contentSuffix}`),
89
+ key: buildHasKey(`${entityPlural}${contentSuffix}`),
116
90
  label: buildHasLabel(linkedContentType && linkedContentType !== "snapshots"
117
- ? `${singularize(slug)} ${linkedContentType}`
118
- : pluralizeEntity(slug)),
91
+ ? `${singularizeSlug(entityPlural)} ${linkedContentType}`
92
+ : entityPlural),
119
93
  };
120
94
  }
121
95
  const stripped = propertyName.replace(/^associated/, "");
122
- const kebab = pascalToKebab(stripped || propertyName);
96
+ const kebab = toKebab(stripped || propertyName);
123
97
  return {
124
- key: buildHasKey(kebab),
125
- label: buildHasLabel(kebab),
98
+ key: buildHasKey(pluralizeSlug(kebab)),
99
+ label: buildHasLabel(pluralizeSlug(kebab)),
126
100
  };
127
101
  }
128
102
  function relationTargetLabel(targetEntity) {
129
- const slug = entitySlug(targetEntity);
103
+ const slug = normalizeEntityTargetSlug(targetEntity);
130
104
  return {
131
- key: buildHasKey(pluralizeEntity(slug)),
132
- label: buildHasLabel(pluralizeEntity(slug)),
105
+ key: buildHasKey(slug),
106
+ label: buildHasLabel(slug),
133
107
  };
134
108
  }
135
109
  function rootPropertyLabel(rootName, descriptor) {
136
110
  return {
137
- key: buildHasKey(pascalToKebab(rootName)),
138
- label: descriptor?.label ? `Has ${descriptor.label}` : buildHasLabel(pascalToKebab(rootName)),
111
+ key: buildHasKey(toKebab(rootName)),
112
+ label: descriptor?.label ? `Has ${descriptor.label}` : buildHasLabel(toKebab(rootName)),
139
113
  };
140
114
  }
141
115
  function sideContentLabel(postfix) {
@@ -157,19 +131,51 @@ function isCanonicalPostfix(descriptor, postfix) {
157
131
  function defaultExcludedPostfixes() {
158
132
  return new Set(["core", "raw", "snapshots", "scoped", "legacy"]);
159
133
  }
134
+ function targetEntityHasContentType(linkedObjectType, linkedContentType, descriptorByEntity) {
135
+ if (!linkedObjectType || !linkedContentType || linkedContentType === "snapshots")
136
+ return true;
137
+ const targetDescriptor = descriptorByEntity.get(linkedObjectType);
138
+ if (!targetDescriptor)
139
+ return false;
140
+ const wanted = linkedContentType.toLowerCase();
141
+ return Object.entries(targetDescriptor.contentTypes).some(([key, ct]) => {
142
+ const postfix = (ct.postfix ?? key).toLowerCase();
143
+ return postfix === wanted;
144
+ });
145
+ }
146
+ function isAssociatedPropertyBlocked(prop, descriptorByEntity) {
147
+ if (!prop.linkedContentType || prop.linkedContentType === "snapshots")
148
+ return false;
149
+ return !targetEntityHasContentType(prop.linkedObjectType, prop.linkedContentType, descriptorByEntity);
150
+ }
151
+ function mergeAssociatedPropertySignal(signalByKey, signal) {
152
+ const existing = signalByKey.get(signal.key);
153
+ if (!existing) {
154
+ signalByKey.set(signal.key, { ...signal, sourceRefs: [signal.sourceRef] });
155
+ return;
156
+ }
157
+ if (existing.kind !== "associated-property" || signal.kind !== "associated-property")
158
+ return;
159
+ const refs = new Set([...(existing.sourceRefs ?? [existing.sourceRef]), signal.sourceRef]);
160
+ existing.sourceRefs = [...refs];
161
+ if (signal.blocked)
162
+ existing.blocked = true;
163
+ }
160
164
  /**
161
165
  * Discover auto-generated "having X" narrative signals from entity descriptor metadata.
162
166
  * No hand-authored narrative definitions are required.
163
167
  */
164
168
  export function discoverHavingNarrativeSignals(descriptor, allDescriptors = []) {
165
- const signals = [];
166
- const seenKeys = new Set();
169
+ const signalByKey = new Map();
167
170
  const descriptorByEntity = new Map([descriptor, ...allDescriptors].map((entry) => [entry.entityName, entry]));
168
171
  function push(signal) {
169
- if (seenKeys.has(signal.key))
172
+ if (signal.kind === "associated-property") {
173
+ mergeAssociatedPropertySignal(signalByKey, signal);
170
174
  return;
171
- seenKeys.add(signal.key);
172
- signals.push(signal);
175
+ }
176
+ if (!signalByKey.has(signal.key)) {
177
+ signalByKey.set(signal.key, signal);
178
+ }
173
179
  }
174
180
  for (const prop of descriptor.associatedProperties ?? []) {
175
181
  const { key, label } = associatedPropertyTargetLabel(prop.name, prop.linkedObjectType, prop.linkedContentType);
@@ -180,6 +186,7 @@ export function discoverHavingNarrativeSignals(descriptor, allDescriptors = [])
180
186
  sourceRef: prop.name,
181
187
  linkedContentType: prop.linkedContentType,
182
188
  targetEntity: prop.linkedObjectType,
189
+ blocked: isAssociatedPropertyBlocked(prop, descriptorByEntity),
183
190
  minItems: 1,
184
191
  });
185
192
  }
@@ -267,18 +274,28 @@ export function discoverHavingNarrativeSignals(descriptor, allDescriptors = [])
267
274
  minItems: 1,
268
275
  });
269
276
  }
270
- return signals.sort((a, b) => a.key.localeCompare(b.key));
277
+ for (const predicate of discoverRecordPredicateSignals(descriptor.entityName)) {
278
+ push(predicate);
279
+ }
280
+ for (const meta of discoverMetaNarrativeSignals(descriptor.entityName)) {
281
+ push(meta);
282
+ }
283
+ return [...signalByKey.values()].sort((a, b) => a.key.localeCompare(b.key));
271
284
  }
272
285
  export function havingNarrativeSummaryFromSignal(signal, entityName, target) {
273
286
  return {
274
287
  entity: entityName,
275
288
  key: signal.key,
276
289
  label: signal.label,
290
+ displayName: signal.label,
291
+ visibility: "pipeline",
292
+ origin: "platform",
277
293
  target,
278
- detectionMethod: "having-signal",
294
+ detectionMethod: signal.blocked ? "blocked-signal" : "having-signal",
279
295
  generated: true,
280
296
  signalKind: signal.kind,
281
297
  propertyFamily: signal.propertyFamily,
298
+ blocked: signal.blocked,
282
299
  };
283
300
  }
284
301
  //# sourceMappingURL=discover-signals.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"discover-signals.js","sourceRoot":"","sources":["../../src/having-narratives/discover-signals.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"discover-signals.js","sourceRoot":"","sources":["../../src/having-narratives/discover-signals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { MemorixHavingNarrativeSignal } from "../types/descriptors.js";
2
+ export type MetaNarrativeRuleId = "asset-critical-or-high-vulns" | "asset-exploited-critical" | "asset-exposed-critical";
3
+ export type MetaNarrativeRule = {
4
+ id: MetaNarrativeRuleId;
5
+ key: string;
6
+ label: string;
7
+ entityName: string;
8
+ requireAny?: string[];
9
+ requireAll?: string[];
10
+ };
11
+ declare const META_RULES: MetaNarrativeRule[];
12
+ export declare function discoverMetaNarrativeSignals(entityName: string): MemorixHavingNarrativeSignal[];
13
+ export declare function evaluateMetaNarrative(ruleId: MetaNarrativeRuleId, evaluated: Record<string, boolean>): boolean;
14
+ export { META_RULES };
15
+ //# sourceMappingURL=meta-narratives.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-narratives.d.ts","sourceRoot":"","sources":["../../src/having-narratives/meta-narratives.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AAG5E,MAAM,MAAM,mBAAmB,GAC3B,8BAA8B,GAC9B,0BAA0B,GAC1B,wBAAwB,CAAC;AAE7B,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,mBAAmB,CAAC;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAEF,QAAA,MAAM,UAAU,EAAE,iBAAiB,EAsBlC,CAAC;AAEF,wBAAgB,4BAA4B,CAAC,UAAU,EAAE,MAAM,GAAG,4BAA4B,EAAE,CAS/F;AAED,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAWT;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { buildHasKey } from "./narrative-keys.js";
2
+ const META_RULES = [
3
+ {
4
+ id: "asset-critical-or-high-vulns",
5
+ key: buildHasKey("critical-or-high-vulnerabilities"),
6
+ label: "Has Critical Or High Vulnerabilities",
7
+ entityName: "assets",
8
+ requireAny: ["has-critical-vulnerabilities", "has-high-vulnerabilities"],
9
+ },
10
+ {
11
+ id: "asset-exploited-critical",
12
+ key: buildHasKey("exploited-critical-vulnerabilities"),
13
+ label: "Has Exploited Critical Vulnerabilities",
14
+ entityName: "assets",
15
+ requireAll: ["has-critical-vulnerabilities", "has-known-exploited-vulnerabilities"],
16
+ },
17
+ {
18
+ id: "asset-exposed-critical",
19
+ key: buildHasKey("exposed-critical-asset"),
20
+ label: "Has Exposed Critical Asset",
21
+ entityName: "assets",
22
+ requireAll: ["has-external-adjacent-subnets", "has-critical-vulnerabilities"],
23
+ },
24
+ ];
25
+ export function discoverMetaNarrativeSignals(entityName) {
26
+ return META_RULES.filter((rule) => rule.entityName === entityName).map((rule) => ({
27
+ key: rule.key,
28
+ label: rule.label,
29
+ kind: "meta",
30
+ sourceRef: rule.id,
31
+ metaRuleId: rule.id,
32
+ minItems: 1,
33
+ }));
34
+ }
35
+ export function evaluateMetaNarrative(ruleId, evaluated) {
36
+ const rule = META_RULES.find((entry) => entry.id === ruleId);
37
+ if (!rule)
38
+ return false;
39
+ if (rule.requireAll?.length) {
40
+ if (!rule.requireAll.every((key) => evaluated[key]))
41
+ return false;
42
+ }
43
+ if (rule.requireAny?.length) {
44
+ if (!rule.requireAny.some((key) => evaluated[key]))
45
+ return false;
46
+ }
47
+ return true;
48
+ }
49
+ export { META_RULES };
50
+ //# sourceMappingURL=meta-narratives.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta-narratives.js","sourceRoot":"","sources":["../../src/having-narratives/meta-narratives.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAgBlD,MAAM,UAAU,GAAwB;IACtC;QACE,EAAE,EAAE,8BAA8B;QAClC,GAAG,EAAE,WAAW,CAAC,kCAAkC,CAAC;QACpD,KAAK,EAAE,sCAAsC;QAC7C,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,CAAC,8BAA8B,EAAE,0BAA0B,CAAC;KACzE;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,GAAG,EAAE,WAAW,CAAC,oCAAoC,CAAC;QACtD,KAAK,EAAE,wCAAwC;QAC/C,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,CAAC,8BAA8B,EAAE,qCAAqC,CAAC;KACpF;IACD;QACE,EAAE,EAAE,wBAAwB;QAC5B,GAAG,EAAE,WAAW,CAAC,wBAAwB,CAAC;QAC1C,KAAK,EAAE,4BAA4B;QACnC,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,CAAC,+BAA+B,EAAE,8BAA8B,CAAC;KAC9E;CACF,CAAC;AAEF,MAAM,UAAU,4BAA4B,CAAC,UAAkB;IAC7D,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAChF,GAAG,EAAE,IAAI,CAAC,GAAG;QACb,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,IAAI,EAAE,MAAe;QACrB,SAAS,EAAE,IAAI,CAAC,EAAE;QAClB,UAAU,EAAE,IAAI,CAAC,EAAE;QACnB,QAAQ,EAAE,CAAC;KACZ,CAAC,CAAC,CAAC;AACN,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,MAA2B,EAC3B,SAAkC;IAElC,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IAC7D,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IAExB,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACpE,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IACnE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,CAAC"}
@@ -0,0 +1,18 @@
1
+ export declare const NARRATIVE_KEY_RE: RegExp;
2
+ export declare const COMMON_PROPERTY_FIELDS: Set<string>;
3
+ /** Boolean adjacency fields — emit at most one tag per field per target. */
4
+ export declare const BOOLEAN_ADJACENCY_FIELDS: Set<string>;
5
+ /** Zone-name fields — separate from adjacency class tags. */
6
+ export declare const ZONE_NAME_FIELDS: Set<string>;
7
+ export declare const IGNORED_COMMON_VALUES: Set<string>;
8
+ export declare function toKebab(value: string): string;
9
+ export declare function pluralizeSlug(value: string): string;
10
+ export declare function singularizeSlug(value: string): string;
11
+ export declare function entitySlug(entityName: string): string;
12
+ export declare function buildHasKey(target: string): string;
13
+ export declare function commonPropertyValueToSlug(value: unknown): string | undefined;
14
+ export declare function buildDerivedCommonPropertyKey(targetSlug: string, field: string, value: unknown): string | undefined;
15
+ export declare function targetSlugFromSignalParts(targetEntity?: string, sourceRef?: string): string | undefined;
16
+ export declare function vulnerabilityGroupTargetSlug(): string;
17
+ export declare function normalizeEntityTargetSlug(entityName: string): string;
18
+ //# sourceMappingURL=narrative-keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrative-keys.d.ts","sourceRoot":"","sources":["../../src/having-narratives/narrative-keys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,QAAuB,CAAC;AAErD,eAAO,MAAM,sBAAsB,aA2BjC,CAAC;AAEH,4EAA4E;AAC5E,eAAO,MAAM,wBAAwB,aAInC,CAAC;AAEH,6DAA6D;AAC7D,eAAO,MAAM,gBAAgB,aAA0B,CAAC;AAExD,eAAO,MAAM,qBAAqB,aAUhC,CAAC;AAEH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAQ7C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOnD;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAO5E;AAED,wBAAgB,6BAA6B,CAC3C,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,GACb,MAAM,GAAG,SAAS,CAQpB;AAED,wBAAgB,yBAAyB,CACvC,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,GAAG,SAAS,CAMpB;AAED,wBAAgB,4BAA4B,IAAI,MAAM,CAErD;AAED,wBAAgB,yBAAyB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAIpE"}
@@ -0,0 +1,131 @@
1
+ export const NARRATIVE_KEY_RE = /^[a-z][a-z0-9_-]*$/;
2
+ export const COMMON_PROPERTY_FIELDS = new Set([
3
+ "severity",
4
+ "riskLevel",
5
+ "risk",
6
+ "priority",
7
+ "priorityLevel",
8
+ "priorityScore",
9
+ "status",
10
+ "operationalStatus",
11
+ "xdrOperationalStatus",
12
+ "agentStatus",
13
+ "xdrAgentStatus",
14
+ "agentType",
15
+ "knownExploited",
16
+ "isKnownExploited",
17
+ "exploitabilityLevel",
18
+ "zone",
19
+ "zoneClass",
20
+ "vr",
21
+ "outsideExposureClass",
22
+ "internalReachabilityClass",
23
+ "remoteAccessAdjacent",
24
+ "partnerLinkAdjacent",
25
+ "dmzAdjacent",
26
+ "vulnerability_family",
27
+ "vulnerability_type",
28
+ "potentialImpactLevel",
29
+ ]);
30
+ /** Boolean adjacency fields — emit at most one tag per field per target. */
31
+ export const BOOLEAN_ADJACENCY_FIELDS = new Set([
32
+ "remoteAccessAdjacent",
33
+ "partnerLinkAdjacent",
34
+ "dmzAdjacent",
35
+ ]);
36
+ /** Zone-name fields — separate from adjacency class tags. */
37
+ export const ZONE_NAME_FIELDS = new Set(["zone", "vr"]);
38
+ export const IGNORED_COMMON_VALUES = new Set([
39
+ "",
40
+ "unknown",
41
+ "none",
42
+ "n/a",
43
+ "na",
44
+ "null",
45
+ "undefined",
46
+ "not-applicable",
47
+ "not_applicable",
48
+ ]);
49
+ export function toKebab(value) {
50
+ return String(value)
51
+ .trim()
52
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
53
+ .replace(/_/g, "-")
54
+ .replace(/[^a-zA-Z0-9]+/g, "-")
55
+ .replace(/^-+|-+$/g, "")
56
+ .toLowerCase();
57
+ }
58
+ export function pluralizeSlug(value) {
59
+ if (value.endsWith("analysis"))
60
+ return value;
61
+ if (value.endsWith("discovery"))
62
+ return value;
63
+ if (value.endsWith("ies"))
64
+ return value;
65
+ if (value.endsWith("s"))
66
+ return value;
67
+ if (value.endsWith("y"))
68
+ return `${value.slice(0, -1)}ies`;
69
+ return `${value}s`;
70
+ }
71
+ export function singularizeSlug(value) {
72
+ if (value.endsWith("ies"))
73
+ return `${value.slice(0, -3)}y`;
74
+ if (value.endsWith("ses"))
75
+ return value.slice(0, -2);
76
+ if (value.endsWith("s") && value.length > 1)
77
+ return value.slice(0, -1);
78
+ return value;
79
+ }
80
+ export function entitySlug(entityName) {
81
+ return toKebab(entityName);
82
+ }
83
+ export function buildHasKey(target) {
84
+ const key = `has-${toKebab(target)}`;
85
+ if (!NARRATIVE_KEY_RE.test(key)) {
86
+ throw new Error(`Invalid generated narrative key: ${key}`);
87
+ }
88
+ return key;
89
+ }
90
+ export function commonPropertyValueToSlug(value) {
91
+ if (typeof value === "boolean")
92
+ return undefined;
93
+ if (typeof value === "number")
94
+ return undefined;
95
+ if (typeof value !== "string")
96
+ return undefined;
97
+ const slug = toKebab(value);
98
+ if (IGNORED_COMMON_VALUES.has(slug))
99
+ return undefined;
100
+ return slug;
101
+ }
102
+ export function buildDerivedCommonPropertyKey(targetSlug, field, value) {
103
+ if (typeof value === "boolean") {
104
+ if (!value)
105
+ return undefined;
106
+ return buildHasKey(`${toKebab(field)}-${targetSlug}`);
107
+ }
108
+ const valueSlug = commonPropertyValueToSlug(value);
109
+ if (!valueSlug)
110
+ return undefined;
111
+ return buildHasKey(`${valueSlug}-${targetSlug}`);
112
+ }
113
+ export function targetSlugFromSignalParts(targetEntity, sourceRef) {
114
+ if (targetEntity)
115
+ return pluralizeSlug(entitySlug(targetEntity));
116
+ if (!sourceRef)
117
+ return undefined;
118
+ const stripped = sourceRef.replace(/^associated/, "");
119
+ const slug = toKebab(stripped || sourceRef);
120
+ return slug ? pluralizeSlug(slug) : undefined;
121
+ }
122
+ export function vulnerabilityGroupTargetSlug() {
123
+ return "vulnerability-groups";
124
+ }
125
+ export function normalizeEntityTargetSlug(entityName) {
126
+ const slug = entitySlug(entityName);
127
+ if (slug === "vulnerabilities-groups")
128
+ return vulnerabilityGroupTargetSlug();
129
+ return pluralizeSlug(slug);
130
+ }
131
+ //# sourceMappingURL=narrative-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"narrative-keys.js","sourceRoot":"","sources":["../../src/having-narratives/narrative-keys.ts"],"names":[],"mappings":"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"}