@weave_protocol/domere 1.0.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/PLANNING.md +231 -0
- package/README.md +50 -0
- package/dist/anchoring/ethereum.d.ts +135 -0
- package/dist/anchoring/ethereum.d.ts.map +1 -0
- package/dist/anchoring/ethereum.js +474 -0
- package/dist/anchoring/ethereum.js.map +1 -0
- package/dist/anchoring/index.d.ts +93 -0
- package/dist/anchoring/index.d.ts.map +1 -0
- package/dist/anchoring/index.js +184 -0
- package/dist/anchoring/index.js.map +1 -0
- package/dist/anchoring/merkle.d.ts +91 -0
- package/dist/anchoring/merkle.d.ts.map +1 -0
- package/dist/anchoring/merkle.js +203 -0
- package/dist/anchoring/merkle.js.map +1 -0
- package/dist/anchoring/solana.d.ts +85 -0
- package/dist/anchoring/solana.d.ts.map +1 -0
- package/dist/anchoring/solana.js +301 -0
- package/dist/anchoring/solana.js.map +1 -0
- package/dist/constants.d.ts +130 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +536 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/language/code-analyzer.d.ts +80 -0
- package/dist/language/code-analyzer.d.ts.map +1 -0
- package/dist/language/code-analyzer.js +489 -0
- package/dist/language/code-analyzer.js.map +1 -0
- package/dist/language/detector.d.ts +53 -0
- package/dist/language/detector.d.ts.map +1 -0
- package/dist/language/detector.js +248 -0
- package/dist/language/detector.js.map +1 -0
- package/dist/language/index.d.ts +61 -0
- package/dist/language/index.d.ts.map +1 -0
- package/dist/language/index.js +109 -0
- package/dist/language/index.js.map +1 -0
- package/dist/language/nl-analyzer.d.ts +59 -0
- package/dist/language/nl-analyzer.d.ts.map +1 -0
- package/dist/language/nl-analyzer.js +350 -0
- package/dist/language/nl-analyzer.js.map +1 -0
- package/dist/language/semantic.d.ts +48 -0
- package/dist/language/semantic.d.ts.map +1 -0
- package/dist/language/semantic.js +329 -0
- package/dist/language/semantic.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +6 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/memory.d.ts +48 -0
- package/dist/storage/memory.d.ts.map +1 -0
- package/dist/storage/memory.js +211 -0
- package/dist/storage/memory.js.map +1 -0
- package/dist/thread/drift.d.ts +43 -0
- package/dist/thread/drift.d.ts.map +1 -0
- package/dist/thread/drift.js +248 -0
- package/dist/thread/drift.js.map +1 -0
- package/dist/thread/index.d.ts +9 -0
- package/dist/thread/index.d.ts.map +1 -0
- package/dist/thread/index.js +9 -0
- package/dist/thread/index.js.map +1 -0
- package/dist/thread/intent.d.ts +68 -0
- package/dist/thread/intent.d.ts.map +1 -0
- package/dist/thread/intent.js +333 -0
- package/dist/thread/intent.js.map +1 -0
- package/dist/thread/manager.d.ts +85 -0
- package/dist/thread/manager.d.ts.map +1 -0
- package/dist/thread/manager.js +305 -0
- package/dist/thread/manager.js.map +1 -0
- package/dist/thread/weave.d.ts +61 -0
- package/dist/thread/weave.d.ts.map +1 -0
- package/dist/thread/weave.js +158 -0
- package/dist/thread/weave.js.map +1 -0
- package/dist/tools/index.d.ts +18 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +102 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types.d.ts +466 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +48 -0
- package/dist/types.js.map +1 -0
- package/package.json +24 -0
- package/src/anchoring/ethereum.ts +568 -0
- package/src/anchoring/index.ts +236 -0
- package/src/anchoring/merkle.ts +256 -0
- package/src/anchoring/solana.ts +370 -0
- package/src/constants.ts +566 -0
- package/src/index.ts +43 -0
- package/src/language/code-analyzer.ts +564 -0
- package/src/language/detector.ts +297 -0
- package/src/language/index.ts +129 -0
- package/src/language/nl-analyzer.ts +411 -0
- package/src/language/semantic.ts +385 -0
- package/src/storage/index.ts +6 -0
- package/src/storage/memory.ts +271 -0
- package/src/thread/drift.ts +319 -0
- package/src/thread/index.ts +9 -0
- package/src/thread/intent.ts +409 -0
- package/src/thread/manager.ts +414 -0
- package/src/thread/weave.ts +205 -0
- package/src/tools/index.ts +107 -0
- package/src/types.ts +736 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,oCAAoC,CAAC;AAEnG,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACjG,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;AACxC,MAAM,WAAW,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,CAAC;AAEnD,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC;AAExF,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;IAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IACjD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,IAAI,EAAE,IAA+B,CAAC,CAAC;QACnF,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACxG,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;AAC7C,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1D,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,CAAC;AAC3C,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dōmere - The Judge Protocol
|
|
3
|
+
* Code Analysis
|
|
4
|
+
*/
|
|
5
|
+
import type { CodeAnalysis, DangerousPattern, DataFlow, ExternalCall, LanguageType } from '../types.js';
|
|
6
|
+
export declare class CodeAnalyzer {
|
|
7
|
+
/**
|
|
8
|
+
* Analyze code for security and structure
|
|
9
|
+
*/
|
|
10
|
+
analyze(code: string, language: LanguageType): CodeAnalysis;
|
|
11
|
+
/**
|
|
12
|
+
* Detect dangerous code patterns
|
|
13
|
+
*/
|
|
14
|
+
detectDangerousPatterns(code: string, language: LanguageType): DangerousPattern[];
|
|
15
|
+
/**
|
|
16
|
+
* Analyze data flows in code
|
|
17
|
+
*/
|
|
18
|
+
analyzeDataFlows(code: string, language: LanguageType): DataFlow[];
|
|
19
|
+
/**
|
|
20
|
+
* Detect external calls
|
|
21
|
+
*/
|
|
22
|
+
detectExternalCalls(code: string, language: LanguageType): ExternalCall[];
|
|
23
|
+
/**
|
|
24
|
+
* Extract function definitions
|
|
25
|
+
*/
|
|
26
|
+
extractFunctions(code: string, language: LanguageType): string[];
|
|
27
|
+
/**
|
|
28
|
+
* Extract class definitions
|
|
29
|
+
*/
|
|
30
|
+
extractClasses(code: string, language: LanguageType): string[];
|
|
31
|
+
/**
|
|
32
|
+
* Extract imports
|
|
33
|
+
*/
|
|
34
|
+
extractImports(code: string, language: LanguageType): string[];
|
|
35
|
+
/**
|
|
36
|
+
* Extract exports
|
|
37
|
+
*/
|
|
38
|
+
extractExports(code: string, language: LanguageType): string[];
|
|
39
|
+
/**
|
|
40
|
+
* Calculate code complexity
|
|
41
|
+
*/
|
|
42
|
+
calculateComplexity(code: string): number;
|
|
43
|
+
/**
|
|
44
|
+
* Calculate overall risk level
|
|
45
|
+
*/
|
|
46
|
+
private calculateRiskLevel;
|
|
47
|
+
/**
|
|
48
|
+
* Generate recommendations
|
|
49
|
+
*/
|
|
50
|
+
private generateRecommendations;
|
|
51
|
+
/**
|
|
52
|
+
* Get line number from character position
|
|
53
|
+
*/
|
|
54
|
+
private getLineNumber;
|
|
55
|
+
/**
|
|
56
|
+
* Get column number from character position
|
|
57
|
+
*/
|
|
58
|
+
private getColumnNumber;
|
|
59
|
+
/**
|
|
60
|
+
* Get recommendation based on issue
|
|
61
|
+
*/
|
|
62
|
+
private getRecommendation;
|
|
63
|
+
/**
|
|
64
|
+
* Check if a data flow is sensitive
|
|
65
|
+
*/
|
|
66
|
+
private isSensitiveFlow;
|
|
67
|
+
/**
|
|
68
|
+
* Assess URL risk
|
|
69
|
+
*/
|
|
70
|
+
private assessUrlRisk;
|
|
71
|
+
/**
|
|
72
|
+
* Assess SQL query risk
|
|
73
|
+
*/
|
|
74
|
+
private assessQueryRisk;
|
|
75
|
+
/**
|
|
76
|
+
* Assess file path risk
|
|
77
|
+
*/
|
|
78
|
+
private assessFileRisk;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=code-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-analyzer.d.ts","sourceRoot":"","sources":["../../src/language/code-analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,YAAY,EACb,MAAM,aAAa,CAAC;AAOrB,qBAAa,YAAY;IACvB;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY;IAuB3D;;OAEG;IACH,uBAAuB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,gBAAgB,EAAE;IAoDjF;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,QAAQ,EAAE;IAgGlE;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,YAAY,EAAE;IAkFzE;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IA4BhE;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IA0B9D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IA0B9D;;OAEG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE;IAqB9D;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAgCzC;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAiB1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAwB/B;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAQrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAWvB;;OAEG;IACH,OAAO,CAAC,cAAc;CASvB"}
|
|
@@ -0,0 +1,489 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dōmere - The Judge Protocol
|
|
3
|
+
* Code Analysis
|
|
4
|
+
*/
|
|
5
|
+
import { DANGEROUS_CODE_PATTERNS } from '../constants.js';
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Code Analyzer
|
|
8
|
+
// ============================================================================
|
|
9
|
+
export class CodeAnalyzer {
|
|
10
|
+
/**
|
|
11
|
+
* Analyze code for security and structure
|
|
12
|
+
*/
|
|
13
|
+
analyze(code, language) {
|
|
14
|
+
const dangerousPatterns = this.detectDangerousPatterns(code, language);
|
|
15
|
+
const dataFlows = this.analyzeDataFlows(code, language);
|
|
16
|
+
const externalCalls = this.detectExternalCalls(code, language);
|
|
17
|
+
const riskLevel = this.calculateRiskLevel(dangerousPatterns, dataFlows, externalCalls);
|
|
18
|
+
return {
|
|
19
|
+
language,
|
|
20
|
+
functions: this.extractFunctions(code, language),
|
|
21
|
+
classes: this.extractClasses(code, language),
|
|
22
|
+
imports: this.extractImports(code, language),
|
|
23
|
+
exports: this.extractExports(code, language),
|
|
24
|
+
dangerous_patterns: dangerousPatterns,
|
|
25
|
+
data_flows: dataFlows,
|
|
26
|
+
external_calls: externalCalls,
|
|
27
|
+
complexity_score: this.calculateComplexity(code),
|
|
28
|
+
sandbox_required: riskLevel !== 'low',
|
|
29
|
+
risk_level: riskLevel,
|
|
30
|
+
recommendations: this.generateRecommendations(dangerousPatterns, externalCalls),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Detect dangerous code patterns
|
|
35
|
+
*/
|
|
36
|
+
detectDangerousPatterns(code, language) {
|
|
37
|
+
const patterns = [];
|
|
38
|
+
// Get language-specific patterns
|
|
39
|
+
const langPatterns = DANGEROUS_CODE_PATTERNS[language];
|
|
40
|
+
if (langPatterns) {
|
|
41
|
+
for (const { pattern, description, severity } of langPatterns) {
|
|
42
|
+
const regex = new RegExp(pattern.source, pattern.flags);
|
|
43
|
+
let match;
|
|
44
|
+
while ((match = regex.exec(code)) !== null) {
|
|
45
|
+
const line = this.getLineNumber(code, match.index);
|
|
46
|
+
const column = this.getColumnNumber(code, match.index);
|
|
47
|
+
patterns.push({
|
|
48
|
+
pattern: match[0],
|
|
49
|
+
description,
|
|
50
|
+
severity,
|
|
51
|
+
line,
|
|
52
|
+
column,
|
|
53
|
+
recommendation: this.getRecommendation(description, severity),
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// Common patterns across languages
|
|
59
|
+
const commonPatterns = [
|
|
60
|
+
{ pattern: /password\s*=\s*['"][^'"]+['"]/gi, description: 'Hardcoded password', severity: 'critical' },
|
|
61
|
+
{ pattern: /api[_-]?key\s*=\s*['"][^'"]+['"]/gi, description: 'Hardcoded API key', severity: 'critical' },
|
|
62
|
+
{ pattern: /secret\s*=\s*['"][^'"]+['"]/gi, description: 'Hardcoded secret', severity: 'critical' },
|
|
63
|
+
{ pattern: /TODO|FIXME|HACK|XXX/g, description: 'Code annotation suggesting incomplete work', severity: 'low' },
|
|
64
|
+
];
|
|
65
|
+
for (const { pattern, description, severity } of commonPatterns) {
|
|
66
|
+
let match;
|
|
67
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
68
|
+
const line = this.getLineNumber(code, match.index);
|
|
69
|
+
patterns.push({
|
|
70
|
+
pattern: match[0].slice(0, 50), // Truncate for security
|
|
71
|
+
description,
|
|
72
|
+
severity,
|
|
73
|
+
line,
|
|
74
|
+
recommendation: this.getRecommendation(description, severity),
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return patterns;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Analyze data flows in code
|
|
82
|
+
*/
|
|
83
|
+
analyzeDataFlows(code, language) {
|
|
84
|
+
const flows = [];
|
|
85
|
+
// Detect input -> output flows
|
|
86
|
+
const inputPatterns = {
|
|
87
|
+
javascript: [
|
|
88
|
+
/req\.(body|query|params|headers)/g,
|
|
89
|
+
/process\.env/g,
|
|
90
|
+
/fs\.readFile/g,
|
|
91
|
+
/fetch\s*\(/g,
|
|
92
|
+
],
|
|
93
|
+
python: [
|
|
94
|
+
/request\.(form|args|json|data)/g,
|
|
95
|
+
/os\.environ/g,
|
|
96
|
+
/open\s*\(/g,
|
|
97
|
+
/requests\.(get|post)/g,
|
|
98
|
+
/input\s*\(/g,
|
|
99
|
+
],
|
|
100
|
+
sql: [
|
|
101
|
+
/SELECT\s+.*\s+FROM/gi,
|
|
102
|
+
],
|
|
103
|
+
};
|
|
104
|
+
const outputPatterns = {
|
|
105
|
+
javascript: [
|
|
106
|
+
/res\.(send|json|write)/g,
|
|
107
|
+
/console\.(log|error)/g,
|
|
108
|
+
/fs\.writeFile/g,
|
|
109
|
+
/fetch\s*\(/g,
|
|
110
|
+
],
|
|
111
|
+
python: [
|
|
112
|
+
/return\s+/g,
|
|
113
|
+
/print\s*\(/g,
|
|
114
|
+
/\.write\s*\(/g,
|
|
115
|
+
/requests\.(get|post)/g,
|
|
116
|
+
],
|
|
117
|
+
sql: [
|
|
118
|
+
/INSERT\s+INTO/gi,
|
|
119
|
+
/UPDATE\s+/gi,
|
|
120
|
+
],
|
|
121
|
+
};
|
|
122
|
+
const inputs = inputPatterns[language] || [];
|
|
123
|
+
const outputs = outputPatterns[language] || [];
|
|
124
|
+
const inputMatches = [];
|
|
125
|
+
const outputMatches = [];
|
|
126
|
+
for (const pattern of inputs) {
|
|
127
|
+
const matches = code.match(pattern);
|
|
128
|
+
if (matches)
|
|
129
|
+
inputMatches.push(...matches);
|
|
130
|
+
}
|
|
131
|
+
for (const pattern of outputs) {
|
|
132
|
+
const matches = code.match(pattern);
|
|
133
|
+
if (matches)
|
|
134
|
+
outputMatches.push(...matches);
|
|
135
|
+
}
|
|
136
|
+
// Create flow pairs
|
|
137
|
+
for (const input of inputMatches) {
|
|
138
|
+
for (const output of outputMatches) {
|
|
139
|
+
flows.push({
|
|
140
|
+
source: input,
|
|
141
|
+
destination: output,
|
|
142
|
+
sensitive: this.isSensitiveFlow(input, output),
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
// Detect sensitive data patterns
|
|
147
|
+
const sensitivePatterns = [
|
|
148
|
+
/password/i, /secret/i, /token/i, /key/i, /credential/i,
|
|
149
|
+
/ssn/i, /social.*security/i, /credit.*card/i,
|
|
150
|
+
];
|
|
151
|
+
for (const pattern of sensitivePatterns) {
|
|
152
|
+
if (pattern.test(code)) {
|
|
153
|
+
// Look for where this data goes
|
|
154
|
+
const varPattern = new RegExp(`(\\w+)\\s*=.*${pattern.source}`, 'gi');
|
|
155
|
+
const matches = code.match(varPattern);
|
|
156
|
+
if (matches) {
|
|
157
|
+
for (const match of matches) {
|
|
158
|
+
flows.push({
|
|
159
|
+
source: match,
|
|
160
|
+
destination: 'unknown',
|
|
161
|
+
data_type: pattern.source.replace(/[\\^$*+?.()|[\]{}]/g, ''),
|
|
162
|
+
sensitive: true,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
return flows;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Detect external calls
|
|
172
|
+
*/
|
|
173
|
+
detectExternalCalls(code, language) {
|
|
174
|
+
const calls = [];
|
|
175
|
+
// HTTP calls
|
|
176
|
+
const httpPatterns = [
|
|
177
|
+
{ pattern: /fetch\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'http' },
|
|
178
|
+
{ pattern: /axios\.(get|post|put|delete)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'http' },
|
|
179
|
+
{ pattern: /requests\.(get|post|put|delete)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'http' },
|
|
180
|
+
{ pattern: /http\.(get|post|put|delete)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'http' },
|
|
181
|
+
{ pattern: /curl\s+['"`]?([^\s'"`]+)/g, type: 'http' },
|
|
182
|
+
{ pattern: /wget\s+['"`]?([^\s'"`]+)/g, type: 'http' },
|
|
183
|
+
];
|
|
184
|
+
for (const { pattern, type } of httpPatterns) {
|
|
185
|
+
let match;
|
|
186
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
187
|
+
const url = match[2] || match[1];
|
|
188
|
+
calls.push({
|
|
189
|
+
type,
|
|
190
|
+
target: url,
|
|
191
|
+
method: match[1]?.toUpperCase(),
|
|
192
|
+
risk_level: this.assessUrlRisk(url),
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Database calls
|
|
197
|
+
const dbPatterns = [
|
|
198
|
+
{ pattern: /\.query\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'database' },
|
|
199
|
+
{ pattern: /\.execute\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'database' },
|
|
200
|
+
{ pattern: /cursor\.execute\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'database' },
|
|
201
|
+
];
|
|
202
|
+
for (const { pattern, type } of dbPatterns) {
|
|
203
|
+
let match;
|
|
204
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
205
|
+
calls.push({
|
|
206
|
+
type,
|
|
207
|
+
target: match[1].slice(0, 100), // Truncate long queries
|
|
208
|
+
risk_level: this.assessQueryRisk(match[1]),
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
// File system calls
|
|
213
|
+
const fsPatterns = [
|
|
214
|
+
{ pattern: /(?:fs\.|open\s*\()['"`]([^'"`]+)['"`]/g, type: 'file' },
|
|
215
|
+
{ pattern: /(?:readFile|writeFile|appendFile)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'file' },
|
|
216
|
+
];
|
|
217
|
+
for (const { pattern, type } of fsPatterns) {
|
|
218
|
+
let match;
|
|
219
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
220
|
+
calls.push({
|
|
221
|
+
type,
|
|
222
|
+
target: match[1],
|
|
223
|
+
risk_level: this.assessFileRisk(match[1]),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Process/command execution
|
|
228
|
+
const processPatterns = [
|
|
229
|
+
{ pattern: /(?:exec|spawn|system)\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'process' },
|
|
230
|
+
{ pattern: /subprocess\.(call|run|Popen)\s*\(\s*\[?['"`]([^'"`]+)['"`]/g, type: 'process' },
|
|
231
|
+
{ pattern: /os\.system\s*\(\s*['"`]([^'"`]+)['"`]/g, type: 'process' },
|
|
232
|
+
];
|
|
233
|
+
for (const { pattern, type } of processPatterns) {
|
|
234
|
+
let match;
|
|
235
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
236
|
+
calls.push({
|
|
237
|
+
type,
|
|
238
|
+
target: match[1] || match[2],
|
|
239
|
+
risk_level: 'high',
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
return calls;
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* Extract function definitions
|
|
247
|
+
*/
|
|
248
|
+
extractFunctions(code, language) {
|
|
249
|
+
const functions = [];
|
|
250
|
+
const patterns = {
|
|
251
|
+
javascript: /(?:function\s+(\w+)|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[^=])\s*=>|(\w+)\s*:\s*(?:async\s+)?function)/g,
|
|
252
|
+
typescript: /(?:function\s+(\w+)|(?:const|let|var)\s+(\w+)\s*=\s*(?:async\s+)?(?:\([^)]*\)|[^=])\s*=>|(\w+)\s*:\s*(?:async\s+)?function)/g,
|
|
253
|
+
python: /def\s+(\w+)\s*\(/g,
|
|
254
|
+
java: /(?:public|private|protected)?\s*(?:static\s+)?(?:\w+\s+)+(\w+)\s*\([^)]*\)\s*(?:throws\s+\w+\s*)?{/g,
|
|
255
|
+
go: /func\s+(?:\([^)]+\)\s+)?(\w+)\s*\(/g,
|
|
256
|
+
rust: /fn\s+(\w+)\s*[<(]/g,
|
|
257
|
+
ruby: /def\s+(\w+)/g,
|
|
258
|
+
php: /function\s+(\w+)\s*\(/g,
|
|
259
|
+
};
|
|
260
|
+
const pattern = patterns[language];
|
|
261
|
+
if (pattern) {
|
|
262
|
+
let match;
|
|
263
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
264
|
+
const name = match[1] || match[2] || match[3];
|
|
265
|
+
if (name && !functions.includes(name)) {
|
|
266
|
+
functions.push(name);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return functions;
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Extract class definitions
|
|
274
|
+
*/
|
|
275
|
+
extractClasses(code, language) {
|
|
276
|
+
const classes = [];
|
|
277
|
+
const patterns = {
|
|
278
|
+
javascript: /class\s+(\w+)/g,
|
|
279
|
+
typescript: /class\s+(\w+)/g,
|
|
280
|
+
python: /class\s+(\w+)/g,
|
|
281
|
+
java: /class\s+(\w+)/g,
|
|
282
|
+
csharp: /class\s+(\w+)/g,
|
|
283
|
+
ruby: /class\s+(\w+)/g,
|
|
284
|
+
php: /class\s+(\w+)/g,
|
|
285
|
+
};
|
|
286
|
+
const pattern = patterns[language];
|
|
287
|
+
if (pattern) {
|
|
288
|
+
let match;
|
|
289
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
290
|
+
if (!classes.includes(match[1])) {
|
|
291
|
+
classes.push(match[1]);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
return classes;
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Extract imports
|
|
299
|
+
*/
|
|
300
|
+
extractImports(code, language) {
|
|
301
|
+
const imports = [];
|
|
302
|
+
const patterns = {
|
|
303
|
+
javascript: /(?:import\s+.*\s+from\s+['"]([^'"]+)['"]|require\s*\(\s*['"]([^'"]+)['"]\s*\))/g,
|
|
304
|
+
typescript: /(?:import\s+.*\s+from\s+['"]([^'"]+)['"]|require\s*\(\s*['"]([^'"]+)['"]\s*\))/g,
|
|
305
|
+
python: /(?:import\s+(\w+)|from\s+(\w+)\s+import)/g,
|
|
306
|
+
java: /import\s+([\w.]+);/g,
|
|
307
|
+
go: /import\s+(?:\(\s*)?["']([^"']+)["']/g,
|
|
308
|
+
rust: /use\s+([\w:]+)/g,
|
|
309
|
+
};
|
|
310
|
+
const pattern = patterns[language];
|
|
311
|
+
if (pattern) {
|
|
312
|
+
let match;
|
|
313
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
314
|
+
const imp = match[1] || match[2];
|
|
315
|
+
if (imp && !imports.includes(imp)) {
|
|
316
|
+
imports.push(imp);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
return imports;
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Extract exports
|
|
324
|
+
*/
|
|
325
|
+
extractExports(code, language) {
|
|
326
|
+
const exports = [];
|
|
327
|
+
const patterns = {
|
|
328
|
+
javascript: /export\s+(?:default\s+)?(?:class|function|const|let|var|interface|type)?\s*(\w+)/g,
|
|
329
|
+
typescript: /export\s+(?:default\s+)?(?:class|function|const|let|var|interface|type)?\s*(\w+)/g,
|
|
330
|
+
};
|
|
331
|
+
const pattern = patterns[language];
|
|
332
|
+
if (pattern) {
|
|
333
|
+
let match;
|
|
334
|
+
while ((match = pattern.exec(code)) !== null) {
|
|
335
|
+
if (match[1] && !exports.includes(match[1])) {
|
|
336
|
+
exports.push(match[1]);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return exports;
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* Calculate code complexity
|
|
344
|
+
*/
|
|
345
|
+
calculateComplexity(code) {
|
|
346
|
+
let complexity = 1; // Base complexity
|
|
347
|
+
// Count decision points
|
|
348
|
+
const decisionPatterns = [
|
|
349
|
+
/\bif\b/g,
|
|
350
|
+
/\belse\s+if\b/g,
|
|
351
|
+
/\bwhile\b/g,
|
|
352
|
+
/\bfor\b/g,
|
|
353
|
+
/\bforeach\b/g,
|
|
354
|
+
/\bswitch\b/g,
|
|
355
|
+
/\bcase\b/g,
|
|
356
|
+
/\bcatch\b/g,
|
|
357
|
+
/\?\s*[^:]+\s*:/g, // Ternary
|
|
358
|
+
/&&/g,
|
|
359
|
+
/\|\|/g,
|
|
360
|
+
];
|
|
361
|
+
for (const pattern of decisionPatterns) {
|
|
362
|
+
const matches = code.match(pattern);
|
|
363
|
+
if (matches) {
|
|
364
|
+
complexity += matches.length;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// Normalize (0-100 scale)
|
|
368
|
+
const lines = code.split('\n').length;
|
|
369
|
+
const normalizedComplexity = Math.min(100, (complexity / Math.max(1, lines / 10)) * 10);
|
|
370
|
+
return Math.round(normalizedComplexity);
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Calculate overall risk level
|
|
374
|
+
*/
|
|
375
|
+
calculateRiskLevel(patterns, flows, calls) {
|
|
376
|
+
const criticalPatterns = patterns.filter(p => p.severity === 'critical').length;
|
|
377
|
+
const highPatterns = patterns.filter(p => p.severity === 'high').length;
|
|
378
|
+
const sensitiveFlows = flows.filter(f => f.sensitive).length;
|
|
379
|
+
const highRiskCalls = calls.filter(c => c.risk_level === 'high').length;
|
|
380
|
+
if (criticalPatterns > 0)
|
|
381
|
+
return 'critical';
|
|
382
|
+
if (highPatterns > 2 || sensitiveFlows > 2 || highRiskCalls > 1)
|
|
383
|
+
return 'high';
|
|
384
|
+
if (highPatterns > 0 || sensitiveFlows > 0 || highRiskCalls > 0)
|
|
385
|
+
return 'medium';
|
|
386
|
+
return 'low';
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Generate recommendations
|
|
390
|
+
*/
|
|
391
|
+
generateRecommendations(patterns, calls) {
|
|
392
|
+
const recommendations = [];
|
|
393
|
+
for (const pattern of patterns) {
|
|
394
|
+
if (pattern.recommendation && !recommendations.includes(pattern.recommendation)) {
|
|
395
|
+
recommendations.push(pattern.recommendation);
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
if (calls.some(c => c.type === 'process')) {
|
|
399
|
+
recommendations.push('Review process execution calls for potential command injection');
|
|
400
|
+
}
|
|
401
|
+
if (calls.some(c => c.type === 'database')) {
|
|
402
|
+
recommendations.push('Ensure database queries use parameterized statements');
|
|
403
|
+
}
|
|
404
|
+
if (calls.some(c => c.type === 'file')) {
|
|
405
|
+
recommendations.push('Validate file paths to prevent directory traversal');
|
|
406
|
+
}
|
|
407
|
+
return recommendations.slice(0, 5);
|
|
408
|
+
}
|
|
409
|
+
/**
|
|
410
|
+
* Get line number from character position
|
|
411
|
+
*/
|
|
412
|
+
getLineNumber(code, position) {
|
|
413
|
+
return code.slice(0, position).split('\n').length;
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Get column number from character position
|
|
417
|
+
*/
|
|
418
|
+
getColumnNumber(code, position) {
|
|
419
|
+
const lines = code.slice(0, position).split('\n');
|
|
420
|
+
return lines[lines.length - 1].length + 1;
|
|
421
|
+
}
|
|
422
|
+
/**
|
|
423
|
+
* Get recommendation based on issue
|
|
424
|
+
*/
|
|
425
|
+
getRecommendation(description, severity) {
|
|
426
|
+
const recommendations = {
|
|
427
|
+
'eval': 'Avoid eval() - use safer alternatives like JSON.parse() or specific parsers',
|
|
428
|
+
'exec': 'Avoid direct command execution - use libraries with proper escaping',
|
|
429
|
+
'sql injection': 'Use parameterized queries or an ORM',
|
|
430
|
+
'password': 'Move credentials to environment variables or a secrets manager',
|
|
431
|
+
'api key': 'Move API keys to environment variables or a secrets manager',
|
|
432
|
+
};
|
|
433
|
+
for (const [key, rec] of Object.entries(recommendations)) {
|
|
434
|
+
if (description.toLowerCase().includes(key)) {
|
|
435
|
+
return rec;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
return severity === 'critical'
|
|
439
|
+
? 'Review this pattern carefully before deployment'
|
|
440
|
+
: 'Consider reviewing this pattern';
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Check if a data flow is sensitive
|
|
444
|
+
*/
|
|
445
|
+
isSensitiveFlow(source, destination) {
|
|
446
|
+
const sensitiveTerms = ['password', 'secret', 'token', 'key', 'credential', 'auth'];
|
|
447
|
+
const combined = (source + destination).toLowerCase();
|
|
448
|
+
return sensitiveTerms.some(term => combined.includes(term));
|
|
449
|
+
}
|
|
450
|
+
/**
|
|
451
|
+
* Assess URL risk
|
|
452
|
+
*/
|
|
453
|
+
assessUrlRisk(url) {
|
|
454
|
+
// External URLs are higher risk
|
|
455
|
+
if (url.startsWith('http://'))
|
|
456
|
+
return 'high'; // Insecure
|
|
457
|
+
if (url.includes('localhost') || url.includes('127.0.0.1'))
|
|
458
|
+
return 'low';
|
|
459
|
+
if (url.startsWith('/'))
|
|
460
|
+
return 'low'; // Relative
|
|
461
|
+
return 'medium';
|
|
462
|
+
}
|
|
463
|
+
/**
|
|
464
|
+
* Assess SQL query risk
|
|
465
|
+
*/
|
|
466
|
+
assessQueryRisk(query) {
|
|
467
|
+
const queryUpper = query.toUpperCase();
|
|
468
|
+
if (queryUpper.includes('DROP') || queryUpper.includes('DELETE') || queryUpper.includes('TRUNCATE')) {
|
|
469
|
+
return 'high';
|
|
470
|
+
}
|
|
471
|
+
if (queryUpper.includes('UPDATE') || queryUpper.includes('INSERT')) {
|
|
472
|
+
return 'medium';
|
|
473
|
+
}
|
|
474
|
+
return 'low';
|
|
475
|
+
}
|
|
476
|
+
/**
|
|
477
|
+
* Assess file path risk
|
|
478
|
+
*/
|
|
479
|
+
assessFileRisk(path) {
|
|
480
|
+
if (path.includes('..') || path.startsWith('/etc') || path.startsWith('/var')) {
|
|
481
|
+
return 'high';
|
|
482
|
+
}
|
|
483
|
+
if (path.startsWith('/')) {
|
|
484
|
+
return 'medium';
|
|
485
|
+
}
|
|
486
|
+
return 'low';
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
//# sourceMappingURL=code-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"code-analyzer.js","sourceRoot":"","sources":["../../src/language/code-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dōmere - The Judge Protocol
|
|
3
|
+
* Language Detection
|
|
4
|
+
*/
|
|
5
|
+
import type { LanguageAnalysis, DetectedLanguage, LanguageType } from '../types.js';
|
|
6
|
+
export declare class LanguageDetector {
|
|
7
|
+
/**
|
|
8
|
+
* Detect the primary language(s) in content
|
|
9
|
+
*/
|
|
10
|
+
detect(content: string): LanguageAnalysis;
|
|
11
|
+
/**
|
|
12
|
+
* Detect all languages present in content
|
|
13
|
+
*/
|
|
14
|
+
detectLanguages(content: string): DetectedLanguage[];
|
|
15
|
+
/**
|
|
16
|
+
* Detect a specific language in content
|
|
17
|
+
*/
|
|
18
|
+
private detectLanguage;
|
|
19
|
+
/**
|
|
20
|
+
* Check if content is likely natural language (not code)
|
|
21
|
+
*/
|
|
22
|
+
private isLikelyNaturalLanguage;
|
|
23
|
+
/**
|
|
24
|
+
* Determine the primary language
|
|
25
|
+
*/
|
|
26
|
+
private determinePrimaryLanguage;
|
|
27
|
+
/**
|
|
28
|
+
* Merge overlapping segments
|
|
29
|
+
*/
|
|
30
|
+
private mergeSegments;
|
|
31
|
+
/**
|
|
32
|
+
* Escape regex special characters
|
|
33
|
+
*/
|
|
34
|
+
private escapeRegex;
|
|
35
|
+
/**
|
|
36
|
+
* Check if content is a specific language type
|
|
37
|
+
*/
|
|
38
|
+
isLanguage(content: string, language: LanguageType): boolean;
|
|
39
|
+
/**
|
|
40
|
+
* Check if content contains code
|
|
41
|
+
*/
|
|
42
|
+
containsCode(content: string): boolean;
|
|
43
|
+
/**
|
|
44
|
+
* Extract code blocks from content
|
|
45
|
+
*/
|
|
46
|
+
extractCodeBlocks(content: string): {
|
|
47
|
+
language: string;
|
|
48
|
+
code: string;
|
|
49
|
+
start: number;
|
|
50
|
+
end: number;
|
|
51
|
+
}[];
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/language/detector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,gBAAgB,EAChB,gBAAgB,EAEhB,YAAY,EACb,MAAM,aAAa,CAAC;AAOrB,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IAWzC;;OAEG;IACH,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,EAAE;IAgEpD;;OAEG;IACH,OAAO,CAAC,cAAc;IAsDtB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAa/B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAchC;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,WAAW;IAInB;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO;IAK5D;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAetC;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE;CAqCrG"}
|