diff --git a/lib/src/core/client/impl/tezart_client.dart b/lib/src/core/client/impl/tezart_client.dart index 40cd5ecd..39859a7e 100644 --- a/lib/src/core/client/impl/tezart_client.dart +++ b/lib/src/core/client/impl/tezart_client.dart @@ -23,7 +23,8 @@ class TezartClient { final RpcInterface rpcInterface; /// Default constructor. - TezartClient(String url) : rpcInterface = RpcInterface(url); + TezartClient(String url, {String? proxy}) + : rpcInterface = RpcInterface(url, proxy: proxy); /// Returns an [OperationsList] containing a [TransactionOperation] that transfers [amount] from [source] /// to [destination] and returns the operation group id.\ diff --git a/lib/src/core/rpc/impl/rpc_interface.dart b/lib/src/core/rpc/impl/rpc_interface.dart index 920ac031..309785d1 100644 --- a/lib/src/core/rpc/impl/rpc_interface.dart +++ b/lib/src/core/rpc/impl/rpc_interface.dart @@ -17,7 +17,8 @@ class RpcInterface { final TezartHttpClient httpClient; final log = Logger('RpcInterface'); - RpcInterface(String url) : httpClient = TezartHttpClient(url); + RpcInterface(String url, {String? proxy}) + : httpClient = TezartHttpClient(url, proxy: proxy); /// Returns the block's hash of [chain] and [level] Future branch([chain = 'main', level = 'head']) async { diff --git a/lib/src/core/rpc/impl/tezart_http_client.dart b/lib/src/core/rpc/impl/tezart_http_client.dart index 10000102..588703c5 100644 --- a/lib/src/core/rpc/impl/tezart_http_client.dart +++ b/lib/src/core/rpc/impl/tezart_http_client.dart @@ -1,5 +1,6 @@ import 'dart:io'; +import 'package:dio/adapter.dart'; import 'package:dio/dio.dart' as http_client; import 'package:pretty_dio_logger/pretty_dio_logger.dart'; import 'package:logging/logging.dart'; @@ -13,26 +14,36 @@ class TezartHttpClient { final String url; // Add client as optional parameter for testing - TezartHttpClient(this.url, {http_client.Dio? client}) { + TezartHttpClient(this.url, {http_client.Dio? client, String? proxy}) { // ensure that the url ends with '/' (double / is ok) final baseUrl = '$url/'; if (client != null) { this.client = client; this.client.options.baseUrl = baseUrl; - return; - } + } else { + var options = http_client.BaseOptions( + baseUrl: baseUrl, contentType: 'application/json'); + + this.client = http_client.Dio(options); + this.client.interceptors.add(PrettyDioLogger( + logPrint: log.finest, + requestHeader: true, + requestBody: true, + responseBody: true, + responseHeader: false, + compact: false, + )); - final options = http_client.BaseOptions(baseUrl: baseUrl, contentType: 'application/json'); - this.client = http_client.Dio(options); - this.client.interceptors.add(PrettyDioLogger( - logPrint: log.finest, - requestHeader: true, - requestBody: true, - responseBody: true, - responseHeader: false, - compact: false, - )); + if (proxy != null) { + this.client.httpClientAdapter = DefaultHttpClientAdapter() + ..onHttpClientCreate = (HttpClient httpClient) { + httpClient.findProxy = (_) => 'PROXY $proxy'; + // Ignore SSL errors if required for development with self-signed certificates + httpClient.badCertificateCallback = (cert, host, port) => true; + }; + } + } } Future post(String path, {dynamic data}) {