@shriyanss/js-recon 1.4.1-alpha.2 → 1.4.1-alpha.4
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 +8 -8
- package/.github/workflows/publish-js-recon.yml +55 -10
- package/CHANGELOG.md +52 -0
- package/CLAUDE.md +87 -5
- package/README.md +20 -0
- package/build/analyze/engine/index.js.map +1 -1
- package/build/analyze/helpers/schemas.js +1 -1
- package/build/analyze/helpers/schemas.js.map +1 -1
- package/build/analyze/index.js +1 -0
- package/build/analyze/index.js.map +1 -1
- package/build/globalConfig.js +2 -2
- package/build/globalConfig.js.map +1 -1
- package/build/index.js +82 -3
- package/build/index.js.map +1 -1
- package/build/lazyLoad/downloadQueue.js +1 -1
- package/build/lazyLoad/downloadQueue.js.map +1 -1
- package/build/lazyLoad/index.js +27 -46
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/methodFilter.js +1 -0
- package/build/lazyLoad/methodFilter.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js +64 -0
- package/build/lazyLoad/nuxt_js/nuxt_getBuildsManifest.js.map +1 -0
- package/build/lazyLoad/react/react_followImports.js +8 -2
- package/build/lazyLoad/react/react_followImports.js.map +1 -1
- package/build/lazyLoad/react/react_webpackChunkPaths.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js +16 -0
- package/build/lazyLoad/svelte/svelte_getFromPageSource.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_getVersionJson.js +40 -0
- package/build/lazyLoad/svelte/svelte_getVersionJson.js.map +1 -0
- package/build/map/angular_js/getAngularConnections.js +88 -0
- package/build/map/angular_js/getAngularConnections.js.map +1 -0
- package/build/map/angular_js/interactive.js +4 -0
- package/build/map/angular_js/interactive.js.map +1 -0
- package/build/map/index.js +38 -0
- package/build/map/index.js.map +1 -1
- package/build/map/next_js/getTurbopackConnections.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/mcp/cli.js.map +1 -1
- package/build/refactor/index.js +478 -12
- package/build/refactor/index.js.map +1 -1
- package/build/refactor/react/helpers.js +13 -0
- package/build/refactor/react/helpers.js.map +1 -1
- package/build/refactor/react/index.js +149 -41
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/library-classify.js +232 -1
- package/build/refactor/react/library-classify.js.map +1 -1
- package/build/refactor/react/transform.js +1046 -34
- package/build/refactor/react/transform.js.map +1 -1
- package/build/refactor/react-vite/index.js +618 -0
- package/build/refactor/react-vite/index.js.map +1 -0
- package/build/refactor/react-vite/vendor-analyze.js +336 -0
- package/build/refactor/react-vite/vendor-analyze.js.map +1 -0
- package/build/refactor/remote/cache.js +211 -0
- package/build/refactor/remote/cache.js.map +1 -0
- package/build/refactor/remote/config.js +47 -0
- package/build/refactor/remote/config.js.map +1 -0
- package/build/refactor/remote/hf-client.js +137 -0
- package/build/refactor/remote/hf-client.js.map +1 -0
- package/build/run/index.js +116 -11
- package/build/run/index.js.map +1 -1
- package/build/sourcemaps/index.js +89 -0
- package/build/sourcemaps/index.js.map +1 -0
- package/build/utility/banner.js +68 -0
- package/build/utility/banner.js.map +1 -0
- package/package.json +2 -1
|
@@ -12,7 +12,7 @@ jobs:
|
|
|
12
12
|
!startsWith(github.event.head_commit.message, 'chore: prettify code')
|
|
13
13
|
runs-on: ubuntu-latest
|
|
14
14
|
steps:
|
|
15
|
-
- uses: actions/checkout@
|
|
15
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
16
16
|
- name: Check version mismatch
|
|
17
17
|
env:
|
|
18
18
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -42,8 +42,8 @@ jobs:
|
|
|
42
42
|
runs-on: ubuntu-latest
|
|
43
43
|
needs: version_check
|
|
44
44
|
steps:
|
|
45
|
-
- uses: actions/checkout@
|
|
46
|
-
- uses: actions/setup-node@
|
|
45
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
46
|
+
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
47
47
|
with:
|
|
48
48
|
node-version: "22"
|
|
49
49
|
cache: "npm"
|
|
@@ -57,14 +57,14 @@ jobs:
|
|
|
57
57
|
needs: audit
|
|
58
58
|
steps:
|
|
59
59
|
- name: Checkout
|
|
60
|
-
uses: actions/checkout@
|
|
60
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
61
61
|
with:
|
|
62
62
|
# Make sure the action checks out the repository to the pull request branch
|
|
63
63
|
ref: ${{ github.ref_name }}
|
|
64
64
|
ssh-key: ${{ secrets.DEPLOY_KEY }}
|
|
65
65
|
|
|
66
66
|
- name: Set up Node.js
|
|
67
|
-
uses: actions/setup-node@
|
|
67
|
+
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
68
68
|
with:
|
|
69
69
|
node-version: "22"
|
|
70
70
|
cache: "npm"
|
|
@@ -94,13 +94,13 @@ jobs:
|
|
|
94
94
|
runs-on: ubuntu-latest
|
|
95
95
|
steps:
|
|
96
96
|
- name: Checkout
|
|
97
|
-
uses: actions/checkout@
|
|
97
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
98
98
|
with:
|
|
99
99
|
# Make sure the action checks out the repository to the pull request branch
|
|
100
100
|
ref: ${{ github.ref_name }}
|
|
101
101
|
|
|
102
102
|
- name: Set up Node.js
|
|
103
|
-
uses: actions/setup-node@
|
|
103
|
+
uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
104
104
|
with:
|
|
105
105
|
node-version: "22"
|
|
106
106
|
cache: "npm"
|
|
@@ -113,7 +113,7 @@ jobs:
|
|
|
113
113
|
runs-on: ubuntu-latest
|
|
114
114
|
steps:
|
|
115
115
|
- name: Checkout
|
|
116
|
-
uses: actions/checkout@
|
|
116
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
117
117
|
with:
|
|
118
118
|
# Make sure the action checks out the repository to the pull request branch
|
|
119
119
|
ref: ${{ github.ref_name }}
|
|
@@ -11,7 +11,7 @@ jobs:
|
|
|
11
11
|
version_check:
|
|
12
12
|
runs-on: ubuntu-latest
|
|
13
13
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
14
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
15
15
|
- name: Check version mismatch
|
|
16
16
|
run: |
|
|
17
17
|
echo "[i] Checking if the version in the CHANGELOG.md, package.json, and Github release version matches"
|
|
@@ -39,8 +39,8 @@ jobs:
|
|
|
39
39
|
needs: version_check
|
|
40
40
|
runs-on: ubuntu-latest
|
|
41
41
|
steps:
|
|
42
|
-
- uses: actions/checkout@
|
|
43
|
-
- uses: actions/setup-node@
|
|
42
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
43
|
+
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
44
44
|
with:
|
|
45
45
|
node-version: 22
|
|
46
46
|
- run: npm ci
|
|
@@ -51,8 +51,8 @@ jobs:
|
|
|
51
51
|
needs: audit
|
|
52
52
|
runs-on: ubuntu-latest
|
|
53
53
|
steps:
|
|
54
|
-
- uses: actions/checkout@
|
|
55
|
-
- uses: actions/setup-node@
|
|
54
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
55
|
+
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
56
56
|
with:
|
|
57
57
|
node-version: 22
|
|
58
58
|
- run: npm ci
|
|
@@ -64,8 +64,8 @@ jobs:
|
|
|
64
64
|
needs: build
|
|
65
65
|
runs-on: ubuntu-latest
|
|
66
66
|
steps:
|
|
67
|
-
- uses: actions/checkout@
|
|
68
|
-
- uses: actions/setup-node@
|
|
67
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
68
|
+
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
|
|
69
69
|
with:
|
|
70
70
|
node-version: 22
|
|
71
71
|
registry-url: https://registry.npmjs.org/
|
|
@@ -82,11 +82,56 @@ jobs:
|
|
|
82
82
|
VERSION: ${{ github.event.release.tag_name }}
|
|
83
83
|
|
|
84
84
|
|
|
85
|
+
update-homebrew-tap:
|
|
86
|
+
needs: publish-npm
|
|
87
|
+
runs-on: ubuntu-latest
|
|
88
|
+
steps:
|
|
89
|
+
- name: Get release version
|
|
90
|
+
id: version
|
|
91
|
+
run: |
|
|
92
|
+
RAW="${{ github.event.release.tag_name }}"
|
|
93
|
+
echo "version=${RAW#v}" >> "$GITHUB_OUTPUT"
|
|
94
|
+
|
|
95
|
+
- name: Compute npm tarball SHA256
|
|
96
|
+
id: sha256
|
|
97
|
+
run: |
|
|
98
|
+
VERSION="${{ steps.version.outputs.version }}"
|
|
99
|
+
URL="https://registry.npmjs.org/@shriyanss/js-recon/-/js-recon-${VERSION}.tgz"
|
|
100
|
+
SHA=$(curl -fsSL "${URL}" | sha256sum | awk '{print $1}')
|
|
101
|
+
echo "sha256=${SHA}" >> "$GITHUB_OUTPUT"
|
|
102
|
+
|
|
103
|
+
- name: Check out homebrew-tap
|
|
104
|
+
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
105
|
+
with:
|
|
106
|
+
repository: shriyanss/homebrew-tap
|
|
107
|
+
token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
|
|
108
|
+
path: homebrew-tap
|
|
109
|
+
|
|
110
|
+
- name: Update formula fields
|
|
111
|
+
working-directory: homebrew-tap
|
|
112
|
+
run: |
|
|
113
|
+
VERSION="${{ steps.version.outputs.version }}"
|
|
114
|
+
SHA="${{ steps.sha256.outputs.sha256 }}"
|
|
115
|
+
F="Formula/js-recon.rb"
|
|
116
|
+
sed -i "s|^ version \".*\"| version \"${VERSION}\"|" "${F}"
|
|
117
|
+
sed -i "s|^ url \"https://registry\.npmjs\.org/@shriyanss/js-recon/-/js-recon-[^\"]*\"| url \"https://registry.npmjs.org/@shriyanss/js-recon/-/js-recon-${VERSION}.tgz\"|" "${F}"
|
|
118
|
+
sed -i "s|^ sha256 \"[a-f0-9]*\"| sha256 \"${SHA}\"|" "${F}"
|
|
119
|
+
|
|
120
|
+
- name: Commit and push
|
|
121
|
+
working-directory: homebrew-tap
|
|
122
|
+
run: |
|
|
123
|
+
git config user.name "github-actions[bot]"
|
|
124
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
125
|
+
git add Formula/js-recon.rb
|
|
126
|
+
git commit -m "chore: update js-recon formula to ${{ steps.version.outputs.version }}"
|
|
127
|
+
git push
|
|
128
|
+
|
|
129
|
+
|
|
85
130
|
publish-docker:
|
|
86
131
|
needs: build
|
|
87
132
|
runs-on: ubuntu-latest
|
|
88
133
|
steps:
|
|
89
|
-
- uses: actions/checkout@
|
|
134
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
90
135
|
- name: Build and push to dockerhub
|
|
91
136
|
run: |
|
|
92
137
|
# login to docker
|
|
@@ -119,7 +164,7 @@ jobs:
|
|
|
119
164
|
contents: read
|
|
120
165
|
packages: write
|
|
121
166
|
steps:
|
|
122
|
-
- uses: actions/checkout@
|
|
167
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
123
168
|
- uses: docker/login-action@v3
|
|
124
169
|
with:
|
|
125
170
|
registry: ghcr.io
|
|
@@ -152,7 +197,7 @@ jobs:
|
|
|
152
197
|
- publish-ghcr
|
|
153
198
|
runs-on: ubuntu-latest
|
|
154
199
|
steps:
|
|
155
|
-
- uses: actions/checkout@
|
|
200
|
+
- uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
|
|
156
201
|
with:
|
|
157
202
|
ssh-key: ${{ secrets.DEPLOY_KEY }}
|
|
158
203
|
fetch-depth: 0
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,57 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 1.4.1-alpha.4 - 2026-06-29
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- `sourcemaps`: new subcommand to extract original source files from `.map` sourcemaps without running the full pipeline. Accepts a single `.map` file or a directory of `.map` files via `-i`/`--input`; writes recovered sources to `-o`/`--output` (default: `extracted`).
|
|
8
|
+
- Homebrew tap distribution: `brew tap shriyanss/tap && brew install js-recon` installs js-recon via the `shriyanss/homebrew-tap` Homebrew tap. The formula (`Formula/js-recon.rb`) auto-updates on every npm publish via the `update-homebrew-tap` CI job in `publish-js-recon.yml`.
|
|
9
|
+
|
|
10
|
+
### Changed
|
|
11
|
+
|
|
12
|
+
- `lazyload`: sourcemap extraction logic moved to the new `sourcemaps` module (`src/sourcemaps/`). Behaviour is identical; `lazyload` now delegates to `extractSourceMaps` from that module rather than containing a private copy.
|
|
13
|
+
|
|
14
|
+
## 1.4.1-alpha.3 - 2026-06-25
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- `run`: `--include-methods`, `--exclude-methods`, and `--list-methods` flags are now available on the `run` command, mirroring the same flags on `lazyload`. All three lazyload passes inside the `run` pipeline (initial, subsequent-requests, and re-pass) honour the method filter. `--list-methods [framework]` prints available method names and exits before any network work, so it can be used without a `-u` target URL.
|
|
19
|
+
|
|
20
|
+
- `run` (angular): Full 4-step pipeline support for Angular apps — lazyload → map → analyze → report. Previously the pipeline halted after lazyload with a warning; Angular targets now get the same depth of analysis as React and Vue. The map step resolves Angular `HttpClient` calls (`n.get(url)`, `n.post(url, body)`, etc.) via the shared HTTP-client resolver and native `fetch()` calls via the shared fetch resolver; the analyze step runs all rules whose `tech` array includes `"angular"` (or `"all"`); the report step generates the HTML/SQLite report as for other frameworks.
|
|
21
|
+
|
|
22
|
+
- `map`: Angular support via new `angular_js/` module. `getAngularConnections` reads Angular CLI (esbuild) chunks from the download directory and emits one chunk per JS file. Polyfill bundles (`polyfills-*.js`) are excluded (vendor code only). Registered as a new tech option (`-t angular`) alongside `next`, `vue`, `react`, and `svelte`.
|
|
23
|
+
|
|
24
|
+
- `analyze`: Angular added as a valid `tech` value in rule YAML and the Zod schema. Rules whose `tech` array lists `angular` (or `all`) now run when `--tech angular` is set (or when `run` detects Angular automatically).
|
|
25
|
+
|
|
26
|
+
- `rules` (angular): New rule `detect_angular_bypass_security_trust` detects calls to `bypassSecurityTrustHtml`, `bypassSecurityTrustScript`, `bypassSecurityTrustStyle`, `bypassSecurityTrustUrl`, and `bypassSecurityTrustResourceUrl` — Angular's DomSanitizer bypass methods that disable built-in XSS protection. Severity: high. Added `angular` to the `tech` array of all 17 existing AST rules that previously covered only `next`, `vue`, `react`, and `svelte`.
|
|
27
|
+
|
|
28
|
+
- `refactor -t react-vite`: new Vite (rolldown) React refactor mode. Takes a `mapped.json` whose chunks are Vite-produced ESM files and outputs one `.jsx` file per app chunk with library boilerplate removed and readable source recovered:
|
|
29
|
+
- Analyzes all vendor chunks (`vendor-react-*.js`) to classify every export as `react`, `react/jsx-runtime`, `react-dom/client`, or `react-router-dom`
|
|
30
|
+
- Detects CJS interop vars — both `__toESM(getter(), 1)` and bare `getter()` forms — and rewrites `(0, x.prop)(args)` calls to bare canonical names (`useState(args)`, `jsx(...)`, etc.)
|
|
31
|
+
- Rewrites the vendor import statement to direct canonical library imports (`import { useState, useEffect } from 'react'`, etc.)
|
|
32
|
+
- Reuses shared cleanup passes from the webpack refactor: `slicedToArray` collapse, JSX recovery (handles rolldown's template literal tag names `` `div` ``), Babel helper removal, unused-import pruning
|
|
33
|
+
- Runs a Vite build check after writing output: scaffolds a minimal Vite project in the output directory, renames `.js` → `.jsx`, rewrites relative dynamic imports, installs dependencies, and runs `vite build` to confirm the refactored code compiles
|
|
34
|
+
|
|
35
|
+
- `refactor -t react-webpack`: new `--scat <categories>` flag overrides the CS-MAST scat category set used for both the remote signature download and the module classifier. Accepts a comma-separated list of categories from `lit,id,op,decl,loop,cond,name,val,op_name` (e.g. `--scat lit,decl,cond`). The flag correctly maps to bucket directory names following the canonical `ALL_SCAT_CATEGORIES` ordering (the same ordering used by `jsr-cs-mast-s-gen`), so `--scat lit,cond,decl` and `--scat decl,lit,cond` both resolve to the `lit-decl-cond` bucket directory.
|
|
36
|
+
|
|
37
|
+
- `lazyload` (svelte): `svelte_getVersionJson` — probes `/<appDir>/version.json` when SvelteKit is detected. SvelteKit generates this file at build time and serves it for the `updated` store; because it has no `<script src>`, `<link href>`, or `import()` reference anywhere it is invisible to all other discovery steps and must be fetched directly. The `appDir` is derived from the entry-point URLs already discovered (default: `_app`). The method is registered in `methodFilter.ts` and can be skipped via `--exclude-methods svelte_getVersionJson`.
|
|
38
|
+
|
|
39
|
+
- `run` (nuxt): Full 4-step pipeline support for Nuxt.js apps — lazyload → map → analyze → report. Previously the pipeline halted after lazyload because `nuxt` was not in the supported-techs allowlist; Nuxt targets now run the same pipeline as Vue.
|
|
40
|
+
|
|
41
|
+
- `lazyload` (nuxt): `nuxt_getBuildsManifest` — probes `/_nuxt/builds/latest.json` and derives `/_nuxt/builds/meta/<id>.json` from it. Both files are fetched at runtime by the Nuxt client for incremental-deployment support but are never referenced from HTML or JS string literals, making them invisible to all other discovery steps. The method is registered in `methodFilter.ts` and can be skipped via `--exclude-methods nuxt_getBuildsManifest`.
|
|
42
|
+
|
|
43
|
+
### Changed
|
|
44
|
+
|
|
45
|
+
- `refactor -t react-webpack`: remote signatures now load from the HuggingFace bucket `shriyanss/cs-mast-s-dataset` (bucket prefix `react/webpack/large`) instead of the old dataset branch `react-small`. The bucket uses a structured prefix layout (`main/`, `react/webpack/small/`, `react/webpack/large/`). The local cache key changes from `react-small/` to `react/webpack/large/`, automatically invalidating any stale cache.
|
|
46
|
+
|
|
47
|
+
### Fixed
|
|
48
|
+
|
|
49
|
+
- `refactor -t react-webpack`: lazy-loaded components are now converted to true dynamic `import()` calls (Pass 4.5). Previously, webpack's async chunk-loading expression `__webpack_require__.e(N).then(__webpack_require__.bind(__webpack_require__, N))` was emitted as-is with `__webpack_require__` undefined in the output, causing a runtime `ReferenceError`. Pass 4.5 detects this pattern by matching the `.e(N)` / `.bind(requireParam, N)` shape and replaces it with `import('./N.js')`, producing a valid dynamic import that works in any ES module environment.
|
|
50
|
+
- `refactor -t react-webpack`: minified route-component variable names are now renamed to descriptive names derived from their `<Route path="…">` attributes. `renameRouteComponents` traverses the JSX `<Routes>` tree, accumulates path segments, generates a PascalCase component name per route (e.g. `/admin/users` → `AdminUsers`, `/admin/index` → `AdminDashboard`), and renames the corresponding `lazy(() => import('./N.js'))` declarations via `scope.rename`. The Suspense fallback component is renamed `Loading`. The App component function is renamed `App`.
|
|
51
|
+
|
|
52
|
+
- `lazyload` (svelte): `svelte_getFromPageSource` now extracts JS entry-point paths from inline `<script>` bodies by matching `import("...")` call arguments. SvelteKit `adapter-node` boots the client via `Promise.all([import("./_app/immutable/entry/start.js"), ...])` with no `src` attribute, which the previous HTML-attribute-only parser missed entirely, causing 0 JS files to be downloaded. The fix seeds the entry-point URLs so the downstream ESM import-following loop (`react_followImports`) can traverse the full chunk graph.
|
|
53
|
+
- `lazyload` (react): `react_followImports` `__vite_mapDeps` handler now correctly resolves SvelteKit's file-relative chunk paths (`"../nodes/0.js"`) in addition to Vue/React's root-relative paths (`"/assets/chunk.js"`). Previously all non-absolute paths had `/` prepended before URL resolution, causing `"../nodes/0.js"` to become `"/../nodes/0.js"` which the URL constructor normalized to `"/nodes/0.js"` — a wrong origin-root path that produced 404 responses. The fix resolves paths starting with `/` against `baseUrl` (origin root) and all other paths against `fileUrl` (the chunk containing the mapDeps table). This eliminates 32 spurious "Failed to write file" errors per SvelteKit run; the correct 34 chunk files were still downloaded via `svelte_stringAnalysisJSFiles`, so analysis results were unaffected.
|
|
54
|
+
|
|
3
55
|
## 1.4.1-alpha.2 - 2026-06-20
|
|
4
56
|
|
|
5
57
|
### Fixed
|
package/CLAUDE.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Static analysis tool that maps API endpoints and detects client-side security issues by analyzing Next.js (webpack/turbopack) and Vue.js bundles. Written in TypeScript, compiled to `build/` before running.
|
|
4
4
|
|
|
5
|
+
## STRICT: Repository hygiene
|
|
6
|
+
|
|
7
|
+
**Research artifacts must never be committed to this repo.** This is a public tool repository. Its git history must contain only tool source code, tests, docs, and configuration. Never commit:
|
|
8
|
+
|
|
9
|
+
- Experiment scripts, research notes, or analysis results
|
|
10
|
+
- Files from `js-recon-research/` or any private workspace directory
|
|
11
|
+
- Prompt logs, observation markdown files, or scratch files
|
|
12
|
+
|
|
13
|
+
Research outputs belong in the private sibling workspace outside this repo. If an experiment script or results file is needed as reference, keep it in the private workspace only.
|
|
14
|
+
|
|
5
15
|
## Build & run
|
|
6
16
|
|
|
7
17
|
```bash
|
|
@@ -25,6 +35,7 @@ npm run start -- <subcommand> [options]
|
|
|
25
35
|
| `api-gateway` | Manage AWS API Gateway for IP rotation |
|
|
26
36
|
| `mcp` | AI-powered CLI / one-shot chat (`-c`) / Model Context Protocol server (`--server`) |
|
|
27
37
|
| `cs-mast` | Compute CS-MAST structural hashes for downloaded JS files; find hash collisions |
|
|
38
|
+
| `sourcemaps` | Extract source files from `.map` sourcemap file(s) |
|
|
28
39
|
|
|
29
40
|
## Key source files
|
|
30
41
|
|
|
@@ -81,9 +92,22 @@ npm run start -- <subcommand> [options]
|
|
|
81
92
|
3. **Analyze** — same rule loading as Next.js; `-r/--rules` is forwarded here too
|
|
82
93
|
4. **Report** — same as Next.js; if `endpoints.json` doesn't exist it is written as `[]` since Vue endpoints extraction isn't implemented yet
|
|
83
94
|
|
|
95
|
+
### Angular pipeline (4 steps)
|
|
96
|
+
|
|
97
|
+
1. **Lazyload** — downloads Angular CLI (esbuild) bundles: `main-HASH.js`, lazy route chunks (`chunk-HASH.js`); sets `globalsUtil.getTech()` to `"angular"`
|
|
98
|
+
2. **Map** — scans `output/<host>/` for all Angular JS chunks; resolves `HttpClient` calls (`n.get(url)`, `n.post(url, body)`) via the shared HTTP-client resolver and `fetch()` calls via the shared fetch resolver; generates `mapped.json` and `mapped-openapi.json`
|
|
99
|
+
3. **Analyze** — runs all rules whose `tech` array includes `"angular"` (or `"all"`); includes the Angular-specific `detect_angular_bypass_security_trust` rule that fires on `bypassSecurityTrust*` calls
|
|
100
|
+
4. **Report** — same as Vue; `endpoints.json` is written as `[]` if missing since Angular endpoints extraction is not yet implemented
|
|
101
|
+
|
|
84
102
|
### Tech detection flow
|
|
85
103
|
|
|
86
|
-
`lazyLoad` sets the global tech string. If it remains `""` after lazyload, `run` exits (single URL) or skips (batch). Techs other than `"next"` and `"
|
|
104
|
+
`lazyLoad` sets the global tech string. If it remains `""` after lazyload, `run` exits (single URL) or skips (batch). Techs other than `"next"`, `"vue"`, `"nuxt"`, `"react"`, `"svelte"`, and `"angular"` only get lazyload; the rest of the pipeline is skipped with a warning.
|
|
105
|
+
|
|
106
|
+
**SvelteKit `adapter-node` boot pattern**: SvelteKit's Node adapter does not emit `<link rel="modulepreload">` or `<script src="...">` for its entry chunks. Instead it uses an inline `<script>` block: `Promise.all([import("./_app/immutable/entry/start.js"), ...])`. `svelte_getFromPageSource` handles this by scanning inline script bodies for `import("...")` arguments (added in v1.4.1-alpha.3). Without those seed URLs the entire downstream pipeline (string analysis, ESM import following, page crawl) produces nothing.
|
|
107
|
+
|
|
108
|
+
**SvelteKit `adapter-static` (SSG/SPA) boot pattern**: The static builds produce a shell HTML file (`404.html` for SSG, `index.html` for SPA) that contains both `<link rel="modulepreload">` tags for all initial chunks AND the same inline `import()` boot script as adapter-node. `svelte_getFromPageSource` picks up 17+ JS URLs from the modulepreload links plus 2 from the inline script, giving a much larger seed set than the adapter-node case.
|
|
109
|
+
|
|
110
|
+
**`__vite_mapDeps` path formats**: SvelteKit emits `m.f = ["../nodes/0.js", "../chunks/x.js", ...]` (file-relative paths) inside entry chunks at `_app/immutable/entry/`. Vue and React emit `m.f = ["/assets/chunk.js", ...]` (root-relative paths). `react_followImports` differentiates by checking `p.startsWith("/")` — absolute paths resolve against the origin (`baseUrl`), relative paths resolve against the chunk's own URL (`fileUrl`). See `src/lazyload/react/CLAUDE.md` for details.
|
|
87
111
|
|
|
88
112
|
### Batch mode
|
|
89
113
|
|
|
@@ -114,6 +138,12 @@ When `-u` points to a file of URLs, each line is processed sequentially. For eac
|
|
|
114
138
|
- Declared in `src/index.ts` on both the `lazyload` and `run` commands: `.option("--max-pages <pages>", ..., "200")`
|
|
115
139
|
- Threaded through `lazyLoad()` as `maxPageVisits` and forwarded to `NextJsCrawler` constructor. Default `200` matches the hardcoded cap previously in the crawler; pass `0` to disable. Prevents OOM on event-heavy Next.js sites where the recursive page queue fans out to hundreds of pages.
|
|
116
140
|
|
|
141
|
+
**Example — `--include-methods` / `--exclude-methods` / `--list-methods` flags:**
|
|
142
|
+
|
|
143
|
+
- Declared in `src/index.ts` on **both** the `lazyload` and `run` commands as `.option()` (not `requiredOption` — `--list-methods` must exit before the URL is required).
|
|
144
|
+
- `--list-methods` is handled early in **both** action handlers before any network work: prints method names and calls `process.exit(0)`.
|
|
145
|
+
- The method lists are parsed and validated in each action handler; stored on `cmd._includeMethods` / `cmd._excludeMethods` for the `run` action, which then threads them into `processUrl()` and from there into all three `lazyLoad()` calls as the last two positional parameters.
|
|
146
|
+
|
|
117
147
|
## Interactive-mode commands
|
|
118
148
|
|
|
119
149
|
The `map -i` blessed UI dispatches user input through `interactive_helpers/commandHandler.ts`. The same handler runs headlessly when commands are supplied via `-c/--command`:
|
|
@@ -221,9 +251,10 @@ Before writing any files, gather the current state:
|
|
|
221
251
|
5. **Push** `js-recon` dev branch: `git push origin dev`
|
|
222
252
|
|
|
223
253
|
6. **Open PR** using `gh pr create`:
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
254
|
+
|
|
255
|
+
| Repo | Source | Target | Title | Body |
|
|
256
|
+
| -------------------- | ------ | ------ | ------------------------------------------- | ------------------------------------ |
|
|
257
|
+
| `shriyanss/js-recon` | `dev` | `main` | bare version string (e.g. `v1.3.1-alpha.4`) | raw `## <version>` changelog section |
|
|
227
258
|
|
|
228
259
|
7. **Monitor js-recon CI** — use `gh pr checks <pr-number> --repo shriyanss/js-recon` and poll until all checks complete. Handle CodeRabbit suggestions (see below). Do NOT merge — wait for user approval.
|
|
229
260
|
|
|
@@ -245,6 +276,24 @@ Before writing any files, gather the current state:
|
|
|
245
276
|
|
|
246
277
|
9. **Wait for npm publish** — monitor the release pipeline: `gh run list --repo shriyanss/js-recon --workflow release`. Confirm the npm package is live at the new version before proceeding to Phase 2.
|
|
247
278
|
|
|
279
|
+
### Homebrew tap (automatic, runs in parallel with Phase 2)
|
|
280
|
+
|
|
281
|
+
After `publish-npm` succeeds, the `update-homebrew-tap` job in `publish-js-recon.yml` runs automatically. It:
|
|
282
|
+
|
|
283
|
+
1. Computes the SHA256 of the published npm tarball from the public npmjs.org URL (no auth)
|
|
284
|
+
2. Checks out `shriyanss/homebrew-tap` using `HOMEBREW_TAP_TOKEN` (a fine-grained PAT stored in `shriyanss/js-recon` secrets, scoped to `homebrew-tap` repo `Contents: Read and write` only — automatically masked in all log output, never echoed)
|
|
285
|
+
3. Updates `version`, `url`, and `sha256` in `Formula/js-recon.rb` via anchored `sed`
|
|
286
|
+
4. Commits `chore: update js-recon formula to <version>` and pushes
|
|
287
|
+
|
|
288
|
+
Monitor: `gh run list --repo shriyanss/homebrew-tap --workflow ci.yml`
|
|
289
|
+
|
|
290
|
+
**If the job fails:** The npm package is already live. Manually update: compute `curl -fsSL <tarball-url> | sha256sum`, edit `Formula/js-recon.rb`, commit, and push to `shriyanss/homebrew-tap`.
|
|
291
|
+
|
|
292
|
+
**One-time setup** (must be done before the first release, already completed):
|
|
293
|
+
|
|
294
|
+
- `shriyanss/homebrew-tap` is a public GitHub repo with the formula at `Formula/js-recon.rb`
|
|
295
|
+
- `HOMEBREW_TAP_TOKEN` is a fine-grained PAT stored in `shriyanss/js-recon` → Settings → Secrets → Actions, scoped exclusively to the `homebrew-tap` repo
|
|
296
|
+
|
|
248
297
|
### Phase 2 — js-recon-docs (after npm is live)
|
|
249
298
|
|
|
250
299
|
10. **Fix doc gaps** — cross-check `docs/docs/modules/*.md` against `src/index.ts` and the new CHANGELOG entries. Add or update any missing flags, options, or command descriptions.
|
|
@@ -287,6 +336,31 @@ For each suggestion: apply a fix commit to `dev` for correctness bugs or convent
|
|
|
287
336
|
|
|
288
337
|
Do NOT merge any PR. Once all CI checks pass and CodeRabbit suggestions are addressed, present a summary to the user: what changed in each repo, PR links, CI status, CodeRabbit disposition. Wait for explicit merge approval.
|
|
289
338
|
|
|
339
|
+
## Resolving a GitHub issue
|
|
340
|
+
|
|
341
|
+
When a user asks to fix or implement a GitHub issue, follow these steps:
|
|
342
|
+
|
|
343
|
+
1. **Read the issue** — `gh issue view <number> --repo shriyanss/js-recon`
|
|
344
|
+
|
|
345
|
+
2. **Implement** — make the code, docs, and exit-code changes required. Follow all existing conventions (subcommand structure, CHANGELOG format, README Commands table, js-recon-docs modules page, exit_codes.md). Document new exit codes in both `CLAUDE.md` and `js-recon-docs/docs/docs/exit_codes.md`.
|
|
346
|
+
|
|
347
|
+
3. **Test** — run `npm run cleanup` and exercise the new/changed functionality manually (see "Testing a change" section). Verify error paths and exit codes.
|
|
348
|
+
|
|
349
|
+
4. **Commit and push to `dev`** — use a `feat(...)` or `fix(...)` commit message. Push to `origin dev`.
|
|
350
|
+
|
|
351
|
+
5. **Monitor CI** — `gh run list --repo shriyanss/js-recon --branch dev --limit 3`. Watch the `Build & Prettify Code` run. If the `version_check` job fails because `CHANGELOG.md` top version doesn't match `package.json`, bump `package.json` and `src/globalConfig.ts` to match (with a `chore: bump version to <X>` commit) and repush.
|
|
352
|
+
|
|
353
|
+
6. **Pull prettifier commit** — after CI passes, `git pull origin dev` to pick up the `chore: prettify code` auto-commit.
|
|
354
|
+
|
|
355
|
+
7. **Close the issue** — once all CI checks pass:
|
|
356
|
+
|
|
357
|
+
```bash
|
|
358
|
+
gh issue close <number> --repo shriyanss/js-recon --comment \
|
|
359
|
+
"Implemented in commit <short-sha> on the \`dev\` branch. Will be released in **v<version>**."
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
Use the short commit hash of the feature commit (not the prettifier chore). The target release version comes from the unreleased CHANGELOG entry.
|
|
363
|
+
|
|
290
364
|
## cs-mast
|
|
291
365
|
|
|
292
366
|
`cs-mast` computes CS-MAST-S (Context-Stratified Merkelized Abstract Syntax Tree) signatures for every `.js` file found recursively under an output directory, then optionally finds and reports structural collisions — files sharing the same root signature.
|
|
@@ -323,7 +397,15 @@ node build/index.js cs-mast -o output --ct --min-collisions 2
|
|
|
323
397
|
node build/index.js cs-mast -o output --co output --cf csv # writes ./collisions.csv
|
|
324
398
|
```
|
|
325
399
|
|
|
326
|
-
## refactor
|
|
400
|
+
## refactor
|
|
401
|
+
|
|
402
|
+
The `refactor` command supports three techs:
|
|
403
|
+
|
|
404
|
+
- **`react-webpack`** — webpack 5 React bundles. Splits a numeric module map into per-module ES files, rewrites require→import, recovers JSX. See `src/refactor/react/CLAUDE.md`.
|
|
405
|
+
- **`react-vite`** — Vite (rolldown) React bundles. Removes CJS interop wrappers, rewrites vendor imports to canonical library imports (`react`, `react/jsx-runtime`, etc.), recovers JSX. Runs a Vite build check after writing output. See `src/refactor/react-vite/CLAUDE.md`.
|
|
406
|
+
- **`next`** — Next.js bundles (legacy).
|
|
407
|
+
|
|
408
|
+
### refactor `--collisions <file>` (react-webpack only)
|
|
327
409
|
|
|
328
410
|
`refactor -t react-webpack` accepts a `--collisions <file>` argument that points at a `collisions.json` produced by `cs-mast --all-scat-permutations` over a cross-app baseline. Modules whose body signature is in the baseline set are classified as library code (React / React-DOM / jsx-runtime / scheduler / …) and dropped from the output, leaving only `index.js`.
|
|
329
411
|
|
package/README.md
CHANGED
|
@@ -14,6 +14,23 @@ It can also reconstruct HTTP requests that the app makes to the server, and outp
|
|
|
14
14
|
|
|
15
15
|
## Installation
|
|
16
16
|
|
|
17
|
+
### Homebrew (macOS and Linux)
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
brew tap shriyanss/tap
|
|
21
|
+
brew install js-recon
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
To update:
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
brew update && brew upgrade js-recon
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
> **Note:** After installing via Homebrew, the `lazyload` subcommand requires a Chromium browser. Run `brew info js-recon` for setup instructions.
|
|
31
|
+
|
|
32
|
+
### npm (all platforms)
|
|
33
|
+
|
|
17
34
|
This tool requires Node.JS and `npm` to be installed. The [official download page](https://nodejs.org/en/download) can be referred. Please install **22.17.0 (LTS)** or later. Downloading older versions might break the tool.
|
|
18
35
|
|
|
19
36
|
To install the tool globally, run:
|
|
@@ -28,6 +45,8 @@ For detailed installation and setup process, please refer to the [Installation p
|
|
|
28
45
|
|
|
29
46
|
The features in JS Recon tool are built after thorough research on apps running different frameworks.
|
|
30
47
|
|
|
48
|
+
Full pipeline support (lazyload → map → analyze → report) is available for: **Next.js**, **Vue.js**, **Nuxt.js**, **React**, **Svelte/Astro**, and **Angular** (v17+ / esbuild).
|
|
49
|
+
|
|
31
50
|
Please refer to the [Framework Support](https://js-recon.io/docs/docs/framework-support) page for detailed information on feature compatibility across different frameworks.
|
|
32
51
|
|
|
33
52
|
## Quick Start
|
|
@@ -65,6 +84,7 @@ js-recon run -u https://app.example.com
|
|
|
65
84
|
| `refactor` | Refactors and deobfuscates webpack modules from a mapped JSON file. | [Read Docs](https://js-recon.io/docs/docs/modules/refactor) |
|
|
66
85
|
| `load` | Populates the response cache from a Caido or Burp Suite export. | [Read Docs](https://js-recon.io/docs/docs/modules/load) |
|
|
67
86
|
| `cs-mast` | Computes CS-MAST structural hashes for JS files and finds hash collisions. | [Read Docs](https://js-recon.io/docs/docs/modules/cs-mast) |
|
|
87
|
+
| `sourcemaps` | Extracts original source files from `.map` sourcemap files. | [Read Docs](https://js-recon.io/docs/docs/modules/sourcemaps) |
|
|
68
88
|
|
|
69
89
|
## Key Features
|
|
70
90
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyze/engine/index.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAGvC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAClB,IAAU,EACV,cAAkC,EAClC,WAAoC,EACpC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/analyze/engine/index.ts"],"names":[],"mappings":";;;;;;;;;AAGA,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,SAAS,MAAM,gBAAgB,CAAC;AAGvC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAClB,IAAU,EACV,cAAkC,EAClC,WAAoC,EACpC,IAA6D,EAC1B,EAAE;IACrC,yGAAyG;IAEzG,IAAI,QAAQ,GAAmB,EAAE,CAAC;IAElC,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,WAAW,EAAE,CAAC;YACf,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC;IACL,CAAC;SAAM,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC7B,IAAI,CAAC,cAAc,EAAE,CAAC;YAClB,OAAO;QACX,CAAC;QAED,IAAI,SAAS,GAAG,IAAI,CAAC;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5B,SAAS,GAAG,KAAK,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,SAAS,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3D,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AACpB,CAAC,CAAA,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -49,7 +49,7 @@ export const ruleSchema = z.object({
|
|
|
49
49
|
author: z.string(),
|
|
50
50
|
description: z.string(),
|
|
51
51
|
js_recon_version: z.string(),
|
|
52
|
-
tech: z.array(z.enum(["next", "vue", "react", "svelte", "all"])),
|
|
52
|
+
tech: z.array(z.enum(["next", "vue", "react", "svelte", "angular", "all"])),
|
|
53
53
|
severity: z.enum(["info", "low", "medium", "high"]),
|
|
54
54
|
type: z.enum(["request", "ast"]),
|
|
55
55
|
steps: z.array(stepSchema),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/analyze/helpers/schemas.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../../src/analyze/helpers/schemas.ts"],"names":[],"mappings":"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"}
|
package/build/analyze/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,aAAa,MAAM,uBAAuB,CAAC;AAElD,OAAO,MAAM,MAAM,mBAAmB,CAAC;AACvC,OAAO,IAAI,MAAM,MAAM,CAAC;AAGxB,OAAO,SAAS,MAAM,wBAAwB,CAAC;AAC/C,OAAO,EAAgB,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAE/E,MAAM,cAAc,GAAG;IACnB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,QAAQ;IACb,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,cAAc;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyze/index.ts"],"names":[],"mappings":"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"}
|
package/build/globalConfig.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
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.4.1-alpha.
|
|
4
|
-
const toolDesc = "
|
|
3
|
+
const version = "1.4.1-alpha.4";
|
|
4
|
+
const toolDesc = "JavaScript Enumeration and SAST";
|
|
5
5
|
const axiosNonHttpMethods = ["isAxiosError"]; // methods available in axios, which are not for making HTTP requests
|
|
6
6
|
let CONFIG = {
|
|
7
7
|
github: githubURL,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"globalConfig.js","sourceRoot":"","sources":["../src/globalConfig.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAC1D,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,OAAO,GAAG,eAAe,CAAC;AAChC,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"globalConfig.js","sourceRoot":"","sources":["../src/globalConfig.ts"],"names":[],"mappings":"AAAA,MAAM,SAAS,GAAG,uCAAuC,CAAC;AAC1D,MAAM,WAAW,GAAG,2CAA2C,CAAC;AAChE,MAAM,OAAO,GAAG,eAAe,CAAC;AAChC,MAAM,QAAQ,GAAG,iCAAiC,CAAC;AACnD,MAAM,mBAAmB,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,qEAAqE;AAEnH,IAAI,MAAM,GAAG;IACT,MAAM,EAAE,SAAS;IACjB,WAAW,EAAE,WAAW;IACxB,eAAe,EAAE,qFAAqF,SAAS,kCAAkC;IACjJ,OAAO,EAAE,OAAO;IAChB,QAAQ,EAAE,QAAQ;IAClB,mBAAmB,EAAE,mBAAmB;IACxC,QAAQ,EAAE,GAAG,SAAS,oBAAoB;CAC7C,CAAC;AAEF,eAAe,MAAM,CAAC"}
|