createVerificationSession method

  1. @override
Future<Map<String, dynamic>> createVerificationSession(
  1. Map<String, dynamic> sessionData, {
  2. File? documentFile,
})
override

Create a new verification session

Implementation

@override
Future<Map<String, dynamic>> createVerificationSession(Map<String, dynamic> sessionData, {File? documentFile}) async {
  try {
    if (documentFile != null) {
      // Create multipart request when document file is provided (for facematch)
      final request = http.MultipartRequest(
        'POST',
        Uri.parse('$_baseApiUrl/verification_sessions'),
      );

      // Add headers including Accept-Language
      final headers = getMultipartHeaders();
      request.headers.addAll(headers);

      // Add session data fields
      sessionData.forEach((key, value) {
        request.fields[key] = value.toString();
      });

      // Add document file
      final documentStream = http.ByteStream(documentFile.openRead());
      final documentLength = await documentFile.length();

      request.files.add(http.MultipartFile(
        'document_file',
        documentStream,
        documentLength,
        filename: documentFile.path.split('/').last,
      ));

      final streamedResponse = await request.send();
      final response = await http.Response.fromStream(streamedResponse);

      if (response.statusCode == 200 || response.statusCode == 201) {
        final responseData = jsonDecode(response.body);
        print('=== API RESPONSE: CREATE VERIFICATION SESSION ===');
        print('Status Code: ${response.statusCode}');
        print('Response Data: $responseData');
        print('=====================================');
        return responseData;
      } else {
        print('=== API ERROR: CREATE VERIFICATION SESSION ===');
        print('Status Code: ${response.statusCode}');
        print('Error Body: ${response.body}');
        print('=====================================');
        throw Exception('Failed to create verification session: ${response.statusCode}');
      }
    } else {
      // Standard JSON request when no document file
      final headers = getHeaders();
      print('🔑 createVerificationSession: JSON request headers: $headers');
      print('🔑 createVerificationSession: Request URL: $_baseApiUrl/verification_sessions');
      print('🔑 createVerificationSession: Request body: $sessionData');

      // Double-check token availability right before request
      print('🔑 Final token check before HTTP request:');
      print('🔑 _bearerToken: $_bearerToken');
      print('🔑 _hasValidBearerToken: ${_hasValidBearerToken}');
      print('🔑 Authorization header in headers: ${headers['Authorization']}');

      print('🔑 About to make HTTP POST request:');
      print('🔑 URL: $_baseApiUrl/verification_sessions');
      print('🔑 Headers: $headers');
      print('🔑 Body: ${jsonEncode(sessionData)}');

      // Try using Dio instead of http package to see if that helps
      try {
        final dio = Dio();
        dio.options.headers.addAll(headers);

        print('🔑 Using Dio for HTTP request');
        final response = await dio.post(
          '$_baseApiUrl/verification_sessions',
          data: sessionData,
        );

        print('🔑 Dio Response received:');
        print('🔑 Status Code: ${response.statusCode}');
        print('🔑 Response Headers: ${response.headers}');
        print('🔑 Response Data: ${response.data}');

        if (response.statusCode == 200 || response.statusCode == 201) {
          final responseData = response.data;
          print('=== API RESPONSE: CREATE VERIFICATION SESSION (NO DOCUMENT) - DIO ===');
          print('Status Code: ${response.statusCode}');
          print('Response Data: $responseData');
          print('=====================================');
          return responseData;
        } else {
          print('=== API ERROR: CREATE VERIFICATION SESSION (NO DOCUMENT) - DIO ===');
          print('Status Code: ${response.statusCode}');
          print('Error Data: ${response.data}');
          print('=====================================');
          throw Exception('Failed to create verification session: ${response.statusCode}');
        }
      } catch (dioError) {
        print('🔑 Dio request failed, falling back to http package: $dioError');

        final httpResponse = await http.post(
          Uri.parse('$_baseApiUrl/verification_sessions'),
          headers: headers,
          body: jsonEncode(sessionData),
        );

        print('🔑 HTTP Response received:');
        print('🔑 Status Code: ${httpResponse.statusCode}');
        print('🔑 Response Headers: ${httpResponse.headers}');
        print('🔑 Response Body: ${httpResponse.body}');

        if (httpResponse.statusCode == 200 || httpResponse.statusCode == 201) {
          final responseData = jsonDecode(httpResponse.body);
          print('=== API RESPONSE: CREATE VERIFICATION SESSION (NO DOCUMENT) ===');
          print('Status Code: ${httpResponse.statusCode}');
          print('Response Data: $responseData');
          print('=====================================');
          return responseData;
        } else {
          print('=== API ERROR: CREATE VERIFICATION SESSION (NO DOCUMENT) ===');
          print('Status Code: ${httpResponse.statusCode}');
          print('Error Body: ${httpResponse.body}');
          print('=====================================');
          throw Exception('Failed to create verification session: ${httpResponse.statusCode}');
        }
      }
    }
  } catch (e) {
    throw Exception('Error creating verification session: $e');
  }
}