@@ -9,7 +9,8 @@ use tonic::{
9
9
} ;
10
10
use unified_connector_service_client:: payments:: {
11
11
self as payments_grpc, payment_service_client:: PaymentServiceClient ,
12
- PaymentServiceAuthorizeResponse ,
12
+ PaymentServiceAuthorizeResponse , PaymentServiceTransformRequest ,
13
+ PaymentServiceTransformResponse ,
13
14
} ;
14
15
15
16
use crate :: {
@@ -96,6 +97,10 @@ pub enum UnifiedConnectorServiceError {
96
97
/// Failed to perform Payment Repeat Payment from gRPC Server
97
98
#[ error( "Failed to perform Repeat Payment from gRPC Server" ) ]
98
99
PaymentRepeatEverythingFailure ,
100
+
101
+ /// Failed to transform incoming webhook from gRPC Server
102
+ #[ error( "Failed to transform incoming webhook from gRPC Server" ) ]
103
+ WebhookTransformFailure ,
99
104
}
100
105
101
106
/// Result type for Dynamic Routing
@@ -194,6 +199,7 @@ impl UnifiedConnectorServiceClient {
194
199
) -> UnifiedConnectorServiceResult < tonic:: Response < PaymentServiceAuthorizeResponse > > {
195
200
let mut request = tonic:: Request :: new ( payment_authorize_request) ;
196
201
202
+ let connector_name = connector_auth_metadata. connector_name . clone ( ) ;
197
203
let metadata =
198
204
build_unified_connector_service_grpc_headers ( connector_auth_metadata, grpc_headers) ?;
199
205
* request. metadata_mut ( ) = metadata;
@@ -203,7 +209,14 @@ impl UnifiedConnectorServiceClient {
203
209
. authorize ( request)
204
210
. await
205
211
. change_context ( UnifiedConnectorServiceError :: PaymentAuthorizeFailure )
206
- . inspect_err ( |error| logger:: error!( ?error) )
212
+ . inspect_err ( |error| {
213
+ logger:: error!(
214
+ grpc_error=?error,
215
+ method="payment_authorize" ,
216
+ connector_name=?connector_name,
217
+ "UCS payment authorize gRPC call failed"
218
+ )
219
+ } )
207
220
}
208
221
209
222
/// Performs Payment Sync/Get
@@ -216,6 +229,7 @@ impl UnifiedConnectorServiceClient {
216
229
{
217
230
let mut request = tonic:: Request :: new ( payment_get_request) ;
218
231
232
+ let connector_name = connector_auth_metadata. connector_name . clone ( ) ;
219
233
let metadata =
220
234
build_unified_connector_service_grpc_headers ( connector_auth_metadata, grpc_headers) ?;
221
235
* request. metadata_mut ( ) = metadata;
@@ -225,7 +239,14 @@ impl UnifiedConnectorServiceClient {
225
239
. get ( request)
226
240
. await
227
241
. change_context ( UnifiedConnectorServiceError :: PaymentGetFailure )
228
- . inspect_err ( |error| logger:: error!( ?error) )
242
+ . inspect_err ( |error| {
243
+ logger:: error!(
244
+ grpc_error=?error,
245
+ method="payment_get" ,
246
+ connector_name=?connector_name,
247
+ "UCS payment get/sync gRPC call failed"
248
+ )
249
+ } )
229
250
}
230
251
231
252
/// Performs Payment Setup Mandate
@@ -238,6 +259,7 @@ impl UnifiedConnectorServiceClient {
238
259
{
239
260
let mut request = tonic:: Request :: new ( payment_register_request) ;
240
261
262
+ let connector_name = connector_auth_metadata. connector_name . clone ( ) ;
241
263
let metadata =
242
264
build_unified_connector_service_grpc_headers ( connector_auth_metadata, grpc_headers) ?;
243
265
* request. metadata_mut ( ) = metadata;
@@ -247,7 +269,14 @@ impl UnifiedConnectorServiceClient {
247
269
. register ( request)
248
270
. await
249
271
. change_context ( UnifiedConnectorServiceError :: PaymentRegisterFailure )
250
- . inspect_err ( |error| logger:: error!( ?error) )
272
+ . inspect_err ( |error| {
273
+ logger:: error!(
274
+ grpc_error=?error,
275
+ method="payment_setup_mandate" ,
276
+ connector_name=?connector_name,
277
+ "UCS payment setup mandate gRPC call failed"
278
+ )
279
+ } )
251
280
}
252
281
253
282
/// Performs Payment repeat (MIT - Merchant Initiated Transaction).
@@ -261,6 +290,7 @@ impl UnifiedConnectorServiceClient {
261
290
> {
262
291
let mut request = tonic:: Request :: new ( payment_repeat_request) ;
263
292
293
+ let connector_name = connector_auth_metadata. connector_name . clone ( ) ;
264
294
let metadata =
265
295
build_unified_connector_service_grpc_headers ( connector_auth_metadata, grpc_headers) ?;
266
296
* request. metadata_mut ( ) = metadata;
@@ -270,7 +300,43 @@ impl UnifiedConnectorServiceClient {
270
300
. repeat_everything ( request)
271
301
. await
272
302
. change_context ( UnifiedConnectorServiceError :: PaymentRepeatEverythingFailure )
273
- . inspect_err ( |error| logger:: error!( ?error) )
303
+ . inspect_err ( |error| {
304
+ logger:: error!(
305
+ grpc_error=?error,
306
+ method="payment_repeat" ,
307
+ connector_name=?connector_name,
308
+ "UCS payment repeat gRPC call failed"
309
+ )
310
+ } )
311
+ }
312
+
313
+ /// Transforms incoming webhook through UCS
314
+ pub async fn transform_incoming_webhook (
315
+ & self ,
316
+ webhook_transform_request : PaymentServiceTransformRequest ,
317
+ connector_auth_metadata : ConnectorAuthMetadata ,
318
+ grpc_headers : GrpcHeaders ,
319
+ ) -> UnifiedConnectorServiceResult < tonic:: Response < PaymentServiceTransformResponse > > {
320
+ let mut request = tonic:: Request :: new ( webhook_transform_request) ;
321
+
322
+ let connector_name = connector_auth_metadata. connector_name . clone ( ) ;
323
+ let metadata =
324
+ build_unified_connector_service_grpc_headers ( connector_auth_metadata, grpc_headers) ?;
325
+ * request. metadata_mut ( ) = metadata;
326
+
327
+ self . client
328
+ . clone ( )
329
+ . transform ( request)
330
+ . await
331
+ . change_context ( UnifiedConnectorServiceError :: WebhookTransformFailure )
332
+ . inspect_err ( |error| {
333
+ logger:: error!(
334
+ grpc_error=?error,
335
+ method="transform_incoming_webhook" ,
336
+ connector_name=?connector_name,
337
+ "UCS webhook transform gRPC call failed"
338
+ )
339
+ } )
274
340
}
275
341
}
276
342
@@ -318,17 +384,18 @@ pub fn build_unified_connector_service_grpc_headers(
318
384
parse ( common_utils_consts:: X_MERCHANT_ID , meta. merchant_id . peek ( ) ) ?,
319
385
) ;
320
386
321
- grpc_headers. tenant_id
322
- . parse ( )
323
- . map ( |tenant_id| {
324
- metadata. append (
325
- common_utils_consts:: TENANT_HEADER ,
326
- tenant_id)
327
- } )
328
- . inspect_err (
329
- |err| logger:: warn!( header_parse_error=?err, "invalid {} received" , common_utils_consts:: TENANT_HEADER ) ,
330
- )
331
- . ok ( ) ;
387
+ if let Err ( err) = grpc_headers
388
+ . tenant_id
389
+ . parse ( )
390
+ . map ( |tenant_id| metadata. append ( common_utils_consts:: TENANT_HEADER , tenant_id) )
391
+ {
392
+ logger:: error!(
393
+ header_parse_error=?err,
394
+ tenant_id=?grpc_headers. tenant_id,
395
+ "Failed to parse tenant_id header for UCS gRPC request: {}" ,
396
+ common_utils_consts:: TENANT_HEADER
397
+ ) ;
398
+ }
332
399
333
400
Ok ( metadata)
334
401
}
0 commit comments