From adec32d50627bd0dc40509d8e8c321d9ae1e8c95 Mon Sep 17 00:00:00 2001 From: sahani-deriv Date: Wed, 18 Sep 2024 11:51:32 +0800 Subject: [PATCH 1/6] poc: freshworks jwt api --- .../freshchat_jwt_response_result.dart | 95 ++++++++++++++++ .../p2p_advert_create_response_result.dart | 6 +- .../p2p_advert_list_response_result.dart | 5 +- .../generated/freshchat_auth_jwt_send.dart | 101 ++++++++++++++++++ 4 files changed, 205 insertions(+), 2 deletions(-) create mode 100644 lib/api/response/freshchat_jwt_response_result.dart create mode 100644 lib/basic_api/generated/freshchat_auth_jwt_send.dart diff --git a/lib/api/response/freshchat_jwt_response_result.dart b/lib/api/response/freshchat_jwt_response_result.dart new file mode 100644 index 0000000000..9974c74000 --- /dev/null +++ b/lib/api/response/freshchat_jwt_response_result.dart @@ -0,0 +1,95 @@ +// ignore_for_file: prefer_single_quotes + +import 'package:flutter_deriv_api/api/exceptions/exceptions.dart'; +import 'package:flutter_deriv_api/basic_api/generated/freshchat_auth_jwt_receive.dart'; +import 'package:flutter_deriv_api/basic_api/generated/freshchat_auth_jwt_send.dart'; +import 'package:flutter_deriv_api/basic_api/generated/service_token_receive.dart'; +import 'package:flutter_deriv_api/helpers/helpers.dart'; +import 'package:flutter_deriv_api/services/connection/api_manager/base_api.dart'; +import 'package:deriv_dependency_injector/dependency_injector.dart'; + +/// Freshworks Auth JWT response model class. +abstract class FreshChatJwtResponseModel { + /// Initializes FreshChat JWT response model class. + const FreshChatJwtResponseModel({ + this.freshworksAuthJwt, + }); + + /// The Freshworks Auth JWT. + final FreshworksAuthJwt? freshworksAuthJwt; +} + +/// Freshworks Auth JWT. +class FreshworksAuthJwt { + /// Initializes Freshworks Auth JWT. + const FreshworksAuthJwt({ + required this.token, + }); + + /// Creates an instance from JSON. + factory FreshworksAuthJwt.fromJson(Map json) => + FreshworksAuthJwt( + token: json['token'], + ); + + /// The token itself. + final String token; + + /// Converts an instance to JSON. + Map toJson() => { + 'token': token, + }; +} + +/// Freshworks Auth JWT response class. +class FreshChatJwtResponse extends FreshChatJwtResponseModel { + /// Initializes FreshChat JWT response class. + const FreshChatJwtResponse({ + required FreshworksAuthJwt freshworksAuthJwt, + }) : super(freshworksAuthJwt: freshworksAuthJwt); + + /// Creates an instance from JSON. + factory FreshChatJwtResponse.fromJson(Map json) => + FreshChatJwtResponse( + freshworksAuthJwt: + FreshworksAuthJwt.fromJson(json['freshworks_auth_jwt']), + ); + + /// Converts an instance to JSON. + Map toJson() => { + 'service_token': ?>{ + 'freshworks_auth_jwt': freshworksAuthJwt?.toJson(), + }, + }; + + static final BaseAPI _api = Injector()(); + + /// Calls the Freshworks JWT service. + /// + /// Throws a [BaseAPIException] if the API response contains an error. + static Future fetchFreshworksJwt( + FreshworksAuthJwtRequest + request, // Replace with your actual request type if available + ) async { + final ServiceTokenReceive response = await _api.call( + request: + request); // You may need to adjust this line based on your actual API call + + checkException( + response: response, + exceptionCreator: ({BaseExceptionModel? baseExceptionModel}) => + BaseAPIException(baseExceptionModel: baseExceptionModel), + ); + + return FreshChatJwtResponse.fromJson( + response.serviceToken!); // Adjust based on your API response + } + + /// Creates a copy of instance with given parameters. + FreshChatJwtResponse copyWith({ + FreshworksAuthJwt? freshworksAuthJwt, + }) => + FreshChatJwtResponse( + freshworksAuthJwt: freshworksAuthJwt ?? this.freshworksAuthJwt!, + ); +} diff --git a/lib/api/response/p2p_advert_create_response_result.dart b/lib/api/response/p2p_advert_create_response_result.dart index c9aa066cdd..1400522526 100644 --- a/lib/api/response/p2p_advert_create_response_result.dart +++ b/lib/api/response/p2p_advert_create_response_result.dart @@ -1,8 +1,8 @@ // ignore_for_file: prefer_single_quotes, unnecessary_import, unused_import import 'package:equatable/equatable.dart'; +import 'package:flutter_deriv_api/api/exceptions/base_api_exception.dart'; -import 'package:flutter_deriv_api/api/exceptions/p2p_advert_exception.dart'; import 'package:flutter_deriv_api/api/models/base_exception_model.dart'; import 'package:flutter_deriv_api/basic_api/generated/p2p_advert_create_receive.dart'; import 'package:flutter_deriv_api/basic_api/generated/p2p_advert_create_send.dart'; @@ -239,6 +239,7 @@ enum VisibilityStatusItemEnum { /// advertiser_temp_ban. advertiserTempBan, } + /// P2p advert create model class. abstract class P2pAdvertCreateModel { /// Initializes P2p advert create model class . @@ -742,6 +743,7 @@ class P2pAdvertCreate extends P2pAdvertCreateModel { visibilityStatus: visibilityStatus ?? this.visibilityStatus, ); } + /// Advertiser details model class. abstract class AdvertiserDetailsModel { /// Initializes Advertiser details model class . @@ -892,6 +894,7 @@ class AdvertiserDetails extends AdvertiserDetailsModel { totalCompletionRate: totalCompletionRate ?? this.totalCompletionRate, ); } + /// Payment method details property model class. abstract class PaymentMethodDetailsPropertyModel { /// Initializes Payment method details property model class . @@ -1020,6 +1023,7 @@ class PaymentMethodDetailsProperty extends PaymentMethodDetailsPropertyModel { usedByOrders: usedByOrders ?? this.usedByOrders, ); } + /// Fields property model class. abstract class FieldsPropertyModel { /// Initializes Fields property model class . diff --git a/lib/api/response/p2p_advert_list_response_result.dart b/lib/api/response/p2p_advert_list_response_result.dart index 6d63631006..4542317cfa 100644 --- a/lib/api/response/p2p_advert_list_response_result.dart +++ b/lib/api/response/p2p_advert_list_response_result.dart @@ -1,8 +1,8 @@ // ignore_for_file: prefer_single_quotes, unnecessary_import, unused_import import 'package:equatable/equatable.dart'; +import 'package:flutter_deriv_api/api/exceptions/base_api_exception.dart'; -import 'package:flutter_deriv_api/api/exceptions/p2p_advert_exception.dart'; import 'package:flutter_deriv_api/api/models/base_exception_model.dart'; import 'package:flutter_deriv_api/basic_api/generated/p2p_advert_list_receive.dart'; import 'package:flutter_deriv_api/basic_api/generated/p2p_advert_list_send.dart'; @@ -226,6 +226,7 @@ enum VisibilityStatusItemEnum { /// advertiser_temp_ban. advertiserTempBan, } + /// P2p advert list model class. abstract class P2pAdvertListModel { /// Initializes P2p advert list model class . @@ -274,6 +275,7 @@ class P2pAdvertList extends P2pAdvertListModel { list: list ?? this.list, ); } + /// List item model class. abstract class ListItemModel { /// Initializes List item model class . @@ -817,6 +819,7 @@ class ListItem extends ListItemModel { visibilityStatus: visibilityStatus ?? this.visibilityStatus, ); } + /// Advertiser details model class. abstract class AdvertiserDetailsModel { /// Initializes Advertiser details model class . diff --git a/lib/basic_api/generated/freshchat_auth_jwt_send.dart b/lib/basic_api/generated/freshchat_auth_jwt_send.dart new file mode 100644 index 0000000000..7892e15d8b --- /dev/null +++ b/lib/basic_api/generated/freshchat_auth_jwt_send.dart @@ -0,0 +1,101 @@ +// ignore_for_file: always_put_required_named_parameters_first + +import '../request.dart'; + +/// Freshworks Auth JWT request class. +class FreshworksAuthJwtRequest extends Request { + /// Initializes the Freshworks Auth JWT request class. + const FreshworksAuthJwtRequest({ + required this.serviceToken, + required this.referrer, + required this.extraFields, + this.service = 'freshworks_auth_jwt', + super.msgType = 'freshworks_auth_jwt', + super.passthrough, + super.reqId, + }); // Set service to the value of msgType + + /// Creates an instance from JSON. + factory FreshworksAuthJwtRequest.fromJson(Map json) => + FreshworksAuthJwtRequest( + serviceToken: json['service_token'] as int, + referrer: json['referrer'] as String, + extraFields: ExtraFields.fromJson(json['extra_fields']), + passthrough: json['passthrough'] as Map?, + reqId: json['req_id'] as int?, + ); + + /// The service for the request, same as msgType. + final String service; + + /// Service token for the request. + final int serviceToken; + + /// Referrer for the request. + final String referrer; + + /// Extra fields for the request. + final ExtraFields extraFields; + + /// Converts this instance to JSON. + @override + Map toJson() => { + 'service_token': serviceToken, + 'referrer': referrer, + 'extra_fields': extraFields.toJson(), + 'service': service, // Add service field to JSON + 'passthrough': passthrough, + 'req_id': reqId, + }; + + /// Creates a copy of the instance with given parameters. + @override + FreshworksAuthJwtRequest copyWith({ + int? serviceToken, + String? referrer, + ExtraFields? extraFields, + String? service, + Map? passthrough, + int? reqId, + }) => + FreshworksAuthJwtRequest( + serviceToken: serviceToken ?? this.serviceToken, + referrer: referrer ?? this.referrer, + extraFields: extraFields ?? this.extraFields, + service: service ?? this.service, // Include service in copy + passthrough: passthrough ?? this.passthrough, + reqId: reqId ?? this.reqId, + ); + + /// Override equatable class. + @override + List get props => [ + serviceToken, + referrer, + extraFields, + service, // Include service in props for equality + passthrough, + reqId, + ]; +} + +/// Extra fields for the Freshworks Auth JWT request. +class ExtraFields { + /// Initializes ExtraFields. + const ExtraFields({ + required this.freshchatUuid, + }); + + /// Creates an instance from JSON. + factory ExtraFields.fromJson(Map json) => ExtraFields( + freshchatUuid: json['freshchat_uuid'] as String, + ); + + /// The Freshchat UUID. + final String freshchatUuid; + + /// Converts this instance to JSON. + Map toJson() => { + 'freshchat_uuid': freshchatUuid, + }; +} From f61bf9ea31969893ee5a93bc9cea493c229f0242 Mon Sep 17 00:00:00 2001 From: sahani-deriv Date: Wed, 18 Sep 2024 11:52:43 +0800 Subject: [PATCH 2/6] chore: remove unused import --- lib/api/response/freshchat_jwt_response_result.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/api/response/freshchat_jwt_response_result.dart b/lib/api/response/freshchat_jwt_response_result.dart index 9974c74000..fe728bf9f2 100644 --- a/lib/api/response/freshchat_jwt_response_result.dart +++ b/lib/api/response/freshchat_jwt_response_result.dart @@ -1,7 +1,6 @@ // ignore_for_file: prefer_single_quotes import 'package:flutter_deriv_api/api/exceptions/exceptions.dart'; -import 'package:flutter_deriv_api/basic_api/generated/freshchat_auth_jwt_receive.dart'; import 'package:flutter_deriv_api/basic_api/generated/freshchat_auth_jwt_send.dart'; import 'package:flutter_deriv_api/basic_api/generated/service_token_receive.dart'; import 'package:flutter_deriv_api/helpers/helpers.dart'; From 9634d55708e2469e1e6236a5f83f8d1f6e70f643 Mon Sep 17 00:00:00 2001 From: sahani-deriv Date: Tue, 1 Oct 2024 17:22:35 +0800 Subject: [PATCH 3/6] update jwt request --- .../response/freshchat_jwt_response_result.dart | 4 ++-- ...wt_send.dart => freshchat_user_jwt_send.dart} | 16 ++++++++-------- 2 files changed, 10 insertions(+), 10 deletions(-) rename lib/basic_api/generated/{freshchat_auth_jwt_send.dart => freshchat_user_jwt_send.dart} (88%) diff --git a/lib/api/response/freshchat_jwt_response_result.dart b/lib/api/response/freshchat_jwt_response_result.dart index fe728bf9f2..0f2df8c54b 100644 --- a/lib/api/response/freshchat_jwt_response_result.dart +++ b/lib/api/response/freshchat_jwt_response_result.dart @@ -1,7 +1,7 @@ // ignore_for_file: prefer_single_quotes import 'package:flutter_deriv_api/api/exceptions/exceptions.dart'; -import 'package:flutter_deriv_api/basic_api/generated/freshchat_auth_jwt_send.dart'; +import 'package:flutter_deriv_api/basic_api/generated/freshchat_user_jwt_send.dart'; import 'package:flutter_deriv_api/basic_api/generated/service_token_receive.dart'; import 'package:flutter_deriv_api/helpers/helpers.dart'; import 'package:flutter_deriv_api/services/connection/api_manager/base_api.dart'; @@ -67,7 +67,7 @@ class FreshChatJwtResponse extends FreshChatJwtResponseModel { /// /// Throws a [BaseAPIException] if the API response contains an error. static Future fetchFreshworksJwt( - FreshworksAuthJwtRequest + FreshworksUserJwtRequest request, // Replace with your actual request type if available ) async { final ServiceTokenReceive response = await _api.call( diff --git a/lib/basic_api/generated/freshchat_auth_jwt_send.dart b/lib/basic_api/generated/freshchat_user_jwt_send.dart similarity index 88% rename from lib/basic_api/generated/freshchat_auth_jwt_send.dart rename to lib/basic_api/generated/freshchat_user_jwt_send.dart index 7892e15d8b..ca13f3fefe 100644 --- a/lib/basic_api/generated/freshchat_auth_jwt_send.dart +++ b/lib/basic_api/generated/freshchat_user_jwt_send.dart @@ -3,21 +3,21 @@ import '../request.dart'; /// Freshworks Auth JWT request class. -class FreshworksAuthJwtRequest extends Request { +class FreshworksUserJwtRequest extends Request { /// Initializes the Freshworks Auth JWT request class. - const FreshworksAuthJwtRequest({ + const FreshworksUserJwtRequest({ required this.serviceToken, required this.referrer, required this.extraFields, - this.service = 'freshworks_auth_jwt', - super.msgType = 'freshworks_auth_jwt', + this.service = 'freshworks_user_jwt', + super.msgType = 'freshworks_user_jwt', super.passthrough, super.reqId, }); // Set service to the value of msgType /// Creates an instance from JSON. - factory FreshworksAuthJwtRequest.fromJson(Map json) => - FreshworksAuthJwtRequest( + factory FreshworksUserJwtRequest.fromJson(Map json) => + FreshworksUserJwtRequest( serviceToken: json['service_token'] as int, referrer: json['referrer'] as String, extraFields: ExtraFields.fromJson(json['extra_fields']), @@ -50,7 +50,7 @@ class FreshworksAuthJwtRequest extends Request { /// Creates a copy of the instance with given parameters. @override - FreshworksAuthJwtRequest copyWith({ + FreshworksUserJwtRequest copyWith({ int? serviceToken, String? referrer, ExtraFields? extraFields, @@ -58,7 +58,7 @@ class FreshworksAuthJwtRequest extends Request { Map? passthrough, int? reqId, }) => - FreshworksAuthJwtRequest( + FreshworksUserJwtRequest( serviceToken: serviceToken ?? this.serviceToken, referrer: referrer ?? this.referrer, extraFields: extraFields ?? this.extraFields, From d04f247f5bfa4d03cf73ed943d610cf5fd00a147 Mon Sep 17 00:00:00 2001 From: sahani-deriv Date: Wed, 2 Oct 2024 16:25:18 +0800 Subject: [PATCH 4/6] add login id to jwt request --- lib/basic_api/generated/freshchat_user_jwt_send.dart | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lib/basic_api/generated/freshchat_user_jwt_send.dart b/lib/basic_api/generated/freshchat_user_jwt_send.dart index ca13f3fefe..c8d8f0246c 100644 --- a/lib/basic_api/generated/freshchat_user_jwt_send.dart +++ b/lib/basic_api/generated/freshchat_user_jwt_send.dart @@ -9,6 +9,7 @@ class FreshworksUserJwtRequest extends Request { required this.serviceToken, required this.referrer, required this.extraFields, + required this.loginId, this.service = 'freshworks_user_jwt', super.msgType = 'freshworks_user_jwt', super.passthrough, @@ -23,6 +24,7 @@ class FreshworksUserJwtRequest extends Request { extraFields: ExtraFields.fromJson(json['extra_fields']), passthrough: json['passthrough'] as Map?, reqId: json['req_id'] as int?, + loginId: json['login_id'] as String, ); /// The service for the request, same as msgType. @@ -37,10 +39,14 @@ class FreshworksUserJwtRequest extends Request { /// Extra fields for the request. final ExtraFields extraFields; + /// Login ID for the request. + final String loginId; + /// Converts this instance to JSON. @override Map toJson() => { 'service_token': serviceToken, + 'login_id': loginId, 'referrer': referrer, 'extra_fields': extraFields.toJson(), 'service': service, // Add service field to JSON @@ -57,6 +63,7 @@ class FreshworksUserJwtRequest extends Request { String? service, Map? passthrough, int? reqId, + String? loginId, }) => FreshworksUserJwtRequest( serviceToken: serviceToken ?? this.serviceToken, @@ -65,6 +72,7 @@ class FreshworksUserJwtRequest extends Request { service: service ?? this.service, // Include service in copy passthrough: passthrough ?? this.passthrough, reqId: reqId ?? this.reqId, + loginId: loginId ?? this.loginId, ); /// Override equatable class. @@ -76,6 +84,7 @@ class FreshworksUserJwtRequest extends Request { service, // Include service in props for equality passthrough, reqId, + loginId, ]; } From 624481ddc64800cf1c85e48129634933ae731583 Mon Sep 17 00:00:00 2001 From: sahani-deriv Date: Wed, 2 Oct 2024 16:31:52 +0800 Subject: [PATCH 5/6] fix loginid --- lib/basic_api/generated/freshchat_user_jwt_send.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/basic_api/generated/freshchat_user_jwt_send.dart b/lib/basic_api/generated/freshchat_user_jwt_send.dart index c8d8f0246c..0e38d8f014 100644 --- a/lib/basic_api/generated/freshchat_user_jwt_send.dart +++ b/lib/basic_api/generated/freshchat_user_jwt_send.dart @@ -24,7 +24,7 @@ class FreshworksUserJwtRequest extends Request { extraFields: ExtraFields.fromJson(json['extra_fields']), passthrough: json['passthrough'] as Map?, reqId: json['req_id'] as int?, - loginId: json['login_id'] as String, + loginId: json['loginid'] as String, ); /// The service for the request, same as msgType. @@ -46,7 +46,7 @@ class FreshworksUserJwtRequest extends Request { @override Map toJson() => { 'service_token': serviceToken, - 'login_id': loginId, + 'loginid': loginId, 'referrer': referrer, 'extra_fields': extraFields.toJson(), 'service': service, // Add service field to JSON From d4d7ba872a058677086c52500e6378bea4b1d611 Mon Sep 17 00:00:00 2001 From: sahani-deriv Date: Wed, 2 Oct 2024 16:38:55 +0800 Subject: [PATCH 6/6] replace auth jwt with user jwt --- .../freshchat_jwt_response_result.dart | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/api/response/freshchat_jwt_response_result.dart b/lib/api/response/freshchat_jwt_response_result.dart index 0f2df8c54b..9978b17814 100644 --- a/lib/api/response/freshchat_jwt_response_result.dart +++ b/lib/api/response/freshchat_jwt_response_result.dart @@ -7,27 +7,27 @@ import 'package:flutter_deriv_api/helpers/helpers.dart'; import 'package:flutter_deriv_api/services/connection/api_manager/base_api.dart'; import 'package:deriv_dependency_injector/dependency_injector.dart'; -/// Freshworks Auth JWT response model class. +/// Freshworks User JWT response model class. abstract class FreshChatJwtResponseModel { /// Initializes FreshChat JWT response model class. const FreshChatJwtResponseModel({ - this.freshworksAuthJwt, + this.freshworksUserJwt, }); - /// The Freshworks Auth JWT. - final FreshworksAuthJwt? freshworksAuthJwt; + /// The Freshworks User JWT. + final FreshworksUserJwt? freshworksUserJwt; } -/// Freshworks Auth JWT. -class FreshworksAuthJwt { - /// Initializes Freshworks Auth JWT. - const FreshworksAuthJwt({ +/// Freshworks User JWT. +class FreshworksUserJwt { + /// Initializes Freshworks User JWT. + const FreshworksUserJwt({ required this.token, }); /// Creates an instance from JSON. - factory FreshworksAuthJwt.fromJson(Map json) => - FreshworksAuthJwt( + factory FreshworksUserJwt.fromJson(Map json) => + FreshworksUserJwt( token: json['token'], ); @@ -40,24 +40,24 @@ class FreshworksAuthJwt { }; } -/// Freshworks Auth JWT response class. +/// Freshworks User JWT response class. class FreshChatJwtResponse extends FreshChatJwtResponseModel { /// Initializes FreshChat JWT response class. const FreshChatJwtResponse({ - required FreshworksAuthJwt freshworksAuthJwt, - }) : super(freshworksAuthJwt: freshworksAuthJwt); + required FreshworksUserJwt freshworksUserJwt, + }) : super(freshworksUserJwt: freshworksUserJwt); /// Creates an instance from JSON. factory FreshChatJwtResponse.fromJson(Map json) => FreshChatJwtResponse( - freshworksAuthJwt: - FreshworksAuthJwt.fromJson(json['freshworks_auth_jwt']), + freshworksUserJwt: + FreshworksUserJwt.fromJson(json['freshworks_user_jwt']), ); /// Converts an instance to JSON. Map toJson() => { 'service_token': ?>{ - 'freshworks_auth_jwt': freshworksAuthJwt?.toJson(), + 'freshworks_user_jwt': freshworksUserJwt?.toJson(), }, }; @@ -86,9 +86,9 @@ class FreshChatJwtResponse extends FreshChatJwtResponseModel { /// Creates a copy of instance with given parameters. FreshChatJwtResponse copyWith({ - FreshworksAuthJwt? freshworksAuthJwt, + FreshworksUserJwt? freshworksUserJwt, }) => FreshChatJwtResponse( - freshworksAuthJwt: freshworksAuthJwt ?? this.freshworksAuthJwt!, + freshworksUserJwt: freshworksUserJwt ?? this.freshworksUserJwt!, ); }