supasec 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 (65) hide show
  1. package/.env +1 -0
  2. package/LICENSE +21 -0
  3. package/README.md +276 -0
  4. package/dist/cli.d.ts +7 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +30 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/index.d.ts +6 -0
  9. package/dist/commands/index.d.ts.map +1 -0
  10. package/dist/commands/index.js +22 -0
  11. package/dist/commands/index.js.map +1 -0
  12. package/dist/commands/scan.d.ts +23 -0
  13. package/dist/commands/scan.d.ts.map +1 -0
  14. package/dist/commands/scan.js +235 -0
  15. package/dist/commands/scan.js.map +1 -0
  16. package/dist/index.d.ts +10 -0
  17. package/dist/index.d.ts.map +1 -0
  18. package/dist/index.js +31 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/models/finding.d.ts +88 -0
  21. package/dist/models/finding.d.ts.map +1 -0
  22. package/dist/models/finding.js +80 -0
  23. package/dist/models/finding.js.map +1 -0
  24. package/dist/models/index.d.ts +7 -0
  25. package/dist/models/index.d.ts.map +1 -0
  26. package/dist/models/index.js +23 -0
  27. package/dist/models/index.js.map +1 -0
  28. package/dist/models/scan-result.d.ts +103 -0
  29. package/dist/models/scan-result.d.ts.map +1 -0
  30. package/dist/models/scan-result.js +168 -0
  31. package/dist/models/scan-result.js.map +1 -0
  32. package/dist/reporters/index.d.ts +6 -0
  33. package/dist/reporters/index.d.ts.map +1 -0
  34. package/dist/reporters/index.js +22 -0
  35. package/dist/reporters/index.js.map +1 -0
  36. package/dist/reporters/terminal.d.ts +20 -0
  37. package/dist/reporters/terminal.d.ts.map +1 -0
  38. package/dist/reporters/terminal.js +346 -0
  39. package/dist/reporters/terminal.js.map +1 -0
  40. package/dist/scanners/index.d.ts +7 -0
  41. package/dist/scanners/index.d.ts.map +1 -0
  42. package/dist/scanners/index.js +23 -0
  43. package/dist/scanners/index.js.map +1 -0
  44. package/dist/scanners/rls/analyzer.d.ts +44 -0
  45. package/dist/scanners/rls/analyzer.d.ts.map +1 -0
  46. package/dist/scanners/rls/analyzer.js +519 -0
  47. package/dist/scanners/rls/analyzer.js.map +1 -0
  48. package/dist/scanners/rls/index.d.ts +6 -0
  49. package/dist/scanners/rls/index.d.ts.map +1 -0
  50. package/dist/scanners/rls/index.js +22 -0
  51. package/dist/scanners/rls/index.js.map +1 -0
  52. package/dist/scanners/secrets/detector.d.ts +32 -0
  53. package/dist/scanners/secrets/detector.d.ts.map +1 -0
  54. package/dist/scanners/secrets/detector.js +251 -0
  55. package/dist/scanners/secrets/detector.js.map +1 -0
  56. package/dist/scanners/secrets/index.d.ts +7 -0
  57. package/dist/scanners/secrets/index.d.ts.map +1 -0
  58. package/dist/scanners/secrets/index.js +23 -0
  59. package/dist/scanners/secrets/index.js.map +1 -0
  60. package/dist/scanners/secrets/patterns.d.ts +57 -0
  61. package/dist/scanners/secrets/patterns.d.ts.map +1 -0
  62. package/dist/scanners/secrets/patterns.js +285 -0
  63. package/dist/scanners/secrets/patterns.js.map +1 -0
  64. package/npm-publishing-guide.md +38 -0
  65. package/package.json +69 -0
package/dist/index.js ADDED
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * SupaSec - Supabase Security Auditor
4
+ * Main exports for programmatic usage
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.TOOL_NAME = exports.VERSION = void 0;
22
+ // Models
23
+ __exportStar(require("./models/index.js"), exports);
24
+ // Scanners
25
+ __exportStar(require("./scanners/index.js"), exports);
26
+ // Reporters
27
+ __exportStar(require("./reporters/index.js"), exports);
28
+ // Version
29
+ exports.VERSION = '1.0.0';
30
+ exports.TOOL_NAME = 'supasec';
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;AAEH,SAAS;AACT,oDAAkC;AAElC,WAAW;AACX,sDAAoC;AAEpC,YAAY;AACZ,uDAAqC;AAErC,UAAU;AACG,QAAA,OAAO,GAAG,OAAO,CAAC;AAClB,QAAA,SAAS,GAAG,SAAS,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Security Finding Model
3
+ * Represents a single security issue discovered during scanning
4
+ */
5
+ export type Severity = 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW' | 'INFO';
6
+ export type Category = 'secrets' | 'rls' | 'pii' | 'storage' | 'auth' | 'api' | 'functions' | 'database' | 'transport';
7
+ export interface FindingLocation {
8
+ file?: string;
9
+ line?: number;
10
+ column?: number;
11
+ url?: string;
12
+ table?: string;
13
+ column_name?: string;
14
+ }
15
+ export interface FindingEvidence {
16
+ code_snippet?: string;
17
+ matched_pattern?: string;
18
+ sample_data?: any;
19
+ request?: string;
20
+ response?: string;
21
+ [key: string]: any;
22
+ }
23
+ export interface FindingRemediation {
24
+ summary: string;
25
+ priority: 'IMMEDIATE' | 'HIGH' | 'MEDIUM' | 'LOW';
26
+ effort: 'LOW' | 'MEDIUM' | 'HIGH';
27
+ steps?: Array<{
28
+ order: number;
29
+ action: string;
30
+ command?: string;
31
+ code?: string;
32
+ sql?: string;
33
+ }>;
34
+ sql?: string;
35
+ auto_fixable: boolean;
36
+ }
37
+ export interface FindingImpact {
38
+ severity_score: number;
39
+ cvss_vector?: string;
40
+ description: string;
41
+ affected_resources: string[];
42
+ compliance_violations?: string[];
43
+ }
44
+ export interface FindingReference {
45
+ title: string;
46
+ url: string;
47
+ }
48
+ export interface Finding {
49
+ finding_id: string;
50
+ timestamp: string;
51
+ severity: Severity;
52
+ category: Category;
53
+ subcategory: string;
54
+ title: string;
55
+ description: string;
56
+ location?: FindingLocation;
57
+ evidence?: FindingEvidence;
58
+ impact: FindingImpact;
59
+ remediation: FindingRemediation;
60
+ references: FindingReference[];
61
+ false_positive_likelihood: 'VERY_LOW' | 'LOW' | 'MEDIUM' | 'HIGH';
62
+ confidence: number;
63
+ }
64
+ /**
65
+ * Generate a unique finding ID based on category and counter
66
+ */
67
+ export declare function generateFindingId(category: Category, counter: number): string;
68
+ /**
69
+ * Get severity priority for sorting (higher = more severe)
70
+ */
71
+ export declare function getSeverityPriority(severity: Severity): number;
72
+ /**
73
+ * Sort findings by severity (critical first)
74
+ */
75
+ export declare function sortFindingsBySeverity(findings: Finding[]): Finding[];
76
+ /**
77
+ * Filter findings by severity
78
+ */
79
+ export declare function filterFindingsBySeverity(findings: Finding[], minSeverity: Severity): Finding[];
80
+ /**
81
+ * Group findings by category
82
+ */
83
+ export declare function groupFindingsByCategory(findings: Finding[]): Record<Category, Finding[]>;
84
+ /**
85
+ * Count findings by severity
86
+ */
87
+ export declare function countFindingsBySeverity(findings: Finding[]): Record<Severity | 'total', number>;
88
+ //# sourceMappingURL=finding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding.d.ts","sourceRoot":"","sources":["../../src/models/finding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ /**
3
+ * Security Finding Model
4
+ * Represents a single security issue discovered during scanning
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.generateFindingId = generateFindingId;
8
+ exports.getSeverityPriority = getSeverityPriority;
9
+ exports.sortFindingsBySeverity = sortFindingsBySeverity;
10
+ exports.filterFindingsBySeverity = filterFindingsBySeverity;
11
+ exports.groupFindingsByCategory = groupFindingsByCategory;
12
+ exports.countFindingsBySeverity = countFindingsBySeverity;
13
+ /**
14
+ * Generate a unique finding ID based on category and counter
15
+ */
16
+ function generateFindingId(category, counter) {
17
+ const prefix = category.toUpperCase().substring(0, 3);
18
+ return `${prefix}-${String(counter).padStart(3, '0')}`;
19
+ }
20
+ /**
21
+ * Get severity priority for sorting (higher = more severe)
22
+ */
23
+ function getSeverityPriority(severity) {
24
+ const priorities = {
25
+ 'CRITICAL': 5,
26
+ 'HIGH': 4,
27
+ 'MEDIUM': 3,
28
+ 'LOW': 2,
29
+ 'INFO': 1
30
+ };
31
+ return priorities[severity];
32
+ }
33
+ /**
34
+ * Sort findings by severity (critical first)
35
+ */
36
+ function sortFindingsBySeverity(findings) {
37
+ return [...findings].sort((a, b) => {
38
+ const priorityDiff = getSeverityPriority(b.severity) - getSeverityPriority(a.severity);
39
+ if (priorityDiff !== 0)
40
+ return priorityDiff;
41
+ return a.finding_id.localeCompare(b.finding_id);
42
+ });
43
+ }
44
+ /**
45
+ * Filter findings by severity
46
+ */
47
+ function filterFindingsBySeverity(findings, minSeverity) {
48
+ const minPriority = getSeverityPriority(minSeverity);
49
+ return findings.filter(f => getSeverityPriority(f.severity) >= minPriority);
50
+ }
51
+ /**
52
+ * Group findings by category
53
+ */
54
+ function groupFindingsByCategory(findings) {
55
+ return findings.reduce((acc, finding) => {
56
+ if (!acc[finding.category]) {
57
+ acc[finding.category] = [];
58
+ }
59
+ acc[finding.category].push(finding);
60
+ return acc;
61
+ }, {});
62
+ }
63
+ /**
64
+ * Count findings by severity
65
+ */
66
+ function countFindingsBySeverity(findings) {
67
+ const counts = {
68
+ 'CRITICAL': 0,
69
+ 'HIGH': 0,
70
+ 'MEDIUM': 0,
71
+ 'LOW': 0,
72
+ 'INFO': 0,
73
+ 'total': findings.length
74
+ };
75
+ for (const finding of findings) {
76
+ counts[finding.severity]++;
77
+ }
78
+ return counts;
79
+ }
80
+ //# sourceMappingURL=finding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"finding.js","sourceRoot":"","sources":["../../src/models/finding.ts"],"names":[],"mappings":";AAAA;;;GAGG;;AAgFH,8CAGC;AAKD,kDASC;AAKD,wDAMC;AAKD,4DAGC;AAKD,0DAQC;AAKD,0DAeC;AAxED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,QAAkB,EAAE,OAAe;IACnE,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AACzD,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,QAAkB;IACpD,MAAM,UAAU,GAA6B;QAC3C,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;KACV,CAAC;IACF,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AAED;;GAEG;AACH,SAAgB,sBAAsB,CAAC,QAAmB;IACxD,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,MAAM,YAAY,GAAG,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QACvF,IAAI,YAAY,KAAK,CAAC;YAAE,OAAO,YAAY,CAAC;QAC5C,OAAO,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAgB,wBAAwB,CAAC,QAAmB,EAAE,WAAqB;IACjF,MAAM,WAAW,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACrD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,CAAC;AAC9E,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,QAAmB;IACzD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QACtC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3B,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;QAC7B,CAAC;QACD,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC;IACb,CAAC,EAAE,EAAiC,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAgB,uBAAuB,CAAC,QAAmB;IACzD,MAAM,MAAM,GAAuC;QACjD,UAAU,EAAE,CAAC;QACb,MAAM,EAAE,CAAC;QACT,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,OAAO,EAAE,QAAQ,CAAC,MAAM;KACzB,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Models Index
3
+ * Export all model types and functions
4
+ */
5
+ export * from './finding.js';
6
+ export * from './scan-result.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Models Index
4
+ * Export all model types and functions
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ __exportStar(require("./finding.js"), exports);
22
+ __exportStar(require("./scan-result.js"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,+CAA6B;AAC7B,mDAAiC"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Scan Result Model
3
+ * Represents the complete result of a security scan
4
+ */
5
+ import { Finding, Category } from './finding.js';
6
+ export interface ScanMetadata {
7
+ tool: string;
8
+ version: string;
9
+ scan_id: string;
10
+ target_url: string;
11
+ supabase_project_ref?: string;
12
+ scan_date: string;
13
+ scan_duration_seconds: number;
14
+ scanner_mode: 'url' | 'project' | 'local';
15
+ }
16
+ export interface ProjectInfo {
17
+ tables_count: number;
18
+ rpcs_count: number;
19
+ storage_buckets: number;
20
+ auth_providers: string[];
21
+ edge_functions: number;
22
+ }
23
+ export interface ScanSummary {
24
+ total_issues: number;
25
+ critical: number;
26
+ high: number;
27
+ medium: number;
28
+ low: number;
29
+ info: number;
30
+ passed_checks: number;
31
+ overall_grade: string;
32
+ overall_score: number;
33
+ }
34
+ export interface CategoryScore {
35
+ score: number;
36
+ grade: string;
37
+ issues: number;
38
+ }
39
+ export interface GradingConfig {
40
+ overall_grade: string;
41
+ overall_score: number;
42
+ category_scores: Record<Category, CategoryScore>;
43
+ scoring_methodology: {
44
+ base_score: number;
45
+ critical_deduction: number;
46
+ high_deduction: number;
47
+ medium_deduction: number;
48
+ low_deduction: number;
49
+ };
50
+ grade_thresholds: {
51
+ A: number;
52
+ B: number;
53
+ C: number;
54
+ D: number;
55
+ F: number;
56
+ };
57
+ improvement_priority: string[];
58
+ }
59
+ export interface PassedCheck {
60
+ check_id: string;
61
+ category: Category;
62
+ title: string;
63
+ description: string;
64
+ }
65
+ export interface Recommendations {
66
+ immediate_actions: string[];
67
+ security_best_practices: string[];
68
+ next_steps: string[];
69
+ }
70
+ export interface ScanResult {
71
+ scan_metadata: ScanMetadata;
72
+ project_info: ProjectInfo;
73
+ summary: ScanSummary;
74
+ findings: Finding[];
75
+ passed_checks: PassedCheck[];
76
+ grading: GradingConfig;
77
+ recommendations: Recommendations;
78
+ }
79
+ /**
80
+ * Calculate overall security grade based on score
81
+ */
82
+ export declare function calculateGrade(score: number): {
83
+ grade: string;
84
+ color: string;
85
+ message: string;
86
+ };
87
+ /**
88
+ * Calculate security score based on findings
89
+ */
90
+ export declare function calculateScore(findings: Finding[]): number;
91
+ /**
92
+ * Generate scan ID based on timestamp
93
+ */
94
+ export declare function generateScanId(): string;
95
+ /**
96
+ * Create an empty scan result
97
+ */
98
+ export declare function createEmptyScanResult(targetUrl: string, mode: ScanMetadata['scanner_mode']): ScanResult;
99
+ /**
100
+ * Update scan result with computed values
101
+ */
102
+ export declare function finalizeScanResult(result: ScanResult): ScanResult;
103
+ //# sourceMappingURL=scan-result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-result.d.ts","sourceRoot":"","sources":["../../src/models/scan-result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ /**
3
+ * Scan Result Model
4
+ * Represents the complete result of a security scan
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.calculateGrade = calculateGrade;
8
+ exports.calculateScore = calculateScore;
9
+ exports.generateScanId = generateScanId;
10
+ exports.createEmptyScanResult = createEmptyScanResult;
11
+ exports.finalizeScanResult = finalizeScanResult;
12
+ /**
13
+ * Calculate overall security grade based on score
14
+ */
15
+ function calculateGrade(score) {
16
+ if (score >= 90)
17
+ return { grade: 'A', color: 'green', message: 'Excellent security!' };
18
+ if (score >= 80)
19
+ return { grade: 'B', color: 'green', message: 'Good security posture' };
20
+ if (score >= 70)
21
+ return { grade: 'C', color: 'yellow', message: 'Needs improvement' };
22
+ if (score >= 60)
23
+ return { grade: 'D', color: 'orange', message: 'Serious issues found' };
24
+ return { grade: 'F', color: 'red', message: 'CRITICAL VULNERABILITIES' };
25
+ }
26
+ /**
27
+ * Calculate security score based on findings
28
+ */
29
+ function calculateScore(findings) {
30
+ let score = 100;
31
+ for (const finding of findings) {
32
+ switch (finding.severity) {
33
+ case 'CRITICAL':
34
+ score -= 20;
35
+ break;
36
+ case 'HIGH':
37
+ score -= 10;
38
+ break;
39
+ case 'MEDIUM':
40
+ score -= 5;
41
+ break;
42
+ case 'LOW':
43
+ score -= 2;
44
+ break;
45
+ case 'INFO':
46
+ score -= 1;
47
+ break;
48
+ }
49
+ }
50
+ return Math.max(0, score);
51
+ }
52
+ /**
53
+ * Generate scan ID based on timestamp
54
+ */
55
+ function generateScanId() {
56
+ const now = new Date();
57
+ const timestamp = now.toISOString().replace(/[:.]/g, '-').slice(0, 19);
58
+ return `scan_${timestamp}`;
59
+ }
60
+ /**
61
+ * Create an empty scan result
62
+ */
63
+ function createEmptyScanResult(targetUrl, mode) {
64
+ const now = new Date().toISOString();
65
+ return {
66
+ scan_metadata: {
67
+ tool: 'supasec',
68
+ version: '1.0.0',
69
+ scan_id: generateScanId(),
70
+ target_url: targetUrl,
71
+ scan_date: now,
72
+ scan_duration_seconds: 0,
73
+ scanner_mode: mode
74
+ },
75
+ project_info: {
76
+ tables_count: 0,
77
+ rpcs_count: 0,
78
+ storage_buckets: 0,
79
+ auth_providers: [],
80
+ edge_functions: 0
81
+ },
82
+ summary: {
83
+ total_issues: 0,
84
+ critical: 0,
85
+ high: 0,
86
+ medium: 0,
87
+ low: 0,
88
+ info: 0,
89
+ passed_checks: 0,
90
+ overall_grade: 'A',
91
+ overall_score: 100
92
+ },
93
+ findings: [],
94
+ passed_checks: [],
95
+ grading: {
96
+ overall_grade: 'A',
97
+ overall_score: 100,
98
+ category_scores: {},
99
+ scoring_methodology: {
100
+ base_score: 100,
101
+ critical_deduction: -20,
102
+ high_deduction: -10,
103
+ medium_deduction: -5,
104
+ low_deduction: -2
105
+ },
106
+ grade_thresholds: {
107
+ A: 90,
108
+ B: 80,
109
+ C: 70,
110
+ D: 60,
111
+ F: 0
112
+ },
113
+ improvement_priority: []
114
+ },
115
+ recommendations: {
116
+ immediate_actions: [],
117
+ security_best_practices: [],
118
+ next_steps: []
119
+ }
120
+ };
121
+ }
122
+ /**
123
+ * Update scan result with computed values
124
+ */
125
+ function finalizeScanResult(result) {
126
+ const findings = result.findings;
127
+ const score = calculateScore(findings);
128
+ const grade = calculateGrade(score);
129
+ // Count by severity
130
+ const counts = {
131
+ critical: findings.filter(f => f.severity === 'CRITICAL').length,
132
+ high: findings.filter(f => f.severity === 'HIGH').length,
133
+ medium: findings.filter(f => f.severity === 'MEDIUM').length,
134
+ low: findings.filter(f => f.severity === 'LOW').length,
135
+ info: findings.filter(f => f.severity === 'INFO').length
136
+ };
137
+ result.summary = {
138
+ total_issues: findings.length,
139
+ ...counts,
140
+ passed_checks: result.passed_checks.length,
141
+ overall_grade: grade.grade,
142
+ overall_score: score
143
+ };
144
+ result.grading.overall_grade = grade.grade;
145
+ result.grading.overall_score = score;
146
+ // Generate improvement priority
147
+ result.grading.improvement_priority = findings
148
+ .filter(f => f.severity === 'CRITICAL' || f.severity === 'HIGH')
149
+ .slice(0, 5)
150
+ .map(f => `Fix ${f.finding_id}: ${f.title}`);
151
+ // Generate recommendations
152
+ result.recommendations.immediate_actions = findings
153
+ .filter(f => f.severity === 'CRITICAL')
154
+ .map(f => f.remediation.summary);
155
+ if (findings.some(f => f.category === 'rls')) {
156
+ result.recommendations.security_best_practices.push('Review all RLS policies for proper user isolation');
157
+ }
158
+ if (findings.some(f => f.category === 'secrets')) {
159
+ result.recommendations.security_best_practices.push('Audit all environment variables and secrets management');
160
+ }
161
+ result.recommendations.next_steps = [
162
+ 'Run: supasec fix --interactive',
163
+ 'Schedule weekly scans: supasec watch --interval 604800',
164
+ 'Add to CI/CD: see https://github.com/yourusername/supasec#cicd'
165
+ ];
166
+ return result;
167
+ }
168
+ //# sourceMappingURL=scan-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scan-result.js","sourceRoot":"","sources":["../../src/models/scan-result.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Reporters Index
3
+ * Export all reporter modules
4
+ */
5
+ export * from './terminal.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,eAAe,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * Reporters Index
4
+ * Export all reporter modules
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
18
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
19
+ };
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ __exportStar(require("./terminal.js"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/reporters/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,gDAA8B"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Terminal Reporter
3
+ * Formats and displays scan results in the terminal
4
+ */
5
+ import { ScanResult } from '../models/scan-result.js';
6
+ export interface TerminalReportOptions {
7
+ showPassed?: boolean;
8
+ showRemediation?: boolean;
9
+ compact?: boolean;
10
+ noColor?: boolean;
11
+ }
12
+ /**
13
+ * Generate terminal report from scan result
14
+ */
15
+ export declare function generateTerminalReport(result: ScanResult, options?: TerminalReportOptions): string;
16
+ /**
17
+ * Print report to console
18
+ */
19
+ export declare function printReport(result: ScanResult, options?: TerminalReportOptions): void;
20
+ //# sourceMappingURL=terminal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.d.ts","sourceRoot":"","sources":["../../src/reporters/terminal.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAEtD,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,UAAU,EAClB,OAAO,GAAE,qBAA0B,GAClC,MAAM,CAoCR;AAiWD;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,IAAI,CAGrF"}