diff --git a/crates/hyperswitch_connectors/src/connectors.rs b/crates/hyperswitch_connectors/src/connectors.rs index 0b6042ef931..f1b090b7b70 100644 --- a/crates/hyperswitch_connectors/src/connectors.rs +++ b/crates/hyperswitch_connectors/src/connectors.rs @@ -1,6 +1,7 @@ pub mod aci; pub mod airwallex; pub mod amazonpay; +pub mod authorizedotnet; pub mod bambora; pub mod bamboraapac; pub mod bankofamerica; @@ -11,6 +12,7 @@ pub mod boku; pub mod braintree; pub mod cashtocode; pub mod chargebee; +pub mod checkout; pub mod coinbase; pub mod coingate; pub mod cryptopay; @@ -42,10 +44,14 @@ pub mod multisafepay; pub mod nexinets; pub mod nexixpay; pub mod nomupay; +pub mod noon; pub mod novalnet; pub mod nuvei; +pub mod opayo; +pub mod opennode; pub mod paybox; pub mod payeezy; +pub mod payme; pub mod payu; pub mod placetopay; pub mod powertranz; @@ -58,6 +64,7 @@ pub mod square; pub mod stax; pub mod taxjar; pub mod thunes; +pub mod trustpay; pub mod tsys; pub mod unified_authentication_service; pub mod volt; @@ -69,20 +76,21 @@ pub mod zen; pub mod zsl; pub use self::{ - aci::Aci, airwallex::Airwallex, amazonpay::Amazonpay, bambora::Bambora, - bamboraapac::Bamboraapac, bankofamerica::Bankofamerica, billwerk::Billwerk, bitpay::Bitpay, - bluesnap::Bluesnap, boku::Boku, braintree::Braintree, cashtocode::Cashtocode, - chargebee::Chargebee, coinbase::Coinbase, coingate::Coingate, cryptopay::Cryptopay, - ctp_mastercard::CtpMastercard, cybersource::Cybersource, datatrans::Datatrans, - deutschebank::Deutschebank, digitalvirgo::Digitalvirgo, dlocal::Dlocal, elavon::Elavon, - fiserv::Fiserv, fiservemea::Fiservemea, fiuu::Fiuu, forte::Forte, getnet::Getnet, - globalpay::Globalpay, globepay::Globepay, gocardless::Gocardless, helcim::Helcim, - iatapay::Iatapay, inespay::Inespay, itaubank::Itaubank, jpmorgan::Jpmorgan, klarna::Klarna, - mifinity::Mifinity, mollie::Mollie, moneris::Moneris, multisafepay::Multisafepay, - nexinets::Nexinets, nexixpay::Nexixpay, nomupay::Nomupay, novalnet::Novalnet, nuvei::Nuvei, - paybox::Paybox, payeezy::Payeezy, payu::Payu, placetopay::Placetopay, powertranz::Powertranz, + aci::Aci, airwallex::Airwallex, amazonpay::Amazonpay, authorizedotnet::Authorizedotnet, + bambora::Bambora, bamboraapac::Bamboraapac, bankofamerica::Bankofamerica, billwerk::Billwerk, + bitpay::Bitpay, bluesnap::Bluesnap, boku::Boku, braintree::Braintree, cashtocode::Cashtocode, + chargebee::Chargebee, checkout::Checkout, coinbase::Coinbase, coingate::Coingate, + cryptopay::Cryptopay, ctp_mastercard::CtpMastercard, cybersource::Cybersource, + datatrans::Datatrans, deutschebank::Deutschebank, digitalvirgo::Digitalvirgo, dlocal::Dlocal, + elavon::Elavon, fiserv::Fiserv, fiservemea::Fiservemea, fiuu::Fiuu, forte::Forte, + getnet::Getnet, globalpay::Globalpay, globepay::Globepay, gocardless::Gocardless, + helcim::Helcim, iatapay::Iatapay, inespay::Inespay, itaubank::Itaubank, jpmorgan::Jpmorgan, + klarna::Klarna, mifinity::Mifinity, mollie::Mollie, moneris::Moneris, + multisafepay::Multisafepay, nexinets::Nexinets, nexixpay::Nexixpay, nomupay::Nomupay, + noon::Noon, novalnet::Novalnet, nuvei::Nuvei, opayo::Opayo, opennode::Opennode, paybox::Paybox, + payeezy::Payeezy, payme::Payme, payu::Payu, placetopay::Placetopay, powertranz::Powertranz, prophetpay::Prophetpay, rapyd::Rapyd, razorpay::Razorpay, redsys::Redsys, shift4::Shift4, - square::Square, stax::Stax, taxjar::Taxjar, thunes::Thunes, tsys::Tsys, + square::Square, stax::Stax, taxjar::Taxjar, thunes::Thunes, trustpay::Trustpay, tsys::Tsys, unified_authentication_service::UnifiedAuthenticationService, volt::Volt, wellsfargo::Wellsfargo, worldline::Worldline, worldpay::Worldpay, xendit::Xendit, zen::Zen, zsl::Zsl, diff --git a/crates/router/src/connector/authorizedotnet.rs b/crates/hyperswitch_connectors/src/connectors/authorizedotnet.rs similarity index 64% rename from crates/router/src/connector/authorizedotnet.rs rename to crates/hyperswitch_connectors/src/connectors/authorizedotnet.rs index afc8f063e4e..29af20a9570 100644 --- a/crates/router/src/connector/authorizedotnet.rs +++ b/crates/hyperswitch_connectors/src/connectors/authorizedotnet.rs @@ -1,31 +1,60 @@ pub mod transformers; use std::fmt::Debug; -use common_utils::{crypto, ext_traits::ByteSliceExt, request::RequestContent}; -use diesel_models::enums; +use common_enums::{enums, PaymentAction}; +use common_utils::{ + crypto, + errors::CustomResult, + ext_traits::ByteSliceExt, + request::{Method, Request, RequestBuilder, RequestContent}, +}; use error_stack::ResultExt; -use transformers as authorizedotnet; - -use crate::{ - configs::settings, - connector::{ - utils as connector_utils, - utils::{PaymentsAuthorizeRequestData, PaymentsCompleteAuthorizeRequestData}, +use hyperswitch_domain_models::{ + payment_method_data::PaymentMethodData, + router_data::{AccessToken, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, + CompleteAuthorize, + }, + router_request_types::{ + AccessTokenRequestData, CompleteAuthorizeData, PaymentMethodTokenizationData, + PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, + PaymentsSyncData, RefundsData, SetupMandateRequestData, }, - consts, - core::{ - errors::{self, CustomResult}, - payments, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsCompleteAuthorizeRouterData, PaymentsSyncRouterData, RefundsRouterData, + SetupMandateRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorSpecifications, + ConnectorValidation, MandateSetup, }, + configs::Connectors, + consts, errors, events::connector_api_logs::ConnectorEvent, - headers, - services::{self, request, ConnectorIntegration, ConnectorSpecifications, ConnectorValidation}, types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt, PaymentsCompleteAuthorize}, - transformers::ForeignTryFrom, + PaymentsAuthorizeType, PaymentsCaptureType, PaymentsCompleteAuthorizeType, + PaymentsSyncType, PaymentsVoidType, RefundExecuteType, RefundSyncType, Response, + SetupMandateType, + }, + webhooks, +}; +use masking::Maskable; +use transformers as authorizedotnet; + +use crate::{ + constants::headers, + types::ResponseRouterData, + utils::{ + self as connector_utils, ForeignTryFrom, PaymentMethodDataType, + PaymentsAuthorizeRequestData, PaymentsCompleteAuthorizeRequestData, }, - utils::BytesExt, }; #[derive(Debug, Clone)] @@ -37,9 +66,9 @@ where { fn build_headers( &self, - _req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { Ok(vec![( headers::CONTENT_TYPE.to_string(), self.get_content_type().to_string().into(), @@ -60,7 +89,7 @@ impl ConnectorCommon for Authorizedotnet { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.authorizedotnet.base_url.as_ref() } } @@ -85,11 +114,10 @@ impl ConnectorValidation for Authorizedotnet { fn validate_mandate_payment( &self, - pm_type: Option, - pm_data: types::domain::payments::PaymentMethodData, + pm_type: Option, + pm_data: PaymentMethodData, ) -> CustomResult<(), errors::ConnectorError> { - let mandate_supported_pmd = - std::collections::HashSet::from([crate::connector::utils::PaymentMethodDataType::Card]); + let mandate_supported_pmd = std::collections::HashSet::from([PaymentMethodDataType::Card]); connector_utils::is_mandate_supported(pm_data, pm_type, mandate_supported_pmd, self.id()) } } @@ -103,42 +131,32 @@ impl api::PaymentSession for Authorizedotnet {} impl api::ConnectorAccessToken for Authorizedotnet {} impl api::PaymentToken for Authorizedotnet {} -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Authorizedotnet +impl ConnectorIntegration + for Authorizedotnet { // Not Implemented (R) } -impl ConnectorIntegration - for Authorizedotnet -{ +impl ConnectorIntegration for Authorizedotnet { // Not Implemented (R) } -impl ConnectorIntegration +impl ConnectorIntegration for Authorizedotnet { // Not Implemented (R) } -impl api::MandateSetup for Authorizedotnet {} +impl MandateSetup for Authorizedotnet {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Authorizedotnet +impl ConnectorIntegration + for Authorizedotnet { fn get_headers( &self, - req: &types::SetupMandateRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &SetupMandateRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { // This connector does not require an auth header, the authentication details are sent in the request body self.build_headers(req, connectors) } @@ -147,15 +165,15 @@ impl } fn get_url( &self, - _req: &types::SetupMandateRouterData, - connectors: &settings::Connectors, + _req: &SetupMandateRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::SetupMandateRouterData, - _connectors: &settings::Connectors, + req: &SetupMandateRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = authorizedotnet::CreateCustomerProfileRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -163,28 +181,26 @@ impl fn build_request( &self, - req: &types::SetupMandateRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &SetupMandateRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::SetupMandateType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&SetupMandateType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::SetupMandateType::get_headers(self, req, connectors)?) - .set_body(types::SetupMandateType::get_request_body( - self, req, connectors, - )?) + .headers(SetupMandateType::get_headers(self, req, connectors)?) + .set_body(SetupMandateType::get_request_body(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::SetupMandateRouterData, + data: &SetupMandateRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { use bytes::Buf; // Handle the case where response bytes contains U+FEFF (BOM) character sent by connector @@ -199,7 +215,7 @@ impl event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -208,21 +224,19 @@ impl fn get_error_response( &self, - res: types::Response, + res: Response, event_builder: Option<&mut ConnectorEvent>, - ) -> CustomResult { + ) -> CustomResult { get_error_response(res, event_builder) } } -impl ConnectorIntegration - for Authorizedotnet -{ +impl ConnectorIntegration for Authorizedotnet { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -232,15 +246,15 @@ impl ConnectorIntegration CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::PaymentsCaptureRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCaptureRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = authorizedotnet::AuthorizedotnetRouterData::try_from(( &self.get_currency_unit(), @@ -256,18 +270,16 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsCaptureType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsCaptureType::get_request_body( + .headers(PaymentsCaptureType::get_headers(self, req, connectors)?) + .set_body(PaymentsCaptureType::get_request_body( self, req, connectors, )?) .build(), @@ -276,10 +288,10 @@ impl ConnectorIntegration, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { use bytes::Buf; // Handle the case where response bytes contains U+FEFF (BOM) character sent by connector @@ -295,8 +307,8 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { get_error_response(res, event_builder) } } -impl ConnectorIntegration - for Authorizedotnet -{ +impl ConnectorIntegration for Authorizedotnet { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { // This connector does not require an auth header, the authentication details are sent in the request body self.build_headers(req, connectors) } @@ -332,16 +342,16 @@ impl ConnectorIntegration CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::PaymentsSyncRouterData, - _connectors: &settings::Connectors, + req: &PaymentsSyncRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = authorizedotnet::AuthorizedotnetCreateSyncRequest::try_from(req)?; @@ -350,27 +360,25 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) - .set_body(types::PaymentsSyncType::get_request_body( - self, req, connectors, - )?) + .headers(PaymentsSyncType::get_headers(self, req, connectors)?) + .set_body(PaymentsSyncType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::PaymentsSyncRouterData, + data: &PaymentsSyncRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { use bytes::Buf; // Handle the case where response bytes contains U+FEFF (BOM) character sent by connector @@ -384,7 +392,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { get_error_response(res, event_builder) } } -impl ConnectorIntegration +impl ConnectorIntegration for Authorizedotnet { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { // This connector does not require an auth header, the authentication details are sent in the request body self.build_headers(req, connectors) } @@ -418,16 +426,16 @@ impl ConnectorIntegration CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::PaymentsAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = authorizedotnet::AuthorizedotnetRouterData::try_from(( &self.get_currency_unit(), @@ -442,24 +450,16 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &RouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsAuthorizeType::get_url( - self, req, connectors, - )?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsAuthorizeType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsAuthorizeType::get_request_body( + .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?) + .set_body(PaymentsAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -468,10 +468,10 @@ impl ConnectorIntegration, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { use bytes::Buf; // Handle the case where response bytes contains U+FEFF (BOM) character sent by connector @@ -487,8 +487,8 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { get_error_response(res, event_builder) } } -impl ConnectorIntegration - for Authorizedotnet -{ +impl ConnectorIntegration for Authorizedotnet { fn get_headers( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -523,16 +521,16 @@ impl ConnectorIntegration CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::PaymentsCancelRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCancelRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = authorizedotnet::CancelOrCaptureTransactionRequest::try_from(req)?; @@ -540,28 +538,26 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsVoidType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsVoidType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?) - .set_body(types::PaymentsVoidType::get_request_body( - self, req, connectors, - )?) + .headers(PaymentsVoidType::get_headers(self, req, connectors)?) + .set_body(PaymentsVoidType::get_request_body(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::PaymentsCancelRouterData, + data: &PaymentsCancelRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { use bytes::Buf; // Handle the case where response bytes contains U+FEFF (BOM) character sent by connector @@ -575,7 +571,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { get_error_response(res, event_builder) } } @@ -595,14 +591,12 @@ impl api::Refund for Authorizedotnet {} impl api::RefundExecute for Authorizedotnet {} impl api::RefundSync for Authorizedotnet {} -impl ConnectorIntegration - for Authorizedotnet -{ +impl ConnectorIntegration for Authorizedotnet { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { // This connector does not require an auth header, the authentication details are sent in the request body self.build_headers(req, connectors) } @@ -613,16 +607,16 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + _req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::RefundsRouterData, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = authorizedotnet::AuthorizedotnetRouterData::try_from(( &self.get_currency_unit(), @@ -637,29 +631,25 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::RefundExecuteType::get_url(self, req, connectors)?) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundExecuteType::get_headers( - self, req, connectors, - )?) - .set_body(types::RefundExecuteType::get_request_body( - self, req, connectors, - )?) + .headers(RefundExecuteType::get_headers(self, req, connectors)?) + .set_body(RefundExecuteType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::RefundsRouterData, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult, errors::ConnectorError> { + res: Response, + ) -> CustomResult, errors::ConnectorError> { use bytes::Buf; // Handle the case where response bytes contains U+FEFF (BOM) character sent by connector @@ -673,7 +663,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { get_error_response(res, event_builder) } } -impl ConnectorIntegration - for Authorizedotnet -{ +impl ConnectorIntegration for Authorizedotnet { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { // This connector does not require an auth header, the authentication details are sent in the request body self.build_headers(req, connectors) } @@ -707,16 +695,16 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + _req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::RefundsRouterData, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = authorizedotnet::AuthorizedotnetRouterData::try_from(( &self.get_currency_unit(), @@ -732,27 +720,25 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::RefundSyncType::get_url(self, req, connectors)?) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundSyncType::get_headers(self, req, connectors)?) - .set_body(types::RefundSyncType::get_request_body( - self, req, connectors, - )?) + .headers(RefundSyncType::get_headers(self, req, connectors)?) + .set_body(RefundSyncType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::RefundsRouterData, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult, errors::ConnectorError> { + res: Response, + ) -> CustomResult, errors::ConnectorError> { use bytes::Buf; // Handle the case where response bytes contains U+FEFF (BOM) character sent by connector @@ -766,7 +752,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { get_error_response(res, event_builder) } } -impl PaymentsCompleteAuthorize for Authorizedotnet {} +impl api::PaymentsCompleteAuthorize for Authorizedotnet {} -impl - ConnectorIntegration< - api::CompleteAuthorize, - types::CompleteAuthorizeData, - types::PaymentsResponseData, - > for Authorizedotnet +impl ConnectorIntegration + for Authorizedotnet { fn get_headers( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -805,15 +787,15 @@ impl fn get_url( &self, - _req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, + _req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(self.base_url(connectors).to_string()) } fn get_request_body( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCompleteAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = authorizedotnet::AuthorizedotnetRouterData::try_from(( &self.get_currency_unit(), @@ -829,20 +811,20 @@ impl fn build_request( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsCompleteAuthorizeType::get_url( + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsCompleteAuthorizeType::get_url( self, req, connectors, )?) .attach_default_headers() - .headers(types::PaymentsCompleteAuthorizeType::get_headers( + .headers(PaymentsCompleteAuthorizeType::get_headers( self, req, connectors, )?) - .set_body(types::PaymentsCompleteAuthorizeType::get_request_body( + .set_body(PaymentsCompleteAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -851,10 +833,10 @@ impl fn handle_response( &self, - data: &types::PaymentsCompleteAuthorizeRouterData, + data: &PaymentsCompleteAuthorizeRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { use bytes::Buf; // Handle the case where response bytes contains U+FEFF (BOM) character sent by connector @@ -868,8 +850,8 @@ impl .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::foreign_try_from(( - types::ResponseRouterData { + RouterData::foreign_try_from(( + ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -880,25 +862,25 @@ impl fn get_error_response( &self, - res: types::Response, + res: Response, event_builder: Option<&mut ConnectorEvent>, - ) -> CustomResult { + ) -> CustomResult { get_error_response(res, event_builder) } } #[async_trait::async_trait] -impl api::IncomingWebhook for Authorizedotnet { +impl webhooks::IncomingWebhook for Authorizedotnet { fn get_webhook_source_verification_algorithm( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Ok(Box::new(crypto::HmacSha512)) } fn get_webhook_source_verification_signature( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { let security_header = request @@ -920,7 +902,7 @@ impl api::IncomingWebhook for Authorizedotnet { fn get_webhook_source_verification_message( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _merchant_id: &common_utils::id_type::MerchantId, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { @@ -929,7 +911,7 @@ impl api::IncomingWebhook for Authorizedotnet { fn get_webhook_object_reference_id( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult { let details: authorizedotnet::AuthorizedotnetWebhookObjectId = request .body @@ -959,18 +941,20 @@ impl api::IncomingWebhook for Authorizedotnet { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let details: authorizedotnet::AuthorizedotnetWebhookEventType = request .body .parse_struct("AuthorizedotnetWebhookEventType") .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?; - Ok(api::IncomingWebhookEvent::from(details.event_type)) + Ok(api_models::webhooks::IncomingWebhookEvent::from( + details.event_type, + )) } fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let payload: authorizedotnet::AuthorizedotnetWebhookObjectId = request .body @@ -985,13 +969,13 @@ impl api::IncomingWebhook for Authorizedotnet { #[inline] fn get_error_response( - types::Response { + Response { response, status_code, .. - }: types::Response, + }: Response, event_builder: Option<&mut ConnectorEvent>, -) -> CustomResult { +) -> CustomResult { let response: authorizedotnet::AuthorizedotnetPaymentsResponse = response .parse_struct("AuthorizedotnetPaymentsResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; @@ -1005,7 +989,7 @@ fn get_error_response( )) => Ok(payment_response .errors .and_then(|errors| { - errors.into_iter().next().map(|error| types::ErrorResponse { + errors.into_iter().next().map(|error| ErrorResponse { code: error.error_code, message: error.error_text.to_owned(), reason: Some(error.error_text), @@ -1014,7 +998,7 @@ fn get_error_response( connector_transaction_id: None, }) }) - .unwrap_or_else(|| types::ErrorResponse { + .unwrap_or_else(|| ErrorResponse { code: consts::NO_ERROR_CODE.to_string(), // authorizedotnet sends 200 in case of bad request so this are hard coded to NO_ERROR_CODE and NO_ERROR_MESSAGE message: consts::NO_ERROR_MESSAGE.to_string(), reason: None, @@ -1030,7 +1014,7 @@ fn get_error_response( .first() .ok_or(errors::ConnectorError::ResponseDeserializationFailed)? .text; - Ok(types::ErrorResponse { + Ok(ErrorResponse { code: consts::NO_ERROR_CODE.to_string(), message: message.to_string(), reason: Some(message.to_string()), @@ -1042,18 +1026,18 @@ fn get_error_response( } } -impl services::ConnectorRedirectResponse for Authorizedotnet { +impl api::ConnectorRedirectResponse for Authorizedotnet { fn get_flow_type( &self, _query_params: &str, _json_payload: Option, - action: services::PaymentAction, - ) -> CustomResult { + action: PaymentAction, + ) -> CustomResult { match action { - services::PaymentAction::PSync - | services::PaymentAction::CompleteAuthorize - | services::PaymentAction::PaymentAuthenticateCompleteAuthorize => { - Ok(payments::CallConnectorAction::Trigger) + PaymentAction::PSync + | PaymentAction::CompleteAuthorize + | PaymentAction::PaymentAuthenticateCompleteAuthorize => { + Ok(enums::CallConnectorAction::Trigger) } } } diff --git a/crates/router/src/connector/authorizedotnet/transformers.rs b/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs similarity index 83% rename from crates/router/src/connector/authorizedotnet/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs index d48ead5d52e..626d6d76599 100644 --- a/crates/router/src/connector/authorizedotnet/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/authorizedotnet/transformers.rs @@ -1,29 +1,39 @@ use std::collections::BTreeMap; +use api_models::webhooks::IncomingWebhookEvent; +use common_enums::enums; use common_utils::{ errors::CustomResult, - ext_traits::{Encode, ValueExt}, + ext_traits::{Encode, OptionExt, ValueExt}, + request::Method, }; use error_stack::ResultExt; +use hyperswitch_domain_models::{ + payment_method_data::{Card, PaymentMethodData, WalletData}, + router_data::{ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::RSync, + router_request_types::ResponseId, + router_response_types::{ + MandateReference, PaymentsResponseData, RedirectForm, RefundsResponseData, + }, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsCompleteAuthorizeRouterData, PaymentsSyncRouterData, RefundsRouterData, + SetupMandateRouterData, + }, +}; +use hyperswitch_interfaces::{api, errors}; use masking::{ExposeInterface, PeekInterface, Secret, StrongSecret}; use rand::distributions::{Alphanumeric, DistString}; use serde::{Deserialize, Serialize}; use serde_json::Value; use crate::{ - connector::utils::{ - self, CardData, PaymentsSyncRequestData, RefundsRequestData, RouterData, WalletData, + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::{ + self, CardData, ForeignTryFrom, PaymentsSyncRequestData, RefundsRequestData, + RouterData as OtherRouterData, WalletData as OtherWalletData, }, - core::errors, - services, - types::{ - self, - api::{self, enums as api_enums}, - domain, - storage::enums, - transformers::{ForeignFrom, ForeignTryFrom}, - }, - utils::OptionExt, }; #[derive(Debug, Serialize)] @@ -70,11 +80,11 @@ pub struct AuthorizedotnetAuthType { transaction_key: Secret, } -impl TryFrom<&types::ConnectorAuthType> for AuthorizedotnetAuthType { +impl TryFrom<&ConnectorAuthType> for AuthorizedotnetAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { - if let types::ConnectorAuthType::BodyKey { api_key, key1 } = auth_type { + fn try_from(auth_type: &ConnectorAuthType) -> Result { + if let ConnectorAuthType::BodyKey { api_key, key1 } = auth_type { Ok(Self { name: api_key.to_owned(), transaction_key: key1.to_owned(), @@ -214,7 +224,7 @@ pub struct BillTo { city: Option, state: Option>, zip: Option>, - country: Option, + country: Option, } #[derive(Debug, Serialize)] @@ -336,11 +346,11 @@ impl ForeignTryFrom for Vec { } } -impl TryFrom<&types::SetupMandateRouterData> for CreateCustomerProfileRequest { +impl TryFrom<&SetupMandateRouterData> for CreateCustomerProfileRequest { type Error = error_stack::Report; - fn try_from(item: &types::SetupMandateRouterData) -> Result { + fn try_from(item: &SetupMandateRouterData) -> Result { match item.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(ccard) => { + PaymentMethodData::Card(ccard) => { let merchant_authentication = AuthorizedotnetAuthType::try_from(&item.connector_auth_type)?; let validation_mode = match item.test_mode { @@ -366,24 +376,24 @@ impl TryFrom<&types::SetupMandateRouterData> for CreateCustomerProfileRequest { }, }) } - domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("authorizedotnet"), ))? @@ -403,32 +413,21 @@ pub struct AuthorizedotnetSetupMandateResponse { // zero dollar response impl - TryFrom< - types::ResponseRouterData< - F, - AuthorizedotnetSetupMandateResponse, - T, - types::PaymentsResponseData, - >, - > for types::RouterData + TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - AuthorizedotnetSetupMandateResponse, - T, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { match item.response.messages.result_code { ResultCode::Ok => Ok(Self { status: enums::AttemptStatus::Charged, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::NoResponseId, + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::NoResponseId, redirection_data: Box::new(None), mandate_reference: Box::new(item.response.customer_profile_id.map( - |customer_profile_id| types::MandateReference { + |customer_profile_id| MandateReference { connector_mandate_id: item.response.customer_payment_profile_id_list.first().map( |payment_profile_id| { @@ -451,7 +450,7 @@ impl ResultCode::Error => { let error_code = match item.response.messages.message.first() { Some(first_error_message) => first_error_message.code.clone(), - None => crate::consts::NO_ERROR_CODE.to_string(), + None => hyperswitch_interfaces::consts::NO_ERROR_CODE.to_string(), }; let error_reason = item .response @@ -461,7 +460,7 @@ impl .map(|error: &ResponseMessage| error.text.clone()) .collect::>() .join(" "); - let response = Err(types::ErrorResponse { + let response = Err(ErrorResponse { code: error_code, message: item.response.messages.result_code.to_string(), reason: Some(error_reason), @@ -515,12 +514,12 @@ impl TryFrom for AuthorizationType { } } -impl TryFrom<&AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>> +impl TryFrom<&AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>> for CreateTransactionRequest { type Error = error_stack::Report; fn try_from( - item: &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, + item: &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, ) -> Result { let merchant_authentication = AuthorizedotnetAuthType::try_from(&item.router_data.connector_auth_type)?; @@ -551,29 +550,27 @@ impl TryFrom<&AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>> } None => { match &item.router_data.request.payment_method_data { - domain::PaymentMethodData::Card(ccard) => { - TransactionRequest::try_from((item, ccard)) - } - domain::PaymentMethodData::Wallet(wallet_data) => { + PaymentMethodData::Card(ccard) => TransactionRequest::try_from((item, ccard)), + PaymentMethodData::Wallet(wallet_data) => { TransactionRequest::try_from((item, wallet_data)) } - domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::CardRedirect(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message( "authorizedotnet", @@ -595,14 +592,14 @@ impl TryFrom<&AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>> impl TryFrom<( - &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, + &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, String, )> for TransactionRequest { type Error = error_stack::Report; fn try_from( (item, network_trans_id): ( - &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, + &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, String, ), ) -> Result { @@ -611,31 +608,31 @@ impl amount: item.amount, currency_code: item.router_data.request.currency, payment: Some(match item.router_data.request.payment_method_data { - domain::PaymentMethodData::Card(ref ccard) => { + PaymentMethodData::Card(ref ccard) => { PaymentDetails::CreditCard(CreditCardDetails { card_number: (*ccard.card_number).clone(), expiration_date: ccard.get_expiry_date_as_yyyymm("-"), card_code: None, }) } - domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("authorizedotnet"), ))? @@ -684,14 +681,14 @@ impl impl TryFrom<( - &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, + &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, api_models::payments::ConnectorMandateReferenceId, )> for TransactionRequest { type Error = error_stack::Report; fn try_from( (item, connector_mandate_id): ( - &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, + &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, api_models::payments::ConnectorMandateReferenceId, ), ) -> Result { @@ -740,15 +737,15 @@ impl impl TryFrom<( - &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, - &domain::Card, + &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, + &Card, )> for TransactionRequest { type Error = error_stack::Report; fn try_from( (item, ccard): ( - &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, - &domain::Card, + &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, + &Card, ), ) -> Result { let (profile, customer) = @@ -833,15 +830,15 @@ impl impl TryFrom<( - &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, - &domain::WalletData, + &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, + &WalletData, )> for TransactionRequest { type Error = error_stack::Report; fn try_from( (item, wallet_data): ( - &AuthorizedotnetRouterData<&types::PaymentsAuthorizeRouterData>, - &domain::WalletData, + &AuthorizedotnetRouterData<&PaymentsAuthorizeRouterData>, + &WalletData, ), ) -> Result { Ok(Self { @@ -888,9 +885,9 @@ impl } } -impl TryFrom<&types::PaymentsCancelRouterData> for CancelOrCaptureTransactionRequest { +impl TryFrom<&PaymentsCancelRouterData> for CancelOrCaptureTransactionRequest { type Error = error_stack::Report; - fn try_from(item: &types::PaymentsCancelRouterData) -> Result { + fn try_from(item: &PaymentsCancelRouterData) -> Result { let transaction_request = TransactionVoidOrCaptureRequest { amount: None, //amount is not required for void transaction_type: TransactionType::Void, @@ -908,12 +905,12 @@ impl TryFrom<&types::PaymentsCancelRouterData> for CancelOrCaptureTransactionReq } } -impl TryFrom<&AuthorizedotnetRouterData<&types::PaymentsCaptureRouterData>> +impl TryFrom<&AuthorizedotnetRouterData<&PaymentsCaptureRouterData>> for CancelOrCaptureTransactionRequest { type Error = error_stack::Report; fn try_from( - item: &AuthorizedotnetRouterData<&types::PaymentsCaptureRouterData>, + item: &AuthorizedotnetRouterData<&PaymentsCaptureRouterData>, ) -> Result { let transaction_request = TransactionVoidOrCaptureRequest { amount: Some(item.amount), @@ -964,22 +961,22 @@ pub enum AuthorizedotnetRefundStatus { HeldForReview, } -impl ForeignFrom<(AuthorizedotnetPaymentStatus, bool)> for enums::AttemptStatus { - fn foreign_from((item, auto_capture): (AuthorizedotnetPaymentStatus, bool)) -> Self { - match item { - AuthorizedotnetPaymentStatus::Approved => { - if auto_capture { - Self::Charged - } else { - Self::Authorized - } - } - AuthorizedotnetPaymentStatus::Declined | AuthorizedotnetPaymentStatus::Error => { - Self::Failure +fn get_payment_status( + (item, auto_capture): (AuthorizedotnetPaymentStatus, bool), +) -> enums::AttemptStatus { + match item { + AuthorizedotnetPaymentStatus::Approved => { + if auto_capture { + enums::AttemptStatus::Charged + } else { + enums::AttemptStatus::Authorized } - AuthorizedotnetPaymentStatus::RequiresAction => Self::AuthenticationPending, - AuthorizedotnetPaymentStatus::HeldForReview => Self::Pending, } + AuthorizedotnetPaymentStatus::Declined | AuthorizedotnetPaymentStatus::Error => { + enums::AttemptStatus::Failure + } + AuthorizedotnetPaymentStatus::RequiresAction => enums::AttemptStatus::AuthenticationPending, + AuthorizedotnetPaymentStatus::HeldForReview => enums::AttemptStatus::Pending, } } @@ -1113,35 +1110,25 @@ impl From for enums::AttemptStatus { impl ForeignTryFrom<( - types::ResponseRouterData< - F, - AuthorizedotnetPaymentsResponse, - T, - types::PaymentsResponseData, - >, + ResponseRouterData, bool, - )> for types::RouterData + )> for RouterData { type Error = error_stack::Report; fn foreign_try_from( (item, is_auto_capture): ( - types::ResponseRouterData< - F, - AuthorizedotnetPaymentsResponse, - T, - types::PaymentsResponseData, - >, + ResponseRouterData, bool, ), ) -> Result { match &item.response.transaction_response { Some(TransactionResponse::AuthorizedotnetTransactionResponse(transaction_response)) => { - let status = enums::AttemptStatus::foreign_from(( + let status = get_payment_status(( transaction_response.response_code.clone(), is_auto_capture, )); let error = transaction_response.errors.as_ref().and_then(|errors| { - errors.iter().next().map(|error| types::ErrorResponse { + errors.iter().next().map(|error| ErrorResponse { code: error.error_code.clone(), message: error.error_text.clone(), reason: Some(error.error_text.clone()), @@ -1164,15 +1151,14 @@ impl .secure_acceptance .as_ref() .and_then(|x| x.secure_acceptance_url.to_owned()); - let redirection_data = - url.map(|url| services::RedirectForm::from((url, services::Method::Get))); + let redirection_data = url.map(|url| RedirectForm::from((url, Method::Get))); let mandate_reference = item.response.profile_response.map(|profile_response| { let payment_profile_id = profile_response .customer_payment_profile_id_list .and_then(|customer_payment_profile_id_list| { customer_payment_profile_id_list.first().cloned() }); - types::MandateReference { + MandateReference { connector_mandate_id: profile_response.customer_profile_id.and_then( |customer_profile_id| { payment_profile_id.map(|payment_profile_id| { @@ -1190,8 +1176,8 @@ impl status, response: match error { Some(err) => Err(err), - None => Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + None => Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( transaction_response.transaction_id.clone(), ), redirection_data: Box::new(redirection_data), @@ -1222,25 +1208,18 @@ impl } } -impl - TryFrom< - types::ResponseRouterData, - > for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - AuthorizedotnetVoidResponse, - T, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { match &item.response.transaction_response { Some(transaction_response) => { let status = enums::AttemptStatus::from(transaction_response.response_code.clone()); let error = transaction_response.errors.as_ref().and_then(|errors| { - errors.iter().next().map(|error| types::ErrorResponse { + errors.iter().next().map(|error| ErrorResponse { code: error.error_code.clone(), message: error.error_text.clone(), reason: Some(error.error_text.clone()), @@ -1263,8 +1242,8 @@ impl status, response: match error { Some(err) => Err(err), - None => Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + None => Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( transaction_response.transaction_id.clone(), ), redirection_data: Box::new(None), @@ -1318,10 +1297,10 @@ pub struct CreateRefundRequest { create_transaction_request: AuthorizedotnetRefundRequest, } -impl TryFrom<&AuthorizedotnetRouterData<&types::RefundsRouterData>> for CreateRefundRequest { +impl TryFrom<&AuthorizedotnetRouterData<&RefundsRouterData>> for CreateRefundRequest { type Error = error_stack::Report; fn try_from( - item: &AuthorizedotnetRouterData<&types::RefundsRouterData>, + item: &AuthorizedotnetRouterData<&RefundsRouterData>, ) -> Result { let payment_details = item .router_data @@ -1378,17 +1357,17 @@ pub struct AuthorizedotnetRefundResponse { pub messages: ResponseMessages, } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let transaction_response = &item.response.transaction_response; let refund_status = enums::RefundStatus::from(transaction_response.response_code.clone()); let error = transaction_response.errors.clone().and_then(|errors| { - errors.first().map(|error| types::ErrorResponse { + errors.first().map(|error| ErrorResponse { code: error.error_code.clone(), message: error.error_text.clone(), reason: Some(error.error_text.clone()), @@ -1401,7 +1380,7 @@ impl TryFrom Err(err), - None => Ok(types::RefundsResponseData { + None => Ok(RefundsResponseData { connector_refund_id: transaction_response.transaction_id.clone(), refund_status, }), @@ -1424,13 +1403,13 @@ pub struct AuthorizedotnetCreateSyncRequest { get_transaction_details_request: TransactionDetails, } -impl TryFrom<&AuthorizedotnetRouterData<&types::RefundsRouterData>> +impl TryFrom<&AuthorizedotnetRouterData<&RefundsRouterData>> for AuthorizedotnetCreateSyncRequest { type Error = error_stack::Report; fn try_from( - item: &AuthorizedotnetRouterData<&types::RefundsRouterData>, + item: &AuthorizedotnetRouterData<&RefundsRouterData>, ) -> Result { let transaction_id = item.router_data.request.get_connector_refund_id()?; let merchant_authentication = @@ -1446,10 +1425,10 @@ impl TryFrom<&AuthorizedotnetRouterData<&types::RefundsRouterData>> } } -impl TryFrom<&types::PaymentsSyncRouterData> for AuthorizedotnetCreateSyncRequest { +impl TryFrom<&PaymentsSyncRouterData> for AuthorizedotnetCreateSyncRequest { type Error = error_stack::Report; - fn try_from(item: &types::PaymentsSyncRouterData) -> Result { + fn try_from(item: &PaymentsSyncRouterData) -> Result { let transaction_id = Some( item.request .get_connector_transaction_id() @@ -1548,19 +1527,19 @@ impl From for enums::RefundStatus { } } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { match item.response.transaction { Some(transaction) => { let refund_status = enums::RefundStatus::from(transaction.transaction_status); Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: transaction.transaction_id, refund_status, }), @@ -1575,27 +1554,20 @@ impl TryFrom - TryFrom< - types::ResponseRouterData, - > for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - AuthorizedotnetSyncResponse, - Req, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { match item.response.transaction { Some(transaction) => { let payment_status = enums::AttemptStatus::from(transaction.transaction_status); Ok(Self { - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( transaction.transaction_id.clone(), ), redirection_data: Box::new(None), @@ -1667,12 +1639,12 @@ impl TryFrom> for TransactionType { fn get_err_response( status_code: u16, message: ResponseMessages, -) -> Result { +) -> Result { let response_message = message .message .first() .ok_or(errors::ConnectorError::ResponseDeserializationFailed)?; - Ok(types::ErrorResponse { + Ok(ErrorResponse { code: response_message.code.clone(), message: response_message.text.clone(), reason: Some(response_message.text.clone()), @@ -1735,7 +1707,7 @@ pub enum AuthorizedotnetIncomingWebhookEventType { Unknown, } -impl From for api::IncomingWebhookEvent { +impl From for IncomingWebhookEvent { fn from(event_type: AuthorizedotnetIncomingWebhookEventType) -> Self { match event_type { AuthorizedotnetIncomingWebhookEventType::AuthorizationCreated @@ -1789,50 +1761,48 @@ impl TryFrom for AuthorizedotnetSyncResponse { } fn get_wallet_data( - wallet_data: &domain::WalletData, + wallet_data: &WalletData, return_url: &Option, ) -> CustomResult { match wallet_data { - domain::WalletData::GooglePay(_) => Ok(PaymentDetails::OpaqueData(WalletDetails { + WalletData::GooglePay(_) => Ok(PaymentDetails::OpaqueData(WalletDetails { data_descriptor: WalletMethod::Googlepay, data_value: Secret::new(wallet_data.get_encoded_wallet_token()?), })), - domain::WalletData::ApplePay(applepay_token) => { - Ok(PaymentDetails::OpaqueData(WalletDetails { - data_descriptor: WalletMethod::Applepay, - data_value: Secret::new(applepay_token.payment_data.clone()), - })) - } - domain::WalletData::PaypalRedirect(_) => Ok(PaymentDetails::PayPal(PayPalDetails { + WalletData::ApplePay(applepay_token) => Ok(PaymentDetails::OpaqueData(WalletDetails { + data_descriptor: WalletMethod::Applepay, + data_value: Secret::new(applepay_token.payment_data.clone()), + })), + WalletData::PaypalRedirect(_) => Ok(PaymentDetails::PayPal(PayPalDetails { success_url: return_url.to_owned(), cancel_url: return_url.to_owned(), })), - domain::WalletData::AliPayQr(_) - | domain::WalletData::AliPayRedirect(_) - | domain::WalletData::AliPayHkRedirect(_) - | domain::WalletData::AmazonPayRedirect(_) - | domain::WalletData::MomoRedirect(_) - | domain::WalletData::KakaoPayRedirect(_) - | domain::WalletData::GoPayRedirect(_) - | domain::WalletData::GcashRedirect(_) - | domain::WalletData::ApplePayRedirect(_) - | domain::WalletData::ApplePayThirdPartySdk(_) - | domain::WalletData::DanaRedirect {} - | domain::WalletData::GooglePayRedirect(_) - | domain::WalletData::GooglePayThirdPartySdk(_) - | domain::WalletData::MbWayRedirect(_) - | domain::WalletData::MobilePayRedirect(_) - | domain::WalletData::PaypalSdk(_) - | domain::WalletData::Paze(_) - | domain::WalletData::SamsungPay(_) - | domain::WalletData::TwintRedirect {} - | domain::WalletData::VippsRedirect {} - | domain::WalletData::TouchNGoRedirect(_) - | domain::WalletData::WeChatPayRedirect(_) - | domain::WalletData::WeChatPayQr(_) - | domain::WalletData::CashappQr(_) - | domain::WalletData::SwishQr(_) - | domain::WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( + WalletData::AliPayQr(_) + | WalletData::AliPayRedirect(_) + | WalletData::AliPayHkRedirect(_) + | WalletData::AmazonPayRedirect(_) + | WalletData::MomoRedirect(_) + | WalletData::KakaoPayRedirect(_) + | WalletData::GoPayRedirect(_) + | WalletData::GcashRedirect(_) + | WalletData::ApplePayRedirect(_) + | WalletData::ApplePayThirdPartySdk(_) + | WalletData::DanaRedirect {} + | WalletData::GooglePayRedirect(_) + | WalletData::GooglePayThirdPartySdk(_) + | WalletData::MbWayRedirect(_) + | WalletData::MobilePayRedirect(_) + | WalletData::PaypalSdk(_) + | WalletData::Paze(_) + | WalletData::SamsungPay(_) + | WalletData::TwintRedirect {} + | WalletData::VippsRedirect {} + | WalletData::TouchNGoRedirect(_) + | WalletData::WeChatPayRedirect(_) + | WalletData::WeChatPayQr(_) + | WalletData::CashappQr(_) + | WalletData::SwishQr(_) + | WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("authorizedotnet"), ))?, } @@ -1883,12 +1853,12 @@ pub struct PaypalQueryParams { payer_id: Option>, } -impl TryFrom<&AuthorizedotnetRouterData<&types::PaymentsCompleteAuthorizeRouterData>> +impl TryFrom<&AuthorizedotnetRouterData<&PaymentsCompleteAuthorizeRouterData>> for PaypalConfirmRequest { type Error = error_stack::Report; fn try_from( - item: &AuthorizedotnetRouterData<&types::PaymentsCompleteAuthorizeRouterData>, + item: &AuthorizedotnetRouterData<&PaymentsCompleteAuthorizeRouterData>, ) -> Result { let params = item .router_data diff --git a/crates/router/src/connector/checkout.rs b/crates/hyperswitch_connectors/src/connectors/checkout.rs similarity index 65% rename from crates/router/src/connector/checkout.rs rename to crates/hyperswitch_connectors/src/connectors/checkout.rs index 96b30dc80f9..61977098476 100644 --- a/crates/router/src/connector/checkout.rs +++ b/crates/hyperswitch_connectors/src/connectors/checkout.rs @@ -1,39 +1,69 @@ pub mod transformers; +use common_enums::{enums, CallConnectorAction, PaymentAction}; use common_utils::{ crypto, + errors::CustomResult, ext_traits::ByteSliceExt, - request::RequestContent, + request::{Method, Request, RequestBuilder, RequestContent}, types::{AmountConvertor, MinorUnit, MinorUnitForConnector}, }; -use diesel_models::enums; use error_stack::ResultExt; -use masking::PeekInterface; - -use self::transformers as checkout; -use super::utils::{ - self as conn_utils, ConnectorErrorType, ConnectorErrorTypeMapping, RefundsRequestData, +use hyperswitch_domain_models::{ + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, + Accept, Defend, Evidence, Retrieve, Upload, + }, + router_request_types::{ + AcceptDisputeRequestData, AccessTokenRequestData, DefendDisputeRequestData, + PaymentMethodTokenizationData, PaymentsAuthorizeData, PaymentsCancelData, + PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData, RefundsData, + RetrieveFileRequestData, SetupMandateRequestData, SubmitEvidenceRequestData, + SyncRequestType, UploadFileRequestData, + }, + router_response_types::{ + AcceptDisputeResponse, DefendDisputeResponse, PaymentsResponseData, RefundsResponseData, + RetrieveFileResponse, SubmitEvidenceResponse, UploadFileResponse, + }, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsSyncRouterData, RefundsRouterData, TokenizationRouterData, + }, }; -use crate::{ - configs::settings, - connector::utils as connector_utils, - consts, - core::{ - errors::{self, CustomResult}, - payments, +use hyperswitch_interfaces::{ + api::{ + self, + disputes::{AcceptDispute, DefendDispute, Dispute, SubmitEvidence}, + files::{FilePurpose, FileUpload, RetrieveFile, UploadFile}, + CaptureSyncMethod, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, + ConnectorSpecifications, ConnectorValidation, MandateSetup, }, + configs::Connectors, + consts, + disputes::DisputePayload, + errors, events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorSpecifications, ConnectorValidation, + types::{ + AcceptDisputeType, DefendDisputeType, PaymentsAuthorizeType, PaymentsCaptureType, + PaymentsSyncType, PaymentsVoidType, RefundExecuteType, RefundSyncType, Response, + SubmitEvidenceType, TokenizationType, UploadFileType, }, + webhooks, +}; +use masking::{Mask, Maskable, PeekInterface}; +use transformers::CheckoutErrorResponse; + +use self::transformers as checkout; +use crate::{ + constants::headers, types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, + AcceptDisputeRouterData, DefendDisputeRouterData, ResponseRouterData, + SubmitEvidenceRouterData, UploadFileRouterData, }, - utils::BytesExt, + utils::{self, ConnectorErrorType, RefundsRequestData}, }; #[derive(Clone)] @@ -55,12 +85,12 @@ where { fn build_headers( &self, - req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), - types::PaymentsAuthorizeType::get_content_type(self) + PaymentsAuthorizeType::get_content_type(self) .to_string() .into(), )]; @@ -85,8 +115,8 @@ impl ConnectorCommon for Checkout { fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = checkout::CheckoutAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; Ok(vec![( @@ -95,15 +125,15 @@ impl ConnectorCommon for Checkout { )]) } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.checkout.base_url.as_ref() } fn build_error_response( &self, - res: types::Response, + res: Response, event_builder: Option<&mut ConnectorEvent>, - ) -> CustomResult { - let response: checkout::ErrorResponse = if res.response.is_empty() { + ) -> CustomResult { + let response: CheckoutErrorResponse = if res.response.is_empty() { let (error_codes, error_type) = if res.status_code == 401 { ( Some(vec!["Invalid api key".to_string()]), @@ -112,7 +142,7 @@ impl ConnectorCommon for Checkout { } else { (None, None) }; - checkout::ErrorResponse { + CheckoutErrorResponse { request_id: None, error_codes, error_type, @@ -127,14 +157,14 @@ impl ConnectorCommon for Checkout { router_env::logger::info!(connector_response=?response); let errors_list = response.error_codes.clone().unwrap_or_default(); - let option_error_code_message = conn_utils::get_error_code_error_message_based_on_priority( + let option_error_code_message = utils::get_error_code_error_message_based_on_priority( self.clone(), errors_list .into_iter() .map(|errors| errors.into()) .collect(), ); - Ok(types::ErrorResponse { + Ok(ErrorResponse { status_code: res.status_code, code: option_error_code_message .clone() @@ -166,9 +196,10 @@ impl ConnectorValidation for Checkout { | enums::CaptureMethod::SequentialAutomatic | enums::CaptureMethod::Manual | enums::CaptureMethod::ManualMultiple => Ok(()), - enums::CaptureMethod::Scheduled => Err( - connector_utils::construct_not_implemented_error_report(capture_method, self.id()), - ), + enums::CaptureMethod::Scheduled => Err(utils::construct_not_implemented_error_report( + capture_method, + self.id(), + )), } } } @@ -181,24 +212,20 @@ impl api::PaymentVoid for Checkout {} impl api::PaymentCapture for Checkout {} impl api::PaymentSession for Checkout {} impl api::ConnectorAccessToken for Checkout {} -impl api::AcceptDispute for Checkout {} +impl AcceptDispute for Checkout {} impl api::PaymentToken for Checkout {} -impl api::Dispute for Checkout {} -impl api::RetrieveFile for Checkout {} -impl api::DefendDispute for Checkout {} - -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Checkout +impl Dispute for Checkout {} +impl RetrieveFile for Checkout {} +impl DefendDispute for Checkout {} + +impl ConnectorIntegration + for Checkout { fn get_headers( &self, - req: &types::TokenizationRouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &TokenizationRouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), self.common_get_content_type().to_string().into(), @@ -219,16 +246,16 @@ impl fn get_url( &self, - _req: &types::TokenizationRouterData, - connectors: &settings::Connectors, + _req: &TokenizationRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}tokens", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::TokenizationRouterData, - _connectors: &settings::Connectors, + req: &TokenizationRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = checkout::TokenRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -236,30 +263,28 @@ impl fn build_request( &self, - req: &types::TokenizationRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &TokenizationRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::TokenizationType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&TokenizationType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::TokenizationType::get_headers(self, req, connectors)?) - .set_body(types::TokenizationType::get_request_body( - self, req, connectors, - )?) + .headers(TokenizationType::get_headers(self, req, connectors)?) + .set_body(TokenizationType::get_request_body(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::TokenizationRouterData, + data: &TokenizationRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult + res: Response, + ) -> CustomResult where - types::PaymentsResponseData: Clone, + PaymentsResponseData: Clone, { let response: checkout::CheckoutTokenResponse = res .response @@ -267,7 +292,7 @@ impl .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -277,44 +302,32 @@ impl fn get_error_response( &self, - res: types::Response, + res: Response, event_builder: Option<&mut ConnectorEvent>, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { // Not Implemented (R) } -impl ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { // Not Implemented (R) } -impl api::MandateSetup for Checkout {} +impl MandateSetup for Checkout {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Checkout +impl ConnectorIntegration + for Checkout { // Issue: #173 fn build_request( &self, - _req: &types::RouterData< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - >, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Setup Mandate flow for Checkout".to_string()) .into(), @@ -322,21 +335,19 @@ impl } } -impl ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_url( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, + req: &PaymentsCaptureRouterData, + connectors: &Connectors, ) -> CustomResult { let id = req.request.connector_transaction_id.as_str(); Ok(format!( @@ -346,10 +357,10 @@ impl ConnectorIntegration CustomResult { - let amount = connector_utils::convert_amount( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_amount_to_capture, req.request.currency, @@ -362,18 +373,16 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsCaptureType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsCaptureType::get_request_body( + .headers(PaymentsCaptureType::get_headers(self, req, connectors)?) + .set_body(PaymentsCaptureType::get_request_body( self, req, connectors, )?) .build(), @@ -382,17 +391,17 @@ impl ConnectorIntegration, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { let response: checkout::PaymentCaptureResponse = res .response .parse_struct("CaptureResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -402,32 +411,30 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_url( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, + req: &PaymentsSyncRouterData, + connectors: &Connectors, ) -> CustomResult { let suffix = match req.request.sync_type { - types::SyncRequestType::MultipleCaptureSync(_) => "/actions", - types::SyncRequestType::SinglePaymentSync => "", + SyncRequestType::MultipleCaptureSync(_) => "/actions", + SyncRequestType::SinglePaymentSync => "", }; Ok(format!( "{}{}{}{}", @@ -443,53 +450,53 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) + .headers(PaymentsSyncType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::PaymentsSyncRouterData, + data: &PaymentsSyncRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult + res: Response, + ) -> CustomResult where - api::PSync: Clone, - types::PaymentsSyncData: Clone, - types::PaymentsResponseData: Clone, + PSync: Clone, + PaymentsSyncData: Clone, + PaymentsResponseData: Clone, { match &data.request.sync_type { - types::SyncRequestType::MultipleCaptureSync(_) => { + SyncRequestType::MultipleCaptureSync(_) => { let response: checkout::PaymentsResponseEnum = res .response .parse_struct("checkout::PaymentsResponseEnum") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, }) .change_context(errors::ConnectorError::ResponseHandlingFailed) } - types::SyncRequestType::SinglePaymentSync => { + SyncRequestType::SinglePaymentSync => { let response: checkout::PaymentsResponse = res .response .parse_struct("PaymentsResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -501,44 +508,42 @@ impl ConnectorIntegration CustomResult { - Ok(services::CaptureSyncMethod::Bulk) + ) -> CustomResult { + Ok(CaptureSyncMethod::Bulk) } fn get_error_response( &self, - res: types::Response, + res: Response, event_builder: Option<&mut ConnectorEvent>, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_url( &self, - _req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, + _req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}{}", self.base_url(connectors), "payments")) } fn get_request_body( &self, - req: &types::PaymentsAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -550,24 +555,16 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &RouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsAuthorizeType::get_url( - self, req, connectors, - )?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsAuthorizeType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsAuthorizeType::get_request_body( + .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?) + .set_body(PaymentsAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -576,17 +573,17 @@ impl ConnectorIntegration, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { let response: checkout::PaymentsResponse = res .response .parse_struct("PaymentIntentResponse") .change_context(errors::ConnectorError::ResponseDeserializationFailed)?; event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -596,28 +593,26 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_url( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, + req: &PaymentsCancelRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!( "{}payments/{}/voids", @@ -628,36 +623,34 @@ impl ConnectorIntegration CustomResult { let connector_req = checkout::PaymentVoidRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) } fn build_request( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsVoidType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsVoidType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?) - .set_body(types::PaymentsVoidType::get_request_body( - self, req, connectors, - )?) + .headers(PaymentsVoidType::get_headers(self, req, connectors)?) + .set_body(PaymentsVoidType::get_request_body(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::PaymentsCancelRouterData, + data: &PaymentsCancelRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult { + res: Response, + ) -> CustomResult { let mut response: checkout::PaymentVoidResponse = res .response .parse_struct("PaymentVoidResponse") @@ -667,7 +660,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } @@ -688,14 +681,12 @@ impl api::Refund for Checkout {} impl api::RefundExecute for Checkout {} impl api::RefundSync for Checkout {} -impl ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -705,8 +696,8 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { let id = req.request.connector_transaction_id.clone(); Ok(format!( @@ -718,10 +709,10 @@ impl ConnectorIntegration, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_refund_amount, req.request.currency, @@ -734,29 +725,25 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::RefundExecuteType::get_url(self, req, connectors)?) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundExecuteType::get_headers( - self, req, connectors, - )?) - .set_body(types::RefundExecuteType::get_request_body( - self, req, connectors, - )?) + .headers(RefundExecuteType::get_headers(self, req, connectors)?) + .set_body(RefundExecuteType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::RefundsRouterData, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult, errors::ConnectorError> { + res: Response, + ) -> CustomResult, errors::ConnectorError> { let response: checkout::RefundResponse = res .response .parse_struct("checkout::RefundResponse") @@ -767,7 +754,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl ConnectorIntegration for Checkout { +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_url( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, + req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { let id = req.request.connector_transaction_id.clone(); Ok(format!( @@ -808,25 +795,25 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::RefundSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundSyncType::get_headers(self, req, connectors)?) + .headers(RefundSyncType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::RefundsRouterData, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, - ) -> CustomResult, errors::ConnectorError> { + res: Response, + ) -> CustomResult, errors::ConnectorError> { let refund_action_id = data.request.get_connector_refund_id()?; let response: Vec = res @@ -841,7 +828,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl - ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::AcceptDisputeRouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &AcceptDisputeRouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), - types::AcceptDisputeType::get_content_type(self) - .to_string() - .into(), + AcceptDisputeType::get_content_type(self).to_string().into(), )]; let mut api_key = self.get_auth_header(&req.connector_auth_type)?; header.append(&mut api_key); @@ -880,8 +862,8 @@ impl fn get_url( &self, - req: &types::AcceptDisputeRouterData, - connectors: &settings::Connectors, + req: &AcceptDisputeRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!( "{}{}{}{}", @@ -894,30 +876,28 @@ impl fn build_request( &self, - req: &types::AcceptDisputeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &AcceptDisputeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::AcceptDisputeType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&AcceptDisputeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::AcceptDisputeType::get_headers( - self, req, connectors, - )?) + .headers(AcceptDisputeType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::AcceptDisputeRouterData, + data: &AcceptDisputeRouterData, _event_builder: Option<&mut ConnectorEvent>, - _res: types::Response, - ) -> CustomResult { - Ok(types::AcceptDisputeRouterData { - response: Ok(types::AcceptDisputeResponse { - dispute_status: api::enums::DisputeStatus::DisputeAccepted, + _res: Response, + ) -> CustomResult { + Ok(AcceptDisputeRouterData { + response: Ok(AcceptDisputeResponse { + dispute_status: enums::DisputeStatus::DisputeAccepted, connector_status: None, }), ..data.clone() @@ -926,31 +906,27 @@ impl fn get_error_response( &self, - res: types::Response, + res: Response, event_builder: Option<&mut ConnectorEvent>, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl api::UploadFile for Checkout {} +impl UploadFile for Checkout {} -impl - ConnectorIntegration - for Checkout -{ -} +impl ConnectorIntegration for Checkout {} #[async_trait::async_trait] -impl api::FileUpload for Checkout { +impl FileUpload for Checkout { fn validate_file_upload( &self, - purpose: api::FilePurpose, + purpose: FilePurpose, file_size: i32, file_type: mime::Mime, ) -> CustomResult<(), errors::ConnectorError> { match purpose { - api::FilePurpose::DisputeEvidence => { + FilePurpose::DisputeEvidence => { let supported_file_types = ["image/jpeg", "image/jpg", "image/png", "application/pdf"]; // 4 Megabytes (MB) @@ -970,18 +946,12 @@ impl api::FileUpload for Checkout { } } -impl ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::RouterData< - api::Upload, - types::UploadFileRequestData, - types::UploadFileResponse, - >, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.get_auth_header(&req.connector_auth_type) } @@ -991,16 +961,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}{}", self.base_url(connectors), "files")) } fn get_request_body( &self, - req: &types::UploadFileRouterData, - _connectors: &settings::Connectors, + req: &UploadFileRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = transformers::construct_file_upload_request(req.clone())?; Ok(RequestContent::FormData(connector_req)) @@ -1008,29 +978,27 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &UploadFileRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::UploadFileType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&UploadFileType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::UploadFileType::get_headers(self, req, connectors)?) - .set_body(types::UploadFileType::get_request_body( - self, req, connectors, - )?) + .headers(UploadFileType::get_headers(self, req, connectors)?) + .set_body(UploadFileType::get_request_body(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::UploadFileRouterData, + data: &UploadFileRouterData, event_builder: Option<&mut ConnectorEvent>, - res: types::Response, + res: Response, ) -> CustomResult< - types::RouterData, + RouterData, errors::ConnectorError, > { let response: checkout::FileUploadResponse = res @@ -1039,8 +1007,8 @@ impl ConnectorIntegration, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl api::SubmitEvidence for Checkout {} +impl SubmitEvidence for Checkout {} -impl - ConnectorIntegration< - api::Evidence, - types::SubmitEvidenceRequestData, - types::SubmitEvidenceResponse, - > for Checkout +impl ConnectorIntegration + for Checkout { fn get_headers( &self, - req: &types::SubmitEvidenceRouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &SubmitEvidenceRouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), - types::SubmitEvidenceType::get_content_type(self) + SubmitEvidenceType::get_content_type(self) .to_string() .into(), )]; @@ -1083,8 +1047,8 @@ impl fn get_url( &self, - req: &types::SubmitEvidenceRouterData, - connectors: &settings::Connectors, + req: &SubmitEvidenceRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!( "{}disputes/{}/evidence", @@ -1095,8 +1059,8 @@ impl fn get_request_body( &self, - req: &types::SubmitEvidenceRouterData, - _connectors: &settings::Connectors, + req: &SubmitEvidenceRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = checkout::Evidence::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -1104,31 +1068,27 @@ impl fn build_request( &self, - req: &types::SubmitEvidenceRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Put) - .url(&types::SubmitEvidenceType::get_url(self, req, connectors)?) + req: &SubmitEvidenceRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Put) + .url(&SubmitEvidenceType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::SubmitEvidenceType::get_headers( - self, req, connectors, - )?) - .set_body(types::SubmitEvidenceType::get_request_body( - self, req, connectors, - )?) + .headers(SubmitEvidenceType::get_headers(self, req, connectors)?) + .set_body(SubmitEvidenceType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::SubmitEvidenceRouterData, + data: &SubmitEvidenceRouterData, _event_builder: Option<&mut ConnectorEvent>, - _res: types::Response, - ) -> CustomResult { - Ok(types::SubmitEvidenceRouterData { - response: Ok(types::SubmitEvidenceResponse { + _res: Response, + ) -> CustomResult { + Ok(SubmitEvidenceRouterData { + response: Ok(SubmitEvidenceResponse { dispute_status: api_models::enums::DisputeStatus::DisputeChallenged, connector_status: None, }), @@ -1138,27 +1098,22 @@ impl fn get_error_response( &self, - res: types::Response, + res: Response, event_builder: Option<&mut ConnectorEvent>, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } -impl - ConnectorIntegration - for Checkout -{ +impl ConnectorIntegration for Checkout { fn get_headers( &self, - req: &types::DefendDisputeRouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &DefendDisputeRouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), - types::DefendDisputeType::get_content_type(self) - .to_string() - .into(), + DefendDisputeType::get_content_type(self).to_string().into(), )]; let mut api_key = self.get_auth_header(&req.connector_auth_type)?; header.append(&mut api_key); @@ -1167,8 +1122,8 @@ impl fn get_url( &self, - req: &types::DefendDisputeRouterData, - connectors: &settings::Connectors, + req: &DefendDisputeRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!( "{}disputes/{}/evidence", @@ -1179,30 +1134,28 @@ impl fn build_request( &self, - req: &types::DefendDisputeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &DefendDisputeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::DefendDisputeType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&DefendDisputeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::DefendDisputeType::get_headers( - self, req, connectors, - )?) + .headers(DefendDisputeType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::DefendDisputeRouterData, + data: &DefendDisputeRouterData, _event_builder: Option<&mut ConnectorEvent>, - _res: types::Response, - ) -> CustomResult { - Ok(types::DefendDisputeRouterData { - response: Ok(types::DefendDisputeResponse { - dispute_status: api::enums::DisputeStatus::DisputeChallenged, + _res: Response, + ) -> CustomResult { + Ok(DefendDisputeRouterData { + response: Ok(DefendDisputeResponse { + dispute_status: enums::DisputeStatus::DisputeChallenged, connector_status: None, }), ..data.clone() @@ -1211,33 +1164,33 @@ impl fn get_error_response( &self, - res: types::Response, + res: Response, event_builder: Option<&mut ConnectorEvent>, - ) -> CustomResult { + ) -> CustomResult { self.build_error_response(res, event_builder) } } #[async_trait::async_trait] -impl api::IncomingWebhook for Checkout { +impl webhooks::IncomingWebhook for Checkout { fn get_webhook_source_verification_algorithm( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Ok(Box::new(crypto::HmacSha256)) } fn get_webhook_source_verification_signature( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { - let signature = conn_utils::get_header_key_value("cko-signature", request.headers) + let signature = utils::get_header_key_value("cko-signature", request.headers) .change_context(errors::ConnectorError::WebhookSignatureNotFound)?; hex::decode(signature).change_context(errors::ConnectorError::WebhookSignatureNotFound) } fn get_webhook_source_verification_message( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _merchant_id: &common_utils::id_type::MerchantId, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { @@ -1245,7 +1198,7 @@ impl api::IncomingWebhook for Checkout { } fn get_webhook_object_reference_id( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult { let details: checkout::CheckoutWebhookBody = request .body @@ -1292,19 +1245,21 @@ impl api::IncomingWebhook for Checkout { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let details: checkout::CheckoutWebhookEventTypeBody = request .body .parse_struct("CheckoutWebhookBody") .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?; - Ok(api::IncomingWebhookEvent::from(details.transaction_type)) + Ok(api_models::webhooks::IncomingWebhookEvent::from( + details.transaction_type, + )) } fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let event_type_data: checkout::CheckoutWebhookEventTypeBody = request .body @@ -1326,13 +1281,13 @@ impl api::IncomingWebhook for Checkout { fn get_dispute_details( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let dispute_details: checkout::CheckoutDisputeWebhookBody = request .body .parse_struct("CheckoutWebhookBody") .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?; - Ok(api::disputes::DisputePayload { + Ok(DisputePayload { amount: dispute_details.data.amount.to_string(), currency: dispute_details.data.currency, dispute_stage: api_models::enums::DisputeStage::from( @@ -1349,24 +1304,24 @@ impl api::IncomingWebhook for Checkout { } } -impl services::ConnectorRedirectResponse for Checkout { +impl api::ConnectorRedirectResponse for Checkout { fn get_flow_type( &self, _query_params: &str, _json_payload: Option, - action: services::PaymentAction, - ) -> CustomResult { + action: PaymentAction, + ) -> CustomResult { match action { - services::PaymentAction::PSync - | services::PaymentAction::CompleteAuthorize - | services::PaymentAction::PaymentAuthenticateCompleteAuthorize => { - Ok(payments::CallConnectorAction::Trigger) + PaymentAction::PSync + | PaymentAction::CompleteAuthorize + | PaymentAction::PaymentAuthenticateCompleteAuthorize => { + Ok(CallConnectorAction::Trigger) } } } } -impl ConnectorErrorTypeMapping for Checkout { +impl utils::ConnectorErrorTypeMapping for Checkout { fn get_connector_error_type( &self, error_code: String, diff --git a/crates/router/src/connector/checkout/transformers.rs b/crates/hyperswitch_connectors/src/connectors/checkout/transformers.rs similarity index 71% rename from crates/router/src/connector/checkout/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/checkout/transformers.rs index 4d9f5978b08..4630f00b1d5 100644 --- a/crates/router/src/connector/checkout/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/checkout/transformers.rs @@ -1,24 +1,39 @@ +use common_enums::enums::{self, AttemptStatus}; use common_utils::{ errors::{CustomResult, ParsingError}, ext_traits::ByteSliceExt, + request::Method, types::MinorUnit, }; use error_stack::ResultExt; +use hyperswitch_domain_models::{ + payment_method_data::{PaymentMethodData, WalletData}, + router_data::{ConnectorAuthType, ErrorResponse, PaymentMethodToken, RouterData}, + router_flow_types::{Execute, RSync}, + router_request_types::ResponseId, + router_response_types::{PaymentsResponseData, RedirectForm, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsSyncRouterData, RefundsRouterData, TokenizationRouterData, + }, +}; +use hyperswitch_interfaces::{consts, errors, webhooks}; use masking::{ExposeInterface, Secret}; use serde::{Deserialize, Serialize}; use time::PrimitiveDateTime; use url::Url; use crate::{ - connector::utils::{ - self, to_connector_meta, ApplePayDecrypt, PaymentsCaptureRequestData, RouterData, - WalletData, + types::{ + PaymentsCancelResponseRouterData, PaymentsCaptureResponseRouterData, + PaymentsResponseRouterData, PaymentsSyncResponseRouterData, RefundsResponseRouterData, + ResponseRouterData, SubmitEvidenceRouterData, UploadFileRouterData, }, - consts, - core::errors, - services, - types::{self, api, domain, storage::enums, transformers::ForeignFrom}, unimplemented_payment_method, + utils::{ + self, ApplePayDecrypt, PaymentsCaptureRequestData, RouterData as OtherRouterData, + WalletData as OtherWalletData, + }, }; #[derive(Debug, Serialize)] @@ -75,70 +90,70 @@ pub struct CheckoutApplePayHeader { transaction_id: Secret, } -impl TryFrom<&types::TokenizationRouterData> for TokenRequest { +impl TryFrom<&TokenizationRouterData> for TokenRequest { type Error = error_stack::Report; - fn try_from(item: &types::TokenizationRouterData) -> Result { + fn try_from(item: &TokenizationRouterData) -> Result { match item.request.payment_method_data.clone() { - domain::PaymentMethodData::Wallet(wallet_data) => match wallet_data.clone() { - domain::WalletData::GooglePay(_data) => { + PaymentMethodData::Wallet(wallet_data) => match wallet_data.clone() { + WalletData::GooglePay(_data) => { let json_wallet_data: CheckoutGooglePayData = wallet_data.get_wallet_token_as_json("Google Pay".to_string())?; Ok(Self::Googlepay(json_wallet_data)) } - domain::WalletData::ApplePay(_data) => { + WalletData::ApplePay(_data) => { let json_wallet_data: CheckoutApplePayData = wallet_data.get_wallet_token_as_json("Apple Pay".to_string())?; Ok(Self::Applepay(json_wallet_data)) } - domain::WalletData::AliPayQr(_) - | domain::WalletData::AliPayRedirect(_) - | domain::WalletData::AliPayHkRedirect(_) - | domain::WalletData::AmazonPayRedirect(_) - | domain::WalletData::MomoRedirect(_) - | domain::WalletData::KakaoPayRedirect(_) - | domain::WalletData::GoPayRedirect(_) - | domain::WalletData::GcashRedirect(_) - | domain::WalletData::ApplePayRedirect(_) - | domain::WalletData::ApplePayThirdPartySdk(_) - | domain::WalletData::DanaRedirect {} - | domain::WalletData::GooglePayRedirect(_) - | domain::WalletData::GooglePayThirdPartySdk(_) - | domain::WalletData::MbWayRedirect(_) - | domain::WalletData::MobilePayRedirect(_) - | domain::WalletData::PaypalRedirect(_) - | domain::WalletData::PaypalSdk(_) - | domain::WalletData::Paze(_) - | domain::WalletData::SamsungPay(_) - | domain::WalletData::TwintRedirect {} - | domain::WalletData::VippsRedirect {} - | domain::WalletData::TouchNGoRedirect(_) - | domain::WalletData::WeChatPayRedirect(_) - | domain::WalletData::CashappQr(_) - | domain::WalletData::SwishQr(_) - | domain::WalletData::WeChatPayQr(_) - | domain::WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( + WalletData::AliPayQr(_) + | WalletData::AliPayRedirect(_) + | WalletData::AliPayHkRedirect(_) + | WalletData::AmazonPayRedirect(_) + | WalletData::MomoRedirect(_) + | WalletData::KakaoPayRedirect(_) + | WalletData::GoPayRedirect(_) + | WalletData::GcashRedirect(_) + | WalletData::ApplePayRedirect(_) + | WalletData::ApplePayThirdPartySdk(_) + | WalletData::DanaRedirect {} + | WalletData::GooglePayRedirect(_) + | WalletData::GooglePayThirdPartySdk(_) + | WalletData::MbWayRedirect(_) + | WalletData::MobilePayRedirect(_) + | WalletData::PaypalRedirect(_) + | WalletData::PaypalSdk(_) + | WalletData::Paze(_) + | WalletData::SamsungPay(_) + | WalletData::TwintRedirect {} + | WalletData::VippsRedirect {} + | WalletData::TouchNGoRedirect(_) + | WalletData::WeChatPayRedirect(_) + | WalletData::CashappQr(_) + | WalletData::SwishQr(_) + | WalletData::WeChatPayQr(_) + | WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("checkout"), ) .into()), }, - domain::PaymentMethodData::Card(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::Card(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::CardRedirect(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("checkout"), ) @@ -153,16 +168,15 @@ pub struct CheckoutTokenResponse { token: Secret, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::PaymentsResponseData::TokenizationResponse { + response: Ok(PaymentsResponseData::TokenizationResponse { token: item.response.token.expose(), }), ..item.data @@ -262,10 +276,10 @@ pub struct CheckoutThreeDS { version: Option, } -impl TryFrom<&types::ConnectorAuthType> for CheckoutAuthType { +impl TryFrom<&ConnectorAuthType> for CheckoutAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { - if let types::ConnectorAuthType::SignatureKey { + fn try_from(auth_type: &ConnectorAuthType) -> Result { + if let ConnectorAuthType::SignatureKey { api_key, api_secret, key1, @@ -281,13 +295,13 @@ impl TryFrom<&types::ConnectorAuthType> for CheckoutAuthType { } } } -impl TryFrom<&CheckoutRouterData<&types::PaymentsAuthorizeRouterData>> for PaymentsRequest { +impl TryFrom<&CheckoutRouterData<&PaymentsAuthorizeRouterData>> for PaymentsRequest { type Error = error_stack::Report; fn try_from( - item: &CheckoutRouterData<&types::PaymentsAuthorizeRouterData>, + item: &CheckoutRouterData<&PaymentsAuthorizeRouterData>, ) -> Result { let source_var = match item.router_data.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(ccard) => { + PaymentMethodData::Card(ccard) => { let a = PaymentSource::Card(CardSource { source_type: CheckoutSourceTypes::Card, number: ccard.card_number.clone(), @@ -297,32 +311,32 @@ impl TryFrom<&CheckoutRouterData<&types::PaymentsAuthorizeRouterData>> for Payme }); Ok(a) } - domain::PaymentMethodData::Wallet(wallet_data) => match wallet_data { - domain::WalletData::GooglePay(_) => Ok(PaymentSource::Wallets(WalletSource { + PaymentMethodData::Wallet(wallet_data) => match wallet_data { + WalletData::GooglePay(_) => Ok(PaymentSource::Wallets(WalletSource { source_type: CheckoutSourceTypes::Token, token: match item.router_data.get_payment_method_token()? { - types::PaymentMethodToken::Token(token) => token, - types::PaymentMethodToken::ApplePayDecrypt(_) => Err( + PaymentMethodToken::Token(token) => token, + PaymentMethodToken::ApplePayDecrypt(_) => Err( unimplemented_payment_method!("Apple Pay", "Simplified", "Checkout"), )?, - types::PaymentMethodToken::PazeDecrypt(_) => { + PaymentMethodToken::PazeDecrypt(_) => { Err(unimplemented_payment_method!("Paze", "Checkout"))? } - types::PaymentMethodToken::GooglePayDecrypt(_) => { + PaymentMethodToken::GooglePayDecrypt(_) => { Err(unimplemented_payment_method!("Google Pay", "Checkout"))? } }, })), - domain::WalletData::ApplePay(_) => { + WalletData::ApplePay(_) => { let payment_method_token = item.router_data.get_payment_method_token()?; match payment_method_token { - types::PaymentMethodToken::Token(apple_pay_payment_token) => { + PaymentMethodToken::Token(apple_pay_payment_token) => { Ok(PaymentSource::Wallets(WalletSource { source_type: CheckoutSourceTypes::Token, token: apple_pay_payment_token, })) } - types::PaymentMethodToken::ApplePayDecrypt(decrypt_data) => { + PaymentMethodToken::ApplePayDecrypt(decrypt_data) => { let exp_month = decrypt_data.get_expiry_month()?; let expiry_year_4_digit = decrypt_data.get_four_digit_expiry_year()?; Ok(PaymentSource::ApplePayPredecrypt(Box::new( @@ -337,62 +351,62 @@ impl TryFrom<&CheckoutRouterData<&types::PaymentsAuthorizeRouterData>> for Payme }, ))) } - types::PaymentMethodToken::PazeDecrypt(_) => { + PaymentMethodToken::PazeDecrypt(_) => { Err(unimplemented_payment_method!("Paze", "Checkout"))? } - types::PaymentMethodToken::GooglePayDecrypt(_) => { + PaymentMethodToken::GooglePayDecrypt(_) => { Err(unimplemented_payment_method!("Google Pay", "Checkout"))? } } } - domain::WalletData::AliPayQr(_) - | domain::WalletData::AliPayRedirect(_) - | domain::WalletData::AliPayHkRedirect(_) - | domain::WalletData::AmazonPayRedirect(_) - | domain::WalletData::MomoRedirect(_) - | domain::WalletData::KakaoPayRedirect(_) - | domain::WalletData::GoPayRedirect(_) - | domain::WalletData::GcashRedirect(_) - | domain::WalletData::ApplePayRedirect(_) - | domain::WalletData::ApplePayThirdPartySdk(_) - | domain::WalletData::DanaRedirect {} - | domain::WalletData::GooglePayRedirect(_) - | domain::WalletData::GooglePayThirdPartySdk(_) - | domain::WalletData::MbWayRedirect(_) - | domain::WalletData::MobilePayRedirect(_) - | domain::WalletData::PaypalRedirect(_) - | domain::WalletData::PaypalSdk(_) - | domain::WalletData::Paze(_) - | domain::WalletData::SamsungPay(_) - | domain::WalletData::TwintRedirect {} - | domain::WalletData::VippsRedirect {} - | domain::WalletData::TouchNGoRedirect(_) - | domain::WalletData::WeChatPayRedirect(_) - | domain::WalletData::CashappQr(_) - | domain::WalletData::SwishQr(_) - | domain::WalletData::WeChatPayQr(_) - | domain::WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( + WalletData::AliPayQr(_) + | WalletData::AliPayRedirect(_) + | WalletData::AliPayHkRedirect(_) + | WalletData::AmazonPayRedirect(_) + | WalletData::MomoRedirect(_) + | WalletData::KakaoPayRedirect(_) + | WalletData::GoPayRedirect(_) + | WalletData::GcashRedirect(_) + | WalletData::ApplePayRedirect(_) + | WalletData::ApplePayThirdPartySdk(_) + | WalletData::DanaRedirect {} + | WalletData::GooglePayRedirect(_) + | WalletData::GooglePayThirdPartySdk(_) + | WalletData::MbWayRedirect(_) + | WalletData::MobilePayRedirect(_) + | WalletData::PaypalRedirect(_) + | WalletData::PaypalSdk(_) + | WalletData::Paze(_) + | WalletData::SamsungPay(_) + | WalletData::TwintRedirect {} + | WalletData::VippsRedirect {} + | WalletData::TouchNGoRedirect(_) + | WalletData::WeChatPayRedirect(_) + | WalletData::CashappQr(_) + | WalletData::SwishQr(_) + | WalletData::WeChatPayQr(_) + | WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("checkout"), )), }, - domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::CardRedirect(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("checkout"), )) @@ -520,91 +534,87 @@ impl TryFrom for CheckoutPaymentStatus { } } -impl ForeignFrom<(CheckoutPaymentStatus, Option)> for enums::AttemptStatus { - fn foreign_from(item: (CheckoutPaymentStatus, Option)) -> Self { - let (status, capture_method) = item; - match status { - CheckoutPaymentStatus::Authorized => { - if capture_method == Some(enums::CaptureMethod::Automatic) - || capture_method.is_none() - { - Self::Pending - } else { - Self::Authorized - } +fn get_attempt_status_cap( + item: (CheckoutPaymentStatus, Option), +) -> AttemptStatus { + let (status, capture_method) = item; + match status { + CheckoutPaymentStatus::Authorized => { + if capture_method == Some(enums::CaptureMethod::Automatic) || capture_method.is_none() { + AttemptStatus::Pending + } else { + AttemptStatus::Authorized } - CheckoutPaymentStatus::Captured - | CheckoutPaymentStatus::PartiallyRefunded - | CheckoutPaymentStatus::Refunded => Self::Charged, - CheckoutPaymentStatus::PartiallyCaptured => Self::PartialCharged, - CheckoutPaymentStatus::Declined - | CheckoutPaymentStatus::Expired - | CheckoutPaymentStatus::Canceled => Self::Failure, - CheckoutPaymentStatus::Pending => Self::AuthenticationPending, - CheckoutPaymentStatus::CardVerified | CheckoutPaymentStatus::RetryScheduled => { - Self::Pending - } - CheckoutPaymentStatus::Voided => Self::Voided, } + CheckoutPaymentStatus::Captured + | CheckoutPaymentStatus::PartiallyRefunded + | CheckoutPaymentStatus::Refunded => AttemptStatus::Charged, + CheckoutPaymentStatus::PartiallyCaptured => AttemptStatus::PartialCharged, + CheckoutPaymentStatus::Declined + | CheckoutPaymentStatus::Expired + | CheckoutPaymentStatus::Canceled => AttemptStatus::Failure, + CheckoutPaymentStatus::Pending => AttemptStatus::AuthenticationPending, + CheckoutPaymentStatus::CardVerified | CheckoutPaymentStatus::RetryScheduled => { + AttemptStatus::Pending + } + CheckoutPaymentStatus::Voided => AttemptStatus::Voided, } } -impl ForeignFrom<(CheckoutPaymentStatus, CheckoutPaymentIntent)> for enums::AttemptStatus { - fn foreign_from(item: (CheckoutPaymentStatus, CheckoutPaymentIntent)) -> Self { - let (status, psync_flow) = item; +fn get_attempt_status_intent( + item: (CheckoutPaymentStatus, CheckoutPaymentIntent), +) -> AttemptStatus { + let (status, psync_flow) = item; - match status { - CheckoutPaymentStatus::Authorized => { - if psync_flow == CheckoutPaymentIntent::Capture { - Self::Pending - } else { - Self::Authorized - } - } - CheckoutPaymentStatus::Captured - | CheckoutPaymentStatus::PartiallyRefunded - | CheckoutPaymentStatus::Refunded => Self::Charged, - CheckoutPaymentStatus::PartiallyCaptured => Self::PartialCharged, - CheckoutPaymentStatus::Declined - | CheckoutPaymentStatus::Expired - | CheckoutPaymentStatus::Canceled => Self::Failure, - CheckoutPaymentStatus::Pending => Self::AuthenticationPending, - CheckoutPaymentStatus::CardVerified | CheckoutPaymentStatus::RetryScheduled => { - Self::Pending + match status { + CheckoutPaymentStatus::Authorized => { + if psync_flow == CheckoutPaymentIntent::Capture { + AttemptStatus::Pending + } else { + AttemptStatus::Authorized } - CheckoutPaymentStatus::Voided => Self::Voided, } + CheckoutPaymentStatus::Captured + | CheckoutPaymentStatus::PartiallyRefunded + | CheckoutPaymentStatus::Refunded => AttemptStatus::Charged, + CheckoutPaymentStatus::PartiallyCaptured => AttemptStatus::PartialCharged, + CheckoutPaymentStatus::Declined + | CheckoutPaymentStatus::Expired + | CheckoutPaymentStatus::Canceled => AttemptStatus::Failure, + CheckoutPaymentStatus::Pending => AttemptStatus::AuthenticationPending, + CheckoutPaymentStatus::CardVerified | CheckoutPaymentStatus::RetryScheduled => { + AttemptStatus::Pending + } + CheckoutPaymentStatus::Voided => AttemptStatus::Voided, } } -impl ForeignFrom<(CheckoutPaymentStatus, Option)> for enums::AttemptStatus { - fn foreign_from(item: (CheckoutPaymentStatus, Option)) -> Self { - let (status, balances) = item; +fn get_attempt_status_bal(item: (CheckoutPaymentStatus, Option)) -> AttemptStatus { + let (status, balances) = item; - match status { - CheckoutPaymentStatus::Authorized => { - if let Some(Balances { - available_to_capture: 0, - }) = balances - { - Self::Charged - } else { - Self::Authorized - } + match status { + CheckoutPaymentStatus::Authorized => { + if let Some(Balances { + available_to_capture: 0, + }) = balances + { + AttemptStatus::Charged + } else { + AttemptStatus::Authorized } - CheckoutPaymentStatus::Captured - | CheckoutPaymentStatus::PartiallyRefunded - | CheckoutPaymentStatus::Refunded => Self::Charged, - CheckoutPaymentStatus::PartiallyCaptured => Self::PartialCharged, - CheckoutPaymentStatus::Declined - | CheckoutPaymentStatus::Expired - | CheckoutPaymentStatus::Canceled => Self::Failure, - CheckoutPaymentStatus::Pending => Self::AuthenticationPending, - CheckoutPaymentStatus::CardVerified | CheckoutPaymentStatus::RetryScheduled => { - Self::Pending - } - CheckoutPaymentStatus::Voided => Self::Voided, } + CheckoutPaymentStatus::Captured + | CheckoutPaymentStatus::PartiallyRefunded + | CheckoutPaymentStatus::Refunded => AttemptStatus::Charged, + CheckoutPaymentStatus::PartiallyCaptured => AttemptStatus::PartialCharged, + CheckoutPaymentStatus::Declined + | CheckoutPaymentStatus::Expired + | CheckoutPaymentStatus::Canceled => AttemptStatus::Failure, + CheckoutPaymentStatus::Pending => AttemptStatus::AuthenticationPending, + CheckoutPaymentStatus::CardVerified | CheckoutPaymentStatus::RetryScheduled => { + AttemptStatus::Pending + } + CheckoutPaymentStatus::Voided => AttemptStatus::Voided, } } @@ -667,25 +677,21 @@ fn get_connector_meta( } } -impl TryFrom> - for types::PaymentsAuthorizeRouterData -{ +impl TryFrom> for PaymentsAuthorizeRouterData { type Error = error_stack::Report; - fn try_from( - item: types::PaymentsResponseRouterData, - ) -> Result { + fn try_from(item: PaymentsResponseRouterData) -> Result { let connector_meta = get_connector_meta(item.data.request.capture_method.unwrap_or_default())?; - let redirection_data = item.response.links.redirect.map(|href| { - services::RedirectForm::from((href.redirection_url, services::Method::Get)) - }); - let status = enums::AttemptStatus::foreign_from(( - item.response.status, - item.data.request.capture_method, - )); - let error_response = if status == enums::AttemptStatus::Failure { - Some(types::ErrorResponse { + let redirection_data = item + .response + .links + .redirect + .map(|href| RedirectForm::from((href.redirection_url, Method::Get))); + let status = + get_attempt_status_cap((item.response.status, item.data.request.capture_method)); + let error_response = if status == AttemptStatus::Failure { + Some(ErrorResponse { status_code: item.http_code, code: item .response @@ -703,8 +709,8 @@ impl TryFrom> } else { None }; - let payments_response_data = types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(item.response.id.clone()), + let payments_response_data = PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(item.response.id.clone()), redirection_data: Box::new(redirection_data), mandate_reference: Box::new(None), connector_metadata: Some(connector_meta), @@ -723,22 +729,21 @@ impl TryFrom> } } -impl TryFrom> - for types::PaymentsSyncRouterData -{ +impl TryFrom> for PaymentsSyncRouterData { type Error = error_stack::Report; fn try_from( - item: types::PaymentsSyncResponseRouterData, + item: PaymentsSyncResponseRouterData, ) -> Result { - let redirection_data = item.response.links.redirect.map(|href| { - services::RedirectForm::from((href.redirection_url, services::Method::Get)) - }); + let redirection_data = item + .response + .links + .redirect + .map(|href| RedirectForm::from((href.redirection_url, Method::Get))); let checkout_meta: CheckoutMeta = - to_connector_meta(item.data.request.connector_meta.clone())?; - let status = - enums::AttemptStatus::foreign_from((item.response.status, checkout_meta.psync_flow)); - let error_response = if status == enums::AttemptStatus::Failure { - Some(types::ErrorResponse { + utils::to_connector_meta(item.data.request.connector_meta.clone())?; + let status = get_attempt_status_intent((item.response.status, checkout_meta.psync_flow)); + let error_response = if status == AttemptStatus::Failure { + Some(ErrorResponse { status_code: item.http_code, code: item .response @@ -756,8 +761,8 @@ impl TryFrom> } else { None }; - let payments_response_data = types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(item.response.id.clone()), + let payments_response_data = PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(item.response.id.clone()), redirection_data: Box::new(redirection_data), mandate_reference: Box::new(None), connector_metadata: None, @@ -776,13 +781,11 @@ impl TryFrom> } } -impl TryFrom> - for types::PaymentsSyncRouterData -{ +impl TryFrom> for PaymentsSyncRouterData { type Error = error_stack::Report; fn try_from( - item: types::PaymentsSyncResponseRouterData, + item: PaymentsSyncResponseRouterData, ) -> Result { let capture_sync_response_list = match item.response { PaymentsResponseEnum::PaymentResponse(payments_response) => { @@ -795,7 +798,7 @@ impl TryFrom> } }; Ok(Self { - response: Ok(types::PaymentsResponseData::MultipleCaptureResponse { + response: Ok(PaymentsResponseData::MultipleCaptureResponse { capture_sync_response_list, }), ..item.data @@ -815,7 +818,7 @@ pub struct PaymentVoidResponse { reference: String, } -impl From<&PaymentVoidResponse> for enums::AttemptStatus { +impl From<&PaymentVoidResponse> for AttemptStatus { fn from(item: &PaymentVoidResponse) -> Self { if item.status == 202 { Self::Voided @@ -825,17 +828,15 @@ impl From<&PaymentVoidResponse> for enums::AttemptStatus { } } -impl TryFrom> - for types::PaymentsCancelRouterData -{ +impl TryFrom> for PaymentsCancelRouterData { type Error = error_stack::Report; fn try_from( - item: types::PaymentsCancelResponseRouterData, + item: PaymentsCancelResponseRouterData, ) -> Result { let response = &item.response; Ok(Self { - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(response.action_id.clone()), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(response.action_id.clone()), redirection_data: Box::new(None), mandate_reference: Box::new(None), connector_metadata: None, @@ -850,9 +851,9 @@ impl TryFrom> } } -impl TryFrom<&types::PaymentsCancelRouterData> for PaymentVoidRequest { +impl TryFrom<&PaymentsCancelRouterData> for PaymentVoidRequest { type Error = error_stack::Report; - fn try_from(item: &types::PaymentsCancelRouterData) -> Result { + fn try_from(item: &PaymentsCancelRouterData) -> Result { Ok(Self { reference: item.request.connector_transaction_id.clone(), }) @@ -873,10 +874,10 @@ pub struct PaymentCaptureRequest { pub reference: Option, } -impl TryFrom<&CheckoutRouterData<&types::PaymentsCaptureRouterData>> for PaymentCaptureRequest { +impl TryFrom<&CheckoutRouterData<&PaymentsCaptureRouterData>> for PaymentCaptureRequest { type Error = error_stack::Report; fn try_from( - item: &CheckoutRouterData<&types::PaymentsCaptureRouterData>, + item: &CheckoutRouterData<&PaymentsCaptureRouterData>, ) -> Result { let connector_auth = &item.router_data.connector_auth_type; let auth_type: CheckoutAuthType = connector_auth.try_into()?; @@ -907,23 +908,23 @@ pub struct PaymentCaptureResponse { pub reference: Option, } -impl TryFrom> - for types::PaymentsCaptureRouterData +impl TryFrom> + for PaymentsCaptureRouterData { type Error = error_stack::Report; fn try_from( - item: types::PaymentsCaptureResponseRouterData, + item: PaymentsCaptureResponseRouterData, ) -> Result { let connector_meta = serde_json::json!(CheckoutMeta { psync_flow: CheckoutPaymentIntent::Capture, }); let (status, amount_captured) = if item.http_code == 202 { ( - enums::AttemptStatus::Charged, + AttemptStatus::Charged, Some(item.data.request.amount_to_capture), ) } else { - (enums::AttemptStatus::Pending, None) + (AttemptStatus::Pending, None) }; // if multiple capture request, return capture action_id so that it will be updated in the captures table. @@ -935,8 +936,8 @@ impl TryFrom> }; Ok(Self { - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(resource_id), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(resource_id), redirection_data: Box::new(None), mandate_reference: Box::new(None), connector_metadata: Some(connector_meta), @@ -958,11 +959,9 @@ pub struct RefundRequest { reference: String, } -impl TryFrom<&CheckoutRouterData<&types::RefundsRouterData>> for RefundRequest { +impl TryFrom<&CheckoutRouterData<&RefundsRouterData>> for RefundRequest { type Error = error_stack::Report; - fn try_from( - item: &CheckoutRouterData<&types::RefundsRouterData>, - ) -> Result { + fn try_from(item: &CheckoutRouterData<&RefundsRouterData>) -> Result { let reference = item.router_data.request.refund_id.clone(); Ok(Self { amount: Some(item.amount.to_owned()), @@ -993,16 +992,16 @@ impl From<&CheckoutRefundResponse> for enums::RefundStatus { } } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_status = enums::RefundStatus::from(&item.response); Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.response.action_id.clone(), refund_status, }), @@ -1011,16 +1010,16 @@ impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_status = enums::RefundStatus::from(&item.response); Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.response.action_id.clone(), refund_status, }), @@ -1030,7 +1029,7 @@ impl TryFrom, pub error_type: Option, pub error_codes: Option>, @@ -1074,11 +1073,11 @@ impl utils::MultipleCaptureSyncResponse for ActionResponse { self.action_id.clone() } - fn get_capture_attempt_status(&self) -> enums::AttemptStatus { + fn get_capture_attempt_status(&self) -> AttemptStatus { match self.approved { - Some(true) => enums::AttemptStatus::Charged, - Some(false) => enums::AttemptStatus::Failure, - None => enums::AttemptStatus::Pending, + Some(true) => AttemptStatus::Charged, + Some(false) => AttemptStatus::Failure, + None => AttemptStatus::Pending, } } @@ -1100,8 +1099,8 @@ impl utils::MultipleCaptureSyncResponse for Box { self.action_id.clone().unwrap_or("".into()) } - fn get_capture_attempt_status(&self) -> enums::AttemptStatus { - enums::AttemptStatus::foreign_from((self.status.clone(), self.balances.clone())) + fn get_capture_attempt_status(&self) -> AttemptStatus { + get_attempt_status_bal((self.status.clone(), self.balances.clone())) } fn get_connector_reference_id(&self) -> Option { @@ -1130,16 +1129,14 @@ pub struct CheckoutRedirectResponse { pub cko_session_id: Option, } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_status = enums::RefundStatus::from(item.response); Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.action_id.clone(), refund_status, }), @@ -1148,16 +1145,14 @@ impl TryFrom> } } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_status = enums::RefundStatus::from(item.response); Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.action_id.clone(), refund_status, }), @@ -1166,7 +1161,7 @@ impl TryFrom> } } -impl From for enums::AttemptStatus { +impl From for AttemptStatus { fn from(item: CheckoutRedirectResponseStatus) -> Self { match item { CheckoutRedirectResponseStatus::Success => Self::AuthenticationSuccessful, @@ -1298,7 +1293,7 @@ pub enum CheckoutDisputeTransactionType { DisputeLost, } -impl From for api::IncomingWebhookEvent { +impl From for api_models::webhooks::IncomingWebhookEvent { fn from(transaction_type: CheckoutWebhookEventType) -> Self { match transaction_type { CheckoutWebhookEventType::AuthenticationStarted @@ -1359,7 +1354,7 @@ pub struct CheckoutWebhookObjectResource { } pub fn construct_file_upload_request( - file_upload_router_data: types::UploadFileRouterData, + file_upload_router_data: UploadFileRouterData, ) -> CustomResult { let request = file_upload_router_data.request; let mut multipart = reqwest::multipart::Form::new(); @@ -1399,10 +1394,12 @@ pub struct Evidence { pub additional_evidence_file: Option, } -impl TryFrom<&api::IncomingWebhookRequestDetails<'_>> for PaymentsResponse { +impl TryFrom<&webhooks::IncomingWebhookRequestDetails<'_>> for PaymentsResponse { type Error = error_stack::Report; - fn try_from(request: &api::IncomingWebhookRequestDetails<'_>) -> Result { + fn try_from( + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> Result { let details: CheckoutWebhookBody = request .body .parse_struct("CheckoutWebhookBody") @@ -1427,10 +1424,12 @@ impl TryFrom<&api::IncomingWebhookRequestDetails<'_>> for PaymentsResponse { } } -impl TryFrom<&api::IncomingWebhookRequestDetails<'_>> for RefundResponse { +impl TryFrom<&webhooks::IncomingWebhookRequestDetails<'_>> for RefundResponse { type Error = error_stack::Report; - fn try_from(request: &api::IncomingWebhookRequestDetails<'_>) -> Result { + fn try_from( + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> Result { let details: CheckoutWebhookBody = request .body .parse_struct("CheckoutWebhookBody") @@ -1449,9 +1448,9 @@ impl TryFrom<&api::IncomingWebhookRequestDetails<'_>> for RefundResponse { } } -impl TryFrom<&types::SubmitEvidenceRouterData> for Evidence { +impl TryFrom<&SubmitEvidenceRouterData> for Evidence { type Error = error_stack::Report; - fn try_from(item: &types::SubmitEvidenceRouterData) -> Result { + fn try_from(item: &SubmitEvidenceRouterData) -> Result { let submit_evidence_request_data = item.request.clone(); Ok(Self { proof_of_delivery_or_service_file: submit_evidence_request_data diff --git a/crates/router/src/connector/noon.rs b/crates/hyperswitch_connectors/src/connectors/noon.rs similarity index 64% rename from crates/router/src/connector/noon.rs rename to crates/hyperswitch_connectors/src/connectors/noon.rs index c8780af3ce5..c4f2eef275d 100644 --- a/crates/router/src/connector/noon.rs +++ b/crates/hyperswitch_connectors/src/connectors/noon.rs @@ -1,40 +1,58 @@ pub mod transformers; +use api_models::webhooks::{ConnectorWebhookSecrets, IncomingWebhookEvent, ObjectReferenceId}; use base64::Engine; +use common_enums::enums; use common_utils::{ crypto, + errors::CustomResult, ext_traits::ByteSliceExt, - request::RequestContent, + request::{Method, Request, RequestBuilder, RequestContent}, types::{AmountConvertor, StringMajorUnit, StringMajorUnitForConnector}, }; -use diesel_models::enums; use error_stack::{Report, ResultExt}; -use masking::PeekInterface; -use router_env::logger; -use transformers as noon; - -use crate::{ - configs::settings, - connector::utils::{self as connector_utils, PaymentMethodDataType}, - consts, - core::{ - errors::{self, CustomResult}, - mandate::MandateBehaviour, - payments, +use hyperswitch_domain_models::{ + payment_method_data::PaymentMethodData, + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + mandate_revoke::MandateRevoke, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, }, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorSpecifications, ConnectorValidation, + router_request_types::{ + AccessTokenRequestData, MandateRevokeRequestData, PaymentMethodTokenizationData, + PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, + PaymentsSyncData, RefundsData, SetupMandateRequestData, }, + router_response_types::{MandateRevokeResponseData, PaymentsResponseData, RefundsResponseData}, types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, Response, + MandateRevokeRouterData, PaymentsAuthorizeRouterData, PaymentsCancelRouterData, + PaymentsCaptureRouterData, PaymentsSyncRouterData, RefundSyncRouterData, RefundsRouterData, }, - utils::{self, BytesExt}, +}; +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorSpecifications, + ConnectorValidation, + }, + configs::Connectors, + errors, + events::connector_api_logs::ConnectorEvent, + types::{ + MandateRevokeType, PaymentsAuthorizeType, PaymentsCaptureType, PaymentsSyncType, + PaymentsVoidType, RefundExecuteType, RefundSyncType, Response, + }, + webhooks, +}; +use masking::{Mask, PeekInterface}; +use router_env::logger; +use transformers as noon; + +use crate::{ + constants::headers, + types::ResponseRouterData, + utils::{self as connector_utils, PaymentMethodDataType}, }; #[derive(Clone)] @@ -64,12 +82,8 @@ impl api::RefundSync for Noon {} impl api::PaymentToken for Noon {} impl api::ConnectorMandateRevoke for Noon {} -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Noon +impl ConnectorIntegration + for Noon { // Not Implemented (R) } @@ -80,12 +94,12 @@ where { fn build_headers( &self, - req: &types::RouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), - types::PaymentsAuthorizeType::get_content_type(self) + PaymentsAuthorizeType::get_content_type(self) .to_string() .into(), )]; @@ -96,10 +110,10 @@ where } fn get_auth_header( - auth_type: &types::ConnectorAuthType, - connectors: &settings::Connectors, + auth_type: &ConnectorAuthType, + connectors: &Connectors, test_mode: Option, -) -> CustomResult)>, errors::ConnectorError> { +) -> CustomResult)>, errors::ConnectorError> { let auth = noon::NoonAuthType::try_from(auth_type)?; let encoded_api_key = auth @@ -107,7 +121,7 @@ fn get_auth_header( .zip(auth.application_identifier) .zip(auth.api_key) .map(|((business_identifier, application_identifier), api_key)| { - consts::BASE64_ENGINE.encode(format!( + common_utils::consts::BASE64_ENGINE.encode(format!( "{}.{}:{}", business_identifier, application_identifier, api_key )) @@ -135,7 +149,7 @@ impl ConnectorCommon for Noon { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.noon.base_url.as_ref() } @@ -169,7 +183,7 @@ impl ConnectorCommon for Noon { Err(error_message) => { event_builder.map(|event| event.set_error(serde_json::json!({"error": res.response.escape_ascii().to_string(), "status_code": res.status_code}))); logger::error!(deserialization_error =? error_message); - utils::handle_json_response_deserialization_failure(res, "noon") + connector_utils::handle_json_response_deserialization_failure(res, "noon") } } } @@ -195,8 +209,8 @@ impl ConnectorValidation for Noon { fn validate_mandate_payment( &self, - pm_type: Option, - pm_data: types::domain::payments::PaymentMethodData, + pm_type: Option, + pm_data: PaymentMethodData, ) -> CustomResult<(), errors::ConnectorError> { let mandate_supported_pmd = std::collections::HashSet::from([ PaymentMethodDataType::Card, @@ -208,7 +222,7 @@ impl ConnectorValidation for Noon { fn validate_psync_reference_id( &self, - _data: &hyperswitch_domain_models::router_request_types::PaymentsSyncData, + _data: &PaymentsSyncData, _is_three_ds: bool, _status: enums::AttemptStatus, _connector_meta_data: Option, @@ -218,33 +232,18 @@ impl ConnectorValidation for Noon { } } -impl ConnectorIntegration - for Noon -{ +impl ConnectorIntegration for Noon { //TODO: implement sessions flow } -impl ConnectorIntegration - for Noon -{ -} +impl ConnectorIntegration for Noon {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Noon -{ +impl ConnectorIntegration for Noon { fn build_request( &self, - _req: &types::RouterData< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - >, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Setup Mandate flow for Noon".to_string()) .into(), @@ -252,14 +251,12 @@ impl } } -impl ConnectorIntegration - for Noon -{ +impl ConnectorIntegration for Noon { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -269,16 +266,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}payment/v1/order", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let amount = connector_utils::convert_amount( self.amount_converter, @@ -287,7 +284,7 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsAuthorizeType::get_url( - self, req, connectors, - )?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsAuthorizeType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsAuthorizeType::get_request_body( + .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?) + .set_body(PaymentsAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -327,10 +320,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: noon::NoonPaymentsResponse = res .response .parse_struct("Noon PaymentsAuthorizeResponse") @@ -339,7 +332,7 @@ impl ConnectorIntegration - for Noon -{ +impl ConnectorIntegration for Noon { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -372,8 +363,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}payment/v1/order/getbyreference/{}", @@ -384,25 +375,25 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) + .headers(PaymentsSyncType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::PaymentsSyncRouterData, + data: &PaymentsSyncRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: noon::NoonPaymentsResponse = res .response .parse_struct("noon PaymentsSyncResponse") @@ -411,7 +402,7 @@ impl ConnectorIntegration - for Noon -{ +impl ConnectorIntegration for Noon { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -444,16 +433,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}payment/v1/order", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsCaptureRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCaptureRouterData, + _connectors: &Connectors, ) -> CustomResult { let amount = connector_utils::convert_amount( self.amount_converter, @@ -467,18 +456,16 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsCaptureType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsCaptureType::get_request_body( + .headers(PaymentsCaptureType::get_headers(self, req, connectors)?) + .set_body(PaymentsCaptureType::get_request_body( self, req, connectors, )?) .build(), @@ -487,10 +474,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: noon::NoonPaymentsResponse = res .response .parse_struct("Noon PaymentsCaptureResponse") @@ -499,7 +486,7 @@ impl ConnectorIntegration - for Noon -{ +impl ConnectorIntegration for Noon { fn get_headers( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -532,15 +517,15 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}payment/v1/order", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsCancelRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCancelRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = noon::NoonPaymentsCancelRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -548,28 +533,26 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsVoidType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsVoidType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?) - .set_body(types::PaymentsVoidType::get_request_body( - self, req, connectors, - )?) + .headers(PaymentsVoidType::get_headers(self, req, connectors)?) + .set_body(PaymentsVoidType::get_request_body(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::PaymentsCancelRouterData, + data: &PaymentsCancelRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: noon::NoonPaymentsResponse = res .response .parse_struct("Noon PaymentsCancelResponse") @@ -578,7 +561,7 @@ impl ConnectorIntegration for Noon +impl ConnectorIntegration + for Noon { fn get_headers( &self, - req: &types::MandateRevokeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &MandateRevokeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_content_type(&self) -> &'static str { @@ -613,34 +592,30 @@ impl } fn get_url( &self, - _req: &types::MandateRevokeRouterData, - connectors: &settings::Connectors, + _req: &MandateRevokeRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}payment/v1/order", self.base_url(connectors))) } fn build_request( &self, - req: &types::MandateRevokeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &MandateRevokeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::MandateRevokeType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&MandateRevokeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::MandateRevokeType::get_headers( - self, req, connectors, - )?) - .set_body(types::MandateRevokeType::get_request_body( - self, req, connectors, - )?) + .headers(MandateRevokeType::get_headers(self, req, connectors)?) + .set_body(MandateRevokeType::get_request_body(self, req, connectors)?) .build(), )) } fn get_request_body( &self, - req: &types::MandateRevokeRouterData, - _connectors: &settings::Connectors, + req: &MandateRevokeRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = noon::NoonRevokeMandateRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -648,10 +623,10 @@ impl fn handle_response( &self, - data: &types::MandateRevokeRouterData, + data: &MandateRevokeRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: noon::NoonRevokeMandateResponse = res .response .parse_struct("Noon NoonRevokeMandateResponse") @@ -660,7 +635,7 @@ impl event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -675,12 +650,12 @@ impl } } -impl ConnectorIntegration for Noon { +impl ConnectorIntegration for Noon { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -690,16 +665,16 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + _req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}payment/v1/order", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::RefundsRouterData, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { let refund_amount = connector_utils::convert_amount( self.amount_converter, @@ -713,29 +688,25 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::RefundExecuteType::get_url(self, req, connectors)?) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundExecuteType::get_headers( - self, req, connectors, - )?) - .set_body(types::RefundExecuteType::get_request_body( - self, req, connectors, - )?) + .headers(RefundExecuteType::get_headers(self, req, connectors)?) + .set_body(RefundExecuteType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::RefundsRouterData, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: noon::RefundResponse = res .response .parse_struct("noon RefundResponse") @@ -744,7 +715,7 @@ impl ConnectorIntegration for Noon { +impl ConnectorIntegration for Noon { fn get_headers( &self, - req: &types::RefundSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -775,8 +746,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}payment/v1/order/getbyreference/{}", @@ -787,25 +758,25 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::RefundSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundSyncType::get_headers(self, req, connectors)?) + .headers(RefundSyncType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::RefundSyncRouterData, + data: &RefundSyncRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: noon::RefundSyncResponse = res .response .parse_struct("noon RefundSyncResponse") @@ -814,7 +785,7 @@ impl ConnectorIntegration, - action: services::PaymentAction, - ) -> CustomResult { + action: enums::PaymentAction, + ) -> CustomResult { match action { - services::PaymentAction::PSync - | services::PaymentAction::CompleteAuthorize - | services::PaymentAction::PaymentAuthenticateCompleteAuthorize => { - Ok(payments::CallConnectorAction::Trigger) + enums::PaymentAction::PSync + | enums::PaymentAction::CompleteAuthorize + | enums::PaymentAction::PaymentAuthenticateCompleteAuthorize => { + Ok(enums::CallConnectorAction::Trigger) } } } } #[async_trait::async_trait] -impl api::IncomingWebhook for Noon { +impl webhooks::IncomingWebhook for Noon { fn get_webhook_source_verification_algorithm( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Ok(Box::new(crypto::HmacSha512)) } fn get_webhook_source_verification_signature( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, + request: &webhooks::IncomingWebhookRequestDetails<'_>, + _connector_webhook_secrets: &ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { let webhook_body: noon::NoonWebhookSignature = request .body .parse_struct("NoonWebhookSignature") .change_context(errors::ConnectorError::WebhookSignatureNotFound)?; let signature = webhook_body.signature; - consts::BASE64_ENGINE + common_utils::consts::BASE64_ENGINE .decode(signature) .change_context(errors::ConnectorError::WebhookSignatureNotFound) } fn get_webhook_source_verification_message( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _merchant_id: &common_utils::id_type::MerchantId, - _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, + _connector_webhook_secrets: &ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { let webhook_body: noon::NoonWebhookBody = request .body @@ -895,13 +866,13 @@ impl api::IncomingWebhook for Noon { fn get_webhook_object_reference_id( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let details: noon::NoonWebhookOrderId = request .body .parse_struct("NoonWebhookOrderId") .change_context(errors::ConnectorError::WebhookReferenceIdNotFound)?; - Ok(api_models::webhooks::ObjectReferenceId::PaymentId( + Ok(ObjectReferenceId::PaymentId( api_models::payments::PaymentIdType::ConnectorTransactionId( details.order_id.to_string(), ), @@ -910,8 +881,8 @@ impl api::IncomingWebhook for Noon { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let details: noon::NoonWebhookEvent = request .body .parse_struct("NoonWebhookEvent") @@ -920,23 +891,21 @@ impl api::IncomingWebhook for Noon { Ok(match &details.event_type { noon::NoonWebhookEventTypes::Sale | noon::NoonWebhookEventTypes::Capture => { match &details.order_status { - noon::NoonPaymentStatus::Captured => { - api::IncomingWebhookEvent::PaymentIntentSuccess - } + noon::NoonPaymentStatus::Captured => IncomingWebhookEvent::PaymentIntentSuccess, _ => Err(errors::ConnectorError::WebhookEventTypeNotFound)?, } } - noon::NoonWebhookEventTypes::Fail => api::IncomingWebhookEvent::PaymentIntentFailure, + noon::NoonWebhookEventTypes::Fail => IncomingWebhookEvent::PaymentIntentFailure, noon::NoonWebhookEventTypes::Authorize | noon::NoonWebhookEventTypes::Authenticate | noon::NoonWebhookEventTypes::Refund - | noon::NoonWebhookEventTypes::Unknown => api::IncomingWebhookEvent::EventNotSupported, + | noon::NoonWebhookEventTypes::Unknown => IncomingWebhookEvent::EventNotSupported, }) } fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let resource: noon::NoonWebhookObject = request .body diff --git a/crates/router/src/connector/noon/transformers.rs b/crates/hyperswitch_connectors/src/connectors/noon/transformers.rs similarity index 72% rename from crates/router/src/connector/noon/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/noon/transformers.rs index eaf4ae18465..f09b70c56fb 100644 --- a/crates/router/src/connector/noon/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/noon/transformers.rs @@ -1,16 +1,30 @@ -use common_utils::{ext_traits::Encode, pii, types::StringMajorUnit}; +use common_enums::enums::{self, AttemptStatus}; +use common_utils::{ext_traits::Encode, pii, request::Method, types::StringMajorUnit}; use error_stack::ResultExt; +use hyperswitch_domain_models::{ + payment_method_data::{GooglePayWalletData, PaymentMethodData, WalletData}, + router_data::{ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{Execute, RSync}, + router_request_types::{MandateRevokeRequestData, ResponseId}, + router_response_types::{ + MandateReference, MandateRevokeResponseData, PaymentsResponseData, RedirectForm, + RefundsResponseData, + }, + types::{ + MandateRevokeRouterData, PaymentsAuthorizeRouterData, PaymentsCancelRouterData, + PaymentsCaptureRouterData, RefundsRouterData, + }, +}; +use hyperswitch_interfaces::errors; use masking::{ExposeInterface, Secret}; use serde::{Deserialize, Serialize}; use crate::{ - connector::utils::{ - self as conn_utils, is_refund_failure, CardData, PaymentsAuthorizeRequestData, - RevokeMandateRequestData, RouterData, WalletData, + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::{ + self, CardData, PaymentsAuthorizeRequestData, RevokeMandateRequestData, + RouterData as OtherRouterData, WalletData as OtherWalletData, }, - core::errors, - services, - types::{self, api, domain, storage::enums, transformers::ForeignFrom, ErrorResponse}, }; // These needs to be accepted from SDK, need to be done after 1.0.0 stability as API contract will change @@ -79,7 +93,7 @@ pub struct NoonBilling { #[serde(rename_all = "camelCase")] pub struct NoonOrder { amount: StringMajorUnit, - currency: Option, + currency: Option, channel: NoonChannels, category: Option, reference: String, @@ -206,7 +220,7 @@ pub struct NoonApplePay { pub struct NoonGooglePay { api_version_minor: u8, api_version: u8, - payment_method_data: conn_utils::GooglePayWalletData, + payment_method_data: GooglePayWalletData, } #[derive(Debug, Serialize)] @@ -245,11 +259,9 @@ pub struct NoonPaymentsRequest { billing: Option, } -impl TryFrom<&NoonRouterData<&types::PaymentsAuthorizeRouterData>> for NoonPaymentsRequest { +impl TryFrom<&NoonRouterData<&PaymentsAuthorizeRouterData>> for NoonPaymentsRequest { type Error = error_stack::Report; - fn try_from( - data: &NoonRouterData<&types::PaymentsAuthorizeRouterData>, - ) -> Result { + fn try_from(data: &NoonRouterData<&PaymentsAuthorizeRouterData>) -> Result { let item = data.router_data; let amount = &data.amount; let mandate_amount = &data.mandate_amount; @@ -264,26 +276,22 @@ impl TryFrom<&NoonRouterData<&types::PaymentsAuthorizeRouterData>> for NoonPayme ), _ => ( match item.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(req_card) => { - Ok(NoonPaymentData::Card(NoonCard { - name_on_card: item.get_optional_billing_full_name(), - number_plain: req_card.card_number.clone(), - expiry_month: req_card.card_exp_month.clone(), - expiry_year: req_card.get_expiry_year_4_digit(), - cvv: req_card.card_cvc, - })) - } - domain::PaymentMethodData::Wallet(wallet_data) => match wallet_data.clone() { - domain::WalletData::GooglePay(google_pay_data) => { + PaymentMethodData::Card(req_card) => Ok(NoonPaymentData::Card(NoonCard { + name_on_card: item.get_optional_billing_full_name(), + number_plain: req_card.card_number.clone(), + expiry_month: req_card.card_exp_month.clone(), + expiry_year: req_card.get_expiry_year_4_digit(), + cvv: req_card.card_cvc, + })), + PaymentMethodData::Wallet(wallet_data) => match wallet_data.clone() { + WalletData::GooglePay(google_pay_data) => { Ok(NoonPaymentData::GooglePay(NoonGooglePay { api_version_minor: GOOGLEPAY_API_VERSION_MINOR, api_version: GOOGLEPAY_API_VERSION, - payment_method_data: conn_utils::GooglePayWalletData::from( - google_pay_data, - ), + payment_method_data: GooglePayWalletData::from(google_pay_data), })) } - domain::WalletData::ApplePay(apple_pay_data) => { + WalletData::ApplePay(apple_pay_data) => { let payment_token_data = NoonApplePayTokenData { token: NoonApplePayData { payment_data: wallet_data @@ -306,61 +314,57 @@ impl TryFrom<&NoonRouterData<&types::PaymentsAuthorizeRouterData>> for NoonPayme payment_info: Secret::new(payment_token), })) } - domain::WalletData::PaypalRedirect(_) => { - Ok(NoonPaymentData::PayPal(NoonPayPal { - return_url: item.request.get_router_return_url()?, - })) - } - domain::WalletData::AliPayQr(_) - | domain::WalletData::AliPayRedirect(_) - | domain::WalletData::AliPayHkRedirect(_) - | domain::WalletData::AmazonPayRedirect(_) - | domain::WalletData::MomoRedirect(_) - | domain::WalletData::KakaoPayRedirect(_) - | domain::WalletData::GoPayRedirect(_) - | domain::WalletData::GcashRedirect(_) - | domain::WalletData::ApplePayRedirect(_) - | domain::WalletData::ApplePayThirdPartySdk(_) - | domain::WalletData::DanaRedirect {} - | domain::WalletData::GooglePayRedirect(_) - | domain::WalletData::GooglePayThirdPartySdk(_) - | domain::WalletData::MbWayRedirect(_) - | domain::WalletData::MobilePayRedirect(_) - | domain::WalletData::PaypalSdk(_) - | domain::WalletData::Paze(_) - | domain::WalletData::SamsungPay(_) - | domain::WalletData::TwintRedirect {} - | domain::WalletData::VippsRedirect {} - | domain::WalletData::TouchNGoRedirect(_) - | domain::WalletData::WeChatPayRedirect(_) - | domain::WalletData::WeChatPayQr(_) - | domain::WalletData::CashappQr(_) - | domain::WalletData::SwishQr(_) - | domain::WalletData::Mifinity(_) => { - Err(errors::ConnectorError::NotImplemented( - conn_utils::get_unimplemented_payment_method_error_message("Noon"), - )) - } + WalletData::PaypalRedirect(_) => Ok(NoonPaymentData::PayPal(NoonPayPal { + return_url: item.request.get_router_return_url()?, + })), + WalletData::AliPayQr(_) + | WalletData::AliPayRedirect(_) + | WalletData::AliPayHkRedirect(_) + | WalletData::AmazonPayRedirect(_) + | WalletData::MomoRedirect(_) + | WalletData::KakaoPayRedirect(_) + | WalletData::GoPayRedirect(_) + | WalletData::GcashRedirect(_) + | WalletData::ApplePayRedirect(_) + | WalletData::ApplePayThirdPartySdk(_) + | WalletData::DanaRedirect {} + | WalletData::GooglePayRedirect(_) + | WalletData::GooglePayThirdPartySdk(_) + | WalletData::MbWayRedirect(_) + | WalletData::MobilePayRedirect(_) + | WalletData::PaypalSdk(_) + | WalletData::Paze(_) + | WalletData::SamsungPay(_) + | WalletData::TwintRedirect {} + | WalletData::VippsRedirect {} + | WalletData::TouchNGoRedirect(_) + | WalletData::WeChatPayRedirect(_) + | WalletData::WeChatPayQr(_) + | WalletData::CashappQr(_) + | WalletData::SwishQr(_) + | WalletData::Mifinity(_) => Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Noon"), + )), }, - domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment {} - | domain::PaymentMethodData::Reward {} - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::CardRedirect(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment {} + | PaymentMethodData::Reward {} + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( - conn_utils::get_unimplemented_payment_method_error_message("Noon"), + utils::get_unimplemented_payment_method_error_message("Noon"), )) } }?, @@ -448,11 +452,11 @@ pub struct NoonAuthType { pub(super) business_identifier: Secret, } -impl TryFrom<&types::ConnectorAuthType> for NoonAuthType { +impl TryFrom<&ConnectorAuthType> for NoonAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { + fn try_from(auth_type: &ConnectorAuthType) -> Result { match auth_type { - types::ConnectorAuthType::SignatureKey { + ConnectorAuthType::SignatureKey { api_key, key1, api_secret, @@ -495,28 +499,28 @@ pub enum NoonPaymentStatus { Locked, } -impl ForeignFrom<(NoonPaymentStatus, Self)> for enums::AttemptStatus { - fn foreign_from(data: (NoonPaymentStatus, Self)) -> Self { - let (item, current_status) = data; - match item { - NoonPaymentStatus::Authorized => Self::Authorized, - NoonPaymentStatus::Captured - | NoonPaymentStatus::PartiallyCaptured - | NoonPaymentStatus::PartiallyRefunded - | NoonPaymentStatus::Refunded => Self::Charged, - NoonPaymentStatus::Reversed | NoonPaymentStatus::PartiallyReversed => Self::Voided, - NoonPaymentStatus::Cancelled | NoonPaymentStatus::Expired => Self::AuthenticationFailed, - NoonPaymentStatus::ThreeDsEnrollInitiated | NoonPaymentStatus::ThreeDsEnrollChecked => { - Self::AuthenticationPending - } - NoonPaymentStatus::ThreeDsResultVerified => Self::AuthenticationSuccessful, - NoonPaymentStatus::Failed | NoonPaymentStatus::Rejected => Self::Failure, - NoonPaymentStatus::Pending | NoonPaymentStatus::MarkedForReview => Self::Pending, - NoonPaymentStatus::Initiated - | NoonPaymentStatus::PaymentInfoAdded - | NoonPaymentStatus::Authenticated => Self::Started, - NoonPaymentStatus::Locked => current_status, +fn get_payment_status(data: (NoonPaymentStatus, AttemptStatus)) -> AttemptStatus { + let (item, current_status) = data; + match item { + NoonPaymentStatus::Authorized => AttemptStatus::Authorized, + NoonPaymentStatus::Captured + | NoonPaymentStatus::PartiallyCaptured + | NoonPaymentStatus::PartiallyRefunded + | NoonPaymentStatus::Refunded => AttemptStatus::Charged, + NoonPaymentStatus::Reversed | NoonPaymentStatus::PartiallyReversed => AttemptStatus::Voided, + NoonPaymentStatus::Cancelled | NoonPaymentStatus::Expired => { + AttemptStatus::AuthenticationFailed + } + NoonPaymentStatus::ThreeDsEnrollInitiated | NoonPaymentStatus::ThreeDsEnrollChecked => { + AttemptStatus::AuthenticationPending } + NoonPaymentStatus::ThreeDsResultVerified => AttemptStatus::AuthenticationSuccessful, + NoonPaymentStatus::Failed | NoonPaymentStatus::Rejected => AttemptStatus::Failure, + NoonPaymentStatus::Pending | NoonPaymentStatus::MarkedForReview => AttemptStatus::Pending, + NoonPaymentStatus::Initiated + | NoonPaymentStatus::PaymentInfoAdded + | NoonPaymentStatus::Authenticated => AttemptStatus::Started, + NoonPaymentStatus::Locked => current_status, } } @@ -554,28 +558,29 @@ pub struct NoonPaymentsResponse { result: NoonPaymentsResponseResult, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { let order = item.response.result.order; - let status = enums::AttemptStatus::foreign_from((order.status, item.data.status)); - let redirection_data = item.response.result.checkout_data.map(|redirection_data| { - services::RedirectForm::Form { - endpoint: redirection_data.post_url.to_string(), - method: services::Method::Post, - form_fields: std::collections::HashMap::new(), - } - }); + let status = get_payment_status((order.status, item.data.status)); + let redirection_data = + item.response + .result + .checkout_data + .map(|redirection_data| RedirectForm::Form { + endpoint: redirection_data.post_url.to_string(), + method: Method::Post, + form_fields: std::collections::HashMap::new(), + }); let mandate_reference = item.response .result .subscription - .map(|subscription_data| types::MandateReference { + .map(|subscription_data| MandateReference { connector_mandate_id: Some(subscription_data.identifier.expose()), payment_method_id: None, mandate_metadata: None, @@ -595,10 +600,8 @@ impl _ => { let connector_response_reference_id = order.reference.or(Some(order.id.to_string())); - Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - order.id.to_string(), - ), + Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(order.id.to_string()), redirection_data: Box::new(redirection_data), mandate_reference: Box::new(mandate_reference), connector_metadata: None, @@ -618,7 +621,7 @@ impl #[serde(rename_all = "camelCase")] pub struct NoonActionTransaction { amount: StringMajorUnit, - currency: diesel_models::enums::Currency, + currency: enums::Currency, transaction_reference: Option, } @@ -636,11 +639,9 @@ pub struct NoonPaymentsActionRequest { transaction: NoonActionTransaction, } -impl TryFrom<&NoonRouterData<&types::PaymentsCaptureRouterData>> for NoonPaymentsActionRequest { +impl TryFrom<&NoonRouterData<&PaymentsCaptureRouterData>> for NoonPaymentsActionRequest { type Error = error_stack::Report; - fn try_from( - data: &NoonRouterData<&types::PaymentsCaptureRouterData>, - ) -> Result { + fn try_from(data: &NoonRouterData<&PaymentsCaptureRouterData>) -> Result { let item = data.router_data; let amount = &data.amount; let order = NoonActionOrder { @@ -666,9 +667,9 @@ pub struct NoonPaymentsCancelRequest { order: NoonActionOrder, } -impl TryFrom<&types::PaymentsCancelRouterData> for NoonPaymentsCancelRequest { +impl TryFrom<&PaymentsCancelRouterData> for NoonPaymentsCancelRequest { type Error = error_stack::Report; - fn try_from(item: &types::PaymentsCancelRouterData) -> Result { + fn try_from(item: &PaymentsCancelRouterData) -> Result { let order = NoonActionOrder { id: item.request.connector_transaction_id.clone(), }; @@ -686,9 +687,9 @@ pub struct NoonRevokeMandateRequest { subscription: NoonSubscriptionObject, } -impl TryFrom<&types::MandateRevokeRouterData> for NoonRevokeMandateRequest { +impl TryFrom<&MandateRevokeRouterData> for NoonRevokeMandateRequest { type Error = error_stack::Report; - fn try_from(item: &types::MandateRevokeRouterData) -> Result { + fn try_from(item: &MandateRevokeRouterData) -> Result { Ok(Self { api_operation: NoonApiOperations::CancelSubscription, subscription: NoonSubscriptionObject { @@ -698,9 +699,9 @@ impl TryFrom<&types::MandateRevokeRouterData> for NoonRevokeMandateRequest { } } -impl TryFrom<&NoonRouterData<&types::RefundsRouterData>> for NoonPaymentsActionRequest { +impl TryFrom<&NoonRouterData<&RefundsRouterData>> for NoonPaymentsActionRequest { type Error = error_stack::Report; - fn try_from(data: &NoonRouterData<&types::RefundsRouterData>) -> Result { + fn try_from(data: &NoonRouterData<&RefundsRouterData>) -> Result { let item = data.router_data; let refund_amount = &data.amount; let order = NoonActionOrder { @@ -740,26 +741,26 @@ pub struct NoonRevokeMandateResponse { impl TryFrom< - types::ResponseRouterData< + ResponseRouterData< F, NoonRevokeMandateResponse, - types::MandateRevokeRequestData, - types::MandateRevokeResponseData, + MandateRevokeRequestData, + MandateRevokeResponseData, >, - > for types::RouterData + > for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< + item: ResponseRouterData< F, NoonRevokeMandateResponse, - types::MandateRevokeRequestData, - types::MandateRevokeResponseData, + MandateRevokeRequestData, + MandateRevokeResponseData, >, ) -> Result { match item.response.result.subscription.status { NoonRevokeStatus::Cancelled => Ok(Self { - response: Ok(types::MandateRevokeResponseData { + response: Ok(MandateRevokeResponseData { mandate_status: common_enums::MandateStatus::Revoked, }), ..item.data @@ -809,17 +810,15 @@ pub struct RefundResponse { message: String, } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let response = &item.response; let refund_status = enums::RefundStatus::from(response.result.transaction.status.to_owned()); - let response = if is_refund_failure(refund_status) { + let response = if utils::is_refund_failure(refund_status) { Err(ErrorResponse { status_code: item.http_code, code: response.result_code.to_string(), @@ -829,7 +828,7 @@ impl TryFrom> connector_transaction_id: Some(response.result.transaction.id.clone()), }) } else { - Ok(types::RefundsResponseData { + Ok(RefundsResponseData { connector_refund_id: item.response.result.transaction.id, refund_status, }) @@ -864,12 +863,10 @@ pub struct RefundSyncResponse { message: String, } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let noon_transaction: &NoonRefundResponseTransactions = item .response @@ -886,7 +883,7 @@ impl TryFrom> }) .ok_or(errors::ConnectorError::ResponseHandlingFailed)?; let refund_status = enums::RefundStatus::from(noon_transaction.status.to_owned()); - let response = if is_refund_failure(refund_status) { + let response = if utils::is_refund_failure(refund_status) { let response = &item.response; Err(ErrorResponse { status_code: item.http_code, @@ -897,7 +894,7 @@ impl TryFrom> connector_transaction_id: Some(noon_transaction.id.clone()), }) } else { - Ok(types::RefundsResponseData { + Ok(RefundsResponseData { connector_refund_id: noon_transaction.id.to_owned(), refund_status, }) diff --git a/crates/router/src/connector/opayo.rs b/crates/hyperswitch_connectors/src/connectors/opayo.rs similarity index 61% rename from crates/router/src/connector/opayo.rs rename to crates/hyperswitch_connectors/src/connectors/opayo.rs index a9fc439e54c..b2aadda37f7 100644 --- a/crates/router/src/connector/opayo.rs +++ b/crates/hyperswitch_connectors/src/connectors/opayo.rs @@ -1,32 +1,49 @@ mod transformers; +use common_enums::enums; use common_utils::{ - request::RequestContent, + errors::CustomResult, + ext_traits::BytesExt, + request::{Method, Request, RequestBuilder, RequestContent}, types::{AmountConvertor, MinorUnit, MinorUnitForConnector}, }; -use diesel_models::enums; use error_stack::{report, ResultExt}; -use masking::ExposeInterface; -use transformers as opayo; - -use crate::{ - configs::settings, - connector::{utils as connector_utils, utils::convert_amount}, - core::errors::{self, CustomResult}, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorSpecifications, ConnectorValidation, +use hyperswitch_domain_models::{ + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, }, + router_request_types::{ + AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData, + PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData, + RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsCaptureRouterData, PaymentsSyncRouterData, + RefundSyncRouterData, RefundsRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorSpecifications, + ConnectorValidation, + }, + configs::Connectors, + errors, + events::connector_api_logs::ConnectorEvent, types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, Response, + PaymentsAuthorizeType, PaymentsCaptureType, PaymentsSyncType, RefundExecuteType, + RefundSyncType, Response, }, - utils::BytesExt, + webhooks, }; +use masking::{ExposeInterface, Mask}; +use transformers as opayo; + +use crate::{constants::headers, types::ResponseRouterData, utils::convert_amount}; #[derive(Clone)] pub struct Opayo { @@ -54,12 +71,8 @@ impl api::RefundExecute for Opayo {} impl api::RefundSync for Opayo {} impl api::PaymentToken for Opayo {} -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Opayo +impl ConnectorIntegration + for Opayo { } @@ -69,9 +82,9 @@ where { fn build_headers( &self, - req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let content_type = ConnectorCommon::common_get_content_type(self); let mut common_headers = self.get_auth_header(&req.connector_auth_type)?; common_headers.push(( @@ -90,14 +103,14 @@ impl ConnectorCommon for Opayo { fn common_get_content_type(&self) -> &'static str { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.opayo.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = opayo::OpayoAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; Ok(vec![( @@ -143,39 +156,24 @@ impl ConnectorValidation for Opayo { | enums::CaptureMethod::Manual | enums::CaptureMethod::SequentialAutomatic => Ok(()), enums::CaptureMethod::ManualMultiple | enums::CaptureMethod::Scheduled => Err( - connector_utils::construct_not_supported_error_report(capture_method, self.id()), + crate::utils::construct_not_supported_error_report(capture_method, self.id()), ), } } } -impl ConnectorIntegration - for Opayo -{ +impl ConnectorIntegration for Opayo { //TODO: implement sessions flow } -impl ConnectorIntegration - for Opayo -{ -} +impl ConnectorIntegration for Opayo {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Opayo -{ +impl ConnectorIntegration for Opayo { fn build_request( &self, - _req: &types::RouterData< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - >, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Setup Mandate flow for Opayo".to_string()) .into(), @@ -183,14 +181,12 @@ impl } } -impl ConnectorIntegration - for Opayo -{ +impl ConnectorIntegration for Opayo { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -200,16 +196,16 @@ impl ConnectorIntegration CustomResult { Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into()) } fn get_request_body( &self, - req: &types::PaymentsAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let amount = convert_amount( self.amount_converter, @@ -223,20 +219,16 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsAuthorizeType::get_url( - self, req, connectors, - )?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsAuthorizeType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsAuthorizeType::get_request_body( + .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?) + .set_body(PaymentsAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -245,10 +237,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: opayo::OpayoPaymentsResponse = res .response .parse_struct("Opayo PaymentsAuthorizeResponse") @@ -257,7 +249,7 @@ impl ConnectorIntegration - for Opayo -{ +impl ConnectorIntegration for Opayo { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -290,33 +280,33 @@ impl ConnectorIntegration CustomResult { Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into()) } fn build_request( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) + .headers(PaymentsSyncType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::PaymentsSyncRouterData, + data: &PaymentsSyncRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: opayo::OpayoPaymentsResponse = res .response .parse_struct("opayo PaymentsSyncResponse") @@ -325,7 +315,7 @@ impl ConnectorIntegration - for Opayo -{ +impl ConnectorIntegration for Opayo { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -358,34 +346,32 @@ impl ConnectorIntegration CustomResult { Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into()) } fn get_request_body( &self, - _req: &types::PaymentsCaptureRouterData, - _connectors: &settings::Connectors, + _req: &PaymentsCaptureRouterData, + _connectors: &Connectors, ) -> CustomResult { Err(errors::ConnectorError::NotImplemented("get_request_body method".to_string()).into()) } fn build_request( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsCaptureType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsCaptureType::get_request_body( + .headers(PaymentsCaptureType::get_headers(self, req, connectors)?) + .set_body(PaymentsCaptureType::get_request_body( self, req, connectors, )?) .build(), @@ -394,10 +380,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: opayo::OpayoPaymentsResponse = res .response .parse_struct("Opayo PaymentsCaptureResponse") @@ -406,7 +392,7 @@ impl ConnectorIntegration - for Opayo -{ -} +impl ConnectorIntegration for Opayo {} -impl ConnectorIntegration for Opayo { +impl ConnectorIntegration for Opayo { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -442,16 +425,16 @@ impl ConnectorIntegration, - _connectors: &settings::Connectors, + _req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into()) } fn get_request_body( &self, - req: &types::RefundsRouterData, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { let refund_amount = convert_amount( self.amount_converter, @@ -466,29 +449,25 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::RefundExecuteType::get_url(self, req, connectors)?) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundExecuteType::get_headers( - self, req, connectors, - )?) - .set_body(types::RefundExecuteType::get_request_body( - self, req, connectors, - )?) + .headers(RefundExecuteType::get_headers(self, req, connectors)?) + .set_body(RefundExecuteType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::RefundsRouterData, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: opayo::RefundResponse = res .response .parse_struct("opayo RefundResponse") @@ -497,7 +476,7 @@ impl ConnectorIntegration for Opayo { +impl ConnectorIntegration for Opayo { fn get_headers( &self, - req: &types::RefundSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -528,33 +507,33 @@ impl ConnectorIntegration CustomResult { Err(errors::ConnectorError::NotImplemented("get_url method".to_string()).into()) } fn build_request( &self, - req: &types::RefundSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::RefundSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundSyncType::get_headers(self, req, connectors)?) + .headers(RefundSyncType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::RefundSyncRouterData, + data: &RefundSyncRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: opayo::RefundResponse = res .response .parse_struct("opayo RefundSyncResponse") @@ -563,7 +542,7 @@ impl ConnectorIntegration, - ) -> CustomResult { + _request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_event_type( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + _request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_resource_object( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } diff --git a/crates/router/src/connector/opayo/transformers.rs b/crates/hyperswitch_connectors/src/connectors/opayo/transformers.rs similarity index 65% rename from crates/router/src/connector/opayo/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/opayo/transformers.rs index 992acfb5ef0..819f8e10402 100644 --- a/crates/router/src/connector/opayo/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/opayo/transformers.rs @@ -1,12 +1,22 @@ +use common_enums::enums; use common_utils::types::MinorUnit; +use hyperswitch_domain_models::{ + payment_method_data::PaymentMethodData, + router_data::{ConnectorAuthType, RouterData}, + router_flow_types::{Execute, RSync}, + router_request_types::ResponseId, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{PaymentsAuthorizeRouterData, RefundsRouterData}, +}; +use hyperswitch_interfaces::errors; use masking::Secret; use serde::{Deserialize, Serialize}; use crate::{ - connector::utils::{self, PaymentsAuthorizeRequestData, RouterData}, - core::errors, - types::{self, api, domain, storage::enums}, + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::{PaymentsAuthorizeRequestData, RouterData as OtherRouterData}, }; + #[derive(Debug, Serialize)] pub struct OpayoRouterData { pub amount: MinorUnit, @@ -38,14 +48,14 @@ pub struct OpayoCard { complete: bool, } -impl TryFrom<&OpayoRouterData<&types::PaymentsAuthorizeRouterData>> for OpayoPaymentsRequest { +impl TryFrom<&OpayoRouterData<&PaymentsAuthorizeRouterData>> for OpayoPaymentsRequest { type Error = error_stack::Report; fn try_from( - item_data: &OpayoRouterData<&types::PaymentsAuthorizeRouterData>, + item_data: &OpayoRouterData<&PaymentsAuthorizeRouterData>, ) -> Result { let item = item_data.router_data.clone(); match item.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(req_card) => { + PaymentMethodData::Card(req_card) => { let card = OpayoCard { name: item .get_optional_billing_full_name() @@ -61,26 +71,26 @@ impl TryFrom<&OpayoRouterData<&types::PaymentsAuthorizeRouterData>> for OpayoPay card, }) } - domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Opayo"), + crate::utils::get_unimplemented_payment_method_error_message("Opayo"), ) .into()) } @@ -93,11 +103,11 @@ pub struct OpayoAuthType { pub(super) api_key: Secret, } -impl TryFrom<&types::ConnectorAuthType> for OpayoAuthType { +impl TryFrom<&ConnectorAuthType> for OpayoAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { + fn try_from(auth_type: &ConnectorAuthType) -> Result { match auth_type { - types::ConnectorAuthType::HeaderKey { api_key } => Ok(Self { + ConnectorAuthType::HeaderKey { api_key } => Ok(Self { api_key: api_key.to_owned(), }), _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()), @@ -131,18 +141,17 @@ pub struct OpayoPaymentsResponse { transaction_id: String, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { Ok(Self { status: enums::AttemptStatus::from(item.response.status), - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( item.response.transaction_id.clone(), ), redirection_data: Box::new(None), @@ -165,9 +174,9 @@ pub struct OpayoRefundRequest { pub amount: MinorUnit, } -impl TryFrom<&OpayoRouterData<&types::RefundsRouterData>> for OpayoRefundRequest { +impl TryFrom<&OpayoRouterData<&RefundsRouterData>> for OpayoRefundRequest { type Error = error_stack::Report; - fn try_from(item: &OpayoRouterData<&types::RefundsRouterData>) -> Result { + fn try_from(item: &OpayoRouterData<&RefundsRouterData>) -> Result { Ok(Self { amount: item.amount, }) @@ -202,15 +211,13 @@ pub struct RefundResponse { status: RefundStatus, } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.id.to_string(), refund_status: enums::RefundStatus::from(item.response.status), }), @@ -219,15 +226,13 @@ impl TryFrom> } } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.id.to_string(), refund_status: enums::RefundStatus::from(item.response.status), }), diff --git a/crates/router/src/connector/opennode.rs b/crates/hyperswitch_connectors/src/connectors/opennode.rs similarity index 63% rename from crates/router/src/connector/opennode.rs rename to crates/hyperswitch_connectors/src/connectors/opennode.rs index 1c11da05712..fefd2f77768 100644 --- a/crates/router/src/connector/opennode.rs +++ b/crates/hyperswitch_connectors/src/connectors/opennode.rs @@ -2,29 +2,47 @@ pub mod transformers; use std::fmt::Debug; -use common_utils::{crypto, request::RequestContent}; +use common_utils::{ + crypto, + errors::CustomResult, + ext_traits::BytesExt, + request::{Method, Request, RequestBuilder, RequestContent}, +}; use error_stack::ResultExt; -use transformers as opennode; - -use self::opennode::OpennodeWebhookDetails; -use crate::{ - configs::settings, - consts, - core::errors::{self, CustomResult}, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorSpecifications, ConnectorValidation, +use hyperswitch_domain_models::{ + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, }, + router_request_types::{ + AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData, + PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, PaymentsSyncData, + RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, Response, + PaymentsAuthorizeRouterData, PaymentsCaptureRouterData, PaymentsSyncRouterData, + RefundsRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorSpecifications, + ConnectorValidation, }, - utils::BytesExt, + configs::Connectors, + consts, errors, + events::connector_api_logs::ConnectorEvent, + types::{PaymentsAuthorizeType, PaymentsSyncType, Response}, + webhooks::{self, IncomingWebhook}, }; +use masking::{Mask, Maskable}; +use transformers as opennode; + +use self::opennode::OpennodeWebhookDetails; +use crate::{constants::headers, types::ResponseRouterData}; #[derive(Debug, Clone)] pub struct Opennode; @@ -49,9 +67,9 @@ where { fn build_headers( &self, - req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![ ( headers::CONTENT_TYPE.to_string(), @@ -81,14 +99,14 @@ impl ConnectorCommon for Opennode { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.opennode.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = opennode::OpennodeAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; Ok(vec![( @@ -123,43 +141,26 @@ impl ConnectorCommon for Opennode { impl ConnectorValidation for Opennode {} -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Opennode +impl ConnectorIntegration + for Opennode { // Not Implemented (R) } -impl ConnectorIntegration - for Opennode -{ +impl ConnectorIntegration for Opennode { //TODO: implement sessions flow } -impl ConnectorIntegration - for Opennode -{ -} +impl ConnectorIntegration for Opennode {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Opennode +impl ConnectorIntegration + for Opennode { fn build_request( &self, - _req: &types::RouterData< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - >, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Setup Mandate flow for Opennode".to_string()) .into(), @@ -167,14 +168,12 @@ impl } } -impl ConnectorIntegration - for Opennode -{ +impl ConnectorIntegration for Opennode { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -184,16 +183,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}/v1/charges", self.base_url(_connectors))) } fn get_request_body( &self, - req: &types::PaymentsAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = opennode::OpennodeRouterData::try_from(( &self.get_currency_unit(), @@ -207,19 +206,15 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsAuthorizeType::get_url( - self, req, connectors, - )?) - .headers(types::PaymentsAuthorizeType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsAuthorizeType::get_request_body( + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?) + .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?) + .set_body(PaymentsAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -228,10 +223,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: opennode::OpennodePaymentsResponse = res .response .parse_struct("Opennode PaymentsAuthorizeResponse") @@ -240,7 +235,7 @@ impl ConnectorIntegration - for Opennode -{ +impl ConnectorIntegration for Opennode { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -274,8 +267,8 @@ impl ConnectorIntegration CustomResult { let connector_id = _req .request @@ -291,24 +284,24 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) - .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&PaymentsSyncType::get_url(self, req, connectors)?) + .headers(PaymentsSyncType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::PaymentsSyncRouterData, + data: &PaymentsSyncRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: opennode::OpennodePaymentsResponse = res .response .parse_struct("opennode PaymentsSyncResponse") @@ -317,7 +310,7 @@ impl ConnectorIntegration - for Opennode -{ +impl ConnectorIntegration for Opennode { fn build_request( &self, - _req: &types::PaymentsCaptureRouterData, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &PaymentsCaptureRouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err(errors::ConnectorError::FlowNotSupported { flow: "Capture".to_string(), connector: "Opennode".to_string(), @@ -350,19 +341,14 @@ impl ConnectorIntegration - for Opennode -{ -} +impl ConnectorIntegration for Opennode {} -impl ConnectorIntegration - for Opennode -{ +impl ConnectorIntegration for Opennode { fn build_request( &self, - _req: &types::RefundsRouterData, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RefundsRouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Refund flow not Implemented".to_string()) .into(), @@ -370,22 +356,22 @@ impl ConnectorIntegration for Opennode { +impl ConnectorIntegration for Opennode { // default implementation of build_request method will be executed } #[async_trait::async_trait] -impl api::IncomingWebhook for Opennode { +impl IncomingWebhook for Opennode { fn get_webhook_source_verification_algorithm( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Ok(Box::new(crypto::HmacSha256)) } fn get_webhook_source_verification_signature( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { let notif = serde_urlencoded::from_bytes::(request.body) @@ -397,7 +383,7 @@ impl api::IncomingWebhook for Opennode { fn get_webhook_source_verification_message( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _merchant_id: &common_utils::id_type::MerchantId, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { @@ -408,7 +394,7 @@ impl api::IncomingWebhook for Opennode { fn get_webhook_object_reference_id( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult { let notif = serde_urlencoded::from_bytes::(request.body) .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?; @@ -419,29 +405,29 @@ impl api::IncomingWebhook for Opennode { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let notif = serde_urlencoded::from_bytes::(request.body) .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?; match notif.status { opennode::OpennodePaymentStatus::Paid => { - Ok(api::IncomingWebhookEvent::PaymentIntentSuccess) + Ok(api_models::webhooks::IncomingWebhookEvent::PaymentIntentSuccess) } opennode::OpennodePaymentStatus::Underpaid | opennode::OpennodePaymentStatus::Expired => { - Ok(api::IncomingWebhookEvent::PaymentActionRequired) + Ok(api_models::webhooks::IncomingWebhookEvent::PaymentActionRequired) } opennode::OpennodePaymentStatus::Processing => { - Ok(api::IncomingWebhookEvent::PaymentIntentProcessing) + Ok(api_models::webhooks::IncomingWebhookEvent::PaymentIntentProcessing) } - _ => Ok(api::IncomingWebhookEvent::EventNotSupported), + _ => Ok(api_models::webhooks::IncomingWebhookEvent::EventNotSupported), } } fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let notif = serde_urlencoded::from_bytes::(request.body) .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?; diff --git a/crates/router/src/connector/opennode/transformers.rs b/crates/hyperswitch_connectors/src/connectors/opennode/transformers.rs similarity index 73% rename from crates/router/src/connector/opennode/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/opennode/transformers.rs index 067237bc3e2..3aa6c63ba51 100644 --- a/crates/router/src/connector/opennode/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/opennode/transformers.rs @@ -1,13 +1,21 @@ use std::collections::HashMap; +use common_enums::{enums, AttemptStatus}; +use common_utils::request::Method; +use hyperswitch_domain_models::{ + router_data::{ConnectorAuthType, RouterData}, + router_flow_types::refunds::{Execute, RSync}, + router_request_types::ResponseId, + router_response_types::{PaymentsResponseData, RedirectForm, RefundsResponseData}, + types::{PaymentsAuthorizeRouterData, RefundsRouterData}, +}; +use hyperswitch_interfaces::{api::CurrencyUnit, errors}; use masking::Secret; use serde::{Deserialize, Serialize}; use crate::{ - connector::utils::{PaymentsAuthorizeRequestData, RouterData}, - core::errors, - services, - types::{self, api, storage::enums}, + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::{PaymentsAuthorizeRequestData, RouterData as OtherRouterData}, }; #[derive(Debug, Serialize)] @@ -16,16 +24,11 @@ pub struct OpennodeRouterData { pub router_data: T, } -impl TryFrom<(&api::CurrencyUnit, enums::Currency, i64, T)> for OpennodeRouterData { +impl TryFrom<(&CurrencyUnit, enums::Currency, i64, T)> for OpennodeRouterData { type Error = error_stack::Report; fn try_from( - (_currency_unit, _currency, amount, router_data): ( - &api::CurrencyUnit, - enums::Currency, - i64, - T, - ), + (_currency_unit, _currency, amount, router_data): (&CurrencyUnit, enums::Currency, i64, T), ) -> Result { Ok(Self { amount, @@ -46,10 +49,10 @@ pub struct OpennodePaymentsRequest { order_id: String, } -impl TryFrom<&OpennodeRouterData<&types::PaymentsAuthorizeRouterData>> for OpennodePaymentsRequest { +impl TryFrom<&OpennodeRouterData<&PaymentsAuthorizeRouterData>> for OpennodePaymentsRequest { type Error = error_stack::Report; fn try_from( - item: &OpennodeRouterData<&types::PaymentsAuthorizeRouterData>, + item: &OpennodeRouterData<&PaymentsAuthorizeRouterData>, ) -> Result { get_crypto_specific_payment_data(item) } @@ -61,11 +64,11 @@ pub struct OpennodeAuthType { pub(super) api_key: Secret, } -impl TryFrom<&types::ConnectorAuthType> for OpennodeAuthType { +impl TryFrom<&ConnectorAuthType> for OpennodeAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { + fn try_from(auth_type: &ConnectorAuthType) -> Result { match auth_type { - types::ConnectorAuthType::HeaderKey { api_key } => Ok(Self { + ConnectorAuthType::HeaderKey { api_key } => Ok(Self { api_key: api_key.to_owned(), }), _ => Err(errors::ConnectorError::FailedToObtainAuthType.into()), @@ -88,7 +91,7 @@ pub enum OpennodePaymentStatus { Unknown, } -impl From for enums::AttemptStatus { +impl From for AttemptStatus { fn from(item: OpennodePaymentStatus) -> Self { match item { OpennodePaymentStatus::Unpaid => Self::AuthenticationPending, @@ -114,29 +117,23 @@ pub struct OpennodePaymentsResponse { data: OpennodePaymentsResponseData, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - OpennodePaymentsResponse, - T, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { let form_fields = HashMap::new(); - let redirection_data = services::RedirectForm::Form { + let redirection_data = RedirectForm::Form { endpoint: item.response.data.hosted_checkout_url.to_string(), - method: services::Method::Get, + method: Method::Get, form_fields, }; - let connector_id = types::ResponseId::ConnectorTransactionId(item.response.data.id); + let connector_id = ResponseId::ConnectorTransactionId(item.response.data.id); let attempt_status = item.response.data.status; let response_data = if attempt_status != OpennodePaymentStatus::Underpaid { - Ok(types::PaymentsResponseData::TransactionResponse { + Ok(PaymentsResponseData::TransactionResponse { resource_id: connector_id, redirection_data: Box::new(Some(redirection_data)), mandate_reference: Box::new(None), @@ -147,9 +144,9 @@ impl charges: None, }) } else { - Ok(types::PaymentsResponseData::TransactionUnresolvedResponse { + Ok(PaymentsResponseData::TransactionUnresolvedResponse { resource_id: connector_id, - reason: Some(api::enums::UnresolvedResponseReason { + reason: Some(api_models::enums::UnresolvedResponseReason { code: "UNDERPAID".to_string(), message: "Please check the transaction in opennode dashboard and resolve manually" @@ -159,7 +156,7 @@ impl }) }; Ok(Self { - status: enums::AttemptStatus::from(attempt_status), + status: AttemptStatus::from(attempt_status), response: response_data, ..item.data }) @@ -174,11 +171,9 @@ pub struct OpennodeRefundRequest { pub amount: i64, } -impl TryFrom<&OpennodeRouterData<&types::RefundsRouterData>> for OpennodeRefundRequest { +impl TryFrom<&OpennodeRouterData<&RefundsRouterData>> for OpennodeRefundRequest { type Error = error_stack::Report; - fn try_from( - item: &OpennodeRouterData<&types::RefundsRouterData>, - ) -> Result { + fn try_from(item: &OpennodeRouterData<&RefundsRouterData>) -> Result { Ok(Self { amount: item.router_data.request.refund_amount, }) @@ -211,15 +206,13 @@ pub struct RefundResponse { status: RefundStatus, } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.id.to_string(), refund_status: enums::RefundStatus::from(item.response.status), }), @@ -228,15 +221,13 @@ impl TryFrom> } } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.id.to_string(), refund_status: enums::RefundStatus::from(item.response.status), }), @@ -252,7 +243,7 @@ pub struct OpennodeErrorResponse { } fn get_crypto_specific_payment_data( - item: &OpennodeRouterData<&types::PaymentsAuthorizeRouterData>, + item: &OpennodeRouterData<&PaymentsAuthorizeRouterData>, ) -> Result> { let amount = item.amount; let currency = item.router_data.request.currency.to_string(); diff --git a/crates/router/src/connector/payme.rs b/crates/hyperswitch_connectors/src/connectors/payme.rs similarity index 66% rename from crates/router/src/connector/payme.rs rename to crates/hyperswitch_connectors/src/connectors/payme.rs index 10a0fe67562..9c1a94ad3c0 100644 --- a/crates/router/src/connector/payme.rs +++ b/crates/hyperswitch_connectors/src/connectors/payme.rs @@ -1,38 +1,61 @@ pub mod transformers; use api_models::enums::AuthenticationType; +use common_enums::enums; use common_utils::{ crypto, - request::RequestContent, + errors::CustomResult, + ext_traits::BytesExt, + request::{Method, Request, RequestBuilder, RequestContent}, types::{ AmountConvertor, MinorUnit, MinorUnitForConnector, StringMajorUnit, StringMajorUnitForConnector, }, }; -use diesel_models::enums; use error_stack::{Report, ResultExt}; -use masking::{ExposeInterface, Secret}; -use transformers as payme; - -use crate::{ - configs::settings, - connector::utils::{self as connector_utils, PaymentMethodDataType, PaymentsPreProcessingData}, - core::{ - errors::{self, CustomResult}, - payments, +use hyperswitch_domain_models::{ + payment_method_data::PaymentMethodData, + router_data::{AccessToken, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, + CompleteAuthorize, InitPayment, PreProcessing, + }, + router_request_types::{ + AccessTokenRequestData, CompleteAuthorizeData, PaymentMethodTokenizationData, + PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsPreProcessingData, + PaymentsSessionData, PaymentsSyncData, RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsCompleteAuthorizeRouterData, PaymentsPreProcessingRouterData, RefundsRouterData, + TokenizationRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorRedirectResponse, + ConnectorSpecifications, ConnectorValidation, PaymentsPreProcessing, }, + configs::Connectors, + disputes::DisputePayload, + errors, events::connector_api_logs::ConnectorEvent, - headers, - services::{self, request, ConnectorIntegration, ConnectorSpecifications, ConnectorValidation}, types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - domain, - transformers::ForeignTryFrom, - ErrorResponse, Response, + PaymentsAuthorizeType, PaymentsCaptureType, PaymentsCompleteAuthorizeType, + PaymentsPreProcessingType, PaymentsSyncType, PaymentsVoidType, RefundExecuteType, + RefundSyncType, Response, TokenizationType, }, - // transformers::{ForeignFrom, ForeignTryFrom}, - utils::{handle_json_response_deserialization_failure, BytesExt}, + webhooks, +}; +use masking::{ExposeInterface, Secret}; +use transformers as payme; + +use crate::{ + types::ResponseRouterData, + utils::{self, ForeignTryFrom, PaymentsPreProcessingRequestData}, }; #[derive(Clone)] @@ -70,11 +93,11 @@ where { fn build_headers( &self, - _req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let header = vec![( - headers::CONTENT_TYPE.to_string(), + crate::constants::headers::CONTENT_TYPE.to_string(), Self::get_content_type(self).to_string().into(), )]; Ok(header) @@ -94,7 +117,7 @@ impl ConnectorCommon for Payme { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.payme.base_url.as_ref() } @@ -131,7 +154,7 @@ impl ConnectorCommon for Payme { Err(error_msg) => { event_builder.map(|event| event.set_error(serde_json::json!({"error": res.response.escape_ascii().to_string(), "status_code": res.status_code}))); router_env::logger::error!(deserialization_error =? error_msg); - handle_json_response_deserialization_failure(res, "payme") + utils::handle_json_response_deserialization_failure(res, "payme") } } } @@ -150,36 +173,32 @@ impl ConnectorValidation for Payme { | enums::CaptureMethod::Manual | enums::CaptureMethod::SequentialAutomatic => Ok(()), enums::CaptureMethod::ManualMultiple | enums::CaptureMethod::Scheduled => Err( - connector_utils::construct_not_supported_error_report(capture_method, self.id()), + utils::construct_not_supported_error_report(capture_method, self.id()), ), } } fn validate_mandate_payment( &self, - pm_type: Option, - pm_data: domain::payments::PaymentMethodData, + pm_type: Option, + pm_data: PaymentMethodData, ) -> CustomResult<(), errors::ConnectorError> { let mandate_supported_pmd = std::collections::HashSet::from([ - PaymentMethodDataType::Card, - PaymentMethodDataType::ApplePayThirdPartySdk, + utils::PaymentMethodDataType::Card, + utils::PaymentMethodDataType::ApplePayThirdPartySdk, ]); - connector_utils::is_mandate_supported(pm_data, pm_type, mandate_supported_pmd, self.id()) + utils::is_mandate_supported(pm_data, pm_type, mandate_supported_pmd, self.id()) } } -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Payme +impl ConnectorIntegration + for Payme { fn get_headers( &self, - req: &types::TokenizationRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &TokenizationRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -189,8 +208,8 @@ impl fn get_url( &self, - _req: &types::TokenizationRouterData, - connectors: &settings::Connectors, + _req: &TokenizationRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!( "{}api/capture-buyer-token", @@ -200,8 +219,8 @@ impl fn get_request_body( &self, - req: &types::TokenizationRouterData, - _connectors: &settings::Connectors, + req: &TokenizationRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = payme::CaptureBuyerRequest::try_from(req)?; @@ -210,19 +229,17 @@ impl fn build_request( &self, - req: &types::TokenizationRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &TokenizationRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(match req.auth_type { AuthenticationType::ThreeDs => Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::TokenizationType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&TokenizationType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::TokenizationType::get_headers(self, req, connectors)?) - .set_body(types::TokenizationType::get_request_body( - self, req, connectors, - )?) + .headers(TokenizationType::get_headers(self, req, connectors)?) + .set_body(TokenizationType::get_request_body(self, req, connectors)?) .build(), ), AuthenticationType::NoThreeDs => None, @@ -231,12 +248,12 @@ impl fn handle_response( &self, - data: &types::TokenizationRouterData, + data: &TokenizationRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult + ) -> CustomResult where - types::PaymentsResponseData: Clone, + PaymentsResponseData: Clone, { let response: payme::CaptureBuyerResponse = res .response @@ -246,7 +263,7 @@ impl event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -271,25 +288,18 @@ impl } } -impl ConnectorIntegration - for Payme -{ -} +impl ConnectorIntegration for Payme {} -impl api::PaymentsPreProcessing for Payme {} +impl PaymentsPreProcessing for Payme {} -impl - ConnectorIntegration< - api::PreProcessing, - types::PaymentsPreProcessingData, - types::PaymentsResponseData, - > for Payme +impl ConnectorIntegration + for Payme { fn get_headers( &self, - req: &types::PaymentsPreProcessingRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsPreProcessingRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -299,21 +309,20 @@ impl fn get_url( &self, - _req: &types::PaymentsPreProcessingRouterData, - connectors: &settings::Connectors, + _req: &PaymentsPreProcessingRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}api/generate-sale", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsPreProcessingRouterData, - _connectors: &settings::Connectors, + req: &PaymentsPreProcessingRouterData, + _connectors: &Connectors, ) -> CustomResult { let req_amount = req.request.get_minor_amount()?; let req_currency = req.request.get_currency()?; - let amount = - connector_utils::convert_amount(self.amount_converter, req_amount, req_currency)?; + let amount = utils::convert_amount(self.amount_converter, req_amount, req_currency)?; let connector_router_data = payme::PaymeRouterData::try_from((amount, req))?; let connector_req = payme::GenerateSaleRequest::try_from(&connector_router_data)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -321,20 +330,18 @@ impl fn build_request( &self, - req: &types::PaymentsPreProcessingRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsPreProcessingRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { let req = Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .attach_default_headers() - .headers(types::PaymentsPreProcessingType::get_headers( - self, req, connectors, - )?) - .url(&types::PaymentsPreProcessingType::get_url( + .headers(PaymentsPreProcessingType::get_headers( self, req, connectors, )?) - .set_body(types::PaymentsPreProcessingType::get_request_body( + .url(&PaymentsPreProcessingType::get_url(self, req, connectors)?) + .set_body(PaymentsPreProcessingType::get_request_body( self, req, connectors, )?) .build(), @@ -344,10 +351,10 @@ impl fn handle_response( &self, - data: &types::PaymentsPreProcessingRouterData, + data: &PaymentsPreProcessingRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: payme::GenerateSaleResponse = res .response .parse_struct("Payme GenerateSaleResponse") @@ -356,7 +363,7 @@ impl let req_amount = data.request.get_minor_amount()?; let req_currency = data.request.get_currency()?; - let apple_pay_amount = connector_utils::convert_amount( + let apple_pay_amount = utils::convert_amount( self.apple_pay_google_pay_amount_converter, req_amount, req_currency, @@ -365,8 +372,8 @@ impl event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::foreign_try_from(( - types::ResponseRouterData { + RouterData::foreign_try_from(( + ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -393,27 +400,14 @@ impl } } -impl ConnectorIntegration - for Payme -{ -} +impl ConnectorIntegration for Payme {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Payme -{ +impl ConnectorIntegration for Payme { fn build_request( &self, - _req: &types::RouterData< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - >, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Setup Mandate flow for Payme".to_string()) .into(), @@ -421,35 +415,31 @@ impl } } -impl services::ConnectorRedirectResponse for Payme { +impl ConnectorRedirectResponse for Payme { fn get_flow_type( &self, _query_params: &str, _json_payload: Option, - action: services::PaymentAction, - ) -> CustomResult { + action: enums::PaymentAction, + ) -> CustomResult { match action { - services::PaymentAction::PSync - | services::PaymentAction::CompleteAuthorize - | services::PaymentAction::PaymentAuthenticateCompleteAuthorize => { - Ok(payments::CallConnectorAction::Trigger) + enums::PaymentAction::PSync + | enums::PaymentAction::CompleteAuthorize + | enums::PaymentAction::PaymentAuthenticateCompleteAuthorize => { + Ok(enums::CallConnectorAction::Trigger) } } } } -impl - ConnectorIntegration< - api::CompleteAuthorize, - types::CompleteAuthorizeData, - types::PaymentsResponseData, - > for Payme +impl ConnectorIntegration + for Payme { fn get_headers( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_content_type(&self) -> &'static str { @@ -457,35 +447,35 @@ impl } fn get_url( &self, - _req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, + _req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}api/pay-sale", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCompleteAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = payme::Pay3dsRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) } fn build_request( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsCompleteAuthorizeType::get_url( + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsCompleteAuthorizeType::get_url( self, req, connectors, )?) .attach_default_headers() - .headers(types::PaymentsCompleteAuthorizeType::get_headers( + .headers(PaymentsCompleteAuthorizeType::get_headers( self, req, connectors, )?) - .set_body(types::PaymentsCompleteAuthorizeType::get_request_body( + .set_body(PaymentsCompleteAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -493,10 +483,10 @@ impl } fn handle_response( &self, - data: &types::PaymentsCompleteAuthorizeRouterData, + data: &PaymentsCompleteAuthorizeRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: payme::PaymePaySaleResponse = res .response .parse_struct("Payme PaymePaySaleResponse") @@ -505,7 +495,7 @@ impl event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -529,23 +519,14 @@ impl } } -impl - ConnectorIntegration< - api::InitPayment, - types::PaymentsAuthorizeData, - types::PaymentsResponseData, - > for Payme -{ -} +impl ConnectorIntegration for Payme {} -impl ConnectorIntegration - for Payme -{ +impl ConnectorIntegration for Payme { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -555,8 +536,8 @@ impl ConnectorIntegration CustomResult { if req.request.mandate_id.is_some() { // For recurring mandate payments @@ -569,10 +550,10 @@ impl ConnectorIntegration CustomResult { - let amount = connector_utils::convert_amount( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -584,20 +565,16 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsAuthorizeType::get_url( - self, req, connectors, - )?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsAuthorizeType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsAuthorizeType::get_request_body( + .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?) + .set_body(PaymentsAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -606,10 +583,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: payme::PaymePaySaleResponse = res .response .parse_struct("Payme PaymentsAuthorizeResponse") @@ -618,7 +595,7 @@ impl ConnectorIntegration - for Payme -{ +impl ConnectorIntegration for Payme { fn get_url( &self, - _req: &types::RouterData, - connectors: &settings::Connectors, + _req: &RouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}api/get-sales", self.base_url(connectors))) } @@ -660,16 +635,16 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } fn get_request_body( &self, - req: &types::RouterData, - _connectors: &settings::Connectors, + req: &RouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = payme::PaymeQuerySaleRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -677,35 +652,33 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &RouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) - .set_body(types::PaymentsSyncType::get_request_body( - self, req, connectors, - )?) + .headers(PaymentsSyncType::get_headers(self, req, connectors)?) + .set_body(PaymentsSyncType::get_request_body(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::RouterData, + data: &RouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, ) -> CustomResult< - types::RouterData, + RouterData, errors::ConnectorError, > where - api::PSync: Clone, - types::PaymentsSyncData: Clone, - types::PaymentsResponseData: Clone, + PSync: Clone, + PaymentsSyncData: Clone, + PaymentsResponseData: Clone, { let response: payme::PaymePaymentsResponse = res .response @@ -715,7 +688,7 @@ impl ConnectorIntegration - for Payme -{ +impl ConnectorIntegration for Payme { fn get_headers( &self, - req: &types::PaymentsCaptureRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -749,18 +720,18 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}api/capture-sale", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::PaymentsCaptureRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCaptureRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_amount_to_capture, req.request.currency, @@ -772,18 +743,16 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsCaptureType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsCaptureType::get_request_body( + .headers(PaymentsCaptureType::get_headers(self, req, connectors)?) + .set_body(PaymentsCaptureType::get_request_body( self, req, connectors, )?) .build(), @@ -792,10 +761,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: payme::PaymePaySaleResponse = res .response .parse_struct("Payme PaymentsCaptureResponse") @@ -804,7 +773,7 @@ impl ConnectorIntegration - for Payme -{ +impl ConnectorIntegration for Payme { fn get_headers( &self, - req: &types::PaymentsCancelRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -846,8 +813,8 @@ impl ConnectorIntegration CustomResult { // for void, same endpoint is used as refund for payme Ok(format!("{}api/refund-sale", self.base_url(connectors))) @@ -855,8 +822,8 @@ impl ConnectorIntegration CustomResult { let req_amount = req.request @@ -870,8 +837,7 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsVoidType::get_url(self, req, connectors)?) + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsVoidType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?) - .set_body(types::PaymentsVoidType::get_request_body( - self, req, connectors, - )?) + .headers(PaymentsVoidType::get_headers(self, req, connectors)?) + .set_body(PaymentsVoidType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::PaymentsCancelRouterData, + data: &PaymentsCancelRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: payme::PaymeVoidResponse = res .response .parse_struct("PaymeVoidResponse") @@ -908,7 +872,7 @@ impl ConnectorIntegration for Payme { +impl ConnectorIntegration for Payme { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -948,18 +912,18 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + _req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}api/refund-sale", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::RefundsRouterData, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_refund_amount, req.request.currency, @@ -971,29 +935,25 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::RefundExecuteType::get_url(self, req, connectors)?) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundExecuteType::get_headers( - self, req, connectors, - )?) - .set_body(types::RefundExecuteType::get_request_body( - self, req, connectors, - )?) + .headers(RefundExecuteType::get_headers(self, req, connectors)?) + .set_body(RefundExecuteType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::RefundsRouterData, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: payme::PaymeRefundResponse = res .response .parse_struct("PaymeRefundResponse") @@ -1002,7 +962,7 @@ impl ConnectorIntegration for Payme { +impl ConnectorIntegration for Payme { fn get_url( &self, - _req: &types::RouterData, - connectors: &settings::Connectors, + _req: &RouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}api/get-transactions", self.base_url(connectors))) } fn get_headers( &self, - req: &types::RouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -1050,8 +1010,8 @@ impl ConnectorIntegration, - _connectors: &settings::Connectors, + req: &RouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = payme::PaymeQueryTransactionRequest::try_from(req)?; Ok(RequestContent::Json(Box::new(connector_req))) @@ -1059,34 +1019,29 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::RefundSyncType::get_url(self, req, connectors)?) + req: &RouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundSyncType::get_headers(self, req, connectors)?) - .set_body(types::RefundSyncType::get_request_body( - self, req, connectors, - )?) + .headers(RefundSyncType::get_headers(self, req, connectors)?) + .set_body(RefundSyncType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::RouterData, + data: &RouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult< - types::RouterData, - errors::ConnectorError, - > + ) -> CustomResult, errors::ConnectorError> where - api::RSync: Clone, - types::RefundsData: Clone, - types::RefundsResponseData: Clone, + RSync: Clone, + RefundsData: Clone, + RefundsResponseData: Clone, { let response: payme::PaymeQueryTransactionResponse = res .response @@ -1096,7 +1051,7 @@ impl ConnectorIntegration, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Ok(Box::new(crypto::Md5)) } fn get_webhook_source_verification_signature( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { let resource = @@ -1143,7 +1098,7 @@ impl api::IncomingWebhook for Payme { fn get_webhook_source_verification_message( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _merchant_id: &common_utils::id_type::MerchantId, connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { @@ -1162,7 +1117,7 @@ impl api::IncomingWebhook for Payme { async fn verify_webhook_source( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, merchant_id: &common_utils::id_type::MerchantId, connector_webhook_details: Option, _connector_account_details: crypto::Encryptable>, @@ -1215,8 +1170,8 @@ impl api::IncomingWebhook for Payme { fn get_webhook_object_reference_id( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let resource = serde_urlencoded::from_bytes::(request.body) .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?; @@ -1226,13 +1181,13 @@ impl api::IncomingWebhook for Payme { | transformers::NotifyType::SaleFailure | transformers::NotifyType::SaleChargeback | transformers::NotifyType::SaleChargebackRefund => { - api::webhooks::ObjectReferenceId::PaymentId( + api_models::webhooks::ObjectReferenceId::PaymentId( api_models::payments::PaymentIdType::ConnectorTransactionId( resource.payme_sale_id, ), ) } - transformers::NotifyType::Refund => api::webhooks::ObjectReferenceId::RefundId( + transformers::NotifyType::Refund => api_models::webhooks::ObjectReferenceId::RefundId( api_models::webhooks::RefundIdType::ConnectorRefundId( resource.payme_transaction_id, ), @@ -1243,17 +1198,19 @@ impl api::IncomingWebhook for Payme { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let resource = serde_urlencoded::from_bytes::(request.body) .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?; - Ok(api::IncomingWebhookEvent::from(resource.notify_type)) + Ok(api_models::webhooks::IncomingWebhookEvent::from( + resource.notify_type, + )) } fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let resource = serde_urlencoded::from_bytes::(request.body) @@ -1275,13 +1232,13 @@ impl api::IncomingWebhook for Payme { fn get_dispute_details( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let webhook_object = serde_urlencoded::from_bytes::(request.body) .change_context(errors::ConnectorError::WebhookBodyDecodingFailed)?; - Ok(api::disputes::DisputePayload { + Ok(DisputePayload { amount: webhook_object.price.to_string(), currency: webhook_object.currency, dispute_stage: api_models::enums::DisputeStage::Dispute, diff --git a/crates/router/src/connector/payme/transformers.rs b/crates/hyperswitch_connectors/src/connectors/payme/transformers.rs similarity index 75% rename from crates/router/src/connector/payme/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/payme/transformers.rs index ec9991b4815..8dd83d1ebd7 100644 --- a/crates/router/src/connector/payme/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/payme/transformers.rs @@ -1,33 +1,40 @@ use std::collections::HashMap; use api_models::enums::{AuthenticationType, PaymentMethod}; +use common_enums::enums; use common_utils::{ pii, types::{MinorUnit, StringMajorUnit}, }; use error_stack::ResultExt; +use hyperswitch_domain_models::{ + payment_method_data::{PaymentMethodData, WalletData}, + router_data::{ConnectorAuthType, ErrorResponse, PaymentMethodToken, RouterData}, + router_flow_types::{Execute, Void}, + router_request_types::{PaymentsCancelData, PaymentsPreProcessingData, ResponseId}, + router_response_types::{ + MandateReference, PaymentsResponseData, PreprocessingResponseId, RedirectForm, + RefundsResponseData, + }, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsCompleteAuthorizeRouterData, PaymentsPreProcessingRouterData, + PaymentsSyncRouterData, RefundSyncRouterData, RefundsRouterData, TokenizationRouterData, + }, +}; +use hyperswitch_interfaces::{consts, errors}; use masking::{ExposeInterface, Secret}; use serde::{Deserialize, Serialize}; use url::Url; use crate::{ - connector::utils::{ - self, is_payment_failure, is_refund_failure, missing_field_err, AddressDetailsData, - CardData, PaymentsAuthorizeRequestData, PaymentsCancelRequestData, - PaymentsCompleteAuthorizeRequestData, PaymentsPreProcessingData, PaymentsSyncRequestData, - RouterData, - }, - consts, - core::errors, - services, - types::{ - self, api, domain, - domain::PaymentMethodData, - storage::enums, - transformers::{ForeignFrom, ForeignTryFrom}, - MandateReference, - }, + types::{PaymentsCancelResponseRouterData, RefundsResponseRouterData, ResponseRouterData}, unimplemented_payment_method, + utils::{ + self, AddressDetailsData, CardData, PaymentsAuthorizeRequestData, + PaymentsCancelRequestData, PaymentsCompleteAuthorizeRequestData, + PaymentsPreProcessingRequestData, PaymentsSyncRequestData, RouterData as OtherRouterData, + }, }; const LANGUAGE: &str = "en"; @@ -155,18 +162,17 @@ pub struct GenerateSaleResponse { payme_sale_id: String, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { match item.response { // To handle webhook response PaymePaymentsResponse::PaymePaySaleResponse(response) => { - Self::try_from(types::ResponseRouterData { + Self::try_from(ResponseRouterData { response, data: item.data, http_code: item.http_code, @@ -174,7 +180,7 @@ impl } // To handle PSync response PaymePaymentsResponse::SaleQueryResponse(response) => { - Self::try_from(types::ResponseRouterData { + Self::try_from(ResponseRouterData { response, data: item.data, http_code: item.http_code, @@ -184,23 +190,22 @@ impl } } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { let status = enums::AttemptStatus::from(item.response.sale_status.clone()); - let response = if is_payment_failure(status) { + let response = if utils::is_payment_failure(status) { // To populate error message in case of failure - Err(types::ErrorResponse::foreign_from(( + Err(get_pay_sale_error_response(( &item.response, item.http_code, ))) } else { - Ok(types::PaymentsResponseData::try_from(&item.response)?) + Ok(PaymentsResponseData::try_from(&item.response)?) }; Ok(Self { status, @@ -210,42 +215,39 @@ impl } } -impl ForeignFrom<(&PaymePaySaleResponse, u16)> for types::ErrorResponse { - fn foreign_from((pay_sale_response, http_code): (&PaymePaySaleResponse, u16)) -> Self { - let code = pay_sale_response - .status_error_code - .map(|error_code| error_code.to_string()) - .unwrap_or(consts::NO_ERROR_CODE.to_string()); - Self { - code, - message: pay_sale_response - .status_error_details - .clone() - .unwrap_or(consts::NO_ERROR_MESSAGE.to_string()), - reason: pay_sale_response.status_error_details.to_owned(), - status_code: http_code, - attempt_status: None, - connector_transaction_id: Some(pay_sale_response.payme_sale_id.clone()), - } +fn get_pay_sale_error_response( + (pay_sale_response, http_code): (&PaymePaySaleResponse, u16), +) -> ErrorResponse { + let code = pay_sale_response + .status_error_code + .map(|error_code| error_code.to_string()) + .unwrap_or(consts::NO_ERROR_CODE.to_string()); + ErrorResponse { + code, + message: pay_sale_response + .status_error_details + .clone() + .unwrap_or(consts::NO_ERROR_MESSAGE.to_string()), + reason: pay_sale_response.status_error_details.to_owned(), + status_code: http_code, + attempt_status: None, + connector_transaction_id: Some(pay_sale_response.payme_sale_id.clone()), } } -impl TryFrom<&PaymePaySaleResponse> for types::PaymentsResponseData { +impl TryFrom<&PaymePaySaleResponse> for PaymentsResponseData { type Error = error_stack::Report; fn try_from(value: &PaymePaySaleResponse) -> Result { let redirection_data = match value.sale_3ds { - Some(true) => value - .redirect_url - .clone() - .map(|url| services::RedirectForm::Form { - endpoint: url.to_string(), - method: services::Method::Get, - form_fields: HashMap::::new(), - }), + Some(true) => value.redirect_url.clone().map(|url| RedirectForm::Form { + endpoint: url.to_string(), + method: common_utils::request::Method::Get, + form_fields: HashMap::::new(), + }), _ => None, }; Ok(Self::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(value.payme_sale_id.clone()), + resource_id: ResponseId::ConnectorTransactionId(value.payme_sale_id.clone()), redirection_data: Box::new(redirection_data), mandate_reference: Box::new(value.buyer_key.clone().map(|buyer_key| { MandateReference { @@ -264,12 +266,12 @@ impl TryFrom<&PaymePaySaleResponse> for types::PaymentsResponseData { } } -impl TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { // Only one element would be present since we are passing one transaction id in the PSync request let transaction_response = item @@ -279,14 +281,14 @@ impl TryFrom TryFrom for types::ErrorResponse { - fn foreign_from((sale_query_response, http_code): (&SaleQuery, u16)) -> Self { - Self { - code: sale_query_response - .sale_error_code - .clone() - .unwrap_or(consts::NO_ERROR_CODE.to_string()), - message: sale_query_response - .sale_error_text - .clone() - .unwrap_or(consts::NO_ERROR_MESSAGE.to_string()), - reason: sale_query_response.sale_error_text.clone(), - status_code: http_code, - attempt_status: None, - connector_transaction_id: Some(sale_query_response.sale_payme_id.clone()), - } +fn get_sale_query_error_response( + (sale_query_response, http_code): (&SaleQuery, u16), +) -> ErrorResponse { + ErrorResponse { + code: sale_query_response + .sale_error_code + .clone() + .unwrap_or(consts::NO_ERROR_CODE.to_string()), + message: sale_query_response + .sale_error_text + .clone() + .unwrap_or(consts::NO_ERROR_MESSAGE.to_string()), + reason: sale_query_response.sale_error_text.clone(), + status_code: http_code, + attempt_status: None, + connector_transaction_id: Some(sale_query_response.sale_payme_id.clone()), } } -impl From<&SaleQuery> for types::PaymentsResponseData { +impl From<&SaleQuery> for PaymentsResponseData { fn from(value: &SaleQuery) -> Self { Self::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(value.sale_payme_id.clone()), + resource_id: ResponseId::ConnectorTransactionId(value.sale_payme_id.clone()), redirection_data: Box::new(None), // mandate reference will be updated with webhooks only. That has been handled with PaymePaySaleResponse struct mandate_reference: Box::new(None), @@ -346,10 +348,10 @@ pub enum SalePaymentMethod { ApplePay, } -impl TryFrom<&PaymeRouterData<&types::PaymentsPreProcessingRouterData>> for GenerateSaleRequest { +impl TryFrom<&PaymeRouterData<&PaymentsPreProcessingRouterData>> for GenerateSaleRequest { type Error = error_stack::Report; fn try_from( - item: &PaymeRouterData<&types::PaymentsPreProcessingRouterData>, + item: &PaymeRouterData<&PaymentsPreProcessingRouterData>, ) -> Result { let sale_type = SaleType::try_from(item.router_data)?; let seller_payme_id = @@ -358,7 +360,7 @@ impl TryFrom<&PaymeRouterData<&types::PaymentsPreProcessingRouterData>> for Gene let services = get_services(item.router_data); let product_name = order_details .first() - .ok_or_else(missing_field_err("order_details"))? + .ok_or_else(utils::missing_field_err("order_details"))? .product_name .clone(); let pmd = item @@ -366,7 +368,7 @@ impl TryFrom<&PaymeRouterData<&types::PaymentsPreProcessingRouterData>> for Gene .request .payment_method_data .to_owned() - .ok_or_else(missing_field_err("payment_method_data"))?; + .ok_or_else(utils::missing_field_err("payment_method_data"))?; Ok(Self { seller_payme_id, sale_price: item.amount.to_owned(), @@ -389,35 +391,35 @@ impl TryFrom<&PaymentMethodData> for SalePaymentMethod { match item { PaymentMethodData::Card(_) => Ok(Self::CreditCard), PaymentMethodData::Wallet(wallet_data) => match wallet_data { - domain::WalletData::ApplePayThirdPartySdk(_) => Ok(Self::ApplePay), - domain::WalletData::AliPayQr(_) - | domain::WalletData::AliPayRedirect(_) - | domain::WalletData::AliPayHkRedirect(_) - | domain::WalletData::AmazonPayRedirect(_) - | domain::WalletData::MomoRedirect(_) - | domain::WalletData::KakaoPayRedirect(_) - | domain::WalletData::GoPayRedirect(_) - | domain::WalletData::GcashRedirect(_) - | domain::WalletData::ApplePayRedirect(_) - | domain::WalletData::DanaRedirect {} - | domain::WalletData::GooglePay(_) - | domain::WalletData::GooglePayRedirect(_) - | domain::WalletData::GooglePayThirdPartySdk(_) - | domain::WalletData::MbWayRedirect(_) - | domain::WalletData::MobilePayRedirect(_) - | domain::WalletData::PaypalRedirect(_) - | domain::WalletData::PaypalSdk(_) - | domain::WalletData::Paze(_) - | domain::WalletData::SamsungPay(_) - | domain::WalletData::TwintRedirect {} - | domain::WalletData::VippsRedirect {} - | domain::WalletData::TouchNGoRedirect(_) - | domain::WalletData::WeChatPayRedirect(_) - | domain::WalletData::WeChatPayQr(_) - | domain::WalletData::CashappQr(_) - | domain::WalletData::ApplePay(_) - | domain::WalletData::SwishQr(_) - | domain::WalletData::Mifinity(_) => Err(errors::ConnectorError::NotSupported { + WalletData::ApplePayThirdPartySdk(_) => Ok(Self::ApplePay), + WalletData::AliPayQr(_) + | WalletData::AliPayRedirect(_) + | WalletData::AliPayHkRedirect(_) + | WalletData::AmazonPayRedirect(_) + | WalletData::MomoRedirect(_) + | WalletData::KakaoPayRedirect(_) + | WalletData::GoPayRedirect(_) + | WalletData::GcashRedirect(_) + | WalletData::ApplePayRedirect(_) + | WalletData::DanaRedirect {} + | WalletData::GooglePay(_) + | WalletData::GooglePayRedirect(_) + | WalletData::GooglePayThirdPartySdk(_) + | WalletData::MbWayRedirect(_) + | WalletData::MobilePayRedirect(_) + | WalletData::PaypalRedirect(_) + | WalletData::PaypalSdk(_) + | WalletData::Paze(_) + | WalletData::SamsungPay(_) + | WalletData::TwintRedirect {} + | WalletData::VippsRedirect {} + | WalletData::TouchNGoRedirect(_) + | WalletData::WeChatPayRedirect(_) + | WalletData::WeChatPayQr(_) + | WalletData::CashappQr(_) + | WalletData::ApplePay(_) + | WalletData::SwishQr(_) + | WalletData::Mifinity(_) => Err(errors::ConnectorError::NotSupported { message: "Wallet".to_string(), connector: "payme", } @@ -446,10 +448,10 @@ impl TryFrom<&PaymentMethodData> for SalePaymentMethod { } } -impl TryFrom<&PaymeRouterData<&types::PaymentsAuthorizeRouterData>> for PaymePaymentRequest { +impl TryFrom<&PaymeRouterData<&PaymentsAuthorizeRouterData>> for PaymePaymentRequest { type Error = error_stack::Report; fn try_from( - value: &PaymeRouterData<&types::PaymentsAuthorizeRouterData>, + value: &PaymeRouterData<&PaymentsAuthorizeRouterData>, ) -> Result { let payme_request = if value.router_data.request.mandate_id.is_some() { Self::MandateRequest(MandateRequest::try_from(value)?) @@ -460,9 +462,9 @@ impl TryFrom<&PaymeRouterData<&types::PaymentsAuthorizeRouterData>> for PaymePay } } -impl TryFrom<&types::PaymentsSyncRouterData> for PaymeQuerySaleRequest { +impl TryFrom<&PaymentsSyncRouterData> for PaymeQuerySaleRequest { type Error = error_stack::Report; - fn try_from(value: &types::PaymentsSyncRouterData) -> Result { + fn try_from(value: &PaymentsSyncRouterData) -> Result { let seller_payme_id = PaymeAuthType::try_from(&value.connector_auth_type)?.seller_payme_id; Ok(Self { sale_payme_id: value.request.get_connector_transaction_id()?, @@ -471,9 +473,9 @@ impl TryFrom<&types::PaymentsSyncRouterData> for PaymeQuerySaleRequest { } } -impl TryFrom<&types::RefundSyncRouterData> for PaymeQueryTransactionRequest { +impl TryFrom<&RefundSyncRouterData> for PaymeQueryTransactionRequest { type Error = error_stack::Report; - fn try_from(value: &types::RefundSyncRouterData) -> Result { + fn try_from(value: &RefundSyncRouterData) -> Result { let seller_payme_id = PaymeAuthType::try_from(&value.connector_auth_type)?.seller_payme_id; Ok(Self { payme_transaction_id: value @@ -487,24 +489,24 @@ impl TryFrom<&types::RefundSyncRouterData> for PaymeQueryTransactionRequest { } impl - ForeignTryFrom<( - types::ResponseRouterData< + utils::ForeignTryFrom<( + ResponseRouterData< F, GenerateSaleResponse, - types::PaymentsPreProcessingData, - types::PaymentsResponseData, + PaymentsPreProcessingData, + PaymentsResponseData, >, StringMajorUnit, - )> for types::RouterData + )> for RouterData { type Error = error_stack::Report; fn foreign_try_from( (item, apple_pay_amount): ( - types::ResponseRouterData< + ResponseRouterData< F, GenerateSaleResponse, - types::PaymentsPreProcessingData, - types::PaymentsResponseData, + PaymentsPreProcessingData, + PaymentsResponseData, >, StringMajorUnit, ), @@ -518,11 +520,10 @@ impl // then move to authorize flow status: enums::AttemptStatus::Pending, preprocessing_id: Some(item.response.payme_sale_id.to_owned()), - response: Ok(types::PaymentsResponseData::PreProcessingResponse { - pre_processing_id: - types::PreprocessingResponseId::ConnectorTransactionId( - item.response.payme_sale_id, - ), + response: Ok(PaymentsResponseData::PreProcessingResponse { + pre_processing_id: PreprocessingResponseId::ConnectorTransactionId( + item.response.payme_sale_id, + ), connector_metadata: None, session_token: None, connector_response_reference_id: None, @@ -537,11 +538,11 @@ impl // status is made authentication_pending to show redirection status: enums::AttemptStatus::AuthenticationPending, preprocessing_id: Some(item.response.payme_sale_id.to_owned()), - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( item.response.payme_sale_id.to_owned(), ), - redirection_data: Box::new(Some(services::RedirectForm::Payme)), + redirection_data: Box::new(Some(RedirectForm::Payme)), mandate_reference: Box::new(None), connector_metadata: None, network_txn_id: None, @@ -559,7 +560,7 @@ impl let payme_auth_type = PaymeAuthType::try_from(&item.data.connector_auth_type)?; let session_token = match pmd { - Some(PaymentMethodData::Wallet(domain::WalletData::ApplePayThirdPartySdk( + Some(PaymentMethodData::Wallet(WalletData::ApplePayThirdPartySdk( _, ))) => Some(api_models::payments::SessionToken::ApplePay(Box::new( api_models::payments::ApplepaySessionTokenResponse { @@ -603,8 +604,8 @@ impl // We don't get any status from payme, so defaulting it to pending status: enums::AttemptStatus::Pending, preprocessing_id: Some(item.response.payme_sale_id.to_owned()), - response: Ok(types::PaymentsResponseData::PreProcessingResponse { - pre_processing_id: types::PreprocessingResponseId::ConnectorTransactionId( + response: Ok(PaymentsResponseData::PreProcessingResponse { + pre_processing_id: PreprocessingResponseId::ConnectorTransactionId( item.response.payme_sale_id, ), connector_metadata: None, @@ -618,17 +619,15 @@ impl } } -impl TryFrom<&PaymeRouterData<&types::PaymentsAuthorizeRouterData>> for MandateRequest { +impl TryFrom<&PaymeRouterData<&PaymentsAuthorizeRouterData>> for MandateRequest { type Error = error_stack::Report; - fn try_from( - item: &PaymeRouterData<&types::PaymentsAuthorizeRouterData>, - ) -> Result { + fn try_from(item: &PaymeRouterData<&PaymentsAuthorizeRouterData>) -> Result { let seller_payme_id = PaymeAuthType::try_from(&item.router_data.connector_auth_type)?.seller_payme_id; let order_details = item.router_data.request.get_order_details()?; let product_name = order_details .first() - .ok_or_else(missing_field_err("order_details"))? + .ok_or_else(utils::missing_field_err("order_details"))? .product_name .clone(); Ok(Self { @@ -645,9 +644,9 @@ impl TryFrom<&PaymeRouterData<&types::PaymentsAuthorizeRouterData>> for MandateR } } -impl TryFrom<&types::PaymentsAuthorizeRouterData> for PayRequest { +impl TryFrom<&PaymentsAuthorizeRouterData> for PayRequest { type Error = error_stack::Report; - fn try_from(item: &types::PaymentsAuthorizeRouterData) -> Result { + fn try_from(item: &PaymentsAuthorizeRouterData) -> Result { match item.request.payment_method_data.clone() { PaymentMethodData::Card(req_card) => { let card = PaymeCard { @@ -701,9 +700,9 @@ pub struct PaymeRedirectResponseData { meta_data: String, } -impl TryFrom<&types::PaymentsCompleteAuthorizeRouterData> for Pay3dsRequest { +impl TryFrom<&PaymentsCompleteAuthorizeRouterData> for Pay3dsRequest { type Error = error_stack::Report; - fn try_from(item: &types::PaymentsCompleteAuthorizeRouterData) -> Result { + fn try_from(item: &PaymentsCompleteAuthorizeRouterData) -> Result { match item.request.payment_method_data.clone() { Some(PaymentMethodData::Card(_)) => { let buyer_email = item.request.get_email()?; @@ -722,18 +721,19 @@ impl TryFrom<&types::PaymentsCompleteAuthorizeRouterData> for Pay3dsRequest { .clone() .ok_or(errors::ConnectorError::MissingConnectorTransactionID)?; let pm_token = item.get_payment_method_token()?; - let buyer_key = match pm_token { - types::PaymentMethodToken::Token(token) => token, - types::PaymentMethodToken::ApplePayDecrypt(_) => Err( - unimplemented_payment_method!("Apple Pay", "Simplified", "Payme"), - )?, - types::PaymentMethodToken::PazeDecrypt(_) => { - Err(unimplemented_payment_method!("Paze", "Payme"))? - } - types::PaymentMethodToken::GooglePayDecrypt(_) => { - Err(unimplemented_payment_method!("Google Pay", "Payme"))? - } - }; + let buyer_key = + match pm_token { + PaymentMethodToken::Token(token) => token, + PaymentMethodToken::ApplePayDecrypt(_) => Err( + unimplemented_payment_method!("Apple Pay", "Simplified", "Payme"), + )?, + PaymentMethodToken::PazeDecrypt(_) => { + Err(unimplemented_payment_method!("Paze", "Payme"))? + } + PaymentMethodToken::GooglePayDecrypt(_) => { + Err(unimplemented_payment_method!("Google Pay", "Payme"))? + } + }; Ok(Self { buyer_email, buyer_key, @@ -767,9 +767,9 @@ impl TryFrom<&types::PaymentsCompleteAuthorizeRouterData> for Pay3dsRequest { } } -impl TryFrom<&types::TokenizationRouterData> for CaptureBuyerRequest { +impl TryFrom<&TokenizationRouterData> for CaptureBuyerRequest { type Error = error_stack::Report; - fn try_from(item: &types::TokenizationRouterData) -> Result { + fn try_from(item: &TokenizationRouterData) -> Result { match item.request.payment_method_data.clone() { PaymentMethodData::Card(req_card) => { let seller_payme_id = @@ -817,16 +817,16 @@ pub struct PaymeAuthType { pub(super) payme_merchant_id: Option>, } -impl TryFrom<&types::ConnectorAuthType> for PaymeAuthType { +impl TryFrom<&ConnectorAuthType> for PaymeAuthType { type Error = error_stack::Report; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { + fn try_from(auth_type: &ConnectorAuthType) -> Result { match auth_type { - types::ConnectorAuthType::BodyKey { api_key, key1 } => Ok(Self { + ConnectorAuthType::BodyKey { api_key, key1 } => Ok(Self { seller_payme_id: api_key.to_owned(), payme_public_key: key1.to_owned(), payme_merchant_id: None, }), - types::ConnectorAuthType::SignatureKey { + ConnectorAuthType::SignatureKey { api_key, key1, api_secret, @@ -840,9 +840,9 @@ impl TryFrom<&types::ConnectorAuthType> for PaymeAuthType { } } -impl TryFrom<&types::PaymentsPreProcessingRouterData> for SaleType { +impl TryFrom<&PaymentsPreProcessingRouterData> for SaleType { type Error = error_stack::Report; - fn try_from(value: &types::PaymentsPreProcessingRouterData) -> Result { + fn try_from(value: &PaymentsPreProcessingRouterData) -> Result { let sale_type = if value.request.setup_mandate_details.is_some() { // First mandate Self::Token @@ -922,19 +922,16 @@ pub struct PaymeMetadata { payme_transaction_id: Option, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { Ok(Self { - payment_method_token: Some(types::PaymentMethodToken::Token( - item.response.buyer_key.clone(), - )), - response: Ok(types::PaymentsResponseData::TokenizationResponse { + payment_method_token: Some(PaymentMethodToken::Token(item.response.buyer_key.clone())), + response: Ok(PaymentsResponseData::TokenizationResponse { token: item.response.buyer_key.expose(), }), ..item.data @@ -948,11 +945,9 @@ pub struct PaymentCaptureRequest { sale_price: MinorUnit, } -impl TryFrom<&PaymeRouterData<&types::PaymentsCaptureRouterData>> for PaymentCaptureRequest { +impl TryFrom<&PaymeRouterData<&PaymentsCaptureRouterData>> for PaymentCaptureRequest { type Error = error_stack::Report; - fn try_from( - item: &PaymeRouterData<&types::PaymentsCaptureRouterData>, - ) -> Result { + fn try_from(item: &PaymeRouterData<&PaymentsCaptureRouterData>) -> Result { if item.router_data.request.minor_amount_to_capture != item.router_data.request.minor_payment_amount { @@ -978,9 +973,9 @@ pub struct PaymeRefundRequest { language: String, } -impl TryFrom<&PaymeRouterData<&types::RefundsRouterData>> for PaymeRefundRequest { +impl TryFrom<&PaymeRouterData<&RefundsRouterData>> for PaymeRefundRequest { type Error = error_stack::Report; - fn try_from(item: &PaymeRouterData<&types::RefundsRouterData>) -> Result { + fn try_from(item: &PaymeRouterData<&RefundsRouterData>) -> Result { let auth_type = PaymeAuthType::try_from(&item.router_data.connector_auth_type)?; Ok(Self { payme_sale_id: item.router_data.request.connector_transaction_id.clone(), @@ -1014,20 +1009,20 @@ pub struct PaymeRefundResponse { status_error_code: Option, } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_status = enums::RefundStatus::try_from(item.response.sale_status.clone())?; - let response = if is_refund_failure(refund_status) { + let response = if utils::is_refund_failure(refund_status) { let payme_response = &item.response; let status_error_code = payme_response .status_error_code .map(|error_code| error_code.to_string()); - Err(types::ErrorResponse { + Err(ErrorResponse { code: status_error_code .clone() .unwrap_or_else(|| consts::NO_ERROR_CODE.to_string()), @@ -1040,7 +1035,7 @@ impl TryFrom connector_transaction_id: payme_response.payme_transaction_id.clone(), }) } else { - Ok(types::RefundsResponseData { + Ok(RefundsResponseData { connector_refund_id: item .response .payme_transaction_id @@ -1063,18 +1058,12 @@ pub struct PaymeVoidRequest { language: String, } -impl - TryFrom< - &PaymeRouterData< - &types::RouterData, - >, - > for PaymeVoidRequest +impl TryFrom<&PaymeRouterData<&RouterData>> + for PaymeVoidRequest { type Error = error_stack::Report; fn try_from( - item: &PaymeRouterData< - &types::RouterData, - >, + item: &PaymeRouterData<&RouterData>, ) -> Result { let auth_type = PaymeAuthType::try_from(&item.router_data.connector_auth_type)?; Ok(Self { @@ -1093,20 +1082,18 @@ pub struct PaymeVoidResponse { status_error_code: Option, } -impl TryFrom> - for types::PaymentsCancelRouterData -{ +impl TryFrom> for PaymentsCancelRouterData { type Error = error_stack::Report; fn try_from( - item: types::PaymentsCancelResponseRouterData, + item: PaymentsCancelResponseRouterData, ) -> Result { let status = enums::AttemptStatus::from(item.response.sale_status.clone()); - let response = if is_payment_failure(status) { + let response = if utils::is_payment_failure(status) { let payme_response = &item.response; let status_error_code = payme_response .status_error_code .map(|error_code| error_code.to_string()); - Err(types::ErrorResponse { + Err(ErrorResponse { code: status_error_code .clone() .unwrap_or_else(|| consts::NO_ERROR_CODE.to_string()), @@ -1120,8 +1107,8 @@ impl TryFrom> }) } else { // Since we are not receiving payme_sale_id, we are not populating the transaction response - Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::NoResponseId, + Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::NoResponseId, redirection_data: Box::new(None), mandate_reference: Box::new(None), connector_metadata: None, @@ -1150,19 +1137,12 @@ pub struct TransactionQuery { payme_transaction_id: String, } -impl - TryFrom< - types::ResponseRouterData, - > for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - PaymeQueryTransactionResponse, - T, - types::RefundsResponseData, - >, + item: ResponseRouterData, ) -> Result { let pay_sale_response = item .response @@ -1170,8 +1150,8 @@ impl .first() .ok_or(errors::ConnectorError::ResponseHandlingFailed)?; let refund_status = enums::RefundStatus::try_from(pay_sale_response.sale_status.clone())?; - let response = if is_refund_failure(refund_status) { - Err(types::ErrorResponse { + let response = if utils::is_refund_failure(refund_status) { + Err(ErrorResponse { code: consts::NO_ERROR_CODE.to_string(), message: consts::NO_ERROR_CODE.to_string(), reason: None, @@ -1180,7 +1160,7 @@ impl connector_transaction_id: Some(pay_sale_response.payme_transaction_id.clone()), }) } else { - Ok(types::RefundsResponseData { + Ok(RefundsResponseData { refund_status, connector_refund_id: pay_sale_response.payme_transaction_id.clone(), }) @@ -1192,7 +1172,7 @@ impl } } -fn get_services(item: &types::PaymentsPreProcessingRouterData) -> Option { +fn get_services(item: &PaymentsPreProcessingRouterData) -> Option { match item.auth_type { AuthenticationType::ThreeDs => { let settings = ThreeDsSettings { active: true }; @@ -1275,7 +1255,7 @@ impl From for PaymeQueryTransactionResponse { } } -impl From for api::IncomingWebhookEvent { +impl From for api_models::webhooks::IncomingWebhookEvent { fn from(value: NotifyType) -> Self { match value { NotifyType::SaleComplete => Self::PaymentIntentSuccess, diff --git a/crates/router/src/connector/trustpay.rs b/crates/hyperswitch_connectors/src/connectors/trustpay.rs similarity index 72% rename from crates/router/src/connector/trustpay.rs rename to crates/hyperswitch_connectors/src/connectors/trustpay.rs index 10c71a5d375..b3f2c1f9c3e 100644 --- a/crates/router/src/connector/trustpay.rs +++ b/crates/hyperswitch_connectors/src/connectors/trustpay.rs @@ -1,42 +1,57 @@ pub mod transformers; use base64::Engine; +use common_enums::{enums, PaymentAction}; use common_utils::{ crypto, - errors::ReportSwitchExt, + errors::{CustomResult, ReportSwitchExt}, ext_traits::ByteSliceExt, - request::RequestContent, + request::{Method, Request, RequestBuilder, RequestContent}, types::{AmountConvertor, StringMajorUnit, StringMajorUnitForConnector}, }; use error_stack::{Report, ResultExt}; -use masking::PeekInterface; -use transformers as trustpay; - -use super::utils::{ - self as connector_utils, collect_and_sort_values_by_removing_signature, - get_error_code_error_message_based_on_priority, ConnectorErrorType, ConnectorErrorTypeMapping, - PaymentsPreProcessingData, +use hyperswitch_domain_models::{ + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{Authorize, Capture, PSync, PaymentMethodToken, Session, SetupMandate, Void}, + refunds::{Execute, RSync}, + PreProcessing, + }, + router_request_types::{ + AccessTokenRequestData, PaymentMethodTokenizationData, PaymentsAuthorizeData, + PaymentsCancelData, PaymentsCaptureData, PaymentsPreProcessingData, PaymentsSessionData, + PaymentsSyncData, RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsPreProcessingRouterData, PaymentsSyncRouterData, + RefreshTokenRouterData, RefundSyncRouterData, RefundsRouterData, + }, }; -use crate::{ - configs::settings, - consts, - core::{ - errors::{self, CustomResult}, - payments, +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorRedirectResponse, + ConnectorSpecifications, ConnectorValidation, }, + configs::Connectors, + consts, + disputes::DisputePayload, + errors, events::connector_api_logs::ConnectorEvent, - headers, logger, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorSpecifications, ConnectorValidation, - }, types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, Response, + PaymentsAuthorizeType, PaymentsPreProcessingType, PaymentsSyncType, RefreshTokenType, + RefundExecuteType, RefundSyncType, Response, }, - utils::{self, BytesExt}, + webhooks, +}; +use masking::{Mask, PeekInterface}; +use transformers as trustpay; + +use crate::{ + constants::headers, + types::ResponseRouterData, + utils::{self, ConnectorErrorType, PaymentsPreProcessingRequestData}, }; #[derive(Clone)] @@ -58,11 +73,11 @@ where { fn build_headers( &self, - req: &types::RouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { match req.payment_method { - diesel_models::enums::PaymentMethod::BankRedirect => { + enums::PaymentMethod::BankRedirect => { let token = req .access_token .clone() @@ -104,14 +119,14 @@ impl ConnectorCommon for Trustpay { "application/x-www-form-urlencoded" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.trustpay.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = trustpay::TrustpayAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; Ok(vec![( @@ -135,10 +150,11 @@ impl ConnectorCommon for Trustpay { event_builder.map(|i| i.set_error_response_body(&response_data)); router_env::logger::info!(connector_response=?response_data); let error_list = response_data.errors.clone().unwrap_or_default(); - let option_error_code_message = get_error_code_error_message_based_on_priority( - self.clone(), - error_list.into_iter().map(|errors| errors.into()).collect(), - ); + let option_error_code_message = + utils::get_error_code_error_message_based_on_priority( + self.clone(), + error_list.into_iter().map(|errors| errors.into()).collect(), + ); let reason = response_data.errors.map(|errors| { errors .iter() @@ -165,7 +181,7 @@ impl ConnectorCommon for Trustpay { } Err(error_msg) => { event_builder.map(|event| event.set_error(serde_json::json!({"error": res.response.escape_ascii().to_string(), "status_code": res.status_code}))); - logger::error!(deserialization_error =? error_msg); + router_env::logger::error!(deserialization_error =? error_msg); utils::handle_json_response_deserialization_failure(res, "trustpay") } } @@ -178,33 +194,21 @@ impl api::Payment for Trustpay {} impl api::PaymentToken for Trustpay {} -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Trustpay +impl ConnectorIntegration + for Trustpay { // Not Implemented (R) } impl api::MandateSetup for Trustpay {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Trustpay +impl ConnectorIntegration + for Trustpay { fn build_request( &self, - _req: &types::RouterData< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - >, - _connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + _req: &RouterData, + _connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Err( errors::ConnectorError::NotImplemented("Setup Mandate flow for Trustpay".to_string()) .into(), @@ -214,20 +218,15 @@ impl impl api::PaymentVoid for Trustpay {} -impl ConnectorIntegration - for Trustpay -{ -} +impl ConnectorIntegration for Trustpay {} impl api::ConnectorAccessToken for Trustpay {} -impl ConnectorIntegration - for Trustpay -{ +impl ConnectorIntegration for Trustpay { fn get_url( &self, - _req: &types::RefreshTokenRouterData, - connectors: &settings::Connectors, + _req: &RefreshTokenRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!( "{}{}", @@ -241,9 +240,9 @@ impl ConnectorIntegration CustomResult)>, errors::ConnectorError> { + req: &RefreshTokenRouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let auth = trustpay::TrustpayAuthType::try_from(&req.connector_auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; let auth_value = auth @@ -252,15 +251,14 @@ impl ConnectorIntegration CustomResult { let connector_req = trustpay::TrustpayAuthUpdateRequest::try_from(req)?; Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))) @@ -277,18 +275,16 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &RefreshTokenRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { let req = Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .attach_default_headers() - .headers(types::RefreshTokenType::get_headers(self, req, connectors)?) - .url(&types::RefreshTokenType::get_url(self, req, connectors)?) - .set_body(types::RefreshTokenType::get_request_body( - self, req, connectors, - )?) + .headers(RefreshTokenType::get_headers(self, req, connectors)?) + .url(&RefreshTokenType::get_url(self, req, connectors)?) + .set_body(RefreshTokenType::get_request_body(self, req, connectors)?) .build(), ); Ok(req) @@ -296,10 +292,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: trustpay::TrustpayAuthUpdateResponse = res .response .parse_struct("trustpay TrustpayAuthUpdateResponse") @@ -308,7 +304,7 @@ impl ConnectorIntegration - for Trustpay -{ +impl ConnectorIntegration for Trustpay { fn get_headers( &self, - req: &types::PaymentsSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -359,12 +353,12 @@ impl ConnectorIntegration CustomResult { let id = req.request.connector_transaction_id.clone(); match req.payment_method { - diesel_models::enums::PaymentMethod::BankRedirect => Ok(format!( + enums::PaymentMethod::BankRedirect => Ok(format!( "{}{}/{}", connectors.trustpay.base_url_bank_redirects, "api/Payments/Payment", @@ -383,15 +377,15 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) + .headers(PaymentsSyncType::get_headers(self, req, connectors)?) .build(), )) } @@ -406,10 +400,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: trustpay::TrustpayPaymentsResponse = res .response .parse_struct("trustpay PaymentsResponse") @@ -418,7 +412,7 @@ impl ConnectorIntegration - for Trustpay -{ -} +impl ConnectorIntegration for Trustpay {} impl api::PaymentsPreProcessing for Trustpay {} -impl - ConnectorIntegration< - api::PreProcessing, - types::PaymentsPreProcessingData, - types::PaymentsResponseData, - > for Trustpay +impl ConnectorIntegration + for Trustpay { fn get_headers( &self, - req: &types::PaymentsPreProcessingRouterData, - _connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsPreProcessingRouterData, + _connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { let mut header = vec![( headers::CONTENT_TYPE.to_string(), - types::PaymentsPreProcessingType::get_content_type(self) + PaymentsPreProcessingType::get_content_type(self) .to_string() .into(), )]; @@ -464,22 +451,21 @@ impl fn get_url( &self, - _req: &types::PaymentsPreProcessingRouterData, - connectors: &settings::Connectors, + _req: &PaymentsPreProcessingRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}{}", self.base_url(connectors), "api/v1/intent")) } fn get_request_body( &self, - req: &types::PaymentsPreProcessingRouterData, - _connectors: &settings::Connectors, + req: &PaymentsPreProcessingRouterData, + _connectors: &Connectors, ) -> CustomResult { let req_currency = req.request.get_currency()?; let req_amount = req.request.get_minor_amount()?; - let amount = - connector_utils::convert_amount(self.amount_converter, req_amount, req_currency)?; + let amount = utils::convert_amount(self.amount_converter, req_amount, req_currency)?; let connector_router_data = trustpay::TrustpayRouterData::try_from((amount, req))?; let connector_req = @@ -489,20 +475,18 @@ impl fn build_request( &self, - req: &types::PaymentsPreProcessingRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsPreProcessingRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { let req = Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .attach_default_headers() - .headers(types::PaymentsPreProcessingType::get_headers( + .headers(PaymentsPreProcessingType::get_headers( self, req, connectors, )?) - .url(&types::PaymentsPreProcessingType::get_url( - self, req, connectors, - )?) - .set_body(types::PaymentsPreProcessingType::get_request_body( + .url(&PaymentsPreProcessingType::get_url(self, req, connectors)?) + .set_body(PaymentsPreProcessingType::get_request_body( self, req, connectors, )?) .build(), @@ -512,10 +496,10 @@ impl fn handle_response( &self, - data: &types::PaymentsPreProcessingRouterData, + data: &PaymentsPreProcessingRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: trustpay::TrustpayCreateIntentResponse = res .response .parse_struct("TrustpayCreateIntentResponse") @@ -524,7 +508,7 @@ impl event_builder.map(|i| i.set_response_body(&response)); router_env::logger::info!(connector_response=?response); - types::RouterData::try_from(types::ResponseRouterData { + RouterData::try_from(ResponseRouterData { response, data: data.clone(), http_code: res.status_code, @@ -543,21 +527,16 @@ impl impl api::PaymentSession for Trustpay {} -impl ConnectorIntegration - for Trustpay -{ -} +impl ConnectorIntegration for Trustpay {} impl api::PaymentAuthorize for Trustpay {} -impl ConnectorIntegration - for Trustpay -{ +impl ConnectorIntegration for Trustpay { fn get_headers( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -567,11 +546,11 @@ impl ConnectorIntegration CustomResult { match req.payment_method { - diesel_models::enums::PaymentMethod::BankRedirect => Ok(format!( + enums::PaymentMethod::BankRedirect => Ok(format!( "{}{}", connectors.trustpay.base_url_bank_redirects, "api/Payments/Payment" )), @@ -585,10 +564,10 @@ impl ConnectorIntegration CustomResult { - let amount = connector_utils::convert_amount( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -596,29 +575,23 @@ impl ConnectorIntegration { - Ok(RequestContent::Json(Box::new(connector_req))) - } + enums::PaymentMethod::BankRedirect => Ok(RequestContent::Json(Box::new(connector_req))), _ => Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))), } } fn build_request( &self, - req: &types::PaymentsAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsAuthorizeType::get_url( - self, req, connectors, - )?) + RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsAuthorizeType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::PaymentsAuthorizeType::get_headers( - self, req, connectors, - )?) - .set_body(types::PaymentsAuthorizeType::get_request_body( + .headers(PaymentsAuthorizeType::get_headers(self, req, connectors)?) + .set_body(PaymentsAuthorizeType::get_request_body( self, req, connectors, )?) .build(), @@ -627,10 +600,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: trustpay::TrustpayPaymentsResponse = res .response .parse_struct("trustpay PaymentsResponse") @@ -639,7 +612,7 @@ impl ConnectorIntegration - for Trustpay -{ +impl ConnectorIntegration for Trustpay { fn get_headers( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -677,11 +648,11 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { match req.payment_method { - diesel_models::enums::PaymentMethod::BankRedirect => Ok(format!( + enums::PaymentMethod::BankRedirect => Ok(format!( "{}{}{}{}", connectors.trustpay.base_url_bank_redirects, "api/Payments/Payment/", @@ -694,10 +665,10 @@ impl ConnectorIntegration, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { - let amount = connector_utils::convert_amount( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_refund_amount, req.request.currency, @@ -706,38 +677,32 @@ impl ConnectorIntegration { - Ok(RequestContent::Json(Box::new(connector_req))) - } + enums::PaymentMethod::BankRedirect => Ok(RequestContent::Json(Box::new(connector_req))), _ => Ok(RequestContent::FormUrlEncoded(Box::new(connector_req))), } } fn build_request( &self, - req: &types::RefundsRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::RefundExecuteType::get_url(self, req, connectors)?) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundExecuteType::get_headers( - self, req, connectors, - )?) - .set_body(types::RefundExecuteType::get_request_body( - self, req, connectors, - )?) + .headers(RefundExecuteType::get_headers(self, req, connectors)?) + .set_body(RefundExecuteType::get_request_body(self, req, connectors)?) .build(); Ok(Some(request)) } fn handle_response( &self, - data: &types::RefundsRouterData, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: trustpay::RefundResponse = res .response .parse_struct("trustpay RefundResponse") @@ -746,7 +711,7 @@ impl ConnectorIntegration for Trustpay { +impl ConnectorIntegration for Trustpay { fn get_headers( &self, - req: &types::RefundSyncRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -778,8 +743,8 @@ impl ConnectorIntegration CustomResult { let id = req .request @@ -787,7 +752,7 @@ impl ConnectorIntegration Ok(format!( + enums::PaymentMethod::BankRedirect => Ok(format!( "{}{}/{}", connectors.trustpay.base_url_bank_redirects, "api/Payments/Payment", id )), @@ -802,25 +767,25 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) - .url(&types::RefundSyncType::get_url(self, req, connectors)?) + RequestBuilder::new() + .method(Method::Get) + .url(&RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() - .headers(types::RefundSyncType::get_headers(self, req, connectors)?) + .headers(RefundSyncType::get_headers(self, req, connectors)?) .build(), )) } fn handle_response( &self, - data: &types::RefundSyncRouterData, + data: &RefundSyncRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: trustpay::RefundResponse = res .response .parse_struct("trustpay RefundResponse") @@ -829,7 +794,7 @@ impl ConnectorIntegration, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult { let details: trustpay::TrustpayWebhookResponse = request .body @@ -884,8 +849,8 @@ impl api::IncomingWebhook for Trustpay { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let response: trustpay::TrustpayWebhookResponse = request .body .parse_struct("TrustpayWebhookResponse") @@ -916,19 +881,19 @@ impl api::IncomingWebhook for Trustpay { ( trustpay::CreditDebitIndicator::Dbit | trustpay::CreditDebitIndicator::Crdt, trustpay::WebhookStatus::Unknown, - ) => Ok(api::IncomingWebhookEvent::EventNotSupported), + ) => Ok(api_models::webhooks::IncomingWebhookEvent::EventNotSupported), (trustpay::CreditDebitIndicator::Crdt, trustpay::WebhookStatus::Refunded) => { - Ok(api::IncomingWebhookEvent::EventNotSupported) + Ok(api_models::webhooks::IncomingWebhookEvent::EventNotSupported) } (trustpay::CreditDebitIndicator::Crdt, trustpay::WebhookStatus::Chargebacked) => { - Ok(api::IncomingWebhookEvent::EventNotSupported) + Ok(api_models::webhooks::IncomingWebhookEvent::EventNotSupported) } } } fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let details: trustpay::TrustpayWebhookResponse = request .body @@ -939,14 +904,14 @@ impl api::IncomingWebhook for Trustpay { fn get_webhook_source_verification_algorithm( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { Ok(Box::new(crypto::HmacSha256)) } fn get_webhook_source_verification_signature( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { let response: trustpay::TrustpayWebhookResponse = request @@ -959,7 +924,7 @@ impl api::IncomingWebhook for Trustpay { fn get_webhook_source_verification_message( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, _merchant_id: &common_utils::id_type::MerchantId, _connector_webhook_secrets: &api_models::webhooks::ConnectorWebhookSecrets, ) -> CustomResult, errors::ConnectorError> { @@ -968,16 +933,18 @@ impl api::IncomingWebhook for Trustpay { .parse_struct("TrustpayWebhookResponse") .switch()?; let response: serde_json::Value = request.body.parse_struct("Webhook Value").switch()?; - let values = - collect_and_sort_values_by_removing_signature(&response, &trustpay_response.signature); + let values = utils::collect_and_sort_values_by_removing_signature( + &response, + &trustpay_response.signature, + ); let payload = values.join("/"); Ok(payload.into_bytes()) } fn get_dispute_details( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let trustpay_response: trustpay::TrustpayWebhookResponse = request .body .parse_struct("TrustpayWebhookResponse") @@ -988,7 +955,7 @@ impl api::IncomingWebhook for Trustpay { .references .payment_id .ok_or(errors::ConnectorError::WebhookReferenceIdNotFound)?; - Ok(api::disputes::DisputePayload { + Ok(DisputePayload { amount: payment_info.amount.amount.to_string(), currency: payment_info.amount.currency, dispute_stage: api_models::enums::DisputeStage::Dispute, @@ -1003,24 +970,24 @@ impl api::IncomingWebhook for Trustpay { } } -impl services::ConnectorRedirectResponse for Trustpay { +impl ConnectorRedirectResponse for Trustpay { fn get_flow_type( &self, _query_params: &str, _json_payload: Option, - action: services::PaymentAction, - ) -> CustomResult { + action: PaymentAction, + ) -> CustomResult { match action { - services::PaymentAction::PSync - | services::PaymentAction::CompleteAuthorize - | services::PaymentAction::PaymentAuthenticateCompleteAuthorize => { - Ok(payments::CallConnectorAction::Trigger) + PaymentAction::PSync + | PaymentAction::CompleteAuthorize + | PaymentAction::PaymentAuthenticateCompleteAuthorize => { + Ok(enums::CallConnectorAction::Trigger) } } } } -impl ConnectorErrorTypeMapping for Trustpay { +impl utils::ConnectorErrorTypeMapping for Trustpay { fn get_connector_error_type( &self, error_code: String, diff --git a/crates/router/src/connector/trustpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs similarity index 86% rename from crates/router/src/connector/trustpay/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs index b7cb7a91f20..52181738579 100644 --- a/crates/router/src/connector/trustpay/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/trustpay/transformers.rs @@ -1,24 +1,37 @@ use std::collections::HashMap; +use api_models::payments::SessionToken; +use common_enums::enums; use common_utils::{ errors::CustomResult, pii::{self, Email}, + request::Method, types::StringMajorUnit, }; use error_stack::{report, ResultExt}; +use hyperswitch_domain_models::{ + payment_method_data::{BankRedirectData, Card, PaymentMethodData}, + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_request_types::{BrowserInformation, PaymentsPreProcessingData, ResponseId}, + router_response_types::{ + PaymentsResponseData, PreprocessingResponseId, RedirectForm, RefundsResponseData, + }, + types::{ + PaymentsAuthorizeRouterData, PaymentsPreProcessingRouterData, RefreshTokenRouterData, + RefundsRouterData, + }, +}; +use hyperswitch_interfaces::{consts, errors}; use masking::{ExposeInterface, PeekInterface, Secret}; use reqwest::Url; use serde::{Deserialize, Serialize}; use crate::{ - connector::utils::{ + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::{ self, AddressDetailsData, BrowserInformationData, CardData, PaymentsAuthorizeRequestData, - PaymentsPreProcessingData, RouterData, + PaymentsPreProcessingRequestData, RouterData as OtherRouterData, }, - consts, - core::errors, - services, - types::{self, domain, storage::enums, BrowserInformation}, }; type Error = error_stack::Report; @@ -45,10 +58,10 @@ pub struct TrustpayAuthType { pub(super) secret_key: Secret, } -impl TryFrom<&types::ConnectorAuthType> for TrustpayAuthType { +impl TryFrom<&ConnectorAuthType> for TrustpayAuthType { type Error = Error; - fn try_from(auth_type: &types::ConnectorAuthType) -> Result { - if let types::ConnectorAuthType::SignatureKey { + fn try_from(auth_type: &ConnectorAuthType) -> Result { + if let ConnectorAuthType::SignatureKey { api_key, key1, api_secret, @@ -214,28 +227,28 @@ pub struct TrustpayMandatoryParams { pub billing_first_name: Secret, } -impl TryFrom<&domain::BankRedirectData> for TrustpayPaymentMethod { +impl TryFrom<&BankRedirectData> for TrustpayPaymentMethod { type Error = Error; - fn try_from(value: &domain::BankRedirectData) -> Result { + fn try_from(value: &BankRedirectData) -> Result { match value { - domain::BankRedirectData::Giropay { .. } => Ok(Self::Giropay), - domain::BankRedirectData::Eps { .. } => Ok(Self::Eps), - domain::BankRedirectData::Ideal { .. } => Ok(Self::IDeal), - domain::BankRedirectData::Sofort { .. } => Ok(Self::Sofort), - domain::BankRedirectData::Blik { .. } => Ok(Self::Blik), - domain::BankRedirectData::BancontactCard { .. } - | domain::BankRedirectData::Bizum {} - | domain::BankRedirectData::Interac { .. } - | domain::BankRedirectData::OnlineBankingCzechRepublic { .. } - | domain::BankRedirectData::OnlineBankingFinland { .. } - | domain::BankRedirectData::OnlineBankingPoland { .. } - | domain::BankRedirectData::OnlineBankingSlovakia { .. } - | domain::BankRedirectData::OpenBankingUk { .. } - | domain::BankRedirectData::Przelewy24 { .. } - | domain::BankRedirectData::Trustly { .. } - | domain::BankRedirectData::OnlineBankingFpx { .. } - | domain::BankRedirectData::OnlineBankingThailand { .. } - | domain::BankRedirectData::LocalBankRedirect {} => { + BankRedirectData::Giropay { .. } => Ok(Self::Giropay), + BankRedirectData::Eps { .. } => Ok(Self::Eps), + BankRedirectData::Ideal { .. } => Ok(Self::IDeal), + BankRedirectData::Sofort { .. } => Ok(Self::Sofort), + BankRedirectData::Blik { .. } => Ok(Self::Blik), + BankRedirectData::BancontactCard { .. } + | BankRedirectData::Bizum {} + | BankRedirectData::Interac { .. } + | BankRedirectData::OnlineBankingCzechRepublic { .. } + | BankRedirectData::OnlineBankingFinland { .. } + | BankRedirectData::OnlineBankingPoland { .. } + | BankRedirectData::OnlineBankingSlovakia { .. } + | BankRedirectData::OpenBankingUk { .. } + | BankRedirectData::Przelewy24 { .. } + | BankRedirectData::Trustly { .. } + | BankRedirectData::OnlineBankingFpx { .. } + | BankRedirectData::OnlineBankingThailand { .. } + | BankRedirectData::LocalBankRedirect {} => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("trustpay"), ) @@ -246,7 +259,7 @@ impl TryFrom<&domain::BankRedirectData> for TrustpayPaymentMethod { } fn get_mandatory_fields( - item: &types::PaymentsAuthorizeRouterData, + item: &PaymentsAuthorizeRouterData, ) -> Result { let billing_address = item .get_billing()? @@ -263,11 +276,11 @@ fn get_mandatory_fields( } fn get_card_request_data( - item: &types::PaymentsAuthorizeRouterData, + item: &PaymentsAuthorizeRouterData, browser_info: &BrowserInformation, params: TrustpayMandatoryParams, amount: StringMajorUnit, - ccard: &domain::payments::Card, + ccard: &Card, return_url: String, ) -> Result { let email = item.request.get_email()?; @@ -321,7 +334,7 @@ fn get_full_name( } fn get_debtor_info( - item: &types::PaymentsAuthorizeRouterData, + item: &PaymentsAuthorizeRouterData, pm: TrustpayPaymentMethod, params: TrustpayMandatoryParams, ) -> CustomResult, errors::ConnectorError> { @@ -343,8 +356,8 @@ fn get_debtor_info( } fn get_bank_redirection_request_data( - item: &types::PaymentsAuthorizeRouterData, - bank_redirection_data: &domain::BankRedirectData, + item: &PaymentsAuthorizeRouterData, + bank_redirection_data: &BankRedirectData, params: TrustpayMandatoryParams, amount: StringMajorUnit, auth: TrustpayAuthType, @@ -376,10 +389,10 @@ fn get_bank_redirection_request_data( Ok(payment_request) } -impl TryFrom<&TrustpayRouterData<&types::PaymentsAuthorizeRouterData>> for TrustpayPaymentsRequest { +impl TryFrom<&TrustpayRouterData<&PaymentsAuthorizeRouterData>> for TrustpayPaymentsRequest { type Error = Error; fn try_from( - item: &TrustpayRouterData<&types::PaymentsAuthorizeRouterData>, + item: &TrustpayRouterData<&PaymentsAuthorizeRouterData>, ) -> Result { let browser_info = item .router_data @@ -408,7 +421,7 @@ impl TryFrom<&TrustpayRouterData<&types::PaymentsAuthorizeRouterData>> for Trust let auth = TrustpayAuthType::try_from(&item.router_data.connector_auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; match item.router_data.request.payment_method_data { - domain::PaymentMethodData::Card(ref ccard) => Ok(get_card_request_data( + PaymentMethodData::Card(ref ccard) => Ok(get_card_request_data( item.router_data, &default_browser_info, params, @@ -416,7 +429,7 @@ impl TryFrom<&TrustpayRouterData<&types::PaymentsAuthorizeRouterData>> for Trust ccard, item.router_data.request.get_router_return_url()?, )?), - domain::PaymentMethodData::BankRedirect(ref bank_redirection_data) => { + PaymentMethodData::BankRedirect(ref bank_redirection_data) => { get_bank_redirection_request_data( item.router_data, bank_redirection_data, @@ -425,23 +438,23 @@ impl TryFrom<&TrustpayRouterData<&types::PaymentsAuthorizeRouterData>> for Trust auth, ) } - domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::MobilePayment(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) - | domain::PaymentMethodData::NetworkToken(_) - | domain::PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { + PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::MobilePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) + | PaymentMethodData::NetworkToken(_) + | PaymentMethodData::CardDetailsForNetworkTransactionId(_) => { Err(errors::ConnectorError::NotImplemented( utils::get_unimplemented_payment_method_error_message("trustpay"), ) @@ -667,18 +680,12 @@ pub enum TrustpayPaymentsResponse { WebhookResponse(Box), } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = Error; fn try_from( - item: types::ResponseRouterData< - F, - TrustpayPaymentsResponse, - T, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { let (status, error, payment_response_data) = get_trustpay_response(item.response, item.http_code)?; @@ -696,8 +703,8 @@ fn handle_cards_response( ) -> CustomResult< ( enums::AttemptStatus, - Option, - types::PaymentsResponseData, + Option, + PaymentsResponseData, ), errors::ConnectorError, > { @@ -707,15 +714,13 @@ fn handle_cards_response( )?; let form_fields = response.redirect_params.unwrap_or_default(); - let redirection_data = response - .redirect_url - .map(|url| services::RedirectForm::Form { - endpoint: url.to_string(), - method: services::Method::Post, - form_fields, - }); + let redirection_data = response.redirect_url.map(|url| RedirectForm::Form { + endpoint: url.to_string(), + method: Method::Post, + form_fields, + }); let error = if msg.is_some() { - Some(types::ErrorResponse { + Some(ErrorResponse { code: response .payment_status .unwrap_or_else(|| consts::NO_ERROR_CODE.to_string()), @@ -730,8 +735,8 @@ fn handle_cards_response( } else { None }; - let payment_response_data = types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(response.instance_id.clone()), + let payment_response_data = PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(response.instance_id.clone()), redirection_data: Box::new(redirection_data), mandate_reference: Box::new(None), connector_metadata: None, @@ -748,20 +753,18 @@ fn handle_bank_redirects_response( ) -> CustomResult< ( enums::AttemptStatus, - Option, - types::PaymentsResponseData, + Option, + PaymentsResponseData, ), errors::ConnectorError, > { let status = enums::AttemptStatus::AuthenticationPending; let error = None; - let payment_response_data = types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - response.payment_request_id.to_string(), - ), - redirection_data: Box::new(Some(services::RedirectForm::from(( + let payment_response_data = PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(response.payment_request_id.to_string()), + redirection_data: Box::new(Some(RedirectForm::from(( response.gateway_url, - services::Method::Get, + Method::Get, )))), mandate_reference: Box::new(None), connector_metadata: None, @@ -779,13 +782,13 @@ fn handle_bank_redirects_error_response( ) -> CustomResult< ( enums::AttemptStatus, - Option, - types::PaymentsResponseData, + Option, + PaymentsResponseData, ), errors::ConnectorError, > { let status = enums::AttemptStatus::AuthorizationFailed; - let error = Some(types::ErrorResponse { + let error = Some(ErrorResponse { code: response.payment_result_info.result_code.to_string(), // message vary for the same code, so relying on code alone as it is unique message: response.payment_result_info.result_code.to_string(), @@ -794,8 +797,8 @@ fn handle_bank_redirects_error_response( attempt_status: None, connector_transaction_id: None, }); - let payment_response_data = types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::NoResponseId, + let payment_response_data = PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::NoResponseId, redirection_data: Box::new(None), mandate_reference: Box::new(None), connector_metadata: None, @@ -813,8 +816,8 @@ fn handle_bank_redirects_sync_response( ) -> CustomResult< ( enums::AttemptStatus, - Option, - types::PaymentsResponseData, + Option, + PaymentsResponseData, ), errors::ConnectorError, > { @@ -824,7 +827,7 @@ fn handle_bank_redirects_sync_response( .payment_information .status_reason_information .unwrap_or_default(); - Some(types::ErrorResponse { + Some(ErrorResponse { code: reason_info .reason .code @@ -849,8 +852,8 @@ fn handle_bank_redirects_sync_response( } else { None }; - let payment_response_data = types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( + let payment_response_data = PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId( response .payment_information .references @@ -874,8 +877,8 @@ pub fn handle_webhook_response( ) -> CustomResult< ( enums::AttemptStatus, - Option, - types::PaymentsResponseData, + Option, + PaymentsResponseData, ), errors::ConnectorError, > { @@ -884,7 +887,7 @@ pub fn handle_webhook_response( let reason_info = payment_information .status_reason_information .unwrap_or_default(); - Some(types::ErrorResponse { + Some(ErrorResponse { code: reason_info .reason .code @@ -903,8 +906,8 @@ pub fn handle_webhook_response( } else { None }; - let payment_response_data = types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::NoResponseId, + let payment_response_data = PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::NoResponseId, redirection_data: Box::new(None), mandate_reference: Box::new(None), connector_metadata: None, @@ -922,8 +925,8 @@ pub fn get_trustpay_response( ) -> CustomResult< ( enums::AttemptStatus, - Option, - types::PaymentsResponseData, + Option, + PaymentsResponseData, ), errors::ConnectorError, > { @@ -951,9 +954,9 @@ pub struct TrustpayAuthUpdateRequest { pub grant_type: String, } -impl TryFrom<&types::RefreshTokenRouterData> for TrustpayAuthUpdateRequest { +impl TryFrom<&RefreshTokenRouterData> for TrustpayAuthUpdateRequest { type Error = Error; - fn try_from(_item: &types::RefreshTokenRouterData) -> Result { + fn try_from(_item: &RefreshTokenRouterData) -> Result { Ok(Self { grant_type: "client_credentials".to_string(), }) @@ -983,23 +986,23 @@ pub struct TrustpayAccessTokenErrorResponse { pub result_info: ResultInfo, } -impl TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = Error; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { match (item.response.access_token, item.response.expires_in) { (Some(access_token), Some(expires_in)) => Ok(Self { - response: Ok(types::AccessToken { + response: Ok(AccessToken { token: access_token, expires: expires_in, }), ..item.data }), _ => Ok(Self { - response: Err(types::ErrorResponse { + response: Err(ErrorResponse { code: item.response.result_info.result_code.to_string(), // message vary for the same code, so relying on code alone as it is unique message: item.response.result_info.result_code.to_string(), @@ -1026,26 +1029,26 @@ pub struct TrustpayCreateIntentRequest { pub reference: String, } -impl TryFrom<&TrustpayRouterData<&types::PaymentsPreProcessingRouterData>> +impl TryFrom<&TrustpayRouterData<&PaymentsPreProcessingRouterData>> for TrustpayCreateIntentRequest { type Error = Error; fn try_from( - item: &TrustpayRouterData<&types::PaymentsPreProcessingRouterData>, + item: &TrustpayRouterData<&PaymentsPreProcessingRouterData>, ) -> Result { let is_apple_pay = item .router_data .request .payment_method_type .as_ref() - .map(|pmt| matches!(pmt, diesel_models::enums::PaymentMethodType::ApplePay)); + .map(|pmt| matches!(pmt, enums::PaymentMethodType::ApplePay)); let is_google_pay = item .router_data .request .payment_method_type .as_ref() - .map(|pmt| matches!(pmt, diesel_models::enums::PaymentMethodType::GooglePay)); + .map(|pmt| matches!(pmt, enums::PaymentMethodType::GooglePay)); let currency = item.router_data.request.get_currency()?; let amount = item.amount.to_owned(); @@ -1161,21 +1164,21 @@ pub struct ApplePayTotalInfo { impl TryFrom< - types::ResponseRouterData< + ResponseRouterData< F, TrustpayCreateIntentResponse, - types::PaymentsPreProcessingData, - types::PaymentsResponseData, + PaymentsPreProcessingData, + PaymentsResponseData, >, - > for types::RouterData + > for RouterData { type Error = Error; fn try_from( - item: types::ResponseRouterData< + item: ResponseRouterData< F, TrustpayCreateIntentResponse, - types::PaymentsPreProcessingData, - types::PaymentsResponseData, + PaymentsPreProcessingData, + PaymentsResponseData, >, ) -> Result { let create_intent_response = item.response.init_result_data.to_owned(); @@ -1185,11 +1188,11 @@ impl match (pmt, create_intent_response) { ( - diesel_models::enums::PaymentMethodType::ApplePay, + enums::PaymentMethodType::ApplePay, InitResultData::AppleInitResultData(apple_pay_response), ) => get_apple_pay_session(instance_id, &secrets, apple_pay_response, item), ( - diesel_models::enums::PaymentMethodType::GooglePay, + enums::PaymentMethodType::GooglePay, InitResultData::GoogleInitResultData(google_pay_response), ) => get_google_pay_session(instance_id, &secrets, google_pay_response, item), _ => Err(report!(errors::ConnectorError::InvalidWallet)), @@ -1201,21 +1204,13 @@ pub fn get_apple_pay_session( instance_id: String, secrets: &SdkSecretInfo, apple_pay_init_result: TrustpayApplePayResponse, - item: types::ResponseRouterData< - F, - TrustpayCreateIntentResponse, - T, - types::PaymentsResponseData, - >, -) -> Result< - types::RouterData, - error_stack::Report, -> { - Ok(types::RouterData { - response: Ok(types::PaymentsResponseData::PreProcessingResponse { + item: ResponseRouterData, +) -> Result, error_stack::Report> { + Ok(RouterData { + response: Ok(PaymentsResponseData::PreProcessingResponse { connector_metadata: None, - pre_processing_id: types::PreprocessingResponseId::ConnectorTransactionId(instance_id), - session_token: Some(types::api::SessionToken::ApplePay(Box::new( + pre_processing_id: PreprocessingResponseId::ConnectorTransactionId(instance_id), + session_token: Some(SessionToken::ApplePay(Box::new( api_models::payments::ApplepaySessionTokenResponse { session_token_data: Some( api_models::payments::ApplePaySessionResponse::ThirdPartySdk( @@ -1252,7 +1247,7 @@ pub fn get_apple_pay_session( connector_response_reference_id: None, }), // We don't get status from TrustPay but status should be AuthenticationPending by default for session response - status: diesel_models::enums::AttemptStatus::AuthenticationPending, + status: enums::AttemptStatus::AuthenticationPending, ..item.data }) } @@ -1261,21 +1256,13 @@ pub fn get_google_pay_session( instance_id: String, secrets: &SdkSecretInfo, google_pay_init_result: TrustpayGooglePayResponse, - item: types::ResponseRouterData< - F, - TrustpayCreateIntentResponse, - T, - types::PaymentsResponseData, - >, -) -> Result< - types::RouterData, - error_stack::Report, -> { - Ok(types::RouterData { - response: Ok(types::PaymentsResponseData::PreProcessingResponse { + item: ResponseRouterData, +) -> Result, error_stack::Report> { + Ok(RouterData { + response: Ok(PaymentsResponseData::PreProcessingResponse { connector_metadata: None, - pre_processing_id: types::PreprocessingResponseId::ConnectorTransactionId(instance_id), - session_token: Some(types::api::SessionToken::GooglePay(Box::new( + pre_processing_id: PreprocessingResponseId::ConnectorTransactionId(instance_id), + session_token: Some(SessionToken::GooglePay(Box::new( api_models::payments::GpaySessionTokenResponse::GooglePaySession( api_models::payments::GooglePaySessionResponse { connector: "trustpay".to_string(), @@ -1305,7 +1292,7 @@ pub fn get_google_pay_session( connector_response_reference_id: None, }), // We don't get status from TrustPay but status should be AuthenticationPending by default for session response - status: diesel_models::enums::AttemptStatus::AuthenticationPending, + status: enums::AttemptStatus::AuthenticationPending, ..item.data }) } @@ -1416,14 +1403,12 @@ pub enum TrustpayRefundRequest { BankRedirectRefund(Box), } -impl TryFrom<&TrustpayRouterData<&types::RefundsRouterData>> for TrustpayRefundRequest { +impl TryFrom<&TrustpayRouterData<&RefundsRouterData>> for TrustpayRefundRequest { type Error = Error; - fn try_from( - item: &TrustpayRouterData<&types::RefundsRouterData>, - ) -> Result { + fn try_from(item: &TrustpayRouterData<&RefundsRouterData>) -> Result { let amount = item.amount.to_owned(); match item.router_data.payment_method { - diesel_models::enums::PaymentMethod::BankRedirect => { + enums::PaymentMethod::BankRedirect => { let auth = TrustpayAuthType::try_from(&item.router_data.connector_auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; Ok(Self::BankRedirectRefund(Box::new( @@ -1484,11 +1469,10 @@ pub enum RefundResponse { fn handle_cards_refund_response( response: CardsRefundResponse, status_code: u16, -) -> CustomResult<(Option, types::RefundsResponseData), errors::ConnectorError> -{ +) -> CustomResult<(Option, RefundsResponseData), errors::ConnectorError> { let (refund_status, msg) = get_refund_status(&response.payment_status)?; let error = if msg.is_some() { - Some(types::ErrorResponse { + Some(ErrorResponse { code: response.payment_status, message: msg .clone() @@ -1501,7 +1485,7 @@ fn handle_cards_refund_response( } else { None }; - let refund_response_data = types::RefundsResponseData { + let refund_response_data = RefundsResponseData { connector_refund_id: response.instance_id, refund_status, }; @@ -1511,12 +1495,11 @@ fn handle_cards_refund_response( fn handle_webhooks_refund_response( response: WebhookPaymentInformation, status_code: u16, -) -> CustomResult<(Option, types::RefundsResponseData), errors::ConnectorError> -{ - let refund_status = diesel_models::enums::RefundStatus::try_from(response.status)?; +) -> CustomResult<(Option, RefundsResponseData), errors::ConnectorError> { + let refund_status = enums::RefundStatus::try_from(response.status)?; let error = if utils::is_refund_failure(refund_status) { let reason_info = response.status_reason_information.unwrap_or_default(); - Some(types::ErrorResponse { + Some(ErrorResponse { code: reason_info .reason .code @@ -1535,7 +1518,7 @@ fn handle_webhooks_refund_response( } else { None }; - let refund_response_data = types::RefundsResponseData { + let refund_response_data = RefundsResponseData { connector_refund_id: response .references .payment_request_id @@ -1548,10 +1531,10 @@ fn handle_webhooks_refund_response( fn handle_bank_redirects_refund_response( response: BankRedirectRefundResponse, status_code: u16, -) -> (Option, types::RefundsResponseData) { +) -> (Option, RefundsResponseData) { let (refund_status, msg) = get_refund_status_from_result_info(response.result_info.result_code); let error = if msg.is_some() { - Some(types::ErrorResponse { + Some(ErrorResponse { code: response.result_info.result_code.to_string(), // message vary for the same code, so relying on code alone as it is unique message: response.result_info.result_code.to_string(), @@ -1563,7 +1546,7 @@ fn handle_bank_redirects_refund_response( } else { None }; - let refund_response_data = types::RefundsResponseData { + let refund_response_data = RefundsResponseData { connector_refund_id: response.payment_request_id.to_string(), refund_status, }; @@ -1573,14 +1556,14 @@ fn handle_bank_redirects_refund_response( fn handle_bank_redirects_refund_sync_response( response: SyncResponseBankRedirect, status_code: u16, -) -> (Option, types::RefundsResponseData) { +) -> (Option, RefundsResponseData) { let refund_status = enums::RefundStatus::from(response.payment_information.status); let error = if utils::is_refund_failure(refund_status) { let reason_info = response .payment_information .status_reason_information .unwrap_or_default(); - Some(types::ErrorResponse { + Some(ErrorResponse { code: reason_info .reason .code @@ -1599,7 +1582,7 @@ fn handle_bank_redirects_refund_sync_response( } else { None }; - let refund_response_data = types::RefundsResponseData { + let refund_response_data = RefundsResponseData { connector_refund_id: response.payment_information.references.payment_request_id, refund_status, }; @@ -1609,8 +1592,8 @@ fn handle_bank_redirects_refund_sync_response( fn handle_bank_redirects_refund_sync_error_response( response: ErrorResponseBankRedirect, status_code: u16, -) -> (Option, types::RefundsResponseData) { - let error = Some(types::ErrorResponse { +) -> (Option, RefundsResponseData) { + let error = Some(ErrorResponse { code: response.payment_result_info.result_code.to_string(), // message vary for the same code, so relying on code alone as it is unique message: response.payment_result_info.result_code.to_string(), @@ -1620,20 +1603,16 @@ fn handle_bank_redirects_refund_sync_error_response( connector_transaction_id: None, }); //unreachable case as we are sending error as Some() - let refund_response_data = types::RefundsResponseData { + let refund_response_data = RefundsResponseData { connector_refund_id: "".to_string(), refund_status: enums::RefundStatus::Failure, }; (error, refund_response_data) } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for RefundsRouterData { type Error = Error; - fn try_from( - item: types::RefundsResponseRouterData, - ) -> Result { + fn try_from(item: RefundsResponseRouterData) -> Result { let (error, response) = match item.response { RefundResponse::CardsRefund(response) => { handle_cards_refund_response(*response, item.http_code)? @@ -1773,7 +1752,7 @@ impl TryFrom for enums::AttemptStatus { } } -impl TryFrom for diesel_models::enums::RefundStatus { +impl TryFrom for enums::RefundStatus { type Error = errors::ConnectorError; fn try_from(item: WebhookStatus) -> Result { match item { diff --git a/crates/hyperswitch_connectors/src/default_implementations.rs b/crates/hyperswitch_connectors/src/default_implementations.rs index b2df2d15f71..3f622bcfe8e 100644 --- a/crates/hyperswitch_connectors/src/default_implementations.rs +++ b/crates/hyperswitch_connectors/src/default_implementations.rs @@ -100,6 +100,7 @@ default_imp_for_authorize_session_token!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -110,6 +111,7 @@ default_imp_for_authorize_session_token!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -134,11 +136,15 @@ default_imp_for_authorize_session_token!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -156,6 +162,7 @@ default_imp_for_authorize_session_token!( connectors::UnifiedAuthenticationService, connectors::Volt, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::Worldline, connectors::Worldpay, @@ -184,6 +191,7 @@ default_imp_for_calculate_tax!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -194,6 +202,7 @@ default_imp_for_calculate_tax!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -223,11 +232,15 @@ default_imp_for_calculate_tax!( connectors::Multisafepay, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Paybox, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nuvei, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -239,6 +252,7 @@ default_imp_for_calculate_tax!( connectors::Stax, connectors::Square, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Volt, @@ -269,6 +283,7 @@ default_imp_for_session_update!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -279,6 +294,7 @@ default_imp_for_session_update!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -309,12 +325,16 @@ default_imp_for_session_update!( connectors::Moneris, connectors::Multisafepay, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::UnifiedAuthenticationService, @@ -331,6 +351,7 @@ default_imp_for_session_update!( connectors::Powertranz, connectors::Prophetpay, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::Deutschebank, connectors::Volt, @@ -355,6 +376,7 @@ default_imp_for_post_session_tokens!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -365,6 +387,7 @@ default_imp_for_post_session_tokens!( connectors::Billwerk, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -395,12 +418,16 @@ default_imp_for_post_session_tokens!( connectors::Moneris, connectors::Multisafepay, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Fiuu, @@ -414,6 +441,7 @@ default_imp_for_post_session_tokens!( connectors::Powertranz, connectors::Prophetpay, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Deutschebank, @@ -449,6 +477,7 @@ default_imp_for_complete_authorize!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -472,8 +501,11 @@ default_imp_for_complete_authorize!( connectors::Moneris, connectors::Multisafepay, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, + connectors::Opayo, + connectors::Opennode, connectors::Payeezy, connectors::Payu, connectors::Placetopay, @@ -484,6 +516,7 @@ default_imp_for_complete_authorize!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Wellsfargo, @@ -514,6 +547,7 @@ default_imp_for_incremental_authorization!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -524,6 +558,7 @@ default_imp_for_incremental_authorization!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -547,12 +582,16 @@ default_imp_for_incremental_authorization!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -569,6 +608,7 @@ default_imp_for_incremental_authorization!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -599,6 +639,7 @@ default_imp_for_create_customer!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -609,6 +650,7 @@ default_imp_for_create_customer!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -636,12 +678,16 @@ default_imp_for_create_customer!( connectors::Moneris, connectors::Multisafepay, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -653,6 +699,7 @@ default_imp_for_create_customer!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -718,6 +765,8 @@ default_imp_for_connector_redirect_response!( connectors::Multisafepay, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nomupay, connectors::Payeezy, connectors::Payu, @@ -759,6 +808,7 @@ macro_rules! default_imp_for_pre_processing_steps{ default_imp_for_pre_processing_steps!( connectors::Aci, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -769,6 +819,7 @@ default_imp_for_pre_processing_steps!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -791,8 +842,11 @@ default_imp_for_pre_processing_steps!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, + connectors::Opayo, + connectors::Opennode, connectors::Paybox, connectors::Payeezy, connectors::Payu, @@ -840,6 +894,7 @@ default_imp_for_post_processing_steps!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -850,6 +905,7 @@ default_imp_for_post_processing_steps!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -874,12 +930,16 @@ default_imp_for_post_processing_steps!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -896,6 +956,7 @@ default_imp_for_post_processing_steps!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -927,6 +988,7 @@ default_imp_for_approve!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -937,6 +999,7 @@ default_imp_for_approve!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -961,12 +1024,16 @@ default_imp_for_approve!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -983,6 +1050,7 @@ default_imp_for_approve!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1014,6 +1082,7 @@ default_imp_for_reject!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1024,6 +1093,7 @@ default_imp_for_reject!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1048,12 +1118,16 @@ default_imp_for_reject!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1070,6 +1144,7 @@ default_imp_for_reject!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1101,6 +1176,7 @@ default_imp_for_webhook_source_verification!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1111,6 +1187,7 @@ default_imp_for_webhook_source_verification!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1135,12 +1212,16 @@ default_imp_for_webhook_source_verification!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1157,6 +1238,7 @@ default_imp_for_webhook_source_verification!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1189,6 +1271,7 @@ default_imp_for_accept_dispute!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1223,12 +1306,16 @@ default_imp_for_accept_dispute!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1245,6 +1332,7 @@ default_imp_for_accept_dispute!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1276,6 +1364,7 @@ default_imp_for_submit_evidence!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1310,12 +1399,16 @@ default_imp_for_submit_evidence!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1332,6 +1425,7 @@ default_imp_for_submit_evidence!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1363,6 +1457,7 @@ default_imp_for_defend_dispute!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1397,12 +1492,16 @@ default_imp_for_defend_dispute!( connectors::Klarna, connectors::Helcim, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1419,6 +1518,7 @@ default_imp_for_defend_dispute!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1459,6 +1559,7 @@ default_imp_for_file_upload!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1493,12 +1594,16 @@ default_imp_for_file_upload!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1515,6 +1620,7 @@ default_imp_for_file_upload!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1539,6 +1645,7 @@ default_imp_for_payouts!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1549,6 +1656,7 @@ default_imp_for_payouts!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Cryptopay, connectors::Datatrans, connectors::Coinbase, @@ -1577,11 +1685,15 @@ default_imp_for_payouts!( connectors::Multisafepay, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Paybox, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nuvei, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1593,6 +1705,7 @@ default_imp_for_payouts!( connectors::Square, connectors::Stax, connectors::Taxjar, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Volt, @@ -1626,6 +1739,7 @@ default_imp_for_payouts_create!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1636,6 +1750,7 @@ default_imp_for_payouts_create!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1660,12 +1775,16 @@ default_imp_for_payouts_create!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1682,6 +1801,7 @@ default_imp_for_payouts_create!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1715,6 +1835,7 @@ default_imp_for_payouts_retrieve!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1725,6 +1846,7 @@ default_imp_for_payouts_retrieve!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1749,12 +1871,16 @@ default_imp_for_payouts_retrieve!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1771,6 +1897,7 @@ default_imp_for_payouts_retrieve!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1804,6 +1931,7 @@ default_imp_for_payouts_eligibility!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1814,6 +1942,7 @@ default_imp_for_payouts_eligibility!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1838,12 +1967,16 @@ default_imp_for_payouts_eligibility!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1860,6 +1993,7 @@ default_imp_for_payouts_eligibility!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1893,6 +2027,7 @@ default_imp_for_payouts_fulfill!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1903,6 +2038,7 @@ default_imp_for_payouts_fulfill!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1926,12 +2062,16 @@ default_imp_for_payouts_fulfill!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1948,6 +2088,7 @@ default_imp_for_payouts_fulfill!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1981,6 +2122,7 @@ default_imp_for_payouts_cancel!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1991,6 +2133,7 @@ default_imp_for_payouts_cancel!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2015,12 +2158,16 @@ default_imp_for_payouts_cancel!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2037,6 +2184,7 @@ default_imp_for_payouts_cancel!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2070,6 +2218,7 @@ default_imp_for_payouts_quote!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2080,6 +2229,7 @@ default_imp_for_payouts_quote!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2104,12 +2254,16 @@ default_imp_for_payouts_quote!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2126,6 +2280,7 @@ default_imp_for_payouts_quote!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2159,6 +2314,7 @@ default_imp_for_payouts_recipient!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2169,6 +2325,7 @@ default_imp_for_payouts_recipient!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2193,12 +2350,16 @@ default_imp_for_payouts_recipient!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2215,6 +2376,7 @@ default_imp_for_payouts_recipient!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2248,6 +2410,7 @@ default_imp_for_payouts_recipient_account!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2258,6 +2421,7 @@ default_imp_for_payouts_recipient_account!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2282,12 +2446,16 @@ default_imp_for_payouts_recipient_account!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2304,6 +2472,7 @@ default_imp_for_payouts_recipient_account!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2337,6 +2506,7 @@ default_imp_for_frm_sale!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2347,6 +2517,7 @@ default_imp_for_frm_sale!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2371,12 +2542,16 @@ default_imp_for_frm_sale!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2393,6 +2568,7 @@ default_imp_for_frm_sale!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2426,6 +2602,7 @@ default_imp_for_frm_checkout!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2436,6 +2613,7 @@ default_imp_for_frm_checkout!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2460,12 +2638,16 @@ default_imp_for_frm_checkout!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2482,6 +2664,7 @@ default_imp_for_frm_checkout!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2515,6 +2698,7 @@ default_imp_for_frm_transaction!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2525,6 +2709,7 @@ default_imp_for_frm_transaction!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2549,12 +2734,16 @@ default_imp_for_frm_transaction!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2571,6 +2760,7 @@ default_imp_for_frm_transaction!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2604,6 +2794,7 @@ default_imp_for_frm_fulfillment!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2614,6 +2805,7 @@ default_imp_for_frm_fulfillment!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2638,12 +2830,16 @@ default_imp_for_frm_fulfillment!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2660,6 +2856,7 @@ default_imp_for_frm_fulfillment!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2693,6 +2890,7 @@ default_imp_for_frm_record_return!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2703,6 +2901,7 @@ default_imp_for_frm_record_return!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2727,12 +2926,16 @@ default_imp_for_frm_record_return!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2749,6 +2952,7 @@ default_imp_for_frm_record_return!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2779,6 +2983,7 @@ default_imp_for_revoking_mandates!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2789,6 +2994,7 @@ default_imp_for_revoking_mandates!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2815,9 +3021,12 @@ default_imp_for_revoking_mandates!( connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2834,6 +3043,7 @@ default_imp_for_revoking_mandates!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2864,6 +3074,7 @@ default_imp_for_uas_pre_authentication!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2874,6 +3085,7 @@ default_imp_for_uas_pre_authentication!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2899,11 +3111,15 @@ default_imp_for_uas_pre_authentication!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Powertranz, connectors::Prophetpay, @@ -2921,6 +3137,7 @@ default_imp_for_uas_pre_authentication!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::Worldline, connectors::Worldpay, @@ -2949,6 +3166,7 @@ default_imp_for_uas_post_authentication!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2959,6 +3177,7 @@ default_imp_for_uas_post_authentication!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2984,11 +3203,15 @@ default_imp_for_uas_post_authentication!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Powertranz, connectors::Prophetpay, @@ -3006,6 +3229,7 @@ default_imp_for_uas_post_authentication!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::Worldline, connectors::Worldpay, @@ -3034,6 +3258,7 @@ default_imp_for_uas_authentication!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -3044,6 +3269,7 @@ default_imp_for_uas_authentication!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -3069,11 +3295,15 @@ default_imp_for_uas_authentication!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Powertranz, connectors::Prophetpay, @@ -3091,6 +3321,7 @@ default_imp_for_uas_authentication!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::Wellsfargo, connectors::Worldline, @@ -3120,6 +3351,7 @@ default_imp_for_uas_authentication_confirmation!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -3130,6 +3362,7 @@ default_imp_for_uas_authentication_confirmation!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -3155,10 +3388,13 @@ default_imp_for_uas_authentication_confirmation!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, connectors::Nuvei, + connectors::Opayo, + connectors::Opennode, connectors::Payeezy, connectors::Payu, connectors::Powertranz, @@ -3168,6 +3404,7 @@ default_imp_for_uas_authentication_confirmation!( connectors::Moneris, connectors::Multisafepay, connectors::Paybox, + connectors::Payme, connectors::Placetopay, connectors::Rapyd, connectors::Razorpay, @@ -3177,6 +3414,7 @@ default_imp_for_uas_authentication_confirmation!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::Worldline, connectors::Worldpay, diff --git a/crates/hyperswitch_connectors/src/default_implementations_v2.rs b/crates/hyperswitch_connectors/src/default_implementations_v2.rs index d0ffd3a230c..d00eb841868 100644 --- a/crates/hyperswitch_connectors/src/default_implementations_v2.rs +++ b/crates/hyperswitch_connectors/src/default_implementations_v2.rs @@ -207,6 +207,7 @@ macro_rules! default_imp_for_new_connector_integration_payment { default_imp_for_new_connector_integration_payment!( connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -217,6 +218,7 @@ default_imp_for_new_connector_integration_payment!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -242,12 +244,16 @@ default_imp_for_new_connector_integration_payment!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -264,6 +270,7 @@ default_imp_for_new_connector_integration_payment!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -295,6 +302,7 @@ default_imp_for_new_connector_integration_refund!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -305,6 +313,7 @@ default_imp_for_new_connector_integration_refund!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -330,12 +339,16 @@ default_imp_for_new_connector_integration_refund!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -352,6 +365,7 @@ default_imp_for_new_connector_integration_refund!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Wellsfargo, @@ -378,6 +392,7 @@ default_imp_for_new_connector_integration_connector_access_token!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -388,6 +403,7 @@ default_imp_for_new_connector_integration_connector_access_token!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -413,12 +429,16 @@ default_imp_for_new_connector_integration_connector_access_token!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -435,6 +455,7 @@ default_imp_for_new_connector_integration_connector_access_token!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -467,6 +488,7 @@ default_imp_for_new_connector_integration_accept_dispute!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -477,6 +499,7 @@ default_imp_for_new_connector_integration_accept_dispute!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -501,12 +524,16 @@ default_imp_for_new_connector_integration_accept_dispute!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -523,6 +550,7 @@ default_imp_for_new_connector_integration_accept_dispute!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -554,6 +582,7 @@ default_imp_for_new_connector_integration_submit_evidence!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -564,6 +593,7 @@ default_imp_for_new_connector_integration_submit_evidence!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -588,12 +618,16 @@ default_imp_for_new_connector_integration_submit_evidence!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -610,6 +644,7 @@ default_imp_for_new_connector_integration_submit_evidence!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -641,6 +676,7 @@ default_imp_for_new_connector_integration_defend_dispute!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -651,6 +687,7 @@ default_imp_for_new_connector_integration_defend_dispute!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -676,12 +713,16 @@ default_imp_for_new_connector_integration_defend_dispute!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -698,6 +739,7 @@ default_imp_for_new_connector_integration_defend_dispute!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -739,6 +781,7 @@ default_imp_for_new_connector_integration_file_upload!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -749,6 +792,7 @@ default_imp_for_new_connector_integration_file_upload!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -774,12 +818,16 @@ default_imp_for_new_connector_integration_file_upload!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -796,6 +844,7 @@ default_imp_for_new_connector_integration_file_upload!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -829,6 +878,7 @@ default_imp_for_new_connector_integration_payouts_create!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -839,6 +889,7 @@ default_imp_for_new_connector_integration_payouts_create!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -864,12 +915,16 @@ default_imp_for_new_connector_integration_payouts_create!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -886,6 +941,7 @@ default_imp_for_new_connector_integration_payouts_create!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -919,6 +975,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -929,6 +986,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -954,12 +1012,16 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -976,6 +1038,7 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1009,6 +1072,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1019,6 +1083,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1044,12 +1109,16 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1066,6 +1135,7 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1099,6 +1169,7 @@ default_imp_for_new_connector_integration_payouts_cancel!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1109,6 +1180,7 @@ default_imp_for_new_connector_integration_payouts_cancel!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1134,12 +1206,16 @@ default_imp_for_new_connector_integration_payouts_cancel!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1156,6 +1232,7 @@ default_imp_for_new_connector_integration_payouts_cancel!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1189,6 +1266,7 @@ default_imp_for_new_connector_integration_payouts_quote!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1199,6 +1277,7 @@ default_imp_for_new_connector_integration_payouts_quote!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1224,12 +1303,16 @@ default_imp_for_new_connector_integration_payouts_quote!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1246,6 +1329,7 @@ default_imp_for_new_connector_integration_payouts_quote!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1279,6 +1363,7 @@ default_imp_for_new_connector_integration_payouts_recipient!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1289,6 +1374,7 @@ default_imp_for_new_connector_integration_payouts_recipient!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1314,12 +1400,16 @@ default_imp_for_new_connector_integration_payouts_recipient!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1336,6 +1426,7 @@ default_imp_for_new_connector_integration_payouts_recipient!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1369,6 +1460,7 @@ default_imp_for_new_connector_integration_payouts_sync!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1379,6 +1471,7 @@ default_imp_for_new_connector_integration_payouts_sync!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1404,12 +1497,16 @@ default_imp_for_new_connector_integration_payouts_sync!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1426,6 +1523,7 @@ default_imp_for_new_connector_integration_payouts_sync!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1459,6 +1557,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1469,6 +1568,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1494,12 +1594,16 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1516,6 +1620,7 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1547,6 +1652,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1557,6 +1663,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1582,12 +1689,16 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1604,6 +1715,7 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1637,6 +1749,7 @@ default_imp_for_new_connector_integration_frm_sale!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1647,6 +1760,7 @@ default_imp_for_new_connector_integration_frm_sale!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1672,12 +1786,16 @@ default_imp_for_new_connector_integration_frm_sale!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1694,6 +1812,7 @@ default_imp_for_new_connector_integration_frm_sale!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1727,6 +1846,7 @@ default_imp_for_new_connector_integration_frm_checkout!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1737,6 +1857,7 @@ default_imp_for_new_connector_integration_frm_checkout!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1762,12 +1883,16 @@ default_imp_for_new_connector_integration_frm_checkout!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1784,6 +1909,7 @@ default_imp_for_new_connector_integration_frm_checkout!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1817,6 +1943,7 @@ default_imp_for_new_connector_integration_frm_transaction!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1827,6 +1954,7 @@ default_imp_for_new_connector_integration_frm_transaction!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1852,12 +1980,16 @@ default_imp_for_new_connector_integration_frm_transaction!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1874,6 +2006,7 @@ default_imp_for_new_connector_integration_frm_transaction!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1907,6 +2040,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -1917,6 +2051,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -1942,12 +2077,16 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -1964,6 +2103,7 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -1997,6 +2137,7 @@ default_imp_for_new_connector_integration_frm_record_return!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2007,6 +2148,7 @@ default_imp_for_new_connector_integration_frm_record_return!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2032,12 +2174,16 @@ default_imp_for_new_connector_integration_frm_record_return!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2054,6 +2200,7 @@ default_imp_for_new_connector_integration_frm_record_return!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, @@ -2084,6 +2231,7 @@ default_imp_for_new_connector_integration_revoking_mandates!( connectors::Aci, connectors::Airwallex, connectors::Amazonpay, + connectors::Authorizedotnet, connectors::Bambora, connectors::Bamboraapac, connectors::Bankofamerica, @@ -2094,6 +2242,7 @@ default_imp_for_new_connector_integration_revoking_mandates!( connectors::Boku, connectors::Cashtocode, connectors::Chargebee, + connectors::Checkout, connectors::Coinbase, connectors::Coingate, connectors::Cryptopay, @@ -2119,12 +2268,16 @@ default_imp_for_new_connector_integration_revoking_mandates!( connectors::Jpmorgan, connectors::Klarna, connectors::Nomupay, + connectors::Noon, connectors::Novalnet, connectors::Nexinets, connectors::Nexixpay, + connectors::Opayo, + connectors::Opennode, connectors::Nuvei, connectors::Paybox, connectors::Payeezy, + connectors::Payme, connectors::Payu, connectors::Placetopay, connectors::Powertranz, @@ -2141,6 +2294,7 @@ default_imp_for_new_connector_integration_revoking_mandates!( connectors::Square, connectors::Taxjar, connectors::Thunes, + connectors::Trustpay, connectors::Tsys, connectors::UnifiedAuthenticationService, connectors::Worldline, diff --git a/crates/hyperswitch_connectors/src/types.rs b/crates/hyperswitch_connectors/src/types.rs index e893238fd8d..63b857e7ca2 100644 --- a/crates/hyperswitch_connectors/src/types.rs +++ b/crates/hyperswitch_connectors/src/types.rs @@ -2,12 +2,20 @@ use hyperswitch_domain_models::types::{PayoutsData, PayoutsResponseData}; use hyperswitch_domain_models::{ router_data::{AccessToken, RouterData}, - router_flow_types::{AccessTokenAuth, Authorize, Capture, PSync, PreProcessing, Session, Void}, + router_flow_types::{ + Accept, AccessTokenAuth, Authorize, Capture, Defend, Evidence, PSync, PreProcessing, + Session, Upload, Void, + }, router_request_types::{ - AccessTokenRequestData, PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, - PaymentsPreProcessingData, PaymentsSessionData, PaymentsSyncData, RefundsData, + AcceptDisputeRequestData, AccessTokenRequestData, DefendDisputeRequestData, + PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsPreProcessingData, + PaymentsSessionData, PaymentsSyncData, RefundsData, SubmitEvidenceRequestData, + UploadFileRequestData, + }, + router_response_types::{ + AcceptDisputeResponse, DefendDisputeResponse, PaymentsResponseData, RefundsResponseData, + SubmitEvidenceResponse, UploadFileResponse, }, - router_response_types::{PaymentsResponseData, RefundsResponseData}, }; pub(crate) type PaymentsSyncResponseRouterData = @@ -28,6 +36,15 @@ pub(crate) type PaymentsPreprocessingResponseRouterData = pub(crate) type PaymentsSessionResponseRouterData = ResponseRouterData; +pub(crate) type AcceptDisputeRouterData = + RouterData; +pub(crate) type SubmitEvidenceRouterData = + RouterData; +pub(crate) type UploadFileRouterData = + RouterData; +pub(crate) type DefendDisputeRouterData = + RouterData; + #[cfg(feature = "payouts")] pub type PayoutsResponseRouterData = ResponseRouterData; diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs index 05657216d9d..67529f14d91 100644 --- a/crates/hyperswitch_connectors/src/utils.rs +++ b/crates/hyperswitch_connectors/src/utils.rs @@ -36,6 +36,7 @@ use common_utils::{ use error_stack::{report, ResultExt}; use hyperswitch_domain_models::{ address::{Address, AddressDetails, PhoneDetails}, + mandates, network_tokenization::NetworkTokenNumber, payment_method_data::{self, Card, CardDetailsForNetworkTransactionId, PaymentMethodData}, router_data::{ @@ -5043,6 +5044,62 @@ pub fn is_mandate_supported( } } +pub fn get_mandate_details( + setup_mandate_details: Option, +) -> Result, error_stack::Report> { + setup_mandate_details + .map(|mandate_data| match &mandate_data.mandate_type { + Some(mandates::MandateDataType::SingleUse(mandate)) + | Some(mandates::MandateDataType::MultiUse(Some(mandate))) => Ok(mandate.clone()), + Some(mandates::MandateDataType::MultiUse(None)) => { + Err(errors::ConnectorError::MissingRequiredField { + field_name: "setup_future_usage.mandate_data.mandate_type.multi_use.amount", + } + .into()) + } + None => Err(errors::ConnectorError::MissingRequiredField { + field_name: "setup_future_usage.mandate_data.mandate_type", + } + .into()), + }) + .transpose() +} + +pub fn collect_values_by_removing_signature(value: &Value, signature: &String) -> Vec { + match value { + Value::Null => vec!["null".to_owned()], + Value::Bool(b) => vec![b.to_string()], + Value::Number(n) => match n.as_f64() { + Some(f) => vec![format!("{f:.2}")], + None => vec![n.to_string()], + }, + Value::String(s) => { + if signature == s { + vec![] + } else { + vec![s.clone()] + } + } + Value::Array(arr) => arr + .iter() + .flat_map(|v| collect_values_by_removing_signature(v, signature)) + .collect(), + Value::Object(obj) => obj + .values() + .flat_map(|v| collect_values_by_removing_signature(v, signature)) + .collect(), + } +} + +pub fn collect_and_sort_values_by_removing_signature( + value: &Value, + signature: &String, +) -> Vec { + let mut values = collect_values_by_removing_signature(value, signature); + values.sort(); + values +} + #[derive(Debug, strum::Display, Eq, PartialEq, Hash)] pub enum PaymentMethodDataType { Card, diff --git a/crates/router/src/connector.rs b/crates/router/src/connector.rs index 4bf57cb16f0..a00f5ed674f 100644 --- a/crates/router/src/connector.rs +++ b/crates/router/src/connector.rs @@ -1,17 +1,11 @@ pub mod adyen; pub mod adyenplatform; -pub mod authorizedotnet; -pub mod checkout; #[cfg(feature = "dummy_connector")] pub mod dummyconnector; pub mod ebanx; pub mod gpayments; pub mod netcetera; pub mod nmi; -pub mod noon; -pub mod opayo; -pub mod opennode; -pub mod payme; pub mod payone; pub mod paypal; pub mod plaid; @@ -19,45 +13,43 @@ pub mod riskified; pub mod signifyd; pub mod stripe; pub mod threedsecureio; -pub mod trustpay; pub mod utils; pub mod wellsfargopayout; pub mod wise; pub use hyperswitch_connectors::connectors::{ - aci, aci::Aci, airwallex, airwallex::Airwallex, amazonpay, amazonpay::Amazonpay, bambora, - bambora::Bambora, bamboraapac, bamboraapac::Bamboraapac, bankofamerica, - bankofamerica::Bankofamerica, billwerk, billwerk::Billwerk, bitpay, bitpay::Bitpay, bluesnap, - bluesnap::Bluesnap, boku, boku::Boku, braintree, braintree::Braintree, cashtocode, - cashtocode::Cashtocode, chargebee::Chargebee, coinbase, coinbase::Coinbase, coingate, - coingate::Coingate, cryptopay, cryptopay::Cryptopay, ctp_mastercard, - ctp_mastercard::CtpMastercard, cybersource, cybersource::Cybersource, datatrans, - datatrans::Datatrans, deutschebank, deutschebank::Deutschebank, digitalvirgo, - digitalvirgo::Digitalvirgo, dlocal, dlocal::Dlocal, elavon, elavon::Elavon, fiserv, - fiserv::Fiserv, fiservemea, fiservemea::Fiservemea, fiuu, fiuu::Fiuu, forte, forte::Forte, - getnet, getnet::Getnet, globalpay, globalpay::Globalpay, globepay, globepay::Globepay, - gocardless, gocardless::Gocardless, helcim, helcim::Helcim, iatapay, iatapay::Iatapay, inespay, - inespay::Inespay, itaubank, itaubank::Itaubank, jpmorgan, jpmorgan::Jpmorgan, klarna, - klarna::Klarna, mifinity, mifinity::Mifinity, mollie, mollie::Mollie, moneris, - moneris::Moneris, multisafepay, multisafepay::Multisafepay, nexinets, nexinets::Nexinets, - nexixpay, nexixpay::Nexixpay, nomupay, nomupay::Nomupay, novalnet, novalnet::Novalnet, nuvei, - nuvei::Nuvei, paybox, paybox::Paybox, payeezy, payeezy::Payeezy, payu, payu::Payu, placetopay, - placetopay::Placetopay, powertranz, powertranz::Powertranz, prophetpay, prophetpay::Prophetpay, - rapyd, rapyd::Rapyd, razorpay, razorpay::Razorpay, redsys, redsys::Redsys, shift4, - shift4::Shift4, square, square::Square, stax, stax::Stax, taxjar, taxjar::Taxjar, thunes, - thunes::Thunes, tsys, tsys::Tsys, unified_authentication_service, - unified_authentication_service::UnifiedAuthenticationService, volt, volt::Volt, wellsfargo, - wellsfargo::Wellsfargo, worldline, worldline::Worldline, worldpay, worldpay::Worldpay, xendit, - xendit::Xendit, zen, zen::Zen, zsl, zsl::Zsl, + aci, aci::Aci, airwallex, airwallex::Airwallex, amazonpay, amazonpay::Amazonpay, + authorizedotnet, authorizedotnet::Authorizedotnet, bambora, bambora::Bambora, bamboraapac, + bamboraapac::Bamboraapac, bankofamerica, bankofamerica::Bankofamerica, billwerk, + billwerk::Billwerk, bitpay, bitpay::Bitpay, bluesnap, bluesnap::Bluesnap, boku, boku::Boku, + braintree, braintree::Braintree, cashtocode, cashtocode::Cashtocode, chargebee::Chargebee, + checkout, checkout::Checkout, coinbase, coinbase::Coinbase, coingate, coingate::Coingate, + cryptopay, cryptopay::Cryptopay, ctp_mastercard, ctp_mastercard::CtpMastercard, cybersource, + cybersource::Cybersource, datatrans, datatrans::Datatrans, deutschebank, + deutschebank::Deutschebank, digitalvirgo, digitalvirgo::Digitalvirgo, dlocal, dlocal::Dlocal, + elavon, elavon::Elavon, fiserv, fiserv::Fiserv, fiservemea, fiservemea::Fiservemea, fiuu, + fiuu::Fiuu, forte, forte::Forte, getnet, getnet::Getnet, globalpay, globalpay::Globalpay, + globepay, globepay::Globepay, gocardless, gocardless::Gocardless, helcim, helcim::Helcim, + iatapay, iatapay::Iatapay, inespay, inespay::Inespay, itaubank, itaubank::Itaubank, jpmorgan, + jpmorgan::Jpmorgan, klarna, klarna::Klarna, mifinity, mifinity::Mifinity, mollie, + mollie::Mollie, moneris, moneris::Moneris, multisafepay, multisafepay::Multisafepay, nexinets, + nexinets::Nexinets, nexixpay, nexixpay::Nexixpay, nomupay, nomupay::Nomupay, noon, noon::Noon, + novalnet, novalnet::Novalnet, nuvei, nuvei::Nuvei, opayo, opayo::Opayo, opennode, + opennode::Opennode, paybox, paybox::Paybox, payeezy, payeezy::Payeezy, payme, payme::Payme, + payu, payu::Payu, placetopay, placetopay::Placetopay, powertranz, powertranz::Powertranz, + prophetpay, prophetpay::Prophetpay, rapyd, rapyd::Rapyd, razorpay, razorpay::Razorpay, redsys, + redsys::Redsys, shift4, shift4::Shift4, square, square::Square, stax, stax::Stax, taxjar, + taxjar::Taxjar, thunes, thunes::Thunes, trustpay, trustpay::Trustpay, tsys, tsys::Tsys, + unified_authentication_service, unified_authentication_service::UnifiedAuthenticationService, + volt, volt::Volt, wellsfargo, wellsfargo::Wellsfargo, worldline, worldline::Worldline, + worldpay, worldpay::Worldpay, xendit, xendit::Xendit, zen, zen::Zen, zsl, zsl::Zsl, }; #[cfg(feature = "dummy_connector")] pub use self::dummyconnector::DummyConnector; pub use self::{ - adyen::Adyen, adyenplatform::Adyenplatform, authorizedotnet::Authorizedotnet, - checkout::Checkout, ebanx::Ebanx, gpayments::Gpayments, netcetera::Netcetera, nmi::Nmi, - noon::Noon, opayo::Opayo, opennode::Opennode, payme::Payme, payone::Payone, paypal::Paypal, - plaid::Plaid, riskified::Riskified, signifyd::Signifyd, stripe::Stripe, - threedsecureio::Threedsecureio, trustpay::Trustpay, wellsfargopayout::Wellsfargopayout, - wise::Wise, + adyen::Adyen, adyenplatform::Adyenplatform, ebanx::Ebanx, gpayments::Gpayments, + netcetera::Netcetera, nmi::Nmi, payone::Payone, paypal::Paypal, plaid::Plaid, + riskified::Riskified, signifyd::Signifyd, stripe::Stripe, threedsecureio::Threedsecureio, + wellsfargopayout::Wellsfargopayout, wise::Wise, }; diff --git a/crates/router/src/core/payments/connector_integration_v2_impls.rs b/crates/router/src/core/payments/connector_integration_v2_impls.rs index 1219363b212..fc81f52c7e0 100644 --- a/crates/router/src/core/payments/connector_integration_v2_impls.rs +++ b/crates/router/src/core/payments/connector_integration_v2_impls.rs @@ -700,22 +700,15 @@ macro_rules! default_imp_for_new_connector_integration_payment { default_imp_for_new_connector_integration_payment!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wellsfargopayout, connector::Wise, @@ -741,22 +734,15 @@ macro_rules! default_imp_for_new_connector_integration_refund { default_imp_for_new_connector_integration_refund!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -776,22 +762,15 @@ macro_rules! default_imp_for_new_connector_integration_connector_access_token { default_imp_for_new_connector_integration_connector_access_token!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -833,22 +812,15 @@ macro_rules! default_imp_for_new_connector_integration_submit_evidence { default_imp_for_new_connector_integration_accept_dispute!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -872,22 +844,15 @@ macro_rules! default_imp_for_new_connector_integration_defend_dispute { default_imp_for_new_connector_integration_defend_dispute!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -895,22 +860,15 @@ default_imp_for_new_connector_integration_defend_dispute!( default_imp_for_new_connector_integration_submit_evidence!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -945,22 +903,15 @@ macro_rules! default_imp_for_new_connector_integration_file_upload { default_imp_for_new_connector_integration_file_upload!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1023,7 +974,6 @@ default_imp_for_new_connector_integration_payouts!( connector::Nomupay, connector::Noon, connector::Novalnet, - connector::Opayo, connector::Opennode, connector::Paybox, connector::Payeezy, @@ -1077,22 +1027,15 @@ macro_rules! default_imp_for_new_connector_integration_payouts_create { default_imp_for_new_connector_integration_payouts_create!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1119,22 +1062,15 @@ macro_rules! default_imp_for_new_connector_integration_payouts_eligibility { default_imp_for_new_connector_integration_payouts_eligibility!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1161,22 +1097,15 @@ macro_rules! default_imp_for_new_connector_integration_payouts_fulfill { default_imp_for_new_connector_integration_payouts_fulfill!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1203,22 +1132,15 @@ macro_rules! default_imp_for_new_connector_integration_payouts_cancel { default_imp_for_new_connector_integration_payouts_cancel!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1245,22 +1167,15 @@ macro_rules! default_imp_for_new_connector_integration_payouts_quote { default_imp_for_new_connector_integration_payouts_quote!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1287,22 +1202,15 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient { default_imp_for_new_connector_integration_payouts_recipient!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1329,23 +1237,16 @@ macro_rules! default_imp_for_new_connector_integration_payouts_sync { default_imp_for_new_connector_integration_payouts_sync!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wise, connector::Plaid ); @@ -1371,22 +1272,15 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient_account default_imp_for_new_connector_integration_payouts_recipient_account!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1411,22 +1305,15 @@ macro_rules! default_imp_for_new_connector_integration_webhook_source_verificati default_imp_for_new_connector_integration_webhook_source_verification!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1489,7 +1376,6 @@ default_imp_for_new_connector_integration_frm!( connector::Nomupay, connector::Noon, connector::Novalnet, - connector::Opayo, connector::Opennode, connector::Paybox, connector::Payeezy, @@ -1543,22 +1429,15 @@ macro_rules! default_imp_for_new_connector_integration_frm_sale { default_imp_for_new_connector_integration_frm_sale!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1585,22 +1464,15 @@ macro_rules! default_imp_for_new_connector_integration_frm_checkout { default_imp_for_new_connector_integration_frm_checkout!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1627,22 +1499,15 @@ macro_rules! default_imp_for_new_connector_integration_frm_transaction { default_imp_for_new_connector_integration_frm_transaction!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1669,22 +1534,15 @@ macro_rules! default_imp_for_new_connector_integration_frm_fulfillment { default_imp_for_new_connector_integration_frm_fulfillment!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1711,22 +1569,15 @@ macro_rules! default_imp_for_new_connector_integration_frm_record_return { default_imp_for_new_connector_integration_frm_record_return!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1750,22 +1601,15 @@ macro_rules! default_imp_for_new_connector_integration_revoking_mandates { default_imp_for_new_connector_integration_revoking_mandates!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Riskified, connector::Signifyd, connector::Stripe, - connector::Trustpay, connector::Threedsecureio, connector::Wise, connector::Plaid @@ -1866,7 +1710,6 @@ default_imp_for_new_connector_integration_connector_authentication!( connector::Noon, connector::Novalnet, connector::Nuvei, - connector::Opayo, connector::Opennode, connector::Paybox, connector::Payeezy, @@ -1947,16 +1790,10 @@ macro_rules! default_imp_for_new_connector_integration_uas { default_imp_for_new_connector_integration_uas!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -1964,7 +1801,6 @@ default_imp_for_new_connector_integration_uas!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); diff --git a/crates/router/src/core/payments/flows.rs b/crates/router/src/core/payments/flows.rs index f55c1f58f60..fb34601a7bf 100644 --- a/crates/router/src/core/payments/flows.rs +++ b/crates/router/src/core/payments/flows.rs @@ -217,20 +217,15 @@ impl default_imp_for_complete_authorize!( connector::Adyenplatform, connector::Adyen, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, - connector::Noon, - connector::Opayo, - connector::Opennode, connector::Payone, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wise, connector::Wellsfargopayout ); @@ -263,23 +258,16 @@ impl default_imp_for_webhook_source_verification!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -314,23 +302,16 @@ impl default_imp_for_create_customer!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -370,8 +351,6 @@ default_imp_for_connector_redirect_response!( connector::Ebanx, connector::Gpayments, connector::Netcetera, - connector::Opayo, - connector::Opennode, connector::Payone, connector::Plaid, connector::Riskified, @@ -445,7 +424,6 @@ default_imp_for_connector_request_id!( connector::Noon, connector::Novalnet, connector::Nuvei, - connector::Opayo, connector::Opennode, connector::Paybox, connector::Payeezy, @@ -515,15 +493,10 @@ impl default_imp_for_accept_dispute!( connector::Adyenplatform, - connector::Authorizedotnet, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -531,7 +504,6 @@ default_imp_for_accept_dispute!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -587,22 +559,16 @@ impl default_imp_for_file_upload!( connector::Adyenplatform, - connector::Authorizedotnet, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, - connector::Opennode, connector::Wellsfargopayout, connector::Wise ); @@ -636,22 +602,16 @@ impl default_imp_for_submit_evidence!( connector::Adyenplatform, - connector::Authorizedotnet, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, - connector::Opennode, connector::Wellsfargopayout, connector::Wise ); @@ -685,14 +645,10 @@ impl default_imp_for_defend_dispute!( connector::Adyenplatform, - connector::Authorizedotnet, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -700,8 +656,6 @@ default_imp_for_defend_dispute!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, - connector::Opennode, connector::Wellsfargopayout, connector::Wise ); @@ -750,14 +704,9 @@ impl default_imp_for_pre_processing_steps!( connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, - connector::Noon, - connector::Opayo, - connector::Opennode, connector::Payone, connector::Plaid, connector::Riskified, @@ -783,18 +732,11 @@ default_imp_for_post_processing_steps!( connector::Adyenplatform, connector::Adyen, connector::Nmi, - connector::Payme, connector::Paypal, connector::Stripe, - connector::Trustpay, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, - connector::Noon, - connector::Opayo, - connector::Opennode, connector::Payone, connector::Riskified, connector::Signifyd, @@ -815,20 +757,13 @@ macro_rules! default_imp_for_payouts { impl Payouts for connector::DummyConnector {} default_imp_for_payouts!( - connector::Authorizedotnet, - connector::Checkout, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout ); @@ -862,21 +797,14 @@ impl #[cfg(feature = "payouts")] default_imp_for_payouts_create!( connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout ); @@ -911,23 +839,16 @@ impl default_imp_for_payouts_retrieve!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -965,15 +886,9 @@ impl #[cfg(feature = "payouts")] default_imp_for_payouts_eligibility!( connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -981,7 +896,6 @@ default_imp_for_payouts_eligibility!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout ); @@ -1014,20 +928,13 @@ impl #[cfg(feature = "payouts")] default_imp_for_payouts_fulfill!( - connector::Authorizedotnet, - connector::Checkout, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout ); @@ -1061,22 +968,15 @@ impl #[cfg(feature = "payouts")] default_imp_for_payouts_cancel!( connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout ); @@ -1111,15 +1011,9 @@ impl default_imp_for_payouts_quote!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -1127,7 +1021,6 @@ default_imp_for_payouts_quote!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout ); @@ -1162,22 +1055,15 @@ impl default_imp_for_payouts_recipient!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout ); @@ -1215,23 +1101,16 @@ impl default_imp_for_payouts_recipient_account!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1266,16 +1145,10 @@ impl default_imp_for_approve!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -1283,7 +1156,6 @@ default_imp_for_approve!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1318,16 +1190,10 @@ impl default_imp_for_reject!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -1335,7 +1201,6 @@ default_imp_for_reject!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1406,7 +1271,6 @@ default_imp_for_fraud_check!( connector::Noon, connector::Novalnet, connector::Nuvei, - connector::Opayo, connector::Opennode, connector::Paybox, connector::Payeezy, @@ -1474,22 +1338,15 @@ impl default_imp_for_frm_sale!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1526,22 +1383,15 @@ impl default_imp_for_frm_checkout!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1578,22 +1428,15 @@ impl default_imp_for_frm_transaction!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1630,22 +1473,15 @@ impl default_imp_for_frm_fulfillment!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1682,22 +1518,15 @@ impl default_imp_for_frm_record_return!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1732,16 +1561,10 @@ impl default_imp_for_incremental_authorization!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -1749,7 +1572,6 @@ default_imp_for_incremental_authorization!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -1782,15 +1604,10 @@ impl default_imp_for_revoking_mandates!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -1798,7 +1615,6 @@ default_imp_for_revoking_mandates!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wise ); @@ -1941,7 +1757,6 @@ default_imp_for_connector_authentication!( connector::Noon, connector::Novalnet, connector::Nuvei, - connector::Opayo, connector::Opennode, connector::Paybox, connector::Payeezy, @@ -2005,16 +1820,10 @@ impl default_imp_for_authorize_session_token!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -2022,7 +1831,6 @@ default_imp_for_authorize_session_token!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -2055,16 +1863,10 @@ impl default_imp_for_calculate_tax!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -2072,7 +1874,6 @@ default_imp_for_calculate_tax!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -2105,23 +1906,16 @@ impl default_imp_for_session_update!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -2154,23 +1948,16 @@ impl default_imp_for_post_session_tokens!( connector::Adyen, connector::Adyenplatform, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Plaid, connector::Riskified, connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -2206,16 +1993,10 @@ impl default_imp_for_uas_pre_authentication!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -2223,7 +2004,6 @@ default_imp_for_uas_pre_authentication!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -2256,16 +2036,10 @@ impl default_imp_for_uas_post_authentication!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -2273,7 +2047,6 @@ default_imp_for_uas_post_authentication!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -2295,16 +2068,10 @@ macro_rules! default_imp_for_uas_authentication_confirmation { default_imp_for_uas_authentication_confirmation!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -2312,7 +2079,6 @@ default_imp_for_uas_authentication_confirmation!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise ); @@ -2358,16 +2124,10 @@ impl default_imp_for_uas_authentication!( connector::Adyenplatform, connector::Adyen, - connector::Authorizedotnet, - connector::Checkout, connector::Ebanx, connector::Gpayments, connector::Netcetera, connector::Nmi, - connector::Noon, - connector::Opayo, - connector::Opennode, - connector::Payme, connector::Payone, connector::Paypal, connector::Plaid, @@ -2375,7 +2135,6 @@ default_imp_for_uas_authentication!( connector::Signifyd, connector::Stripe, connector::Threedsecureio, - connector::Trustpay, connector::Wellsfargopayout, connector::Wise );