createRoom method

Future<String?> createRoom({
  1. required Map<String, dynamic> body,
})

POST /new_room_v2 — V2 success: status_code == 9999. body is the full request payload built by the caller (LiveTalkSdk).

Implementation

Future<String?> createRoom({required Map<String, dynamic> body}) async {
  try {

    final response = await http.post(
      Uri.parse('$_base${LiveTalkEndpoints.createRoom}'),
      headers: {'Content-Type': 'application/json'},
      body: json.encode(body),
    );

    if (response.statusCode != 200) {
      throw _httpError(response.statusCode, response.reasonPhrase);
    }

    final jsonData = json.decode(response.body) as Map<String, dynamic>;
    if (jsonData['status_code'] == -9999) throw _apiBodyError(jsonData);
    // V2 uses 9999 for success; tolerate legacy 0 as well
    if (jsonData['status_code'] != 9999 && jsonData['status_code'] != 0) {
      throw _apiBodyError(jsonData);
    }

    final payload      = jsonData['payload']     as Map<String, dynamic>;
    final conversation = payload['conversation'] as Map<String, dynamic>;
    final loginToken   = payload['login_token']  as Map<String, dynamic>;

    _sdkInfo ??= {};
    _sdkInfo!['tenant_id']     = body['tenant_id'] as String;
    _sdkInfo!['uuid']          = conversation['uuid']             as String;
    _sdkInfo!['room_id']       = conversation['_id']              as String;
    _sdkInfo!['access_token']  = loginToken['access_token']       as String;
    _sdkInfo!['refresh_token'] = loginToken['refresh_token']      as String;

    return conversation['_id'] as String?;
  } catch (_) {
    rethrow;
  }
}