@x12i/memorix-retrieval 1.35.0 → 1.37.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 (114) hide show
  1. package/catalox-seeds/inputs/entity-descriptors/assets.json +166 -0
  2. package/catalox-seeds/inputs/entity-descriptors/subnets.json +115 -1
  3. package/catalox-seeds/inputs/entity-descriptors/topology-zones.json +52 -1
  4. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities-groups.json +10 -2
  5. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +79 -7
  6. package/catalox-seeds/inputs/graph-descriptors/asset-subnet-paths-graph.json +41 -0
  7. package/catalox-seeds/inputs/graph-descriptors/asset-topology-vulnerabilities-graph.json +81 -0
  8. package/catalox-seeds/inputs/graph-descriptors/asset-vulnerability-group-graph.json +38 -0
  9. package/catalox-seeds/inputs/graph-descriptors/vulnerability-asset-subnet-graph.json +40 -0
  10. package/catalox-seeds/inputs/list-descriptors/assets-exploitability-decisions-list.json +4 -0
  11. package/catalox-seeds/inputs/list-descriptors/assets-potential-impact-decisions-list.json +16 -8
  12. package/catalox-seeds/inputs/manifest.json +4 -0
  13. package/catalox-seeds/inputs/memorix-catalog-ids.json +2 -1
  14. package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +1186 -34
  15. package/dist/client/catalox-adapter.d.ts.map +1 -1
  16. package/dist/client/catalox-adapter.js +10 -1
  17. package/dist/client/catalox-adapter.js.map +1 -1
  18. package/dist/client/catalox-like.d.ts +6 -0
  19. package/dist/client/catalox-like.d.ts.map +1 -1
  20. package/dist/data/identity.d.ts +19 -1
  21. package/dist/data/identity.d.ts.map +1 -1
  22. package/dist/data/identity.js +41 -25
  23. package/dist/data/identity.js.map +1 -1
  24. package/dist/data/record-info.d.ts +1 -1
  25. package/dist/data/record-info.d.ts.map +1 -1
  26. package/dist/descriptors/catalog-ids.d.ts +1 -0
  27. package/dist/descriptors/catalog-ids.d.ts.map +1 -1
  28. package/dist/descriptors/catalog-ids.js +1 -0
  29. package/dist/descriptors/catalog-ids.js.map +1 -1
  30. package/dist/descriptors/descriptor-types.d.ts +3 -1
  31. package/dist/descriptors/descriptor-types.d.ts.map +1 -1
  32. package/dist/errors/issues.d.ts +2 -0
  33. package/dist/errors/issues.d.ts.map +1 -1
  34. package/dist/errors/issues.js.map +1 -1
  35. package/dist/graphs/build-graph-directory.d.ts +28 -0
  36. package/dist/graphs/build-graph-directory.d.ts.map +1 -0
  37. package/dist/graphs/build-graph-directory.js +253 -0
  38. package/dist/graphs/build-graph-directory.js.map +1 -0
  39. package/dist/graphs/build-graph-document.d.ts +13 -0
  40. package/dist/graphs/build-graph-document.d.ts.map +1 -0
  41. package/dist/graphs/build-graph-document.js +888 -0
  42. package/dist/graphs/build-graph-document.js.map +1 -0
  43. package/dist/graphs/fallback-graph-capabilities.d.ts +16 -0
  44. package/dist/graphs/fallback-graph-capabilities.d.ts.map +1 -0
  45. package/dist/graphs/fallback-graph-capabilities.js +376 -0
  46. package/dist/graphs/fallback-graph-capabilities.js.map +1 -0
  47. package/dist/graphs/index.d.ts +9 -0
  48. package/dist/graphs/index.d.ts.map +1 -0
  49. package/dist/graphs/index.js +8 -0
  50. package/dist/graphs/index.js.map +1 -0
  51. package/dist/graphs/infer-graph-descriptor.d.ts +17 -0
  52. package/dist/graphs/infer-graph-descriptor.d.ts.map +1 -0
  53. package/dist/graphs/infer-graph-descriptor.js +234 -0
  54. package/dist/graphs/infer-graph-descriptor.js.map +1 -0
  55. package/dist/graphs/load-graph-descriptor.d.ts +31 -0
  56. package/dist/graphs/load-graph-descriptor.d.ts.map +1 -0
  57. package/dist/graphs/load-graph-descriptor.js +141 -0
  58. package/dist/graphs/load-graph-descriptor.js.map +1 -0
  59. package/dist/graphs/record-access.d.ts +36 -0
  60. package/dist/graphs/record-access.d.ts.map +1 -0
  61. package/dist/graphs/record-access.js +178 -0
  62. package/dist/graphs/record-access.js.map +1 -0
  63. package/dist/graphs/types.d.ts +70 -0
  64. package/dist/graphs/types.d.ts.map +1 -0
  65. package/dist/graphs/types.js +17 -0
  66. package/dist/graphs/types.js.map +1 -0
  67. package/dist/graphs/validate-graph-metadata.d.ts +36 -0
  68. package/dist/graphs/validate-graph-metadata.d.ts.map +1 -0
  69. package/dist/graphs/validate-graph-metadata.js +71 -0
  70. package/dist/graphs/validate-graph-metadata.js.map +1 -0
  71. package/dist/index.d.ts +1 -0
  72. package/dist/index.d.ts.map +1 -1
  73. package/dist/index.js +1 -0
  74. package/dist/index.js.map +1 -1
  75. package/dist/retrieval/fetch-list.d.ts.map +1 -1
  76. package/dist/retrieval/fetch-list.js +3 -1
  77. package/dist/retrieval/fetch-list.js.map +1 -1
  78. package/dist/retrieval/resolve-fields.d.ts.map +1 -1
  79. package/dist/retrieval/resolve-fields.js +7 -1
  80. package/dist/retrieval/resolve-fields.js.map +1 -1
  81. package/dist/retrieval/resolve-list-analytics.d.ts +2 -2
  82. package/dist/retrieval/resolve-list-analytics.d.ts.map +1 -1
  83. package/dist/retrieval/resolve-list-analytics.js.map +1 -1
  84. package/dist/retrieval/resolve-property-source.d.ts.map +1 -1
  85. package/dist/retrieval/resolve-property-source.js +10 -3
  86. package/dist/retrieval/resolve-property-source.js.map +1 -1
  87. package/dist/seeds/default-seed-spec.d.ts.map +1 -1
  88. package/dist/seeds/default-seed-spec.js +25 -1
  89. package/dist/seeds/default-seed-spec.js.map +1 -1
  90. package/dist/tests/catalox-adapter-scope.test.d.ts +2 -0
  91. package/dist/tests/catalox-adapter-scope.test.d.ts.map +1 -0
  92. package/dist/tests/catalox-adapter-scope.test.js +26 -0
  93. package/dist/tests/catalox-adapter-scope.test.js.map +1 -0
  94. package/dist/tests/fetch-list.test.js +28 -0
  95. package/dist/tests/fetch-list.test.js.map +1 -1
  96. package/dist/tests/graphs.test.d.ts +2 -0
  97. package/dist/tests/graphs.test.d.ts.map +1 -0
  98. package/dist/tests/graphs.test.js +423 -0
  99. package/dist/tests/graphs.test.js.map +1 -0
  100. package/dist/tests/identity.test.js +13 -1
  101. package/dist/tests/identity.test.js.map +1 -1
  102. package/dist/tests/infer-graph.test.d.ts +2 -0
  103. package/dist/tests/infer-graph.test.d.ts.map +1 -0
  104. package/dist/tests/infer-graph.test.js +19 -0
  105. package/dist/tests/infer-graph.test.js.map +1 -0
  106. package/dist/tests/resolve-filters.test.js +8 -0
  107. package/dist/tests/resolve-filters.test.js.map +1 -1
  108. package/dist/tests/seed-manifest.test.js +3 -0
  109. package/dist/tests/seed-manifest.test.js.map +1 -1
  110. package/dist/tests/validate-graph-metadata.test.d.ts +2 -0
  111. package/dist/tests/validate-graph-metadata.test.d.ts.map +1 -0
  112. package/dist/tests/validate-graph-metadata.test.js +81 -0
  113. package/dist/tests/validate-graph-metadata.test.js.map +1 -0
  114. package/package.json +13 -2
@@ -0,0 +1,26 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { createCataloxAdapterFromBound } from "../client/catalox-adapter.js";
3
+ describe("createCataloxAdapterFromBound scope pass-through", () => {
4
+ it("preserves row-level scope and metadata on getCatalogItem", async () => {
5
+ const bound = {
6
+ getCatalogItem: vi.fn(async () => ({
7
+ outcome: "found",
8
+ item: {
9
+ data: { id: "asset-topology-vulnerabilities-graph", title: "Asset topology" },
10
+ scope: { domains: ["network"], agents: ["neo"] },
11
+ metadata: { agentIds: ["neo"], domainIds: ["network"] },
12
+ },
13
+ })),
14
+ listCatalogItems: vi.fn(),
15
+ };
16
+ const adapter = createCataloxAdapterFromBound(bound);
17
+ const result = await adapter.getCatalogItem({ appId: "memorix" }, "memorix-graph-descriptors", "g1");
18
+ expect(result.outcome).toBe("found");
19
+ if (result.outcome !== "found")
20
+ return;
21
+ expect(result.item.scope).toEqual({ domains: ["network"], agents: ["neo"] });
22
+ expect(result.item.metadata?.agentIds).toEqual(["neo"]);
23
+ expect(result.item.data.id).toBe("asset-topology-vulnerabilities-graph");
24
+ });
25
+ });
26
+ //# sourceMappingURL=catalox-adapter-scope.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalox-adapter-scope.test.js","sourceRoot":"","sources":["../../src/tests/catalox-adapter-scope.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE7E,QAAQ,CAAC,kDAAkD,EAAE,GAAG,EAAE;IAChE,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,KAAK,GAAG;YACZ,cAAc,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;gBACjC,OAAO,EAAE,OAAgB;gBACzB,IAAI,EAAE;oBACJ,IAAI,EAAE,EAAE,EAAE,EAAE,sCAAsC,EAAE,KAAK,EAAE,gBAAgB,EAAE;oBAC7E,KAAK,EAAE,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE;oBAChD,QAAQ,EAAE,EAAE,QAAQ,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,SAAS,CAAC,EAAE;iBACxD;aACF,CAAC,CAAC;YACH,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;SAC1B,CAAC;QAEF,MAAM,OAAO,GAAG,6BAA6B,CAAC,KAAc,CAAC,CAAC;QAC9D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,2BAA2B,EAAE,IAAI,CAAC,CAAC;QAErG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACrC,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO;YAAE,OAAO;QACvC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QACxD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -71,12 +71,40 @@ describe("fetchMemorixList", () => {
71
71
  "entityId",
72
72
  "eventId",
73
73
  "knowledgeId",
74
+ "recordId",
75
+ "concept",
74
76
  "data.ip_address",
75
77
  "data.xdr.host_name",
76
78
  "data.investigationReport",
77
79
  ]);
78
80
  expect(snapshotRead?.[0]?.project).not.toContain("data");
79
81
  });
82
+ it("returns rows for neo recordId-only drivers", async () => {
83
+ const xronoxRead = vi.fn(async (params) => {
84
+ if (params.source === "assets-snapshots") {
85
+ return [
86
+ {
87
+ recordId: "rec-1",
88
+ concept: { title: "10.0.0.1" },
89
+ modifiedAt: "2026-01-01",
90
+ data: { ip_address: "10.0.0.1", xdr: { host_name: "host-a" } },
91
+ },
92
+ ];
93
+ }
94
+ return [];
95
+ });
96
+ const client = createMemorixRetrieval({
97
+ catalox: mockCatalox(),
98
+ xronox: { read: xronoxRead, readArray: xronoxRead },
99
+ });
100
+ const res = await fetchMemorixList(client, {
101
+ listId: "assets-main-list",
102
+ page: { limit: 10, offset: 0 },
103
+ });
104
+ expect(res.rows).toHaveLength(1);
105
+ expect(res.rows[0]?.recordId).toBe("rec-1");
106
+ expect((res.issues ?? []).some((i) => i.code === "INVALID_IDENTITY")).toBe(false);
107
+ });
80
108
  it("sets displayName from concept.name on list rows", async () => {
81
109
  const xronoxRead = vi.fn(async (params) => {
82
110
  if (params.source === "assets-snapshots") {
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-list.test.js","sourceRoot":"","sources":["../../src/tests/fetch-list.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fetch-list.test.js","sourceRoot":"","sources":["../../src/tests/fetch-list.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=graphs.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphs.test.d.ts","sourceRoot":"","sources":["../../src/tests/graphs.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,423 @@
1
+ import { describe, expect, it, vi, beforeEach } from "vitest";
2
+ import { graphLensForStorageContentType, storageContentTypeForLens, } from "../graphs/types.js";
3
+ import { DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH } from "../graphs/load-graph-descriptor.js";
4
+ import { FALLBACK_ENTITY_GRAPH } from "../graphs/fallback-graph-capabilities.js";
5
+ import { conceptFromRecord } from "../graphs/record-access.js";
6
+ const assetDoc = {
7
+ recordId: "asset-1",
8
+ concept: {
9
+ identifier: {
10
+ kind: "ipAddress",
11
+ ipAddress: "10.100.5.71",
12
+ identifierKey: "ipAddress:10.100.5.71",
13
+ },
14
+ title: "10.100.5.71",
15
+ },
16
+ data: { assetIp: "10.100.5.71", subnetCidrs: ["10.100.5.0/24"] },
17
+ analytics: {
18
+ vulnerabilities: { total: 4, medium: 1, low: 3 },
19
+ },
20
+ associatedTopology: [
21
+ {
22
+ cidr: "10.100.5.0/24",
23
+ zone: "DMZ_1",
24
+ reachableFromZones: ["OUTSIDE", "VPN"],
25
+ },
26
+ ],
27
+ };
28
+ const orphanAssetDoc = {
29
+ recordId: "polilla-1",
30
+ concept: {
31
+ identifier: {
32
+ kind: "ipAddress",
33
+ ipAddress: "10.146.36.100",
34
+ identifierKey: "ipAddress:10.146.36.100",
35
+ },
36
+ title: "POLILLA",
37
+ },
38
+ data: {
39
+ assetIp: "10.146.36.100",
40
+ zones: ["LAN"],
41
+ assetIpClassifications: [
42
+ {
43
+ ip: "10.146.36.100",
44
+ scope: "inside",
45
+ confidence: "medium",
46
+ reason: "PRIVATE_RFC1918_NO_CANONICAL_SUBNET_MATCH",
47
+ reasoning: "The IP is in RFC1918 private 10.0.0.0/8 space but no canonical subnet CIDR contains it.",
48
+ },
49
+ ],
50
+ },
51
+ };
52
+ const subnetDoc = {
53
+ recordId: "subnet-1",
54
+ concept: {
55
+ identifier: {
56
+ kind: "cidr",
57
+ cidr: "10.100.5.0/24",
58
+ identifierKey: "cidr:10.100.5.0/24",
59
+ },
60
+ title: "10.100.5.0/24",
61
+ },
62
+ data: {
63
+ cidr: "10.100.5.0/24",
64
+ zone: "DMZ_1",
65
+ reachableFromZones: ["OUTSIDE", "VPN"],
66
+ },
67
+ possiblePaths: {
68
+ items: [
69
+ {
70
+ title: "OUTSIDE → DMZ_1 → internal zones",
71
+ from: "OUTSIDE",
72
+ to: "LAN",
73
+ hops: ["DMZ_1"],
74
+ viaAsset: true,
75
+ },
76
+ ],
77
+ },
78
+ };
79
+ const vulnDoc = {
80
+ recordId: "vuln-1",
81
+ concept: {
82
+ identifier: {
83
+ kind: "hostVulnerability",
84
+ hostVulnerability: "10.100.5.71::pluginId:187315",
85
+ identifierKey: "hostVulnerability:10.100.5.71::pluginId:187315",
86
+ },
87
+ title: "SSH Terrapin",
88
+ },
89
+ data: {
90
+ assetIp: "10.100.5.71",
91
+ pluginId: "187315",
92
+ vulnerabilityName: "SSH Terrapin",
93
+ vulnerabilityFamily: "SSH",
94
+ },
95
+ };
96
+ const groupDoc = {
97
+ recordId: "group-1",
98
+ concept: {
99
+ identifier: {
100
+ kind: "pluginId",
101
+ pluginId: "187315",
102
+ identifierKey: "pluginId:187315",
103
+ },
104
+ title: "SSH Terrapin",
105
+ },
106
+ data: { name: "SSH Terrapin", pluginId: "187315", vulnerabilityFamily: "SSH" },
107
+ };
108
+ vi.mock("../descriptors/discover-entities.js", () => ({
109
+ loadMemorixEntityDescriptorByName: vi.fn(async () => {
110
+ throw new Error("no catalox in unit test");
111
+ }),
112
+ }));
113
+ vi.mock("../graphs/record-access.js", async () => {
114
+ const actual = await vi.importActual("../graphs/record-access.js");
115
+ return {
116
+ ...actual,
117
+ findSnapshotByIdentifierKey: vi.fn(async (_c, objectType, key) => {
118
+ if (objectType === "assets" && key === "ipAddress:10.100.5.71")
119
+ return assetDoc;
120
+ if (objectType === "assets" && key === "ipAddress:10.146.36.100") {
121
+ return orphanAssetDoc;
122
+ }
123
+ if (objectType === "assets" && key === "ipAddress:1.2.3.4") {
124
+ return {
125
+ recordId: "a1",
126
+ concept: {
127
+ identifier: {
128
+ kind: "ipAddress",
129
+ ipAddress: "1.2.3.4",
130
+ identifierKey: "ipAddress:1.2.3.4",
131
+ },
132
+ title: "1.2.3.4",
133
+ },
134
+ data: { assetIp: "1.2.3.4" },
135
+ associatedTopology: [
136
+ { cidr: "1.2.3.0/24", zone: "LAN", reachableFromZones: [] },
137
+ ],
138
+ };
139
+ }
140
+ if (objectType === "subnets" && key === "cidr:10.100.5.0/24")
141
+ return subnetDoc;
142
+ if (objectType === "subnets" && key === "cidr:10.5.0.0/28") {
143
+ return {
144
+ recordId: "subnet-orphan-28",
145
+ concept: {
146
+ identifier: {
147
+ kind: "cidr",
148
+ cidr: "10.5.0.0/28",
149
+ identifierKey: "cidr:10.5.0.0/28",
150
+ },
151
+ title: "10.5.0.0/28",
152
+ },
153
+ data: {
154
+ cidr: "10.5.0.0/28",
155
+ zone: "LAN",
156
+ reachableFromZones: ["VPN"],
157
+ },
158
+ };
159
+ }
160
+ if (objectType === "vulnerabilities" &&
161
+ key === "hostVulnerability:10.100.5.71::pluginId:187315") {
162
+ return vulnDoc;
163
+ }
164
+ return null;
165
+ }),
166
+ findSnapshotByRecordId: vi.fn(async (_c, objectType, recordId) => {
167
+ if (objectType === "subnets" && recordId === "subnet-1")
168
+ return subnetDoc;
169
+ if (objectType === "vulnerabilities" && recordId === "vuln-1")
170
+ return vulnDoc;
171
+ if (objectType === "subnets" && recordId === "subnet-orphan-28") {
172
+ return {
173
+ recordId: "subnet-orphan-28",
174
+ concept: {
175
+ identifier: {
176
+ kind: "cidr",
177
+ cidr: "10.5.0.0/28",
178
+ identifierKey: "cidr:10.5.0.0/28",
179
+ },
180
+ title: "10.5.0.0/28",
181
+ },
182
+ data: {
183
+ cidr: "10.5.0.0/28",
184
+ zone: "LAN",
185
+ reachableFromZones: ["VPN"],
186
+ },
187
+ };
188
+ }
189
+ return null;
190
+ }),
191
+ listSnapshots: vi.fn(async (_c, objectType, options) => {
192
+ const q = options?.query ?? {};
193
+ if (objectType === "vulnerabilities") {
194
+ if (q["data.assetIp"] === "10.100.5.71")
195
+ return [vulnDoc];
196
+ if (q["data.assetIp"] === "1.2.3.4")
197
+ return [];
198
+ if (q["data.assetIp"] === "10.146.36.100")
199
+ return [];
200
+ return [];
201
+ }
202
+ if (objectType === "vulnerabilities-groups") {
203
+ if (q["data.name"] === "SSH Terrapin")
204
+ return [groupDoc];
205
+ if (q["data.pluginId"] === "187315")
206
+ return [groupDoc];
207
+ return [];
208
+ }
209
+ if (objectType === "subnets") {
210
+ if (q["data.cidr"] === "10.100.5.0/24")
211
+ return [subnetDoc];
212
+ return [];
213
+ }
214
+ if (objectType === "assets") {
215
+ if (q["associatedTopology.cidr"] === "10.100.5.0/24")
216
+ return [assetDoc];
217
+ if (q["associatedTopology.cidr"] === "10.5.0.0/28")
218
+ return [];
219
+ if (q["data.subnetCidrs"] === "10.100.5.0/24")
220
+ return [assetDoc];
221
+ if (q["data.subnetCidrs"] &&
222
+ typeof q["data.subnetCidrs"] === "object" &&
223
+ Array.isArray(q["data.subnetCidrs"].$in) &&
224
+ q["data.subnetCidrs"].$in.includes("10.100.5.0/24")) {
225
+ return [assetDoc];
226
+ }
227
+ if (q["data.assetIps"] === "10.100.5.71")
228
+ return [assetDoc];
229
+ return [];
230
+ }
231
+ if (objectType === "topology-zones") {
232
+ if (q["data.name"] === "DMZ_1" || q["data.name"] === "LAN") {
233
+ const name = String(q["data.name"]);
234
+ return [
235
+ {
236
+ recordId: `zone-${name}`,
237
+ concept: {
238
+ identifier: {
239
+ kind: "zoneName",
240
+ zoneName: name,
241
+ identifierKey: `zoneName:${name}`,
242
+ },
243
+ title: name,
244
+ },
245
+ data: { name },
246
+ },
247
+ ];
248
+ }
249
+ return [];
250
+ }
251
+ return [];
252
+ }),
253
+ fetchContentLenses: vi.fn(async () => ({})),
254
+ };
255
+ });
256
+ describe("graph lens mapping", () => {
257
+ it("maps snapshot singular to snapshots storage", () => {
258
+ expect(storageContentTypeForLens("snapshot")).toBe("snapshots");
259
+ expect(storageContentTypeForLens("analysis")).toBe("analysis");
260
+ expect(storageContentTypeForLens("decisions")).toBe("decisions");
261
+ });
262
+ it("maps snapshots storage to snapshot lens", () => {
263
+ expect(graphLensForStorageContentType("snapshots")).toBe("snapshot");
264
+ expect(graphLensForStorageContentType("discovery")).toBe("discovery");
265
+ });
266
+ });
267
+ describe("default graph descriptor", () => {
268
+ it("composes tiers via includeEdgeTemplates", () => {
269
+ expect(DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH.id).toBe("asset-topology-vulnerabilities-graph");
270
+ expect(DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH.tiers.map((t) => t.id)).toEqual([
271
+ "topology",
272
+ "vulnerabilities",
273
+ ]);
274
+ expect(DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH.includeEdgeTemplates).toContain("asset-topology-associated");
275
+ expect(DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH.includeEdgeTemplates).toContain("subnet-path-facts");
276
+ expect(DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH.includeEdgeTemplates).toContain("asset-subnets-by-cidr");
277
+ expect(DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH.includeEdgeTemplates).toContain("vuln-affected-asset");
278
+ expect(DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH.nodes.some((n) => n.objectType === "assets")).toBe(true);
279
+ expect(FALLBACK_ENTITY_GRAPH.assets?.node.kind).toBe("ipAddress");
280
+ });
281
+ });
282
+ describe("conceptFromRecord", () => {
283
+ it("reads identifierKey and title", () => {
284
+ const concept = conceptFromRecord({
285
+ concept: {
286
+ identifier: {
287
+ kind: "ipAddress",
288
+ ipAddress: "10.100.5.71",
289
+ identifierKey: "ipAddress:10.100.5.71",
290
+ },
291
+ title: "10.100.5.71",
292
+ },
293
+ });
294
+ expect(concept?.identifier.identifierKey).toBe("ipAddress:10.100.5.71");
295
+ expect(concept?.title).toBe("10.100.5.71");
296
+ });
297
+ });
298
+ describe("generic graph projector", () => {
299
+ beforeEach(() => {
300
+ vi.clearAllMocks();
301
+ });
302
+ it("projects topology + vulnerabilities from entity capabilities", async () => {
303
+ const { buildMemorixGraphDocument } = await import("../graphs/build-graph-document.js");
304
+ const doc = await buildMemorixGraphDocument({}, {
305
+ descriptor: DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH,
306
+ focusIdentifierKey: "ipAddress:10.100.5.71",
307
+ });
308
+ const ids = doc.nodes.map((n) => n.id);
309
+ expect(ids).toContain("ipAddress:10.100.5.71");
310
+ expect(ids).toContain("cidr:10.100.5.0/24");
311
+ expect(ids).toContain("zoneName:DMZ_1");
312
+ expect(ids).toContain("zoneName:OUTSIDE");
313
+ expect(ids).toContain("zoneName:VPN");
314
+ expect(ids).toContain("pathId:OUTSIDE → DMZ_1");
315
+ expect(ids).toContain("pathId:OUTSIDE → DMZ_1 → internal zones");
316
+ expect(ids).toContain("hostVulnerability:10.100.5.71::pluginId:187315");
317
+ expect(ids).toContain("pluginId:187315");
318
+ expect(ids).toContain("vulnerabilityFamily:SSH");
319
+ const types = new Set(doc.edges.map((e) => e.type));
320
+ expect(types.has("containedIn")).toBe(true);
321
+ expect(types.has("inZone")).toBe(true);
322
+ expect(types.has("reachableFrom")).toBe(true);
323
+ expect(types.has("pathSource")).toBe(true);
324
+ expect(types.has("pathViaAsset")).toBe(true);
325
+ expect(types.has("pathHop")).toBe(true);
326
+ expect(types.has("affectsAsset")).toBe(true);
327
+ expect(types.has("inGroup")).toBe(true);
328
+ expect(types.has("inFamily")).toBe(true);
329
+ expect(doc.notes?.focusAssetId).toBe("ipAddress:10.100.5.71");
330
+ expect(String(doc.notes?.joinPoint ?? "")).toContain("ipAddress:10.100.5.71");
331
+ expect(doc.notes?.assetAnalytics).toEqual({ total: 4, medium: 1, low: 3 });
332
+ expect(doc.notes?.vulnerabilityCount).toBe(1);
333
+ });
334
+ it("emits observedInZone + topologyGap for orphan assets with host zones", async () => {
335
+ const { buildMemorixGraphDocument } = await import("../graphs/build-graph-document.js");
336
+ const doc = await buildMemorixGraphDocument({}, {
337
+ descriptor: DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH,
338
+ focusIdentifierKey: "ipAddress:10.146.36.100",
339
+ });
340
+ expect(doc.nodes.map((n) => n.id)).toContain("ipAddress:10.146.36.100");
341
+ expect(doc.nodes.map((n) => n.id)).toContain("zoneName:LAN");
342
+ expect(doc.edges.some((e) => e.type === "observedInZone")).toBe(true);
343
+ expect(doc.notes?.topologyGap).toMatchObject({
344
+ hasAssociatedTopology: false,
345
+ hasObservedZones: true,
346
+ hasSubnetCidrs: false,
347
+ });
348
+ expect(doc.notes?.topologyGap?.reasons).toContain("PRIVATE_RFC1918_NO_CANONICAL_SUBNET_MATCH");
349
+ expect(doc.notes?.focusAssetId).toBe("ipAddress:10.146.36.100");
350
+ });
351
+ it("supports a second graph via descriptor only", async () => {
352
+ const tinyGraph = {
353
+ id: "tiny-asset-subnet",
354
+ title: "Tiny asset→subnet",
355
+ focusObjectType: "assets",
356
+ maxDepth: 1,
357
+ includeEdgeTemplates: ["asset-topology-associated"],
358
+ tiers: [
359
+ {
360
+ id: "topology",
361
+ label: "Topology",
362
+ objectTypes: ["assets", "subnets", "topology-zones"],
363
+ },
364
+ ],
365
+ nodes: [
366
+ { objectType: "assets", tier: "topology" },
367
+ { objectType: "subnets", tier: "topology" },
368
+ { objectType: "topology-zones", tier: "topology" },
369
+ ],
370
+ };
371
+ const { buildMemorixGraphDocument } = await import("../graphs/build-graph-document.js");
372
+ const doc = await buildMemorixGraphDocument({}, {
373
+ descriptor: tinyGraph,
374
+ focusIdentifierKey: "ipAddress:1.2.3.4",
375
+ });
376
+ expect(doc.nodes.some((n) => n.id === "cidr:1.2.3.0/24")).toBe(true);
377
+ expect(doc.nodes.some((n) => n.objectType === "vulnerabilities")).toBe(false);
378
+ expect(doc.edges.every((e) => e.type !== "affectsAsset")).toBe(true);
379
+ });
380
+ it("resolves subnet focus from Directory recordId + cidr identifierKey", async () => {
381
+ const { buildMemorixGraphDocument } = await import("../graphs/build-graph-document.js");
382
+ const doc = await buildMemorixGraphDocument({}, {
383
+ descriptor: DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH,
384
+ // Directory always sends both; recordId is a subnet id, not an asset id.
385
+ focusRecordId: "subnet-orphan-28",
386
+ focusIdentifierKey: "cidr:10.5.0.0/28",
387
+ });
388
+ expect(doc.notes?.warning).toBeUndefined();
389
+ expect(doc.notes?.focusObjectType).toBe("subnets");
390
+ expect(doc.notes?.focusAssetId).toBe("cidr:10.5.0.0/28");
391
+ expect(doc.nodes.map((n) => n.id)).toContain("cidr:10.5.0.0/28");
392
+ expect(doc.nodes.map((n) => n.id)).toContain("zoneName:LAN");
393
+ expect(doc.edges.some((e) => e.type === "inZone")).toBe(true);
394
+ });
395
+ it("resolves subnet focus by identifierKey alone", async () => {
396
+ const { buildMemorixGraphDocument } = await import("../graphs/build-graph-document.js");
397
+ const doc = await buildMemorixGraphDocument({}, {
398
+ descriptor: DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH,
399
+ focusIdentifierKey: "cidr:10.100.5.0/24",
400
+ });
401
+ expect(doc.notes?.warning).toBeUndefined();
402
+ expect(doc.notes?.focusObjectType).toBe("subnets");
403
+ expect(doc.nodes.map((n) => n.id)).toContain("cidr:10.100.5.0/24");
404
+ expect(doc.nodes.map((n) => n.id)).toContain("ipAddress:10.100.5.71");
405
+ expect(doc.nodes.map((n) => n.id)).toContain("zoneName:DMZ_1");
406
+ expect(doc.edges.some((e) => e.type === "containedIn")).toBe(true);
407
+ expect(doc.edges.some((e) => e.type === "pathHop")).toBe(true);
408
+ });
409
+ it("walks vulnerability focus to asset → subnet via snapshot joins", async () => {
410
+ const { buildMemorixGraphDocument } = await import("../graphs/build-graph-document.js");
411
+ const doc = await buildMemorixGraphDocument({}, {
412
+ descriptor: DEFAULT_ASSET_TOPOLOGY_VULNERABILITIES_GRAPH,
413
+ focusIdentifierKey: "hostVulnerability:10.100.5.71::pluginId:187315",
414
+ });
415
+ expect(doc.notes?.warning).toBeUndefined();
416
+ expect(doc.notes?.focusObjectType).toBe("vulnerabilities");
417
+ expect(doc.nodes.map((n) => n.id)).toContain("ipAddress:10.100.5.71");
418
+ expect(doc.nodes.map((n) => n.id)).toContain("cidr:10.100.5.0/24");
419
+ expect(doc.edges.some((e) => e.type === "affectsAsset")).toBe(true);
420
+ expect(doc.edges.some((e) => e.type === "containedIn")).toBe(true);
421
+ });
422
+ });
423
+ //# sourceMappingURL=graphs.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphs.test.js","sourceRoot":"","sources":["../../src/tests/graphs.test.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,19 @@ describe("identity", () => {
14
14
  if (r.ok)
15
15
  expect(r.identity.eventId).toBe("e1");
16
16
  });
17
- it("rejects both ids", () => {
17
+ it("accepts recordId when no legacy id is present", () => {
18
+ const r = validateMemorixIdentity({ recordId: "rec-1" });
19
+ expect(r.ok).toBe(true);
20
+ if (r.ok)
21
+ expect(r.identity.recordId).toBe("rec-1");
22
+ });
23
+ it("prefers legacy entityId over recordId", () => {
24
+ const r = validateMemorixIdentity({ entityId: "a1", recordId: "rec-1" });
25
+ expect(r.ok).toBe(true);
26
+ if (r.ok)
27
+ expect(r.identity.entityId).toBe("a1");
28
+ });
29
+ it("rejects both legacy ids", () => {
18
30
  const r = validateMemorixIdentity({ entityId: "a", eventId: "e" });
19
31
  expect(r.ok).toBe(false);
20
32
  if (!r.ok)
@@ -1 +1 @@
1
- {"version":3,"file":"identity.test.js","sourceRoot":"","sources":["../../src/tests/identity.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,uBAAuB,EAAE,GAAG,EAAE;QAC/B,MAAM,CAAC,GAAG,uBAAuB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,GAAG,uBAAuB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,CAAC,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kBAAkB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,GAAG,uBAAuB,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,CAAC,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC5B,MAAM,CAAC,GAAG,uBAAuB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAClD,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QAC7E,MAAM,CAAC,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"identity.test.js","sourceRoot":"","sources":["../../src/tests/identity.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=infer-graph.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer-graph.test.d.ts","sourceRoot":"","sources":["../../src/tests/infer-graph.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { guessFocusObjectTypeFromGraphId } from "../graphs/infer-graph-descriptor.js";
3
+ describe("guessFocusObjectTypeFromGraphId", () => {
4
+ it("guesses assets from cyber graph id", () => {
5
+ expect(guessFocusObjectTypeFromGraphId("asset-topology-vulnerabilities-graph", [
6
+ "assets",
7
+ "vulnerabilities",
8
+ "subnets",
9
+ ])).toBe("assets");
10
+ });
11
+ it("guesses recipes from kitchen graph id", () => {
12
+ expect(guessFocusObjectTypeFromGraphId("kitchen-recipes-supply-graph", [
13
+ "ingredients",
14
+ "recipes",
15
+ "pantry-zones",
16
+ ])).toBe("recipes");
17
+ });
18
+ });
19
+ //# sourceMappingURL=infer-graph.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"infer-graph.test.js","sourceRoot":"","sources":["../../src/tests/infer-graph.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,+BAA+B,EAAE,MAAM,qCAAqC,CAAC;AAEtF,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC5C,MAAM,CACJ,+BAA+B,CAAC,sCAAsC,EAAE;YACtE,QAAQ;YACR,iBAAiB;YACjB,SAAS;SACV,CAAC,CACH,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,GAAG,EAAE;QAC/C,MAAM,CACJ,+BAA+B,CAAC,8BAA8B,EAAE;YAC9D,aAAa;YACb,SAAS;YACT,cAAc;SACf,CAAC,CACH,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}