@x12i/memorix-retrieval 1.21.0 → 1.23.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/README.md +87 -0
- package/catalox-seeds/inputs/entity-descriptors/assets.json +7 -7
- package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +7 -7
- package/catalox-seeds/inputs/item-descriptors/asset-detail-item.json +2 -2
- package/catalox-seeds/inputs/item-descriptors/topology-subnet-detail-item.json +2 -2
- package/catalox-seeds/inputs/item-descriptors/vulnerability-detail-item.json +2 -2
- package/catalox-seeds/inputs/list-descriptors/critical-vulnerabilities-slice.json +1 -1
- package/catalox-seeds/inputs/manifest.json +1 -1
- package/catalox-seeds/inputs/memorix-catalog-ids.json +1 -1
- package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +33 -33
- package/dist/client/catalox-mongo-bootstrap.d.ts +13 -0
- package/dist/client/catalox-mongo-bootstrap.d.ts.map +1 -0
- package/dist/client/catalox-mongo-bootstrap.js +22 -0
- package/dist/client/catalox-mongo-bootstrap.js.map +1 -0
- package/dist/client/create-stack-from-env.js +2 -2
- package/dist/client/create-stack-from-env.js.map +1 -1
- package/dist/client/types.d.ts +17 -9
- package/dist/client/types.d.ts.map +1 -1
- package/dist/data/record-display-name.d.ts +4 -0
- package/dist/data/record-display-name.d.ts.map +1 -0
- package/dist/data/record-display-name.js +48 -0
- package/dist/data/record-display-name.js.map +1 -0
- package/dist/data/record-display-name.test.d.ts +2 -0
- package/dist/data/record-display-name.test.d.ts.map +1 -0
- package/dist/data/record-display-name.test.js +72 -0
- package/dist/data/record-display-name.test.js.map +1 -0
- package/dist/data/record-id.d.ts.map +1 -1
- package/dist/data/record-id.js +1 -1
- package/dist/data/record-id.js.map +1 -1
- package/dist/data/record-identity.d.ts +2 -2
- package/dist/data/record-identity.d.ts.map +1 -1
- package/dist/data/record-identity.js +23 -20
- package/dist/data/record-identity.js.map +1 -1
- package/dist/data/record-info.d.ts +32 -0
- package/dist/data/record-info.d.ts.map +1 -0
- package/dist/data/record-info.js +90 -0
- package/dist/data/record-info.js.map +1 -0
- package/dist/data/record-info.test.d.ts +2 -0
- package/dist/data/record-info.test.d.ts.map +1 -0
- package/dist/data/record-info.test.js +62 -0
- package/dist/data/record-info.test.js.map +1 -0
- package/dist/descriptors/catalog-ids.d.ts +2 -1
- package/dist/descriptors/catalog-ids.d.ts.map +1 -1
- package/dist/descriptors/catalog-ids.js +2 -1
- package/dist/descriptors/catalog-ids.js.map +1 -1
- package/dist/descriptors/descriptor-types.d.ts +14 -2
- package/dist/descriptors/descriptor-types.d.ts.map +1 -1
- package/dist/descriptors/internal-object-types.d.ts +3 -0
- package/dist/descriptors/internal-object-types.d.ts.map +1 -0
- package/dist/descriptors/internal-object-types.js +7 -0
- package/dist/descriptors/internal-object-types.js.map +1 -0
- package/dist/descriptors/load-list-descriptor.d.ts.map +1 -1
- package/dist/descriptors/load-list-descriptor.js +2 -1
- package/dist/descriptors/load-list-descriptor.js.map +1 -1
- package/dist/descriptors/normalize-list-sort.d.ts +5 -0
- package/dist/descriptors/normalize-list-sort.d.ts.map +1 -0
- package/dist/descriptors/normalize-list-sort.js +20 -0
- package/dist/descriptors/normalize-list-sort.js.map +1 -0
- package/dist/descriptors/validate-descriptor.d.ts +1 -0
- package/dist/descriptors/validate-descriptor.d.ts.map +1 -1
- package/dist/descriptors/validate-descriptor.js +25 -1
- package/dist/descriptors/validate-descriptor.js.map +1 -1
- package/dist/explorer/collection-records.d.ts +3 -2
- package/dist/explorer/collection-records.d.ts.map +1 -1
- package/dist/explorer/collection-records.js +4 -3
- package/dist/explorer/collection-records.js.map +1 -1
- package/dist/explorer/entity-graph.d.ts +2 -0
- package/dist/explorer/entity-graph.d.ts.map +1 -1
- package/dist/explorer/entity-graph.js +7 -1
- package/dist/explorer/entity-graph.js.map +1 -1
- package/dist/explorer/health.d.ts.map +1 -1
- package/dist/explorer/health.js +65 -30
- package/dist/explorer/health.js.map +1 -1
- package/dist/explorer/raw-collection-records.d.ts +2 -0
- package/dist/explorer/raw-collection-records.d.ts.map +1 -1
- package/dist/explorer/raw-collection-records.js +19 -14
- package/dist/explorer/raw-collection-records.js.map +1 -1
- package/dist/explorer/raw-reads.d.ts +2 -2
- package/dist/explorer/raw-reads.d.ts.map +1 -1
- package/dist/explorer/raw-reads.js +15 -2
- package/dist/explorer/raw-reads.js.map +1 -1
- package/dist/explorer/slice-index.d.ts.map +1 -1
- package/dist/explorer/slice-index.js +19 -11
- package/dist/explorer/slice-index.js.map +1 -1
- package/dist/explorer/unified-inventory.d.ts +3 -1
- package/dist/explorer/unified-inventory.d.ts.map +1 -1
- package/dist/explorer/unified-inventory.js +9 -2
- package/dist/explorer/unified-inventory.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/mongo/env.d.ts +2 -0
- package/dist/mongo/env.d.ts.map +1 -1
- package/dist/mongo/env.js +4 -0
- package/dist/mongo/env.js.map +1 -1
- package/dist/retrieval/compose-row.d.ts.map +1 -1
- package/dist/retrieval/compose-row.js +10 -0
- package/dist/retrieval/compose-row.js.map +1 -1
- package/dist/retrieval/fetch-full-record.d.ts +22 -0
- package/dist/retrieval/fetch-full-record.d.ts.map +1 -0
- package/dist/retrieval/fetch-full-record.js +68 -0
- package/dist/retrieval/fetch-full-record.js.map +1 -0
- package/dist/retrieval/fetch-item.d.ts.map +1 -1
- package/dist/retrieval/fetch-item.js +15 -0
- package/dist/retrieval/fetch-item.js.map +1 -1
- package/dist/retrieval/fetch-list.d.ts.map +1 -1
- package/dist/retrieval/fetch-list.js +16 -7
- package/dist/retrieval/fetch-list.js.map +1 -1
- package/dist/retrieval/fetch-narratives.d.ts.map +1 -1
- package/dist/retrieval/fetch-narratives.js +2 -9
- package/dist/retrieval/fetch-narratives.js.map +1 -1
- package/dist/retrieval/fetch-record-info.d.ts +33 -0
- package/dist/retrieval/fetch-record-info.d.ts.map +1 -0
- package/dist/retrieval/fetch-record-info.js +39 -0
- package/dist/retrieval/fetch-record-info.js.map +1 -0
- package/dist/retrieval/fetch-workspace-list.d.ts.map +1 -1
- package/dist/retrieval/fetch-workspace-list.js +18 -7
- package/dist/retrieval/fetch-workspace-list.js.map +1 -1
- package/dist/retrieval/graph-run-buckets.js +1 -1
- package/dist/retrieval/graph-run-buckets.js.map +1 -1
- package/dist/retrieval/graph-run-buckets.test.js +1 -1
- package/dist/retrieval/graph-run-buckets.test.js.map +1 -1
- package/dist/retrieval/graph-run-filters.d.ts.map +1 -1
- package/dist/retrieval/graph-run-filters.js +1 -1
- package/dist/retrieval/graph-run-filters.js.map +1 -1
- package/dist/retrieval/graph-run-filters.test.js +11 -11
- package/dist/retrieval/graph-run-filters.test.js.map +1 -1
- package/dist/retrieval/processing-overview.test.js +2 -2
- package/dist/retrieval/processing-overview.test.js.map +1 -1
- package/dist/retrieval/resolve-filters.d.ts.map +1 -1
- package/dist/retrieval/resolve-filters.js +0 -4
- package/dist/retrieval/resolve-filters.js.map +1 -1
- package/dist/retrieval/resolve-list-analytics.d.ts +5 -0
- package/dist/retrieval/resolve-list-analytics.d.ts.map +1 -0
- package/dist/retrieval/resolve-list-analytics.js +63 -0
- package/dist/retrieval/resolve-list-analytics.js.map +1 -0
- package/dist/retrieval/resolve-pagination-driver.js +2 -2
- package/dist/retrieval/resolve-pagination-driver.js.map +1 -1
- package/dist/retrieval/resolve-sort.d.ts +8 -6
- package/dist/retrieval/resolve-sort.d.ts.map +1 -1
- package/dist/retrieval/resolve-sort.js +38 -15
- package/dist/retrieval/resolve-sort.js.map +1 -1
- package/dist/tests/collection-parser.test.js +14 -0
- package/dist/tests/collection-parser.test.js.map +1 -1
- package/dist/tests/create-stack-from-env.test.js +4 -3
- package/dist/tests/create-stack-from-env.test.js.map +1 -1
- package/dist/tests/entity-graph.test.js +45 -0
- package/dist/tests/entity-graph.test.js.map +1 -1
- package/dist/tests/env.test.js +9 -1
- package/dist/tests/env.test.js.map +1 -1
- package/dist/tests/fetch-item.test.js +71 -0
- package/dist/tests/fetch-item.test.js.map +1 -1
- package/dist/tests/fetch-list.test.js +84 -3
- package/dist/tests/fetch-list.test.js.map +1 -1
- package/dist/tests/fetch-narratives.test.js +1 -1
- package/dist/tests/fetch-narratives.test.js.map +1 -1
- package/dist/tests/fetch-record-info.test.d.ts +2 -0
- package/dist/tests/fetch-record-info.test.d.ts.map +1 -0
- package/dist/tests/fetch-record-info.test.js +68 -0
- package/dist/tests/fetch-record-info.test.js.map +1 -0
- package/dist/tests/fixtures.js +3 -3
- package/dist/tests/fixtures.js.map +1 -1
- package/dist/tests/internal-object-types.test.d.ts +2 -0
- package/dist/tests/internal-object-types.test.d.ts.map +1 -0
- package/dist/tests/internal-object-types.test.js +16 -0
- package/dist/tests/internal-object-types.test.js.map +1 -0
- package/dist/tests/raw-reads.test.d.ts +2 -0
- package/dist/tests/raw-reads.test.d.ts.map +1 -0
- package/dist/tests/raw-reads.test.js +122 -0
- package/dist/tests/raw-reads.test.js.map +1 -0
- package/dist/tests/unified-inventory.test.js +1 -1
- package/dist/tests/unified-inventory.test.js.map +1 -1
- package/docs/EXPLORER-HOST-APIS.md +1 -1
- package/docs/MEMORIX-CATALOX-CONTRACTS.md +1 -1
- package/docs/MEMORIX-DATABASE-CONVENTIONS.md +27 -39
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -289,6 +289,62 @@ const page = await fetchMemorixSliceRecords(client, {
|
|
|
289
289
|
});
|
|
290
290
|
```
|
|
291
291
|
|
|
292
|
+
## Record display names
|
|
293
|
+
|
|
294
|
+
Human-readable titles for operators come from **`record.concept.name`** on stored documents (see [MEMORIX-DATABASE-CONVENTIONS.md](./docs/MEMORIX-DATABASE-CONVENTIONS.md)). Memorix read-tier APIs resolve display names centrally — hosts must not scan top-level `id`, `name`, or `data.*` fields.
|
|
295
|
+
|
|
296
|
+
```typescript
|
|
297
|
+
import { resolveMemorixRecordDisplayName } from "@x12i/memorix-retrieval";
|
|
298
|
+
|
|
299
|
+
const displayName = resolveMemorixRecordDisplayName(record, {
|
|
300
|
+
preferredLocale: "en", // optional; for localized concept.name objects
|
|
301
|
+
});
|
|
302
|
+
// string | undefined — never falls back to record id or identity fields
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
**Supported `concept.name` shapes:** plain string, string array (first non-empty entry), localized object (`{ en: "...", he: "..." }`).
|
|
306
|
+
|
|
307
|
+
**List and item responses** include optional top-level `displayName` (and list rows also expose `recordId` when resolvable):
|
|
308
|
+
|
|
309
|
+
- `fetchMemorixList` / `fetchMemorixListForEntity` → `rows[].displayName`
|
|
310
|
+
- `fetchMemorixItem` / `fetchMemorixItemForEntity` → `displayName`
|
|
311
|
+
- `listMemorixEntityContentTypeDocuments` → `documents[].displayName`
|
|
312
|
+
|
|
313
|
+
When `concept.name` is absent, `displayName` is omitted. Show the record id separately for disambiguation — do not substitute it as the title.
|
|
314
|
+
|
|
315
|
+
### Easy retrieval helpers
|
|
316
|
+
|
|
317
|
+
Use these when you need identity + display name without re-implementing Memorix rules:
|
|
318
|
+
|
|
319
|
+
```typescript
|
|
320
|
+
import {
|
|
321
|
+
fetchMemorixRecordInfoForEntity,
|
|
322
|
+
resolveMemorixRecordInfo,
|
|
323
|
+
resolveMemorixRecordInfoFromRow,
|
|
324
|
+
resolveMemorixRecordInfoFromItem,
|
|
325
|
+
formatMemorixRecordLabel,
|
|
326
|
+
} from "@x12i/memorix-retrieval";
|
|
327
|
+
|
|
328
|
+
// One call: lookup by entity + recordId / entityId / eventId / knowledgeId
|
|
329
|
+
const info = await fetchMemorixRecordInfoForEntity(client, {
|
|
330
|
+
entityName: "vulnerability-groups",
|
|
331
|
+
recordId: "69d216ed358778e93215788d",
|
|
332
|
+
});
|
|
333
|
+
// → { recordId, displayName?, entityId?, identityField?, identityValue? }
|
|
334
|
+
|
|
335
|
+
// From list rows (already stamped with displayName)
|
|
336
|
+
const fromRow = resolveMemorixRecordInfoFromRow(listRow);
|
|
337
|
+
|
|
338
|
+
// From item responses
|
|
339
|
+
const fromItem = resolveMemorixRecordInfoFromItem(itemResponse);
|
|
340
|
+
|
|
341
|
+
// Picker / journal label — name when present, else id
|
|
342
|
+
const label = formatMemorixRecordLabel(info);
|
|
343
|
+
const withSuffix = formatMemorixRecordLabel(info, { includeIdSuffix: true });
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
**Search:** `memorixLabelSearchFilter` (used by raw entity reads) includes `concept.name` for string-valued names. Localized-object search is best-effort on the `concept.name` path only.
|
|
347
|
+
|
|
292
348
|
## Record identity
|
|
293
349
|
|
|
294
350
|
```typescript
|
|
@@ -394,6 +450,37 @@ npm run catalox:seed:memorix-retrieval:apply
|
|
|
394
450
|
npm run catalox:seed:ensure
|
|
395
451
|
```
|
|
396
452
|
|
|
453
|
+
## Lists catalog (`lists`)
|
|
454
|
+
|
|
455
|
+
The list descriptor catalog id is **`lists`** (legacy: `memorix-list-descriptors`). Migrate existing Catalox data with `memorix-descriptors/scripts/migrate-list-descriptors-catalog.mjs`.
|
|
456
|
+
|
|
457
|
+
## Compound sort
|
|
458
|
+
|
|
459
|
+
`fetchMemorixList` accepts `sort: [{ property, direction }, ...]`. Secondary sort keys must resolve to the **same content type** as the primary key. Ensure a matching compound index exists on the driver collection — there is no automatic index provisioning.
|
|
460
|
+
|
|
461
|
+
## Analytics fields on lists
|
|
462
|
+
|
|
463
|
+
List descriptors may declare `analytics[]` with `{ field, collection, joinBy, metric }`. Values are merged into rows per page via scoped aggregation (`groupMemorixRecords`).
|
|
464
|
+
|
|
465
|
+
## Full record fetch
|
|
466
|
+
|
|
467
|
+
```ts
|
|
468
|
+
import { fetchMemorixFullRecord } from "@x12i/memorix-retrieval";
|
|
469
|
+
|
|
470
|
+
const full = await fetchMemorixFullRecord(client, {
|
|
471
|
+
entityName: "assets",
|
|
472
|
+
entityId: "abc-123",
|
|
473
|
+
// contentTypes: ["snapshots", "analysis"], // optional subset
|
|
474
|
+
});
|
|
475
|
+
// full.contentTypes — raw document(s) per content type
|
|
476
|
+
```
|
|
477
|
+
|
|
478
|
+
Unlike `fetchMemorixItemForEntity`, this bypasses item descriptors and returns uncurated documents.
|
|
479
|
+
|
|
480
|
+
## List filters
|
|
481
|
+
|
|
482
|
+
Request filters use `MemorixFilterInput[]`. A property is authorized when it is `filterable: true` on the entity descriptor and belongs to the list's **leading** content type. The list descriptor's `filters[]` array supplies pinned defaults only — it is not an allow-list for ad-hoc filters.
|
|
483
|
+
|
|
397
484
|
## Build, test, and live smoke
|
|
398
485
|
|
|
399
486
|
```bash
|
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
"collectionPrefix": "assets",
|
|
8
8
|
"identity": {
|
|
9
9
|
"allowedIdFields": [
|
|
10
|
-
"
|
|
11
|
-
"
|
|
10
|
+
"recordId",
|
|
11
|
+
"recordId"
|
|
12
12
|
],
|
|
13
13
|
"requiredExactlyOne": true,
|
|
14
|
-
"defaultIdField": "
|
|
14
|
+
"defaultIdField": "recordId"
|
|
15
15
|
},
|
|
16
16
|
"defaults": {
|
|
17
17
|
"canonicalContentType": "snapshots",
|
|
18
18
|
"dataRoot": "data",
|
|
19
|
-
"effectiveDatePath": "
|
|
19
|
+
"effectiveDatePath": "data.lastSeen",
|
|
20
20
|
"fallbackEffectiveDatePaths": [
|
|
21
21
|
"capturedAt",
|
|
22
22
|
"snapshot.capturedAt",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"collection": "assets-snapshots",
|
|
30
30
|
"dataRoot": "data",
|
|
31
31
|
"isCanonical": true,
|
|
32
|
-
"effectiveDatePath": "
|
|
32
|
+
"effectiveDatePath": "data.lastSeen",
|
|
33
33
|
"fallbackEffectiveDatePaths": [
|
|
34
34
|
"capturedAt",
|
|
35
35
|
"snapshot.capturedAt",
|
|
@@ -81,7 +81,7 @@
|
|
|
81
81
|
"label": "Source",
|
|
82
82
|
"source": {
|
|
83
83
|
"contentType": "snapshots",
|
|
84
|
-
"path": "
|
|
84
|
+
"path": "data.source"
|
|
85
85
|
},
|
|
86
86
|
"humanReadable": true,
|
|
87
87
|
"sortable": true,
|
|
@@ -276,7 +276,7 @@
|
|
|
276
276
|
"label": "Raw XDR",
|
|
277
277
|
"source": {
|
|
278
278
|
"contentType": "snapshots",
|
|
279
|
-
"path": "
|
|
279
|
+
"path": "data.agentId"
|
|
280
280
|
},
|
|
281
281
|
"humanReadable": false,
|
|
282
282
|
"sortable": false,
|
|
@@ -7,16 +7,16 @@
|
|
|
7
7
|
"collectionPrefix": "vulnerabilities",
|
|
8
8
|
"identity": {
|
|
9
9
|
"allowedIdFields": [
|
|
10
|
-
"
|
|
11
|
-
"
|
|
10
|
+
"recordId",
|
|
11
|
+
"recordId"
|
|
12
12
|
],
|
|
13
13
|
"requiredExactlyOne": true,
|
|
14
|
-
"defaultIdField": "
|
|
14
|
+
"defaultIdField": "recordId"
|
|
15
15
|
},
|
|
16
16
|
"defaults": {
|
|
17
17
|
"canonicalContentType": "snapshots",
|
|
18
18
|
"dataRoot": "data",
|
|
19
|
-
"effectiveDatePath": "
|
|
19
|
+
"effectiveDatePath": "data.lastSeen",
|
|
20
20
|
"fallbackEffectiveDatePaths": [
|
|
21
21
|
"capturedAt",
|
|
22
22
|
"snapshot.capturedAt",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"collection": "vulnerabilities-snapshots",
|
|
30
30
|
"dataRoot": "data",
|
|
31
31
|
"isCanonical": true,
|
|
32
|
-
"effectiveDatePath": "
|
|
32
|
+
"effectiveDatePath": "data.lastSeen",
|
|
33
33
|
"fallbackEffectiveDatePaths": [
|
|
34
34
|
"capturedAt",
|
|
35
35
|
"snapshot.capturedAt",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
"label": "Vulnerability ID",
|
|
43
43
|
"source": {
|
|
44
44
|
"contentType": "snapshots",
|
|
45
|
-
"path": "
|
|
45
|
+
"path": "data.vulnerabilityId"
|
|
46
46
|
},
|
|
47
47
|
"humanReadable": true,
|
|
48
48
|
"sortable": true,
|
|
@@ -107,7 +107,7 @@
|
|
|
107
107
|
"label": "Plugin ID",
|
|
108
108
|
"source": {
|
|
109
109
|
"contentType": "snapshots",
|
|
110
|
-
"path": "
|
|
110
|
+
"path": "data.pluginId"
|
|
111
111
|
},
|
|
112
112
|
"humanReadable": true,
|
|
113
113
|
"sortable": true,
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entity": "assets",
|
|
4
4
|
"title": "Asset Detail",
|
|
5
5
|
"identity": {
|
|
6
|
-
"idField": "
|
|
6
|
+
"idField": "recordId"
|
|
7
7
|
},
|
|
8
8
|
"contentTypes": [
|
|
9
9
|
{
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"required": true,
|
|
12
12
|
"multiMatch": {
|
|
13
13
|
"strategy": "last",
|
|
14
|
-
"effectiveDatePath": "
|
|
14
|
+
"effectiveDatePath": "data.lastSeen",
|
|
15
15
|
"fallbackEffectiveDatePaths": [
|
|
16
16
|
"capturedAt",
|
|
17
17
|
"snapshot.capturedAt",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entity": "topology-subnets",
|
|
4
4
|
"title": "Topology Subnet Detail",
|
|
5
5
|
"identity": {
|
|
6
|
-
"idField": "
|
|
6
|
+
"idField": "recordId"
|
|
7
7
|
},
|
|
8
8
|
"contentTypes": [
|
|
9
9
|
{
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"required": true,
|
|
12
12
|
"multiMatch": {
|
|
13
13
|
"strategy": "last",
|
|
14
|
-
"effectiveDatePath": "
|
|
14
|
+
"effectiveDatePath": "data.lastSeen",
|
|
15
15
|
"fallbackEffectiveDatePaths": [
|
|
16
16
|
"capturedAt",
|
|
17
17
|
"snapshot.capturedAt"
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"entity": "vulnerabilities",
|
|
4
4
|
"title": "Vulnerability Detail",
|
|
5
5
|
"identity": {
|
|
6
|
-
"idField": "
|
|
6
|
+
"idField": "recordId"
|
|
7
7
|
},
|
|
8
8
|
"contentTypes": [
|
|
9
9
|
{
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"required": true,
|
|
12
12
|
"multiMatch": {
|
|
13
13
|
"strategy": "last",
|
|
14
|
-
"effectiveDatePath": "
|
|
14
|
+
"effectiveDatePath": "data.lastSeen",
|
|
15
15
|
"fallbackEffectiveDatePaths": [
|
|
16
16
|
"capturedAt",
|
|
17
17
|
"snapshot.capturedAt",
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
{
|
|
18
|
-
"catalogId": "
|
|
18
|
+
"catalogId": "lists",
|
|
19
19
|
"name": "Memorix list descriptors",
|
|
20
20
|
"catalogType": "memorix",
|
|
21
21
|
"sourceMode": "native",
|
|
@@ -94,11 +94,11 @@
|
|
|
94
94
|
}
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
|
-
"catalogId": "
|
|
97
|
+
"catalogId": "lists",
|
|
98
98
|
"descriptorVersion": "1",
|
|
99
99
|
"mode": "replace",
|
|
100
100
|
"descriptor": {
|
|
101
|
-
"catalogId": "
|
|
101
|
+
"catalogId": "lists",
|
|
102
102
|
"label": "Memorix list descriptors",
|
|
103
103
|
"sourceMode": "native",
|
|
104
104
|
"status": "active",
|
|
@@ -219,7 +219,7 @@
|
|
|
219
219
|
},
|
|
220
220
|
{
|
|
221
221
|
"appId": "memorix",
|
|
222
|
-
"catalogId": "
|
|
222
|
+
"catalogId": "lists",
|
|
223
223
|
"access": {
|
|
224
224
|
"canRead": true,
|
|
225
225
|
"canWrite": true
|
|
@@ -254,16 +254,16 @@
|
|
|
254
254
|
"collectionPrefix": "assets",
|
|
255
255
|
"identity": {
|
|
256
256
|
"allowedIdFields": [
|
|
257
|
-
"
|
|
258
|
-
"
|
|
257
|
+
"recordId",
|
|
258
|
+
"recordId"
|
|
259
259
|
],
|
|
260
260
|
"requiredExactlyOne": true,
|
|
261
|
-
"defaultIdField": "
|
|
261
|
+
"defaultIdField": "recordId"
|
|
262
262
|
},
|
|
263
263
|
"defaults": {
|
|
264
264
|
"canonicalContentType": "snapshots",
|
|
265
265
|
"dataRoot": "data",
|
|
266
|
-
"effectiveDatePath": "
|
|
266
|
+
"effectiveDatePath": "data.lastSeen",
|
|
267
267
|
"fallbackEffectiveDatePaths": [
|
|
268
268
|
"capturedAt",
|
|
269
269
|
"snapshot.capturedAt",
|
|
@@ -276,7 +276,7 @@
|
|
|
276
276
|
"collection": "assets-snapshots",
|
|
277
277
|
"dataRoot": "data",
|
|
278
278
|
"isCanonical": true,
|
|
279
|
-
"effectiveDatePath": "
|
|
279
|
+
"effectiveDatePath": "data.lastSeen",
|
|
280
280
|
"fallbackEffectiveDatePaths": [
|
|
281
281
|
"capturedAt",
|
|
282
282
|
"snapshot.capturedAt",
|
|
@@ -328,7 +328,7 @@
|
|
|
328
328
|
"label": "Source",
|
|
329
329
|
"source": {
|
|
330
330
|
"contentType": "snapshots",
|
|
331
|
-
"path": "
|
|
331
|
+
"path": "data.source"
|
|
332
332
|
},
|
|
333
333
|
"humanReadable": true,
|
|
334
334
|
"sortable": true,
|
|
@@ -523,7 +523,7 @@
|
|
|
523
523
|
"label": "Raw XDR",
|
|
524
524
|
"source": {
|
|
525
525
|
"contentType": "snapshots",
|
|
526
|
-
"path": "
|
|
526
|
+
"path": "data.agentId"
|
|
527
527
|
},
|
|
528
528
|
"humanReadable": false,
|
|
529
529
|
"sortable": false,
|
|
@@ -740,16 +740,16 @@
|
|
|
740
740
|
"collectionPrefix": "vulnerabilities",
|
|
741
741
|
"identity": {
|
|
742
742
|
"allowedIdFields": [
|
|
743
|
-
"
|
|
744
|
-
"
|
|
743
|
+
"recordId",
|
|
744
|
+
"recordId"
|
|
745
745
|
],
|
|
746
746
|
"requiredExactlyOne": true,
|
|
747
|
-
"defaultIdField": "
|
|
747
|
+
"defaultIdField": "recordId"
|
|
748
748
|
},
|
|
749
749
|
"defaults": {
|
|
750
750
|
"canonicalContentType": "snapshots",
|
|
751
751
|
"dataRoot": "data",
|
|
752
|
-
"effectiveDatePath": "
|
|
752
|
+
"effectiveDatePath": "data.lastSeen",
|
|
753
753
|
"fallbackEffectiveDatePaths": [
|
|
754
754
|
"capturedAt",
|
|
755
755
|
"snapshot.capturedAt",
|
|
@@ -762,7 +762,7 @@
|
|
|
762
762
|
"collection": "vulnerabilities-snapshots",
|
|
763
763
|
"dataRoot": "data",
|
|
764
764
|
"isCanonical": true,
|
|
765
|
-
"effectiveDatePath": "
|
|
765
|
+
"effectiveDatePath": "data.lastSeen",
|
|
766
766
|
"fallbackEffectiveDatePaths": [
|
|
767
767
|
"capturedAt",
|
|
768
768
|
"snapshot.capturedAt",
|
|
@@ -775,7 +775,7 @@
|
|
|
775
775
|
"label": "Vulnerability ID",
|
|
776
776
|
"source": {
|
|
777
777
|
"contentType": "snapshots",
|
|
778
|
-
"path": "
|
|
778
|
+
"path": "data.vulnerabilityId"
|
|
779
779
|
},
|
|
780
780
|
"humanReadable": true,
|
|
781
781
|
"sortable": true,
|
|
@@ -840,7 +840,7 @@
|
|
|
840
840
|
"label": "Plugin ID",
|
|
841
841
|
"source": {
|
|
842
842
|
"contentType": "snapshots",
|
|
843
|
-
"path": "
|
|
843
|
+
"path": "data.pluginId"
|
|
844
844
|
},
|
|
845
845
|
"humanReadable": true,
|
|
846
846
|
"sortable": true,
|
|
@@ -1331,7 +1331,7 @@
|
|
|
1331
1331
|
}
|
|
1332
1332
|
},
|
|
1333
1333
|
{
|
|
1334
|
-
"catalogId": "
|
|
1334
|
+
"catalogId": "lists",
|
|
1335
1335
|
"scope": {
|
|
1336
1336
|
"domains": [
|
|
1337
1337
|
"network",
|
|
@@ -1393,7 +1393,7 @@
|
|
|
1393
1393
|
}
|
|
1394
1394
|
},
|
|
1395
1395
|
{
|
|
1396
|
-
"catalogId": "
|
|
1396
|
+
"catalogId": "lists",
|
|
1397
1397
|
"scope": {
|
|
1398
1398
|
"domains": [
|
|
1399
1399
|
"network",
|
|
@@ -1428,7 +1428,7 @@
|
|
|
1428
1428
|
}
|
|
1429
1429
|
},
|
|
1430
1430
|
{
|
|
1431
|
-
"catalogId": "
|
|
1431
|
+
"catalogId": "lists",
|
|
1432
1432
|
"scope": {
|
|
1433
1433
|
"domains": [
|
|
1434
1434
|
"network",
|
|
@@ -1487,7 +1487,7 @@
|
|
|
1487
1487
|
}
|
|
1488
1488
|
},
|
|
1489
1489
|
{
|
|
1490
|
-
"catalogId": "
|
|
1490
|
+
"catalogId": "lists",
|
|
1491
1491
|
"scope": {
|
|
1492
1492
|
"domains": [
|
|
1493
1493
|
"network",
|
|
@@ -1543,7 +1543,7 @@
|
|
|
1543
1543
|
}
|
|
1544
1544
|
},
|
|
1545
1545
|
{
|
|
1546
|
-
"catalogId": "
|
|
1546
|
+
"catalogId": "lists",
|
|
1547
1547
|
"scope": {
|
|
1548
1548
|
"domains": [
|
|
1549
1549
|
"network",
|
|
@@ -1574,7 +1574,7 @@
|
|
|
1574
1574
|
}
|
|
1575
1575
|
],
|
|
1576
1576
|
"fields": [
|
|
1577
|
-
"
|
|
1577
|
+
"recordId"
|
|
1578
1578
|
],
|
|
1579
1579
|
"title": "Critical vulnerabilities",
|
|
1580
1580
|
"contentType": "snapshots",
|
|
@@ -1585,7 +1585,7 @@
|
|
|
1585
1585
|
}
|
|
1586
1586
|
},
|
|
1587
1587
|
{
|
|
1588
|
-
"catalogId": "
|
|
1588
|
+
"catalogId": "lists",
|
|
1589
1589
|
"scope": {
|
|
1590
1590
|
"domains": [
|
|
1591
1591
|
"network",
|
|
@@ -1619,7 +1619,7 @@
|
|
|
1619
1619
|
}
|
|
1620
1620
|
},
|
|
1621
1621
|
{
|
|
1622
|
-
"catalogId": "
|
|
1622
|
+
"catalogId": "lists",
|
|
1623
1623
|
"scope": {
|
|
1624
1624
|
"domains": [
|
|
1625
1625
|
"network",
|
|
@@ -1656,7 +1656,7 @@
|
|
|
1656
1656
|
}
|
|
1657
1657
|
},
|
|
1658
1658
|
{
|
|
1659
|
-
"catalogId": "
|
|
1659
|
+
"catalogId": "lists",
|
|
1660
1660
|
"scope": {
|
|
1661
1661
|
"domains": [
|
|
1662
1662
|
"network",
|
|
@@ -1711,7 +1711,7 @@
|
|
|
1711
1711
|
"entity": "assets",
|
|
1712
1712
|
"title": "Asset Detail",
|
|
1713
1713
|
"identity": {
|
|
1714
|
-
"idField": "
|
|
1714
|
+
"idField": "recordId"
|
|
1715
1715
|
},
|
|
1716
1716
|
"contentTypes": [
|
|
1717
1717
|
{
|
|
@@ -1719,7 +1719,7 @@
|
|
|
1719
1719
|
"required": true,
|
|
1720
1720
|
"multiMatch": {
|
|
1721
1721
|
"strategy": "last",
|
|
1722
|
-
"effectiveDatePath": "
|
|
1722
|
+
"effectiveDatePath": "data.lastSeen",
|
|
1723
1723
|
"fallbackEffectiveDatePaths": [
|
|
1724
1724
|
"capturedAt",
|
|
1725
1725
|
"snapshot.capturedAt",
|
|
@@ -1822,7 +1822,7 @@
|
|
|
1822
1822
|
"entity": "topology-subnets",
|
|
1823
1823
|
"title": "Topology Subnet Detail",
|
|
1824
1824
|
"identity": {
|
|
1825
|
-
"idField": "
|
|
1825
|
+
"idField": "recordId"
|
|
1826
1826
|
},
|
|
1827
1827
|
"contentTypes": [
|
|
1828
1828
|
{
|
|
@@ -1830,7 +1830,7 @@
|
|
|
1830
1830
|
"required": true,
|
|
1831
1831
|
"multiMatch": {
|
|
1832
1832
|
"strategy": "last",
|
|
1833
|
-
"effectiveDatePath": "
|
|
1833
|
+
"effectiveDatePath": "data.lastSeen",
|
|
1834
1834
|
"fallbackEffectiveDatePaths": [
|
|
1835
1835
|
"capturedAt",
|
|
1836
1836
|
"snapshot.capturedAt"
|
|
@@ -1875,7 +1875,7 @@
|
|
|
1875
1875
|
"entity": "vulnerabilities",
|
|
1876
1876
|
"title": "Vulnerability Detail",
|
|
1877
1877
|
"identity": {
|
|
1878
|
-
"idField": "
|
|
1878
|
+
"idField": "recordId"
|
|
1879
1879
|
},
|
|
1880
1880
|
"contentTypes": [
|
|
1881
1881
|
{
|
|
@@ -1883,7 +1883,7 @@
|
|
|
1883
1883
|
"required": true,
|
|
1884
1884
|
"multiMatch": {
|
|
1885
1885
|
"strategy": "last",
|
|
1886
|
-
"effectiveDatePath": "
|
|
1886
|
+
"effectiveDatePath": "data.lastSeen",
|
|
1887
1887
|
"fallbackEffectiveDatePaths": [
|
|
1888
1888
|
"capturedAt",
|
|
1889
1889
|
"snapshot.capturedAt",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Catalox } from "@x12i/catalox";
|
|
2
|
+
import { MongoStore } from "@x12i/catalox/mongo";
|
|
3
|
+
export type CreateMemorixCataloxFromEnvOptions = {
|
|
4
|
+
processEnv?: NodeJS.ProcessEnv;
|
|
5
|
+
dbName?: string;
|
|
6
|
+
mongoUri?: string;
|
|
7
|
+
};
|
|
8
|
+
export type CreateMemorixCataloxFromEnvResult = {
|
|
9
|
+
catalox: Catalox;
|
|
10
|
+
mongoStore: MongoStore;
|
|
11
|
+
};
|
|
12
|
+
export declare function createMemorixCataloxFromEnv(options?: CreateMemorixCataloxFromEnvOptions): Promise<CreateMemorixCataloxFromEnvResult>;
|
|
13
|
+
//# sourceMappingURL=catalox-mongo-bootstrap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalox-mongo-bootstrap.d.ts","sourceRoot":"","sources":["../../src/client/catalox-mongo-bootstrap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAA6B,MAAM,qBAAqB,CAAC;AAK5E,MAAM,MAAM,kCAAkC,GAAG;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,iCAAiC,GAAG;IAC9C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAqBF,wBAAsB,2BAA2B,CAC/C,OAAO,GAAE,kCAAuC,GAC/C,OAAO,CAAC,iCAAiC,CAAC,CAO5C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
2
|
+
import { MongoStore, wireCataloxFromMongoStore } from "@x12i/catalox/mongo";
|
|
3
|
+
import { resolveMemorixCataloxDbName, resolveMongoUri } from "../mongo/env.js";
|
|
4
|
+
const require = createRequire(import.meta.url);
|
|
5
|
+
async function initMongoStore(options) {
|
|
6
|
+
const { initMongoDb } = require("@x12i/helpers/mongo");
|
|
7
|
+
const api = await initMongoDb({
|
|
8
|
+
mongoUri: options.mongoUri,
|
|
9
|
+
dbName: options.dbName,
|
|
10
|
+
singleton: false,
|
|
11
|
+
});
|
|
12
|
+
return new MongoStore(api);
|
|
13
|
+
}
|
|
14
|
+
export async function createMemorixCataloxFromEnv(options = {}) {
|
|
15
|
+
const env = options.processEnv ?? process.env;
|
|
16
|
+
const mongoUri = options.mongoUri ?? resolveMongoUri(env);
|
|
17
|
+
const dbName = options.dbName ?? resolveMemorixCataloxDbName(env);
|
|
18
|
+
const mongoStore = await initMongoStore({ mongoUri, dbName });
|
|
19
|
+
const catalox = wireCataloxFromMongoStore({ mongo: mongoStore, mongoUri });
|
|
20
|
+
return { catalox, mongoStore };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=catalox-mongo-bootstrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalox-mongo-bootstrap.js","sourceRoot":"","sources":["../../src/client/catalox-mongo-bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAE/E,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAa/C,KAAK,UAAU,cAAc,CAAC,OAG7B;IACC,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,qBAAqB,CAMpD,CAAC;IACF,MAAM,GAAG,GAAG,MAAM,WAAW,CAAC;QAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,SAAS,EAAE,KAAK;KACjB,CAAC,CAAC;IACH,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,UAA8C,EAAE;IAEhD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,eAAe,CAAC,GAAG,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,2BAA2B,CAAC,GAAG,CAAC,CAAC;IAClE,MAAM,UAAU,GAAG,MAAM,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9D,MAAM,OAAO,GAAG,yBAAyB,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createMemorixCataloxFromEnv } from "./catalox-mongo-bootstrap.js";
|
|
2
2
|
import { DebugLogAbstract } from "@x12i/logxer";
|
|
3
3
|
import { resolveMemorixAppId } from "../descriptors/resolve-app-id.js";
|
|
4
4
|
import { memorixRetrievalLogger } from "../logging/logger.js";
|
|
@@ -13,7 +13,7 @@ export async function createMemorixRetrievalStackFromEnv(options = {}) {
|
|
|
13
13
|
const appId = resolveMemorixAppId({
|
|
14
14
|
appId: options.appId?.trim() || options.cataloxContext?.appId?.trim(),
|
|
15
15
|
}, processEnv);
|
|
16
|
-
const { catalox } =
|
|
16
|
+
const { catalox } = await createMemorixCataloxFromEnv({ processEnv });
|
|
17
17
|
const ctx = {
|
|
18
18
|
...(options.cataloxContext ?? {}),
|
|
19
19
|
appId,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-stack-from-env.js","sourceRoot":"","sources":["../../src/client/create-stack-from-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"create-stack-from-env.js","sourceRoot":"","sources":["../../src/client/create-stack-from-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AAuBrE;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,UAAqD,EAAE;IAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,CAAC;IAErD,MAAM,KAAK,GAAG,mBAAmB,CAC/B;QACE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE;KACtE,EACD,UAAU,CACX,CAAC;IAEF,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,2BAA2B,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;IACtE,MAAM,GAAG,GAAmB;QAC1B,GAAG,CAAC,OAAO,CAAC,cAAc,IAAI,EAAE,CAAC;QACjC,KAAK;QACL,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,IAAI;YACtC,IAAI,EAAE,SAAS;YACf,EAAE,EAAE,mBAAmB;SACxB;KACF,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,cAAc,GAAG,6BAA6B,CAAC,YAAY,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,6BAA6B,CAAC;QACjD,KAAK;QACL,OAAO,EAAE,cAAc;QACvB,UAAU;KACX,CAAC,CAAC;IAEH,sBAAsB,CAAC,IAAI,CAAC,qCAAqC,EAAE;QACjE,KAAK;QACL,SAAS,EAAE,gBAAgB,CAAC,KAAK;KAClC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,YAAY;QACZ,OAAO,EAAE,cAAc;QACvB,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;AACJ,CAAC"}
|