@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.
Files changed (161) hide show
  1. package/.github/workflows/build-and-prettify.yaml +33 -21
  2. package/.github/workflows/codeql.yml +5 -3
  3. package/.github/workflows/exploit-smoke-test.yaml +15 -12
  4. package/.github/workflows/framework-detection-smoke-test.yaml +7 -4
  5. package/.github/workflows/plumber.yml +4 -2
  6. package/.github/workflows/pr_checker.yml +3 -1
  7. package/.github/workflows/promote-js-recon.yml +19 -15
  8. package/.github/workflows/publish-js-recon.yml +9 -9
  9. package/.github/workflows/rules-smoke-test.yaml +7 -4
  10. package/CHANGELOG.md +23 -0
  11. package/Dockerfile +1 -1
  12. package/Dockerfile.release +1 -1
  13. package/build/analyze/engine/astEngine.js +3 -5
  14. package/build/analyze/engine/astEngine.js.map +1 -1
  15. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js +1 -3
  16. package/build/analyze/helpers/engineHelpers/findDirectAssignment.js.map +1 -1
  17. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js +1 -3
  18. package/build/analyze/helpers/engineHelpers/findMemberExpressionAssignment.js.map +1 -1
  19. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js +1 -3
  20. package/build/analyze/helpers/engineHelpers/resolveFunctionIdentifier.js.map +1 -1
  21. package/build/analyze/helpers/engineHelpers/taintFlow.js +1 -3
  22. package/build/analyze/helpers/engineHelpers/taintFlow.js.map +1 -1
  23. package/build/endpoints/next_js/client_jsFilesHref.js +2 -4
  24. package/build/endpoints/next_js/client_jsFilesHref.js.map +1 -1
  25. package/build/endpoints/next_js/client_jsonParse.js +2 -4
  26. package/build/endpoints/next_js/client_jsonParse.js.map +1 -1
  27. package/build/endpoints/next_js/client_mappedJsonFile.js +2 -4
  28. package/build/endpoints/next_js/client_mappedJsonFile.js.map +1 -1
  29. package/build/endpoints/next_js/client_subsequentRequests.js +2 -4
  30. package/build/endpoints/next_js/client_subsequentRequests.js.map +1 -1
  31. package/build/globalConfig.js +1 -1
  32. package/build/globalConfig.js.map +1 -1
  33. package/build/lazyLoad/angular/angular_recursiveChunkImports.js +4 -9
  34. package/build/lazyLoad/angular/angular_recursiveChunkImports.js.map +1 -1
  35. package/build/lazyLoad/index.js +60 -3
  36. package/build/lazyLoad/index.js.map +1 -1
  37. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js +2 -4
  38. package/build/lazyLoad/next_js/next_GetLazyResourcesBuildManifestJs.js.map +1 -1
  39. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js +2 -4
  40. package/build/lazyLoad/next_js/next_GetLazyResourcesWebpackJs.js.map +1 -1
  41. package/build/lazyLoad/next_js/next_parseLayoutJs.js +2 -4
  42. package/build/lazyLoad/next_js/next_parseLayoutJs.js.map +1 -1
  43. package/build/lazyLoad/next_js/next_promiseResolve.js +2 -4
  44. package/build/lazyLoad/next_js/next_promiseResolve.js.map +1 -1
  45. package/build/lazyLoad/nuxt_js/nuxt_astParse.js +3 -5
  46. package/build/lazyLoad/nuxt_js/nuxt_astParse.js.map +1 -1
  47. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js +31 -15
  48. package/build/lazyLoad/nuxt_js/nuxt_stringAnalysisJSFiles.js.map +1 -1
  49. package/build/lazyLoad/shared/webpackChunkParsers.js +2 -4
  50. package/build/lazyLoad/shared/webpackChunkParsers.js.map +1 -1
  51. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js +2 -4
  52. package/build/lazyLoad/svelte/svelte_stringAnalysisJSFiles.js.map +1 -1
  53. package/build/lazyLoad/techDetect/checkNuxtDevServer.js +52 -0
  54. package/build/lazyLoad/techDetect/checkNuxtDevServer.js.map +1 -0
  55. package/build/lazyLoad/techDetect/index.js +13 -2
  56. package/build/lazyLoad/techDetect/index.js.map +1 -1
  57. package/build/lazyLoad/vue/vue_RuntimeJs.js +1 -3
  58. package/build/lazyLoad/vue/vue_RuntimeJs.js.map +1 -1
  59. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js +2 -4
  60. package/build/lazyLoad/vue/vue_SingleJsFileOnHome.js.map +1 -1
  61. package/build/lazyLoad/vue/vue_getClientSidePaths.js +3 -5
  62. package/build/lazyLoad/vue/vue_getClientSidePaths.js.map +1 -1
  63. package/build/lazyLoad/vue/vue_jsImports.js +6 -11
  64. package/build/lazyLoad/vue/vue_jsImports.js.map +1 -1
  65. package/build/lazyLoad/vue/vue_stringJsFiles.js +1 -1
  66. package/build/lazyLoad/vue/vue_stringJsFiles.js.map +1 -1
  67. package/build/lazyLoad/vue/vue_viteMapDeps.js +3 -5
  68. package/build/lazyLoad/vue/vue_viteMapDeps.js.map +1 -1
  69. package/build/map/angular_js/getAngularConnections.js +1 -1
  70. package/build/map/angular_js/getAngularConnections.js.map +1 -1
  71. package/build/map/graphql/resolveGraphql.js +2 -4
  72. package/build/map/graphql/resolveGraphql.js.map +1 -1
  73. package/build/map/interactive-mode/esqueryGen.js +3 -6
  74. package/build/map/interactive-mode/esqueryGen.js.map +1 -1
  75. package/build/map/next_js/getExports.js +2 -4
  76. package/build/map/next_js/getExports.js.map +1 -1
  77. package/build/map/next_js/getFetchInstances.js +2 -4
  78. package/build/map/next_js/getFetchInstances.js.map +1 -1
  79. package/build/map/next_js/getTurbopackConnections.js +2 -4
  80. package/build/map/next_js/getTurbopackConnections.js.map +1 -1
  81. package/build/map/next_js/getWebpackConnections.js +2 -4
  82. package/build/map/next_js/getWebpackConnections.js.map +1 -1
  83. package/build/map/next_js/resolveAxios.js +2 -4
  84. package/build/map/next_js/resolveAxios.js.map +1 -1
  85. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js +1 -3
  86. package/build/map/next_js/resolveAxiosHelpers/directCallsWithoutAssignment.js.map +1 -1
  87. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js +1 -3
  88. package/build/map/next_js/resolveAxiosHelpers/findAxiosInstance.js.map +1 -1
  89. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js +2 -4
  90. package/build/map/next_js/resolveAxiosHelpers/findCrossChunkParams.js.map +1 -1
  91. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js +1 -3
  92. package/build/map/next_js/resolveAxiosHelpers/handleAxiosCreate.js.map +1 -1
  93. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js +0 -3
  94. package/build/map/next_js/resolveAxiosHelpers/handleZDotCreate.js.map +1 -1
  95. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js +2 -4
  96. package/build/map/next_js/resolveAxiosHelpers/interceptorHeaders.js.map +1 -1
  97. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js +1 -3
  98. package/build/map/next_js/resolveAxiosHelpers/processExportedEndpoints.js.map +1 -1
  99. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js +2 -4
  100. package/build/map/next_js/resolveAxiosHelpers/traceAxiosInstanceExports.js.map +1 -1
  101. package/build/map/next_js/resolveAxiosHelpers/traceBody.js +2 -4
  102. package/build/map/next_js/resolveAxiosHelpers/traceBody.js.map +1 -1
  103. package/build/map/next_js/resolveFetch.js +2 -4
  104. package/build/map/next_js/resolveFetch.js.map +1 -1
  105. package/build/map/next_js/resolveNewRequest.js +2 -4
  106. package/build/map/next_js/resolveNewRequest.js.map +1 -1
  107. package/build/map/next_js/resolveServerActions.js +2 -4
  108. package/build/map/next_js/resolveServerActions.js.map +1 -1
  109. package/build/map/next_js/utils.js +2 -4
  110. package/build/map/next_js/utils.js.map +1 -1
  111. package/build/map/react_js/getReactConnections.js +2 -4
  112. package/build/map/react_js/getReactConnections.js.map +1 -1
  113. package/build/map/vue_js/crossFileResolver.js +2 -4
  114. package/build/map/vue_js/crossFileResolver.js.map +1 -1
  115. package/build/map/vue_js/getViteConnections.js +2 -4
  116. package/build/map/vue_js/getViteConnections.js.map +1 -1
  117. package/build/map/vue_js/taint_utils.js +2 -4
  118. package/build/map/vue_js/taint_utils.js.map +1 -1
  119. package/build/map/vue_js/vue_resolveFetch.js +2 -4
  120. package/build/map/vue_js/vue_resolveFetch.js.map +1 -1
  121. package/build/map/vue_js/vue_resolveHttpClient.js +2 -4
  122. package/build/map/vue_js/vue_resolveHttpClient.js.map +1 -1
  123. package/build/map/vue_js/vue_resolveXhr.js +2 -4
  124. package/build/map/vue_js/vue_resolveXhr.js.map +1 -1
  125. package/build/refactor/next/index.js +3 -6
  126. package/build/refactor/next/index.js.map +1 -1
  127. package/build/refactor/next/transform.js +2 -6
  128. package/build/refactor/next/transform.js.map +1 -1
  129. package/build/refactor/next/validator.js +2 -4
  130. package/build/refactor/next/validator.js.map +1 -1
  131. package/build/refactor/react/index.js +3 -6
  132. package/build/refactor/react/index.js.map +1 -1
  133. package/build/refactor/react/library-classify.js +1 -3
  134. package/build/refactor/react/library-classify.js.map +1 -1
  135. package/build/refactor/react/transform.js +8 -15
  136. package/build/refactor/react/transform.js.map +1 -1
  137. package/build/refactor/react/validator.js +2 -4
  138. package/build/refactor/react/validator.js.map +1 -1
  139. package/build/refactor/react-vite/index.js +3 -8
  140. package/build/refactor/react-vite/index.js.map +1 -1
  141. package/build/refactor/react-vite/vendor-analyze.js +2 -5
  142. package/build/refactor/react-vite/vendor-analyze.js.map +1 -1
  143. package/build/refactor/vue/index.js +2 -4
  144. package/build/refactor/vue/index.js.map +1 -1
  145. package/build/refactor/vue/vendor-analyze-vue.js +4 -5
  146. package/build/refactor/vue/vendor-analyze-vue.js.map +1 -1
  147. package/build/refactor/vue/vite.js +3 -5
  148. package/build/refactor/vue/vite.js.map +1 -1
  149. package/build/run/index.js +3 -1
  150. package/build/run/index.js.map +1 -1
  151. package/build/strings/index.js +1 -1
  152. package/build/strings/index.js.map +1 -1
  153. package/build/utility/ai.js +16 -32
  154. package/build/utility/ai.js.map +1 -1
  155. package/build/utility/globals.js +27 -0
  156. package/build/utility/globals.js.map +1 -1
  157. package/build/utility/openapiGenerator.js +1 -1
  158. package/build/utility/openapiGenerator.js.map +1 -1
  159. package/build/utility/postmanGenerator.js +2 -1
  160. package/build/utility/postmanGenerator.js.map +1 -1
  161. 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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
49
- - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
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@5595ccaf912efad79be6eef63a5619ff05969be3 # v4.37.6
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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 install && npm run build
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 install && npm run build
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 install
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 install
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 install
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 install && npm run build
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 install && npm run build
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 install && npm run build
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
18
- - uses: getplumber/plumber@ef9864df81f444647d95889d98695434f6fa9732 # v0.4.12, 2026-07-20
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@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
206
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
205
207
  with:
206
208
  node-version: "22"
207
209
 
208
- - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
276
+ - uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
273
277
  with:
274
278
  node-version: "22"
275
279
 
276
- - uses: docker/login-action@c94ce9fb468520275223c153574b00df6fe4bcc9 # v3.7.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
46
- - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
58
- - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
98
- - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
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@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
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
@@ -1,4 +1,4 @@
1
- FROM ghcr.io/puppeteer/puppeteer:24.43.1
1
+ FROM ghcr.io/puppeteer/puppeteer:25.8.0
2
2
 
3
3
  WORKDIR /home/pptruser
4
4
  # Pin HOME so path resolution (Puppeteer's Chrome cache, ~/.js-recon rules cache, etc.)
@@ -1,4 +1,4 @@
1
- FROM ghcr.io/puppeteer/puppeteer:25.3.0
1
+ FROM ghcr.io/puppeteer/puppeteer:25.8.0
2
2
 
3
3
  WORKDIR /home/pptruser
4
4
  # Pin HOME so path resolution (Puppeteer's Chrome cache, ~/.js-recon rules cache, etc.)
@@ -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 _traverse from "@babel/traverse";
12
- import _generator from "@babel/generator";
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";