@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.
- package/catalox-seeds/inputs/entity-descriptors/assets.json +312 -7
- package/catalox-seeds/inputs/entity-descriptors/subnets.json +207 -2
- package/catalox-seeds/inputs/entity-descriptors/topology-zones.json +85 -0
- package/catalox-seeds/inputs/entity-descriptors/vulnerabilities-groups.json +255 -0
- package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +294 -10
- package/catalox-seeds/inputs/item-descriptors/asset-detail-item.json +63 -14
- package/catalox-seeds/inputs/item-descriptors/subnet-detail-item.json +51 -17
- package/catalox-seeds/inputs/item-descriptors/vulnerabilities-group-detail-item.json +97 -0
- package/catalox-seeds/inputs/item-descriptors/vulnerability-detail-item.json +44 -40
- package/catalox-seeds/inputs/item-descriptors/vulnerability-observation-detail-item.json +42 -0
- package/catalox-seeds/inputs/list-descriptors/assets-exploitability-decisions-list.json +33 -0
- package/catalox-seeds/inputs/list-descriptors/assets-main-list.json +56 -2
- package/catalox-seeds/inputs/list-descriptors/assets-potential-impact-decisions-list.json +31 -0
- package/catalox-seeds/inputs/list-descriptors/subnets-main-list.json +107 -3
- package/catalox-seeds/inputs/list-descriptors/vulnerabilities-exploitability-analysis-list.json +29 -0
- package/catalox-seeds/inputs/list-descriptors/vulnerabilities-groups-main-list.json +98 -0
- package/catalox-seeds/inputs/list-descriptors/vulnerabilities-main-list.json +7 -1
- package/catalox-seeds/inputs/list-descriptors/vulnerabilities-observations-list.json +43 -0
- package/catalox-seeds/inputs/list-descriptors/vulnerabilities-triage-analysis-list.json +30 -0
- package/catalox-seeds/inputs/list-descriptors/vulnerable-assets-list.json +102 -0
- package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +2512 -367
- package/dist/descriptors/descriptor-types.d.ts +38 -0
- package/dist/descriptors/descriptor-types.d.ts.map +1 -1
- 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 +27 -0
- package/dist/descriptors/validate-descriptor.js.map +1 -1
- package/dist/explorer/collection-records.d.ts.map +1 -1
- package/dist/explorer/collection-records.js +22 -2
- package/dist/explorer/collection-records.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 +1 -1
- package/dist/explorer/raw-collection-records.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/mongo/env.d.ts +17 -0
- package/dist/mongo/env.d.ts.map +1 -1
- package/dist/mongo/env.js +73 -0
- package/dist/mongo/env.js.map +1 -1
- package/dist/retrieval/fetch-list.d.ts.map +1 -1
- package/dist/retrieval/fetch-list.js +3 -1
- package/dist/retrieval/fetch-list.js.map +1 -1
- package/dist/retrieval/fetch-narratives.d.ts +8 -0
- package/dist/retrieval/fetch-narratives.d.ts.map +1 -1
- package/dist/retrieval/fetch-narratives.js +39 -9
- package/dist/retrieval/fetch-narratives.js.map +1 -1
- package/dist/retrieval/narrative-list-filters.d.ts +30 -0
- package/dist/retrieval/narrative-list-filters.d.ts.map +1 -0
- package/dist/retrieval/narrative-list-filters.js +179 -0
- package/dist/retrieval/narrative-list-filters.js.map +1 -0
- package/dist/retrieval/resolve-filters.d.ts +11 -1
- package/dist/retrieval/resolve-filters.d.ts.map +1 -1
- package/dist/retrieval/resolve-filters.js +34 -7
- package/dist/retrieval/resolve-filters.js.map +1 -1
- package/dist/seeds/default-seed-spec.d.ts.map +1 -1
- package/dist/seeds/default-seed-spec.js +9 -0
- package/dist/seeds/default-seed-spec.js.map +1 -1
- package/dist/tests/resolve-filters.test.js +81 -4
- package/dist/tests/resolve-filters.test.js.map +1 -1
- package/docs/MEMORIX-CATALOX-CONTRACTS.md +2 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"
|
|
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,
|
|
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":"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"}
|
|
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,
|
|
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.
|
|
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.
|
|
41
|
-
"@x12i/memorix-associator": "^1.
|
|
42
|
-
"@x12i/memorix-descriptors": "^1.
|
|
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": {
|