diff --git a/packages/better_networking/better_networking_example/lib/main.dart b/packages/better_networking/better_networking_example/lib/main.dart index 996867e4..a6d4c6e4 100644 --- a/packages/better_networking/better_networking_example/lib/main.dart +++ b/packages/better_networking/better_networking_example/lib/main.dart @@ -109,6 +109,7 @@ class _BetterNetworkingExampleState extends State { final stream = await streamHttpRequest( 'S1', APIType.rest, + null, HttpRequestModel( method: HTTPVerb.post, url: 'http://localhost:11434/v1/chat/completions', diff --git a/packages/better_networking/lib/services/http_service.dart b/packages/better_networking/lib/services/http_service.dart index f2ce2adf..215e3eac 100644 --- a/packages/better_networking/lib/services/http_service.dart +++ b/packages/better_networking/lib/services/http_service.dart @@ -158,6 +158,7 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequestV1( Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( String requestId, APIType apiType, + AuthModel? authData, HttpRequestModel requestModel, { SupportedUriSchemes defaultUriScheme = kDefaultUriScheme, bool noSSL = false, @@ -165,6 +166,7 @@ Future<(HttpResponse?, Duration?, String?)> sendHttpRequest( final stream = await streamHttpRequest( requestId, apiType, + authData, requestModel, defaultUriScheme: defaultUriScheme, noSSL: noSSL, @@ -204,7 +206,8 @@ http.Request prepareHttpRequest({ Future> streamHttpRequest( String requestId, APIType apiType, - HttpRequestModel requestModel, { + AuthModel? authData, + HttpRequestModel httpRequestModel, { SupportedUriSchemes defaultUriScheme = kDefaultUriScheme, bool noSSL = false, }) async { @@ -249,9 +252,24 @@ Future> streamHttpRequest( } final client = httpClientManager.createClient(requestId, noSSL: noSSL); + + HttpRequestModel authenticatedHttpRequestModel = httpRequestModel.copyWith(); + + try { + if (authData != null && authData.type != APIAuthType.none) { + authenticatedHttpRequestModel = await handleAuth( + httpRequestModel, + authData, + ); + } + } catch (e) { + await _addErrorMessage(e.toString()); + return controller.stream; + } + final (uri, uriError) = getValidRequestUri( - requestModel.url, - requestModel.enabledParams, + authenticatedHttpRequestModel.url, + authenticatedHttpRequestModel.enabledParams, defaultUriScheme: defaultUriScheme, ); @@ -264,7 +282,7 @@ Future> streamHttpRequest( final streamedResponse = await makeStreamedRequest( client: client, uri: uri, - requestModel: requestModel, + requestModel: authenticatedHttpRequestModel, apiType: apiType, ); diff --git a/packages/better_networking/test/services/request_types/gql_test.dart b/packages/better_networking/test/services/request_types/gql_test.dart index 5cf8667a..b8dec1bc 100644 --- a/packages/better_networking/test/services/request_types/gql_test.dart +++ b/packages/better_networking/test/services/request_types/gql_test.dart @@ -24,6 +24,7 @@ void main() { final stream = await streamHttpRequest( 'graphql_test', APIType.graphql, + null, model, ); @@ -54,6 +55,7 @@ void main() { final stream = await streamHttpRequest( 'graphql_bad', APIType.graphql, + null, model, ); final output = await stream.first; @@ -76,6 +78,7 @@ void main() { final stream = await streamHttpRequest( 'graphql_test_cancellation', APIType.graphql, + null, model, ); httpClientManager.cancelRequest('graphql_test_cancellation'); diff --git a/packages/better_networking/test/services/request_types/rest_test.dart b/packages/better_networking/test/services/request_types/rest_test.dart index ae12a32b..2fea7389 100644 --- a/packages/better_networking/test/services/request_types/rest_test.dart +++ b/packages/better_networking/test/services/request_types/rest_test.dart @@ -1,4 +1,3 @@ -import 'dart:async'; import 'dart:convert'; import 'dart:io'; import 'dart:typed_data'; @@ -19,6 +18,7 @@ void main() { final (resp, dur, err) = await sendHttpRequest( 'get_test', APIType.rest, + null, model, ); final output = jsonDecode(resp?.body ?? '{}'); @@ -59,6 +59,7 @@ void main() { final (resp, dur, err) = await sendHttpRequest( 'mpreq', APIType.rest, + null, model, ); final output = jsonDecode(resp?.body ?? '{}'); @@ -86,7 +87,12 @@ void main() { NameValueModel(name: 'Accept', value: 'application/json'), ], ); - final stream = await streamHttpRequest('get_test', APIType.rest, model); + final stream = await streamHttpRequest( + 'get_test', + APIType.rest, + null, + model, + ); final output = await stream.first; expect( output?.$2?.statusCode == 200, @@ -106,7 +112,12 @@ void main() { body: '{"title": "foo", "body": "bar", "userId": 1}', ); - final stream = await streamHttpRequest('post_test', APIType.rest, model); + final stream = await streamHttpRequest( + 'post_test', + APIType.rest, + null, + model, + ); final output = await stream.first; expect( @@ -124,6 +135,7 @@ void main() { final stream = await streamHttpRequest( 'empty_url_test', APIType.rest, + null, model, ); final output = await stream.first; @@ -139,6 +151,7 @@ void main() { final stream = await streamHttpRequest( 'invalid_url_test', APIType.rest, + null, model, ); final output = await stream.first; @@ -159,6 +172,7 @@ void main() { final stream = await streamHttpRequest( 'large_body_test', APIType.rest, + null, model, ); final output = await stream.first; @@ -181,7 +195,12 @@ void main() { NameValueModel(name: 'Accept', value: 'application/json'), ], ); - final stream = await streamHttpRequest('get_test_c', APIType.rest, model); + final stream = await streamHttpRequest( + 'get_test_c', + APIType.rest, + null, + model, + ); cancelHttpRequest('get_test_c'); final output = await stream.first; final errMsg = output?.$4; diff --git a/packages/better_networking/test/services/request_types/sse_test.dart b/packages/better_networking/test/services/request_types/sse_test.dart index 3732a9fc..d6971f17 100644 --- a/packages/better_networking/test/services/request_types/sse_test.dart +++ b/packages/better_networking/test/services/request_types/sse_test.dart @@ -13,7 +13,12 @@ void main() { method: HTTPVerb.get, ); - final stream = await streamHttpRequest('sse_test', APIType.rest, model); + final stream = await streamHttpRequest( + 'sse_test', + APIType.rest, + null, + model, + ); final outputs = []; final subscription = stream.listen(outputs.add); @@ -39,7 +44,12 @@ void main() { method: HTTPVerb.get, ); - final stream = await streamHttpRequest('sse_test', APIType.rest, model); + final stream = await streamHttpRequest( + 'sse_test', + APIType.rest, + null, + model, + ); final outputs = []; final subscription = stream.listen(outputs.add);