57 lines
2.0 KiB
Dart
57 lines
2.0 KiB
Dart
import 'package:dio/dio.dart';
|
|
|
|
import '../demo/demo_marianumconnect_interceptor.dart';
|
|
import 'auth/auth_interceptor.dart';
|
|
|
|
/// Singleton dio instance for the Marianum-Connect mobile API. Wired with the
|
|
/// bearer auth interceptor at startup; the base URL is resolved per request
|
|
/// through [MarianumConnectEndpoint] so settings changes take effect without
|
|
/// recreating the client.
|
|
class MarianumConnectApi {
|
|
static const Duration _connectTimeout = Duration(seconds: 10);
|
|
static const Duration _receiveTimeout = Duration(seconds: 20);
|
|
static const Duration _plainReceiveTimeout = Duration(seconds: 15);
|
|
|
|
static final Dio _instance = _build();
|
|
|
|
static Dio dio() => _instance;
|
|
|
|
/// Drops the pooled keep-alive sockets. After a suspend the OS or a NAT
|
|
/// has usually killed them already, but dart:io only notices once a request
|
|
/// is written into one — which then hangs until [_receiveTimeout].
|
|
/// In-flight requests finish on the old adapter.
|
|
static void resetConnections() {
|
|
final stale = _instance.httpClientAdapter;
|
|
_instance.httpClientAdapter = HttpClientAdapter();
|
|
stale.close();
|
|
}
|
|
|
|
/// A fresh dio with the standard JSON options but no interceptors — used by
|
|
/// the auth queries (login/verify) that must bypass the bearer/demo
|
|
/// interceptors to avoid a re-auth loop.
|
|
static Dio plainDio() => Dio(
|
|
BaseOptions(
|
|
connectTimeout: _connectTimeout,
|
|
sendTimeout: _connectTimeout,
|
|
receiveTimeout: _plainReceiveTimeout,
|
|
responseType: ResponseType.json,
|
|
contentType: 'application/json',
|
|
),
|
|
);
|
|
|
|
static Dio _build() {
|
|
final dio = Dio(
|
|
BaseOptions(
|
|
connectTimeout: _connectTimeout,
|
|
sendTimeout: _connectTimeout,
|
|
receiveTimeout: _receiveTimeout,
|
|
responseType: ResponseType.json,
|
|
contentType: 'application/json',
|
|
),
|
|
);
|
|
dio.interceptors.add(DemoMarianumConnectInterceptor());
|
|
dio.interceptors.add(MarianumConnectAuthInterceptor());
|
|
return dio;
|
|
}
|
|
}
|