Conversation
/api/osint/github called api.github.com with no credentials, so every deployment shared GitHub's anonymous allowance of 60 requests per hour per IP. A handful of lookups exhausts it, and the route then reports the 403 as a generic "GitHub lookup failed" with no hint that waiting is the fix. Send an Authorization header when GITHUB_TOKEN is set, which takes the limit to 5000/hour. It stays optional: with no token the tool behaves exactly as before, which is how the public demo runs. The token needs no scopes at all, since profile and repo data are public. Document that in .env.example, in its own block beside the other keys the code actually reads rather than under the "not read by current code" list. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
@tsstod is attempting to deploy a commit to the Developing Osiris' projects Team on Vercel. A member of the Team first needs to authorize it. |
This was referenced Sep 11, 2026
Author
|
The red Vercel – osiris check here is Vercel waiting for a team member to authorize a deploy from a fork. No build has run, so here's a local one instead:
🤖 Generated with Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
The RECON GitHub Recon tool calls
api.github.comwith no credentials, so a deployment shares GitHub's anonymous allowance of 60 requests per hour per IP across every visitor. A handful of lookups exhausts it, and the route then reports the 403 as a generic"GitHub lookup failed"with no hint that waiting is the fix.This sends an
Authorizationheader whenGITHUB_TOKENis set, which raises the limit to 5,000 requests per hour. It stays optional: with no token the tool behaves exactly as before, which is how the public demo runs.Changes
src/app/api/osint/github/route.tsbuilds the request headers once and addsAuthorization: Bearer $GITHUB_TOKENwhen the variable is set. Both GitHub calls (profile and recent repos) use them..env.exampledocumentsGITHUB_TOKENin its own block beside the other keys the code actually reads. It notes that the token needs no scopes, since profile and repo data are public.Testing
Checked against the running dev server:
200with full profile and 5 recent reposuserparam400 Missing username parameter404 User not foundGITHUB_TOKEN502withdetail: "GitHub API HTTP 401"The 401 is what proves the header is attached: GitHub only rejects a request that carries credentials. Before this change the same request returned 200.
Full
npx vitest runpasses on a local branch combining this PR with #334 and #338 on currentmaster(8781ae3): 49 test files passed, 614 tests passed. The 2 skipped files and 16 skipped tests are pre-existing skips of the network-gated tests. No unit test added for the header itself; the live check above covers it.Notes
.env.example. feat(ai): run the AI analyst through any Gemini-compatible gateway #334 also edits.env.example, but a different block, and the three merge cleanly together..env.examplestill says the code "only actually reads SCANNER_URL and SCANNER_KEY". That was already out of date forCLOUDFLARE_API_TOKEN,ETHERSCAN_API_KEYandHELIUS_API_KEY; I left it alone to keep this PR focused.403withx-ratelimit-remaining: 0) would be a small follow-up.🤖 Generated with Claude Code