Files

3314 lines
141 KiB
JSON

{
"upstreamCommit": "58e220411d6599609f0eeda01eb7016e9212f970",
"evidenceLevel": "independent whole-file snapshot; exact handler + extractor + response construction; static implementation evidence, not runtime fixtures",
"operations": [
{
"method": "GET",
"path": "/api/device",
"handler": "get_device_info",
"routeEvidence": "backend/src/main.rs:506-506",
"handlerEvidence": "backend/src/handlers.rs:1076-1090",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1076-1090",
"responseSummary": "success/error payload evidenced by ApiResponse<DeviceInfoResponse>; exact handler backend/src/handlers.rs:1076-1090",
"sha256": "7b4d3ba9a85015e504518640ae05ad6014a98aff50166308b4cd348290cca639",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1076,
"endLine": 1090
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<DeviceInfoResponse>; exact handler backend/src/handlers.rs:1076-1090",
"brunoEvidence": [
{
"file": "bruno-api/get_device_info.bru",
"method": "GET",
"path": "/api/device",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/sim",
"handler": "get_sim_info",
"routeEvidence": "backend/src/main.rs:508-508",
"handlerEvidence": "backend/src/handlers.rs:1126-1145",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1126-1145",
"responseSummary": "success/error payload evidenced by ApiResponse<SimInfoResponse>; exact handler backend/src/handlers.rs:1126-1145",
"sha256": "db5280e4e6d37c435a5a0b727087e2ed0d2e09a14901566ff62c7a78fe5685c8",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1126,
"endLine": 1145
},
"extractorTokens": [
"State<(Arc<Connection>, Arc<Database>)>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<SimInfoResponse>; exact handler backend/src/handlers.rs:1126-1145",
"brunoEvidence": [
{
"file": "bruno-api/get_sim_info.bru",
"method": "GET",
"path": "/api/sim",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/sim/details/refresh",
"handler": "refresh_sim_details_handler",
"routeEvidence": "backend/src/main.rs:510-511",
"handlerEvidence": "backend/src/handlers.rs:1148-1164",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1148-1164",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:1148-1164; field shape is implementation evidence only",
"sha256": "ab04a42ae36c34953d81c4ae7418ee489cf8b1b1604961dac9015b80e24677a2",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1148,
"endLine": 1164
},
"extractorTokens": [
"State<(Arc<Connection>, Arc<Database>)>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:1148-1164; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/sim/cache",
"handler": "update_sim_cache_handler",
"routeEvidence": "backend/src/main.rs:514-515",
"handlerEvidence": "backend/src/handlers.rs:1167-1213",
"requestSummary": "body extractor UpdateSimCacheRequest fields [phone_number:Option<String>, sms_center:Option<String>] (models.rs:1036); exact handler backend/src/handlers.rs:1167-1213",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1167-1213",
"sha256": "b2b5f366ff8b133d4a8cbc7965a5ab50f1ee5a41b23a6c81019824d801a5798f",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1167,
"endLine": 1213
},
"extractorTokens": [
"Json<UpdateSimCacheRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1167-1213",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/network",
"handler": "get_network_info",
"routeEvidence": "backend/src/main.rs:519-520",
"handlerEvidence": "backend/src/handlers.rs:1218-1232",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1218-1232",
"responseSummary": "success/error payload evidenced by ApiResponse<NetworkInfoResponse>; exact handler backend/src/handlers.rs:1218-1232",
"sha256": "5d02208a69b790246dfc8d08647fd728517d3e1777acb3cf3dd83f8e589a9e2d",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1218,
"endLine": 1232
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<NetworkInfoResponse>; exact handler backend/src/handlers.rs:1218-1232",
"brunoEvidence": [
{
"file": "bruno-api/get_network_info.bru",
"method": "GET",
"path": "/api/network",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/cells",
"handler": "get_cells",
"routeEvidence": "backend/src/main.rs:522-522",
"handlerEvidence": "backend/src/handlers.rs:1235-1249",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1235-1249",
"responseSummary": "success/error payload evidenced by ApiResponse<CellsResponse>; exact handler backend/src/handlers.rs:1235-1249",
"sha256": "2a0eb9db873a461af208a2784c9a07fff1a00fcb3666fcaaa8f67840783a8dde",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1235,
"endLine": 1249
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CellsResponse>; exact handler backend/src/handlers.rs:1235-1249",
"brunoEvidence": [
{
"file": "bruno-api/get_cells_info.bru",
"method": "GET",
"path": "/api/cells",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/cell-monitor/start",
"handler": "start_cell_monitor_handler",
"routeEvidence": "backend/src/main.rs:524-525",
"handlerEvidence": "backend/src/handlers.rs:1252-1282",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1252-1282",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1252-1282",
"sha256": "c70d5916a800de22a643c93e2a9ddb7a6a4eeb9e8ad83fee1fbd3ee7660b78fe",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1252,
"endLine": 1282
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1252-1282",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/cell-monitor/stop",
"handler": "stop_cell_monitor_handler",
"routeEvidence": "backend/src/main.rs:528-529",
"handlerEvidence": "backend/src/handlers.rs:1285-1312",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1285-1312",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1285-1312",
"sha256": "81303fb59efb78b8ab8901a3a1f693305ff13fc3048d51138c6a9e054ee73c66",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1285,
"endLine": 1312
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1285-1312",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/radio-mode",
"handler": "get_radio_mode_handler",
"routeEvidence": "backend/src/main.rs:532-533",
"handlerEvidence": "backend/src/handlers.rs:1315-1329",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1315-1329",
"responseSummary": "success/error payload evidenced by ApiResponse<RadioModeResponse>; exact handler backend/src/handlers.rs:1315-1329",
"sha256": "caba610280c2850fd8a840114af3c9b3b69c4ba0f9a724a23cdb92c78aa222ea",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1315,
"endLine": 1329
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<RadioModeResponse>; exact handler backend/src/handlers.rs:1315-1329",
"brunoEvidence": [
{
"file": "bruno-api/get_radio_mode.bru",
"method": "GET",
"path": "/api/radio-mode",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/radio-mode",
"handler": "set_radio_mode_handler",
"routeEvidence": "backend/src/main.rs:532-534",
"handlerEvidence": "backend/src/handlers.rs:1332-1352",
"requestSummary": "body extractor RadioModeRequest fields [mode:RadioMode] (models.rs:351); exact handler backend/src/handlers.rs:1332-1352",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1332-1352",
"sha256": "c41c6134fe1f28b0f018724a009a4df537556f1226be4e27924d7daa10ce3de2",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1332,
"endLine": 1352
},
"extractorTokens": [
"Json<RadioModeRequest>",
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1332-1352",
"brunoEvidence": [
{
"file": "bruno-api/set_radio_mode_nr.bru",
"method": "POST",
"path": "/api/radio-mode",
"bodyMode": "json",
"bodyFields": [
"mode"
]
},
{
"file": "bruno-api/set_radio_mode_lte.bru",
"method": "POST",
"path": "/api/radio-mode",
"bodyMode": "json",
"bodyFields": [
"mode"
]
},
{
"file": "bruno-api/set_radio_mode_auto.bru",
"method": "POST",
"path": "/api/radio-mode",
"bodyMode": "json",
"bodyFields": [
"mode"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/band-lock",
"handler": "get_band_lock_handler",
"routeEvidence": "backend/src/main.rs:538-539",
"handlerEvidence": "backend/src/handlers.rs:1355-1369",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1355-1369",
"responseSummary": "success/error payload evidenced by ApiResponse<BandLockStatus>; exact handler backend/src/handlers.rs:1355-1369",
"sha256": "6130c68b619423b3303d2fcf24fa6175c979c80c6bb2158460c2455d7b347f72",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1355,
"endLine": 1369
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<BandLockStatus>; exact handler backend/src/handlers.rs:1355-1369",
"brunoEvidence": [
{
"file": "bruno-api/get_band_lock.bru",
"method": "GET",
"path": "/api/band-lock",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/band-lock",
"handler": "set_band_lock_handler",
"routeEvidence": "backend/src/main.rs:538-540",
"handlerEvidence": "backend/src/handlers.rs:1372-1392",
"requestSummary": "body extractor BandLockRequest fields [lte_fdd_bands:Vec<u32>, lte_tdd_bands:Vec<u32>, nr_fdd_bands:Vec<u32>, nr_tdd_bands:Vec<u32>] (models.rs:377); exact handler backend/src/handlers.rs:1372-1392",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1372-1392",
"sha256": "04504f8b9b2d528e6e367bea397ef722f4f1eb3aa7363946718ea9871ac20277",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1372,
"endLine": 1392
},
"extractorTokens": [
"Json<BandLockRequest>",
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1372-1392",
"brunoEvidence": [
{
"file": "bruno-api/set_band_lock_nr_n78.bru",
"method": "POST",
"path": "/api/band-lock",
"bodyMode": "json",
"bodyFields": [
"lte_fdd_bands",
"lte_tdd_bands",
"nr_fdd_bands",
"nr_tdd_bands"
]
},
{
"file": "bruno-api/set_band_lock_lte_b1_b3.bru",
"method": "POST",
"path": "/api/band-lock",
"bodyMode": "json",
"bodyFields": [
"lte_fdd_bands",
"lte_tdd_bands",
"nr_fdd_bands",
"nr_tdd_bands"
]
},
{
"file": "bruno-api/unlock_all_bands.bru",
"method": "POST",
"path": "/api/band-lock",
"bodyMode": "json",
"bodyFields": [
"lte_fdd_bands",
"lte_tdd_bands",
"nr_fdd_bands",
"nr_tdd_bands"
]
},
{
"file": "bruno-api/set_band_lock_lte_nr_mix.bru",
"method": "POST",
"path": "/api/band-lock",
"bodyMode": "json",
"bodyFields": [
"lte_fdd_bands",
"lte_tdd_bands",
"nr_fdd_bands",
"nr_tdd_bands"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/network/interfaces",
"handler": "get_network_interfaces_info",
"routeEvidence": "backend/src/main.rs:544-545",
"handlerEvidence": "backend/src/handlers.rs:1619-1644",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1619-1644",
"responseSummary": "success/error payload evidenced by ApiResponse<NetworkInterfacesResponse>; exact handler backend/src/handlers.rs:1619-1644",
"sha256": "a1ac88c365ed70bfccbe2efdc5a2788d3d4bb74115c330fdc319c2eebc074521",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1619,
"endLine": 1644
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<NetworkInterfacesResponse>; exact handler backend/src/handlers.rs:1619-1644",
"brunoEvidence": [
{
"file": "bruno-api/get_network_interfaces.bru",
"method": "GET",
"path": "/api/network/interfaces",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/network/connection-addresses",
"handler": "get_network_connection_addresses",
"routeEvidence": "backend/src/main.rs:548-549",
"handlerEvidence": "backend/src/handlers.rs:1647-1666",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1647-1666",
"responseSummary": "success/error payload evidenced by ApiResponse<ConnectionAddressesResponse>; exact handler backend/src/handlers.rs:1647-1666",
"sha256": "a5f28ff95121c09750c5fc3f81192a0d15c0a794e16954d2a2783f357319b82f",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1647,
"endLine": 1666
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<ConnectionAddressesResponse>; exact handler backend/src/handlers.rs:1647-1666",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/device-network/ddns/config",
"handler": "get_device_ddns_config_handler",
"routeEvidence": "backend/src/main.rs:552-553",
"handlerEvidence": "backend/src/handlers.rs:1669-1679",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1669-1679",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:1669-1679; field shape is implementation evidence only",
"sha256": "4ec8e855d61695c9db55ba9afb333005f6bbb4e0bdae5e22988173431d139b1b",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1669,
"endLine": 1679
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:1669-1679; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/get_device_ddns_config.bru",
"method": "GET",
"path": "/api/device-network/ddns/config",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/device-network/ddns/config",
"handler": "set_device_ddns_config_handler",
"routeEvidence": "backend/src/main.rs:552-554",
"handlerEvidence": "backend/src/handlers.rs:1682-1721",
"requestSummary": "body extractor crate::config::DdnsConfig fields [enabled:bool, provider:String, access_id:String, access_secret:String, interval_seconds:u64, ttl:u32, ipv4:DdnsIpConfig, ipv6:DdnsIpConfig] (config.rs:634); exact handler backend/src/handlers.rs:1682-1721",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1682-1721",
"sha256": "10137722721a3ef9bea62ce99f7225143652521a634c928daa7c389978e69d00",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1682,
"endLine": 1721
},
"extractorTokens": [
"Json<crate::config::DdnsConfig>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1682-1721",
"brunoEvidence": [
{
"file": "bruno-api/set_device_ddns_config.bru",
"method": "POST",
"path": "/api/device-network/ddns/config",
"bodyMode": "json",
"bodyFields": [
"enabled",
"provider",
"access_id",
"access_secret",
"interval_seconds",
"ttl",
"ipv4",
"ipv6"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/device-network/ddns/status",
"handler": "get_device_ddns_status_handler",
"routeEvidence": "backend/src/main.rs:558-559",
"handlerEvidence": "backend/src/handlers.rs:1750-1757",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1750-1757",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:1750-1757; field shape is implementation evidence only",
"sha256": "02494bf7928a9a23ec81cab75333d7322683628a1c33ea067d7e4ad52177f8f6",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1750,
"endLine": 1757
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:1750-1757; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/get_device_ddns_status.bru",
"method": "GET",
"path": "/api/device-network/ddns/status",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/device-network/ddns/sync",
"handler": "sync_device_ddns_handler",
"routeEvidence": "backend/src/main.rs:562-563",
"handlerEvidence": "backend/src/handlers.rs:1760-1781",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1760-1781",
"responseSummary": "success/error payload evidenced by ApiResponse<DdnsSyncResponse>; exact handler backend/src/handlers.rs:1760-1781",
"sha256": "43cf9573e2b43aaf431562572de72d81f57bb586d78c69415441859ad0ab0528",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1760,
"endLine": 1781
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<DdnsSyncResponse>; exact handler backend/src/handlers.rs:1760-1781",
"brunoEvidence": [
{
"file": "bruno-api/post_device_ddns_sync.bru",
"method": "POST",
"path": "/api/device-network/ddns/sync",
"bodyMode": "json",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/device-network/ddns/logs",
"handler": "get_device_ddns_logs_handler",
"routeEvidence": "backend/src/main.rs:566-567",
"handlerEvidence": "backend/src/handlers.rs:1784-1790",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1784-1790",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:1784-1790; field shape is implementation evidence only",
"sha256": "ac80f3ada641ca13354b1b857a8eabfa67c15e30f706209bdce9331a7a903d73",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1784,
"endLine": 1790
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:1784-1790; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/get_device_ddns_logs.bru",
"method": "GET",
"path": "/api/device-network/ddns/logs",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/device-network/ddns/logs/clear",
"handler": "clear_device_ddns_logs_handler",
"routeEvidence": "backend/src/main.rs:570-571",
"handlerEvidence": "backend/src/handlers.rs:1793-1802",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1793-1802",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:1793-1802; field shape is implementation evidence only",
"sha256": "8ebb7d7cfe772a4e7fdee06da1ba69de668a68f0a0cb6077949e1f1ef7594173",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1793,
"endLine": 1802
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:1793-1802; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/post_device_ddns_logs_clear.bru",
"method": "POST",
"path": "/api/device-network/ddns/logs/clear",
"bodyMode": "json",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/device-network/wlan/status",
"handler": "get_device_wlan_status_handler",
"routeEvidence": "backend/src/main.rs:574-575",
"handlerEvidence": "backend/src/handlers.rs:1805-1819",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1805-1819",
"responseSummary": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1805-1819",
"sha256": "66741c07471de1f7a414b9771d6ce841fdcaf04d48244ac8cd2e03ecb1612034",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1805,
"endLine": 1819
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1805-1819",
"brunoEvidence": [
{
"file": "bruno-api/get_device_wlan_status.bru",
"method": "GET",
"path": "/api/device-network/wlan/status",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/device-network/wlan/enabled",
"handler": "set_device_wlan_enabled_handler",
"routeEvidence": "backend/src/main.rs:578-579",
"handlerEvidence": "backend/src/handlers.rs:1822-1841",
"requestSummary": "body extractor WlanEnabledRequest fields [enabled:bool] (models.rs:606); exact handler backend/src/handlers.rs:1822-1841",
"responseSummary": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1822-1841",
"sha256": "b6cc1238ca609208e8c2a6f757736617d2ca200e1b8a1725eda59694592582b7",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1822,
"endLine": 1841
},
"extractorTokens": [
"Json<WlanEnabledRequest>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1822-1841",
"brunoEvidence": [
{
"file": "bruno-api/set_device_wlan_enabled.bru",
"method": "POST",
"path": "/api/device-network/wlan/enabled",
"bodyMode": "json",
"bodyFields": [
"enabled"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/device-network/wlan/scan",
"handler": "scan_device_wlan_handler",
"routeEvidence": "backend/src/main.rs:582-583",
"handlerEvidence": "backend/src/handlers.rs:1844-1858",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1844-1858",
"responseSummary": "success/error payload evidenced by ApiResponse<WlanScanResponse>; exact handler backend/src/handlers.rs:1844-1858",
"sha256": "de90691d7c57a4e9af311144f3573e0ce80b3cc7ee29cc65b71c94c28e7b2651",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1844,
"endLine": 1858
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WlanScanResponse>; exact handler backend/src/handlers.rs:1844-1858",
"brunoEvidence": [
{
"file": "bruno-api/post_device_wlan_scan.bru",
"method": "POST",
"path": "/api/device-network/wlan/scan",
"bodyMode": "json",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/device-network/wlan/profiles",
"handler": "get_device_wlan_profiles_handler",
"routeEvidence": "backend/src/main.rs:586-587",
"handlerEvidence": "backend/src/handlers.rs:1861-1875",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1861-1875",
"responseSummary": "success/error payload evidenced by ApiResponse<WlanProfilesResponse>; exact handler backend/src/handlers.rs:1861-1875",
"sha256": "caadf1fc1c436c6342722c2955f0588581d26d12d1fc3db107e47e18adac43f5",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1861,
"endLine": 1875
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WlanProfilesResponse>; exact handler backend/src/handlers.rs:1861-1875",
"brunoEvidence": [
{
"file": "bruno-api/get_device_wlan_profiles.bru",
"method": "GET",
"path": "/api/device-network/wlan/profiles",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/device-network/wlan/forget",
"handler": "forget_device_wlan_handler",
"routeEvidence": "backend/src/main.rs:590-591",
"handlerEvidence": "backend/src/handlers.rs:1878-1897",
"requestSummary": "body extractor WlanForgetRequest fields [uuid:String, connection_id:String] (models.rs:635); exact handler backend/src/handlers.rs:1878-1897",
"responseSummary": "success/error payload evidenced by ApiResponse<WlanProfilesResponse>; exact handler backend/src/handlers.rs:1878-1897",
"sha256": "f5142f819f6da44230d61c9f5db90c8cb473de954faee08245a2f159d43c8a7e",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1878,
"endLine": 1897
},
"extractorTokens": [
"Json<WlanForgetRequest>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WlanProfilesResponse>; exact handler backend/src/handlers.rs:1878-1897",
"brunoEvidence": [
{
"file": "bruno-api/post_device_wlan_forget.bru",
"method": "POST",
"path": "/api/device-network/wlan/forget",
"bodyMode": "json",
"bodyFields": [
"uuid",
"connection_id"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/device-network/wlan/connect",
"handler": "connect_device_wlan_handler",
"routeEvidence": "backend/src/main.rs:594-595",
"handlerEvidence": "backend/src/handlers.rs:1900-1955",
"requestSummary": "body extractor WlanConnectRequest fields [ssid:String, password:String, auto_join:bool] (models.rs:611); exact handler backend/src/handlers.rs:1900-1955",
"responseSummary": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1900-1955",
"sha256": "9c422666a3db49cdf0efd42873ca681ee158b4fb9183b6211c4f9522f0fe23b5",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1900,
"endLine": 1955
},
"extractorTokens": [
"Json<WlanConnectRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1900-1955",
"brunoEvidence": [
{
"file": "bruno-api/post_device_wlan_connect.bru",
"method": "POST",
"path": "/api/device-network/wlan/connect",
"bodyMode": "json",
"bodyFields": [
"ssid",
"password",
"auto_join"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/device-network/wlan/disconnect",
"handler": "disconnect_device_wlan_handler",
"routeEvidence": "backend/src/main.rs:598-599",
"handlerEvidence": "backend/src/handlers.rs:1958-1991",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1958-1991",
"responseSummary": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1958-1991",
"sha256": "719a709dc8509a35a0e961f55359aa77d07b9e95908d8622e8b369a54ed62505",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1958,
"endLine": 1991
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1958-1991",
"brunoEvidence": [
{
"file": "bruno-api/post_device_wlan_disconnect.bru",
"method": "POST",
"path": "/api/device-network/wlan/disconnect",
"bodyMode": "json",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/device-network/wlan/profile",
"handler": "save_device_wlan_profile_handler",
"routeEvidence": "backend/src/main.rs:602-603",
"handlerEvidence": "backend/src/handlers.rs:1994-2013",
"requestSummary": "body extractor WlanProfileRequest fields [connection_id:String, auto_join:Option<bool>, ipv4_mode:Option<String>, ipv4_address:Option<String>, ipv4_prefix:Option<u8>, ipv4_gateway:Option<String>] (models.rs:620); exact handler backend/src/handlers.rs:1994-2013",
"responseSummary": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1994-2013",
"sha256": "b3180f55af718c0404c190cc47c90be10727269ab9ddc7fee9239d24a6088bcd",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1994,
"endLine": 2013
},
"extractorTokens": [
"Json<WlanProfileRequest>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WlanStatusResponse>; exact handler backend/src/handlers.rs:1994-2013",
"brunoEvidence": [
{
"file": "bruno-api/post_device_wlan_profile.bru",
"method": "POST",
"path": "/api/device-network/wlan/profile",
"bodyMode": "json",
"bodyFields": [
"connection_id",
"auto_join",
"ipv4_mode"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/network/signal-strength",
"handler": "get_signal_strength_handler",
"routeEvidence": "backend/src/main.rs:606-607",
"handlerEvidence": "backend/src/handlers.rs:2016-2030",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2016-2030",
"responseSummary": "success/error payload evidenced by ApiResponse<SignalStrengthResponse>; exact handler backend/src/handlers.rs:2016-2030",
"sha256": "2c04c31da8b4160b8941a524b3016de75c75ae689a28d50f50a664fa5c4af828",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2016,
"endLine": 2030
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<SignalStrengthResponse>; exact handler backend/src/handlers.rs:2016-2030",
"brunoEvidence": [
{
"file": "bruno-api/get_signal_strength.bru",
"method": "GET",
"path": "/api/network/signal-strength",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/location/cell-info",
"handler": "get_cell_location_handler",
"routeEvidence": "backend/src/main.rs:610-611",
"handlerEvidence": "backend/src/handlers.rs:1395-1409",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1395-1409",
"responseSummary": "success/error payload evidenced by ApiResponse<CellLocationResponse>; exact handler backend/src/handlers.rs:1395-1409",
"sha256": "fc748f05e03bf6843eed36f7a4dd6f785811d05e9dd8942fe2d92a4b63c62398",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1395,
"endLine": 1409
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CellLocationResponse>; exact handler backend/src/handlers.rs:1395-1409",
"brunoEvidence": [
{
"file": "bruno-api/get_cell_location_info.bru",
"method": "GET",
"path": "/api/location/cell-info",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/network/operators",
"handler": "get_network_operators",
"routeEvidence": "backend/src/main.rs:614-615",
"handlerEvidence": "backend/src/handlers.rs:1412-1426",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1412-1426",
"responseSummary": "success/error payload evidenced by ApiResponse<OperatorListResponse>; exact handler backend/src/handlers.rs:1412-1426",
"sha256": "d3b30db8a501b92aba2d3038e3642eb020412a2ac11e8286dc1f4860ef3c732b",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1412,
"endLine": 1426
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<OperatorListResponse>; exact handler backend/src/handlers.rs:1412-1426",
"brunoEvidence": [
{
"file": "bruno-api/get_operators.bru",
"method": "GET",
"path": "/api/network/operators",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/network/operators/scan",
"handler": "scan_network_operators",
"routeEvidence": "backend/src/main.rs:618-619",
"handlerEvidence": "backend/src/handlers.rs:1429-1443",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1429-1443",
"responseSummary": "success/error payload evidenced by ApiResponse<OperatorListResponse>; exact handler backend/src/handlers.rs:1429-1443",
"sha256": "4a8bfbd38a943df8dfa9ce69f3bb162874baf7f6f69507d35257c80aff5316e6",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1429,
"endLine": 1443
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<OperatorListResponse>; exact handler backend/src/handlers.rs:1429-1443",
"brunoEvidence": [
{
"file": "bruno-api/scan_operators.bru",
"method": "GET",
"path": "/api/network/operators/scan",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/network/register-manual",
"handler": "register_network_manual",
"routeEvidence": "backend/src/main.rs:622-623",
"handlerEvidence": "backend/src/handlers.rs:1446-1466",
"requestSummary": "body extractor ManualRegisterRequest fields [mccmnc:String] (models.rs:771); exact handler backend/src/handlers.rs:1446-1466",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1446-1466",
"sha256": "8b78cc782499ff836911c3bb5563c85ae53cc4bb05b418a01ff94f4e16916b4c",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1446,
"endLine": 1466
},
"extractorTokens": [
"Json<ManualRegisterRequest>",
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1446-1466",
"brunoEvidence": [
{
"file": "bruno-api/register_operator_manual.bru",
"method": "POST",
"path": "/api/network/register-manual",
"bodyMode": "json",
"bodyFields": [
"mccmnc"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/network/register-auto",
"handler": "register_network_auto",
"routeEvidence": "backend/src/main.rs:626-627",
"handlerEvidence": "backend/src/handlers.rs:1469-1486",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1469-1486",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1469-1486",
"sha256": "431aabcc9852603b66f9a3234afb2e76f6e6cc3845ffb4827874aef16f3744d0",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1469,
"endLine": 1486
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1469-1486",
"brunoEvidence": [
{
"file": "bruno-api/register_operator_auto.bru",
"method": "POST",
"path": "/api/network/register-auto",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/apn",
"handler": "get_apn_list_handler",
"routeEvidence": "backend/src/main.rs:630-631",
"handlerEvidence": "backend/src/handlers.rs:1489-1504",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1489-1504",
"responseSummary": "success/error payload evidenced by ApiResponse<ApnListResponse>; exact handler backend/src/handlers.rs:1489-1504",
"sha256": "798953ca7e3857d0ea96f60b7882dafd3893dd751f8af07afea7707dc1145631",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1489,
"endLine": 1504
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<ApnListResponse>; exact handler backend/src/handlers.rs:1489-1504",
"brunoEvidence": [
{
"file": "bruno-api/get_apn_list.bru",
"method": "GET",
"path": "/api/apn",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/apn",
"handler": "set_apn_handler",
"routeEvidence": "backend/src/main.rs:630-632",
"handlerEvidence": "backend/src/handlers.rs:1507-1571",
"requestSummary": "body extractor SetApnRequest fields [context_path:String, apn:Option<String>, protocol:Option<String>, username:Option<String>, password:Option<String>, auth_method:Option<String>] (models.rs:795); exact handler backend/src/handlers.rs:1507-1571",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1507-1571",
"sha256": "6edced468c5f3bcb5181736b235805550d50c76ebf770b7632c6a7a38e65a8d0",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1507,
"endLine": 1571
},
"extractorTokens": [
"Json<SetApnRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:1507-1571",
"brunoEvidence": [
{
"file": "bruno-api/set_apn.bru",
"method": "POST",
"path": "/api/apn",
"bodyMode": "json",
"bodyFields": [
"context_path",
"apn",
"protocol",
"username",
"password",
"auth_method"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/cell-lock",
"handler": "get_cell_lock_status_handler",
"routeEvidence": "backend/src/main.rs:636-637",
"handlerEvidence": "backend/src/handlers.rs:1574-1582",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1574-1582",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:1574-1582; field shape is implementation evidence only",
"sha256": "fe4b4aaedc6e5ccf4d36d0a347b46999ae99290a41efaf0bedf7e37be992591e",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1574,
"endLine": 1582
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:1574-1582; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/get_cell_lock.bru",
"method": "GET",
"path": "/api/cell-lock",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/cell-lock",
"handler": "set_cell_lock_handler",
"routeEvidence": "backend/src/main.rs:636-638",
"handlerEvidence": "backend/src/handlers.rs:1585-1603",
"requestSummary": "body extractor CellLockRequest fields [rat:u8, enable:bool, lock_type:u8, pci:Option<u16>, arfcn:Option<u32>] (models.rs:405); exact handler backend/src/handlers.rs:1585-1603",
"responseSummary": "success/error payload evidenced by ApiResponse<CellLockResult>; exact handler backend/src/handlers.rs:1585-1603",
"sha256": "29ff2739b7d0b58489c537db7c2fc000dabc4ba4251e27ba34e546cf9f9735ce",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1585,
"endLine": 1603
},
"extractorTokens": [
"Json<CellLockRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CellLockResult>; exact handler backend/src/handlers.rs:1585-1603",
"brunoEvidence": [
{
"file": "bruno-api/set_cell_lock_lte.bru",
"method": "POST",
"path": "/api/cell-lock",
"bodyMode": "json",
"bodyFields": [
"rat",
"enable",
"arfcn",
"pci"
]
},
{
"file": "bruno-api/set_cell_lock_nr.bru",
"method": "POST",
"path": "/api/cell-lock",
"bodyMode": "json",
"bodyFields": [
"rat",
"enable",
"arfcn",
"pci"
]
},
{
"file": "bruno-api/unlock_cell_nr.bru",
"method": "POST",
"path": "/api/cell-lock",
"bodyMode": "json",
"bodyFields": [
"rat",
"enable"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/cell-lock/unlock-all",
"handler": "unlock_all_cells_handler",
"routeEvidence": "backend/src/main.rs:642-643",
"handlerEvidence": "backend/src/handlers.rs:1606-1616",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:1606-1616",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:1606-1616; field shape is implementation evidence only",
"sha256": "390162e5ce89c0952897c9a14054e33d502f52ad69a61b6becfe7c47f3c8be5d",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 1606,
"endLine": 1616
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:1606-1616; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/unlock_all_cells.bru",
"method": "POST",
"path": "/api/cell-lock/unlock-all",
"bodyMode": "json",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/data",
"handler": "get_data_status",
"routeEvidence": "backend/src/main.rs:647-648",
"handlerEvidence": "backend/src/handlers.rs:2035-2062",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2035-2062",
"responseSummary": "success/error payload evidenced by ApiResponse<DataConnectionResponse>; exact handler backend/src/handlers.rs:2035-2062",
"sha256": "43f00a519bd67c3a500c709747a29286ccf37bdd96abd83541dcd21c3c476420",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2035,
"endLine": 2062
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<DataConnectionResponse>; exact handler backend/src/handlers.rs:2035-2062",
"brunoEvidence": [
{
"file": "bruno-api/get_data_status.bru",
"method": "GET",
"path": "/api/data",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/data",
"handler": "set_data_status",
"routeEvidence": "backend/src/main.rs:647-649",
"handlerEvidence": "backend/src/handlers.rs:2065-2131",
"requestSummary": "body extractor DataConnectionRequest fields [active:bool] (models.rs:234); exact handler backend/src/handlers.rs:2065-2131",
"responseSummary": "success/error payload evidenced by ApiResponse<DataConnectionResponse>; exact handler backend/src/handlers.rs:2065-2131",
"sha256": "f1653cfe4442172ca80c97d1223ee4bdc6ed739d2f16e620a26285ab58b395b9",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2065,
"endLine": 2131
},
"extractorTokens": [
"Json<DataConnectionRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<DataConnectionResponse>; exact handler backend/src/handlers.rs:2065-2131",
"brunoEvidence": [
{
"file": "bruno-api/set_data_status_disable.bru",
"method": "POST",
"path": "/api/data",
"bodyMode": "json",
"bodyFields": [
"active"
]
},
{
"file": "bruno-api/set_data_status_enable.bru",
"method": "POST",
"path": "/api/data",
"bodyMode": "json",
"bodyFields": [
"active"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/roaming",
"handler": "get_roaming_status_handler",
"routeEvidence": "backend/src/main.rs:653-654",
"handlerEvidence": "backend/src/handlers.rs:2172-2193",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2172-2193",
"responseSummary": "success/error payload evidenced by ApiResponse<RoamingResponse>; exact handler backend/src/handlers.rs:2172-2193",
"sha256": "687ff0cdb729645af41a7b5d6828f1c348da3948163376adca3418e68a7937ae",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2172,
"endLine": 2193
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<RoamingResponse>; exact handler backend/src/handlers.rs:2172-2193",
"brunoEvidence": [
{
"file": "bruno-api/get_roaming_status.bru",
"method": "GET",
"path": "/api/roaming",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/roaming",
"handler": "set_roaming_status_handler",
"routeEvidence": "backend/src/main.rs:653-655",
"handlerEvidence": "backend/src/handlers.rs:2196-2247",
"requestSummary": "body extractor RoamingRequest fields [allowed:bool] (models.rs:244); exact handler backend/src/handlers.rs:2196-2247",
"responseSummary": "success/error payload evidenced by ApiResponse<RoamingResponse>; exact handler backend/src/handlers.rs:2196-2247",
"sha256": "b18b5c87eb24ccc952ff28bbee43f484c4e20c918ddd4f18d043a471ed3309c7",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2196,
"endLine": 2247
},
"extractorTokens": [
"Json<RoamingRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<RoamingResponse>; exact handler backend/src/handlers.rs:2196-2247",
"brunoEvidence": [
{
"file": "bruno-api/set_roaming_enable.bru",
"method": "POST",
"path": "/api/roaming",
"bodyMode": "json",
"bodyFields": [
"allowed"
]
},
{
"file": "bruno-api/set_roaming_disable.bru",
"method": "POST",
"path": "/api/roaming",
"bodyMode": "json",
"bodyFields": [
"allowed"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/airplane-mode",
"handler": "get_airplane_mode_handler",
"routeEvidence": "backend/src/main.rs:659-660",
"handlerEvidence": "backend/src/handlers.rs:2315-2329",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2315-2329",
"responseSummary": "success/error payload evidenced by ApiResponse<AirplaneModeResponse>; exact handler backend/src/handlers.rs:2315-2329",
"sha256": "243c2a63fd99d45cf4729005221137e0b024f72256dbe3ea3ef83bb75bdde620",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2315,
"endLine": 2329
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<AirplaneModeResponse>; exact handler backend/src/handlers.rs:2315-2329",
"brunoEvidence": [
{
"file": "bruno-api/get_airplane_mode.bru",
"method": "GET",
"path": "/api/airplane-mode",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/airplane-mode",
"handler": "set_airplane_mode_handler",
"routeEvidence": "backend/src/main.rs:659-661",
"handlerEvidence": "backend/src/handlers.rs:2250-2312",
"requestSummary": "body extractor AirplaneModeRequest fields [enabled:bool] (models.rs:255); exact handler backend/src/handlers.rs:2250-2312",
"responseSummary": "success/error payload evidenced by ApiResponse<AirplaneModeResponse>; exact handler backend/src/handlers.rs:2250-2312",
"sha256": "5efb8a55c495ea0be28c8845d4fa3dcecdac3e3d770aaa3ae23140da46f8492a",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2250,
"endLine": 2312
},
"extractorTokens": [
"Json<AirplaneModeRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<AirplaneModeResponse>; exact handler backend/src/handlers.rs:2250-2312",
"brunoEvidence": [
{
"file": "bruno-api/set_airplane_mode_disable.bru",
"method": "POST",
"path": "/api/airplane-mode",
"bodyMode": "json",
"bodyFields": [
"enabled"
]
},
{
"file": "bruno-api/set_airplane_mode_enable.bru",
"method": "POST",
"path": "/api/airplane-mode",
"bodyMode": "json",
"bodyFields": [
"enabled"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/baseband/restart",
"handler": "restart_baseband_handler",
"routeEvidence": "backend/src/main.rs:665-666",
"handlerEvidence": "backend/src/handlers.rs:2133-2159",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2133-2159",
"responseSummary": "success/error payload evidenced by ApiResponse<BasebandRestartResponse>; exact handler backend/src/handlers.rs:2133-2159",
"sha256": "ef18782a4b21d5b4ba5c75334f7fb503c697239a06372235139f3844e629f6fc",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2133,
"endLine": 2159
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<BasebandRestartResponse>; exact handler backend/src/handlers.rs:2133-2159",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/baseband/restart/status",
"handler": "get_baseband_restart_status_handler",
"routeEvidence": "backend/src/main.rs:669-670",
"handlerEvidence": "backend/src/handlers.rs:2161-2169",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2161-2169",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:2161-2169; field shape is implementation evidence only",
"sha256": "736cc766f31d5d714dc45f720bc682f377ded3075b4886ec0cb5eb82b2e65cf5",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2161,
"endLine": 2169
},
"extractorTokens": [],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:2161-2169; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/work-mode",
"handler": "get_work_mode_handler",
"routeEvidence": "backend/src/main.rs:674-675",
"handlerEvidence": "backend/src/handlers.rs:352-365",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:352-365",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:352-365; field shape is implementation evidence only",
"sha256": "f2d3dca3f43326f8d0b8da91e01dc98483284a34e2d81ec3602e9fa8e1547ffd",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 352,
"endLine": 365
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:352-365; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/work-mode",
"handler": "set_work_mode_handler",
"routeEvidence": "backend/src/main.rs:674-676",
"handlerEvidence": "backend/src/handlers.rs:368-405",
"requestSummary": "body extractor WorkModeRequest fields [mode:WorkMode, confirm:bool] (models.rs:57); exact handler backend/src/handlers.rs:368-405",
"responseSummary": "success/error payload evidenced by ApiResponse<WorkModeResponse>; exact handler backend/src/handlers.rs:368-405",
"sha256": "cf17a54e0df74a9d41ddc7d847f7339f4fe2392f4c6c04041bf3cad519931c3c",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 368,
"endLine": 405
},
"extractorTokens": [
"Json<WorkModeRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<WorkModeResponse>; exact handler backend/src/handlers.rs:368-405",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/esim/config",
"handler": "get_esim_config_handler",
"routeEvidence": "backend/src/main.rs:680-681",
"handlerEvidence": "backend/src/handlers.rs:456-462",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:456-462",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:456-462; field shape is implementation evidence only",
"sha256": "1be6b526e1a78451fb771cd0ca2ab2013a934d75847157bbf41bd9e2ab359221",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 456,
"endLine": 462
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:456-462; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/esim/config",
"handler": "set_esim_config_handler",
"routeEvidence": "backend/src/main.rs:680-682",
"handlerEvidence": "backend/src/handlers.rs:465-482",
"requestSummary": "body extractor crate::config::EsimConfig fields [lpac_path:String, custom_memory_total_kb:Option<u32>] (config.rs:1660); exact handler backend/src/handlers.rs:465-482",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:465-482; field shape is implementation evidence only",
"sha256": "b497f06687977d9fc9eace182b20a5feb3562b3f6a18583e3e62918cd4e85e79",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 465,
"endLine": 482
},
"extractorTokens": [
"Json<crate::config::EsimConfig>",
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:465-482; field shape is implementation evidence only",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/esim/lpac/status",
"handler": "get_esim_lpac_status_handler",
"routeEvidence": "backend/src/main.rs:686-687",
"handlerEvidence": "backend/src/handlers.rs:408-416",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:408-416",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:408-416; field shape is implementation evidence only",
"sha256": "a4d5143d1f83089b6f29eda71d7dfc499b47d7260492f453eba31f87a64a8241",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 408,
"endLine": 416
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:408-416; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/esim/lpac/repair",
"handler": "repair_esim_lpac_handler",
"routeEvidence": "backend/src/main.rs:690-691",
"handlerEvidence": "backend/src/handlers.rs:419-453",
"requestSummary": "body extractor EsimLpacRepairRequest fields [proxy_prefix:Option<String>, asset_url:Option<String>] (models.rs:153); exact handler backend/src/handlers.rs:419-453",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:419-453; field shape is implementation evidence only",
"sha256": "4d88af6126732e94f424825cd5a3715060973d5aab707f8b9ea9539225199019",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 419,
"endLine": 453
},
"extractorTokens": [
"Json<EsimLpacRepairRequest>",
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:419-453; field shape is implementation evidence only",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/esim/euicc",
"handler": "get_esim_euicc_handler",
"routeEvidence": "backend/src/main.rs:694-695",
"handlerEvidence": "backend/src/handlers.rs:485-521",
"requestSummary": "query extractor std::collections::HashMap<String, String>; exact exact handler backend/src/handlers.rs:485-521",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:485-521; field shape is implementation evidence only",
"sha256": "7bb950b7fe21268d45b57dc7f422cd39b7e542eb76dc6c9a739a83c4f347556e",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 485,
"endLine": 521
},
"extractorTokens": [
"Query<std::collections::HashMap<String, String>>",
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:485-521; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/esim/profiles",
"handler": "get_esim_profiles_handler",
"routeEvidence": "backend/src/main.rs:698-699",
"handlerEvidence": "backend/src/handlers.rs:524-598",
"requestSummary": "query extractor std::collections::HashMap<String, String>; exact exact handler backend/src/handlers.rs:524-598",
"responseSummary": "success/error payload evidenced by ApiResponse<EsimProfilesResponse>; exact handler backend/src/handlers.rs:524-598",
"sha256": "07f60eddaa9d20ff8239c0083b15207aec94530c2e1edf998dc709e39b125062",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 524,
"endLine": 598
},
"extractorTokens": [
"Query<std::collections::HashMap<String, String>>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<EsimProfilesResponse>; exact handler backend/src/handlers.rs:524-598",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/esim/profiles",
"handler": "download_esim_profile_handler",
"routeEvidence": "backend/src/main.rs:698-700",
"handlerEvidence": "backend/src/handlers.rs:803-1071",
"requestSummary": "body extractor EsimDownloadRequest fields [smdp:String, matching_id:String, confirmation_code:Option<String>, imei:Option<String>] (models.rs:174); exact handler backend/src/handlers.rs:803-1071",
"responseSummary": "success/error payload evidenced by ApiResponse<EsimCommandResponse>; exact handler backend/src/handlers.rs:803-1071",
"sha256": "fe41273a15be55b3864e2d8f4dfc65d27686e5cafdc20d972603a5800b7a7043",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 803,
"endLine": 1071
},
"extractorTokens": [
"Json<EsimDownloadRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<EsimCommandResponse>; exact handler backend/src/handlers.rs:803-1071",
"evidenceLevel": "route+handler+model"
},
{
"method": "POST",
"path": "/api/esim/profiles/{iccid}/enable",
"handler": "enable_esim_profile_handler",
"routeEvidence": "backend/src/main.rs:704-705",
"handlerEvidence": "backend/src/handlers.rs:601-726",
"requestSummary": "path extractor String; exact handler backend/src/handlers.rs:601-726",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:601-726; field shape is implementation evidence only",
"sha256": "d54705546ca3bf2afafe9638d2c33ed198255747e19092a1dd6e1697e691ec2d",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 601,
"endLine": 726
},
"extractorTokens": [
"Path<String>",
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:601-726; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/esim/profiles/{iccid}/rename",
"handler": "rename_esim_profile_handler",
"routeEvidence": "backend/src/main.rs:708-709",
"handlerEvidence": "backend/src/handlers.rs:729-750",
"requestSummary": "body extractor EsimRenameRequest fields [name:String] (models.rs:169); path extractor String; exact handler backend/src/handlers.rs:729-750",
"responseSummary": "success/error payload evidenced by ApiResponse<EsimCommandResponse>; exact handler backend/src/handlers.rs:729-750",
"sha256": "0d5cb68158e1e6c2f656a687eb43be6ad936a8d920e0a18262c20195ea08cb65",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 729,
"endLine": 750
},
"extractorTokens": [
"Json<EsimRenameRequest>",
"Path<String>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<EsimCommandResponse>; exact handler backend/src/handlers.rs:729-750",
"evidenceLevel": "route+handler+model"
},
{
"method": "DELETE",
"path": "/api/esim/profiles/{iccid}",
"handler": "delete_esim_profile_handler",
"routeEvidence": "backend/src/main.rs:712-713",
"handlerEvidence": "backend/src/handlers.rs:753-780",
"requestSummary": "path extractor String; exact handler backend/src/handlers.rs:753-780",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:753-780; field shape is implementation evidence only",
"sha256": "8ad25b4826f75d27b2e39e8dee2c2362f47f2c9279ff1bd878ec57e2aa18aaf1",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 753,
"endLine": 780
},
"extractorTokens": [
"Path<String>",
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:753-780; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/calls",
"handler": "get_calls_handler",
"routeEvidence": "backend/src/main.rs:717-718",
"handlerEvidence": "backend/src/handlers.rs:2634-2655",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2634-2655",
"responseSummary": "success/error payload evidenced by ApiResponse<CallListResponse>; exact handler backend/src/handlers.rs:2634-2655",
"sha256": "21e77021b749876bcd614e999f860c7e6826fc9744733cae9cbc65744b839da1",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2634,
"endLine": 2655
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CallListResponse>; exact handler backend/src/handlers.rs:2634-2655",
"brunoEvidence": [
{
"file": "bruno-api/get_calls.bru",
"method": "GET",
"path": "/api/calls",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/call/dial",
"handler": "dial_call_handler",
"routeEvidence": "backend/src/main.rs:721-722",
"handlerEvidence": "backend/src/handlers.rs:2657-2689",
"requestSummary": "body extractor MakeCallRequest fields [phone_number:String] (models.rs:810); exact handler backend/src/handlers.rs:2657-2689",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2657-2689",
"sha256": "c440bb90bb4373b32a57c6c2d40ebbcb8017853f99b0338c444eaa2f19e00d90",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2657,
"endLine": 2689
},
"extractorTokens": [
"Json<MakeCallRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2657-2689",
"brunoEvidence": [
{
"file": "bruno-api/post_call_dial.bru",
"method": "POST",
"path": "/api/call/dial",
"bodyMode": "json",
"bodyFields": [
"phone_number"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/call/hangup",
"handler": "hangup_call_handler",
"routeEvidence": "backend/src/main.rs:725-726",
"handlerEvidence": "backend/src/handlers.rs:2691-2725",
"requestSummary": "body extractor HangupCallRequest fields [path:String] (models.rs:830); exact handler backend/src/handlers.rs:2691-2725",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2691-2725",
"sha256": "cffdc6b2f949af4d1ad38a29693f8c610824bfc2f950540d43399481aa3bb992",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2691,
"endLine": 2725
},
"extractorTokens": [
"Json<HangupCallRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2691-2725",
"brunoEvidence": [
{
"file": "bruno-api/post_call_hangup.bru",
"method": "POST",
"path": "/api/call/hangup",
"bodyMode": "json",
"bodyFields": [
"path"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/call/hangup-all",
"handler": "hangup_all_calls_handler",
"routeEvidence": "backend/src/main.rs:729-730",
"handlerEvidence": "backend/src/handlers.rs:2727-2760",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2727-2760",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2727-2760",
"sha256": "3af8fab7bb4c04370a679b8dc28c435c60c15bba7f6b68fdccbd06e17698e5b5",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2727,
"endLine": 2760
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2727-2760",
"brunoEvidence": [
{
"file": "bruno-api/post_call_hangup_all.bru",
"method": "POST",
"path": "/api/call/hangup-all",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/call/answer",
"handler": "answer_call_handler",
"routeEvidence": "backend/src/main.rs:733-734",
"handlerEvidence": "backend/src/handlers.rs:2762-2789",
"requestSummary": "body extractor HangupCallRequest fields [path:String] (models.rs:830); exact handler backend/src/handlers.rs:2762-2789",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2762-2789",
"sha256": "cfcda6600d9ba27cb94599a4b0cac37ba4c64a6fb1c85806201e17ff7999c765",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2762,
"endLine": 2789
},
"extractorTokens": [
"Json<HangupCallRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2762-2789",
"brunoEvidence": [
{
"file": "bruno-api/post_call_answer.bru",
"method": "POST",
"path": "/api/call/answer",
"bodyMode": "json",
"bodyFields": [
"path"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/call/volume",
"handler": "get_call_volume_handler",
"routeEvidence": "backend/src/main.rs:737-738",
"handlerEvidence": "backend/src/handlers.rs:2899-2906",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2899-2906",
"responseSummary": "success/error payload evidenced by ApiResponse<CallVolumeResponse>; exact handler backend/src/handlers.rs:2899-2906",
"sha256": "4f96c358e70ba5b394df486073b9aa4568634b6f17204a1e1beb46eaa65b6113",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2899,
"endLine": 2906
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CallVolumeResponse>; exact handler backend/src/handlers.rs:2899-2906",
"brunoEvidence": [
{
"file": "bruno-api/get_call_volume.bru",
"method": "GET",
"path": "/api/call/volume",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/call/volume",
"handler": "set_call_volume_handler",
"routeEvidence": "backend/src/main.rs:737-739",
"handlerEvidence": "backend/src/handlers.rs:2908-2922",
"requestSummary": "body extractor SetCallVolumeRequest fields [speaker_volume:Option<u8>, microphone_volume:Option<u8>, muted:Option<bool>] (models.rs:856); exact handler backend/src/handlers.rs:2908-2922",
"responseSummary": "success/error payload evidenced by ApiResponse<CallVolumeResponse>; exact handler backend/src/handlers.rs:2908-2922",
"sha256": "9f2e624358e53aaf0adb75e83962b587bd522906d56e597ae9893722505ab582",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2908,
"endLine": 2922
},
"extractorTokens": [
"Json<SetCallVolumeRequest>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CallVolumeResponse>; exact handler backend/src/handlers.rs:2908-2922",
"brunoEvidence": [
{
"file": "bruno-api/set_call_volume.bru",
"method": "POST",
"path": "/api/call/volume",
"bodyMode": "json",
"bodyFields": [
"speaker_volume",
"microphone_volume",
"muted"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/call/forwarding",
"handler": "get_call_forwarding_handler",
"routeEvidence": "backend/src/main.rs:743-744",
"handlerEvidence": "backend/src/handlers.rs:2924-2931",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2924-2931",
"responseSummary": "success/error payload evidenced by ApiResponse<CallForwardingResponse>; exact handler backend/src/handlers.rs:2924-2931",
"sha256": "f7916eb4c5c484e5df16a44890308b546788b4f281784dc754c6160047786712",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2924,
"endLine": 2931
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CallForwardingResponse>; exact handler backend/src/handlers.rs:2924-2931",
"brunoEvidence": [
{
"file": "bruno-api/get_call_forwarding.bru",
"method": "GET",
"path": "/api/call/forwarding",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/call/forwarding",
"handler": "set_call_forwarding_handler",
"routeEvidence": "backend/src/main.rs:743-745",
"handlerEvidence": "backend/src/handlers.rs:2933-2943",
"requestSummary": "body extractor SetCallForwardingRequest fields [forward_type:String, number:String, timeout:Option<u16>] (models.rs:891); exact handler backend/src/handlers.rs:2933-2943",
"responseSummary": "success/error payload evidenced by ApiResponse<CallForwardingResponse>; exact handler backend/src/handlers.rs:2933-2943",
"sha256": "ddc8b848bccd96aa0485aed3d8ae828cb0c22f0199fb5e98e22dda87ef866a3d",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2933,
"endLine": 2943
},
"extractorTokens": [
"Json<SetCallForwardingRequest>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CallForwardingResponse>; exact handler backend/src/handlers.rs:2933-2943",
"brunoEvidence": [
{
"file": "bruno-api/set_call_forwarding.bru",
"method": "POST",
"path": "/api/call/forwarding",
"bodyMode": "json",
"bodyFields": [
"forward_type",
"number"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/call/settings",
"handler": "get_call_settings_handler",
"routeEvidence": "backend/src/main.rs:749-750",
"handlerEvidence": "backend/src/handlers.rs:2852-2866",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2852-2866",
"responseSummary": "success/error payload evidenced by ApiResponse<CallSettingsResponse>; exact handler backend/src/handlers.rs:2852-2866",
"sha256": "893ccecb6c077f7e4c25829113a41bc1d7ddc9766fd813433f0653e32e62f544",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2852,
"endLine": 2866
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CallSettingsResponse>; exact handler backend/src/handlers.rs:2852-2866",
"brunoEvidence": [
{
"file": "bruno-api/get_call_settings.bru",
"method": "GET",
"path": "/api/call/settings",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/call/settings",
"handler": "set_call_settings_handler",
"routeEvidence": "backend/src/main.rs:749-751",
"handlerEvidence": "backend/src/handlers.rs:2868-2897",
"requestSummary": "body extractor SetCallSettingRequest fields [property:String, value:String] (models.rs:875); exact handler backend/src/handlers.rs:2868-2897",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2868-2897",
"sha256": "55ab650b3c53b78a3b80606e57d1e96261c5f88c27554c9181f8cd91e212441e",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2868,
"endLine": 2897
},
"extractorTokens": [
"Json<SetCallSettingRequest>",
"State<Arc<Connection>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2868-2897",
"brunoEvidence": [
{
"file": "bruno-api/set_call_settings.bru",
"method": "POST",
"path": "/api/call/settings",
"bodyMode": "json",
"bodyFields": [
"property",
"value"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/call/history",
"handler": "get_call_history_handler",
"routeEvidence": "backend/src/main.rs:755-756",
"handlerEvidence": "backend/src/handlers.rs:2791-2813",
"requestSummary": "query extractor CallHistoryRequest fields [limit:i64, offset:i64] (models.rs:835); exact handler backend/src/handlers.rs:2791-2813",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<CallHistoryResponse>>); exact handler backend/src/handlers.rs:2791-2813",
"sha256": "1def94db4c3d848ebba26d285882e36be6d0ce3a61b525d36b120d9b1a11740a",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2791,
"endLine": 2813
},
"extractorTokens": [
"Json<ApiResponse<CallHistoryResponse>>",
"Query<CallHistoryRequest>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<CallHistoryResponse>>); exact handler backend/src/handlers.rs:2791-2813",
"evidenceLevel": "route+handler+model"
},
{
"method": "DELETE",
"path": "/api/call/history/{id}",
"handler": "delete_call_history_handler",
"routeEvidence": "backend/src/main.rs:759-760",
"handlerEvidence": "backend/src/handlers.rs:2815-2832",
"requestSummary": "path extractor i64; exact handler backend/src/handlers.rs:2815-2832",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2815-2832",
"sha256": "defa60d157769310f419da59b4abff5813c6e2ebc790b46d03881e305df44971",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2815,
"endLine": 2832
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"Path<i64>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2815-2832",
"brunoEvidence": [
{
"file": "bruno-api/delete_call_history.bru",
"method": "DELETE",
"path": "/api/call/history/1",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/call/history/clear",
"handler": "clear_call_history_handler",
"routeEvidence": "backend/src/main.rs:763-764",
"handlerEvidence": "backend/src/handlers.rs:2834-2850",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2834-2850",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2834-2850",
"sha256": "b0e0002012256b5dba375fdc2f747d07923f191029ff960b09297ddc2a521e73",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2834,
"endLine": 2850
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2834-2850",
"brunoEvidence": [
{
"file": "bruno-api/clear_call_history.bru",
"method": "POST",
"path": "/api/call/history/clear",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/ims/status",
"handler": "get_ims_status_handler",
"routeEvidence": "backend/src/main.rs:767-768",
"handlerEvidence": "backend/src/handlers.rs:2945-2952",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2945-2952",
"responseSummary": "success/error payload evidenced by ApiResponse<ImsStatusResponse>; exact handler backend/src/handlers.rs:2945-2952",
"sha256": "e533ac5c9e7bc694faa94eaddc7de74e75c53270478480e0c53a1031f5087ba1",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2945,
"endLine": 2952
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<ImsStatusResponse>; exact handler backend/src/handlers.rs:2945-2952",
"brunoEvidence": [
{
"file": "bruno-api/get_ims_status.bru",
"method": "GET",
"path": "/api/ims/status",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/voicemail/status",
"handler": "get_voicemail_status_handler",
"routeEvidence": "backend/src/main.rs:771-772",
"handlerEvidence": "backend/src/handlers.rs:2954-2961",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2954-2961",
"responseSummary": "success/error payload evidenced by ApiResponse<VoicemailStatusResponse>; exact handler backend/src/handlers.rs:2954-2961",
"sha256": "837b8fbc971099b904d594fd605ff70aa3f1242a3f26365db95a479d885b33c3",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2954,
"endLine": 2961
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<VoicemailStatusResponse>; exact handler backend/src/handlers.rs:2954-2961",
"brunoEvidence": [
{
"file": "bruno-api/get_voicemail_status.bru",
"method": "GET",
"path": "/api/voicemail/status",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/sms/send",
"handler": "send_sms_handler",
"routeEvidence": "backend/src/main.rs:776-777",
"handlerEvidence": "backend/src/handlers.rs:2373-2404",
"requestSummary": "body extractor SendSmsRequest fields [phone_number:String, content:String] (models.rs:912); exact handler backend/src/handlers.rs:2373-2404",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2373-2404",
"sha256": "6cd7eaa5e1a1f939704cadb96de5c47ac7df8c63a7d87018cf2f0ed8fbcdb156",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2373,
"endLine": 2404
},
"extractorTokens": [
"Json<SendSmsRequest>",
"State<Arc<Connection>>",
"State<Arc<Database>>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:2373-2404",
"brunoEvidence": [
{
"file": "bruno-api/post_sms_send.bru",
"method": "POST",
"path": "/api/sms/send",
"bodyMode": "json",
"bodyFields": [
"phone_number",
"content"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "GET",
"path": "/api/sms/list",
"handler": "get_sms_list_handler",
"routeEvidence": "backend/src/main.rs:780-781",
"handlerEvidence": "backend/src/handlers.rs:2407-2434",
"requestSummary": "query extractor SmsListRequest fields [limit:i64, offset:i64, direction:Option<String>] (models.rs:918); exact handler backend/src/handlers.rs:2407-2434",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<SmsListResponse>>); exact handler backend/src/handlers.rs:2407-2434",
"sha256": "abbc14adc02b2f5f0c0cf11a9bbac9ceeddf12871a9be8a00b9e9967923d3576",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2407,
"endLine": 2434
},
"extractorTokens": [
"Json<ApiResponse<SmsListResponse>>",
"Query<SmsListRequest>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<SmsListResponse>>); exact handler backend/src/handlers.rs:2407-2434",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/sms/conversation",
"handler": "get_sms_conversation_handler",
"routeEvidence": "backend/src/main.rs:784-785",
"handlerEvidence": "backend/src/handlers.rs:2437-2458",
"requestSummary": "query extractor SmsConversationRequest fields [phone_number:String, limit:i64] (models.rs:927); exact handler backend/src/handlers.rs:2437-2458",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<SmsListResponse>>); exact handler backend/src/handlers.rs:2437-2458",
"sha256": "e0747d062889fe8caf7b16d6f394c1a3a4f10148f8df3e2b0b09c80e345bb3da",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2437,
"endLine": 2458
},
"extractorTokens": [
"Json<ApiResponse<SmsListResponse>>",
"Query<SmsConversationRequest>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<SmsListResponse>>); exact handler backend/src/handlers.rs:2437-2458",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/sms/stats",
"handler": "get_sms_stats_handler",
"routeEvidence": "backend/src/main.rs:788-789",
"handlerEvidence": "backend/src/handlers.rs:2461-2477",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2461-2477",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<SmsStatsResponse>>); exact handler backend/src/handlers.rs:2461-2477",
"sha256": "bd62f399815cb0d1f41cf895ce32e921dd10bc8cde5b30ed95ba9b46a629b9eb",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2461,
"endLine": 2477
},
"extractorTokens": [
"Json<ApiResponse<SmsStatsResponse>>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<SmsStatsResponse>>); exact handler backend/src/handlers.rs:2461-2477",
"brunoEvidence": [
{
"file": "bruno-api/get_sms_stats.bru",
"method": "GET",
"path": "/api/sms/stats",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/sms/batch-delete",
"handler": "delete_sms_batch_handler",
"routeEvidence": "backend/src/main.rs:792-793",
"handlerEvidence": "backend/src/handlers.rs:2551-2578",
"requestSummary": "body extractor SmsBatchDeleteRequest fields [ids:Vec<i64>, phone_numbers:Vec<String>] (models.rs:934); exact handler backend/src/handlers.rs:2551-2578",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2551-2578",
"sha256": "94c5c834874012034e8bcd6ba0b03f8cd24fb283c3682129568bcbada59d1609",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2551,
"endLine": 2578
},
"extractorTokens": [
"Json<SmsBatchDeleteRequest>",
"Json<ApiResponse<serde_json::Value>>",
"State<AppState>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2551-2578",
"evidenceLevel": "route+handler+model"
},
{
"method": "DELETE",
"path": "/api/sms/conversation/{phone_number}",
"handler": "delete_sms_conversation_handler",
"routeEvidence": "backend/src/main.rs:796-797",
"handlerEvidence": "backend/src/handlers.rs:2528-2548",
"requestSummary": "path extractor String; exact handler backend/src/handlers.rs:2528-2548",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2528-2548",
"sha256": "8abd673088da872031588a6449bba27fc95aac6d74a418eed143adbd1fc8166a",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2528,
"endLine": 2548
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"Path<String>",
"State<AppState>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2528-2548",
"evidenceLevel": "route+handler"
},
{
"method": "DELETE",
"path": "/api/sms/message/{id}",
"handler": "delete_sms_message_handler",
"routeEvidence": "backend/src/main.rs:800-801",
"handlerEvidence": "backend/src/handlers.rs:2508-2525",
"requestSummary": "path extractor i64; exact handler backend/src/handlers.rs:2508-2525",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2508-2525",
"sha256": "8edc9f89854b5c8d8150cb04d5d26935c5bf3131db2cc459a32966c24c6c37f6",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2508,
"endLine": 2525
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"Path<i64>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2508-2525",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/sms/clear",
"handler": "clear_sms_handler",
"routeEvidence": "backend/src/main.rs:804-805",
"handlerEvidence": "backend/src/handlers.rs:2480-2505",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:2480-2505",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2480-2505",
"sha256": "8c536214c43b65fc5ae19a81c26c7f3b007d6da6eada9f3908f0f9ddcd81bb57",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 2480,
"endLine": 2505
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"State<AppState>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:2480-2505",
"brunoEvidence": [
{
"file": "bruno-api/post_sms_clear.bru",
"method": "POST",
"path": "/api/sms/clear",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/stats",
"handler": "get_system_stats",
"routeEvidence": "backend/src/main.rs:808-808",
"handlerEvidence": "backend/src/handlers.rs:3272-3288",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3272-3288",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:3272-3288; field shape is implementation evidence only",
"sha256": "94834f33d10be4b67c6dbc13d948ea17094235847d6e6cab92f426ff56f8af51",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3272,
"endLine": 3288
},
"extractorTokens": [
"State<Arc<Connection>>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:3272-3288; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/get_stats.bru",
"method": "GET",
"path": "/api/stats",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/stats/cpu",
"handler": "get_cpu_info",
"routeEvidence": "backend/src/main.rs:809-809",
"handlerEvidence": "backend/src/handlers.rs:3291-3302",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3291-3302",
"responseSummary": "success/error payload evidenced by ApiResponse<CpuInfo>; exact handler backend/src/handlers.rs:3291-3302",
"sha256": "9f24be45c5c8df7a153d7542ec26c95a0a92af09ff5246e3650d985adb634b77",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3291,
"endLine": 3302
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<CpuInfo>; exact handler backend/src/handlers.rs:3291-3302",
"brunoEvidence": [
{
"file": "bruno-api/get_cpu_info.bru",
"method": "GET",
"path": "/api/stats/cpu",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/connectivity",
"handler": "get_connectivity_check",
"routeEvidence": "backend/src/main.rs:811-812",
"handlerEvidence": "backend/src/handlers.rs:3305-3322",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3305-3322",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<ConnectivityCheckResponse>>); exact handler backend/src/handlers.rs:3305-3322",
"sha256": "42ba5f81f052b9923867ee194593504b9f390c1972b08483e4bec85c017303a4",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3305,
"endLine": 3322
},
"extractorTokens": [
"Json<ApiResponse<ConnectivityCheckResponse>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<ConnectivityCheckResponse>>); exact handler backend/src/handlers.rs:3305-3322",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/system/reboot",
"handler": "system_reboot",
"routeEvidence": "backend/src/main.rs:815-816",
"handlerEvidence": "backend/src/handlers.rs:3381-3406",
"requestSummary": "body extractor SystemRebootRequest fields [delay_seconds:u32] (models.rs:422); exact handler backend/src/handlers.rs:3381-3406",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:3381-3406; field shape is implementation evidence only",
"sha256": "362737633fd01332829b2623f8aa0bd398846a3648fb431f70c161ee1bb6fe1e",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3381,
"endLine": 3406
},
"extractorTokens": [
"Json<SystemRebootRequest>",
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:3381-3406; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/post_system_reboot.bru",
"method": "POST",
"path": "/api/system/reboot",
"bodyMode": "json",
"bodyFields": [
"delay_seconds"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/service/restart",
"handler": "restart_service_handler",
"routeEvidence": "backend/src/main.rs:819-820",
"handlerEvidence": "backend/src/handlers.rs:3578-3601",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3578-3601",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:3578-3601; field shape is implementation evidence only",
"sha256": "712a81c6cca94e0cd2911c324c35cfbb27ed88688f8a119783105e912bceec8b",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3578,
"endLine": 3601
},
"extractorTokens": [
"State<AppState>"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:3578-3601; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/notifications/config",
"handler": "get_notification_config_handler",
"routeEvidence": "backend/src/main.rs:824-825",
"handlerEvidence": "backend/src/handlers.rs:3641-3652",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3641-3652",
"responseSummary": "Rust return ( StatusCode, Json<ApiResponse<crate::config::NotificationConfig>>, ); exact handler backend/src/handlers.rs:3641-3652",
"sha256": "96344b8b2d1b881879c78c33a954a6a7af4de9aa59ffc1d1ef77a4ebc980e277",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3641,
"endLine": 3652
},
"extractorTokens": [
"Json<ApiResponse<crate::config::NotificationConfig>>",
"State<Arc<ConfigManager>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return ( StatusCode, Json<ApiResponse<crate::config::NotificationConfig>>, ); exact handler backend/src/handlers.rs:3641-3652",
"brunoEvidence": [
{
"file": "bruno-api/get_notification_config.bru",
"method": "GET",
"path": "/api/notifications/config",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/notifications/config",
"handler": "set_notification_config_handler",
"routeEvidence": "backend/src/main.rs:824-826",
"handlerEvidence": "backend/src/handlers.rs:3655-3672",
"requestSummary": "body extractor crate::config::NotificationConfig fields [version:u8, channels:Vec<NotificationChannelInstance>, rules:Vec<NotificationRule>, log_cleanup:NotificationLogCleanupConfig] (config.rs:548); exact handler backend/src/handlers.rs:3655-3672",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3655-3672",
"sha256": "5fc4fbfff68050e0887b051bb111a78b3d3805dfc32b685414f4178333285f3e",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3655,
"endLine": 3672
},
"extractorTokens": [
"Json<crate::config::NotificationConfig>",
"Json<ApiResponse<serde_json::Value>>",
"State<Arc<ConfigManager>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3655-3672",
"brunoEvidence": [
{
"file": "bruno-api/set_notification_config.bru",
"method": "POST",
"path": "/api/notifications/config",
"bodyMode": "json",
"bodyFields": [
"webhook",
"bark"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/notifications/test/{channel}",
"handler": "test_notification_channel_handler",
"routeEvidence": "backend/src/main.rs:830-831",
"handlerEvidence": "backend/src/handlers.rs:3675-3704",
"requestSummary": "path extractor String; exact handler backend/src/handlers.rs:3675-3704",
"responseSummary": "Rust return ( StatusCode, Json<ApiResponse<crate::models::WebhookTestResponse>>, ); exact handler backend/src/handlers.rs:3675-3704",
"sha256": "df28427afab1724aa28b0e28f39b7707778422f086b9ca9bd8ac8ec8e5c909e5",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3675,
"endLine": 3704
},
"extractorTokens": [
"Json<ApiResponse<crate::models::WebhookTestResponse>>",
"Path<String>",
"State<Arc<NotificationSender>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return ( StatusCode, Json<ApiResponse<crate::models::WebhookTestResponse>>, ); exact handler backend/src/handlers.rs:3675-3704",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/notifications/logs",
"handler": "get_notification_logs_handler",
"routeEvidence": "backend/src/main.rs:835-836",
"handlerEvidence": "backend/src/handlers.rs:3709-3734",
"requestSummary": "query extractor NotificationLogQuery fields [event_type:String, status:String, q:String, start_date:String, end_date:String, limit:i64, offset:i64] (handlers.rs:3607); exact handler backend/src/handlers.rs:3709-3734",
"responseSummary": "Rust return ( StatusCode, Json<ApiResponse<crate::db::NotificationLogsResponse>>, ); exact handler backend/src/handlers.rs:3709-3734",
"sha256": "da933f5e679cb9e14580b82b75a4caae71e26db4b2e9f57f32b99c1d472bf005",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3709,
"endLine": 3734
},
"extractorTokens": [
"Json<ApiResponse<crate::db::NotificationLogsResponse>>",
"Query<NotificationLogQuery>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return ( StatusCode, Json<ApiResponse<crate::db::NotificationLogsResponse>>, ); exact handler backend/src/handlers.rs:3709-3734",
"evidenceLevel": "route+handler+model"
},
{
"method": "POST",
"path": "/api/notifications/logs/clear",
"handler": "clear_notification_logs_handler",
"routeEvidence": "backend/src/main.rs:839-840",
"handlerEvidence": "backend/src/handlers.rs:3737-3760",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3737-3760",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3737-3760",
"sha256": "04de36a4268a3ab6f30354da995a73fb44689d28a2dcd4945548b3b1a89c64d3",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3737,
"endLine": 3760
},
"extractorTokens": [
"Json<NotificationLogClearRequest>",
"Json<ApiResponse<serde_json::Value>>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3737-3760",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/notifications/queue",
"handler": "get_notification_queue_handler",
"routeEvidence": "backend/src/main.rs:843-844",
"handlerEvidence": "backend/src/notification_queue.rs:24-41",
"requestSummary": "query extractor NotificationQueueQuery fields [limit:i64] (notification_queue.rs:14); exact handler backend/src/notification_queue.rs:24-41",
"responseSummary": "Rust return ( StatusCode, Json<ApiResponse<crate::db::NotificationQueueResponse>>, ); exact handler backend/src/notification_queue.rs:24-41",
"sha256": "babc88061bcb3386c8394818ccafe784c4c3fd32dd3626370faa0cf0f7652f86",
"handlerRange": {
"file": "backend/src/notification_queue.rs",
"startLine": 24,
"endLine": 41
},
"extractorTokens": [
"Json<ApiResponse<crate::db::NotificationQueueResponse>>",
"Query<NotificationQueueQuery>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return ( StatusCode, Json<ApiResponse<crate::db::NotificationQueueResponse>>, ); exact handler backend/src/notification_queue.rs:24-41",
"evidenceLevel": "route+handler+model"
},
{
"method": "POST",
"path": "/api/notifications/queue/retry-all",
"handler": "retry_all_notification_queue_handler",
"routeEvidence": "backend/src/main.rs:847-848",
"handlerEvidence": "backend/src/notification_queue.rs:84-100",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/notification_queue.rs:84-100",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:84-100",
"sha256": "f58e1be1cbf6a022663038bdbc76ec7c6df7c0bbcba6f13ea16faf25f03dcd34",
"handlerRange": {
"file": "backend/src/notification_queue.rs",
"startLine": 84,
"endLine": 100
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:84-100",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/notifications/queue/clear",
"handler": "clear_notification_queue_handler",
"routeEvidence": "backend/src/main.rs:851-852",
"handlerEvidence": "backend/src/notification_queue.rs:103-119",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/notification_queue.rs:103-119",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:103-119",
"sha256": "2501068f6741e02ed9dfb0475191acfa80ccc81f3cf9b8d2152920c78b7006f1",
"handlerRange": {
"file": "backend/src/notification_queue.rs",
"startLine": 103,
"endLine": 119
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:103-119",
"evidenceLevel": "route+handler"
},
{
"method": "DELETE",
"path": "/api/notifications/queue/{id}",
"handler": "delete_notification_queue_item_handler",
"routeEvidence": "backend/src/main.rs:855-856",
"handlerEvidence": "backend/src/notification_queue.rs:64-81",
"requestSummary": "path extractor i64; exact handler backend/src/notification_queue.rs:64-81",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:64-81",
"sha256": "6b845ad2da8f319d8cfa2cb208361901c5a3e852027d9cb96bd54bcd5b27b034",
"handlerRange": {
"file": "backend/src/notification_queue.rs",
"startLine": 64,
"endLine": 81
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"Path<i64>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:64-81",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/notifications/queue/{id}/retry",
"handler": "retry_notification_queue_item_handler",
"routeEvidence": "backend/src/main.rs:859-860",
"handlerEvidence": "backend/src/notification_queue.rs:44-61",
"requestSummary": "path extractor i64; exact handler backend/src/notification_queue.rs:44-61",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:44-61",
"sha256": "068be5777b9d8f78a7d72c2368b788ab23e6ae1de4d4ab110596783be869d967",
"handlerRange": {
"file": "backend/src/notification_queue.rs",
"startLine": 44,
"endLine": 61
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"Path<i64>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/notification_queue.rs:44-61",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/automation/config",
"handler": "get_automation_config_handler",
"routeEvidence": "backend/src/main.rs:864-865",
"handlerEvidence": "backend/src/handlers.rs:3968-3979",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3968-3979",
"responseSummary": "Rust return ( StatusCode, Json<ApiResponse<crate::config::AutomationConfig>>, ); exact handler backend/src/handlers.rs:3968-3979",
"sha256": "eed75ffb9545cf5e08d2bc7ae01ead9830e9457842ce87613f8bdbad8d2b3bba",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3968,
"endLine": 3979
},
"extractorTokens": [
"Json<ApiResponse<crate::config::AutomationConfig>>",
"State<Arc<ConfigManager>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return ( StatusCode, Json<ApiResponse<crate::config::AutomationConfig>>, ); exact handler backend/src/handlers.rs:3968-3979",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/automation/config",
"handler": "set_automation_config_handler",
"routeEvidence": "backend/src/main.rs:864-866",
"handlerEvidence": "backend/src/handlers.rs:3982-3999",
"requestSummary": "body extractor crate::config::AutomationConfig fields [enabled:bool, tasks:Vec<AutomationTask>] (config.rs:1394); exact handler backend/src/handlers.rs:3982-3999",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3982-3999",
"sha256": "7f324660f7624a52d5521b4d2a15dbb099cf5a4c518b662a0f7d776f68a33c97",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3982,
"endLine": 3999
},
"extractorTokens": [
"Json<crate::config::AutomationConfig>",
"Json<ApiResponse<serde_json::Value>>",
"State<Arc<ConfigManager>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:3982-3999",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/automation/logs",
"handler": "get_automation_logs_handler",
"routeEvidence": "backend/src/main.rs:870-871",
"handlerEvidence": "backend/src/handlers.rs:4002-4027",
"requestSummary": "query extractor AutomationLogQuery fields [task_type:String, status:String, q:String, start_date:String, end_date:String, limit:i64, offset:i64] (handlers.rs:3938); exact handler backend/src/handlers.rs:4002-4027",
"responseSummary": "Rust return ( StatusCode, Json<ApiResponse<crate::db::AutomationLogsResponse>>, ); exact handler backend/src/handlers.rs:4002-4027",
"sha256": "b6cacc95a374e31ad4fb1141d8a1b002ddb6fb642b6300a501830744ad0a587d",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 4002,
"endLine": 4027
},
"extractorTokens": [
"Json<ApiResponse<crate::db::AutomationLogsResponse>>",
"Query<AutomationLogQuery>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return ( StatusCode, Json<ApiResponse<crate::db::AutomationLogsResponse>>, ); exact handler backend/src/handlers.rs:4002-4027",
"evidenceLevel": "route+handler+model"
},
{
"method": "POST",
"path": "/api/automation/logs/clear",
"handler": "clear_automation_logs_handler",
"routeEvidence": "backend/src/main.rs:874-875",
"handlerEvidence": "backend/src/handlers.rs:4030-4053",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:4030-4053",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:4030-4053",
"sha256": "0912300e74c831ac108f2696eb28a65b5861cd508498330a9a91add6f6781d7e",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 4030,
"endLine": 4053
},
"extractorTokens": [
"Json<AutomationLogClearRequest>",
"Json<ApiResponse<serde_json::Value>>",
"State<Arc<Database>>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:4030-4053",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/automation/test/{task_id}",
"handler": "test_automation_task_handler",
"routeEvidence": "backend/src/main.rs:878-879",
"handlerEvidence": "backend/src/handlers.rs:4056-4146",
"requestSummary": "path extractor String; exact handler backend/src/handlers.rs:4056-4146",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:4056-4146",
"sha256": "091db790a51ab1855cc1d96b0a07e5c1fc6570102050382abab2535ea5d2034e",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 4056,
"endLine": 4146
},
"extractorTokens": [
"Json<ApiResponse<serde_json::Value>>",
"Path<String>",
"State<AppState>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<serde_json::Value>>); exact handler backend/src/handlers.rs:4056-4146",
"evidenceLevel": "route+handler"
},
{
"method": "GET",
"path": "/api/ota/status",
"handler": "get_ota_status_handler",
"routeEvidence": "backend/src/main.rs:882-883",
"handlerEvidence": "backend/src/handlers.rs:3763-3769",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3763-3769",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:3763-3769; field shape is implementation evidence only",
"sha256": "89d8afa94cbad60c4845764679734bf5ef62b1bdf0f64f4e905740d978cce5b0",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3763,
"endLine": 3769
},
"extractorTokens": [],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:3763-3769; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/get_ota_status.bru",
"method": "GET",
"path": "/api/ota/status",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/ota/upload",
"handler": "upload_ota_handler",
"routeEvidence": "backend/src/main.rs:886-887",
"handlerEvidence": "backend/src/handlers.rs:3772-3792",
"requestSummary": "bytes extractor axum::body::Bytes; exact exact handler backend/src/handlers.rs:3772-3792",
"responseSummary": "success/error payload evidenced by ApiResponse<crate::models::OtaUploadResponse>; exact handler backend/src/handlers.rs:3772-3792",
"sha256": "becfb7dc7e9c1355976abcc802d12f03c06d05d035db2203516fee0cc0b12a74",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3772,
"endLine": 3792
},
"extractorTokens": [
"axum::body::Bytes"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<crate::models::OtaUploadResponse>; exact handler backend/src/handlers.rs:3772-3792",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/ota/latest-release",
"handler": "get_latest_ota_release_handler",
"routeEvidence": "backend/src/main.rs:892-893",
"handlerEvidence": "backend/src/handlers.rs:3795-3825",
"requestSummary": "body extractor crate::models::OtaOnlinePrepareRequest fields [proxy_prefix:Option<String>] (models.rs:986); exact handler backend/src/handlers.rs:3795-3825",
"responseSummary": "success/error payload evidenced by ApiResponse<crate::models::OtaLatestReleaseResponse>; exact handler backend/src/handlers.rs:3795-3825",
"sha256": "61083109860620e593336906b5b08360b7694f3553ab6859445166a52cef0314",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3795,
"endLine": 3825
},
"extractorTokens": [
"Json<crate::models::OtaOnlinePrepareRequest>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<crate::models::OtaLatestReleaseResponse>; exact handler backend/src/handlers.rs:3795-3825",
"evidenceLevel": "route+handler+model"
},
{
"method": "POST",
"path": "/api/ota/online-prepare",
"handler": "prepare_online_ota_handler",
"routeEvidence": "backend/src/main.rs:896-897",
"handlerEvidence": "backend/src/handlers.rs:3828-3889",
"requestSummary": "body extractor crate::models::OtaOnlinePrepareRequest fields [proxy_prefix:Option<String>] (models.rs:986); exact handler backend/src/handlers.rs:3828-3889",
"responseSummary": "success/error payload evidenced by ApiResponse<crate::models::OtaUploadResponse>; exact handler backend/src/handlers.rs:3828-3889",
"sha256": "6d70f80714b7f00461ba8eb4a3dc5c7f6056590bed50162031e7c0af8e5371e2",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3828,
"endLine": 3889
},
"extractorTokens": [
"Json<crate::models::OtaOnlinePrepareRequest>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<crate::models::OtaUploadResponse>; exact handler backend/src/handlers.rs:3828-3889",
"evidenceLevel": "route+handler+model"
},
{
"method": "POST",
"path": "/api/ota/apply",
"handler": "apply_ota_handler",
"routeEvidence": "backend/src/main.rs:900-901",
"handlerEvidence": "backend/src/handlers.rs:3892-3911",
"requestSummary": "body extractor crate::models::OtaApplyRequest fields [restart_now:bool] (models.rs:1030); exact handler backend/src/handlers.rs:3892-3911",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:3892-3911",
"sha256": "46c24f90fdb71e52316e32c93e6c37265d79dc4bb2076bbed9c97b92517c3d03",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3892,
"endLine": 3911
},
"extractorTokens": [
"Json<crate::models::OtaApplyRequest>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:3892-3911",
"brunoEvidence": [
{
"file": "bruno-api/post_ota_apply_restart.bru",
"method": "POST",
"path": "/api/ota/apply",
"bodyMode": "json",
"bodyFields": [
"restart_now"
]
},
{
"file": "bruno-api/post_ota_apply.bru",
"method": "POST",
"path": "/api/ota/apply",
"bodyMode": "json",
"bodyFields": [
"restart_now"
]
}
],
"evidenceLevel": "route+handler+model+bruno"
},
{
"method": "POST",
"path": "/api/ota/cancel",
"handler": "cancel_ota_handler",
"routeEvidence": "backend/src/main.rs:904-905",
"handlerEvidence": "backend/src/handlers.rs:3914-3931",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:3914-3931",
"responseSummary": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:3914-3931",
"sha256": "9085b81dc3f8588654d7b258de241d29832afa2c40a9390bbbe9245c069a1603",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 3914,
"endLine": 3931
},
"extractorTokens": [],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<serde_json::Value>; exact handler backend/src/handlers.rs:3914-3931",
"brunoEvidence": [
{
"file": "bruno-api/post_ota_cancel.bru",
"method": "POST",
"path": "/api/ota/cancel",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "POST",
"path": "/api/auth/password",
"handler": "auth::change_password",
"routeEvidence": "backend/src/main.rs:908-909",
"handlerEvidence": "backend/src/auth.rs:491-553",
"requestSummary": "body extractor ChangePasswordRequest fields [new_password:String] (auth.rs:59); exact handler backend/src/auth.rs:491-553",
"responseSummary": "success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:491-553",
"sha256": "ec7372792586fd2ab24eda6fc2fc008b04c567045c6dfc54f9ae24530ce3b113",
"handlerRange": {
"file": "backend/src/auth.rs",
"startLine": 491,
"endLine": 553
},
"extractorTokens": [
"Json<ChangePasswordRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:491-553",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/auth/settings",
"handler": "auth::get_settings",
"routeEvidence": "backend/src/main.rs:912-913",
"handlerEvidence": "backend/src/auth.rs:555-570",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/auth.rs:555-570",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<AuthSettingsResponse>>); exact handler backend/src/auth.rs:555-570",
"sha256": "035bdb5afbefdcb84d93a6f58f94ace658cfd041bea5ac3f41f1d6d32d4eca1f",
"handlerRange": {
"file": "backend/src/auth.rs",
"startLine": 555,
"endLine": 570
},
"extractorTokens": [
"Json<ApiResponse<AuthSettingsResponse>>",
"State<AppState>"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<AuthSettingsResponse>>); exact handler backend/src/auth.rs:555-570",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/auth/settings",
"handler": "auth::set_settings",
"routeEvidence": "backend/src/main.rs:912-914",
"handlerEvidence": "backend/src/auth.rs:572-640",
"requestSummary": "body extractor SecurityConfig fields [password_protection_enabled:bool, password_min_length:u8, password_require_letters:bool, password_require_digits:bool, password_require_symbols:bool, session_ttl_seconds:i64, idle_timeout_seconds:i64] (config.rs:615); exact handler backend/src/auth.rs:572-640",
"responseSummary": "success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:572-640",
"sha256": "10b564c9437defd56e62bb46e622cce512d3cd42ad8fee67699697a7828987e8",
"handlerRange": {
"file": "backend/src/auth.rs",
"startLine": 572,
"endLine": 640
},
"extractorTokens": [
"Json<SecurityConfig>",
"State<AppState>",
"HeaderMap"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:572-640",
"evidenceLevel": "route+handler+model"
},
{
"method": "GET",
"path": "/api/health",
"handler": "health_check",
"routeEvidence": "backend/src/main.rs:923-923",
"handlerEvidence": "backend/src/handlers.rs:65-75",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/handlers.rs:65-75",
"responseSummary": "dynamic-json construction in exact handler backend/src/handlers.rs:65-75; field shape is implementation evidence only",
"sha256": "e169391fd5f376b8602c2164d0070744964b009f367d2f42c8832b9f98faad25",
"handlerRange": {
"file": "backend/src/handlers.rs",
"startLine": 65,
"endLine": 75
},
"extractorTokens": [],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/handlers.rs:65-75; field shape is implementation evidence only",
"brunoEvidence": [
{
"file": "bruno-api/get_health.bru",
"method": "GET",
"path": "/api/health",
"bodyMode": "none",
"bodyFields": []
}
],
"evidenceLevel": "route+handler+bruno"
},
{
"method": "GET",
"path": "/api/auth/status",
"handler": "auth::status",
"routeEvidence": "backend/src/main.rs:925-926",
"handlerEvidence": "backend/src/auth.rs:345-364",
"requestSummary": "none; no body/query/path extractor; exact handler backend/src/auth.rs:345-364",
"responseSummary": "Rust return (StatusCode, Json<ApiResponse<AuthStatusResponse>>); exact handler backend/src/auth.rs:345-364",
"sha256": "0ee683548f9f803687e7162cd5c596b09e36ff0adad03a5cb63c2067ece24aa3",
"handlerRange": {
"file": "backend/src/auth.rs",
"startLine": 345,
"endLine": 364
},
"extractorTokens": [
"Json<ApiResponse<AuthStatusResponse>>",
"State<AppState>",
"HeaderMap"
],
"responseKind": "explicit-return",
"responseTypeEvidence": "Rust return (StatusCode, Json<ApiResponse<AuthStatusResponse>>); exact handler backend/src/auth.rs:345-364",
"evidenceLevel": "route+handler"
},
{
"method": "POST",
"path": "/api/auth/setup",
"handler": "auth::setup",
"routeEvidence": "backend/src/main.rs:929-930",
"handlerEvidence": "backend/src/auth.rs:366-427",
"requestSummary": "body extractor LoginRequest fields [password:String] (auth.rs:54); exact handler backend/src/auth.rs:366-427",
"responseSummary": "success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:366-427",
"sha256": "1c0c5eb2cc77326de57062361dfe9c499aad351d8d3bbd101844c5cd0be43a6f",
"handlerRange": {
"file": "backend/src/auth.rs",
"startLine": 366,
"endLine": 427
},
"extractorTokens": [
"Json<LoginRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:366-427",
"evidenceLevel": "route+handler+model"
},
{
"method": "POST",
"path": "/api/auth/login",
"handler": "auth::login",
"routeEvidence": "backend/src/main.rs:933-934",
"handlerEvidence": "backend/src/auth.rs:429-489",
"requestSummary": "body extractor LoginRequest fields [password:String] (auth.rs:54); exact handler backend/src/auth.rs:429-489",
"responseSummary": "success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:429-489",
"sha256": "defd9444410e5b124ab0d621e7faf70bae335363e7e287738273e9e06cc151a1",
"handlerRange": {
"file": "backend/src/auth.rs",
"startLine": 429,
"endLine": 489
},
"extractorTokens": [
"Json<LoginRequest>",
"State<AppState>"
],
"responseKind": "api-response-payload",
"responseTypeEvidence": "success/error payload evidenced by ApiResponse<Value>; exact handler backend/src/auth.rs:429-489",
"evidenceLevel": "route+handler+model"
},
{
"method": "POST",
"path": "/api/auth/logout",
"handler": "auth::logout",
"routeEvidence": "backend/src/main.rs:937-938",
"handlerEvidence": "backend/src/auth.rs:642-655",
"requestSummary": "none body; HeaderMap carries simadmin_session cookie; exact handler backend/src/auth.rs:642-655; cookie name backend/src/auth.rs:43-43",
"responseSummary": "dynamic-json construction in exact handler backend/src/auth.rs:642-655; field shape is implementation evidence only",
"sha256": "1ccf5c295251b2a22462cc81c3759330b65979cef524facbf2998b712c5daee1",
"handlerRange": {
"file": "backend/src/auth.rs",
"startLine": 642,
"endLine": 655
},
"extractorTokens": [
"State<AppState>",
"HeaderMap"
],
"responseKind": "dynamic-json",
"responseTypeEvidence": "dynamic-json construction in exact handler backend/src/auth.rs:642-655; field shape is implementation evidence only",
"evidenceLevel": "route+handler"
}
],
"snapshotManifest": "upstream-58e2204/manifest.json",
"opaqueIntoResponseCount": 0,
"brunoOperationCount": 67,
"brunoFileCount": 82
}