@shriyanss/js-recon 1.1.3-beta.2 → 1.1.3-beta.3
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/workflows/build-and-prettify.yaml +2 -2
- package/.github/workflows/publish-js-recon.yml +9 -3
- package/CHANGELOG.md +10 -0
- package/build/globalConfig.js +1 -1
- package/build/utility/openapiGenerator.js +27 -1
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/replaceUrlPlaceholders.js +33 -0
- package/build/utility/replaceUrlPlaceholders.js.map +1 -0
- package/package.json +1 -1
|
@@ -58,8 +58,8 @@ jobs:
|
|
|
58
58
|
|
|
59
59
|
- name: Commit and push changes
|
|
60
60
|
run: |
|
|
61
|
-
git config user.name "
|
|
62
|
-
git config user.email "
|
|
61
|
+
git config user.name "github-actions[bot]"
|
|
62
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
63
63
|
git add .
|
|
64
64
|
git commit -m "chore: prettify code" || echo "No changes to commit"
|
|
65
65
|
git push
|
|
@@ -141,10 +141,16 @@ jobs:
|
|
|
141
141
|
runs-on: ubuntu-latest
|
|
142
142
|
steps:
|
|
143
143
|
- uses: actions/checkout@v4
|
|
144
|
+
with:
|
|
145
|
+
fetch-depth: 0
|
|
144
146
|
- name: Merge main and dev
|
|
145
147
|
run: |
|
|
146
|
-
|
|
148
|
+
git config --global user.name 'github-actions[bot]'
|
|
149
|
+
git config --global user.email 'github-actions[bot]@users.noreply.github.com'
|
|
150
|
+
git fetch origin main:main
|
|
151
|
+
git fetch origin dev:dev
|
|
147
152
|
git checkout dev
|
|
148
|
-
git merge main
|
|
153
|
+
git merge --no-ff -m "chore: merge changes after release $VERSION" main -X theirs || (git status && git diff && exit 0)
|
|
149
154
|
git push origin dev
|
|
150
|
-
|
|
155
|
+
env:
|
|
156
|
+
VERSION: ${{ github.event.release.tag_name }}
|
package/CHANGELOG.md
CHANGED
package/build/globalConfig.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const githubURL = "https://github.com/shriyanss/js-recon";
|
|
2
2
|
const modulesDocs = "https://js-recon.io/docs/category/modules";
|
|
3
|
-
const version = "1.1.3-beta.
|
|
3
|
+
const version = "1.1.3-beta.3";
|
|
4
4
|
const toolDesc = "JS Recon Tool";
|
|
5
5
|
const axiosNonHttpMethods = ["isAxiosError"]; // methods available in axios, which are not for making HTTP requests
|
|
6
6
|
let CONFIG = {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as globalsUtil from "./globals.js";
|
|
2
|
+
import replacePlaceholders from "./replaceUrlPlaceholders.js";
|
|
2
3
|
/**
|
|
3
4
|
* Generates a minimal OpenAPI v3 specification document from the collected
|
|
4
5
|
* `OpenapiOutputItem` objects.
|
|
@@ -39,7 +40,8 @@ export const generateOpenapiV3Spec = (items, chunks) => {
|
|
|
39
40
|
paths: {},
|
|
40
41
|
};
|
|
41
42
|
for (const item of items) {
|
|
42
|
-
const
|
|
43
|
+
const pathKeyBeforeQuery = item.path.split("?")[0];
|
|
44
|
+
const pathKey = replacePlaceholders(pathKeyBeforeQuery.startsWith("/") ? pathKeyBeforeQuery : `/${pathKeyBeforeQuery}`);
|
|
43
45
|
const method = item.method.toLowerCase();
|
|
44
46
|
if (!spec.paths[pathKey]) {
|
|
45
47
|
spec.paths[pathKey] = {};
|
|
@@ -54,6 +56,30 @@ export const generateOpenapiV3Spec = (items, chunks) => {
|
|
|
54
56
|
required: true,
|
|
55
57
|
schema: { type: "string", example: value },
|
|
56
58
|
}));
|
|
59
|
+
// Extract path parameters
|
|
60
|
+
const pathParams = pathKey.match(/\{([^}]+)\}/g);
|
|
61
|
+
if (pathParams) {
|
|
62
|
+
for (const p of pathParams) {
|
|
63
|
+
const paramName = p.slice(1, -1);
|
|
64
|
+
parameters.push({
|
|
65
|
+
name: paramName,
|
|
66
|
+
in: "path",
|
|
67
|
+
required: true,
|
|
68
|
+
schema: { type: "string", example: "any" },
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Extract query parameters
|
|
73
|
+
const url = new URL(item.path, "http://dummybase");
|
|
74
|
+
const queryParams = url.searchParams;
|
|
75
|
+
queryParams.forEach((value, name) => {
|
|
76
|
+
parameters.push({
|
|
77
|
+
name: name,
|
|
78
|
+
in: "query",
|
|
79
|
+
required: false, // Or determine based on logic
|
|
80
|
+
schema: { type: "string", example: value },
|
|
81
|
+
});
|
|
82
|
+
});
|
|
57
83
|
const operationObject = {
|
|
58
84
|
summary: `${pathKey}`,
|
|
59
85
|
responses: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"openapiGenerator.js","sourceRoot":"","sources":["../../src/utility/openapiGenerator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,WAAW,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"openapiGenerator.js","sourceRoot":"","sources":["../../src/utility/openapiGenerator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const replacePlaceholders = (url) => {
|
|
2
|
+
// match it against multiple regexes and replace with the right placeholder as per the openapi spec
|
|
3
|
+
// first for member expression
|
|
4
|
+
const memberExpressionRegex = /\[MemberExpression -> (.*?)\]/g;
|
|
5
|
+
const memberExpressionMatches = url.matchAll(memberExpressionRegex);
|
|
6
|
+
for (const match of memberExpressionMatches) {
|
|
7
|
+
url = url.replace(match[0], "{" + match[1] + "}");
|
|
8
|
+
}
|
|
9
|
+
// second goes `[var a]`
|
|
10
|
+
const varRegex = /\[var (.*?)\]/g;
|
|
11
|
+
const varMatches = url.matchAll(varRegex);
|
|
12
|
+
for (const match of varMatches) {
|
|
13
|
+
url = url.replace(match[0], "{" + match[1] + "}");
|
|
14
|
+
}
|
|
15
|
+
// `[unresolved member expression]` is a bit tricky, so
|
|
16
|
+
// will replace with `{unres_mem_exp_<appearance_count_like_1_and_2_in_case_found_multiple_times>}`
|
|
17
|
+
const unresolvedMemberExpressionRegex = /\[unresolved member expression\]/g;
|
|
18
|
+
const unresolvedMemberExpressionMatches = url.matchAll(unresolvedMemberExpressionRegex);
|
|
19
|
+
let appearanceCount = 1;
|
|
20
|
+
for (const match of unresolvedMemberExpressionMatches) {
|
|
21
|
+
url = url.replace(match[0], "{unres_mem_exp_" + appearanceCount + "}");
|
|
22
|
+
appearanceCount++;
|
|
23
|
+
}
|
|
24
|
+
// `[unresolved: a]` can't escape as well
|
|
25
|
+
const unresolvedRegex = /\[unresolved: (.*?)\]/g;
|
|
26
|
+
const unresolvedMatches = url.matchAll(unresolvedRegex);
|
|
27
|
+
for (const match of unresolvedMatches) {
|
|
28
|
+
url = url.replace(match[0], "{" + match[1] + "}");
|
|
29
|
+
}
|
|
30
|
+
return url;
|
|
31
|
+
};
|
|
32
|
+
export default replacePlaceholders;
|
|
33
|
+
//# sourceMappingURL=replaceUrlPlaceholders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replaceUrlPlaceholders.js","sourceRoot":"","sources":["../../src/utility/replaceUrlPlaceholders.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAU,EAAE;IAChD,mGAAmG;IAEnG,8BAA8B;IAC9B,MAAM,qBAAqB,GAAG,gCAAgC,CAAC;IAC/D,MAAM,uBAAuB,GAAG,GAAG,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;IACpE,KAAK,MAAM,KAAK,IAAI,uBAAuB,EAAE,CAAC;QAC1C,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,wBAAwB;IACxB,MAAM,QAAQ,GAAG,gBAAgB,CAAC;IAClC,MAAM,UAAU,GAAG,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC1C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC7B,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,uDAAuD;IACvD,mGAAmG;IACnG,MAAM,+BAA+B,GAAG,mCAAmC,CAAC;IAC5E,MAAM,iCAAiC,GAAG,GAAG,CAAC,QAAQ,CAAC,+BAA+B,CAAC,CAAC;IACxF,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,KAAK,MAAM,KAAK,IAAI,iCAAiC,EAAE,CAAC;QACpD,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,iBAAiB,GAAG,eAAe,GAAG,GAAG,CAAC,CAAC;QACvE,eAAe,EAAE,CAAC;IACtB,CAAC;IAED,yCAAyC;IACzC,MAAM,eAAe,GAAG,wBAAwB,CAAC;IACjD,MAAM,iBAAiB,GAAG,GAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;QACpC,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|