@x12i/memorix-retrieval 1.31.0 → 1.32.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/catalox-seeds/inputs/entity-descriptors/assets.json +312 -7
  2. package/catalox-seeds/inputs/entity-descriptors/subnets.json +207 -2
  3. package/catalox-seeds/inputs/entity-descriptors/topology-zones.json +85 -0
  4. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities-groups.json +255 -0
  5. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +294 -10
  6. package/catalox-seeds/inputs/item-descriptors/asset-detail-item.json +63 -14
  7. package/catalox-seeds/inputs/item-descriptors/subnet-detail-item.json +51 -17
  8. package/catalox-seeds/inputs/item-descriptors/vulnerabilities-group-detail-item.json +97 -0
  9. package/catalox-seeds/inputs/item-descriptors/vulnerability-detail-item.json +44 -40
  10. package/catalox-seeds/inputs/item-descriptors/vulnerability-observation-detail-item.json +42 -0
  11. package/catalox-seeds/inputs/list-descriptors/assets-exploitability-decisions-list.json +33 -0
  12. package/catalox-seeds/inputs/list-descriptors/assets-main-list.json +56 -2
  13. package/catalox-seeds/inputs/list-descriptors/assets-potential-impact-decisions-list.json +31 -0
  14. package/catalox-seeds/inputs/list-descriptors/subnets-main-list.json +107 -3
  15. package/catalox-seeds/inputs/list-descriptors/vulnerabilities-exploitability-analysis-list.json +29 -0
  16. package/catalox-seeds/inputs/list-descriptors/vulnerabilities-groups-main-list.json +98 -0
  17. package/catalox-seeds/inputs/list-descriptors/vulnerabilities-main-list.json +7 -1
  18. package/catalox-seeds/inputs/list-descriptors/vulnerabilities-observations-list.json +43 -0
  19. package/catalox-seeds/inputs/list-descriptors/vulnerabilities-triage-analysis-list.json +30 -0
  20. package/catalox-seeds/inputs/list-descriptors/vulnerable-assets-list.json +102 -0
  21. package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +2512 -367
  22. package/dist/descriptors/descriptor-types.d.ts +38 -0
  23. package/dist/descriptors/descriptor-types.d.ts.map +1 -1
  24. package/dist/descriptors/validate-descriptor.d.ts +1 -0
  25. package/dist/descriptors/validate-descriptor.d.ts.map +1 -1
  26. package/dist/descriptors/validate-descriptor.js +27 -0
  27. package/dist/descriptors/validate-descriptor.js.map +1 -1
  28. package/dist/explorer/collection-records.d.ts.map +1 -1
  29. package/dist/explorer/collection-records.js +22 -2
  30. package/dist/explorer/collection-records.js.map +1 -1
  31. package/dist/explorer/raw-collection-records.d.ts +2 -0
  32. package/dist/explorer/raw-collection-records.d.ts.map +1 -1
  33. package/dist/explorer/raw-collection-records.js +1 -1
  34. package/dist/explorer/raw-collection-records.js.map +1 -1
  35. package/dist/index.d.ts +3 -2
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +2 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/mongo/env.d.ts +17 -0
  40. package/dist/mongo/env.d.ts.map +1 -1
  41. package/dist/mongo/env.js +73 -0
  42. package/dist/mongo/env.js.map +1 -1
  43. package/dist/retrieval/fetch-list.d.ts.map +1 -1
  44. package/dist/retrieval/fetch-list.js +3 -1
  45. package/dist/retrieval/fetch-list.js.map +1 -1
  46. package/dist/retrieval/fetch-narratives.d.ts +8 -0
  47. package/dist/retrieval/fetch-narratives.d.ts.map +1 -1
  48. package/dist/retrieval/fetch-narratives.js +39 -9
  49. package/dist/retrieval/fetch-narratives.js.map +1 -1
  50. package/dist/retrieval/narrative-list-filters.d.ts +30 -0
  51. package/dist/retrieval/narrative-list-filters.d.ts.map +1 -0
  52. package/dist/retrieval/narrative-list-filters.js +179 -0
  53. package/dist/retrieval/narrative-list-filters.js.map +1 -0
  54. package/dist/retrieval/resolve-filters.d.ts +11 -1
  55. package/dist/retrieval/resolve-filters.d.ts.map +1 -1
  56. package/dist/retrieval/resolve-filters.js +34 -7
  57. package/dist/retrieval/resolve-filters.js.map +1 -1
  58. package/dist/seeds/default-seed-spec.d.ts.map +1 -1
  59. package/dist/seeds/default-seed-spec.js +9 -0
  60. package/dist/seeds/default-seed-spec.js.map +1 -1
  61. package/dist/tests/resolve-filters.test.js +81 -4
  62. package/dist/tests/resolve-filters.test.js.map +1 -1
  63. package/docs/MEMORIX-CATALOX-CONTRACTS.md +2 -0
  64. package/package.json +5 -5
@@ -1,5 +1,6 @@
1
1
  import { throwRetrievalError } from "../errors/errors.js";
2
2
  import { resolveMemorixPropertySource } from "./resolve-property-source.js";
3
+ import { compileNarrativeIdMongoFilter, isNarrativeIdFilterProperty, narrativeHostContentType, partitionNarrativeIdFilters, resolveNarrativeIdFilterViaSnapshot, } from "./narrative-list-filters.js";
3
4
  function operatorToMongo(operator, mongoPath, value) {
4
5
  switch (operator) {
5
6
  case "eq":
@@ -46,12 +47,42 @@ export function mergeListDescriptorFilters(list, requestFilters) {
46
47
  }
47
48
  return [...merged.values()];
48
49
  }
49
- export function resolveMemorixFilters(entity, list, filters, driverContentType) {
50
+ function mergeClauses(clauses) {
51
+ const nonEmpty = clauses.filter((c) => Object.keys(c).length > 0);
52
+ if (nonEmpty.length === 0)
53
+ return {};
54
+ if (nonEmpty.length === 1)
55
+ return nonEmpty[0];
56
+ return { $and: nonEmpty };
57
+ }
58
+ /**
59
+ * Resolve list/request filters to a Mongo query on the pagination driver collection.
60
+ *
61
+ * Virtual filter `narrativeId` (alias `narrativeKey`) matches snapshot narrative tags
62
+ * (`doc.narratives.{key}`). When the driver is not the narrative host (e.g. analysis),
63
+ * pass `client` so matching snapshot ids can be resolved and applied via record links.
64
+ */
65
+ export async function resolveMemorixFilters(entity, list, filters, driverContentType, options) {
50
66
  const effectiveFilters = mergeListDescriptorFilters(list, filters);
51
67
  if (!effectiveFilters.length)
52
68
  return {};
69
+ const { narrativeFilters, otherFilters } = partitionNarrativeIdFilters(effectiveFilters);
53
70
  const clauses = [];
54
- for (const filter of effectiveFilters) {
71
+ if (narrativeFilters.length) {
72
+ const host = narrativeHostContentType(entity);
73
+ if (driverContentType === host) {
74
+ clauses.push(compileNarrativeIdMongoFilter(narrativeFilters));
75
+ }
76
+ else if (options?.client) {
77
+ clauses.push(await resolveNarrativeIdFilterViaSnapshot(options.client, entity, narrativeFilters));
78
+ }
79
+ else {
80
+ throwRetrievalError("FILTER_PROPERTY_NOT_ALLOWED", `narrativeId filter on content type "${driverContentType}" requires a retrieval client to resolve via snapshot narratives`);
81
+ }
82
+ }
83
+ for (const filter of otherFilters) {
84
+ if (isNarrativeIdFilterProperty(filter.property))
85
+ continue;
55
86
  const prop = entity.properties[filter.property];
56
87
  if (!prop) {
57
88
  throwRetrievalError("FILTER_PROPERTY_NOT_ALLOWED", `Unknown filter property: ${filter.property}`);
@@ -65,10 +96,6 @@ export function resolveMemorixFilters(entity, list, filters, driverContentType)
65
96
  }
66
97
  clauses.push(operatorToMongo(filter.operator, source.fullPath, filter.value));
67
98
  }
68
- if (clauses.length === 0)
69
- return {};
70
- if (clauses.length === 1)
71
- return clauses[0];
72
- return { $and: clauses };
99
+ return mergeClauses(clauses);
73
100
  }
74
101
  //# sourceMappingURL=resolve-filters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-filters.js","sourceRoot":"","sources":["../../src/retrieval/resolve-filters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resolve-filters.js","sourceRoot":"","sources":["../../src/retrieval/resolve-filters.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"default-seed-spec.d.ts","sourceRoot":"","sources":["../../src/seeds/default-seed-spec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,eAAO,MAAM,gCAAgC,kCAAkC,CAAC;AAEhF,eAAO,MAAM,+BAA+B,EAAE,gBAG7C,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,CAO7F,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,sBAAsB,EA0EnE,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAAiB,CAAC;AAE5D,wBAAgB,uCAAuC,IAAI,KAAK,CAAC;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC,CAQD"}
1
+ {"version":3,"file":"default-seed-spec.d.ts","sourceRoot":"","sources":["../../src/seeds/default-seed-spec.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEhF,eAAO,MAAM,gCAAgC,kCAAkC,CAAC;AAEhF,eAAO,MAAM,+BAA+B,EAAE,gBAG7C,CAAC;AAEF,mFAAmF;AACnF,eAAO,MAAM,gCAAgC,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,WAAW,CAO7F,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,sBAAsB,EAmFnE,CAAC;AAEF,eAAO,MAAM,6BAA6B,YAAiB,CAAC;AAE5D,wBAAgB,uCAAuC,IAAI,KAAK,CAAC;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC,CAQD"}
@@ -55,8 +55,15 @@ export const MEMORIX_RETRIEVAL_SEED_CATALOGS = [
55
55
  },
56
56
  inputFiles: [
57
57
  "list-descriptors/assets-main-list.json",
58
+ "list-descriptors/vulnerable-assets-list.json",
59
+ "list-descriptors/assets-exploitability-decisions-list.json",
60
+ "list-descriptors/assets-potential-impact-decisions-list.json",
58
61
  "list-descriptors/subnets-main-list.json",
59
62
  "list-descriptors/vulnerabilities-main-list.json",
63
+ "list-descriptors/vulnerabilities-observations-list.json",
64
+ "list-descriptors/vulnerabilities-exploitability-analysis-list.json",
65
+ "list-descriptors/vulnerabilities-triage-analysis-list.json",
66
+ "list-descriptors/vulnerabilities-groups-main-list.json",
60
67
  "list-descriptors/critical-vulnerabilities-list.json",
61
68
  "list-descriptors/critical-vulnerabilities-slice.json",
62
69
  "list-descriptors/memorix-workspace-records-list.json",
@@ -83,6 +90,8 @@ export const MEMORIX_RETRIEVAL_SEED_CATALOGS = [
83
90
  "item-descriptors/asset-detail-item.json",
84
91
  "item-descriptors/subnet-detail-item.json",
85
92
  "item-descriptors/vulnerability-detail-item.json",
93
+ "item-descriptors/vulnerability-observation-detail-item.json",
94
+ "item-descriptors/vulnerabilities-group-detail-item.json",
86
95
  "item-descriptors/knowledge-playbook-detail-item.json",
87
96
  "item-descriptors/content-document-detail-item.json",
88
97
  ],
@@ -1 +1 @@
1
- {"version":3,"file":"default-seed-spec.js","sourceRoot":"","sources":["../../src/seeds/default-seed-spec.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,uCAAuC,EACvC,gCAAgC,EAChC,gCAAgC,GACjC,MAAM,+BAA+B,CAAC;AAGvC,MAAM,CAAC,MAAM,gCAAgC,GAAG,+BAA+B,CAAC;AAEhF,MAAM,CAAC,MAAM,+BAA+B,GAAqB;IAC/D,OAAO,EAAE,CAAC,SAAS,EAAE,iBAAiB,CAAC;IACvC,MAAM,EAAE,CAAC,KAAK,CAAC;CAChB,CAAC;AAEF,mFAAmF;AACnF,MAAM,CAAC,MAAM,gCAAgC,GAAqD;IAChG,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,QAAQ;IACjB,eAAe,EAAE,OAAO;IACxB,wBAAwB,EAAE,QAAQ;IAClC,qBAAqB,EAAE,WAAW;IAClC,mBAAmB,EAAE,WAAW;CACjC,CAAC;AAEF,MAAM,CAAC,MAAM,+BAA+B,GAA6B;IACvE;QACE,SAAS,EAAE,uCAAuC;QAClD,IAAI,EAAE,4BAA4B;QAClC,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE;QACvD,UAAU,EAAE;YACV,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,YAAY;YACxB,eAAe,EAAE;gBACf,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC1B,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE;gBAC3C,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;aACnC;SACF;QACD,UAAU,EAAE;YACV,gCAAgC;YAChC,iCAAiC;YACjC,yCAAyC;YACzC,gDAAgD;YAChD,6CAA6C;YAC7C,2CAA2C;SAC5C;KACF;IACD;QACE,SAAS,EAAE,gCAAgC;QAC3C,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE;QAClD,UAAU,EAAE;YACV,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,OAAO;YACnB,eAAe,EAAE;gBACf,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC1B,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAClC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;aACjC;SACF;QACD,UAAU,EAAE;YACV,wCAAwC;YACxC,yCAAyC;YACzC,iDAAiD;YACjD,qDAAqD;YACrD,sDAAsD;YACtD,sDAAsD;YACtD,qDAAqD;YACrD,mDAAmD;SACpD;KACF;IACD;QACE,SAAS,EAAE,gCAAgC;QAC3C,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,SAAS;QACtB,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE;QAClD,UAAU,EAAE;YACV,WAAW,EAAE,IAAI;YACjB,UAAU,EAAE,OAAO;YACnB,eAAe,EAAE;gBACf,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC1B,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAClC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE;aACjC;SACF;QACD,UAAU,EAAE;YACV,yCAAyC;YACzC,0CAA0C;YAC1C,iDAAiD;YACjD,sDAAsD;YACtD,oDAAoD;SACrD;KACF;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,6BAA6B,GAAG,cAAc,CAAC;AAE5D,MAAM,UAAU,uCAAuC;IAIrD,OAAO,+BAA+B,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACpD,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,OAAO,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACpC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC;YAC3C,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACtC,CAAC,CAAC;KACH,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"default-seed-spec.js","sourceRoot":"","sources":["../../src/seeds/default-seed-spec.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { mergeListDescriptorFilters, resolveMemorixFilters, } from "../retrieval/resolve-filters.js";
3
+ import { compileNarrativeIdMongoFilter, isNarrativeIdFilterProperty, narrativeHostContentType, } from "../retrieval/narrative-list-filters.js";
3
4
  import { assetsEntity } from "./fixtures.js";
4
5
  describe("resolveMemorixFilters", () => {
5
- it("applies list descriptor default filters when request has none", () => {
6
+ it("applies list descriptor default filters when request has none", async () => {
6
7
  const list = {
7
8
  id: "filtered-assets-list",
8
9
  entity: "assets",
@@ -13,10 +14,10 @@ describe("resolveMemorixFilters", () => {
13
14
  ],
14
15
  fields: ["ipAddress"],
15
16
  };
16
- const query = resolveMemorixFilters(assetsEntity, list, undefined, "snapshots");
17
+ const query = await resolveMemorixFilters(assetsEntity, list, undefined, "snapshots");
17
18
  expect(query).toEqual({ "data.ip_address": "10.0.0.1" });
18
19
  });
19
- it("merges request filters over list defaults on the same property", () => {
20
+ it("merges request filters over list defaults on the same property", async () => {
20
21
  const list = {
21
22
  id: "critical-vulnerabilities-list",
22
23
  entity: "assets",
@@ -27,7 +28,7 @@ describe("resolveMemorixFilters", () => {
27
28
  ],
28
29
  fields: ["ipAddress"],
29
30
  };
30
- const query = resolveMemorixFilters(assetsEntity, list, [{ property: "ipAddress", operator: "eq", value: "10.0.0.2" }], "snapshots");
31
+ const query = await resolveMemorixFilters(assetsEntity, list, [{ property: "ipAddress", operator: "eq", value: "10.0.0.2" }], "snapshots");
31
32
  expect(query).toEqual({ "data.ip_address": "10.0.0.2" });
32
33
  });
33
34
  it("mergeListDescriptorFilters keeps allowlist-only entries out of defaults", () => {
@@ -43,5 +44,81 @@ describe("resolveMemorixFilters", () => {
43
44
  { property: "ipAddress", operator: "eq", value: "1.2.3.4" },
44
45
  ]);
45
46
  });
47
+ it("compiles narrativeId:eq on snapshot driver to narratives.{key} exists", async () => {
48
+ const list = {
49
+ id: "assets-main-list",
50
+ entity: "assets",
51
+ leadingContentType: "snapshots",
52
+ pagination: { enabled: true, defaultLimit: 50, maxLimit: 200 },
53
+ fields: ["ipAddress"],
54
+ };
55
+ const query = await resolveMemorixFilters(assetsEntity, list, [{ property: "narrativeId", operator: "eq", value: "is-vulnerability" }], "snapshots");
56
+ expect(query).toEqual({
57
+ "narratives.is-vulnerability": { $exists: true },
58
+ });
59
+ });
60
+ it("accepts narrativeKey as an alias for narrativeId", async () => {
61
+ const list = {
62
+ id: "assets-main-list",
63
+ entity: "assets",
64
+ leadingContentType: "snapshots",
65
+ pagination: { enabled: true, defaultLimit: 50, maxLimit: 200 },
66
+ fields: ["ipAddress"],
67
+ };
68
+ const query = await resolveMemorixFilters(assetsEntity, list, [{ property: "narrativeKey", operator: "in", value: ["is-finding", "is-vulnerability"] }], "snapshots");
69
+ expect(query).toEqual({
70
+ $or: [
71
+ { "narratives.is-finding": { $exists: true } },
72
+ { "narratives.is-vulnerability": { $exists: true } },
73
+ ],
74
+ });
75
+ });
76
+ it("combines narrativeId with descriptor property filters", async () => {
77
+ const list = {
78
+ id: "assets-main-list",
79
+ entity: "assets",
80
+ leadingContentType: "snapshots",
81
+ pagination: { enabled: true, defaultLimit: 50, maxLimit: 200 },
82
+ fields: ["ipAddress"],
83
+ };
84
+ const query = await resolveMemorixFilters(assetsEntity, list, [
85
+ { property: "narrativeId", operator: "eq", value: "is-triaged" },
86
+ { property: "ipAddress", operator: "eq", value: "10.0.0.1" },
87
+ ], "snapshots");
88
+ expect(query).toEqual({
89
+ $and: [
90
+ { "narratives.is-triaged": { $exists: true } },
91
+ { "data.ip_address": "10.0.0.1" },
92
+ ],
93
+ });
94
+ });
95
+ it("requires a client when narrativeId filters a non-host content type", async () => {
96
+ const list = {
97
+ id: "assets-main-list",
98
+ entity: "assets",
99
+ leadingContentType: "analysis",
100
+ pagination: { enabled: true, defaultLimit: 50, maxLimit: 200 },
101
+ fields: ["investigationReport"],
102
+ };
103
+ await expect(resolveMemorixFilters(assetsEntity, list, [{ property: "narrativeId", operator: "eq", value: "is-triaged" }], "analysis")).rejects.toThrow(/requires a retrieval client/);
104
+ });
105
+ });
106
+ describe("narrative-list-filters helpers", () => {
107
+ it("recognizes narrativeId / narrativeKey properties", () => {
108
+ expect(isNarrativeIdFilterProperty("narrativeId")).toBe(true);
109
+ expect(isNarrativeIdFilterProperty("narrativeKey")).toBe(true);
110
+ expect(isNarrativeIdFilterProperty("severity")).toBe(false);
111
+ });
112
+ it("prefers snapshots as narrative host when declared", () => {
113
+ expect(narrativeHostContentType(assetsEntity)).toBe("snapshots");
114
+ });
115
+ it("compiles ne / exists operators", () => {
116
+ expect(compileNarrativeIdMongoFilter([
117
+ { property: "narrativeId", operator: "ne", value: "is-finding" },
118
+ ])).toEqual({ "narratives.is-finding": { $exists: false } });
119
+ expect(compileNarrativeIdMongoFilter([
120
+ { property: "narrativeId", operator: "exists", value: true },
121
+ ])).toEqual({ narratives: { $exists: true, $ne: {} } });
122
+ });
46
123
  });
47
124
  //# sourceMappingURL=resolve-filters.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resolve-filters.test.js","sourceRoot":"","sources":["../../src/tests/resolve-filters.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,GACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,+DAA+D,EAAE,GAAG,EAAE;QACvE,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,sBAAsB;YAC1B,MAAM,EAAE,QAAQ;YAChB,kBAAkB,EAAE,WAAW;YAC/B,UAAU,EAAE,EAAE,OAAO,EAAE,IAAa,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;YACvE,OAAO,EAAE;gBACP,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAa,EAAE,KAAK,EAAE,UAAU,EAAE;aACtE;YACD,MAAM,EAAE,CAAC,WAAW,CAAC;SACtB,CAAC;QAEF,MAAM,KAAK,GAAG,qBAAqB,CACjC,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,WAAW,CACZ,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,+BAA+B;YACnC,MAAM,EAAE,QAAQ;YAChB,kBAAkB,EAAE,WAAW;YAC/B,UAAU,EAAE,EAAE,OAAO,EAAE,IAAa,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;YACvE,OAAO,EAAE;gBACP,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAa,EAAE,KAAK,EAAE,UAAU,EAAE;aACtE;YACD,MAAM,EAAE,CAAC,WAAW,CAAC;SACtB,CAAC;QAEF,MAAM,KAAK,GAAG,qBAAqB,CACjC,YAAY,EACZ,IAAI,EACJ,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,EAC9D,WAAW,CACZ,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,EAAE,iBAAiB,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yEAAyE,EAAE,GAAG,EAAE;QACjF,MAAM,MAAM,GAAG,0BAA0B,CACvC;YACE,EAAE,EAAE,GAAG;YACP,MAAM,EAAE,QAAQ;YAChB,kBAAkB,EAAE,WAAW;YAC/B,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE;YAC9D,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;YACpC,MAAM,EAAE,CAAC,WAAW,CAAC;SACtB,EACD,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAC9D,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC;YACrB,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;SAC5D,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"resolve-filters.test.js","sourceRoot":"","sources":["../../src/tests/resolve-filters.test.ts"],"names":[],"mappings":"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"}
@@ -248,6 +248,8 @@ List descriptors are a **discriminated union** by `kind`:
248
248
  | `allowedSorts`, `defaultSort` | Sort whitelist and default |
249
249
  | `extensions` | Pull extra content types by identity (see §3.5) |
250
250
  | `includeRelations` | Embed relation data in list rows |
251
+ | `analytics` | Optional rollup columns computed per page (join + metric) |
252
+ | `columnDrillDowns` | Optional per-column navigation to another list via `MemorixListQuery` templates (`valueFromRow` binds row fields; same object as dashboard drill-down). Resolved on `GET /lists/{id}/records` as `recordDrillDowns` |
251
253
  | `allowSortDrivenLeadingOverride` | Allow sort to switch pagination driver content type |
252
254
 
253
255
  **Example filter:**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@x12i/memorix-retrieval",
3
- "version": "1.31.0",
3
+ "version": "1.32.0",
4
4
  "description": "Read-side runtime data tier for Memorix: inventory, lists, items, slices, graph, and health",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,7 +23,7 @@
23
23
  "test": "vitest run",
24
24
  "catalox:seed:build": "npm run build && node scripts/build-seed-manifest.mjs",
25
25
  "catalox:seed:memorix-retrieval:validate": "npm run catalox:seed:build && catalox seed validate --file catalox-seeds/memorix-retrieval-descriptors.manifest.json",
26
- "catalox:seed:memorix-retrieval:apply": "npm run build && node scripts/apply-seed-manifest.mjs",
26
+ "catalox:seed:memorix-retrieval:apply": "npm run catalox:seed:build && node scripts/apply-seed-manifest.mjs",
27
27
  "catalox:seed:ensure": "npm run build && node scripts/ensure-catalox-seed.mjs",
28
28
  "mongo:check-collections": "node scripts/check-mongo-collections.mjs",
29
29
  "mongo:inventory": "npm run build && node scripts/mongo-inventory.mjs",
@@ -37,9 +37,9 @@
37
37
  "@x12i/env": "^4.0.3",
38
38
  "@x12i/helpers": "^2.1.0",
39
39
  "@x12i/logxer": "^5.1.0",
40
- "@x12i/memorix-agents": "^1.2.1",
41
- "@x12i/memorix-associator": "^1.0.0",
42
- "@x12i/memorix-descriptors": "^1.22.0",
40
+ "@x12i/memorix-agents": "^1.32.0",
41
+ "@x12i/memorix-associator": "^1.32.0",
42
+ "@x12i/memorix-descriptors": "^1.32.0",
43
43
  "@x12i/xronox": "^3.9.0"
44
44
  },
45
45
  "devDependencies": {