supasec 1.0.4 → 1.0.5

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 (97) hide show
  1. package/Feature-List.md +233 -0
  2. package/README.md +53 -12
  3. package/dist/cli.js +2 -0
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/index.d.ts +1 -0
  6. package/dist/commands/index.d.ts.map +1 -1
  7. package/dist/commands/index.js +1 -0
  8. package/dist/commands/index.js.map +1 -1
  9. package/dist/commands/scan.d.ts.map +1 -1
  10. package/dist/commands/scan.js +74 -18
  11. package/dist/commands/scan.js.map +1 -1
  12. package/dist/commands/snapshot.d.ts +32 -0
  13. package/dist/commands/snapshot.d.ts.map +1 -0
  14. package/dist/commands/snapshot.js +282 -0
  15. package/dist/commands/snapshot.js.map +1 -0
  16. package/dist/reporters/html.d.ts +3 -2
  17. package/dist/reporters/html.d.ts.map +1 -1
  18. package/dist/reporters/html.js +844 -538
  19. package/dist/reporters/html.js.map +1 -1
  20. package/dist/reporters/terminal.d.ts +38 -2
  21. package/dist/reporters/terminal.d.ts.map +1 -1
  22. package/dist/reporters/terminal.js +292 -131
  23. package/dist/reporters/terminal.js.map +1 -1
  24. package/dist/scanners/auth/analyzer.d.ts +40 -0
  25. package/dist/scanners/auth/analyzer.d.ts.map +1 -0
  26. package/dist/scanners/auth/analyzer.js +673 -0
  27. package/dist/scanners/auth/analyzer.js.map +1 -0
  28. package/dist/scanners/auth/index.d.ts +6 -0
  29. package/dist/scanners/auth/index.d.ts.map +1 -0
  30. package/dist/scanners/auth/index.js +22 -0
  31. package/dist/scanners/auth/index.js.map +1 -0
  32. package/dist/scanners/edge/analyzer.d.ts +35 -0
  33. package/dist/scanners/edge/analyzer.d.ts.map +1 -0
  34. package/dist/scanners/edge/analyzer.js +614 -0
  35. package/dist/scanners/edge/analyzer.js.map +1 -0
  36. package/dist/scanners/edge/index.d.ts +6 -0
  37. package/dist/scanners/edge/index.d.ts.map +1 -0
  38. package/dist/scanners/edge/index.js +22 -0
  39. package/dist/scanners/edge/index.js.map +1 -0
  40. package/dist/scanners/functions/analyzer.d.ts +41 -0
  41. package/dist/scanners/functions/analyzer.d.ts.map +1 -0
  42. package/dist/scanners/functions/analyzer.js +378 -0
  43. package/dist/scanners/functions/analyzer.js.map +1 -0
  44. package/dist/scanners/functions/index.d.ts +6 -0
  45. package/dist/scanners/functions/index.d.ts.map +1 -0
  46. package/dist/scanners/functions/index.js +22 -0
  47. package/dist/scanners/functions/index.js.map +1 -0
  48. package/dist/scanners/git/index.d.ts +6 -0
  49. package/dist/scanners/git/index.d.ts.map +1 -0
  50. package/dist/scanners/git/index.js +22 -0
  51. package/dist/scanners/git/index.js.map +1 -0
  52. package/dist/scanners/git/scanner.d.ts +22 -0
  53. package/dist/scanners/git/scanner.d.ts.map +1 -0
  54. package/dist/scanners/git/scanner.js +531 -0
  55. package/dist/scanners/git/scanner.js.map +1 -0
  56. package/dist/scanners/https/analyzer.d.ts +42 -0
  57. package/dist/scanners/https/analyzer.d.ts.map +1 -0
  58. package/dist/scanners/https/analyzer.js +470 -0
  59. package/dist/scanners/https/analyzer.js.map +1 -0
  60. package/dist/scanners/https/index.d.ts +8 -0
  61. package/dist/scanners/https/index.d.ts.map +1 -0
  62. package/dist/scanners/https/index.js +17 -0
  63. package/dist/scanners/https/index.js.map +1 -0
  64. package/dist/scanners/index.d.ts +6 -0
  65. package/dist/scanners/index.d.ts.map +1 -1
  66. package/dist/scanners/index.js +6 -0
  67. package/dist/scanners/index.js.map +1 -1
  68. package/dist/scanners/rls/fuzzer.d.ts +40 -0
  69. package/dist/scanners/rls/fuzzer.d.ts.map +1 -0
  70. package/dist/scanners/rls/fuzzer.js +360 -0
  71. package/dist/scanners/rls/fuzzer.js.map +1 -0
  72. package/dist/scanners/rls/index.d.ts +1 -0
  73. package/dist/scanners/rls/index.d.ts.map +1 -1
  74. package/dist/scanners/rls/index.js +1 -0
  75. package/dist/scanners/rls/index.js.map +1 -1
  76. package/dist/scanners/secrets/detector.d.ts.map +1 -1
  77. package/dist/scanners/secrets/detector.js +44 -12
  78. package/dist/scanners/secrets/detector.js.map +1 -1
  79. package/dist/scanners/secrets/index.d.ts +1 -0
  80. package/dist/scanners/secrets/index.d.ts.map +1 -1
  81. package/dist/scanners/secrets/index.js +4 -0
  82. package/dist/scanners/secrets/index.js.map +1 -1
  83. package/dist/scanners/secrets/patterns.d.ts +25 -0
  84. package/dist/scanners/secrets/patterns.d.ts.map +1 -1
  85. package/dist/scanners/secrets/patterns.js +138 -27
  86. package/dist/scanners/secrets/patterns.js.map +1 -1
  87. package/dist/scanners/storage/analyzer.d.ts +49 -0
  88. package/dist/scanners/storage/analyzer.d.ts.map +1 -0
  89. package/dist/scanners/storage/analyzer.js +438 -0
  90. package/dist/scanners/storage/analyzer.js.map +1 -0
  91. package/dist/scanners/storage/index.d.ts +6 -0
  92. package/dist/scanners/storage/index.d.ts.map +1 -0
  93. package/dist/scanners/storage/index.js +22 -0
  94. package/dist/scanners/storage/index.js.map +1 -0
  95. package/package.json +1 -1
  96. package/reports/supasec-audityour-app-2026-01-28-19-42-22.html +757 -0
  97. package/reports/supasec-audityour-app-2026-01-28-19-49-18.html +1122 -0
@@ -0,0 +1,282 @@
1
+ "use strict";
2
+ /**
3
+ * Snapshot Command
4
+ * Creates and manages security snapshots for tracking changes over time
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || (function () {
23
+ var ownKeys = function(o) {
24
+ ownKeys = Object.getOwnPropertyNames || function (o) {
25
+ var ar = [];
26
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
+ return ar;
28
+ };
29
+ return ownKeys(o);
30
+ };
31
+ return function (mod) {
32
+ if (mod && mod.__esModule) return mod;
33
+ var result = {};
34
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
+ __setModuleDefault(result, mod);
36
+ return result;
37
+ };
38
+ })();
39
+ Object.defineProperty(exports, "__esModule", { value: true });
40
+ exports.registerSnapshotCommands = registerSnapshotCommands;
41
+ const fs = __importStar(require("fs/promises"));
42
+ const path = __importStar(require("path"));
43
+ const SNAPSHOT_DIR = '.supasec/snapshots';
44
+ /**
45
+ * Register snapshot commands
46
+ */
47
+ function registerSnapshotCommands(program) {
48
+ const snapshotCmd = program
49
+ .command('snapshot')
50
+ .description('Manage security snapshots');
51
+ snapshotCmd
52
+ .command('create')
53
+ .description('Create a new security snapshot')
54
+ .option('-n, --name <name>', 'Snapshot name')
55
+ .option('-o, --output <dir>', 'Output directory', SNAPSHOT_DIR)
56
+ .action(async (options) => {
57
+ try {
58
+ await createSnapshot(options);
59
+ }
60
+ catch (error) {
61
+ console.error('Snapshot creation failed:', error instanceof Error ? error.message : error);
62
+ process.exit(1);
63
+ }
64
+ });
65
+ snapshotCmd
66
+ .command('list')
67
+ .description('List all snapshots')
68
+ .action(async () => {
69
+ try {
70
+ await listSnapshots();
71
+ }
72
+ catch (error) {
73
+ console.error('Failed to list snapshots:', error instanceof Error ? error.message : error);
74
+ process.exit(1);
75
+ }
76
+ });
77
+ snapshotCmd
78
+ .command('diff')
79
+ .description('Compare two snapshots')
80
+ .argument('<snapshot1>', 'First snapshot name or ID')
81
+ .argument('<snapshot2>', 'Second snapshot name or ID')
82
+ .action(async (snapshot1, snapshot2) => {
83
+ try {
84
+ await compareSnapshots({ snapshot1, snapshot2 });
85
+ }
86
+ catch (error) {
87
+ console.error('Snapshot comparison failed:', error instanceof Error ? error.message : error);
88
+ process.exit(1);
89
+ }
90
+ });
91
+ snapshotCmd
92
+ .command('delete')
93
+ .description('Delete a snapshot')
94
+ .argument('<name>', 'Snapshot name or ID')
95
+ .action(async (name) => {
96
+ try {
97
+ await deleteSnapshot(name);
98
+ }
99
+ catch (error) {
100
+ console.error('Failed to delete snapshot:', error instanceof Error ? error.message : error);
101
+ process.exit(1);
102
+ }
103
+ });
104
+ }
105
+ /**
106
+ * Create a new security snapshot
107
+ */
108
+ async function createSnapshot(options) {
109
+ const snapshotDir = options.outputDir || SNAPSHOT_DIR;
110
+ // Ensure snapshot directory exists
111
+ await fs.mkdir(snapshotDir, { recursive: true });
112
+ // Generate snapshot name if not provided
113
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
114
+ const snapshotName = options.name || `snapshot-${timestamp}`;
115
+ // TODO: In real implementation, this would run a scan and save the result
116
+ // For now, create a placeholder snapshot
117
+ const snapshot = {
118
+ id: generateSnapshotId(),
119
+ name: snapshotName,
120
+ created_at: new Date().toISOString(),
121
+ scan_result: {}, // Placeholder
122
+ metadata: {
123
+ target_url: 'placeholder',
124
+ scanner_version: '1.0.4',
125
+ total_issues: 0,
126
+ grade: 'A',
127
+ score: 100
128
+ }
129
+ };
130
+ const snapshotPath = path.join(snapshotDir, `${snapshotName}.json`);
131
+ await fs.writeFile(snapshotPath, JSON.stringify(snapshot, null, 2));
132
+ console.log(`\nšŸ“ø Snapshot created: ${snapshotName}`);
133
+ console.log(` Path: ${snapshotPath}`);
134
+ console.log(` ID: ${snapshot.id}`);
135
+ console.log(` Time: ${snapshot.created_at}`);
136
+ }
137
+ /**
138
+ * List all snapshots
139
+ */
140
+ async function listSnapshots() {
141
+ const snapshotDir = SNAPSHOT_DIR;
142
+ try {
143
+ await fs.access(snapshotDir);
144
+ }
145
+ catch {
146
+ console.log('\nNo snapshots found. Create one with: supasec snapshot create');
147
+ return;
148
+ }
149
+ const files = await fs.readdir(snapshotDir);
150
+ const snapshots = files.filter(f => f.endsWith('.json'));
151
+ if (snapshots.length === 0) {
152
+ console.log('\nNo snapshots found. Create one with: supasec snapshot create');
153
+ return;
154
+ }
155
+ console.log('\nšŸ“ø Security Snapshots');
156
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
157
+ for (const file of snapshots.sort().reverse()) {
158
+ const snapshotPath = path.join(snapshotDir, file);
159
+ const content = await fs.readFile(snapshotPath, 'utf-8');
160
+ const snapshot = JSON.parse(content);
161
+ const date = new Date(snapshot.created_at).toLocaleString();
162
+ const grade = snapshot.metadata.grade;
163
+ const score = snapshot.metadata.score;
164
+ const issues = snapshot.metadata.total_issues;
165
+ console.log(`\n šŸ“ ${snapshot.name}`);
166
+ console.log(` ID: ${snapshot.id}`);
167
+ console.log(` Created: ${date}`);
168
+ console.log(` Grade: ${grade} (${score}/100)`);
169
+ console.log(` Issues: ${issues}`);
170
+ }
171
+ console.log(`\n Total: ${snapshots.length} snapshot(s)`);
172
+ }
173
+ /**
174
+ * Compare two snapshots
175
+ */
176
+ async function compareSnapshots(options) {
177
+ // Load snapshots
178
+ const snapshot1 = await loadSnapshot(options.snapshot1);
179
+ const snapshot2 = await loadSnapshot(options.snapshot2);
180
+ if (!snapshot1 || !snapshot2) {
181
+ console.error('āŒ One or both snapshots not found');
182
+ process.exit(1);
183
+ }
184
+ // Calculate differences
185
+ const gradeChange = snapshot2.metadata.score - snapshot1.metadata.score;
186
+ const issuesChange = snapshot2.metadata.total_issues - snapshot1.metadata.total_issues;
187
+ console.log('\nšŸ”„ Snapshot Comparison');
188
+ console.log('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
189
+ console.log(`\n ${snapshot1.name} → ${snapshot2.name}`);
190
+ console.log(` ${new Date(snapshot1.created_at).toLocaleDateString()} → ${new Date(snapshot2.created_at).toLocaleDateString()}`);
191
+ console.log('\nšŸ“Š Grade Change');
192
+ const gradeEmoji = gradeChange > 0 ? 'āœ…' : gradeChange < 0 ? 'āš ļø' : 'āž”ļø';
193
+ console.log(` ${gradeEmoji} ${snapshot1.metadata.grade} (${snapshot1.metadata.score}) → ${snapshot2.metadata.grade} (${snapshot2.metadata.score})`);
194
+ if (gradeChange !== 0) {
195
+ console.log(` ${gradeChange > 0 ? '+' : ''}${gradeChange} points`);
196
+ }
197
+ console.log('\nšŸ“ˆ Issues Change');
198
+ const issuesEmoji = issuesChange < 0 ? 'āœ…' : issuesChange > 0 ? 'āš ļø' : 'āž”ļø';
199
+ console.log(` ${issuesEmoji} ${snapshot1.metadata.total_issues} → ${snapshot2.metadata.total_issues} issues`);
200
+ if (issuesChange !== 0) {
201
+ console.log(` ${issuesChange > 0 ? '+' : ''}${issuesChange} issues`);
202
+ }
203
+ // Compare findings (placeholder)
204
+ console.log('\nšŸ“ Finding Changes');
205
+ console.log(' (Detailed finding comparison not yet implemented)');
206
+ console.log('\n✨ Summary');
207
+ if (gradeChange > 0 && issuesChange <= 0) {
208
+ console.log(' āœ… Security posture improved!');
209
+ }
210
+ else if (gradeChange < 0 || issuesChange > 0) {
211
+ console.log(' āš ļø Security posture degraded - review recommended');
212
+ }
213
+ else {
214
+ console.log(' āž”ļø No significant changes');
215
+ }
216
+ }
217
+ /**
218
+ * Delete a snapshot
219
+ */
220
+ async function deleteSnapshot(name) {
221
+ const snapshotDir = SNAPSHOT_DIR;
222
+ const snapshotPath = path.join(snapshotDir, `${name}.json`);
223
+ try {
224
+ await fs.access(snapshotPath);
225
+ }
226
+ catch {
227
+ // Try finding by ID
228
+ const files = await fs.readdir(snapshotDir);
229
+ for (const file of files) {
230
+ const content = await fs.readFile(path.join(snapshotDir, file), 'utf-8');
231
+ const snapshot = JSON.parse(content);
232
+ if (snapshot.id === name || snapshot.name === name) {
233
+ await fs.unlink(path.join(snapshotDir, file));
234
+ console.log(`\nšŸ—‘ļø Snapshot deleted: ${snapshot.name}`);
235
+ return;
236
+ }
237
+ }
238
+ console.error(`āŒ Snapshot not found: ${name}`);
239
+ process.exit(1);
240
+ }
241
+ await fs.unlink(snapshotPath);
242
+ console.log(`\nšŸ—‘ļø Snapshot deleted: ${name}`);
243
+ }
244
+ /**
245
+ * Load a snapshot by name or ID
246
+ */
247
+ async function loadSnapshot(nameOrId) {
248
+ const snapshotDir = SNAPSHOT_DIR;
249
+ // Try direct file access first
250
+ const directPath = path.join(snapshotDir, `${nameOrId}.json`);
251
+ try {
252
+ const content = await fs.readFile(directPath, 'utf-8');
253
+ return JSON.parse(content);
254
+ }
255
+ catch {
256
+ // Not a direct file match, search by ID or name
257
+ }
258
+ // Search all snapshots
259
+ try {
260
+ const files = await fs.readdir(snapshotDir);
261
+ for (const file of files) {
262
+ if (!file.endsWith('.json'))
263
+ continue;
264
+ const content = await fs.readFile(path.join(snapshotDir, file), 'utf-8');
265
+ const snapshot = JSON.parse(content);
266
+ if (snapshot.id === nameOrId || snapshot.name === nameOrId) {
267
+ return snapshot;
268
+ }
269
+ }
270
+ }
271
+ catch {
272
+ // Directory doesn't exist or error reading
273
+ }
274
+ return null;
275
+ }
276
+ /**
277
+ * Generate unique snapshot ID
278
+ */
279
+ function generateSnapshotId() {
280
+ return `snap_${Date.now()}_${Math.random().toString(36).substring(2, 9)}`;
281
+ }
282
+ //# sourceMappingURL=snapshot.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/commands/snapshot.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,15 @@
1
1
  /**
2
2
  * HTML Reporter
3
- * Generates detailed HTML reports matching the Supascan.io style
3
+ * Generates enterprise-grade professional HTML reports
4
4
  */
5
5
  import { ScanResult } from '../models/scan-result.js';
6
6
  export interface HTMLReportOptions {
7
7
  title?: string;
8
8
  includeDetails?: boolean;
9
+ theme?: 'light' | 'dark';
9
10
  }
10
11
  /**
11
- * Generate HTML report from scan result
12
+ * Generate enterprise-grade HTML report from scan result
12
13
  */
13
14
  export declare function generateHTMLReport(result: ScanResult, options?: HTMLReportOptions): string;
14
15
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/reporters/html.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAinBR;AA+TD;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAIf"}
1
+ {"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../src/reporters/html.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,UAAU,EAAe,MAAM,0BAA0B,CAAC;AAEnE,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CA27BR;AAqRD;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,UAAU,EAClB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,IAAI,CAAC,CAIf"}