region_config.js (1872B)
1 var util = require('./util'); 2 var regionConfig = require('./region_config.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 = '{service}.dualstack.{region}.amazonaws.com'; 54 } 55 56 // set global endpoint 57 service.isGlobalEndpoint = !!config.globalEndpoint; 58 59 // signature version 60 if (!config.signatureVersion) config.signatureVersion = 'v4'; 61 62 // merge config 63 applyConfig(service, config); 64 return; 65 } 66 } 67 } 68 69 module.exports = configureEndpoint;