ws method

FlintWebSocketClient ws(
  1. String path, {
  2. Map<String, dynamic>? params,
  3. Map<String, String>? headers,
  4. bool sendTokenAsQuery = false,
  5. String queryTokenKey = 'token',
  6. AuthTokenProvider? tokenProvider,
})

Implementation

FlintWebSocketClient ws(
  String path, {
  Map<String, dynamic>? params,
  Map<String, String>? headers,
  bool sendTokenAsQuery = false,
  String queryTokenKey = 'token',
  AuthTokenProvider? tokenProvider,
}) {
  if (baseUrl == null) {
    throw FlintError(
      'Base URL not set. WebSocket requests require a baseUrl.',
    );
  }

  final mergedHeaders = <String, String>{...this.headers, ...?headers};
  String? token;
  String? authHeader;
  for (final entry in mergedHeaders.entries) {
    if (entry.key.toLowerCase() == 'authorization') {
      authHeader = entry.value;
      break;
    }
  }
  if (authHeader != null && authHeader.startsWith('Bearer ')) {
    token = authHeader.substring(7);
  }

  final normalizedBase = baseUrl!.endsWith('/')
      ? baseUrl!.substring(0, baseUrl!.length - 1)
      : baseUrl!;
  final normalizedPath = path.startsWith('/') ? path : '/$path';
  final wsUrl = '$normalizedBase$normalizedPath'.replaceFirst(
    RegExp(r'^http'),
    'ws',
  );

  return FlintWebSocketClient(
    wsUrl,
    params: params,
    token: token,
    tokenProvider: tokenProvider,
    debug: debug,
    sendTokenAsQuery: sendTokenAsQuery,
    queryTokenKey: queryTokenKey,
  );
}