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();