serhalp/npm.tax
GitHub: serhalp/npm.tax
npm.tax 是一个交互式应用,通过统计模型可视化 npm 依赖数量、时间跨度与单包被攻破概率如何叠加成累积供应链风险。
Stars: 0 | Forks: 0
# npm.tax:npm 供应链风险探索器
这是一个交互式应用,用于探索 npm 的依赖数量、时间和单个包被攻破的概率是如何叠加成累积供应链风险的。
## 功能
- 通过 URL 参数控制直接依赖、间接依赖、时间范围和每日被攻破概率。
- 通过服务器路由进行真实的 npm 包查询,该路由调用 npmx 的 install-size 数据和 npm registry,并使用 Netlify Cache API/CDN 进行缓存。
- 内联 SVG 图表和可视化效果。
- 为分享的场景动态生成 Open Graph 图像。
- 浅色/深色/系统主题切换以及可分享的链接。
- 针对独立 Bernoulli 模型的通俗数学说明。
## 技术栈
- TanStack Start + TanStack Router + Vite 8
- React 19 + TypeScript 严格模式
- Tailwind CSS v4
- 使用 Netlify Cache API 缓存包查询响应
- 使用 Netlify Vite 插件进行部署并在开发环境中实现完整的平台模拟
- 使用 Sonda 进行 bundle 可视化
- 使用 oxfmt 进行格式化 + 使用 oxlint 进行 lint
- 使用 `node:test` 进行测试 + 使用 Axe Core 进行 a11y 测试
- Node.js 26
- pnpm 11
- 使用 knip 保持项目整洁
## 本地开发
```
pnpm install
pnpm run dev
```
开发服务器将在 `http://localhost:3000` 启动。
## 检查
```
pnpm run test
pnpm run test:a11y
pnpm run build
pnpm run build:analyze
pnpm run knip
```
`pnpm run test` 会运行单元测试、类型检查、格式检查和 lint。
`pnpm run build:analyze` 会将客户端 JavaScript bundle 的 Sonda HTML 和 JSON 报告写入到 `.sonda/` 目录中。
CI 会运行相同的分析构建,并将报告作为 `sonda-bundle-analysis` artifact 上传。
## 模型
每个包每天被攻破的概率为 `p`。假设在 `d` 天内共有 `n` 个建模的包(包括项目本身):
```
P(breach) = 1 - (1 - p)^(n * d)
```
该模型有意保持简单,并假设各个包的各个天数(package-days)是独立的。真实环境中发生的安全事件可能在不同的包、维护者和构建系统之间存在相关性,因此应将其视为一种探索性的估计,而非精确的预测。
标签:MITM代理, React, Syscalls, TanStack, Vite, 供应链风险, 可视化工具, 自动化攻击