safe-pkg 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 (88) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +304 -0
  3. package/dist/.DS_Store +0 -0
  4. package/dist/cli/index.d.ts +5 -0
  5. package/dist/cli/index.js +135 -0
  6. package/dist/cli/index.js.map +1 -0
  7. package/dist/cli/parser.d.ts +5 -0
  8. package/dist/cli/parser.js +61 -0
  9. package/dist/cli/parser.js.map +1 -0
  10. package/dist/config/index.d.ts +1 -0
  11. package/dist/config/index.js +3 -0
  12. package/dist/config/index.js.map +1 -0
  13. package/dist/config/loadConfig.d.ts +5 -0
  14. package/dist/config/loadConfig.js +49 -0
  15. package/dist/config/loadConfig.js.map +1 -0
  16. package/dist/detector/detectPackageManager.d.ts +14 -0
  17. package/dist/detector/detectPackageManager.js +68 -0
  18. package/dist/detector/detectPackageManager.js.map +1 -0
  19. package/dist/detector/index.d.ts +1 -0
  20. package/dist/detector/index.js +3 -0
  21. package/dist/detector/index.js.map +1 -0
  22. package/dist/executor/index.d.ts +1 -0
  23. package/dist/executor/index.js +3 -0
  24. package/dist/executor/index.js.map +1 -0
  25. package/dist/executor/runCommand.d.ts +9 -0
  26. package/dist/executor/runCommand.js +61 -0
  27. package/dist/executor/runCommand.js.map +1 -0
  28. package/dist/index.d.ts +8 -0
  29. package/dist/index.js +11 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/scanner/aiAnalyzer.d.ts +6 -0
  32. package/dist/scanner/aiAnalyzer.js +92 -0
  33. package/dist/scanner/aiAnalyzer.js.map +1 -0
  34. package/dist/scanner/analyzePackage.d.ts +5 -0
  35. package/dist/scanner/analyzePackage.js +155 -0
  36. package/dist/scanner/analyzePackage.js.map +1 -0
  37. package/dist/scanner/auditAnalyzer.d.ts +11 -0
  38. package/dist/scanner/auditAnalyzer.js +113 -0
  39. package/dist/scanner/auditAnalyzer.js.map +1 -0
  40. package/dist/scanner/heuristicAnalyzer.d.ts +5 -0
  41. package/dist/scanner/heuristicAnalyzer.js +228 -0
  42. package/dist/scanner/heuristicAnalyzer.js.map +1 -0
  43. package/dist/scanner/index.d.ts +6 -0
  44. package/dist/scanner/index.js +8 -0
  45. package/dist/scanner/index.js.map +1 -0
  46. package/dist/scanner/metadataAnalyzer.d.ts +5 -0
  47. package/dist/scanner/metadataAnalyzer.js +136 -0
  48. package/dist/scanner/metadataAnalyzer.js.map +1 -0
  49. package/dist/scanner/scriptAnalyzer.d.ts +5 -0
  50. package/dist/scanner/scriptAnalyzer.js +187 -0
  51. package/dist/scanner/scriptAnalyzer.js.map +1 -0
  52. package/dist/scanner-project/batchAnalyze.d.ts +1 -0
  53. package/dist/scanner-project/batchAnalyze.js +4 -0
  54. package/dist/scanner-project/batchAnalyze.js.map +1 -0
  55. package/dist/scanner-project/index.d.ts +4 -0
  56. package/dist/scanner-project/index.js +6 -0
  57. package/dist/scanner-project/index.js.map +1 -0
  58. package/dist/scanner-project/readDependencies.d.ts +5 -0
  59. package/dist/scanner-project/readDependencies.js +28 -0
  60. package/dist/scanner-project/readDependencies.js.map +1 -0
  61. package/dist/scanner-project/scanNodeModules.d.ts +1 -0
  62. package/dist/scanner-project/scanNodeModules.js +4 -0
  63. package/dist/scanner-project/scanNodeModules.js.map +1 -0
  64. package/dist/scanner-project/scanProject.d.ts +5 -0
  65. package/dist/scanner-project/scanProject.js +69 -0
  66. package/dist/scanner-project/scanProject.js.map +1 -0
  67. package/dist/test.d.ts +6 -0
  68. package/dist/test.js +153 -0
  69. package/dist/test.js.map +1 -0
  70. package/dist/types.d.ts +133 -0
  71. package/dist/types.js +2 -0
  72. package/dist/types.js.map +1 -0
  73. package/dist/ui/index.d.ts +4 -0
  74. package/dist/ui/index.js +6 -0
  75. package/dist/ui/index.js.map +1 -0
  76. package/dist/ui/logger.d.ts +24 -0
  77. package/dist/ui/logger.js +39 -0
  78. package/dist/ui/logger.js.map +1 -0
  79. package/dist/ui/promptUser.d.ts +12 -0
  80. package/dist/ui/promptUser.js +50 -0
  81. package/dist/ui/promptUser.js.map +1 -0
  82. package/dist/ui/riskReporter.d.ts +5 -0
  83. package/dist/ui/riskReporter.js +157 -0
  84. package/dist/ui/riskReporter.js.map +1 -0
  85. package/dist/ui/scanReporter.d.ts +1 -0
  86. package/dist/ui/scanReporter.js +4 -0
  87. package/dist/ui/scanReporter.js.map +1 -0
  88. package/package.json +61 -0
@@ -0,0 +1,157 @@
1
+ import chalk from "chalk";
2
+ /**
3
+ * Display a comprehensive risk report for a single package
4
+ */
5
+ export function displayRiskReport(report) {
6
+ console.log(`\n${"=".repeat(80)}`);
7
+ console.log(chalk.bold(`📦 ${report.packageName}`) + chalk.gray(` (${report.version})`));
8
+ console.log("=".repeat(80));
9
+ // Risk score with color coding
10
+ const scoreColor = getRiskScoreColor(report.riskScore);
11
+ console.log(`\n${chalk.bold("Risk Score:")} ${scoreColor(`${report.riskScore}/10`)}`);
12
+ console.log(`${chalk.bold("Risk Level:")} ${getRiskLevelBadge(report.riskLevel)}`);
13
+ // Recommendation
14
+ console.log(`\n${chalk.bold("Recommendation:")}`);
15
+ console.log(` ${getRecommendationText(report.recommendation)}`);
16
+ // Warnings
17
+ if (report.warnings.length > 0) {
18
+ console.log(`\n${chalk.bold("Warnings:")} ${chalk.red(`(${report.warnings.length})`)}`);
19
+ for (const warning of report.warnings) {
20
+ const icon = getSeverityIcon(warning.severity);
21
+ const severityColor = getSeverityColor(warning.severity);
22
+ console.log(` ${icon} ${severityColor(warning.severity.toUpperCase())} - ${warning.message}`);
23
+ console.log(chalk.gray(` Source: ${warning.source}`));
24
+ }
25
+ }
26
+ // Analyzer breakdown
27
+ console.log(`\n${chalk.bold("Analysis Details:")}`);
28
+ // Audit
29
+ if (report.analyzers.audit) {
30
+ const audit = report.analyzers.audit;
31
+ const vulnText = audit.vulnerabilityCount === 0
32
+ ? chalk.green("No vulnerabilities")
33
+ : chalk.red(`${audit.vulnerabilityCount} vulnerabilities (${audit.criticalCount} critical, ${audit.highCount} high)`);
34
+ console.log(` ${chalk.cyan("Audit:")} ${vulnText} - Score: ${audit.riskScore}/10`);
35
+ }
36
+ // Metadata
37
+ if (report.analyzers.metadata) {
38
+ const meta = report.analyzers.metadata;
39
+ const downloadsText = meta.downloads < 100
40
+ ? chalk.red(`${meta.downloads.toLocaleString()}`)
41
+ : meta.downloads < 1000
42
+ ? chalk.yellow(`${meta.downloads.toLocaleString()}`)
43
+ : chalk.green(`${meta.downloads.toLocaleString()}`);
44
+ console.log(` ${chalk.cyan("Metadata:")} ${downloadsText} weekly downloads, ${meta.packageAge} days old - Score: ${meta.riskScore}/10`);
45
+ console.log(chalk.gray(` Maintainers: ${meta.maintainerCount}, License: ${meta.hasLicense ? "Yes" : "No"}`));
46
+ }
47
+ // Scripts
48
+ if (report.analyzers.script) {
49
+ const script = report.analyzers.script;
50
+ const scriptStatus = script.hasSuspiciousScripts
51
+ ? chalk.red("Suspicious scripts detected")
52
+ : chalk.green("Clean");
53
+ console.log(` ${chalk.cyan("Scripts:")} ${scriptStatus} - Score: ${script.riskScore}/10`);
54
+ if (script.suspiciousScripts.length > 0) {
55
+ console.log(chalk.gray(` Found: ${script.suspiciousScripts.join(", ")}`));
56
+ }
57
+ }
58
+ // Heuristics
59
+ if (report.analyzers.heuristic) {
60
+ const heuristic = report.analyzers.heuristic;
61
+ const heuristicStatus = heuristic.isPotentialTyposquat
62
+ ? chalk.red("Potential typosquatting")
63
+ : chalk.green("Clean");
64
+ console.log(` ${chalk.cyan("Heuristics:")} ${heuristicStatus} - Score: ${heuristic.riskScore}/10`);
65
+ if (heuristic.suspiciousPatterns.length > 0) {
66
+ console.log(chalk.gray(` Patterns: ${heuristic.suspiciousPatterns.join(", ")}`));
67
+ }
68
+ }
69
+ // AI Insights
70
+ if (report.analyzers.aiInsights) {
71
+ console.log(`\n${chalk.bold.magenta("🤖 AI Insights:")}`);
72
+ console.log(chalk.gray(formatAIInsights(report.analyzers.aiInsights)));
73
+ }
74
+ console.log(); // Spacing
75
+ }
76
+ /**
77
+ * Get color for risk score
78
+ */
79
+ function getRiskScoreColor(score) {
80
+ if (score >= 7)
81
+ return chalk.red.bold;
82
+ if (score >= 4)
83
+ return chalk.yellow.bold;
84
+ return chalk.green.bold;
85
+ }
86
+ /**
87
+ * Get colored badge for risk level
88
+ */
89
+ function getRiskLevelBadge(level) {
90
+ switch (level) {
91
+ case "dangerous":
92
+ return chalk.bgRed.white.bold(" DANGEROUS ");
93
+ case "caution":
94
+ return chalk.bgYellow.black.bold(" CAUTION ");
95
+ case "safe":
96
+ return chalk.bgGreen.black.bold(" SAFE ");
97
+ default:
98
+ return chalk.bgGray.white.bold(` ${level.toUpperCase()} `);
99
+ }
100
+ }
101
+ /**
102
+ * Format recommendation text with appropriate color
103
+ */
104
+ function getRecommendationText(recommendation) {
105
+ if (recommendation.includes("DO NOT INSTALL")) {
106
+ return chalk.red.bold(recommendation);
107
+ }
108
+ if (recommendation.includes("CAUTION") ||
109
+ recommendation.includes("HIGH RISK")) {
110
+ return chalk.yellow.bold(recommendation);
111
+ }
112
+ return chalk.green(recommendation);
113
+ }
114
+ /**
115
+ * Get icon for severity level
116
+ */
117
+ function getSeverityIcon(severity) {
118
+ switch (severity) {
119
+ case "critical":
120
+ return "🔴";
121
+ case "high":
122
+ return "🟠";
123
+ case "medium":
124
+ return "🟡";
125
+ case "low":
126
+ return "🔵";
127
+ default:
128
+ return "⚪";
129
+ }
130
+ }
131
+ /**
132
+ * Get color for severity level
133
+ */
134
+ function getSeverityColor(severity) {
135
+ switch (severity) {
136
+ case "critical":
137
+ return chalk.red.bold;
138
+ case "high":
139
+ return chalk.red;
140
+ case "medium":
141
+ return chalk.yellow;
142
+ case "low":
143
+ return chalk.blue;
144
+ default:
145
+ return chalk.gray;
146
+ }
147
+ }
148
+ /**
149
+ * Format AI insights with indentation
150
+ */
151
+ function formatAIInsights(insights) {
152
+ return insights
153
+ .split("\n")
154
+ .map((line) => ` ${line}`)
155
+ .join("\n");
156
+ }
157
+ //# sourceMappingURL=riskReporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"riskReporter.js","sourceRoot":"","sources":["../../src/ui/riskReporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAkB;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,OAAO,GAAG,CAAC,CAC3E,CAAC;IACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5B,+BAA+B;IAC/B,MAAM,UAAU,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CACV,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC,GAAG,MAAM,CAAC,SAAS,KAAK,CAAC,EAAE,CACxE,CAAC;IACF,OAAO,CAAC,GAAG,CACV,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CACrE,CAAC;IAEF,iBAAiB;IACjB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,GAAG,CAAC,KAAK,qBAAqB,CAAC,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;IAEjE,WAAW;IACX,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,GAAG,CACV,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAC1E,CAAC;QACF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC/C,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACzD,OAAO,CAAC,GAAG,CACV,KAAK,IAAI,IAAI,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,CACjF,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC3D,CAAC;IACF,CAAC;IAED,qBAAqB;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC;IAEpD,QAAQ;IACR,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC;QACrC,MAAM,QAAQ,GACb,KAAK,CAAC,kBAAkB,KAAK,CAAC;YAC7B,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACnC,CAAC,CAAC,KAAK,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,kBAAkB,qBAAqB,KAAK,CAAC,aAAa,cAAc,KAAK,CAAC,SAAS,QAAQ,CACxG,CAAC;QACL,OAAO,CAAC,GAAG,CACV,KAAK,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,QAAQ,aAAa,KAAK,CAAC,SAAS,KAAK,CACtE,CAAC;IACH,CAAC;IAED,WAAW;IACX,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QACvC,MAAM,aAAa,GAClB,IAAI,CAAC,SAAS,GAAG,GAAG;YACnB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;YACjD,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI;gBACtB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC;gBACpD,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACvD,OAAO,CAAC,GAAG,CACV,KAAK,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,sBAAsB,IAAI,CAAC,UAAU,sBAAsB,IAAI,CAAC,SAAS,KAAK,CAC3H,CAAC;QACF,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CACT,qBAAqB,IAAI,CAAC,eAAe,cAAc,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CACvF,CACD,CAAC;IACH,CAAC;IAED,UAAU;IACV,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;QACvC,MAAM,YAAY,GAAG,MAAM,CAAC,oBAAoB;YAC/C,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC;YAC1C,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CACV,KAAK,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,YAAY,aAAa,MAAM,CAAC,SAAS,KAAK,CAC7E,CAAC;QACF,IAAI,MAAM,CAAC,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzC,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,eAAe,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAChE,CAAC;QACH,CAAC;IACF,CAAC;IAED,aAAa;IACb,IAAI,MAAM,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QAC7C,MAAM,eAAe,GAAG,SAAS,CAAC,oBAAoB;YACrD,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC;YACtC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxB,OAAO,CAAC,GAAG,CACV,KAAK,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,SAAS,KAAK,CACtF,CAAC;QACF,IAAI,SAAS,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7C,OAAO,CAAC,GAAG,CACV,KAAK,CAAC,IAAI,CAAC,kBAAkB,SAAS,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CACvE,CAAC;QACH,CAAC;IACF,CAAC;IAED,cAAc;IACd,IAAI,MAAM,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,UAAU;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACvC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;IACtC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC;IACzC,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,KAAa;IACvC,QAAQ,KAAK,EAAE,CAAC;QACf,KAAK,WAAW;YACf,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC9C,KAAK,SAAS;YACb,OAAO,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC/C,KAAK,MAAM;YACV,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C;YACC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;IAC7D,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,cAAsB;IACpD,IAAI,cAAc,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAC/C,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACvC,CAAC;IACD,IACC,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;QAClC,cAAc,CAAC,QAAQ,CAAC,WAAW,CAAC,EACnC,CAAC;QACF,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,QAAgB;IACxC,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,IAAI,CAAC;QACb,KAAK,MAAM;YACV,OAAO,IAAI,CAAC;QACb,KAAK,QAAQ;YACZ,OAAO,IAAI,CAAC;QACb,KAAK,KAAK;YACT,OAAO,IAAI,CAAC;QACb;YACC,OAAO,GAAG,CAAC;IACb,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAgB;IACzC,QAAQ,QAAQ,EAAE,CAAC;QAClB,KAAK,UAAU;YACd,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;QACvB,KAAK,MAAM;YACV,OAAO,KAAK,CAAC,GAAG,CAAC;QAClB,KAAK,QAAQ;YACZ,OAAO,KAAK,CAAC,MAAM,CAAC;QACrB,KAAK,KAAK;YACT,OAAO,KAAK,CAAC,IAAI,CAAC;QACnB;YACC,OAAO,KAAK,CAAC,IAAI,CAAC;IACpB,CAAC;AACF,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAgB;IACzC,OAAO,QAAQ;SACb,KAAK,CAAC,IAAI,CAAC;SACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;SAC1B,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export {};
2
+ // Display project scan reports
3
+ // Will be implemented in Phase 5
4
+ //# sourceMappingURL=scanReporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanReporter.js","sourceRoot":"","sources":["../../src/ui/scanReporter.ts"],"names":[],"mappings":";AAAA,+BAA+B;AAC/B,iCAAiC"}
package/package.json ADDED
@@ -0,0 +1,61 @@
1
+ {
2
+ "name": "safe-pkg",
3
+ "type": "module",
4
+ "description": "Security-first package installer with multi-layer vulnerability analysis before installation",
5
+ "version": "1.0.0",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "safe-pkg": "./dist/cli/index.js"
10
+ },
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "https://github.com/joker7blue/safe-install.git"
14
+ },
15
+ "homepage": "https://github.com/joker7blue/safe-install#readme",
16
+ "files": [
17
+ "dist/**/*",
18
+ "README.md",
19
+ "LICENSE"
20
+ ],
21
+ "keywords": [
22
+ "security",
23
+ "npm",
24
+ "package-manager",
25
+ "vulnerability",
26
+ "audit",
27
+ "safety",
28
+ "malware-detection",
29
+ "typosquatting",
30
+ "cli"
31
+ ],
32
+ "author": "Georges Fouejio",
33
+ "license": "MIT",
34
+ "dependencies": {
35
+ "chalk": "^5.3.0",
36
+ "commander": "^12.1.0",
37
+ "execa": "^9.5.2",
38
+ "prompts": "^2.4.2"
39
+ },
40
+ "optionalDependencies": {
41
+ "@anthropic-ai/sdk": "^0.32.1"
42
+ },
43
+ "devDependencies": {
44
+ "@biomejs/biome": "1.8.3",
45
+ "@changesets/cli": "^2.27.7",
46
+ "@total-typescript/tsconfig": "^1.0.4",
47
+ "@types/node": "^25.6.0",
48
+ "@types/prompts": "^2.4.9",
49
+ "typescript": "^5.5.3"
50
+ },
51
+ "bugs": {
52
+ "url": "https://github.com/joker7blue/safe-install/issues"
53
+ },
54
+ "scripts": {
55
+ "build": "tsc",
56
+ "check": "biome check --write ./src",
57
+ "workflow:check": "biome check ./src",
58
+ "test": "pnpm run build && node dist/test.js",
59
+ "release": "pnpm run build && changeset publish"
60
+ }
61
+ }