Files
sf-app-platform/packages/sf_infrastructure/lib/configure_dependencies.dart

60 lines
1.6 KiB
Dart

import 'package:cookie_jar/cookie_jar.dart';
import 'package:dio/dio.dart';
import 'package:get_it/get_it.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'src/network/dio_client.dart';
import 'src/network/treezor_token_interceptor.dart';
import 'src/env/env_contract.dart';
import 'src/api/questia_api.dart';
import 'src/repositories/questia_repository_impl.dart';
import 'src/repositories/questia_repository.dart';
export 'src/repositories/questia_repository.dart';
final getIt = GetIt.instance;
Future<void> configureDependencies(
EnvConfig env, {
bool log = false,
void Function()? onTokenExpired,
void Function()? onUnauthorized,
}) async {
final cookieJar = await buildPersistCookieJar();
final dio = await buildDioClient(
baseUrl: env.apiBaseUrl,
origin: env.apiOrigin,
log: log,
cookieJar: cookieJar,
);
if (onUnauthorized != null) {
dio.interceptors.add(
TreezorTokenInterceptor(
onUnauthorized: onUnauthorized,
onTokenExpired: onTokenExpired,
),
);
}
getIt.registerLazySingleton<CookieJar>(() => cookieJar);
getIt.registerLazySingleton<Dio>(() => dio);
getIt.registerLazySingleton<QuestiaApi>(() => QuestiaApi(getIt<Dio>()));
getIt.registerLazySingleton<QuestiaRepository>(
() => QuestiaRepositoryImpl(getIt<QuestiaApi>()),
);
}
void Function()? onBeforeSessionCleared;
Future<void> clearSessionData() async {
onBeforeSessionCleared?.call();
final cookieJar = getIt<CookieJar>();
await cookieJar.deleteAll();
final prefs = await SharedPreferences.getInstance();
await prefs.clear();
}