@shriyanss/js-recon 1.4.1-alpha.6 → 1.4.1-alpha.7

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.
@@ -55,13 +55,20 @@ jobs:
55
55
  prettier:
56
56
  runs-on: ubuntu-latest
57
57
  needs: audit
58
+ environment: commit-signing
58
59
  steps:
59
60
  - name: Checkout
60
61
  uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
61
62
  with:
62
63
  # Make sure the action checks out the repository to the pull request branch
63
64
  ref: ${{ github.ref_name }}
64
- ssh-key: ${{ secrets.DEPLOY_KEY }}
65
+
66
+ - name: Configure SSH commit signing
67
+ uses: shriyanss/verified-commit-action@v1
68
+ with:
69
+ ssh-private-key: ${{ secrets.JS_RECON_SIGNING_KEY }}
70
+ commit-name: "js-recon-bot"
71
+ commit-email: ${{ secrets.JS_RECON_SIGNING_EMAIL }}
65
72
 
66
73
  - name: Set up Node.js
67
74
  uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
@@ -77,14 +84,12 @@ jobs:
77
84
 
78
85
  - name: Run Prettier
79
86
  run: prettier --write . --config .prettierrc
80
-
87
+
81
88
  - name: Remove node_modules
82
89
  run: rm -rf node_modules
83
90
 
84
91
  - name: Commit and push changes
85
92
  run: |
86
- git config user.name "github-actions[bot]"
87
- git config user.email "github-actions[bot]@users.noreply.github.com"
88
93
  git add .
89
94
  git commit -m "chore: prettify code" || echo "No changes to commit"
90
95
  git push
@@ -31,7 +31,6 @@ jobs:
31
31
  uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
32
32
  with:
33
33
  repository: shriyanss/homebrew-tap
34
- token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
35
34
  path: homebrew-tap
36
35
 
37
36
  - name: Update formula fields
@@ -57,6 +56,7 @@ jobs:
57
56
 
58
57
  publish-docker:
59
58
  runs-on: ubuntu-latest
59
+ environment: docker-publish
60
60
  steps:
61
61
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
62
62
  - name: Build and push to dockerhub
@@ -89,15 +89,19 @@ jobs:
89
89
  needs:
90
90
  - publish-npm
91
91
  runs-on: ubuntu-latest
92
+ environment: commit-signing
92
93
  steps:
93
94
  - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
94
95
  with:
95
- ssh-key: ${{ secrets.DEPLOY_KEY }}
96
96
  fetch-depth: 0
97
+ - name: Configure SSH commit signing
98
+ uses: shriyanss/verified-commit-action@v1
99
+ with:
100
+ ssh-private-key: ${{ secrets.JS_RECON_SIGNING_KEY }}
101
+ commit-name: "js-recon-bot"
102
+ commit-email: ${{ secrets.JS_RECON_SIGNING_EMAIL }}
97
103
  - name: Merge main and dev
98
104
  run: |
99
- git config --global user.name 'github-actions[bot]'
100
- git config --global user.email 'github-actions[bot]@users.noreply.github.com'
101
105
  git fetch origin main:main
102
106
  git fetch origin dev:dev
103
107
  git checkout dev
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Change Log
2
2
 
3
+ ## 1.4.1-alpha.7 - (unreleased)
4
+
5
+ ### Changed
6
+
7
+ - CI: bot commits (`chore: prettify code`, `chore: merge changes after release vX.Y.Z`) are now cryptographically signed via SSH (using [`shriyanss/verified-commit-action`](https://github.com/shriyanss/verified-commit-action)) and show as "Verified" on GitHub, under a dedicated `js-recon-bot` identity. The signing key is scoped to a `commit-signing` GitHub Environment so it's only readable by the jobs that need it, not the whole repo. `promote-js-recon.yml`'s Docker/GHCR publish job now reads `DOCKER_SECRET` from a similarly scoped `docker-publish` environment, and the Homebrew tap job no longer references a token secret. (`ci`)
8
+
3
9
  ## 1.4.1-alpha.6 - 2026-07-13
4
10
 
5
11
  ### Changed
package/CLAUDE.md CHANGED
@@ -350,6 +350,16 @@ Releasing a new version touches three repos. Work on `dev` (js-recon, js-recon-r
350
350
 
351
351
  **Ordering is critical**: release js-recon first (including the GitHub release so CI publishes it to npm), then snapshot and PR js-recon-docs. This ensures the docs `version_check` CI step passes instead of failing due to a missing npm package.
352
352
 
353
+ ### Overview: automated stage → human approve → human-triggered promote
354
+
355
+ npm's OIDC trusted publishing for this package is scoped to **`npm stage publish`**, not direct `npm publish`. That means every js-recon release has three distinct phases, only the first of which Claude can execute unattended:
356
+
357
+ 1. **Automated (Claude does this end-to-end):** bump version, update CHANGELOG, open and merge the `dev`→`main` PR (after CI is green and the user gives merge approval — never merge without it), create the GitHub release. That release triggers `publish-js-recon.yml`, which runs `version_check` → `audit` → `build` → `publish-npm` (stages to npm via OIDC, no token) → `merge_main_and_dev` — all fully automatic, no human input needed.
358
+ 2. **Human-only (cannot be scripted or delegated):** npm requires interactive 2FA to promote a staged package to actually live on the registry. Claude reports the stage id and waits; the user runs `npm stage approve <stage-id>` (or clicks "Approve" on npmjs.com) themselves, on their own machine or browser.
359
+ 3. **Human-triggered, then Claude drives it:** once the user confirms the package is live (e.g. "I've published on npm" / "go ahead"), Claude runs `gh workflow run promote-js-recon.yml -f version=<version>` and watches it to completion. This workflow (Homebrew tap, Docker, GHCR) installs from the published npm artifact rather than git source, so it can only run correctly after step 2 — that's why it's a separate manually-triggered workflow instead of chained onto `publish-js-recon.yml`.
360
+
361
+ The detailed step-by-step is below; the numbering restarts at 10 for the docs phase since it's a separate concern from the npm/GitHub release phase.
362
+
353
363
  ### When a user asks to prepare a release
354
364
 
355
365
  Before writing any files, gather the current state:
@@ -1,6 +1,6 @@
1
1
  const githubURL = "https://github.com/shriyanss/js-recon";
2
2
  const modulesDocs = "https://js-recon.io/docs/category/modules";
3
- const version = "1.4.1-alpha.6";
3
+ const version = "1.4.1-alpha.7";
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 = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shriyanss/js-recon",
3
- "version": "1.4.1-alpha.6",
3
+ "version": "1.4.1-alpha.7",
4
4
  "description": "JS Recon Tool",
5
5
  "main": "build/index.js",
6
6
  "type": "module",