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
@@ -0,0 +1,346 @@
1
+ "use strict";
2
+ /**
3
+ * Terminal Reporter
4
+ * Formats and displays scan results in the terminal
5
+ */
6
+ var __importDefault = (this && this.__importDefault) || function (mod) {
7
+ return (mod && mod.__esModule) ? mod : { "default": mod };
8
+ };
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.generateTerminalReport = generateTerminalReport;
11
+ exports.printReport = printReport;
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ const finding_js_1 = require("../models/finding.js");
14
+ /**
15
+ * Generate terminal report from scan result
16
+ */
17
+ function generateTerminalReport(result, options = {}) {
18
+ const { showPassed = true, showRemediation = true, compact = false, noColor = false } = options;
19
+ // Disable chalk colors if noColor is true
20
+ if (noColor) {
21
+ chalk_1.default.level = 0;
22
+ }
23
+ const lines = [];
24
+ // Header
25
+ lines.push(generateHeader(result));
26
+ // Summary
27
+ lines.push(generateSummary(result));
28
+ // Findings by severity
29
+ if (result.findings.length > 0) {
30
+ lines.push(generateFindingsSection(result.findings, showRemediation, compact));
31
+ }
32
+ // Passed checks
33
+ if (showPassed && result.passed_checks.length > 0) {
34
+ lines.push(generatePassedSection(result.passed_checks, compact));
35
+ }
36
+ // Grade
37
+ lines.push(generateGradeSection(result));
38
+ // Quick actions
39
+ lines.push(generateActionsSection(result));
40
+ // Footer
41
+ lines.push(generateFooter(result));
42
+ return lines.join('\n');
43
+ }
44
+ /**
45
+ * Generate header section
46
+ */
47
+ function generateHeader(result) {
48
+ const lines = [];
49
+ lines.push('');
50
+ lines.push(chalk_1.default.cyan('🔍 SupaSec - Supabase Security Audit v1.0.0'));
51
+ lines.push(chalk_1.default.gray('━'.repeat(50)));
52
+ lines.push('');
53
+ lines.push(`${chalk_1.default.bold('🎯 Target:')} ${result.scan_metadata.target_url}`);
54
+ lines.push(`${chalk_1.default.bold('⏱️ Started:')} ${result.scan_metadata.scan_date}`);
55
+ lines.push('');
56
+ if (result.project_info.tables_count > 0) {
57
+ lines.push(chalk_1.default.green(`✓ Detected Supabase project`));
58
+ lines.push(chalk_1.default.gray(` Found ${result.project_info.tables_count} tables, ${result.project_info.rpcs_count} RPCs, ${result.project_info.storage_buckets} storage buckets`));
59
+ lines.push('');
60
+ }
61
+ return lines.join('\n');
62
+ }
63
+ /**
64
+ * Generate summary section
65
+ */
66
+ function generateSummary(result) {
67
+ const lines = [];
68
+ const counts = (0, finding_js_1.countFindingsBySeverity)(result.findings);
69
+ lines.push(chalk_1.default.gray('━'.repeat(50)));
70
+ lines.push(chalk_1.default.bold('📊 SCAN SUMMARY'));
71
+ lines.push(chalk_1.default.gray('━'.repeat(50)));
72
+ lines.push('');
73
+ if (counts.CRITICAL > 0) {
74
+ lines.push(chalk_1.default.red(`❌ CRITICAL: ${counts.CRITICAL} issues`));
75
+ }
76
+ if (counts.HIGH > 0) {
77
+ lines.push(chalk_1.default.yellow(`⚠️ HIGH: ${counts.HIGH} issues`));
78
+ }
79
+ if (counts.MEDIUM > 0) {
80
+ lines.push(chalk_1.default.hex('#FFA500')(`⚡ MEDIUM: ${counts.MEDIUM} issues`));
81
+ }
82
+ if (counts.LOW > 0) {
83
+ lines.push(chalk_1.default.blue(`ℹ️ LOW: ${counts.LOW} issues`));
84
+ }
85
+ if (counts.total === 0) {
86
+ lines.push(chalk_1.default.green('✅ No issues found!'));
87
+ }
88
+ lines.push('');
89
+ return lines.join('\n');
90
+ }
91
+ /**
92
+ * Generate findings section
93
+ */
94
+ function generateFindingsSection(findings, showRemediation, compact) {
95
+ const lines = [];
96
+ const sorted = (0, finding_js_1.sortFindingsBySeverity)(findings);
97
+ // Group by severity
98
+ const bySeverity = {
99
+ CRITICAL: [],
100
+ HIGH: [],
101
+ MEDIUM: [],
102
+ LOW: [],
103
+ INFO: []
104
+ };
105
+ for (const finding of sorted) {
106
+ bySeverity[finding.severity].push(finding);
107
+ }
108
+ // CRITICAL findings
109
+ if (bySeverity.CRITICAL.length > 0) {
110
+ lines.push(chalk_1.default.red('━'.repeat(50)));
111
+ lines.push(chalk_1.default.red.bold(`❌ CRITICAL (${bySeverity.CRITICAL.length} issues)`));
112
+ lines.push(chalk_1.default.red('━'.repeat(50)));
113
+ lines.push('');
114
+ for (const finding of bySeverity.CRITICAL) {
115
+ lines.push(formatFinding(finding, showRemediation, compact));
116
+ }
117
+ }
118
+ // HIGH findings
119
+ if (bySeverity.HIGH.length > 0) {
120
+ lines.push(chalk_1.default.yellow('━'.repeat(50)));
121
+ lines.push(chalk_1.default.yellow.bold(`⚠️ HIGH (${bySeverity.HIGH.length} issues)`));
122
+ lines.push(chalk_1.default.yellow('━'.repeat(50)));
123
+ lines.push('');
124
+ for (const finding of bySeverity.HIGH) {
125
+ lines.push(formatFinding(finding, showRemediation, compact));
126
+ }
127
+ }
128
+ // MEDIUM findings
129
+ if (bySeverity.MEDIUM.length > 0) {
130
+ lines.push(chalk_1.default.hex('#FFA500')('━'.repeat(50)));
131
+ lines.push(chalk_1.default.hex('#FFA500').bold(`⚡ MEDIUM (${bySeverity.MEDIUM.length} issues)`));
132
+ lines.push(chalk_1.default.hex('#FFA500')('━'.repeat(50)));
133
+ lines.push('');
134
+ for (const finding of bySeverity.MEDIUM) {
135
+ lines.push(formatFinding(finding, showRemediation, compact));
136
+ }
137
+ }
138
+ // LOW findings
139
+ if (bySeverity.LOW.length > 0 && !compact) {
140
+ lines.push(chalk_1.default.blue('━'.repeat(50)));
141
+ lines.push(chalk_1.default.blue.bold(`ℹ️ LOW (${bySeverity.LOW.length} issues)`));
142
+ lines.push(chalk_1.default.blue('━'.repeat(50)));
143
+ lines.push('');
144
+ for (const finding of bySeverity.LOW) {
145
+ lines.push(formatFinding(finding, showRemediation, compact));
146
+ }
147
+ }
148
+ return lines.join('\n');
149
+ }
150
+ /**
151
+ * Format a single finding
152
+ */
153
+ function formatFinding(finding, showRemediation, compact) {
154
+ const lines = [];
155
+ // Header with ID and title
156
+ const severityColor = getSeverityColor(finding.severity);
157
+ lines.push(severityColor(`┌─ ${finding.finding_id}: ${finding.title}`));
158
+ // Description
159
+ if (!compact) {
160
+ lines.push(`│ ${chalk_1.default.gray(finding.description)}`);
161
+ lines.push('│');
162
+ }
163
+ // Location
164
+ if (finding.location) {
165
+ const locationParts = [];
166
+ if (finding.location.file)
167
+ locationParts.push(finding.location.file);
168
+ if (finding.location.line)
169
+ locationParts.push(`line ${finding.location.line}`);
170
+ if (finding.location.table)
171
+ locationParts.push(`table ${finding.location.table}`);
172
+ if (locationParts.length > 0) {
173
+ lines.push(`│ ${chalk_1.default.cyan('Location:')} ${locationParts.join(', ')}`);
174
+ }
175
+ }
176
+ // Impact
177
+ if (!compact && finding.impact) {
178
+ lines.push(`│ ${chalk_1.default.cyan('Impact:')} ${finding.impact.description}`);
179
+ }
180
+ // Remediation
181
+ if (showRemediation && finding.remediation) {
182
+ lines.push('│');
183
+ lines.push(`│ ${chalk_1.default.green('Fix:')} ${finding.remediation.summary}`);
184
+ if (!compact && finding.remediation.sql) {
185
+ const sqlLines = finding.remediation.sql.split('\n').slice(0, 5);
186
+ lines.push(`│ ${chalk_1.default.gray('SQL:')}`);
187
+ for (const sqlLine of sqlLines) {
188
+ lines.push(`│ ${chalk_1.default.gray(sqlLine)}`);
189
+ }
190
+ if (finding.remediation.sql.split('\n').length > 5) {
191
+ lines.push(`│ ${chalk_1.default.gray('...')}`);
192
+ }
193
+ }
194
+ }
195
+ lines.push(severityColor('└'));
196
+ lines.push('');
197
+ return lines.join('\n');
198
+ }
199
+ /**
200
+ * Get color for severity
201
+ */
202
+ function getSeverityColor(severity) {
203
+ switch (severity) {
204
+ case 'CRITICAL':
205
+ return chalk_1.default.red;
206
+ case 'HIGH':
207
+ return chalk_1.default.yellow;
208
+ case 'MEDIUM':
209
+ return chalk_1.default.hex('#FFA500');
210
+ case 'LOW':
211
+ return chalk_1.default.blue;
212
+ case 'INFO':
213
+ return chalk_1.default.gray;
214
+ default:
215
+ return chalk_1.default.white;
216
+ }
217
+ }
218
+ /**
219
+ * Generate passed checks section
220
+ */
221
+ function generatePassedSection(passedChecks, compact) {
222
+ const lines = [];
223
+ lines.push(chalk_1.default.green('━'.repeat(50)));
224
+ lines.push(chalk_1.default.green.bold(`✅ PASSED (${passedChecks.length} checks)`));
225
+ lines.push(chalk_1.default.green('━'.repeat(50)));
226
+ lines.push('');
227
+ if (compact) {
228
+ const checkNames = passedChecks.map(c => c.title).join(', ');
229
+ lines.push(chalk_1.default.gray(checkNames));
230
+ }
231
+ else {
232
+ for (const check of passedChecks.slice(0, 10)) {
233
+ lines.push(chalk_1.default.green(` ✓ ${check.title}`));
234
+ lines.push(chalk_1.default.gray(` ${check.description}`));
235
+ }
236
+ if (passedChecks.length > 10) {
237
+ lines.push(chalk_1.default.gray(` ... and ${passedChecks.length - 10} more`));
238
+ }
239
+ }
240
+ lines.push('');
241
+ return lines.join('\n');
242
+ }
243
+ /**
244
+ * Generate grade section
245
+ */
246
+ function generateGradeSection(result) {
247
+ const lines = [];
248
+ const grade = result.grading.overall_grade;
249
+ const score = result.grading.overall_score;
250
+ lines.push(chalk_1.default.gray('━'.repeat(50)));
251
+ lines.push(chalk_1.default.bold('📈 SECURITY GRADE'));
252
+ lines.push(chalk_1.default.gray('━'.repeat(50)));
253
+ lines.push('');
254
+ // Grade badge
255
+ const gradeColor = getGradeColor(grade);
256
+ const gradeMessage = getGradeMessage(grade);
257
+ lines.push(` ${gradeColor.bold(`Grade ${grade}`)} - ${score}/100`);
258
+ lines.push(` ${gradeMessage}`);
259
+ lines.push('');
260
+ // Category scores if available
261
+ const categories = Object.entries(result.grading.category_scores);
262
+ if (categories.length > 0) {
263
+ lines.push(chalk_1.default.gray(' Category Breakdown:'));
264
+ for (const [category, scores] of categories) {
265
+ const catColor = scores.grade === 'A' || scores.grade === 'B' ? chalk_1.default.green :
266
+ scores.grade === 'C' ? chalk_1.default.yellow :
267
+ scores.grade === 'D' ? chalk_1.default.hex('#FFA500') : chalk_1.default.red;
268
+ lines.push(` ${category.padEnd(12)} ${catColor(`${scores.grade} (${scores.score})`)}`);
269
+ }
270
+ lines.push('');
271
+ }
272
+ return lines.join('\n');
273
+ }
274
+ /**
275
+ * Get color for grade
276
+ */
277
+ function getGradeColor(grade) {
278
+ switch (grade) {
279
+ case 'A':
280
+ return chalk_1.default.green;
281
+ case 'B':
282
+ return chalk_1.default.green;
283
+ case 'C':
284
+ return chalk_1.default.yellow;
285
+ case 'D':
286
+ return chalk_1.default.hex('#FFA500');
287
+ case 'F':
288
+ return chalk_1.default.red;
289
+ default:
290
+ return chalk_1.default.white;
291
+ }
292
+ }
293
+ /**
294
+ * Get message for grade
295
+ */
296
+ function getGradeMessage(grade) {
297
+ const messages = {
298
+ 'A': 'Excellent security posture!',
299
+ 'B': 'Good security, minor improvements possible.',
300
+ 'C': 'Average security, some issues need attention.',
301
+ 'D': 'Below average - serious issues found.',
302
+ 'F': 'Critical vulnerabilities detected!'
303
+ };
304
+ return messages[grade] || 'Review findings for details.';
305
+ }
306
+ /**
307
+ * Generate actions section
308
+ */
309
+ function generateActionsSection(result) {
310
+ const lines = [];
311
+ lines.push(chalk_1.default.gray('━'.repeat(50)));
312
+ lines.push(chalk_1.default.bold('🛠️ QUICK ACTIONS'));
313
+ lines.push(chalk_1.default.gray('━'.repeat(50)));
314
+ lines.push('');
315
+ if (result.findings.some(f => f.severity === 'CRITICAL' || f.severity === 'HIGH')) {
316
+ lines.push(chalk_1.default.yellow('Fix critical issues now:'));
317
+ lines.push(chalk_1.default.cyan(' $ supasec fix --interactive'));
318
+ lines.push('');
319
+ }
320
+ lines.push(chalk_1.default.gray('View detailed report:'));
321
+ lines.push(chalk_1.default.cyan(' $ supasec report --format html --output report.html'));
322
+ lines.push('');
323
+ lines.push(chalk_1.default.gray('Export for CI/CD:'));
324
+ lines.push(chalk_1.default.cyan(' $ supasec scan --format json --output audit.json'));
325
+ lines.push('');
326
+ return lines.join('\n');
327
+ }
328
+ /**
329
+ * Generate footer section
330
+ */
331
+ function generateFooter(result) {
332
+ const lines = [];
333
+ lines.push(chalk_1.default.gray('━'.repeat(50)));
334
+ lines.push(chalk_1.default.gray(`📄 Full report saved: ./supasec-report-${result.scan_metadata.scan_id}.json`));
335
+ lines.push(chalk_1.default.gray(`⏱️ Scan completed in ${result.scan_metadata.scan_duration_seconds.toFixed(1)}s`));
336
+ lines.push('');
337
+ return lines.join('\n');
338
+ }
339
+ /**
340
+ * Print report to console
341
+ */
342
+ function printReport(result, options) {
343
+ const report = generateTerminalReport(result, options);
344
+ console.log(report);
345
+ }
346
+ //# sourceMappingURL=terminal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal.js","sourceRoot":"","sources":["../../src/reporters/terminal.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAgBH,wDAuCC;AAoWD,kCAGC;AA5ZD,kDAA0B;AAC1B,qDAA0G;AAU1G;;GAEG;AACH,SAAgB,sBAAsB,CACpC,MAAkB,EAClB,UAAiC,EAAE;IAEnC,MAAM,EAAE,UAAU,GAAG,IAAI,EAAE,eAAe,GAAG,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEhG,0CAA0C;IAC1C,IAAI,OAAO,EAAE,CAAC;QACZ,eAAK,CAAC,KAAK,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnC,UAAU;IACV,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IAEpC,uBAAuB;IACvB,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,gBAAgB;IAChB,IAAI,UAAU,IAAI,MAAM,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC,CAAC;IACnE,CAAC;IAED,QAAQ;IACR,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAC;IAEzC,gBAAgB;IAChB,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC;IAE3C,SAAS;IACT,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnC,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAkB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC,CAAC;IACtE,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,GAAG,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;IAC9E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACvD,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,YAAY,CAAC,YAAY,YAAY,MAAM,CAAC,YAAY,CAAC,UAAU,UAAU,MAAM,CAAC,YAAY,CAAC,eAAe,kBAAkB,CAAC,CAAC,CAAC;QAC7K,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,MAAkB;IACzC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAA,oCAAuB,EAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAExD,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,QAAQ,SAAS,CAAC,CAAC,CAAC;IACjE,CAAC;IACD,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,aAAa,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,aAAa,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,IAAI,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;QACnB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,QAAmB,EACnB,eAAwB,EACxB,OAAgB;IAEhB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAA,mCAAsB,EAAC,QAAQ,CAAC,CAAC;IAEhD,oBAAoB;IACpB,MAAM,UAAU,GAAgC;QAC9C,QAAQ,EAAE,EAAE;QACZ,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,EAAE;QACP,IAAI,EAAE,EAAE;KACT,CAAC;IAEF,KAAK,MAAM,OAAO,IAAI,MAAM,EAAE,CAAC;QAC7B,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,oBAAoB;IACpB,IAAI,UAAU,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,UAAU,CAAC,QAAQ,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;QAChF,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACtC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,gBAAgB;IAChB,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,CAAC,IAAI,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;QAC7E,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YACtC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,aAAa,UAAU,CAAC,MAAM,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;QACvF,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,eAAe;IACf,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,UAAU,CAAC,GAAG,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;QACzE,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEf,KAAK,MAAM,OAAO,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC;YACrC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,OAAgB,EAAE,eAAwB,EAAE,OAAgB;IACjF,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,2BAA2B;IAC3B,MAAM,aAAa,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,OAAO,CAAC,UAAU,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAExE,cAAc;IACd,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,CAAC,IAAI,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,WAAW;IACX,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACrE,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI;YAAE,aAAa,CAAC,IAAI,CAAC,QAAQ,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK;YAAE,aAAa,CAAC,IAAI,CAAC,SAAS,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;QAElF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;IAED,SAAS;IACT,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,cAAc;IACd,IAAI,eAAe,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,KAAK,eAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAEtE,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;YACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACjE,KAAK,CAAC,IAAI,CAAC,KAAK,eAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAC3C,CAAC;YACD,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,OAAO,eAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,QAAkB;IAC1C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,UAAU;YACb,OAAO,eAAK,CAAC,GAAG,CAAC;QACnB,KAAK,MAAM;YACT,OAAO,eAAK,CAAC,MAAM,CAAC;QACtB,KAAK,QAAQ;YACX,OAAO,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,KAAK;YACR,OAAO,eAAK,CAAC,IAAI,CAAC;QACpB,KAAK,MAAM;YACT,OAAO,eAAK,CAAC,IAAI,CAAC;QACpB;YACE,OAAO,eAAK,CAAC,KAAK,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,YAAwE,EAAE,OAAgB;IACvH,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAC9C,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,YAAY,CAAC,MAAM,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAkB;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;IAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC;IAE3C,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,cAAc;IACd,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAE5C,KAAK,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACpE,KAAK,CAAC,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC,CAAC;IAChC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,+BAA+B;IAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAClE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;QAChD,KAAK,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,KAAK,GAAG,IAAI,MAAM,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,eAAK,CAAC,KAAK,CAAC,CAAC;gBAC5D,MAAM,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,CAAC;oBACrC,MAAM,CAAC,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,eAAK,CAAC,GAAG,CAAC;YACzE,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,QAAQ,CAAC,GAAG,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,KAAa;IAClC,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,GAAG;YACN,OAAO,eAAK,CAAC,KAAK,CAAC;QACrB,KAAK,GAAG;YACN,OAAO,eAAK,CAAC,KAAK,CAAC;QACrB,KAAK,GAAG;YACN,OAAO,eAAK,CAAC,MAAM,CAAC;QACtB,KAAK,GAAG;YACN,OAAO,eAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC9B,KAAK,GAAG;YACN,OAAO,eAAK,CAAC,GAAG,CAAC;QACnB;YACE,OAAO,eAAK,CAAC,KAAK,CAAC;IACvB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAa;IACpC,MAAM,QAAQ,GAA2B;QACvC,GAAG,EAAE,6BAA6B;QAClC,GAAG,EAAE,6CAA6C;QAClD,GAAG,EAAE,+CAA+C;QACpD,GAAG,EAAE,uCAAuC;QAC5C,GAAG,EAAE,oCAAoC;KAC1C,CAAC;IAEF,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,8BAA8B,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAAC,MAAkB;IAChD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC7C,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE,CAAC;QAClF,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACxD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC,CAAC;IAC7E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAkB;IACxC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,0CAA0C,MAAM,CAAC,aAAa,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC;IACtG,KAAK,CAAC,IAAI,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,aAAa,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1G,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,MAAkB,EAAE,OAA+B;IAC7E,MAAM,MAAM,GAAG,sBAAsB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Scanners Index
3
+ * Export all scanner modules
4
+ */
5
+ export * from './secrets/index.js';
6
+ export * from './rls/index.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scanners/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ /**
3
+ * Scanners Index
4
+ * Export all scanner 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("./secrets/index.js"), exports);
22
+ __exportStar(require("./rls/index.js"), exports);
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scanners/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;AAEH,qDAAmC;AACnC,iDAA+B"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * RLS Policy Analyzer
3
+ * Analyzes Row Level Security policies for vulnerabilities
4
+ */
5
+ import { Finding } from '../../models/finding.js';
6
+ export interface TableInfo {
7
+ name: string;
8
+ schema: string;
9
+ rowCount: number;
10
+ hasRLSEnabled: boolean;
11
+ columns: ColumnInfo[];
12
+ }
13
+ export interface ColumnInfo {
14
+ name: string;
15
+ type: string;
16
+ isNullable: boolean;
17
+ defaultValue?: string;
18
+ }
19
+ export interface PolicyInfo {
20
+ name: string;
21
+ table: string;
22
+ schema: string;
23
+ permissive: boolean;
24
+ roles: string[];
25
+ command: 'SELECT' | 'INSERT' | 'UPDATE' | 'DELETE' | 'ALL';
26
+ usingExpression?: string;
27
+ withCheckExpression?: string;
28
+ }
29
+ export interface RLSScanOptions {
30
+ tables: TableInfo[];
31
+ policies: PolicyInfo[];
32
+ supabaseUrl: string;
33
+ anonKey?: string;
34
+ }
35
+ export interface RLSScanResult {
36
+ findings: Finding[];
37
+ tablesScanned: number;
38
+ policiesScanned: number;
39
+ }
40
+ /**
41
+ * Analyze RLS configuration for security issues
42
+ */
43
+ export declare function analyzeRLS(options: RLSScanOptions): Promise<RLSScanResult>;
44
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../../src/scanners/rls/analyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAqB,MAAM,yBAAyB,CAAC;AAErE,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,EAAE,UAAU,EAAE,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAqBhF"}