@x12i/memorix-retrieval 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (232) hide show
  1. package/README.md +124 -0
  2. package/catalox-seeds/inputs/entity-descriptors/assets.json +296 -0
  3. package/catalox-seeds/inputs/entity-descriptors/variabilities-groups.json +312 -0
  4. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +419 -0
  5. package/catalox-seeds/inputs/item-descriptors/asset-detail-item.json +85 -0
  6. package/catalox-seeds/inputs/item-descriptors/variabilities-group-detail-item.json +87 -0
  7. package/catalox-seeds/inputs/item-descriptors/vulnerability-detail-item.json +106 -0
  8. package/catalox-seeds/inputs/list-descriptors/assets-main-list.json +46 -0
  9. package/catalox-seeds/inputs/list-descriptors/critical-vulnerabilities-list.json +44 -0
  10. package/catalox-seeds/inputs/list-descriptors/variabilities-groups-main-list.json +43 -0
  11. package/catalox-seeds/inputs/list-descriptors/vulnerabilities-main-list.json +47 -0
  12. package/catalox-seeds/inputs/manifest.json +44 -0
  13. package/catalox-seeds/inputs/memorix-catalog-ids.json +8 -0
  14. package/catalox-seeds/inputs/memorix-descriptors.bundle.json +1502 -0
  15. package/catalox-seeds/inputs/memorix-entity-descriptors.catalog.json +1029 -0
  16. package/catalox-seeds/inputs/memorix-entity-descriptors.items.json +1026 -0
  17. package/catalox-seeds/inputs/memorix-item-descriptors.catalog.json +283 -0
  18. package/catalox-seeds/inputs/memorix-item-descriptors.items.json +280 -0
  19. package/catalox-seeds/inputs/memorix-list-descriptors.catalog.json +185 -0
  20. package/catalox-seeds/inputs/memorix-list-descriptors.items.json +182 -0
  21. package/catalox-seeds/inputs/scope.json +4 -0
  22. package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +1844 -0
  23. package/dist/client/catalox-like.d.ts +16 -0
  24. package/dist/client/catalox-like.d.ts.map +1 -0
  25. package/dist/client/catalox-like.js +2 -0
  26. package/dist/client/catalox-like.js.map +1 -0
  27. package/dist/client/create-client.d.ts +3 -0
  28. package/dist/client/create-client.d.ts.map +1 -0
  29. package/dist/client/create-client.js +50 -0
  30. package/dist/client/create-client.js.map +1 -0
  31. package/dist/client/create-from-env.d.ts +3 -0
  32. package/dist/client/create-from-env.d.ts.map +1 -0
  33. package/dist/client/create-from-env.js +10 -0
  34. package/dist/client/create-from-env.js.map +1 -0
  35. package/dist/client/types.d.ts +109 -0
  36. package/dist/client/types.d.ts.map +1 -0
  37. package/dist/client/types.js +2 -0
  38. package/dist/client/types.js.map +1 -0
  39. package/dist/client/xronox-like.d.ts +18 -0
  40. package/dist/client/xronox-like.d.ts.map +1 -0
  41. package/dist/client/xronox-like.js +2 -0
  42. package/dist/client/xronox-like.js.map +1 -0
  43. package/dist/content/fetch-content-object.d.ts +16 -0
  44. package/dist/content/fetch-content-object.d.ts.map +1 -0
  45. package/dist/content/fetch-content-object.js +54 -0
  46. package/dist/content/fetch-content-object.js.map +1 -0
  47. package/dist/content/map-content-errors.d.ts +5 -0
  48. package/dist/content/map-content-errors.d.ts.map +1 -0
  49. package/dist/content/map-content-errors.js +39 -0
  50. package/dist/content/map-content-errors.js.map +1 -0
  51. package/dist/content/memorix-content-object.d.ts +21 -0
  52. package/dist/content/memorix-content-object.d.ts.map +1 -0
  53. package/dist/content/memorix-content-object.js +54 -0
  54. package/dist/content/memorix-content-object.js.map +1 -0
  55. package/dist/content/resolve-content-config.d.ts +19 -0
  56. package/dist/content/resolve-content-config.d.ts.map +1 -0
  57. package/dist/content/resolve-content-config.js +37 -0
  58. package/dist/content/resolve-content-config.js.map +1 -0
  59. package/dist/data/collection-name.d.ts +4 -0
  60. package/dist/data/collection-name.d.ts.map +1 -0
  61. package/dist/data/collection-name.js +23 -0
  62. package/dist/data/collection-name.js.map +1 -0
  63. package/dist/data/identity.d.ts +36 -0
  64. package/dist/data/identity.d.ts.map +1 -0
  65. package/dist/data/identity.js +68 -0
  66. package/dist/data/identity.js.map +1 -0
  67. package/dist/data/memorix-read.d.ts +17 -0
  68. package/dist/data/memorix-read.d.ts.map +1 -0
  69. package/dist/data/memorix-read.js +55 -0
  70. package/dist/data/memorix-read.js.map +1 -0
  71. package/dist/data/multi-match.d.ts +16 -0
  72. package/dist/data/multi-match.d.ts.map +1 -0
  73. package/dist/data/multi-match.js +65 -0
  74. package/dist/data/multi-match.js.map +1 -0
  75. package/dist/data/path.d.ts +3 -0
  76. package/dist/data/path.d.ts.map +1 -0
  77. package/dist/data/path.js +23 -0
  78. package/dist/data/path.js.map +1 -0
  79. package/dist/data/xronox-read.d.ts +13 -0
  80. package/dist/data/xronox-read.d.ts.map +1 -0
  81. package/dist/data/xronox-read.js +34 -0
  82. package/dist/data/xronox-read.js.map +1 -0
  83. package/dist/descriptors/catalog-ids.d.ts +5 -0
  84. package/dist/descriptors/catalog-ids.d.ts.map +1 -0
  85. package/dist/descriptors/catalog-ids.js +5 -0
  86. package/dist/descriptors/catalog-ids.js.map +1 -0
  87. package/dist/descriptors/descriptor-types.d.ts +187 -0
  88. package/dist/descriptors/descriptor-types.d.ts.map +1 -0
  89. package/dist/descriptors/descriptor-types.js +2 -0
  90. package/dist/descriptors/descriptor-types.js.map +1 -0
  91. package/dist/descriptors/load-entity-descriptor.d.ts +4 -0
  92. package/dist/descriptors/load-entity-descriptor.d.ts.map +1 -0
  93. package/dist/descriptors/load-entity-descriptor.js +15 -0
  94. package/dist/descriptors/load-entity-descriptor.js.map +1 -0
  95. package/dist/descriptors/load-item-descriptor.d.ts +4 -0
  96. package/dist/descriptors/load-item-descriptor.d.ts.map +1 -0
  97. package/dist/descriptors/load-item-descriptor.js +15 -0
  98. package/dist/descriptors/load-item-descriptor.js.map +1 -0
  99. package/dist/descriptors/load-list-descriptor.d.ts +4 -0
  100. package/dist/descriptors/load-list-descriptor.d.ts.map +1 -0
  101. package/dist/descriptors/load-list-descriptor.js +15 -0
  102. package/dist/descriptors/load-list-descriptor.js.map +1 -0
  103. package/dist/descriptors/validate-descriptor.d.ts +7 -0
  104. package/dist/descriptors/validate-descriptor.d.ts.map +1 -0
  105. package/dist/descriptors/validate-descriptor.js +80 -0
  106. package/dist/descriptors/validate-descriptor.js.map +1 -0
  107. package/dist/errors/errors.d.ts +6 -0
  108. package/dist/errors/errors.d.ts.map +1 -0
  109. package/dist/errors/errors.js +12 -0
  110. package/dist/errors/errors.js.map +1 -0
  111. package/dist/errors/issues.d.ts +14 -0
  112. package/dist/errors/issues.d.ts.map +1 -0
  113. package/dist/errors/issues.js +7 -0
  114. package/dist/errors/issues.js.map +1 -0
  115. package/dist/index.d.ts +22 -0
  116. package/dist/index.d.ts.map +1 -0
  117. package/dist/index.js +18 -0
  118. package/dist/index.js.map +1 -0
  119. package/dist/mongo/connection.d.ts +3 -0
  120. package/dist/mongo/connection.d.ts.map +1 -0
  121. package/dist/mongo/connection.js +8 -0
  122. package/dist/mongo/connection.js.map +1 -0
  123. package/dist/mongo/env.d.ts +6 -0
  124. package/dist/mongo/env.d.ts.map +1 -0
  125. package/dist/mongo/env.js +33 -0
  126. package/dist/mongo/env.js.map +1 -0
  127. package/dist/mongo/read-collection.d.ts +14 -0
  128. package/dist/mongo/read-collection.d.ts.map +1 -0
  129. package/dist/mongo/read-collection.js +45 -0
  130. package/dist/mongo/read-collection.js.map +1 -0
  131. package/dist/mongo/resolve-db.d.ts +6 -0
  132. package/dist/mongo/resolve-db.d.ts.map +1 -0
  133. package/dist/mongo/resolve-db.js +9 -0
  134. package/dist/mongo/resolve-db.js.map +1 -0
  135. package/dist/mongo/types.d.ts +2 -0
  136. package/dist/mongo/types.d.ts.map +1 -0
  137. package/dist/mongo/types.js +2 -0
  138. package/dist/mongo/types.js.map +1 -0
  139. package/dist/relations/fetch-relation.d.ts +5 -0
  140. package/dist/relations/fetch-relation.d.ts.map +1 -0
  141. package/dist/relations/fetch-relation.js +57 -0
  142. package/dist/relations/fetch-relation.js.map +1 -0
  143. package/dist/relations/resolve-relations.d.ts +6 -0
  144. package/dist/relations/resolve-relations.d.ts.map +1 -0
  145. package/dist/relations/resolve-relations.js +20 -0
  146. package/dist/relations/resolve-relations.js.map +1 -0
  147. package/dist/retrieval/batch-fetch.d.ts +11 -0
  148. package/dist/retrieval/batch-fetch.d.ts.map +1 -0
  149. package/dist/retrieval/batch-fetch.js +80 -0
  150. package/dist/retrieval/batch-fetch.js.map +1 -0
  151. package/dist/retrieval/compose-item.d.ts +11 -0
  152. package/dist/retrieval/compose-item.d.ts.map +1 -0
  153. package/dist/retrieval/compose-item.js +18 -0
  154. package/dist/retrieval/compose-item.js.map +1 -0
  155. package/dist/retrieval/compose-row.d.ts +4 -0
  156. package/dist/retrieval/compose-row.d.ts.map +1 -0
  157. package/dist/retrieval/compose-row.js +14 -0
  158. package/dist/retrieval/compose-row.js.map +1 -0
  159. package/dist/retrieval/fetch-item.d.ts +3 -0
  160. package/dist/retrieval/fetch-item.d.ts.map +1 -0
  161. package/dist/retrieval/fetch-item.js +107 -0
  162. package/dist/retrieval/fetch-item.js.map +1 -0
  163. package/dist/retrieval/fetch-list.d.ts +3 -0
  164. package/dist/retrieval/fetch-list.d.ts.map +1 -0
  165. package/dist/retrieval/fetch-list.js +148 -0
  166. package/dist/retrieval/fetch-list.js.map +1 -0
  167. package/dist/retrieval/resolve-fields.d.ts +10 -0
  168. package/dist/retrieval/resolve-fields.d.ts.map +1 -0
  169. package/dist/retrieval/resolve-fields.js +52 -0
  170. package/dist/retrieval/resolve-fields.js.map +1 -0
  171. package/dist/retrieval/resolve-filters.d.ts +3 -0
  172. package/dist/retrieval/resolve-filters.d.ts.map +1 -0
  173. package/dist/retrieval/resolve-filters.js +57 -0
  174. package/dist/retrieval/resolve-filters.js.map +1 -0
  175. package/dist/retrieval/resolve-pagination-driver.d.ts +6 -0
  176. package/dist/retrieval/resolve-pagination-driver.d.ts.map +1 -0
  177. package/dist/retrieval/resolve-pagination-driver.js +22 -0
  178. package/dist/retrieval/resolve-pagination-driver.js.map +1 -0
  179. package/dist/retrieval/resolve-property-source.d.ts +10 -0
  180. package/dist/retrieval/resolve-property-source.d.ts.map +1 -0
  181. package/dist/retrieval/resolve-property-source.js +48 -0
  182. package/dist/retrieval/resolve-property-source.js.map +1 -0
  183. package/dist/retrieval/resolve-sort.d.ts +14 -0
  184. package/dist/retrieval/resolve-sort.d.ts.map +1 -0
  185. package/dist/retrieval/resolve-sort.js +28 -0
  186. package/dist/retrieval/resolve-sort.js.map +1 -0
  187. package/dist/tests/collection-env.test.d.ts +2 -0
  188. package/dist/tests/collection-env.test.d.ts.map +1 -0
  189. package/dist/tests/collection-env.test.js +44 -0
  190. package/dist/tests/collection-env.test.js.map +1 -0
  191. package/dist/tests/content-object.test.d.ts +2 -0
  192. package/dist/tests/content-object.test.d.ts.map +1 -0
  193. package/dist/tests/content-object.test.js +39 -0
  194. package/dist/tests/content-object.test.js.map +1 -0
  195. package/dist/tests/descriptor-validation.test.d.ts +2 -0
  196. package/dist/tests/descriptor-validation.test.d.ts.map +1 -0
  197. package/dist/tests/descriptor-validation.test.js +25 -0
  198. package/dist/tests/descriptor-validation.test.js.map +1 -0
  199. package/dist/tests/env.test.d.ts +2 -0
  200. package/dist/tests/env.test.d.ts.map +1 -0
  201. package/dist/tests/env.test.js +17 -0
  202. package/dist/tests/env.test.js.map +1 -0
  203. package/dist/tests/fetch-item.test.d.ts +2 -0
  204. package/dist/tests/fetch-item.test.d.ts.map +1 -0
  205. package/dist/tests/fetch-item.test.js +86 -0
  206. package/dist/tests/fetch-item.test.js.map +1 -0
  207. package/dist/tests/fetch-list.test.d.ts +2 -0
  208. package/dist/tests/fetch-list.test.d.ts.map +1 -0
  209. package/dist/tests/fetch-list.test.js +85 -0
  210. package/dist/tests/fetch-list.test.js.map +1 -0
  211. package/dist/tests/fixtures.d.ts +5 -0
  212. package/dist/tests/fixtures.d.ts.map +1 -0
  213. package/dist/tests/fixtures.js +137 -0
  214. package/dist/tests/fixtures.js.map +1 -0
  215. package/dist/tests/identity.test.d.ts +2 -0
  216. package/dist/tests/identity.test.d.ts.map +1 -0
  217. package/dist/tests/identity.test.js +32 -0
  218. package/dist/tests/identity.test.js.map +1 -0
  219. package/dist/tests/multi-match.test.d.ts +2 -0
  220. package/dist/tests/multi-match.test.d.ts.map +1 -0
  221. package/dist/tests/multi-match.test.js +31 -0
  222. package/dist/tests/multi-match.test.js.map +1 -0
  223. package/dist/tests/read-collection.test.d.ts +2 -0
  224. package/dist/tests/read-collection.test.d.ts.map +1 -0
  225. package/dist/tests/read-collection.test.js +19 -0
  226. package/dist/tests/read-collection.test.js.map +1 -0
  227. package/dist/tests/relations.test.d.ts +2 -0
  228. package/dist/tests/relations.test.d.ts.map +1 -0
  229. package/dist/tests/relations.test.js +77 -0
  230. package/dist/tests/relations.test.js.map +1 -0
  231. package/docs/MEMORIX-DATABASE-CONVENTIONS.md +325 -0
  232. package/package.json +52 -0
package/README.md ADDED
@@ -0,0 +1,124 @@
1
+ # @x12i/memorix-retrieval
2
+
3
+ Descriptor-driven retrieval/composition layer for Memorix entity and event data.
4
+
5
+ ## Positioning
6
+
7
+ | Package | Role |
8
+ |---------|------|
9
+ | `@x12i/memorix` | Low-level entity collection I/O, discovery, raw document access |
10
+ | `@x12i/memorix-retrieval` | Descriptor-driven lists, items, relations, and content-object reads |
11
+
12
+ **Catalox** defines what to fetch. This package reads Mongo and composes API-ready JSON. **@x12i/helpers** fetches external content objects when needed.
13
+
14
+ ## Quick start
15
+
16
+ Set `MONGO_URI` and provide a Catalox client. Database names, entity vs event routing, and collection resolution are handled internally.
17
+
18
+ ```bash
19
+ MONGO_URI=mongodb://localhost:27017
20
+ ```
21
+
22
+ ```typescript
23
+ import {
24
+ createMemorixRetrievalFromEnv,
25
+ fetchMemorixList,
26
+ fetchMemorixItem,
27
+ } from "@x12i/memorix-retrieval";
28
+
29
+ const client = await createMemorixRetrievalFromEnv({ catalox });
30
+
31
+ const list = await fetchMemorixList(client, {
32
+ listId: "assets-main-list",
33
+ page: { limit: 50, offset: 0 },
34
+ });
35
+
36
+ const item = await fetchMemorixItem(client, {
37
+ itemDescriptorId: "asset-detail-item",
38
+ entityId: "10.150.68.31",
39
+ });
40
+
41
+ await client.close?.();
42
+ ```
43
+
44
+ Lazy connect (same env, no upfront `await`):
45
+
46
+ ```typescript
47
+ import { createMemorixRetrieval, fetchMemorixList } from "@x12i/memorix-retrieval";
48
+
49
+ const client = createMemorixRetrieval({ catalox });
50
+ // connects to Mongo on first read using MONGO_URI
51
+ ```
52
+
53
+ Optional content storage (credentials are never read from descriptors):
54
+
55
+ ```typescript
56
+ import { createGcsClient } from "@x12i/helpers/gcs";
57
+
58
+ const client = await createMemorixRetrievalFromEnv({
59
+ catalox,
60
+ contentReaders: { gcs: createGcsClient({ bucket: "memorix-content" }) },
61
+ });
62
+ ```
63
+
64
+ ## Advanced (optional)
65
+
66
+ Override defaults only when you need to:
67
+
68
+ | Option | Purpose |
69
+ |--------|---------|
70
+ | `MEMORIX_ENTITIES_DB` / `MEMORIX_EVENTS_DB` | Non-default database names |
71
+ | `MEMORIX_ENTITIES_COLLECTION_*` / `MEMORIX_EVENTS_COLLECTION_*` | Per-type collection overrides |
72
+ | `memorixDb` | Code overrides for entity/event DB names |
73
+ | `xronox` | Inject a pre-configured Xronox client instead of built-in Mongo reads |
74
+ | `mongo` | Reuse an existing `MongoClient` |
75
+ | `processEnv` | Custom env object (default: `process.env`) |
76
+
77
+ Entity descriptors declare `target: "entity" | "event"` (default `entity`):
78
+
79
+ | Descriptor | Database |
80
+ |------------|----------|
81
+ | `assets`, `variabilities-groups` | `memorix-entities` |
82
+ | `vulnerabilities` | `memorix-events` |
83
+
84
+ See [docs/MEMORIX-DATABASE-CONVENTIONS.md](docs/MEMORIX-DATABASE-CONVENTIONS.md).
85
+
86
+ ## Catalox seeds
87
+
88
+ Source of truth: `catalox-seeds/inputs/`
89
+
90
+ ```bash
91
+ npm run catalox:seed:memorix-retrieval:validate
92
+ npm run catalox:seed:memorix-retrieval:apply
93
+ ```
94
+
95
+ Every seeded item shares scope from `catalox-seeds/inputs/scope.json`:
96
+
97
+ ```json
98
+ {
99
+ "scope": {
100
+ "domains": ["network", "vulnerabilities"],
101
+ "agents": ["neo"]
102
+ }
103
+ }
104
+ ```
105
+
106
+ ```bash
107
+ npm run mongo:check-collections
108
+ npm run smoke:retrieval -- --list assets-main-list --limit 5
109
+ ```
110
+
111
+ ## Build & test
112
+
113
+ ```bash
114
+ npm run build
115
+ npm test
116
+ ```
117
+
118
+ ## Publish
119
+
120
+ From the x12i workspace root:
121
+
122
+ ```bash
123
+ ./scripts/publish-memorix-packages.sh
124
+ ```
@@ -0,0 +1,296 @@
1
+ {
2
+ "id": "assets",
3
+ "entityName": "assets",
4
+ "target": "entity",
5
+ "collectionPrefix": "assets",
6
+ "identity": {
7
+ "allowedIdFields": [
8
+ "entityId",
9
+ "eventId"
10
+ ],
11
+ "requiredExactlyOne": true,
12
+ "defaultIdField": "entityId"
13
+ },
14
+ "defaults": {
15
+ "canonicalContentType": "snapshots",
16
+ "dataRoot": "data",
17
+ "effectiveDatePath": "capturedAt",
18
+ "fallbackEffectiveDatePaths": [
19
+ "snapshot.capturedAt",
20
+ "data.xdr.last_seen"
21
+ ]
22
+ },
23
+ "contentTypes": {
24
+ "snapshots": {
25
+ "postfix": "snapshots",
26
+ "collection": "assets-snapshots",
27
+ "dataRoot": "data",
28
+ "isCanonical": true,
29
+ "effectiveDatePath": "capturedAt",
30
+ "fallbackEffectiveDatePaths": [
31
+ "snapshot.capturedAt",
32
+ "data.xdr.last_seen"
33
+ ]
34
+ }
35
+ },
36
+ "properties": {
37
+ "ipAddress": {
38
+ "label": "IP Address",
39
+ "source": {
40
+ "contentType": "snapshots",
41
+ "path": "data.ip_address"
42
+ },
43
+ "humanReadable": true,
44
+ "sortable": true,
45
+ "filterable": true,
46
+ "list": true,
47
+ "item": true,
48
+ "valueType": "string"
49
+ },
50
+ "source": {
51
+ "label": "Source",
52
+ "source": {
53
+ "contentType": "snapshots",
54
+ "path": "data._source"
55
+ },
56
+ "humanReadable": true,
57
+ "sortable": true,
58
+ "filterable": true,
59
+ "list": true,
60
+ "item": true,
61
+ "valueType": "string"
62
+ },
63
+ "hostName": {
64
+ "label": "Host Name",
65
+ "source": {
66
+ "contentType": "snapshots",
67
+ "path": "data.xdr.host_name"
68
+ },
69
+ "humanReadable": true,
70
+ "sortable": true,
71
+ "filterable": true,
72
+ "list": true,
73
+ "item": true,
74
+ "valueType": "string"
75
+ },
76
+ "xdrOperationalStatus": {
77
+ "label": "XDR Operational Status",
78
+ "source": {
79
+ "contentType": "snapshots",
80
+ "path": "data.xdr.operational_status"
81
+ },
82
+ "humanReadable": true,
83
+ "sortable": true,
84
+ "filterable": true,
85
+ "list": true,
86
+ "item": true,
87
+ "valueType": "string"
88
+ },
89
+ "xdrAgentStatus": {
90
+ "label": "XDR Agent Status",
91
+ "source": {
92
+ "contentType": "snapshots",
93
+ "path": "data.xdr.agent_status"
94
+ },
95
+ "humanReadable": true,
96
+ "sortable": true,
97
+ "filterable": true,
98
+ "list": true,
99
+ "item": true,
100
+ "valueType": "string"
101
+ },
102
+ "agentType": {
103
+ "label": "Agent Type",
104
+ "source": {
105
+ "contentType": "snapshots",
106
+ "path": "data.xdr.agent_type"
107
+ },
108
+ "humanReadable": true,
109
+ "sortable": true,
110
+ "filterable": true,
111
+ "list": true,
112
+ "item": true,
113
+ "valueType": "string"
114
+ },
115
+ "lastSeen": {
116
+ "label": "Last Seen",
117
+ "source": {
118
+ "contentType": "snapshots",
119
+ "path": "data.xdr.last_seen"
120
+ },
121
+ "humanReadable": true,
122
+ "sortable": true,
123
+ "filterable": true,
124
+ "list": true,
125
+ "item": true,
126
+ "valueType": "datetime"
127
+ },
128
+ "users": {
129
+ "label": "Users",
130
+ "source": {
131
+ "contentType": "snapshots",
132
+ "path": "data.xdr.users"
133
+ },
134
+ "humanReadable": true,
135
+ "sortable": false,
136
+ "filterable": true,
137
+ "list": true,
138
+ "item": true,
139
+ "valueType": "array"
140
+ },
141
+ "hasVulnerabilities": {
142
+ "label": "Has Vulnerabilities",
143
+ "source": {
144
+ "contentType": "snapshots",
145
+ "path": "data.vulnerabilities.hasVulnerabilities"
146
+ },
147
+ "humanReadable": true,
148
+ "sortable": true,
149
+ "filterable": true,
150
+ "list": true,
151
+ "item": true,
152
+ "valueType": "boolean"
153
+ },
154
+ "criticalVulnerabilities": {
155
+ "label": "Critical Vulnerabilities",
156
+ "source": {
157
+ "contentType": "snapshots",
158
+ "path": "data.vulnerabilities.count.critical"
159
+ },
160
+ "humanReadable": true,
161
+ "sortable": true,
162
+ "filterable": true,
163
+ "list": true,
164
+ "item": true,
165
+ "valueType": "number"
166
+ },
167
+ "highVulnerabilities": {
168
+ "label": "High Vulnerabilities",
169
+ "source": {
170
+ "contentType": "snapshots",
171
+ "path": "data.vulnerabilities.count.high"
172
+ },
173
+ "humanReadable": true,
174
+ "sortable": true,
175
+ "filterable": true,
176
+ "list": true,
177
+ "item": true,
178
+ "valueType": "number"
179
+ },
180
+ "mediumVulnerabilities": {
181
+ "label": "Medium Vulnerabilities",
182
+ "source": {
183
+ "contentType": "snapshots",
184
+ "path": "data.vulnerabilities.count.medium"
185
+ },
186
+ "humanReadable": true,
187
+ "sortable": true,
188
+ "filterable": true,
189
+ "list": true,
190
+ "item": true,
191
+ "valueType": "number"
192
+ },
193
+ "lowVulnerabilities": {
194
+ "label": "Low Vulnerabilities",
195
+ "source": {
196
+ "contentType": "snapshots",
197
+ "path": "data.vulnerabilities.count.low"
198
+ },
199
+ "humanReadable": true,
200
+ "sortable": true,
201
+ "filterable": true,
202
+ "list": true,
203
+ "item": true,
204
+ "valueType": "number"
205
+ },
206
+ "potentialImpactLevel": {
207
+ "label": "Potential Impact",
208
+ "source": {
209
+ "contentType": "snapshots",
210
+ "path": "data.potentialImpact.level"
211
+ },
212
+ "humanReadable": true,
213
+ "sortable": true,
214
+ "filterable": true,
215
+ "list": true,
216
+ "item": true,
217
+ "valueType": "string"
218
+ },
219
+ "potentialImpactConfidence": {
220
+ "label": "Impact Confidence",
221
+ "source": {
222
+ "contentType": "snapshots",
223
+ "path": "data.potentialImpact.confidence"
224
+ },
225
+ "humanReadable": true,
226
+ "sortable": true,
227
+ "filterable": true,
228
+ "list": true,
229
+ "item": true,
230
+ "valueType": "number"
231
+ },
232
+ "potentialImpactStory": {
233
+ "label": "Potential Impact Story",
234
+ "source": {
235
+ "contentType": "snapshots",
236
+ "path": "data.potentialImpact.story"
237
+ },
238
+ "humanReadable": false,
239
+ "sortable": false,
240
+ "filterable": false,
241
+ "list": false,
242
+ "item": true,
243
+ "valueType": "array"
244
+ },
245
+ "pathsCount": {
246
+ "label": "Paths Count",
247
+ "source": {
248
+ "contentType": "snapshots",
249
+ "path": "data.pathsCount"
250
+ },
251
+ "humanReadable": true,
252
+ "sortable": true,
253
+ "filterable": true,
254
+ "list": true,
255
+ "item": true,
256
+ "valueType": "number"
257
+ },
258
+ "rawXdr": {
259
+ "label": "Raw XDR",
260
+ "source": {
261
+ "contentType": "snapshots",
262
+ "path": "data.xdr"
263
+ },
264
+ "humanReadable": false,
265
+ "sortable": false,
266
+ "filterable": false,
267
+ "list": false,
268
+ "item": true,
269
+ "valueType": "object"
270
+ }
271
+ },
272
+ "relations": {
273
+ "assetVulnerabilities": {
274
+ "targetEntity": "vulnerabilities",
275
+ "type": "oneToMany",
276
+ "source": {
277
+ "contentType": "snapshots",
278
+ "path": "data.ip_address"
279
+ },
280
+ "target": {
281
+ "contentType": "snapshots",
282
+ "path": "data.assetIp"
283
+ },
284
+ "defaultMode": "array",
285
+ "defaultArrayProperty": "vulnerabilities",
286
+ "targetFields": [
287
+ "vulnerabilityId",
288
+ "pluginName",
289
+ "severityLevel",
290
+ "riskLevel",
291
+ "priorityScore",
292
+ "cveIds"
293
+ ]
294
+ }
295
+ }
296
+ }