feat(cloudflare): add custom targets and node failover (#43)

* feat(cloudflare): add custom targets and node failover

* fix(cloudflare): propagate batch sync errors

---------

Co-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
Ryan
2026-10-07 11:29:41 +08:00
committed by GitHub
parent e49e0ad2bf
commit fd0e9acc2f
28 changed files with 1144 additions and 155 deletions
+3
View File
@@ -14,6 +14,9 @@ sidebar: false
- OpenResty 默认压缩 CSS、JavaScript、JSON、XML、RSS、Atom 和 SVG 等文本响应,并发送 `Vary: Accept-Encoding`;普通代理请求默认先缓冲请求体再转发,升级时旧值 `false` 会改为 `true`,流式上传场景可手动关闭。
### ✨ 新功能
- Cloudflare 节点分组会根据节点在线和应用状态自动切换到备用节点,并在主节点恢复后自动切回;分组详情支持批量开启橙云,成员操作按钮改为仅显示图标。
- Cloudflare 指向分组新增自定义目标模式,可按分组将域名同步为 CNAME、A 或 AAAA 记录;原有节点绑定模式保持默认。
- 代理路由详情支持单独关闭 HTTP/2,默认仍启用;关闭后该路由生成的 HTTPS 配置不再启用 HTTP/2。
### 🛠 修复
+86
View File
@@ -6419,6 +6419,63 @@ const docTemplate = `{
}
}
},
"/api/v1/d/cloudflare/groups/{id}/members/batch-proxy": {
"post": {
"security": [
{
"SessionCookie": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"openflare-cloudflare"
],
"summary": "批量开启 Cloudflare 橙云",
"parameters": [
{
"type": "integer",
"description": "分组 ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "批量开启橙云参数",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/cloudflare.MemberBatchProxyInput"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/response.Any"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/response.Any"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/response.Any"
}
}
}
}
},
"/api/v1/d/cloudflare/groups/{id}/members/batch-remove": {
"post": {
"security": [
@@ -15285,6 +15342,15 @@ const docTemplate = `{
},
"primary_node_id": {
"type": "integer"
},
"record_content": {
"type": "string"
},
"record_type": {
"type": "string"
},
"target_mode": {
"type": "string"
}
}
},
@@ -15318,6 +15384,15 @@ const docTemplate = `{
"primary_node": {
"$ref": "#/definitions/cloudflare.NodeOption"
},
"record_content": {
"type": "string"
},
"record_type": {
"type": "string"
},
"target_mode": {
"type": "string"
},
"updated_at": {
"type": "string"
}
@@ -15337,6 +15412,17 @@ const docTemplate = `{
}
}
},
"cloudflare.MemberBatchProxyInput": {
"type": "object",
"properties": {
"member_ids": {
"type": "array",
"items": {
"type": "integer"
}
}
}
},
"cloudflare.MemberBatchRemoveInput": {
"type": "object",
"properties": {
+86
View File
@@ -6412,6 +6412,63 @@
}
}
},
"/api/v1/d/cloudflare/groups/{id}/members/batch-proxy": {
"post": {
"security": [
{
"SessionCookie": []
}
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"openflare-cloudflare"
],
"summary": "批量开启 Cloudflare 橙云",
"parameters": [
{
"type": "integer",
"description": "分组 ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "批量开启橙云参数",
"name": "body",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/cloudflare.MemberBatchProxyInput"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/response.Any"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/response.Any"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/response.Any"
}
}
}
}
},
"/api/v1/d/cloudflare/groups/{id}/members/batch-remove": {
"post": {
"security": [
@@ -15278,6 +15335,15 @@
},
"primary_node_id": {
"type": "integer"
},
"record_content": {
"type": "string"
},
"record_type": {
"type": "string"
},
"target_mode": {
"type": "string"
}
}
},
@@ -15311,6 +15377,15 @@
"primary_node": {
"$ref": "#/definitions/cloudflare.NodeOption"
},
"record_content": {
"type": "string"
},
"record_type": {
"type": "string"
},
"target_mode": {
"type": "string"
},
"updated_at": {
"type": "string"
}
@@ -15330,6 +15405,17 @@
}
}
},
"cloudflare.MemberBatchProxyInput": {
"type": "object",
"properties": {
"member_ids": {
"type": "array",
"items": {
"type": "integer"
}
}
}
},
"cloudflare.MemberBatchRemoveInput": {
"type": "object",
"properties": {
+55
View File
@@ -330,6 +330,12 @@ definitions:
type: string
primary_node_id:
type: integer
record_content:
type: string
record_type:
type: string
target_mode:
type: string
type: object
cloudflare.GroupItem:
properties:
@@ -351,6 +357,12 @@ definitions:
type: string
primary_node:
$ref: '#/definitions/cloudflare.NodeOption'
record_content:
type: string
record_type:
type: string
target_mode:
type: string
updated_at:
type: string
type: object
@@ -363,6 +375,13 @@ definitions:
target_group_id:
type: integer
type: object
cloudflare.MemberBatchProxyInput:
properties:
member_ids:
items:
type: integer
type: array
type: object
cloudflare.MemberBatchRemoveInput:
properties:
member_ids:
@@ -8335,6 +8354,42 @@ paths:
summary: 批量移动 Cloudflare 指向成员
tags:
- openflare-cloudflare
/api/v1/d/cloudflare/groups/{id}/members/batch-proxy:
post:
consumes:
- application/json
parameters:
- description: 分组 ID
in: path
name: id
required: true
type: integer
- description: 批量开启橙云参数
in: body
name: body
required: true
schema:
$ref: '#/definitions/cloudflare.MemberBatchProxyInput'
produces:
- application/json
responses:
"200":
description: OK
schema:
$ref: '#/definitions/response.Any'
"400":
description: Bad Request
schema:
$ref: '#/definitions/response.Any'
"404":
description: Not Found
schema:
$ref: '#/definitions/response.Any'
security:
- SessionCookie: []
summary: 批量开启 Cloudflare 橙云
tags:
- openflare-cloudflare
/api/v1/d/cloudflare/groups/{id}/members/batch-remove:
post:
consumes: