@shriyanss/js-recon 1.1.4 → 1.2.1-alpha.2
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/.github/ISSUE_TEMPLATE/new_tech_support_request.md +26 -0
- package/CHANGELOG.md +28 -0
- package/README.md +20 -0
- package/build/analyze/engine/astEngine.js +20 -0
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/engine/index.js +4 -2
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/engine/requestEngine.js +18 -4
- package/build/analyze/engine/requestEngine.js.map +1 -1
- package/build/analyze/helpers/outputHelper.js +8 -0
- package/build/analyze/helpers/outputHelper.js.map +1 -0
- package/build/analyze/index.js +11 -3
- package/build/analyze/index.js.map +1 -1
- package/build/globalConfig.js +1 -1
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +18 -6
- package/build/index.js.map +1 -1
- package/build/lazyLoad/globals.js +6 -0
- package/build/lazyLoad/globals.js.map +1 -1
- package/build/lazyLoad/index.js +6 -2
- package/build/lazyLoad/index.js.map +1 -1
- package/build/{techDetect → lazyLoad/techDetect}/index.js +1 -1
- package/build/lazyLoad/techDetect/index.js.map +1 -0
- package/build/report/index.js +53 -0
- package/build/report/index.js.map +1 -0
- package/build/report/utility/genHtml.js +184 -0
- package/build/report/utility/genHtml.js.map +1 -0
- package/build/report/utility/initReportDb.js +71 -0
- package/build/report/utility/initReportDb.js.map +1 -0
- package/build/report/utility/markdownGen/addAnalyze.js +45 -0
- package/build/report/utility/markdownGen/addAnalyze.js.map +1 -0
- package/build/report/utility/markdownGen/addMappedJson.js +25 -0
- package/build/report/utility/markdownGen/addMappedJson.js.map +1 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js +23 -0
- package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -0
- package/build/report/utility/populateDb/populateEndpoints.js +42 -0
- package/build/report/utility/populateDb/populateEndpoints.js.map +1 -0
- package/build/report/utility/populateDb/populateMappedJson.js +23 -0
- package/build/report/utility/populateDb/populateMappedJson.js.map +1 -0
- package/build/report/utility/populateDb/populateMappedOpenapi.js +41 -0
- package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -0
- package/build/run/index.js +103 -44
- package/build/run/index.js.map +1 -1
- package/package.json +6 -2
- package/build/techDetect/index.js.map +0 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import initReportDb from "./utility/initReportDb.js";
|
|
12
|
+
import fs from "fs";
|
|
13
|
+
import { populateMappedJson } from "./utility/populateDb/populateMappedJson.js";
|
|
14
|
+
import Database from "better-sqlite3";
|
|
15
|
+
import { populateAnalysisFindings } from "./utility/populateDb/populateAnalysisFindings.js";
|
|
16
|
+
import populateEndpoints from "./utility/populateDb/populateEndpoints.js";
|
|
17
|
+
import populateMappedOpenapi from "./utility/populateDb/populateMappedOpenapi.js";
|
|
18
|
+
import genHtml from "./utility/genHtml.js";
|
|
19
|
+
const report = (sqliteDbPath, mappedJsonFilePath, analyzeJsonFilePath, endpointsJsonFilePath, mappedOpenapiJsonFilePath, reportFileName) => __awaiter(void 0, void 0, void 0, function* () {
|
|
20
|
+
console.log(chalk.cyan("[i] Running 'report' module"));
|
|
21
|
+
// check if db exists. if not, init
|
|
22
|
+
if (!fs.existsSync(sqliteDbPath)) {
|
|
23
|
+
yield initReportDb(sqliteDbPath);
|
|
24
|
+
console.log(chalk.green("[✓] Report database initialized successfully"));
|
|
25
|
+
}
|
|
26
|
+
const db = new Database(sqliteDbPath);
|
|
27
|
+
// first, populate mapped.json
|
|
28
|
+
if (mappedJsonFilePath) {
|
|
29
|
+
const chunks = JSON.parse(fs.readFileSync(mappedJsonFilePath, "utf8"));
|
|
30
|
+
yield populateMappedJson(db, chunks);
|
|
31
|
+
}
|
|
32
|
+
// then, move to analyze.json
|
|
33
|
+
if (analyzeJsonFilePath) {
|
|
34
|
+
const findings = JSON.parse(fs.readFileSync(analyzeJsonFilePath, "utf8"));
|
|
35
|
+
yield populateAnalysisFindings(db, findings);
|
|
36
|
+
}
|
|
37
|
+
// populate the endpoints
|
|
38
|
+
if (endpointsJsonFilePath) {
|
|
39
|
+
const endpoints = JSON.parse(fs.readFileSync(endpointsJsonFilePath, "utf8"));
|
|
40
|
+
yield populateEndpoints(db, endpoints);
|
|
41
|
+
}
|
|
42
|
+
// populate the mapped openapi
|
|
43
|
+
if (mappedOpenapiJsonFilePath) {
|
|
44
|
+
const openapi = JSON.parse(fs.readFileSync(mappedOpenapiJsonFilePath, "utf8"));
|
|
45
|
+
yield populateMappedOpenapi(db, openapi);
|
|
46
|
+
}
|
|
47
|
+
// finally, generate HTML report
|
|
48
|
+
if (reportFileName) {
|
|
49
|
+
yield genHtml(`${reportFileName}.html`, db);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
export default report;
|
|
53
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/report/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,YAAY,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,kBAAkB,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,kDAAkD,CAAC;AAC5F,OAAO,iBAAiB,MAAM,2CAA2C,CAAC;AAC1E,OAAO,qBAAqB,MAAM,+CAA+C,CAAC;AAClF,OAAO,OAAO,MAAM,sBAAsB,CAAC;AAE3C,MAAM,MAAM,GAAG,CACX,YAAoB,EACpB,kBAAsC,EACtC,mBAAuC,EACvC,qBAAyC,EACzC,yBAA6C,EAC7C,cAAkC,EACpC,EAAE;IACA,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IAEvD,mCAAmC;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,MAAM,YAAY,CAAC,YAAY,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEtC,8BAA8B;IAC9B,IAAI,kBAAkB,EAAE,CAAC;QACrB,MAAM,MAAM,GAAW,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,MAAM,kBAAkB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,6BAA6B;IAC7B,IAAI,mBAAmB,EAAE,CAAC;QACtB,MAAM,QAAQ,GAAmB,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1F,MAAM,wBAAwB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAED,yBAAyB;IACzB,IAAI,qBAAqB,EAAE,CAAC;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC7E,MAAM,iBAAiB,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC;IAED,8BAA8B;IAC9B,IAAI,yBAAyB,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/E,MAAM,qBAAqB,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,gCAAgC;IAChC,IAAI,cAAc,EAAE,CAAC;QACjB,MAAM,OAAO,CAAC,GAAG,cAAc,OAAO,EAAE,EAAE,CAAC,CAAC;IAChD,CAAC;AACL,CAAC,CAAA,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
import fs from "fs";
|
|
12
|
+
import { marked } from "marked";
|
|
13
|
+
import hljs from "highlight.js";
|
|
14
|
+
import addAnalyze from "./markdownGen/addAnalyze.js";
|
|
15
|
+
import CONFIG from "../../globalConfig.js";
|
|
16
|
+
import addMappedJson from "./markdownGen/addMappedJson.js";
|
|
17
|
+
const html = (analyzeMarkdown, mappedJsonMarkdown) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
return `<!DOCTYPE html>
|
|
19
|
+
<html>
|
|
20
|
+
<head>
|
|
21
|
+
<meta charset="UTF-8">
|
|
22
|
+
<title>JS Recon Report</title>
|
|
23
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@11.9.0/styles/github-dark.css">
|
|
24
|
+
<style>
|
|
25
|
+
h2, h3, h4 {
|
|
26
|
+
cursor: pointer;
|
|
27
|
+
position: relative;
|
|
28
|
+
padding-left: 20px;
|
|
29
|
+
}
|
|
30
|
+
h2::before, h3::before, h4::before {
|
|
31
|
+
content: '▼';
|
|
32
|
+
position: absolute;
|
|
33
|
+
left: 0;
|
|
34
|
+
transition: transform 0.2s;
|
|
35
|
+
}
|
|
36
|
+
.collapsed::before {
|
|
37
|
+
transform: rotate(-90deg);
|
|
38
|
+
}
|
|
39
|
+
body {
|
|
40
|
+
padding-top: 80px; /* Height of the navbar */
|
|
41
|
+
}
|
|
42
|
+
.navbar {
|
|
43
|
+
position: fixed;
|
|
44
|
+
top: 0;
|
|
45
|
+
left: 0;
|
|
46
|
+
width: 100%;
|
|
47
|
+
background-color: #ffffff;
|
|
48
|
+
border-bottom: 1px solid #e0e0e0;
|
|
49
|
+
display: flex;
|
|
50
|
+
align-items: center;
|
|
51
|
+
padding: 10px 20px;
|
|
52
|
+
z-index: 1000;
|
|
53
|
+
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
|
|
54
|
+
}
|
|
55
|
+
.navbar-logo img {
|
|
56
|
+
height: 40px;
|
|
57
|
+
}
|
|
58
|
+
.navbar-links {
|
|
59
|
+
list-style: none;
|
|
60
|
+
margin: 0 0 0 20px;
|
|
61
|
+
padding: 0;
|
|
62
|
+
display: flex;
|
|
63
|
+
gap: 15px;
|
|
64
|
+
}
|
|
65
|
+
</style>
|
|
66
|
+
</head>
|
|
67
|
+
<body>
|
|
68
|
+
<nav class="navbar">
|
|
69
|
+
<div class="navbar-logo">
|
|
70
|
+
<img src="https://js-recon.io/img/js-recon-logo.png" alt="JS Recon Logo">
|
|
71
|
+
</div>
|
|
72
|
+
<ul class="navbar-links" id="navbar-links">
|
|
73
|
+
<li><a href="#home">Home</a></li>
|
|
74
|
+
<li><a href="#mappedJson">Mapped JSON</a></li>
|
|
75
|
+
<li><a href="#about">About</a></li>
|
|
76
|
+
</ul>
|
|
77
|
+
</nav>
|
|
78
|
+
<div id="content"></div>
|
|
79
|
+
<script id="page-data" type="application/json">
|
|
80
|
+
${JSON.stringify({
|
|
81
|
+
home: yield marked.parse(analyzeMarkdown),
|
|
82
|
+
mappedJson: yield marked.parse(mappedJsonMarkdown),
|
|
83
|
+
about: `# About\n\n The documentation for this tool is available at [JS Recon Docs](https://js-recon.io/).\n\n## Version\n\nThis report is generated with JS Recon [v${CONFIG.version}](https://github.com/shriyanss/js-recon/releases/tag/v${CONFIG.version}).`,
|
|
84
|
+
})}
|
|
85
|
+
</script>
|
|
86
|
+
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
|
87
|
+
<script>
|
|
88
|
+
document.addEventListener('DOMContentLoaded', () => {
|
|
89
|
+
const contentDiv = document.getElementById('content');
|
|
90
|
+
const navbarLinks = document.getElementById('navbar-links');
|
|
91
|
+
const pages = JSON.parse(document.getElementById('page-data').textContent);
|
|
92
|
+
|
|
93
|
+
const updateVisibility = () => {
|
|
94
|
+
const headers = contentDiv.querySelectorAll('h2, h3, h4');
|
|
95
|
+
let parentCollapsedLevels = [];
|
|
96
|
+
headers.forEach(header => {
|
|
97
|
+
const level = parseInt(header.tagName.substring(1));
|
|
98
|
+
parentCollapsedLevels = parentCollapsedLevels.filter(l => l < level);
|
|
99
|
+
if (parentCollapsedLevels.length > 0) {
|
|
100
|
+
header.style.display = 'none';
|
|
101
|
+
} else {
|
|
102
|
+
header.style.display = '';
|
|
103
|
+
}
|
|
104
|
+
if (header.classList.contains('collapsed')) {
|
|
105
|
+
parentCollapsedLevels.push(level);
|
|
106
|
+
}
|
|
107
|
+
let nextEl = header.nextElementSibling;
|
|
108
|
+
while (nextEl && !nextEl.tagName.match(/^H[1-4]$/)) {
|
|
109
|
+
if (parentCollapsedLevels.length > 0) {
|
|
110
|
+
nextEl.style.display = 'none';
|
|
111
|
+
} else {
|
|
112
|
+
nextEl.style.display = '';
|
|
113
|
+
}
|
|
114
|
+
nextEl = nextEl.nextElementSibling;
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
};
|
|
118
|
+
|
|
119
|
+
const initializeCollapsibleHeaders = () => {
|
|
120
|
+
const headers = contentDiv.querySelectorAll('h2, h3, h4');
|
|
121
|
+
headers.forEach((header) => {
|
|
122
|
+
if (header.tagName.toLowerCase() === 'h3') {
|
|
123
|
+
header.classList.add('collapsed');
|
|
124
|
+
}
|
|
125
|
+
header.addEventListener('click', () => {
|
|
126
|
+
header.classList.toggle('collapsed');
|
|
127
|
+
updateVisibility();
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
updateVisibility();
|
|
131
|
+
};
|
|
132
|
+
|
|
133
|
+
const renderPage = (pageName) => {
|
|
134
|
+
const markdownContent = pages[pageName] || '<h2>Page Not Found: ' + pageName + '</h2>';
|
|
135
|
+
contentDiv.innerHTML = pageName === 'home' ? markdownContent : window.marked.parse(markdownContent);
|
|
136
|
+
initializeCollapsibleHeaders();
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
const handleHashChange = () => {
|
|
140
|
+
const pageName = window.location.hash.substring(1) || 'home';
|
|
141
|
+
renderPage(pageName);
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
navbarLinks.addEventListener('click', (event) => {
|
|
145
|
+
if (event.target.tagName === 'A') {
|
|
146
|
+
event.preventDefault();
|
|
147
|
+
const pageName = event.target.hash.substring(1);
|
|
148
|
+
window.location.hash = pageName;
|
|
149
|
+
}
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
window.addEventListener('hashchange', handleHashChange);
|
|
153
|
+
|
|
154
|
+
// Initial page load
|
|
155
|
+
handleHashChange();
|
|
156
|
+
});
|
|
157
|
+
</script>
|
|
158
|
+
</body>
|
|
159
|
+
</html>`;
|
|
160
|
+
});
|
|
161
|
+
const genHtml = (outputReportFile, db) => __awaiter(void 0, void 0, void 0, function* () {
|
|
162
|
+
console.log(chalk.cyan("[i] Generating HTML report..."));
|
|
163
|
+
let analyzeMarkdown = `# JS Recon Report generated at ${new Date().toISOString()}\n\n`;
|
|
164
|
+
let mappedJsonMarkdown = analyzeMarkdown;
|
|
165
|
+
analyzeMarkdown = yield addAnalyze(analyzeMarkdown, db);
|
|
166
|
+
mappedJsonMarkdown = yield addMappedJson(mappedJsonMarkdown, db);
|
|
167
|
+
const renderer = new marked.Renderer();
|
|
168
|
+
renderer.code = ({ text, lang }) => {
|
|
169
|
+
const language = hljs.getLanguage(lang) ? lang : "plaintext";
|
|
170
|
+
const highlightedCode = hljs.highlight(text, { language, ignoreIllegals: true }).value;
|
|
171
|
+
return `<pre><code class="hljs ${language}">${highlightedCode}</code></pre>`;
|
|
172
|
+
};
|
|
173
|
+
marked.setOptions({
|
|
174
|
+
renderer,
|
|
175
|
+
async: true,
|
|
176
|
+
pedantic: false,
|
|
177
|
+
gfm: true,
|
|
178
|
+
});
|
|
179
|
+
const renderedHtml = yield html(analyzeMarkdown, mappedJsonMarkdown);
|
|
180
|
+
fs.writeFileSync(outputReportFile, renderedHtml);
|
|
181
|
+
console.log(chalk.green("[✓] HTML report generated successfully"));
|
|
182
|
+
});
|
|
183
|
+
export default genHtml;
|
|
184
|
+
//# sourceMappingURL=genHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"genHtml.js","sourceRoot":"","sources":["../../../src/report/utility/genHtml.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,IAAI,MAAM,cAAc,CAAC;AAEhC,OAAO,UAAU,MAAM,6BAA6B,CAAC;AACrD,OAAO,MAAM,MAAM,uBAAuB,CAAC;AAC3C,OAAO,aAAa,MAAM,gCAAgC,CAAC;AAQ3D,MAAM,IAAI,GAAG,CAAO,eAAuB,EAAE,kBAA0B,EAAE,EAAE;IACvE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA8DL,IAAI,CAAC,SAAS,CAAC;QACb,IAAI,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC;QACzC,UAAU,EAAE,MAAM,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC;QAClD,KAAK,EAAE,gKAAgK,MAAM,CAAC,OAAO,yDAAyD,MAAM,CAAC,OAAO,IAAI;KACnQ,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA2EE,CAAC;AACT,CAAC,CAAA,CAAC;AAEF,MAAM,OAAO,GAAG,CAAO,gBAAwB,EAAE,EAAqB,EAAE,EAAE;IACtE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAEzD,IAAI,eAAe,GAAG,kCAAkC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;IACvF,IAAI,kBAAkB,GAAG,eAAe,CAAC;IAEzC,eAAe,GAAG,MAAM,UAAU,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;IACxD,kBAAkB,GAAG,MAAM,aAAa,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAEjE,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAc,CAAC,CAAC,CAAC,CAAE,IAAe,CAAC,CAAC,CAAC,WAAW,CAAC;QACnF,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC;QACvF,OAAO,0BAA0B,QAAQ,KAAK,eAAe,eAAe,CAAC;IACjF,CAAC,CAAC;IAEF,MAAM,CAAC,UAAU,CAAC;QACd,QAAQ;QACR,KAAK,EAAE,IAAI;QACX,QAAQ,EAAE,KAAK;QACf,GAAG,EAAE,IAAI;KACZ,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IACrE,EAAE,CAAC,aAAa,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC,CAAC;AACvE,CAAC,CAAA,CAAC;AAEF,eAAe,OAAO,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import Database from "better-sqlite3";
|
|
11
|
+
const createMappedTable = (db) => {
|
|
12
|
+
db.prepare(`
|
|
13
|
+
CREATE TABLE IF NOT EXISTS mapped (
|
|
14
|
+
id TEXT PRIMARY KEY,
|
|
15
|
+
description TEXT,
|
|
16
|
+
loadedOn TEXT,
|
|
17
|
+
containsFetch BOOLEAN,
|
|
18
|
+
isAxiosClient BOOLEAN,
|
|
19
|
+
exports TEXT,
|
|
20
|
+
callStack TEXT,
|
|
21
|
+
code TEXT,
|
|
22
|
+
imports TEXT,
|
|
23
|
+
file TEXT
|
|
24
|
+
)
|
|
25
|
+
`).run();
|
|
26
|
+
};
|
|
27
|
+
const createMappedOpenapiTable = (db) => {
|
|
28
|
+
db.prepare(`
|
|
29
|
+
CREATE TABLE IF NOT EXISTS mapped_openapi (
|
|
30
|
+
path TEXT,
|
|
31
|
+
method TEXT,
|
|
32
|
+
summary TEXT,
|
|
33
|
+
parameters TEXT,
|
|
34
|
+
requestBody TEXT,
|
|
35
|
+
tags TEXT,
|
|
36
|
+
PRIMARY KEY (path, method)
|
|
37
|
+
)
|
|
38
|
+
`).run();
|
|
39
|
+
};
|
|
40
|
+
const createEndpointsTable = (db) => {
|
|
41
|
+
db.prepare(`
|
|
42
|
+
CREATE TABLE IF NOT EXISTS endpoints (
|
|
43
|
+
url TEXT PRIMARY KEY
|
|
44
|
+
)
|
|
45
|
+
`).run();
|
|
46
|
+
};
|
|
47
|
+
const createAnalysisFindingsTable = (db) => {
|
|
48
|
+
db.prepare(`
|
|
49
|
+
CREATE TABLE IF NOT EXISTS analysis_findings (
|
|
50
|
+
ruleId TEXT,
|
|
51
|
+
ruleName TEXT,
|
|
52
|
+
ruleType TEXT,
|
|
53
|
+
ruleDescription TEXT,
|
|
54
|
+
ruleAuthor TEXT,
|
|
55
|
+
ruleTech TEXT,
|
|
56
|
+
severity TEXT,
|
|
57
|
+
message TEXT,
|
|
58
|
+
findingLocation TEXT
|
|
59
|
+
)
|
|
60
|
+
`).run();
|
|
61
|
+
};
|
|
62
|
+
const initReportDb = (sqliteDbPath) => __awaiter(void 0, void 0, void 0, function* () {
|
|
63
|
+
const db = new Database(sqliteDbPath);
|
|
64
|
+
createMappedTable(db);
|
|
65
|
+
createMappedOpenapiTable(db);
|
|
66
|
+
createEndpointsTable(db);
|
|
67
|
+
createAnalysisFindingsTable(db);
|
|
68
|
+
db.close();
|
|
69
|
+
});
|
|
70
|
+
export default initReportDb;
|
|
71
|
+
//# sourceMappingURL=initReportDb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initReportDb.js","sourceRoot":"","sources":["../../../src/report/utility/initReportDb.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,MAAM,iBAAiB,GAAG,CAAC,EAAqB,EAAE,EAAE;IAChD,EAAE,CAAC,OAAO,CACN;;;;;;;;;;;;;KAaH,CACA,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAAC,EAAqB,EAAE,EAAE;IACvD,EAAE,CAAC,OAAO,CACN;;;;;;;;;;KAUH,CACA,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,CAAC,EAAqB,EAAE,EAAE;IACnD,EAAE,CAAC,OAAO,CACN;;;;KAIH,CACA,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,2BAA2B,GAAG,CAAC,EAAqB,EAAE,EAAE;IAC1D,EAAE,CAAC,OAAO,CACN;;;;;;;;;;;;KAYH,CACA,CAAC,GAAG,EAAE,CAAC;AACZ,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAO,YAAoB,EAAE,EAAE;IAChD,MAAM,EAAE,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,CAAC;IAEtC,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACtB,wBAAwB,CAAC,EAAE,CAAC,CAAC;IAC7B,oBAAoB,CAAC,EAAE,CAAC,CAAC;IACzB,2BAA2B,CAAC,EAAE,CAAC,CAAC;IAEhC,EAAE,CAAC,KAAK,EAAE,CAAC;AACf,CAAC,CAAA,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
const addAnalyze = (markdown, db) => __awaiter(void 0, void 0, void 0, function* () {
|
|
11
|
+
let toReturn = markdown;
|
|
12
|
+
toReturn += `\n## Analyze Results\n`;
|
|
13
|
+
const findings = db.prepare(`SELECT * FROM analysis_findings`).all();
|
|
14
|
+
if (findings.length > 0) {
|
|
15
|
+
const groupedFindings = {};
|
|
16
|
+
for (const finding of findings) {
|
|
17
|
+
if (!groupedFindings[finding.ruleType]) {
|
|
18
|
+
groupedFindings[finding.ruleType] = [];
|
|
19
|
+
}
|
|
20
|
+
groupedFindings[finding.ruleType].push(finding);
|
|
21
|
+
}
|
|
22
|
+
for (const ruleType in groupedFindings) {
|
|
23
|
+
toReturn += `### ${ruleType.toUpperCase()}\n`;
|
|
24
|
+
for (const finding of groupedFindings[ruleType]) {
|
|
25
|
+
toReturn += `#### ${finding.ruleName}, ${finding.ruleDescription}\n`;
|
|
26
|
+
let findingLocationBlock = "";
|
|
27
|
+
if (ruleType.toLowerCase() === "ast") {
|
|
28
|
+
findingLocationBlock = "```js\n" + finding.findingLocation + "\n```";
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
findingLocationBlock = "```\n" + finding.findingLocation + "\n```";
|
|
32
|
+
}
|
|
33
|
+
toReturn += `${findingLocationBlock}\n`;
|
|
34
|
+
toReturn += `- **Rule ID:** ${finding.ruleId}\n`;
|
|
35
|
+
toReturn += `- **Severity:** ${finding.severity}\n`;
|
|
36
|
+
toReturn += `- **Message:** ${finding.message}\n`;
|
|
37
|
+
toReturn += `- **Author:** ${finding.ruleAuthor}\n`;
|
|
38
|
+
toReturn += `- **Technology:** ${finding.ruleTech}\n\n`;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return toReturn;
|
|
43
|
+
});
|
|
44
|
+
export default addAnalyze;
|
|
45
|
+
//# sourceMappingURL=addAnalyze.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addAnalyze.js","sourceRoot":"","sources":["../../../../src/report/utility/markdownGen/addAnalyze.ts"],"names":[],"mappings":";;;;;;;;;AAcA,MAAM,UAAU,GAAG,CAAO,QAAgB,EAAE,EAAqB,EAAmB,EAAE;IAClF,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,QAAQ,IAAI,wBAAwB,CAAC;IACrC,MAAM,QAAQ,GAAG,EAAE,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,GAAG,EAAuB,CAAC;IAC1F,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,eAAe,GAAyC,EAAE,CAAC;QACjE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACrC,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC3C,CAAC;YACD,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;YACrC,QAAQ,IAAI,OAAO,QAAQ,CAAC,WAAW,EAAE,IAAI,CAAC;YAC9C,KAAK,MAAM,OAAO,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC9C,QAAQ,IAAI,QAAQ,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,eAAe,IAAI,CAAC;gBACrE,IAAI,oBAAoB,GAAG,EAAE,CAAC;gBAC9B,IAAI,QAAQ,CAAC,WAAW,EAAE,KAAK,KAAK,EAAE,CAAC;oBACnC,oBAAoB,GAAG,SAAS,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC;gBACzE,CAAC;qBAAM,CAAC;oBACJ,oBAAoB,GAAG,OAAO,GAAG,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC;gBACvE,CAAC;gBACD,QAAQ,IAAI,GAAG,oBAAoB,IAAI,CAAC;gBACxC,QAAQ,IAAI,kBAAkB,OAAO,CAAC,MAAM,IAAI,CAAC;gBACjD,QAAQ,IAAI,mBAAmB,OAAO,CAAC,QAAQ,IAAI,CAAC;gBACpD,QAAQ,IAAI,kBAAkB,OAAO,CAAC,OAAO,IAAI,CAAC;gBAClD,QAAQ,IAAI,iBAAiB,OAAO,CAAC,UAAU,IAAI,CAAC;gBACpD,QAAQ,IAAI,qBAAqB,OAAO,CAAC,QAAQ,MAAM,CAAC;YAC5D,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,eAAe,UAAU,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
const addMappedJson = (markdown, db) => __awaiter(void 0, void 0, void 0, function* () {
|
|
11
|
+
let toReturn = markdown;
|
|
12
|
+
const mappedData = db.prepare(`SELECT * FROM mapped`).all();
|
|
13
|
+
for (const item of mappedData) {
|
|
14
|
+
toReturn += `## ${item.id}\n`;
|
|
15
|
+
toReturn += `- Description: ${item.description || "N/A"}\n`;
|
|
16
|
+
toReturn += `- Contains Fetch: ${!!item.containsFetch}\n`;
|
|
17
|
+
toReturn += `- Is Axios Client: ${!!item.isAxiosClient}\n`;
|
|
18
|
+
toReturn += `- Exports: ${item.exports || "N/A"}\n`;
|
|
19
|
+
toReturn += `- Imports: ${item.imports || "N/A"}\n`;
|
|
20
|
+
toReturn += `- File: ${item.file}\n\n`;
|
|
21
|
+
}
|
|
22
|
+
return toReturn;
|
|
23
|
+
});
|
|
24
|
+
export default addMappedJson;
|
|
25
|
+
//# sourceMappingURL=addMappedJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"addMappedJson.js","sourceRoot":"","sources":["../../../../src/report/utility/markdownGen/addMappedJson.ts"],"names":[],"mappings":";;;;;;;;;AAYA,MAAM,aAAa,GAAG,CAAO,QAAgB,EAAE,EAAqB,EAAmB,EAAE;IACrF,IAAI,QAAQ,GAAG,QAAQ,CAAC;IAExB,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,GAAG,EAAkB,CAAC;IAE5E,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC5B,QAAQ,IAAI,MAAM,IAAI,CAAC,EAAE,IAAI,CAAC;QAC9B,QAAQ,IAAI,kBAAkB,IAAI,CAAC,WAAW,IAAI,KAAK,IAAI,CAAC;QAC5D,QAAQ,IAAI,qBAAqB,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC;QAC1D,QAAQ,IAAI,sBAAsB,CAAC,CAAC,IAAI,CAAC,aAAa,IAAI,CAAC;QAC3D,QAAQ,IAAI,cAAc,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,CAAC;QACpD,QAAQ,IAAI,cAAc,IAAI,CAAC,OAAO,IAAI,KAAK,IAAI,CAAC;QACpD,QAAQ,IAAI,WAAW,IAAI,CAAC,IAAI,MAAM,CAAC;IAC3C,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
export const populateAnalysisFindings = (db, findings) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
// Clear the table before inserting new data
|
|
13
|
+
db.prepare(`DELETE FROM analysis_findings`).run();
|
|
14
|
+
const insert = db.prepare(`INSERT INTO analysis_findings (ruleId, ruleName, ruleType, ruleDescription, ruleAuthor, ruleTech, severity, message, findingLocation) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
15
|
+
const insertMany = db.transaction((items) => {
|
|
16
|
+
for (const item of items) {
|
|
17
|
+
insert.run(item.ruleId, item.ruleName, item.ruleType, item.ruleDescription, item.ruleAuthor, item.ruleTech, item.severity, item.message, item.findingLocation);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
insertMany(findings);
|
|
21
|
+
console.log(chalk.green("[✓] Populated analysis findings into the database..."));
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=populateAnalysisFindings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"populateAnalysisFindings.js","sourceRoot":"","sources":["../../../../src/report/utility/populateDb/populateAnalysisFindings.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAO,EAAqB,EAAE,QAAwB,EAAE,EAAE;IAC9F,4CAA4C;IAC5C,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC,GAAG,EAAE,CAAC;IAElD,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACrB,0KAA0K,CAC7K,CAAC;IAEF,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CACN,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,eAAe,CACvB,CAAC;QACN,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,QAAQ,CAAC,CAAC;IACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC,CAAC;AACrF,CAAC,CAAA,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
const populateEndpoints = (db, endpoints) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
const insert = db.prepare("INSERT OR IGNORE INTO endpoints (url) VALUES (?)");
|
|
13
|
+
// clear the endpoints table
|
|
14
|
+
db.prepare("DELETE FROM endpoints").run();
|
|
15
|
+
const insertPaths = (base, paths) => {
|
|
16
|
+
for (const path in paths) {
|
|
17
|
+
// The path is the key itself, which is a full path
|
|
18
|
+
const fullUrl = base + path;
|
|
19
|
+
try {
|
|
20
|
+
insert.run(fullUrl);
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
// Ignore unique constraint errors if a URL is already present
|
|
24
|
+
if (!error.message.includes("UNIQUE constraint failed")) {
|
|
25
|
+
console.error(`Error inserting ${fullUrl}:`, error);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// Recursively process nested paths
|
|
29
|
+
if (Object.keys(paths[path]).length > 0) {
|
|
30
|
+
insertPaths(base, paths[path]);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
db.transaction(() => {
|
|
35
|
+
for (const baseUrl in endpoints) {
|
|
36
|
+
insertPaths(baseUrl, endpoints[baseUrl]);
|
|
37
|
+
}
|
|
38
|
+
})();
|
|
39
|
+
console.log(chalk.green("[✓] Populated endpoints into the database..."));
|
|
40
|
+
});
|
|
41
|
+
export default populateEndpoints;
|
|
42
|
+
//# sourceMappingURL=populateEndpoints.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"populateEndpoints.js","sourceRoot":"","sources":["../../../../src/report/utility/populateDb/populateEndpoints.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,iBAAiB,GAAG,CAAO,EAAqB,EAAE,SAAc,EAAE,EAAE;IACtE,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CAAC,kDAAkD,CAAC,CAAC;IAE9E,4BAA4B;IAC5B,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,GAAG,EAAE,CAAC;IAE1C,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAAa,EAAE,EAAE;QAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,mDAAmD;YACnD,MAAM,OAAO,GAAG,IAAI,GAAG,IAAI,CAAC;YAC5B,IAAI,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,8DAA8D;gBAC9D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,0BAA0B,CAAC,EAAE,CAAC;oBACtD,OAAO,CAAC,KAAK,CAAC,mBAAmB,OAAO,GAAG,EAAE,KAAK,CAAC,CAAC;gBACxD,CAAC;YACL,CAAC;YAED,mCAAmC;YACnC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAChB,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;YAC9B,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC7C,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAC,CAAC;AAC7E,CAAC,CAAA,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
export const populateMappedJson = (db, chunks) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
// Clear the table before inserting new data
|
|
13
|
+
db.prepare(`DELETE FROM mapped`).run();
|
|
14
|
+
const insert = db.prepare(`INSERT INTO mapped (id, description, loadedOn, containsFetch, isAxiosClient, exports, callStack, code, imports, file) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
15
|
+
const insertMany = db.transaction((items) => {
|
|
16
|
+
for (const item of items) {
|
|
17
|
+
insert.run(item.id, item.description, JSON.stringify(item.loadedOn), item.containsFetch ? 1 : 0, item.isAxiosClient ? 1 : 0, JSON.stringify(item.exports), JSON.stringify(item.callStack), item.code, JSON.stringify(item.imports), item.file);
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
insertMany(Object.values(chunks));
|
|
21
|
+
console.log(chalk.green("[✓] Populated mapped data into the database..."));
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=populateMappedJson.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"populateMappedJson.js","sourceRoot":"","sources":["../../../../src/report/utility/populateDb/populateMappedJson.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAO,EAAqB,EAAE,MAAc,EAAE,EAAE;IAC9E,4CAA4C;IAC5C,EAAE,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,GAAG,EAAE,CAAC;IAEvC,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACrB,6JAA6J,CAChK,CAAC;IAEF,MAAM,UAAU,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,EAAE;QACxC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACvB,MAAM,CAAC,GAAG,CACN,IAAI,CAAC,EAAE,EACP,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EAC7B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,EAC9B,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,EAC5B,IAAI,CAAC,IAAI,CACZ,CAAC;QACN,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IAClC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC,CAAC;AAC/E,CAAC,CAAA,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import chalk from "chalk";
|
|
11
|
+
const populateMappedOpenapi = (db, openapi) => __awaiter(void 0, void 0, void 0, function* () {
|
|
12
|
+
const insert = db.prepare(`INSERT OR REPLACE INTO mapped_openapi (path, method, summary, parameters, requestBody, tags)
|
|
13
|
+
VALUES (@path, @method, @summary, @parameters, @requestBody, @tags)`);
|
|
14
|
+
db.transaction(() => {
|
|
15
|
+
if (!openapi.paths) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
for (const path in openapi.paths) {
|
|
19
|
+
const methods = openapi.paths[path];
|
|
20
|
+
for (const method in methods) {
|
|
21
|
+
const details = methods[method];
|
|
22
|
+
try {
|
|
23
|
+
insert.run({
|
|
24
|
+
path: path,
|
|
25
|
+
method: method,
|
|
26
|
+
summary: details.summary || null,
|
|
27
|
+
parameters: details.parameters ? JSON.stringify(details.parameters) : null,
|
|
28
|
+
requestBody: details.requestBody ? JSON.stringify(details.requestBody) : null,
|
|
29
|
+
tags: details.tags ? JSON.stringify(details.tags) : null,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
console.error(`Error inserting OpenAPI path: ${path} [${method}]`, error);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
})();
|
|
38
|
+
console.log(chalk.green("[✓] Populated mapped openapi into the database..."));
|
|
39
|
+
});
|
|
40
|
+
export default populateMappedOpenapi;
|
|
41
|
+
//# sourceMappingURL=populateMappedOpenapi.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"populateMappedOpenapi.js","sourceRoot":"","sources":["../../../../src/report/utility/populateDb/populateMappedOpenapi.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,qBAAqB,GAAG,CAAO,EAAqB,EAAE,OAAY,EAAE,EAAE;IACxE,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACrB;6EACqE,CACxE,CAAC;IAEF,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAChB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;QACX,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACpC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC3B,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC;oBACD,MAAM,CAAC,GAAG,CAAC;wBACP,IAAI,EAAE,IAAI;wBACV,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI;wBAChC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI;wBAC1E,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI;wBAC7E,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;qBAC3D,CAAC,CAAC;gBACP,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,IAAI,KAAK,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;gBAC9E,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;IAEL,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,mDAAmD,CAAC,CAAC,CAAC;AAClF,CAAC,CAAA,CAAC;AAEF,eAAe,qBAAqB,CAAC"}
|