veza/apps/web/src/services
senke b8eed72f96 feat(webrtc): coturn ICE config endpoint + frontend wiring + ops template (v1.0.9 item 1.2)
Closes FUNCTIONAL_AUDIT.md §4 #1: WebRTC 1:1 calls had working
signaling but no NAT traversal, so calls between two peers behind
symmetric NAT (corporate firewalls, mobile carrier CGNAT, Incus
container default networking) failed silently after the SDP exchange.

Backend:
  - GET /api/v1/config/webrtc (public) returns {iceServers: [...]}
    built from WEBRTC_STUN_URLS / WEBRTC_TURN_URLS / *_USERNAME /
    *_CREDENTIAL env vars. Half-config (URLs without creds, or vice
    versa) deliberately omits the TURN block — a half-configured TURN
    surfaces auth errors at call time instead of falling back cleanly
    to STUN-only.
  - 4 handler tests cover the matrix.

Frontend:
  - services/api/webrtcConfig.ts caches the config for the page
    lifetime and falls back to the historical hardcoded Google STUN
    if the fetch fails.
  - useWebRTC fetches at mount, hands iceServers synchronously to
    every RTCPeerConnection, exposes a {hasTurn, loaded} hint.
  - CallButton tooltip warns up-front when TURN isn't configured
    instead of letting calls time out silently.

Ops:
  - infra/coturn/turnserver.conf — annotated template with the SSRF-
    safe denied-peer-ip ranges, prometheus exporter, TLS for TURNS,
    static lt-cred-mech (REST-secret rotation deferred to v1.1).
  - infra/coturn/README.md — Incus deploy walkthrough, smoke test
    via turnutils_uclient, capacity rules of thumb.
  - docs/ENV_VARIABLES.md gains a 13bis. WebRTC ICE servers section.

Coturn deployment itself is a separate ops action — this commit lands
the plumbing so the deploy can light up the path with zero code
changes.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 23:38:42 +02:00
..
api feat(webrtc): coturn ICE config endpoint + frontend wiring + ops template (v1.0.9 item 1.2) 2026-04-26 23:38:42 +02:00
generated feat(webrtc): coturn ICE config endpoint + frontend wiring + ops template (v1.0.9 item 1.2) 2026-04-26 23:38:42 +02:00
2fa-service.test.ts test: fix and improve unit tests across multiple features 2026-03-25 23:34:42 +01:00
2fa-service.ts fix: stabilize frontend — 98 TS errors to 0, align API endpoints, optimize bundle 2026-03-24 21:18:49 +01:00
adminService.test.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
adminService.ts feat: UI components, services, utils, i18n, and routing 2026-03-23 15:46:42 +01:00
analyticsService.test.ts feat(analytics): complete backend analytics, remove frontend mocks 2026-02-15 16:21:20 +01:00
analyticsService.ts feat(v0.11.1): F396-F399 frontend advanced analytics components 2026-03-10 17:13:13 +01:00
chatService.test.ts fix: stabilize frontend — 98 TS errors to 0, align API endpoints, optimize bundle 2026-03-24 21:18:49 +01:00
chatService.ts fix: stabilize frontend — 98 TS errors to 0, align API endpoints, optimize bundle 2026-03-24 21:18:49 +01:00
coListeningService.ts feat(v0.10.7): Collaboration Temps Réel F481-F483 2026-03-10 13:34:16 +01:00
commerceService.test.ts fix(tests): cycles 12–18 – corrections services, mocks et design tokens 2026-02-11 09:43:55 +01:00
commerceService.ts feat(frontend): add admin transfer API functions in commerceService 2026-02-23 23:36:09 +01:00
cookieService.ts chore: enable noUncheckedIndexedAccess, isolate ghost MSW handlers, document go-clamd tech debt 2026-02-12 23:12:35 +01:00
csrf.ts fix(web): silence console for expected failures (CSRF, webhooks 5xx) 2026-02-10 19:51:20 +01:00
developerService.test.ts fix(a11y): fix heading hierarchy h1→h3 gaps on 8 pages 2026-03-25 10:14:18 +01:00
developerService.ts feat(developer): connect API keys to real backend (Lot C frontend) 2026-02-20 00:19:58 +01:00
discoverService.ts fix(backend,web): restore audio playback via /stream fallback 2026-04-16 14:52:26 +02:00
distributionService.ts fix: stabilize frontend — 98 TS errors to 0, align API endpoints, optimize bundle 2026-03-24 21:18:49 +01:00
educationService.ts fix: stabilize frontend — 98 TS errors to 0, align API endpoints, optimize bundle 2026-03-24 21:18:49 +01:00
feedService.ts fix(backend,web): restore audio playback via /stream fallback 2026-04-16 14:52:26 +02:00
gearService.ts fix: stabilize frontend — 98 TS errors to 0, align API endpoints, optimize bundle 2026-03-24 21:18:49 +01:00
groupService.test.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
groupService.ts feat(groups): S2 frontend - request join, invite, roles, my groups, MSW handlers 2026-02-21 05:51:29 +01:00
liveService.ts feat(v0.10.6): Livestreaming basique F471-F476 2026-03-10 10:21:57 +01:00
marketplaceService.test.ts fix(tests): cycles 12–18 – corrections services, mocks et design tokens 2026-02-11 09:43:55 +01:00
marketplaceService.ts feat(v0.12.0): F254-F255 frontend marketplace payout and balance UI 2026-03-10 18:52:37 +01:00
offlineQueue.test.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
offlineQueue.ts chore: enable noUncheckedIndexedAccess, isolate ghost MSW handlers, document go-clamd tech debt 2026-02-12 23:12:35 +01:00
productService.ts feat(marketplace): connect CreateProductView to enriched product API 2026-02-22 14:10:26 +01:00
pwa.ts feat(pwa): re-enable service worker with safe caching, add Install App in Settings 2026-02-25 09:56:26 +01:00
requestDeduplication.test.ts chore: consolidate pending changes (Hyperswitch, PostCard, dashboard, stream server, etc.) 2026-02-14 21:45:15 +01:00
requestDeduplication.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
responseCache.test.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
responseCache.ts fix(web): resolve all 568 TypeScript errors — tsc --noEmit now passes with zero errors 2026-02-13 00:32:08 +01:00
roleService.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
searchService.test.ts chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
searchService.ts fix: resolve ts-ignore directives and unsafe type casts 2026-02-12 22:21:55 +01:00
sessionService.test.ts chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
sessionService.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
socialService.test.ts fix(a11y): fix heading hierarchy h1→h3 gaps on 8 pages 2026-03-25 10:14:18 +01:00
socialService.ts feat(social): GET /social/explore, explore tab, feed filters all/following/groups (S1.5, S1.6) 2026-02-21 05:31:12 +01:00
subscriptionService.ts fix: stabilize frontend — 98 TS errors to 0, align API endpoints, optimize bundle 2026-03-24 21:18:49 +01:00
tokenRefresh.test.ts chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
tokenRefresh.ts chore: enable noUncheckedIndexedAccess, isolate ghost MSW handlers, document go-clamd tech debt 2026-02-12 23:12:35 +01:00
tokenStorage.test.ts chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
tokenStorage.ts security: migrate access token to httpOnly cookie (Actions 5.1.1.1-5.1.1.3) 2026-01-16 01:03:23 +01:00
uploadService.test.ts chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
uploadService.ts incus deployement fully implemented, Makefile updated and make fmt ran 2026-01-13 19:47:57 +01:00
userService.test.ts chore(refactor/sumi-migration): commit pending changes — tests, stream server, dist_verification 2026-02-13 19:39:18 +01:00
userService.ts stabilisation commit: while implementing v0.10.5 2026-03-09 19:36:33 +01:00
webhookService.ts fix(web): silence console for expected failures (CSRF, webhooks 5xx) 2026-02-10 19:51:20 +01:00
websocket.ts refactor(frontend): eliminate ~45 'any' types in production code 2026-02-22 17:44:49 +01:00