@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.
Files changed (45) hide show
  1. package/.github/ISSUE_TEMPLATE/new_tech_support_request.md +26 -0
  2. package/CHANGELOG.md +28 -0
  3. package/README.md +20 -0
  4. package/build/analyze/engine/astEngine.js +20 -0
  5. package/build/analyze/engine/astEngine.js.map +1 -1
  6. package/build/analyze/engine/index.js +4 -2
  7. package/build/analyze/engine/index.js.map +1 -1
  8. package/build/analyze/engine/requestEngine.js +18 -4
  9. package/build/analyze/engine/requestEngine.js.map +1 -1
  10. package/build/analyze/helpers/outputHelper.js +8 -0
  11. package/build/analyze/helpers/outputHelper.js.map +1 -0
  12. package/build/analyze/index.js +11 -3
  13. package/build/analyze/index.js.map +1 -1
  14. package/build/globalConfig.js +1 -1
  15. package/build/globalConfig.js.map +1 -1
  16. package/build/index.js +18 -6
  17. package/build/index.js.map +1 -1
  18. package/build/lazyLoad/globals.js +6 -0
  19. package/build/lazyLoad/globals.js.map +1 -1
  20. package/build/lazyLoad/index.js +6 -2
  21. package/build/lazyLoad/index.js.map +1 -1
  22. package/build/{techDetect → lazyLoad/techDetect}/index.js +1 -1
  23. package/build/lazyLoad/techDetect/index.js.map +1 -0
  24. package/build/report/index.js +53 -0
  25. package/build/report/index.js.map +1 -0
  26. package/build/report/utility/genHtml.js +184 -0
  27. package/build/report/utility/genHtml.js.map +1 -0
  28. package/build/report/utility/initReportDb.js +71 -0
  29. package/build/report/utility/initReportDb.js.map +1 -0
  30. package/build/report/utility/markdownGen/addAnalyze.js +45 -0
  31. package/build/report/utility/markdownGen/addAnalyze.js.map +1 -0
  32. package/build/report/utility/markdownGen/addMappedJson.js +25 -0
  33. package/build/report/utility/markdownGen/addMappedJson.js.map +1 -0
  34. package/build/report/utility/populateDb/populateAnalysisFindings.js +23 -0
  35. package/build/report/utility/populateDb/populateAnalysisFindings.js.map +1 -0
  36. package/build/report/utility/populateDb/populateEndpoints.js +42 -0
  37. package/build/report/utility/populateDb/populateEndpoints.js.map +1 -0
  38. package/build/report/utility/populateDb/populateMappedJson.js +23 -0
  39. package/build/report/utility/populateDb/populateMappedJson.js.map +1 -0
  40. package/build/report/utility/populateDb/populateMappedOpenapi.js +41 -0
  41. package/build/report/utility/populateDb/populateMappedOpenapi.js.map +1 -0
  42. package/build/run/index.js +103 -44
  43. package/build/run/index.js.map +1 -1
  44. package/package.json +6 -2
  45. 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"}