fabro/apps/fabro-web/package.json
Bryan Helmkamp 75f8ed845b
fix(install): harden web wizard against review findings
Tighten the browser-based install flow after correctness and adversarial
review, without changing the external wizard shape.

- Persist the actual bind in server.listen, not the canonical URL
- Reject concurrent /install/finish and rapid GitHub App retries
- Keep the prior GitHub Token strategy until App callback succeeds
- Recover from poisoned install locks instead of propagating panics
- Rollback both settings and vault on failed persistence
- Redirect GitHub callback errors back into the wizard UI
- Validate LLM keys via /models probe instead of a billed generate()
- Reject canonical URLs with trailing slash, path, query, or fragment
- Accept any valid install-token source, not just the first present one
- Redact the install token in structured logs
- Assert install-mode SPA marker injection at startup
- Warn on suspected concurrent operators via UA + X-Forwarded-For
- Add component-level test for the GitHub callback error banner

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 12:43:00 -04:00

35 lines
923 B
JSON

{
"name": "fabro-web",
"private": true,
"type": "module",
"scripts": {
"build": "bun run scripts/build.ts",
"dev": "bun run scripts/build.ts --watch",
"test": "bun test",
"typecheck": "tsc"
},
"dependencies": {
"@dnd-kit/core": "^6.3.1",
"@dnd-kit/sortable": "^10.0.0",
"@dnd-kit/utilities": "^3.2.2",
"@headlessui/react": "^2.2.9",
"@heroicons/react": "^2.2.0",
"@pierre/diffs": "^1.0.11",
"@qltysh/fabro-api-client": "workspace:*",
"@tailwindcss/typography": "^0.5.19",
"@viz-js/viz": "^3.24.0",
"marked": "^18.0.0",
"react": "^19.2.4",
"react-dom": "^19.2.4",
"react-router": "7.12.0"
},
"devDependencies": {
"@tailwindcss/cli": "^4.1.13",
"@types/node": "^22",
"@types/react": "^19.2.7",
"@types/react-dom": "^19.2.3",
"react-test-renderer": "19.2.0",
"tailwindcss": "^4.1.13",
"typescript": "^5.9.2"
}
}