node_loader.js
  1  var util = require('./util');
  2  
  3  util.isBrowser = function() { return false; };
  4  util.isNode = function() { return true; };
  5  
  6  // node.js specific modules
  7  util.crypto.lib = require('crypto');
  8  util.Buffer = require('buffer').Buffer;
  9  util.domain = require('domain');
 10  util.stream = require('stream');
 11  util.url = require('url');
 12  util.querystring = require('querystring');
 13  util.environment = 'nodejs';
 14  util.createEventStream = util.stream.Readable ?
 15    require('./event-stream/streaming-create-event-stream').createEventStream : require('./event-stream/buffered-create-event-stream').createEventStream;
 16  util.realClock = require('./realclock/nodeClock');
 17  util.clientSideMonitoring = {
 18    Publisher: require('./publisher').Publisher,
 19    configProvider: require('./publisher/configuration'),
 20  };
 21  util.iniLoader = require('./shared-ini').iniLoader;
 22  util.getSystemErrorName = require('util').getSystemErrorName;
 23  
 24  util.loadConfig = function(options) {
 25    var envValue = options.environmentVariableSelector(process.env);
 26    if (envValue !== undefined) {
 27      return envValue;
 28    }
 29  
 30    var configFile = {};
 31    try {
 32      configFile = util.iniLoader ? util.iniLoader.loadFrom({
 33        isConfig: true,
 34        filename: process.env[util.sharedConfigFileEnv]
 35      }) : {};
 36    } catch (e) {}
 37    var sharedFileConfig = configFile[
 38      process.env.AWS_PROFILE || util.defaultProfile
 39    ] || {};
 40    var configValue = options.configFileSelector(sharedFileConfig);
 41    if (configValue !== undefined) {
 42      return configValue;
 43    }
 44  
 45    if (typeof options.default === 'function') {
 46      return options.default();
 47    }
 48    return options.default;
 49  };
 50  
 51  var AWS;
 52  
 53  /**
 54   * @api private
 55   */
 56  module.exports = AWS = require('./core');
 57  
 58  require('./credentials');
 59  require('./credentials/credential_provider_chain');
 60  require('./credentials/temporary_credentials');
 61  require('./credentials/chainable_temporary_credentials');
 62  require('./credentials/web_identity_credentials');
 63  require('./credentials/cognito_identity_credentials');
 64  require('./credentials/saml_credentials');
 65  require('./credentials/process_credentials');
 66  
 67  // Load the xml2js XML parser
 68  AWS.XML.Parser = require('./xml/node_parser');
 69  
 70  // Load Node HTTP client
 71  require('./http/node');
 72  
 73  require('./shared-ini/ini-loader');
 74  
 75  // Load custom credential providers
 76  require('./credentials/token_file_web_identity_credentials');
 77  require('./credentials/ec2_metadata_credentials');
 78  require('./credentials/remote_credentials');
 79  require('./credentials/ecs_credentials');
 80  require('./credentials/environment_credentials');
 81  require('./credentials/file_system_credentials');
 82  require('./credentials/shared_ini_file_credentials');
 83  require('./credentials/process_credentials');
 84  
 85  // Setup default chain providers
 86  // If this changes, please update documentation for
 87  // AWS.CredentialProviderChain.defaultProviders in
 88  // credentials/credential_provider_chain.js
 89  AWS.CredentialProviderChain.defaultProviders = [
 90    function () { return new AWS.EnvironmentCredentials('AWS'); },
 91    function () { return new AWS.EnvironmentCredentials('AMAZON'); },
 92    function () { return new AWS.SharedIniFileCredentials(); },
 93    function () { return new AWS.ECSCredentials(); },
 94    function () { return new AWS.ProcessCredentials(); },
 95    function () { return new AWS.TokenFileWebIdentityCredentials(); },
 96    function () { return new AWS.EC2MetadataCredentials(); }
 97  ];
 98  
 99  // Update configuration keys
100  AWS.util.update(AWS.Config.prototype.keys, {
101    credentials: function () {
102      var credentials = null;
103      new AWS.CredentialProviderChain([
104        function () { return new AWS.EnvironmentCredentials('AWS'); },
105        function () { return new AWS.EnvironmentCredentials('AMAZON'); },
106        function () { return new AWS.SharedIniFileCredentials({ disableAssumeRole: true }); }
107      ]).resolve(function(err, creds) {
108        if (!err) credentials = creds;
109      });
110      return credentials;
111    },
112    credentialProvider: function() {
113      return new AWS.CredentialProviderChain();
114    },
115    logger: function () {
116      return process.env.AWSJS_DEBUG ? console : null;
117    },
118    region: function() {
119      var env = process.env;
120      var region = env.AWS_REGION || env.AMAZON_REGION;
121      if (env[AWS.util.configOptInEnv]) {
122        var toCheck = [
123          {filename: env[AWS.util.sharedCredentialsFileEnv]},
124          {isConfig: true, filename: env[AWS.util.sharedConfigFileEnv]}
125        ];
126        var iniLoader = AWS.util.iniLoader;
127        while (!region && toCheck.length) {
128          var configFile = {};
129          var fileInfo = toCheck.shift();
130          try {
131            configFile = iniLoader.loadFrom(fileInfo);
132          } catch (err) {
133            if (fileInfo.isConfig) throw err;
134          }
135          var profile = configFile[env.AWS_PROFILE || AWS.util.defaultProfile];
136          region = profile && profile.region;
137        }
138      }
139      return region;
140    }
141  });
142  
143  // Reset configuration
144  AWS.config = new AWS.Config();