driftdetect-core 0.1.2 → 0.3.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/dist/boundaries/boundary-store.d.ts +92 -0
- package/dist/boundaries/boundary-store.d.ts.map +1 -0
- package/dist/boundaries/boundary-store.js +458 -0
- package/dist/boundaries/boundary-store.js.map +1 -0
- package/dist/boundaries/index.d.ts +8 -0
- package/dist/boundaries/index.d.ts.map +1 -0
- package/dist/boundaries/index.js +8 -0
- package/dist/boundaries/index.js.map +1 -0
- package/dist/boundaries/types.d.ts +237 -0
- package/dist/boundaries/types.d.ts.map +1 -0
- package/dist/boundaries/types.js +8 -0
- package/dist/boundaries/types.js.map +1 -0
- package/dist/dna/ai-context.d.ts +10 -0
- package/dist/dna/ai-context.d.ts.map +1 -0
- package/dist/dna/ai-context.js +46 -0
- package/dist/dna/ai-context.js.map +1 -0
- package/dist/dna/dna-analyzer.d.ts +34 -0
- package/dist/dna/dna-analyzer.d.ts.map +1 -0
- package/dist/dna/dna-analyzer.js +110 -0
- package/dist/dna/dna-analyzer.js.map +1 -0
- package/dist/dna/dna-store.d.ts +13 -0
- package/dist/dna/dna-store.d.ts.map +1 -0
- package/dist/dna/dna-store.js +43 -0
- package/dist/dna/dna-store.js.map +1 -0
- package/dist/dna/gene-extractors/animation-approach.d.ts +15 -0
- package/dist/dna/gene-extractors/animation-approach.d.ts.map +1 -0
- package/dist/dna/gene-extractors/animation-approach.js +97 -0
- package/dist/dna/gene-extractors/animation-approach.js.map +1 -0
- package/dist/dna/gene-extractors/base-extractor.d.ts +53 -0
- package/dist/dna/gene-extractors/base-extractor.d.ts.map +1 -0
- package/dist/dna/gene-extractors/base-extractor.js +76 -0
- package/dist/dna/gene-extractors/base-extractor.js.map +1 -0
- package/dist/dna/gene-extractors/index.d.ts +16 -0
- package/dist/dna/gene-extractors/index.d.ts.map +1 -0
- package/dist/dna/gene-extractors/index.js +38 -0
- package/dist/dna/gene-extractors/index.js.map +1 -0
- package/dist/dna/gene-extractors/responsive-approach.d.ts +10 -0
- package/dist/dna/gene-extractors/responsive-approach.d.ts.map +1 -0
- package/dist/dna/gene-extractors/responsive-approach.js +30 -0
- package/dist/dna/gene-extractors/responsive-approach.js.map +1 -0
- package/dist/dna/gene-extractors/spacing-philosophy.d.ts +10 -0
- package/dist/dna/gene-extractors/spacing-philosophy.d.ts.map +1 -0
- package/dist/dna/gene-extractors/spacing-philosophy.js +30 -0
- package/dist/dna/gene-extractors/spacing-philosophy.js.map +1 -0
- package/dist/dna/gene-extractors/state-styling.d.ts +10 -0
- package/dist/dna/gene-extractors/state-styling.d.ts.map +1 -0
- package/dist/dna/gene-extractors/state-styling.js +29 -0
- package/dist/dna/gene-extractors/state-styling.js.map +1 -0
- package/dist/dna/gene-extractors/theming.d.ts +10 -0
- package/dist/dna/gene-extractors/theming.d.ts.map +1 -0
- package/dist/dna/gene-extractors/theming.js +30 -0
- package/dist/dna/gene-extractors/theming.js.map +1 -0
- package/dist/dna/gene-extractors/variant-handling.d.ts +13 -0
- package/dist/dna/gene-extractors/variant-handling.d.ts.map +1 -0
- package/dist/dna/gene-extractors/variant-handling.js +38 -0
- package/dist/dna/gene-extractors/variant-handling.js.map +1 -0
- package/dist/dna/health-calculator.d.ts +21 -0
- package/dist/dna/health-calculator.d.ts.map +1 -0
- package/dist/dna/health-calculator.js +113 -0
- package/dist/dna/health-calculator.js.map +1 -0
- package/dist/dna/index.d.ts +21 -0
- package/dist/dna/index.d.ts.map +1 -0
- package/dist/dna/index.js +19 -0
- package/dist/dna/index.js.map +1 -0
- package/dist/dna/mutation-detector.d.ts +10 -0
- package/dist/dna/mutation-detector.d.ts.map +1 -0
- package/dist/dna/mutation-detector.js +39 -0
- package/dist/dna/mutation-detector.js.map +1 -0
- package/dist/dna/playbook-generator.d.ts +6 -0
- package/dist/dna/playbook-generator.d.ts.map +1 -0
- package/dist/dna/playbook-generator.js +53 -0
- package/dist/dna/playbook-generator.js.map +1 -0
- package/dist/dna/types.d.ts +95 -0
- package/dist/dna/types.d.ts.map +1 -0
- package/dist/dna/types.js +8 -0
- package/dist/dna/types.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/parser-manager.d.ts.map +1 -1
- package/dist/parsers/parser-manager.js +2 -0
- package/dist/parsers/parser-manager.js.map +1 -1
- package/dist/parsers/tree-sitter/config.d.ts +82 -0
- package/dist/parsers/tree-sitter/config.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/config.js +200 -0
- package/dist/parsers/tree-sitter/config.js.map +1 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts +64 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.js +271 -0
- package/dist/parsers/tree-sitter/csharp-ast-converter.js.map +1 -0
- package/dist/parsers/tree-sitter/csharp-loader.d.ts +43 -0
- package/dist/parsers/tree-sitter/csharp-loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/csharp-loader.js +146 -0
- package/dist/parsers/tree-sitter/csharp-loader.js.map +1 -0
- package/dist/parsers/tree-sitter/index.d.ts +26 -0
- package/dist/parsers/tree-sitter/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/index.js +47 -0
- package/dist/parsers/tree-sitter/index.js.map +1 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts +79 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.js +540 -0
- package/dist/parsers/tree-sitter/java/annotation-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/class-extractor.d.ts +40 -0
- package/dist/parsers/tree-sitter/java/class-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/class-extractor.js +770 -0
- package/dist/parsers/tree-sitter/java/class-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/index.d.ts +14 -0
- package/dist/parsers/tree-sitter/java/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/index.js +25 -0
- package/dist/parsers/tree-sitter/java/index.js.map +1 -0
- package/dist/parsers/tree-sitter/java/method-extractor.d.ts +88 -0
- package/dist/parsers/tree-sitter/java/method-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/method-extractor.js +551 -0
- package/dist/parsers/tree-sitter/java/method-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/java/types.d.ts +545 -0
- package/dist/parsers/tree-sitter/java/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/java/types.js +81 -0
- package/dist/parsers/tree-sitter/java/types.js.map +1 -0
- package/dist/parsers/tree-sitter/loader.d.ts +50 -0
- package/dist/parsers/tree-sitter/loader.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/loader.js +156 -0
- package/dist/parsers/tree-sitter/loader.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts +78 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.js +278 -0
- package/dist/parsers/tree-sitter/pydantic/config-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts +84 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.js +321 -0
- package/dist/parsers/tree-sitter/pydantic/constraint-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts +74 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.js +285 -0
- package/dist/parsers/tree-sitter/pydantic/field-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/index.d.ts +18 -0
- package/dist/parsers/tree-sitter/pydantic/index.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/index.js +23 -0
- package/dist/parsers/tree-sitter/pydantic/index.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts +70 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js +251 -0
- package/dist/parsers/tree-sitter/pydantic/inheritance-resolver.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts +102 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js +399 -0
- package/dist/parsers/tree-sitter/pydantic/pydantic-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts +89 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.js +426 -0
- package/dist/parsers/tree-sitter/pydantic/type-resolver.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/types.d.ts +177 -0
- package/dist/parsers/tree-sitter/pydantic/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/types.js +139 -0
- package/dist/parsers/tree-sitter/pydantic/types.js.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts +88 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.js +315 -0
- package/dist/parsers/tree-sitter/pydantic/validator-extractor.js.map +1 -0
- package/dist/parsers/tree-sitter/python-ast-converter.d.ts +140 -0
- package/dist/parsers/tree-sitter/python-ast-converter.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/python-ast-converter.js +360 -0
- package/dist/parsers/tree-sitter/python-ast-converter.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts +465 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js +1146 -0
- package/dist/parsers/tree-sitter/tree-sitter-csharp-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts +86 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.js +177 -0
- package/dist/parsers/tree-sitter/tree-sitter-python-parser.js.map +1 -0
- package/dist/parsers/tree-sitter/types.d.ts +399 -0
- package/dist/parsers/tree-sitter/types.d.ts.map +1 -0
- package/dist/parsers/tree-sitter/types.js +20 -0
- package/dist/parsers/tree-sitter/types.js.map +1 -0
- package/dist/parsers/types.d.ts +1 -1
- package/dist/parsers/types.d.ts.map +1 -1
- package/dist/scanner/file-walker.d.ts.map +1 -1
- package/dist/scanner/file-walker.js +5 -0
- package/dist/scanner/file-walker.js.map +1 -1
- package/dist/store/history-store.d.ts +85 -269
- package/dist/store/history-store.d.ts.map +1 -1
- package/dist/store/history-store.js +272 -624
- package/dist/store/history-store.js.map +1 -1
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/java-type-mapping.d.ts +79 -0
- package/dist/types/java-type-mapping.d.ts.map +1 -0
- package/dist/types/java-type-mapping.js +290 -0
- package/dist/types/java-type-mapping.js.map +1 -0
- package/package.json +8 -3
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boundary Store - Data access boundary persistence and querying
|
|
3
|
+
*
|
|
4
|
+
* Loads and saves data access maps and boundary rules to .drift/boundaries/ directory.
|
|
5
|
+
* Supports querying access points by table, file, and checking violations against rules.
|
|
6
|
+
*/
|
|
7
|
+
import type { BoundaryStoreConfig, DataAccessMap, DataAccessPoint, TableAccessInfo, FileAccessInfo, SensitiveField, ORMModel, BoundaryRules, BoundaryViolation } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Boundary Store - Manages data access boundary persistence and querying
|
|
10
|
+
*
|
|
11
|
+
* Data is stored in .drift/boundaries/ directory:
|
|
12
|
+
* - .drift/boundaries/access-map.json - Discovered data access points
|
|
13
|
+
* - .drift/boundaries/rules.json - User-defined boundary rules (optional)
|
|
14
|
+
*/
|
|
15
|
+
export declare class BoundaryStore {
|
|
16
|
+
private readonly config;
|
|
17
|
+
private readonly boundariesDir;
|
|
18
|
+
private accessMap;
|
|
19
|
+
private rules;
|
|
20
|
+
constructor(config: BoundaryStoreConfig);
|
|
21
|
+
/**
|
|
22
|
+
* Initialize the boundary store
|
|
23
|
+
*
|
|
24
|
+
* Creates necessary directories and loads existing data.
|
|
25
|
+
*/
|
|
26
|
+
initialize(): Promise<void>;
|
|
27
|
+
/**
|
|
28
|
+
* Load access map from disk
|
|
29
|
+
*/
|
|
30
|
+
private loadAccessMap;
|
|
31
|
+
/**
|
|
32
|
+
* Load rules from disk
|
|
33
|
+
*/
|
|
34
|
+
private loadRules;
|
|
35
|
+
/**
|
|
36
|
+
* Get the full data access map
|
|
37
|
+
*/
|
|
38
|
+
getAccessMap(): DataAccessMap;
|
|
39
|
+
/**
|
|
40
|
+
* Get access information for a specific table
|
|
41
|
+
*/
|
|
42
|
+
getTableAccess(table: string): TableAccessInfo | null;
|
|
43
|
+
/**
|
|
44
|
+
* Get access information for files matching a glob pattern
|
|
45
|
+
*/
|
|
46
|
+
getFileAccess(filePattern: string): FileAccessInfo[];
|
|
47
|
+
/**
|
|
48
|
+
* Get all sensitive field access
|
|
49
|
+
*/
|
|
50
|
+
getSensitiveAccess(): SensitiveField[];
|
|
51
|
+
/**
|
|
52
|
+
* Get boundary rules (or null if not configured)
|
|
53
|
+
*/
|
|
54
|
+
getRules(): BoundaryRules | null;
|
|
55
|
+
/**
|
|
56
|
+
* Check a single access point against rules
|
|
57
|
+
*/
|
|
58
|
+
checkViolations(accessPoint: DataAccessPoint): BoundaryViolation[];
|
|
59
|
+
/**
|
|
60
|
+
* Check a single rule against an access point
|
|
61
|
+
*/
|
|
62
|
+
private checkRuleViolation;
|
|
63
|
+
/**
|
|
64
|
+
* Check all access points against rules
|
|
65
|
+
*/
|
|
66
|
+
checkAllViolations(): BoundaryViolation[];
|
|
67
|
+
/**
|
|
68
|
+
* Save access map to disk
|
|
69
|
+
*/
|
|
70
|
+
saveAccessMap(map: DataAccessMap): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* Save rules to disk
|
|
73
|
+
*/
|
|
74
|
+
saveRules(rules: BoundaryRules): Promise<void>;
|
|
75
|
+
/**
|
|
76
|
+
* Add a single access point
|
|
77
|
+
*/
|
|
78
|
+
addAccessPoint(point: DataAccessPoint): void;
|
|
79
|
+
/**
|
|
80
|
+
* Add an ORM model
|
|
81
|
+
*/
|
|
82
|
+
addModel(model: ORMModel): void;
|
|
83
|
+
/**
|
|
84
|
+
* Add a sensitive field
|
|
85
|
+
*/
|
|
86
|
+
addSensitiveField(field: SensitiveField): void;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Create a new BoundaryStore instance
|
|
90
|
+
*/
|
|
91
|
+
export declare function createBoundaryStore(config: BoundaryStoreConfig): BoundaryStore;
|
|
92
|
+
//# sourceMappingURL=boundary-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundary-store.d.ts","sourceRoot":"","sources":["../../src/boundaries/boundary-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,EACd,QAAQ,EACR,aAAa,EACb,iBAAiB,EAClB,MAAM,YAAY,CAAC;AA4EpB;;;;;;GAMG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,SAAS,CAA8B;IAC/C,OAAO,CAAC,KAAK,CAA8B;gBAE/B,MAAM,EAAE,mBAAmB;IASvC;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAMjC;;OAEG;YACW,aAAa;IAgB3B;;OAEG;YACW,SAAS;IAoBvB;;OAEG;IACH,YAAY,IAAI,aAAa;IAO7B;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI;IAOrD;;OAEG;IACH,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,EAAE;IA8BpD;;OAEG;IACH,kBAAkB,IAAI,cAAc,EAAE;IAOtC;;OAEG;IACH,QAAQ,IAAI,aAAa,GAAG,IAAI;IAQhC;;OAEG;IACH,eAAe,CAAC,WAAW,EAAE,eAAe,GAAG,iBAAiB,EAAE;IA+BlE;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAuE1B;;OAEG;IACH,kBAAkB,IAAI,iBAAiB,EAAE;IAmBzC;;OAEG;IACG,aAAa,CAAC,GAAG,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAmBtD;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpD;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IA2C5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IA2C/B;;OAEG;IACH,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI;CAmC/C;AAMD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,mBAAmB,GAAG,aAAa,CAE9E"}
|
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Boundary Store - Data access boundary persistence and querying
|
|
3
|
+
*
|
|
4
|
+
* Loads and saves data access maps and boundary rules to .drift/boundaries/ directory.
|
|
5
|
+
* Supports querying access points by table, file, and checking violations against rules.
|
|
6
|
+
*/
|
|
7
|
+
import * as fs from 'node:fs/promises';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { minimatch } from 'minimatch';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// Constants
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/** Directory name for drift configuration */
|
|
14
|
+
const DRIFT_DIR = '.drift';
|
|
15
|
+
/** Directory name for boundaries */
|
|
16
|
+
const BOUNDARIES_DIR = 'boundaries';
|
|
17
|
+
/** Access map file name */
|
|
18
|
+
const ACCESS_MAP_FILE = 'access-map.json';
|
|
19
|
+
/** Rules file name */
|
|
20
|
+
const RULES_FILE = 'rules.json';
|
|
21
|
+
/** Current schema version */
|
|
22
|
+
const SCHEMA_VERSION = '1.0';
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// Helper Functions
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/**
|
|
27
|
+
* Check if a file exists
|
|
28
|
+
*/
|
|
29
|
+
async function fileExists(filePath) {
|
|
30
|
+
try {
|
|
31
|
+
await fs.access(filePath);
|
|
32
|
+
return true;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Ensure a directory exists
|
|
40
|
+
*/
|
|
41
|
+
async function ensureDir(dirPath) {
|
|
42
|
+
await fs.mkdir(dirPath, { recursive: true });
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Generate a unique ID for access points
|
|
46
|
+
*/
|
|
47
|
+
function generateAccessPointId(point) {
|
|
48
|
+
return `${point.file}:${point.line}:${point.column}:${point.table}`;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Create an empty access map
|
|
52
|
+
*/
|
|
53
|
+
function createEmptyAccessMap(projectRoot) {
|
|
54
|
+
return {
|
|
55
|
+
version: SCHEMA_VERSION,
|
|
56
|
+
generatedAt: new Date().toISOString(),
|
|
57
|
+
projectRoot,
|
|
58
|
+
models: [],
|
|
59
|
+
tables: {},
|
|
60
|
+
accessPoints: {},
|
|
61
|
+
sensitiveFields: [],
|
|
62
|
+
stats: {
|
|
63
|
+
totalTables: 0,
|
|
64
|
+
totalAccessPoints: 0,
|
|
65
|
+
totalSensitiveFields: 0,
|
|
66
|
+
totalModels: 0,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// ============================================================================
|
|
71
|
+
// BoundaryStore Class
|
|
72
|
+
// ============================================================================
|
|
73
|
+
/**
|
|
74
|
+
* Boundary Store - Manages data access boundary persistence and querying
|
|
75
|
+
*
|
|
76
|
+
* Data is stored in .drift/boundaries/ directory:
|
|
77
|
+
* - .drift/boundaries/access-map.json - Discovered data access points
|
|
78
|
+
* - .drift/boundaries/rules.json - User-defined boundary rules (optional)
|
|
79
|
+
*/
|
|
80
|
+
export class BoundaryStore {
|
|
81
|
+
config;
|
|
82
|
+
boundariesDir;
|
|
83
|
+
accessMap = null;
|
|
84
|
+
rules = null;
|
|
85
|
+
constructor(config) {
|
|
86
|
+
this.config = config;
|
|
87
|
+
this.boundariesDir = path.join(this.config.rootDir, DRIFT_DIR, BOUNDARIES_DIR);
|
|
88
|
+
}
|
|
89
|
+
// ==========================================================================
|
|
90
|
+
// Initialization
|
|
91
|
+
// ==========================================================================
|
|
92
|
+
/**
|
|
93
|
+
* Initialize the boundary store
|
|
94
|
+
*
|
|
95
|
+
* Creates necessary directories and loads existing data.
|
|
96
|
+
*/
|
|
97
|
+
async initialize() {
|
|
98
|
+
await ensureDir(this.boundariesDir);
|
|
99
|
+
await this.loadAccessMap();
|
|
100
|
+
await this.loadRules();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Load access map from disk
|
|
104
|
+
*/
|
|
105
|
+
async loadAccessMap() {
|
|
106
|
+
const filePath = path.join(this.boundariesDir, ACCESS_MAP_FILE);
|
|
107
|
+
if (!(await fileExists(filePath))) {
|
|
108
|
+
this.accessMap = createEmptyAccessMap(this.config.rootDir);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
try {
|
|
112
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
113
|
+
this.accessMap = JSON.parse(content);
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
this.accessMap = createEmptyAccessMap(this.config.rootDir);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Load rules from disk
|
|
121
|
+
*/
|
|
122
|
+
async loadRules() {
|
|
123
|
+
const filePath = path.join(this.boundariesDir, RULES_FILE);
|
|
124
|
+
if (!(await fileExists(filePath))) {
|
|
125
|
+
this.rules = null;
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
try {
|
|
129
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
130
|
+
this.rules = JSON.parse(content);
|
|
131
|
+
}
|
|
132
|
+
catch {
|
|
133
|
+
this.rules = null;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// ==========================================================================
|
|
137
|
+
// Getters
|
|
138
|
+
// ==========================================================================
|
|
139
|
+
/**
|
|
140
|
+
* Get the full data access map
|
|
141
|
+
*/
|
|
142
|
+
getAccessMap() {
|
|
143
|
+
if (!this.accessMap) {
|
|
144
|
+
return createEmptyAccessMap(this.config.rootDir);
|
|
145
|
+
}
|
|
146
|
+
return this.accessMap;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get access information for a specific table
|
|
150
|
+
*/
|
|
151
|
+
getTableAccess(table) {
|
|
152
|
+
if (!this.accessMap) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
return this.accessMap.tables[table] ?? null;
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get access information for files matching a glob pattern
|
|
159
|
+
*/
|
|
160
|
+
getFileAccess(filePattern) {
|
|
161
|
+
if (!this.accessMap) {
|
|
162
|
+
return [];
|
|
163
|
+
}
|
|
164
|
+
// Group access points by file
|
|
165
|
+
const fileMap = new Map();
|
|
166
|
+
for (const accessPoint of Object.values(this.accessMap.accessPoints)) {
|
|
167
|
+
if (minimatch(accessPoint.file, filePattern)) {
|
|
168
|
+
if (!fileMap.has(accessPoint.file)) {
|
|
169
|
+
fileMap.set(accessPoint.file, {
|
|
170
|
+
file: accessPoint.file,
|
|
171
|
+
tables: [],
|
|
172
|
+
accessPoints: [],
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
const fileInfo = fileMap.get(accessPoint.file);
|
|
176
|
+
fileInfo.accessPoints.push(accessPoint);
|
|
177
|
+
if (!fileInfo.tables.includes(accessPoint.table)) {
|
|
178
|
+
fileInfo.tables.push(accessPoint.table);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return Array.from(fileMap.values());
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Get all sensitive field access
|
|
186
|
+
*/
|
|
187
|
+
getSensitiveAccess() {
|
|
188
|
+
if (!this.accessMap) {
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
return this.accessMap.sensitiveFields;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Get boundary rules (or null if not configured)
|
|
195
|
+
*/
|
|
196
|
+
getRules() {
|
|
197
|
+
return this.rules;
|
|
198
|
+
}
|
|
199
|
+
// ==========================================================================
|
|
200
|
+
// Violation Checking
|
|
201
|
+
// ==========================================================================
|
|
202
|
+
/**
|
|
203
|
+
* Check a single access point against rules
|
|
204
|
+
*/
|
|
205
|
+
checkViolations(accessPoint) {
|
|
206
|
+
if (!this.rules) {
|
|
207
|
+
return [];
|
|
208
|
+
}
|
|
209
|
+
const violations = [];
|
|
210
|
+
// Check against global excludes first
|
|
211
|
+
if (this.rules.globalExcludes) {
|
|
212
|
+
for (const excludePattern of this.rules.globalExcludes) {
|
|
213
|
+
if (minimatch(accessPoint.file, excludePattern)) {
|
|
214
|
+
return []; // File is globally excluded
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
// Check each enabled rule
|
|
219
|
+
for (const rule of this.rules.boundaries) {
|
|
220
|
+
if (rule.enabled === false) {
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
const violation = this.checkRuleViolation(accessPoint, rule);
|
|
224
|
+
if (violation) {
|
|
225
|
+
violations.push(violation);
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return violations;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Check a single rule against an access point
|
|
232
|
+
*/
|
|
233
|
+
checkRuleViolation(accessPoint, rule) {
|
|
234
|
+
// Check if rule applies to this access point
|
|
235
|
+
let ruleApplies = false;
|
|
236
|
+
// Check table restrictions
|
|
237
|
+
if (rule.tables && rule.tables.includes(accessPoint.table)) {
|
|
238
|
+
ruleApplies = true;
|
|
239
|
+
}
|
|
240
|
+
// Check field restrictions
|
|
241
|
+
if (rule.fields) {
|
|
242
|
+
for (const field of accessPoint.fields) {
|
|
243
|
+
const fullFieldName = `${accessPoint.table}.${field}`;
|
|
244
|
+
if (rule.fields.includes(fullFieldName) || rule.fields.includes(field)) {
|
|
245
|
+
ruleApplies = true;
|
|
246
|
+
break;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
// Check operation restrictions
|
|
251
|
+
if (rule.operations && !rule.operations.includes(accessPoint.operation)) {
|
|
252
|
+
return null; // Operation not restricted by this rule
|
|
253
|
+
}
|
|
254
|
+
if (!ruleApplies) {
|
|
255
|
+
return null;
|
|
256
|
+
}
|
|
257
|
+
// Check if file is in excluded paths
|
|
258
|
+
if (rule.excludePaths) {
|
|
259
|
+
for (const excludePattern of rule.excludePaths) {
|
|
260
|
+
if (minimatch(accessPoint.file, excludePattern)) {
|
|
261
|
+
return null; // File is excluded from this rule
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
// Check if file is in allowed paths
|
|
266
|
+
let isAllowed = false;
|
|
267
|
+
for (const allowedPattern of rule.allowedPaths) {
|
|
268
|
+
if (minimatch(accessPoint.file, allowedPattern)) {
|
|
269
|
+
isAllowed = true;
|
|
270
|
+
break;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
if (isAllowed) {
|
|
274
|
+
return null; // Access is allowed
|
|
275
|
+
}
|
|
276
|
+
// Create violation
|
|
277
|
+
return {
|
|
278
|
+
id: `${rule.id}:${accessPoint.id}`,
|
|
279
|
+
ruleId: rule.id,
|
|
280
|
+
ruleDescription: rule.description,
|
|
281
|
+
severity: rule.severity,
|
|
282
|
+
file: accessPoint.file,
|
|
283
|
+
line: accessPoint.line,
|
|
284
|
+
column: accessPoint.column,
|
|
285
|
+
message: `Access to ${accessPoint.table} violates boundary rule: ${rule.description}`,
|
|
286
|
+
table: accessPoint.table,
|
|
287
|
+
fields: accessPoint.fields,
|
|
288
|
+
operation: accessPoint.operation,
|
|
289
|
+
suggestion: `Move this access to an allowed path: ${rule.allowedPaths.join(', ')}`,
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Check all access points against rules
|
|
294
|
+
*/
|
|
295
|
+
checkAllViolations() {
|
|
296
|
+
if (!this.accessMap || !this.rules) {
|
|
297
|
+
return [];
|
|
298
|
+
}
|
|
299
|
+
const violations = [];
|
|
300
|
+
for (const accessPoint of Object.values(this.accessMap.accessPoints)) {
|
|
301
|
+
const pointViolations = this.checkViolations(accessPoint);
|
|
302
|
+
violations.push(...pointViolations);
|
|
303
|
+
}
|
|
304
|
+
return violations;
|
|
305
|
+
}
|
|
306
|
+
// ==========================================================================
|
|
307
|
+
// Persistence
|
|
308
|
+
// ==========================================================================
|
|
309
|
+
/**
|
|
310
|
+
* Save access map to disk
|
|
311
|
+
*/
|
|
312
|
+
async saveAccessMap(map) {
|
|
313
|
+
await ensureDir(this.boundariesDir);
|
|
314
|
+
const filePath = path.join(this.boundariesDir, ACCESS_MAP_FILE);
|
|
315
|
+
// Update stats
|
|
316
|
+
map.stats = {
|
|
317
|
+
totalTables: Object.keys(map.tables).length,
|
|
318
|
+
totalAccessPoints: Object.keys(map.accessPoints).length,
|
|
319
|
+
totalSensitiveFields: map.sensitiveFields.length,
|
|
320
|
+
totalModels: map.models.length,
|
|
321
|
+
};
|
|
322
|
+
map.generatedAt = new Date().toISOString();
|
|
323
|
+
this.accessMap = map;
|
|
324
|
+
await fs.writeFile(filePath, JSON.stringify(map, null, 2));
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Save rules to disk
|
|
328
|
+
*/
|
|
329
|
+
async saveRules(rules) {
|
|
330
|
+
await ensureDir(this.boundariesDir);
|
|
331
|
+
const filePath = path.join(this.boundariesDir, RULES_FILE);
|
|
332
|
+
this.rules = rules;
|
|
333
|
+
await fs.writeFile(filePath, JSON.stringify(rules, null, 2));
|
|
334
|
+
}
|
|
335
|
+
// ==========================================================================
|
|
336
|
+
// Adding Data
|
|
337
|
+
// ==========================================================================
|
|
338
|
+
/**
|
|
339
|
+
* Add a single access point
|
|
340
|
+
*/
|
|
341
|
+
addAccessPoint(point) {
|
|
342
|
+
if (!this.accessMap) {
|
|
343
|
+
this.accessMap = createEmptyAccessMap(this.config.rootDir);
|
|
344
|
+
}
|
|
345
|
+
// Ensure ID exists
|
|
346
|
+
if (!point.id) {
|
|
347
|
+
point.id = generateAccessPointId(point);
|
|
348
|
+
}
|
|
349
|
+
// Add to access points
|
|
350
|
+
this.accessMap.accessPoints[point.id] = point;
|
|
351
|
+
// Update table info
|
|
352
|
+
if (!this.accessMap.tables[point.table]) {
|
|
353
|
+
this.accessMap.tables[point.table] = {
|
|
354
|
+
name: point.table,
|
|
355
|
+
model: null,
|
|
356
|
+
fields: [],
|
|
357
|
+
sensitiveFields: [],
|
|
358
|
+
accessedBy: [],
|
|
359
|
+
};
|
|
360
|
+
}
|
|
361
|
+
const tableInfo = this.accessMap.tables[point.table];
|
|
362
|
+
// Add fields
|
|
363
|
+
for (const field of point.fields) {
|
|
364
|
+
if (!tableInfo.fields.includes(field)) {
|
|
365
|
+
tableInfo.fields.push(field);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
// Add access point reference
|
|
369
|
+
if (!tableInfo.accessedBy.find(ap => ap.id === point.id)) {
|
|
370
|
+
tableInfo.accessedBy.push(point);
|
|
371
|
+
}
|
|
372
|
+
// Update stats
|
|
373
|
+
this.accessMap.stats.totalTables = Object.keys(this.accessMap.tables).length;
|
|
374
|
+
this.accessMap.stats.totalAccessPoints = Object.keys(this.accessMap.accessPoints).length;
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Add an ORM model
|
|
378
|
+
*/
|
|
379
|
+
addModel(model) {
|
|
380
|
+
if (!this.accessMap) {
|
|
381
|
+
this.accessMap = createEmptyAccessMap(this.config.rootDir);
|
|
382
|
+
}
|
|
383
|
+
// Check if model already exists
|
|
384
|
+
const existingIndex = this.accessMap.models.findIndex(m => m.name === model.name && m.file === model.file);
|
|
385
|
+
if (existingIndex >= 0) {
|
|
386
|
+
this.accessMap.models[existingIndex] = model;
|
|
387
|
+
}
|
|
388
|
+
else {
|
|
389
|
+
this.accessMap.models.push(model);
|
|
390
|
+
}
|
|
391
|
+
// Update table info if table name is known
|
|
392
|
+
if (model.tableName) {
|
|
393
|
+
if (!this.accessMap.tables[model.tableName]) {
|
|
394
|
+
this.accessMap.tables[model.tableName] = {
|
|
395
|
+
name: model.tableName,
|
|
396
|
+
model: model.name,
|
|
397
|
+
fields: model.fields,
|
|
398
|
+
sensitiveFields: [],
|
|
399
|
+
accessedBy: [],
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
else {
|
|
403
|
+
const existingTable = this.accessMap.tables[model.tableName];
|
|
404
|
+
existingTable.model = model.name;
|
|
405
|
+
// Merge fields
|
|
406
|
+
for (const field of model.fields) {
|
|
407
|
+
if (!existingTable.fields.includes(field)) {
|
|
408
|
+
existingTable.fields.push(field);
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
// Update stats
|
|
414
|
+
this.accessMap.stats.totalModels = this.accessMap.models.length;
|
|
415
|
+
this.accessMap.stats.totalTables = Object.keys(this.accessMap.tables).length;
|
|
416
|
+
}
|
|
417
|
+
/**
|
|
418
|
+
* Add a sensitive field
|
|
419
|
+
*/
|
|
420
|
+
addSensitiveField(field) {
|
|
421
|
+
if (!this.accessMap) {
|
|
422
|
+
this.accessMap = createEmptyAccessMap(this.config.rootDir);
|
|
423
|
+
}
|
|
424
|
+
// Check if field already exists
|
|
425
|
+
const existingIndex = this.accessMap.sensitiveFields.findIndex(f => f.field === field.field && f.table === field.table);
|
|
426
|
+
if (existingIndex >= 0) {
|
|
427
|
+
this.accessMap.sensitiveFields[existingIndex] = field;
|
|
428
|
+
}
|
|
429
|
+
else {
|
|
430
|
+
this.accessMap.sensitiveFields.push(field);
|
|
431
|
+
}
|
|
432
|
+
// Update table info if table is known
|
|
433
|
+
if (field.table) {
|
|
434
|
+
const tableInfo = this.accessMap.tables[field.table];
|
|
435
|
+
if (tableInfo) {
|
|
436
|
+
const existingSensitive = tableInfo.sensitiveFields.findIndex(f => f.field === field.field);
|
|
437
|
+
if (existingSensitive >= 0) {
|
|
438
|
+
tableInfo.sensitiveFields[existingSensitive] = field;
|
|
439
|
+
}
|
|
440
|
+
else {
|
|
441
|
+
tableInfo.sensitiveFields.push(field);
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
}
|
|
445
|
+
// Update stats
|
|
446
|
+
this.accessMap.stats.totalSensitiveFields = this.accessMap.sensitiveFields.length;
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
// ============================================================================
|
|
450
|
+
// Factory Function
|
|
451
|
+
// ============================================================================
|
|
452
|
+
/**
|
|
453
|
+
* Create a new BoundaryStore instance
|
|
454
|
+
*/
|
|
455
|
+
export function createBoundaryStore(config) {
|
|
456
|
+
return new BoundaryStore(config);
|
|
457
|
+
}
|
|
458
|
+
//# sourceMappingURL=boundary-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"boundary-store.js","sourceRoot":"","sources":["../../src/boundaries/boundary-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data Boundaries Module
|
|
3
|
+
*
|
|
4
|
+
* Exports types and store for tracking data access boundaries.
|
|
5
|
+
*/
|
|
6
|
+
export type { DataOperation, SensitivityType, ORMFramework, ORMModel, SensitiveField, DataAccessPoint, TableAccessInfo, FileAccessInfo, DataAccessMap, BoundarySeverity, BoundaryRule, SensitivityTiers, BoundaryRules, BoundaryViolation, BoundaryStoreConfig, BoundaryScanResult, } from './types.js';
|
|
7
|
+
export { BoundaryStore, createBoundaryStore } from './boundary-store.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/boundaries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,aAAa,EACb,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,eAAe,EACf,eAAe,EACf,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/boundaries/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAsBH,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC"}
|