api-tests-coverage 1.0.23 → 1.0.24

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 (131) hide show
  1. package/README.md +39 -0
  2. package/config.yaml.example +35 -0
  3. package/dist/dashboard/dist/assets/_basePickBy-D4Hl8chy.js +1 -0
  4. package/dist/dashboard/dist/assets/_baseUniq-BSUUnV_V.js +1 -0
  5. package/dist/dashboard/dist/assets/arc-DhDluTY5.js +1 -0
  6. package/dist/dashboard/dist/assets/architectureDiagram-VXUJARFQ-DGlUU7dC.js +36 -0
  7. package/dist/dashboard/dist/assets/blockDiagram-VD42YOAC-CgXi3kEZ.js +122 -0
  8. package/dist/dashboard/dist/assets/c4Diagram-YG6GDRKO-Cr3xB15y.js +10 -0
  9. package/dist/dashboard/dist/assets/channel-DYAie-7m.js +1 -0
  10. package/dist/dashboard/dist/assets/chunk-4BX2VUAB-BaW3__pI.js +1 -0
  11. package/dist/dashboard/dist/assets/chunk-55IACEB6-DyYevfEQ.js +1 -0
  12. package/dist/dashboard/dist/assets/chunk-B4BG7PRW-C2bwZFec.js +165 -0
  13. package/dist/dashboard/dist/assets/chunk-DI55MBZ5-DO0T2xne.js +220 -0
  14. package/dist/dashboard/dist/assets/chunk-FMBD7UC4-CCYA4j_f.js +15 -0
  15. package/dist/dashboard/dist/assets/chunk-QN33PNHL-Cdhqs7xo.js +1 -0
  16. package/dist/dashboard/dist/assets/chunk-QZHKN3VN-BzHw38Ki.js +1 -0
  17. package/dist/dashboard/dist/assets/chunk-TZMSLE5B-dkJ0rsgF.js +1 -0
  18. package/dist/dashboard/dist/assets/classDiagram-2ON5EDUG-DiIv5Pho.js +1 -0
  19. package/dist/dashboard/dist/assets/classDiagram-v2-WZHVMYZB-DiIv5Pho.js +1 -0
  20. package/dist/dashboard/dist/assets/clone-B4LorrSy.js +1 -0
  21. package/dist/dashboard/dist/assets/cose-bilkent-S5V4N54A-jzGbyPIS.js +1 -0
  22. package/dist/dashboard/dist/assets/dagre-6UL2VRFP-D7rgvBx1.js +4 -0
  23. package/dist/dashboard/dist/assets/diagram-PSM6KHXK-2rYklqon.js +24 -0
  24. package/dist/dashboard/dist/assets/diagram-QEK2KX5R-CGrvALqm.js +43 -0
  25. package/dist/dashboard/dist/assets/diagram-S2PKOQOG-DA3c-QP4.js +24 -0
  26. package/dist/dashboard/dist/assets/erDiagram-Q2GNP2WA-BsYH8cLH.js +60 -0
  27. package/dist/dashboard/dist/assets/flowDiagram-NV44I4VS-Da_JhBCy.js +162 -0
  28. package/dist/dashboard/dist/assets/ganttDiagram-JELNMOA3-D8FTswNn.js +267 -0
  29. package/dist/dashboard/dist/assets/gitGraphDiagram-V2S2FVAM-BFJR-ITH.js +65 -0
  30. package/dist/dashboard/dist/assets/graph-CIvnjOQQ.js +1 -0
  31. package/dist/dashboard/dist/assets/index-BWX0sSZn.css +1 -0
  32. package/dist/dashboard/dist/assets/index-CbAFWEor.js +777 -0
  33. package/dist/dashboard/dist/assets/infoDiagram-HS3SLOUP-OcK0Lxgi.js +2 -0
  34. package/dist/dashboard/dist/assets/journeyDiagram-XKPGCS4Q-DTJukVOY.js +139 -0
  35. package/dist/dashboard/dist/assets/kanban-definition-3W4ZIXB7-Di65fNuD.js +89 -0
  36. package/dist/dashboard/dist/assets/layout-DAt24RVX.js +1 -0
  37. package/dist/dashboard/dist/assets/mindmap-definition-VGOIOE7T-DxI8MXCF.js +68 -0
  38. package/dist/dashboard/dist/assets/pieDiagram-ADFJNKIX-BafKx3_Y.js +30 -0
  39. package/dist/dashboard/dist/assets/quadrantDiagram-AYHSOK5B-BcZsArkk.js +7 -0
  40. package/dist/dashboard/dist/assets/requirementDiagram-UZGBJVZJ-CqFAO2t6.js +64 -0
  41. package/dist/dashboard/dist/assets/sankeyDiagram-TZEHDZUN-CqSaCg-3.js +10 -0
  42. package/dist/dashboard/dist/assets/sequenceDiagram-WL72ISMW-6IXD1uqW.js +145 -0
  43. package/dist/dashboard/dist/assets/stateDiagram-FKZM4ZOC-DvSVQAfp.js +1 -0
  44. package/dist/dashboard/dist/assets/stateDiagram-v2-4FDKWEC3-BMFdt0QQ.js +1 -0
  45. package/dist/dashboard/dist/assets/timeline-definition-IT6M3QCI-Cll7Nvth.js +61 -0
  46. package/dist/dashboard/dist/assets/treemap-GDKQZRPO-DtqX8zNC.js +162 -0
  47. package/dist/dashboard/dist/assets/xychartDiagram-PRI3JC2R-zxwS9i0A.js +7 -0
  48. package/dist/dashboard/dist/index.html +2 -2
  49. package/dist/dashboard/dist/reports/coverage-summary.json +75 -1
  50. package/dist/dashboard/dist/reports/security-full.json +157 -0
  51. package/dist/src/compatibilityCoverage.d.ts +34 -15
  52. package/dist/src/compatibilityCoverage.d.ts.map +1 -1
  53. package/dist/src/compatibilityCoverage.js +387 -85
  54. package/dist/src/config/defaultConfig.d.ts.map +1 -1
  55. package/dist/src/config/defaultConfig.js +62 -0
  56. package/dist/src/config/schema.d.ts.map +1 -1
  57. package/dist/src/config/schema.js +1 -1
  58. package/dist/src/config/types.d.ts +81 -1
  59. package/dist/src/config/types.d.ts.map +1 -1
  60. package/dist/src/config/validateConfig.d.ts.map +1 -1
  61. package/dist/src/config/validateConfig.js +126 -0
  62. package/dist/src/contracts/compatibilityMatrix.d.ts +20 -0
  63. package/dist/src/contracts/compatibilityMatrix.d.ts.map +1 -0
  64. package/dist/src/contracts/compatibilityMatrix.js +198 -0
  65. package/dist/src/contracts/pactBrokerClient.d.ts +10 -0
  66. package/dist/src/contracts/pactBrokerClient.d.ts.map +1 -0
  67. package/dist/src/contracts/pactBrokerClient.js +117 -0
  68. package/dist/src/contracts/schemaEvolutionChecker.d.ts +17 -0
  69. package/dist/src/contracts/schemaEvolutionChecker.d.ts.map +1 -0
  70. package/dist/src/contracts/schemaEvolutionChecker.js +95 -0
  71. package/dist/src/contracts/springCloudContractParser.d.ts +10 -0
  72. package/dist/src/contracts/springCloudContractParser.d.ts.map +1 -0
  73. package/dist/src/contracts/springCloudContractParser.js +144 -0
  74. package/dist/src/discovery/fileClassifier.d.ts.map +1 -1
  75. package/dist/src/discovery/fileClassifier.js +25 -0
  76. package/dist/src/discovery/projectDiscovery.d.ts +2 -0
  77. package/dist/src/discovery/projectDiscovery.d.ts.map +1 -1
  78. package/dist/src/discovery/projectDiscovery.js +25 -25
  79. package/dist/src/index.js +233 -16
  80. package/dist/src/inference/routeInference.d.ts +10 -2
  81. package/dist/src/inference/routeInference.d.ts.map +1 -1
  82. package/dist/src/inference/routeInference.js +363 -62
  83. package/dist/src/languageDetection.d.ts.map +1 -1
  84. package/dist/src/languageDetection.js +21 -4
  85. package/dist/src/lib/index.d.ts +3 -0
  86. package/dist/src/lib/index.d.ts.map +1 -1
  87. package/dist/src/lib/index.js +3 -1
  88. package/dist/src/pipeline/stages/tia/parameterizedTestExpander.js +152 -79
  89. package/dist/src/pipeline/stages/tia/testEndpointMapper.d.ts +5 -1
  90. package/dist/src/pipeline/stages/tia/testEndpointMapper.d.ts.map +1 -1
  91. package/dist/src/pipeline/stages/tia/testEndpointMapper.js +356 -42
  92. package/dist/src/pipeline/stages/tia/testLayerClassifier.d.ts.map +1 -1
  93. package/dist/src/pipeline/stages/tia/testLayerClassifier.js +20 -5
  94. package/dist/src/pipeline/stages/tia/tiaStage.d.ts.map +1 -1
  95. package/dist/src/pipeline/stages/tia/tiaStage.js +3 -1
  96. package/dist/src/pipeline/stages/tia/types.d.ts +11 -2
  97. package/dist/src/pipeline/stages/tia/types.d.ts.map +1 -1
  98. package/dist/src/projectDefaults.d.ts +6 -0
  99. package/dist/src/projectDefaults.d.ts.map +1 -0
  100. package/dist/src/projectDefaults.js +43 -0
  101. package/dist/src/security/hub.d.ts +81 -0
  102. package/dist/src/security/hub.d.ts.map +1 -0
  103. package/dist/src/security/hub.js +420 -0
  104. package/dist/src/security/index.d.ts +1 -0
  105. package/dist/src/security/index.d.ts.map +1 -1
  106. package/dist/src/security/index.js +8 -2
  107. package/dist/src/security/normalizers/gitleaks.d.ts +7 -0
  108. package/dist/src/security/normalizers/gitleaks.d.ts.map +1 -0
  109. package/dist/src/security/normalizers/gitleaks.js +32 -0
  110. package/dist/src/security/scanners/gitleaks.d.ts +3 -0
  111. package/dist/src/security/scanners/gitleaks.d.ts.map +1 -0
  112. package/dist/src/security/scanners/gitleaks.js +105 -0
  113. package/dist/src/security/scanners/semgrep.d.ts.map +1 -1
  114. package/dist/src/security/scanners/semgrep.js +24 -2
  115. package/dist/src/security/scanners/trivy.d.ts.map +1 -1
  116. package/dist/src/security/scanners/trivy.js +24 -2
  117. package/dist/src/security/scanners/zap.d.ts.map +1 -1
  118. package/dist/src/security/scanners/zap.js +27 -2
  119. package/dist/src/security/types.d.ts +15 -1
  120. package/dist/src/security/types.d.ts.map +1 -1
  121. package/dist/src/streaming/schema/index.d.ts +23 -0
  122. package/dist/src/streaming/schema/index.d.ts.map +1 -0
  123. package/dist/src/streaming/schema/index.js +196 -0
  124. package/dist/src/summary/markdownRenderer.d.ts.map +1 -1
  125. package/dist/src/summary/markdownRenderer.js +15 -1
  126. package/dist/src/summary/summaryTypes.d.ts.map +1 -1
  127. package/dist/src/summary/summaryTypes.js +1 -0
  128. package/dist/src/unitAnalysis.d.ts +145 -0
  129. package/dist/src/unitAnalysis.d.ts.map +1 -0
  130. package/dist/src/unitAnalysis.js +1392 -0
  131. package/package.json +1 -1
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runGitleaks = runGitleaks;
37
+ /**
38
+ * Gitleaks scanner integration.
39
+ * Supports embedded (binary) and import (pre-generated JSON) modes.
40
+ */
41
+ const fs = __importStar(require("fs"));
42
+ const path = __importStar(require("path"));
43
+ const child_process_1 = require("child_process");
44
+ const util_1 = require("util");
45
+ const gitleaks_1 = require("../normalizers/gitleaks");
46
+ const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
47
+ const GITLEAKS_COMMAND = 'gitleaks detect --report-format json --report-path reports/gitleaks.json';
48
+ function reportGeneratedAt(reportPath) {
49
+ return fs.statSync(reportPath).mtime.toISOString();
50
+ }
51
+ async function runEmbedded(config, workspace) {
52
+ var _a, _b;
53
+ const binary = (_a = config.binaryPath) !== null && _a !== void 0 ? _a : 'gitleaks';
54
+ const timeout = ((_b = config.timeout) !== null && _b !== void 0 ? _b : 120) * 1000;
55
+ const reportFile = path.join(workspace, 'reports', 'gitleaks.json');
56
+ fs.mkdirSync(path.dirname(reportFile), { recursive: true });
57
+ await execFileAsync(binary, ['detect', '--source', workspace, '--report-format', 'json', '--report-path', reportFile], { timeout, maxBuffer: 50 * 1024 * 1024 });
58
+ const content = fs.readFileSync(reportFile, 'utf-8');
59
+ return { findings: (0, gitleaks_1.normalizeGitleaksOutput)(JSON.parse(content)), reportFile };
60
+ }
61
+ function importFromFile(reportPath) {
62
+ const resolved = path.resolve(reportPath);
63
+ if (!fs.existsSync(resolved)) {
64
+ throw new Error(`Gitleaks report file not found: ${resolved}`);
65
+ }
66
+ return (0, gitleaks_1.normalizeGitleaksOutput)(JSON.parse(fs.readFileSync(resolved, 'utf-8')));
67
+ }
68
+ async function runGitleaks(config, workspace = '.') {
69
+ if (!config.enabled || config.mode === 'disabled') {
70
+ return { scanner: 'gitleaks', findings: [], success: true };
71
+ }
72
+ try {
73
+ if (config.mode === 'import') {
74
+ if (!config.reportPath) {
75
+ throw new Error('Gitleaks import mode requires reportPath to be set');
76
+ }
77
+ const resolved = path.resolve(config.reportPath);
78
+ return {
79
+ scanner: 'gitleaks',
80
+ findings: importFromFile(resolved),
81
+ success: true,
82
+ metadata: {
83
+ reportFile: resolved,
84
+ generatedAt: reportGeneratedAt(resolved),
85
+ command: GITLEAKS_COMMAND,
86
+ },
87
+ };
88
+ }
89
+ const embedded = await runEmbedded(config, workspace);
90
+ return {
91
+ scanner: 'gitleaks',
92
+ findings: embedded.findings,
93
+ success: true,
94
+ metadata: {
95
+ reportFile: embedded.reportFile,
96
+ generatedAt: reportGeneratedAt(embedded.reportFile),
97
+ command: GITLEAKS_COMMAND,
98
+ },
99
+ };
100
+ }
101
+ catch (err) {
102
+ const error = err instanceof Error ? err.message : String(err);
103
+ return { scanner: 'gitleaks', findings: [], success: false, error };
104
+ }
105
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"semgrep.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/semgrep.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AAkEhF;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC,aAAa,CAAC,CAuBxB"}
1
+ {"version":3,"file":"semgrep.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/semgrep.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,oBAAoB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AAsEhF;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,oBAAoB,EAC5B,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC,aAAa,CAAC,CAyCxB"}
@@ -44,6 +44,9 @@ const child_process_1 = require("child_process");
44
44
  const util_1 = require("util");
45
45
  const semgrep_1 = require("../normalizers/semgrep");
46
46
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
47
+ function reportGeneratedAt(reportPath) {
48
+ return fs.statSync(reportPath).mtime.toISOString();
49
+ }
47
50
  /**
48
51
  * Run Semgrep in embedded mode.
49
52
  * Invokes the `semgrep` binary and parses its JSON output.
@@ -101,6 +104,7 @@ function importFromFile(reportPath) {
101
104
  * Run the Semgrep scanner according to the given configuration.
102
105
  */
103
106
  async function runSemgrep(config, workspace = '.') {
107
+ var _a, _b;
104
108
  if (!config.enabled || config.mode === 'disabled') {
105
109
  return { scanner: 'semgrep', findings: [], success: true };
106
110
  }
@@ -110,13 +114,31 @@ async function runSemgrep(config, workspace = '.') {
110
114
  if (!config.reportPath) {
111
115
  throw new Error('Semgrep import mode requires reportPath to be set');
112
116
  }
113
- findings = importFromFile(config.reportPath);
117
+ const reportFile = path.resolve(config.reportPath);
118
+ findings = importFromFile(reportFile);
119
+ return {
120
+ scanner: 'semgrep',
121
+ findings,
122
+ success: true,
123
+ metadata: {
124
+ reportFile,
125
+ generatedAt: reportGeneratedAt(reportFile),
126
+ command: `semgrep scan --json --config ${(_a = config.config) !== null && _a !== void 0 ? _a : 'p/default'} > ${reportFile}`,
127
+ },
128
+ };
114
129
  }
115
130
  else {
116
131
  // embedded or hybrid: run the binary
117
132
  findings = await runEmbedded(config, workspace);
118
133
  }
119
- return { scanner: 'semgrep', findings, success: true };
134
+ return {
135
+ scanner: 'semgrep',
136
+ findings,
137
+ success: true,
138
+ metadata: {
139
+ command: `semgrep scan --json --config ${(_b = config.config) !== null && _b !== void 0 ? _b : 'p/default'} ${workspace}`,
140
+ },
141
+ };
120
142
  }
121
143
  catch (err) {
122
144
  const error = err instanceof Error ? err.message : String(err);
@@ -1 +1 @@
1
- {"version":3,"file":"trivy.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/trivy.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AAuD9E;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC,aAAa,CAAC,CAsBxB"}
1
+ {"version":3,"file":"trivy.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/trivy.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,kBAAkB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AA2D9E;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,kBAAkB,EAC1B,SAAS,GAAE,MAAY,GACtB,OAAO,CAAC,aAAa,CAAC,CAwCxB"}
@@ -44,6 +44,9 @@ const child_process_1 = require("child_process");
44
44
  const util_1 = require("util");
45
45
  const trivy_1 = require("../normalizers/trivy");
46
46
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
47
+ function reportGeneratedAt(reportPath) {
48
+ return fs.statSync(reportPath).mtime.toISOString();
49
+ }
47
50
  /**
48
51
  * Run Trivy in embedded mode.
49
52
  * Invokes the `trivy` binary and parses its JSON output.
@@ -92,6 +95,7 @@ function importFromFile(reportPath) {
92
95
  * Run the Trivy scanner according to the given configuration.
93
96
  */
94
97
  async function runTrivy(config, workspace = '.') {
98
+ var _a, _b, _c, _d;
95
99
  if (!config.enabled || config.mode === 'disabled') {
96
100
  return { scanner: 'trivy', findings: [], success: true };
97
101
  }
@@ -101,12 +105,30 @@ async function runTrivy(config, workspace = '.') {
101
105
  if (!config.reportPath) {
102
106
  throw new Error('Trivy import mode requires reportPath to be set');
103
107
  }
104
- findings = importFromFile(config.reportPath);
108
+ const reportFile = path.resolve(config.reportPath);
109
+ findings = importFromFile(reportFile);
110
+ return {
111
+ scanner: 'trivy',
112
+ findings,
113
+ success: true,
114
+ metadata: {
115
+ reportFile,
116
+ generatedAt: reportGeneratedAt(reportFile),
117
+ command: `trivy ${((_a = config.scanMode) !== null && _a !== void 0 ? _a : 'fs')} --format json --scanners ${((_b = config.scanners) !== null && _b !== void 0 ? _b : ['vuln', 'secret']).join(',')} ${workspace}`,
118
+ },
119
+ };
105
120
  }
106
121
  else {
107
122
  findings = await runEmbedded(config, workspace);
108
123
  }
109
- return { scanner: 'trivy', findings, success: true };
124
+ return {
125
+ scanner: 'trivy',
126
+ findings,
127
+ success: true,
128
+ metadata: {
129
+ command: `trivy ${((_c = config.scanMode) !== null && _c !== void 0 ? _c : 'fs')} --format json --scanners ${((_d = config.scanners) !== null && _d !== void 0 ? _d : ['vuln', 'secret']).join(',')} ${workspace}`,
130
+ },
131
+ };
110
132
  }
111
133
  catch (err) {
112
134
  const error = err instanceof Error ? err.message : String(err);
@@ -1 +1 @@
1
- {"version":3,"file":"zap.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/zap.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AA+E5E;;GAEG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsB7E"}
1
+ {"version":3,"file":"zap.d.ts","sourceRoot":"","sources":["../../../../src/security/scanners/zap.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,gBAAgB,EAAmB,aAAa,EAAE,MAAM,UAAU,CAAC;AAmF5E;;GAEG;AACH,wBAAsB,MAAM,CAAC,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,aAAa,CAAC,CA4C7E"}
@@ -44,6 +44,9 @@ const child_process_1 = require("child_process");
44
44
  const util_1 = require("util");
45
45
  const zap_1 = require("../normalizers/zap");
46
46
  const execFileAsync = (0, util_1.promisify)(child_process_1.execFile);
47
+ function reportGeneratedAt(reportPath) {
48
+ return fs.statSync(reportPath).mtime.toISOString();
49
+ }
47
50
  /**
48
51
  * Run ZAP in embedded mode using the baseline scan script.
49
52
  */
@@ -121,12 +124,34 @@ async function runZap(config) {
121
124
  if (!config.reportPath) {
122
125
  throw new Error('ZAP import mode requires reportPath to be set');
123
126
  }
124
- findings = importFromFile(config.reportPath);
127
+ const reportFile = path.resolve(config.reportPath);
128
+ findings = importFromFile(reportFile);
129
+ return {
130
+ scanner: 'zap',
131
+ findings,
132
+ success: true,
133
+ metadata: {
134
+ reportFile,
135
+ generatedAt: reportGeneratedAt(reportFile),
136
+ command: config.targetUrl
137
+ ? `zap-baseline.py -J reports/zap.json -t ${config.targetUrl}`
138
+ : 'zap-baseline.py -J reports/zap.json -t https://your-service.example.com',
139
+ },
140
+ };
125
141
  }
126
142
  else {
127
143
  findings = await runEmbedded(config);
128
144
  }
129
- return { scanner: 'zap', findings, success: true };
145
+ return {
146
+ scanner: 'zap',
147
+ findings,
148
+ success: true,
149
+ metadata: {
150
+ command: config.targetUrl
151
+ ? `zap-baseline.py -t ${config.targetUrl} -J reports/zap-raw.json`
152
+ : undefined,
153
+ },
154
+ };
130
155
  }
131
156
  catch (err) {
132
157
  const error = err instanceof Error ? err.message : String(err);
@@ -28,6 +28,12 @@ export interface SecurityFinding {
28
28
  secretType?: string;
29
29
  scannerNativePayload?: unknown;
30
30
  }
31
+ export interface ScannerMetadata {
32
+ reportFile?: string;
33
+ version?: string;
34
+ generatedAt?: string;
35
+ command?: string;
36
+ }
31
37
  export type ScannerMode = 'embedded' | 'import' | 'disabled';
32
38
  export interface SemgrepScannerConfig {
33
39
  enabled: boolean;
@@ -79,10 +85,18 @@ export interface ZapScannerConfig {
79
85
  /** Path to pre-generated ZAP JSON/XML report (import mode) */
80
86
  reportPath?: string;
81
87
  }
88
+ export interface GitleaksScannerConfig {
89
+ enabled: boolean;
90
+ mode: ScannerMode;
91
+ binaryPath?: string;
92
+ timeout?: number;
93
+ reportPath?: string;
94
+ }
82
95
  export interface SecurityScannerConfigs {
83
96
  semgrep?: SemgrepScannerConfig;
84
97
  trivy?: TrivyScannerConfig;
85
98
  zap?: ZapScannerConfig;
99
+ gitleaks?: GitleaksScannerConfig;
86
100
  }
87
101
  export interface SecurityGateConfig {
88
102
  /** Fail if any CRITICAL finding exists */
@@ -117,7 +131,7 @@ export interface ScannerResult {
117
131
  /** Error message if the scanner failed */
118
132
  error?: string;
119
133
  /** Raw output or metadata from the scanner */
120
- metadata?: Record<string, unknown>;
134
+ metadata?: ScannerMetadata & Record<string, unknown>;
121
135
  }
122
136
  export interface SecurityScanSummary {
123
137
  scannersRun: ScannerName[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/security/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/security/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ export type SchemaFormat = 'avro' | 'protobuf' | 'json-schema';
2
+ export interface ParsedSchemaField {
3
+ name: string;
4
+ type: string;
5
+ required: boolean;
6
+ nullable?: boolean;
7
+ defaultValue?: string;
8
+ enumValues?: string[];
9
+ fields?: ParsedSchemaField[];
10
+ }
11
+ export interface ParsedSchema {
12
+ name: string;
13
+ format: SchemaFormat;
14
+ sourcePath?: string;
15
+ fields: ParsedSchemaField[];
16
+ raw: string;
17
+ }
18
+ export declare function parseAvroSchema(raw: string, sourcePath?: string): ParsedSchema;
19
+ export declare function parseProtoSchema(raw: string, sourcePath?: string): ParsedSchema;
20
+ export declare function parseJsonSchema(raw: string, sourcePath?: string): ParsedSchema;
21
+ export declare function parseSchemaFile(filePath: string): ParsedSchema | null;
22
+ export declare function discoverSchemaFiles(patterns: string | string[]): Promise<string[]>;
23
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/streaming/schema/index.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,YAAY,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;AAuED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAW9E;AAiBD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CA4B/E;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,YAAY,CAoB9E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAOrE;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASxF"}
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.parseAvroSchema = parseAvroSchema;
40
+ exports.parseProtoSchema = parseProtoSchema;
41
+ exports.parseJsonSchema = parseJsonSchema;
42
+ exports.parseSchemaFile = parseSchemaFile;
43
+ exports.discoverSchemaFiles = discoverSchemaFiles;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const fast_glob_1 = __importDefault(require("fast-glob"));
47
+ function stringifyDefault(value) {
48
+ if (value === undefined)
49
+ return undefined;
50
+ if (typeof value === 'string')
51
+ return value;
52
+ return JSON.stringify(value);
53
+ }
54
+ function parseAvroFieldType(typeValue) {
55
+ var _a;
56
+ if (Array.isArray(typeValue)) {
57
+ const nonNull = typeValue.filter((entry) => entry !== 'null');
58
+ const parsed = parseAvroFieldType((_a = nonNull[0]) !== null && _a !== void 0 ? _a : 'unknown');
59
+ return { ...parsed, nullable: typeValue.includes('null') };
60
+ }
61
+ if (typeof typeValue === 'string') {
62
+ return { type: typeValue, nullable: false };
63
+ }
64
+ if (!typeValue || typeof typeValue !== 'object') {
65
+ return { type: 'unknown', nullable: false };
66
+ }
67
+ const obj = typeValue;
68
+ const rawType = obj['type'];
69
+ if (rawType === 'enum') {
70
+ return {
71
+ type: 'enum',
72
+ nullable: false,
73
+ enumValues: Array.isArray(obj['symbols']) ? obj['symbols'] : [],
74
+ };
75
+ }
76
+ if (rawType === 'record') {
77
+ const nestedFields = Array.isArray(obj['fields']) ? obj['fields'] : [];
78
+ return {
79
+ type: 'record',
80
+ nullable: false,
81
+ fields: nestedFields.map(parseAvroField),
82
+ };
83
+ }
84
+ if (typeof rawType === 'string') {
85
+ return { type: rawType, nullable: false };
86
+ }
87
+ return { type: 'unknown', nullable: false };
88
+ }
89
+ function parseAvroField(field) {
90
+ const parsedType = parseAvroFieldType(field['type']);
91
+ const hasDefault = Object.prototype.hasOwnProperty.call(field, 'default');
92
+ const required = !parsedType.nullable && !hasDefault;
93
+ return {
94
+ name: typeof field['name'] === 'string' ? field['name'] : 'unknown',
95
+ type: parsedType.type,
96
+ required,
97
+ nullable: parsedType.nullable,
98
+ defaultValue: stringifyDefault(field['default']),
99
+ enumValues: parsedType.enumValues,
100
+ fields: parsedType.fields,
101
+ };
102
+ }
103
+ function parseAvroSchema(raw, sourcePath) {
104
+ const doc = JSON.parse(raw);
105
+ const fields = Array.isArray(doc['fields']) ? doc['fields'] : [];
106
+ return {
107
+ name: typeof doc['name'] === 'string' ? doc['name'] : path.basename(sourcePath !== null && sourcePath !== void 0 ? sourcePath : 'schema.avsc', '.avsc'),
108
+ format: 'avro',
109
+ sourcePath,
110
+ raw,
111
+ fields: fields.map(parseAvroField),
112
+ };
113
+ }
114
+ function parseProtoEnums(raw) {
115
+ const enumMap = new Map();
116
+ const enumRegex = /enum\s+(\w+)\s*\{([\s\S]*?)\}/g;
117
+ let match;
118
+ while ((match = enumRegex.exec(raw)) !== null) {
119
+ const symbols = match[2]
120
+ .split('\n')
121
+ .map((line) => line.trim())
122
+ .filter((line) => /^[A-Z0-9_]+\s*=/.test(line))
123
+ .map((line) => line.split('=')[0].trim());
124
+ enumMap.set(match[1], symbols);
125
+ }
126
+ return enumMap;
127
+ }
128
+ function parseProtoSchema(raw, sourcePath) {
129
+ var _a, _b, _c;
130
+ const enums = parseProtoEnums(raw);
131
+ const messageMatch = raw.match(/message\s+(\w+)\s*\{([\s\S]*?)\}/);
132
+ const body = (_a = messageMatch === null || messageMatch === void 0 ? void 0 : messageMatch[2]) !== null && _a !== void 0 ? _a : '';
133
+ const fieldRegex = /\b(optional|required|repeated)?\s*([\w.<>]+)\s+(\w+)\s*=\s*\d+/g;
134
+ const fields = [];
135
+ let fieldMatch;
136
+ while ((fieldMatch = fieldRegex.exec(body)) !== null) {
137
+ const qualifier = (_b = fieldMatch[1]) !== null && _b !== void 0 ? _b : '';
138
+ const type = fieldMatch[2];
139
+ const name = fieldMatch[3];
140
+ fields.push({
141
+ name,
142
+ type,
143
+ required: qualifier === 'required',
144
+ nullable: qualifier !== 'required',
145
+ enumValues: enums.get(type),
146
+ });
147
+ }
148
+ return {
149
+ name: (_c = messageMatch === null || messageMatch === void 0 ? void 0 : messageMatch[1]) !== null && _c !== void 0 ? _c : path.basename(sourcePath !== null && sourcePath !== void 0 ? sourcePath : 'schema.proto', '.proto'),
150
+ format: 'protobuf',
151
+ sourcePath,
152
+ raw,
153
+ fields,
154
+ };
155
+ }
156
+ function parseJsonSchema(raw, sourcePath) {
157
+ var _a;
158
+ const doc = JSON.parse(raw);
159
+ const required = new Set(Array.isArray(doc['required']) ? doc['required'] : []);
160
+ const properties = ((_a = doc['properties']) !== null && _a !== void 0 ? _a : {});
161
+ const fields = Object.entries(properties).map(([name, schema]) => ({
162
+ name,
163
+ type: typeof schema['type'] === 'string' ? schema['type'] : 'unknown',
164
+ required: required.has(name),
165
+ nullable: schema['nullable'] === true,
166
+ defaultValue: stringifyDefault(schema['default']),
167
+ enumValues: Array.isArray(schema['enum']) ? schema['enum'].map(String) : undefined,
168
+ }));
169
+ return {
170
+ name: typeof doc['title'] === 'string' ? doc['title'] : path.basename(sourcePath !== null && sourcePath !== void 0 ? sourcePath : 'schema.json'),
171
+ format: 'json-schema',
172
+ sourcePath,
173
+ raw,
174
+ fields,
175
+ };
176
+ }
177
+ function parseSchemaFile(filePath) {
178
+ const raw = fs.readFileSync(filePath, 'utf-8');
179
+ if (filePath.endsWith('.avsc'))
180
+ return parseAvroSchema(raw, filePath);
181
+ if (filePath.endsWith('.proto'))
182
+ return parseProtoSchema(raw, filePath);
183
+ if (filePath.endsWith('.schema.json') || filePath.endsWith('.json'))
184
+ return parseJsonSchema(raw, filePath);
185
+ console.warn(`Skipping unsupported schema file: ${filePath}`);
186
+ return null;
187
+ }
188
+ async function discoverSchemaFiles(patterns) {
189
+ const entries = Array.isArray(patterns)
190
+ ? patterns
191
+ : patterns
192
+ .split(',')
193
+ .map((entry) => entry.trim())
194
+ .filter(Boolean);
195
+ return (0, fast_glob_1.default)(entries, { absolute: true, onlyFiles: true, unique: true });
196
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"markdownRenderer.d.ts","sourceRoot":"","sources":["../../../src/summary/markdownRenderer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"markdownRenderer.d.ts","sourceRoot":"","sources":["../../../src/summary/markdownRenderer.ts"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ function coverageTypeTitle(type) {
34
34
  resilience: 'Resilience Coverage',
35
35
  compatibility: 'Compatibility & Contract Coverage',
36
36
  event: 'Event / Message Coverage',
37
+ unit: 'Unit Test Coverage',
37
38
  };
38
39
  return (_a = titles[type]) !== null && _a !== void 0 ? _a : `${type.charAt(0).toUpperCase()}${type.slice(1)} Coverage`;
39
40
  }
@@ -61,7 +62,7 @@ function pct(value) {
61
62
  * Returns up to `limit` bullet items.
62
63
  */
63
64
  function extractGaps(result, limit = 10) {
64
- var _a, _b, _c;
65
+ var _a, _b, _c, _d;
65
66
  const uncovered = result.totalItems - result.coveredItems;
66
67
  if (uncovered <= 0)
67
68
  return [];
@@ -94,6 +95,19 @@ function extractGaps(result, limit = 10) {
94
95
  gapCandidates.push(`\`${String(item)}\``);
95
96
  }
96
97
  }
98
+ const detailItems = details['items'];
99
+ if (Array.isArray(detailItems) && gapCandidates.length === 0) {
100
+ for (const item of detailItems) {
101
+ if (typeof item === 'object' && item !== null && item['covered'] === false) {
102
+ const id = String((_d = item['id']) !== null && _d !== void 0 ? _d : '');
103
+ if (id) {
104
+ gapCandidates.push(`\`${id}\``);
105
+ }
106
+ }
107
+ if (gapCandidates.length >= limit)
108
+ break;
109
+ }
110
+ }
97
111
  // integrationCoverage: details.uncoveredFlows = string[]
98
112
  const uncoveredFlows = details['uncoveredFlows'];
99
113
  if (Array.isArray(uncoveredFlows) && gapCandidates.length === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"summaryTypes.d.ts","sourceRoot":"","sources":["../../../src/summary/summaryTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,wDAAwD;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAWtC,CAAC"}
1
+ {"version":3,"file":"summaryTypes.d.ts","sourceRoot":"","sources":["../../../src/summary/summaryTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,KAAK,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,QAAQ,EAAE,OAAO,CAAC;IAClB,4CAA4C;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,wDAAwD;IACxD,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,EAAE,YAAY,CAAC;IACrB,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,2DAA2D;AAC3D,eAAO,MAAM,kBAAkB,EAAE,MAAM,EAYtC,CAAC"}
@@ -25,4 +25,5 @@ exports.KNOWN_METRIC_TYPES = [
25
25
  'resilience',
26
26
  'compatibility',
27
27
  'event',
28
+ 'unit',
28
29
  ];