🎉 init: 小龙的工作空间
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
# 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
|
||||
```
|
||||
Reference in New Issue
Block a user