lean-claudient-core 0.1.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.
- package/.reports/detailed-analysis_2026-06-20_01ed326b.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_08d39381.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_0a331144.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_0d54ffef.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_14bfa31c.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_211feac4.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_22381bc2.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_29b4ea0a.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_2df0ad14.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_343ec84c.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_3a01030d.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_3b4c99ec.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_3d368827.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_53544d3d.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_5721164a.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_57caf5e7.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_624302f5.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_62456384.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_636a52f1.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_63d1ad41.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_7451ccd7.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_74da4e9a.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_83a90083.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_867fbdd9.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_974c3299.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_a04639a2.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_a8e23d6d.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_aa9150f0.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_acbeee08.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_c4ffa0e2.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_c5f7684b.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_c963b1fa.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_d4bde41f.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_d6eb2497.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_ea6f7f58.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_ebf4e060.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_ec4313a9.html +200 -0
- package/.reports/detailed-analysis_2026-06-20_fc65d18e.html +200 -0
- package/.reports/executive-summary_2026-06-20_00406d50.html +109 -0
- package/.reports/executive-summary_2026-06-20_0bb202d3.html +109 -0
- package/.reports/executive-summary_2026-06-20_0bcd7481.html +109 -0
- package/.reports/executive-summary_2026-06-20_11506445.html +109 -0
- package/.reports/executive-summary_2026-06-20_13616cda.html +109 -0
- package/.reports/executive-summary_2026-06-20_19d41c2f.html +109 -0
- package/.reports/executive-summary_2026-06-20_1b0d6e96.html +109 -0
- package/.reports/executive-summary_2026-06-20_1e38670b.html +109 -0
- package/.reports/executive-summary_2026-06-20_1f32f793.html +109 -0
- package/.reports/executive-summary_2026-06-20_1f40f7d3.html +109 -0
- package/.reports/executive-summary_2026-06-20_25a40a7e.html +109 -0
- package/.reports/executive-summary_2026-06-20_26d11818.html +109 -0
- package/.reports/executive-summary_2026-06-20_26ed4593.html +109 -0
- package/.reports/executive-summary_2026-06-20_291b90a8.html +109 -0
- package/.reports/executive-summary_2026-06-20_2957a848.html +109 -0
- package/.reports/executive-summary_2026-06-20_2a04eb77.html +109 -0
- package/.reports/executive-summary_2026-06-20_2fa701f9.html +109 -0
- package/.reports/executive-summary_2026-06-20_327af8f5.html +109 -0
- package/.reports/executive-summary_2026-06-20_3418c729.html +109 -0
- package/.reports/executive-summary_2026-06-20_3571763d.html +109 -0
- package/.reports/executive-summary_2026-06-20_36225353.html +109 -0
- package/.reports/executive-summary_2026-06-20_3b2de891.html +109 -0
- package/.reports/executive-summary_2026-06-20_45b980c2.html +109 -0
- package/.reports/executive-summary_2026-06-20_46fcbf17.html +109 -0
- package/.reports/executive-summary_2026-06-20_48c8fa5e.html +109 -0
- package/.reports/executive-summary_2026-06-20_4ba55c43.html +109 -0
- package/.reports/executive-summary_2026-06-20_4f4498e6.html +109 -0
- package/.reports/executive-summary_2026-06-20_54c33bf0.html +109 -0
- package/.reports/executive-summary_2026-06-20_54cc7077.html +109 -0
- package/.reports/executive-summary_2026-06-20_5a12912e.html +109 -0
- package/.reports/executive-summary_2026-06-20_636fac87.html +109 -0
- package/.reports/executive-summary_2026-06-20_6587faaf.html +109 -0
- package/.reports/executive-summary_2026-06-20_6adbdd03.html +109 -0
- package/.reports/executive-summary_2026-06-20_6bf344ec.html +109 -0
- package/.reports/executive-summary_2026-06-20_7142aeed.html +109 -0
- package/.reports/executive-summary_2026-06-20_72bc0ceb.html +109 -0
- package/.reports/executive-summary_2026-06-20_775752ac.html +109 -0
- package/.reports/executive-summary_2026-06-20_7a9c3223.html +109 -0
- package/.reports/executive-summary_2026-06-20_808e6376.html +109 -0
- package/.reports/executive-summary_2026-06-20_8de9142d.html +109 -0
- package/.reports/executive-summary_2026-06-20_91981fbe.html +109 -0
- package/.reports/executive-summary_2026-06-20_93191c8c.html +109 -0
- package/.reports/executive-summary_2026-06-20_9be48a87.html +109 -0
- package/.reports/executive-summary_2026-06-20_9c127198.html +109 -0
- package/.reports/executive-summary_2026-06-20_9ee303ac.html +109 -0
- package/.reports/executive-summary_2026-06-20_9ee52709.html +109 -0
- package/.reports/executive-summary_2026-06-20_a0fa27de.html +109 -0
- package/.reports/executive-summary_2026-06-20_a1813e47.html +109 -0
- package/.reports/executive-summary_2026-06-20_a974edc1.html +109 -0
- package/.reports/executive-summary_2026-06-20_aa711737.html +109 -0
- package/.reports/executive-summary_2026-06-20_aa752246.html +109 -0
- package/.reports/executive-summary_2026-06-20_ac6f0927.html +109 -0
- package/.reports/executive-summary_2026-06-20_b231b143.html +109 -0
- package/.reports/executive-summary_2026-06-20_b570a2bd.html +109 -0
- package/.reports/executive-summary_2026-06-20_b6fbf650.html +109 -0
- package/.reports/executive-summary_2026-06-20_b9f8ddf3.html +109 -0
- package/.reports/executive-summary_2026-06-20_bf95cc63.html +109 -0
- package/.reports/executive-summary_2026-06-20_c0d0aefe.html +109 -0
- package/.reports/executive-summary_2026-06-20_c1933c36.html +109 -0
- package/.reports/executive-summary_2026-06-20_c99bba8a.html +109 -0
- package/.reports/executive-summary_2026-06-20_cc3846ac.html +109 -0
- package/.reports/executive-summary_2026-06-20_d485993c.html +109 -0
- package/.reports/executive-summary_2026-06-20_d56f75f7.html +109 -0
- package/.reports/executive-summary_2026-06-20_d57660cc.html +109 -0
- package/.reports/executive-summary_2026-06-20_dc036f62.html +109 -0
- package/.reports/executive-summary_2026-06-20_df783f47.html +109 -0
- package/.reports/executive-summary_2026-06-20_e2191adb.html +109 -0
- package/.reports/executive-summary_2026-06-20_e9f1d504.html +109 -0
- package/.reports/executive-summary_2026-06-20_ea82f5e1.html +109 -0
- package/.reports/executive-summary_2026-06-20_ec3e70cb.html +109 -0
- package/.reports/executive-summary_2026-06-20_ee6cf902.html +109 -0
- package/.reports/executive-summary_2026-06-20_f6cb657c.html +109 -0
- package/.reports/executive-summary_2026-06-20_f8c60046.html +109 -0
- package/.reports/executive-summary_2026-06-20_fa184840.html +109 -0
- package/.reports/executive-summary_2026-06-20_fc88bcb4.html +109 -0
- package/.reports/executive-summary_2026-06-20_ffa79c4e.html +109 -0
- package/README.md +53 -0
- package/dist/automation/actionApprover.d.ts +89 -0
- package/dist/automation/actionApprover.d.ts.map +1 -0
- package/dist/automation/actionApprover.js +264 -0
- package/dist/automation/actionApprover.js.map +1 -0
- package/dist/automation/actionExecutor.d.ts +125 -0
- package/dist/automation/actionExecutor.d.ts.map +1 -0
- package/dist/automation/actionExecutor.js +304 -0
- package/dist/automation/actionExecutor.js.map +1 -0
- package/dist/automation/alertRules.d.ts +55 -0
- package/dist/automation/alertRules.d.ts.map +1 -0
- package/dist/automation/alertRules.js +70 -0
- package/dist/automation/alertRules.js.map +1 -0
- package/dist/automation/alertSystem.d.ts +109 -0
- package/dist/automation/alertSystem.d.ts.map +1 -0
- package/dist/automation/alertSystem.js +303 -0
- package/dist/automation/alertSystem.js.map +1 -0
- package/dist/automation/competitorResponse.d.ts +119 -0
- package/dist/automation/competitorResponse.d.ts.map +1 -0
- package/dist/automation/competitorResponse.js +343 -0
- package/dist/automation/competitorResponse.js.map +1 -0
- package/dist/automation/composioClient.d.ts +107 -0
- package/dist/automation/composioClient.d.ts.map +1 -0
- package/dist/automation/composioClient.js +286 -0
- package/dist/automation/composioClient.js.map +1 -0
- package/dist/automation/crmExport.d.ts +116 -0
- package/dist/automation/crmExport.d.ts.map +1 -0
- package/dist/automation/crmExport.js +282 -0
- package/dist/automation/crmExport.js.map +1 -0
- package/dist/automation/crmIntegration.d.ts +83 -0
- package/dist/automation/crmIntegration.d.ts.map +1 -0
- package/dist/automation/crmIntegration.js +207 -0
- package/dist/automation/crmIntegration.js.map +1 -0
- package/dist/automation/gmailIntegration.d.ts +73 -0
- package/dist/automation/gmailIntegration.d.ts.map +1 -0
- package/dist/automation/gmailIntegration.js +184 -0
- package/dist/automation/gmailIntegration.js.map +1 -0
- package/dist/automation/index.d.ts +17 -0
- package/dist/automation/index.d.ts.map +1 -0
- package/dist/automation/index.js +17 -0
- package/dist/automation/index.js.map +1 -0
- package/dist/automation/jiraIntegration.d.ts +103 -0
- package/dist/automation/jiraIntegration.d.ts.map +1 -0
- package/dist/automation/jiraIntegration.js +222 -0
- package/dist/automation/jiraIntegration.js.map +1 -0
- package/dist/automation/jobQueue.d.ts +98 -0
- package/dist/automation/jobQueue.d.ts.map +1 -0
- package/dist/automation/jobQueue.js +207 -0
- package/dist/automation/jobQueue.js.map +1 -0
- package/dist/automation/leadQualification.d.ts +60 -0
- package/dist/automation/leadQualification.d.ts.map +1 -0
- package/dist/automation/leadQualification.js +204 -0
- package/dist/automation/leadQualification.js.map +1 -0
- package/dist/automation/qualificationRules.d.ts +100 -0
- package/dist/automation/qualificationRules.d.ts.map +1 -0
- package/dist/automation/qualificationRules.js +202 -0
- package/dist/automation/qualificationRules.js.map +1 -0
- package/dist/automation/responseTemplates.d.ts +64 -0
- package/dist/automation/responseTemplates.d.ts.map +1 -0
- package/dist/automation/responseTemplates.js +374 -0
- package/dist/automation/responseTemplates.js.map +1 -0
- package/dist/automation/scheduler.d.ts +85 -0
- package/dist/automation/scheduler.d.ts.map +1 -0
- package/dist/automation/scheduler.js +194 -0
- package/dist/automation/scheduler.js.map +1 -0
- package/dist/automation/types.d.ts +223 -0
- package/dist/automation/types.d.ts.map +1 -0
- package/dist/automation/types.js +32 -0
- package/dist/automation/types.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +575 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/compression/caveman.d.ts +14 -0
- package/dist/compression/caveman.d.ts.map +1 -0
- package/dist/compression/caveman.js +188 -0
- package/dist/compression/caveman.js.map +1 -0
- package/dist/compression/caveman.test.d.ts +2 -0
- package/dist/compression/caveman.test.d.ts.map +1 -0
- package/dist/compression/caveman.test.js.map +1 -0
- package/dist/config/configManager.d.ts +6 -0
- package/dist/config/configManager.d.ts.map +1 -0
- package/dist/config/configManager.js +62 -0
- package/dist/config/configManager.js.map +1 -0
- package/dist/config/schema.d.ts +95 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +19 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/context/autoCompact.d.ts +19 -0
- package/dist/context/autoCompact.d.ts.map +1 -0
- package/dist/context/autoCompact.js +101 -0
- package/dist/context/autoCompact.js.map +1 -0
- package/dist/context/readDedup.d.ts +21 -0
- package/dist/context/readDedup.d.ts.map +1 -0
- package/dist/context/readDedup.js +55 -0
- package/dist/context/readDedup.js.map +1 -0
- package/dist/context/toolBudgets.d.ts +15 -0
- package/dist/context/toolBudgets.d.ts.map +1 -0
- package/dist/context/toolBudgets.js +35 -0
- package/dist/context/toolBudgets.js.map +1 -0
- package/dist/core/auditLogger.d.ts +30 -0
- package/dist/core/auditLogger.d.ts.map +1 -0
- package/dist/core/auditLogger.js +51 -0
- package/dist/core/auditLogger.js.map +1 -0
- package/dist/core/stateManager.d.ts +10 -0
- package/dist/core/stateManager.d.ts.map +1 -0
- package/dist/core/stateManager.js +59 -0
- package/dist/core/stateManager.js.map +1 -0
- package/dist/database/feedbackSchema.d.ts +80 -0
- package/dist/database/feedbackSchema.d.ts.map +1 -0
- package/dist/database/feedbackSchema.js +94 -0
- package/dist/database/feedbackSchema.js.map +1 -0
- package/dist/database/leadsSchema.d.ts +99 -0
- package/dist/database/leadsSchema.d.ts.map +1 -0
- package/dist/database/leadsSchema.js +136 -0
- package/dist/database/leadsSchema.js.map +1 -0
- package/dist/intelligence/competitorScoring.d.ts +25 -0
- package/dist/intelligence/competitorScoring.d.ts.map +1 -0
- package/dist/intelligence/competitorScoring.js +181 -0
- package/dist/intelligence/competitorScoring.js.map +1 -0
- package/dist/intelligence/competitorTracker.d.ts +36 -0
- package/dist/intelligence/competitorTracker.d.ts.map +1 -0
- package/dist/intelligence/competitorTracker.js +286 -0
- package/dist/intelligence/competitorTracker.js.map +1 -0
- package/dist/intelligence/competitorTypes.d.ts +93 -0
- package/dist/intelligence/competitorTypes.d.ts.map +1 -0
- package/dist/intelligence/competitorTypes.js +6 -0
- package/dist/intelligence/competitorTypes.js.map +1 -0
- package/dist/intelligence/competitors.json +76 -0
- package/dist/intelligence/feedbackLoop.d.ts +118 -0
- package/dist/intelligence/feedbackLoop.d.ts.map +1 -0
- package/dist/intelligence/feedbackLoop.js +368 -0
- package/dist/intelligence/feedbackLoop.js.map +1 -0
- package/dist/intelligence/gitHubTracker.d.ts +14 -0
- package/dist/intelligence/gitHubTracker.d.ts.map +1 -0
- package/dist/intelligence/gitHubTracker.js +153 -0
- package/dist/intelligence/gitHubTracker.js.map +1 -0
- package/dist/intelligence/hackerNewsScanner.d.ts +21 -0
- package/dist/intelligence/hackerNewsScanner.d.ts.map +1 -0
- package/dist/intelligence/hackerNewsScanner.js +88 -0
- package/dist/intelligence/hackerNewsScanner.js.map +1 -0
- package/dist/intelligence/hiringSignals.d.ts +16 -0
- package/dist/intelligence/hiringSignals.d.ts.map +1 -0
- package/dist/intelligence/hiringSignals.js +132 -0
- package/dist/intelligence/hiringSignals.js.map +1 -0
- package/dist/intelligence/index.d.ts +9 -0
- package/dist/intelligence/index.d.ts.map +1 -0
- package/dist/intelligence/index.js +9 -0
- package/dist/intelligence/index.js.map +1 -0
- package/dist/intelligence/leadEnrichment.d.ts +59 -0
- package/dist/intelligence/leadEnrichment.d.ts.map +1 -0
- package/dist/intelligence/leadEnrichment.js +209 -0
- package/dist/intelligence/leadEnrichment.js.map +1 -0
- package/dist/intelligence/leadEnrichmentTypes.d.ts +49 -0
- package/dist/intelligence/leadEnrichmentTypes.d.ts.map +1 -0
- package/dist/intelligence/leadEnrichmentTypes.js +7 -0
- package/dist/intelligence/leadEnrichmentTypes.js.map +1 -0
- package/dist/intelligence/marketScanner.d.ts +18 -0
- package/dist/intelligence/marketScanner.d.ts.map +1 -0
- package/dist/intelligence/marketScanner.js +225 -0
- package/dist/intelligence/marketScanner.js.map +1 -0
- package/dist/intelligence/polymarketScanner.d.ts +20 -0
- package/dist/intelligence/polymarketScanner.d.ts.map +1 -0
- package/dist/intelligence/polymarketScanner.js +88 -0
- package/dist/intelligence/polymarketScanner.js.map +1 -0
- package/dist/intelligence/redditScanner.d.ts +22 -0
- package/dist/intelligence/redditScanner.d.ts.map +1 -0
- package/dist/intelligence/redditScanner.js +89 -0
- package/dist/intelligence/redditScanner.js.map +1 -0
- package/dist/intelligence/signalAggregator.d.ts +10 -0
- package/dist/intelligence/signalAggregator.d.ts.map +1 -0
- package/dist/intelligence/signalAggregator.js +64 -0
- package/dist/intelligence/signalAggregator.js.map +1 -0
- package/dist/intelligence/trendAnalysis.d.ts +13 -0
- package/dist/intelligence/trendAnalysis.d.ts.map +1 -0
- package/dist/intelligence/trendAnalysis.js +106 -0
- package/dist/intelligence/trendAnalysis.js.map +1 -0
- package/dist/intelligence/twitterScanner.d.ts +22 -0
- package/dist/intelligence/twitterScanner.d.ts.map +1 -0
- package/dist/intelligence/twitterScanner.js +63 -0
- package/dist/intelligence/twitterScanner.js.map +1 -0
- package/dist/intelligence/types.d.ts +566 -0
- package/dist/intelligence/types.d.ts.map +1 -0
- package/dist/intelligence/types.js +87 -0
- package/dist/intelligence/types.js.map +1 -0
- package/dist/intelligence/userComplaints.d.ts +15 -0
- package/dist/intelligence/userComplaints.d.ts.map +1 -0
- package/dist/intelligence/userComplaints.js +193 -0
- package/dist/intelligence/userComplaints.js.map +1 -0
- package/dist/metrics/businessMetrics.d.ts +41 -0
- package/dist/metrics/businessMetrics.d.ts.map +1 -0
- package/dist/metrics/businessMetrics.js +120 -0
- package/dist/metrics/businessMetrics.js.map +1 -0
- package/dist/metrics/businessMetrics.test.d.ts +2 -0
- package/dist/metrics/businessMetrics.test.d.ts.map +1 -0
- package/dist/metrics/businessMetrics.test.js.map +1 -0
- package/dist/metrics/businessMetricsAgg.d.ts +85 -0
- package/dist/metrics/businessMetricsAgg.d.ts.map +1 -0
- package/dist/metrics/businessMetricsAgg.js +406 -0
- package/dist/metrics/businessMetricsAgg.js.map +1 -0
- package/dist/metrics/competitorMetrics.d.ts +57 -0
- package/dist/metrics/competitorMetrics.d.ts.map +1 -0
- package/dist/metrics/competitorMetrics.js +94 -0
- package/dist/metrics/competitorMetrics.js.map +1 -0
- package/dist/metrics/dashboardGenerator.d.ts +16 -0
- package/dist/metrics/dashboardGenerator.d.ts.map +1 -0
- package/dist/metrics/dashboardGenerator.js +313 -0
- package/dist/metrics/dashboardGenerator.js.map +1 -0
- package/dist/metrics/dashboardHTML.d.ts +18 -0
- package/dist/metrics/dashboardHTML.d.ts.map +1 -0
- package/dist/metrics/dashboardHTML.js +613 -0
- package/dist/metrics/dashboardHTML.js.map +1 -0
- package/dist/metrics/grafanaExport.d.ts +53 -0
- package/dist/metrics/grafanaExport.d.ts.map +1 -0
- package/dist/metrics/grafanaExport.js +277 -0
- package/dist/metrics/grafanaExport.js.map +1 -0
- package/dist/metrics/index.d.ts +17 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +17 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/leadsMetrics.d.ts +48 -0
- package/dist/metrics/leadsMetrics.d.ts.map +1 -0
- package/dist/metrics/leadsMetrics.js +82 -0
- package/dist/metrics/leadsMetrics.js.map +1 -0
- package/dist/metrics/leadsMetrics.test.d.ts +2 -0
- package/dist/metrics/leadsMetrics.test.d.ts.map +1 -0
- package/dist/metrics/leadsMetrics.test.js.map +1 -0
- package/dist/metrics/metricsTypes.d.ts +114 -0
- package/dist/metrics/metricsTypes.d.ts.map +1 -0
- package/dist/metrics/metricsTypes.js +7 -0
- package/dist/metrics/metricsTypes.js.map +1 -0
- package/dist/metrics/revenueProjection.d.ts +44 -0
- package/dist/metrics/revenueProjection.d.ts.map +1 -0
- package/dist/metrics/revenueProjection.js +239 -0
- package/dist/metrics/revenueProjection.js.map +1 -0
- package/dist/metrics/revenueTypes.d.ts +62 -0
- package/dist/metrics/revenueTypes.d.ts.map +1 -0
- package/dist/metrics/revenueTypes.js +7 -0
- package/dist/metrics/revenueTypes.js.map +1 -0
- package/dist/metrics/roiCalculator.d.ts +39 -0
- package/dist/metrics/roiCalculator.d.ts.map +1 -0
- package/dist/metrics/roiCalculator.js +128 -0
- package/dist/metrics/roiCalculator.js.map +1 -0
- package/dist/metrics/roiCalculator.test.d.ts +2 -0
- package/dist/metrics/roiCalculator.test.d.ts.map +1 -0
- package/dist/metrics/roiCalculator.test.js.map +1 -0
- package/dist/metrics/trendMetrics.d.ts +51 -0
- package/dist/metrics/trendMetrics.d.ts.map +1 -0
- package/dist/metrics/trendMetrics.js +116 -0
- package/dist/metrics/trendMetrics.js.map +1 -0
- package/dist/modes/conservativeCTOMode.d.ts +32 -0
- package/dist/modes/conservativeCTOMode.d.ts.map +1 -0
- package/dist/modes/conservativeCTOMode.js +98 -0
- package/dist/modes/conservativeCTOMode.js.map +1 -0
- package/dist/modes/index.d.ts +3 -0
- package/dist/modes/index.d.ts.map +1 -0
- package/dist/modes/index.js +3 -0
- package/dist/modes/index.js.map +1 -0
- package/dist/modes/seniorDeveloperMode.d.ts +17 -0
- package/dist/modes/seniorDeveloperMode.d.ts.map +1 -0
- package/dist/modes/seniorDeveloperMode.js +77 -0
- package/dist/modes/seniorDeveloperMode.js.map +1 -0
- package/dist/recovery/contextRecovery.d.ts +28 -0
- package/dist/recovery/contextRecovery.d.ts.map +1 -0
- package/dist/recovery/contextRecovery.js +113 -0
- package/dist/recovery/contextRecovery.js.map +1 -0
- package/dist/repair/errorDiagnostics.d.ts +28 -0
- package/dist/repair/errorDiagnostics.d.ts.map +1 -0
- package/dist/repair/errorDiagnostics.js +158 -0
- package/dist/repair/errorDiagnostics.js.map +1 -0
- package/dist/repair/skillCapture.d.ts +22 -0
- package/dist/repair/skillCapture.d.ts.map +1 -0
- package/dist/repair/skillCapture.js +119 -0
- package/dist/repair/skillCapture.js.map +1 -0
- package/dist/reporting/reportGenerator.d.ts +117 -0
- package/dist/reporting/reportGenerator.d.ts.map +1 -0
- package/dist/reporting/reportGenerator.js +613 -0
- package/dist/reporting/reportGenerator.js.map +1 -0
- package/dist/reporting/templates.d.ts +68 -0
- package/dist/reporting/templates.d.ts.map +1 -0
- package/dist/reporting/templates.js +629 -0
- package/dist/reporting/templates.js.map +1 -0
- package/dist/security/owaspScanner.d.ts +74 -0
- package/dist/security/owaspScanner.d.ts.map +1 -0
- package/dist/security/owaspScanner.js +309 -0
- package/dist/security/owaspScanner.js.map +1 -0
- package/dist/security/piiRedaction.d.ts +67 -0
- package/dist/security/piiRedaction.d.ts.map +1 -0
- package/dist/security/piiRedaction.js +189 -0
- package/dist/security/piiRedaction.js.map +1 -0
- package/dist/security/secretsDetection.d.ts +47 -0
- package/dist/security/secretsDetection.d.ts.map +1 -0
- package/dist/security/secretsDetection.js +272 -0
- package/dist/security/secretsDetection.js.map +1 -0
- package/dist/subagents/builder.d.ts +33 -0
- package/dist/subagents/builder.d.ts.map +1 -0
- package/dist/subagents/builder.js +158 -0
- package/dist/subagents/builder.js.map +1 -0
- package/dist/subagents/investigator.d.ts +31 -0
- package/dist/subagents/investigator.d.ts.map +1 -0
- package/dist/subagents/investigator.js +166 -0
- package/dist/subagents/investigator.js.map +1 -0
- package/dist/subagents/orchestrator.d.ts +48 -0
- package/dist/subagents/orchestrator.d.ts.map +1 -0
- package/dist/subagents/orchestrator.js +151 -0
- package/dist/subagents/orchestrator.js.map +1 -0
- package/dist/subagents/reviewer.d.ts +31 -0
- package/dist/subagents/reviewer.d.ts.map +1 -0
- package/dist/subagents/reviewer.js +154 -0
- package/dist/subagents/reviewer.js.map +1 -0
- package/dist/telemetry/tokenCounter.d.ts +21 -0
- package/dist/telemetry/tokenCounter.d.ts.map +1 -0
- package/dist/telemetry/tokenCounter.js +49 -0
- package/dist/telemetry/tokenCounter.js.map +1 -0
- package/package.json +61 -0
- package/src/automation/actionApprover.ts +342 -0
- package/src/automation/actionExecutor.ts +399 -0
- package/src/automation/alertRules.ts +113 -0
- package/src/automation/alertSystem.ts +402 -0
- package/src/automation/competitorResponse.ts +511 -0
- package/src/automation/composioClient.ts +360 -0
- package/src/automation/crmExport.ts +407 -0
- package/src/automation/crmIntegration.ts +268 -0
- package/src/automation/gmailIntegration.ts +244 -0
- package/src/automation/index.ts +17 -0
- package/src/automation/jiraIntegration.ts +310 -0
- package/src/automation/jobQueue.ts +278 -0
- package/src/automation/leadQualification.ts +270 -0
- package/src/automation/qualificationRules.ts +304 -0
- package/src/automation/responseTemplates.ts +419 -0
- package/src/automation/scheduler.ts +254 -0
- package/src/automation/types.ts +270 -0
- package/src/cli/index.ts +646 -0
- package/src/compression/caveman.ts +257 -0
- package/src/config/configManager.ts +63 -0
- package/src/config/schema.ts +27 -0
- package/src/context/autoCompact.ts +123 -0
- package/src/context/readDedup.ts +84 -0
- package/src/context/toolBudgets.ts +43 -0
- package/src/core/auditLogger.ts +69 -0
- package/src/core/stateManager.ts +73 -0
- package/src/database/feedbackSchema.ts +168 -0
- package/src/database/leadsSchema.ts +205 -0
- package/src/intelligence/competitorScoring.ts +292 -0
- package/src/intelligence/competitorTracker.ts +362 -0
- package/src/intelligence/competitorTypes.ts +100 -0
- package/src/intelligence/competitors.json +76 -0
- package/src/intelligence/feedbackLoop.ts +538 -0
- package/src/intelligence/gitHubTracker.ts +204 -0
- package/src/intelligence/hackerNewsScanner.ts +121 -0
- package/src/intelligence/hiringSignals.ts +162 -0
- package/src/intelligence/index.ts +9 -0
- package/src/intelligence/leadEnrichment.ts +275 -0
- package/src/intelligence/leadEnrichmentTypes.ts +54 -0
- package/src/intelligence/marketScanner.ts +285 -0
- package/src/intelligence/polymarketScanner.ts +120 -0
- package/src/intelligence/redditScanner.ts +122 -0
- package/src/intelligence/signalAggregator.ts +94 -0
- package/src/intelligence/trendAnalysis.ts +140 -0
- package/src/intelligence/twitterScanner.ts +94 -0
- package/src/intelligence/types.ts +130 -0
- package/src/intelligence/userComplaints.ts +236 -0
- package/src/metrics/businessMetrics.ts +186 -0
- package/src/metrics/businessMetricsAgg.ts +554 -0
- package/src/metrics/competitorMetrics.ts +175 -0
- package/src/metrics/dashboardGenerator.ts +335 -0
- package/src/metrics/dashboardHTML.ts +637 -0
- package/src/metrics/grafanaExport.ts +347 -0
- package/src/metrics/index.ts +17 -0
- package/src/metrics/leadsMetrics.ts +145 -0
- package/src/metrics/metricsTypes.ts +129 -0
- package/src/metrics/revenueProjection.ts +319 -0
- package/src/metrics/revenueTypes.ts +67 -0
- package/src/metrics/roiCalculator.ts +199 -0
- package/src/metrics/trendMetrics.ts +190 -0
- package/src/modes/conservativeCTOMode.ts +124 -0
- package/src/modes/index.ts +6 -0
- package/src/modes/seniorDeveloperMode.ts +94 -0
- package/src/recovery/contextRecovery.ts +141 -0
- package/src/repair/errorDiagnostics.ts +198 -0
- package/src/repair/skillCapture.ts +157 -0
- package/src/reporting/reportGenerator.ts +802 -0
- package/src/reporting/templates.ts +677 -0
- package/src/security/owaspScanner.ts +390 -0
- package/src/security/phase8Hardening.ts +536 -0
- package/src/security/piiRedaction.ts +215 -0
- package/src/security/secretsDetection.js +271 -0
- package/src/security/secretsDetection.ts +318 -0
- package/src/subagents/builder.ts +277 -0
- package/src/subagents/investigator.ts +224 -0
- package/src/subagents/orchestrator.ts +212 -0
- package/src/subagents/reviewer.ts +215 -0
- package/src/telemetry/tokenCounter.ts +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/reporting/templates.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAoBH;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,IAAI,KAAK,IAAI,OAAO,EAAE,CAAC;QACrB,OAAO,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC7C,CAAC;IACD,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1C,CAAC;IACD,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,IAAU;IACnC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IAChC,OAAO,GAAG,KAAK,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;AACnC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,SAAS,GAAG,KAAK,IAAI,CAAC,CAAC;IAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC;IAChD,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAClC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc;IAC9C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,2BAA2B;IAC3B,MAAM,UAAU,GAAG,0BAA0B,CAAC;IAC9C,MAAM,SAAS,GAAG,kCAAkC,CAAC;IAErD,IAAI,UAAU,CAAC;IACf,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAElD,KAAK,MAAM,SAAS,IAAI,YAAY,EAAE,CAAC;QACrC,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,SAAS,CAAC;QACd,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;YACxD,oCAAoC;YACpC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;YACzD,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,CAAC;QACD,SAAS,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,oBAAoB;IAC/C,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAsB;IAChE,OAAO;;;;;;WAME,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;iCAsBV,IAAI,CAAC,UAAU;;;;;;;;eAQjC,IAAI,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;+BAyBC,IAAI,CAAC,UAAU;;;;;;;;;eAS/B,IAAI,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAiCf,IAAI,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAuEI,IAAI,CAAC,KAAK;;UAElC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;;kCAE5C,IAAI,CAAC,WAAW;;;;;;;mCAOf,IAAI,CAAC,IAAI,EAAE,UAAU,IAAI,CAAC;;kCAE3B,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;cACxF,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,IAAI,CAAC,CAAC;;;;mCAIlF,IAAI,CAAC,IAAI,EAAE,cAAc,IAAI,CAAC;;;cAGnD,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,IAAI,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;;;mCAIvG,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,IAAI,CAAC,CAAC;;kCAEjD,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU;cAC1F,iBAAiB,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,IAAI,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,mBAAmB,IAAI,CAAC,CAAC,CAAC;;;;mCAItG,IAAI,CAAC,IAAI,EAAE,aAAa,IAAI,CAAC;;;;;;;;;QAUxD,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;;mCAEA,IAAI,CAAC,IAAI;mCACT,IAAI,CAAC,OAAO,eAAe,IAAI,CAAC,KAAK,gBAAgB,IAAI,CAAC,OAAO;;OAE7F,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,oEACf;;;MAIA,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QACrD,CAAC,CAAC;;;;UAIA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;KAGhE;QACG,CAAC,CAAC,EACN;;;4DAGwD,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,KAAK;4DAC1B,IAAI,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE;0DAC7D,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,OAAO;;;;;GAKxF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,IAAsB;IAChE,OAAO;;;;;;WAME,IAAI,CAAC,KAAK,MAAM,IAAI,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;iCA0BV,IAAI,CAAC,UAAU;;;;;;;;eAQjC,IAAI,CAAC,UAAU;;;;;;;;;;;eAWf,IAAI,CAAC,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAgDI,IAAI,CAAC,KAAK;;UAElC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;YAgBlE,IAAI,CAAC,UAAU;QACb,CAAC,CAAC;;;oBAGI,IAAI,CAAC,UAAU,CAAC,IAAI;oBACpB,IAAI,CAAC,UAAU,CAAC,cAAc;;;;oBAI9B,IAAI,CAAC,UAAU,CAAC,IAAI;oBACpB,IAAI,CAAC,UAAU,CAAC,aAAa;;;;oBAI7B,IAAI,CAAC,UAAU,CAAC,GAAG;oBACnB,IAAI,CAAC,UAAU,CAAC,mBAAmB;;;;oBAInC,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;;;WAGvC;QACG,CAAC,CAAC,iDACN;;;;;;;;;;;;;;;;;YAkBE,IAAI,CAAC,eAAe;QAClB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC;;oBAEzB,MAAM;oBACN,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,UAAU;;WAErB,CAAC;aACO,IAAI,CAAC,EAAE,CAAC;QACb,CAAC,CAAC,iDACN;;;;;;;;;;;;;;;;;;;YAoBE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAChB,IAAI,CAAC,EAAE,CAAC;;kBAEJ,IAAI,CAAC,IAAI;kBACT,IAAI,CAAC,OAAO;kBACZ,IAAI,CAAC,KAAK;kBACV,IAAI,CAAC,OAAO;kBACZ,IAAI,CAAC,OAAO;kBACZ,IAAI,CAAC,WAAW;;SAEzB,CACI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,iDAChB;;;;;;;;;;;;;;;;;YAkBE,IAAI,CAAC,mBAAmB;QACtB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC;aACrC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAM,EAAE,EAAE,CAAC;;oBAEvB,IAAI;oBACJ,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,WAAW;oBACb,CAAC,CAAC,aAAa;;WAExB,CAAC;aACO,IAAI,CAAC,EAAE,CAAC;QACb,CAAC,CAAC,iDACN;;;;;;;;;;;;;;;YAgBE,IAAI,CAAC,YAAY,EAAE,GAAG,CACpB,KAAK,CAAC,EAAE,CAAC;;kBAEL,KAAK,CAAC,KAAK;kBACX,KAAK,CAAC,SAAS;;SAExB,CACI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,kDAChB;;;;;MAMJ,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;QACrD,CAAC,CAAC;;;;UAIA,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,gDAAgD,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;;;KAGzG;QACG,CAAC,CAAC,EACN;;;yCAGqC,IAAI,CAAC,QAAQ,EAAE,EAAE,IAAI,KAAK;yCAC1B,IAAI,CAAC,QAAQ,EAAE,aAAa,IAAI,IAAI,IAAI,EAAE,CAAC,cAAc,EAAE;uCAC7D,IAAI,CAAC,QAAQ,EAAE,OAAO,IAAI,OAAO;;;;;GAKrE,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAAkB,EAAE,UAAkB;IACrE,OAAO;;;;yCAIgC,UAAU;gBACnC,UAAU;yCACe,UAAU;;0BAEzB,UAAU;;;;;;;;;;;;GAYjC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OWASP Top 10 Security Scanner
|
|
3
|
+
* Scans code for common security vulnerabilities
|
|
4
|
+
*/
|
|
5
|
+
export interface SecurityFinding {
|
|
6
|
+
category: string;
|
|
7
|
+
cweId: string;
|
|
8
|
+
cvssScore: number;
|
|
9
|
+
severity: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
|
|
10
|
+
title: string;
|
|
11
|
+
description: string;
|
|
12
|
+
location?: {
|
|
13
|
+
file?: string;
|
|
14
|
+
line?: number;
|
|
15
|
+
column?: number;
|
|
16
|
+
};
|
|
17
|
+
remediation: string;
|
|
18
|
+
evidence?: string;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Scan code for SQL injection vulnerabilities
|
|
22
|
+
*/
|
|
23
|
+
export declare function scanSQLInjection(code: string): SecurityFinding[];
|
|
24
|
+
/**
|
|
25
|
+
* Scan for hardcoded secrets
|
|
26
|
+
*/
|
|
27
|
+
export declare function scanHardcodedSecrets(code: string): SecurityFinding[];
|
|
28
|
+
/**
|
|
29
|
+
* Scan for dangerous use of eval()
|
|
30
|
+
*/
|
|
31
|
+
export declare function scanDangerousEval(code: string): SecurityFinding[];
|
|
32
|
+
/**
|
|
33
|
+
* Scan for XSS vulnerabilities
|
|
34
|
+
*/
|
|
35
|
+
export declare function scanXSS(code: string): SecurityFinding[];
|
|
36
|
+
/**
|
|
37
|
+
* Scan for insecure deserialization
|
|
38
|
+
*/
|
|
39
|
+
export declare function scanInsecureDeserialization(code: string): SecurityFinding[];
|
|
40
|
+
/**
|
|
41
|
+
* Scan for CORS misconfigurations
|
|
42
|
+
*/
|
|
43
|
+
export declare function scanCORSMisconfiguration(code: string): SecurityFinding[];
|
|
44
|
+
/**
|
|
45
|
+
* Scan for unvalidated redirects
|
|
46
|
+
*/
|
|
47
|
+
export declare function scanUnvalidatedRedirect(code: string): SecurityFinding[];
|
|
48
|
+
/**
|
|
49
|
+
* Scan for missing authentication on sensitive endpoints
|
|
50
|
+
*/
|
|
51
|
+
export declare function scanMissingAuth(code: string): SecurityFinding[];
|
|
52
|
+
/**
|
|
53
|
+
* Main scanner - run all checks
|
|
54
|
+
*/
|
|
55
|
+
export declare function scanCode(code: string): SecurityFinding[];
|
|
56
|
+
/**
|
|
57
|
+
* Scan file with location information
|
|
58
|
+
*/
|
|
59
|
+
export declare function scanFileForVulnerabilities(filePath: string, content: string): Promise<SecurityFinding[]>;
|
|
60
|
+
/**
|
|
61
|
+
* Generate security report
|
|
62
|
+
*/
|
|
63
|
+
export declare function generateSecurityReport(findings: SecurityFinding[]): {
|
|
64
|
+
summary: {
|
|
65
|
+
total: number;
|
|
66
|
+
critical: number;
|
|
67
|
+
high: number;
|
|
68
|
+
medium: number;
|
|
69
|
+
low: number;
|
|
70
|
+
};
|
|
71
|
+
findings: SecurityFinding[];
|
|
72
|
+
riskLevel: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW' | 'NONE';
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=owaspScanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owaspScanner.d.ts","sourceRoot":"","sources":["../../src/security/owaspScanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE;QACT,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAgFD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAqBpE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBjE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBvD;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsB3E;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBxE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAsBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAqB/D;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE,CAqBxD;AAED;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,eAAe,EAAE,CAAC,CAS5B;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG;IACnE,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACF,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;CAC5D,CAoBA"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OWASP Top 10 Security Scanner
|
|
3
|
+
* Scans code for common security vulnerabilities
|
|
4
|
+
*/
|
|
5
|
+
const PATTERNS = {
|
|
6
|
+
// A01: SQL Injection - unparameterized queries
|
|
7
|
+
SQL_INJECTION: [
|
|
8
|
+
/\.query\s*\(\s*["'`]\s*SELECT\s+/gi,
|
|
9
|
+
/\.execute\s*\(\s*["'`]\s*SELECT\s+/gi,
|
|
10
|
+
/sql\s*=\s*["'`]\s*SELECT\s+.*\+\s*.*\s*["'`]/gi,
|
|
11
|
+
/db\.run\s*\(\s*["'`]\s*SELECT\s+/gi,
|
|
12
|
+
],
|
|
13
|
+
// A02: Cryptographic Failures - hardcoded secrets
|
|
14
|
+
HARDCODED_SECRETS: [
|
|
15
|
+
/password\s*[=:]\s*["']([^"']+)["']/gi,
|
|
16
|
+
/secret\s*[=:]\s*["']([^"']+)["']/gi,
|
|
17
|
+
/token\s*[=:]\s*["']([^"']+)["']/gi,
|
|
18
|
+
],
|
|
19
|
+
// A03: Injection - eval and Function constructor
|
|
20
|
+
DANGEROUS_EVAL: [
|
|
21
|
+
/\beval\s*\(/g,
|
|
22
|
+
/Function\s*\(\s*["'`]/g,
|
|
23
|
+
/setTimeout\s*\(\s*["'`]/g,
|
|
24
|
+
/setInterval\s*\(\s*["'`]/g,
|
|
25
|
+
],
|
|
26
|
+
// A03: Injection - template injection
|
|
27
|
+
TEMPLATE_INJECTION: [
|
|
28
|
+
/render\s*\(\s*userInput\s*\)/gi,
|
|
29
|
+
/interpolate\s*\(\s*userInput\s*\)/gi,
|
|
30
|
+
/template\s*\(\s*["'`]\s*\$\{.*\}\s*["'`]/gi,
|
|
31
|
+
],
|
|
32
|
+
// A04: Insecure Object Deserialization
|
|
33
|
+
INSECURE_DESERIALIZATION: [
|
|
34
|
+
/JSON\.parse\s*\(\s*userInput\s*\)/gi,
|
|
35
|
+
/pickle\.loads\s*\(/gi,
|
|
36
|
+
/unserialize\s*\(/gi,
|
|
37
|
+
],
|
|
38
|
+
// A05: Security Misconfiguration - CORS
|
|
39
|
+
INSECURE_CORS: [
|
|
40
|
+
/Access-Control-Allow-Origin\s*[:=]\s*["']\*["']/gi,
|
|
41
|
+
/cors\s*\(\s*\{[^}]*origin[^}]*\*[^}]*\}/gi,
|
|
42
|
+
],
|
|
43
|
+
// A06: Vulnerable Components - known patterns
|
|
44
|
+
VULNERABLE_DEPENDENCIES: [
|
|
45
|
+
/require\s*\(\s*["']lodash\.template["']\s*\)/gi,
|
|
46
|
+
/require\s*\(\s*["']express-unless["']\s*\)/gi,
|
|
47
|
+
],
|
|
48
|
+
// A07: Missing Authentication
|
|
49
|
+
MISSING_AUTH: [
|
|
50
|
+
/router\.get\s*\(\s*["'](\/admin|\/api).*["']\s*,\s*\(req,\s*res\)\s*=>/gi,
|
|
51
|
+
/router\.post\s*\(\s*["'](\/admin|\/api).*["']\s*,\s*\(req,\s*res\)\s*=>/gi,
|
|
52
|
+
],
|
|
53
|
+
// A09: Using Components with Known Vulnerabilities
|
|
54
|
+
OUTDATED_DEPENDENCIES: [
|
|
55
|
+
/"name":\s*"lodash"[^}]*"version":\s*"[0-3]\.[0-9]+\.[0-9]+"/gi,
|
|
56
|
+
/"name":\s*"express"[^}]*"version":\s*"[34]\.[0-9]+\.[0-9]+"/gi,
|
|
57
|
+
],
|
|
58
|
+
// A10: SSRF - unvalidated redirects
|
|
59
|
+
UNVALIDATED_REDIRECT: [
|
|
60
|
+
/redirect\s*\(\s*userInput\s*\)/gi,
|
|
61
|
+
/window\.location\s*=\s*userInput/gi,
|
|
62
|
+
/res\.redirect\s*\(\s*req\.query\.url\s*\)/gi,
|
|
63
|
+
],
|
|
64
|
+
// XSS - user input in HTML
|
|
65
|
+
XSS_VULNERABILITY: [
|
|
66
|
+
/innerHTML\s*=\s*userInput/gi,
|
|
67
|
+
/innerHTML\s*=\s*req\.query\./gi,
|
|
68
|
+
/innerHTML\s*=\s*req\.body\./gi,
|
|
69
|
+
/dangerouslySetInnerHTML/g,
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* Scan code for SQL injection vulnerabilities
|
|
74
|
+
*/
|
|
75
|
+
export function scanSQLInjection(code) {
|
|
76
|
+
const findings = [];
|
|
77
|
+
for (const pattern of PATTERNS.SQL_INJECTION) {
|
|
78
|
+
const matches = code.matchAll(pattern);
|
|
79
|
+
for (const match of matches) {
|
|
80
|
+
findings.push({
|
|
81
|
+
category: 'A01: SQL Injection',
|
|
82
|
+
cweId: 'CWE-89',
|
|
83
|
+
cvssScore: 9.8,
|
|
84
|
+
severity: 'CRITICAL',
|
|
85
|
+
title: 'Potential SQL Injection Vulnerability',
|
|
86
|
+
description: 'Unparameterized SQL query detected. This can be exploited to modify or retrieve database contents.',
|
|
87
|
+
remediation: 'Use parameterized queries or prepared statements with bound parameters.',
|
|
88
|
+
evidence: match[0].substring(0, 60),
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
return findings;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Scan for hardcoded secrets
|
|
96
|
+
*/
|
|
97
|
+
export function scanHardcodedSecrets(code) {
|
|
98
|
+
const findings = [];
|
|
99
|
+
for (const pattern of PATTERNS.HARDCODED_SECRETS) {
|
|
100
|
+
const matches = code.matchAll(pattern);
|
|
101
|
+
for (const match of matches) {
|
|
102
|
+
findings.push({
|
|
103
|
+
category: 'A02: Cryptographic Failures',
|
|
104
|
+
cweId: 'CWE-798',
|
|
105
|
+
cvssScore: 9.8,
|
|
106
|
+
severity: 'CRITICAL',
|
|
107
|
+
title: 'Hardcoded Secret Detected',
|
|
108
|
+
description: 'Credentials or secrets hardcoded in source code. This enables credential theft.',
|
|
109
|
+
remediation: 'Store credentials in environment variables, secure vaults (AWS Secrets Manager, HashiCorp Vault), or .env files (never committed).',
|
|
110
|
+
evidence: match[0].substring(0, 60),
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return findings;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Scan for dangerous use of eval()
|
|
118
|
+
*/
|
|
119
|
+
export function scanDangerousEval(code) {
|
|
120
|
+
const findings = [];
|
|
121
|
+
for (const pattern of PATTERNS.DANGEROUS_EVAL) {
|
|
122
|
+
const matches = code.matchAll(pattern);
|
|
123
|
+
for (const match of matches) {
|
|
124
|
+
findings.push({
|
|
125
|
+
category: 'A03: Injection',
|
|
126
|
+
cweId: 'CWE-95',
|
|
127
|
+
cvssScore: 8.6,
|
|
128
|
+
severity: 'HIGH',
|
|
129
|
+
title: 'Use of eval() or similar Dangerous Function',
|
|
130
|
+
description: 'eval() and similar functions can execute arbitrary code and should be avoided.',
|
|
131
|
+
remediation: 'Replace eval() with safer alternatives: JSON.parse() for JSON, or template literals with proper escaping.',
|
|
132
|
+
evidence: match[0].substring(0, 60),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return findings;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Scan for XSS vulnerabilities
|
|
140
|
+
*/
|
|
141
|
+
export function scanXSS(code) {
|
|
142
|
+
const findings = [];
|
|
143
|
+
for (const pattern of PATTERNS.XSS_VULNERABILITY) {
|
|
144
|
+
const matches = code.matchAll(pattern);
|
|
145
|
+
for (const match of matches) {
|
|
146
|
+
findings.push({
|
|
147
|
+
category: 'A03: Injection - XSS',
|
|
148
|
+
cweId: 'CWE-79',
|
|
149
|
+
cvssScore: 6.1,
|
|
150
|
+
severity: 'MEDIUM',
|
|
151
|
+
title: 'Potential Cross-Site Scripting (XSS) Vulnerability',
|
|
152
|
+
description: 'User input is directly inserted into HTML without sanitization. This allows attackers to inject malicious scripts.',
|
|
153
|
+
remediation: 'Use context-aware output encoding, Content Security Policy (CSP), and templating engines that auto-escape by default.',
|
|
154
|
+
evidence: match[0].substring(0, 60),
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return findings;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Scan for insecure deserialization
|
|
162
|
+
*/
|
|
163
|
+
export function scanInsecureDeserialization(code) {
|
|
164
|
+
const findings = [];
|
|
165
|
+
for (const pattern of PATTERNS.INSECURE_DESERIALIZATION) {
|
|
166
|
+
const matches = code.matchAll(pattern);
|
|
167
|
+
for (const match of matches) {
|
|
168
|
+
findings.push({
|
|
169
|
+
category: 'A08: Software and Data Integrity Failures',
|
|
170
|
+
cweId: 'CWE-502',
|
|
171
|
+
cvssScore: 8.1,
|
|
172
|
+
severity: 'HIGH',
|
|
173
|
+
title: 'Insecure Deserialization',
|
|
174
|
+
description: 'Deserializing untrusted data can lead to remote code execution or object injection attacks.',
|
|
175
|
+
remediation: 'Validate and sanitize all input before deserialization. Consider using safer formats like JSON instead of binary serialization.',
|
|
176
|
+
evidence: match[0].substring(0, 60),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return findings;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Scan for CORS misconfigurations
|
|
184
|
+
*/
|
|
185
|
+
export function scanCORSMisconfiguration(code) {
|
|
186
|
+
const findings = [];
|
|
187
|
+
for (const pattern of PATTERNS.INSECURE_CORS) {
|
|
188
|
+
const matches = code.matchAll(pattern);
|
|
189
|
+
for (const match of matches) {
|
|
190
|
+
findings.push({
|
|
191
|
+
category: 'A01: Broken Access Control',
|
|
192
|
+
cweId: 'CWE-942',
|
|
193
|
+
cvssScore: 5.3,
|
|
194
|
+
severity: 'MEDIUM',
|
|
195
|
+
title: 'Insecure CORS Configuration',
|
|
196
|
+
description: 'CORS allows all origins (*). This enables any website to access resources, bypassing same-origin policy.',
|
|
197
|
+
remediation: 'Explicitly specify allowed origins in CORS configuration. Never use wildcard (*) for sensitive APIs.',
|
|
198
|
+
evidence: match[0].substring(0, 60),
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
return findings;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Scan for unvalidated redirects
|
|
206
|
+
*/
|
|
207
|
+
export function scanUnvalidatedRedirect(code) {
|
|
208
|
+
const findings = [];
|
|
209
|
+
for (const pattern of PATTERNS.UNVALIDATED_REDIRECT) {
|
|
210
|
+
const matches = code.matchAll(pattern);
|
|
211
|
+
for (const match of matches) {
|
|
212
|
+
findings.push({
|
|
213
|
+
category: 'A01: Broken Access Control',
|
|
214
|
+
cweId: 'CWE-601',
|
|
215
|
+
cvssScore: 6.1,
|
|
216
|
+
severity: 'MEDIUM',
|
|
217
|
+
title: 'Unvalidated Redirect',
|
|
218
|
+
description: 'Redirecting to user-supplied URL without validation enables phishing attacks.',
|
|
219
|
+
remediation: 'Validate redirect URLs against a whitelist. Use relative URLs when possible.',
|
|
220
|
+
evidence: match[0].substring(0, 60),
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
return findings;
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Scan for missing authentication on sensitive endpoints
|
|
228
|
+
*/
|
|
229
|
+
export function scanMissingAuth(code) {
|
|
230
|
+
const findings = [];
|
|
231
|
+
for (const pattern of PATTERNS.MISSING_AUTH) {
|
|
232
|
+
const matches = code.matchAll(pattern);
|
|
233
|
+
for (const match of matches) {
|
|
234
|
+
findings.push({
|
|
235
|
+
category: 'A01: Broken Authentication',
|
|
236
|
+
cweId: 'CWE-306',
|
|
237
|
+
cvssScore: 8.1,
|
|
238
|
+
severity: 'HIGH',
|
|
239
|
+
title: 'Missing Authentication on Sensitive Endpoint',
|
|
240
|
+
description: 'Admin or API endpoints without authentication checks are exposed to unauthorized access.',
|
|
241
|
+
remediation: 'Add authentication and authorization checks to all sensitive endpoints. Use middleware to enforce authentication.',
|
|
242
|
+
evidence: match[0].substring(0, 60),
|
|
243
|
+
});
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return findings;
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Main scanner - run all checks
|
|
250
|
+
*/
|
|
251
|
+
export function scanCode(code) {
|
|
252
|
+
if (!code || typeof code !== 'string') {
|
|
253
|
+
return [];
|
|
254
|
+
}
|
|
255
|
+
const findings = [
|
|
256
|
+
...scanSQLInjection(code),
|
|
257
|
+
...scanHardcodedSecrets(code),
|
|
258
|
+
...scanDangerousEval(code),
|
|
259
|
+
...scanXSS(code),
|
|
260
|
+
...scanInsecureDeserialization(code),
|
|
261
|
+
...scanCORSMisconfiguration(code),
|
|
262
|
+
...scanUnvalidatedRedirect(code),
|
|
263
|
+
...scanMissingAuth(code),
|
|
264
|
+
];
|
|
265
|
+
// Deduplicate and sort by severity
|
|
266
|
+
const unique = Array.from(new Map(findings.map((f) => [f.evidence, f])).values());
|
|
267
|
+
const severityOrder = { CRITICAL: 0, HIGH: 1, MEDIUM: 2, LOW: 3 };
|
|
268
|
+
return unique.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
|
|
269
|
+
}
|
|
270
|
+
/**
|
|
271
|
+
* Scan file with location information
|
|
272
|
+
*/
|
|
273
|
+
export async function scanFileForVulnerabilities(filePath, content) {
|
|
274
|
+
const findings = scanCode(content);
|
|
275
|
+
return findings.map((f) => ({
|
|
276
|
+
...f,
|
|
277
|
+
location: {
|
|
278
|
+
file: filePath,
|
|
279
|
+
...f.location,
|
|
280
|
+
},
|
|
281
|
+
}));
|
|
282
|
+
}
|
|
283
|
+
/**
|
|
284
|
+
* Generate security report
|
|
285
|
+
*/
|
|
286
|
+
export function generateSecurityReport(findings) {
|
|
287
|
+
const summary = {
|
|
288
|
+
total: findings.length,
|
|
289
|
+
critical: findings.filter((f) => f.severity === 'CRITICAL').length,
|
|
290
|
+
high: findings.filter((f) => f.severity === 'HIGH').length,
|
|
291
|
+
medium: findings.filter((f) => f.severity === 'MEDIUM').length,
|
|
292
|
+
low: findings.filter((f) => f.severity === 'LOW').length,
|
|
293
|
+
};
|
|
294
|
+
let riskLevel = 'NONE';
|
|
295
|
+
if (summary.critical > 0)
|
|
296
|
+
riskLevel = 'CRITICAL';
|
|
297
|
+
else if (summary.high > 0)
|
|
298
|
+
riskLevel = 'HIGH';
|
|
299
|
+
else if (summary.medium > 0)
|
|
300
|
+
riskLevel = 'MEDIUM';
|
|
301
|
+
else if (summary.low > 0)
|
|
302
|
+
riskLevel = 'LOW';
|
|
303
|
+
return {
|
|
304
|
+
summary,
|
|
305
|
+
findings,
|
|
306
|
+
riskLevel,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=owaspScanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"owaspScanner.js","sourceRoot":"","sources":["../../src/security/owaspScanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PII Redaction Module
|
|
3
|
+
* Masks personally identifiable information in logs and metrics
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Mask email address
|
|
7
|
+
* user@example.com → user@***.com
|
|
8
|
+
*/
|
|
9
|
+
export declare function redactEmail(email: string): string;
|
|
10
|
+
/**
|
|
11
|
+
* Mask phone number
|
|
12
|
+
* 555-123-4567 → ***-***-4567
|
|
13
|
+
*/
|
|
14
|
+
export declare function redactPhone(phone: string): string;
|
|
15
|
+
/**
|
|
16
|
+
* Mask SSN
|
|
17
|
+
* 123-45-6789 → ***-**-6789
|
|
18
|
+
*/
|
|
19
|
+
export declare function redactSSN(ssn: string): string;
|
|
20
|
+
/**
|
|
21
|
+
* Mask credit card
|
|
22
|
+
* 1234-5678-9012-3456 → **-3456
|
|
23
|
+
*/
|
|
24
|
+
export declare function redactCreditCard(text: string): string;
|
|
25
|
+
/**
|
|
26
|
+
* Mask IPv4 address
|
|
27
|
+
* 192.168.1.1 → 192.168.*.*
|
|
28
|
+
*/
|
|
29
|
+
export declare function redactIPv4(text: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* Hash session ID for logs
|
|
32
|
+
* Allows correlation without exposing the actual ID
|
|
33
|
+
*/
|
|
34
|
+
export declare function redactSessionId(sessionId: string): string;
|
|
35
|
+
/**
|
|
36
|
+
* Hash user ID for logs
|
|
37
|
+
* Allows correlation without exposing the actual ID
|
|
38
|
+
*/
|
|
39
|
+
export declare function redactUserId(userId: string | number): string;
|
|
40
|
+
/**
|
|
41
|
+
* Mask UUID
|
|
42
|
+
* a1b2c3d4-e5f6-7890-abcd-ef1234567890 → a1b2****-****-****-****-****34567890
|
|
43
|
+
*/
|
|
44
|
+
export declare function redactUUID(text: string): string;
|
|
45
|
+
/**
|
|
46
|
+
* Redact all PII from a string
|
|
47
|
+
*/
|
|
48
|
+
export declare function redactText(text: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Redact PII from metrics payload
|
|
51
|
+
*/
|
|
52
|
+
export declare function redactMetrics(metrics: any): any;
|
|
53
|
+
/**
|
|
54
|
+
* Create a safe log entry with PII redacted
|
|
55
|
+
*/
|
|
56
|
+
export declare function createSafeLogEntry(level: string, message: string, context?: any): {
|
|
57
|
+
level: string;
|
|
58
|
+
message: string;
|
|
59
|
+
timestamp: string;
|
|
60
|
+
context?: any;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* Validate that no PII is present in the given text
|
|
64
|
+
* Returns true if PII is found, false if clean
|
|
65
|
+
*/
|
|
66
|
+
export declare function containsPII(text: string): boolean;
|
|
67
|
+
//# sourceMappingURL=piiRedaction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"piiRedaction.d.ts","sourceRoot":"","sources":["../../src/security/piiRedaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKrD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK/C;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAK5D;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY/C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,GAAG,CA2D/C;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,GAAG,GACZ;IACD,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,GAAG,CAAC;CACf,CAOA;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAUjD"}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PII Redaction Module
|
|
3
|
+
* Masks personally identifiable information in logs and metrics
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from 'crypto';
|
|
6
|
+
const PATTERNS = {
|
|
7
|
+
EMAIL: /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g,
|
|
8
|
+
PHONE: /(\d{3})[-.\s]?(\d{3})[-.\s]?(\d{4})/g,
|
|
9
|
+
SSN: /(\d{3})[-]?(\d{2})[-]?(\d{4})/g,
|
|
10
|
+
CREDIT_CARD: /\b(?:\d{4}[-\s]?){3}\d{4}\b/g,
|
|
11
|
+
IPV4: /\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\b/g,
|
|
12
|
+
UUID: /[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi,
|
|
13
|
+
SESSION_ID: /(?:sessionId|session_id|sid)['":\s=]*([a-zA-Z0-9-]{20,})/gi,
|
|
14
|
+
USER_ID: /(?:userId|user_id|uid)['":\s=]*(\d+|[a-f0-9-]{36})/gi,
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Mask email address
|
|
18
|
+
* user@example.com → user@***.com
|
|
19
|
+
*/
|
|
20
|
+
export function redactEmail(email) {
|
|
21
|
+
return email.replace(PATTERNS.EMAIL, (match) => {
|
|
22
|
+
const [local, domain] = match.split('@');
|
|
23
|
+
return `${local}@***.${domain.split('.').pop()}`;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Mask phone number
|
|
28
|
+
* 555-123-4567 → ***-***-4567
|
|
29
|
+
*/
|
|
30
|
+
export function redactPhone(phone) {
|
|
31
|
+
return phone.replace(PATTERNS.PHONE, '***-***-$3');
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Mask SSN
|
|
35
|
+
* 123-45-6789 → ***-**-6789
|
|
36
|
+
*/
|
|
37
|
+
export function redactSSN(ssn) {
|
|
38
|
+
return ssn.replace(PATTERNS.SSN, '***-**-$3');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Mask credit card
|
|
42
|
+
* 1234-5678-9012-3456 → **-3456
|
|
43
|
+
*/
|
|
44
|
+
export function redactCreditCard(text) {
|
|
45
|
+
return text.replace(PATTERNS.CREDIT_CARD, (match) => {
|
|
46
|
+
const lastFour = match.replace(/\D/g, '').slice(-4);
|
|
47
|
+
return `**-${lastFour}`;
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Mask IPv4 address
|
|
52
|
+
* 192.168.1.1 → 192.168.*.*
|
|
53
|
+
*/
|
|
54
|
+
export function redactIPv4(text) {
|
|
55
|
+
return text.replace(PATTERNS.IPV4, (match) => {
|
|
56
|
+
const parts = match.split('.');
|
|
57
|
+
return `${parts[0]}.${parts[1]}.*.*`;
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Hash session ID for logs
|
|
62
|
+
* Allows correlation without exposing the actual ID
|
|
63
|
+
*/
|
|
64
|
+
export function redactSessionId(sessionId) {
|
|
65
|
+
if (!sessionId)
|
|
66
|
+
return 'unknown';
|
|
67
|
+
const hash = createHash('sha256').update(sessionId).digest('hex');
|
|
68
|
+
return hash.substring(0, 8);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Hash user ID for logs
|
|
72
|
+
* Allows correlation without exposing the actual ID
|
|
73
|
+
*/
|
|
74
|
+
export function redactUserId(userId) {
|
|
75
|
+
if (!userId)
|
|
76
|
+
return 'unknown';
|
|
77
|
+
const str = String(userId);
|
|
78
|
+
const hash = createHash('sha256').update(str).digest('hex');
|
|
79
|
+
return hash.substring(0, 8);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Mask UUID
|
|
83
|
+
* a1b2c3d4-e5f6-7890-abcd-ef1234567890 → a1b2****-****-****-****-****34567890
|
|
84
|
+
*/
|
|
85
|
+
export function redactUUID(text) {
|
|
86
|
+
return text.replace(PATTERNS.UUID, (match) => {
|
|
87
|
+
return `${match.substring(0, 4)}****-****-****-****-****${match.substring(32)}`;
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Redact all PII from a string
|
|
92
|
+
*/
|
|
93
|
+
export function redactText(text) {
|
|
94
|
+
if (!text || typeof text !== 'string')
|
|
95
|
+
return text;
|
|
96
|
+
let result = text;
|
|
97
|
+
result = redactEmail(result);
|
|
98
|
+
result = redactPhone(result);
|
|
99
|
+
result = redactSSN(result);
|
|
100
|
+
result = redactCreditCard(result);
|
|
101
|
+
result = redactIPv4(result);
|
|
102
|
+
result = redactUUID(result);
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Redact PII from metrics payload
|
|
107
|
+
*/
|
|
108
|
+
export function redactMetrics(metrics) {
|
|
109
|
+
if (!metrics || typeof metrics !== 'object')
|
|
110
|
+
return metrics;
|
|
111
|
+
const redacted = JSON.parse(JSON.stringify(metrics));
|
|
112
|
+
// Redact known PII fields
|
|
113
|
+
const piiFields = [
|
|
114
|
+
'email',
|
|
115
|
+
'phone',
|
|
116
|
+
'ssn',
|
|
117
|
+
'creditCard',
|
|
118
|
+
'userId',
|
|
119
|
+
'userName',
|
|
120
|
+
'sessionId',
|
|
121
|
+
'ipAddress',
|
|
122
|
+
'hostname',
|
|
123
|
+
];
|
|
124
|
+
for (const field of piiFields) {
|
|
125
|
+
if (redacted[field]) {
|
|
126
|
+
switch (field) {
|
|
127
|
+
case 'email':
|
|
128
|
+
redacted[field] = redactEmail(redacted[field]);
|
|
129
|
+
break;
|
|
130
|
+
case 'phone':
|
|
131
|
+
redacted[field] = redactPhone(redacted[field]);
|
|
132
|
+
break;
|
|
133
|
+
case 'ssn':
|
|
134
|
+
redacted[field] = redactSSN(redacted[field]);
|
|
135
|
+
break;
|
|
136
|
+
case 'creditCard':
|
|
137
|
+
redacted[field] = redactCreditCard(redacted[field]);
|
|
138
|
+
break;
|
|
139
|
+
case 'userId':
|
|
140
|
+
redacted[field] = redactUserId(redacted[field]);
|
|
141
|
+
break;
|
|
142
|
+
case 'sessionId':
|
|
143
|
+
redacted[field] = redactSessionId(redacted[field]);
|
|
144
|
+
break;
|
|
145
|
+
case 'ipAddress':
|
|
146
|
+
redacted[field] = redactIPv4(redacted[field]);
|
|
147
|
+
break;
|
|
148
|
+
case 'hostname':
|
|
149
|
+
redacted[field] = `***`;
|
|
150
|
+
break;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Recursively redact nested objects
|
|
155
|
+
for (const key in redacted) {
|
|
156
|
+
if (typeof redacted[key] === 'string') {
|
|
157
|
+
redacted[key] = redactText(redacted[key]);
|
|
158
|
+
}
|
|
159
|
+
else if (typeof redacted[key] === 'object' && redacted[key] !== null) {
|
|
160
|
+
redacted[key] = redactMetrics(redacted[key]);
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return redacted;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Create a safe log entry with PII redacted
|
|
167
|
+
*/
|
|
168
|
+
export function createSafeLogEntry(level, message, context) {
|
|
169
|
+
return {
|
|
170
|
+
level,
|
|
171
|
+
message: redactText(message),
|
|
172
|
+
timestamp: new Date().toISOString(),
|
|
173
|
+
context: context ? redactMetrics(context) : undefined,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Validate that no PII is present in the given text
|
|
178
|
+
* Returns true if PII is found, false if clean
|
|
179
|
+
*/
|
|
180
|
+
export function containsPII(text) {
|
|
181
|
+
if (!text || typeof text !== 'string')
|
|
182
|
+
return false;
|
|
183
|
+
return (PATTERNS.EMAIL.test(text) ||
|
|
184
|
+
PATTERNS.PHONE.test(text) ||
|
|
185
|
+
PATTERNS.SSN.test(text) ||
|
|
186
|
+
PATTERNS.CREDIT_CARD.test(text) ||
|
|
187
|
+
PATTERNS.IPV4.test(text));
|
|
188
|
+
}
|
|
189
|
+
//# sourceMappingURL=piiRedaction.js.map
|