From 03f57e7fee7085a2aabad4f720053ad82b37a98c Mon Sep 17 00:00:00 2001 From: Kanat Kiialbaev Date: Fri, 15 Sep 2023 04:51:37 -0700 Subject: [PATCH] [FVS-79] pass connection_id to every request (#475) --- .../open_api/coordinator_client_open_api.dart | 34 +++++++++++++------ .../open_api/coordinator_ws_open_api.dart | 4 ++- 2 files changed, 27 insertions(+), 11 deletions(-) diff --git a/packages/stream_video/lib/src/coordinator/open_api/coordinator_client_open_api.dart b/packages/stream_video/lib/src/coordinator/open_api/coordinator_client_open_api.dart index b6d842c20..e58429103 100644 --- a/packages/stream_video/lib/src/coordinator/open_api/coordinator_client_open_api.dart +++ b/packages/stream_video/lib/src/coordinator/open_api/coordinator_client_open_api.dart @@ -38,26 +38,30 @@ const _idEvents = 1; /// An accessor that allows us to communicate with the API around video calls. class CoordinatorClientOpenApi extends CoordinatorClient { CoordinatorClientOpenApi({ - required String rpcUrl, + required this.rpcUrl, required this.wsUrl, required this.apiKey, required this.tokenManager, required this.latencyService, required this.retryPolicy, - }) : _apiClient = open.ApiClient( - basePath: rpcUrl, - authentication: - _Authentication(apiKey: apiKey, tokenManager: tokenManager), - ); + }); final _logger = taggedLogger(tag: 'SV:CoordClient'); - final String apiKey; + final String rpcUrl; final String wsUrl; + final String apiKey; final TokenManager tokenManager; final LatencyService latencyService; final RetryPolicy retryPolicy; - final open.ApiClient _apiClient; + late final open.ApiClient _apiClient = open.ApiClient( + basePath: rpcUrl, + authentication: _Authentication( + apiKey: apiKey, + tokenManager: tokenManager, + getConnectionId: () => _ws?.connectionId, + ), + ); late final defaultApi = open.DefaultApi(_apiClient); late final serverSideApi = open.ServerSideApi(_apiClient); late final locationService = LocationService(); @@ -302,7 +306,6 @@ class CoordinatorClientOpenApi extends CoordinatorClient { ring: ringing, location: location, ), - connectionId: _ws?.clientId, ); if (result == null) { return Result.error('joinCall result is null'); @@ -806,11 +809,18 @@ class CoordinatorClientOpenApi extends CoordinatorClient { } } +typedef GetConnectionId = String? Function(); + class _Authentication extends open.Authentication { - _Authentication({required this.apiKey, required this.tokenManager}); + _Authentication({ + required this.apiKey, + required this.tokenManager, + required this.getConnectionId, + }); final String apiKey; final TokenManager tokenManager; + final GetConnectionId getConnectionId; @override Future applyToParams( @@ -822,6 +832,10 @@ class _Authentication extends open.Authentication { throw (tokenResult as Failure).error; } queryParams.add(open.QueryParam('api_key', apiKey)); + final connectionId = getConnectionId(); + if (connectionId != null) { + queryParams.add(open.QueryParam('connection_id', connectionId)); + } headerParams['Authorization'] = tokenResult.getDataOrNull()!.rawValue; headerParams['stream-auth-type'] = tokenResult.getDataOrNull()!.authType.name; diff --git a/packages/stream_video/lib/src/coordinator/open_api/coordinator_ws_open_api.dart b/packages/stream_video/lib/src/coordinator/open_api/coordinator_ws_open_api.dart index ad7d25257..6a868c869 100644 --- a/packages/stream_video/lib/src/coordinator/open_api/coordinator_ws_open_api.dart +++ b/packages/stream_video/lib/src/coordinator/open_api/coordinator_ws_open_api.dart @@ -8,7 +8,6 @@ import '../../logger/impl/tagged_logger.dart'; import '../../models/user_info.dart'; import '../../retry/retry_policy.dart'; import '../../shared_emitter.dart'; -import '../../token/token.dart'; import '../../token/token_manager.dart'; import '../../types/other.dart'; import '../../utils/none.dart'; @@ -74,6 +73,7 @@ class CoordinatorWebSocketOpenApi extends CoordinatorWebSocket String? userId; String? clientId; + String? connectionId; @override Future> connect() { @@ -177,6 +177,7 @@ class CoordinatorWebSocketOpenApi extends CoordinatorWebSocket // resetting connection userId = null; clientId = null; + connectionId = null; // check if we manually closed the connection if (_manuallyClosed) { @@ -243,6 +244,7 @@ class CoordinatorWebSocketOpenApi extends CoordinatorWebSocket healthMonitor.onPongReceived(); userId ??= event.me.id; clientId ??= event.connectionId; + connectionId ??= event.connectionId; } void _handleHealthCheckEvent(open.HealthCheckEvent event) {