feat: implement FRM flows (#2968)

Co-authored-by: Kashif <kashif@protonmail.com>
Co-authored-by: AkshayaFoiger <131388445+AkshayaFoiger@users.noreply.github.com>
Co-authored-by: Kashif <mohammed.kashif@juspay.in>
This commit is contained in:
Kashif
2023-12-05 18:21:32 +05:30
committed by GitHub
parent 792e642ad5
commit 055d838367
45 changed files with 5199 additions and 161 deletions

View File

@ -11,6 +11,8 @@ pub mod setup_mandate_flow;
use async_trait::async_trait;
#[cfg(feature = "frm")]
use crate::types::fraud_check as frm_types;
use crate::{
connector,
core::{
@ -170,6 +172,7 @@ default_imp_for_complete_authorize!(
connector::Payeezy,
connector::Payu,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -247,6 +250,7 @@ default_imp_for_webhook_source_verification!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -326,6 +330,7 @@ default_imp_for_create_customer!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Trustpay,
connector::Tsys,
@ -394,6 +399,7 @@ default_imp_for_connector_redirect_response!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Tsys,
@ -453,6 +459,7 @@ default_imp_for_connector_request_id!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -535,6 +542,7 @@ default_imp_for_accept_dispute!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -635,6 +643,7 @@ default_imp_for_file_upload!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Trustpay,
@ -713,6 +722,7 @@ default_imp_for_submit_evidence!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Trustpay,
@ -791,6 +801,7 @@ default_imp_for_defend_dispute!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -868,6 +879,7 @@ default_imp_for_pre_processing_steps!(
connector::Prophetpay,
connector::Rapyd,
connector::Shift4,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Tsys,
@ -928,6 +940,7 @@ default_imp_for_payouts!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -1007,6 +1020,7 @@ default_imp_for_payouts_create!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -1089,6 +1103,7 @@ default_imp_for_payouts_eligibility!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -1168,6 +1183,7 @@ default_imp_for_payouts_fulfill!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -1247,6 +1263,7 @@ default_imp_for_payouts_cancel!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -1327,6 +1344,7 @@ default_imp_for_payouts_quote!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -1407,6 +1425,7 @@ default_imp_for_payouts_recipient!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -1486,6 +1505,7 @@ default_imp_for_approve!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
@ -1527,6 +1547,481 @@ impl<const T: u8>
}
default_imp_for_reject!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bankofamerica,
connector::Bitpay,
connector::Bluesnap,
connector::Boku,
connector::Braintree,
connector::Cashtocode,
connector::Checkout,
connector::Cryptopay,
connector::Cybersource,
connector::Coinbase,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Globepay,
connector::Gocardless,
connector::Helcim,
connector::Iatapay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nmi,
connector::Noon,
connector::Nuvei,
connector::Opayo,
connector::Opennode,
connector::Payeezy,
connector::Payme,
connector::Paypal,
connector::Payu,
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,
connector::Shift4,
connector::Trustpay,
connector::Tsys,
connector::Volt,
connector::Wise,
connector::Worldline,
connector::Worldpay,
connector::Zen
);
macro_rules! default_imp_for_fraud_check {
($($path:ident::$connector:ident),*) => {
$(
impl api::FraudCheck for $path::$connector {}
)*
};
}
#[cfg(feature = "dummy_connector")]
impl<const T: u8> api::FraudCheck for connector::DummyConnector<T> {}
default_imp_for_fraud_check!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bankofamerica,
connector::Bitpay,
connector::Bluesnap,
connector::Boku,
connector::Braintree,
connector::Cashtocode,
connector::Checkout,
connector::Cryptopay,
connector::Cybersource,
connector::Coinbase,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Globepay,
connector::Gocardless,
connector::Helcim,
connector::Iatapay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nmi,
connector::Noon,
connector::Nuvei,
connector::Opayo,
connector::Opennode,
connector::Payeezy,
connector::Payme,
connector::Paypal,
connector::Payu,
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Square,
connector::Stax,
connector::Stripe,
connector::Shift4,
connector::Trustpay,
connector::Tsys,
connector::Volt,
connector::Wise,
connector::Worldline,
connector::Worldpay,
connector::Zen
);
#[cfg(feature = "frm")]
macro_rules! default_imp_for_frm_sale {
($($path:ident::$connector:ident),*) => {
$(
impl api::FraudCheckSale for $path::$connector {}
impl
services::ConnectorIntegration<
api::Sale,
frm_types::FraudCheckSaleData,
frm_types::FraudCheckResponseData,
> for $path::$connector
{}
)*
};
}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8> api::FraudCheckSale for connector::DummyConnector<T> {}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8>
services::ConnectorIntegration<
api::Sale,
frm_types::FraudCheckSaleData,
frm_types::FraudCheckResponseData,
> for connector::DummyConnector<T>
{
}
#[cfg(feature = "frm")]
default_imp_for_frm_sale!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bankofamerica,
connector::Bitpay,
connector::Bluesnap,
connector::Boku,
connector::Braintree,
connector::Cashtocode,
connector::Checkout,
connector::Cryptopay,
connector::Cybersource,
connector::Coinbase,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Globepay,
connector::Gocardless,
connector::Helcim,
connector::Iatapay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nmi,
connector::Noon,
connector::Nuvei,
connector::Opayo,
connector::Opennode,
connector::Payeezy,
connector::Payme,
connector::Paypal,
connector::Payu,
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Square,
connector::Stax,
connector::Stripe,
connector::Shift4,
connector::Trustpay,
connector::Tsys,
connector::Volt,
connector::Wise,
connector::Worldline,
connector::Worldpay,
connector::Zen
);
#[cfg(feature = "frm")]
macro_rules! default_imp_for_frm_checkout {
($($path:ident::$connector:ident),*) => {
$(
impl api::FraudCheckCheckout for $path::$connector {}
impl
services::ConnectorIntegration<
api::Checkout,
frm_types::FraudCheckCheckoutData,
frm_types::FraudCheckResponseData,
> for $path::$connector
{}
)*
};
}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8> api::FraudCheckCheckout for connector::DummyConnector<T> {}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8>
services::ConnectorIntegration<
api::Checkout,
frm_types::FraudCheckCheckoutData,
frm_types::FraudCheckResponseData,
> for connector::DummyConnector<T>
{
}
#[cfg(feature = "frm")]
default_imp_for_frm_checkout!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bankofamerica,
connector::Bitpay,
connector::Bluesnap,
connector::Boku,
connector::Braintree,
connector::Cashtocode,
connector::Checkout,
connector::Cryptopay,
connector::Cybersource,
connector::Coinbase,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Globepay,
connector::Gocardless,
connector::Helcim,
connector::Iatapay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nmi,
connector::Noon,
connector::Nuvei,
connector::Opayo,
connector::Opennode,
connector::Payeezy,
connector::Payme,
connector::Paypal,
connector::Payu,
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Square,
connector::Stax,
connector::Stripe,
connector::Shift4,
connector::Trustpay,
connector::Tsys,
connector::Volt,
connector::Wise,
connector::Worldline,
connector::Worldpay,
connector::Zen
);
#[cfg(feature = "frm")]
macro_rules! default_imp_for_frm_transaction {
($($path:ident::$connector:ident),*) => {
$(
impl api::FraudCheckTransaction for $path::$connector {}
impl
services::ConnectorIntegration<
api::Transaction,
frm_types::FraudCheckTransactionData,
frm_types::FraudCheckResponseData,
> for $path::$connector
{}
)*
};
}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8> api::FraudCheckTransaction for connector::DummyConnector<T> {}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8>
services::ConnectorIntegration<
api::Transaction,
frm_types::FraudCheckTransactionData,
frm_types::FraudCheckResponseData,
> for connector::DummyConnector<T>
{
}
#[cfg(feature = "frm")]
default_imp_for_frm_transaction!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bankofamerica,
connector::Bitpay,
connector::Bluesnap,
connector::Boku,
connector::Braintree,
connector::Cashtocode,
connector::Checkout,
connector::Cryptopay,
connector::Cybersource,
connector::Coinbase,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Globepay,
connector::Gocardless,
connector::Helcim,
connector::Iatapay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nmi,
connector::Noon,
connector::Nuvei,
connector::Opayo,
connector::Opennode,
connector::Payeezy,
connector::Payme,
connector::Paypal,
connector::Payu,
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Square,
connector::Stax,
connector::Stripe,
connector::Shift4,
connector::Trustpay,
connector::Tsys,
connector::Volt,
connector::Wise,
connector::Worldline,
connector::Worldpay,
connector::Zen
);
#[cfg(feature = "frm")]
macro_rules! default_imp_for_frm_fulfillment {
($($path:ident::$connector:ident),*) => {
$(
impl api::FraudCheckFulfillment for $path::$connector {}
impl
services::ConnectorIntegration<
api::Fulfillment,
frm_types::FraudCheckFulfillmentData,
frm_types::FraudCheckResponseData,
> for $path::$connector
{}
)*
};
}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8> api::FraudCheckFulfillment for connector::DummyConnector<T> {}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8>
services::ConnectorIntegration<
api::Fulfillment,
frm_types::FraudCheckFulfillmentData,
frm_types::FraudCheckResponseData,
> for connector::DummyConnector<T>
{
}
#[cfg(feature = "frm")]
default_imp_for_frm_fulfillment!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,
connector::Bankofamerica,
connector::Bitpay,
connector::Bluesnap,
connector::Boku,
connector::Braintree,
connector::Cashtocode,
connector::Checkout,
connector::Cryptopay,
connector::Cybersource,
connector::Coinbase,
connector::Dlocal,
connector::Fiserv,
connector::Forte,
connector::Globalpay,
connector::Globepay,
connector::Gocardless,
connector::Helcim,
connector::Iatapay,
connector::Klarna,
connector::Mollie,
connector::Multisafepay,
connector::Nexinets,
connector::Nmi,
connector::Noon,
connector::Nuvei,
connector::Opayo,
connector::Opennode,
connector::Payeezy,
connector::Payme,
connector::Paypal,
connector::Payu,
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Square,
connector::Stax,
connector::Stripe,
connector::Shift4,
connector::Trustpay,
connector::Tsys,
connector::Volt,
connector::Wise,
connector::Worldline,
connector::Worldpay,
connector::Zen
);
#[cfg(feature = "frm")]
macro_rules! default_imp_for_frm_record_return {
($($path:ident::$connector:ident),*) => {
$(
impl api::FraudCheckRecordReturn for $path::$connector {}
impl
services::ConnectorIntegration<
api::RecordReturn,
frm_types::FraudCheckRecordReturnData,
frm_types::FraudCheckResponseData,
> for $path::$connector
{}
)*
};
}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8> api::FraudCheckRecordReturn for connector::DummyConnector<T> {}
#[cfg(all(feature = "frm", feature = "dummy_connector"))]
impl<const T: u8>
services::ConnectorIntegration<
api::RecordReturn,
frm_types::FraudCheckRecordReturnData,
frm_types::FraudCheckResponseData,
> for connector::DummyConnector<T>
{
}
#[cfg(feature = "frm")]
default_imp_for_frm_record_return!(
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -1645,6 +2140,7 @@ default_imp_for_incremental_authorization!(
connector::Powertranz,
connector::Prophetpay,
connector::Rapyd,
connector::Signifyd,
connector::Square,
connector::Stax,
connector::Stripe,