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
+23 -7
View File
@@ -772,10 +772,10 @@
"notReadyDesc": "Import an existing Cloudflare DNS account, or enter a standalone API token and test the connection.",
"configure": "Configure connection",
"groupsTitle": "Pointing groups",
"groupsDesc": "Manage the nodes and domain members behind Cloudflare A records.",
"groupsDesc": "Manage Cloudflare DNS targets and domain members.",
"loadingGroups": "Loading pointing groups...",
"emptyTitle": "No pointing groups",
"emptyDesc": "After creating a group, you can sync domain members to selected edge nodes.",
"emptyDesc": "Create a group to bind domain members to an edge node or a custom DNS target.",
"enabled": "Enabled",
"disabled": "Disabled",
"memberSummary": "{count} members · new members default orange-cloud {proxy}",
@@ -788,7 +788,7 @@
"syncQueued": "Group sync queued",
"deleted": "Pointing group and remote records deleted",
"deleteTitle": "Delete pointing group",
"deleteDesc": "This deletes all members of {name} and the remote A records managed by this module. This cannot be undone.",
"deleteDesc": "This deletes all members of {name} and the remote DNS records managed by this module. This cannot be undone.",
"confirmDelete": "Delete",
"loadingDetail": "Loading group details...",
"groupUpdated": "Group settings updated",
@@ -798,13 +798,18 @@
"memberPartial": "Partial success: {succeeded} added, {failed} failed",
"proxyUpdated": "Orange-cloud setting updated and queued for sync",
"memberSyncQueued": "Member sync queued",
"memberDeleted": "Member and remote A record deleted",
"memberDeleted": "Member and remote DNS record deleted",
"batchEnableProxy": "Enable orange cloud",
"batchProxyEnabled": "Enabled orange cloud for {count} members and queued sync",
"back": "Back to list",
"refresh": "Refresh",
"edit": "Edit",
"addDomain": "Add domain",
"currentPoint": "Current target",
"activeNode": "Active node {name} · {ip}",
"customTargetSummary": "Custom target {type} · {content}",
"nodeTargetMode": "Node binding",
"customTargetMode": "Custom record",
"syncEnabled": "Sync enabled",
"syncDisabled": "Sync disabled",
"primaryNode": "Primary {name}",
@@ -815,7 +820,7 @@
"noMembers": "No domain members yet.",
"columns": {
"domain": "Domain",
"desiredIp": "Desired IP",
"desiredIp": "Desired value",
"status": "Status",
"proxied": "Orange cloud",
"actions": "Actions"
@@ -825,8 +830,19 @@
"groupDialog": {
"editTitle": "Edit pointing group",
"createTitle": "New pointing group",
"description": "Phase 1 uses the primary node as the active node. Backup nodes are saved only and do not fail over automatically.",
"description": "Bind members to an edge node or assign a custom DNS record target.",
"name": "Group name",
"targetMode": "Target mode",
"bindNode": "Bind node",
"customTarget": "Custom",
"recordType": "Record type",
"recordContent": "Record value",
"recordContentHint": "Enter an IPv4 for A, IPv6 for AAAA, or a target hostname for CNAME.",
"recordContentPlaceholder": {
"CNAME": "e.g. origin.example.com",
"A": "e.g. 203.0.113.10",
"AAAA": "e.g. 2001:db8::10"
},
"primary": "Primary node",
"primaryPlaceholder": "Select an edge node with IPv4",
"noIp": "No IP configured",
@@ -838,7 +854,7 @@
},
"memberDialog": {
"title": "Add domain members",
"description": "Search and select in bulk. Joining creates or takes over the unique same-name A record. Multiple same-name A records are rejected.",
"description": "Search and select in bulk. Joining creates or takes over the unique same-name DNS record used by this group.",
"zoneDomain": "Zone domain",
"searchPlaceholder": "Search domains or zones…",
"selected": "{count} selected",