# Network Tool - 异地组网工具 MVP > PC Tool Factory 测试需求:异地组网工具最小可运行版本 ## 项目结构 ``` network-tool/ ├── apps/ │ ├── client-electron/ # Electron + React 桌面客户端 │ ├── control-server/ # Fastify + SQLite 控制服务器 │ └── relay-node/ # TCP 转发节点 ├── packages/ │ ├── shared-types/ # 共享 TypeScript 类型定义 │ ├── shared-crypto/ # 加密工具 (JWT, bcrypt, SHA256) │ └── shared-protocol/ # 网络协议 (帧编解码) ├── test-e2e.js # 端到端测试脚本 └── README.md ``` ## 快速开始 ### 1. 安装依赖 ```bash cd network-tool npm install ``` ### 2. 构建共享包 ```bash npm run build:shared ``` ### 3. 启动 Control Server (终端 1) ```bash npm run dev:server # → http://localhost:3001 # → ws://localhost:3001/ws ``` ### 4. 启动 Relay Node (终端 2) ```bash npm run dev:relay # → TCP: localhost:4101 # → 自动向服务器注册并发送心跳 ``` ### 5. 运行 E2E 测试 (终端 3) ```bash node test-e2e.js ``` ### 6. 启动 Client Desktop (终端 3) ```bash cd apps/client-electron npm run dev:main # 编译主进程 + 启动 Electron npm run dev:renderer # 启动 Vite React dev server ``` ## 验证结果 | 验收标准 | 状态 | |----------|------| | npm install 成功 | ✅ | | 服务器启动成功 | ✅ | | 节点启动成功 | ✅ | | 客户端启动成功 | ⚠️ 源码完成,需 Electron 二进制 | | 用户注册登录成功 | ✅ | | 设备注册成功 | ✅ | | 节点注册成功 | ✅ | | Token 验证成功 | ✅ | | 客户端消息转发成功 | ✅ (E2E Test A↔B PASS) | | TypeScript 编译 | ✅ 5/5 包编译通过 | ## API 端点 ### Auth - `POST /api/auth/register` — 用户注册 - `POST /api/auth/login` — 用户登录 - `GET /api/auth/me` — 当前用户信息 ### Devices - `POST /api/devices/register` — 注册设备 - `GET /api/devices` — 设备列表 - `PATCH /api/devices/:id/status` — 更新状态 - `DELETE /api/devices/:id` — 删除设备 ### Nodes - `POST /api/nodes/register` — 节点注册 - `POST /api/nodes/heartbeat` — 心跳上报 - `GET /api/nodes` — 节点列表 - `GET /api/nodes/available` — 可用节点 ### Connections - `POST /api/connections/request` — 请求连接 Token - `POST /api/connections/verify-token` — 节点验证 Token - `POST /api/connections/disconnect` — 断开连接 - `GET /api/connections/logs` — 连接日志 ## 环境变量 | 变量 | 默认值 | 说明 | |------|--------|------| | `PORT` | `3001` | 服务器端口 | | `HOST` | `0.0.0.0` | 绑定地址 | | `DB_PATH` | `./data/network.db` | 数据库路径 | | `JWT_SECRET` | 开发密钥 | JWT 签名密钥 | | `SERVER_URL` | `http://localhost:3001` | Relay Node 服务地址 | | `NODE_NAME` | `relay-node-1` | 节点名称 | | `TCP_PORT` | `4101` | 节点 TCP 端口 | ## 安全 - 密码 bcrypt 哈希存储 - JWT Token 鉴权(过期 24h) - 连接 Token 5 分钟过期 - 节点必须向服务器验证客户端 Token - 客户端不能伪造设备身份 - 日志不存储明文密码 ## 技术栈 - **Server**: Fastify, sql.js (SQLite), JWT, WebSocket - **Relay**: Node.js TCP, HTTP client, 帧协议 - **Client**: Electron, React, TypeScript, Vite - **Shared**: TypeScript types, bcrypt, JWT, SHA256 ## Build ``` TypeScript 文件: 22 总代码行数: ~2031 编译状态: 5/5 PASS ```