@x12i/memorix-insights 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +40 -0
  2. package/dist/core/api-processor.d.ts +12 -0
  3. package/dist/core/api-processor.d.ts.map +1 -0
  4. package/dist/core/api-processor.js +65 -0
  5. package/dist/core/api-processor.js.map +1 -0
  6. package/dist/core/insight-engine.d.ts +5 -0
  7. package/dist/core/insight-engine.d.ts.map +1 -0
  8. package/dist/core/insight-engine.js +60 -0
  9. package/dist/core/insight-engine.js.map +1 -0
  10. package/dist/core/registry.d.ts +12 -0
  11. package/dist/core/registry.d.ts.map +1 -0
  12. package/dist/core/registry.js +36 -0
  13. package/dist/core/registry.js.map +1 -0
  14. package/dist/core/types.d.ts +65 -0
  15. package/dist/core/types.d.ts.map +1 -0
  16. package/dist/core/types.js +2 -0
  17. package/dist/core/types.js.map +1 -0
  18. package/dist/domain/network/cidr-topology-analyzer.d.ts +36 -0
  19. package/dist/domain/network/cidr-topology-analyzer.d.ts.map +1 -0
  20. package/dist/domain/network/cidr-topology-analyzer.js +172 -0
  21. package/dist/domain/network/cidr-topology-analyzer.js.map +1 -0
  22. package/dist/domain/network/cidr-zone-insight-rules.d.ts +26 -0
  23. package/dist/domain/network/cidr-zone-insight-rules.d.ts.map +1 -0
  24. package/dist/domain/network/cidr-zone-insight-rules.js +90 -0
  25. package/dist/domain/network/cidr-zone-insight-rules.js.map +1 -0
  26. package/dist/index.d.ts +11 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +8 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/processors/builtins.d.ts +6 -0
  31. package/dist/processors/builtins.d.ts.map +1 -0
  32. package/dist/processors/builtins.js +8 -0
  33. package/dist/processors/builtins.js.map +1 -0
  34. package/dist/processors/network/cidr-topology-path-resolver.d.ts +3 -0
  35. package/dist/processors/network/cidr-topology-path-resolver.d.ts.map +1 -0
  36. package/dist/processors/network/cidr-topology-path-resolver.js +76 -0
  37. package/dist/processors/network/cidr-topology-path-resolver.js.map +1 -0
  38. package/dist/processors/network/cidr-zone-path-insight-processor.d.ts +3 -0
  39. package/dist/processors/network/cidr-zone-path-insight-processor.d.ts.map +1 -0
  40. package/dist/processors/network/cidr-zone-path-insight-processor.js +40 -0
  41. package/dist/processors/network/cidr-zone-path-insight-processor.js.map +1 -0
  42. package/package.json +50 -0
package/README.md ADDED
@@ -0,0 +1,40 @@
1
+ # @x12i/memorix-insights
2
+
3
+ Pluggable insight processors for Memorix. The platform runs processors generically by `processorId`; implementations may be local functions or HTTP APIs.
4
+
5
+ ## Concepts
6
+
7
+ - **Stage**: a processor with `inputKind` and `outputKind` (e.g. `cidr` → `cidr-path-facts` → `insights`).
8
+ - **Engine**: `runInsightProcessor` for one stage, `runInsightPipeline` for ordered stages.
9
+ - **Custom processors**: register via `InsightProcessorRegistry`; CIDR network processors ship as builtins.
10
+
11
+ ## CIDR example
12
+
13
+ ```ts
14
+ import {
15
+ createInsightProcessorRegistry,
16
+ runInsightPipeline,
17
+ builtinInsightProcessors,
18
+ } from "@x12i/memorix-insights";
19
+
20
+ const registry = createInsightProcessorRegistry(builtinInsightProcessors);
21
+
22
+ const result = await runInsightPipeline(registry, {
23
+ input: "10.150.68.0/24",
24
+ stages: [
25
+ {
26
+ processorId: "network.cidr-topology-path-resolver",
27
+ sources: {
28
+ topologyDb: "memorix-knowledge",
29
+ topologyCollection: "topology-raw",
30
+ },
31
+ },
32
+ {
33
+ processorId: "network.cidr-zone-path-insights",
34
+ sources: { zonesCollection: "topology-zones-snapshots" },
35
+ },
36
+ ],
37
+ });
38
+ ```
39
+
40
+ Topology resolution (`network.cidr-topology-path-resolver`) emits structural facts only. Zone insight generation (`network.cidr-zone-path-insights`) applies zone flags and emits judgment insights.
@@ -0,0 +1,12 @@
1
+ import type { InsightProcessorDefinition } from "./types.js";
2
+ export type ApiInsightProcessorConfig = {
3
+ url: string;
4
+ method?: "POST" | "PUT";
5
+ headers?: Record<string, string>;
6
+ timeoutMs?: number;
7
+ };
8
+ /**
9
+ * Wraps a remote HTTP insight processor behind the same platform contract as local functions.
10
+ */
11
+ export declare function createApiInsightProcessorDefinition(processorId: string, inputKind: string, outputKind: string, apiConfig: ApiInsightProcessorConfig): InsightProcessorDefinition;
12
+ //# sourceMappingURL=api-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-processor.d.ts","sourceRoot":"","sources":["../../src/core/api-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,0BAA0B,EAG3B,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,yBAAyB,GAAG;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,wBAAgB,mCAAmC,CACjD,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,yBAAyB,GACnC,0BAA0B,CAiE5B"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Wraps a remote HTTP insight processor behind the same platform contract as local functions.
3
+ */
4
+ export function createApiInsightProcessorDefinition(processorId, inputKind, outputKind, apiConfig) {
5
+ return {
6
+ processorId,
7
+ inputKind,
8
+ outputKind,
9
+ create(_context) {
10
+ return {
11
+ async process(input) {
12
+ const controller = new AbortController();
13
+ const timeout = setTimeout(() => controller.abort(), apiConfig.timeoutMs ?? 30_000);
14
+ try {
15
+ const response = await fetch(apiConfig.url, {
16
+ method: apiConfig.method ?? "POST",
17
+ headers: {
18
+ "content-type": "application/json",
19
+ ...apiConfig.headers,
20
+ },
21
+ body: JSON.stringify({
22
+ processorId,
23
+ input: input.input,
24
+ config: input.config,
25
+ sources: input.sources,
26
+ }),
27
+ signal: controller.signal,
28
+ });
29
+ if (!response.ok) {
30
+ return {
31
+ processorId,
32
+ inputKind,
33
+ outputKind,
34
+ resolved: false,
35
+ data: null,
36
+ diagnostics: [
37
+ {
38
+ level: "error",
39
+ code: "API_PROCESSOR_FAILED",
40
+ message: `API processor ${processorId} returned HTTP ${response.status}`,
41
+ },
42
+ ],
43
+ };
44
+ }
45
+ const payload = (await response.json());
46
+ return {
47
+ processorId,
48
+ inputKind,
49
+ outputKind,
50
+ resolved: payload.resolved !== false,
51
+ data: payload.data ?? payload,
52
+ diagnostics: Array.isArray(payload.diagnostics)
53
+ ? payload.diagnostics
54
+ : [],
55
+ };
56
+ }
57
+ finally {
58
+ clearTimeout(timeout);
59
+ }
60
+ },
61
+ };
62
+ },
63
+ };
64
+ }
65
+ //# sourceMappingURL=api-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-processor.js","sourceRoot":"","sources":["../../src/core/api-processor.ts"],"names":[],"mappings":"AAcA;;GAEG;AACH,MAAM,UAAU,mCAAmC,CACjD,WAAmB,EACnB,SAAiB,EACjB,UAAkB,EAClB,SAAoC;IAEpC,OAAO;QACL,WAAW;QACX,SAAS;QACT,UAAU;QACV,MAAM,CAAC,QAAiC;YACtC,OAAO;gBACL,KAAK,CAAC,OAAO,CAAC,KAA4B;oBACxC,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;oBACzC,MAAM,OAAO,GAAG,UAAU,CACxB,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EACxB,SAAS,CAAC,SAAS,IAAI,MAAM,CAC9B,CAAC;oBAEF,IAAI,CAAC;wBACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;4BAC1C,MAAM,EAAE,SAAS,CAAC,MAAM,IAAI,MAAM;4BAClC,OAAO,EAAE;gCACP,cAAc,EAAE,kBAAkB;gCAClC,GAAG,SAAS,CAAC,OAAO;6BACrB;4BACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gCACnB,WAAW;gCACX,KAAK,EAAE,KAAK,CAAC,KAAK;gCAClB,MAAM,EAAE,KAAK,CAAC,MAAM;gCACpB,OAAO,EAAE,KAAK,CAAC,OAAO;6BACvB,CAAC;4BACF,MAAM,EAAE,UAAU,CAAC,MAAM;yBAC1B,CAAC,CAAC;wBAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;4BACjB,OAAO;gCACL,WAAW;gCACX,SAAS;gCACT,UAAU;gCACV,QAAQ,EAAE,KAAK;gCACf,IAAI,EAAE,IAAI;gCACV,WAAW,EAAE;oCACX;wCACE,KAAK,EAAE,OAAO;wCACd,IAAI,EAAE,sBAAsB;wCAC5B,OAAO,EAAE,iBAAiB,WAAW,kBAAkB,QAAQ,CAAC,MAAM,EAAE;qCACzE;iCACF;6BACF,CAAC;wBACJ,CAAC;wBAED,MAAM,OAAO,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;wBACnE,OAAO;4BACL,WAAW;4BACX,SAAS;4BACT,UAAU;4BACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,KAAK,KAAK;4BACpC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,OAAO;4BAC7B,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC;gCAC7C,CAAC,CAAE,OAAO,CAAC,WAAqD;gCAChE,CAAC,CAAC,EAAE;yBACP,CAAC;oBACJ,CAAC;4BAAS,CAAC;wBACT,YAAY,CAAC,OAAO,CAAC,CAAC;oBACxB,CAAC;gBACH,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { InsightProcessorRegistry } from "./registry.js";
2
+ import type { InsightProcessorResult, RunInsightPipelineOptions, RunInsightPipelineResult, RunInsightProcessorOptions } from "./types.js";
3
+ export declare function runInsightProcessor(registry: InsightProcessorRegistry, options: RunInsightProcessorOptions): Promise<InsightProcessorResult>;
4
+ export declare function runInsightPipeline(registry: InsightProcessorRegistry, options: RunInsightPipelineOptions): Promise<RunInsightPipelineResult>;
5
+ //# sourceMappingURL=insight-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-engine.d.ts","sourceRoot":"","sources":["../../src/core/insight-engine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,KAAK,EAGV,sBAAsB,EACtB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AAsBpB,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,wBAAwB,EAClC,OAAO,EAAE,0BAA0B,GAClC,OAAO,CAAC,sBAAsB,CAAC,CAkBjC;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,wBAAwB,EAClC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAgCnC"}
@@ -0,0 +1,60 @@
1
+ function validateStageChain(registry, stages) {
2
+ let expectedInputKind = null;
3
+ for (let i = 0; i < stages.length; i += 1) {
4
+ const stage = stages[i];
5
+ const definition = registry.get(stage.processorId);
6
+ if (!definition) {
7
+ throw new Error(`Unknown insight processor: ${stage.processorId}`);
8
+ }
9
+ if (expectedInputKind !== null && definition.inputKind !== expectedInputKind) {
10
+ throw new Error(`Stage ${i} (${stage.processorId}) expects inputKind ${definition.inputKind}, but previous stage produced ${expectedInputKind}`);
11
+ }
12
+ expectedInputKind = definition.outputKind;
13
+ }
14
+ }
15
+ export async function runInsightProcessor(registry, options) {
16
+ const definition = registry.get(options.processorId);
17
+ if (!definition) {
18
+ throw new Error(`Unknown insight processor: ${options.processorId}`);
19
+ }
20
+ const context = {
21
+ processorId: options.processorId,
22
+ stageIndex: 0,
23
+ loadSource: options.context?.loadSource,
24
+ };
25
+ const processor = registry.create(options.processorId, context);
26
+ return processor.process({
27
+ input: options.input,
28
+ config: options.config,
29
+ sources: options.sources,
30
+ });
31
+ }
32
+ export async function runInsightPipeline(registry, options) {
33
+ validateStageChain(registry, options.stages);
34
+ const stageResults = [];
35
+ const diagnostics = [];
36
+ let currentInput = options.input;
37
+ for (let stageIndex = 0; stageIndex < options.stages.length; stageIndex += 1) {
38
+ const stage = options.stages[stageIndex];
39
+ const context = {
40
+ processorId: stage.processorId,
41
+ stageIndex,
42
+ loadSource: options.context?.loadSource,
43
+ };
44
+ const processor = registry.create(stage.processorId, context);
45
+ const result = await processor.process({
46
+ input: currentInput,
47
+ config: stage.config,
48
+ sources: stage.sources,
49
+ });
50
+ stageResults.push(result);
51
+ diagnostics.push(...result.diagnostics);
52
+ currentInput = result.data;
53
+ }
54
+ return {
55
+ stages: stageResults,
56
+ final: stageResults.length > 0 ? stageResults[stageResults.length - 1] : null,
57
+ diagnostics,
58
+ };
59
+ }
60
+ //# sourceMappingURL=insight-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insight-engine.js","sourceRoot":"","sources":["../../src/core/insight-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { InsightProcessorDefinition } from "./types.js";
2
+ export declare class InsightProcessorRegistry {
3
+ private readonly definitions;
4
+ register(definition: InsightProcessorDefinition): this;
5
+ registerMany(definitions: InsightProcessorDefinition[]): this;
6
+ has(processorId: string): boolean;
7
+ get(processorId: string): InsightProcessorDefinition | undefined;
8
+ listProcessorIds(): string[];
9
+ create(processorId: string, context: Parameters<InsightProcessorDefinition["create"]>[0]): import("./types.js").InsightProcessor;
10
+ }
11
+ export declare function createInsightProcessorRegistry(definitions?: InsightProcessorDefinition[]): InsightProcessorRegistry;
12
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AAE7D,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiD;IAE7E,QAAQ,CAAC,UAAU,EAAE,0BAA0B,GAAG,IAAI;IAQtD,YAAY,CAAC,WAAW,EAAE,0BAA0B,EAAE,GAAG,IAAI;IAO7D,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAIjC,GAAG,CAAC,WAAW,EAAE,MAAM,GAAG,0BAA0B,GAAG,SAAS;IAIhE,gBAAgB,IAAI,MAAM,EAAE;IAI5B,MAAM,CACJ,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,UAAU,CAAC,0BAA0B,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;CAQ/D;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,GAAE,0BAA0B,EAAO,GAC7C,wBAAwB,CAE1B"}
@@ -0,0 +1,36 @@
1
+ export class InsightProcessorRegistry {
2
+ definitions = new Map();
3
+ register(definition) {
4
+ if (this.definitions.has(definition.processorId)) {
5
+ throw new Error(`Insight processor already registered: ${definition.processorId}`);
6
+ }
7
+ this.definitions.set(definition.processorId, definition);
8
+ return this;
9
+ }
10
+ registerMany(definitions) {
11
+ for (const definition of definitions) {
12
+ this.register(definition);
13
+ }
14
+ return this;
15
+ }
16
+ has(processorId) {
17
+ return this.definitions.has(processorId);
18
+ }
19
+ get(processorId) {
20
+ return this.definitions.get(processorId);
21
+ }
22
+ listProcessorIds() {
23
+ return [...this.definitions.keys()].sort();
24
+ }
25
+ create(processorId, context) {
26
+ const definition = this.definitions.get(processorId);
27
+ if (!definition) {
28
+ throw new Error(`Unknown insight processor: ${processorId}`);
29
+ }
30
+ return definition.create(context);
31
+ }
32
+ }
33
+ export function createInsightProcessorRegistry(definitions = []) {
34
+ return new InsightProcessorRegistry().registerMany(definitions);
35
+ }
36
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/core/registry.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,wBAAwB;IAClB,WAAW,GAAG,IAAI,GAAG,EAAsC,CAAC;IAE7E,QAAQ,CAAC,UAAsC;QAC7C,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,KAAK,CAAC,yCAAyC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QACrF,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,YAAY,CAAC,WAAyC;QACpD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,WAAmB;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,GAAG,CAAC,WAAmB;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3C,CAAC;IAED,gBAAgB;QACd,OAAO,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7C,CAAC;IAED,MAAM,CACJ,WAAmB,EACnB,OAA4D;QAE5D,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,WAAW,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;CACF;AAED,MAAM,UAAU,8BAA8B,CAC5C,cAA4C,EAAE;IAE9C,OAAO,IAAI,wBAAwB,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AAClE,CAAC"}
@@ -0,0 +1,65 @@
1
+ export type JsonObject = Record<string, unknown>;
2
+ export type InsightDiagnosticLevel = "info" | "warning" | "error";
3
+ export type InsightDiagnostic = {
4
+ level: InsightDiagnosticLevel;
5
+ code: string;
6
+ message: string;
7
+ details?: Record<string, unknown>;
8
+ };
9
+ export type InsightProcessorContext = {
10
+ processorId: string;
11
+ stageIndex: number;
12
+ /** Load external source payloads (e.g. topology-raw collection document). */
13
+ loadSource?: (sourceKey: string, ref: InsightSourceRef) => Promise<unknown>;
14
+ };
15
+ export type InsightSourceRef = {
16
+ db?: string;
17
+ collection?: string;
18
+ recordId?: string;
19
+ path?: string;
20
+ };
21
+ export type InsightProcessorInput = {
22
+ input: unknown;
23
+ config?: Record<string, unknown>;
24
+ sources?: Record<string, unknown>;
25
+ };
26
+ export type InsightProcessorResult = {
27
+ processorId: string;
28
+ inputKind: string;
29
+ outputKind: string;
30
+ resolved: boolean;
31
+ data: unknown;
32
+ diagnostics: InsightDiagnostic[];
33
+ };
34
+ export type InsightProcessor = {
35
+ process(input: InsightProcessorInput): Promise<InsightProcessorResult>;
36
+ };
37
+ export type InsightProcessorDefinition = {
38
+ processorId: string;
39
+ inputKind: string;
40
+ outputKind: string;
41
+ create(context: InsightProcessorContext): InsightProcessor;
42
+ };
43
+ export type InsightPipelineStage = {
44
+ processorId: string;
45
+ config?: Record<string, unknown>;
46
+ sources?: Record<string, unknown>;
47
+ };
48
+ export type RunInsightProcessorOptions = {
49
+ processorId: string;
50
+ input: unknown;
51
+ config?: Record<string, unknown>;
52
+ sources?: Record<string, unknown>;
53
+ context?: Partial<InsightProcessorContext>;
54
+ };
55
+ export type RunInsightPipelineOptions = {
56
+ input: unknown;
57
+ stages: InsightPipelineStage[];
58
+ context?: Partial<InsightProcessorContext>;
59
+ };
60
+ export type RunInsightPipelineResult = {
61
+ stages: InsightProcessorResult[];
62
+ final: InsightProcessorResult | null;
63
+ diagnostics: InsightDiagnostic[];
64
+ };
65
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ export type CidrPathFacts = {
2
+ input: string;
3
+ resolved: boolean;
4
+ matchType: "exact" | "containing" | "none";
5
+ resolvedSegment?: string;
6
+ originZone?: string;
7
+ reachableZones: Array<{
8
+ zoneName: string;
9
+ hopCount: number;
10
+ destinationSegment: string;
11
+ path: string[];
12
+ steps: Array<{
13
+ from: string;
14
+ to: string;
15
+ }>;
16
+ }>;
17
+ unclassifiedReachable: string[];
18
+ reachableSegments: string[];
19
+ };
20
+ export type TopologySegment = {
21
+ id: string;
22
+ cidr?: string;
23
+ zone?: string;
24
+ };
25
+ export type TopologyGraph = {
26
+ segments: TopologySegment[];
27
+ edges: Array<{
28
+ from: string;
29
+ to: string;
30
+ }>;
31
+ };
32
+ export declare function normalizeCidrInput(value: unknown): string | null;
33
+ export declare function segmentIdForCidr(cidr: string): string;
34
+ export declare function parseTopologyGraph(raw: unknown): TopologyGraph | null;
35
+ export declare function resolveCidrPathFacts(graph: TopologyGraph, cidrInput: string): CidrPathFacts;
36
+ //# sourceMappingURL=cidr-topology-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr-topology-analyzer.d.ts","sourceRoot":"","sources":["../../../src/domain/network/cidr-topology-analyzer.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,KAAK,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KAC5C,CAAC,CAAC;IACH,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,iBAAiB,EAAE,MAAM,EAAE,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5C,CAAC;AAEF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAIhE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,GAAG,IAAI,CAgCrE;AAgDD,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,aAAa,EACpB,SAAS,EAAE,MAAM,GAChB,aAAa,CAoFf"}
@@ -0,0 +1,172 @@
1
+ import { parseCidr } from "@x12i/memorix-resolvers";
2
+ export function normalizeCidrInput(value) {
3
+ if (typeof value !== "string")
4
+ return null;
5
+ const trimmed = value.trim();
6
+ return trimmed || null;
7
+ }
8
+ export function segmentIdForCidr(cidr) {
9
+ return `seg:${cidr}`;
10
+ }
11
+ export function parseTopologyGraph(raw) {
12
+ if (!raw || typeof raw !== "object")
13
+ return null;
14
+ const doc = raw;
15
+ const graph = (doc.graph ?? doc.data ?? doc);
16
+ const segmentsRaw = (graph.segments ?? graph.nodes ?? []);
17
+ const edgesRaw = (graph.edges ?? graph.links ?? []);
18
+ const segments = [];
19
+ for (const item of segmentsRaw) {
20
+ if (!item || typeof item !== "object")
21
+ continue;
22
+ const seg = item;
23
+ const id = String(seg.id ?? seg.segmentId ?? seg.key ?? "");
24
+ if (!id)
25
+ continue;
26
+ segments.push({
27
+ id,
28
+ cidr: typeof seg.cidr === "string" ? seg.cidr : undefined,
29
+ zone: typeof seg.zone === "string" ? seg.zone : typeof seg.zoneName === "string" ? seg.zoneName : undefined,
30
+ });
31
+ }
32
+ const edges = [];
33
+ for (const item of edgesRaw) {
34
+ if (!item || typeof item !== "object")
35
+ continue;
36
+ const edge = item;
37
+ const from = String(edge.from ?? edge.source ?? "");
38
+ const to = String(edge.to ?? edge.target ?? "");
39
+ if (from && to)
40
+ edges.push({ from, to });
41
+ }
42
+ if (segments.length === 0)
43
+ return null;
44
+ return { segments, edges };
45
+ }
46
+ function cidrContains(outer, inner) {
47
+ const outerRange = parseCidr(outer);
48
+ const innerRange = parseCidr(inner);
49
+ if (!outerRange || !innerRange)
50
+ return false;
51
+ return innerRange.network >= outerRange.network && innerRange.broadcast <= outerRange.broadcast;
52
+ }
53
+ function resolveSegmentForCidr(graph, cidr) {
54
+ const exact = graph.segments.find((s) => s.cidr === cidr);
55
+ if (exact)
56
+ return { segment: exact, matchType: "exact" };
57
+ let best = null;
58
+ let bestPrefix = -1;
59
+ for (const segment of graph.segments) {
60
+ if (!segment.cidr)
61
+ continue;
62
+ if (!cidrContains(segment.cidr, cidr))
63
+ continue;
64
+ const range = parseCidr(segment.cidr);
65
+ if (!range)
66
+ continue;
67
+ if (range.prefix > bestPrefix) {
68
+ bestPrefix = range.prefix;
69
+ best = segment;
70
+ }
71
+ }
72
+ if (best)
73
+ return { segment: best, matchType: "containing" };
74
+ return null;
75
+ }
76
+ function buildAdjacency(graph) {
77
+ const adj = new Map();
78
+ for (const segment of graph.segments) {
79
+ if (!adj.has(segment.id))
80
+ adj.set(segment.id, []);
81
+ }
82
+ for (const edge of graph.edges) {
83
+ const list = adj.get(edge.from) ?? [];
84
+ list.push(edge.to);
85
+ adj.set(edge.from, list);
86
+ const reverse = adj.get(edge.to) ?? [];
87
+ reverse.push(edge.from);
88
+ adj.set(edge.to, reverse);
89
+ }
90
+ return adj;
91
+ }
92
+ export function resolveCidrPathFacts(graph, cidrInput) {
93
+ const input = normalizeCidrInput(cidrInput);
94
+ if (!input) {
95
+ return {
96
+ input: String(cidrInput),
97
+ resolved: false,
98
+ matchType: "none",
99
+ reachableZones: [],
100
+ unclassifiedReachable: [],
101
+ reachableSegments: [],
102
+ };
103
+ }
104
+ const match = resolveSegmentForCidr(graph, input);
105
+ if (!match) {
106
+ return {
107
+ input,
108
+ resolved: false,
109
+ matchType: "none",
110
+ reachableZones: [],
111
+ unclassifiedReachable: [],
112
+ reachableSegments: [],
113
+ };
114
+ }
115
+ const originId = match.segment.id;
116
+ const originZone = match.segment.zone;
117
+ const adj = buildAdjacency(graph);
118
+ const visited = new Set([originId]);
119
+ const queue = [
120
+ { id: originId, path: [originId], hops: 0 },
121
+ ];
122
+ const reachableByZone = new Map();
123
+ while (queue.length > 0) {
124
+ const current = queue.shift();
125
+ for (const nextId of adj.get(current.id) ?? []) {
126
+ if (visited.has(nextId))
127
+ continue;
128
+ visited.add(nextId);
129
+ const nextPath = [...current.path, nextId];
130
+ const nextHops = current.hops + 1;
131
+ queue.push({ id: nextId, path: nextPath, hops: nextHops });
132
+ const segment = graph.segments.find((s) => s.id === nextId);
133
+ if (!segment?.zone)
134
+ continue;
135
+ const existing = reachableByZone.get(segment.zone);
136
+ if (!existing || nextHops < existing.hopCount) {
137
+ reachableByZone.set(segment.zone, {
138
+ hopCount: nextHops,
139
+ path: nextPath,
140
+ destinationSegment: nextId,
141
+ });
142
+ }
143
+ }
144
+ }
145
+ const reachableZones = [...reachableByZone.entries()].map(([zoneName, info]) => ({
146
+ zoneName,
147
+ hopCount: info.hopCount,
148
+ destinationSegment: info.destinationSegment,
149
+ path: info.path,
150
+ steps: info.path.slice(1).map((id, index) => ({
151
+ from: info.path[index],
152
+ to: id,
153
+ })),
154
+ }));
155
+ const unclassifiedReachable = [...visited]
156
+ .filter((id) => {
157
+ const segment = graph.segments.find((s) => s.id === id);
158
+ return !segment?.zone;
159
+ })
160
+ .filter((id) => id !== originId);
161
+ return {
162
+ input,
163
+ resolved: true,
164
+ matchType: match.matchType,
165
+ resolvedSegment: originId,
166
+ originZone,
167
+ reachableZones,
168
+ unclassifiedReachable,
169
+ reachableSegments: [...visited],
170
+ };
171
+ }
172
+ //# sourceMappingURL=cidr-topology-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr-topology-analyzer.js","sourceRoot":"","sources":["../../../src/domain/network/cidr-topology-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { CidrPathFacts } from "./cidr-topology-analyzer.js";
2
+ export type ZoneRegistryEntry = {
3
+ name: string;
4
+ isOutside?: boolean;
5
+ isInternal?: boolean;
6
+ isDmzOrPortal?: boolean;
7
+ isRemoteAccess?: boolean;
8
+ isPartnerLink?: boolean;
9
+ };
10
+ export type ZoneInsight = {
11
+ insight: string;
12
+ description: string;
13
+ reasoning: string;
14
+ supportingFacts: string[];
15
+ };
16
+ export type ZonePathInsightsResult = {
17
+ processorId: string;
18
+ inputKind: "cidr-path-facts";
19
+ input: CidrPathFacts;
20
+ resolved: boolean;
21
+ insights: ZoneInsight[];
22
+ paths: Record<string, unknown>;
23
+ };
24
+ export declare function parseZoneRegistry(raw: unknown): ZoneRegistryEntry[];
25
+ export declare function generateZonePathInsights(facts: CidrPathFacts, zones: ZoneRegistryEntry[]): ZonePathInsightsResult;
26
+ //# sourceMappingURL=cidr-zone-insight-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr-zone-insight-rules.d.ts","sourceRoot":"","sources":["../../../src/domain/network/cidr-zone-insight-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAEjE,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,iBAAiB,CAAC;IAC7B,KAAK,EAAE,aAAa,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC,CAAC;AAEF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,iBAAiB,EAAE,CAwBnE;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,iBAAiB,EAAE,GACzB,sBAAsB,CAmExB"}
@@ -0,0 +1,90 @@
1
+ export function parseZoneRegistry(raw) {
2
+ if (!raw)
3
+ return [];
4
+ const list = Array.isArray(raw)
5
+ ? raw
6
+ : Array.isArray(raw.zones)
7
+ ? raw.zones
8
+ : [];
9
+ const zones = [];
10
+ for (const item of list) {
11
+ if (!item || typeof item !== "object")
12
+ continue;
13
+ const zone = item;
14
+ const name = typeof zone.name === "string" ? zone.name : typeof zone.zoneName === "string" ? zone.zoneName : null;
15
+ if (!name)
16
+ continue;
17
+ zones.push({
18
+ name,
19
+ isOutside: zone.isOutside === true,
20
+ isInternal: zone.isInternal === true,
21
+ isDmzOrPortal: zone.isDmzOrPortal === true,
22
+ isRemoteAccess: zone.isRemoteAccess === true,
23
+ isPartnerLink: zone.isPartnerLink === true,
24
+ });
25
+ }
26
+ return zones;
27
+ }
28
+ export function generateZonePathInsights(facts, zones) {
29
+ const insights = [];
30
+ const zoneByName = new Map(zones.map((z) => [z.name, z]));
31
+ if (!facts.resolved) {
32
+ return {
33
+ processorId: "network.cidr-zone-path-insights",
34
+ inputKind: "cidr-path-facts",
35
+ input: facts,
36
+ resolved: false,
37
+ insights,
38
+ paths: {},
39
+ };
40
+ }
41
+ for (const reachable of facts.reachableZones) {
42
+ const zone = zoneByName.get(reachable.zoneName);
43
+ if (!zone)
44
+ continue;
45
+ if (zone.isOutside) {
46
+ insights.push({
47
+ insight: "INTERNET_EGRESS_AVAILABLE",
48
+ description: "This network has a routable path to the public network.",
49
+ reasoning: "The structural path reaches a zone flagged isOutside=true.",
50
+ supportingFacts: [`reachable zone "${reachable.zoneName}" has isOutside=true`],
51
+ });
52
+ }
53
+ if (zone.isDmzOrPortal) {
54
+ insights.push({
55
+ insight: "DMZ_REACHABLE",
56
+ description: "This network has a routable path to a DMZ or portal zone.",
57
+ reasoning: "The structural path reaches a zone flagged isDmzOrPortal=true.",
58
+ supportingFacts: [`reachable zone "${reachable.zoneName}" has isDmzOrPortal=true`],
59
+ });
60
+ }
61
+ if (zone.isRemoteAccess) {
62
+ insights.push({
63
+ insight: "REMOTE_ACCESS_ADJACENT",
64
+ description: "This network is adjacent to a remote-access zone.",
65
+ reasoning: "The structural path reaches a zone flagged isRemoteAccess=true.",
66
+ supportingFacts: [`reachable zone "${reachable.zoneName}" has isRemoteAccess=true`],
67
+ });
68
+ }
69
+ }
70
+ const originZone = facts.originZone ? zoneByName.get(facts.originZone) : undefined;
71
+ if (originZone?.isInternal) {
72
+ insights.push({
73
+ insight: "INTERNAL_ORIGIN",
74
+ description: "This network originates in an internal zone.",
75
+ reasoning: "The resolved segment origin zone is flagged isInternal=true.",
76
+ supportingFacts: [`origin zone "${facts.originZone}" has isInternal=true`],
77
+ });
78
+ }
79
+ return {
80
+ processorId: "network.cidr-zone-path-insights",
81
+ inputKind: "cidr-path-facts",
82
+ input: facts,
83
+ resolved: true,
84
+ insights,
85
+ paths: {
86
+ reachableZones: facts.reachableZones,
87
+ },
88
+ };
89
+ }
90
+ //# sourceMappingURL=cidr-zone-insight-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr-zone-insight-rules.js","sourceRoot":"","sources":["../../../src/domain/network/cidr-zone-insight-rules.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ export type { JsonObject, InsightDiagnostic, InsightDiagnosticLevel, InsightProcessor, InsightProcessorContext, InsightProcessorDefinition, InsightProcessorInput, InsightProcessorResult, InsightPipelineStage, InsightSourceRef, RunInsightPipelineOptions, RunInsightPipelineResult, RunInsightProcessorOptions, } from "./core/types.js";
2
+ export { InsightProcessorRegistry, createInsightProcessorRegistry } from "./core/registry.js";
3
+ export { runInsightProcessor, runInsightPipeline } from "./core/insight-engine.js";
4
+ export { createApiInsightProcessorDefinition, type ApiInsightProcessorConfig, } from "./core/api-processor.js";
5
+ export { builtinInsightProcessors } from "./processors/builtins.js";
6
+ export { cidrTopologyPathResolverDefinition, cidrZonePathInsightProcessorDefinition, } from "./processors/builtins.js";
7
+ export type { CidrPathFacts, TopologyGraph, TopologySegment } from "./domain/network/cidr-topology-analyzer.js";
8
+ export { normalizeCidrInput, parseTopologyGraph, resolveCidrPathFacts, segmentIdForCidr, } from "./domain/network/cidr-topology-analyzer.js";
9
+ export type { ZoneInsight, ZonePathInsightsResult, ZoneRegistryEntry, } from "./domain/network/cidr-zone-insight-rules.js";
10
+ export { generateZonePathInsights, parseZoneRegistry } from "./domain/network/cidr-zone-insight-rules.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,gBAAgB,EAChB,uBAAuB,EACvB,0BAA0B,EAC1B,qBAAqB,EACrB,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,yBAAyB,EACzB,wBAAwB,EACxB,0BAA0B,GAC3B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EACL,mCAAmC,EACnC,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAChH,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,4CAA4C,CAAC;AAEpD,YAAY,EACV,WAAW,EACX,sBAAsB,EACtB,iBAAiB,GAClB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { InsightProcessorRegistry, createInsightProcessorRegistry } from "./core/registry.js";
2
+ export { runInsightProcessor, runInsightPipeline } from "./core/insight-engine.js";
3
+ export { createApiInsightProcessorDefinition, } from "./core/api-processor.js";
4
+ export { builtinInsightProcessors } from "./processors/builtins.js";
5
+ export { cidrTopologyPathResolverDefinition, cidrZonePathInsightProcessorDefinition, } from "./processors/builtins.js";
6
+ export { normalizeCidrInput, parseTopologyGraph, resolveCidrPathFacts, segmentIdForCidr, } from "./domain/network/cidr-topology-analyzer.js";
7
+ export { generateZonePathInsights, parseZoneRegistry } from "./domain/network/cidr-zone-insight-rules.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,oBAAoB,CAAC;AAC9F,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AACnF,OAAO,EACL,mCAAmC,GAEpC,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EACL,kCAAkC,EAClC,sCAAsC,GACvC,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,4CAA4C,CAAC;AAOpD,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,6CAA6C,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { InsightProcessorDefinition } from "../core/types.js";
2
+ import { cidrTopologyPathResolverDefinition } from "./network/cidr-topology-path-resolver.js";
3
+ import { cidrZonePathInsightProcessorDefinition } from "./network/cidr-zone-path-insight-processor.js";
4
+ export declare const builtinInsightProcessors: InsightProcessorDefinition[];
5
+ export { cidrTopologyPathResolverDefinition, cidrZonePathInsightProcessorDefinition, };
6
+ //# sourceMappingURL=builtins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/processors/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAC;AAC9F,OAAO,EAAE,sCAAsC,EAAE,MAAM,+CAA+C,CAAC;AAEvG,eAAO,MAAM,wBAAwB,EAAE,0BAA0B,EAGhE,CAAC;AAEF,OAAO,EACL,kCAAkC,EAClC,sCAAsC,GACvC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { cidrTopologyPathResolverDefinition } from "./network/cidr-topology-path-resolver.js";
2
+ import { cidrZonePathInsightProcessorDefinition } from "./network/cidr-zone-path-insight-processor.js";
3
+ export const builtinInsightProcessors = [
4
+ cidrTopologyPathResolverDefinition,
5
+ cidrZonePathInsightProcessorDefinition,
6
+ ];
7
+ export { cidrTopologyPathResolverDefinition, cidrZonePathInsightProcessorDefinition, };
8
+ //# sourceMappingURL=builtins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/processors/builtins.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kCAAkC,EAAE,MAAM,0CAA0C,CAAC;AAC9F,OAAO,EAAE,sCAAsC,EAAE,MAAM,+CAA+C,CAAC;AAEvG,MAAM,CAAC,MAAM,wBAAwB,GAAiC;IACpE,kCAAkC;IAClC,sCAAsC;CACvC,CAAC;AAEF,OAAO,EACL,kCAAkC,EAClC,sCAAsC,GACvC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { InsightProcessorDefinition } from "../../core/types.js";
2
+ export declare const cidrTopologyPathResolverDefinition: InsightProcessorDefinition;
3
+ //# sourceMappingURL=cidr-topology-path-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr-topology-path-resolver.d.ts","sourceRoot":"","sources":["../../../src/processors/network/cidr-topology-path-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAiD,MAAM,qBAAqB,CAAC;AA4BrH,eAAO,MAAM,kCAAkC,EAAE,0BA4DhD,CAAC"}
@@ -0,0 +1,76 @@
1
+ import { parseTopologyGraph, resolveCidrPathFacts, } from "../../domain/network/cidr-topology-analyzer.js";
2
+ const PROCESSOR_ID = "network.cidr-topology-path-resolver";
3
+ const TOPOLOGY_SOURCE_KEY = "topology";
4
+ async function loadTopology(input, loadSource) {
5
+ const sources = input.sources ?? {};
6
+ if (sources.topology && typeof sources.topology === "object") {
7
+ return sources.topology;
8
+ }
9
+ if (loadSource) {
10
+ const ref = {
11
+ db: typeof sources.topologyDb === "string" ? sources.topologyDb : "memorix-knowledge",
12
+ collection: typeof sources.topologyCollection === "string" ? sources.topologyCollection : "topology-raw",
13
+ };
14
+ return loadSource(TOPOLOGY_SOURCE_KEY, ref);
15
+ }
16
+ return null;
17
+ }
18
+ export const cidrTopologyPathResolverDefinition = {
19
+ processorId: PROCESSOR_ID,
20
+ inputKind: "cidr",
21
+ outputKind: "cidr-path-facts",
22
+ create(context) {
23
+ return {
24
+ async process(input) {
25
+ const cidr = typeof input.input === "string"
26
+ ? input.input
27
+ : typeof input.input?.cidr === "string"
28
+ ? String(input.input.cidr)
29
+ : String(input.input ?? "");
30
+ const topologyRaw = await loadTopology(input, context.loadSource);
31
+ const graph = parseTopologyGraph(topologyRaw);
32
+ if (!graph) {
33
+ return {
34
+ processorId: PROCESSOR_ID,
35
+ inputKind: "cidr",
36
+ outputKind: "cidr-path-facts",
37
+ resolved: false,
38
+ data: {
39
+ input: cidr,
40
+ resolved: false,
41
+ matchType: "none",
42
+ reachableZones: [],
43
+ unclassifiedReachable: [],
44
+ reachableSegments: [],
45
+ },
46
+ diagnostics: [
47
+ {
48
+ level: "error",
49
+ code: "TOPOLOGY_NOT_LOADED",
50
+ message: "Topology graph could not be loaded from topology-raw source.",
51
+ },
52
+ ],
53
+ };
54
+ }
55
+ const facts = resolveCidrPathFacts(graph, cidr);
56
+ return {
57
+ processorId: PROCESSOR_ID,
58
+ inputKind: "cidr",
59
+ outputKind: "cidr-path-facts",
60
+ resolved: facts.resolved,
61
+ data: facts,
62
+ diagnostics: facts.resolved
63
+ ? []
64
+ : [
65
+ {
66
+ level: "warning",
67
+ code: "CIDR_NOT_RESOLVED",
68
+ message: `CIDR ${cidr} did not resolve to a topology segment.`,
69
+ },
70
+ ],
71
+ };
72
+ },
73
+ };
74
+ },
75
+ };
76
+ //# sourceMappingURL=cidr-topology-path-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr-topology-path-resolver.js","sourceRoot":"","sources":["../../../src/processors/network/cidr-topology-path-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { InsightProcessorDefinition } from "../../core/types.js";
2
+ export declare const cidrZonePathInsightProcessorDefinition: InsightProcessorDefinition;
3
+ //# sourceMappingURL=cidr-zone-path-insight-processor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr-zone-path-insight-processor.d.ts","sourceRoot":"","sources":["../../../src/processors/network/cidr-zone-path-insight-processor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAiD,MAAM,qBAAqB,CAAC;AA0BrH,eAAO,MAAM,sCAAsC,EAAE,0BAuBpD,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { generateZonePathInsights, parseZoneRegistry, } from "../../domain/network/cidr-zone-insight-rules.js";
2
+ const PROCESSOR_ID = "network.cidr-zone-path-insights";
3
+ const ZONES_SOURCE_KEY = "zones";
4
+ async function loadZones(input, loadSource) {
5
+ const sources = input.sources ?? {};
6
+ if (sources.zones)
7
+ return sources.zones;
8
+ if (loadSource) {
9
+ const ref = {
10
+ db: typeof sources.zonesDb === "string" ? sources.zonesDb : undefined,
11
+ collection: typeof sources.zonesCollection === "string" ? sources.zonesCollection : "topology-zones-snapshots",
12
+ };
13
+ return loadSource(ZONES_SOURCE_KEY, ref);
14
+ }
15
+ return [];
16
+ }
17
+ export const cidrZonePathInsightProcessorDefinition = {
18
+ processorId: PROCESSOR_ID,
19
+ inputKind: "cidr-path-facts",
20
+ outputKind: "insights",
21
+ create(context) {
22
+ return {
23
+ async process(input) {
24
+ const facts = input.input;
25
+ const zonesRaw = await loadZones(input, context.loadSource);
26
+ const zones = parseZoneRegistry(zonesRaw);
27
+ const result = generateZonePathInsights(facts, zones);
28
+ return {
29
+ processorId: PROCESSOR_ID,
30
+ inputKind: "cidr-path-facts",
31
+ outputKind: "insights",
32
+ resolved: result.resolved,
33
+ data: result,
34
+ diagnostics: [],
35
+ };
36
+ },
37
+ };
38
+ },
39
+ };
40
+ //# sourceMappingURL=cidr-zone-path-insight-processor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cidr-zone-path-insight-processor.js","sourceRoot":"","sources":["../../../src/processors/network/cidr-zone-path-insight-processor.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,wBAAwB,EACxB,iBAAiB,GAClB,MAAM,iDAAiD,CAAC;AAEzD,MAAM,YAAY,GAAG,iCAAiC,CAAC;AACvD,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAEjC,KAAK,UAAU,SAAS,CACtB,KAA4B,EAC5B,UAA+F;IAE/F,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACpC,IAAI,OAAO,CAAC,KAAK;QAAE,OAAO,OAAO,CAAC,KAAK,CAAC;IACxC,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,GAAG,GAAG;YACV,EAAE,EAAE,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YACrE,UAAU,EAAE,OAAO,OAAO,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,0BAA0B;SAC/G,CAAC;QACF,OAAO,UAAU,CAAC,gBAAgB,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,MAAM,sCAAsC,GAA+B;IAChF,WAAW,EAAE,YAAY;IACzB,SAAS,EAAE,iBAAiB;IAC5B,UAAU,EAAE,UAAU;IACtB,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,KAAK,CAAC,OAAO,CAAC,KAA4B;gBACxC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAsB,CAAC;gBAC3C,MAAM,QAAQ,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;gBAC5D,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,wBAAwB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;gBAEtD,OAAO;oBACL,WAAW,EAAE,YAAY;oBACzB,SAAS,EAAE,iBAAiB;oBAC5B,UAAU,EAAE,UAAU;oBACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ;oBACzB,IAAI,EAAE,MAAM;oBACZ,WAAW,EAAE,EAAE;iBAChB,CAAC;YACJ,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@x12i/memorix-insights",
3
+ "version": "1.1.0",
4
+ "description": "Pluggable insight processors for Memorix — staged fact resolution and judgment generation",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist",
16
+ "README.md"
17
+ ],
18
+ "scripts": {
19
+ "prebuild": "rm -rf dist",
20
+ "build": "tsc -p tsconfig.build.json",
21
+ "test": "vitest run",
22
+ "test:watch": "vitest",
23
+ "prepack": "npm run build"
24
+ },
25
+ "engines": {
26
+ "node": ">=18.0.0"
27
+ },
28
+ "dependencies": {
29
+ "@x12i/memorix-resolvers": "^1.2.0"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^20.14.0",
33
+ "typescript": "^5.6.0",
34
+ "vitest": "^2.1.0"
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "repository": {
40
+ "type": "git",
41
+ "url": "git+ssh://git@github.com/x12i/memorix-mono-repo.git",
42
+ "directory": "memorix-insights"
43
+ },
44
+ "keywords": [
45
+ "memorix",
46
+ "insights",
47
+ "enrichment"
48
+ ],
49
+ "license": "exellix-license"
50
+ }