feat: TR-069 CWMP state machine hardening + exchange viewer improvements
- TR-069 CWMP state machine hardening (14 phases): shared event utility, multi-event routing, GPN circuit breaker, IdleState GPN guard, expanded GPN fault codes, CriticalReadsState, ConfigEval GPN guard, task queue race condition fix, explicit error handling, terminal states (OperationalState/PartialOperationalState), consolidated reclassify, crash pattern detection, removed enqueueImmediate, state flow wiring - Fix SOAP Fault not processed by state machine (soap-env:Fault detection) - Fix GPN circuit breaker not persisting after session drops - Fix CriticalReadsState GPV response parsing (xsi:type normalization) - Fix CriticalReadsState not processing GPV response values - Skip SPV when device is already compliant (ProvisioningCode check) - Add Device.DeviceInfo.ModelName to critical reads GPV - Fix TypeError on DeviceDetail parameters view (null guards) - Log empty 204 responses in exchange trace UI - TR-181 catalog: type corrections and new entries (+6640 lines) - SequenceViewer: replace session-nav buttons with compact dropdown select - SequenceViewer: fix CPE/ACS lifeline headers wrapping to 2 lines - Add 20 unit tests for state machine fixes (SOAP Fault, GPN circuit breaker, CriticalReads, stale session, ConfigEval/ComplianceUpdate skips) Generated with [Continue](https://continue.dev) Co-Authored-By: Continue <noreply@continue.dev>
This commit is contained in:
1 parent
dabe15839d
commit
aad93911e4
35 files changed
+8593
-4497
No files matched your search
@@ -8,8 +8,10 @@ export const controllers = {
|
||||
ConfigurationsV1: () => import('#controllers/configurations_v1_controller'),
|
||||
Cwmp: () => import('#controllers/cwmp_controller'),
|
||||
Devices: () => import('#controllers/devices_controller'),
|
||||
Exchange: () => import('#controllers/exchange_controller'),
|
||||
FirmwareCatalog: () => import('#controllers/firmware_catalog_controller'),
|
||||
Health: () => import('#controllers/health_controller'),
|
||||
Pages: () => import('#controllers/pages_controller'),
|
||||
References: () => import('#controllers/references_controller'),
|
||||
Tr069Trace: () => import('#controllers/tr069_trace_controller'),
|
||||
}
|
||||
Vendored
+21
@@ -7,12 +7,17 @@ export type ScannedRoutes = {
|
||||
'cwmp': { paramsTuple?: []; params?: {} }
|
||||
'health.checklife': { paramsTuple?: []; params?: {} }
|
||||
'health.checkservice': { paramsTuple?: []; params?: {} }
|
||||
'health.check_tr_069_exchanges': { paramsTuple?: []; params?: {} }
|
||||
'devices.index': { paramsTuple?: []; params?: {} }
|
||||
'devices.criteria_values': { paramsTuple?: []; params?: {} }
|
||||
'devices.show': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'devices.destroy': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'devices.execute_command': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'devices.refresh': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.index': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.show': { paramsTuple: [ParamValue,ParamValue]; params: {'identifier': ParamValue,'provider': ParamValue} }
|
||||
'references.resolve_all': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.resolve_one': { paramsTuple: [ParamValue,ParamValue]; params: {'identifier': ParamValue,'provider': ParamValue} }
|
||||
'commands.index': { paramsTuple?: []; params?: {} }
|
||||
'commands.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'commands.store': { paramsTuple?: []; params?: {} }
|
||||
@@ -22,6 +27,9 @@ export type ScannedRoutes = {
|
||||
'tr_069_trace.save_raw_config': { paramsTuple?: []; params?: {} }
|
||||
'tr_069_trace.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'tr_069_trace.show_log': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'exchange.index': { paramsTuple: [ParamValue]; params: {'deviceId': ParamValue} }
|
||||
'exchange.destroy': { paramsTuple: [ParamValue]; params: {'deviceId': ParamValue} }
|
||||
'exchange.stream': { paramsTuple: [ParamValue]; params: {'deviceId': ParamValue} }
|
||||
'configurations_v_1.index': { paramsTuple?: []; params?: {} }
|
||||
'configurations_v_1.list_tags': { paramsTuple?: []; params?: {} }
|
||||
'configurations_v_1.store': { paramsTuple?: []; params?: {} }
|
||||
@@ -64,6 +72,8 @@ export type ScannedRoutes = {
|
||||
'cwmp': { paramsTuple?: []; params?: {} }
|
||||
'devices.execute_command': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'devices.refresh': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.resolve_all': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.resolve_one': { paramsTuple: [ParamValue,ParamValue]; params: {'identifier': ParamValue,'provider': ParamValue} }
|
||||
'commands.store': { paramsTuple?: []; params?: {} }
|
||||
'tr_069_trace.store': { paramsTuple?: []; params?: {} }
|
||||
'configurations_v_1.store': { paramsTuple?: []; params?: {} }
|
||||
@@ -78,14 +88,19 @@ export type ScannedRoutes = {
|
||||
GET: {
|
||||
'health.checklife': { paramsTuple?: []; params?: {} }
|
||||
'health.checkservice': { paramsTuple?: []; params?: {} }
|
||||
'health.check_tr_069_exchanges': { paramsTuple?: []; params?: {} }
|
||||
'devices.index': { paramsTuple?: []; params?: {} }
|
||||
'devices.criteria_values': { paramsTuple?: []; params?: {} }
|
||||
'devices.show': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.index': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.show': { paramsTuple: [ParamValue,ParamValue]; params: {'identifier': ParamValue,'provider': ParamValue} }
|
||||
'commands.index': { paramsTuple?: []; params?: {} }
|
||||
'commands.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'tr_069_trace.index': { paramsTuple?: []; params?: {} }
|
||||
'tr_069_trace.raw_config': { paramsTuple?: []; params?: {} }
|
||||
'tr_069_trace.show_log': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'exchange.index': { paramsTuple: [ParamValue]; params: {'deviceId': ParamValue} }
|
||||
'exchange.stream': { paramsTuple: [ParamValue]; params: {'deviceId': ParamValue} }
|
||||
'configurations_v_1.index': { paramsTuple?: []; params?: {} }
|
||||
'configurations_v_1.list_tags': { paramsTuple?: []; params?: {} }
|
||||
'configurations_v_1.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
@@ -111,14 +126,19 @@ export type ScannedRoutes = {
|
||||
HEAD: {
|
||||
'health.checklife': { paramsTuple?: []; params?: {} }
|
||||
'health.checkservice': { paramsTuple?: []; params?: {} }
|
||||
'health.check_tr_069_exchanges': { paramsTuple?: []; params?: {} }
|
||||
'devices.index': { paramsTuple?: []; params?: {} }
|
||||
'devices.criteria_values': { paramsTuple?: []; params?: {} }
|
||||
'devices.show': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.index': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'references.show': { paramsTuple: [ParamValue,ParamValue]; params: {'identifier': ParamValue,'provider': ParamValue} }
|
||||
'commands.index': { paramsTuple?: []; params?: {} }
|
||||
'commands.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'tr_069_trace.index': { paramsTuple?: []; params?: {} }
|
||||
'tr_069_trace.raw_config': { paramsTuple?: []; params?: {} }
|
||||
'tr_069_trace.show_log': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'exchange.index': { paramsTuple: [ParamValue]; params: {'deviceId': ParamValue} }
|
||||
'exchange.stream': { paramsTuple: [ParamValue]; params: {'deviceId': ParamValue} }
|
||||
'configurations_v_1.index': { paramsTuple?: []; params?: {} }
|
||||
'configurations_v_1.list_tags': { paramsTuple?: []; params?: {} }
|
||||
'configurations_v_1.show': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
@@ -144,6 +164,7 @@ export type ScannedRoutes = {
|
||||
DELETE: {
|
||||
'devices.destroy': { paramsTuple: [ParamValue]; params: {'identifier': ParamValue} }
|
||||
'tr_069_trace.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'exchange.destroy': { paramsTuple: [ParamValue]; params: {'deviceId': ParamValue} }
|
||||
'configurations_v_1.destroy': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'firmware_catalog.delete_entry': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
'firmware_catalog.delete_route': { paramsTuple: [ParamValue]; params: {'id': ParamValue} }
|
||||
|
||||
Reference in new issue
Block a user