Commit Graph

292 Commits

Author SHA1 Message Date
zarazaex69
bd09495e8f feat(jitsi): request video after session accept 2026-05-15 18:48:00 +03:00
zarazaex69
714d2f9f48 fix(jitsi): avoid closing session on connect failure 2026-05-15 16:55:25 +03:00
zarazaex69
e86604276d fix(jitsi): transliterate Cyrillic in sanitiseNick 2026-05-15 16:47:16 +03:00
zarazaex69
6276bf0fc6 test(e2e): treat real provider transports as pass-only 2026-05-15 16:47:09 +03:00
zarazaex69
36d1243395 fix(carrier): classify auth provider failures 2026-05-15 16:32:59 +03:00
zarazaex69
9cfb4fd9c3 docs: make jitsi the default recommended provider 2026-05-15 16:15:55 +03:00
zarazaex69
5d54209e24 fix(session): allow providers without default URL 2026-05-15 16:08:28 +03:00
zarazaex69
fa17aefe25 fix(jitsi): send jingle terminate before close 2026-05-15 15:48:48 +03:00
zarazaex69
85a3186703 refactor(jitsi): extract helpers and simplify tests 2026-05-15 15:45:07 +03:00
zarazaex69
eceeaeba92 feat(jitsi): add Jitsi auth provider and engine 2026-05-15 15:37:58 +03:00
zarazaex69
6ba8fcdbe8 test(e2e): mark jazz non-data transports as fail 2026-05-14 19:51:26 +03:00
zarazaex69
f6e654dfce fix(salutejazz): include video tracks in publisher offer 2026-05-14 19:42:54 +03:00
zarazaex69
3c4ae52027 fix(salutejazz): unmute camera after publisher offer 2026-05-14 19:09:35 +03:00
zarazaex69
1c43379448 feat(salutejazz): support ICE and staged video offers 2026-05-14 18:39:10 +03:00
zarazaex69
c6c4fd10a4 test(e2e): restrict jazz pass cases to datachannel 2026-05-14 18:03:57 +03:00
zarazaex69
f16262c485 fix(salutejazz): align request headers and errors 2026-05-14 17:41:29 +03:00
zarazaex69
812ba2a9a2 fix: golangci lint 2026-05-14 05:02:54 +03:00
zarazaex69
31fa1a99ff fix(salutejazz): disable media auto-subscribe support 2026-05-14 05:00:21 +03:00
zarazaex69
9e64cbc506 feat(salutejazz): send track:add before publisher offer 2026-05-14 04:41:02 +03:00
zarazaex69
c69aee3fc4 test(e2e): correct tunnel carrier expectations 2026-05-14 04:27:30 +03:00
zarazaex69
76c709f9a5 fix: golangci lint fix 2026-05-14 04:21:11 +03:00
zarazaex69
b569e08fac test(e2e): cover jazz expectations in real matrix 2026-05-14 04:10:44 +03:00
zarazaex69
763cba2aa0 test(e2e): require wbstream tunnel test to pass 2026-05-14 03:11:53 +03:00
zarazaex69
19df0cef68 test(e2e): relax wbstream tunnel expectations 2026-05-14 03:01:39 +03:00
zarazaex69
b36bee3f0e fix: harden reconnect shutdown and vp8 startup 2026-05-14 02:45:11 +03:00
zarazaex69
1e8f378844 fix(logger): skip logging for "srtp" scope 2026-05-13 22:35:59 +03:00
zarazaex69
adf4b011b9 feat(session): add session open/close and traffic callbacks 2026-05-13 22:18:11 +03:00
zarazaex69
20f2c1397c feat: add timeout to openControlStream function 2026-05-13 22:07:34 +03:00
zarazaex69
bcc6b2ee5c feat: remove unused client ID from config 2026-05-13 20:03:58 +03:00
zarazaex69
465d4bf500 Merge origin/master into refactor/universal-carrier 2026-05-13 19:08:59 +03:00
zarazaex69
4e99073760 fix(provider/wbstream): drop room auto-generation
WB Stream removed the room creation API; gen mode for wbstream no
longer works. Remove the wbstream branch from session.Gen, drop the
auto-generate prompt from srv.sh and the entrypoint fallback, and
update docs to instruct users to create rooms manually at stream.wb.ru.
2026-05-13 18:53:00 +03:00
zarazaex69
cf6490b5e0 feat: add support for reading configuration from YAML file 2026-05-13 17:17:31 +03:00
zarazaex69
359a2d94df feat: add YAML configuration support 2026-05-13 16:37:09 +03:00
zarazaex69
51e6e8a39c refactor: configuration structures instead of 27 arguments 2026-05-13 16:16:56 +03:00
zarazaex69
609b6a4927 fix: implementation fingerprint #52 2026-05-13 15:54:45 +03:00
zarazaex69
65555a47c8 test: port provider unit tests and fix API regressions from master
- Ported unit tests for WB Stream, SaluteJazz, and Telemost API clients
- Ported engine helper tests for SaluteJazz and Goolom
- Fixed missing WB Stream WebSocket URL update (wss://rtc-el-01.wb.ru)
- Corrected SaluteJazz header casing (X-Jazz-AuthType)
- Fixed linting errors (goconst, gosec, lll) in test files
2026-05-12 22:00:30 +03:00
zarazaex69
2d3a1152a1 Merge origin/master into refactor/universal-carrier 2026-05-12 21:33:31 +03:00
zarazaex69
d4d71c6810 refactor(test): adopt Go 1.22 ServeMux in provider mock servers 2026-05-12 21:31:25 +03:00
zarazaex69
922c326533 fix(provider/wbstream): update API endpoints and WebSocket URL
- Switched getToken endpoint to /api-room-manager/v2/room/%s/connection-details
- Updated WebSocket URL to wss://rtc-el-01.wb.ru
- Updated Python PoC scripts to match new endpoints
2026-05-12 21:05:12 +03:00
zarazaex69
6280c91614 fix: CreatePermission spam log 2026-05-11 18:31:44 +03:00
zarazaex69
68a144d6c0 feat: auto-fill engine/url from auth provider defaults
Each auth.Provider now declares DefaultServiceURL() so callers do not
need to know service-specific endpoints. ApplyAuthDefaults fills Engine
and URL from the provider before validation runs — explicit flags always
win, and providers with no default URL require -url to be set explicitly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-11 15:23:20 +03:00
zarazaex69
dc1fe0f19c refactor: replace -carrier with -auth/-engine/-url/-token (stage E)
Break CLI backwards compatibility as planned for refactor/universal-carrier:

- Drop -carrier flag; add -auth (auth provider name), -engine (engine
  name for -auth none), -url and -token (SFU endpoint + access token for
  direct/none auth mode).
- session.Config.Carrier → Auth + Engine + URL + Token.
- session.Gen() is now generic: auth.Get(cfg.Auth).(auth.RoomCreator)
  replaces the hard-coded switch on carrier names.
- Register a "none" carrier in builtin (registerDirect) that bypasses
  auth and connects directly to any engine with caller-supplied URL+Token.
- auth/telemost.Provider.Issue now accepts a raw room-ID hash in addition
  to a full https://telemost.yandex.ru/j/<id> URL.
- Plumb Engine/URL/Token from session.Config through server.Run,
  client.Run/RunWithReady, bringUpLink, link.Config, transport.Config, and
  carrier.Config so the "none" carrier has access to them end-to-end.
- Update all tests and mobile.go call sites.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 13:31:07 +03:00
zarazaex69
d65784ff8c refactor: migrate telemost to engine/goolom + auth/telemost
Decompose the monolithic internal/provider/telemost package into two
orthogonal layers: engine/goolom (Yandex proprietary SFU wire protocol —
WebSocket signaling, dual pub/sub PeerConnections, DataChannel, telemetry)
and auth/telemost (HTTP connection-info fetch → engine.Credentials).

Add engine.Config.Refresh callback so Goolom can obtain fresh peerID and
credentials on every reconnect without a direct dependency on the auth
package. engine_adapter wires the Refresh closure from authProvider.Issue.

Delete internal/provider/ entirely (telemost was the last tenant) and
remove the now-obsolete provider_adapter + its test from builtin.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 13:13:21 +03:00
zarazaex69
d48eb565f5 refactor: migrate jazz to engine/salutejazz + auth/salutejazz
Split the SaluteJazz provider along the same engine/auth seam used for
WB Stream:
- internal/engine/salutejazz — Sber WS+SDP signaling engine (pub/sub
  split, _reliable data channel, length-prefixed DataPacket envelope).
  Consumes URL/Token/Extra[password] from engine.Config; no embedded
  HTTP/auth logic. Registered as engine "salutejazz".
- internal/auth/salutejazz — create-meeting + preconnect flow.
  Implements auth.Provider (Engine() → "salutejazz") and
  auth.RoomCreator. Accepts cfg.RoomURL in "<roomID>:<password>" form
  for join, or empty / "any" / "dummy" for create-on-the-fly, matching
  the legacy provider.

The carrier name "jazz" now goes through registerEngineAuth.
engine.Config gains an Extra map so auth providers can pass engine-
specific fields (password here); engine_adapter forwards
auth.Credentials.Extra into it.

session.Gen for jazz uses the auth.RoomCreator capability. Output now
includes the password ("<roomID>:<password>") — without it the printed
room is not joinable, so the legacy roomID-only output was effectively
broken for the gen flow.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 03:35:51 +03:00
zarazaex69
071106a674 refactor: migrate wbstream to engine/livekit + auth/wbstream
Split the WB Stream provider into two orthogonal pieces:
- internal/engine/livekit — generic LiveKit transport (URL+Token only,
  no service-specific assumptions). Registered as engine "livekit".
- internal/auth/wbstream — WB Stream API flow (guest register, join,
  token exchange). Implements auth.Provider and auth.RoomCreator,
  reports engine "livekit".

The carrier name "wbstream" now goes through registerEngineAuth, which
wires the auth provider to the engine it declares. CLI surface is
unchanged. session.Gen for wbstream calls the RoomCreator directly;
that path will become fully generic in a later step. jazz and telemost
remain on the legacy provider path for now.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 03:28:34 +03:00
zarazaex69
9388a8e494 refactor: introduce engine and auth interfaces
Lay the groundwork for splitting service-specific logic (WB / Jazz /
Telemost API flows) from wire-level transport engines (LiveKit, Goolom,
future Jitsi). An engine takes only URL+Token+Name+network knobs; an
auth provider produces those credentials and reports which engine it
feeds. RoomCreator is an optional capability for the gen mode.

Existing carriers and providers are untouched.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-11 03:20:10 +03:00
zarazaex69
e25eed39a9 Merge remote-tracking branch 'origin/master' into pr-47-merge
# Conflicts:
#	cmd/olcrtc/main.go
#	internal/transport/videochannel/ffmpeg.go
2026-05-11 02:30:16 +03:00
zarazaex69
0723ddf2f5 fix: golangci errors 2026-05-11 02:21:41 +03:00
spkprsnts
b7e758c283 perf(ffmpeg): reduce VPx encoding latency 2026-05-11 03:49:57 +05:00
spkprsnts
ba3d622233 feat(ffmpeg): Add -ffmpeg flag for custom path
- Add -ffmpeg flag for custom path
- Allow FFMPEG_BIN env var to set path
- Update ffmpeg
2026-05-11 03:31:14 +05:00