Parent: Eyevinn/intercom-frontend#638 (admin control panel, epic #280). Broken out by daily-backlog-pr triage on 2026-08-26 — the "kick user" feature needs a backend capability that does not exist today (only remote-mute exists).
Add a backend capability to force-remove a participant from a line.
- New authenticated route in
api_productions.ts (e.g. POST /productions/:id/lines/:lineId/participants/:sessionId/disconnect) that targets a participant by backend sessionId.
- Broadcast an SMB data-channel
EndpointMessage with a new payload (e.g. { forceDisconnect: true }) addressed to the target endpointId so the target client can tear itself down.
- Ensure
production_manager cleanup: mark the session expired / remove it and emit users:change so getUsersForLine no longer returns the participant (drives "others see the user leave").
- Investigate whether SMB endpoint teardown is needed (
smb.ts currently has no delete-endpoint method) or whether signaling the client to close its RTCPeerConnection is sufficient for SMB to reap the endpoint.
Acceptance: endpoint returns 2xx, target session removed from line, data-channel signal emitted, tests added.
Parent: Eyevinn/intercom-frontend#638 (admin control panel, epic #280). Broken out by daily-backlog-pr triage on 2026-08-26 — the "kick user" feature needs a backend capability that does not exist today (only remote-mute exists).
Add a backend capability to force-remove a participant from a line.
api_productions.ts(e.g.POST /productions/:id/lines/:lineId/participants/:sessionId/disconnect) that targets a participant by backendsessionId.EndpointMessagewith a new payload (e.g.{ forceDisconnect: true }) addressed to the targetendpointIdso the target client can tear itself down.production_managercleanup: mark the session expired / remove it and emitusers:changesogetUsersForLineno longer returns the participant (drives "others see the user leave").smb.tscurrently has no delete-endpoint method) or whether signaling the client to close itsRTCPeerConnectionis sufficient for SMB to reap the endpoint.Acceptance: endpoint returns 2xx, target session removed from line, data-channel signal emitted, tests added.