From 71a34d17d9540d7e90d56fa2b86c6729542635db Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 14:46:19 +0530 Subject: [PATCH 01/23] Chore: Regional API domain processing --- src/main/java/com/twilio/Twilio.java | 20 ++++++++++++++++++- .../com/twilio/http/TwilioRestClient.java | 17 ++++++++++++++-- 2 files changed, 34 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index 0d9be1539f..73ccccf389 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -11,6 +11,8 @@ import com.twilio.http.Request; import com.twilio.http.Response; import com.twilio.http.TwilioRestClient; +import java.util.HashMap; +import java.util.Map; import lombok.Getter; import java.util.ArrayList; @@ -40,6 +42,19 @@ public class Twilio { private static CredentialProvider credentialProvider; + private static Map regionMap = Map.of( + "au1", "sydney", + "br1", "sao-paulo", + "ie1", "dublin", + "de1", "frankfurt", + "jp1", "tokyo", + "jp2", "osaka", + "sg1", "singapore", + "us1", "ashburn", + "us2", "umatilla" + ); + + private Twilio() { } @@ -184,7 +199,10 @@ public static synchronized void setRegion(final String region) { * Set the edge. * * @param edge edge to make request + * deprecated from 11.2.0. Twilio is moving towards regional processing. This will be removed from 12.x.x. */ + @SuppressWarnings("DeprecatedIsStillUsed") + @Deprecated public static synchronized void setEdge(final String edge) { if (!Objects.equals(edge, Twilio.edge)) { Twilio.invalidate(); @@ -234,7 +252,7 @@ private static TwilioRestClient buildRestClient() { if (userAgentExtensions != null) { builder.userAgentExtensions(Twilio.userAgentExtensions); } - + Twilio.edge = region != null ? regionMap.get(Twilio.region) : Twilio.edge; builder.region(Twilio.region); builder.edge(Twilio.edge); diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 92e1abca2f..9a8eb550b3 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.twilio.Twilio; import com.twilio.auth_strategy.AuthStrategy; import com.twilio.constant.EnumConstants; import java.util.ArrayList; @@ -69,6 +70,17 @@ public class TwilioRestClient { @Getter private final List userAgentExtensions; private static final Logger logger = LoggerFactory.getLogger(TwilioRestClient.class); + private static Map regionMap = Map.of( + "au1", "sydney", + "br1", "sao-paulo", + "ie1", "dublin", + "de1", "frankfurt", + "jp1", "tokyo", + "jp2", "osaka", + "sg1", "singapore", + "us1", "ashburn", + "us2", "umatilla" + ); protected TwilioRestClient(Builder b) { this.username = b.username; @@ -76,7 +88,8 @@ protected TwilioRestClient(Builder b) { this.authStrategy = b.authStrategy; this.accountSid = b.accountSid; this.region = b.region; - this.edge = b.edge; +// this.edge = b.edge; + this.edge = b.region != null ? regionMap.get(b.region) : b.edge; this.httpClient = b.httpClient; this.objectMapper = b.objectMapper; this.userAgentExtensions = b.userAgentExtensions; @@ -89,7 +102,7 @@ protected TwilioRestClient(Builder b) { * @return Response object */ public Response request(final Request request) { - // If authStrategy is passed from NoAuth API, no need to set authStrategy (ex TokenCreator). + // If authStrategy is passed from NoAuth API, no need to set authStrategy (ex TokenCreator). if (request.getAuthStrategy() == null) { if (username != null && password != null) { request.setAuth(username, password); From a26a4fa1d34f63c32ef26a0eba4a31f0c769e3a4 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 14:53:20 +0530 Subject: [PATCH 02/23] Chore: Regional API domain processing --- src/main/java/com/twilio/Twilio.java | 23 +++++++++--------- .../com/twilio/http/TwilioRestClient.java | 24 ++++++++++--------- 2 files changed, 25 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index 73ccccf389..f68eabc055 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -42,17 +42,18 @@ public class Twilio { private static CredentialProvider credentialProvider; - private static Map regionMap = Map.of( - "au1", "sydney", - "br1", "sao-paulo", - "ie1", "dublin", - "de1", "frankfurt", - "jp1", "tokyo", - "jp2", "osaka", - "sg1", "singapore", - "us1", "ashburn", - "us2", "umatilla" - ); + private static Map regionMap = new HashMap<>(); + static { + regionMap.put("au1", "sydney"); + regionMap.put("br1", "sao-paulo"); + regionMap.put("ie1", "dublin"); + regionMap.put("de1", "frankfurt"); + regionMap.put("jp1", "tokyo"); + regionMap.put("jp2", "osaka"); + regionMap.put("sg1", "singapore"); + regionMap.put("us1", "ashburn"); + regionMap.put("us2", "umatilla"); + } private Twilio() { diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 9a8eb550b3..f43d53a878 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -6,6 +6,7 @@ import com.twilio.auth_strategy.AuthStrategy; import com.twilio.constant.EnumConstants; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Predicate; @@ -70,17 +71,18 @@ public class TwilioRestClient { @Getter private final List userAgentExtensions; private static final Logger logger = LoggerFactory.getLogger(TwilioRestClient.class); - private static Map regionMap = Map.of( - "au1", "sydney", - "br1", "sao-paulo", - "ie1", "dublin", - "de1", "frankfurt", - "jp1", "tokyo", - "jp2", "osaka", - "sg1", "singapore", - "us1", "ashburn", - "us2", "umatilla" - ); + private static Map regionMap = new HashMap<>(); + static { + regionMap.put("au1", "sydney"); + regionMap.put("br1", "sao-paulo"); + regionMap.put("ie1", "dublin"); + regionMap.put("de1", "frankfurt"); + regionMap.put("jp1", "tokyo"); + regionMap.put("jp2", "osaka"); + regionMap.put("sg1", "singapore"); + regionMap.put("us1", "ashburn"); + regionMap.put("us2", "umatilla"); + } protected TwilioRestClient(Builder b) { this.username = b.username; From 5f4ad71cadd9fce935ddb527fd34788d806dff6b Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 15:09:02 +0530 Subject: [PATCH 03/23] Chore: Regional API domain processing --- src/test/java/com/twilio/TwilioTest.java | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index f6f3fd3a20..d45104dca9 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -11,6 +11,8 @@ import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; +import java.util.Map; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -158,4 +160,26 @@ public void testValidateSslCertificateSuccess() { Twilio.validateSslCertificate(networkHttpClient); } + + @Test + public void testEdgeIsSetFromRegionMap() { + Twilio.setUsername("testUser"); + Twilio.setPassword("testToken"); + Map regionMap = new HashMap<>(); + regionMap.put("au1", "sydney"); + regionMap.put("br1", "sao-paulo"); + regionMap.put("ie1", "dublin"); + regionMap.put("de1", "frankfurt"); + regionMap.put("jp1", "tokyo"); + regionMap.put("jp2", "osaka"); + regionMap.put("sg1", "singapore"); + regionMap.put("us1", "ashburn"); + regionMap.put("us2", "umatilla"); + for( String key : regionMap.keySet()){ + Twilio.setRegion(key); // region key present in regionMap + TwilioRestClient client = Twilio.getRestClient(); + // The edge should be set to "sydney" as per regionMap + assertEquals(regionMap.get(key), client.getEdge()); + } + } } From 30246bf43b96bb21eabe9d79f3b94bd447c0575d Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 15:11:00 +0530 Subject: [PATCH 04/23] Chore: Regional API domain processing --- .../com/twilio/http/TwilioRestClientTest.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/test/java/com/twilio/http/TwilioRestClientTest.java b/src/test/java/com/twilio/http/TwilioRestClientTest.java index 16baf5faeb..20a3e4d06e 100644 --- a/src/test/java/com/twilio/http/TwilioRestClientTest.java +++ b/src/test/java/com/twilio/http/TwilioRestClientTest.java @@ -8,12 +8,15 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.twilio.Twilio; import com.twilio.auth_strategy.BasicAuthStrategy; import com.twilio.auth_strategy.NoAuthStrategy; import com.twilio.rest.Domains; import java.util.Arrays; import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; @@ -161,4 +164,24 @@ public void testRequestWithNoAuthStrategyWithAuthStrategy() { // AuthStrategy of Request not changing by TwilioRestClient assertEquals(NoAuthStrategy.getInstance(), request.getAuthStrategy()); } + + @Test + public void testEdgeIsSetFromRegionMap() { + Twilio.setUsername("testUser"); + Twilio.setPassword("testToken"); + Map regionMap = new HashMap<>(); + regionMap.put("au1", "sydney"); + regionMap.put("br1", "sao-paulo"); + regionMap.put("ie1", "dublin"); + regionMap.put("de1", "frankfurt"); + regionMap.put("jp1", "tokyo"); + regionMap.put("jp2", "osaka"); + regionMap.put("sg1", "singapore"); + regionMap.put("us1", "ashburn"); + regionMap.put("us2", "umatilla"); + for( String key : regionMap.keySet()){ + TwilioRestClient client = new TwilioRestClient.Builder(USER_NAME, TOKEN).region(key).build(); + assertEquals(regionMap.get(key), client.getEdge()); + } + } } From ee512b7481eb9a7c3792613ab8766cdaabecbc66 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 15:17:57 +0530 Subject: [PATCH 05/23] Chore: Regional API domain processing --- src/main/java/com/twilio/Twilio.java | 14 ++------------ .../java/com/twilio/http/TwilioRestClient.java | 15 ++------------- src/test/java/com/twilio/TwilioTest.java | 14 +++----------- .../com/twilio/http/TwilioRestClientTest.java | 14 +++----------- 4 files changed, 10 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index f68eabc055..558171b7c8 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -11,6 +11,7 @@ import com.twilio.http.Request; import com.twilio.http.Response; import com.twilio.http.TwilioRestClient; +import com.twilio.type.RegionEndpoints; import java.util.HashMap; import java.util.Map; import lombok.Getter; @@ -42,18 +43,7 @@ public class Twilio { private static CredentialProvider credentialProvider; - private static Map regionMap = new HashMap<>(); - static { - regionMap.put("au1", "sydney"); - regionMap.put("br1", "sao-paulo"); - regionMap.put("ie1", "dublin"); - regionMap.put("de1", "frankfurt"); - regionMap.put("jp1", "tokyo"); - regionMap.put("jp2", "osaka"); - regionMap.put("sg1", "singapore"); - regionMap.put("us1", "ashburn"); - regionMap.put("us2", "umatilla"); - } + private static Map regionMap = RegionEndpoints.getRegions(); private Twilio() { diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index f43d53a878..4a92fe8592 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -5,6 +5,7 @@ import com.twilio.Twilio; import com.twilio.auth_strategy.AuthStrategy; import com.twilio.constant.EnumConstants; +import com.twilio.type.RegionEndpoints; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -71,18 +72,7 @@ public class TwilioRestClient { @Getter private final List userAgentExtensions; private static final Logger logger = LoggerFactory.getLogger(TwilioRestClient.class); - private static Map regionMap = new HashMap<>(); - static { - regionMap.put("au1", "sydney"); - regionMap.put("br1", "sao-paulo"); - regionMap.put("ie1", "dublin"); - regionMap.put("de1", "frankfurt"); - regionMap.put("jp1", "tokyo"); - regionMap.put("jp2", "osaka"); - regionMap.put("sg1", "singapore"); - regionMap.put("us1", "ashburn"); - regionMap.put("us2", "umatilla"); - } + private static Map regionMap = RegionEndpoints.getRegions(); protected TwilioRestClient(Builder b) { this.username = b.username; @@ -90,7 +80,6 @@ protected TwilioRestClient(Builder b) { this.authStrategy = b.authStrategy; this.accountSid = b.accountSid; this.region = b.region; -// this.edge = b.edge; this.edge = b.region != null ? regionMap.get(b.region) : b.edge; this.httpClient = b.httpClient; this.objectMapper = b.objectMapper; diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index d45104dca9..d41fc23791 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -9,6 +9,7 @@ import com.twilio.http.Response; import com.twilio.http.TwilioRestClient; +import com.twilio.type.RegionEndpoints; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -165,17 +166,8 @@ public void testValidateSslCertificateSuccess() { public void testEdgeIsSetFromRegionMap() { Twilio.setUsername("testUser"); Twilio.setPassword("testToken"); - Map regionMap = new HashMap<>(); - regionMap.put("au1", "sydney"); - regionMap.put("br1", "sao-paulo"); - regionMap.put("ie1", "dublin"); - regionMap.put("de1", "frankfurt"); - regionMap.put("jp1", "tokyo"); - regionMap.put("jp2", "osaka"); - regionMap.put("sg1", "singapore"); - regionMap.put("us1", "ashburn"); - regionMap.put("us2", "umatilla"); - for( String key : regionMap.keySet()){ + Map regionMap = RegionEndpoints.getRegions(); + for( String key: regionMap.keySet() ) { Twilio.setRegion(key); // region key present in regionMap TwilioRestClient client = Twilio.getRestClient(); // The edge should be set to "sydney" as per regionMap diff --git a/src/test/java/com/twilio/http/TwilioRestClientTest.java b/src/test/java/com/twilio/http/TwilioRestClientTest.java index 20a3e4d06e..dd09b49967 100644 --- a/src/test/java/com/twilio/http/TwilioRestClientTest.java +++ b/src/test/java/com/twilio/http/TwilioRestClientTest.java @@ -12,6 +12,7 @@ import com.twilio.auth_strategy.BasicAuthStrategy; import com.twilio.auth_strategy.NoAuthStrategy; import com.twilio.rest.Domains; +import com.twilio.type.RegionEndpoints; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -169,17 +170,8 @@ public void testRequestWithNoAuthStrategyWithAuthStrategy() { public void testEdgeIsSetFromRegionMap() { Twilio.setUsername("testUser"); Twilio.setPassword("testToken"); - Map regionMap = new HashMap<>(); - regionMap.put("au1", "sydney"); - regionMap.put("br1", "sao-paulo"); - regionMap.put("ie1", "dublin"); - regionMap.put("de1", "frankfurt"); - regionMap.put("jp1", "tokyo"); - regionMap.put("jp2", "osaka"); - regionMap.put("sg1", "singapore"); - regionMap.put("us1", "ashburn"); - regionMap.put("us2", "umatilla"); - for( String key : regionMap.keySet()){ + Map regionMap = RegionEndpoints.getRegions(); + for( String key: regionMap.keySet() ) { TwilioRestClient client = new TwilioRestClient.Builder(USER_NAME, TOKEN).region(key).build(); assertEquals(regionMap.get(key), client.getEdge()); } From 931cfb4a6fa654fd4127ec7610ee8604868e7b74 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 15:20:31 +0530 Subject: [PATCH 06/23] Chore: Regional API domain processing --- .../java/com/twilio/type/RegionEndpoints.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/com/twilio/type/RegionEndpoints.java diff --git a/src/main/java/com/twilio/type/RegionEndpoints.java b/src/main/java/com/twilio/type/RegionEndpoints.java new file mode 100644 index 0000000000..71ece43a2d --- /dev/null +++ b/src/main/java/com/twilio/type/RegionEndpoints.java @@ -0,0 +1,22 @@ +package com.twilio.type; + +import java.util.HashMap; +import java.util.Map; + +public class RegionEndpoints { + private static Map regionMap = new HashMap<>(); + static { + regionMap.put("au1", "sydney"); + regionMap.put("br1", "sao-paulo"); + regionMap.put("ie1", "dublin"); + regionMap.put("de1", "frankfurt"); + regionMap.put("jp1", "tokyo"); + regionMap.put("jp2", "osaka"); + regionMap.put("sg1", "singapore"); + regionMap.put("us1", "ashburn"); + regionMap.put("us2", "umatilla"); + } + public static Map getRegions() { + return regionMap; + } +} From bee95a36554b82eacf59d7835336ff49dd627928 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 15:29:51 +0530 Subject: [PATCH 07/23] Chore: Regional API domain processing --- src/main/java/com/twilio/Twilio.java | 2 +- src/main/java/com/twilio/http/TwilioRestClient.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index 558171b7c8..bab78f1a30 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -190,7 +190,7 @@ public static synchronized void setRegion(final String region) { * Set the edge. * * @param edge edge to make request - * deprecated from 11.2.0. Twilio is moving towards regional processing. This will be removed from 12.x.x. + * @deprecated from 11.2.0. Twilio is moving towards regional processing. This will be removed from 12.x.x. */ @SuppressWarnings("DeprecatedIsStillUsed") @Deprecated diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 4a92fe8592..4a716daacf 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -182,6 +182,11 @@ public Builder region(final String region) { return this; } + /** + * @deprecated from 11.2.0. use region instead. + * Twilio is moving towards regional processing. This will be removed from 12.x.x. + */ + @Deprecated public Builder edge(final String edge) { this.edge = edge; return this; From 7e275ae4e8c4b00a634580a8534af1bb01417e71 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 15:30:44 +0530 Subject: [PATCH 08/23] Chore: Regional API domain processing --- src/main/java/com/twilio/Twilio.java | 1 - src/main/java/com/twilio/http/TwilioRestClient.java | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index bab78f1a30..a5faf601c4 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -12,7 +12,6 @@ import com.twilio.http.Response; import com.twilio.http.TwilioRestClient; import com.twilio.type.RegionEndpoints; -import java.util.HashMap; import java.util.Map; import lombok.Getter; diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 4a716daacf..8fef455d89 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -2,12 +2,10 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.twilio.Twilio; import com.twilio.auth_strategy.AuthStrategy; import com.twilio.constant.EnumConstants; import com.twilio.type.RegionEndpoints; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.Predicate; From 0b1badd39947ebe30372ec34ddeb247cdc0bff53 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Tue, 25 Nov 2025 15:33:25 +0530 Subject: [PATCH 09/23] Chore: Regional API domain processing --- src/test/java/com/twilio/TwilioTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index d41fc23791..ba74e6653e 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -168,10 +168,10 @@ public void testEdgeIsSetFromRegionMap() { Twilio.setPassword("testToken"); Map regionMap = RegionEndpoints.getRegions(); for( String key: regionMap.keySet() ) { - Twilio.setRegion(key); // region key present in regionMap + Twilio.setRegion(key); TwilioRestClient client = Twilio.getRestClient(); - // The edge should be set to "sydney" as per regionMap assertEquals(regionMap.get(key), client.getEdge()); } } + } From 6f4f17cd37b34479d326477961853120bf211a66 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Thu, 27 Nov 2025 14:45:13 +0530 Subject: [PATCH 10/23] Chore: Regional API domain processing --- src/main/java/com/twilio/Twilio.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index a5faf601c4..39500ac8dd 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -13,6 +13,7 @@ import com.twilio.http.TwilioRestClient; import com.twilio.type.RegionEndpoints; import java.util.Map; +import java.util.logging.Logger; import lombok.Getter; import java.util.ArrayList; @@ -242,7 +243,12 @@ private static TwilioRestClient buildRestClient() { if (userAgentExtensions != null) { builder.userAgentExtensions(Twilio.userAgentExtensions); } - Twilio.edge = region != null ? regionMap.get(Twilio.region) : Twilio.edge; + if( Twilio.edge == null && Twilio.region != null ) { + Logger.getLogger(Twilio.class.getName()).info( + "Setting edge from region is deprecated and will be removed in future versions." + ); + Twilio.edge = regionMap.get(Twilio.region); + } builder.region(Twilio.region); builder.edge(Twilio.edge); From d420db27eb3e6231cfee214c25473a2120ec1f5c Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Thu, 27 Nov 2025 14:51:51 +0530 Subject: [PATCH 11/23] Chore: Regional API domain processing --- src/main/java/com/twilio/http/TwilioRestClient.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 8fef455d89..91a37a584a 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -2,6 +2,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; +import com.twilio.Twilio; import com.twilio.auth_strategy.AuthStrategy; import com.twilio.constant.EnumConstants; import com.twilio.type.RegionEndpoints; @@ -78,7 +79,14 @@ protected TwilioRestClient(Builder b) { this.authStrategy = b.authStrategy; this.accountSid = b.accountSid; this.region = b.region; - this.edge = b.region != null ? regionMap.get(b.region) : b.edge; + if( b.edge == null && b.region != null ) { + java.util.logging.Logger.getLogger(TwilioRestClient.class.getName()).info( + "Setting edge from region. Edge deprecated and will be removed in future versions." + ); + this.edge = regionMap.get(this.region); + } + else + this.edge = b.edge; this.httpClient = b.httpClient; this.objectMapper = b.objectMapper; this.userAgentExtensions = b.userAgentExtensions; From 80c8f7e6b5e17562492899a2a93854f3d7083cbe Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Thu, 27 Nov 2025 15:08:52 +0530 Subject: [PATCH 12/23] Chore: Regional API domain processing --- src/test/java/com/twilio/TwilioTest.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index ba74e6653e..1aa904a96b 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -164,14 +164,12 @@ public void testValidateSslCertificateSuccess() { @Test public void testEdgeIsSetFromRegionMap() { + Map regionMap = RegionEndpoints.getRegions(); Twilio.setUsername("testUser"); Twilio.setPassword("testToken"); - Map regionMap = RegionEndpoints.getRegions(); - for( String key: regionMap.keySet() ) { - Twilio.setRegion(key); - TwilioRestClient client = Twilio.getRestClient(); - assertEquals(regionMap.get(key), client.getEdge()); - } + Twilio.setRegion("br1"); + TwilioRestClient client = Twilio.getRestClient(); + assertEquals(regionMap.get("br1"), client.getEdge()); } } From f028c021d9c8897e285799f056fc16f0707a00e1 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Thu, 27 Nov 2025 15:21:38 +0530 Subject: [PATCH 13/23] Chore: Regional API domain processing --- src/test/java/com/twilio/TwilioTest.java | 11 +++++++++++ .../java/com/twilio/http/TwilioRestClientTest.java | 8 ++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index 1aa904a96b..bae90b7669 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -162,6 +162,17 @@ public void testValidateSslCertificateSuccess() { Twilio.validateSslCertificate(networkHttpClient); } + @Test + public void testEdge() { + Twilio.setUsername("testUser"); + Twilio.setPassword("testToken"); + Twilio.setRegion("br1"); + Twilio.setEdge("someEdge"); + TwilioRestClient client = Twilio.getRestClient(); + assertEquals("someEdge", client.getEdge()); + Twilio.setEdge(null); + } + @Test public void testEdgeIsSetFromRegionMap() { Map regionMap = RegionEndpoints.getRegions(); diff --git a/src/test/java/com/twilio/http/TwilioRestClientTest.java b/src/test/java/com/twilio/http/TwilioRestClientTest.java index dd09b49967..f7c53ea5c5 100644 --- a/src/test/java/com/twilio/http/TwilioRestClientTest.java +++ b/src/test/java/com/twilio/http/TwilioRestClientTest.java @@ -168,12 +168,16 @@ public void testRequestWithNoAuthStrategyWithAuthStrategy() { @Test public void testEdgeIsSetFromRegionMap() { - Twilio.setUsername("testUser"); - Twilio.setPassword("testToken"); Map regionMap = RegionEndpoints.getRegions(); for( String key: regionMap.keySet() ) { TwilioRestClient client = new TwilioRestClient.Builder(USER_NAME, TOKEN).region(key).build(); assertEquals(regionMap.get(key), client.getEdge()); } } + + @Test + public void testEdge() { + TwilioRestClient client = new TwilioRestClient.Builder(USER_NAME, TOKEN).region("us1").edge("someEdge").build(); + assertEquals("someEdge", client.getEdge()); + } } From b88a705330891e0f44a4aaacfd15e95e86636b71 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Fri, 28 Nov 2025 12:04:56 +0530 Subject: [PATCH 14/23] Chore: Regional API domain processing --- src/main/java/com/twilio/Twilio.java | 7 ++----- src/main/java/com/twilio/http/TwilioRestClient.java | 9 ++------- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index 39500ac8dd..d823a11f2f 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -190,10 +190,7 @@ public static synchronized void setRegion(final String region) { * Set the edge. * * @param edge edge to make request - * @deprecated from 11.2.0. Twilio is moving towards regional processing. This will be removed from 12.x.x. */ - @SuppressWarnings("DeprecatedIsStillUsed") - @Deprecated public static synchronized void setEdge(final String edge) { if (!Objects.equals(edge, Twilio.edge)) { Twilio.invalidate(); @@ -244,8 +241,8 @@ private static TwilioRestClient buildRestClient() { builder.userAgentExtensions(Twilio.userAgentExtensions); } if( Twilio.edge == null && Twilio.region != null ) { - Logger.getLogger(Twilio.class.getName()).info( - "Setting edge from region is deprecated and will be removed in future versions." + Logger.getLogger(Twilio.class.getName()).warning( + "Setting `Edge` from `region` value. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." ); Twilio.edge = regionMap.get(Twilio.region); } diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 91a37a584a..d48de14c3e 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -80,8 +80,8 @@ protected TwilioRestClient(Builder b) { this.accountSid = b.accountSid; this.region = b.region; if( b.edge == null && b.region != null ) { - java.util.logging.Logger.getLogger(TwilioRestClient.class.getName()).info( - "Setting edge from region. Edge deprecated and will be removed in future versions." + java.util.logging.Logger.getLogger(TwilioRestClient.class.getName()).warning( + "Setting `Edge` from `region` value. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." ); this.edge = regionMap.get(this.region); } @@ -188,11 +188,6 @@ public Builder region(final String region) { return this; } - /** - * @deprecated from 11.2.0. use region instead. - * Twilio is moving towards regional processing. This will be removed from 12.x.x. - */ - @Deprecated public Builder edge(final String edge) { this.edge = edge; return this; From 0af88322d97b68798237939d5dde95e485f654c5 Mon Sep 17 00:00:00 2001 From: Manisha Singh Date: Fri, 28 Nov 2025 12:07:08 +0530 Subject: [PATCH 15/23] Update src/main/java/com/twilio/type/RegionEndpoints.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/main/java/com/twilio/type/RegionEndpoints.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/twilio/type/RegionEndpoints.java b/src/main/java/com/twilio/type/RegionEndpoints.java index 71ece43a2d..68e98cf015 100644 --- a/src/main/java/com/twilio/type/RegionEndpoints.java +++ b/src/main/java/com/twilio/type/RegionEndpoints.java @@ -3,6 +3,13 @@ import java.util.HashMap; import java.util.Map; +/** + * Provides region-to-edge mappings for Twilio's regional processing. + *

+ * This class is part of the transition away from direct edge configuration, + * allowing clients to use region identifiers that are mapped to the appropriate edge endpoints. + * It is intended to centralize and simplify region-to-edge lookups for Twilio services. + */ public class RegionEndpoints { private static Map regionMap = new HashMap<>(); static { From 4405a9591e51f25f7981ea31f2dca4d2d389de87 Mon Sep 17 00:00:00 2001 From: Manisha Singh Date: Fri, 28 Nov 2025 12:07:28 +0530 Subject: [PATCH 16/23] Update src/main/java/com/twilio/http/TwilioRestClient.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/main/java/com/twilio/http/TwilioRestClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index d48de14c3e..670dfb3bcb 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -79,7 +79,7 @@ protected TwilioRestClient(Builder b) { this.authStrategy = b.authStrategy; this.accountSid = b.accountSid; this.region = b.region; - if( b.edge == null && b.region != null ) { + if(b.edge == null && b.region != null) { java.util.logging.Logger.getLogger(TwilioRestClient.class.getName()).warning( "Setting `Edge` from `region` value. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." ); From 1671eba1d5eafeb8eb59b84a26ca7ddb5e03d47c Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Fri, 28 Nov 2025 12:13:20 +0530 Subject: [PATCH 17/23] Chore: Regional API domain processing --- src/main/java/com/twilio/type/RegionEndpoints.java | 3 ++- src/test/java/com/twilio/TwilioTest.java | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/twilio/type/RegionEndpoints.java b/src/main/java/com/twilio/type/RegionEndpoints.java index 68e98cf015..0edda18a13 100644 --- a/src/main/java/com/twilio/type/RegionEndpoints.java +++ b/src/main/java/com/twilio/type/RegionEndpoints.java @@ -1,5 +1,6 @@ package com.twilio.type; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -24,6 +25,6 @@ public class RegionEndpoints { regionMap.put("us2", "umatilla"); } public static Map getRegions() { - return regionMap; + return Collections.unmodifiableMap(regionMap); } } diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index bae90b7669..074bf9232d 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -171,6 +171,9 @@ public void testEdge() { TwilioRestClient client = Twilio.getRestClient(); assertEquals("someEdge", client.getEdge()); Twilio.setEdge(null); + Twilio.setRegion(null); + Twilio.setUsername(null); + Twilio.setPassword(null); } @Test @@ -181,6 +184,9 @@ public void testEdgeIsSetFromRegionMap() { Twilio.setRegion("br1"); TwilioRestClient client = Twilio.getRestClient(); assertEquals(regionMap.get("br1"), client.getEdge()); + Twilio.setRegion(null); + Twilio.setUsername(null); + Twilio.setPassword(null); } } From d884ee39f0798995b7f168b94deb1cc851fa84dd Mon Sep 17 00:00:00 2001 From: Manisha Singh Date: Fri, 28 Nov 2025 12:13:42 +0530 Subject: [PATCH 18/23] Update src/main/java/com/twilio/Twilio.java Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/main/java/com/twilio/Twilio.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index d823a11f2f..4dd8641cb2 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -240,7 +240,7 @@ private static TwilioRestClient buildRestClient() { if (userAgentExtensions != null) { builder.userAgentExtensions(Twilio.userAgentExtensions); } - if( Twilio.edge == null && Twilio.region != null ) { + if (Twilio.edge == null && Twilio.region != null) { Logger.getLogger(Twilio.class.getName()).warning( "Setting `Edge` from `region` value. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." ); From 62221c49ee9ff21892785891044c1c27d8f10d82 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Fri, 28 Nov 2025 12:19:27 +0530 Subject: [PATCH 19/23] Chore: Regional API domain processing --- src/main/java/com/twilio/Twilio.java | 7 +++++-- src/main/java/com/twilio/http/TwilioRestClient.java | 2 +- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index 4dd8641cb2..5df384e869 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -13,7 +13,6 @@ import com.twilio.http.TwilioRestClient; import com.twilio.type.RegionEndpoints; import java.util.Map; -import java.util.logging.Logger; import lombok.Getter; import java.util.ArrayList; @@ -21,6 +20,8 @@ import java.util.Objects; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * Singleton class to initialize Twilio environment. @@ -44,6 +45,8 @@ public class Twilio { private static CredentialProvider credentialProvider; private static Map regionMap = RegionEndpoints.getRegions(); + private static final Logger logger = LoggerFactory.getLogger(Twilio.class); + private Twilio() { @@ -241,7 +244,7 @@ private static TwilioRestClient buildRestClient() { builder.userAgentExtensions(Twilio.userAgentExtensions); } if (Twilio.edge == null && Twilio.region != null) { - Logger.getLogger(Twilio.class.getName()).warning( + logger.warn( "Setting `Edge` from `region` value. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." ); Twilio.edge = regionMap.get(Twilio.region); diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 670dfb3bcb..3a8f5c9759 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -80,7 +80,7 @@ protected TwilioRestClient(Builder b) { this.accountSid = b.accountSid; this.region = b.region; if(b.edge == null && b.region != null) { - java.util.logging.Logger.getLogger(TwilioRestClient.class.getName()).warning( + logger.warn( "Setting `Edge` from `region` value. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." ); this.edge = regionMap.get(this.region); From d0705287884558ba7a61bd6610234478fdfcc2e5 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Fri, 28 Nov 2025 12:21:54 +0530 Subject: [PATCH 20/23] Chore: Regional API domain processing --- src/test/java/com/twilio/TwilioTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index 074bf9232d..f79c183fd3 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -172,7 +172,6 @@ public void testEdge() { assertEquals("someEdge", client.getEdge()); Twilio.setEdge(null); Twilio.setRegion(null); - Twilio.setUsername(null); Twilio.setPassword(null); } @@ -185,7 +184,6 @@ public void testEdgeIsSetFromRegionMap() { TwilioRestClient client = Twilio.getRestClient(); assertEquals(regionMap.get("br1"), client.getEdge()); Twilio.setRegion(null); - Twilio.setUsername(null); Twilio.setPassword(null); } From 9ea49f3b3c75dfd6460f27fb337bcc0073584a70 Mon Sep 17 00:00:00 2001 From: manisha1997 Date: Fri, 28 Nov 2025 12:22:11 +0530 Subject: [PATCH 21/23] Chore: Regional API domain processing --- src/test/java/com/twilio/TwilioTest.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/test/java/com/twilio/TwilioTest.java b/src/test/java/com/twilio/TwilioTest.java index f79c183fd3..e52c08e643 100644 --- a/src/test/java/com/twilio/TwilioTest.java +++ b/src/test/java/com/twilio/TwilioTest.java @@ -172,7 +172,6 @@ public void testEdge() { assertEquals("someEdge", client.getEdge()); Twilio.setEdge(null); Twilio.setRegion(null); - Twilio.setPassword(null); } @Test @@ -184,7 +183,6 @@ public void testEdgeIsSetFromRegionMap() { TwilioRestClient client = Twilio.getRestClient(); assertEquals(regionMap.get("br1"), client.getEdge()); Twilio.setRegion(null); - Twilio.setPassword(null); } } From b62be7fd107acff5cbd910c991b1e59e655e06f4 Mon Sep 17 00:00:00 2001 From: Manisha Singh Date: Fri, 28 Nov 2025 12:40:27 +0530 Subject: [PATCH 22/23] Update src/main/java/com/twilio/http/TwilioRestClient.java Co-authored-by: Shubham --- src/main/java/com/twilio/http/TwilioRestClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/twilio/http/TwilioRestClient.java b/src/main/java/com/twilio/http/TwilioRestClient.java index 3a8f5c9759..2c0a72444b 100644 --- a/src/main/java/com/twilio/http/TwilioRestClient.java +++ b/src/main/java/com/twilio/http/TwilioRestClient.java @@ -81,7 +81,7 @@ protected TwilioRestClient(Builder b) { this.region = b.region; if(b.edge == null && b.region != null) { logger.warn( - "Setting `Edge` from `region` value. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." + "Setting default `Edge` for the provided `region`. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." ); this.edge = regionMap.get(this.region); } From d4d255d9ea5d20d68d8b8d48c846841cca50505f Mon Sep 17 00:00:00 2001 From: Manisha Singh Date: Fri, 28 Nov 2025 12:40:37 +0530 Subject: [PATCH 23/23] Update src/main/java/com/twilio/Twilio.java Co-authored-by: Shubham --- src/main/java/com/twilio/Twilio.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/twilio/Twilio.java b/src/main/java/com/twilio/Twilio.java index 5df384e869..301e5a9840 100644 --- a/src/main/java/com/twilio/Twilio.java +++ b/src/main/java/com/twilio/Twilio.java @@ -245,7 +245,7 @@ private static TwilioRestClient buildRestClient() { } if (Twilio.edge == null && Twilio.region != null) { logger.warn( - "Setting `Edge` from `region` value. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." + "Setting default `Edge` for the provided `region`. For regional processing, DNS is of format product...twilio.com; otherwise use product.twilio.com." ); Twilio.edge = regionMap.get(Twilio.region); }