- Shipped
- July 8, 2026 at 9:50 PM UTC
- Author
- Kamo
- Commit
- 99c2386
Softphone SIP credential fixes: - getSipCredentials: map outboundProxyBackup + stunServers (web-phone v2 needs them for WSS failover + ICE/media); throw ProviderException (502) instead of a bare RuntimeException (500) that SipController's catch missed; guard against a wrong-extension SIP identity. Per-member RingCentral connection: - RingCentralTokenResolver: resolve/refresh a member's own token with single-flight (RC rotates refresh tokens), needs-reconnect on a dead token, and revoke-on-disconnect. - OAuthController: **************** — memberId from the session only (self-serve), VoipCalling scope, PKCE; connect callback records the connected extension. - SipController + PhoneProviderFactory: the softphone registers as the member's OWN extension; returns a 200 needsMemberConnection discriminator when unconnected. - MemberVoipConfigController: expose connection status; revoke on reassignment. - New-table reads degrade gracefully if member_voip_oauth_token isn't migrated yet.