Skip to content

Commit 6566bd7

Browse files
committed
first commit
0 parents  commit 6566bd7

File tree

7 files changed

+837
-0
lines changed

7 files changed

+837
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.env
2+
node_modules

CONFIG.md

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
# 配置说明
2+
3+
## 环境变量
4+
5+
### token
6+
- **类型**: 字符串
7+
- **必需**: 是
8+
- **说明**: API访问令牌,用于认证API请求
9+
- **示例**: `your_api_token_here`
10+
11+
### apihost
12+
- **类型**: 字符串
13+
- **必需**: 是
14+
- **说明**: API服务器的基础URL
15+
- **示例**: `https://your-api-host.com`
16+
17+
## 配置示例
18+
19+
创建 `.env` 文件:
20+
```env
21+
# API配置
22+
token=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
23+
apihost=https://api.zerocat.com
24+
```
25+
26+
## API接口说明
27+
28+
### 获取扩展列表
29+
- **URL**: `https://api.abc.520gxx.com/work/ext`
30+
- **方法**: GET
31+
- **返回**: 扩展列表数组
32+
33+
### 检查项目是否存在
34+
- **URL**: `{apihost}/namespace/{username}/{extId}`
35+
- **方法**: GET
36+
- **认证**: Bearer Token
37+
- **返回**: 项目信息或404
38+
39+
### 创建项目
40+
- **URL**: `{apihost}/project`
41+
- **方法**: POST
42+
- **认证**: Bearer Token
43+
- **参数**:
44+
- `name`: 项目名称
45+
- `title`: 项目标题
46+
- `description`: 项目描述
47+
- `type`: 项目类型(text)
48+
- `state`: 项目状态(public/private)
49+
50+
### 初始化项目
51+
- **URL**: `{apihost}/project/initlize?projectid={projectId}&type=text`
52+
- **方法**: POST
53+
- **认证**: Bearer Token
54+
- **说明**: 初始化项目,创建默认分支和初始提交
55+
56+
### 保存文件
57+
- **URL**: `{apihost}/project/savefile?json=true`
58+
- **方法**: POST
59+
- **认证**: Bearer Token
60+
- **参数**:
61+
- `source`: 文件内容
62+
- **返回**: `{ sha256, accessFileToken }`
63+
64+
### 获取项目提交
65+
- **URL**: `{apihost}/project/{projectId}/commits`
66+
- **方法**: GET
67+
- **认证**: Bearer Token
68+
- **返回**: 提交列表
69+
70+
### 创建提交
71+
- **URL**: `{apihost}/project/commit/id/{projectId}`
72+
- **方法**: PUT
73+
- **认证**: Bearer Token
74+
- **参数**:
75+
- `projectid`: 项目ID
76+
- `accessFileToken`: 文件访问令牌
77+
- `message`: 提交消息
78+
- `commit_description`: 提交描述
79+
- `branch`: 分支名称
80+
81+
## 目标扩展配置
82+
83+
程序会同步以下预定义的扩展列表:
84+
85+
```javascript
86+
const targetExtensions = [
87+
'bitwiseoper', 'strmani', 'numeration', 'mathandgeom',
88+
'unicode', 'Calculation', 'DatabaseExtension', 'extensionmake',
89+
'extensionmaker', 'jsonandarrayexample', 'globalCoordinate',
90+
'Expression', 'openai', 'qxsckdataanalysis', 'qxsckvarandlist',
91+
'qxsckhighprecision', 'darkmode', 'cst1229zip', 'WitCatInput',
92+
'sbxconsole', 'python', 'notes', 'htmlonscratch', 'WitCatBBcode',
93+
'WitCatIndexedDB', 'Project', 'rxfs', 'lazyAudio', 'sLocalStorage',
94+
'MOTION', 'rsc', 'HtmlViewer', 'spacevar0832', 'stdenvargs',
95+
'veclist', 'crypto', 'matches', 'hanzi', 'r3d', 'requireproject',
96+
'BetterMsg', 'astar', 'OPERATION', 'imageProcessor', 'ginac'
97+
];
98+
```
99+
100+
## 用户名配置
101+
102+
程序使用固定的用户名 `40code`,项目将创建为 `40code/{extId}` 的形式。
103+
104+
## 错误处理
105+
106+
程序包含以下错误处理机制:
107+
108+
1. **网络错误**: 自动重试和跳过
109+
2. **认证错误**: 检查token有效性
110+
3. **API错误**: 记录详细错误信息
111+
4. **文件错误**: 跳过无法获取的扩展
112+
113+
## 性能优化
114+
115+
- 请求间隔: 1秒延迟避免过快请求
116+
- 错误恢复: 单个扩展失败不影响其他扩展
117+
- 智能比较: 避免重复提交相同代码

README.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# Extension Mirror Tool
2+
3+
这是一个用于同步扩展项目的命令行工具,可以从 abc.520gxx.com 获取扩展列表并同步到目标平台。
4+
5+
## 功能特性
6+
7+
-https://api.abc.520gxx.com/work/ext 获取扩展列表
8+
- 支持通过扩展ID列表指定要同步的扩展
9+
- 支持通过作者列表自动获取该作者的所有扩展
10+
- 检查目标扩展是否已存在
11+
- 自动创建新项目(如果不存在)
12+
- 同步扩展代码并创建提交
13+
- 智能比较代码内容,避免重复提交
14+
- 支持批量处理多个扩展
15+
16+
## 安装
17+
18+
1. 进入 ExtensionMirror 目录:
19+
```bash
20+
cd ExtensionMirror
21+
```
22+
23+
2. 安装依赖:
24+
```bash
25+
npm install
26+
```
27+
28+
## 配置
29+
30+
1. 复制环境变量示例文件:
31+
```bash
32+
cp env.example .env
33+
```
34+
35+
2. 编辑 `.env` 文件,设置你的配置:
36+
```env
37+
token=your_api_token_here
38+
apihost=https://your-api-host.com
39+
```
40+
41+
## 使用方法
42+
43+
### 基本使用
44+
运行同步程序:
45+
```bash
46+
npm start
47+
```
48+
49+
或者直接运行:
50+
```bash
51+
node mirror.js
52+
```
53+
54+
### 强制模式
55+
跳过差异比较,强制更新所有扩展:
56+
```bash
57+
node mirror.js -force
58+
```
59+
60+
或者:
61+
```bash
62+
node mirror.js --force
63+
```
64+
65+
## 配置说明
66+
67+
### 目标扩展配置
68+
69+
程序支持两种方式指定要同步的扩展:
70+
71+
1. **通过扩展ID列表** (`targetExtensions`): 直接指定要同步的扩展ID
72+
2. **通过作者列表** (`targetAuthors`): 自动获取指定作者的所有扩展
73+
74+
`mirror.js` 文件中配置:
75+
76+
```javascript
77+
const config = {
78+
// ... 其他配置
79+
targetExtensions: [
80+
'bitwiseoper',
81+
'strmani',
82+
// ... 更多扩展ID
83+
],
84+
targetAuthors: [
85+
'40code', // 获取 40code 作者的所有扩展
86+
'wuyuan', // 获取 wuyuan 作者的所有扩展
87+
// ... 更多作者
88+
]
89+
};
90+
```
91+
=
92+
93+
## 工作流程
94+
95+
1. **获取扩展列表**: 从 abc.520gxx.com 的API获取所有可用扩展
96+
2. **过滤目标扩展**:
97+
- 处理 `targetExtensions` 列表中指定的扩展ID
98+
- 处理 `targetAuthors` 列表中指定作者的所有扩展
99+
- 自动去重,避免重复处理同一扩展
100+
3. **检查项目存在性**: 检查 `40code/扩展名` 是否已存在
101+
4. **创建项目**: 如果不存在,创建新项目(类型为text)
102+
5. **初始化项目**: 调用 `/project/initlize` 接口初始化项目
103+
6. **获取代码**: 从 abc.520gxx.com/ext/扩展名.js 获取最新代码
104+
7. **保存文件**: 调用 `/project/savefile` 接口保存文件,获取 accessFileToken
105+
8. **创建提交**: 使用 accessFileToken 创建新提交
106+
107+
## 日志输出
108+
109+
程序会输出详细的日志信息:
110+
- ℹ️ 信息日志
111+
- ✅ 成功日志
112+
- ❌ 错误日志
113+
114+
## 注意事项
115+
116+
- 确保你有足够的API权限来创建项目和提交
117+
- 程序会在请求之间添加1秒延迟,避免请求过快
118+
- 如果扩展代码获取失败,会跳过该扩展并继续处理其他扩展
119+
- 用户名固定为 "40code",项目名使用扩展的 extId

env.example

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# API配置
2+
token=your_api_token_here
3+
apihost=https://your-api-host.com

0 commit comments

Comments
 (0)