/ cloudformation-templates / node_modules / aws-cdk / node_modules / aws-sdk / lib / region_config.js
region_config.js
1 var util = require('./util'); 2 var regionConfig = require('./region_config_data.json'); 3 4 function generateRegionPrefix(region) { 5 if (!region) return null; 6 7 var parts = region.split('-'); 8 if (parts.length < 3) return null; 9 return parts.slice(0, parts.length - 2).join('-') + '-*'; 10 } 11 12 function derivedKeys(service) { 13 var region = service.config.region; 14 var regionPrefix = generateRegionPrefix(region); 15 var endpointPrefix = service.api.endpointPrefix; 16 17 return [ 18 [region, endpointPrefix], 19 [regionPrefix, endpointPrefix], 20 [region, '*'], 21 [regionPrefix, '*'], 22 ['*', endpointPrefix], 23 ['*', '*'] 24 ].map(function(item) { 25 return item[0] && item[1] ? item.join('/') : null; 26 }); 27 } 28 29 function applyConfig(service, config) { 30 util.each(config, function(key, value) { 31 if (key === 'globalEndpoint') return; 32 if (service.config[key] === undefined || service.config[key] === null) { 33 service.config[key] = value; 34 } 35 }); 36 } 37 38 function configureEndpoint(service) { 39 var keys = derivedKeys(service); 40 for (var i = 0; i < keys.length; i++) { 41 var key = keys[i]; 42 if (!key) continue; 43 44 if (Object.prototype.hasOwnProperty.call(regionConfig.rules, key)) { 45 var config = regionConfig.rules[key]; 46 if (typeof config === 'string') { 47 config = regionConfig.patterns[config]; 48 } 49 50 // set dualstack endpoint 51 if (service.config.useDualstack && util.isDualstackAvailable(service)) { 52 config = util.copy(config); 53 config.endpoint = config.endpoint.replace( 54 /{service}\.({region}\.)?/, 55 '{service}.dualstack.{region}.' 56 ); 57 } 58 59 // set global endpoint 60 service.isGlobalEndpoint = !!config.globalEndpoint; 61 if (config.signingRegion) { 62 service.signingRegion = config.signingRegion; 63 } 64 65 // signature version 66 if (!config.signatureVersion) config.signatureVersion = 'v4'; 67 68 // merge config 69 applyConfig(service, config); 70 return; 71 } 72 } 73 } 74 75 function getEndpointSuffix(region) { 76 var regionRegexes = { 77 '^(us|eu|ap|sa|ca|me)\\-\\w+\\-\\d+$': 'amazonaws.com', 78 '^cn\\-\\w+\\-\\d+$': 'amazonaws.com.cn', 79 '^us\\-gov\\-\\w+\\-\\d+$': 'amazonaws.com', 80 '^us\\-iso\\-\\w+\\-\\d+$': 'c2s.ic.gov', 81 '^us\\-isob\\-\\w+\\-\\d+$': 'sc2s.sgov.gov' 82 }; 83 var defaultSuffix = 'amazonaws.com'; 84 var regexes = Object.keys(regionRegexes); 85 for (var i = 0; i < regexes.length; i++) { 86 var regionPattern = RegExp(regexes[i]); 87 var dnsSuffix = regionRegexes[regexes[i]]; 88 if (regionPattern.test(region)) return dnsSuffix; 89 } 90 return defaultSuffix; 91 } 92 93 /** 94 * @api private 95 */ 96 module.exports = { 97 configureEndpoint: configureEndpoint, 98 getEndpointSuffix: getEndpointSuffix 99 };