Skip to content

refactor(schema): add a new column for storing large customer user agents in mandate table #8616

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jul 25, 2025

Conversation

pixincreate
Copy link
Member

@pixincreate pixincreate commented Jul 11, 2025

Type of Change

  • Bugfix
  • New feature
  • Enhancement
  • Refactoring
  • Dependency updates
  • Documentation
  • CI/CD

Description

customer_user_agent column in mandate table has a 255 character length limit. Lately, there have been increased number of 5xx errors due to the values in customer_user_agent column hitting that limit. This PR addresses this by introducing a new column customer_device_user_agent with TEXT type in the mandate table and also adds customer_user_agent as a fallback.

Generate and run migrations:

v1:

just resurrect
just migrate
diesel migration generate <file-name>
vi up.sql
vi down.sql
just migrate

v2:

just resurrect
just migrate_v2
diesel migration generate <file-name> --migration-dir v2_migrations --config-file diesel_v2.toml
vi up.sql
vi down.sql
just migrate_v2

Additional Changes

  • This PR modifies the API contract
  • This PR modifies the database schema
  • This PR modifies application configuration/environment variables
  1. /migrations
  2. /v2_migrations

Motivation and Context

Below seems to have become a recurring issue where customer_user_agent constantly hits the 255 character limit:

{"error":{"type":"api","message":"Something went wrong","code":"HE_00"}}
├╴at crates/router/src/services/api.rs:651:14
│
├─:arrow_forwards: {"error":{"type":"server_not_available","code":"HE_00","message":"Something went wrong"}}
│   ╰╴at crates/router/src/core/errors/utils.rs:74:17
│
╰─:arrow_forwards: DatabaseError: An unknown error occurred
   ├╴at /router/crates/diesel_models/src/query/generics.rs:89:36
   ├╴Error while inserting MandateNew { mandate_id: "man_AHPH51mC407li7Jaz9xJ", customer_id: CustomerId("cus_sVszwfsNvEnM45dSS5Ob"), merchant_id: MerchantId("abo_factory"), payment_method_id: "pm_pmc6vtfpo24GVxzUwfOw", mandate_status: Active, mandate_type: MultiUse, customer_accepted_at: Some(2025-07-10 14:25:10.867), customer_ip_address: Some(193.**.**.**), customer_user_agent: Some("Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/22F76 [FBAN/FBIOS;FBAV/520.0.0.38.101;FBBV/756351453;FBDV/iPhone14,7;FBMD/iPhone;FBSN/iOS;FBSV/18.5;FBSS/3;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/760683563;IABMV/1]"), network_transaction_id: None, previous_attempt_id: None, created_at: None, mandate_amount: Some(17800), mandate_currency: Some(EUR), amount_captured: None, connector: "stripe", connector_mandate_id: Some("pm_1RjLQUE9KgVj5AGnQfpGg6Wy"), start_date: None, end_date: None, metadata: None, connector_mandate_ids: Some(*** serde_json::value::Value ***), original_payment_id: Some(PaymentId("pay_RapWRO8bbLsGhgMJA4tm")), merchant_connector_id: Some(MerchantConnectorAccountId("mca_i6yLcyGKTCzgYaZpclld")), updated_by: Some("postgres_only") }
   │
   ╰─:arrow_forwards: value too long for type character varying(255)
       ╰╴at /router/crates/diesel_models/src/query/generics.rs:89:22
   ╰╴at crates/router/src/db/mandate.rs:334:38

How did you test it?

Did a mandate payment:

CIT
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_vF7qG9HUZoBwllgi22Tep4sJiwyoHZNWsHm682jzlis5UzBxrbwIP6z38tqTF0em' \
--data-raw '{
    "currency": "USD",
    "amount": 301,
    "confirm": true,
    "amount_to_capture": 301,
    "customer_id": "payload_connector_test",
    "capture_method": "automatic",
    "capture_on": "2022-09-10T10:11:12Z",
    "authentication_type": "no_three_ds",
    "return_url": "https://www.google.com",
    "email": "[email protected]",
    "name": "Joseph Doe",
    "phone": "999999999",
    "phone_country_code": "+65",
    "description": "Its my first payment request",
    "statement_descriptor_name": "Juspay",
    "statement_descriptor_suffix": "Router",
    "payment_method": "card",
    "setup_future_usage": "off_session",
    "payment_method_type": "debit",
    "payment_method_data": {
        "card": {
            "card_number": "4242424242424242",
            "card_exp_month": "03",
            "card_exp_year": "2030",
            "card_holder_name": "joseph Doe",
            "card_cvc": "737"
        }
    },
    "billing": {
        "address": {
            "line1": "1467",
            "line2": "CA",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "CA",
            "zip": "94122",
            "country": "US",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        }
    },
    "shipping": {
        "address": {
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "city": "San Fransico",
            "state": "CA",
            "zip": "94122",
            "country": "US",
            "first_name": "john",
            "last_name": "Doe"
        }
    },
    "browser_info": {
        "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/22F76 [FBAN/FBIOS;FBAV/520.0.0.38.101;FBBV/756351453;FBDV/iPhone14,7;FBMD/iPhone;FBSN/iOS;FBSV/18.5;FBSS/3;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/760683563;IABMV/1]",
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "language": "nl-NL",
        "color_depth": 24,
        "screen_height": 723,
        "screen_width": 1536,
        "time_zone": 0,
        "java_enabled": true,
        "java_script_enabled": true,
        "ip_address": "109.71.40.0"
    },
    "metadata": {
        "order_category": "applepay"
    },
    "order_details": [
        {
            "product_name": "Apple iphone 15",
            "quantity": 1,
            "amount": 300,
            "account_name": "transaction_processing"
        }
    ],
    "mandate_data": {
        "customer_acceptance": {
            "acceptance_type": "offline",
            "accepted_at": "1963-05-03T04:07:52.723Z",
            "online": {
                "ip_address": "125.0.0.1",
                "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/22F76 [FBAN/FBIOS;FBAV/520.0.0.38.101;FBBV/756351453;FBDV/iPhone14,7;FBMD/iPhone;FBSN/iOS;FBSV/18.5;FBSS/3;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/760683563;IABMV/1]"
            }
        },
        "mandate_type": {
            "multi_use": {
                "amount": 1000,
                "currency": "USD",
                "start_date": "2023-04-21T00:00:00Z",
                "end_date": "2023-05-21T00:00:00Z",
                "metadata": {
                    "frequency": "13"
                }
            }
        }
    } 
}'
{
    "payment_id": "pay_ivzzdZaXOhhmlAlWvomn",
    "merchant_id": "spriteMerchantBornAt1753027902",
    "status": "succeeded",
    "amount": 301,
    "net_amount": 301,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": 301,
    "connector": "stripe",
    "client_secret": "pay_ivzzdZaXOhhmlAlWvomn_secret_sfPbglwH6a2oBpmQOvAV",
    "created": "2025-07-20T16:12:18.556Z",
    "currency": "USD",
    "customer_id": "payload_connector_test",
    "customer": {
        "id": "payload_connector_test",
        "name": "Joseph Doe",
        "email": "[email protected]",
        "phone": "999999999",
        "phone_country_code": "+65"
    },
    "description": "Its my first payment request",
    "refunds": null,
    "disputes": null,
    "mandate_id": "man_OrzwB85cMLyysmleVpVu",
    "mandate_data": {
        "update_mandate_id": null,
        "customer_acceptance": {
            "acceptance_type": "offline",
            "accepted_at": "1963-05-03T04:07:52.723Z",
            "online": {
                "ip_address": "125.0.0.1",
                "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/22F76 [FBAN/FBIOS;FBAV/520.0.0.38.101;FBBV/756351453;FBDV/iPhone14,7;FBMD/iPhone;FBSN/iOS;FBSV/18.5;FBSS/3;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/760683563;IABMV/1]"
            }
        },
        "mandate_type": {
            "multi_use": {
                "amount": 1000,
                "currency": "USD",
                "start_date": "2023-04-21T00:00:00.000Z",
                "end_date": "2023-05-21T00:00:00.000Z",
                "metadata": {
                    "frequency": "13"
                }
            }
        }
    },
    "setup_future_usage": "off_session",
    "off_session": null,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "4242",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "424242",
            "card_extended_bin": null,
            "card_exp_month": "03",
            "card_exp_year": "2030",
            "card_holder_name": "joseph Doe",
            "payment_checks": {
                "cvc_check": "pass",
                "address_line1_check": "pass",
                "address_postal_code_check": "pass"
            },
            "authentication_data": null
        },
        "billing": null
    },
    "payment_token": null,
    "shipping": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "Harrison Street",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "CA",
            "first_name": "john",
            "last_name": "Doe"
        },
        "phone": null,
        "email": null
    },
    "billing": {
        "address": {
            "city": "San Fransico",
            "country": "US",
            "line1": "1467",
            "line2": "CA",
            "line3": "Harrison Street",
            "zip": "94122",
            "state": "CA",
            "first_name": "joseph",
            "last_name": "Doe"
        },
        "phone": {
            "number": "8056594427",
            "country_code": "+91"
        },
        "email": null
    },
    "order_details": [
        {
            "brand": null,
            "amount": 300,
            "category": null,
            "quantity": 1,
            "tax_rate": null,
            "product_id": null,
            "product_name": "Apple iphone 15",
            "product_type": null,
            "sub_category": null,
            "product_img_link": null,
            "product_tax_code": null,
            "total_tax_amount": null,
            "requires_shipping": null
        }
    ],
    "email": "[email protected]",
    "name": "Joseph Doe",
    "phone": "999999999",
    "return_url": "https://www.google.com/",
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": "Juspay",
    "statement_descriptor_suffix": "Router",
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "debit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "payload_connector_test",
        "created_at": 1753027938,
        "expires": 1753031538,
        "secret": "epk_d47735e294184c85b09d74919af1ce3d"
    },
    "manual_retry_allowed": false,
    "connector_transaction_id": "pi_3RmzqYD5R7gDAGff0rfZAqdm",
    "frm_message": null,
    "metadata": {
        "order_category": "applepay"
    },
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pi_3RmzqYD5R7gDAGff0rfZAqdm",
    "payment_link": null,
    "profile_id": "pro_4ZdZ0fklzD0rF7Evl6mS",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_dgwtzHYk72GtX2jtpGip",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-07-20T16:27:18.556Z",
    "fingerprint": null,
    "browser_info": {
        "language": "nl-NL",
        "time_zone": 0,
        "ip_address": "109.71.40.0",
        "user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/22F76 [FBAN/FBIOS;FBAV/520.0.0.38.101;FBBV/756351453;FBDV/iPhone14,7;FBMD/iPhone;FBSN/iOS;FBSV/18.5;FBSS/3;FBID/phone;FBLC/fr_FR;FBOP/5;FBRV/760683563;IABMV/1]",
        "color_depth": 24,
        "java_enabled": true,
        "screen_width": 1536,
        "accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
        "screen_height": 723,
        "java_script_enabled": true
    },
    "payment_method_id": "pm_naLa7iPMAtGQ3eLT3lIH",
    "payment_method_status": null,
    "updated": "2025-07-20T16:12:20.094Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": null,
    "card_discovery": "manual",
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null
}
MIT
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: dev_vF7qG9HUZoBwllgi22Tep4sJiwyoHZNWsHm682jzlis5UzBxrbwIP6z38tqTF0em' \
--data-raw '{
    "amount": 499,
    "currency": "USD",
    "confirm": true,
    "capture_method": "automatic",
    "customer_id": "payload_connector_test",
    "email": "[email protected]",
    "off_session": true,
    "recurring_details": {
        "type": "mandate_id",
        "data": "man_OrzwB85cMLyysmleVpVu"
    },
    "authentication_type": "no_three_ds"
}'
{
    "payment_id": "pay_DcwC0NPQYJAV15g6AWX4",
    "merchant_id": "spriteMerchantBornAt1753027902",
    "status": "succeeded",
    "amount": 499,
    "net_amount": 499,
    "shipping_cost": null,
    "amount_capturable": 0,
    "amount_received": 499,
    "connector": "stripe",
    "client_secret": "pay_DcwC0NPQYJAV15g6AWX4_secret_KMqk3ZVa9cyB0zRmvY73",
    "created": "2025-07-20T16:12:44.054Z",
    "currency": "USD",
    "customer_id": "payload_connector_test",
    "customer": {
        "id": "payload_connector_test",
        "name": "Joseph Doe",
        "email": "[email protected]",
        "phone": "999999999",
        "phone_country_code": "+65"
    },
    "description": null,
    "refunds": null,
    "disputes": null,
    "mandate_id": null,
    "mandate_data": null,
    "setup_future_usage": null,
    "off_session": true,
    "capture_on": null,
    "capture_method": "automatic",
    "payment_method": "card",
    "payment_method_data": {
        "card": {
            "last4": "4242",
            "card_type": null,
            "card_network": null,
            "card_issuer": null,
            "card_issuing_country": null,
            "card_isin": "424242",
            "card_extended_bin": null,
            "card_exp_month": "03",
            "card_exp_year": "2030",
            "card_holder_name": "joseph Doe",
            "payment_checks": null,
            "authentication_data": null
        },
        "billing": null
    },
    "payment_token": "26887a40-3562-43b2-8f19-9c56db3808e4",
    "shipping": null,
    "billing": null,
    "order_details": null,
    "email": "[email protected]",
    "name": "Joseph Doe",
    "phone": "999999999",
    "return_url": null,
    "authentication_type": "no_three_ds",
    "statement_descriptor_name": null,
    "statement_descriptor_suffix": null,
    "next_action": null,
    "cancellation_reason": null,
    "error_code": null,
    "error_message": null,
    "unified_code": null,
    "unified_message": null,
    "payment_experience": null,
    "payment_method_type": "debit",
    "connector_label": null,
    "business_country": null,
    "business_label": "default",
    "business_sub_label": null,
    "allowed_payment_method_types": null,
    "ephemeral_key": {
        "customer_id": "payload_connector_test",
        "created_at": 1753027963,
        "expires": 1753031563,
        "secret": "epk_7bb634915c0e431e9cd15f7130c7bc74"
    },
    "manual_retry_allowed": false,
    "connector_transaction_id": "pi_3RmzqyD5R7gDAGff1A6HUG3m",
    "frm_message": null,
    "metadata": null,
    "connector_metadata": null,
    "feature_metadata": null,
    "reference_id": "pi_3RmzqyD5R7gDAGff1A6HUG3m",
    "payment_link": null,
    "profile_id": "pro_4ZdZ0fklzD0rF7Evl6mS",
    "surcharge_details": null,
    "attempt_count": 1,
    "merchant_decision": null,
    "merchant_connector_id": "mca_dgwtzHYk72GtX2jtpGip",
    "incremental_authorization_allowed": null,
    "authorization_count": null,
    "incremental_authorizations": null,
    "external_authentication_details": null,
    "external_3ds_authentication_attempted": false,
    "expires_on": "2025-07-20T16:27:44.054Z",
    "fingerprint": null,
    "browser_info": null,
    "payment_method_id": "pm_naLa7iPMAtGQ3eLT3lIH",
    "payment_method_status": "active",
    "updated": "2025-07-20T16:12:45.157Z",
    "split_payments": null,
    "frm_metadata": null,
    "extended_authorization_applied": null,
    "capture_before": null,
    "merchant_order_reference_id": null,
    "order_tax_amount": null,
    "connector_mandate_id": "pm_1RmzqYD5R7gDAGffLVJOBbgW",
    "card_discovery": "manual",
    "force_3ds_challenge": false,
    "force_3ds_challenge_trigger": false,
    "issuer_error_code": null,
    "issuer_error_message": null,
    "is_iframe_redirection_enabled": null,
    "whole_connector_response": null
}
There's no 5xx around this "customer_user_agent" now image
"customer_user_agent" is getting stored in the db in the new column image
Check v2 DB image

Command:

SELECT EXISTS (
  SELECT 1
  FROM information_schema.columns
  WHERE table_schema = 'public'
    AND table_name   = 'mandate'
    AND column_name  = 'customer_device_user_agent'
);

Note

Tested for v1 but not for v2

Checklist

  • I formatted the code cargo +nightly fmt --all
  • I addressed lints thrown by just clippy && just clippy_v2
  • I reviewed the submitted code
  • I added unit tests for my changes where possible

@pixincreate pixincreate self-assigned this Jul 11, 2025
Copy link

semanticdiff-com bot commented Jul 11, 2025

@pixincreate pixincreate added A-core Area: Core flows A-mandates Area: Mandate Flows labels Jul 11, 2025
@hyperswitch-bot hyperswitch-bot bot added the M-database-changes Metadata: This PR involves database schema changes label Jul 11, 2025
@pixincreate pixincreate added the S-waiting-on-review Status: This PR has been implemented and needs to be reviewed label Jul 11, 2025
@pixincreate pixincreate added this to the July 2025 Release milestone Jul 11, 2025
@pixincreate pixincreate marked this pull request as ready for review July 11, 2025 12:46
@pixincreate pixincreate requested a review from a team as a code owner July 11, 2025 12:46
jagan-jaya
jagan-jaya previously approved these changes Jul 11, 2025
@pixincreate pixincreate changed the title fix(v1): address 5xx due to 255 character limit for `customer_user_ag… fix(core): increase character limit for customer_user_agent from 255 to 512 in mandate table Jul 11, 2025
Copy link
Member

@SanchithHegde SanchithHegde left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can't do this, we'll get query cache plan errors when the application is running, which would in turn cause the application to throw 5xx responses.

CC: @jarnura

@pixincreate
Copy link
Member Author

ah, makes sense! this would indeed cause query cache plan errors! we should either use DISCARD PLANS (which is not ideal) or create a new column with increased limits and make necessary changes in the code base to use this column making the existing one irrelevant. open for discussions!

@pixincreate pixincreate marked this pull request as draft July 20, 2025 17:48
@pixincreate pixincreate changed the title fix(core): increase character limit for customer_user_agent from 255 to 512 in mandate table refactor(schema): add a new column for storing large customer user agents in mandate table Jul 20, 2025
@pixincreate pixincreate force-pushed the mandate/customer_user_agent-limit branch from 1f0c58a to c0eef83 Compare July 20, 2025 18:08
@pixincreate pixincreate marked this pull request as ready for review July 21, 2025 06:59
@pixincreate pixincreate requested a review from a team as a code owner July 21, 2025 06:59
@pixincreate pixincreate requested a review from jagan-jaya July 21, 2025 09:49
jagan-jaya
jagan-jaya previously approved these changes Jul 21, 2025
Comment on lines +241 to +244
customer_user_agent_extended: mandate_new
.customer_user_agent_extended
.clone()
.or_else(|| mandate_new.customer_user_agent.clone()),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: This could have been a method implemented on the type.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will not mark these as resolved, will consider them in a separate pr.

Comment on lines +691 to +694
// Using customer_user_agent as a fallback
customer_user_agent_extended: mandate_new
.customer_user_agent_extended
.or_else(|| mandate_new.customer_user_agent.clone()),
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, you could have called the method here.

Comment on lines +109 to +112
// Using customer_user_agent as a fallback
user_agent: mandate
.customer_user_agent_extended
.or(mandate.customer_user_agent)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This can also be a method implemented on the type (without the unwrap_or_else() part).

@Gnanasundari24 Gnanasundari24 added this pull request to the merge queue Jul 25, 2025
Merged via the queue into main with commit b74c1e9 Jul 25, 2025
17 of 23 checks passed
@Gnanasundari24 Gnanasundari24 deleted the mandate/customer_user_agent-limit branch July 25, 2025 09:48
@pixincreate pixincreate removed the S-waiting-on-review Status: This PR has been implemented and needs to be reviewed label Jul 26, 2025
pixincreate added a commit that referenced this pull request Jul 28, 2025
…rver

* 'main' of github.com:juspay/hyperswitch: (24 commits)
  chore(version): 2025.07.28.1
  feat(core): Hyperswitch <|> UCS Mandate flow integration (#8738)
  feat(themes): Create user APIs for managing themes (#8387)
  chore: update devDependencies for cypress (#8735)
  refactor: Add routing_approach other variant to handle unknown data (#8754)
  chore(version): 2025.07.28.0
  refactor(connector): [facilitapay] move destination bank account number to connector metadata (#8704)
  feat(recovery-events): add revenue recovery topic and vector config to push these events to s3 (#8285)
  ci(cypress): add authorizedotnet connector (#8688)
  refactor(schema): add a new column for storing large customer user agents in mandate table (#8616)
  feat(authentication): add authentication api for modular authentication (#8459)
  feat(connector): [MPGS] template code (#8544)
  fix(chat): append request id to headers for chat request (#8680)
  feat(connector): [Flexiti]template code for flexiti connector (#8714)
  chore(version): 2025.07.25.0
  feat(core): Consuming locale in PaymentsAuthorizeData from SessionState (#8731)
  fix(payment-methods): fetch payment method details in payouts flow (#8729)
  refactor(core): remove hardcoded timeout limit of 5s for outgoing webhook requests (#8725)
  feat(connector): [Breadpay]Add support for Breadpay connector (#8676)
  fix(feature_matrix): refunds are supported by jpmorgan (#8699)
  ...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-core Area: Core flows A-mandates Area: Mandate Flows M-database-changes Metadata: This PR involves database schema changes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BUG] 5xx when customer_user_agent hits max character limit of 255
6 participants