diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index f800495ab0..a2fe05e777 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -51,6 +51,9 @@ crates/api_models/src/connector_enums.rs @juspay/hyperswitch-connector crates/common_enums/src/connector_enums.rs @juspay/hyperswitch-connector crates/router/src/configs/defaults/payment_connector_required_fields.rs @juspay/hyperswitch-connector crates/hyperswitch_interfaces/src/configs.rs @juspay/hyperswitch-connector +crates/hyperswitch_domain_models/src/connector_endpoints.rs @juspay/hyperswitch-connector +crates/router/src/types/api/connector_mapping.rs @juspay/hyperswitch-connector +crates/router/src/types/connector_transformers.rs @juspay/hyperswitch-connector crates/router/src/compatibility/ @juspay/hyperswitch-compatibility diff --git a/crates/hyperswitch_connectors/src/connectors/coinbase.rs b/crates/hyperswitch_connectors/src/connectors/coinbase.rs index b90ef93a80..22939649dc 100644 --- a/crates/hyperswitch_connectors/src/connectors/coinbase.rs +++ b/crates/hyperswitch_connectors/src/connectors/coinbase.rs @@ -11,7 +11,7 @@ use common_utils::{ }; use error_stack::ResultExt; use hyperswitch_domain_models::{ - configs::Connectors, + connector_endpoints::Connectors, router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, router_flow_types::{ access_token_auth::AccessTokenAuth, diff --git a/crates/hyperswitch_domain_models/src/configs.rs b/crates/hyperswitch_domain_models/src/connector_endpoints.rs similarity index 100% rename from crates/hyperswitch_domain_models/src/configs.rs rename to crates/hyperswitch_domain_models/src/connector_endpoints.rs diff --git a/crates/hyperswitch_domain_models/src/lib.rs b/crates/hyperswitch_domain_models/src/lib.rs index 35570036c2..35f619334c 100644 --- a/crates/hyperswitch_domain_models/src/lib.rs +++ b/crates/hyperswitch_domain_models/src/lib.rs @@ -6,7 +6,7 @@ pub mod business_profile; pub mod callback_mapper; pub mod card_testing_guard_data; pub mod cards_info; -pub mod configs; +pub mod connector_endpoints; pub mod consts; pub mod customer; pub mod disputes; diff --git a/crates/hyperswitch_domain_models/src/router_request_types/revenue_recovery.rs b/crates/hyperswitch_domain_models/src/router_request_types/revenue_recovery.rs index 402b1dd2e8..9e1a59110f 100644 --- a/crates/hyperswitch_domain_models/src/router_request_types/revenue_recovery.rs +++ b/crates/hyperswitch_domain_models/src/router_request_types/revenue_recovery.rs @@ -1,13 +1,13 @@ use common_enums::enums; -use crate::configs; +use crate::connector_endpoints; #[derive(Debug, Clone)] pub struct BillingConnectorPaymentsSyncRequest { /// unique id for making billing connector psync call pub billing_connector_psync_id: String, /// connector params of the connector - pub connector_params: configs::ConnectorParams, + pub connector_params: connector_endpoints::ConnectorParams, } #[derive(Debug, Clone)] @@ -18,7 +18,7 @@ pub struct RevenueRecoveryRecordBackRequest { pub payment_method_type: Option, pub attempt_status: common_enums::AttemptStatus, pub connector_transaction_id: Option, - pub connector_params: configs::ConnectorParams, + pub connector_params: connector_endpoints::ConnectorParams, } #[derive(Debug, Clone)] @@ -26,5 +26,5 @@ pub struct BillingConnectorInvoiceSyncRequest { /// Invoice id pub billing_connector_invoice_id: String, /// connector params of the connector - pub connector_params: configs::ConnectorParams, + pub connector_params: connector_endpoints::ConnectorParams, } diff --git a/crates/hyperswitch_interfaces/src/api.rs b/crates/hyperswitch_interfaces/src/api.rs index 03ca4c62ac..4162eb2909 100644 --- a/crates/hyperswitch_interfaces/src/api.rs +++ b/crates/hyperswitch_interfaces/src/api.rs @@ -37,7 +37,7 @@ use common_utils::{ }; use error_stack::ResultExt; use hyperswitch_domain_models::{ - configs::Connectors, + connector_endpoints::Connectors, errors::api_error_response::ApiErrorResponse, payment_method_data::PaymentMethodData, router_data::{AccessToken, ConnectorAuthType, ErrorResponse, RouterData}, diff --git a/crates/hyperswitch_interfaces/src/configs.rs b/crates/hyperswitch_interfaces/src/configs.rs index c01a5a5ebb..4b4594aebf 100644 --- a/crates/hyperswitch_interfaces/src/configs.rs +++ b/crates/hyperswitch_interfaces/src/configs.rs @@ -1 +1 @@ -pub use hyperswitch_domain_models::configs::Connectors; +pub use hyperswitch_domain_models::connector_endpoints::Connectors; diff --git a/crates/hyperswitch_interfaces/src/connector_integration_interface.rs b/crates/hyperswitch_interfaces/src/connector_integration_interface.rs index 602931a1a0..998df9ec61 100644 --- a/crates/hyperswitch_interfaces/src/connector_integration_interface.rs +++ b/crates/hyperswitch_interfaces/src/connector_integration_interface.rs @@ -3,7 +3,7 @@ use common_enums::PaymentAction; use common_utils::{crypto, errors::CustomResult, request::Request}; use hyperswitch_domain_models::{ api::ApplicationResponse, - configs::Connectors, + connector_endpoints::Connectors, errors::api_error_response::ApiErrorResponse, payment_method_data::PaymentMethodData, router_data::{ConnectorAuthType, ErrorResponse, RouterData}, diff --git a/crates/router/src/core/revenue_recovery/types.rs b/crates/router/src/core/revenue_recovery/types.rs index 8a13c32b51..65bdbaa628 100644 --- a/crates/router/src/core/revenue_recovery/types.rs +++ b/crates/router/src/core/revenue_recovery/types.rs @@ -780,14 +780,15 @@ pub fn construct_recovery_record_back_router_data( .change_context(errors::RecoveryError::RecordBackToBillingConnectorFailed) .attach_printable("Cannot find connector from the connector_name")?; - let connector_params = hyperswitch_domain_models::configs::Connectors::get_connector_params( - &state.conf.connectors, - connector, - ) - .change_context(errors::RecoveryError::RecordBackToBillingConnectorFailed) - .attach_printable(format!( - "cannot find connector params for this connector {connector} in this flow", - ))?; + let connector_params = + hyperswitch_domain_models::connector_endpoints::Connectors::get_connector_params( + &state.conf.connectors, + connector, + ) + .change_context(errors::RecoveryError::RecordBackToBillingConnectorFailed) + .attach_printable(format!( + "cannot find connector params for this connector {connector} in this flow", + ))?; let router_data = router_data_v2::RouterDataV2 { flow: PhantomData::, diff --git a/crates/router/src/core/webhooks/recovery_incoming.rs b/crates/router/src/core/webhooks/recovery_incoming.rs index 791a683ed4..b46b0651e6 100644 --- a/crates/router/src/core/webhooks/recovery_incoming.rs +++ b/crates/router/src/core/webhooks/recovery_incoming.rs @@ -977,7 +977,7 @@ impl BillingConnectorPaymentsSyncFlowRouterData { .attach_printable("Cannot find connector from the connector_name")?; let connector_params = - hyperswitch_domain_models::configs::Connectors::get_connector_params( + hyperswitch_domain_models::connector_endpoints::Connectors::get_connector_params( &state.conf.connectors, connector, ) @@ -1143,7 +1143,7 @@ impl BillingConnectorInvoiceSyncFlowRouterData { .attach_printable("Cannot find connector from the connector_name")?; let connector_params = - hyperswitch_domain_models::configs::Connectors::get_connector_params( + hyperswitch_domain_models::connector_endpoints::Connectors::get_connector_params( &state.conf.connectors, connector, ) diff --git a/crates/router/src/types.rs b/crates/router/src/types.rs index 2b64da4f5b..a5740561c7 100644 --- a/crates/router/src/types.rs +++ b/crates/router/src/types.rs @@ -8,6 +8,7 @@ pub mod api; pub mod authentication; +pub mod connector_transformers; pub mod domain; #[cfg(feature = "frm")] pub mod fraud_check; diff --git a/crates/router/src/types/api.rs b/crates/router/src/types/api.rs index eab04a9f0c..156bb21d0b 100644 --- a/crates/router/src/types/api.rs +++ b/crates/router/src/types/api.rs @@ -27,6 +27,7 @@ pub mod webhook_events; pub mod webhooks; pub mod authentication_v2; +pub mod connector_mapping; pub mod disputes_v2; pub mod files_v2; #[cfg(feature = "frm")] @@ -40,7 +41,7 @@ use std::{fmt::Debug, str::FromStr}; use api_models::routing::{self as api_routing, RoutableConnectorChoice}; use common_enums::RoutableConnectors; -use error_stack::{report, ResultExt}; +use error_stack::ResultExt; pub use hyperswitch_domain_models::router_flow_types::{ access_token_auth::AccessTokenAuth, mandate_revoke::MandateRevoke, webhooks::VerifyWebhookSource, @@ -75,13 +76,12 @@ pub use self::fraud_check::*; #[cfg(feature = "payouts")] pub use self::payouts::*; pub use self::{ - admin::*, api_keys::*, authentication::*, configs::*, customers::*, disputes::*, files::*, - payment_link::*, payment_methods::*, payments::*, poll::*, refunds::*, refunds_v2::*, - webhooks::*, + admin::*, api_keys::*, authentication::*, configs::*, connector_mapping::*, customers::*, + disputes::*, files::*, payment_link::*, payment_methods::*, payments::*, poll::*, refunds::*, + refunds_v2::*, webhooks::*, }; use super::transformers::ForeignTryFrom; use crate::{ - configs::settings::Connectors, connector, consts, core::{ errors::{self, CustomResult}, @@ -99,29 +99,6 @@ pub enum ConnectorCallType { Skip, } -// Normal flow will call the connector and follow the flow specific operations (capture, authorize) -// SessionTokenFromMetadata will avoid calling the connector instead create the session token ( for sdk ) -#[derive(Clone, Eq, PartialEq, Debug)] -pub enum GetToken { - GpayMetadata, - SamsungPayMetadata, - ApplePayMetadata, - PaypalSdkMetadata, - PazeMetadata, - Connector, -} - -/// Routing algorithm will output merchant connector identifier instead of connector name -/// In order to support backwards compatibility for older routing algorithms and merchant accounts -/// the support for connector name is retained -#[derive(Clone, Debug)] -pub struct ConnectorData { - pub connector: ConnectorEnum, - pub connector_name: types::Connector, - pub get_token: GetToken, - pub merchant_connector_id: Option, -} - impl From for ConnectorRoutingData { fn from(connector_data: ConnectorData) -> Self { Self { @@ -257,409 +234,6 @@ pub enum ConnectorChoice { Decide, } -impl ConnectorData { - pub fn get_connector_by_name( - _connectors: &Connectors, - name: &str, - connector_type: GetToken, - connector_id: Option, - ) -> CustomResult { - let connector = Self::convert_connector(name)?; - let connector_name = api_enums::Connector::from_str(name) - .change_context(errors::ConnectorError::InvalidConnectorName) - .change_context(errors::ApiErrorResponse::InternalServerError) - .attach_printable_lazy(|| format!("unable to parse connector name {name}"))?; - Ok(Self { - connector, - connector_name, - get_token: connector_type, - merchant_connector_id: connector_id, - }) - } - - #[cfg(feature = "payouts")] - pub fn get_payout_connector_by_name( - _connectors: &Connectors, - name: &str, - connector_type: GetToken, - connector_id: Option, - ) -> CustomResult { - let connector = Self::convert_connector(name)?; - let payout_connector_name = api_enums::PayoutConnectors::from_str(name) - .change_context(errors::ConnectorError::InvalidConnectorName) - .change_context(errors::ApiErrorResponse::InternalServerError) - .attach_printable_lazy(|| format!("unable to parse payout connector name {name}"))?; - let connector_name = api_enums::Connector::from(payout_connector_name); - Ok(Self { - connector, - connector_name, - get_token: connector_type, - merchant_connector_id: connector_id, - }) - } - - #[cfg(feature = "v2")] - pub fn get_external_vault_connector_by_name( - _connectors: &Connectors, - connector: &api_enums::Connector, - connector_type: GetToken, - connector_id: Option, - ) -> CustomResult { - let connector_enum = Self::convert_connector(&connector.to_string())?; - let external_vault_connector_name = - api_enums::VaultConnectors::from_str(&connector.to_string()) - .change_context(errors::ConnectorError::InvalidConnectorName) - .change_context(errors::ApiErrorResponse::InternalServerError) - .attach_printable_lazy(|| { - format!("unable to parse external vault connector name {connector:?}") - })?; - let connector_name = api_enums::Connector::from(external_vault_connector_name); - Ok(Self { - connector: connector_enum, - connector_name, - get_token: connector_type, - merchant_connector_id: connector_id, - }) - } - - pub fn convert_connector( - connector_name: &str, - ) -> CustomResult { - match enums::Connector::from_str(connector_name) { - Ok(name) => match name { - enums::Connector::Aci => Ok(ConnectorEnum::Old(Box::new(connector::Aci::new()))), - - enums::Connector::Authipay => { - Ok(ConnectorEnum::Old(Box::new(connector::Authipay::new()))) - } - enums::Connector::Adyen => { - Ok(ConnectorEnum::Old(Box::new(connector::Adyen::new()))) - } - enums::Connector::Adyenplatform => Ok(ConnectorEnum::Old(Box::new( - connector::Adyenplatform::new(), - ))), - enums::Connector::Airwallex => { - Ok(ConnectorEnum::Old(Box::new(connector::Airwallex::new()))) - } - // enums::Connector::Amazonpay => { - // Ok(ConnectorEnum::Old(Box::new(connector::Amazonpay))) - // } - enums::Connector::Archipel => { - Ok(ConnectorEnum::Old(Box::new(connector::Archipel::new()))) - } - enums::Connector::Authorizedotnet => { - Ok(ConnectorEnum::Old(Box::new(&connector::Authorizedotnet))) - } - enums::Connector::Bambora => Ok(ConnectorEnum::Old(Box::new(&connector::Bambora))), - enums::Connector::Bamboraapac => { - Ok(ConnectorEnum::Old(Box::new(connector::Bamboraapac::new()))) - } - enums::Connector::Bankofamerica => { - Ok(ConnectorEnum::Old(Box::new(&connector::Bankofamerica))) - } - enums::Connector::Barclaycard => { - Ok(ConnectorEnum::Old(Box::new(&connector::Barclaycard))) - } - enums::Connector::Billwerk => { - Ok(ConnectorEnum::Old(Box::new(connector::Billwerk::new()))) - } - enums::Connector::Bitpay => { - Ok(ConnectorEnum::Old(Box::new(connector::Bitpay::new()))) - } - enums::Connector::Bluesnap => { - Ok(ConnectorEnum::Old(Box::new(connector::Bluesnap::new()))) - } - enums::Connector::Boku => Ok(ConnectorEnum::Old(Box::new(connector::Boku::new()))), - enums::Connector::Braintree => { - Ok(ConnectorEnum::Old(Box::new(connector::Braintree::new()))) - } - enums::Connector::Cashtocode => { - Ok(ConnectorEnum::Old(Box::new(connector::Cashtocode::new()))) - } - enums::Connector::Celero => { - Ok(ConnectorEnum::Old(Box::new(connector::Celero::new()))) - } - enums::Connector::Chargebee => { - Ok(ConnectorEnum::Old(Box::new(connector::Chargebee::new()))) - } - // enums::Connector::Checkbook => { - // Ok(ConnectorEnum::Old(Box::new(connector::Checkbook))) - // } - enums::Connector::Checkout => { - Ok(ConnectorEnum::Old(Box::new(connector::Checkout::new()))) - } - enums::Connector::Coinbase => { - Ok(ConnectorEnum::Old(Box::new(&connector::Coinbase))) - } - enums::Connector::Coingate => { - Ok(ConnectorEnum::Old(Box::new(connector::Coingate::new()))) - } - enums::Connector::Cryptopay => { - Ok(ConnectorEnum::Old(Box::new(connector::Cryptopay::new()))) - } - enums::Connector::CtpMastercard => { - Ok(ConnectorEnum::Old(Box::new(&connector::CtpMastercard))) - } - enums::Connector::CtpVisa => Ok(ConnectorEnum::Old(Box::new( - connector::UnifiedAuthenticationService::new(), - ))), - enums::Connector::Cybersource => { - Ok(ConnectorEnum::Old(Box::new(connector::Cybersource::new()))) - } - enums::Connector::Datatrans => { - Ok(ConnectorEnum::Old(Box::new(connector::Datatrans::new()))) - } - enums::Connector::Deutschebank => { - Ok(ConnectorEnum::Old(Box::new(connector::Deutschebank::new()))) - } - enums::Connector::Digitalvirgo => { - Ok(ConnectorEnum::Old(Box::new(connector::Digitalvirgo::new()))) - } - enums::Connector::Dlocal => Ok(ConnectorEnum::Old(Box::new(&connector::Dlocal))), - #[cfg(feature = "dummy_connector")] - enums::Connector::DummyConnector1 => Ok(ConnectorEnum::Old(Box::new( - &connector::DummyConnector::<1>, - ))), - #[cfg(feature = "dummy_connector")] - enums::Connector::DummyConnector2 => Ok(ConnectorEnum::Old(Box::new( - &connector::DummyConnector::<2>, - ))), - #[cfg(feature = "dummy_connector")] - enums::Connector::DummyConnector3 => Ok(ConnectorEnum::Old(Box::new( - &connector::DummyConnector::<3>, - ))), - #[cfg(feature = "dummy_connector")] - enums::Connector::DummyConnector4 => Ok(ConnectorEnum::Old(Box::new( - &connector::DummyConnector::<4>, - ))), - #[cfg(feature = "dummy_connector")] - enums::Connector::DummyConnector5 => Ok(ConnectorEnum::Old(Box::new( - &connector::DummyConnector::<5>, - ))), - #[cfg(feature = "dummy_connector")] - enums::Connector::DummyConnector6 => Ok(ConnectorEnum::Old(Box::new( - &connector::DummyConnector::<6>, - ))), - #[cfg(feature = "dummy_connector")] - enums::Connector::DummyConnector7 => Ok(ConnectorEnum::Old(Box::new( - &connector::DummyConnector::<7>, - ))), - #[cfg(feature = "dummy_connector")] - enums::Connector::DummyBillingConnector => Ok(ConnectorEnum::Old(Box::new( - &connector::DummyConnector::<8>, - ))), - // enums::Connector::Dwolla => { - // Ok(ConnectorEnum::Old(Box::new(connector::Dwolla::new()))) - // } - enums::Connector::Ebanx => { - Ok(ConnectorEnum::Old(Box::new(connector::Ebanx::new()))) - } - enums::Connector::Elavon => { - Ok(ConnectorEnum::Old(Box::new(connector::Elavon::new()))) - } - enums::Connector::Facilitapay => { - Ok(ConnectorEnum::Old(Box::new(connector::Facilitapay::new()))) - } - enums::Connector::Fiserv => { - Ok(ConnectorEnum::Old(Box::new(connector::Fiserv::new()))) - } - enums::Connector::Fiservemea => { - Ok(ConnectorEnum::Old(Box::new(connector::Fiservemea::new()))) - } - enums::Connector::Fiuu => Ok(ConnectorEnum::Old(Box::new(connector::Fiuu::new()))), - enums::Connector::Forte => { - Ok(ConnectorEnum::Old(Box::new(connector::Forte::new()))) - } - enums::Connector::Getnet => { - Ok(ConnectorEnum::Old(Box::new(connector::Getnet::new()))) - } - enums::Connector::Globalpay => { - Ok(ConnectorEnum::Old(Box::new(connector::Globalpay::new()))) - } - enums::Connector::Globepay => { - Ok(ConnectorEnum::Old(Box::new(connector::Globepay::new()))) - } - enums::Connector::Gocardless => { - Ok(ConnectorEnum::Old(Box::new(&connector::Gocardless))) - } - enums::Connector::Hipay => { - Ok(ConnectorEnum::Old(Box::new(connector::Hipay::new()))) - } - enums::Connector::Helcim => { - Ok(ConnectorEnum::Old(Box::new(connector::Helcim::new()))) - } - enums::Connector::HyperswitchVault => { - Ok(ConnectorEnum::Old(Box::new(&connector::HyperswitchVault))) - } - enums::Connector::Iatapay => { - Ok(ConnectorEnum::Old(Box::new(connector::Iatapay::new()))) - } - enums::Connector::Inespay => { - Ok(ConnectorEnum::Old(Box::new(connector::Inespay::new()))) - } - enums::Connector::Itaubank => { - Ok(ConnectorEnum::Old(Box::new(connector::Itaubank::new()))) - } - enums::Connector::Jpmorgan => { - Ok(ConnectorEnum::Old(Box::new(connector::Jpmorgan::new()))) - } - enums::Connector::Juspaythreedsserver => Ok(ConnectorEnum::Old(Box::new( - connector::Juspaythreedsserver::new(), - ))), - enums::Connector::Klarna => { - Ok(ConnectorEnum::Old(Box::new(connector::Klarna::new()))) - } - enums::Connector::Mollie => { - // enums::Connector::Moneris => Ok(ConnectorEnum::Old(Box::new(connector::Moneris))), - Ok(ConnectorEnum::Old(Box::new(connector::Mollie::new()))) - } - enums::Connector::Moneris => { - Ok(ConnectorEnum::Old(Box::new(connector::Moneris::new()))) - } - enums::Connector::Nexixpay => { - Ok(ConnectorEnum::Old(Box::new(connector::Nexixpay::new()))) - } - enums::Connector::Nmi => Ok(ConnectorEnum::Old(Box::new(connector::Nmi::new()))), - enums::Connector::Nomupay => { - Ok(ConnectorEnum::Old(Box::new(connector::Nomupay::new()))) - } - enums::Connector::Noon => Ok(ConnectorEnum::Old(Box::new(connector::Noon::new()))), - // enums::Connector::Nordea => Ok(ConnectorEnum::Old(Box::new(connector::Nordea::new()))), - enums::Connector::Novalnet => { - Ok(ConnectorEnum::Old(Box::new(connector::Novalnet::new()))) - } - enums::Connector::Nuvei => Ok(ConnectorEnum::Old(Box::new(&connector::Nuvei))), - enums::Connector::Opennode => { - Ok(ConnectorEnum::Old(Box::new(&connector::Opennode))) - } - enums::Connector::Paybox => { - Ok(ConnectorEnum::Old(Box::new(connector::Paybox::new()))) - } - // "payeezy" => Ok(ConnectorIntegrationEnum::Old(Box::new(&connector::Payeezy)), As psync and rsync are not supported by this connector, it is added as template code for future usage - enums::Connector::Payload => { - Ok(ConnectorEnum::Old(Box::new(connector::Payload::new()))) - } - enums::Connector::Payme => { - Ok(ConnectorEnum::Old(Box::new(connector::Payme::new()))) - } - enums::Connector::Payone => { - Ok(ConnectorEnum::Old(Box::new(connector::Payone::new()))) - } - enums::Connector::Payu => Ok(ConnectorEnum::Old(Box::new(connector::Payu::new()))), - enums::Connector::Placetopay => { - Ok(ConnectorEnum::Old(Box::new(connector::Placetopay::new()))) - } - enums::Connector::Powertranz => { - Ok(ConnectorEnum::Old(Box::new(&connector::Powertranz))) - } - enums::Connector::Prophetpay => { - Ok(ConnectorEnum::Old(Box::new(&connector::Prophetpay))) - } - enums::Connector::Razorpay => { - Ok(ConnectorEnum::Old(Box::new(connector::Razorpay::new()))) - } - enums::Connector::Rapyd => { - Ok(ConnectorEnum::Old(Box::new(connector::Rapyd::new()))) - } - enums::Connector::Recurly => { - Ok(ConnectorEnum::New(Box::new(connector::Recurly::new()))) - } - enums::Connector::Redsys => { - Ok(ConnectorEnum::Old(Box::new(connector::Redsys::new()))) - } - enums::Connector::Santander => { - Ok(ConnectorEnum::Old(Box::new(connector::Santander::new()))) - } - enums::Connector::Shift4 => { - Ok(ConnectorEnum::Old(Box::new(connector::Shift4::new()))) - } - enums::Connector::Square => Ok(ConnectorEnum::Old(Box::new(&connector::Square))), - enums::Connector::Stax => Ok(ConnectorEnum::Old(Box::new(&connector::Stax))), - enums::Connector::Stripe => { - Ok(ConnectorEnum::Old(Box::new(connector::Stripe::new()))) - } - enums::Connector::Stripebilling => Ok(ConnectorEnum::Old(Box::new( - connector::Stripebilling::new(), - ))), - enums::Connector::Wise => Ok(ConnectorEnum::Old(Box::new(connector::Wise::new()))), - enums::Connector::Worldline => { - Ok(ConnectorEnum::Old(Box::new(&connector::Worldline))) - } - enums::Connector::Worldpay => { - Ok(ConnectorEnum::Old(Box::new(connector::Worldpay::new()))) - } - enums::Connector::Worldpayvantiv => Ok(ConnectorEnum::Old(Box::new( - connector::Worldpayvantiv::new(), - ))), - enums::Connector::Worldpayxml => { - Ok(ConnectorEnum::Old(Box::new(connector::Worldpayxml::new()))) - } - enums::Connector::Xendit => { - Ok(ConnectorEnum::Old(Box::new(connector::Xendit::new()))) - } - enums::Connector::Mifinity => { - Ok(ConnectorEnum::Old(Box::new(connector::Mifinity::new()))) - } - enums::Connector::Multisafepay => { - Ok(ConnectorEnum::Old(Box::new(connector::Multisafepay::new()))) - } - enums::Connector::Netcetera => { - Ok(ConnectorEnum::Old(Box::new(&connector::Netcetera))) - } - enums::Connector::Nexinets => { - Ok(ConnectorEnum::Old(Box::new(&connector::Nexinets))) - } - // enums::Connector::Nexixpay => { - // Ok(ConnectorEnum::Old(Box::new(&connector::Nexixpay))) - // } - enums::Connector::Paypal => { - Ok(ConnectorEnum::Old(Box::new(connector::Paypal::new()))) - } - enums::Connector::Paystack => { - Ok(ConnectorEnum::Old(Box::new(connector::Paystack::new()))) - } - // enums::Connector::Thunes => Ok(ConnectorEnum::Old(Box::new(connector::Thunes))), - enums::Connector::Tokenio => { - Ok(ConnectorEnum::Old(Box::new(connector::Tokenio::new()))) - } - enums::Connector::Trustpay => { - Ok(ConnectorEnum::Old(Box::new(connector::Trustpay::new()))) - } - enums::Connector::Tsys => Ok(ConnectorEnum::Old(Box::new(connector::Tsys::new()))), - // enums::Connector::UnifiedAuthenticationService => Ok(ConnectorEnum::Old(Box::new( - // connector::UnifiedAuthenticationService, - // ))), - enums::Connector::Vgs => Ok(ConnectorEnum::Old(Box::new(connector::Vgs::new()))), - enums::Connector::Volt => Ok(ConnectorEnum::Old(Box::new(connector::Volt::new()))), - enums::Connector::Wellsfargo => { - Ok(ConnectorEnum::Old(Box::new(connector::Wellsfargo::new()))) - } - - // enums::Connector::Wellsfargopayout => { - // Ok(Box::new(connector::Wellsfargopayout::new())) - // } - enums::Connector::Zen => Ok(ConnectorEnum::Old(Box::new(&connector::Zen))), - enums::Connector::Zsl => Ok(ConnectorEnum::Old(Box::new(&connector::Zsl))), - enums::Connector::Plaid => { - Ok(ConnectorEnum::Old(Box::new(connector::Plaid::new()))) - } - enums::Connector::Signifyd - | enums::Connector::Riskified - | enums::Connector::Gpayments - | enums::Connector::Threedsecureio - | enums::Connector::Taxjar => { - Err(report!(errors::ConnectorError::InvalidConnectorName) - .attach_printable(format!("invalid connector name: {connector_name}"))) - .change_context(errors::ApiErrorResponse::InternalServerError) - } - }, - Err(_) => Err(report!(errors::ConnectorError::InvalidConnectorName) - .attach_printable(format!("invalid connector name: {connector_name}"))) - .change_context(errors::ApiErrorResponse::InternalServerError), - } - } -} - #[cfg(test)] mod test { #![allow(clippy::unwrap_used)] diff --git a/crates/router/src/types/api/connector_mapping.rs b/crates/router/src/types/api/connector_mapping.rs new file mode 100644 index 0000000000..3dbb241622 --- /dev/null +++ b/crates/router/src/types/api/connector_mapping.rs @@ -0,0 +1,439 @@ +use std::str::FromStr; + +use error_stack::{report, ResultExt}; + +use crate::{ + configs::settings::Connectors, + connector, + core::errors::{self, CustomResult}, + services::connector_integration_interface::ConnectorEnum, + types::{self, api::enums}, +}; + +/// Routing algorithm will output merchant connector identifier instead of connector name +/// In order to support backwards compatibility for older routing algorithms and merchant accounts +/// the support for connector name is retained +#[derive(Clone, Debug)] +pub struct ConnectorData { + pub connector: ConnectorEnum, + pub connector_name: types::Connector, + pub get_token: GetToken, + pub merchant_connector_id: Option, +} + +// Normal flow will call the connector and follow the flow specific operations (capture, authorize) +// SessionTokenFromMetadata will avoid calling the connector instead create the session token ( for sdk ) +#[derive(Clone, Eq, PartialEq, Debug)] +pub enum GetToken { + GpayMetadata, + SamsungPayMetadata, + ApplePayMetadata, + PaypalSdkMetadata, + PazeMetadata, + Connector, +} + +impl ConnectorData { + pub fn get_connector_by_name( + _connectors: &Connectors, + name: &str, + connector_type: GetToken, + connector_id: Option, + ) -> CustomResult { + let connector = Self::convert_connector(name)?; + let connector_name = enums::Connector::from_str(name) + .change_context(errors::ConnectorError::InvalidConnectorName) + .change_context(errors::ApiErrorResponse::InternalServerError) + .attach_printable_lazy(|| format!("unable to parse connector name {name}"))?; + Ok(Self { + connector, + connector_name, + get_token: connector_type, + merchant_connector_id: connector_id, + }) + } + + #[cfg(feature = "payouts")] + pub fn get_payout_connector_by_name( + _connectors: &Connectors, + name: &str, + connector_type: GetToken, + connector_id: Option, + ) -> CustomResult { + let connector = Self::convert_connector(name)?; + let payout_connector_name = enums::PayoutConnectors::from_str(name) + .change_context(errors::ConnectorError::InvalidConnectorName) + .change_context(errors::ApiErrorResponse::InternalServerError) + .attach_printable_lazy(|| format!("unable to parse payout connector name {name}"))?; + let connector_name = enums::Connector::from(payout_connector_name); + Ok(Self { + connector, + connector_name, + get_token: connector_type, + merchant_connector_id: connector_id, + }) + } + + #[cfg(feature = "v2")] + pub fn get_external_vault_connector_by_name( + _connectors: &Connectors, + connector: &enums::Connector, + connector_type: GetToken, + connector_id: Option, + ) -> CustomResult { + let connector_enum = Self::convert_connector(&connector.to_string())?; + let external_vault_connector_name = + enums::VaultConnectors::from_str(&connector.to_string()) + .change_context(errors::ConnectorError::InvalidConnectorName) + .change_context(errors::ApiErrorResponse::InternalServerError) + .attach_printable_lazy(|| { + format!("unable to parse external vault connector name {connector:?}") + })?; + let connector_name = enums::Connector::from(external_vault_connector_name); + Ok(Self { + connector: connector_enum, + connector_name, + get_token: connector_type, + merchant_connector_id: connector_id, + }) + } + + pub fn convert_connector( + connector_name: &str, + ) -> CustomResult { + match enums::Connector::from_str(connector_name) { + Ok(name) => match name { + enums::Connector::Aci => Ok(ConnectorEnum::Old(Box::new(connector::Aci::new()))), + enums::Connector::Adyen => { + Ok(ConnectorEnum::Old(Box::new(connector::Adyen::new()))) + } + enums::Connector::Adyenplatform => Ok(ConnectorEnum::Old(Box::new( + connector::Adyenplatform::new(), + ))), + enums::Connector::Airwallex => { + Ok(ConnectorEnum::Old(Box::new(connector::Airwallex::new()))) + } + // enums::Connector::Amazonpay => { + // Ok(ConnectorEnum::Old(Box::new(connector::Amazonpay))) + // } + enums::Connector::Archipel => { + Ok(ConnectorEnum::Old(Box::new(connector::Archipel::new()))) + } + enums::Connector::Authipay => { + Ok(ConnectorEnum::Old(Box::new(connector::Authipay::new()))) + } + enums::Connector::Authorizedotnet => { + Ok(ConnectorEnum::Old(Box::new(&connector::Authorizedotnet))) + } + enums::Connector::Bambora => Ok(ConnectorEnum::Old(Box::new(&connector::Bambora))), + enums::Connector::Bamboraapac => { + Ok(ConnectorEnum::Old(Box::new(connector::Bamboraapac::new()))) + } + enums::Connector::Bankofamerica => { + Ok(ConnectorEnum::Old(Box::new(&connector::Bankofamerica))) + } + enums::Connector::Barclaycard => { + Ok(ConnectorEnum::Old(Box::new(&connector::Barclaycard))) + } + enums::Connector::Billwerk => { + Ok(ConnectorEnum::Old(Box::new(connector::Billwerk::new()))) + } + enums::Connector::Bitpay => { + Ok(ConnectorEnum::Old(Box::new(connector::Bitpay::new()))) + } + enums::Connector::Bluesnap => { + Ok(ConnectorEnum::Old(Box::new(connector::Bluesnap::new()))) + } + enums::Connector::Boku => Ok(ConnectorEnum::Old(Box::new(connector::Boku::new()))), + enums::Connector::Braintree => { + Ok(ConnectorEnum::Old(Box::new(connector::Braintree::new()))) + } + enums::Connector::Cashtocode => { + Ok(ConnectorEnum::Old(Box::new(connector::Cashtocode::new()))) + } + enums::Connector::Celero => { + Ok(ConnectorEnum::Old(Box::new(connector::Celero::new()))) + } + enums::Connector::Chargebee => { + Ok(ConnectorEnum::Old(Box::new(connector::Chargebee::new()))) + } + // enums::Connector::Checkbook => { + // Ok(ConnectorEnum::Old(Box::new(connector::Checkbook))) + // } + enums::Connector::Checkout => { + Ok(ConnectorEnum::Old(Box::new(connector::Checkout::new()))) + } + enums::Connector::Coinbase => { + Ok(ConnectorEnum::Old(Box::new(&connector::Coinbase))) + } + enums::Connector::Coingate => { + Ok(ConnectorEnum::Old(Box::new(connector::Coingate::new()))) + } + enums::Connector::Cryptopay => { + Ok(ConnectorEnum::Old(Box::new(connector::Cryptopay::new()))) + } + enums::Connector::CtpMastercard => { + Ok(ConnectorEnum::Old(Box::new(&connector::CtpMastercard))) + } + enums::Connector::CtpVisa => Ok(ConnectorEnum::Old(Box::new( + connector::UnifiedAuthenticationService::new(), + ))), + enums::Connector::Cybersource => { + Ok(ConnectorEnum::Old(Box::new(connector::Cybersource::new()))) + } + enums::Connector::Datatrans => { + Ok(ConnectorEnum::Old(Box::new(connector::Datatrans::new()))) + } + enums::Connector::Deutschebank => { + Ok(ConnectorEnum::Old(Box::new(connector::Deutschebank::new()))) + } + enums::Connector::Digitalvirgo => { + Ok(ConnectorEnum::Old(Box::new(connector::Digitalvirgo::new()))) + } + enums::Connector::Dlocal => Ok(ConnectorEnum::Old(Box::new(&connector::Dlocal))), + #[cfg(feature = "dummy_connector")] + enums::Connector::DummyConnector1 => Ok(ConnectorEnum::Old(Box::new( + &connector::DummyConnector::<1>, + ))), + #[cfg(feature = "dummy_connector")] + enums::Connector::DummyConnector2 => Ok(ConnectorEnum::Old(Box::new( + &connector::DummyConnector::<2>, + ))), + #[cfg(feature = "dummy_connector")] + enums::Connector::DummyConnector3 => Ok(ConnectorEnum::Old(Box::new( + &connector::DummyConnector::<3>, + ))), + #[cfg(feature = "dummy_connector")] + enums::Connector::DummyConnector4 => Ok(ConnectorEnum::Old(Box::new( + &connector::DummyConnector::<4>, + ))), + #[cfg(feature = "dummy_connector")] + enums::Connector::DummyConnector5 => Ok(ConnectorEnum::Old(Box::new( + &connector::DummyConnector::<5>, + ))), + #[cfg(feature = "dummy_connector")] + enums::Connector::DummyConnector6 => Ok(ConnectorEnum::Old(Box::new( + &connector::DummyConnector::<6>, + ))), + #[cfg(feature = "dummy_connector")] + enums::Connector::DummyConnector7 => Ok(ConnectorEnum::Old(Box::new( + &connector::DummyConnector::<7>, + ))), + #[cfg(feature = "dummy_connector")] + enums::Connector::DummyBillingConnector => Ok(ConnectorEnum::Old(Box::new( + &connector::DummyConnector::<8>, + ))), + // enums::Connector::Dwolla => { + // Ok(ConnectorEnum::Old(Box::new(connector::Dwolla::new()))) + // } + enums::Connector::Ebanx => { + Ok(ConnectorEnum::Old(Box::new(connector::Ebanx::new()))) + } + enums::Connector::Elavon => { + Ok(ConnectorEnum::Old(Box::new(connector::Elavon::new()))) + } + enums::Connector::Facilitapay => { + Ok(ConnectorEnum::Old(Box::new(connector::Facilitapay::new()))) + } + enums::Connector::Fiserv => { + Ok(ConnectorEnum::Old(Box::new(connector::Fiserv::new()))) + } + enums::Connector::Fiservemea => { + Ok(ConnectorEnum::Old(Box::new(connector::Fiservemea::new()))) + } + enums::Connector::Fiuu => Ok(ConnectorEnum::Old(Box::new(connector::Fiuu::new()))), + enums::Connector::Forte => { + Ok(ConnectorEnum::Old(Box::new(connector::Forte::new()))) + } + enums::Connector::Getnet => { + Ok(ConnectorEnum::Old(Box::new(connector::Getnet::new()))) + } + enums::Connector::Globalpay => { + Ok(ConnectorEnum::Old(Box::new(connector::Globalpay::new()))) + } + enums::Connector::Globepay => { + Ok(ConnectorEnum::Old(Box::new(connector::Globepay::new()))) + } + enums::Connector::Gocardless => { + Ok(ConnectorEnum::Old(Box::new(&connector::Gocardless))) + } + enums::Connector::Hipay => { + Ok(ConnectorEnum::Old(Box::new(connector::Hipay::new()))) + } + enums::Connector::Helcim => { + Ok(ConnectorEnum::Old(Box::new(connector::Helcim::new()))) + } + enums::Connector::HyperswitchVault => { + Ok(ConnectorEnum::Old(Box::new(&connector::HyperswitchVault))) + } + enums::Connector::Iatapay => { + Ok(ConnectorEnum::Old(Box::new(connector::Iatapay::new()))) + } + enums::Connector::Inespay => { + Ok(ConnectorEnum::Old(Box::new(connector::Inespay::new()))) + } + enums::Connector::Itaubank => { + Ok(ConnectorEnum::Old(Box::new(connector::Itaubank::new()))) + } + enums::Connector::Jpmorgan => { + Ok(ConnectorEnum::Old(Box::new(connector::Jpmorgan::new()))) + } + enums::Connector::Juspaythreedsserver => Ok(ConnectorEnum::Old(Box::new( + connector::Juspaythreedsserver::new(), + ))), + enums::Connector::Klarna => { + Ok(ConnectorEnum::Old(Box::new(connector::Klarna::new()))) + } + enums::Connector::Mollie => { + // enums::Connector::Moneris => Ok(ConnectorEnum::Old(Box::new(connector::Moneris))), + Ok(ConnectorEnum::Old(Box::new(connector::Mollie::new()))) + } + enums::Connector::Moneris => { + Ok(ConnectorEnum::Old(Box::new(connector::Moneris::new()))) + } + enums::Connector::Nexixpay => { + Ok(ConnectorEnum::Old(Box::new(connector::Nexixpay::new()))) + } + enums::Connector::Nmi => Ok(ConnectorEnum::Old(Box::new(connector::Nmi::new()))), + enums::Connector::Nomupay => { + Ok(ConnectorEnum::Old(Box::new(connector::Nomupay::new()))) + } + enums::Connector::Noon => Ok(ConnectorEnum::Old(Box::new(connector::Noon::new()))), + // enums::Connector::Nordea => Ok(ConnectorEnum::Old(Box::new(connector::Nordea::new()))), + enums::Connector::Novalnet => { + Ok(ConnectorEnum::Old(Box::new(connector::Novalnet::new()))) + } + enums::Connector::Nuvei => Ok(ConnectorEnum::Old(Box::new(&connector::Nuvei))), + enums::Connector::Opennode => { + Ok(ConnectorEnum::Old(Box::new(&connector::Opennode))) + } + enums::Connector::Paybox => { + Ok(ConnectorEnum::Old(Box::new(connector::Paybox::new()))) + } + // "payeezy" => Ok(ConnectorIntegrationEnum::Old(Box::new(&connector::Payeezy)), As psync and rsync are not supported by this connector, it is added as template code for future usage + // enums::Connector::Payload => { + // Ok(ConnectorEnum::Old(Box::new(connector::Paybload::new()))) + // } + enums::Connector::Payload => { + Ok(ConnectorEnum::Old(Box::new(connector::Payload::new()))) + } + enums::Connector::Payme => { + Ok(ConnectorEnum::Old(Box::new(connector::Payme::new()))) + } + enums::Connector::Payone => { + Ok(ConnectorEnum::Old(Box::new(connector::Payone::new()))) + } + enums::Connector::Payu => Ok(ConnectorEnum::Old(Box::new(connector::Payu::new()))), + enums::Connector::Placetopay => { + Ok(ConnectorEnum::Old(Box::new(connector::Placetopay::new()))) + } + enums::Connector::Powertranz => { + Ok(ConnectorEnum::Old(Box::new(&connector::Powertranz))) + } + enums::Connector::Prophetpay => { + Ok(ConnectorEnum::Old(Box::new(&connector::Prophetpay))) + } + enums::Connector::Razorpay => { + Ok(ConnectorEnum::Old(Box::new(connector::Razorpay::new()))) + } + enums::Connector::Rapyd => { + Ok(ConnectorEnum::Old(Box::new(connector::Rapyd::new()))) + } + enums::Connector::Recurly => { + Ok(ConnectorEnum::New(Box::new(connector::Recurly::new()))) + } + enums::Connector::Redsys => { + Ok(ConnectorEnum::Old(Box::new(connector::Redsys::new()))) + } + enums::Connector::Santander => { + Ok(ConnectorEnum::Old(Box::new(connector::Santander::new()))) + } + enums::Connector::Shift4 => { + Ok(ConnectorEnum::Old(Box::new(connector::Shift4::new()))) + } + enums::Connector::Square => Ok(ConnectorEnum::Old(Box::new(&connector::Square))), + enums::Connector::Stax => Ok(ConnectorEnum::Old(Box::new(&connector::Stax))), + enums::Connector::Stripe => { + Ok(ConnectorEnum::Old(Box::new(connector::Stripe::new()))) + } + enums::Connector::Stripebilling => Ok(ConnectorEnum::Old(Box::new( + connector::Stripebilling::new(), + ))), + enums::Connector::Wise => Ok(ConnectorEnum::Old(Box::new(connector::Wise::new()))), + enums::Connector::Worldline => { + Ok(ConnectorEnum::Old(Box::new(&connector::Worldline))) + } + enums::Connector::Worldpay => { + Ok(ConnectorEnum::Old(Box::new(connector::Worldpay::new()))) + } + enums::Connector::Worldpayvantiv => Ok(ConnectorEnum::Old(Box::new( + connector::Worldpayvantiv::new(), + ))), + enums::Connector::Worldpayxml => { + Ok(ConnectorEnum::Old(Box::new(connector::Worldpayxml::new()))) + } + enums::Connector::Xendit => { + Ok(ConnectorEnum::Old(Box::new(connector::Xendit::new()))) + } + enums::Connector::Mifinity => { + Ok(ConnectorEnum::Old(Box::new(connector::Mifinity::new()))) + } + enums::Connector::Multisafepay => { + Ok(ConnectorEnum::Old(Box::new(connector::Multisafepay::new()))) + } + enums::Connector::Netcetera => { + Ok(ConnectorEnum::Old(Box::new(&connector::Netcetera))) + } + enums::Connector::Nexinets => { + Ok(ConnectorEnum::Old(Box::new(&connector::Nexinets))) + } + // enums::Connector::Nexixpay => { + // Ok(ConnectorEnum::Old(Box::new(&connector::Nexixpay))) + // } + enums::Connector::Paypal => { + Ok(ConnectorEnum::Old(Box::new(connector::Paypal::new()))) + } + enums::Connector::Paystack => { + Ok(ConnectorEnum::Old(Box::new(connector::Paystack::new()))) + } + // enums::Connector::Thunes => Ok(ConnectorEnum::Old(Box::new(connector::Thunes))), + enums::Connector::Tokenio => { + Ok(ConnectorEnum::Old(Box::new(connector::Tokenio::new()))) + } + enums::Connector::Trustpay => { + Ok(ConnectorEnum::Old(Box::new(connector::Trustpay::new()))) + } + enums::Connector::Tsys => Ok(ConnectorEnum::Old(Box::new(connector::Tsys::new()))), + // enums::Connector::UnifiedAuthenticationService => Ok(ConnectorEnum::Old(Box::new( + // connector::UnifiedAuthenticationService, + // ))), + enums::Connector::Vgs => Ok(ConnectorEnum::Old(Box::new(connector::Vgs::new()))), + enums::Connector::Volt => Ok(ConnectorEnum::Old(Box::new(connector::Volt::new()))), + enums::Connector::Wellsfargo => { + Ok(ConnectorEnum::Old(Box::new(connector::Wellsfargo::new()))) + } + + // enums::Connector::Wellsfargopayout => { + // Ok(Box::new(connector::Wellsfargopayout::new())) + // } + enums::Connector::Zen => Ok(ConnectorEnum::Old(Box::new(&connector::Zen))), + enums::Connector::Zsl => Ok(ConnectorEnum::Old(Box::new(&connector::Zsl))), + enums::Connector::Plaid => { + Ok(ConnectorEnum::Old(Box::new(connector::Plaid::new()))) + } + enums::Connector::Signifyd + | enums::Connector::Riskified + | enums::Connector::Gpayments + | enums::Connector::Threedsecureio + | enums::Connector::Taxjar => { + Err(report!(errors::ConnectorError::InvalidConnectorName) + .attach_printable(format!("invalid connector name: {connector_name}"))) + .change_context(errors::ApiErrorResponse::InternalServerError) + } + }, + Err(_) => Err(report!(errors::ConnectorError::InvalidConnectorName) + .attach_printable(format!("invalid connector name: {connector_name}"))) + .change_context(errors::ApiErrorResponse::InternalServerError), + } + } +} diff --git a/crates/router/src/types/connector_transformers.rs b/crates/router/src/types/connector_transformers.rs new file mode 100644 index 0000000000..75b32b3ec1 --- /dev/null +++ b/crates/router/src/types/connector_transformers.rs @@ -0,0 +1,188 @@ +use api_models::enums as api_enums; + +use super::ForeignTryFrom; + +impl ForeignTryFrom for common_enums::RoutableConnectors { + type Error = error_stack::Report; + + fn foreign_try_from(from: api_enums::Connector) -> Result { + Ok(match from { + api_enums::Connector::Aci => Self::Aci, + api_enums::Connector::Adyen => Self::Adyen, + api_enums::Connector::Adyenplatform => Self::Adyenplatform, + api_enums::Connector::Airwallex => Self::Airwallex, + // api_enums::Connector::Amazonpay => Self::Amazonpay, + api_enums::Connector::Archipel => Self::Archipel, + api_enums::Connector::Authipay => Self::Authipay, + api_enums::Connector::Authorizedotnet => Self::Authorizedotnet, + api_enums::Connector::Bambora => Self::Bambora, + api_enums::Connector::Bamboraapac => Self::Bamboraapac, + api_enums::Connector::Bankofamerica => Self::Bankofamerica, + api_enums::Connector::Barclaycard => Self::Barclaycard, + api_enums::Connector::Billwerk => Self::Billwerk, + api_enums::Connector::Bitpay => Self::Bitpay, + api_enums::Connector::Bluesnap => Self::Bluesnap, + api_enums::Connector::Boku => Self::Boku, + api_enums::Connector::Braintree => Self::Braintree, + api_enums::Connector::Cashtocode => Self::Cashtocode, + api_enums::Connector::Celero => Self::Celero, + api_enums::Connector::Chargebee => Self::Chargebee, + // api_enums::Connector::Checkbook => Self::Checkbook, + api_enums::Connector::Checkout => Self::Checkout, + api_enums::Connector::Coinbase => Self::Coinbase, + api_enums::Connector::Coingate => Self::Coingate, + api_enums::Connector::Cryptopay => Self::Cryptopay, + api_enums::Connector::CtpVisa => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "ctp visa is not a routable connector".to_string(), + })? + } + api_enums::Connector::CtpMastercard => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "ctp mastercard is not a routable connector".to_string(), + })? + } + api_enums::Connector::Cybersource => Self::Cybersource, + api_enums::Connector::Datatrans => Self::Datatrans, + api_enums::Connector::Deutschebank => Self::Deutschebank, + api_enums::Connector::Digitalvirgo => Self::Digitalvirgo, + api_enums::Connector::Dlocal => Self::Dlocal, + // api_enums::Connector::Dwolla => Self::Dwolla, + api_enums::Connector::Ebanx => Self::Ebanx, + api_enums::Connector::Elavon => Self::Elavon, + api_enums::Connector::Facilitapay => Self::Facilitapay, + api_enums::Connector::Fiserv => Self::Fiserv, + api_enums::Connector::Fiservemea => Self::Fiservemea, + api_enums::Connector::Fiuu => Self::Fiuu, + api_enums::Connector::Forte => Self::Forte, + api_enums::Connector::Getnet => Self::Getnet, + api_enums::Connector::Globalpay => Self::Globalpay, + api_enums::Connector::Globepay => Self::Globepay, + api_enums::Connector::Gocardless => Self::Gocardless, + api_enums::Connector::Gpayments => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "gpayments is not a routable connector".to_string(), + })? + } + api_enums::Connector::Hipay => Self::Hipay, + api_enums::Connector::Helcim => Self::Helcim, + api_enums::Connector::HyperswitchVault => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "Hyperswitch Vault is not a routable connector".to_string(), + })? + } + api_enums::Connector::Iatapay => Self::Iatapay, + api_enums::Connector::Inespay => Self::Inespay, + api_enums::Connector::Itaubank => Self::Itaubank, + api_enums::Connector::Jpmorgan => Self::Jpmorgan, + api_enums::Connector::Juspaythreedsserver => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "juspaythreedsserver is not a routable connector".to_string(), + })? + } + api_enums::Connector::Klarna => Self::Klarna, + api_enums::Connector::Mifinity => Self::Mifinity, + api_enums::Connector::Mollie => Self::Mollie, + api_enums::Connector::Moneris => Self::Moneris, + api_enums::Connector::Multisafepay => Self::Multisafepay, + api_enums::Connector::Netcetera => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "netcetera is not a routable connector".to_string(), + })? + } + api_enums::Connector::Nexinets => Self::Nexinets, + api_enums::Connector::Nexixpay => Self::Nexixpay, + api_enums::Connector::Nmi => Self::Nmi, + api_enums::Connector::Nomupay => Self::Nomupay, + api_enums::Connector::Noon => Self::Noon, + // api_enums::Connector::Nordea => Self::Nordea, + api_enums::Connector::Novalnet => Self::Novalnet, + api_enums::Connector::Nuvei => Self::Nuvei, + api_enums::Connector::Opennode => Self::Opennode, + api_enums::Connector::Paybox => Self::Paybox, + api_enums::Connector::Payload => Self::Payload, + api_enums::Connector::Payme => Self::Payme, + api_enums::Connector::Payone => Self::Payone, + api_enums::Connector::Paypal => Self::Paypal, + api_enums::Connector::Paystack => Self::Paystack, + api_enums::Connector::Payu => Self::Payu, + api_models::enums::Connector::Placetopay => Self::Placetopay, + api_enums::Connector::Plaid => Self::Plaid, + api_enums::Connector::Powertranz => Self::Powertranz, + api_enums::Connector::Prophetpay => Self::Prophetpay, + api_enums::Connector::Rapyd => Self::Rapyd, + api_enums::Connector::Razorpay => Self::Razorpay, + api_enums::Connector::Recurly => Self::Recurly, + api_enums::Connector::Redsys => Self::Redsys, + api_enums::Connector::Santander => Self::Santander, + api_enums::Connector::Shift4 => Self::Shift4, + api_enums::Connector::Signifyd => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "signifyd is not a routable connector".to_string(), + })? + } + api_enums::Connector::Riskified => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "riskified is not a routable connector".to_string(), + })? + } + api_enums::Connector::Square => Self::Square, + api_enums::Connector::Stax => Self::Stax, + api_enums::Connector::Stripe => Self::Stripe, + api_enums::Connector::Stripebilling => Self::Stripebilling, + // api_enums::Connector::Thunes => Self::Thunes, + api_enums::Connector::Tokenio => Self::Tokenio, + api_enums::Connector::Trustpay => Self::Trustpay, + api_enums::Connector::Tsys => Self::Tsys, + // api_enums::Connector::UnifiedAuthenticationService => { + // Self::UnifiedAuthenticationService + // } + api_enums::Connector::Vgs => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "Vgs is not a routable connector".to_string(), + })? + } + api_enums::Connector::Volt => Self::Volt, + api_enums::Connector::Wellsfargo => Self::Wellsfargo, + // api_enums::Connector::Wellsfargopayout => Self::Wellsfargopayout, + api_enums::Connector::Wise => Self::Wise, + api_enums::Connector::Worldline => Self::Worldline, + api_enums::Connector::Worldpay => Self::Worldpay, + api_enums::Connector::Worldpayvantiv => Self::Worldpayvantiv, + api_enums::Connector::Worldpayxml => Self::Worldpayxml, + api_enums::Connector::Xendit => Self::Xendit, + api_enums::Connector::Zen => Self::Zen, + api_enums::Connector::Zsl => Self::Zsl, + #[cfg(feature = "dummy_connector")] + api_enums::Connector::DummyBillingConnector => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "stripe_billing_test is not a routable connector".to_string(), + })? + } + #[cfg(feature = "dummy_connector")] + api_enums::Connector::DummyConnector1 => Self::DummyConnector1, + #[cfg(feature = "dummy_connector")] + api_enums::Connector::DummyConnector2 => Self::DummyConnector2, + #[cfg(feature = "dummy_connector")] + api_enums::Connector::DummyConnector3 => Self::DummyConnector3, + #[cfg(feature = "dummy_connector")] + api_enums::Connector::DummyConnector4 => Self::DummyConnector4, + #[cfg(feature = "dummy_connector")] + api_enums::Connector::DummyConnector5 => Self::DummyConnector5, + #[cfg(feature = "dummy_connector")] + api_enums::Connector::DummyConnector6 => Self::DummyConnector6, + #[cfg(feature = "dummy_connector")] + api_enums::Connector::DummyConnector7 => Self::DummyConnector7, + api_enums::Connector::Threedsecureio => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "threedsecureio is not a routable connector".to_string(), + })? + } + api_enums::Connector::Taxjar => { + Err(common_utils::errors::ValidationError::InvalidValue { + message: "Taxjar is not a routable connector".to_string(), + })? + } + }) + } +} diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index 35ba30da6a..1e08af4b55 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -201,192 +201,6 @@ impl ForeignFrom for payments::MandateType { } } -impl ForeignTryFrom for common_enums::RoutableConnectors { - type Error = error_stack::Report; - - fn foreign_try_from(from: api_enums::Connector) -> Result { - Ok(match from { - api_enums::Connector::Aci => Self::Aci, - api_enums::Connector::Authipay => Self::Authipay, - api_enums::Connector::Adyen => Self::Adyen, - api_enums::Connector::Adyenplatform => Self::Adyenplatform, - api_enums::Connector::Airwallex => Self::Airwallex, - // api_enums::Connector::Amazonpay => Self::Amazonpay, - api_enums::Connector::Archipel => Self::Archipel, - api_enums::Connector::Authorizedotnet => Self::Authorizedotnet, - api_enums::Connector::Bambora => Self::Bambora, - api_enums::Connector::Bamboraapac => Self::Bamboraapac, - api_enums::Connector::Bankofamerica => Self::Bankofamerica, - api_enums::Connector::Barclaycard => Self::Barclaycard, - api_enums::Connector::Billwerk => Self::Billwerk, - api_enums::Connector::Bitpay => Self::Bitpay, - api_enums::Connector::Bluesnap => Self::Bluesnap, - api_enums::Connector::Boku => Self::Boku, - api_enums::Connector::Braintree => Self::Braintree, - api_enums::Connector::Cashtocode => Self::Cashtocode, - api_enums::Connector::Celero => Self::Celero, - api_enums::Connector::Chargebee => Self::Chargebee, - // api_enums::Connector::Checkbook => Self::Checkbook, - api_enums::Connector::Checkout => Self::Checkout, - api_enums::Connector::Coinbase => Self::Coinbase, - api_enums::Connector::Coingate => Self::Coingate, - api_enums::Connector::Cryptopay => Self::Cryptopay, - api_enums::Connector::CtpVisa => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "ctp visa is not a routable connector".to_string(), - })? - } - api_enums::Connector::CtpMastercard => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "ctp mastercard is not a routable connector".to_string(), - })? - } - api_enums::Connector::Cybersource => Self::Cybersource, - api_enums::Connector::Datatrans => Self::Datatrans, - api_enums::Connector::Deutschebank => Self::Deutschebank, - api_enums::Connector::Digitalvirgo => Self::Digitalvirgo, - api_enums::Connector::Dlocal => Self::Dlocal, - // api_enums::Connector::Dwolla => Self::Dwolla, - api_enums::Connector::Ebanx => Self::Ebanx, - api_enums::Connector::Elavon => Self::Elavon, - api_enums::Connector::Facilitapay => Self::Facilitapay, - api_enums::Connector::Fiserv => Self::Fiserv, - api_enums::Connector::Fiservemea => Self::Fiservemea, - api_enums::Connector::Fiuu => Self::Fiuu, - api_enums::Connector::Forte => Self::Forte, - api_enums::Connector::Getnet => Self::Getnet, - api_enums::Connector::Globalpay => Self::Globalpay, - api_enums::Connector::Globepay => Self::Globepay, - api_enums::Connector::Gocardless => Self::Gocardless, - api_enums::Connector::Gpayments => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "gpayments is not a routable connector".to_string(), - })? - } - api_enums::Connector::Hipay => Self::Hipay, - api_enums::Connector::Helcim => Self::Helcim, - api_enums::Connector::HyperswitchVault => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "Hyperswitch Vault is not a routable connector".to_string(), - })? - } - api_enums::Connector::Iatapay => Self::Iatapay, - api_enums::Connector::Inespay => Self::Inespay, - api_enums::Connector::Itaubank => Self::Itaubank, - api_enums::Connector::Jpmorgan => Self::Jpmorgan, - api_enums::Connector::Juspaythreedsserver => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "juspaythreedsserver is not a routable connector".to_string(), - })? - } - api_enums::Connector::Klarna => Self::Klarna, - api_enums::Connector::Mifinity => Self::Mifinity, - api_enums::Connector::Mollie => Self::Mollie, - api_enums::Connector::Moneris => Self::Moneris, - api_enums::Connector::Multisafepay => Self::Multisafepay, - api_enums::Connector::Netcetera => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "netcetera is not a routable connector".to_string(), - })? - } - api_enums::Connector::Nexinets => Self::Nexinets, - api_enums::Connector::Nexixpay => Self::Nexixpay, - api_enums::Connector::Nmi => Self::Nmi, - api_enums::Connector::Nomupay => Self::Nomupay, - api_enums::Connector::Noon => Self::Noon, - // api_enums::Connector::Nordea => Self::Nordea, - api_enums::Connector::Novalnet => Self::Novalnet, - api_enums::Connector::Nuvei => Self::Nuvei, - api_enums::Connector::Opennode => Self::Opennode, - api_enums::Connector::Paybox => Self::Paybox, - api_enums::Connector::Payload => Self::Payload, - api_enums::Connector::Payme => Self::Payme, - api_enums::Connector::Payone => Self::Payone, - api_enums::Connector::Paypal => Self::Paypal, - api_enums::Connector::Paystack => Self::Paystack, - api_enums::Connector::Payu => Self::Payu, - api_models::enums::Connector::Placetopay => Self::Placetopay, - api_enums::Connector::Plaid => Self::Plaid, - api_enums::Connector::Powertranz => Self::Powertranz, - api_enums::Connector::Prophetpay => Self::Prophetpay, - api_enums::Connector::Rapyd => Self::Rapyd, - api_enums::Connector::Razorpay => Self::Razorpay, - api_enums::Connector::Recurly => Self::Recurly, - api_enums::Connector::Redsys => Self::Redsys, - api_enums::Connector::Santander => Self::Santander, - api_enums::Connector::Shift4 => Self::Shift4, - api_enums::Connector::Signifyd => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "signifyd is not a routable connector".to_string(), - })? - } - api_enums::Connector::Riskified => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "riskified is not a routable connector".to_string(), - })? - } - api_enums::Connector::Square => Self::Square, - api_enums::Connector::Stax => Self::Stax, - api_enums::Connector::Stripe => Self::Stripe, - api_enums::Connector::Stripebilling => Self::Stripebilling, - // api_enums::Connector::Taxjar => Self::Taxjar, - // api_enums::Connector::Thunes => Self::Thunes, - api_enums::Connector::Tokenio => Self::Tokenio, - api_enums::Connector::Trustpay => Self::Trustpay, - api_enums::Connector::Tsys => Self::Tsys, - // api_enums::Connector::UnifiedAuthenticationService => { - // Self::UnifiedAuthenticationService - // } - api_enums::Connector::Vgs => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "Vgs is not a routable connector".to_string(), - })? - } - api_enums::Connector::Volt => Self::Volt, - api_enums::Connector::Wellsfargo => Self::Wellsfargo, - // api_enums::Connector::Wellsfargopayout => Self::Wellsfargopayout, - api_enums::Connector::Wise => Self::Wise, - api_enums::Connector::Worldline => Self::Worldline, - api_enums::Connector::Worldpay => Self::Worldpay, - api_enums::Connector::Worldpayvantiv => Self::Worldpayvantiv, - api_enums::Connector::Worldpayxml => Self::Worldpayxml, - api_enums::Connector::Xendit => Self::Xendit, - api_enums::Connector::Zen => Self::Zen, - api_enums::Connector::Zsl => Self::Zsl, - #[cfg(feature = "dummy_connector")] - api_enums::Connector::DummyBillingConnector => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "stripe_billing_test is not a routable connector".to_string(), - })? - } - #[cfg(feature = "dummy_connector")] - api_enums::Connector::DummyConnector1 => Self::DummyConnector1, - #[cfg(feature = "dummy_connector")] - api_enums::Connector::DummyConnector2 => Self::DummyConnector2, - #[cfg(feature = "dummy_connector")] - api_enums::Connector::DummyConnector3 => Self::DummyConnector3, - #[cfg(feature = "dummy_connector")] - api_enums::Connector::DummyConnector4 => Self::DummyConnector4, - #[cfg(feature = "dummy_connector")] - api_enums::Connector::DummyConnector5 => Self::DummyConnector5, - #[cfg(feature = "dummy_connector")] - api_enums::Connector::DummyConnector6 => Self::DummyConnector6, - #[cfg(feature = "dummy_connector")] - api_enums::Connector::DummyConnector7 => Self::DummyConnector7, - api_enums::Connector::Threedsecureio => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "threedsecureio is not a routable connector".to_string(), - })? - } - api_enums::Connector::Taxjar => { - Err(common_utils::errors::ValidationError::InvalidValue { - message: "Taxjar is not a routable connector".to_string(), - })? - } - }) - } -} - impl ForeignFrom for payments::MandateAmountData { fn foreign_from(from: storage_enums::MandateAmountData) -> Self { Self { diff --git a/scripts/add_connector.sh b/scripts/add_connector.sh index 98490f1232..863906c7bd 100755 --- a/scripts/add_connector.sh +++ b/scripts/add_connector.sh @@ -46,7 +46,7 @@ cd $SCRIPT/.. # Remove template files if already created for this connector rm -rf $conn/$payment_gateway $conn/$payment_gateway.rs -git checkout $conn.rs $src/types/api.rs $src/configs/settings.rs config/development.toml config/docker_compose.toml config/config.example.toml loadtest/config/development.toml crates/api_models/src/connector_enums.rs crates/euclid/src/enums.rs crates/api_models/src/routing.rs $src/core/payments/flows.rs crates/common_enums/src/connector_enums.rs crates/common_enums/src/connector_enums.rs-e $src/types/transformers.rs $src/core/admin.rs +git checkout $conn.rs $src/types/api/connector_mapping.rs $src/configs/settings.rs config/development.toml config/docker_compose.toml config/config.example.toml loadtest/config/development.toml crates/api_models/src/connector_enums.rs crates/euclid/src/enums.rs crates/api_models/src/routing.rs $src/core/payments/flows.rs crates/common_enums/src/connector_enums.rs crates/common_enums/src/connector_enums.rs-e $src/types/connector_transformers.rs $src/core/admin.rs # Add enum for this connector in required places previous_connector='' @@ -177,11 +177,11 @@ sed -i'' -e "s/^default_imp_for_new_connector_integration_connector_authenticati sed -i'' -e "/pub ${previous_connector}: ConnectorParams,/a\\ pub ${payment_gateway}: ConnectorParams, -" crates/hyperswitch_domain_models/src/configs.rs +" crates/hyperswitch_domain_models/src/connector_endpoints.rs # Remove temporary files created in above step -rm $conn.rs-e $src/types/api.rs-e $src/configs/settings.rs-e config/development.toml-e config/docker_compose.toml-e config/config.example.toml-e loadtest/config/development.toml-e crates/api_models/src/connector_enums.rs-e crates/euclid/src/enums.rs-e crates/api_models/src/routing.rs-e $src/core/payments/flows.rs-e crates/common_enums/src/connector_enums.rs-e $src/types/transformers.rs-e $src/core/admin.rs-e crates/hyperswitch_connectors/src/default_implementations.rs-e crates/hyperswitch_connectors/src/default_implementations_v2.rs-e crates/hyperswitch_interfaces/src/configs.rs-e $src/connector.rs-e config/deployments/integration_test.toml-e config/deployments/production.toml-e config/deployments/sandbox.toml-e temp crates/connector_configs/src/connector.rs-e crates/router/tests/connectors/main.rs-e crates/router/src/core/payments/connector_integration_v2_impls.rs-e crates/hyperswitch_domain_models/src/configs.rs-e +rm $conn.rs-e $src/types/api/connector_mapping.rs-e $src/configs/settings.rs-e config/development.toml-e config/docker_compose.toml-e config/config.example.toml-e loadtest/config/development.toml-e crates/api_models/src/connector_enums.rs-e crates/euclid/src/enums.rs-e crates/api_models/src/routing.rs-e $src/core/payments/flows.rs-e crates/common_enums/src/connector_enums.rs-e $src/types/connector_transformers.rs-e $src/core/admin.rs-e crates/hyperswitch_connectors/src/default_implementations.rs-e crates/hyperswitch_connectors/src/default_implementations_v2.rs-e crates/hyperswitch_interfaces/src/configs.rs-e $src/connector.rs-e config/deployments/integration_test.toml-e config/deployments/production.toml-e config/deployments/sandbox.toml-e temp crates/connector_configs/src/connector.rs-e crates/router/tests/connectors/main.rs-e crates/router/src/core/payments/connector_integration_v2_impls.rs-e crates/hyperswitch_domain_models/src/connector_endpoints.rs-e cd $conn/