@aion0/bastion 0.1.12 → 0.1.14
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/README.md +27 -3
- package/README.zh.md +26 -3
- package/dist/classifier/model-manager.d.ts +43 -0
- package/dist/classifier/model-manager.d.ts.map +1 -0
- package/dist/classifier/model-manager.js +161 -0
- package/dist/classifier/model-manager.js.map +1 -0
- package/dist/classifier/onnx-provider.d.ts +22 -0
- package/dist/classifier/onnx-provider.d.ts.map +1 -0
- package/dist/classifier/onnx-provider.js +131 -0
- package/dist/classifier/onnx-provider.js.map +1 -0
- package/dist/cli/commands/plugins.d.ts +3 -0
- package/dist/cli/commands/plugins.d.ts.map +1 -0
- package/dist/cli/commands/plugins.js +201 -0
- package/dist/cli/commands/plugins.js.map +1 -0
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +0 -18
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +2 -2
- package/dist/cli/index.js.map +1 -1
- package/dist/config/paths.d.ts +0 -1
- package/dist/config/paths.d.ts.map +1 -1
- package/dist/config/paths.js +0 -1
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schema.d.ts +28 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/core/bootstrap.d.ts.map +1 -1
- package/dist/core/bootstrap.js +5 -0
- package/dist/core/bootstrap.js.map +1 -1
- package/dist/dashboard/api-routes.d.ts.map +1 -1
- package/dist/dashboard/api-routes.js +91 -50
- package/dist/dashboard/api-routes.js.map +1 -1
- package/dist/dashboard/page.d.ts.map +1 -1
- package/dist/dashboard/page.js +122 -67
- package/dist/dashboard/page.js.map +1 -1
- package/dist/dlp/ai-validator.d.ts.map +1 -1
- package/dist/dlp/ai-validator.js +11 -13
- package/dist/dlp/ai-validator.js.map +1 -1
- package/dist/dlp/heuristic-validator.d.ts +24 -0
- package/dist/dlp/heuristic-validator.d.ts.map +1 -0
- package/dist/dlp/heuristic-validator.js +97 -0
- package/dist/dlp/heuristic-validator.js.map +1 -0
- package/dist/plugins/builtin/dlp-scanner.d.ts.map +1 -1
- package/dist/plugins/builtin/dlp-scanner.js +3 -0
- package/dist/plugins/builtin/dlp-scanner.js.map +1 -1
- package/dist/plugins/builtin/pi-classifier.d.ts +22 -0
- package/dist/plugins/builtin/pi-classifier.d.ts.map +1 -0
- package/dist/plugins/builtin/pi-classifier.js +177 -0
- package/dist/plugins/builtin/pi-classifier.js.map +1 -0
- package/dist/plugins/builtin/threat-scorer.d.ts +6 -0
- package/dist/plugins/builtin/threat-scorer.d.ts.map +1 -0
- package/dist/plugins/builtin/threat-scorer.js +266 -0
- package/dist/plugins/builtin/threat-scorer.js.map +1 -0
- package/dist/plugins/builtin/tool-guard.d.ts.map +1 -1
- package/dist/plugins/builtin/tool-guard.js +14 -43
- package/dist/plugins/builtin/tool-guard.js.map +1 -1
- package/dist/plugins/types.d.ts +3 -0
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/storage/migrations.d.ts.map +1 -1
- package/dist/storage/migrations.js +43 -0
- package/dist/storage/migrations.js.map +1 -1
- package/dist/storage/repositories/taint-marks.d.ts +26 -0
- package/dist/storage/repositories/taint-marks.d.ts.map +1 -0
- package/dist/storage/repositories/taint-marks.js +27 -0
- package/dist/storage/repositories/taint-marks.js.map +1 -0
- package/dist/storage/repositories/threat-score-events.d.ts +27 -0
- package/dist/storage/repositories/threat-score-events.d.ts.map +1 -0
- package/dist/storage/repositories/threat-score-events.js +24 -0
- package/dist/storage/repositories/threat-score-events.js.map +1 -0
- package/dist/storage/repositories/threat-scores.d.ts +26 -0
- package/dist/storage/repositories/threat-scores.d.ts.map +1 -0
- package/dist/storage/repositories/threat-scores.js +42 -0
- package/dist/storage/repositories/threat-scores.js.map +1 -0
- package/dist/storage/repositories/tool-chain-detections.d.ts +24 -0
- package/dist/storage/repositories/tool-chain-detections.d.ts.map +1 -0
- package/dist/storage/repositories/tool-chain-detections.js +27 -0
- package/dist/storage/repositories/tool-chain-detections.js.map +1 -0
- package/dist/tool-guard/chain-detector.d.ts +18 -0
- package/dist/tool-guard/chain-detector.d.ts.map +1 -0
- package/dist/tool-guard/chain-detector.js +55 -0
- package/dist/tool-guard/chain-detector.js.map +1 -0
- package/dist/tool-guard/chain-rules.d.ts +10 -0
- package/dist/tool-guard/chain-rules.d.ts.map +1 -0
- package/dist/tool-guard/chain-rules.js +30 -0
- package/dist/tool-guard/chain-rules.js.map +1 -0
- package/dist/tool-guard/taint-tracker.d.ts +24 -0
- package/dist/tool-guard/taint-tracker.d.ts.map +1 -0
- package/dist/tool-guard/taint-tracker.js +70 -0
- package/dist/tool-guard/taint-tracker.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/commands/pro.d.ts +0 -3
- package/dist/cli/commands/pro.d.ts.map +0 -1
- package/dist/cli/commands/pro.js +0 -261
- package/dist/cli/commands/pro.js.map +0 -1
- package/dist/license/pro-license.d.ts +0 -11
- package/dist/license/pro-license.d.ts.map +0 -1
- package/dist/license/pro-license.js +0 -88
- package/dist/license/pro-license.js.map +0 -1
- package/dist/license/verify.d.ts +0 -18
- package/dist/license/verify.d.ts.map +0 -1
- package/dist/license/verify.js +0 -71
- package/dist/license/verify.js.map +0 -1
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ThreatScoreEventsRepository = void 0;
|
|
4
|
+
class ThreatScoreEventsRepository {
|
|
5
|
+
db;
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
insert(record) {
|
|
10
|
+
this.db.prepare(`
|
|
11
|
+
INSERT INTO threat_score_events (id, session_id, event_type, source_event, points, score_after, level_after)
|
|
12
|
+
VALUES (@id, @session_id, @event_type, @source_event, @points, @score_after, @level_after)
|
|
13
|
+
`).run(record);
|
|
14
|
+
}
|
|
15
|
+
getBySession(sessionId, limit = 50) {
|
|
16
|
+
return this.db.prepare('SELECT * FROM threat_score_events WHERE session_id = ? ORDER BY created_at DESC LIMIT ?').all(sessionId, limit);
|
|
17
|
+
}
|
|
18
|
+
purgeOlderThan(hours) {
|
|
19
|
+
const result = this.db.prepare(`DELETE FROM threat_score_events WHERE created_at < datetime('now', '-' || ? || ' hours')`).run(hours);
|
|
20
|
+
return result.changes;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
exports.ThreatScoreEventsRepository = ThreatScoreEventsRepository;
|
|
24
|
+
//# sourceMappingURL=threat-score-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-score-events.js","sourceRoot":"","sources":["../../../src/storage/repositories/threat-score-events.ts"],"names":[],"mappings":";;;AAaA,MAAa,2BAA2B;IAC9B,EAAE,CAAoB;IAE9B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,MAQN;QACC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGf,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,CAAC;IAED,YAAY,CAAC,SAAiB,EAAE,QAAgB,EAAE;QAChD,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,yFAAyF,CAC1F,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAA6B,CAAC;IACtD,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B,0FAA0F,CAC3F,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACb,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF;AAlCD,kEAkCC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export interface ThreatScoreRecord {
|
|
3
|
+
session_id: string;
|
|
4
|
+
score: number;
|
|
5
|
+
level: string;
|
|
6
|
+
event_count: number;
|
|
7
|
+
last_event_at: string | null;
|
|
8
|
+
updated_at: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class ThreatScoresRepository {
|
|
11
|
+
private db;
|
|
12
|
+
constructor(db: Database.Database);
|
|
13
|
+
upsert(record: {
|
|
14
|
+
session_id: string;
|
|
15
|
+
score: number;
|
|
16
|
+
level: string;
|
|
17
|
+
event_count: number;
|
|
18
|
+
last_event_at: string | null;
|
|
19
|
+
}): void;
|
|
20
|
+
get(sessionId: string): ThreatScoreRecord | null;
|
|
21
|
+
getAll(): ThreatScoreRecord[];
|
|
22
|
+
getElevated(): ThreatScoreRecord[];
|
|
23
|
+
reset(sessionId: string): void;
|
|
24
|
+
purgeOlderThan(hours: number): number;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=threat-scores.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-scores.d.ts","sourceRoot":"","sources":["../../../src/storage/repositories/threat-scores.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,MAAM,CAAC,MAAM,EAAE;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,GAAG,IAAI;IAaR,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAMhD,MAAM,IAAI,iBAAiB,EAAE;IAM7B,WAAW,IAAI,iBAAiB,EAAE;IAMlC,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAO9B,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAMtC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ThreatScoresRepository = void 0;
|
|
4
|
+
class ThreatScoresRepository {
|
|
5
|
+
db;
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
upsert(record) {
|
|
10
|
+
this.db.prepare(`
|
|
11
|
+
INSERT INTO threat_scores (session_id, score, level, event_count, last_event_at, updated_at)
|
|
12
|
+
VALUES (@session_id, @score, @level, @event_count, @last_event_at, datetime('now'))
|
|
13
|
+
ON CONFLICT(session_id) DO UPDATE SET
|
|
14
|
+
score = @score,
|
|
15
|
+
level = @level,
|
|
16
|
+
event_count = @event_count,
|
|
17
|
+
last_event_at = @last_event_at,
|
|
18
|
+
updated_at = datetime('now')
|
|
19
|
+
`).run(record);
|
|
20
|
+
}
|
|
21
|
+
get(sessionId) {
|
|
22
|
+
return this.db.prepare('SELECT * FROM threat_scores WHERE session_id = ?').get(sessionId) ?? null;
|
|
23
|
+
}
|
|
24
|
+
getAll() {
|
|
25
|
+
return this.db.prepare('SELECT * FROM threat_scores ORDER BY updated_at DESC').all();
|
|
26
|
+
}
|
|
27
|
+
getElevated() {
|
|
28
|
+
return this.db.prepare("SELECT * FROM threat_scores WHERE level != 'normal' ORDER BY score DESC").all();
|
|
29
|
+
}
|
|
30
|
+
reset(sessionId) {
|
|
31
|
+
this.db.prepare(`
|
|
32
|
+
UPDATE threat_scores SET score = 0, level = 'normal', event_count = 0, updated_at = datetime('now')
|
|
33
|
+
WHERE session_id = ?
|
|
34
|
+
`).run(sessionId);
|
|
35
|
+
}
|
|
36
|
+
purgeOlderThan(hours) {
|
|
37
|
+
const result = this.db.prepare(`DELETE FROM threat_scores WHERE updated_at < datetime('now', '-' || ? || ' hours')`).run(hours);
|
|
38
|
+
return result.changes;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.ThreatScoresRepository = ThreatScoresRepository;
|
|
42
|
+
//# sourceMappingURL=threat-scores.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-scores.js","sourceRoot":"","sources":["../../../src/storage/repositories/threat-scores.ts"],"names":[],"mappings":";;;AAWA,MAAa,sBAAsB;IACzB,EAAE,CAAoB;IAE9B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,MAMN;QACC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;;;;;;;KASf,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,CAAC;IAED,GAAG,CAAC,SAAiB;QACnB,OAAQ,IAAI,CAAC,EAAE,CAAC,OAAO,CACrB,kDAAkD,CACnD,CAAC,GAAG,CAAC,SAAS,CAAmC,IAAI,IAAI,CAAC;IAC7D,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,sDAAsD,CACvD,CAAC,GAAG,EAAyB,CAAC;IACjC,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,yEAAyE,CAC1E,CAAC,GAAG,EAAyB,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAiB;QACrB,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGf,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACpB,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B,oFAAoF,CACrF,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACb,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF;AAzDD,wDAyDC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type Database from 'better-sqlite3';
|
|
2
|
+
export interface ToolChainDetectionRecord {
|
|
3
|
+
id: string;
|
|
4
|
+
session_id: string;
|
|
5
|
+
rule_id: string;
|
|
6
|
+
matched_sequence: string;
|
|
7
|
+
action: string;
|
|
8
|
+
created_at: string;
|
|
9
|
+
}
|
|
10
|
+
export declare class ToolChainDetectionsRepository {
|
|
11
|
+
private db;
|
|
12
|
+
constructor(db: Database.Database);
|
|
13
|
+
insert(record: {
|
|
14
|
+
id: string;
|
|
15
|
+
session_id: string;
|
|
16
|
+
rule_id: string;
|
|
17
|
+
matched_sequence: string;
|
|
18
|
+
action: string;
|
|
19
|
+
}): void;
|
|
20
|
+
getRecent(limit?: number): ToolChainDetectionRecord[];
|
|
21
|
+
getBySession(sessionId: string): ToolChainDetectionRecord[];
|
|
22
|
+
purgeOlderThan(hours: number): number;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=tool-chain-detections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-chain-detections.d.ts","sourceRoot":"","sources":["../../../src/storage/repositories/tool-chain-detections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAE3C,MAAM,WAAW,wBAAwB;IACvC,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,6BAA6B;IACxC,OAAO,CAAC,EAAE,CAAoB;gBAElB,EAAE,EAAE,QAAQ,CAAC,QAAQ;IAIjC,MAAM,CAAC,MAAM,EAAE;QACb,EAAE,EAAE,MAAM,CAAC;QACX,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,gBAAgB,EAAE,MAAM,CAAC;QACzB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,IAAI;IAOR,SAAS,CAAC,KAAK,GAAE,MAAW,GAAG,wBAAwB,EAAE;IAMzD,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,wBAAwB,EAAE;IAM3D,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;CAMtC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ToolChainDetectionsRepository = void 0;
|
|
4
|
+
class ToolChainDetectionsRepository {
|
|
5
|
+
db;
|
|
6
|
+
constructor(db) {
|
|
7
|
+
this.db = db;
|
|
8
|
+
}
|
|
9
|
+
insert(record) {
|
|
10
|
+
this.db.prepare(`
|
|
11
|
+
INSERT INTO tool_chain_detections (id, session_id, rule_id, matched_sequence, action)
|
|
12
|
+
VALUES (@id, @session_id, @rule_id, @matched_sequence, @action)
|
|
13
|
+
`).run(record);
|
|
14
|
+
}
|
|
15
|
+
getRecent(limit = 50) {
|
|
16
|
+
return this.db.prepare('SELECT * FROM tool_chain_detections ORDER BY created_at DESC LIMIT ?').all(limit);
|
|
17
|
+
}
|
|
18
|
+
getBySession(sessionId) {
|
|
19
|
+
return this.db.prepare('SELECT * FROM tool_chain_detections WHERE session_id = ? ORDER BY created_at DESC').all(sessionId);
|
|
20
|
+
}
|
|
21
|
+
purgeOlderThan(hours) {
|
|
22
|
+
const result = this.db.prepare(`DELETE FROM tool_chain_detections WHERE created_at < datetime('now', '-' || ? || ' hours')`).run(hours);
|
|
23
|
+
return result.changes;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ToolChainDetectionsRepository = ToolChainDetectionsRepository;
|
|
27
|
+
//# sourceMappingURL=tool-chain-detections.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-chain-detections.js","sourceRoot":"","sources":["../../../src/storage/repositories/tool-chain-detections.ts"],"names":[],"mappings":";;;AAWA,MAAa,6BAA6B;IAChC,EAAE,CAAoB;IAE9B,YAAY,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;IAED,MAAM,CAAC,MAMN;QACC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;;;KAGf,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjB,CAAC;IAED,SAAS,CAAC,QAAgB,EAAE;QAC1B,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,sEAAsE,CACvE,CAAC,GAAG,CAAC,KAAK,CAA+B,CAAC;IAC7C,CAAC;IAED,YAAY,CAAC,SAAiB;QAC5B,OAAO,IAAI,CAAC,EAAE,CAAC,OAAO,CACpB,mFAAmF,CACpF,CAAC,GAAG,CAAC,SAAS,CAA+B,CAAC;IACjD,CAAC;IAED,cAAc,CAAC,KAAa;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAC5B,4FAA4F,CAC7F,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACb,OAAO,MAAM,CAAC,OAAO,CAAC;IACxB,CAAC;CACF;AAtCD,sEAsCC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ToolChainRule } from './chain-rules.js';
|
|
2
|
+
export interface ToolCallEntry {
|
|
3
|
+
category: string;
|
|
4
|
+
timestamp: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ToolChainMatch {
|
|
7
|
+
rule: ToolChainRule;
|
|
8
|
+
matchedSequence: string[];
|
|
9
|
+
}
|
|
10
|
+
export declare class ChainDetector {
|
|
11
|
+
private sessionWindows;
|
|
12
|
+
private maxWindowSize;
|
|
13
|
+
constructor(maxWindowSize?: number);
|
|
14
|
+
recordToolCall(sessionId: string, category: string): void;
|
|
15
|
+
checkChains(sessionId: string, rules: ToolChainRule[]): ToolChainMatch | null;
|
|
16
|
+
cleanup(sessionId: string): void;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=chain-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-detector.d.ts","sourceRoot":"","sources":["../../src/tool-guard/chain-detector.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,CAAC;IACpB,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAID,qBAAa,aAAa;IACxB,OAAO,CAAC,cAAc,CAAsC;IAC5D,OAAO,CAAC,aAAa,CAAS;gBAElB,aAAa,GAAE,MAAwB;IAInD,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAazD,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,cAAc,GAAG,IAAI;IAgC7E,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGjC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ChainDetector = void 0;
|
|
4
|
+
const MAX_WINDOW_SIZE = 50;
|
|
5
|
+
class ChainDetector {
|
|
6
|
+
sessionWindows = new Map();
|
|
7
|
+
maxWindowSize;
|
|
8
|
+
constructor(maxWindowSize = MAX_WINDOW_SIZE) {
|
|
9
|
+
this.maxWindowSize = maxWindowSize;
|
|
10
|
+
}
|
|
11
|
+
recordToolCall(sessionId, category) {
|
|
12
|
+
let window = this.sessionWindows.get(sessionId);
|
|
13
|
+
if (!window) {
|
|
14
|
+
window = [];
|
|
15
|
+
this.sessionWindows.set(sessionId, window);
|
|
16
|
+
}
|
|
17
|
+
window.push({ category, timestamp: Date.now() });
|
|
18
|
+
// Trim to max window size
|
|
19
|
+
if (window.length > this.maxWindowSize) {
|
|
20
|
+
window.splice(0, window.length - this.maxWindowSize);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
checkChains(sessionId, rules) {
|
|
24
|
+
const window = this.sessionWindows.get(sessionId);
|
|
25
|
+
if (!window || window.length < 2)
|
|
26
|
+
return null;
|
|
27
|
+
const now = Date.now();
|
|
28
|
+
for (const rule of rules) {
|
|
29
|
+
const windowMs = rule.windowSeconds * 1000;
|
|
30
|
+
// Walk backward through the window looking for the sequence in order
|
|
31
|
+
// The last element of the sequence should be the most recent matching entry
|
|
32
|
+
const seq = rule.sequence;
|
|
33
|
+
let seqIdx = seq.length - 1;
|
|
34
|
+
const matched = new Array(seq.length);
|
|
35
|
+
for (let i = window.length - 1; i >= 0 && seqIdx >= 0; i--) {
|
|
36
|
+
const entry = window[i];
|
|
37
|
+
if (now - entry.timestamp > windowMs)
|
|
38
|
+
break; // outside time window
|
|
39
|
+
if (entry.category === seq[seqIdx]) {
|
|
40
|
+
matched[seqIdx] = entry.category;
|
|
41
|
+
seqIdx--;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (seqIdx < 0) {
|
|
45
|
+
return { rule, matchedSequence: matched };
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
cleanup(sessionId) {
|
|
51
|
+
this.sessionWindows.delete(sessionId);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.ChainDetector = ChainDetector;
|
|
55
|
+
//# sourceMappingURL=chain-detector.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-detector.js","sourceRoot":"","sources":["../../src/tool-guard/chain-detector.ts"],"names":[],"mappings":";;;AAYA,MAAM,eAAe,GAAG,EAAE,CAAC;AAE3B,MAAa,aAAa;IAChB,cAAc,GAAG,IAAI,GAAG,EAA2B,CAAC;IACpD,aAAa,CAAS;IAE9B,YAAY,gBAAwB,eAAe;QACjD,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;IACrC,CAAC;IAED,cAAc,CAAC,SAAiB,EAAE,QAAgB;QAChD,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACjD,0BAA0B;QAC1B,IAAI,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YACvC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,WAAW,CAAC,SAAiB,EAAE,KAAsB;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAE9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEvB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;YAE3C,qEAAqE;YACrE,4EAA4E;YAC5E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC;YAC1B,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;YAC5B,MAAM,OAAO,GAAa,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEhD,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBACxB,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,QAAQ;oBAAE,MAAM,CAAC,sBAAsB;gBACnE,IAAI,KAAK,CAAC,QAAQ,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;oBACnC,OAAO,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;oBACjC,MAAM,EAAE,CAAC;gBACX,CAAC;YACH,CAAC;YAED,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;gBACf,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;CACF;AAxDD,sCAwDC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface ToolChainRule {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
sequence: string[];
|
|
6
|
+
windowSeconds: number;
|
|
7
|
+
action: 'warn' | 'block';
|
|
8
|
+
}
|
|
9
|
+
export declare const BUILTIN_CHAIN_RULES: ToolChainRule[];
|
|
10
|
+
//# sourceMappingURL=chain-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-rules.d.ts","sourceRoot":"","sources":["../../src/tool-guard/chain-rules.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED,eAAO,MAAM,mBAAmB,EAAE,aAAa,EAyB9C,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BUILTIN_CHAIN_RULES = void 0;
|
|
4
|
+
exports.BUILTIN_CHAIN_RULES = [
|
|
5
|
+
{
|
|
6
|
+
id: 'chain-exfil-after-cred',
|
|
7
|
+
name: 'Exfiltration after credential access',
|
|
8
|
+
description: 'Network data transfer detected after credential file access within 5 minutes',
|
|
9
|
+
sequence: ['credential-access', 'network-exfil'],
|
|
10
|
+
windowSeconds: 300,
|
|
11
|
+
action: 'block',
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
id: 'chain-destruct-after-exec',
|
|
15
|
+
name: 'Destructive action after code execution',
|
|
16
|
+
description: 'Destructive filesystem operation detected after remote code execution within 3 minutes',
|
|
17
|
+
sequence: ['code-execution', 'destructive-fs'],
|
|
18
|
+
windowSeconds: 180,
|
|
19
|
+
action: 'warn',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'chain-publish-after-cred',
|
|
23
|
+
name: 'Package publish after credential access',
|
|
24
|
+
description: 'Package publish detected after credential access within 10 minutes',
|
|
25
|
+
sequence: ['credential-access', 'package-publish'],
|
|
26
|
+
windowSeconds: 600,
|
|
27
|
+
action: 'block',
|
|
28
|
+
},
|
|
29
|
+
];
|
|
30
|
+
//# sourceMappingURL=chain-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chain-rules.js","sourceRoot":"","sources":["../../src/tool-guard/chain-rules.ts"],"names":[],"mappings":";;;AASa,QAAA,mBAAmB,GAAoB;IAClD;QACE,EAAE,EAAE,wBAAwB;QAC5B,IAAI,EAAE,sCAAsC;QAC5C,WAAW,EAAE,8EAA8E;QAC3F,QAAQ,EAAE,CAAC,mBAAmB,EAAE,eAAe,CAAC;QAChD,aAAa,EAAE,GAAG;QAClB,MAAM,EAAE,OAAO;KAChB;IACD;QACE,EAAE,EAAE,2BAA2B;QAC/B,IAAI,EAAE,yCAAyC;QAC/C,WAAW,EAAE,wFAAwF;QACrG,QAAQ,EAAE,CAAC,gBAAgB,EAAE,gBAAgB,CAAC;QAC9C,aAAa,EAAE,GAAG;QAClB,MAAM,EAAE,MAAM;KACf;IACD;QACE,EAAE,EAAE,0BAA0B;QAC9B,IAAI,EAAE,yCAAyC;QAC/C,WAAW,EAAE,oEAAoE;QACjF,QAAQ,EAAE,CAAC,mBAAmB,EAAE,iBAAiB,CAAC;QAClD,aAAa,EAAE,GAAG;QAClB,MAAM,EAAE,OAAO;KAChB;CACF,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface TaintMark {
|
|
2
|
+
sessionId: string;
|
|
3
|
+
requestId: string;
|
|
4
|
+
patternName: string;
|
|
5
|
+
fingerprint: string;
|
|
6
|
+
timestamp: number;
|
|
7
|
+
}
|
|
8
|
+
export interface TaintMatch {
|
|
9
|
+
patternName: string;
|
|
10
|
+
fingerprint: string;
|
|
11
|
+
}
|
|
12
|
+
export declare class TaintTracker {
|
|
13
|
+
private sessionTaints;
|
|
14
|
+
private ttlMs;
|
|
15
|
+
constructor(ttlMinutes?: number);
|
|
16
|
+
/** Create a fingerprint from matched content: SHA256 first 16 hex chars */
|
|
17
|
+
static fingerprint(content: string): string;
|
|
18
|
+
markTaint(sessionId: string, requestId: string, patternName: string, matchedContent: string): string;
|
|
19
|
+
/** Check if tool input contains any tainted content fingerprints */
|
|
20
|
+
checkToolInput(sessionId: string, toolInput: string): TaintMatch | null;
|
|
21
|
+
getActiveTaints(sessionId: string): TaintMark[];
|
|
22
|
+
cleanup(sessionId: string): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=taint-tracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taint-tracker.d.ts","sourceRoot":"","sources":["../../src/tool-guard/taint-tracker.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,UAAU;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,aAAa,CAAkC;IACvD,OAAO,CAAC,KAAK,CAAS;gBAEV,UAAU,GAAE,MAAW;IAInC,2EAA2E;IAC3E,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI3C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,GAAG,MAAM;IAiBpG,oEAAoE;IACpE,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAoBvE,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,EAAE;IAa/C,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;CAGjC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.TaintTracker = void 0;
|
|
7
|
+
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
8
|
+
class TaintTracker {
|
|
9
|
+
sessionTaints = new Map();
|
|
10
|
+
ttlMs;
|
|
11
|
+
constructor(ttlMinutes = 60) {
|
|
12
|
+
this.ttlMs = ttlMinutes * 60 * 1000;
|
|
13
|
+
}
|
|
14
|
+
/** Create a fingerprint from matched content: SHA256 first 16 hex chars */
|
|
15
|
+
static fingerprint(content) {
|
|
16
|
+
return node_crypto_1.default.createHash('sha256').update(content).digest('hex').slice(0, 16);
|
|
17
|
+
}
|
|
18
|
+
markTaint(sessionId, requestId, patternName, matchedContent) {
|
|
19
|
+
const fingerprint = TaintTracker.fingerprint(matchedContent);
|
|
20
|
+
let taints = this.sessionTaints.get(sessionId);
|
|
21
|
+
if (!taints) {
|
|
22
|
+
taints = [];
|
|
23
|
+
this.sessionTaints.set(sessionId, taints);
|
|
24
|
+
}
|
|
25
|
+
taints.push({
|
|
26
|
+
sessionId,
|
|
27
|
+
requestId,
|
|
28
|
+
patternName,
|
|
29
|
+
fingerprint,
|
|
30
|
+
timestamp: Date.now(),
|
|
31
|
+
});
|
|
32
|
+
return fingerprint;
|
|
33
|
+
}
|
|
34
|
+
/** Check if tool input contains any tainted content fingerprints */
|
|
35
|
+
checkToolInput(sessionId, toolInput) {
|
|
36
|
+
const taints = this.getActiveTaints(sessionId);
|
|
37
|
+
if (taints.length === 0)
|
|
38
|
+
return null;
|
|
39
|
+
// Generate sliding-window fingerprints from tool input and check against taints
|
|
40
|
+
// For efficiency, we check if any taint fingerprint appears as a substring hash
|
|
41
|
+
for (const taint of taints) {
|
|
42
|
+
// Check if the fingerprinted content appears in tool input by re-hashing substrings
|
|
43
|
+
// This is a simplified approach: we hash various substrings of the input
|
|
44
|
+
// For practical use, we check if the original matched content reappears
|
|
45
|
+
// by comparing fingerprints of input chunks
|
|
46
|
+
const inputFingerprint = TaintTracker.fingerprint(toolInput);
|
|
47
|
+
if (inputFingerprint === taint.fingerprint) {
|
|
48
|
+
return { patternName: taint.patternName, fingerprint: taint.fingerprint };
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
getActiveTaints(sessionId) {
|
|
54
|
+
const taints = this.sessionTaints.get(sessionId);
|
|
55
|
+
if (!taints)
|
|
56
|
+
return [];
|
|
57
|
+
const cutoff = Date.now() - this.ttlMs;
|
|
58
|
+
// Remove expired taints
|
|
59
|
+
const active = taints.filter(t => t.timestamp > cutoff);
|
|
60
|
+
if (active.length !== taints.length) {
|
|
61
|
+
this.sessionTaints.set(sessionId, active);
|
|
62
|
+
}
|
|
63
|
+
return active;
|
|
64
|
+
}
|
|
65
|
+
cleanup(sessionId) {
|
|
66
|
+
this.sessionTaints.delete(sessionId);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
exports.TaintTracker = TaintTracker;
|
|
70
|
+
//# sourceMappingURL=taint-tracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taint-tracker.js","sourceRoot":"","sources":["../../src/tool-guard/taint-tracker.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAiC;AAejC,MAAa,YAAY;IACf,aAAa,GAAG,IAAI,GAAG,EAAuB,CAAC;IAC/C,KAAK,CAAS;IAEtB,YAAY,aAAqB,EAAE;QACjC,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,EAAE,GAAG,IAAI,CAAC;IACtC,CAAC;IAED,2EAA2E;IAC3E,MAAM,CAAC,WAAW,CAAC,OAAe;QAChC,OAAO,qBAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,SAAS,CAAC,SAAiB,EAAE,SAAiB,EAAE,WAAmB,EAAE,cAAsB;QACzF,MAAM,WAAW,GAAG,YAAY,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;QAC7D,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,GAAG,EAAE,CAAC;YACZ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,CAAC,IAAI,CAAC;YACV,SAAS;YACT,SAAS;YACT,WAAW;YACX,WAAW;YACX,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,oEAAoE;IACpE,cAAc,CAAC,SAAiB,EAAE,SAAiB;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;QAC/C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAErC,gFAAgF;QAChF,gFAAgF;QAChF,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,oFAAoF;YACpF,yEAAyE;YACzE,wEAAwE;YACxE,4CAA4C;YAC5C,MAAM,gBAAgB,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YAC7D,IAAI,gBAAgB,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC;gBAC3C,OAAO,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,eAAe,CAAC,SAAiB;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEvB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACvC,wBAAwB;QACxB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;QACxD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YACpC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,CAAC,SAAiB;QACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvC,CAAC;CACF;AAnED,oCAmEC"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pro.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuKzC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkIzD"}
|