diff --git a/Cargo.lock b/Cargo.lock index 2d7556090a..138a2e2d42 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3851,6 +3851,7 @@ dependencies = [ "serde_json", "strum 0.26.2", "time", + "url", "uuid", ] diff --git a/crates/common_enums/src/enums.rs b/crates/common_enums/src/enums.rs index 3454a6ba02..2bd2e8c03b 100644 --- a/crates/common_enums/src/enums.rs +++ b/crates/common_enums/src/enums.rs @@ -486,6 +486,25 @@ pub enum ConnectorType { AuthenticationProcessor, } +#[derive(Debug, Eq, PartialEq)] +pub enum PaymentAction { + PSync, + CompleteAuthorize, + PaymentAuthenticateCompleteAuthorize, +} + +#[derive(Clone, PartialEq)] +pub enum CallConnectorAction { + Trigger, + Avoid, + StatusUpdate { + status: AttemptStatus, + error_code: Option, + error_message: Option, + }, + HandleResponse(Vec), +} + /// The three letter ISO currency code in uppercase. Eg: 'USD' for the United States Dollar. #[allow(clippy::upper_case_acronyms)] #[derive( diff --git a/crates/hyperswitch_connectors/Cargo.toml b/crates/hyperswitch_connectors/Cargo.toml index 30671d43bd..2b199a3f72 100644 --- a/crates/hyperswitch_connectors/Cargo.toml +++ b/crates/hyperswitch_connectors/Cargo.toml @@ -18,6 +18,7 @@ serde = { version = "1.0.197", features = ["derive"] } serde_json = "1.0.115" strum = { version = "0.26", features = ["derive"] } time = "0.3.35" +url = "2.5.0" uuid = { version = "1.8.0", features = ["v4"] } # First party crates diff --git a/crates/hyperswitch_connectors/src/connectors.rs b/crates/hyperswitch_connectors/src/connectors.rs index 0481939feb..473ba5f6c8 100644 --- a/crates/hyperswitch_connectors/src/connectors.rs +++ b/crates/hyperswitch_connectors/src/connectors.rs @@ -1,4 +1,7 @@ +pub mod bambora; +pub mod bitpay; pub mod fiserv; pub mod helcim; +pub mod stax; -pub use self::{fiserv::Fiserv, helcim::Helcim}; +pub use self::{bambora::Bambora, bitpay::Bitpay, fiserv::Fiserv, helcim::Helcim, stax::Stax}; diff --git a/crates/router/src/connector/bambora.rs b/crates/hyperswitch_connectors/src/connectors/bambora.rs similarity index 64% rename from crates/router/src/connector/bambora.rs rename to crates/hyperswitch_connectors/src/connectors/bambora.rs index 684c5ddc1c..4731546b3d 100644 --- a/crates/router/src/connector/bambora.rs +++ b/crates/hyperswitch_connectors/src/connectors/bambora.rs @@ -2,32 +2,54 @@ pub mod transformers; use std::fmt::Debug; -use common_utils::request::RequestContent; -use diesel_models::enums; +use common_enums::enums; +use common_utils::{ + errors::CustomResult, + ext_traits::BytesExt, + request::{Method, Request, RequestBuilder, RequestContent}, +}; use error_stack::{report, ResultExt}; +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}, + CompleteAuthorize, + }, + router_request_types::{ + AccessTokenRequestData, CompleteAuthorizeData, PaymentMethodTokenizationData, + PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, + PaymentsSyncData, RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{ + PaymentsAuthorizeRouterData, PaymentsCancelRouterData, PaymentsCaptureRouterData, + PaymentsCompleteAuthorizeRouterData, PaymentsSyncRouterData, RefundSyncRouterData, + RefundsRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{ + self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorRedirectResponse, + ConnectorValidation, + }, + configs::Connectors, + errors, + events::connector_api_logs::ConnectorEvent, + types::{ + self, PaymentsAuthorizeType, PaymentsCaptureType, PaymentsCompleteAuthorizeType, + PaymentsSyncType, PaymentsVoidType, Response, + }, + webhooks, +}; +use masking::Mask; use transformers as bambora; -use super::utils::RefundsRequestData; use crate::{ - configs::settings, - connector::{utils as connector_utils, utils::to_connector_meta}, - core::{ - errors::{self, CustomResult}, - payments, - }, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorValidation, - }, - types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, Response, - }, - utils::BytesExt, + constants::headers, + types::ResponseRouterData, + utils::{self, RefundsRequestData}, }; #[derive(Debug, Clone)] @@ -53,12 +75,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(), )]; @@ -81,14 +103,14 @@ impl ConnectorCommon for Bambora { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.bambora.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = bambora::BamboraAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; Ok(vec![( @@ -114,7 +136,7 @@ impl ConnectorCommon for Bambora { status_code: res.status_code, code: response.code.to_string(), message: serde_json::to_string(&response.details) - .unwrap_or(crate::consts::NO_ERROR_MESSAGE.to_string()), + .unwrap_or(hyperswitch_interfaces::consts::NO_ERROR_MESSAGE.to_string()), reason: Some(response.message), attempt_status: None, connector_transaction_id: None, @@ -132,49 +154,30 @@ impl ConnectorValidation for Bambora { match capture_method { enums::CaptureMethod::Automatic | enums::CaptureMethod::Manual => Ok(()), enums::CaptureMethod::ManualMultiple | enums::CaptureMethod::Scheduled => Err( - connector_utils::construct_not_implemented_error_report(capture_method, self.id()), + utils::construct_not_implemented_error_report(capture_method, self.id()), ), } } } -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Bambora +impl ConnectorIntegration + for Bambora { // Not Implemented (R) } -impl ConnectorIntegration - for Bambora -{ -} +impl ConnectorIntegration for Bambora {} -impl ConnectorIntegration - for Bambora -{ +impl ConnectorIntegration for Bambora { //TODO: implement sessions flow } -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Bambora -{ +impl ConnectorIntegration for Bambora { 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 Bambora".to_string()) .into(), @@ -182,14 +185,12 @@ impl } } -impl ConnectorIntegration - for Bambora -{ +impl ConnectorIntegration for Bambora { 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) } @@ -199,16 +200,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}{}", self.base_url(connectors), "/v1/payments")) } fn get_request_body( &self, - req: &types::PaymentsAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = bambora::BamboraRouterData::try_from(( &self.get_currency_unit(), @@ -223,20 +224,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 +242,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bambora::BamboraResponse = res .response .parse_struct("PaymentIntentResponse") @@ -256,7 +253,7 @@ impl ConnectorIntegration for Bambora +impl ConnectorIntegration + for Bambora { 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) } @@ -293,10 +286,11 @@ impl fn get_url( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, ) -> CustomResult { - let meta: bambora::BamboraMeta = to_connector_meta(req.request.connector_meta.clone())?; + let meta: bambora::BamboraMeta = + utils::to_connector_meta(req.request.connector_meta.clone())?; Ok(format!( "{}/v1/payments/{}{}", self.base_url(connectors), @@ -307,8 +301,8 @@ impl fn get_request_body( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsCompleteAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = bambora::BamboraThreedsContinueRequest::try_from(&req.request)?; @@ -317,18 +311,19 @@ impl fn build_request( &self, - req: &types::PaymentsCompleteAuthorizeRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) - .url(&types::PaymentsCompleteAuthorizeType::get_url( + req: &PaymentsCompleteAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) + .url(&PaymentsCompleteAuthorizeType::get_url( self, req, connectors, )?) - .headers(types::PaymentsCompleteAuthorizeType::get_headers( + .attach_default_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(); @@ -337,10 +332,10 @@ impl fn handle_response( &self, - data: &types::PaymentsCompleteAuthorizeRouterData, + data: &PaymentsCompleteAuthorizeRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bambora::BamboraPaymentsResponse = res .response .parse_struct("BamboraPaymentsResponse") @@ -348,7 +343,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, @@ -365,14 +360,12 @@ impl } } -impl ConnectorIntegration - for Bambora -{ +impl ConnectorIntegration for Bambora { 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) } @@ -382,8 +375,8 @@ impl ConnectorIntegration CustomResult { let connector_payment_id = req .request @@ -398,15 +391,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(), )) } @@ -421,10 +414,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bambora::BamboraPaymentsResponse = res .response .parse_struct("bambora PaymentsResponse") @@ -433,7 +426,7 @@ impl ConnectorIntegration - for Bambora -{ +impl ConnectorIntegration for Bambora { 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) } @@ -459,8 +450,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}/v1/payments/{}/completions", @@ -471,8 +462,8 @@ impl ConnectorIntegration CustomResult { let connector_router_data = bambora::BamboraRouterData::try_from(( &self.get_currency_unit(), @@ -488,17 +479,15 @@ 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, - )?) + .headers(PaymentsCaptureType::get_headers(self, req, connectors)?) .set_body(self.get_request_body(req, connectors)?) .build(), )) @@ -506,10 +495,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bambora::BamboraPaymentsResponse = res .response .parse_struct("Bambora PaymentsResponse") @@ -518,7 +507,7 @@ impl ConnectorIntegration - for Bambora -{ +impl ConnectorIntegration for Bambora { 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) } @@ -552,8 +539,8 @@ impl ConnectorIntegration CustomResult { let connector_payment_id = req.request.connector_transaction_id.clone(); Ok(format!( @@ -565,8 +552,8 @@ impl ConnectorIntegration CustomResult { let connector_router_data = bambora::BamboraRouterData::try_from(( &self.get_currency_unit(), @@ -590,15 +577,15 @@ 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)?) + .headers(PaymentsVoidType::get_headers(self, req, connectors)?) .set_body(self.get_request_body(req, connectors)?) .build(), )) @@ -606,10 +593,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bambora::BamboraPaymentsResponse = res .response .parse_struct("bambora PaymentsResponse") @@ -618,7 +605,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) } } } } -impl ConnectorIntegration - for Bambora -{ +impl ConnectorIntegration for Bambora { 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) } @@ -669,8 +654,8 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { let connector_payment_id = req.request.connector_transaction_id.clone(); Ok(format!( @@ -682,8 +667,8 @@ impl ConnectorIntegration, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = bambora::BamboraRouterData::try_from(( &self.get_currency_unit(), @@ -697,11 +682,11 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) .url(&types::RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundExecuteType::get_headers( @@ -716,10 +701,10 @@ impl ConnectorIntegration, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: bambora::RefundResponse = res .response .parse_struct("bambora RefundResponse") @@ -728,7 +713,7 @@ impl ConnectorIntegration for Bambora { +impl ConnectorIntegration for Bambora { 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) } @@ -760,8 +745,8 @@ impl ConnectorIntegration CustomResult { let _connector_payment_id = req.request.connector_transaction_id.clone(); let connector_refund_id = req.request.get_connector_refund_id()?; @@ -774,12 +759,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) + RequestBuilder::new() + .method(Method::Get) .url(&types::RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundSyncType::get_headers(self, req, connectors)?) @@ -789,10 +774,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bambora::RefundResponse = res .response .parse_struct("bambora RefundResponse") @@ -801,7 +786,7 @@ impl ConnectorIntegration, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult { Err(report!(errors::ConnectorError::WebhooksNotImplemented)) } fn get_webhook_event_type( &self, - _request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { - Ok(api::IncomingWebhookEvent::EventNotSupported) + _request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { + Ok(api_models::webhooks::IncomingWebhookEvent::EventNotSupported) } 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/bambora/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs similarity index 79% rename from crates/router/src/connector/bambora/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs index b2e9b1a032..bfa2da851f 100644 --- a/crates/router/src/connector/bambora/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/bambora/transformers.rs @@ -1,19 +1,29 @@ use base64::Engine; +use common_enums::enums; use common_utils::{ext_traits::ValueExt, pii::IpAddress}; use error_stack::ResultExt; +use hyperswitch_domain_models::{ + payment_method_data::PaymentMethodData, + router_data::{ConnectorAuthType, RouterData}, + router_flow_types::refunds::{Execute, RSync}, + router_request_types::{ + CompleteAuthorizeData, PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, + PaymentsSyncData, ResponseId, + }, + router_response_types::{PaymentsResponseData, RedirectForm, RefundsResponseData}, + types, +}; +use hyperswitch_interfaces::{api, errors}; use masking::{ExposeInterface, PeekInterface, Secret}; use serde::{Deserialize, Deserializer, Serialize}; use crate::{ - connector::utils::{ - self, AddressDetailsData, BrowserInformationData, CardData as OtherCardData, + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::{ + self, AddressDetailsData, BrowserInformationData, CardData as _, PaymentsAuthorizeRequestData, PaymentsCompleteAuthorizeRequestData, - PaymentsSyncRequestData, RouterData, + PaymentsSyncRequestData, RouterData as _, }, - consts, - core::errors, - services, - types::{self, api, domain, storage::enums}, }; pub struct BamboraRouterData { @@ -109,9 +119,9 @@ fn get_browser_info( } } -impl TryFrom<&types::CompleteAuthorizeData> for BamboraThreedsContinueRequest { +impl TryFrom<&CompleteAuthorizeData> for BamboraThreedsContinueRequest { type Error = error_stack::Report; - fn try_from(value: &types::CompleteAuthorizeData) -> Result { + fn try_from(value: &CompleteAuthorizeData) -> Result { let card_response: CardResponse = value .redirect_response .as_ref() @@ -135,7 +145,7 @@ impl TryFrom> for Bambora item: BamboraRouterData<&types::PaymentsAuthorizeRouterData>, ) -> Result { match item.router_data.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(req_card) => { + PaymentMethodData::Card(req_card) => { let (three_ds, customer_ip) = match item.router_data.auth_type { enums::AuthenticationType::ThreeDs => ( Some(ThreeDSecure { @@ -172,26 +182,24 @@ impl TryFrom> for Bambora term_url: item.router_data.request.complete_authorize_url.clone(), }) } - 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::Upi(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { - Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("bambora"), - ) - .into()) - } + PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankDebit(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("bambora"), + ) + .into()), } } } @@ -211,12 +219,15 @@ pub struct BamboraAuthType { pub(super) api_key: Secret, } -impl TryFrom<&types::ConnectorAuthType> for BamboraAuthType { +impl TryFrom<&ConnectorAuthType> for BamboraAuthType { 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 { let auth_key = format!("{}:{}", key1.peek(), api_key.peek()); - let auth_header = format!("Passcode {}", consts::BASE64_ENGINE.encode(auth_key)); + let auth_header = format!( + "Passcode {}", + common_utils::consts::BASE64_ENGINE.encode(auth_key) + ); Ok(Self { api_key: Secret::new(auth_header), }) @@ -407,24 +418,12 @@ impl TryFrom> } } -impl - TryFrom< - types::ResponseRouterData< - F, - BamboraResponse, - types::PaymentsAuthorizeData, - types::PaymentsResponseData, - >, - > for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< - F, - BamboraResponse, - types::PaymentsAuthorizeData, - types::PaymentsResponseData, - >, + item: ResponseRouterData, ) -> Result { match item.response { BamboraResponse::NormalTransaction(pg_response) => Ok(Self { @@ -439,10 +438,8 @@ impl false => enums::AttemptStatus::AuthorizationFailed, } }, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - pg_response.id.to_string(), - ), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(pg_response.id.to_string()), redirection_data: None, mandate_reference: None, connector_metadata: None, @@ -458,11 +455,11 @@ impl let value = url::form_urlencoded::parse(response.contents.as_bytes()) .map(|(key, val)| [key, val].concat()) .collect(); - let redirection_data = Some(services::RedirectForm::Html { html_data: value }); + let redirection_data = Some(RedirectForm::Html { html_data: value }); Ok(Self { status: enums::AttemptStatus::AuthenticationPending, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::NoResponseId, + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::NoResponseId, redirection_data, mandate_reference: None, connector_metadata: Some( @@ -487,21 +484,16 @@ impl impl TryFrom< - types::ResponseRouterData< - F, - BamboraPaymentsResponse, - types::CompleteAuthorizeData, - types::PaymentsResponseData, - >, - > for types::RouterData + ResponseRouterData, + > for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< + item: ResponseRouterData< F, BamboraPaymentsResponse, - types::CompleteAuthorizeData, - types::PaymentsResponseData, + CompleteAuthorizeData, + PaymentsResponseData, >, ) -> Result { Ok(Self { @@ -516,10 +508,8 @@ impl false => enums::AttemptStatus::AuthorizationFailed, } }, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - item.response.id.to_string(), - ), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(item.response.id.to_string()), redirection_data: None, mandate_reference: None, connector_metadata: None, @@ -534,22 +524,16 @@ impl } impl - TryFrom< - types::ResponseRouterData< - F, - BamboraPaymentsResponse, - types::PaymentsSyncData, - types::PaymentsResponseData, - >, - > for types::RouterData + TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< + item: ResponseRouterData< F, BamboraPaymentsResponse, - types::PaymentsSyncData, - types::PaymentsResponseData, + PaymentsSyncData, + PaymentsResponseData, >, ) -> Result { Ok(Self { @@ -569,10 +553,8 @@ impl } } }, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - item.response.id.to_string(), - ), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(item.response.id.to_string()), redirection_data: None, mandate_reference: None, connector_metadata: None, @@ -588,21 +570,16 @@ impl impl TryFrom< - types::ResponseRouterData< - F, - BamboraPaymentsResponse, - types::PaymentsCaptureData, - types::PaymentsResponseData, - >, - > for types::RouterData + ResponseRouterData, + > for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< + item: ResponseRouterData< F, BamboraPaymentsResponse, - types::PaymentsCaptureData, - types::PaymentsResponseData, + PaymentsCaptureData, + PaymentsResponseData, >, ) -> Result { Ok(Self { @@ -611,10 +588,8 @@ impl } else { enums::AttemptStatus::Failure }, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - item.response.id.to_string(), - ), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(item.response.id.to_string()), redirection_data: None, mandate_reference: None, connector_metadata: None, @@ -630,21 +605,16 @@ impl impl TryFrom< - types::ResponseRouterData< - F, - BamboraPaymentsResponse, - types::PaymentsCancelData, - types::PaymentsResponseData, - >, - > for types::RouterData + ResponseRouterData, + > for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData< + item: ResponseRouterData< F, BamboraPaymentsResponse, - types::PaymentsCancelData, - types::PaymentsResponseData, + PaymentsCancelData, + PaymentsResponseData, >, ) -> Result { Ok(Self { @@ -653,10 +623,8 @@ impl } else { enums::AttemptStatus::VoidFailed }, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId( - item.response.id.to_string(), - ), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(item.response.id.to_string()), redirection_data: None, mandate_reference: None, connector_metadata: None, @@ -738,12 +706,12 @@ pub struct RefundResponse { pub risk_score: Option, } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_status = if item.response.approved.as_str() == "1" { enums::RefundStatus::Success @@ -751,7 +719,7 @@ impl TryFrom> enums::RefundStatus::Failure }; Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.id.to_string(), refund_status, }), @@ -760,12 +728,10 @@ impl TryFrom> } } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_status = if item.response.approved.as_str() == "1" { enums::RefundStatus::Success @@ -773,7 +739,7 @@ impl TryFrom> enums::RefundStatus::Failure }; Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.id.to_string(), refund_status, }), diff --git a/crates/router/src/connector/bitpay.rs b/crates/hyperswitch_connectors/src/connectors/bitpay.rs similarity index 61% rename from crates/router/src/connector/bitpay.rs rename to crates/hyperswitch_connectors/src/connectors/bitpay.rs index 445324dee3..032b8cf051 100644 --- a/crates/router/src/connector/bitpay.rs +++ b/crates/hyperswitch_connectors/src/connectors/bitpay.rs @@ -1,35 +1,44 @@ pub mod transformers; +use api_models::webhooks::IncomingWebhookEvent; use common_utils::{ - errors::ReportSwitchExt, + errors::{CustomResult, ReportSwitchExt}, ext_traits::ByteSliceExt, - request::RequestContent, + request::{Method, Request, RequestBuilder, RequestContent}, types::{AmountConvertor, MinorUnit, MinorUnitForConnector}, }; use error_stack::ResultExt; -use masking::PeekInterface; +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, + RefundsRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation}, + configs::Connectors, + consts, errors, + events::connector_api_logs::ConnectorEvent, + types::{PaymentsAuthorizeType, PaymentsSyncType, Response}, + webhooks, +}; +use masking::{Mask, PeekInterface}; use transformers as bitpay; use self::bitpay::BitpayWebhookDetails; -use super::utils as connector_utils; -use crate::{ - configs::settings, - consts, - core::errors::{self, CustomResult}, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorValidation, - }, - types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, Response, - }, - utils::BytesExt, -}; +use crate::{constants::headers, types::ResponseRouterData, utils}; #[derive(Clone)] pub struct Bitpay { @@ -57,12 +66,8 @@ impl api::Refund for Bitpay {} impl api::RefundExecute for Bitpay {} impl api::RefundSync for Bitpay {} -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Bitpay +impl ConnectorIntegration + for Bitpay { // Not Implemented (R) } @@ -73,13 +78,13 @@ 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(), - types::PaymentsAuthorizeType::get_content_type(self) + PaymentsAuthorizeType::get_content_type(self) .to_string() .into(), ), @@ -105,14 +110,14 @@ impl ConnectorCommon for Bitpay { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.bitpay.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = bitpay::BitpayAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; Ok(vec![( @@ -147,33 +152,18 @@ impl ConnectorCommon for Bitpay { impl ConnectorValidation for Bitpay {} -impl ConnectorIntegration - for Bitpay -{ +impl ConnectorIntegration for Bitpay { //TODO: implement sessions flow } -impl ConnectorIntegration - for Bitpay -{ -} +impl ConnectorIntegration for Bitpay {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Bitpay -{ +impl ConnectorIntegration for Bitpay { 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 Bitpay".to_string()) .into(), @@ -181,14 +171,12 @@ impl } } -impl ConnectorIntegration - for Bitpay -{ +impl ConnectorIntegration for Bitpay { 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) } @@ -198,18 +186,18 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}/invoices", 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( + let amount = utils::convert_amount( self.amount_converter, req.request.minor_amount, req.request.currency, @@ -223,20 +211,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,17 +229,17 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: bitpay::BitpayPaymentsResponse = res .response .parse_struct("Bitpay PaymentsAuthorizeResponse") .switch()?; 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,14 +255,12 @@ impl ConnectorIntegration - for Bitpay -{ +impl ConnectorIntegration for Bitpay { 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) } @@ -288,8 +270,8 @@ impl ConnectorIntegration CustomResult { let auth = bitpay::BitpayAuthType::try_from(&req.connector_auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; @@ -308,32 +290,32 @@ 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: bitpay::BitpayPaymentsResponse = res .response .parse_struct("bitpay PaymentsSyncResponse") .switch()?; 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, @@ -349,14 +331,12 @@ impl ConnectorIntegration - for Bitpay -{ +impl ConnectorIntegration for Bitpay { 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: "Bitpay".to_string(), @@ -365,17 +345,14 @@ impl ConnectorIntegration - for Bitpay -{ -} +impl ConnectorIntegration for Bitpay {} -impl ConnectorIntegration for Bitpay { +impl ConnectorIntegration for Bitpay { 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(), @@ -383,16 +360,16 @@ impl ConnectorIntegration for Bitpay { +impl ConnectorIntegration for Bitpay { // default implementation of build_request method will be executed } #[async_trait::async_trait] -impl api::IncomingWebhook for Bitpay { +impl webhooks::IncomingWebhook for Bitpay { fn get_webhook_object_reference_id( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let notif: BitpayWebhookDetails = request .body .parse_struct("BitpayWebhookDetails") @@ -404,33 +381,29 @@ impl api::IncomingWebhook for Bitpay { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let notif: BitpayWebhookDetails = request .body .parse_struct("BitpayWebhookDetails") .change_context(errors::ConnectorError::WebhookEventTypeNotFound)?; match notif.event.name { bitpay::WebhookEventType::Confirmed | bitpay::WebhookEventType::Completed => { - Ok(api::IncomingWebhookEvent::PaymentIntentSuccess) - } - bitpay::WebhookEventType::Paid => { - Ok(api::IncomingWebhookEvent::PaymentIntentProcessing) - } - bitpay::WebhookEventType::Declined => { - Ok(api::IncomingWebhookEvent::PaymentIntentFailure) + Ok(IncomingWebhookEvent::PaymentIntentSuccess) } + bitpay::WebhookEventType::Paid => Ok(IncomingWebhookEvent::PaymentIntentProcessing), + bitpay::WebhookEventType::Declined => Ok(IncomingWebhookEvent::PaymentIntentFailure), bitpay::WebhookEventType::Unknown | bitpay::WebhookEventType::Expired | bitpay::WebhookEventType::Invalid | bitpay::WebhookEventType::Refunded - | bitpay::WebhookEventType::Resent => Ok(api::IncomingWebhookEvent::EventNotSupported), + | bitpay::WebhookEventType::Resent => Ok(IncomingWebhookEvent::EventNotSupported), } } fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let notif: BitpayWebhookDetails = request .body diff --git a/crates/router/src/connector/bitpay/transformers.rs b/crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs similarity index 85% rename from crates/router/src/connector/bitpay/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs index ffce669dca..1c42bfd08c 100644 --- a/crates/router/src/connector/bitpay/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/bitpay/transformers.rs @@ -1,13 +1,19 @@ -use common_utils::types::MinorUnit; +use common_enums::enums; +use common_utils::{request::Method, types::MinorUnit}; +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, +}; +use hyperswitch_interfaces::errors; use masking::Secret; -use reqwest::Url; use serde::{Deserialize, Serialize}; use crate::{ - connector::utils::PaymentsAuthorizeRequestData, - core::errors, - services, - types::{self, api, storage::enums, ConnectorAuthType}, + types::{RefundsResponseRouterData, ResponseRouterData}, + utils::PaymentsAuthorizeRequestData, }; #[derive(Debug, Serialize)] @@ -109,7 +115,7 @@ pub enum ExceptionStatus { #[derive(Default, Debug, Clone, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct BitpayPaymentResponseData { - pub url: Option, + pub url: Option, pub status: BitpayPaymentStatus, pub price: MinorUnit, pub currency: String, @@ -135,24 +141,23 @@ pub struct BitpayPaymentsResponse { facade: Option, } -impl - TryFrom> - for types::RouterData +impl TryFrom> + for RouterData { type Error = error_stack::Report; fn try_from( - item: types::ResponseRouterData, + item: ResponseRouterData, ) -> Result { let redirection_data = item .response .data .url - .map(|x| services::RedirectForm::from((x, services::Method::Get))); - let connector_id = types::ResponseId::ConnectorTransactionId(item.response.data.id.clone()); + .map(|x| RedirectForm::from((x, Method::Get))); + let connector_id = ResponseId::ConnectorTransactionId(item.response.data.id.clone()); let attempt_status = item.response.data.status; Ok(Self { status: enums::AttemptStatus::from(attempt_status), - response: Ok(types::PaymentsResponseData::TransactionResponse { + response: Ok(PaymentsResponseData::TransactionResponse { resource_id: connector_id, redirection_data, mandate_reference: None, @@ -218,15 +223,15 @@ pub struct RefundResponse { status: RefundStatus, } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::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), }), @@ -235,15 +240,13 @@ impl TryFrom> } } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for types::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/stax.rs b/crates/hyperswitch_connectors/src/connectors/stax.rs similarity index 69% rename from crates/router/src/connector/stax.rs rename to crates/hyperswitch_connectors/src/connectors/stax.rs index 8524a19309..8ca847327a 100644 --- a/crates/router/src/connector/stax.rs +++ b/crates/hyperswitch_connectors/src/connectors/stax.rs @@ -2,33 +2,53 @@ pub mod transformers; use std::fmt::Debug; -use common_utils::{ext_traits::ByteSliceExt, request::RequestContent}; -use diesel_models::enums; +use api_models::webhooks::IncomingWebhookEvent; +use common_enums::enums; +use common_utils::{ + errors::CustomResult, + ext_traits::ByteSliceExt, + request::{Method, Request, RequestBuilder, RequestContent}, +}; use error_stack::ResultExt; -use masking::{PeekInterface, Secret}; +use hyperswitch_domain_models::{ + router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, + router_flow_types::{ + access_token_auth::AccessTokenAuth, + payments::{ + Authorize, Capture, CreateConnectorCustomer, PSync, PaymentMethodToken, Session, + SetupMandate, Void, + }, + refunds::{Execute, RSync}, + }, + router_request_types::{ + AccessTokenRequestData, ConnectorCustomerData, PaymentMethodTokenizationData, + PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSessionData, + PaymentsSyncData, RefundsData, SetupMandateRequestData, + }, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types::{ + ConnectorCustomerRouterData, PaymentsAuthorizeRouterData, PaymentsCancelRouterData, + PaymentsCaptureRouterData, PaymentsSyncRouterData, RefundSyncRouterData, RefundsRouterData, + TokenizationRouterData, + }, +}; +use hyperswitch_interfaces::{ + api::{self, ConnectorCommon, ConnectorCommonExt, ConnectorIntegration, ConnectorValidation}, + configs::Connectors, + consts, errors, + events::connector_api_logs::ConnectorEvent, + types::{self, Response}, + webhooks, +}; +use masking::{Mask, PeekInterface, Secret}; use transformers as stax; use self::stax::StaxWebhookEventType; -use super::utils::{self as connector_utils, to_connector_meta, RefundsRequestData}; use crate::{ - configs::settings, - consts, - core::errors::{self, CustomResult}, - events::connector_api_logs::ConnectorEvent, - headers, - services::{ - self, - request::{self, Mask}, - ConnectorIntegration, ConnectorValidation, - }, - types::{ - self, - api::{self, ConnectorCommon, ConnectorCommonExt}, - ErrorResponse, Response, - }, - utils::BytesExt, + constants::headers, + types::ResponseRouterData, + utils::{self, RefundsRequestData}, }; - #[derive(Debug, Clone)] pub struct Stax; @@ -51,9 +71,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(), types::PaymentsAuthorizeType::get_content_type(self) @@ -79,14 +99,14 @@ impl ConnectorCommon for Stax { "application/json" } - fn base_url<'a>(&self, connectors: &'a settings::Connectors) -> &'a str { + fn base_url<'a>(&self, connectors: &'a Connectors) -> &'a str { connectors.stax.base_url.as_ref() } fn get_auth_header( &self, - auth_type: &types::ConnectorAuthType, - ) -> CustomResult)>, errors::ConnectorError> { + auth_type: &ConnectorAuthType, + ) -> CustomResult)>, errors::ConnectorError> { let auth = stax::StaxAuthType::try_from(auth_type) .change_context(errors::ConnectorError::FailedToObtainAuthType)?; @@ -126,7 +146,7 @@ impl ConnectorValidation for Stax { match capture_method { enums::CaptureMethod::Automatic | enums::CaptureMethod::Manual => 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()), ), } } @@ -134,18 +154,14 @@ impl ConnectorValidation for Stax { impl api::ConnectorCustomer for Stax {} -impl - ConnectorIntegration< - api::CreateConnectorCustomer, - types::ConnectorCustomerData, - types::PaymentsResponseData, - > for Stax +impl ConnectorIntegration + for Stax { fn get_headers( &self, - req: &types::ConnectorCustomerRouterData, - connectors: &settings::Connectors, - ) -> CustomResult)>, errors::ConnectorError> { + req: &ConnectorCustomerRouterData, + connectors: &Connectors, + ) -> CustomResult)>, errors::ConnectorError> { self.build_headers(req, connectors) } @@ -155,16 +171,16 @@ impl fn get_url( &self, - _req: &types::ConnectorCustomerRouterData, - connectors: &settings::Connectors, + _req: &ConnectorCustomerRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}customer", self.base_url(connectors),)) } fn get_request_body( &self, - req: &types::ConnectorCustomerRouterData, - _connectors: &settings::Connectors, + req: &ConnectorCustomerRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = stax::StaxCustomerRequest::try_from(req)?; @@ -173,12 +189,12 @@ impl fn build_request( &self, - req: &types::ConnectorCustomerRouterData, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { + req: &ConnectorCustomerRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::ConnectorCustomerType::get_url( self, req, connectors, )?) @@ -195,12 +211,12 @@ impl fn handle_response( &self, - data: &types::ConnectorCustomerRouterData, + data: &ConnectorCustomerRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult + ) -> CustomResult where - types::PaymentsResponseData: Clone, + PaymentsResponseData: Clone, { let response: stax::StaxCustomerResponse = res .response @@ -210,7 +226,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, @@ -226,18 +242,14 @@ impl } } -impl - ConnectorIntegration< - api::PaymentMethodToken, - types::PaymentMethodTokenizationData, - types::PaymentsResponseData, - > for Stax +impl ConnectorIntegration + for Stax { 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) } @@ -247,16 +259,16 @@ impl fn get_url( &self, - _req: &types::TokenizationRouterData, - connectors: &settings::Connectors, + _req: &TokenizationRouterData, + connectors: &Connectors, ) -> CustomResult { Ok(format!("{}payment-method/", self.base_url(connectors))) } fn get_request_body( &self, - req: &types::TokenizationRouterData, - _connectors: &settings::Connectors, + req: &TokenizationRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_req = stax::StaxTokenRequest::try_from(req)?; @@ -265,12 +277,12 @@ 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) + RequestBuilder::new() + .method(Method::Post) .url(&types::TokenizationType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::TokenizationType::get_headers(self, req, connectors)?) @@ -283,12 +295,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: stax::StaxTokenResponse = res .response @@ -298,7 +310,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, @@ -314,33 +326,18 @@ impl } } -impl ConnectorIntegration - for Stax -{ +impl ConnectorIntegration for Stax { //TODO: implement sessions flow } -impl ConnectorIntegration - for Stax -{ -} +impl ConnectorIntegration for Stax {} -impl - ConnectorIntegration< - api::SetupMandate, - types::SetupMandateRequestData, - types::PaymentsResponseData, - > for Stax -{ +impl ConnectorIntegration for Stax { 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 Stax".to_string()) .into(), @@ -348,14 +345,12 @@ impl } } -impl ConnectorIntegration - for Stax -{ +impl ConnectorIntegration for Stax { 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) } @@ -365,16 +360,16 @@ impl ConnectorIntegration CustomResult { Ok(format!("{}charge", self.base_url(connectors),)) } fn get_request_body( &self, - req: &types::PaymentsAuthorizeRouterData, - _connectors: &settings::Connectors, + req: &PaymentsAuthorizeRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = stax::StaxRouterData::try_from(( &self.get_currency_unit(), @@ -389,12 +384,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsAuthorizeRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsAuthorizeType::get_url( self, req, connectors, )?) @@ -411,10 +406,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: stax::StaxPaymentsResponse = res .response .parse_struct("StaxPaymentsAuthorizeResponse") @@ -423,7 +418,7 @@ impl ConnectorIntegration - for Stax -{ +impl ConnectorIntegration for Stax { 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) } @@ -456,8 +449,8 @@ impl ConnectorIntegration CustomResult { let connector_payment_id = req .request @@ -473,12 +466,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) + RequestBuilder::new() + .method(Method::Get) .url(&types::PaymentsSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsSyncType::get_headers(self, req, connectors)?) @@ -488,10 +481,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: stax::StaxPaymentsResponse = res .response .parse_struct("StaxPaymentsSyncResponse") @@ -500,7 +493,7 @@ impl ConnectorIntegration - for Stax -{ +impl ConnectorIntegration for Stax { 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) } @@ -533,8 +524,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}/transaction/{}/capture", @@ -545,8 +536,8 @@ impl ConnectorIntegration CustomResult { let connector_router_data = stax::StaxRouterData::try_from(( &self.get_currency_unit(), @@ -560,12 +551,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCaptureRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsCaptureType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsCaptureType::get_headers( @@ -580,10 +571,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: stax::StaxPaymentsResponse = res .response .parse_struct("StaxPaymentsCaptureResponse") @@ -592,7 +583,7 @@ impl ConnectorIntegration - for Stax -{ +impl ConnectorIntegration for Stax { 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) } @@ -625,8 +614,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}/transaction/{}/void-or-refund", @@ -637,12 +626,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &PaymentsCancelRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Post) + RequestBuilder::new() + .method(Method::Post) .url(&types::PaymentsVoidType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::PaymentsVoidType::get_headers(self, req, connectors)?) @@ -652,10 +641,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: stax::StaxPaymentsResponse = res .response .parse_struct("StaxPaymentsVoidResponse") @@ -664,7 +653,7 @@ impl ConnectorIntegration for Stax { +impl ConnectorIntegration for Stax { 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) } @@ -695,12 +684,12 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, + req: &RefundsRouterData, + connectors: &Connectors, ) -> CustomResult { let connector_transaction_id = if req.request.connector_metadata.is_some() { let stax_capture: stax::StaxMetaData = - to_connector_meta(req.request.connector_metadata.clone())?; + utils::to_connector_meta(req.request.connector_metadata.clone())?; stax_capture.capture_id } else { req.request.connector_transaction_id.clone() @@ -715,8 +704,8 @@ impl ConnectorIntegration, - _connectors: &settings::Connectors, + req: &RefundsRouterData, + _connectors: &Connectors, ) -> CustomResult { let connector_router_data = stax::StaxRouterData::try_from(( &self.get_currency_unit(), @@ -730,11 +719,11 @@ impl ConnectorIntegration, - connectors: &settings::Connectors, - ) -> CustomResult, errors::ConnectorError> { - let request = services::RequestBuilder::new() - .method(services::Method::Post) + req: &RefundsRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { + let request = RequestBuilder::new() + .method(Method::Post) .url(&types::RefundExecuteType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundExecuteType::get_headers( @@ -749,10 +738,10 @@ impl ConnectorIntegration, + data: &RefundsRouterData, event_builder: Option<&mut ConnectorEvent>, res: Response, - ) -> CustomResult, errors::ConnectorError> { + ) -> CustomResult, errors::ConnectorError> { let response: stax::RefundResponse = res .response .parse_struct("StaxRefundResponse") @@ -761,7 +750,7 @@ impl ConnectorIntegration for Stax { +impl ConnectorIntegration for Stax { 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) } @@ -792,8 +781,8 @@ impl ConnectorIntegration CustomResult { Ok(format!( "{}/transaction/{}", @@ -804,12 +793,12 @@ impl ConnectorIntegration CustomResult, errors::ConnectorError> { + req: &RefundSyncRouterData, + connectors: &Connectors, + ) -> CustomResult, errors::ConnectorError> { Ok(Some( - services::RequestBuilder::new() - .method(services::Method::Get) + RequestBuilder::new() + .method(Method::Get) .url(&types::RefundSyncType::get_url(self, req, connectors)?) .attach_default_headers() .headers(types::RefundSyncType::get_headers(self, req, connectors)?) @@ -819,10 +808,10 @@ impl ConnectorIntegration, res: Response, - ) -> CustomResult { + ) -> CustomResult { let response: stax::RefundResponse = res .response .parse_struct("StaxRefundSyncResponse") @@ -831,7 +820,7 @@ impl ConnectorIntegration, + _request: &webhooks::IncomingWebhookRequestDetails<'_>, _merchant_id: &common_utils::id_type::MerchantId, _connector_webhook_details: Option, _connector_account_details: common_utils::crypto::Encryptable>, @@ -862,8 +851,8 @@ impl api::IncomingWebhook for Stax { fn get_webhook_object_reference_id( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let webhook_body: stax::StaxWebhookBody = request .body .parse_struct("StaxWebhookBody") @@ -894,8 +883,8 @@ impl api::IncomingWebhook for Stax { fn get_webhook_event_type( &self, - request: &api::IncomingWebhookRequestDetails<'_>, - ) -> CustomResult { + request: &webhooks::IncomingWebhookRequestDetails<'_>, + ) -> CustomResult { let details: stax::StaxWebhookBody = request .body .parse_struct("StaxWebhookEventType") @@ -903,24 +892,24 @@ impl api::IncomingWebhook for Stax { Ok(match &details.transaction_type { StaxWebhookEventType::Refund => match &details.success { - true => api::IncomingWebhookEvent::RefundSuccess, - false => api::IncomingWebhookEvent::RefundFailure, + true => IncomingWebhookEvent::RefundSuccess, + false => IncomingWebhookEvent::RefundFailure, }, StaxWebhookEventType::Capture | StaxWebhookEventType::Charge => { match &details.success { - true => api::IncomingWebhookEvent::PaymentIntentSuccess, - false => api::IncomingWebhookEvent::PaymentIntentFailure, + true => IncomingWebhookEvent::PaymentIntentSuccess, + false => IncomingWebhookEvent::PaymentIntentFailure, } } StaxWebhookEventType::PreAuth | StaxWebhookEventType::Void - | StaxWebhookEventType::Unknown => api::IncomingWebhookEvent::EventNotSupported, + | StaxWebhookEventType::Unknown => IncomingWebhookEvent::EventNotSupported, }) } fn get_webhook_resource_object( &self, - request: &api::IncomingWebhookRequestDetails<'_>, + request: &webhooks::IncomingWebhookRequestDetails<'_>, ) -> CustomResult, errors::ConnectorError> { let reference_object: serde_json::Value = serde_json::from_slice(request.body) .change_context(errors::ConnectorError::WebhookResourceObjectNotFound)?; diff --git a/crates/router/src/connector/stax/transformers.rs b/crates/hyperswitch_connectors/src/connectors/stax/transformers.rs similarity index 73% rename from crates/router/src/connector/stax/transformers.rs rename to crates/hyperswitch_connectors/src/connectors/stax/transformers.rs index d814deef26..8c767e848d 100644 --- a/crates/router/src/connector/stax/transformers.rs +++ b/crates/hyperswitch_connectors/src/connectors/stax/transformers.rs @@ -1,15 +1,25 @@ +use common_enums::enums; use common_utils::pii::Email; use error_stack::ResultExt; +use hyperswitch_domain_models::{ + payment_method_data::{BankDebitData, PaymentMethodData}, + router_data::{ConnectorAuthType, PaymentMethodToken, RouterData}, + router_flow_types::refunds::{Execute, RSync}, + router_request_types::ResponseId, + router_response_types::{PaymentsResponseData, RefundsResponseData}, + types, +}; +use hyperswitch_interfaces::{api, errors}; use masking::{ExposeInterface, Secret}; use serde::{Deserialize, Serialize}; use crate::{ - connector::utils::{ - self, missing_field_err, CardData, PaymentsAuthorizeRequestData, RouterData, - }, - core::errors, - types::{self, api, domain, storage::enums}, + types::{RefundsResponseRouterData, ResponseRouterData}, unimplemented_payment_method, + utils::{ + self, missing_field_err, CardData as CardDataUtil, PaymentsAuthorizeRequestData, + RouterData as _, + }, }; #[derive(Debug, Serialize)] @@ -59,7 +69,7 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme let total = item.amount; match item.router_data.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(_) => { + PaymentMethodData::Card(_) => { let pm_token = item.router_data.get_payment_method_token()?; let pre_auth = !item.router_data.request.is_auto_capture()?; Ok(Self { @@ -68,17 +78,15 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme is_refundable: true, pre_auth, payment_method_id: match pm_token { - types::PaymentMethodToken::Token(token) => token, - types::PaymentMethodToken::ApplePayDecrypt(_) => Err( + PaymentMethodToken::Token(token) => token, + PaymentMethodToken::ApplePayDecrypt(_) => Err( unimplemented_payment_method!("Apple Pay", "Simplified", "Stax"), )?, }, idempotency_id: Some(item.router_data.connector_request_reference_id.clone()), }) } - domain::PaymentMethodData::BankDebit(domain::BankDebitData::AchBankDebit { - .. - }) => { + PaymentMethodData::BankDebit(BankDebitData::AchBankDebit { .. }) => { let pm_token = item.router_data.get_payment_method_token()?; let pre_auth = !item.router_data.request.is_auto_capture()?; Ok(Self { @@ -87,33 +95,31 @@ impl TryFrom<&StaxRouterData<&types::PaymentsAuthorizeRouterData>> for StaxPayme is_refundable: true, pre_auth, payment_method_id: match pm_token { - types::PaymentMethodToken::Token(token) => token, - types::PaymentMethodToken::ApplePayDecrypt(_) => Err( + PaymentMethodToken::Token(token) => token, + PaymentMethodToken::ApplePayDecrypt(_) => Err( unimplemented_payment_method!("Apple Pay", "Simplified", "Stax"), )?, }, idempotency_id: Some(item.router_data.connector_request_reference_id.clone()), }) } - domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { - Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Stax"), - ))? - } + PaymentMethodData::BankDebit(_) + | PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Stax"), + ))?, } } } @@ -123,11 +129,11 @@ pub struct StaxAuthType { pub(super) api_key: Secret, } -impl TryFrom<&types::ConnectorAuthType> for StaxAuthType { +impl TryFrom<&ConnectorAuthType> for StaxAuthType { 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()), @@ -165,16 +171,15 @@ pub struct StaxCustomerResponse { id: 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::ConnectorCustomerResponse { + response: Ok(PaymentsResponseData::ConnectorCustomerResponse { connector_customer_id: item.response.id.expose(), }), ..item.data @@ -215,7 +220,7 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest { fn try_from(item: &types::TokenizationRouterData) -> Result { let customer_id = item.get_connector_customer_id()?; match item.request.payment_method_data.clone() { - domain::PaymentMethodData::Card(card_data) => { + PaymentMethodData::Card(card_data) => { let stax_card_data = StaxTokenizeData { card_exp: card_data .get_card_expiry_month_year_2_digit_with_delimiter("".to_string())?, @@ -228,7 +233,7 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest { }; Ok(Self::Card(stax_card_data)) } - domain::PaymentMethodData::BankDebit(domain::BankDebitData::AchBankDebit { + PaymentMethodData::BankDebit(BankDebitData::AchBankDebit { account_number, routing_number, bank_name, @@ -248,25 +253,23 @@ impl TryFrom<&types::TokenizationRouterData> for StaxTokenRequest { }; Ok(Self::Bank(stax_bank_data)) } - domain::PaymentMethodData::BankDebit(_) - | domain::PaymentMethodData::Wallet(_) - | domain::PaymentMethodData::PayLater(_) - | domain::PaymentMethodData::BankRedirect(_) - | domain::PaymentMethodData::BankTransfer(_) - | domain::PaymentMethodData::Crypto(_) - | domain::PaymentMethodData::MandatePayment - | domain::PaymentMethodData::Reward - | domain::PaymentMethodData::RealTimePayment(_) - | domain::PaymentMethodData::Voucher(_) - | domain::PaymentMethodData::GiftCard(_) - | domain::PaymentMethodData::CardRedirect(_) - | domain::PaymentMethodData::Upi(_) - | domain::PaymentMethodData::OpenBanking(_) - | domain::PaymentMethodData::CardToken(_) => { - Err(errors::ConnectorError::NotImplemented( - utils::get_unimplemented_payment_method_error_message("Stax"), - ))? - } + PaymentMethodData::BankDebit(_) + | PaymentMethodData::Wallet(_) + | PaymentMethodData::PayLater(_) + | PaymentMethodData::BankRedirect(_) + | PaymentMethodData::BankTransfer(_) + | PaymentMethodData::Crypto(_) + | PaymentMethodData::MandatePayment + | PaymentMethodData::Reward + | PaymentMethodData::RealTimePayment(_) + | PaymentMethodData::Voucher(_) + | PaymentMethodData::GiftCard(_) + | PaymentMethodData::CardRedirect(_) + | PaymentMethodData::Upi(_) + | PaymentMethodData::OpenBanking(_) + | PaymentMethodData::CardToken(_) => Err(errors::ConnectorError::NotImplemented( + utils::get_unimplemented_payment_method_error_message("Stax"), + ))?, } } } @@ -276,15 +279,15 @@ pub struct StaxTokenResponse { id: 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.id.expose(), }), ..item.data @@ -321,13 +324,12 @@ pub struct StaxMetaData { pub capture_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 { let mut connector_metadata = None; let mut status = match item.response.success { @@ -354,8 +356,8 @@ impl Ok(Self { status, - response: Ok(types::PaymentsResponseData::TransactionResponse { - resource_id: types::ResponseId::ConnectorTransactionId(item.response.id.clone()), + response: Ok(PaymentsResponseData::TransactionResponse { + resource_id: ResponseId::ConnectorTransactionId(item.response.id.clone()), redirection_data: None, mandate_reference: None, connector_metadata, @@ -415,12 +417,12 @@ pub struct RefundResponse { child_transactions: Vec, } -impl TryFrom> - for types::RefundsRouterData +impl TryFrom> + for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_amount = utils::to_currency_base_unit_asf64( item.data.request.refund_amount, @@ -450,7 +452,7 @@ impl TryFrom> }; Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: refund_txn.id.clone(), refund_status, }), @@ -459,19 +461,17 @@ impl TryFrom> } } -impl TryFrom> - for types::RefundsRouterData -{ +impl TryFrom> for types::RefundsRouterData { type Error = error_stack::Report; fn try_from( - item: types::RefundsResponseRouterData, + item: RefundsResponseRouterData, ) -> Result { let refund_status = match item.response.success { true => enums::RefundStatus::Success, false => enums::RefundStatus::Failure, }; Ok(Self { - response: Ok(types::RefundsResponseData { + response: Ok(RefundsResponseData { connector_refund_id: item.response.id, refund_status, }), diff --git a/crates/hyperswitch_connectors/src/constants.rs b/crates/hyperswitch_connectors/src/constants.rs index 8a5a2ff543..a8d0842419 100644 --- a/crates/hyperswitch_connectors/src/constants.rs +++ b/crates/hyperswitch_connectors/src/constants.rs @@ -6,4 +6,5 @@ pub(crate) mod headers { pub(crate) const CONTENT_TYPE: &str = "Content-Type"; pub(crate) const IDEMPOTENCY_KEY: &str = "Idempotency-Key"; pub(crate) const TIMESTAMP: &str = "Timestamp"; + pub(crate) const X_ACCEPT_VERSION: &str = "X-Accept-Version"; } diff --git a/crates/hyperswitch_connectors/src/default_implementations.rs b/crates/hyperswitch_connectors/src/default_implementations.rs index d8e2e12131..dd3f2152cd 100644 --- a/crates/hyperswitch_connectors/src/default_implementations.rs +++ b/crates/hyperswitch_connectors/src/default_implementations.rs @@ -3,6 +3,7 @@ // impl api::PaymentsPreProcessing for Helcim {} // impl api::PaymentReject for Helcim {} // impl api::PaymentApprove for Helcim {} +use common_utils::errors::CustomResult; #[cfg(feature = "frm")] use hyperswitch_domain_models::{ router_flow_types::fraud_check::{Checkout, Fulfillment, RecordReturn, Sale, Transaction}, @@ -55,16 +56,19 @@ use hyperswitch_interfaces::api::payouts::{ PayoutCancel, PayoutCreate, PayoutEligibility, PayoutFulfill, PayoutQuote, PayoutRecipient, PayoutRecipientAccount, PayoutSync, }; -use hyperswitch_interfaces::api::{ - self, - disputes::{AcceptDispute, DefendDispute, Dispute, SubmitEvidence}, - files::{FileUpload, RetrieveFile, UploadFile}, - payments::{ - ConnectorCustomer, PaymentApprove, PaymentAuthorizeSessionToken, - PaymentIncrementalAuthorization, PaymentReject, PaymentsCompleteAuthorize, - PaymentsPostProcessing, PaymentsPreProcessing, +use hyperswitch_interfaces::{ + api::{ + self, + disputes::{AcceptDispute, DefendDispute, Dispute, SubmitEvidence}, + files::{FileUpload, RetrieveFile, UploadFile}, + payments::{ + ConnectorCustomer, PaymentApprove, PaymentAuthorizeSessionToken, + PaymentIncrementalAuthorization, PaymentReject, PaymentsCompleteAuthorize, + PaymentsPostProcessing, PaymentsPreProcessing, + }, + ConnectorIntegration, ConnectorMandateRevoke, ConnectorRedirectResponse, }, - ConnectorIntegration, ConnectorMandateRevoke, + errors::ConnectorError, }; macro_rules! default_imp_for_authorize_session_token { @@ -81,7 +85,13 @@ macro_rules! default_imp_for_authorize_session_token { }; } -default_imp_for_authorize_session_token!(connectors::Fiserv, connectors::Helcim); +default_imp_for_authorize_session_token!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); use crate::connectors; macro_rules! default_imp_for_complete_authorize { @@ -99,7 +109,12 @@ macro_rules! default_imp_for_complete_authorize { }; } -default_imp_for_complete_authorize!(connectors::Fiserv, connectors::Helcim); +default_imp_for_complete_authorize!( + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_incremental_authorization { ($($path:ident::$connector:ident),*) => { @@ -116,7 +131,13 @@ macro_rules! default_imp_for_incremental_authorization { }; } -default_imp_for_incremental_authorization!(connectors::Fiserv, connectors::Helcim); +default_imp_for_incremental_authorization!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_create_customer { ($($path:ident::$connector:ident),*) => { @@ -133,7 +154,36 @@ macro_rules! default_imp_for_create_customer { }; } -default_imp_for_create_customer!(connectors::Fiserv, connectors::Helcim); +default_imp_for_create_customer!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim +); + +macro_rules! default_imp_for_connector_redirect_response { + ($($path:ident::$connector:ident),*) => { + $( + impl ConnectorRedirectResponse for $path::$connector { + fn get_flow_type( + &self, + _query_params: &str, + _json_payload: Option, + _action: common_enums::enums::PaymentAction + ) -> CustomResult { + Ok(common_enums::enums::CallConnectorAction::Trigger) + } + } + )* + }; +} + +default_imp_for_connector_redirect_response!( + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_pre_processing_steps{ ($($path:ident::$connector:ident),*)=> { @@ -150,7 +200,13 @@ macro_rules! default_imp_for_pre_processing_steps{ }; } -default_imp_for_pre_processing_steps!(connectors::Fiserv, connectors::Helcim); +default_imp_for_pre_processing_steps!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_post_processing_steps{ ($($path:ident::$connector:ident),*)=> { @@ -167,7 +223,13 @@ macro_rules! default_imp_for_post_processing_steps{ }; } -default_imp_for_post_processing_steps!(connectors::Fiserv, connectors::Helcim); +default_imp_for_post_processing_steps!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_approve { ($($path:ident::$connector:ident),*) => { @@ -184,7 +246,13 @@ macro_rules! default_imp_for_approve { }; } -default_imp_for_approve!(connectors::Fiserv, connectors::Helcim); +default_imp_for_approve!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_reject { ($($path:ident::$connector:ident),*) => { @@ -201,7 +269,13 @@ macro_rules! default_imp_for_reject { }; } -default_imp_for_reject!(connectors::Fiserv, connectors::Helcim); +default_imp_for_reject!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_webhook_source_verification { ($($path:ident::$connector:ident),*) => { @@ -218,7 +292,13 @@ macro_rules! default_imp_for_webhook_source_verification { }; } -default_imp_for_webhook_source_verification!(connectors::Fiserv, connectors::Helcim); +default_imp_for_webhook_source_verification!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_accept_dispute { ($($path:ident::$connector:ident),*) => { @@ -236,7 +316,13 @@ macro_rules! default_imp_for_accept_dispute { }; } -default_imp_for_accept_dispute!(connectors::Fiserv, connectors::Helcim); +default_imp_for_accept_dispute!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_submit_evidence { ($($path:ident::$connector:ident),*) => { @@ -253,7 +339,13 @@ macro_rules! default_imp_for_submit_evidence { }; } -default_imp_for_submit_evidence!(connectors::Fiserv, connectors::Helcim); +default_imp_for_submit_evidence!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_defend_dispute { ($($path:ident::$connector:ident),*) => { @@ -270,7 +362,13 @@ macro_rules! default_imp_for_defend_dispute { }; } -default_imp_for_defend_dispute!(connectors::Fiserv, connectors::Helcim); +default_imp_for_defend_dispute!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_file_upload { ($($path:ident::$connector:ident),*) => { @@ -296,7 +394,13 @@ macro_rules! default_imp_for_file_upload { }; } -default_imp_for_file_upload!(connectors::Fiserv, connectors::Helcim); +default_imp_for_file_upload!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_payouts_create { @@ -315,7 +419,13 @@ macro_rules! default_imp_for_payouts_create { } #[cfg(feature = "payouts")] -default_imp_for_payouts_create!(connectors::Fiserv, connectors::Helcim); +default_imp_for_payouts_create!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_payouts_retrieve { @@ -334,7 +444,13 @@ macro_rules! default_imp_for_payouts_retrieve { } #[cfg(feature = "payouts")] -default_imp_for_payouts_retrieve!(connectors::Fiserv, connectors::Helcim); +default_imp_for_payouts_retrieve!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_payouts_eligibility { @@ -353,7 +469,13 @@ macro_rules! default_imp_for_payouts_eligibility { } #[cfg(feature = "payouts")] -default_imp_for_payouts_eligibility!(connectors::Fiserv, connectors::Helcim); +default_imp_for_payouts_eligibility!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_payouts_fulfill { @@ -372,7 +494,13 @@ macro_rules! default_imp_for_payouts_fulfill { } #[cfg(feature = "payouts")] -default_imp_for_payouts_fulfill!(connectors::Fiserv, connectors::Helcim); +default_imp_for_payouts_fulfill!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_payouts_cancel { @@ -391,7 +519,13 @@ macro_rules! default_imp_for_payouts_cancel { } #[cfg(feature = "payouts")] -default_imp_for_payouts_cancel!(connectors::Fiserv, connectors::Helcim); +default_imp_for_payouts_cancel!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_payouts_quote { @@ -410,7 +544,13 @@ macro_rules! default_imp_for_payouts_quote { } #[cfg(feature = "payouts")] -default_imp_for_payouts_quote!(connectors::Fiserv, connectors::Helcim); +default_imp_for_payouts_quote!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_payouts_recipient { @@ -429,7 +569,13 @@ macro_rules! default_imp_for_payouts_recipient { } #[cfg(feature = "payouts")] -default_imp_for_payouts_recipient!(connectors::Fiserv, connectors::Helcim); +default_imp_for_payouts_recipient!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_payouts_recipient_account { @@ -448,7 +594,13 @@ macro_rules! default_imp_for_payouts_recipient_account { } #[cfg(feature = "payouts")] -default_imp_for_payouts_recipient_account!(connectors::Fiserv, connectors::Helcim); +default_imp_for_payouts_recipient_account!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_frm_sale { @@ -467,7 +619,13 @@ macro_rules! default_imp_for_frm_sale { } #[cfg(feature = "frm")] -default_imp_for_frm_sale!(connectors::Fiserv, connectors::Helcim); +default_imp_for_frm_sale!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_frm_checkout { @@ -486,7 +644,13 @@ macro_rules! default_imp_for_frm_checkout { } #[cfg(feature = "frm")] -default_imp_for_frm_checkout!(connectors::Fiserv, connectors::Helcim); +default_imp_for_frm_checkout!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_frm_transaction { @@ -505,7 +669,13 @@ macro_rules! default_imp_for_frm_transaction { } #[cfg(feature = "frm")] -default_imp_for_frm_transaction!(connectors::Fiserv, connectors::Helcim); +default_imp_for_frm_transaction!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_frm_fulfillment { @@ -524,7 +694,13 @@ macro_rules! default_imp_for_frm_fulfillment { } #[cfg(feature = "frm")] -default_imp_for_frm_fulfillment!(connectors::Fiserv, connectors::Helcim); +default_imp_for_frm_fulfillment!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_frm_record_return { @@ -543,7 +719,13 @@ macro_rules! default_imp_for_frm_record_return { } #[cfg(feature = "frm")] -default_imp_for_frm_record_return!(connectors::Fiserv, connectors::Helcim); +default_imp_for_frm_record_return!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_revoking_mandates { ($($path:ident::$connector:ident),*) => { @@ -559,4 +741,10 @@ macro_rules! default_imp_for_revoking_mandates { }; } -default_imp_for_revoking_mandates!(connectors::Fiserv, connectors::Helcim); +default_imp_for_revoking_mandates!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); diff --git a/crates/hyperswitch_connectors/src/default_implementations_v2.rs b/crates/hyperswitch_connectors/src/default_implementations_v2.rs index f420447fd7..050c8687d8 100644 --- a/crates/hyperswitch_connectors/src/default_implementations_v2.rs +++ b/crates/hyperswitch_connectors/src/default_implementations_v2.rs @@ -180,7 +180,13 @@ macro_rules! default_imp_for_new_connector_integration_payment { }; } -default_imp_for_new_connector_integration_payment!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_payment!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_new_connector_integration_refund { ($($path:ident::$connector:ident),*) => { @@ -198,7 +204,13 @@ macro_rules! default_imp_for_new_connector_integration_refund { }; } -default_imp_for_new_connector_integration_refund!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_refund!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_new_connector_integration_connector_access_token { ($($path:ident::$connector:ident),*) => { @@ -212,8 +224,11 @@ macro_rules! default_imp_for_new_connector_integration_connector_access_token { } default_imp_for_new_connector_integration_connector_access_token!( + connectors::Bambora, + connectors::Bitpay, connectors::Fiserv, - connectors::Helcim + connectors::Helcim, + connectors::Stax ); macro_rules! default_imp_for_new_connector_integration_accept_dispute { @@ -233,7 +248,13 @@ macro_rules! default_imp_for_new_connector_integration_accept_dispute { }; } -default_imp_for_new_connector_integration_accept_dispute!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_accept_dispute!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_new_connector_integration_submit_evidence { ($($path:ident::$connector:ident),*) => { @@ -251,7 +272,13 @@ macro_rules! default_imp_for_new_connector_integration_submit_evidence { }; } -default_imp_for_new_connector_integration_submit_evidence!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_submit_evidence!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_new_connector_integration_defend_dispute { ($($path:ident::$connector:ident),*) => { @@ -269,7 +296,13 @@ macro_rules! default_imp_for_new_connector_integration_defend_dispute { }; } -default_imp_for_new_connector_integration_defend_dispute!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_defend_dispute!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); macro_rules! default_imp_for_new_connector_integration_file_upload { ($($path:ident::$connector:ident),*) => { @@ -297,7 +330,13 @@ macro_rules! default_imp_for_new_connector_integration_file_upload { }; } -default_imp_for_new_connector_integration_file_upload!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_file_upload!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_new_connector_integration_payouts_create { @@ -317,7 +356,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_create { } #[cfg(feature = "payouts")] -default_imp_for_new_connector_integration_payouts_create!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_payouts_create!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_new_connector_integration_payouts_eligibility { @@ -338,8 +383,11 @@ macro_rules! default_imp_for_new_connector_integration_payouts_eligibility { #[cfg(feature = "payouts")] default_imp_for_new_connector_integration_payouts_eligibility!( + connectors::Bambora, + connectors::Bitpay, connectors::Fiserv, - connectors::Helcim + connectors::Helcim, + connectors::Stax ); #[cfg(feature = "payouts")] @@ -360,7 +408,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_fulfill { } #[cfg(feature = "payouts")] -default_imp_for_new_connector_integration_payouts_fulfill!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_payouts_fulfill!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_new_connector_integration_payouts_cancel { @@ -380,7 +434,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_cancel { } #[cfg(feature = "payouts")] -default_imp_for_new_connector_integration_payouts_cancel!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_payouts_cancel!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_new_connector_integration_payouts_quote { @@ -400,7 +460,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_quote { } #[cfg(feature = "payouts")] -default_imp_for_new_connector_integration_payouts_quote!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_payouts_quote!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_new_connector_integration_payouts_recipient { @@ -421,8 +487,11 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient { #[cfg(feature = "payouts")] default_imp_for_new_connector_integration_payouts_recipient!( + connectors::Bambora, + connectors::Bitpay, connectors::Fiserv, - connectors::Helcim + connectors::Helcim, + connectors::Stax ); #[cfg(feature = "payouts")] @@ -443,7 +512,13 @@ macro_rules! default_imp_for_new_connector_integration_payouts_sync { } #[cfg(feature = "payouts")] -default_imp_for_new_connector_integration_payouts_sync!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_payouts_sync!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "payouts")] macro_rules! default_imp_for_new_connector_integration_payouts_recipient_account { @@ -464,8 +539,11 @@ macro_rules! default_imp_for_new_connector_integration_payouts_recipient_account #[cfg(feature = "payouts")] default_imp_for_new_connector_integration_payouts_recipient_account!( + connectors::Bambora, + connectors::Bitpay, connectors::Fiserv, - connectors::Helcim + connectors::Helcim, + connectors::Stax ); macro_rules! default_imp_for_new_connector_integration_webhook_source_verification { @@ -485,8 +563,11 @@ macro_rules! default_imp_for_new_connector_integration_webhook_source_verificati } default_imp_for_new_connector_integration_webhook_source_verification!( + connectors::Bambora, + connectors::Bitpay, connectors::Fiserv, - connectors::Helcim + connectors::Helcim, + connectors::Stax ); #[cfg(feature = "frm")] @@ -507,7 +588,13 @@ macro_rules! default_imp_for_new_connector_integration_frm_sale { } #[cfg(feature = "frm")] -default_imp_for_new_connector_integration_frm_sale!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_frm_sale!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_new_connector_integration_frm_checkout { @@ -527,7 +614,13 @@ macro_rules! default_imp_for_new_connector_integration_frm_checkout { } #[cfg(feature = "frm")] -default_imp_for_new_connector_integration_frm_checkout!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_frm_checkout!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_new_connector_integration_frm_transaction { @@ -547,7 +640,13 @@ macro_rules! default_imp_for_new_connector_integration_frm_transaction { } #[cfg(feature = "frm")] -default_imp_for_new_connector_integration_frm_transaction!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_frm_transaction!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_new_connector_integration_frm_fulfillment { @@ -567,7 +666,13 @@ macro_rules! default_imp_for_new_connector_integration_frm_fulfillment { } #[cfg(feature = "frm")] -default_imp_for_new_connector_integration_frm_fulfillment!(connectors::Fiserv, connectors::Helcim); +default_imp_for_new_connector_integration_frm_fulfillment!( + connectors::Bambora, + connectors::Bitpay, + connectors::Fiserv, + connectors::Helcim, + connectors::Stax +); #[cfg(feature = "frm")] macro_rules! default_imp_for_new_connector_integration_frm_record_return { @@ -588,8 +693,11 @@ macro_rules! default_imp_for_new_connector_integration_frm_record_return { #[cfg(feature = "frm")] default_imp_for_new_connector_integration_frm_record_return!( + connectors::Bambora, + connectors::Bitpay, connectors::Fiserv, - connectors::Helcim + connectors::Helcim, + connectors::Stax ); macro_rules! default_imp_for_new_connector_integration_revoking_mandates { @@ -608,6 +716,9 @@ macro_rules! default_imp_for_new_connector_integration_revoking_mandates { } default_imp_for_new_connector_integration_revoking_mandates!( + connectors::Bambora, + connectors::Bitpay, connectors::Fiserv, - connectors::Helcim + connectors::Helcim, + connectors::Stax ); diff --git a/crates/hyperswitch_connectors/src/utils.rs b/crates/hyperswitch_connectors/src/utils.rs index 40f98b6efd..ebd3ff3470 100644 --- a/crates/hyperswitch_connectors/src/utils.rs +++ b/crates/hyperswitch_connectors/src/utils.rs @@ -5,14 +5,16 @@ use common_utils::{ ext_traits::{OptionExt, ValueExt}, id_type, pii::{self, Email, IpAddress}, + types::{AmountConvertor, MinorUnit}, }; use error_stack::ResultExt; use hyperswitch_domain_models::{ payment_method_data::{Card, PaymentMethodData}, router_data::{PaymentMethodToken, RecurringMandatePaymentData}, router_request_types::{ - AuthenticationData, BrowserInformation, PaymentsAuthorizeData, PaymentsCancelData, - PaymentsCaptureData, PaymentsSyncData, RefundsData, ResponseId, SetupMandateRequestData, + AuthenticationData, BrowserInformation, CompleteAuthorizeData, PaymentsAuthorizeData, + PaymentsCancelData, PaymentsCaptureData, PaymentsSyncData, RefundsData, ResponseId, + SetupMandateRequestData, }, }; use hyperswitch_interfaces::{api, errors}; @@ -131,6 +133,16 @@ where json.parse_value(std::any::type_name::()).switch() } +pub(crate) fn convert_amount( + amount_convertor: &dyn AmountConvertor, + amount: MinorUnit, + currency: enums::Currency, +) -> Result> { + amount_convertor + .convert(amount, currency) + .change_context(errors::ConnectorError::AmountConversionFailed) +} + // TODO: Make all traits as `pub(crate) trait` once all connectors are moved. pub trait RouterData { fn get_billing(&self) -> Result<&Address, Error>; @@ -1094,6 +1106,54 @@ impl PaymentsSetupMandateRequestData for SetupMandateRequestData { } } +pub trait PaymentsCompleteAuthorizeRequestData { + fn is_auto_capture(&self) -> Result; + fn get_email(&self) -> Result; + fn get_redirect_response_payload(&self) -> Result; + fn get_complete_authorize_url(&self) -> Result; + fn is_mandate_payment(&self) -> bool; +} + +impl PaymentsCompleteAuthorizeRequestData for CompleteAuthorizeData { + fn is_auto_capture(&self) -> Result { + match self.capture_method { + Some(enums::CaptureMethod::Automatic) | None => Ok(true), + Some(enums::CaptureMethod::Manual) => Ok(false), + Some(_) => Err(errors::ConnectorError::CaptureMethodNotSupported.into()), + } + } + fn get_email(&self) -> Result { + self.email.clone().ok_or_else(missing_field_err("email")) + } + fn get_redirect_response_payload(&self) -> Result { + self.redirect_response + .as_ref() + .and_then(|res| res.payload.to_owned()) + .ok_or( + errors::ConnectorError::MissingConnectorRedirectionPayload { + field_name: "request.redirect_response.payload", + } + .into(), + ) + } + fn get_complete_authorize_url(&self) -> Result { + self.complete_authorize_url + .clone() + .ok_or_else(missing_field_err("complete_authorize_url")) + } + fn is_mandate_payment(&self) -> bool { + ((self.customer_acceptance.is_some() || self.setup_mandate_details.is_some()) + && self.setup_future_usage.map_or(false, |setup_future_usage| { + setup_future_usage == FutureUsage::OffSession + })) + || self + .mandate_id + .as_ref() + .and_then(|mandate_ids| mandate_ids.mandate_reference_id.as_ref()) + .is_some() + } +} + pub trait BrowserInformationData { fn get_accept_header(&self) -> Result; fn get_language(&self) -> Result; @@ -1154,3 +1214,19 @@ impl BrowserInformationData for BrowserInformation { .ok_or_else(missing_field_err("browser_info.java_script_enabled")) } } + +#[macro_export] +macro_rules! unimplemented_payment_method { + ($payment_method:expr, $connector:expr) => { + errors::ConnectorError::NotImplemented(format!( + "{} through {}", + $payment_method, $connector + )) + }; + ($payment_method:expr, $flow:expr, $connector:expr) => { + errors::ConnectorError::NotImplemented(format!( + "{} {} through {}", + $payment_method, $flow, $connector + )) + }; +} diff --git a/crates/hyperswitch_domain_models/src/types.rs b/crates/hyperswitch_domain_models/src/types.rs index 814d235e6f..e425fc7fcc 100644 --- a/crates/hyperswitch_domain_models/src/types.rs +++ b/crates/hyperswitch_domain_models/src/types.rs @@ -1,7 +1,11 @@ use crate::{ router_data::RouterData, - router_flow_types::{Authorize, Capture, PSync, RSync, SetupMandate, Void}, + router_flow_types::{ + Authorize, Capture, CompleteAuthorize, CreateConnectorCustomer, PSync, PaymentMethodToken, + RSync, SetupMandate, Void, + }, router_request_types::{ + CompleteAuthorizeData, ConnectorCustomerData, PaymentMethodTokenizationData, PaymentsAuthorizeData, PaymentsCancelData, PaymentsCaptureData, PaymentsSyncData, RefundsData, SetupMandateRequestData, }, @@ -17,3 +21,9 @@ pub type SetupMandateRouterData = RouterData; pub type RefundsRouterData = RouterData; pub type RefundSyncRouterData = RouterData; +pub type TokenizationRouterData = + RouterData; +pub type ConnectorCustomerRouterData = + RouterData; +pub type PaymentsCompleteAuthorizeRouterData = + RouterData; diff --git a/crates/hyperswitch_interfaces/src/api.rs b/crates/hyperswitch_interfaces/src/api.rs index 82ae0d141d..0b4545a33d 100644 --- a/crates/hyperswitch_interfaces/src/api.rs +++ b/crates/hyperswitch_interfaces/src/api.rs @@ -17,7 +17,7 @@ pub mod payouts_v2; pub mod refunds; pub mod refunds_v2; -use common_enums::enums::{CaptureMethod, PaymentMethodType}; +use common_enums::enums::{CallConnectorAction, CaptureMethod, PaymentAction, PaymentMethodType}; use common_utils::{ errors::CustomResult, request::{Method, Request, RequestContent}, @@ -398,3 +398,16 @@ pub trait ConnectorValidation: ConnectorCommon { false } } + +/// trait ConnectorRedirectResponse +pub trait ConnectorRedirectResponse { + /// fn get_flow_type + fn get_flow_type( + &self, + _query_params: &str, + _json_payload: Option, + _action: PaymentAction, + ) -> CustomResult { + Ok(CallConnectorAction::Avoid) + } +} diff --git a/crates/router/src/connector.rs b/crates/router/src/connector.rs index a421c93120..7d5fc28e2b 100644 --- a/crates/router/src/connector.rs +++ b/crates/router/src/connector.rs @@ -3,11 +3,9 @@ pub mod adyen; pub mod adyenplatform; pub mod airwallex; pub mod authorizedotnet; -pub mod bambora; pub mod bamboraapac; pub mod bankofamerica; pub mod billwerk; -pub mod bitpay; pub mod bluesnap; pub mod boku; pub mod braintree; @@ -54,7 +52,6 @@ pub mod riskified; pub mod shift4; pub mod signifyd; pub mod square; -pub mod stax; pub mod stripe; pub mod threedsecureio; pub mod trustpay; @@ -68,24 +65,26 @@ pub mod worldpay; pub mod zen; pub mod zsl; -pub use hyperswitch_connectors::connectors::{fiserv, fiserv::Fiserv, helcim, helcim::Helcim}; +pub use hyperswitch_connectors::connectors::{ + bambora, bambora::Bambora, bitpay, bitpay::Bitpay, fiserv, fiserv::Fiserv, helcim, + helcim::Helcim, stax, stax::Stax, +}; #[cfg(feature = "dummy_connector")] pub use self::dummyconnector::DummyConnector; pub use self::{ aci::Aci, adyen::Adyen, adyenplatform::Adyenplatform, airwallex::Airwallex, - authorizedotnet::Authorizedotnet, bambora::Bambora, bamboraapac::Bamboraapac, - bankofamerica::Bankofamerica, billwerk::Billwerk, bitpay::Bitpay, bluesnap::Bluesnap, - boku::Boku, braintree::Braintree, cashtocode::Cashtocode, checkout::Checkout, - coinbase::Coinbase, cryptopay::Cryptopay, cybersource::Cybersource, datatrans::Datatrans, - dlocal::Dlocal, ebanx::Ebanx, forte::Forte, globalpay::Globalpay, globepay::Globepay, - gocardless::Gocardless, gpayments::Gpayments, iatapay::Iatapay, itaubank::Itaubank, - klarna::Klarna, mifinity::Mifinity, mollie::Mollie, multisafepay::Multisafepay, - netcetera::Netcetera, nexinets::Nexinets, nmi::Nmi, noon::Noon, nuvei::Nuvei, opayo::Opayo, - opennode::Opennode, payeezy::Payeezy, payme::Payme, payone::Payone, paypal::Paypal, payu::Payu, - placetopay::Placetopay, plaid::Plaid, powertranz::Powertranz, prophetpay::Prophetpay, - rapyd::Rapyd, razorpay::Razorpay, riskified::Riskified, shift4::Shift4, signifyd::Signifyd, - square::Square, stax::Stax, stripe::Stripe, threedsecureio::Threedsecureio, trustpay::Trustpay, - tsys::Tsys, volt::Volt, wellsfargo::Wellsfargo, wise::Wise, worldline::Worldline, - worldpay::Worldpay, zen::Zen, zsl::Zsl, + authorizedotnet::Authorizedotnet, bamboraapac::Bamboraapac, bankofamerica::Bankofamerica, + billwerk::Billwerk, bluesnap::Bluesnap, boku::Boku, braintree::Braintree, + cashtocode::Cashtocode, checkout::Checkout, coinbase::Coinbase, cryptopay::Cryptopay, + cybersource::Cybersource, datatrans::Datatrans, dlocal::Dlocal, ebanx::Ebanx, forte::Forte, + globalpay::Globalpay, globepay::Globepay, gocardless::Gocardless, gpayments::Gpayments, + iatapay::Iatapay, itaubank::Itaubank, klarna::Klarna, mifinity::Mifinity, mollie::Mollie, + multisafepay::Multisafepay, netcetera::Netcetera, nexinets::Nexinets, nmi::Nmi, noon::Noon, + nuvei::Nuvei, opayo::Opayo, opennode::Opennode, payeezy::Payeezy, payme::Payme, payone::Payone, + paypal::Paypal, payu::Payu, placetopay::Placetopay, plaid::Plaid, powertranz::Powertranz, + prophetpay::Prophetpay, rapyd::Rapyd, razorpay::Razorpay, riskified::Riskified, shift4::Shift4, + signifyd::Signifyd, square::Square, stripe::Stripe, threedsecureio::Threedsecureio, + trustpay::Trustpay, tsys::Tsys, volt::Volt, wellsfargo::Wellsfargo, wise::Wise, + worldline::Worldline, worldpay::Worldpay, zen::Zen, zsl::Zsl, }; diff --git a/crates/router/src/core/payments.rs b/crates/router/src/core/payments.rs index 003c956109..a165264117 100644 --- a/crates/router/src/core/payments.rs +++ b/crates/router/src/core/payments.rs @@ -25,6 +25,7 @@ use api_models::{ mandates::RecurringDetails, payments::{self as payments_api, HeaderPayload}, }; +pub use common_enums::enums::CallConnectorAction; use common_utils::{ ext_traits::{AsyncExt, StringExt}, id_type, pii, @@ -2661,18 +2662,6 @@ where Ok(payment_data.to_owned()) } -#[derive(Clone, PartialEq)] -pub enum CallConnectorAction { - Trigger, - Avoid, - StatusUpdate { - status: storage_enums::AttemptStatus, - error_code: Option, - error_message: Option, - }, - HandleResponse(Vec), -} - #[derive(Clone)] pub struct MandateConnectorDetails { pub connector: String, 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 019020b0b5..4090dc4046 100644 --- a/crates/router/src/core/payments/connector_integration_v2_impls.rs +++ b/crates/router/src/core/payments/connector_integration_v2_impls.rs @@ -639,11 +639,9 @@ default_imp_for_new_connector_integration_payment!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -686,7 +684,6 @@ default_imp_for_new_connector_integration_payment!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -724,11 +721,9 @@ default_imp_for_new_connector_integration_refund!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -771,7 +766,6 @@ default_imp_for_new_connector_integration_refund!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -804,11 +798,9 @@ default_imp_for_new_connector_integration_connector_access_token!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -851,7 +843,6 @@ default_imp_for_new_connector_integration_connector_access_token!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -906,11 +897,9 @@ default_imp_for_new_connector_integration_accept_dispute!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -953,7 +942,6 @@ default_imp_for_new_connector_integration_accept_dispute!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -990,11 +978,9 @@ default_imp_for_new_connector_integration_defend_dispute!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1037,7 +1023,6 @@ default_imp_for_new_connector_integration_defend_dispute!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1058,11 +1043,9 @@ default_imp_for_new_connector_integration_submit_evidence!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1105,7 +1088,6 @@ default_imp_for_new_connector_integration_submit_evidence!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1153,11 +1135,9 @@ default_imp_for_new_connector_integration_file_upload!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1200,7 +1180,6 @@ default_imp_for_new_connector_integration_file_upload!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1319,11 +1298,9 @@ default_imp_for_new_connector_integration_payouts_create!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1366,7 +1343,6 @@ default_imp_for_new_connector_integration_payouts_create!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1406,11 +1382,9 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1453,7 +1427,6 @@ default_imp_for_new_connector_integration_payouts_eligibility!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1493,11 +1466,9 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1540,7 +1511,6 @@ default_imp_for_new_connector_integration_payouts_fulfill!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1580,11 +1550,9 @@ default_imp_for_new_connector_integration_payouts_cancel!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1627,7 +1595,6 @@ default_imp_for_new_connector_integration_payouts_cancel!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1667,11 +1634,9 @@ default_imp_for_new_connector_integration_payouts_quote!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1714,7 +1679,6 @@ default_imp_for_new_connector_integration_payouts_quote!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1754,11 +1718,9 @@ default_imp_for_new_connector_integration_payouts_recipient!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1801,7 +1763,6 @@ default_imp_for_new_connector_integration_payouts_recipient!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -1841,11 +1802,9 @@ default_imp_for_new_connector_integration_payouts_sync!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1889,7 +1848,6 @@ default_imp_for_new_connector_integration_payouts_sync!( connector::Signifyd, connector::Stripe, connector::Square, - connector::Stax, connector::Shift4, connector::Threedsecureio, connector::Trustpay, @@ -1928,11 +1886,9 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1975,7 +1931,6 @@ default_imp_for_new_connector_integration_payouts_recipient_account!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -2013,11 +1968,9 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2060,7 +2013,6 @@ default_imp_for_new_connector_integration_webhook_source_verification!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -2179,11 +2131,9 @@ default_imp_for_new_connector_integration_frm_sale!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2226,7 +2176,6 @@ default_imp_for_new_connector_integration_frm_sale!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -2266,11 +2215,9 @@ default_imp_for_new_connector_integration_frm_checkout!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2313,7 +2260,6 @@ default_imp_for_new_connector_integration_frm_checkout!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -2353,11 +2299,9 @@ default_imp_for_new_connector_integration_frm_transaction!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2400,7 +2344,6 @@ default_imp_for_new_connector_integration_frm_transaction!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -2440,11 +2383,9 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2487,7 +2428,6 @@ default_imp_for_new_connector_integration_frm_fulfillment!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -2527,11 +2467,9 @@ default_imp_for_new_connector_integration_frm_record_return!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2574,7 +2512,6 @@ default_imp_for_new_connector_integration_frm_record_return!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, @@ -2611,11 +2548,9 @@ default_imp_for_new_connector_integration_revoking_mandates!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2658,7 +2593,6 @@ default_imp_for_new_connector_integration_revoking_mandates!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Trustpay, diff --git a/crates/router/src/core/payments/flows.rs b/crates/router/src/core/payments/flows.rs index 6756b9ff5d..af56c7e4ba 100644 --- a/crates/router/src/core/payments/flows.rs +++ b/crates/router/src/core/payments/flows.rs @@ -192,7 +192,6 @@ default_imp_for_complete_authorize!( connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Boku, connector::Cashtocode, connector::Checkout, @@ -225,7 +224,6 @@ default_imp_for_complete_authorize!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Threedsecureio, connector::Trustpay, @@ -270,11 +268,9 @@ default_imp_for_webhook_source_verification!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Braintree, connector::Boku, @@ -318,7 +314,6 @@ default_imp_for_webhook_source_verification!( connector::Shift4, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Threedsecureio, connector::Trustpay, @@ -365,11 +360,9 @@ default_imp_for_create_customer!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -459,7 +452,6 @@ default_imp_for_connector_redirect_response!( connector::Aci, connector::Adyen, connector::Bamboraapac, - connector::Bitpay, connector::Bankofamerica, connector::Billwerk, connector::Boku, @@ -470,12 +462,10 @@ default_imp_for_connector_redirect_response!( connector::Datatrans, connector::Dlocal, connector::Ebanx, - connector::Fiserv, connector::Forte, connector::Globepay, connector::Gocardless, connector::Gpayments, - connector::Helcim, connector::Iatapay, connector::Itaubank, connector::Klarna, @@ -498,7 +488,6 @@ default_imp_for_connector_redirect_response!( connector::Shift4, connector::Signifyd, connector::Square, - connector::Stax, connector::Threedsecureio, connector::Tsys, connector::Volt, @@ -625,11 +614,9 @@ default_imp_for_accept_dispute!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -673,7 +660,6 @@ default_imp_for_accept_dispute!( connector::Shift4, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Threedsecureio, connector::Trustpay, @@ -742,11 +728,9 @@ default_imp_for_file_upload!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -789,7 +773,6 @@ default_imp_for_file_upload!( connector::Shift4, connector::Signifyd, connector::Square, - connector::Stax, connector::Threedsecureio, connector::Trustpay, connector::Tsys, @@ -836,11 +819,9 @@ default_imp_for_submit_evidence!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -883,7 +864,6 @@ default_imp_for_submit_evidence!( connector::Shift4, connector::Signifyd, connector::Square, - connector::Stax, connector::Threedsecureio, connector::Trustpay, connector::Tsys, @@ -930,11 +910,9 @@ default_imp_for_defend_dispute!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -977,7 +955,6 @@ default_imp_for_defend_dispute!( connector::Shift4, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Threedsecureio, connector::Trustpay, @@ -1038,11 +1015,9 @@ default_imp_for_pre_processing_steps!( connector::Adyenplatform, connector::Aci, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1080,7 +1055,6 @@ default_imp_for_pre_processing_steps!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Threedsecureio, connector::Tsys, connector::Volt, @@ -1120,10 +1094,8 @@ default_imp_for_post_processing_steps!( connector::Trustpay, connector::Aci, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1159,7 +1131,6 @@ default_imp_for_post_processing_steps!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Threedsecureio, connector::Tsys, connector::Volt, @@ -1279,11 +1250,9 @@ default_imp_for_payouts_create!( connector::Aci, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1325,7 +1294,6 @@ default_imp_for_payouts_create!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Shift4, connector::Threedsecureio, connector::Trustpay, @@ -1372,11 +1340,9 @@ default_imp_for_payouts_retrieve!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1420,7 +1386,6 @@ default_imp_for_payouts_retrieve!( connector::Signifyd, connector::Stripe, connector::Square, - connector::Stax, connector::Shift4, connector::Threedsecureio, connector::Trustpay, @@ -1470,11 +1435,9 @@ default_imp_for_payouts_eligibility!( connector::Aci, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1517,7 +1480,6 @@ default_imp_for_payouts_eligibility!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -1563,11 +1525,9 @@ default_imp_for_payouts_fulfill!( connector::Aci, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1607,7 +1567,6 @@ default_imp_for_payouts_fulfill!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Shift4, connector::Threedsecureio, connector::Trustpay, @@ -1653,11 +1612,9 @@ default_imp_for_payouts_cancel!( connector::Aci, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1700,7 +1657,6 @@ default_imp_for_payouts_cancel!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Shift4, connector::Threedsecureio, connector::Trustpay, @@ -1747,11 +1703,9 @@ default_imp_for_payouts_quote!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1794,7 +1748,6 @@ default_imp_for_payouts_quote!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -1842,11 +1795,9 @@ default_imp_for_payouts_recipient!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1889,7 +1840,6 @@ default_imp_for_payouts_recipient!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Shift4, connector::Threedsecureio, connector::Trustpay, @@ -1939,11 +1889,9 @@ default_imp_for_payouts_recipient_account!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -1987,7 +1935,6 @@ default_imp_for_payouts_recipient_account!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Shift4, connector::Threedsecureio, connector::Trustpay, @@ -2034,11 +1981,9 @@ default_imp_for_approve!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2082,7 +2027,6 @@ default_imp_for_approve!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -2130,11 +2074,9 @@ default_imp_for_reject!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2178,7 +2120,6 @@ default_imp_for_reject!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -2308,11 +2249,9 @@ default_imp_for_frm_sale!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2354,7 +2293,6 @@ default_imp_for_frm_sale!( connector::Rapyd, connector::Razorpay, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -2404,11 +2342,9 @@ default_imp_for_frm_checkout!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2450,7 +2386,6 @@ default_imp_for_frm_checkout!( connector::Rapyd, connector::Razorpay, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -2500,11 +2435,9 @@ default_imp_for_frm_transaction!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2546,7 +2479,6 @@ default_imp_for_frm_transaction!( connector::Rapyd, connector::Razorpay, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -2596,11 +2528,9 @@ default_imp_for_frm_fulfillment!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2642,7 +2572,6 @@ default_imp_for_frm_fulfillment!( connector::Rapyd, connector::Razorpay, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -2692,11 +2621,9 @@ default_imp_for_frm_record_return!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2738,7 +2665,6 @@ default_imp_for_frm_record_return!( connector::Rapyd, connector::Razorpay, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -2786,11 +2712,9 @@ default_imp_for_incremental_authorization!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2833,7 +2757,6 @@ default_imp_for_incremental_authorization!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -2879,11 +2802,9 @@ default_imp_for_revoking_mandates!( connector::Adyen, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -2925,7 +2846,6 @@ default_imp_for_revoking_mandates!( connector::Riskified, connector::Signifyd, connector::Square, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, @@ -3124,11 +3044,9 @@ default_imp_for_authorize_session_token!( connector::Adyenplatform, connector::Airwallex, connector::Authorizedotnet, - connector::Bambora, connector::Bamboraapac, connector::Bankofamerica, connector::Billwerk, - connector::Bitpay, connector::Bluesnap, connector::Boku, connector::Braintree, @@ -3170,7 +3088,6 @@ default_imp_for_authorize_session_token!( connector::Razorpay, connector::Riskified, connector::Signifyd, - connector::Stax, connector::Stripe, connector::Shift4, connector::Threedsecureio, diff --git a/crates/router/src/services/api.rs b/crates/router/src/services/api.rs index bd79475822..99393e6cd1 100644 --- a/crates/router/src/services/api.rs +++ b/crates/router/src/services/api.rs @@ -18,6 +18,7 @@ use actix_web::{ web, FromRequest, HttpRequest, HttpResponse, Responder, ResponseError, }; pub use client::{proxy_bypass_urls, ApiClient, MockApiClient, ProxyClient}; +pub use common_enums::enums::PaymentAction; pub use common_utils::request::{ContentType, Method, Request, RequestBuilder}; use common_utils::{ consts::{DEFAULT_TENANT, TENANT_HEADER, X_HS_LATENCY}, @@ -37,7 +38,7 @@ pub use hyperswitch_domain_models::{ pub use hyperswitch_interfaces::{ api::{ BoxedConnectorIntegration, CaptureSyncMethod, ConnectorIntegration, - ConnectorIntegrationAny, ConnectorValidation, + ConnectorIntegrationAny, ConnectorRedirectResponse, ConnectorValidation, }, connector_integration_v2::{ BoxedConnectorIntegrationV2, ConnectorIntegrationAnyV2, ConnectorIntegrationV2, @@ -672,13 +673,6 @@ async fn handle_response( .await } -#[derive(Debug, Eq, PartialEq)] -pub enum PaymentAction { - PSync, - CompleteAuthorize, - PaymentAuthenticateCompleteAuthorize, -} - #[derive(Debug, Eq, PartialEq, Serialize)] pub struct ApplicationRedirectResponse { pub url: String, @@ -1223,17 +1217,6 @@ pub fn http_response_err(response: T) -> HttpRes .body(response) } -pub trait ConnectorRedirectResponse { - fn get_flow_type( - &self, - _query_params: &str, - _json_payload: Option, - _action: PaymentAction, - ) -> CustomResult { - Ok(payments::CallConnectorAction::Avoid) - } -} - pub trait Authenticate { fn get_client_secret(&self) -> Option<&String> { None