feat: add support for external interceptors.

Signed-off-by: xsahil03x <[email protected]>
This commit is contained in:
Sahil Kumar
2023-05-05 17:40:38 +05:30
committed by xsahil03x
parent e791fe4c1e
commit 89bf63df05
5 changed files with 88 additions and 43 deletions
@@ -73,6 +73,7 @@ class StreamChatClient {
WebSocket? ws,
AttachmentFileUploaderProvider attachmentFileUploaderProvider =
StreamAttachmentFileUploader.new,
Iterable<Interceptor>? chatApiInterceptors,
}) {
logger.info('Initiating new StreamChatClient');
@@ -91,6 +92,7 @@ class StreamChatClient {
connectionIdManager: _connectionIdManager,
attachmentFileUploaderProvider: attachmentFileUploaderProvider,
logger: detachedLogger('🕸️'),
interceptors: chatApiInterceptors,
);
_ws = ws ??
@@ -1,3 +1,4 @@
import 'package:dio/dio.dart';
import 'package:logging/logging.dart';
import 'package:stream_chat/src/core/api/attachment_file_uploader.dart';
import 'package:stream_chat/src/core/api/call_api.dart';
@@ -14,7 +15,7 @@ import 'package:stream_chat/src/core/http/token_manager.dart';
export 'device_api.dart' show PushProvider;
/// ApiClient that wraps every other specific api
/// Api_client that wraps every other specific api
class StreamChatApi {
/// Initialize a new stream chat api
StreamChatApi(
@@ -26,6 +27,7 @@ class StreamChatApi {
AttachmentFileUploaderProvider attachmentFileUploaderProvider =
StreamAttachmentFileUploader.new,
Logger? logger,
Iterable<Interceptor>? interceptors,
}) : _fileUploaderProvider = attachmentFileUploaderProvider,
_client = client ??
StreamHttpClient(
@@ -34,6 +36,7 @@ class StreamChatApi {
tokenManager: tokenManager,
connectionIdManager: connectionIdManager,
logger: logger,
interceptors: interceptors,
);
final StreamHttpClient _client;
@@ -25,6 +25,7 @@ class StreamHttpClient {
TokenManager? tokenManager,
ConnectionIdManager? connectionIdManager,
Logger? logger,
Iterable<Interceptor>? interceptors,
}) : _options = options ?? const StreamHttpClientOptions(),
httpClient = dio ?? Dio() {
httpClient
@@ -45,20 +46,25 @@ class StreamHttpClient {
if (tokenManager != null) AuthInterceptor(this, tokenManager),
if (connectionIdManager != null)
ConnectionIdInterceptor(connectionIdManager),
if (logger != null && logger.level != Level.OFF)
LoggingInterceptor(
requestHeader: true,
logPrint: (step, message) {
switch (step) {
case InterceptStep.request:
return logger.info(message);
case InterceptStep.response:
return logger.info(message);
case InterceptStep.error:
return logger.severe(message);
}
},
),
...interceptors ??
[
// Add a default logging interceptor if no interceptors are
// provided.
if (logger != null && logger.level != Level.OFF)
LoggingInterceptor(
requestHeader: true,
logPrint: (step, message) {
switch (step) {
case InterceptStep.request:
return logger.info(message);
case InterceptStep.response:
return logger.info(message);
case InterceptStep.error:
return logger.severe(message);
}
},
),
],
]);
}