Add Televic D-Cerno API client
Build a standalone API client for the Televic D-Cerno AE secured Customer REST API v1.7 as the foundation for future local-streamer integration, leaving existing Bosch behavior unchanged. Reference: https://tcs-static.azurewebsites.net/dcerno-customer-api/D-Cerno1.7/index.html (schema: openapi.txt alongside index.html). Verified API constraints: - Bearer-token authentication; documented HTTP port 9080 without a certificate, HTTPS port 9443 with a certificate. - Read physical seats through /api/room/seats/discussion; read discussion state through /api/discussion/seats. - PUT /api/discussion/seats/{seat} controls microphoneOn and requestingToSpeak independently. - Ordered active speakers and requests are available through /api/discussion/speakers and /api/discussion/requests. No documented request-list reorder operation. - Long-poll /api/notification/events with include-filter and optional minimum-id=last seen id+1; HTTP 204 means no event. Discontinuity signals missed events and requires state reconciliation. Repository constraints: - Existing Bosch-specific integration spans commands, watcher, seat mapping, queue state and published protocol/dashboard status. Reuse existing speaker/PTZ flows instead of duplicating them. - Preserve Bosch compatibility; avoid assigning Televic data to Bosch-specific public fields. - Use existing dependencies where possible; ask before introducing dependencies. Confirmed scope: build a focused, independently tested D-Cerno API client in crates/televic, including token authentication, seat discovery/state, mic/request control and event polling. Runtime provider selection, shared discussion-system boundary and protocol/dashboard integration are out of scope. Hardware validation remains follow-on work when a controller is available. Acceptance criteria for initial slice: - Requests and response models follow the published v1.7 contract. - Token handling is safe, request timeouts distinguish normal calls from long polls, and HTTP/protocol errors are surfaced. - Mock-server tests verify wire formats, authentication, control operations, cursor parameters, no-content polls and error handling. - Relevant formatting, check and tests pass. Hardware validation remains explicitly outstanding until a controller is available. Verified outcome: - Added crates/televic with validated seat numbers, bearer-token handling, discovery/state reads, partial mic/request updates, ordered lists and clear operations, module discovery and cursor-aware event polling. Notification discontinuity is exposed; reconciliation/retry policy is caller-owned. - Defaults use verified TLS, no redirects, 10-second normal and 120-second event timeouts. Custom HTTP transports support private-CA trust; token is omitted from Debug output. - 14 client tests and one compiled README example pass; existing Bosch tests pass (hardware tests remain ignored). - cargo fmt --all --check, cargo check --workspace --offline, cargo check -p televic --all-targets --offline and cargo clippy -p televic --all-targets --offline -- -D warnings pass. - No runtime integration or hardware/HTTPS-controller interoperability claims; those remain follow-on work.
Checklist
3 of 3 complete- Confirm first implementation slice and runtime integration scope.
- Implement the agreed D-Cerno backend slice against the published v1.7 API without regressing Bosch support.
- Verify API wire behavior and failures with mock-server tests; run relevant formatting, checks and tests, and record hardware-validation limitations.
- Area
- Streaming
- Project
- streaming-engines
- Kind
- Feature
- Task ID
tsk_hs3hwq83a5- Updated