From 1004f8579f296d099d310abb7fe9407bf1150def Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Sat, 4 Apr 2026 11:00:03 +0000 Subject: [PATCH] fix(ops-view-routes): correct route form dropdown selection handling for security profiles and network targets --- changelog.md | 7 +++++++ package.json | 2 +- pnpm-lock.yaml | 14 ++++++------- readme.md | 2 +- ts/00_commitinfo_data.ts | 2 +- ts_interfaces/readme.md | 5 ++++- ts_web/00_commitinfo_data.ts | 2 +- ts_web/elements/ops-view-routes.ts | 32 +++++++++++++++++++----------- ts_web/readme.md | 2 +- 9 files changed, 43 insertions(+), 25 deletions(-) diff --git a/changelog.md b/changelog.md index b8b2ecc..3f7104f 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,12 @@ # Changelog +## 2026-04-04 - 12.8.1 - fix(ops-view-routes) +correct route form dropdown selection handling for security profiles and network targets + +- Update route edit and create forms to use selectedOption for dropdowns backed by the newer dees-catalog version +- Normalize submitted dropdown values to extract option keys before storing securityProfileRef and networkTargetRef +- Refresh documentation to reflect expanded stats coverage for network, RADIUS, and VPN metrics + ## 2026-04-03 - 12.8.0 - feat(certificates) add force renew option for domain certificate reprovisioning diff --git a/package.json b/package.json index 53b22df..db9d6f7 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "@api.global/typedserver": "^8.4.6", "@api.global/typedsocket": "^4.1.2", "@apiclient.xyz/cloudflare": "^7.1.0", - "@design.estate/dees-catalog": "^3.52.3", + "@design.estate/dees-catalog": "^3.55.1", "@design.estate/dees-element": "^2.2.4", "@push.rocks/lik": "^6.4.0", "@push.rocks/projectinfo": "^5.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4d4ab83..11d4f96 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,8 +24,8 @@ importers: specifier: ^7.1.0 version: 7.1.0 '@design.estate/dees-catalog': - specifier: ^3.52.3 - version: 3.52.3(@tiptap/pm@2.27.2) + specifier: ^3.55.1 + version: 3.55.1(@tiptap/pm@2.27.2) '@design.estate/dees-element': specifier: ^2.2.4 version: 2.2.4 @@ -350,8 +350,8 @@ packages: '@configvault.io/interfaces@1.0.17': resolution: {integrity: sha512-bEcCUR2VBDJsTin8HQh8Uw/mlYl2v8A3jMIaQ+MTB9Hrqd6CZL2dL7iJdWyFl/3EIX+LDxWFR+Oq7liIq7w+1Q==} - '@design.estate/dees-catalog@3.52.3': - resolution: {integrity: sha512-4/vybRZQtdkpa3IOZQ/EbL6gGjIMO+430db43RRfdw+HPXird7Jl+oIXz6pDh+rGah2H2+Srb/c+eve46xAhtQ==} + '@design.estate/dees-catalog@3.55.1': + resolution: {integrity: sha512-UXBC68Dg+L2cGJynvrXyaJATlSLnmiA5SMrE1SWVcp2H1niXqHph6KVi9+E52YSLoEmsCS23cf+XjUjoRNgZTw==} '@design.estate/dees-comms@1.0.30': resolution: {integrity: sha512-KchMlklJfKAjQiJiR0xmofXtQ27VgZtBIxcMwPE9d+h3jJRv+lPZxzBQVOM0eyM0uS44S5vJMZ11IeV4uDXSHg==} @@ -4342,7 +4342,7 @@ snapshots: '@api.global/typedrequest-interfaces': 3.0.19 '@api.global/typedsocket': 4.1.2(@push.rocks/smartserve@2.0.3) '@cloudflare/workers-types': 4.20260317.1 - '@design.estate/dees-catalog': 3.52.3(@tiptap/pm@2.27.2) + '@design.estate/dees-catalog': 3.55.1(@tiptap/pm@2.27.2) '@design.estate/dees-comms': 1.0.30 '@push.rocks/lik': 6.4.0 '@push.rocks/smartdelay': 3.0.5 @@ -4871,7 +4871,7 @@ snapshots: dependencies: '@api.global/typedrequest-interfaces': 3.0.19 - '@design.estate/dees-catalog@3.52.3(@tiptap/pm@2.27.2)': + '@design.estate/dees-catalog@3.55.1(@tiptap/pm@2.27.2)': dependencies: '@design.estate/dees-domtools': 2.5.4 '@design.estate/dees-element': 2.2.4 @@ -6909,7 +6909,7 @@ snapshots: '@serve.zone/catalog@2.11.0(@tiptap/pm@2.27.2)': dependencies: - '@design.estate/dees-catalog': 3.52.3(@tiptap/pm@2.27.2) + '@design.estate/dees-catalog': 3.55.1(@tiptap/pm@2.27.2) '@design.estate/dees-domtools': 2.5.4 '@design.estate/dees-element': 2.2.4 '@design.estate/dees-wcctools': 3.8.0 diff --git a/readme.md b/readme.md index 7110ec5..b76fc8f 100644 --- a/readme.md +++ b/readme.md @@ -25,7 +25,7 @@ For reporting bugs, issues, or security vulnerabilities, please visit [community - [Remote Ingress](#remote-ingress) - [VPN Access Control](#vpn-access-control) - [Certificate Management](#certificate-management) -- [Storage & Caching](#storage--caching) +- [Storage & Database](#storage--database) - [Security Features](#security-features) - [OpsServer Dashboard](#opsserver-dashboard) - [API Client](#api-client) diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 34fb3b8..5011ad5 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@serve.zone/dcrouter', - version: '12.8.0', + version: '12.8.1', description: 'A multifaceted routing service handling mail and SMS delivery functions.' } diff --git a/ts_interfaces/readme.md b/ts_interfaces/readme.md index 22e3e52..68d701d 100644 --- a/ts_interfaces/readme.md +++ b/ts_interfaces/readme.md @@ -80,6 +80,8 @@ interface IIdentity { | `IQueueStatus` | Queue name, size, processing/failed/retrying counts | | `IHealthStatus` | Healthy flag, uptime, per-service status map | | `INetworkMetrics` | Bandwidth, connection counts, top endpoints | +| `IRadiusStats` | Running, uptime, auth requests/accepts/rejects, sessions, data transfer | +| `IVpnStats` | Running, subnet, registered/connected clients, WireGuard port | | `ILogEntry` | Timestamp, level, category, message, metadata | #### Route Management Interfaces @@ -135,7 +137,8 @@ TypedRequest interfaces for the OpsServer API, organized by domain: | `IReq_GetActiveConnections` | `getActiveConnections` | Active connection list | | `IReq_GetQueueStatus` | `getQueueStatus` | Email queue status | | `IReq_GetHealthStatus` | `getHealthStatus` | System health check | -| `IReq_GetCombinedMetrics` | `getCombinedMetrics` | All metrics in one request | +| `IReq_GetNetworkStats` | `getNetworkStats` | Network throughput and connection analytics | +| `IReq_GetCombinedMetrics` | `getCombinedMetrics` | All metrics in one request (server, email, DNS, security, network, RADIUS, VPN) | #### ⚙️ Configuration | Interface | Method | Description | diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts index 34fb3b8..5011ad5 100644 --- a/ts_web/00_commitinfo_data.ts +++ b/ts_web/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@serve.zone/dcrouter', - version: '12.8.0', + version: '12.8.1', description: 'A multifaceted routing service handling mail and SMS delivery functions.' } diff --git a/ts_web/elements/ops-view-routes.ts b/ts_web/elements/ops-view-routes.ts index 11bfade..46d5019 100644 --- a/ts_web/elements/ops-view-routes.ts +++ b/ts_web/elements/ops-view-routes.ts @@ -431,8 +431,8 @@ export class OpsViewRoutes extends DeesElement { - - + o.key === (merged.metadata?.securityProfileRef || '')) || null}> + o.key === (merged.metadata?.networkTargetRef || '')) || null}> @@ -477,11 +477,15 @@ export class OpsViewRoutes extends DeesElement { }; const metadata: any = {}; - if (formData.securityProfileRef) { - metadata.securityProfileRef = formData.securityProfileRef; + const profileRefValue = formData.securityProfileRef as any; + const profileKey = typeof profileRefValue === 'string' ? profileRefValue : profileRefValue?.key; + if (profileKey) { + metadata.securityProfileRef = profileKey; } - if (formData.networkTargetRef) { - metadata.networkTargetRef = formData.networkTargetRef; + const targetRefValue = formData.networkTargetRef as any; + const targetKey = typeof targetRefValue === 'string' ? targetRefValue : targetRefValue?.key; + if (targetKey) { + metadata.networkTargetRef = targetKey; } await appstate.routeManagementStatePart.dispatchAction( @@ -528,8 +532,8 @@ export class OpsViewRoutes extends DeesElement { - - + + @@ -575,11 +579,15 @@ export class OpsViewRoutes extends DeesElement { // Build metadata if profile/target selected const metadata: any = {}; - if (formData.securityProfileRef) { - metadata.securityProfileRef = formData.securityProfileRef; + const profileRefValue = formData.securityProfileRef as any; + const profileKey = typeof profileRefValue === 'string' ? profileRefValue : profileRefValue?.key; + if (profileKey) { + metadata.securityProfileRef = profileKey; } - if (formData.networkTargetRef) { - metadata.networkTargetRef = formData.networkTargetRef; + const targetRefValue = formData.networkTargetRef as any; + const targetKey = typeof targetRefValue === 'string' ? targetRefValue : targetRefValue?.key; + if (targetKey) { + metadata.networkTargetRef = targetKey; } await appstate.routeManagementStatePart.dispatchAction( diff --git a/ts_web/readme.md b/ts_web/readme.md index 7a24ab1..791c802 100644 --- a/ts_web/readme.md +++ b/ts_web/readme.md @@ -131,7 +131,7 @@ The app uses `@push.rocks/smartstate` v2.3+ with multiple state parts, scheduled | State Part | Mode | Description | |-----------|------|-------------| | `loginStatePart` | Persistent (IndexedDB) | JWT identity and login status | -| `statsStatePart` | Soft (memory) | Server, email, DNS, security metrics | +| `statsStatePart` | Soft (memory) | Server, email, DNS, security, RADIUS, VPN metrics | | `configStatePart` | Soft | Current system configuration | | `uiStatePart` | Soft | Active view, sidebar, auto-refresh, theme | | `logStatePart` | Soft | Recent logs, streaming status, filters |