scriptguard 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.
Files changed (50) hide show
  1. package/README.md +430 -0
  2. package/dist/ai/analyzers/false-positive-filter.d.ts +15 -0
  3. package/dist/ai/analyzers/false-positive-filter.d.ts.map +1 -0
  4. package/dist/ai/analyzers/false-positive-filter.js +162 -0
  5. package/dist/ai/analyzers/false-positive-filter.js.map +1 -0
  6. package/dist/ai/analyzers/insight-generator.d.ts +7 -0
  7. package/dist/ai/analyzers/insight-generator.d.ts.map +1 -0
  8. package/dist/ai/analyzers/insight-generator.js +384 -0
  9. package/dist/ai/analyzers/insight-generator.js.map +1 -0
  10. package/dist/ai/analyzers/threat-detector.d.ts +7 -0
  11. package/dist/ai/analyzers/threat-detector.d.ts.map +1 -0
  12. package/dist/ai/analyzers/threat-detector.js +249 -0
  13. package/dist/ai/analyzers/threat-detector.js.map +1 -0
  14. package/dist/ai/gemini-client.d.ts +47 -0
  15. package/dist/ai/gemini-client.d.ts.map +1 -0
  16. package/dist/ai/gemini-client.js +222 -0
  17. package/dist/ai/gemini-client.js.map +1 -0
  18. package/dist/ai/index.d.ts +8 -0
  19. package/dist/ai/index.d.ts.map +1 -0
  20. package/dist/ai/index.js +19 -0
  21. package/dist/ai/index.js.map +1 -0
  22. package/dist/ai/prompts.d.ts +11 -0
  23. package/dist/ai/prompts.d.ts.map +1 -0
  24. package/dist/ai/prompts.js +212 -0
  25. package/dist/ai/prompts.js.map +1 -0
  26. package/dist/cli.d.ts +4 -0
  27. package/dist/cli.d.ts.map +1 -0
  28. package/dist/cli.js +283 -0
  29. package/dist/cli.js.map +1 -0
  30. package/dist/index.d.ts +6 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +16 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/scanners/index.d.ts +10 -0
  35. package/dist/scanners/index.d.ts.map +1 -0
  36. package/dist/scanners/index.js +202 -0
  37. package/dist/scanners/index.js.map +1 -0
  38. package/dist/scanners/lifecycle.d.ts +10 -0
  39. package/dist/scanners/lifecycle.d.ts.map +1 -0
  40. package/dist/scanners/lifecycle.js +202 -0
  41. package/dist/scanners/lifecycle.js.map +1 -0
  42. package/dist/scanners/patterns.d.ts +4 -0
  43. package/dist/scanners/patterns.d.ts.map +1 -0
  44. package/dist/scanners/patterns.js +188 -0
  45. package/dist/scanners/patterns.js.map +1 -0
  46. package/dist/types/index.d.ts +123 -0
  47. package/dist/types/index.d.ts.map +1 -0
  48. package/dist/types/index.js +4 -0
  49. package/dist/types/index.js.map +1 -0
  50. package/package.json +46 -0
package/dist/cli.js ADDED
@@ -0,0 +1,283 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ /** ScriptGuard — CLI entry point */
4
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
5
+ if (k2 === undefined) k2 = k;
6
+ var desc = Object.getOwnPropertyDescriptor(m, k);
7
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
8
+ desc = { enumerable: true, get: function() { return m[k]; } };
9
+ }
10
+ Object.defineProperty(o, k2, desc);
11
+ }) : (function(o, m, k, k2) {
12
+ if (k2 === undefined) k2 = k;
13
+ o[k2] = m[k];
14
+ }));
15
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
16
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
17
+ }) : function(o, v) {
18
+ o["default"] = v;
19
+ });
20
+ var __importStar = (this && this.__importStar) || (function () {
21
+ var ownKeys = function(o) {
22
+ ownKeys = Object.getOwnPropertyNames || function (o) {
23
+ var ar = [];
24
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
25
+ return ar;
26
+ };
27
+ return ownKeys(o);
28
+ };
29
+ return function (mod) {
30
+ if (mod && mod.__esModule) return mod;
31
+ var result = {};
32
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
33
+ __setModuleDefault(result, mod);
34
+ return result;
35
+ };
36
+ })();
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ const commander_1 = require("commander");
39
+ const fs = __importStar(require("node:fs"));
40
+ const path = __importStar(require("node:path"));
41
+ const index_js_1 = require("./scanners/index.js");
42
+ const RISK_ICONS = {
43
+ low: '⚪',
44
+ medium: '🟡',
45
+ high: '🟠',
46
+ critical: '🔴',
47
+ };
48
+ const RISK_COLORS = {
49
+ low: '\x1b[37m',
50
+ medium: '\x1b[33m',
51
+ high: '\x1b[38;5;208m',
52
+ critical: '\x1b[31m',
53
+ };
54
+ const RESET = '\x1b[0m';
55
+ const BOLD = '\x1b[1m';
56
+ const DIM = '\x1b[2m';
57
+ const GREEN = '\x1b[32m';
58
+ function bold(text) {
59
+ return `${BOLD}${text}${RESET}`;
60
+ }
61
+ function dim(text) {
62
+ return `${DIM}${text}${RESET}`;
63
+ }
64
+ function colorRisk(level) {
65
+ return `${RISK_COLORS[level]}${level.toUpperCase()}${RESET}`;
66
+ }
67
+ function formatTable(result) {
68
+ const lines = [];
69
+ lines.push('');
70
+ lines.push(bold(' 🔒 ScriptGuard — npm Lifecycle Script Security Scanner'));
71
+ lines.push('');
72
+ lines.push(` Scanned ${bold(String(result.totalPackages))} packages (${result.packagesWithScripts} with lifecycle scripts) in ${result.scanDurationMs}ms`);
73
+ lines.push('');
74
+ if (result.totalFindings === 0) {
75
+ lines.push(` ${GREEN}✅ No suspicious lifecycle scripts detected${RESET}`);
76
+ lines.push('');
77
+ return lines.join('\n');
78
+ }
79
+ // Summary
80
+ lines.push(bold(' Summary'));
81
+ lines.push(` Overall Risk: ${colorRisk(result.overallRiskLevel)} (${result.overallRiskScore}/100)`);
82
+ lines.push(` Findings: ${result.totalFindings} total — ${RISK_ICONS.critical} ${result.findingsByLevel.critical} critical | ${RISK_ICONS.high} ${result.findingsByLevel.high} high | ${RISK_ICONS.medium} ${result.findingsByLevel.medium} medium | ${RISK_ICONS.low} ${result.findingsByLevel.low} low`);
83
+ // AI Analysis Summary
84
+ if (result.aiAnalysis) {
85
+ lines.push('');
86
+ lines.push(bold(' AI Analysis'));
87
+ lines.push(` False positives filtered: ${GREEN}${result.aiAnalysis.totalFalsePositivesFiltered}${RESET}`);
88
+ lines.push(` New threats detected: ${RISK_ICONS.high} ${result.aiAnalysis.totalNewThreatsDetected}${RESET}`);
89
+ lines.push(` Tokens used: ${dim(String(result.aiAnalysis.totalTokensUsed))}`);
90
+ lines.push(` AI duration: ${dim(result.aiAnalysis.durationMs + 'ms')}`);
91
+ }
92
+ lines.push('');
93
+ // Per-package findings
94
+ lines.push(bold(' Findings'));
95
+ lines.push(' ' + '─'.repeat(70));
96
+ for (const analysis of result.analyses) {
97
+ if (analysis.findings.length === 0)
98
+ continue;
99
+ lines.push('');
100
+ lines.push(` ${bold(analysis.name)}${dim('@' + analysis.version)} ${colorRisk(analysis.riskLevel)} [${analysis.riskScore}/100]`);
101
+ for (const finding of analysis.findings) {
102
+ lines.push(` ${RISK_ICONS[finding.riskLevel]} ${colorRisk(finding.riskLevel)} ${finding.pattern}`);
103
+ lines.push(` ${dim(finding.description)}`);
104
+ if (finding.match) {
105
+ const truncated = finding.match.length > 60 ? finding.match.substring(0, 57) + '...' : finding.match;
106
+ lines.push(` ${dim('Match:')} ${truncated}`);
107
+ }
108
+ // Display AI insights if available
109
+ if (finding.aiAnalysis && finding.aiAnalysis.insights.length > 0) {
110
+ for (const insight of finding.aiAnalysis.insights) {
111
+ const insightIcon = insight.type === 'false-positive' ? '✅' : '⚠️';
112
+ lines.push(` ${dim(insightIcon)} ${dim(insight.description)}`);
113
+ if (insight.attackTechnique) {
114
+ lines.push(` ${dim('Technique:')} ${dim(insight.attackTechnique)}`);
115
+ }
116
+ if (insight.remediation) {
117
+ lines.push(` ${dim('Remediation:')} ${dim(insight.remediation.substring(0, 80) + (insight.remediation.length > 80 ? '...' : ''))}`);
118
+ }
119
+ }
120
+ }
121
+ }
122
+ }
123
+ lines.push('');
124
+ lines.push(' ' + '─'.repeat(70));
125
+ if (result.aiAnalysis) {
126
+ lines.push(` ${dim('Run with --format json for machine-readable output')}`);
127
+ lines.push(` ${dim('Run with --ai to enable AI analysis')}`);
128
+ }
129
+ else {
130
+ lines.push(` ${dim('Run with --format json for machine-readable output')}`);
131
+ lines.push(` ${dim('Run with --ai to enable AI analysis (requires GOOGLE_AI_API_KEY)')}`);
132
+ }
133
+ lines.push('');
134
+ return lines.join('\n');
135
+ }
136
+ function formatJson(result) {
137
+ return JSON.stringify(result, null, 2);
138
+ }
139
+ function formatSarif(result) {
140
+ const sarif = {
141
+ $schema: 'https://raw.githubusercontent.com/oasis-tcs/sarif-spec/main/sarif-2.1/schema/sarif-schema-2.1.0.json',
142
+ version: '2.1.0',
143
+ runs: [{
144
+ tool: {
145
+ driver: {
146
+ name: 'ScriptGuard',
147
+ version: '1.0.0',
148
+ informationUri: 'https://github.com/ferrierepete/scriptguard',
149
+ rules: result.analyses.flatMap((a) => a.findings.map((f) => ({
150
+ id: f.pattern,
151
+ shortDescription: { text: f.description },
152
+ defaultConfiguration: { level: sarifLevel(f.riskLevel) },
153
+ }))),
154
+ },
155
+ },
156
+ results: result.analyses.flatMap((a) => a.findings.map((f) => ({
157
+ ruleId: f.pattern,
158
+ level: sarifLevel(f.riskLevel),
159
+ message: { text: `[${a.name}] ${f.scriptName}: ${f.description}` },
160
+ locations: [{
161
+ physicalLocation: {
162
+ artifactLocation: { uri: `node_modules/${a.name}/package.json` },
163
+ },
164
+ }],
165
+ }))),
166
+ }],
167
+ };
168
+ return JSON.stringify(sarif, null, 2);
169
+ }
170
+ function sarifLevel(level) {
171
+ switch (level) {
172
+ case 'critical':
173
+ case 'high': return 'error';
174
+ case 'medium': return 'warning';
175
+ case 'low': return 'note';
176
+ }
177
+ }
178
+ const program = new commander_1.Command();
179
+ program
180
+ .name('scriptguard')
181
+ .description('Security scanner for npm package lifecycle scripts')
182
+ .version('1.0.0');
183
+ program
184
+ .command('scan')
185
+ .description('Scan installed npm packages for malicious lifecycle scripts')
186
+ .option('-p, --path <path>', 'Project path', process.cwd())
187
+ .option('--include-dev', 'Include devDependencies', false)
188
+ .option('--min-risk <level>', 'Minimum risk level to report (low/medium/high/critical)', 'low')
189
+ .option('--fail-on <level>', 'Exit with code 1 if findings at or above this level', '')
190
+ .option('-f, --format <format>', 'Output format (table/json/sarif)', 'table')
191
+ .option('--ai', 'Enable AI analysis with Gemini API')
192
+ .option('--ai-mode <mode>', 'AI analysis depth (basic/standard/thorough)', 'standard')
193
+ .option('--ai-mitigation', 'Include remediation recommendations in AI output', true)
194
+ .option('--ai-max-tokens <number>', 'Maximum tokens per AI request', '1000')
195
+ .option('--ai-timeout <ms>', 'AI request timeout in milliseconds', '10000')
196
+ .action(async (opts) => {
197
+ const minRisk = (opts.minRisk || 'low');
198
+ const format = opts.format || 'table';
199
+ const failLevel = opts.failOn ? opts.failOn : undefined;
200
+ // Check for AI API key if AI is enabled
201
+ if (opts.ai && !process.env.GOOGLE_AI_API_KEY) {
202
+ console.error('\n ❌ Error: GOOGLE_AI_API_KEY environment variable not set');
203
+ console.error(' Get your key at: https://makersuite.google.com/app/apikey\n');
204
+ console.error(' Then run: export GOOGLE_AI_API_KEY=your_key_here\n');
205
+ process.exit(2);
206
+ }
207
+ try {
208
+ // Build AI options if enabled
209
+ const aiOptions = opts.ai ? {
210
+ enabled: true,
211
+ mode: opts.aiMode || 'standard',
212
+ mitigation: opts.aiMitigation !== false,
213
+ maxTokens: parseInt(opts.aiMaxTokens || '1000'),
214
+ timeout: parseInt(opts.aiTimeout || '10000'),
215
+ } : undefined;
216
+ let result = await (0, index_js_1.scanProject)({
217
+ path: opts.path || process.cwd(),
218
+ includeDev: opts.includeDev || false,
219
+ minRiskLevel: minRisk,
220
+ format,
221
+ failLevel,
222
+ ai: aiOptions,
223
+ });
224
+ if (minRisk !== 'low') {
225
+ result = {
226
+ ...result,
227
+ analyses: (0, index_js_1.filterByRiskLevel)(result.analyses, minRisk),
228
+ };
229
+ }
230
+ const output = format === 'json' ? formatJson(result)
231
+ : format === 'sarif' ? formatSarif(result)
232
+ : formatTable(result);
233
+ console.log(output);
234
+ if (failLevel && (0, index_js_1.shouldFail)(result, failLevel)) {
235
+ process.exit(1);
236
+ }
237
+ }
238
+ catch (err) {
239
+ console.error(`\n ❌ Error: ${err.message}\n`);
240
+ process.exit(2);
241
+ }
242
+ });
243
+ program
244
+ .command('check')
245
+ .description('Check a single package.json for risky lifecycle scripts')
246
+ .argument('<path>', 'Path to package.json')
247
+ .option('-f, --format <format>', 'Output format (table/json/sarif)', 'table')
248
+ .action((filePath, opts) => {
249
+ const resolved = path.resolve(filePath);
250
+ if (!fs.existsSync(resolved)) {
251
+ console.error(`\n ❌ File not found: ${resolved}\n`);
252
+ process.exit(2);
253
+ }
254
+ const result = (0, index_js_1.scanPackageJson)(resolved);
255
+ const format = opts.format || 'table';
256
+ const output = format === 'json' ? formatJson(result)
257
+ : format === 'sarif' ? formatSarif(result)
258
+ : formatTable(result);
259
+ console.log(output);
260
+ });
261
+ program
262
+ .command('patterns')
263
+ .description('List all detection patterns')
264
+ .action(async () => {
265
+ const { PATTERN_RULES } = await import('./scanners/patterns.js');
266
+ console.log('\n 🔒 ScriptGuard Detection Patterns\n');
267
+ const byCategory = new Map();
268
+ for (const rule of PATTERN_RULES) {
269
+ const list = byCategory.get(rule.category) || [];
270
+ list.push(rule);
271
+ byCategory.set(rule.category, list);
272
+ }
273
+ for (const [category, rules] of byCategory) {
274
+ console.log(` ${bold(category.toUpperCase())}`);
275
+ for (const rule of rules) {
276
+ console.log(` ${RISK_ICONS[rule.riskLevel]} ${rule.name} ${dim('[' + rule.riskLevel + ']')}`);
277
+ console.log(` ${dim(rule.description)}`);
278
+ }
279
+ console.log('');
280
+ }
281
+ });
282
+ program.parse();
283
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /** ScriptGuard — Public API exports */
2
+ export { scanProject, scanPackageJson, shouldFail, filterByRiskLevel } from './scanners/index.js';
3
+ export { analyzePackage, scanInstalledPackages, scanSinglePackage } from './scanners/lifecycle.js';
4
+ export { PATTERN_RULES } from './scanners/patterns.js';
5
+ export type { Finding, PackageAnalysis, ScanResult, ScanOptions, PatternRule, RiskLevel, } from './types/index.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AAEvC,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACnG,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,YAAY,EACV,OAAO,EACP,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,SAAS,GACV,MAAM,kBAAkB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ /** ScriptGuard — Public API exports */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.PATTERN_RULES = exports.scanSinglePackage = exports.scanInstalledPackages = exports.analyzePackage = exports.filterByRiskLevel = exports.shouldFail = exports.scanPackageJson = exports.scanProject = void 0;
5
+ var index_js_1 = require("./scanners/index.js");
6
+ Object.defineProperty(exports, "scanProject", { enumerable: true, get: function () { return index_js_1.scanProject; } });
7
+ Object.defineProperty(exports, "scanPackageJson", { enumerable: true, get: function () { return index_js_1.scanPackageJson; } });
8
+ Object.defineProperty(exports, "shouldFail", { enumerable: true, get: function () { return index_js_1.shouldFail; } });
9
+ Object.defineProperty(exports, "filterByRiskLevel", { enumerable: true, get: function () { return index_js_1.filterByRiskLevel; } });
10
+ var lifecycle_js_1 = require("./scanners/lifecycle.js");
11
+ Object.defineProperty(exports, "analyzePackage", { enumerable: true, get: function () { return lifecycle_js_1.analyzePackage; } });
12
+ Object.defineProperty(exports, "scanInstalledPackages", { enumerable: true, get: function () { return lifecycle_js_1.scanInstalledPackages; } });
13
+ Object.defineProperty(exports, "scanSinglePackage", { enumerable: true, get: function () { return lifecycle_js_1.scanSinglePackage; } });
14
+ var patterns_js_1 = require("./scanners/patterns.js");
15
+ Object.defineProperty(exports, "PATTERN_RULES", { enumerable: true, get: function () { return patterns_js_1.PATTERN_RULES; } });
16
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA,uCAAuC;;;AAEvC,gDAAkG;AAAzF,uGAAA,WAAW,OAAA;AAAE,2GAAA,eAAe,OAAA;AAAE,sGAAA,UAAU,OAAA;AAAE,6GAAA,iBAAiB,OAAA;AACpE,wDAAmG;AAA1F,8GAAA,cAAc,OAAA;AAAE,qHAAA,qBAAqB,OAAA;AAAE,iHAAA,iBAAiB,OAAA;AACjE,sDAAuD;AAA9C,4GAAA,aAAa,OAAA"}
@@ -0,0 +1,10 @@
1
+ /** ScriptGuard — Aggregate scanner */
2
+ import type { ScanResult, ScanOptions, RiskLevel, PackageAnalysis, AIOptions } from '../types/index.js';
3
+ export declare function scanProject(options: ScanOptions & {
4
+ ai?: AIOptions;
5
+ }): Promise<ScanResult>;
6
+ export declare function scanProjectSync(options: ScanOptions): ScanResult;
7
+ export declare function scanPackageJson(filePath: string): ScanResult;
8
+ export declare function shouldFail(result: ScanResult, failLevel?: RiskLevel): boolean;
9
+ export declare function filterByRiskLevel(analyses: PackageAnalysis[], minLevel: RiskLevel): PackageAnalysis[];
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanners/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,eAAe,EAAE,SAAS,EAAkB,MAAM,mBAAmB,CAAC;AAsDxH,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG;IAAE,EAAE,CAAC,EAAE,SAAS,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAiBhG;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAIhE;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU,CAS5D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,EAAE,SAAS,GAAG,OAAO,CAM7E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,QAAQ,EAAE,SAAS,GAAG,eAAe,EAAE,CAQrG"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ /** ScriptGuard — Aggregate scanner */
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ exports.scanProject = scanProject;
38
+ exports.scanProjectSync = scanProjectSync;
39
+ exports.scanPackageJson = scanPackageJson;
40
+ exports.shouldFail = shouldFail;
41
+ exports.filterByRiskLevel = filterByRiskLevel;
42
+ const lifecycle_js_1 = require("./lifecycle.js");
43
+ const index_js_1 = require("../ai/index.js");
44
+ const fs = __importStar(require("node:fs"));
45
+ const path = __importStar(require("node:path"));
46
+ const RISK_LEVEL_ORDER = {
47
+ low: 0,
48
+ medium: 1,
49
+ high: 2,
50
+ critical: 3,
51
+ };
52
+ function aggregateResults(analyses, startTime) {
53
+ const totalFindings = analyses.reduce((sum, a) => sum + a.findings.length, 0);
54
+ const findingsByLevel = { low: 0, medium: 0, high: 0, critical: 0 };
55
+ for (const a of analyses) {
56
+ for (const f of a.findings) {
57
+ findingsByLevel[f.riskLevel]++;
58
+ }
59
+ }
60
+ const packagesWithScripts = analyses.filter((a) => Object.keys(a.scripts).length > 0).length;
61
+ let overallRiskScore = 0;
62
+ if (analyses.length > 0) {
63
+ const total = analyses.reduce((sum, a) => sum + a.riskScore, 0);
64
+ overallRiskScore = Math.round(total / analyses.length);
65
+ // Weight by max finding
66
+ const maxScore = Math.max(...analyses.map((a) => a.riskScore));
67
+ overallRiskScore = Math.min(100, Math.round(overallRiskScore * 0.3 + maxScore * 0.7));
68
+ }
69
+ let overallRiskLevel = 'low';
70
+ if (findingsByLevel.critical > 0)
71
+ overallRiskLevel = 'critical';
72
+ else if (findingsByLevel.high > 0)
73
+ overallRiskLevel = 'high';
74
+ else if (findingsByLevel.medium > 0)
75
+ overallRiskLevel = 'medium';
76
+ return {
77
+ totalPackages: analyses.length,
78
+ packagesWithScripts,
79
+ analyses,
80
+ totalFindings,
81
+ findingsByLevel,
82
+ overallRiskScore,
83
+ overallRiskLevel,
84
+ scanDurationMs: Date.now() - startTime,
85
+ };
86
+ }
87
+ async function scanProject(options) {
88
+ const startTime = Date.now();
89
+ const analyses = (0, lifecycle_js_1.scanInstalledPackages)(options.path, options.includeDev);
90
+ let result = aggregateResults(analyses, startTime);
91
+ // Phase 2: AI analysis (opt-in)
92
+ if (options.ai?.enabled) {
93
+ try {
94
+ result = await enrichWithAI(result, options.ai);
95
+ }
96
+ catch (error) {
97
+ // Graceful degradation - return regex-only results on AI failure
98
+ console.warn(`\n ⚠️ AI analysis failed: ${error.message}`);
99
+ console.warn(' Continuing with regex-based scanning only.\n');
100
+ }
101
+ }
102
+ return result;
103
+ }
104
+ function scanProjectSync(options) {
105
+ const startTime = Date.now();
106
+ const analyses = (0, lifecycle_js_1.scanInstalledPackages)(options.path, options.includeDev);
107
+ return aggregateResults(analyses, startTime);
108
+ }
109
+ function scanPackageJson(filePath) {
110
+ const startTime = Date.now();
111
+ const content = fs.readFileSync(filePath, 'utf-8');
112
+ const analysis = (0, lifecycle_js_1.analyzePackage)(JSON.parse(content).name || path.basename(path.dirname(filePath)), JSON.parse(content).version || 'unknown', JSON.parse(content).scripts || {});
113
+ return aggregateResults([analysis], startTime);
114
+ }
115
+ function shouldFail(result, failLevel) {
116
+ if (!failLevel)
117
+ return false;
118
+ const threshold = RISK_LEVEL_ORDER[failLevel];
119
+ return result.analyses.some((a) => a.findings.some((f) => RISK_LEVEL_ORDER[f.riskLevel] >= threshold));
120
+ }
121
+ function filterByRiskLevel(analyses, minLevel) {
122
+ const threshold = RISK_LEVEL_ORDER[minLevel];
123
+ return analyses
124
+ .map((a) => ({
125
+ ...a,
126
+ findings: a.findings.filter((f) => RISK_LEVEL_ORDER[f.riskLevel] >= threshold),
127
+ }))
128
+ .filter((a) => a.findings.length > 0);
129
+ }
130
+ /**
131
+ * Enrich scan results with AI analysis
132
+ */
133
+ async function enrichWithAI(result, aiOptions) {
134
+ const aiStartTime = Date.now();
135
+ // Prepare batch request with packages that have findings or lifecycle scripts
136
+ const packagesToAnalyze = result.analyses.filter(a => a.findings.length > 0 || Object.keys(a.scripts).length > 0);
137
+ if (packagesToAnalyze.length === 0) {
138
+ return result;
139
+ }
140
+ // Build batch request
141
+ const batchRequest = {
142
+ packages: packagesToAnalyze.map(a => ({
143
+ name: a.name,
144
+ version: a.version,
145
+ scripts: a.scripts,
146
+ findings: a.findings,
147
+ })),
148
+ mode: aiOptions.mode || 'standard',
149
+ };
150
+ // Call Gemini API
151
+ const client = (0, index_js_1.getGeminiClient)(aiOptions.apiKey);
152
+ const aiResponse = await client.analyzeBatch(batchRequest);
153
+ // Merge AI results back into analyses
154
+ const aiAnalyses = new Map(aiResponse.analyses.map(a => [`${a.package}@${a.version}`, a]));
155
+ let totalFalsePositivesFiltered = 0;
156
+ let totalNewThreatsDetected = 0;
157
+ for (const analysis of result.analyses) {
158
+ const key = `${analysis.name}@${analysis.version}`;
159
+ const aiAnalysis = aiAnalyses.get(key);
160
+ if (aiAnalysis) {
161
+ // Add AI analysis to findings
162
+ for (const finding of analysis.findings) {
163
+ finding.aiAnalysis = aiAnalysis;
164
+ }
165
+ totalFalsePositivesFiltered += aiAnalysis.falsePositivesFiltered;
166
+ totalNewThreatsDetected += aiAnalysis.newThreatsDetected;
167
+ // Update risk score based on AI insights
168
+ if (aiAnalysis.insights.length > 0) {
169
+ const maxInsightSeverity = aiAnalysis.insights.reduce((max, insight) => {
170
+ const severityOrder = { low: 0, medium: 1, high: 2, critical: 3 };
171
+ return Math.max(max, severityOrder[insight.severity]);
172
+ }, 0);
173
+ // Adjust risk score based on AI confidence
174
+ if (maxInsightSeverity >= 3 && aiAnalysis.confidence > 0.7) {
175
+ analysis.riskScore = Math.min(100, analysis.riskScore + 20);
176
+ }
177
+ else if (maxInsightSeverity === 0 && aiAnalysis.falsePositivesFiltered > 0) {
178
+ // Lower risk if AI identified false positives
179
+ analysis.riskScore = Math.max(0, analysis.riskScore - 30);
180
+ }
181
+ // Recalculate risk level
182
+ if (analysis.riskScore >= 75)
183
+ analysis.riskLevel = 'critical';
184
+ else if (analysis.riskScore >= 50)
185
+ analysis.riskLevel = 'high';
186
+ else if (analysis.riskScore >= 25)
187
+ analysis.riskLevel = 'medium';
188
+ else
189
+ analysis.riskLevel = 'low';
190
+ }
191
+ }
192
+ }
193
+ // Add AI summary to result
194
+ result.aiAnalysis = {
195
+ totalTokensUsed: aiResponse.totalTokensUsed,
196
+ totalFalsePositivesFiltered,
197
+ totalNewThreatsDetected,
198
+ durationMs: Date.now() - aiStartTime,
199
+ };
200
+ return result;
201
+ }
202
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanners/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /** ScriptGuard — Lifecycle script parser — reads package.json files from node_modules */
2
+ import type { PackageAnalysis, RiskLevel } from '../types/index.js';
3
+ declare function extractLifecycleScripts(scripts: Record<string, string>): Record<string, string>;
4
+ declare function calculateRiskScore(findings: PackageAnalysis['findings']): number;
5
+ declare function riskLevelFromScore(score: number): RiskLevel;
6
+ export declare function analyzePackage(name: string, version: string, scripts: Record<string, string>): PackageAnalysis;
7
+ export declare function scanInstalledPackages(projectPath: string, includeDev?: boolean): PackageAnalysis[];
8
+ export declare function scanSinglePackage(pkgJsonContent: string): PackageAnalysis;
9
+ export { extractLifecycleScripts, calculateRiskScore, riskLevelFromScore };
10
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/scanners/lifecycle.ts"],"names":[],"mappings":"AAAA,yFAAyF;AAIzF,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAoCpE,iBAAS,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAQxF;AA4BD,iBAAS,kBAAkB,CAAC,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,GAAG,MAAM,CAKzE;AAED,iBAAS,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAKpD;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,eAAe,CAgCjB;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,eAAe,EAAE,CAuDhG;AAED,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,MAAM,GAAG,eAAe,CAOzE;AAED,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,CAAC"}