UNPKG

1.9 kBJavaScriptView Raw
1var util = require('./util');
2var regionConfig = require('./region_config_data.json');
3
4function 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
12function 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
29function 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
38function 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/**
70 * @api private
71 */
72module.exports = configureEndpoint;