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 |
|
51 | if (service.config.useDualstack && util.isDualstackAvailable(service)) {
|
52 | config = util.copy(config);
|
53 | config.endpoint = '{service}.dualstack.{region}.amazonaws.com';
|
54 | }
|
55 |
|
56 |
|
57 | service.isGlobalEndpoint = !!config.globalEndpoint;
|
58 |
|
59 |
|
60 | if (!config.signatureVersion) config.signatureVersion = 'v4';
|
61 |
|
62 |
|
63 | applyConfig(service, config);
|
64 | return;
|
65 | }
|
66 | }
|
67 | }
|
68 |
|
69 |
|
70 |
|
71 |
|
72 | module.exports = configureEndpoint;
|