import 'dart:convert'; import 'dart:io'; import 'package:flutter/foundation.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:seshat/config/constants.dart'; import 'package:seshat/data/services/auth_client.dart'; import 'package:seshat/domain/models/owner.dart'; import 'package:seshat/utils/command.dart'; import 'package:seshat/utils/result.dart'; typedef AuthHeaderProvider = String? Function(); class ApiClient { ApiClient({ String? host, int? port, HttpClient Function()? clientFactory, required AuthClient authClient, }) : _authClient = authClient; final AuthClient _authClient; late final Command0 load; String? token; bool isReady = false; FlutterSecureStorage? _secureStorage; Future _initStore() async { _secureStorage ??= const FlutterSecureStorage( aOptions: AndroidOptions(encryptedSharedPreferences: true), ); } Future>> getOwners() async { final client = HttpClient(); try { await _initStore(); final request = await client.getUrl( Uri.parse("https://$apiBasePath/owners"), ); final token = await _secureStorage!.read(key: "token"); debugPrint("\n\n\n\nFOUND TOKEN : $token\n\n\n\n"); // await _authHeader(request.headers); request.headers.add(HttpHeaders.authorizationHeader, "Bearer $token"); final response = await request.close(); if (response.statusCode == 200) { final stringData = await response.transform(Utf8Decoder()).join(); final json = jsonDecode(stringData) as List; return Result.ok( json.map((element) => Owner.fromJSON(element)).toList(), ); } else { return const Result.error(HttpException("Invalid response")); } } on Exception catch (error) { return Result.error(error); } finally { client.close(); } } }