@x12i/memorix-retrieval 1.2.0 → 1.4.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 (102) hide show
  1. package/README.md +64 -24
  2. package/catalox-seeds/inputs/entity-descriptors/assets.json +2 -0
  3. package/catalox-seeds/inputs/entity-descriptors/variabilities-groups.json +2 -0
  4. package/catalox-seeds/inputs/entity-descriptors/vulnerabilities.json +2 -0
  5. package/catalox-seeds/memorix-retrieval-descriptors.manifest.json +6 -0
  6. package/dist/client/create-client.js +2 -2
  7. package/dist/client/create-client.js.map +1 -1
  8. package/dist/client/create-stack-from-env.js +4 -6
  9. package/dist/client/create-stack-from-env.js.map +1 -1
  10. package/dist/client/types.d.ts +4 -0
  11. package/dist/client/types.d.ts.map +1 -1
  12. package/dist/descriptors/descriptor-types.d.ts +4 -0
  13. package/dist/descriptors/descriptor-types.d.ts.map +1 -1
  14. package/dist/descriptors/discover-entities.d.ts +3 -1
  15. package/dist/descriptors/discover-entities.d.ts.map +1 -1
  16. package/dist/descriptors/discover-entities.js +14 -43
  17. package/dist/descriptors/discover-entities.js.map +1 -1
  18. package/dist/descriptors/resolve-app-id.d.ts +4 -0
  19. package/dist/descriptors/resolve-app-id.d.ts.map +1 -0
  20. package/dist/descriptors/resolve-app-id.js +8 -0
  21. package/dist/descriptors/resolve-app-id.js.map +1 -0
  22. package/dist/descriptors/resolve-default-descriptors.d.ts +11 -0
  23. package/dist/descriptors/resolve-default-descriptors.d.ts.map +1 -0
  24. package/dist/descriptors/resolve-default-descriptors.js +22 -0
  25. package/dist/descriptors/resolve-default-descriptors.js.map +1 -0
  26. package/dist/descriptors/validate-descriptor.d.ts.map +1 -1
  27. package/dist/descriptors/validate-descriptor.js +11 -0
  28. package/dist/descriptors/validate-descriptor.js.map +1 -1
  29. package/dist/explorer/entity-graph.d.ts +3 -1
  30. package/dist/explorer/entity-graph.d.ts.map +1 -1
  31. package/dist/explorer/entity-graph.js +4 -0
  32. package/dist/explorer/entity-graph.js.map +1 -1
  33. package/dist/index.d.ts +12 -3
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +11 -3
  36. package/dist/index.js.map +1 -1
  37. package/dist/retrieval/fetch-for-entity.d.ts +18 -0
  38. package/dist/retrieval/fetch-for-entity.d.ts.map +1 -0
  39. package/dist/retrieval/fetch-for-entity.js +21 -0
  40. package/dist/retrieval/fetch-for-entity.js.map +1 -0
  41. package/dist/retrieval/fetch-list.d.ts.map +1 -1
  42. package/dist/retrieval/fetch-list.js +16 -1
  43. package/dist/retrieval/fetch-list.js.map +1 -1
  44. package/dist/retrieval/resolve-filters.d.ts +2 -0
  45. package/dist/retrieval/resolve-filters.d.ts.map +1 -1
  46. package/dist/retrieval/resolve-filters.js +24 -3
  47. package/dist/retrieval/resolve-filters.js.map +1 -1
  48. package/dist/retrieval/resolve-list-search.d.ts +6 -0
  49. package/dist/retrieval/resolve-list-search.d.ts.map +1 -0
  50. package/dist/retrieval/resolve-list-search.js +25 -0
  51. package/dist/retrieval/resolve-list-search.js.map +1 -0
  52. package/dist/seeds/build-manifest.d.ts +8 -0
  53. package/dist/seeds/build-manifest.d.ts.map +1 -0
  54. package/dist/seeds/build-manifest.js +83 -0
  55. package/dist/seeds/build-manifest.js.map +1 -0
  56. package/dist/seeds/check-needs-seed.d.ts +10 -0
  57. package/dist/seeds/check-needs-seed.d.ts.map +1 -0
  58. package/dist/seeds/check-needs-seed.js +66 -0
  59. package/dist/seeds/check-needs-seed.js.map +1 -0
  60. package/dist/seeds/default-seed-spec.d.ts +12 -0
  61. package/dist/seeds/default-seed-spec.d.ts.map +1 -0
  62. package/dist/seeds/default-seed-spec.js +89 -0
  63. package/dist/seeds/default-seed-spec.js.map +1 -0
  64. package/dist/seeds/merge-for-apply.d.ts +28 -0
  65. package/dist/seeds/merge-for-apply.d.ts.map +1 -0
  66. package/dist/seeds/merge-for-apply.js +31 -0
  67. package/dist/seeds/merge-for-apply.js.map +1 -0
  68. package/dist/seeds/paths.d.ts +10 -0
  69. package/dist/seeds/paths.d.ts.map +1 -0
  70. package/dist/seeds/paths.js +40 -0
  71. package/dist/seeds/paths.js.map +1 -0
  72. package/dist/seeds/seed-types.d.ts +57 -0
  73. package/dist/seeds/seed-types.d.ts.map +1 -0
  74. package/dist/seeds/seed-types.js +2 -0
  75. package/dist/seeds/seed-types.js.map +1 -0
  76. package/dist/tests/descriptor-validation.test.js +15 -0
  77. package/dist/tests/descriptor-validation.test.js.map +1 -1
  78. package/dist/tests/fixtures.d.ts.map +1 -1
  79. package/dist/tests/fixtures.js +2 -0
  80. package/dist/tests/fixtures.js.map +1 -1
  81. package/dist/tests/relations.test.js +3 -0
  82. package/dist/tests/relations.test.js.map +1 -1
  83. package/dist/tests/resolve-app-id.test.d.ts +2 -0
  84. package/dist/tests/resolve-app-id.test.d.ts.map +1 -0
  85. package/dist/tests/resolve-app-id.test.js +19 -0
  86. package/dist/tests/resolve-app-id.test.js.map +1 -0
  87. package/dist/tests/resolve-filters.test.d.ts +2 -0
  88. package/dist/tests/resolve-filters.test.d.ts.map +1 -0
  89. package/dist/tests/resolve-filters.test.js +47 -0
  90. package/dist/tests/resolve-filters.test.js.map +1 -0
  91. package/dist/tests/seed-check.test.d.ts +2 -0
  92. package/dist/tests/seed-check.test.d.ts.map +1 -0
  93. package/dist/tests/seed-check.test.js +47 -0
  94. package/dist/tests/seed-check.test.js.map +1 -0
  95. package/dist/tests/seed-manifest.test.d.ts +2 -0
  96. package/dist/tests/seed-manifest.test.d.ts.map +1 -0
  97. package/dist/tests/seed-manifest.test.js +80 -0
  98. package/dist/tests/seed-manifest.test.js.map +1 -0
  99. package/docs/DATA-TIER-CONTRACT.md +138 -0
  100. package/docs/EXPLORER-HOST-APIS.md +8 -6
  101. package/docs/MEMORIX-CATALOX-CONTRACTS.md +540 -0
  102. package/package.json +4 -3
@@ -0,0 +1,66 @@
1
+ import { throwRetrievalError } from "../errors/errors.js";
2
+ import { listExpectedMemorixRetrievalSeedItemIds } from "./default-seed-spec.js";
3
+ async function listCatalogItemIds(client, catalogId) {
4
+ const listFn = client.catalox.listCatalogItems;
5
+ if (!listFn) {
6
+ throwRetrievalError("CATALOX_LIST_UNSUPPORTED", "Catalox client must support listCatalogItems to check seed status");
7
+ }
8
+ const ids = [];
9
+ let offset = 0;
10
+ const pageSize = 200;
11
+ for (;;) {
12
+ const page = await listFn({ appId: client.appId }, catalogId, {
13
+ limit: pageSize,
14
+ offset,
15
+ });
16
+ ids.push(...page.items.map((item) => item.id));
17
+ if (!page.hasMore || page.items.length === 0)
18
+ break;
19
+ offset += page.items.length;
20
+ if (offset > 10_000)
21
+ break;
22
+ }
23
+ return ids;
24
+ }
25
+ export async function checkMemorixRetrievalSeedNeeds(client, options = {}) {
26
+ const expected = options.expected ?? listExpectedMemorixRetrievalSeedItemIds();
27
+ const catalogs = [];
28
+ let needed = false;
29
+ const reasons = [];
30
+ for (const { catalogId, itemIds } of expected) {
31
+ let presentItemIds = [];
32
+ try {
33
+ presentItemIds = await listCatalogItemIds(client, catalogId);
34
+ }
35
+ catch (e) {
36
+ needed = true;
37
+ const msg = e instanceof Error ? e.message : String(e);
38
+ reasons.push(`${catalogId}: ${msg}`);
39
+ catalogs.push({
40
+ catalogId,
41
+ expectedItemIds: itemIds,
42
+ presentItemIds: [],
43
+ missingItemIds: itemIds,
44
+ });
45
+ continue;
46
+ }
47
+ const presentSet = new Set(presentItemIds);
48
+ const missingItemIds = itemIds.filter((id) => !presentSet.has(id));
49
+ if (missingItemIds.length) {
50
+ needed = true;
51
+ reasons.push(`${catalogId}: missing ${missingItemIds.join(", ")}`);
52
+ }
53
+ catalogs.push({
54
+ catalogId,
55
+ expectedItemIds: itemIds,
56
+ presentItemIds,
57
+ missingItemIds,
58
+ });
59
+ }
60
+ return {
61
+ needed,
62
+ reason: reasons.length ? reasons.join("; ") : undefined,
63
+ catalogs,
64
+ };
65
+ }
66
+ //# sourceMappingURL=check-needs-seed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-needs-seed.js","sourceRoot":"","sources":["../../src/seeds/check-needs-seed.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { MemorixSeedCatalogSpec, MemorixSeedScope } from "./seed-types.js";
2
+ export declare const MEMORIX_RETRIEVAL_SEED_PRESET_ID = "memorix-retrieval-descriptors";
3
+ export declare const MEMORIX_RETRIEVAL_DEFAULT_SCOPE: MemorixSeedScope;
4
+ /** Entity descriptor id → Memorix target database role (applied at seed build). */
5
+ export declare const MEMORIX_RETRIEVAL_ENTITY_TARGETS: Record<string, "entity" | "event">;
6
+ export declare const MEMORIX_RETRIEVAL_SEED_CATALOGS: MemorixSeedCatalogSpec[];
7
+ export declare const MEMORIX_RETRIEVAL_SEED_APP_ID = "memorix";
8
+ export declare function listExpectedMemorixRetrievalSeedItemIds(): Array<{
9
+ catalogId: string;
10
+ itemIds: string[];
11
+ }>;
12
+ //# sourceMappingURL=default-seed-spec.d.ts.map
@@ -0,0 +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,CAI/E,CAAC;AAEF,eAAO,MAAM,+BAA+B,EAAE,sBAAsB,EAiEnE,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"}
@@ -0,0 +1,89 @@
1
+ import { MEMORIX_APP_ID, MEMORIX_ENTITY_DESCRIPTORS_CATALOG, MEMORIX_ITEM_DESCRIPTORS_CATALOG, MEMORIX_LIST_DESCRIPTORS_CATALOG, } from "../descriptors/catalog-ids.js";
2
+ export const MEMORIX_RETRIEVAL_SEED_PRESET_ID = "memorix-retrieval-descriptors";
3
+ export const MEMORIX_RETRIEVAL_DEFAULT_SCOPE = {
4
+ domains: ["network", "vulnerabilities"],
5
+ agents: ["neo"],
6
+ };
7
+ /** Entity descriptor id → Memorix target database role (applied at seed build). */
8
+ export const MEMORIX_RETRIEVAL_ENTITY_TARGETS = {
9
+ assets: "entity",
10
+ "variabilities-groups": "entity",
11
+ vulnerabilities: "event",
12
+ };
13
+ export const MEMORIX_RETRIEVAL_SEED_CATALOGS = [
14
+ {
15
+ catalogId: MEMORIX_ENTITY_DESCRIPTORS_CATALOG,
16
+ name: "Memorix entity descriptors",
17
+ catalogType: "memorix",
18
+ sourceMode: "native",
19
+ native: { itemIdField: "id", titleField: "entityName" },
20
+ descriptor: {
21
+ itemIdField: "id",
22
+ titleField: "entityName",
23
+ queryableFields: [
24
+ { key: "id", label: "Id" },
25
+ { key: "entityName", label: "Entity name" },
26
+ { key: "target", label: "Target" },
27
+ ],
28
+ },
29
+ inputFiles: [
30
+ "entity-descriptors/assets.json",
31
+ "entity-descriptors/variabilities-groups.json",
32
+ "entity-descriptors/vulnerabilities.json",
33
+ ],
34
+ },
35
+ {
36
+ catalogId: MEMORIX_LIST_DESCRIPTORS_CATALOG,
37
+ name: "Memorix list descriptors",
38
+ catalogType: "memorix",
39
+ sourceMode: "native",
40
+ native: { itemIdField: "id", titleField: "title" },
41
+ descriptor: {
42
+ itemIdField: "id",
43
+ titleField: "title",
44
+ queryableFields: [
45
+ { key: "id", label: "Id" },
46
+ { key: "entity", label: "Entity" },
47
+ { key: "title", label: "Title" },
48
+ ],
49
+ },
50
+ inputFiles: [
51
+ "list-descriptors/assets-main-list.json",
52
+ "list-descriptors/vulnerabilities-main-list.json",
53
+ "list-descriptors/critical-vulnerabilities-list.json",
54
+ "list-descriptors/variabilities-groups-main-list.json",
55
+ ],
56
+ },
57
+ {
58
+ catalogId: MEMORIX_ITEM_DESCRIPTORS_CATALOG,
59
+ name: "Memorix item descriptors",
60
+ catalogType: "memorix",
61
+ sourceMode: "native",
62
+ native: { itemIdField: "id", titleField: "title" },
63
+ descriptor: {
64
+ itemIdField: "id",
65
+ titleField: "title",
66
+ queryableFields: [
67
+ { key: "id", label: "Id" },
68
+ { key: "entity", label: "Entity" },
69
+ { key: "title", label: "Title" },
70
+ ],
71
+ },
72
+ inputFiles: [
73
+ "item-descriptors/asset-detail-item.json",
74
+ "item-descriptors/vulnerability-detail-item.json",
75
+ "item-descriptors/variabilities-group-detail-item.json",
76
+ ],
77
+ },
78
+ ];
79
+ export const MEMORIX_RETRIEVAL_SEED_APP_ID = MEMORIX_APP_ID;
80
+ export function listExpectedMemorixRetrievalSeedItemIds() {
81
+ return MEMORIX_RETRIEVAL_SEED_CATALOGS.map((spec) => ({
82
+ catalogId: spec.catalogId,
83
+ itemIds: spec.inputFiles.map((file) => {
84
+ const base = file.split("/").pop() ?? file;
85
+ return base.replace(/\.json$/i, "");
86
+ }),
87
+ }));
88
+ }
89
+ //# sourceMappingURL=default-seed-spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-seed-spec.js","sourceRoot":"","sources":["../../src/seeds/default-seed-spec.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ import type { MemorixRetrievalSeedManifest, MemorixSeedScope } from "./seed-types.js";
2
+ /**
3
+ * Catalox seed apply upserts `row.data` only; merge scope into data for native items.
4
+ */
5
+ export declare function mergeSeedItemScopeIntoUpsertData(data: Record<string, unknown>, scope: MemorixSeedScope | undefined): Record<string, unknown>;
6
+ export declare function prepareSeedManifestItemForApply(item: {
7
+ catalogId: string;
8
+ data: Record<string, unknown>;
9
+ scope?: MemorixSeedScope;
10
+ }): {
11
+ catalogId: string;
12
+ data: Record<string, unknown>;
13
+ };
14
+ export declare function prepareMemorixRetrievalSeedManifestForApply(manifest: MemorixRetrievalSeedManifest): MemorixRetrievalSeedManifest;
15
+ /** Shape expected by {@link applyCataloxSeedPreset} after scope merge into item data. */
16
+ export declare function prepareMemorixRetrievalSeedManifestForCataloxApply(manifest: Omit<MemorixRetrievalSeedManifest, "items"> & {
17
+ items: Array<{
18
+ catalogId: string;
19
+ data: Record<string, unknown>;
20
+ scope?: MemorixSeedScope;
21
+ }>;
22
+ }): Omit<MemorixRetrievalSeedManifest, "items"> & {
23
+ items: Array<{
24
+ catalogId: string;
25
+ data: Record<string, unknown>;
26
+ }>;
27
+ };
28
+ //# sourceMappingURL=merge-for-apply.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-for-apply.d.ts","sourceRoot":"","sources":["../../src/seeds/merge-for-apply.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,4BAA4B,EAE5B,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AAEzB;;GAEG;AACH,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,EAAE,gBAAgB,GAAG,SAAS,GAClC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAGzB;AAED,wBAAgB,+BAA+B,CAAC,IAAI,EAAE;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAKvD;AAED,wBAAgB,2CAA2C,CACzD,QAAQ,EAAE,4BAA4B,GACrC,4BAA4B,CAQ9B;AAED,yFAAyF;AACzF,wBAAgB,kDAAkD,CAChE,QAAQ,EAAE,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG;IACtD,KAAK,EAAE,KAAK,CAAC;QACX,SAAS,EAAE,MAAM,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,KAAK,CAAC,EAAE,gBAAgB,CAAC;KAC1B,CAAC,CAAC;CACJ,GACA,IAAI,CAAC,4BAA4B,EAAE,OAAO,CAAC,GAAG;IAC/C,KAAK,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CACpE,CAKA"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Catalox seed apply upserts `row.data` only; merge scope into data for native items.
3
+ */
4
+ export function mergeSeedItemScopeIntoUpsertData(data, scope) {
5
+ if (scope == null)
6
+ return data;
7
+ return { ...data, scope };
8
+ }
9
+ export function prepareSeedManifestItemForApply(item) {
10
+ return {
11
+ catalogId: item.catalogId,
12
+ data: mergeSeedItemScopeIntoUpsertData(item.data, item.scope),
13
+ };
14
+ }
15
+ export function prepareMemorixRetrievalSeedManifestForApply(manifest) {
16
+ return {
17
+ ...manifest,
18
+ items: manifest.items.map((item) => ({
19
+ ...item,
20
+ data: mergeSeedItemScopeIntoUpsertData(item.data, item.scope),
21
+ })),
22
+ };
23
+ }
24
+ /** Shape expected by {@link applyCataloxSeedPreset} after scope merge into item data. */
25
+ export function prepareMemorixRetrievalSeedManifestForCataloxApply(manifest) {
26
+ return {
27
+ ...manifest,
28
+ items: manifest.items.map(prepareSeedManifestItemForApply),
29
+ };
30
+ }
31
+ //# sourceMappingURL=merge-for-apply.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-for-apply.js","sourceRoot":"","sources":["../../src/seeds/merge-for-apply.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,IAA6B,EAC7B,KAAmC;IAEnC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,IAI/C;IACC,OAAO;QACL,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,IAAI,EAAE,gCAAgC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;KAC9D,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2CAA2C,CACzD,QAAsC;IAEtC,OAAO;QACL,GAAG,QAAQ;QACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACnC,GAAG,IAAI;YACP,IAAI,EAAE,gCAAgC,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;SAC9D,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,yFAAyF;AACzF,MAAM,UAAU,kDAAkD,CAChE,QAMC;IAID,OAAO;QACL,GAAG,QAAQ;QACX,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,+BAA+B,CAAC;KAC3D,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { MemorixRetrievalSeedManifest } from "./seed-types.js";
2
+ /** Package root (memorix-retrieval/) when running from compiled `dist/seeds/`. */
3
+ export declare function resolveMemorixRetrievalPackageRoot(): string;
4
+ export declare function resolveMemorixRetrievalSeedInputsDir(packageRoot?: string): string;
5
+ export declare function resolveMemorixRetrievalSeedManifestPath(packageRoot?: string): string;
6
+ export declare function createSeedInputsReader(inputsDir: string): (relativePath: string) => Promise<Record<string, unknown>>;
7
+ export declare function loadMemorixRetrievalSeedScopeFromInputs(inputsDir?: string): Promise<import("./seed-types.js").MemorixSeedScope>;
8
+ export declare function buildMemorixRetrievalSeedManifestFromInputs(inputsDir?: string): Promise<MemorixRetrievalSeedManifest>;
9
+ export declare function writeMemorixRetrievalSeedManifest(manifest: MemorixRetrievalSeedManifest, manifestPath?: string): Promise<void>;
10
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/seeds/paths.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,4BAA4B,EAAE,MAAM,iBAAiB,CAAC;AAIpE,kFAAkF;AAClF,wBAAgB,kCAAkC,IAAI,MAAM,CAE3D;AAED,wBAAgB,oCAAoC,CAClD,WAAW,SAAuC,GACjD,MAAM,CAER;AAED,wBAAgB,uCAAuC,CACrD,WAAW,SAAuC,GACjD,MAAM,CAMR;AAED,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,MAAM,IACxC,cAAc,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAItE;AAED,wBAAsB,uCAAuC,CAC3D,SAAS,SAAyC,GACjD,OAAO,CAAC,OAAO,iBAAiB,EAAE,gBAAgB,CAAC,CAUrD;AAED,wBAAsB,2CAA2C,CAC/D,SAAS,SAAyC,GACjD,OAAO,CAAC,4BAA4B,CAAC,CAIvC;AAED,wBAAsB,iCAAiC,CACrD,QAAQ,EAAE,4BAA4B,EACtC,YAAY,SAA4C,GACvD,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -0,0 +1,40 @@
1
+ import { readFile, writeFile } from "node:fs/promises";
2
+ import { dirname, join } from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { buildMemorixRetrievalSeedManifest } from "./build-manifest.js";
5
+ const moduleDir = dirname(fileURLToPath(import.meta.url));
6
+ /** Package root (memorix-retrieval/) when running from compiled `dist/seeds/`. */
7
+ export function resolveMemorixRetrievalPackageRoot() {
8
+ return join(moduleDir, "..", "..");
9
+ }
10
+ export function resolveMemorixRetrievalSeedInputsDir(packageRoot = resolveMemorixRetrievalPackageRoot()) {
11
+ return join(packageRoot, "catalox-seeds", "inputs");
12
+ }
13
+ export function resolveMemorixRetrievalSeedManifestPath(packageRoot = resolveMemorixRetrievalPackageRoot()) {
14
+ return join(packageRoot, "catalox-seeds", "memorix-retrieval-descriptors.manifest.json");
15
+ }
16
+ export function createSeedInputsReader(inputsDir) {
17
+ return async (relativePath) => {
18
+ const raw = await readFile(join(inputsDir, relativePath), "utf8");
19
+ return JSON.parse(raw);
20
+ };
21
+ }
22
+ export async function loadMemorixRetrievalSeedScopeFromInputs(inputsDir = resolveMemorixRetrievalSeedInputsDir()) {
23
+ try {
24
+ const raw = await readFile(join(inputsDir, "scope.json"), "utf8");
25
+ return JSON.parse(raw);
26
+ }
27
+ catch {
28
+ const { MEMORIX_RETRIEVAL_DEFAULT_SCOPE } = await import("./default-seed-spec.js");
29
+ return MEMORIX_RETRIEVAL_DEFAULT_SCOPE;
30
+ }
31
+ }
32
+ export async function buildMemorixRetrievalSeedManifestFromInputs(inputsDir = resolveMemorixRetrievalSeedInputsDir()) {
33
+ const readJson = createSeedInputsReader(inputsDir);
34
+ const scope = await loadMemorixRetrievalSeedScopeFromInputs(inputsDir);
35
+ return buildMemorixRetrievalSeedManifest({ readJson, scope });
36
+ }
37
+ export async function writeMemorixRetrievalSeedManifest(manifest, manifestPath = resolveMemorixRetrievalSeedManifestPath()) {
38
+ await writeFile(manifestPath, `${JSON.stringify(manifest, null, 2)}\n`, "utf8");
39
+ }
40
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/seeds/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,iCAAiC,EAAE,MAAM,qBAAqB,CAAC;AAGxE,MAAM,SAAS,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAE1D,kFAAkF;AAClF,MAAM,UAAU,kCAAkC;IAChD,OAAO,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,oCAAoC,CAClD,WAAW,GAAG,kCAAkC,EAAE;IAElD,OAAO,IAAI,CAAC,WAAW,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,uCAAuC,CACrD,WAAW,GAAG,kCAAkC,EAAE;IAElD,OAAO,IAAI,CACT,WAAW,EACX,eAAe,EACf,6CAA6C,CAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,OAAO,KAAK,EAAE,YAAoB,EAAoC,EAAE;QACtE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IACpD,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,uCAAuC,CAC3D,SAAS,GAAG,oCAAoC,EAAE;IAElD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,EAAE,MAAM,CAAC,CAAC;QAClE,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,EAAE,+BAA+B,EAAE,GAAG,MAAM,MAAM,CACtD,wBAAwB,CACzB,CAAC;QACF,OAAO,+BAA+B,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2CAA2C,CAC/D,SAAS,GAAG,oCAAoC,EAAE;IAElD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAC;IACnD,MAAM,KAAK,GAAG,MAAM,uCAAuC,CAAC,SAAS,CAAC,CAAC;IACvE,OAAO,iCAAiC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,iCAAiC,CACrD,QAAsC,EACtC,YAAY,GAAG,uCAAuC,EAAE;IAExD,MAAM,SAAS,CAAC,YAAY,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAClF,CAAC"}
@@ -0,0 +1,57 @@
1
+ export type MemorixSeedScope = {
2
+ domains: string[];
3
+ agents: string[];
4
+ };
5
+ export type MemorixSeedCatalogSpec = {
6
+ catalogId: string;
7
+ name: string;
8
+ catalogType: "memorix";
9
+ sourceMode: "native";
10
+ native: {
11
+ itemIdField: string;
12
+ titleField: string;
13
+ };
14
+ descriptor: {
15
+ itemIdField: string;
16
+ titleField: string;
17
+ queryableFields: Array<{
18
+ key: string;
19
+ label: string;
20
+ }>;
21
+ };
22
+ inputFiles: string[];
23
+ };
24
+ export type MemorixRetrievalSeedManifestItem = {
25
+ catalogId: string;
26
+ scope: MemorixSeedScope;
27
+ data: Record<string, unknown>;
28
+ };
29
+ export type MemorixRetrievalSeedManifest = {
30
+ presetVersion: 1;
31
+ id: string;
32
+ name: string;
33
+ description: string;
34
+ catalogs: Array<Omit<MemorixSeedCatalogSpec, "descriptor" | "inputFiles">>;
35
+ descriptors: unknown[];
36
+ bindings: Array<{
37
+ appId: string;
38
+ catalogId: string;
39
+ access: {
40
+ canRead: boolean;
41
+ canWrite: boolean;
42
+ };
43
+ }>;
44
+ items: MemorixRetrievalSeedManifestItem[];
45
+ };
46
+ export type MemorixRetrievalSeedCatalogPresence = {
47
+ catalogId: string;
48
+ expectedItemIds: string[];
49
+ presentItemIds: string[];
50
+ missingItemIds: string[];
51
+ };
52
+ export type MemorixRetrievalSeedCheckResult = {
53
+ needed: boolean;
54
+ reason?: string;
55
+ catalogs: MemorixRetrievalSeedCatalogPresence[];
56
+ };
57
+ //# sourceMappingURL=seed-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-types.d.ts","sourceRoot":"","sources":["../../src/seeds/seed-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,SAAS,CAAC;IACvB,UAAU,EAAE,QAAQ,CAAC;IACrB,MAAM,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IACpD,UAAU,EAAE;QACV,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,KAAK,CAAC;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACxD,CAAC;IACF,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,gBAAgB,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG;IACzC,aAAa,EAAE,CAAC,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,EAAE,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC;IAC3E,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,QAAQ,EAAE,KAAK,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE;YAAE,OAAO,EAAE,OAAO,CAAC;YAAC,QAAQ,EAAE,OAAO,CAAA;SAAE,CAAC;KACjD,CAAC,CAAC;IACH,KAAK,EAAE,gCAAgC,EAAE,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,mCAAmC,GAAG;IAChD,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,mCAAmC,EAAE,CAAC;CACjD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=seed-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-types.js","sourceRoot":"","sources":["../../src/seeds/seed-types.ts"],"names":[],"mappings":""}
@@ -7,6 +7,21 @@ describe("descriptor validation", () => {
7
7
  const d = validateMemorixEntityDescriptor(assetsEntity);
8
8
  expect(d.id).toBe("assets");
9
9
  });
10
+ it("requires default list and item descriptor ids", () => {
11
+ expect(() => validateMemorixEntityDescriptor({
12
+ ...assetsEntity,
13
+ defaultListDescriptorId: "",
14
+ })).toThrow(MemorixRetrievalError);
15
+ });
16
+ it("requires exactly one isCanonical content type", () => {
17
+ expect(() => validateMemorixEntityDescriptor({
18
+ ...assetsEntity,
19
+ contentTypes: {
20
+ ...assetsEntity.contentTypes,
21
+ extra: { postfix: "extra", isCanonical: true },
22
+ },
23
+ })).toThrow(MemorixRetrievalError);
24
+ });
10
25
  it("rejects non-human-readable list fields", () => {
11
26
  const badList = {
12
27
  ...assetsMainList,
@@ -1 +1 @@
1
- {"version":3,"file":"descriptor-validation.test.js","sourceRoot":"","sources":["../../src/tests/descriptor-validation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE7D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,+BAA+B,CACvC,YAAkD,CACnD,CAAC;QACF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG;YACd,GAAG,cAAc;YACjB,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;SAClC,CAAC;QACF,MAAM,MAAM,GAAG;YACb,GAAG,YAAY;YACf,UAAU,EAAE;gBACV,GAAG,YAAY,CAAC,UAAU;gBAC1B,QAAQ,EAAE,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE;aACxE;SACF,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CACV,6BAA6B,CAAC,OAAO,EAAE,MAAM,CAAC,CAC/C,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"descriptor-validation.test.js","sourceRoot":"","sources":["../../src/tests/descriptor-validation.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EACL,6BAA6B,EAC7B,+BAA+B,GAChC,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE7D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,iCAAiC,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,GAAG,+BAA+B,CACvC,YAAkD,CACnD,CAAC;QACF,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,EAAE,CACV,+BAA+B,CAAC;YAC9B,GAAI,YAAmD;YACvD,uBAAuB,EAAE,EAAE;SAC5B,CAAC,CACH,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,EAAE,CACV,+BAA+B,CAAC;YAC9B,GAAI,YAAmD;YACvD,YAAY,EAAE;gBACZ,GAAI,YAAY,CAAC,YAAwC;gBACzD,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE;aAC/C;SACF,CAAC,CACH,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,OAAO,GAAG;YACd,GAAG,cAAc;YACjB,MAAM,EAAE,CAAC,WAAW,EAAE,UAAU,CAAC;SAClC,CAAC;QACF,MAAM,MAAM,GAAG;YACb,GAAG,YAAY;YACf,UAAU,EAAE;gBACV,GAAG,YAAY,CAAC,UAAU;gBAC1B,QAAQ,EAAE,EAAE,GAAG,YAAY,CAAC,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,KAAK,EAAE;aACxE;SACF,CAAC;QACF,MAAM,CAAC,GAAG,EAAE,CACV,6BAA6B,CAAC,OAAO,EAAE,MAAM,CAAC,CAC/C,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACnC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/tests/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,YAAY,EAAE,uBAuF1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,qBAmB5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,qBA2B7B,CAAC"}
1
+ {"version":3,"file":"fixtures.d.ts","sourceRoot":"","sources":["../../src/tests/fixtures.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,uBAAuB,EACvB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,oCAAoC,CAAC;AAE5C,eAAO,MAAM,YAAY,EAAE,uBAyF1B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,qBAmB5B,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,qBA2B7B,CAAC"}
@@ -1,6 +1,8 @@
1
1
  export const assetsEntity = {
2
2
  id: "assets",
3
3
  entityName: "assets",
4
+ defaultListDescriptorId: "assets-main-list",
5
+ defaultItemDescriptorId: "asset-detail-item",
4
6
  target: "entity",
5
7
  collectionPrefix: "assets",
6
8
  identity: {
@@ -1 +1 @@
1
- {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/tests/fixtures.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fixtures.js","sourceRoot":"","sources":["../../src/tests/fixtures.ts"],"names":[],"mappings":"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"}
@@ -26,12 +26,15 @@ describe("relations", () => {
26
26
  ...entityWithRelation,
27
27
  id: "users",
28
28
  entityName: "users",
29
+ defaultListDescriptorId: "users-main-list",
30
+ defaultItemDescriptorId: "user-detail-item",
29
31
  collectionPrefix: "users",
30
32
  contentTypes: {
31
33
  snapshots: {
32
34
  postfix: "snapshots",
33
35
  collection: "users-snapshots",
34
36
  dataRoot: "data",
37
+ isCanonical: true,
35
38
  },
36
39
  },
37
40
  properties: {},
@@ -1 +1 @@
1
- {"version":3,"file":"relations.test.js","sourceRoot":"","sources":["../../src/tests/relations.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"relations.test.js","sourceRoot":"","sources":["../../src/tests/relations.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolve-app-id.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-app-id.test.d.ts","sourceRoot":"","sources":["../../src/tests/resolve-app-id.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { resolveMemorixAppId } from "../descriptors/resolve-app-id.js";
3
+ import { MEMORIX_APP_ID } from "../descriptors/catalog-ids.js";
4
+ describe("resolveMemorixAppId", () => {
5
+ it("prefers explicit option", () => {
6
+ expect(resolveMemorixAppId({ appId: "custom" }, {})).toBe("custom");
7
+ });
8
+ it("reads CATALOX_APP_ID then MEMORIX_APP_ID", () => {
9
+ expect(resolveMemorixAppId(undefined, {
10
+ CATALOX_APP_ID: "from-catalox",
11
+ MEMORIX_APP_ID: "from-memorix",
12
+ })).toBe("from-catalox");
13
+ expect(resolveMemorixAppId(undefined, { MEMORIX_APP_ID: "from-memorix" })).toBe("from-memorix");
14
+ });
15
+ it("defaults to memorix", () => {
16
+ expect(resolveMemorixAppId(undefined, {})).toBe(MEMORIX_APP_ID);
17
+ });
18
+ });
19
+ //# sourceMappingURL=resolve-app-id.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-app-id.test.js","sourceRoot":"","sources":["../../src/tests/resolve-app-id.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACjC,MAAM,CAAC,mBAAmB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0CAA0C,EAAE,GAAG,EAAE;QAClD,MAAM,CACJ,mBAAmB,CAAC,SAAS,EAAE;YAC7B,cAAc,EAAE,cAAc;YAC9B,cAAc,EAAE,cAAc;SAC/B,CAAC,CACH,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACvB,MAAM,CACJ,mBAAmB,CAAC,SAAS,EAAE,EAAE,cAAc,EAAE,cAAc,EAAE,CAAC,CACnE,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC7B,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=resolve-filters.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-filters.test.d.ts","sourceRoot":"","sources":["../../src/tests/resolve-filters.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,47 @@
1
+ import { describe, expect, it } from "vitest";
2
+ import { mergeListDescriptorFilters, resolveMemorixFilters, } from "../retrieval/resolve-filters.js";
3
+ import { assetsEntity } from "./fixtures.js";
4
+ describe("resolveMemorixFilters", () => {
5
+ it("applies list descriptor default filters when request has none", () => {
6
+ const list = {
7
+ id: "filtered-assets-list",
8
+ entity: "assets",
9
+ leadingContentType: "snapshots",
10
+ pagination: { enabled: true, defaultLimit: 50, maxLimit: 200 },
11
+ filters: [
12
+ { property: "ipAddress", operator: "eq", value: "10.0.0.1" },
13
+ ],
14
+ fields: ["ipAddress"],
15
+ };
16
+ const query = resolveMemorixFilters(assetsEntity, list, undefined, "snapshots");
17
+ expect(query).toEqual({ "data.ip_address": "10.0.0.1" });
18
+ });
19
+ it("merges request filters over list defaults on the same property", () => {
20
+ const list = {
21
+ id: "critical-vulnerabilities-list",
22
+ entity: "assets",
23
+ leadingContentType: "snapshots",
24
+ pagination: { enabled: true, defaultLimit: 50, maxLimit: 200 },
25
+ filters: [
26
+ { property: "ipAddress", operator: "eq", value: "10.0.0.1" },
27
+ ],
28
+ fields: ["ipAddress"],
29
+ };
30
+ const query = resolveMemorixFilters(assetsEntity, list, [{ property: "ipAddress", operator: "eq", value: "10.0.0.2" }], "snapshots");
31
+ expect(query).toEqual({ "data.ip_address": "10.0.0.2" });
32
+ });
33
+ it("mergeListDescriptorFilters keeps allowlist-only entries out of defaults", () => {
34
+ const merged = mergeListDescriptorFilters({
35
+ id: "x",
36
+ entity: "assets",
37
+ leadingContentType: "snapshots",
38
+ pagination: { enabled: true, defaultLimit: 50, maxLimit: 200 },
39
+ filters: [{ property: "ipAddress" }],
40
+ fields: ["ipAddress"],
41
+ }, [{ property: "ipAddress", operator: "eq", value: "1.2.3.4" }]);
42
+ expect(merged).toEqual([
43
+ { property: "ipAddress", operator: "eq", value: "1.2.3.4" },
44
+ ]);
45
+ });
46
+ });
47
+ //# sourceMappingURL=resolve-filters.test.js.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=seed-check.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"seed-check.test.d.ts","sourceRoot":"","sources":["../../src/tests/seed-check.test.ts"],"names":[],"mappings":""}