@js-recon/js-recon 2.0.1-alpha.3 → 2.0.1-beta.1
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 +33 -21
- package/.github/workflows/codeql.yml +5 -3
- package/.github/workflows/exploit-smoke-test.yaml +15 -12
- package/.github/workflows/framework-detection-smoke-test.yaml +7 -4
- package/.github/workflows/plumber.yml +4 -2
- package/.github/workflows/pr_checker.yml +3 -1
- package/.github/workflows/promote-js-recon.yml +19 -15
- package/.github/workflows/publish-js-recon.yml +9 -9
- package/.github/workflows/rules-smoke-test.yaml +7 -4
- package/CHANGELOG.md +23 -0
- package/Dockerfile +1 -1
- package/Dockerfile.release +1 -1
- package/build/analyze/engine/astEngine.js +3 -5
- package/build/analyze/engine/astEngine.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +1 -3
- package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +1 -3
- package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +1 -3
- package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -1
- package/build/analyze/helpers/engineHelpers/taintFlow.js +1 -3
- package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
- package/build/endpoints/next_js/client_jsFilesHref.js +2 -4
- package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
- package/build/endpoints/next_js/client_jsonParse.js +2 -4
- package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
- package/build/endpoints/next_js/client_mappedJsonFile.js +2 -4
- package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
- package/build/endpoints/next_js/client_subsequentRequests.js +2 -4
- package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
- package/build/globalConfig.js +1 -1
- package/build/globalConfig.js.map +1 -1
- package/build/lazyLoad/angular/angular_recursiveChunkImports.js +4 -9
- package/build/lazyLoad/angular/angular_recursiveChunkImports.js.map +1 -1
- package/build/lazyLoad/index.js +60 -3
- package/build/lazyLoad/index.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +2 -4
- package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +2 -4
- package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_parseLayoutJs.js +2 -4
- package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
- package/build/lazyLoad/next_js/next_promiseResolve.js +2 -4
- package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js +3 -5
- package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +31 -15
- package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/shared/webpackChunkParsers.js +2 -4
- package/build/lazyLoad/shared/webpackChunkParsers.js.map +1 -1
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +2 -4
- package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
- package/build/lazyLoad/techDetect/checkNuxtDevServer.js +52 -0
- package/build/lazyLoad/techDetect/checkNuxtDevServer.js.map +1 -0
- package/build/lazyLoad/techDetect/index.js +13 -2
- package/build/lazyLoad/techDetect/index.js.map +1 -1
- package/build/lazyLoad/vue/vue_RuntimeJs.js +1 -3
- package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -4
- package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
- package/build/lazyLoad/vue/vue_getClientSidePaths.js +3 -5
- package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
- package/build/lazyLoad/vue/vue_jsImports.js +6 -11
- package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js +1 -1
- package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
- package/build/lazyLoad/vue/vue_viteMapDeps.js +3 -5
- package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
- package/build/map/angular_js/getAngularConnections.js +1 -1
- package/build/map/angular_js/getAngularConnections.js.map +1 -1
- package/build/map/graphql/resolveGraphql.js +2 -4
- package/build/map/graphql/resolveGraphql.js.map +1 -1
- package/build/map/interactive-mode/esqueryGen.js +3 -6
- package/build/map/interactive-mode/esqueryGen.js.map +1 -1
- package/build/map/next_js/getExports.js +2 -4
- package/build/map/next_js/getExports.js.map +1 -1
- package/build/map/next_js/getFetchInstances.js +2 -4
- package/build/map/next_js/getFetchInstances.js.map +1 -1
- package/build/map/next_js/getTurbopackConnections.js +2 -4
- package/build/map/next_js/getTurbopackConnections.js.map +1 -1
- package/build/map/next_js/getWebpackConnections.js +2 -4
- package/build/map/next_js/getWebpackConnections.js.map +1 -1
- package/build/map/next_js/resolveAxios.js +2 -4
- package/build/map/next_js/resolveAxios.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +1 -3
- package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +1 -3
- package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +2 -4
- package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +1 -3
- package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +0 -3
- package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +2 -4
- package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +1 -3
- package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +2 -4
- package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
- package/build/map/next_js/resolveAxiosHelpers/traceBody.js +2 -4
- package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -1
- package/build/map/next_js/resolveFetch.js +2 -4
- package/build/map/next_js/resolveFetch.js.map +1 -1
- package/build/map/next_js/resolveNewRequest.js +2 -4
- package/build/map/next_js/resolveNewRequest.js.map +1 -1
- package/build/map/next_js/resolveServerActions.js +2 -4
- package/build/map/next_js/resolveServerActions.js.map +1 -1
- package/build/map/next_js/utils.js +2 -4
- package/build/map/next_js/utils.js.map +1 -1
- package/build/map/react_js/getReactConnections.js +2 -4
- package/build/map/react_js/getReactConnections.js.map +1 -1
- package/build/map/vue_js/crossFileResolver.js +2 -4
- package/build/map/vue_js/crossFileResolver.js.map +1 -1
- package/build/map/vue_js/getViteConnections.js +2 -4
- package/build/map/vue_js/getViteConnections.js.map +1 -1
- package/build/map/vue_js/taint_utils.js +2 -4
- package/build/map/vue_js/taint_utils.js.map +1 -1
- package/build/map/vue_js/vue_resolveFetch.js +2 -4
- package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
- package/build/map/vue_js/vue_resolveHttpClient.js +2 -4
- package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
- package/build/map/vue_js/vue_resolveXhr.js +2 -4
- package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
- package/build/refactor/next/index.js +3 -6
- package/build/refactor/next/index.js.map +1 -1
- package/build/refactor/next/transform.js +2 -6
- package/build/refactor/next/transform.js.map +1 -1
- package/build/refactor/next/validator.js +2 -4
- package/build/refactor/next/validator.js.map +1 -1
- package/build/refactor/react/index.js +3 -6
- package/build/refactor/react/index.js.map +1 -1
- package/build/refactor/react/library-classify.js +1 -3
- package/build/refactor/react/library-classify.js.map +1 -1
- package/build/refactor/react/transform.js +8 -15
- package/build/refactor/react/transform.js.map +1 -1
- package/build/refactor/react/validator.js +2 -4
- package/build/refactor/react/validator.js.map +1 -1
- package/build/refactor/react-vite/index.js +3 -8
- package/build/refactor/react-vite/index.js.map +1 -1
- package/build/refactor/react-vite/vendor-analyze.js +2 -5
- package/build/refactor/react-vite/vendor-analyze.js.map +1 -1
- package/build/refactor/vue/index.js +2 -4
- package/build/refactor/vue/index.js.map +1 -1
- package/build/refactor/vue/vendor-analyze-vue.js +4 -5
- package/build/refactor/vue/vendor-analyze-vue.js.map +1 -1
- package/build/refactor/vue/vite.js +3 -5
- package/build/refactor/vue/vite.js.map +1 -1
- package/build/run/index.js +3 -1
- package/build/run/index.js.map +1 -1
- package/build/strings/index.js +1 -1
- package/build/strings/index.js.map +1 -1
- package/build/utility/ai.js +16 -32
- package/build/utility/ai.js.map +1 -1
- package/build/utility/globals.js +27 -0
- package/build/utility/globals.js.map +1 -1
- package/build/utility/openapiGenerator.js +1 -1
- package/build/utility/openapiGenerator.js.map +1 -1
- package/build/utility/postmanGenerator.js +2 -1
- package/build/utility/postmanGenerator.js.map +1 -1
- package/package.json +9 -9
|
@@ -15,7 +15,9 @@ jobs:
|
|
|
15
15
|
!startsWith(github.event.head_commit.message, 'chore: prettify code')
|
|
16
16
|
runs-on: ubuntu-latest
|
|
17
17
|
steps:
|
|
18
|
-
- uses: actions/checkout@
|
|
18
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
with:
|
|
20
|
+
persist-credentials: false
|
|
19
21
|
- name: Check version mismatch
|
|
20
22
|
env:
|
|
21
23
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -45,8 +47,10 @@ jobs:
|
|
|
45
47
|
runs-on: ubuntu-latest
|
|
46
48
|
needs: version_check
|
|
47
49
|
steps:
|
|
48
|
-
- uses: actions/checkout@
|
|
49
|
-
|
|
50
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
51
|
+
with:
|
|
52
|
+
persist-credentials: false
|
|
53
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
50
54
|
with:
|
|
51
55
|
node-version: "22"
|
|
52
56
|
cache: "npm"
|
|
@@ -63,7 +67,7 @@ jobs:
|
|
|
63
67
|
contents: write
|
|
64
68
|
steps:
|
|
65
69
|
- name: Checkout
|
|
66
|
-
uses: actions/checkout@
|
|
70
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
67
71
|
with:
|
|
68
72
|
# Make sure the action checks out the repository to the pull request branch
|
|
69
73
|
ref: ${{ github.ref_name }}
|
|
@@ -76,7 +80,7 @@ jobs:
|
|
|
76
80
|
commit-email: ${{ secrets.JS_RECON_SIGNING_EMAIL }}
|
|
77
81
|
|
|
78
82
|
- name: Set up Node.js
|
|
79
|
-
uses: actions/setup-node@
|
|
83
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
80
84
|
with:
|
|
81
85
|
node-version: "22"
|
|
82
86
|
cache: "npm"
|
|
@@ -104,12 +108,13 @@ jobs:
|
|
|
104
108
|
runs-on: ubuntu-latest
|
|
105
109
|
steps:
|
|
106
110
|
- name: Checkout
|
|
107
|
-
uses: actions/checkout@
|
|
111
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
108
112
|
with:
|
|
113
|
+
persist-credentials: false
|
|
109
114
|
ref: ${{ github.ref_name }}
|
|
110
115
|
|
|
111
116
|
- name: Set up Node.js
|
|
112
|
-
uses: actions/setup-node@
|
|
117
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
113
118
|
with:
|
|
114
119
|
node-version: "22"
|
|
115
120
|
cache: "npm"
|
|
@@ -125,12 +130,13 @@ jobs:
|
|
|
125
130
|
runs-on: ubuntu-latest
|
|
126
131
|
steps:
|
|
127
132
|
- name: Checkout
|
|
128
|
-
uses: actions/checkout@
|
|
133
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
129
134
|
with:
|
|
135
|
+
persist-credentials: false
|
|
130
136
|
ref: ${{ github.ref_name }}
|
|
131
137
|
|
|
132
138
|
- name: Set up Node.js
|
|
133
|
-
uses: actions/setup-node@
|
|
139
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
134
140
|
with:
|
|
135
141
|
node-version: "22"
|
|
136
142
|
cache: "npm"
|
|
@@ -146,13 +152,14 @@ jobs:
|
|
|
146
152
|
runs-on: ubuntu-latest
|
|
147
153
|
steps:
|
|
148
154
|
- name: Checkout
|
|
149
|
-
uses: actions/checkout@
|
|
155
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
150
156
|
with:
|
|
157
|
+
persist-credentials: false
|
|
151
158
|
# Make sure the action checks out the repository to the pull request branch
|
|
152
159
|
ref: ${{ github.ref_name }}
|
|
153
160
|
|
|
154
161
|
- name: Set up Node.js
|
|
155
|
-
uses: actions/setup-node@
|
|
162
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
156
163
|
with:
|
|
157
164
|
node-version: "22"
|
|
158
165
|
cache: "npm"
|
|
@@ -167,8 +174,9 @@ jobs:
|
|
|
167
174
|
runs-on: ubuntu-latest
|
|
168
175
|
steps:
|
|
169
176
|
- name: Checkout
|
|
170
|
-
uses: actions/checkout@
|
|
177
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
171
178
|
with:
|
|
179
|
+
persist-credentials: false
|
|
172
180
|
# Make sure the action checks out the repository to the pull request branch
|
|
173
181
|
ref: ${{ github.ref_name }}
|
|
174
182
|
- name: Build docker container
|
|
@@ -180,13 +188,15 @@ jobs:
|
|
|
180
188
|
timeout-minutes: 30
|
|
181
189
|
steps:
|
|
182
190
|
- name: Checkout js-recon
|
|
183
|
-
uses: actions/checkout@
|
|
191
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
184
192
|
with:
|
|
193
|
+
persist-credentials: false
|
|
185
194
|
ref: ${{ github.ref_name }}
|
|
186
195
|
|
|
187
196
|
- name: Checkout js-recon-labs
|
|
188
|
-
uses: actions/checkout@
|
|
197
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
189
198
|
with:
|
|
199
|
+
persist-credentials: false
|
|
190
200
|
repository: js-recon/js-recon-labs
|
|
191
201
|
path: js-recon-labs
|
|
192
202
|
|
|
@@ -202,7 +212,7 @@ jobs:
|
|
|
202
212
|
git clone --depth 1 --branch "$BRANCH" https://github.com/js-recon/js-recon-rules.git js-recon-rules
|
|
203
213
|
|
|
204
214
|
- name: Set up Node.js
|
|
205
|
-
uses: actions/setup-node@
|
|
215
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
206
216
|
with:
|
|
207
217
|
node-version: "22"
|
|
208
218
|
cache: "npm"
|
|
@@ -250,7 +260,7 @@ jobs:
|
|
|
250
260
|
|
|
251
261
|
- name: Upload analyze.json on failure
|
|
252
262
|
if: failure()
|
|
253
|
-
uses: actions/upload-artifact@
|
|
263
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
254
264
|
with:
|
|
255
265
|
name: analyze-json-docker
|
|
256
266
|
path: output/**/analyze.json
|
|
@@ -284,7 +294,7 @@ jobs:
|
|
|
284
294
|
|
|
285
295
|
- name: Upload w-rules analyze.json on failure
|
|
286
296
|
if: failure()
|
|
287
|
-
uses: actions/upload-artifact@
|
|
297
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
288
298
|
with:
|
|
289
299
|
name: analyze-json-docker-w-rules
|
|
290
300
|
path: output-w-rules/**/analyze.json
|
|
@@ -296,13 +306,15 @@ jobs:
|
|
|
296
306
|
timeout-minutes: 30
|
|
297
307
|
steps:
|
|
298
308
|
- name: Checkout js-recon
|
|
299
|
-
uses: actions/checkout@
|
|
309
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
300
310
|
with:
|
|
311
|
+
persist-credentials: false
|
|
301
312
|
ref: ${{ github.ref_name }}
|
|
302
313
|
|
|
303
314
|
- name: Checkout js-recon-labs
|
|
304
|
-
uses: actions/checkout@
|
|
315
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
305
316
|
with:
|
|
317
|
+
persist-credentials: false
|
|
306
318
|
repository: js-recon/js-recon-labs
|
|
307
319
|
path: js-recon-labs
|
|
308
320
|
|
|
@@ -318,7 +330,7 @@ jobs:
|
|
|
318
330
|
git clone --depth 1 --branch "$BRANCH" https://github.com/js-recon/js-recon-rules.git js-recon-rules
|
|
319
331
|
|
|
320
332
|
- name: Set up Node.js
|
|
321
|
-
uses: actions/setup-node@
|
|
333
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
322
334
|
with:
|
|
323
335
|
node-version: "22"
|
|
324
336
|
cache: "npm"
|
|
@@ -377,7 +389,7 @@ jobs:
|
|
|
377
389
|
|
|
378
390
|
- name: Upload analyze.json on failure
|
|
379
391
|
if: failure()
|
|
380
|
-
uses: actions/upload-artifact@
|
|
392
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
381
393
|
with:
|
|
382
394
|
name: analyze-json-macos
|
|
383
395
|
path: output/**/analyze.json
|
|
@@ -20,14 +20,16 @@ jobs:
|
|
|
20
20
|
name: Analyze (javascript-typescript)
|
|
21
21
|
runs-on: ubuntu-latest
|
|
22
22
|
steps:
|
|
23
|
-
- uses: actions/checkout@
|
|
23
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
24
|
+
with:
|
|
25
|
+
persist-credentials: false
|
|
24
26
|
|
|
25
27
|
- name: Initialize CodeQL
|
|
26
|
-
uses: github/codeql-action/init@
|
|
28
|
+
uses: github/codeql-action/init@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
|
|
27
29
|
with:
|
|
28
30
|
languages: javascript-typescript
|
|
29
31
|
|
|
30
32
|
- name: Perform CodeQL Analysis
|
|
31
|
-
uses: github/codeql-action/analyze@
|
|
33
|
+
uses: github/codeql-action/analyze@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
|
|
32
34
|
with:
|
|
33
35
|
category: "/language:javascript-typescript"
|
|
@@ -15,16 +15,19 @@ jobs:
|
|
|
15
15
|
|
|
16
16
|
steps:
|
|
17
17
|
- name: Checkout js-recon
|
|
18
|
-
uses: actions/checkout@
|
|
18
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
with:
|
|
20
|
+
persist-credentials: false
|
|
19
21
|
|
|
20
22
|
- name: Checkout js-recon-labs
|
|
21
|
-
uses: actions/checkout@
|
|
23
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
24
|
with:
|
|
25
|
+
persist-credentials: false
|
|
23
26
|
repository: js-recon/js-recon-labs
|
|
24
27
|
path: js-recon-labs
|
|
25
28
|
|
|
26
29
|
- name: Set up Node.js
|
|
27
|
-
uses: actions/setup-node@
|
|
30
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
28
31
|
with:
|
|
29
32
|
node-version: "22"
|
|
30
33
|
cache: "npm"
|
|
@@ -38,7 +41,7 @@ jobs:
|
|
|
38
41
|
# --- Next.js: CVE-2025-29927 (middleware bypass) ---
|
|
39
42
|
- name: Build cve-2025-29927 fixture
|
|
40
43
|
working-directory: js-recon-labs/next_js/cve-2025-29927
|
|
41
|
-
run: npm
|
|
44
|
+
run: npm ci && npm run build
|
|
42
45
|
|
|
43
46
|
- name: Start cve-2025-29927 fixture
|
|
44
47
|
working-directory: js-recon-labs/next_js/cve-2025-29927
|
|
@@ -47,7 +50,7 @@ jobs:
|
|
|
47
50
|
# --- Next.js: CVE-2026-64645 (rewrites SSRF) ---
|
|
48
51
|
- name: Build cve-2026-64645 fixture
|
|
49
52
|
working-directory: js-recon-labs/next_js/cve-2026-64645
|
|
50
|
-
run: npm
|
|
53
|
+
run: npm ci && npm run build
|
|
51
54
|
|
|
52
55
|
- name: Start cve-2026-64645 fixture
|
|
53
56
|
working-directory: js-recon-labs/next_js/cve-2026-64645
|
|
@@ -56,7 +59,7 @@ jobs:
|
|
|
56
59
|
# --- Next.js: CVE-2025-55182 (React Flight RCE) ---
|
|
57
60
|
- name: Install cve-2025-55182 fixture dependencies
|
|
58
61
|
working-directory: js-recon-labs/next_js/cve-2025-55182
|
|
59
|
-
run: npm
|
|
62
|
+
run: npm ci
|
|
60
63
|
|
|
61
64
|
- name: Start cve-2025-55182 fixture
|
|
62
65
|
working-directory: js-recon-labs/next_js/cve-2025-55182
|
|
@@ -65,7 +68,7 @@ jobs:
|
|
|
65
68
|
# --- Vite: CVE-2025-30208 (fs.deny double-'?' bypass) ---
|
|
66
69
|
- name: Install cve-2025-30208 fixture dependencies
|
|
67
70
|
working-directory: js-recon-labs/vite/cve-2025-30208
|
|
68
|
-
run: npm
|
|
71
|
+
run: npm ci
|
|
69
72
|
|
|
70
73
|
- name: Start cve-2025-30208 fixture
|
|
71
74
|
working-directory: js-recon-labs/vite/cve-2025-30208
|
|
@@ -74,7 +77,7 @@ jobs:
|
|
|
74
77
|
# --- Vite: CVE-2026-39363 (WebSocket fetchModule bypass) ---
|
|
75
78
|
- name: Install cve-2026-39363 fixture dependencies
|
|
76
79
|
working-directory: js-recon-labs/vite/cve-2026-39363
|
|
77
|
-
run: npm
|
|
80
|
+
run: npm ci
|
|
78
81
|
|
|
79
82
|
- name: Start cve-2026-39363 fixture
|
|
80
83
|
working-directory: js-recon-labs/vite/cve-2026-39363
|
|
@@ -83,7 +86,7 @@ jobs:
|
|
|
83
86
|
# --- Nuxt: CVE-2026-71320 (Server Island RCE) ---
|
|
84
87
|
- name: Build cve-2026-71320 fixture
|
|
85
88
|
working-directory: js-recon-labs/nuxt/cve-2026-71320
|
|
86
|
-
run: npm
|
|
89
|
+
run: npm ci && npm run build
|
|
87
90
|
|
|
88
91
|
- name: Start cve-2026-71320 fixture
|
|
89
92
|
working-directory: js-recon-labs/nuxt/cve-2026-71320
|
|
@@ -92,7 +95,7 @@ jobs:
|
|
|
92
95
|
# --- Nuxt: CVE-2026-71315 (route-rule casing bypass) ---
|
|
93
96
|
- name: Build cve-2026-71315 fixture
|
|
94
97
|
working-directory: js-recon-labs/nuxt/cve-2026-71315
|
|
95
|
-
run: npm
|
|
98
|
+
run: npm ci && npm run build
|
|
96
99
|
|
|
97
100
|
- name: Start cve-2026-71315 fixture
|
|
98
101
|
working-directory: js-recon-labs/nuxt/cve-2026-71315
|
|
@@ -101,7 +104,7 @@ jobs:
|
|
|
101
104
|
# --- Angular: CVE-2026-68945 (HttpTransferCache collision) ---
|
|
102
105
|
- name: Build cve-2026-68945 fixture
|
|
103
106
|
working-directory: js-recon-labs/angular/cve-2026-68945
|
|
104
|
-
run: npm
|
|
107
|
+
run: npm ci && npm run build
|
|
105
108
|
|
|
106
109
|
- name: Start cve-2026-68945 fixture
|
|
107
110
|
working-directory: js-recon-labs/angular/cve-2026-68945
|
|
@@ -153,7 +156,7 @@ jobs:
|
|
|
153
156
|
|
|
154
157
|
- name: Upload exploit results on failure
|
|
155
158
|
if: failure()
|
|
156
|
-
uses: actions/upload-artifact@
|
|
159
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
157
160
|
with:
|
|
158
161
|
name: exploit-results
|
|
159
162
|
path: /tmp/exploit-results/**
|
|
@@ -23,16 +23,19 @@ jobs:
|
|
|
23
23
|
|
|
24
24
|
steps:
|
|
25
25
|
- name: Checkout js-recon
|
|
26
|
-
uses: actions/checkout@
|
|
26
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
27
|
+
with:
|
|
28
|
+
persist-credentials: false
|
|
27
29
|
|
|
28
30
|
- name: Checkout js-recon-labs
|
|
29
|
-
uses: actions/checkout@
|
|
31
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
30
32
|
with:
|
|
33
|
+
persist-credentials: false
|
|
31
34
|
repository: js-recon/js-recon-labs
|
|
32
35
|
path: js-recon-labs
|
|
33
36
|
|
|
34
37
|
- name: Set up Node.js
|
|
35
|
-
uses: actions/setup-node@
|
|
38
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
36
39
|
with:
|
|
37
40
|
node-version: "22"
|
|
38
41
|
|
|
@@ -128,7 +131,7 @@ jobs:
|
|
|
128
131
|
|
|
129
132
|
- name: Upload fingerprint result on failure
|
|
130
133
|
if: failure()
|
|
131
|
-
uses: actions/upload-artifact@
|
|
134
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
132
135
|
with:
|
|
133
136
|
name: fingerprint-result
|
|
134
137
|
path: /tmp/fingerprint-result.json
|
|
@@ -14,7 +14,9 @@ jobs:
|
|
|
14
14
|
plumber:
|
|
15
15
|
runs-on: ubuntu-latest
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
18
|
-
|
|
17
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
18
|
+
with:
|
|
19
|
+
persist-credentials: false
|
|
20
|
+
- uses: getplumber/plumber@e81ed4965fd92e0d2b63e95d399ed0419f5de2fa # v0.4.12, 2026-07-20
|
|
19
21
|
with:
|
|
20
22
|
score-push: true
|
|
@@ -11,7 +11,9 @@ jobs:
|
|
|
11
11
|
permissions:
|
|
12
12
|
pull-requests: write
|
|
13
13
|
steps:
|
|
14
|
-
- uses: actions/checkout@
|
|
14
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
15
|
+
with:
|
|
16
|
+
persist-credentials: false
|
|
15
17
|
- name: Redirect PR to dev
|
|
16
18
|
if: github.head_ref != 'dev' || github.event.pull_request.head.repo.full_name != 'js-recon/js-recon'
|
|
17
19
|
env:
|
|
@@ -45,7 +45,7 @@ jobs:
|
|
|
45
45
|
VERSION: ${{ inputs.version }}
|
|
46
46
|
|
|
47
47
|
- name: Check out homebrew-tap
|
|
48
|
-
uses: actions/checkout@
|
|
48
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
49
49
|
with:
|
|
50
50
|
repository: js-recon/homebrew-tap
|
|
51
51
|
token: ${{ secrets.HOMEBREW_TAP_GH_PAT }}
|
|
@@ -85,9 +85,11 @@ jobs:
|
|
|
85
85
|
contents: read
|
|
86
86
|
packages: write
|
|
87
87
|
steps:
|
|
88
|
-
- uses: actions/checkout@
|
|
88
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
89
|
+
with:
|
|
90
|
+
persist-credentials: false
|
|
89
91
|
- name: Checkout js-recon-rules
|
|
90
|
-
uses: actions/checkout@
|
|
92
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
91
93
|
with:
|
|
92
94
|
repository: js-recon/js-recon-rules
|
|
93
95
|
path: js-recon-rules
|
|
@@ -95,7 +97,7 @@ jobs:
|
|
|
95
97
|
# Dockerfile.w-rules builds from this context and would otherwise bake
|
|
96
98
|
# the writable GHCR credential into an image layer.
|
|
97
99
|
persist-credentials: false
|
|
98
|
-
- uses: docker/login-action@
|
|
100
|
+
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
|
|
99
101
|
with:
|
|
100
102
|
registry: ghcr.io
|
|
101
103
|
username: ${{ github.actor }}
|
|
@@ -142,13 +144,13 @@ jobs:
|
|
|
142
144
|
contents: read
|
|
143
145
|
steps:
|
|
144
146
|
- name: Checkout js-recon-labs
|
|
145
|
-
uses: actions/checkout@
|
|
147
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
146
148
|
with:
|
|
147
149
|
repository: js-recon/js-recon-labs
|
|
148
150
|
path: js-recon-labs
|
|
149
151
|
persist-credentials: false
|
|
150
152
|
|
|
151
|
-
- uses: actions/setup-node@
|
|
153
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
152
154
|
with:
|
|
153
155
|
node-version: "22"
|
|
154
156
|
|
|
@@ -195,17 +197,17 @@ jobs:
|
|
|
195
197
|
packages: read
|
|
196
198
|
steps:
|
|
197
199
|
- name: Checkout js-recon-labs
|
|
198
|
-
uses: actions/checkout@
|
|
200
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
199
201
|
with:
|
|
200
202
|
repository: js-recon/js-recon-labs
|
|
201
203
|
path: js-recon-labs
|
|
202
204
|
persist-credentials: false
|
|
203
205
|
|
|
204
|
-
- uses: actions/setup-node@
|
|
206
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
205
207
|
with:
|
|
206
208
|
node-version: "22"
|
|
207
209
|
|
|
208
|
-
- uses: docker/login-action@
|
|
210
|
+
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
|
|
209
211
|
with:
|
|
210
212
|
registry: ghcr.io
|
|
211
213
|
username: ${{ github.actor }}
|
|
@@ -260,20 +262,22 @@ jobs:
|
|
|
260
262
|
packages: read
|
|
261
263
|
steps:
|
|
262
264
|
- name: Checkout js-recon
|
|
263
|
-
uses: actions/checkout@
|
|
265
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
266
|
+
with:
|
|
267
|
+
persist-credentials: false
|
|
264
268
|
|
|
265
269
|
- name: Checkout js-recon-labs
|
|
266
|
-
uses: actions/checkout@
|
|
270
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
267
271
|
with:
|
|
268
272
|
repository: js-recon/js-recon-labs
|
|
269
273
|
path: js-recon-labs
|
|
270
274
|
persist-credentials: false
|
|
271
275
|
|
|
272
|
-
- uses: actions/setup-node@
|
|
276
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
273
277
|
with:
|
|
274
278
|
node-version: "22"
|
|
275
279
|
|
|
276
|
-
- uses: docker/login-action@
|
|
280
|
+
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
|
|
277
281
|
with:
|
|
278
282
|
registry: ghcr.io
|
|
279
283
|
username: ${{ github.actor }}
|
|
@@ -329,14 +333,14 @@ jobs:
|
|
|
329
333
|
formula: [js-recon, js-recon-alpha, js-recon-beta]
|
|
330
334
|
steps:
|
|
331
335
|
- name: Checkout js-recon-labs
|
|
332
|
-
uses: actions/checkout@
|
|
336
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
333
337
|
with:
|
|
334
338
|
repository: js-recon/js-recon-labs
|
|
335
339
|
path: js-recon-labs
|
|
336
340
|
persist-credentials: false
|
|
337
341
|
|
|
338
342
|
- name: Checkout js-recon-rules
|
|
339
|
-
uses: actions/checkout@
|
|
343
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
340
344
|
with:
|
|
341
345
|
repository: js-recon/js-recon-rules
|
|
342
346
|
path: js-recon-rules
|
|
@@ -14,7 +14,7 @@ jobs:
|
|
|
14
14
|
version_check:
|
|
15
15
|
runs-on: ubuntu-latest
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
18
18
|
- name: Check version mismatch
|
|
19
19
|
run: |
|
|
20
20
|
echo "[i] Checking if the version in the CHANGELOG.md, package.json, and Github release version matches"
|
|
@@ -42,8 +42,8 @@ jobs:
|
|
|
42
42
|
needs: version_check
|
|
43
43
|
runs-on: ubuntu-latest
|
|
44
44
|
steps:
|
|
45
|
-
- uses: actions/checkout@
|
|
46
|
-
- uses: actions/setup-node@
|
|
45
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
46
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
47
47
|
with:
|
|
48
48
|
node-version: 22
|
|
49
49
|
- run: npm ci
|
|
@@ -54,8 +54,8 @@ jobs:
|
|
|
54
54
|
needs: audit
|
|
55
55
|
runs-on: ubuntu-latest
|
|
56
56
|
steps:
|
|
57
|
-
- uses: actions/checkout@
|
|
58
|
-
- uses: actions/setup-node@
|
|
57
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
58
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
59
59
|
with:
|
|
60
60
|
node-version: 22
|
|
61
61
|
- run: npm ci
|
|
@@ -66,7 +66,7 @@ jobs:
|
|
|
66
66
|
needs: build
|
|
67
67
|
runs-on: ubuntu-latest
|
|
68
68
|
steps:
|
|
69
|
-
- uses: actions/checkout@
|
|
69
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
70
70
|
- name: Download and verify depx (SHA256-pinned)
|
|
71
71
|
run: |
|
|
72
72
|
set -euo pipefail
|
|
@@ -94,8 +94,8 @@ jobs:
|
|
|
94
94
|
id-token: write
|
|
95
95
|
contents: read
|
|
96
96
|
steps:
|
|
97
|
-
- uses: actions/checkout@
|
|
98
|
-
- uses: actions/setup-node@
|
|
97
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
98
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
99
99
|
with:
|
|
100
100
|
node-version: 22
|
|
101
101
|
registry-url: https://registry.npmjs.org/
|
|
@@ -120,7 +120,7 @@ jobs:
|
|
|
120
120
|
permissions:
|
|
121
121
|
contents: write
|
|
122
122
|
steps:
|
|
123
|
-
- uses: actions/checkout@
|
|
123
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
124
124
|
with:
|
|
125
125
|
fetch-depth: 0
|
|
126
126
|
- name: Configure SSH commit signing
|
|
@@ -15,11 +15,14 @@ jobs:
|
|
|
15
15
|
|
|
16
16
|
steps:
|
|
17
17
|
- name: Checkout js-recon
|
|
18
|
-
uses: actions/checkout@
|
|
18
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
with:
|
|
20
|
+
persist-credentials: false
|
|
19
21
|
|
|
20
22
|
- name: Checkout js-recon-labs
|
|
21
|
-
uses: actions/checkout@
|
|
23
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
22
24
|
with:
|
|
25
|
+
persist-credentials: false
|
|
23
26
|
repository: js-recon/js-recon-labs
|
|
24
27
|
path: js-recon-labs
|
|
25
28
|
|
|
@@ -35,7 +38,7 @@ jobs:
|
|
|
35
38
|
git clone --depth 1 --branch "$BRANCH" https://github.com/js-recon/js-recon-rules.git js-recon-rules
|
|
36
39
|
|
|
37
40
|
- name: Set up Node.js
|
|
38
|
-
uses: actions/setup-node@
|
|
41
|
+
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
39
42
|
with:
|
|
40
43
|
node-version: "22"
|
|
41
44
|
cache: "npm"
|
|
@@ -80,7 +83,7 @@ jobs:
|
|
|
80
83
|
|
|
81
84
|
- name: Upload analyze.json on failure
|
|
82
85
|
if: failure()
|
|
83
|
-
uses: actions/upload-artifact@
|
|
86
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
84
87
|
with:
|
|
85
88
|
name: analyze-json
|
|
86
89
|
path: output/**/analyze.json
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## 2.0.1-beta.1 - 2026-08-17
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- New `nuxt-dev` tech: detects a Nuxt.js dev server (`nuxi dev` / `npm run dev`) as a distinct tech from a production `nuxt` build, mirroring `next-dev`/`vue-dev`/`svelte-dev`/`react-dev`/`angular-dev` (#194). Nuxt 3/4 (Vite) and Nuxt 2 (webpack) dev-server markers were **both** confirmed live this round — unlike several sibling `*-dev` webpack branches. `checkNuxtDevServer.ts` looks for Nuxt's own `/_nuxt/`-prefixed Vite client path (`/_nuxt/@vite/client`, distinct from vanilla Vite's root `/@vite/client`) plus a weak `__NUXT_DEVTOOLS_TIME_METRIC__` inline-script signal for Nuxt 3/4, and an unhashed `_nuxt/app.js` entry filename plus a `/__webpack_hmr` intercepted-request pathname for Nuxt 2. The gate is checked only after `checkNuxtJS` matches, at both the HTML-level check and the intercepted-URL fallback. No dedicated crawler was needed — the existing `nuxt_js/*` pipeline already handles dev mode once two shared (not dev-specific) bugs were fixed: `nuxt_stringAnalysisJSFiles.ts`'s literal-path scanner previously matched only a bare `.js` suffix, missing every cache-busted (`?v=<hash>`) Vite import and every raw `.mjs`/`.ts`/`.vue` dev-mode source reference; and a malformed/oversized literal (e.g. an entire module's source embedded in a webpack `eval`-devtool string) could throw inside the per-file resolver and permanently block that file from ever being marked analyzed, spinning the discovery loop forever. A third, general bug (affecting every `*-dev` webpack branch, not just Nuxt's) was also fixed: `techDetect/index.ts` no longer reads the full response body of an intercepted `text/event-stream` connection (e.g. a webpack-hot-middleware HMR socket), which previously hung tech detection indefinitely against any webpack dev server with an open HMR connection. `run`'s tech allow-list and pipeline condition were extended accordingly (Nuxt's map/analyze calls already hardcode `"vue"` regardless of dev/prod, so no new remap arm was needed). Benchmarked at effectively complete recovery for both Nuxt generations against an independent `katana` crawl (Nuxt 3: 176/177 URLs, the one miss being a Vite-internal-only file never fetched as app content; Nuxt 2: 0 missed, full overlap) and cross-checked with a `jsr-network-bench` dual-capture pass showing zero real discovery gaps. (`lazyload`, `run`)
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- `run`'s generated OpenAPI spec and Postman collection now use the actual target URL instead of a placeholder: `openapiGenerator.ts`'s `servers[].url` and `postmanGenerator.ts`'s `baseUrl` variable read a new `targetUrl` global (`src/utility/globals.ts`), set from the `-u` value at the start of `processUrl`, falling back to the previous `{{baseUrl}}`/`https://example.com` placeholder if unset. `setTargetUrl` strips `username`/`password`/`search`/`hash` before storing, so a `-u` value carrying basic-auth credentials or a signed query token doesn't leak into the generated artifacts. (`run`, `openapi`, `postman`)
|
|
12
|
+
- Nuxt 2 dev-server detection (`checkNuxtDevServer.ts`) no longer misclassifies a production build as `nuxt-dev`: the unhashed-entry marker now requires the full `/_nuxt/app.js` suffix (was matching any `app.js` basename, e.g. `/assets/app.js`), and the webpack-HMR marker requires a complete `__webpack_hmr` path segment instead of a bare substring match.
|
|
13
|
+
- `techDetect/index.ts`'s event-stream content-type check is now case-insensitive, so a server returning `Text/Event-Stream; charset=utf-8` (mixed case, with parameters) still gets skipped instead of hanging tech detection on that persistent HMR connection.
|
|
14
|
+
- `refactor -t react-webpack`'s webpack-async-chunk-loading rewrite (`requireParam.e(N).then(requireParam.bind(requireParam, N))` → dynamic import) now emits a real `ImportExpression` node (`t.importExpression`) instead of a `CallExpression` with an `Import`-type callee — the latter is Babel 7's legacy shape and is no longer a valid expression under the `@babel/types` v8 migrated in this same release, which silently broke `renameRouteComponents`' route-component renaming for any React-Router lazy route using this webpack pattern.
|
|
15
|
+
- AI SDK clients (`src/utility/ai.ts`) are now constructed lazily on first use instead of at module load. The `openai` dependency's v7 line changed its `OpenAI` client constructor to throw immediately when no `apiKey` is configured, which crashed **every** js-recon invocation on import — not just runs that actually use an AI feature (`mcp`'s AI chat, `analyze`'s AI-assisted rule helpers) — for any user who hadn't set an AI API key. The OpenAI, Ollama, and Anthropic clients are now held behind `??=`-memoized getters and only instantiated the first time `ai()` resolves a provider, so an unconfigured AI provider is inert until actually selected. (`ai`)
|
|
16
|
+
- Migrated `@babel/types`, `@babel/parser`, and `@babel/traverse` from v7 to v8 (`^8.0.4`), dropping the now-stale `@types/babel__traverse` pin that was shipping a duplicate nested v7 type copy. Beyond the mechanical fallout of v8 dropping default exports (namespace imports) and no longer CJS-interop-wrapping `traverse`/`generator` (removing the `(_x.default ?? _x)` unwrap pattern) across roughly 120 call sites, the upgrade carried one real functional risk that was caught and fixed in the same change: v8's parser now emits a dynamic `import(...)` call as an `ImportExpression` node directly, rather than the v7 shape (a `CallExpression` with an `Import`-type callee). Four dynamic-import detection call sites still checked for the old shape — `angular_recursiveChunkImports.ts`, `vue_jsImports.ts`, `react-vite`'s and `refactor/react/transform.ts`'s import-rewriting — and would have silently stopped matching any dynamic import in every affected pipeline had they not been updated to also recognize `ImportExpression`. Verified with a clean `tsc` build, the full unit suite, an end-to-end `run` against local targets, and a `refactor -t react-webpack` pass against a real code-split React bundle. (`lazyload`, `map`, `analyze`, `refactor`, `endpoints`, `strings`)
|
|
17
|
+
|
|
18
|
+
### Security
|
|
19
|
+
|
|
20
|
+
- CI workflow checkouts that don't perform an authenticated git operation (`codeql.yml`, `plumber.yml`, `pr_checker.yml`, the smoke-test workflows, most jobs in `build-and-prettify.yaml`/`promote-js-recon.yml`) now set `persist-credentials: false`, so the ambient `GITHUB_TOKEN` isn't left in `.git/config` for later steps or third-party actions in that job to read.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- `@babel/generator` (imported directly by `map`'s `esquery` interactive command) is now declared as a direct `dependencies` entry instead of only being present transitively via `@babel/traverse`/`@babel/core`.
|
|
25
|
+
|
|
3
26
|
## 2.0.1-alpha.3 - 2026-08-14
|
|
4
27
|
|
|
5
28
|
### Added
|
package/Dockerfile
CHANGED
package/Dockerfile.release
CHANGED
|
@@ -7,11 +7,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
7
7
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
|
-
import parser from "@babel/parser";
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
const _traverseDefault = _traverse.default;
|
|
14
|
-
const generator = _generator.default;
|
|
10
|
+
import * as parser from "@babel/parser";
|
|
11
|
+
import _traverseDefault from "@babel/traverse";
|
|
12
|
+
import generator from "@babel/generator";
|
|
15
13
|
import esquery from "esquery";
|
|
16
14
|
import { highlight } from "cli-highlight";
|
|
17
15
|
import { resolveFunctionIdentifier } from "../helpers/engineHelpers/resolveFunctionIdentifier.js";
|