refactor(openflare): migrate console APIs to v1 and centralize routing

Move OpenFlare management endpoints to /api/v1/custom/openflare with
Wavelet response envelopes and Abort* error handling. Keep agent, relay,
and flared protocol routes on /api/* with the legacy compat format.

- Add apiutil helpers and Swagger annotations for console handlers
- Register all OpenFlare routes in internal/router/openflare (not apps)
- Switch frontend services to OpenFlareBaseService and v1 paths
- Remove dead auth/compat code and legacy-base.service.ts
- Update integration tests and changelog
This commit is contained in:
ryan
2026-06-18 20:34:54 +08:00
parent aa348a1b48
commit 399c1bc88d
104 changed files with 28541 additions and 3879 deletions
@@ -40,12 +40,12 @@ export function OriginDetailPageClient() {
const originQuery = useQuery({
queryKey: ["openflare", "origins", originId],
queryFn: () => OriginService.get(parsedId),
queryFn: () => OriginService.getById(parsedId),
enabled,
})
const deleteMutation = useMutation({
mutationFn: () => OriginService.delete(parsedId),
mutationFn: () => OriginService.deleteById(parsedId),
onSuccess: async () => {
toast.success("源站已删除")
await queryClient.invalidateQueries({ queryKey: ["openflare", "origins"] })
+1 -1
View File
@@ -42,7 +42,7 @@ export default function OriginsPage() {
const origins = useMemo(() => originsQuery.data ?? [], [originsQuery.data])
const deleteMutation = useMutation({
mutationFn: (id: number) => OriginService.delete(id),
mutationFn: (id: number) => OriginService.deleteById(id),
onSuccess: async () => {
toast.success("源站已删除")
setDeleteTarget(null)
@@ -83,7 +83,7 @@ export function ProxyRoutesPageClient() {
setDeleting(true);
try {
await ProxyRouteService.delete(deleteTarget.id);
await ProxyRouteService.deleteById(deleteTarget.id);
toast.success('网站已删除');
setDeleteTarget(null);
await fetchRoutes();
@@ -52,7 +52,7 @@ export default function CertificatesPage() {
});
const deleteMutation = useMutation({
mutationFn: (id: number) => TlsCertificateService.delete(id),
mutationFn: (id: number) => TlsCertificateService.deleteById(id),
onSuccess: async () => {
toast.success('证书已删除');
setDeleteTarget(null);
@@ -102,7 +102,7 @@ export function WebsiteDetailPageClient() {
}, [routesQuery.data, website]);
const deleteDomainMutation = useMutation({
mutationFn: (id: number) => WebsiteService.delete(id),
mutationFn: (id: number) => WebsiteService.deleteById(id),
onSuccess: async () => {
await queryClient.invalidateQueries({queryKey: domainsQueryKey});
router.push('/websites');
@@ -111,7 +111,7 @@ export function WebsiteDetailPageClient() {
});
const deleteCertificateMutation = useMutation({
mutationFn: (id: number) => TlsCertificateService.delete(id),
mutationFn: (id: number) => TlsCertificateService.deleteById(id),
onSuccess: async () => {
toast.success('证书已删除');
setDeleteCertOpen(false);
@@ -40,7 +40,7 @@ export default function DnsAccountsPage() {
});
const deleteMutation = useMutation({
mutationFn: (id: number) => DnsAccountService.delete(id),
mutationFn: (id: number) => DnsAccountService.deleteById(id),
onSuccess: async () => {
toast.success('DNS 账号已删除');
setDeleteTarget(null);
@@ -50,7 +50,7 @@ export default function WebsitesPage() {
});
const deleteMutation = useMutation({
mutationFn: (id: number) => WebsiteService.delete(id),
mutationFn: (id: number) => WebsiteService.deleteById(id),
onSuccess: async () => {
toast.success('网站已删除');
setDeleteTarget(null);