11import { configHandler } from '@contentstack/cli-utilities' ;
2+ import { getContentstackEndpoint } from '@contentstack/utils' ;
3+ import { Region , RegionsMap } from '../interfaces' ;
24
35function validURL ( str ) {
46 const pattern = new RegExp (
@@ -15,109 +17,67 @@ function validURL(str) {
1517 return pattern . test ( str ) ;
1618}
1719
18- // Available region list
19- const regions = {
20- NA : {
21- name : 'NA' ,
22- cma : 'https://api.contentstack.io' ,
23- cda : 'https://cdn.contentstack.io' ,
24- uiHost : 'https://app.contentstack.com' ,
25- developerHubUrl : 'https://developerhub-api.contentstack.com' ,
26- launchHubUrl : 'https://launch-api.contentstack.com' ,
27- personalizeUrl : 'https://personalize-api.contentstack.com' ,
28- composableStudioUrl : 'https://composable-studio-api.contentstack.com' ,
29- } ,
30- 'AWS-NA' : {
31- name : 'AWS-NA' ,
32- cma : 'https://api.contentstack.io' ,
33- cda : 'https://cdn.contentstack.io' ,
34- uiHost : 'https://app.contentstack.com' ,
35- developerHubUrl : 'https://developerhub-api.contentstack.com' ,
36- launchHubUrl : 'https://launch-api.contentstack.com' ,
37- personalizeUrl : 'https://personalize-api.contentstack.com' ,
38- composableStudioUrl : 'https://composable-studio-api.contentstack.com' ,
39- } ,
40- EU : {
41- name : 'EU' ,
42- cma : 'https://eu-api.contentstack.com' ,
43- cda : 'https://eu-cdn.contentstack.com' ,
44- uiHost : 'https://eu-app.contentstack.com' ,
45- developerHubUrl : 'https://eu-developerhub-api.contentstack.com' ,
46- launchHubUrl : 'https://eu-launch-api.contentstack.com' ,
47- personalizeUrl : 'https://eu-personalize-api.contentstack.com' ,
48- composableStudioUrl : 'https://eu-composable-studio-api.contentstack.com' ,
49- } ,
50- 'AWS-EU' : {
51- name : 'AWS-EU' ,
52- cma : 'https://eu-api.contentstack.com' ,
53- cda : 'https://eu-cdn.contentstack.com' ,
54- uiHost : 'https://eu-app.contentstack.com' ,
55- developerHubUrl : 'https://eu-developerhub-api.contentstack.com' ,
56- launchHubUrl : 'https://eu-launch-api.contentstack.com' ,
57- personalizeUrl : 'https://eu-personalize-api.contentstack.com' ,
58- composableStudioUrl : 'https://eu-composable-studio-api.contentstack.com' ,
59- } ,
60- AU : {
61- name : 'AU' ,
62- cma : 'https://au-api.contentstack.com' ,
63- cda : 'https://au-cdn.contentstack.com' ,
64- uiHost : 'https://au-app.contentstack.com' ,
65- developerHubUrl : 'https://au-developerhub-api.contentstack.com' ,
66- launchHubUrl : 'https://au-launch-api.contentstack.com' ,
67- personalizeUrl : 'https://au-personalize-api.contentstack.com' ,
68- composableStudioUrl : 'https://au-composable-studio-api.contentstack.com' ,
69- } ,
70- 'AWS-AU' : {
71- name : 'AWS-AU' ,
72- cma : 'https://au-api.contentstack.com' ,
73- cda : 'https://au-cdn.contentstack.com' ,
74- uiHost : 'https://au-app.contentstack.com' ,
75- developerHubUrl : 'https://au-developerhub-api.contentstack.com' ,
76- launchHubUrl : 'https://au-launch-api.contentstack.com' ,
77- personalizeUrl : 'https://au-personalize-api.contentstack.com' ,
78- composableStudioUrl : 'https://au-composable-studio-api.contentstack.com' ,
79- } ,
80- 'AZURE-NA' : {
81- name : 'AZURE-NA' ,
82- cma : 'https://azure-na-api.contentstack.com' ,
83- cda : 'https://azure-na-cdn.contentstack.com' ,
84- uiHost : 'https://azure-na-app.contentstack.com' ,
85- developerHubUrl : 'https://azure-na-developerhub-api.contentstack.com' ,
86- launchHubUrl : 'https://azure-na-launch-api.contentstack.com' ,
87- personalizeUrl : 'https://azure-na-personalize-api.contentstack.com' ,
88- composableStudioUrl : 'https://azure-na-composable-studio-api.contentstack.com' ,
89- } ,
90- 'AZURE-EU' : {
91- name : 'AZURE-EU' ,
92- cma : 'https://azure-eu-api.contentstack.com' ,
93- cda : 'https://azure-eu-cdn.contentstack.com' ,
94- uiHost : 'https://azure-eu-app.contentstack.com' ,
95- developerHubUrl : 'https://azure-eu-developerhub-api.contentstack.com' ,
96- launchHubUrl : 'https://azure-eu-launch-api.contentstack.com' ,
97- personalizeUrl : 'https://azure-eu-personalize-api.contentstack.com' ,
98- composableStudioUrl : 'https://azure-eu-composable-studio-api.contentstack.com' ,
99- } ,
100- 'GCP-NA' : {
101- name : 'GCP-NA' ,
102- cma : 'https://gcp-na-api.contentstack.com' ,
103- cda : 'https://gcp-na-cdn.contentstack.com' ,
104- uiHost : 'https://gcp-na-app.contentstack.com' ,
105- developerHubUrl : 'https://gcp-na-developerhub-api.contentstack.com' ,
106- launchHubUrl : 'https://gcp-na-launch-api.contentstack.com' ,
107- personalizeUrl : 'https://gcp-na-personalize-api.contentstack.com' ,
108- composableStudioUrl : 'https://gcp-na-composable-studio-api.contentstack.com' ,
109- } ,
110- 'GCP-EU' : {
111- name : 'GCP-EU' ,
112- cma : 'https://gcp-eu-api.contentstack.com' ,
113- cda : 'https://gcp-eu-cdn.contentstack.com' ,
114- uiHost : 'https://gcp-eu-app.contentstack.com' ,
115- developerHubUrl : 'https://gcp-eu-developerhub-api.contentstack.com' ,
116- launchHubUrl : 'https://gcp-eu-launch-api.contentstack.com' ,
117- personalizeUrl : 'https://gcp-eu-personalize-api.contentstack.com' ,
118- composableStudioUrl : 'https://gcp-eu-composable-studio-api.contentstack.com' ,
119- } ,
120- } ;
20+ /**
21+ * Helper function to build region object from @contentstack/utils
22+ * @param {string } regionKey - Region identifier
23+ * @returns {object } Region object with all necessary URLs
24+ */
25+ function getRegionObject ( regionKey : string ) : Region {
26+ try {
27+ // getContentstackEndpoint handles all aliases defined in regions.json
28+ const endpoints = getContentstackEndpoint ( regionKey ) as any ;
29+
30+ if ( typeof endpoints === 'string' ) {
31+ throw new Error ( 'Invalid endpoint response' ) ;
32+ }
33+
34+ return {
35+ name : regionKey ,
36+ cma : endpoints . contentManagement ,
37+ cda : endpoints . contentDelivery ,
38+ uiHost : endpoints . application ,
39+ developerHubUrl : endpoints . developerHub ,
40+ launchHubUrl : endpoints . launch ,
41+ personalizeUrl : endpoints . personalizeManagement ,
42+ composableStudioUrl : endpoints . composableStudio ,
43+ } ;
44+ } catch ( error ) {
45+ return null ;
46+ }
47+ }
48+
49+ /**
50+ * Get all available regions dynamically
51+ * This creates a regions object similar to the old hardcoded one but using @contentstack/utils
52+ */
53+ function getAvailableRegions ( ) {
54+ const regionKeys = [
55+ 'NA' ,
56+ 'AWS-NA' ,
57+ 'EU' ,
58+ 'AWS-EU' ,
59+ 'AU' ,
60+ 'AWS-AU' ,
61+ 'AZURE-NA' ,
62+ 'AZURE-EU' ,
63+ 'GCP-NA' ,
64+ 'GCP-EU' ,
65+ ] ;
66+
67+ const regions : RegionsMap = { } ;
68+
69+ for ( const key of regionKeys ) {
70+ const regionObj = getRegionObject ( key ) ;
71+ if ( regionObj ) {
72+ regions [ key ] = regionObj ;
73+ }
74+ }
75+
76+ return regions ;
77+ }
78+
79+ // Available region list - now dynamically generated
80+ const regions = getAvailableRegions ( ) ;
12181
12282class UserConfig {
12383 /**
0 commit comments