From f960438963ef4df812d9c89eb46e1b638905cb5e Mon Sep 17 00:00:00 2001
From: sai-harsha-vardhan <harsha111hero@gmail.com>
Date: Fri, 31 Jan 2025 16:04:17 +0530
Subject: [PATCH 1/4] add sdk-type and default-sdk-type in netcetera
 authentication request

---
 crates/api_models/src/payments.rs             | 17 ++++++++++++++
 .../connector/netcetera/netcetera_types.rs    | 23 +++++++++++++++++--
 2 files changed, 38 insertions(+), 2 deletions(-)

diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index b6152cc9787..d3e407f9470 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -6548,6 +6548,23 @@ pub struct SdkInformation {
     pub sdk_reference_number: String,
     /// Indicates maximum amount of time in minutes
     pub sdk_max_timeout: u8,
+    /// Indicates the type of 3DS SDK
+    pub sdk_type: Option<SdkTypeEnum>,
+}
+
+/// Enum representing the type of 3DS SDK.
+#[derive(Serialize, Deserialize, Debug, Clone)]
+pub enum SdkTypeEnum {
+    #[serde(rename = "01")]
+    DefaultSdk,
+    #[serde(rename = "02")]
+    SplitSdk,
+    #[serde(rename = "03")]
+    LimitedSdk,
+    #[serde(rename = "04")]
+    BrowserSdk,
+    #[serde(rename = "05")]
+    ShellSdk,
 }
 
 #[cfg(feature = "v2")]
diff --git a/crates/router/src/connector/netcetera/netcetera_types.rs b/crates/router/src/connector/netcetera/netcetera_types.rs
index 0ecbbf63e3e..074552c7917 100644
--- a/crates/router/src/connector/netcetera/netcetera_types.rs
+++ b/crates/router/src/connector/netcetera/netcetera_types.rs
@@ -1563,13 +1563,32 @@ impl From<api_models::payments::SdkInformation> for Sdk {
             sdk_reference_number: Some(sdk_info.sdk_reference_number),
             sdk_trans_id: Some(sdk_info.sdk_trans_id),
             sdk_server_signed_content: None,
-            sdk_type: None,
-            default_sdk_type: None,
+            sdk_type: sdk_info
+                .sdk_type
+                .map(SdkTypeEnum::from)
+                .or(Some(SdkTypeEnum::DefaultSdk)),
+            default_sdk_type: Some(DefaultSdkType {
+                // hardcoding this value because, it's the only value that is accepted
+                sdk_variant: "01".to_string(),
+                wrapped_ind: None,
+            }),
             split_sdk_type: None,
         }
     }
 }
 
+impl From<api_models::payments::SdkTypeEnum> for SdkTypeEnum {
+    fn from(sdk_type: api_models::payments::SdkTypeEnum) -> Self {
+        match sdk_type {
+            api_models::payments::SdkTypeEnum::DefaultSdk => Self::DefaultSdk,
+            api_models::payments::SdkTypeEnum::SplitSdk => Self::SplitSdk,
+            api_models::payments::SdkTypeEnum::LimitedSdk => Self::LimitedSdk,
+            api_models::payments::SdkTypeEnum::BrowserSdk => Self::BrowserSdk,
+            api_models::payments::SdkTypeEnum::ShellSdk => Self::ShellSdk,
+        }
+    }
+}
+
 /// Enum representing the type of 3DS SDK.
 #[derive(Serialize, Deserialize, Debug, Clone)]
 pub enum SdkTypeEnum {

From 1dde10a0cbe2811c534202919fb01c97338730d0 Mon Sep 17 00:00:00 2001
From: sai-harsha-vardhan <harsha111hero@gmail.com>
Date: Fri, 31 Jan 2025 19:52:50 +0530
Subject: [PATCH 2/4] fix openapi

---
 api-reference/openapi_spec.json   | 19 +++++++++++++++++++
 crates/api_models/src/payments.rs |  6 +++---
 crates/openapi/src/openapi.rs     |  1 +
 3 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/api-reference/openapi_spec.json b/api-reference/openapi_spec.json
index d218e4d2074..9b840f53138 100644
--- a/api-reference/openapi_spec.json
+++ b/api-reference/openapi_spec.json
@@ -24523,6 +24523,14 @@
             "format": "int32",
             "description": "Indicates maximum amount of time in minutes",
             "minimum": 0
+          },
+          "sdk_type": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SdkType"
+              }
+            ],
+            "nullable": true
           }
         }
       },
@@ -24552,6 +24560,17 @@
           }
         }
       },
+      "SdkType": {
+        "type": "string",
+        "description": "Enum representing the type of 3DS SDK.",
+        "enum": [
+          "01",
+          "02",
+          "03",
+          "04",
+          "05"
+        ]
+      },
       "SecretInfoToInitiateSdk": {
         "type": "object",
         "required": [
diff --git a/crates/api_models/src/payments.rs b/crates/api_models/src/payments.rs
index d3e407f9470..2c0a09bf8f0 100644
--- a/crates/api_models/src/payments.rs
+++ b/crates/api_models/src/payments.rs
@@ -6549,12 +6549,12 @@ pub struct SdkInformation {
     /// Indicates maximum amount of time in minutes
     pub sdk_max_timeout: u8,
     /// Indicates the type of 3DS SDK
-    pub sdk_type: Option<SdkTypeEnum>,
+    pub sdk_type: Option<SdkType>,
 }
 
 /// Enum representing the type of 3DS SDK.
-#[derive(Serialize, Deserialize, Debug, Clone)]
-pub enum SdkTypeEnum {
+#[derive(Serialize, Deserialize, Debug, Clone, ToSchema)]
+pub enum SdkType {
     #[serde(rename = "01")]
     DefaultSdk,
     #[serde(rename = "02")]
diff --git a/crates/openapi/src/openapi.rs b/crates/openapi/src/openapi.rs
index 3a634ae2a54..de358f79332 100644
--- a/crates/openapi/src/openapi.rs
+++ b/crates/openapi/src/openapi.rs
@@ -653,6 +653,7 @@ Never share your secret api keys. Keep them guarded and secure.
         api_models::enums::PaymentChargeType,
         api_models::enums::StripeChargeType,
         api_models::payments::CustomerDetailsResponse,
+        api_models::payments::SdkType,
         api_models::payments::OpenBankingData,
         api_models::payments::OpenBankingSessionToken,
         api_models::payments::BankDebitResponse,

From f51fe7524493cfb4feb01618a2c6287acfd1b229 Mon Sep 17 00:00:00 2001
From: sai-harsha-vardhan <harsha111hero@gmail.com>
Date: Sat, 1 Feb 2025 12:37:59 +0530
Subject: [PATCH 3/4] fix ci checks

---
 .../connector/netcetera/netcetera_types.rs    | 22 +++++++++----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/crates/router/src/connector/netcetera/netcetera_types.rs b/crates/router/src/connector/netcetera/netcetera_types.rs
index 074552c7917..36daa62e558 100644
--- a/crates/router/src/connector/netcetera/netcetera_types.rs
+++ b/crates/router/src/connector/netcetera/netcetera_types.rs
@@ -1538,7 +1538,7 @@ pub struct Sdk {
     ///
     /// This field is required for requests where deviceChannel = 01 (APP).
     /// Available for supporting EMV 3DS 2.3.1 and later versions.
-    sdk_type: Option<SdkTypeEnum>,
+    sdk_type: Option<SdkType>,
 
     /// Indicates the characteristics of a Default-SDK.
     ///
@@ -1565,8 +1565,8 @@ impl From<api_models::payments::SdkInformation> for Sdk {
             sdk_server_signed_content: None,
             sdk_type: sdk_info
                 .sdk_type
-                .map(SdkTypeEnum::from)
-                .or(Some(SdkTypeEnum::DefaultSdk)),
+                .map(SdkType::from)
+                .or(Some(SdkType::DefaultSdk)),
             default_sdk_type: Some(DefaultSdkType {
                 // hardcoding this value because, it's the only value that is accepted
                 sdk_variant: "01".to_string(),
@@ -1577,21 +1577,21 @@ impl From<api_models::payments::SdkInformation> for Sdk {
     }
 }
 
-impl From<api_models::payments::SdkTypeEnum> for SdkTypeEnum {
-    fn from(sdk_type: api_models::payments::SdkTypeEnum) -> Self {
+impl From<api_models::payments::SdkType> for SdkType {
+    fn from(sdk_type: api_models::payments::SdkType) -> Self {
         match sdk_type {
-            api_models::payments::SdkTypeEnum::DefaultSdk => Self::DefaultSdk,
-            api_models::payments::SdkTypeEnum::SplitSdk => Self::SplitSdk,
-            api_models::payments::SdkTypeEnum::LimitedSdk => Self::LimitedSdk,
-            api_models::payments::SdkTypeEnum::BrowserSdk => Self::BrowserSdk,
-            api_models::payments::SdkTypeEnum::ShellSdk => Self::ShellSdk,
+            api_models::payments::SdkType::DefaultSdk => Self::DefaultSdk,
+            api_models::payments::SdkType::SplitSdk => Self::SplitSdk,
+            api_models::payments::SdkType::LimitedSdk => Self::LimitedSdk,
+            api_models::payments::SdkType::BrowserSdk => Self::BrowserSdk,
+            api_models::payments::SdkType::ShellSdk => Self::ShellSdk,
         }
     }
 }
 
 /// Enum representing the type of 3DS SDK.
 #[derive(Serialize, Deserialize, Debug, Clone)]
-pub enum SdkTypeEnum {
+pub enum SdkType {
     #[serde(rename = "01")]
     DefaultSdk,
     #[serde(rename = "02")]

From 1e594c2fff9bb1c55c5f84f9935c3b517c3a19fb Mon Sep 17 00:00:00 2001
From: sai-harsha-vardhan <harsha111hero@gmail.com>
Date: Sat, 1 Feb 2025 14:46:56 +0530
Subject: [PATCH 4/4] fix openapi

---
 api-reference-v2/openapi_spec.json | 19 +++++++++++++++++++
 crates/openapi/src/openapi_v2.rs   |  1 +
 2 files changed, 20 insertions(+)

diff --git a/api-reference-v2/openapi_spec.json b/api-reference-v2/openapi_spec.json
index 13014a44e0e..236c0af3a38 100644
--- a/api-reference-v2/openapi_spec.json
+++ b/api-reference-v2/openapi_spec.json
@@ -19982,6 +19982,14 @@
             "format": "int32",
             "description": "Indicates maximum amount of time in minutes",
             "minimum": 0
+          },
+          "sdk_type": {
+            "allOf": [
+              {
+                "$ref": "#/components/schemas/SdkType"
+              }
+            ],
+            "nullable": true
           }
         }
       },
@@ -20011,6 +20019,17 @@
           }
         }
       },
+      "SdkType": {
+        "type": "string",
+        "description": "Enum representing the type of 3DS SDK.",
+        "enum": [
+          "01",
+          "02",
+          "03",
+          "04",
+          "05"
+        ]
+      },
       "SecretInfoToInitiateSdk": {
         "type": "object",
         "required": [
diff --git a/crates/openapi/src/openapi_v2.rs b/crates/openapi/src/openapi_v2.rs
index 3b1fefefa15..701fb22d1ad 100644
--- a/crates/openapi/src/openapi_v2.rs
+++ b/crates/openapi/src/openapi_v2.rs
@@ -328,6 +328,7 @@ Never share your secret api keys. Keep them guarded and secure.
         api_models::payments::BankRedirectBilling,
         api_models::payments::ConnectorMetadata,
         api_models::payments::FeatureMetadata,
+        api_models::payments::SdkType,
         api_models::payments::ApplepayConnectorMetadataRequest,
         api_models::payments::SessionTokenInfo,
         api_models::payments::PaymentProcessingDetailsAt,