most-box 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +156 -73
- package/cli.js +2 -2
- package/package.json +9 -5
- package/public/app.css +1519 -0
- package/public/app.jsx +607 -399
- package/public/bundle.css +1 -0
- package/public/bundle.js +10 -14
- package/public/error-boundary.jsx +50 -0
- package/public/index.html +2 -1
- package/public/index.jsx +16 -1
- package/server.js +280 -197
- package/src/config.js +24 -7
- package/src/core/cid.js +23 -18
- package/src/index.js +400 -272
- package/src/utils/security.js +27 -24
- package/public/bundle.js.map +0 -7
- package/public/icons/apple-touch-icon.png +0 -0
- package/public/icons/mask-icon.svg +0 -3
- package/public/icons/most.png +0 -0
- package/public/icons/pwa-192x192.png +0 -0
- package/public/icons/pwa-512x512.png +0 -0
package/README.md
CHANGED
|
@@ -1,73 +1,156 @@
|
|
|
1
|
-
# MostBox
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
##
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
1
|
+
# MostBox 文件管理
|
|
2
|
+
|
|
3
|
+
[](https://npmjs.com/package/most-box)
|
|
4
|
+
[](https://nodejs.org)
|
|
5
|
+
[](LICENSE)
|
|
6
|
+
|
|
7
|
+
> P2P 文件分享应用。基于 Hyperswarm/Hyperdrive 的去中心化文件分发。
|
|
8
|
+
|
|
9
|
+
## 为什么用 MostBox?
|
|
10
|
+
|
|
11
|
+
| 特性 | MostBox | 微信/QQ | 网盘 |
|
|
12
|
+
| ------------------- | ------- | ------- | ---- |
|
|
13
|
+
| 🔒 无需注册 | ✅ | ❌ | ❌ |
|
|
14
|
+
| 🚀 P2P直连,不限速 | ✅ | ❌ | 限流 |
|
|
15
|
+
| 💾 去中心化存储 | ✅ | ❌ | ❌ |
|
|
16
|
+
| 🌐 开源免费,自托管 | ✅ | ❌ | ❌ |
|
|
17
|
+
| 📦 无限文件大小 | ✅ | ❌ | 限流 |
|
|
18
|
+
|
|
19
|
+
## 演示
|
|
20
|
+
|
|
21
|
+
在线体验:[Most.Box](https://Most.Box)
|
|
22
|
+
|
|
23
|
+
## 🚀 立即使用
|
|
24
|
+
|
|
25
|
+
打开终端,运行:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npx most-box
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
浏览器自动访问 **http://127.0.0.1:1976**
|
|
32
|
+
|
|
33
|
+
## 需求
|
|
34
|
+
|
|
35
|
+
- Node.js >= 18 ([下载地址](https://nodejs.org))
|
|
36
|
+
|
|
37
|
+
## 开发
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
git clone <your-repo-url>
|
|
41
|
+
cd most
|
|
42
|
+
npm i
|
|
43
|
+
npm start
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## 测试
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npm test # 运行全部测试
|
|
50
|
+
npm run test:unit # 只运行单元测试
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 访问场景
|
|
54
|
+
|
|
55
|
+
| 场景 | 命令 | 访问地址 |
|
|
56
|
+
| ---- | ------------------------------------------ | ------------------------- |
|
|
57
|
+
| 本地 | `npx most-box` | `http://127.0.0.1:1976` |
|
|
58
|
+
| 内网 | `set MOSTBOX_HOST=0.0.0.0 && npx most-box` | `http://<IP>:1976` |
|
|
59
|
+
| 外网 | Caddy 反向代理 | `https://your-domain.com` |
|
|
60
|
+
|
|
61
|
+
### 内网访问
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
set MOSTBOX_HOST=0.0.0.0
|
|
65
|
+
npx most-box
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### 外网访问(Caddy)
|
|
69
|
+
|
|
70
|
+
```caddy
|
|
71
|
+
mostbox.example.com {
|
|
72
|
+
reverse_proxy localhost:1976
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## 核心功能
|
|
77
|
+
|
|
78
|
+
1. **确定性 P2P 文件发布**
|
|
79
|
+
- 采用标准 IPFS UnixFS Chunking 算法计算 CID v1
|
|
80
|
+
- 相同文件生成一致的 CID 链接
|
|
81
|
+
|
|
82
|
+
2. **大文件流式传输**
|
|
83
|
+
- 支持 GB 级别超大文件的发布与下载
|
|
84
|
+
|
|
85
|
+
3. **完整性校验**
|
|
86
|
+
- 下载完成后自动验证 CID,防止数据篡改
|
|
87
|
+
|
|
88
|
+
4. **自定义 most:// 链接**
|
|
89
|
+
- 分享文件生成 `most://<cid>` 格式链接
|
|
90
|
+
- 接收方通过链接直接下载,无需其他配置
|
|
91
|
+
|
|
92
|
+
## 常见问题
|
|
93
|
+
|
|
94
|
+
### 文件存储在哪里?
|
|
95
|
+
|
|
96
|
+
文件以 **P2P 方式** 存储在分享者和接收者的设备上。当文件被分享时,内容会被分片存储在 P2P 网络中。**没有中心化服务器**,真正实现去中心化。
|
|
97
|
+
|
|
98
|
+
### 如何分享文件给其他人?
|
|
99
|
+
|
|
100
|
+
1. 打开 MostBox Web 界面
|
|
101
|
+
2. 上传文件或文件夹
|
|
102
|
+
3. 点击「复制链接」获取 `most://<cid>` 链接
|
|
103
|
+
4. 将链接发送给接收者
|
|
104
|
+
|
|
105
|
+
### most:// 链接是什么?
|
|
106
|
+
|
|
107
|
+
`most://` 是 MostBox 自定义的协议链接,格式为 `most://<cid>`。接收方安装 MostBox 后,点击链接即可自动下载文件。
|
|
108
|
+
|
|
109
|
+
### 支持大文件吗?
|
|
110
|
+
|
|
111
|
+
支持。目前已测试通过 **GB 级别**的大文件传输,采用流式处理,内存占用低。
|
|
112
|
+
|
|
113
|
+
### 如何在其他设备上下载文件?
|
|
114
|
+
|
|
115
|
+
确保设备已安装 Node.js >= 18,然后运行:
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
npx most-box
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
浏览器访问 `http://127.0.0.1:1976`,输入链接即可下载。
|
|
122
|
+
|
|
123
|
+
## 路线图
|
|
124
|
+
|
|
125
|
+
### v1.0(当前版本)
|
|
126
|
+
|
|
127
|
+
- ✅ P2P 文件上传与下载
|
|
128
|
+
- ✅ 确定性 CID 生成
|
|
129
|
+
- ✅ 大文件流式传输
|
|
130
|
+
- ✅ most:// 链接分享
|
|
131
|
+
- ✅ Web UI 界面
|
|
132
|
+
|
|
133
|
+
### 长期规划
|
|
134
|
+
|
|
135
|
+
- [ ] 浏览器扩展
|
|
136
|
+
- [ ] 移动端支持(iOS/Android)
|
|
137
|
+
- [ ] 桌面客户端
|
|
138
|
+
|
|
139
|
+
## 技术栈
|
|
140
|
+
|
|
141
|
+
- **Hyperswarm** — P2P 网络发现与连接
|
|
142
|
+
- **Hyperdrive** — 分布式文件存储
|
|
143
|
+
- **Corestore** — Hypercore 存储管理
|
|
144
|
+
- **IPFS UnixFS Importer** — CID 计算
|
|
145
|
+
- **Node.js HTTP** — 零依赖的 HTTP + WebSocket 服务
|
|
146
|
+
- **React** — Web UI
|
|
147
|
+
|
|
148
|
+
## 社区
|
|
149
|
+
|
|
150
|
+
- **微信**:微信号 `most-box`(自动通过好友申请)
|
|
151
|
+
- **GitHub Discussions**:[提出需求 & 技术讨论](../../discussions)
|
|
152
|
+
- **问题反馈**:[Github issues](../../issues)
|
|
153
|
+
|
|
154
|
+
## 许可证
|
|
155
|
+
|
|
156
|
+
MIT
|
package/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import './server.js';
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import './server.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "most-box",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"description": "MostBox - P2P file sharing application",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "server.js",
|
|
@@ -16,8 +16,9 @@
|
|
|
16
16
|
],
|
|
17
17
|
"scripts": {
|
|
18
18
|
"start": "npm run build && node server.js",
|
|
19
|
-
"
|
|
20
|
-
"
|
|
19
|
+
"build": "node build.mjs",
|
|
20
|
+
"test": "node --test tests/**/*.test.js",
|
|
21
|
+
"test:unit": "node --test tests/unit/*.test.js"
|
|
21
22
|
},
|
|
22
23
|
"keywords": [
|
|
23
24
|
"p2p",
|
|
@@ -28,6 +29,7 @@
|
|
|
28
29
|
"license": "MIT",
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"b4a": "^1.8.0",
|
|
32
|
+
"busboy": "^1.6.0",
|
|
31
33
|
"corestore": "^7.9.2",
|
|
32
34
|
"eventemitter3": "^5.0.4",
|
|
33
35
|
"hyperdrive": "^13.3.1",
|
|
@@ -36,9 +38,11 @@
|
|
|
36
38
|
"lucide-react": "^1.7.0",
|
|
37
39
|
"multiformats": "^13.4.2",
|
|
38
40
|
"react": "^19.2.4",
|
|
39
|
-
"react-dom": "^19.2.4"
|
|
41
|
+
"react-dom": "^19.2.4",
|
|
42
|
+
"ws": "^8.20.0"
|
|
40
43
|
},
|
|
41
44
|
"devDependencies": {
|
|
42
|
-
"esbuild": "^0.27.4"
|
|
45
|
+
"esbuild": "^0.27.4",
|
|
46
|
+
"supertest": "^7.0.0"
|
|
43
47
|
}
|
|
44
48
|
}
|