@x12i/memorix-retrieval 1.34.0 → 1.36.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 (104) hide show
  1. package/catalox-seeds/inputs/entity-descriptors/assets.json +138 -0
  2. package/catalox-seeds/inputs/entity-descriptors/subnets.json +16 -1
  3. package/catalox-seeds/inputs/entity-descriptors/topology-zones.json +9 -1
  4. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities-groups.json +10 -2
  5. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +57 -5
  6. package/catalox-seeds/inputs/graph-descriptors/asset-topology-vulnerabilities-graph.json +75 -0
  7. package/catalox-seeds/inputs/list-descriptors/assets-exploitability-decisions-list.json +4 -0
  8. package/catalox-seeds/inputs/list-descriptors/assets-potential-impact-decisions-list.json +16 -8
  9. package/catalox-seeds/inputs/manifest.json +4 -0
  10. package/catalox-seeds/inputs/memorix-catalog-ids.json +2 -1
  11. package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +715 -15
  12. package/dist/data/identity.d.ts +19 -1
  13. package/dist/data/identity.d.ts.map +1 -1
  14. package/dist/data/identity.js +41 -25
  15. package/dist/data/identity.js.map +1 -1
  16. package/dist/data/record-info.d.ts +1 -1
  17. package/dist/data/record-info.d.ts.map +1 -1
  18. package/dist/descriptors/catalog-ids.d.ts +1 -0
  19. package/dist/descriptors/catalog-ids.d.ts.map +1 -1
  20. package/dist/descriptors/catalog-ids.js +1 -0
  21. package/dist/descriptors/catalog-ids.js.map +1 -1
  22. package/dist/descriptors/descriptor-types.d.ts +3 -1
  23. package/dist/descriptors/descriptor-types.d.ts.map +1 -1
  24. package/dist/errors/issues.d.ts +2 -0
  25. package/dist/errors/issues.d.ts.map +1 -1
  26. package/dist/errors/issues.js.map +1 -1
  27. package/dist/explorer/collection-records.d.ts +2 -0
  28. package/dist/explorer/collection-records.d.ts.map +1 -1
  29. package/dist/explorer/collection-records.js +2 -3
  30. package/dist/explorer/collection-records.js.map +1 -1
  31. package/dist/explorer/raw-collection-records.d.ts +5 -0
  32. package/dist/explorer/raw-collection-records.d.ts.map +1 -1
  33. package/dist/explorer/raw-collection-records.js +15 -11
  34. package/dist/explorer/raw-collection-records.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 +480 -0
  42. package/dist/graphs/build-graph-document.js.map +1 -0
  43. package/dist/graphs/fallback-graph-capabilities.d.ts +11 -0
  44. package/dist/graphs/fallback-graph-capabilities.d.ts.map +1 -0
  45. package/dist/graphs/fallback-graph-capabilities.js +243 -0
  46. package/dist/graphs/fallback-graph-capabilities.js.map +1 -0
  47. package/dist/graphs/index.d.ts +8 -0
  48. package/dist/graphs/index.d.ts.map +1 -0
  49. package/dist/graphs/index.js +7 -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 +22 -0
  56. package/dist/graphs/load-graph-descriptor.d.ts.map +1 -0
  57. package/dist/graphs/load-graph-descriptor.js +97 -0
  58. package/dist/graphs/load-graph-descriptor.js.map +1 -0
  59. package/dist/graphs/record-access.d.ts +18 -0
  60. package/dist/graphs/record-access.d.ts.map +1 -0
  61. package/dist/graphs/record-access.js +142 -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/index.d.ts +2 -1
  68. package/dist/index.d.ts.map +1 -1
  69. package/dist/index.js +2 -1
  70. package/dist/index.js.map +1 -1
  71. package/dist/retrieval/fetch-list.d.ts.map +1 -1
  72. package/dist/retrieval/fetch-list.js +3 -1
  73. package/dist/retrieval/fetch-list.js.map +1 -1
  74. package/dist/retrieval/resolve-fields.d.ts.map +1 -1
  75. package/dist/retrieval/resolve-fields.js +7 -1
  76. package/dist/retrieval/resolve-fields.js.map +1 -1
  77. package/dist/retrieval/resolve-filters.d.ts +9 -1
  78. package/dist/retrieval/resolve-filters.d.ts.map +1 -1
  79. package/dist/retrieval/resolve-filters.js +17 -1
  80. package/dist/retrieval/resolve-filters.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 +22 -1
  89. package/dist/seeds/default-seed-spec.js.map +1 -1
  90. package/dist/tests/fetch-list.test.js +28 -0
  91. package/dist/tests/fetch-list.test.js.map +1 -1
  92. package/dist/tests/graphs.test.d.ts +2 -0
  93. package/dist/tests/graphs.test.d.ts.map +1 -0
  94. package/dist/tests/graphs.test.js +202 -0
  95. package/dist/tests/graphs.test.js.map +1 -0
  96. package/dist/tests/identity.test.js +13 -1
  97. package/dist/tests/identity.test.js.map +1 -1
  98. package/dist/tests/infer-graph.test.d.ts +2 -0
  99. package/dist/tests/infer-graph.test.d.ts.map +1 -0
  100. package/dist/tests/infer-graph.test.js +19 -0
  101. package/dist/tests/infer-graph.test.js.map +1 -0
  102. package/dist/tests/resolve-filters.test.js +23 -1
  103. package/dist/tests/resolve-filters.test.js.map +1 -1
  104. package/package.json +10 -1
@@ -82,6 +82,32 @@
82
82
  "item": true,
83
83
  "valueType": "array"
84
84
  },
85
+ "subnetCidr": {
86
+ "label": "Subnet CIDR",
87
+ "source": {
88
+ "contentType": "snapshots",
89
+ "path": "data.subnetCidrs.0"
90
+ },
91
+ "humanReadable": true,
92
+ "sortable": true,
93
+ "filterable": true,
94
+ "list": true,
95
+ "item": true,
96
+ "valueType": "string"
97
+ },
98
+ "subnetIp": {
99
+ "label": "Subnet IP",
100
+ "source": {
101
+ "contentType": "snapshots",
102
+ "path": "data.subnets.0.networkAddress"
103
+ },
104
+ "humanReadable": true,
105
+ "sortable": true,
106
+ "filterable": true,
107
+ "list": true,
108
+ "item": true,
109
+ "valueType": "string"
110
+ },
85
111
  "subnets": {
86
112
  "label": "Resolved Subnets",
87
113
  "source": {
@@ -438,6 +464,46 @@
438
464
  "list": true,
439
465
  "item": true,
440
466
  "valueType": "number"
467
+ },
468
+ "impactDecisionLabel": {
469
+ "label": "Impact Decision",
470
+ "source": { "contentType": "decisions", "path": "data.impactDecision.decision" },
471
+ "humanReadable": true,
472
+ "sortable": true,
473
+ "filterable": true,
474
+ "list": true,
475
+ "item": true,
476
+ "valueType": "string"
477
+ },
478
+ "impactDecisionStatus": {
479
+ "label": "Impact Decision Status",
480
+ "source": { "contentType": "decisions", "path": "data.impactDecision.status" },
481
+ "humanReadable": true,
482
+ "sortable": true,
483
+ "filterable": true,
484
+ "list": true,
485
+ "item": true,
486
+ "valueType": "string"
487
+ },
488
+ "impactDecisionRiskScore": {
489
+ "label": "Impact Decision Score",
490
+ "source": { "contentType": "decisions", "path": "data.impactDecision.riskScore" },
491
+ "humanReadable": true,
492
+ "sortable": true,
493
+ "filterable": true,
494
+ "list": true,
495
+ "item": true,
496
+ "valueType": "number"
497
+ },
498
+ "impactDecisionUrgencyScore": {
499
+ "label": "Impact Urgency Score",
500
+ "source": { "contentType": "decisions", "path": "data.impactDecision.urgencyScore" },
501
+ "humanReadable": true,
502
+ "sortable": true,
503
+ "filterable": true,
504
+ "list": true,
505
+ "item": true,
506
+ "valueType": "number"
441
507
  }
442
508
  },
443
509
  "associatedProperties": [
@@ -768,5 +834,77 @@
768
834
  "cveId"
769
835
  ]
770
836
  }
837
+ },
838
+ "graph": {
839
+ "node": {
840
+ "kind": "ipAddress",
841
+ "directoryFields": ["ipAddress", "hostType", "zones"],
842
+ "contentLenses": ["snapshot", "analysis", "decisions"],
843
+ "ui": { "icon": "server" }
844
+ },
845
+ "edgeTemplates": [
846
+ {
847
+ "id": "asset-topology-associated",
848
+ "source": { "kind": "associatedArray", "key": "associatedTopology" },
849
+ "edges": [
850
+ {
851
+ "type": "containedIn",
852
+ "from": { "source": "concept" },
853
+ "to": { "source": "itemField", "field": "cidr", "kind": "cidr" },
854
+ "toObjectType": "subnets",
855
+ "toKind": "cidr",
856
+ "when": { "itemFieldExists": "cidr" }
857
+ },
858
+ {
859
+ "type": "inZone",
860
+ "from": { "source": "itemField", "field": "cidr", "kind": "cidr" },
861
+ "to": { "source": "itemField", "field": "zone", "kind": "zoneName" },
862
+ "toObjectType": "topology-zones",
863
+ "toKind": "zoneName",
864
+ "when": { "itemFieldExists": "zone" }
865
+ },
866
+ {
867
+ "type": "reachableFrom",
868
+ "from": { "source": "itemArrayField", "field": "reachableFromZones", "kind": "zoneName" },
869
+ "to": { "source": "itemField", "field": "zone", "kind": "zoneName" },
870
+ "toObjectType": "topology-zones",
871
+ "toKind": "zoneName",
872
+ "when": { "itemFieldExists": "zone" }
873
+ },
874
+ {
875
+ "type": "pathBridge",
876
+ "from": { "source": "literal", "kind": "zoneName", "value": "OUTSIDE" },
877
+ "to": { "source": "itemField", "field": "zone", "kind": "zoneName" },
878
+ "toObjectType": "topology-zones",
879
+ "toKind": "zoneName",
880
+ "synthesizePath": { "titleTemplate": "{from} → {to}" },
881
+ "when": {
882
+ "itemFieldExists": "zone",
883
+ "itemArrayIncludes": { "field": "reachableFromZones", "value": "OUTSIDE" }
884
+ }
885
+ }
886
+ ]
887
+ },
888
+ {
889
+ "id": "asset-vulnerabilities-by-ip",
890
+ "source": {
891
+ "kind": "queryByField",
892
+ "objectType": "vulnerabilities",
893
+ "sourcePath": "data.assetIp",
894
+ "targetPath": "data.assetIp",
895
+ "limit": 50
896
+ },
897
+ "edges": [
898
+ {
899
+ "type": "affectsAsset",
900
+ "from": { "source": "relatedConcept" },
901
+ "to": { "source": "concept" },
902
+ "toObjectType": "vulnerabilities",
903
+ "toKind": "hostVulnerability",
904
+ "neighbor": "from"
905
+ }
906
+ ]
907
+ }
908
+ ]
771
909
  }
772
910
  }
@@ -558,5 +558,20 @@
558
558
  ]
559
559
  }
560
560
  },
561
- "relations": {}
561
+ "relations": {},
562
+ "graph": {
563
+ "node": {
564
+ "kind": "cidr",
565
+ "directoryFields": ["cidr", "zone"],
566
+ "contentLenses": ["snapshot", "analysis"],
567
+ "ui": { "icon": "network" }
568
+ },
569
+ "edgeTemplates": [
570
+ {
571
+ "id": "subnet-path-facts",
572
+ "source": { "kind": "pathFacts", "key": "possiblePaths" },
573
+ "edges": []
574
+ }
575
+ ]
576
+ }
562
577
  }
@@ -81,5 +81,13 @@
81
81
  },
82
82
  "associatedProperties": [],
83
83
  "processing": {},
84
- "relations": {}
84
+ "relations": {},
85
+ "graph": {
86
+ "node": {
87
+ "kind": "zoneName",
88
+ "directoryFields": ["name"],
89
+ "contentLenses": ["snapshot", "analysis"],
90
+ "ui": { "icon": "shield" }
91
+ }
92
+ }
85
93
  }
@@ -306,8 +306,8 @@
306
306
  "analysisImpact": {
307
307
  "label": "Impact",
308
308
  "source": { "contentType": "analysis", "path": "data.impact" },
309
- "humanReadable": false,
310
- "list": false,
309
+ "humanReadable": true,
310
+ "list": true,
311
311
  "item": true,
312
312
  "valueType": "object"
313
313
  },
@@ -393,5 +393,13 @@
393
393
  "pluginName"
394
394
  ]
395
395
  }
396
+ },
397
+ "graph": {
398
+ "node": {
399
+ "kind": "pluginId",
400
+ "directoryFields": ["name", "severity", "pluginId", "cveId"],
401
+ "contentLenses": ["snapshot", "analysis"],
402
+ "ui": { "icon": "bug" }
403
+ }
396
404
  }
397
405
  }
@@ -442,8 +442,8 @@
442
442
  "analysisImpact": {
443
443
  "label": "Impact",
444
444
  "source": { "contentType": "analysis", "path": "data.impact" },
445
- "humanReadable": false,
446
- "list": false,
445
+ "humanReadable": true,
446
+ "list": true,
447
447
  "item": true,
448
448
  "valueType": "object"
449
449
  },
@@ -475,6 +475,8 @@
475
475
  "label": "Exploitability Level (analysis)",
476
476
  "source": { "contentType": "analysis", "path": "data.exploitability.exploitability" },
477
477
  "humanReadable": true,
478
+ "sortable": true,
479
+ "filterable": true,
478
480
  "list": true,
479
481
  "item": true,
480
482
  "valueType": "string"
@@ -719,14 +721,14 @@
719
721
  "displayName": "Vulnerability",
720
722
  "description": "Security-impacting scanner result (severity low/medium/high/critical).",
721
723
  "kind": "product-narrative",
722
- "visibility": "user"
724
+ "visibility": "internal"
723
725
  },
724
726
  "is-finding": {
725
727
  "label": "Is finding",
726
728
  "displayName": "Informational finding",
727
729
  "description": "Informational scanner result (severity none/unknown).",
728
730
  "kind": "product-narrative",
729
- "visibility": "user"
731
+ "visibility": "internal"
730
732
  },
731
733
  "has-analysis": {
732
734
  "label": "Has analysis",
@@ -762,7 +764,7 @@
762
764
  "label": "Has triage decision",
763
765
  "displayName": "Triaged",
764
766
  "kind": "rollup",
765
- "visibility": "user"
767
+ "visibility": "internal"
766
768
  },
767
769
  "has-breach-vector": {
768
770
  "label": "Breach vector",
@@ -856,5 +858,55 @@
856
858
  "vulnerability_family"
857
859
  ]
858
860
  }
861
+ },
862
+ "graph": {
863
+ "node": {
864
+ "kind": "hostVulnerability",
865
+ "directoryFields": ["assetIp", "severity", "vulnerabilityName"],
866
+ "contentLenses": ["snapshot", "discovery", "analysis", "decisions"],
867
+ "ui": { "icon": "alert-triangle" }
868
+ },
869
+ "edgeTemplates": [
870
+ {
871
+ "id": "vuln-in-group",
872
+ "source": {
873
+ "kind": "queryByField",
874
+ "objectType": "vulnerabilities-groups",
875
+ "sourcePath": "data.vulnerabilityName",
876
+ "targetPath": "data.name",
877
+ "limit": 5
878
+ },
879
+ "edges": [
880
+ {
881
+ "type": "inGroup",
882
+ "from": { "source": "concept" },
883
+ "to": { "source": "relatedConcept" },
884
+ "toObjectType": "vulnerabilities-groups",
885
+ "toKind": "pluginId",
886
+ "neighbor": "to"
887
+ }
888
+ ]
889
+ },
890
+ {
891
+ "id": "vuln-group-by-plugin",
892
+ "source": {
893
+ "kind": "queryByField",
894
+ "objectType": "vulnerabilities-groups",
895
+ "sourcePath": "data.pluginId",
896
+ "targetPath": "data.pluginId",
897
+ "limit": 5
898
+ },
899
+ "edges": [
900
+ {
901
+ "type": "inGroup",
902
+ "from": { "source": "concept" },
903
+ "to": { "source": "relatedConcept" },
904
+ "toObjectType": "vulnerabilities-groups",
905
+ "toKind": "pluginId",
906
+ "neighbor": "to"
907
+ }
908
+ ]
909
+ }
910
+ ]
859
911
  }
860
912
  }
@@ -0,0 +1,75 @@
1
+ {
2
+ "id": "asset-topology-vulnerabilities-graph",
3
+ "title": "Asset topology & vulnerabilities",
4
+ "focusObjectType": "assets",
5
+ "maxDepth": 2,
6
+ "includeEdgeTemplates": [
7
+ "asset-topology-associated",
8
+ "asset-vulnerabilities-by-ip",
9
+ "vuln-in-group",
10
+ "vuln-group-by-plugin"
11
+ ],
12
+ "tiers": [
13
+ {
14
+ "id": "topology",
15
+ "label": "Topology",
16
+ "objectTypes": ["assets", "subnets", "topology-zones"]
17
+ },
18
+ {
19
+ "id": "vulnerabilities",
20
+ "label": "Vulnerabilities",
21
+ "objectTypes": ["vulnerabilities", "vulnerabilities-groups"]
22
+ }
23
+ ],
24
+ "nodes": [
25
+ { "objectType": "assets", "tier": "topology" },
26
+ { "objectType": "subnets", "tier": "topology" },
27
+ { "objectType": "topology-zones", "tier": "topology" },
28
+ { "objectType": "vulnerabilities-groups", "tier": "vulnerabilities" },
29
+ { "objectType": "vulnerabilities", "tier": "vulnerabilities" }
30
+ ],
31
+ "directory": {
32
+ "defaultObjectTypes": [
33
+ "assets",
34
+ "subnets",
35
+ "topology-zones",
36
+ "vulnerabilities",
37
+ "vulnerabilities-groups"
38
+ ],
39
+ "searchFields": ["title", "identifierKey"],
40
+ "narrativeFiltersByObjectType": {
41
+ "assets": [
42
+ { "key": "has-vulnerabilities", "label": "Has vulnerabilities" },
43
+ { "key": "has-no-vulnerabilities", "label": "No vulnerabilities" },
44
+ { "key": "is-triaged", "label": "Is triaged" },
45
+ { "key": "has-lateral-movement-risk", "label": "Lateral movement risk" },
46
+ { "key": "has-critical-predicted-impact", "label": "Critical predicted impact" },
47
+ { "key": "has-high-or-critical-exploitability", "label": "High or critical exploitability" }
48
+ ],
49
+ "vulnerabilities": [
50
+ { "key": "has-critical-severity", "label": "Critical severity" },
51
+ { "key": "has-high-severity", "label": "High severity" },
52
+ { "key": "has-medium-severity", "label": "Medium severity" },
53
+ { "key": "has-breach-vector", "label": "Breach vector" }
54
+ ],
55
+ "vulnerabilities-groups": [
56
+ { "key": "has-critical-severity", "label": "Critical severity" },
57
+ { "key": "has-high-severity", "label": "High severity" },
58
+ { "key": "has-medium-severity", "label": "Medium severity" },
59
+ { "key": "has-low-severity", "label": "Low severity" }
60
+ ],
61
+ "subnets": [
62
+ { "key": "has-assets", "label": "Has assets" },
63
+ { "key": "has-possible-paths", "label": "Has possible paths" }
64
+ ],
65
+ "topology-zones": [
66
+ { "key": "has-analysis", "label": "Has analysis" }
67
+ ]
68
+ }
69
+ },
70
+ "ui": {
71
+ "icon": "network",
72
+ "group": "network",
73
+ "order": 10
74
+ }
75
+ }
@@ -10,6 +10,8 @@
10
10
  },
11
11
  "filters": [],
12
12
  "fields": [
13
+ "ipAddress",
14
+ "hostName",
13
15
  "decisionOverviewSummary",
14
16
  "decisionOverviewDetailedAnalysis",
15
17
  "decisionLabel",
@@ -20,6 +22,8 @@
20
22
  "extensions": [],
21
23
  "includeRelations": [],
22
24
  "allowedSorts": [
25
+ "ipAddress",
26
+ "hostName",
23
27
  "decisionRiskScore",
24
28
  "decisionUrgencyScore",
25
29
  "decisionStatus",
@@ -10,21 +10,29 @@
10
10
  },
11
11
  "filters": [],
12
12
  "fields": [
13
+ "ipAddress",
14
+ "hostName",
15
+ "potentialImpactLevel",
16
+ "potentialImpactConfidence",
17
+ "impactDecisionLabel",
18
+ "impactDecisionStatus",
19
+ "impactDecisionRiskScore",
20
+ "impactDecisionUrgencyScore",
13
21
  "decisionOverviewSummary",
14
- "decisionOverviewDetailedAnalysis",
15
- "decisionLabel",
16
- "decisionStatus",
17
- "decisionRiskScore"
22
+ "decisionOverviewDetailedAnalysis"
18
23
  ],
19
24
  "extensions": [],
20
25
  "includeRelations": [],
21
26
  "allowedSorts": [
22
- "decisionRiskScore",
23
- "decisionStatus",
24
- "decisionLabel"
27
+ "ipAddress",
28
+ "hostName",
29
+ "impactDecisionRiskScore",
30
+ "impactDecisionStatus",
31
+ "impactDecisionLabel",
32
+ "potentialImpactLevel"
25
33
  ],
26
34
  "defaultSort": {
27
- "property": "decisionRiskScore",
35
+ "property": "impactDecisionRiskScore",
28
36
  "direction": "desc"
29
37
  },
30
38
  "allowSortDrivenLeadingOverride": false
@@ -19,6 +19,9 @@
19
19
  "asset-detail-item",
20
20
  "topology-subnet-detail-item",
21
21
  "vulnerability-detail-item"
22
+ ],
23
+ "memorix-graph-descriptors": [
24
+ "asset-topology-vulnerabilities-graph"
22
25
  ]
23
26
  },
24
27
  "files": [
@@ -33,6 +36,7 @@
33
36
  "list-descriptors/topology-subnets-main-list.json",
34
37
  "list-descriptors/vulnerabilities-main-list.json",
35
38
  "list-descriptors/memorix-workspace-records-list.json",
39
+ "graph-descriptors/asset-topology-vulnerabilities-graph.json",
36
40
  "memorix-catalog-ids.json",
37
41
  "scope.json"
38
42
  ]
@@ -3,6 +3,7 @@
3
3
  "catalogs": {
4
4
  "entityDescriptors": "memorix-object-type-descriptors",
5
5
  "listDescriptors": "lists",
6
- "itemDescriptors": "memorix-item-descriptors"
6
+ "itemDescriptors": "memorix-item-descriptors",
7
+ "graphDescriptors": "memorix-graph-descriptors"
7
8
  }
8
9
  }