{"version":3,"file":"js/chunk-vendors-e616a0eb.d194389e.js","mappings":"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","sources":["webpack://rokk3rfuel/./node_modules/aws-sdk/browser.js","webpack://rokk3rfuel/./node_modules/aws-sdk/clients/cognitoidentity.js","webpack://rokk3rfuel/./node_modules/aws-sdk/clients/s3.js","webpack://rokk3rfuel/./node_modules/aws-sdk/clients/sts.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/api_loader.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/browserCryptoLib.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/browserHashUtils.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/browserHmac.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/browserMd5.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/browserSha1.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/browserSha256.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/browser_loader.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/config.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/config_regional_endpoint.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/core.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/credentials.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/credentials/chainable_temporary_credentials.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/credentials/cognito_identity_credentials.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/credentials/credential_provider_chain.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/credentials/saml_credentials.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/credentials/temporary_credentials.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/credentials/web_identity_credentials.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/discover_endpoint.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/event-stream/buffered-create-event-stream.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/event-stream/event-message-chunker.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/event-stream/int64.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/event-stream/parse-event.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/event-stream/parse-message.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/event-stream/split-message.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/event_listeners.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/http.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/http/xhr.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/json/builder.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/json/parser.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/model/api.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/model/collection.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/model/operation.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/model/paginator.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/model/resource_waiter.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/model/shape.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/param_validator.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/protocol/helpers.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/protocol/json.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/protocol/query.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/protocol/rest.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/protocol/rest_json.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/protocol/rest_xml.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/query/query_param_serializer.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/realclock/browserClock.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/region/utils.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/region_config.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/request.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/resource_waiter.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/response.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/s3/managed_upload.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/sequential_executor.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/service.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/services/s3.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/services/s3util.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/services/sts.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/bearer.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/presign.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/request_signer.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/s3.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/v2.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/v3.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/v3https.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/v4.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/signers/v4_credentials.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/state_machine.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/util.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/xml/browser_parser.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/xml/builder.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/xml/escape-attribute.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/xml/escape-element.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/xml/xml-node.js","webpack://rokk3rfuel/./node_modules/aws-sdk/lib/xml/xml-text.js","webpack://rokk3rfuel/./node_modules/aws-sdk/vendor/endpoint-cache/index.js","webpack://rokk3rfuel/./node_modules/aws-sdk/vendor/endpoint-cache/utils/LRU.js"],"sourcesContent":["require('./lib/browser_loader');\n\nvar AWS = require('./lib/core');\nif (typeof window !== 'undefined') window.AWS = AWS;\nif (typeof module !== 'undefined') module.exports = AWS;\nif (typeof self !== 'undefined') self.AWS = AWS;","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['cognitoidentity'] = {};\nAWS.CognitoIdentity = Service.defineService('cognitoidentity', ['2014-06-30']);\nObject.defineProperty(apiLoader.services['cognitoidentity'], '2014-06-30', {\n get: function get() {\n var model = require('../apis/cognito-identity-2014-06-30.min.json');\n model.paginators = require('../apis/cognito-identity-2014-06-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.CognitoIdentity;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['s3'] = {};\nAWS.S3 = Service.defineService('s3', ['2006-03-01']);\nrequire('../lib/services/s3');\nObject.defineProperty(apiLoader.services['s3'], '2006-03-01', {\n get: function get() {\n var model = require('../apis/s3-2006-03-01.min.json');\n model.paginators = require('../apis/s3-2006-03-01.paginators.json').pagination;\n model.waiters = require('../apis/s3-2006-03-01.waiters2.json').waiters;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.S3;\n","require('../lib/node_loader');\nvar AWS = require('../lib/core');\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\n\napiLoader.services['sts'] = {};\nAWS.STS = Service.defineService('sts', ['2011-06-15']);\nrequire('../lib/services/sts');\nObject.defineProperty(apiLoader.services['sts'], '2011-06-15', {\n get: function get() {\n var model = require('../apis/sts-2011-06-15.min.json');\n model.paginators = require('../apis/sts-2011-06-15.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\n\nmodule.exports = AWS.STS;\n","function apiLoader(svc, version) {\n if (!apiLoader.services.hasOwnProperty(svc)) {\n throw new Error('InvalidService: Failed to load api for ' + svc);\n }\n return apiLoader.services[svc][version];\n}\n\n/**\n * @api private\n *\n * This member of AWS.apiLoader is private, but changing it will necessitate a\n * change to ../scripts/services-table-generator.ts\n */\napiLoader.services = {};\n\n/**\n * @api private\n */\nmodule.exports = apiLoader;\n","var Hmac = require('./browserHmac');\nvar Md5 = require('./browserMd5');\nvar Sha1 = require('./browserSha1');\nvar Sha256 = require('./browserSha256');\n\n/**\n * @api private\n */\nmodule.exports = exports = {\n createHash: function createHash(alg) {\n alg = alg.toLowerCase();\n if (alg === 'md5') {\n return new Md5();\n } else if (alg === 'sha256') {\n return new Sha256();\n } else if (alg === 'sha1') {\n return new Sha1();\n }\n\n throw new Error('Hash algorithm ' + alg + ' is not supported in the browser SDK');\n },\n createHmac: function createHmac(alg, key) {\n alg = alg.toLowerCase();\n if (alg === 'md5') {\n return new Hmac(Md5, key);\n } else if (alg === 'sha256') {\n return new Hmac(Sha256, key);\n } else if (alg === 'sha1') {\n return new Hmac(Sha1, key);\n }\n\n throw new Error('HMAC algorithm ' + alg + ' is not supported in the browser SDK');\n },\n createSign: function() {\n throw new Error('createSign is not implemented in the browser');\n }\n };\n","var Buffer = require('buffer/').Buffer;\n\n/**\n * This is a polyfill for the static method `isView` of `ArrayBuffer`, which is\n * e.g. missing in IE 10.\n *\n * @api private\n */\nif (\n typeof ArrayBuffer !== 'undefined' &&\n typeof ArrayBuffer.isView === 'undefined'\n) {\n ArrayBuffer.isView = function(arg) {\n return viewStrings.indexOf(Object.prototype.toString.call(arg)) > -1;\n };\n}\n\n/**\n * @api private\n */\nvar viewStrings = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]',\n '[object DataView]',\n];\n\n/**\n * @api private\n */\nfunction isEmptyData(data) {\n if (typeof data === 'string') {\n return data.length === 0;\n }\n return data.byteLength === 0;\n}\n\n/**\n * @api private\n */\nfunction convertToBuffer(data) {\n if (typeof data === 'string') {\n data = new Buffer(data, 'utf8');\n }\n\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n\n return new Uint8Array(data);\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = {\n isEmptyData: isEmptyData,\n convertToBuffer: convertToBuffer,\n};\n","var hashUtils = require('./browserHashUtils');\n\n/**\n * @api private\n */\nfunction Hmac(hashCtor, secret) {\n this.hash = new hashCtor();\n this.outer = new hashCtor();\n\n var inner = bufferFromSecret(hashCtor, secret);\n var outer = new Uint8Array(hashCtor.BLOCK_SIZE);\n outer.set(inner);\n\n for (var i = 0; i < hashCtor.BLOCK_SIZE; i++) {\n inner[i] ^= 0x36;\n outer[i] ^= 0x5c;\n }\n\n this.hash.update(inner);\n this.outer.update(outer);\n\n // Zero out the copied key buffer.\n for (var i = 0; i < inner.byteLength; i++) {\n inner[i] = 0;\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Hmac;\n\nHmac.prototype.update = function (toHash) {\n if (hashUtils.isEmptyData(toHash) || this.error) {\n return this;\n }\n\n try {\n this.hash.update(hashUtils.convertToBuffer(toHash));\n } catch (e) {\n this.error = e;\n }\n\n return this;\n};\n\nHmac.prototype.digest = function (encoding) {\n if (!this.outer.finished) {\n this.outer.update(this.hash.digest());\n }\n\n return this.outer.digest(encoding);\n};\n\nfunction bufferFromSecret(hashCtor, secret) {\n var input = hashUtils.convertToBuffer(secret);\n if (input.byteLength > hashCtor.BLOCK_SIZE) {\n var bufferHash = new hashCtor;\n bufferHash.update(input);\n input = bufferHash.digest();\n }\n var buffer = new Uint8Array(hashCtor.BLOCK_SIZE);\n buffer.set(input);\n return buffer;\n}\n","var hashUtils = require('./browserHashUtils');\nvar Buffer = require('buffer/').Buffer;\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 16;\n\nvar INIT = [\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n];\n\n/**\n * @api private\n */\nfunction Md5() {\n this.state = [\n 0x67452301,\n 0xefcdab89,\n 0x98badcfe,\n 0x10325476,\n ];\n this.buffer = new DataView(new ArrayBuffer(BLOCK_SIZE));\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Md5;\n\nMd5.BLOCK_SIZE = BLOCK_SIZE;\n\nMd5.prototype.update = function (sourceData) {\n if (hashUtils.isEmptyData(sourceData)) {\n return this;\n } else if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n var data = hashUtils.convertToBuffer(sourceData);\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n while (byteLength > 0) {\n this.buffer.setUint8(this.bufferLength++, data[position++]);\n byteLength--;\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n\n return this;\n};\n\nMd5.prototype.digest = function (encoding) {\n if (!this.finished) {\n var _a = this, buffer = _a.buffer, undecoratedLength = _a.bufferLength, bytesHashed = _a.bytesHashed;\n var bitsHashed = bytesHashed * 8;\n buffer.setUint8(this.bufferLength++, 128);\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n buffer.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n buffer.setUint8(i, 0);\n }\n buffer.setUint32(BLOCK_SIZE - 8, bitsHashed >>> 0, true);\n buffer.setUint32(BLOCK_SIZE - 4, Math.floor(bitsHashed / 0x100000000), true);\n this.hashBuffer();\n this.finished = true;\n }\n var out = new DataView(new ArrayBuffer(DIGEST_LENGTH));\n for (var i = 0; i < 4; i++) {\n out.setUint32(i * 4, this.state[i], true);\n }\n var buff = new Buffer(out.buffer, out.byteOffset, out.byteLength);\n return encoding ? buff.toString(encoding) : buff;\n};\n\nMd5.prototype.hashBuffer = function () {\n var _a = this, buffer = _a.buffer, state = _a.state;\n var a = state[0], b = state[1], c = state[2], d = state[3];\n a = ff(a, b, c, d, buffer.getUint32(0, true), 7, 0xd76aa478);\n d = ff(d, a, b, c, buffer.getUint32(4, true), 12, 0xe8c7b756);\n c = ff(c, d, a, b, buffer.getUint32(8, true), 17, 0x242070db);\n b = ff(b, c, d, a, buffer.getUint32(12, true), 22, 0xc1bdceee);\n a = ff(a, b, c, d, buffer.getUint32(16, true), 7, 0xf57c0faf);\n d = ff(d, a, b, c, buffer.getUint32(20, true), 12, 0x4787c62a);\n c = ff(c, d, a, b, buffer.getUint32(24, true), 17, 0xa8304613);\n b = ff(b, c, d, a, buffer.getUint32(28, true), 22, 0xfd469501);\n a = ff(a, b, c, d, buffer.getUint32(32, true), 7, 0x698098d8);\n d = ff(d, a, b, c, buffer.getUint32(36, true), 12, 0x8b44f7af);\n c = ff(c, d, a, b, buffer.getUint32(40, true), 17, 0xffff5bb1);\n b = ff(b, c, d, a, buffer.getUint32(44, true), 22, 0x895cd7be);\n a = ff(a, b, c, d, buffer.getUint32(48, true), 7, 0x6b901122);\n d = ff(d, a, b, c, buffer.getUint32(52, true), 12, 0xfd987193);\n c = ff(c, d, a, b, buffer.getUint32(56, true), 17, 0xa679438e);\n b = ff(b, c, d, a, buffer.getUint32(60, true), 22, 0x49b40821);\n a = gg(a, b, c, d, buffer.getUint32(4, true), 5, 0xf61e2562);\n d = gg(d, a, b, c, buffer.getUint32(24, true), 9, 0xc040b340);\n c = gg(c, d, a, b, buffer.getUint32(44, true), 14, 0x265e5a51);\n b = gg(b, c, d, a, buffer.getUint32(0, true), 20, 0xe9b6c7aa);\n a = gg(a, b, c, d, buffer.getUint32(20, true), 5, 0xd62f105d);\n d = gg(d, a, b, c, buffer.getUint32(40, true), 9, 0x02441453);\n c = gg(c, d, a, b, buffer.getUint32(60, true), 14, 0xd8a1e681);\n b = gg(b, c, d, a, buffer.getUint32(16, true), 20, 0xe7d3fbc8);\n a = gg(a, b, c, d, buffer.getUint32(36, true), 5, 0x21e1cde6);\n d = gg(d, a, b, c, buffer.getUint32(56, true), 9, 0xc33707d6);\n c = gg(c, d, a, b, buffer.getUint32(12, true), 14, 0xf4d50d87);\n b = gg(b, c, d, a, buffer.getUint32(32, true), 20, 0x455a14ed);\n a = gg(a, b, c, d, buffer.getUint32(52, true), 5, 0xa9e3e905);\n d = gg(d, a, b, c, buffer.getUint32(8, true), 9, 0xfcefa3f8);\n c = gg(c, d, a, b, buffer.getUint32(28, true), 14, 0x676f02d9);\n b = gg(b, c, d, a, buffer.getUint32(48, true), 20, 0x8d2a4c8a);\n a = hh(a, b, c, d, buffer.getUint32(20, true), 4, 0xfffa3942);\n d = hh(d, a, b, c, buffer.getUint32(32, true), 11, 0x8771f681);\n c = hh(c, d, a, b, buffer.getUint32(44, true), 16, 0x6d9d6122);\n b = hh(b, c, d, a, buffer.getUint32(56, true), 23, 0xfde5380c);\n a = hh(a, b, c, d, buffer.getUint32(4, true), 4, 0xa4beea44);\n d = hh(d, a, b, c, buffer.getUint32(16, true), 11, 0x4bdecfa9);\n c = hh(c, d, a, b, buffer.getUint32(28, true), 16, 0xf6bb4b60);\n b = hh(b, c, d, a, buffer.getUint32(40, true), 23, 0xbebfbc70);\n a = hh(a, b, c, d, buffer.getUint32(52, true), 4, 0x289b7ec6);\n d = hh(d, a, b, c, buffer.getUint32(0, true), 11, 0xeaa127fa);\n c = hh(c, d, a, b, buffer.getUint32(12, true), 16, 0xd4ef3085);\n b = hh(b, c, d, a, buffer.getUint32(24, true), 23, 0x04881d05);\n a = hh(a, b, c, d, buffer.getUint32(36, true), 4, 0xd9d4d039);\n d = hh(d, a, b, c, buffer.getUint32(48, true), 11, 0xe6db99e5);\n c = hh(c, d, a, b, buffer.getUint32(60, true), 16, 0x1fa27cf8);\n b = hh(b, c, d, a, buffer.getUint32(8, true), 23, 0xc4ac5665);\n a = ii(a, b, c, d, buffer.getUint32(0, true), 6, 0xf4292244);\n d = ii(d, a, b, c, buffer.getUint32(28, true), 10, 0x432aff97);\n c = ii(c, d, a, b, buffer.getUint32(56, true), 15, 0xab9423a7);\n b = ii(b, c, d, a, buffer.getUint32(20, true), 21, 0xfc93a039);\n a = ii(a, b, c, d, buffer.getUint32(48, true), 6, 0x655b59c3);\n d = ii(d, a, b, c, buffer.getUint32(12, true), 10, 0x8f0ccc92);\n c = ii(c, d, a, b, buffer.getUint32(40, true), 15, 0xffeff47d);\n b = ii(b, c, d, a, buffer.getUint32(4, true), 21, 0x85845dd1);\n a = ii(a, b, c, d, buffer.getUint32(32, true), 6, 0x6fa87e4f);\n d = ii(d, a, b, c, buffer.getUint32(60, true), 10, 0xfe2ce6e0);\n c = ii(c, d, a, b, buffer.getUint32(24, true), 15, 0xa3014314);\n b = ii(b, c, d, a, buffer.getUint32(52, true), 21, 0x4e0811a1);\n a = ii(a, b, c, d, buffer.getUint32(16, true), 6, 0xf7537e82);\n d = ii(d, a, b, c, buffer.getUint32(44, true), 10, 0xbd3af235);\n c = ii(c, d, a, b, buffer.getUint32(8, true), 15, 0x2ad7d2bb);\n b = ii(b, c, d, a, buffer.getUint32(36, true), 21, 0xeb86d391);\n state[0] = (a + state[0]) & 0xFFFFFFFF;\n state[1] = (b + state[1]) & 0xFFFFFFFF;\n state[2] = (c + state[2]) & 0xFFFFFFFF;\n state[3] = (d + state[3]) & 0xFFFFFFFF;\n};\n\nfunction cmn(q, a, b, x, s, t) {\n a = (((a + q) & 0xFFFFFFFF) + ((x + t) & 0xFFFFFFFF)) & 0xFFFFFFFF;\n return (((a << s) | (a >>> (32 - s))) + b) & 0xFFFFFFFF;\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn((b & c) | ((~b) & d), a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn((b & d) | (c & (~d)), a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | (~d)), a, b, x, s, t);\n}\n","var Buffer = require('buffer/').Buffer;\nvar hashUtils = require('./browserHashUtils');\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 20;\n\nvar KEY = new Uint32Array([\n 0x5a827999,\n 0x6ed9eba1,\n 0x8f1bbcdc | 0,\n 0xca62c1d6 | 0\n]);\n\nvar INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19,\n];\n\nvar MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n\n/**\n * @api private\n */\nfunction Sha1() {\n this.h0 = 0x67452301;\n this.h1 = 0xEFCDAB89;\n this.h2 = 0x98BADCFE;\n this.h3 = 0x10325476;\n this.h4 = 0xC3D2E1F0;\n // The first 64 bytes (16 words) is the data chunk\n this.block = new Uint32Array(80);\n this.offset = 0;\n this.shift = 24;\n this.totalLength = 0;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Sha1;\n\nSha1.BLOCK_SIZE = BLOCK_SIZE;\n\nSha1.prototype.update = function (data) {\n if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n if (hashUtils.isEmptyData(data)) {\n return this;\n }\n\n data = hashUtils.convertToBuffer(data);\n\n var length = data.length;\n this.totalLength += length * 8;\n for (var i = 0; i < length; i++) {\n this.write(data[i]);\n }\n\n return this;\n};\n\nSha1.prototype.write = function write(byte) {\n this.block[this.offset] |= (byte & 0xff) << this.shift;\n if (this.shift) {\n this.shift -= 8;\n } else {\n this.offset++;\n this.shift = 24;\n }\n\n if (this.offset === 16) this.processBlock();\n};\n\nSha1.prototype.digest = function (encoding) {\n // Pad\n this.write(0x80);\n if (this.offset > 14 || (this.offset === 14 && this.shift < 24)) {\n this.processBlock();\n }\n this.offset = 14;\n this.shift = 24;\n\n // 64-bit length big-endian\n this.write(0x00); // numbers this big aren't accurate in javascript anyway\n this.write(0x00); // ..So just hard-code to zero.\n this.write(this.totalLength > 0xffffffffff ? this.totalLength / 0x10000000000 : 0x00);\n this.write(this.totalLength > 0xffffffff ? this.totalLength / 0x100000000 : 0x00);\n for (var s = 24; s >= 0; s -= 8) {\n this.write(this.totalLength >> s);\n }\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n var out = new Buffer(DIGEST_LENGTH);\n var outView = new DataView(out.buffer);\n outView.setUint32(0, this.h0, false);\n outView.setUint32(4, this.h1, false);\n outView.setUint32(8, this.h2, false);\n outView.setUint32(12, this.h3, false);\n outView.setUint32(16, this.h4, false);\n\n return encoding ? out.toString(encoding) : out;\n};\n\nSha1.prototype.processBlock = function processBlock() {\n // Extend the sixteen 32-bit words into eighty 32-bit words:\n for (var i = 16; i < 80; i++) {\n var w = this.block[i - 3] ^ this.block[i - 8] ^ this.block[i - 14] ^ this.block[i - 16];\n this.block[i] = (w << 1) | (w >>> 31);\n }\n\n // Initialize hash value for this chunk:\n var a = this.h0;\n var b = this.h1;\n var c = this.h2;\n var d = this.h3;\n var e = this.h4;\n var f, k;\n\n // Main loop:\n for (i = 0; i < 80; i++) {\n if (i < 20) {\n f = d ^ (b & (c ^ d));\n k = 0x5A827999;\n }\n else if (i < 40) {\n f = b ^ c ^ d;\n k = 0x6ED9EBA1;\n }\n else if (i < 60) {\n f = (b & c) | (d & (b | c));\n k = 0x8F1BBCDC;\n }\n else {\n f = b ^ c ^ d;\n k = 0xCA62C1D6;\n }\n var temp = (a << 5 | a >>> 27) + f + e + k + (this.block[i]|0);\n e = d;\n d = c;\n c = (b << 30 | b >>> 2);\n b = a;\n a = temp;\n }\n\n // Add this chunk's hash to result so far:\n this.h0 = (this.h0 + a) | 0;\n this.h1 = (this.h1 + b) | 0;\n this.h2 = (this.h2 + c) | 0;\n this.h3 = (this.h3 + d) | 0;\n this.h4 = (this.h4 + e) | 0;\n\n // The block is now reusable.\n this.offset = 0;\n for (i = 0; i < 16; i++) {\n this.block[i] = 0;\n }\n};\n","var Buffer = require('buffer/').Buffer;\nvar hashUtils = require('./browserHashUtils');\n\nvar BLOCK_SIZE = 64;\n\nvar DIGEST_LENGTH = 32;\n\nvar KEY = new Uint32Array([\n 0x428a2f98,\n 0x71374491,\n 0xb5c0fbcf,\n 0xe9b5dba5,\n 0x3956c25b,\n 0x59f111f1,\n 0x923f82a4,\n 0xab1c5ed5,\n 0xd807aa98,\n 0x12835b01,\n 0x243185be,\n 0x550c7dc3,\n 0x72be5d74,\n 0x80deb1fe,\n 0x9bdc06a7,\n 0xc19bf174,\n 0xe49b69c1,\n 0xefbe4786,\n 0x0fc19dc6,\n 0x240ca1cc,\n 0x2de92c6f,\n 0x4a7484aa,\n 0x5cb0a9dc,\n 0x76f988da,\n 0x983e5152,\n 0xa831c66d,\n 0xb00327c8,\n 0xbf597fc7,\n 0xc6e00bf3,\n 0xd5a79147,\n 0x06ca6351,\n 0x14292967,\n 0x27b70a85,\n 0x2e1b2138,\n 0x4d2c6dfc,\n 0x53380d13,\n 0x650a7354,\n 0x766a0abb,\n 0x81c2c92e,\n 0x92722c85,\n 0xa2bfe8a1,\n 0xa81a664b,\n 0xc24b8b70,\n 0xc76c51a3,\n 0xd192e819,\n 0xd6990624,\n 0xf40e3585,\n 0x106aa070,\n 0x19a4c116,\n 0x1e376c08,\n 0x2748774c,\n 0x34b0bcb5,\n 0x391c0cb3,\n 0x4ed8aa4a,\n 0x5b9cca4f,\n 0x682e6ff3,\n 0x748f82ee,\n 0x78a5636f,\n 0x84c87814,\n 0x8cc70208,\n 0x90befffa,\n 0xa4506ceb,\n 0xbef9a3f7,\n 0xc67178f2\n]);\n\nvar INIT = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19,\n];\n\nvar MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n\n/**\n * @private\n */\nfunction Sha256() {\n this.state = [\n 0x6a09e667,\n 0xbb67ae85,\n 0x3c6ef372,\n 0xa54ff53a,\n 0x510e527f,\n 0x9b05688c,\n 0x1f83d9ab,\n 0x5be0cd19,\n ];\n this.temp = new Int32Array(64);\n this.buffer = new Uint8Array(64);\n this.bufferLength = 0;\n this.bytesHashed = 0;\n /**\n * @private\n */\n this.finished = false;\n}\n\n/**\n * @api private\n */\nmodule.exports = exports = Sha256;\n\nSha256.BLOCK_SIZE = BLOCK_SIZE;\n\nSha256.prototype.update = function (data) {\n if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n if (hashUtils.isEmptyData(data)) {\n return this;\n }\n\n data = hashUtils.convertToBuffer(data);\n\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n throw new Error('Cannot hash more than 2^53 - 1 bits');\n }\n\n while (byteLength > 0) {\n this.buffer[this.bufferLength++] = data[position++];\n byteLength--;\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n\n return this;\n};\n\nSha256.prototype.digest = function (encoding) {\n if (!this.finished) {\n var bitsHashed = this.bytesHashed * 8;\n var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n var undecoratedLength = this.bufferLength;\n bufferView.setUint8(this.bufferLength++, 0x80);\n // Ensure the final block has enough room for the hashed length\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n bufferView.setUint8(i, 0);\n }\n this.hashBuffer();\n this.bufferLength = 0;\n }\n for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n bufferView.setUint8(i, 0);\n }\n bufferView.setUint32(BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n this.hashBuffer();\n this.finished = true;\n }\n // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n var out = new Buffer(DIGEST_LENGTH);\n for (var i = 0; i < 8; i++) {\n out[i * 4] = (this.state[i] >>> 24) & 0xff;\n out[i * 4 + 1] = (this.state[i] >>> 16) & 0xff;\n out[i * 4 + 2] = (this.state[i] >>> 8) & 0xff;\n out[i * 4 + 3] = (this.state[i] >>> 0) & 0xff;\n }\n return encoding ? out.toString(encoding) : out;\n};\n\nSha256.prototype.hashBuffer = function () {\n var _a = this,\n buffer = _a.buffer,\n state = _a.state;\n var state0 = state[0],\n state1 = state[1],\n state2 = state[2],\n state3 = state[3],\n state4 = state[4],\n state5 = state[5],\n state6 = state[6],\n state7 = state[7];\n for (var i = 0; i < BLOCK_SIZE; i++) {\n if (i < 16) {\n this.temp[i] = (((buffer[i * 4] & 0xff) << 24) |\n ((buffer[(i * 4) + 1] & 0xff) << 16) |\n ((buffer[(i * 4) + 2] & 0xff) << 8) |\n (buffer[(i * 4) + 3] & 0xff));\n }\n else {\n var u = this.temp[i - 2];\n var t1_1 = (u >>> 17 | u << 15) ^\n (u >>> 19 | u << 13) ^\n (u >>> 10);\n u = this.temp[i - 15];\n var t2_1 = (u >>> 7 | u << 25) ^\n (u >>> 18 | u << 14) ^\n (u >>> 3);\n this.temp[i] = (t1_1 + this.temp[i - 7] | 0) +\n (t2_1 + this.temp[i - 16] | 0);\n }\n var t1 = (((((state4 >>> 6 | state4 << 26) ^\n (state4 >>> 11 | state4 << 21) ^\n (state4 >>> 25 | state4 << 7))\n + ((state4 & state5) ^ (~state4 & state6))) | 0)\n + ((state7 + ((KEY[i] + this.temp[i]) | 0)) | 0)) | 0;\n var t2 = (((state0 >>> 2 | state0 << 30) ^\n (state0 >>> 13 | state0 << 19) ^\n (state0 >>> 22 | state0 << 10)) + ((state0 & state1) ^ (state0 & state2) ^ (state1 & state2))) | 0;\n state7 = state6;\n state6 = state5;\n state5 = state4;\n state4 = (state3 + t1) | 0;\n state3 = state2;\n state2 = state1;\n state1 = state0;\n state0 = (t1 + t2) | 0;\n }\n state[0] += state0;\n state[1] += state1;\n state[2] += state2;\n state[3] += state3;\n state[4] += state4;\n state[5] += state5;\n state[6] += state6;\n state[7] += state7;\n};\n","var util = require('./util');\n\n// browser specific modules\nutil.crypto.lib = require('./browserCryptoLib');\nutil.Buffer = require('buffer/').Buffer;\nutil.url = require('url/');\nutil.querystring = require('querystring/');\nutil.realClock = require('./realclock/browserClock');\nutil.environment = 'js';\nutil.createEventStream = require('./event-stream/buffered-create-event-stream').createEventStream;\nutil.isBrowser = function() { return true; };\nutil.isNode = function() { return false; };\n\nvar AWS = require('./core');\n\n/**\n * @api private\n */\nmodule.exports = AWS;\n\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nrequire('./credentials/temporary_credentials');\nrequire('./credentials/chainable_temporary_credentials');\nrequire('./credentials/web_identity_credentials');\nrequire('./credentials/cognito_identity_credentials');\nrequire('./credentials/saml_credentials');\n\n// Load the DOMParser XML parser\nAWS.XML.Parser = require('./xml/browser_parser');\n\n// Load the XHR HttpClient\nrequire('./http/xhr');\n\nif (typeof process === 'undefined') {\n var process = {\n browser: true\n };\n}\n","var AWS = require('./core');\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nvar PromisesDependency;\n\n/**\n * The main configuration class used by all service objects to set\n * the region, credentials, and other options for requests.\n *\n * By default, credentials and region settings are left unconfigured.\n * This should be configured by the application before using any\n * AWS service APIs.\n *\n * In order to set global configuration options, properties should\n * be assigned to the global {AWS.config} object.\n *\n * @see AWS.config\n *\n * @!group General Configuration Options\n *\n * @!attribute credentials\n * @return [AWS.Credentials] the AWS credentials to sign requests with.\n *\n * @!attribute region\n * @example Set the global region setting to us-west-2\n * AWS.config.update({region: 'us-west-2'});\n * @return [AWS.Credentials] The region to send service requests to.\n * @see http://docs.amazonwebservices.com/general/latest/gr/rande.html\n * A list of available endpoints for each AWS service\n *\n * @!attribute maxRetries\n * @return [Integer] the maximum amount of retries to perform for a\n * service request. By default this value is calculated by the specific\n * service object that the request is being made to.\n *\n * @!attribute maxRedirects\n * @return [Integer] the maximum amount of redirects to follow for a\n * service request. Defaults to 10.\n *\n * @!attribute paramValidation\n * @return [Boolean|map] whether input parameters should be validated against\n * the operation description before sending the request. Defaults to true.\n * Pass a map to enable any of the following specific validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n *\n * @!attribute computeChecksums\n * @return [Boolean] whether to compute checksums for payload bodies when\n * the service accepts it (currently supported in S3 and SQS only).\n *\n * @!attribute convertResponseTypes\n * @return [Boolean] whether types are converted when parsing response data.\n * Currently only supported for JSON based services. Turning this off may\n * improve performance on large response payloads. Defaults to `true`.\n *\n * @!attribute correctClockSkew\n * @return [Boolean] whether to apply a clock skew correction and retry\n * requests that fail because of an skewed client clock. Defaults to\n * `false`.\n *\n * @!attribute sslEnabled\n * @return [Boolean] whether SSL is enabled for requests\n *\n * @!attribute s3ForcePathStyle\n * @return [Boolean] whether to force path style URLs for S3 objects\n *\n * @!attribute s3BucketEndpoint\n * @note Setting this configuration option requires an `endpoint` to be\n * provided explicitly to the service constructor.\n * @return [Boolean] whether the provided endpoint addresses an individual\n * bucket (false if it addresses the root API endpoint).\n *\n * @!attribute s3DisableBodySigning\n * @return [Boolean] whether to disable S3 body signing when using signature version `v4`.\n * Body signing can only be disabled when using https. Defaults to `true`.\n *\n * @!attribute s3UsEast1RegionalEndpoint\n * @return ['legacy'|'regional'] when region is set to 'us-east-1', whether to send s3\n * request to global endpoints or 'us-east-1' regional endpoints. This config is only\n * applicable to S3 client;\n * Defaults to 'legacy'\n * @!attribute s3UseArnRegion\n * @return [Boolean] whether to override the request region with the region inferred\n * from requested resource's ARN. Only available for S3 buckets\n * Defaults to `true`\n *\n * @!attribute useAccelerateEndpoint\n * @note This configuration option is only compatible with S3 while accessing\n * dns-compatible buckets.\n * @return [Boolean] Whether to use the Accelerate endpoint with the S3 service.\n * Defaults to `false`.\n *\n * @!attribute retryDelayOptions\n * @example Set the base retry delay for all services to 300 ms\n * AWS.config.update({retryDelayOptions: {base: 300}});\n * // Delays with maxRetries = 3: 300, 600, 1200\n * @example Set a custom backoff function to provide delay values on retries\n * AWS.config.update({retryDelayOptions: {customBackoff: function(retryCount, err) {\n * // returns delay in ms\n * }}});\n * @return [map] A set of options to configure the retry delay on retryable errors.\n * Currently supported options are:\n *\n * * **base** [Integer] — The base number of milliseconds to use in the\n * exponential backoff for operation retries. Defaults to 100 ms for all services except\n * DynamoDB, where it defaults to 50ms.\n *\n * * **customBackoff ** [function] — A custom function that accepts a\n * retry count and error and returns the amount of time to delay in\n * milliseconds. If the result is a non-zero negative value, no further\n * retry attempts will be made. The `base` option will be ignored if this\n * option is supplied. The function is only called for retryable errors.\n *\n * @!attribute httpOptions\n * @return [map] A set of options to pass to the low-level HTTP request.\n * Currently supported options are:\n *\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only supported in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — The number of milliseconds a request can\n * take before automatically being terminated.\n * Defaults to two minutes (120000).\n * * **xhrAsync** [Boolean] — Whether the SDK will send asynchronous\n * HTTP requests. Used in the browser environment only. Set to false to\n * send requests synchronously. Defaults to true (async on).\n * * **xhrWithCredentials** [Boolean] — Sets the \"withCredentials\"\n * property of an XMLHttpRequest object. Used in the browser environment\n * only. Defaults to false.\n * @!attribute logger\n * @return [#write,#log] an object that responds to .write() (like a stream)\n * or .log() (like the console object) in order to log information about\n * requests\n *\n * @!attribute systemClockOffset\n * @return [Number] an offset value in milliseconds to apply to all signing\n * times. Use this to compensate for clock skew when your system may be\n * out of sync with the service time. Note that this configuration option\n * can only be applied to the global `AWS.config` object and cannot be\n * overridden in service-specific configuration. Defaults to 0 milliseconds.\n *\n * @!attribute signatureVersion\n * @return [String] the signature version to sign requests with (overriding\n * the API configuration). Possible values are: 'v2', 'v3', 'v4'.\n *\n * @!attribute signatureCache\n * @return [Boolean] whether the signature to sign requests with (overriding\n * the API configuration) is cached. Only applies to the signature version 'v4'.\n * Defaults to `true`.\n *\n * @!attribute endpointDiscoveryEnabled\n * @return [Boolean|undefined] whether to call operations with endpoints\n * given by service dynamically. Setting this config to `true` will enable\n * endpoint discovery for all applicable operations. Setting it to `false`\n * will explicitly disable endpoint discovery even though operations that\n * require endpoint discovery will presumably fail. Leaving it to\n * `undefined` means SDK only do endpoint discovery when it's required.\n * Defaults to `undefined`\n *\n * @!attribute endpointCacheSize\n * @return [Number] the size of the global cache storing endpoints from endpoint\n * discovery operations. Once endpoint cache is created, updating this setting\n * cannot change existing cache size.\n * Defaults to 1000\n *\n * @!attribute hostPrefixEnabled\n * @return [Boolean] whether to marshal request parameters to the prefix of\n * hostname. Defaults to `true`.\n *\n * @!attribute stsRegionalEndpoints\n * @return ['legacy'|'regional'] whether to send sts request to global endpoints or\n * regional endpoints.\n * Defaults to 'legacy'.\n *\n * @!attribute useFipsEndpoint\n * @return [Boolean] Enables FIPS compatible endpoints. Defaults to `false`.\n *\n * @!attribute useDualstackEndpoint\n * @return [Boolean] Enables IPv6 dualstack endpoint. Defaults to `false`.\n */\nAWS.Config = AWS.util.inherit({\n /**\n * @!endgroup\n */\n\n /**\n * Creates a new configuration object. This is the object that passes\n * option data along to service requests, including credentials, security,\n * region information, and some service specific settings.\n *\n * @example Creating a new configuration object with credentials and region\n * var config = new AWS.Config({\n * accessKeyId: 'AKID', secretAccessKey: 'SECRET', region: 'us-west-2'\n * });\n * @option options accessKeyId [String] your AWS access key ID.\n * @option options secretAccessKey [String] your AWS secret access key.\n * @option options sessionToken [AWS.Credentials] the optional AWS\n * session token to sign requests with.\n * @option options credentials [AWS.Credentials] the AWS credentials\n * to sign requests with. You can either specify this object, or\n * specify the accessKeyId and secretAccessKey options directly.\n * @option options credentialProvider [AWS.CredentialProviderChain] the\n * provider chain used to resolve credentials if no static `credentials`\n * property is set.\n * @option options region [String] the region to send service requests to.\n * See {region} for more information.\n * @option options maxRetries [Integer] the maximum amount of retries to\n * attempt with a request. See {maxRetries} for more information.\n * @option options maxRedirects [Integer] the maximum amount of redirects to\n * follow with a request. See {maxRedirects} for more information.\n * @option options sslEnabled [Boolean] whether to enable SSL for\n * requests.\n * @option options paramValidation [Boolean|map] whether input parameters\n * should be validated against the operation description before sending\n * the request. Defaults to true. Pass a map to enable any of the\n * following specific validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n * @option options computeChecksums [Boolean] whether to compute checksums\n * for payload bodies when the service accepts it (currently supported\n * in S3 only)\n * @option options convertResponseTypes [Boolean] whether types are converted\n * when parsing response data. Currently only supported for JSON based\n * services. Turning this off may improve performance on large response\n * payloads. Defaults to `true`.\n * @option options correctClockSkew [Boolean] whether to apply a clock skew\n * correction and retry requests that fail because of an skewed client\n * clock. Defaults to `false`.\n * @option options s3ForcePathStyle [Boolean] whether to force path\n * style URLs for S3 objects.\n * @option options s3BucketEndpoint [Boolean] whether the provided endpoint\n * addresses an individual bucket (false if it addresses the root API\n * endpoint). Note that setting this configuration option requires an\n * `endpoint` to be provided explicitly to the service constructor.\n * @option options s3DisableBodySigning [Boolean] whether S3 body signing\n * should be disabled when using signature version `v4`. Body signing\n * can only be disabled when using https. Defaults to `true`.\n * @option options s3UsEast1RegionalEndpoint ['legacy'|'regional'] when region\n * is set to 'us-east-1', whether to send s3 request to global endpoints or\n * 'us-east-1' regional endpoints. This config is only applicable to S3 client.\n * Defaults to `legacy`\n * @option options s3UseArnRegion [Boolean] whether to override the request region\n * with the region inferred from requested resource's ARN. Only available for S3 buckets\n * Defaults to `true`\n *\n * @option options retryDelayOptions [map] A set of options to configure\n * the retry delay on retryable errors. Currently supported options are:\n *\n * * **base** [Integer] — The base number of milliseconds to use in the\n * exponential backoff for operation retries. Defaults to 100 ms for all\n * services except DynamoDB, where it defaults to 50ms.\n * * **customBackoff ** [function] — A custom function that accepts a\n * retry count and error and returns the amount of time to delay in\n * milliseconds. If the result is a non-zero negative value, no further\n * retry attempts will be made. The `base` option will be ignored if this\n * option is supplied. The function is only called for retryable errors.\n * @option options httpOptions [map] A set of options to pass to the low-level\n * HTTP request. Currently supported options are:\n *\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Defaults to the global\n * agent (`http.globalAgent`) for non-SSL connections. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only available in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — Sets the socket to timeout after timeout\n * milliseconds of inactivity on the socket. Defaults to two minutes\n * (120000).\n * * **xhrAsync** [Boolean] — Whether the SDK will send asynchronous\n * HTTP requests. Used in the browser environment only. Set to false to\n * send requests synchronously. Defaults to true (async on).\n * * **xhrWithCredentials** [Boolean] — Sets the \"withCredentials\"\n * property of an XMLHttpRequest object. Used in the browser environment\n * only. Defaults to false.\n * @option options apiVersion [String, Date] a String in YYYY-MM-DD format\n * (or a date) that represents the latest possible API version that can be\n * used in all services (unless overridden by `apiVersions`). Specify\n * 'latest' to use the latest possible version.\n * @option options apiVersions [map] a map of service\n * identifiers (the lowercase service class name) with the API version to\n * use when instantiating a service. Specify 'latest' for each individual\n * that can use the latest available version.\n * @option options logger [#write,#log] an object that responds to .write()\n * (like a stream) or .log() (like the console object) in order to log\n * information about requests\n * @option options systemClockOffset [Number] an offset value in milliseconds\n * to apply to all signing times. Use this to compensate for clock skew\n * when your system may be out of sync with the service time. Note that\n * this configuration option can only be applied to the global `AWS.config`\n * object and cannot be overridden in service-specific configuration.\n * Defaults to 0 milliseconds.\n * @option options signatureVersion [String] the signature version to sign\n * requests with (overriding the API configuration). Possible values are:\n * 'v2', 'v3', 'v4'.\n * @option options signatureCache [Boolean] whether the signature to sign\n * requests with (overriding the API configuration) is cached. Only applies\n * to the signature version 'v4'. Defaults to `true`.\n * @option options dynamoDbCrc32 [Boolean] whether to validate the CRC32\n * checksum of HTTP response bodies returned by DynamoDB. Default: `true`.\n * @option options useAccelerateEndpoint [Boolean] Whether to use the\n * S3 Transfer Acceleration endpoint with the S3 service. Default: `false`.\n * @option options clientSideMonitoring [Boolean] whether to collect and\n * publish this client's performance metrics of all its API requests.\n * @option options endpointDiscoveryEnabled [Boolean|undefined] whether to\n * call operations with endpoints given by service dynamically. Setting this\n * config to `true` will enable endpoint discovery for all applicable operations.\n * Setting it to `false` will explicitly disable endpoint discovery even though\n * operations that require endpoint discovery will presumably fail. Leaving it\n * to `undefined` means SDK will only do endpoint discovery when it's required.\n * Defaults to `undefined`\n * @option options endpointCacheSize [Number] the size of the global cache storing\n * endpoints from endpoint discovery operations. Once endpoint cache is created,\n * updating this setting cannot change existing cache size.\n * Defaults to 1000\n * @option options hostPrefixEnabled [Boolean] whether to marshal request\n * parameters to the prefix of hostname.\n * Defaults to `true`.\n * @option options stsRegionalEndpoints ['legacy'|'regional'] whether to send sts request\n * to global endpoints or regional endpoints.\n * Defaults to 'legacy'.\n * @option options useFipsEndpoint [Boolean] Enables FIPS compatible endpoints.\n * Defaults to `false`.\n * @option options useDualstackEndpoint [Boolean] Enables IPv6 dualstack endpoint.\n * Defaults to `false`.\n */\n constructor: function Config(options) {\n if (options === undefined) options = {};\n options = this.extractCredentials(options);\n\n AWS.util.each.call(this, this.keys, function (key, value) {\n this.set(key, options[key], value);\n });\n },\n\n /**\n * @!group Managing Credentials\n */\n\n /**\n * Loads credentials from the configuration object. This is used internally\n * by the SDK to ensure that refreshable {Credentials} objects are properly\n * refreshed and loaded when sending a request. If you want to ensure that\n * your credentials are loaded prior to a request, you can use this method\n * directly to provide accurate credential data stored in the object.\n *\n * @note If you configure the SDK with static or environment credentials,\n * the credential data should already be present in {credentials} attribute.\n * This method is primarily necessary to load credentials from asynchronous\n * sources, or sources that can refresh credentials periodically.\n * @example Getting your access key\n * AWS.config.getCredentials(function(err) {\n * if (err) console.log(err.stack); // credentials not loaded\n * else console.log(\"Access Key:\", AWS.config.credentials.accessKeyId);\n * })\n * @callback callback function(err)\n * Called when the {credentials} have been properly set on the configuration\n * object.\n *\n * @param err [Error] if this is set, credentials were not successfully\n * loaded and this error provides information why.\n * @see credentials\n * @see Credentials\n */\n getCredentials: function getCredentials(callback) {\n var self = this;\n\n function finish(err) {\n callback(err, err ? null : self.credentials);\n }\n\n function credError(msg, err) {\n return new AWS.util.error(err || new Error(), {\n code: 'CredentialsError',\n message: msg,\n name: 'CredentialsError'\n });\n }\n\n function getAsyncCredentials() {\n self.credentials.get(function(err) {\n if (err) {\n var msg = 'Could not load credentials from ' +\n self.credentials.constructor.name;\n err = credError(msg, err);\n }\n finish(err);\n });\n }\n\n function getStaticCredentials() {\n var err = null;\n if (!self.credentials.accessKeyId || !self.credentials.secretAccessKey) {\n err = credError('Missing credentials');\n }\n finish(err);\n }\n\n if (self.credentials) {\n if (typeof self.credentials.get === 'function') {\n getAsyncCredentials();\n } else { // static credentials\n getStaticCredentials();\n }\n } else if (self.credentialProvider) {\n self.credentialProvider.resolve(function(err, creds) {\n if (err) {\n err = credError('Could not load credentials from any providers', err);\n }\n self.credentials = creds;\n finish(err);\n });\n } else {\n finish(credError('No credentials to load'));\n }\n },\n\n /**\n * Loads token from the configuration object. This is used internally\n * by the SDK to ensure that refreshable {Token} objects are properly\n * refreshed and loaded when sending a request. If you want to ensure that\n * your token is loaded prior to a request, you can use this method\n * directly to provide accurate token data stored in the object.\n *\n * @note If you configure the SDK with static token, the token data should\n * already be present in {token} attribute. This method is primarily necessary\n * to load token from asynchronous sources, or sources that can refresh\n * token periodically.\n * @example Getting your access token\n * AWS.config.getToken(function(err) {\n * if (err) console.log(err.stack); // token not loaded\n * else console.log(\"Token:\", AWS.config.token.token);\n * })\n * @callback callback function(err)\n * Called when the {token} have been properly set on the configuration object.\n *\n * @param err [Error] if this is set, token was not successfully loaded and\n * this error provides information why.\n * @see token\n */\n getToken: function getToken(callback) {\n var self = this;\n\n function finish(err) {\n callback(err, err ? null : self.token);\n }\n\n function tokenError(msg, err) {\n return new AWS.util.error(err || new Error(), {\n code: 'TokenError',\n message: msg,\n name: 'TokenError'\n });\n }\n\n function getAsyncToken() {\n self.token.get(function(err) {\n if (err) {\n var msg = 'Could not load token from ' +\n self.token.constructor.name;\n err = tokenError(msg, err);\n }\n finish(err);\n });\n }\n\n function getStaticToken() {\n var err = null;\n if (!self.token.token) {\n err = tokenError('Missing token');\n }\n finish(err);\n }\n\n if (self.token) {\n if (typeof self.token.get === 'function') {\n getAsyncToken();\n } else { // static token\n getStaticToken();\n }\n } else if (self.tokenProvider) {\n self.tokenProvider.resolve(function(err, token) {\n if (err) {\n err = tokenError('Could not load token from any providers', err);\n }\n self.token = token;\n finish(err);\n });\n } else {\n finish(tokenError('No token to load'));\n }\n },\n\n /**\n * @!group Loading and Setting Configuration Options\n */\n\n /**\n * @overload update(options, allowUnknownKeys = false)\n * Updates the current configuration object with new options.\n *\n * @example Update maxRetries property of a configuration object\n * config.update({maxRetries: 10});\n * @param [Object] options a map of option keys and values.\n * @param [Boolean] allowUnknownKeys whether unknown keys can be set on\n * the configuration object. Defaults to `false`.\n * @see constructor\n */\n update: function update(options, allowUnknownKeys) {\n allowUnknownKeys = allowUnknownKeys || false;\n options = this.extractCredentials(options);\n AWS.util.each.call(this, options, function (key, value) {\n if (allowUnknownKeys || Object.prototype.hasOwnProperty.call(this.keys, key) ||\n AWS.Service.hasService(key)) {\n this.set(key, value);\n }\n });\n },\n\n /**\n * Loads configuration data from a JSON file into this config object.\n * @note Loading configuration will reset all existing configuration\n * on the object.\n * @!macro nobrowser\n * @param path [String] the path relative to your process's current\n * working directory to load configuration from.\n * @return [AWS.Config] the same configuration object\n */\n loadFromPath: function loadFromPath(path) {\n this.clear();\n\n var options = JSON.parse(AWS.util.readFileSync(path));\n var fileSystemCreds = new AWS.FileSystemCredentials(path);\n var chain = new AWS.CredentialProviderChain();\n chain.providers.unshift(fileSystemCreds);\n chain.resolve(function (err, creds) {\n if (err) throw err;\n else options.credentials = creds;\n });\n\n this.constructor(options);\n\n return this;\n },\n\n /**\n * Clears configuration data on this object\n *\n * @api private\n */\n clear: function clear() {\n /*jshint forin:false */\n AWS.util.each.call(this, this.keys, function (key) {\n delete this[key];\n });\n\n // reset credential provider\n this.set('credentials', undefined);\n this.set('credentialProvider', undefined);\n },\n\n /**\n * Sets a property on the configuration object, allowing for a\n * default value\n * @api private\n */\n set: function set(property, value, defaultValue) {\n if (value === undefined) {\n if (defaultValue === undefined) {\n defaultValue = this.keys[property];\n }\n if (typeof defaultValue === 'function') {\n this[property] = defaultValue.call(this);\n } else {\n this[property] = defaultValue;\n }\n } else if (property === 'httpOptions' && this[property]) {\n // deep merge httpOptions\n this[property] = AWS.util.merge(this[property], value);\n } else {\n this[property] = value;\n }\n },\n\n /**\n * All of the keys with their default values.\n *\n * @constant\n * @api private\n */\n keys: {\n credentials: null,\n credentialProvider: null,\n region: null,\n logger: null,\n apiVersions: {},\n apiVersion: null,\n endpoint: undefined,\n httpOptions: {\n timeout: 120000\n },\n maxRetries: undefined,\n maxRedirects: 10,\n paramValidation: true,\n sslEnabled: true,\n s3ForcePathStyle: false,\n s3BucketEndpoint: false,\n s3DisableBodySigning: true,\n s3UsEast1RegionalEndpoint: 'legacy',\n s3UseArnRegion: undefined,\n computeChecksums: true,\n convertResponseTypes: true,\n correctClockSkew: false,\n customUserAgent: null,\n dynamoDbCrc32: true,\n systemClockOffset: 0,\n signatureVersion: null,\n signatureCache: true,\n retryDelayOptions: {},\n useAccelerateEndpoint: false,\n clientSideMonitoring: false,\n endpointDiscoveryEnabled: undefined,\n endpointCacheSize: 1000,\n hostPrefixEnabled: true,\n stsRegionalEndpoints: 'legacy',\n useFipsEndpoint: false,\n useDualstackEndpoint: false,\n token: null\n },\n\n /**\n * Extracts accessKeyId, secretAccessKey and sessionToken\n * from a configuration hash.\n *\n * @api private\n */\n extractCredentials: function extractCredentials(options) {\n if (options.accessKeyId && options.secretAccessKey) {\n options = AWS.util.copy(options);\n options.credentials = new AWS.Credentials(options);\n }\n return options;\n },\n\n /**\n * Sets the promise dependency the SDK will use wherever Promises are returned.\n * Passing `null` will force the SDK to use native Promises if they are available.\n * If native Promises are not available, passing `null` will have no effect.\n * @param [Constructor] dep A reference to a Promise constructor\n */\n setPromisesDependency: function setPromisesDependency(dep) {\n PromisesDependency = dep;\n // if null was passed in, we should try to use native promises\n if (dep === null && typeof Promise === 'function') {\n PromisesDependency = Promise;\n }\n var constructors = [AWS.Request, AWS.Credentials, AWS.CredentialProviderChain];\n if (AWS.S3) {\n constructors.push(AWS.S3);\n if (AWS.S3.ManagedUpload) {\n constructors.push(AWS.S3.ManagedUpload);\n }\n }\n AWS.util.addPromises(constructors, PromisesDependency);\n },\n\n /**\n * Gets the promise dependency set by `AWS.config.setPromisesDependency`.\n */\n getPromisesDependency: function getPromisesDependency() {\n return PromisesDependency;\n }\n});\n\n/**\n * @return [AWS.Config] The global configuration object singleton instance\n * @readonly\n * @see AWS.Config\n */\nAWS.config = new AWS.Config();\n","var AWS = require('./core');\n/**\n * @api private\n */\nfunction validateRegionalEndpointsFlagValue(configValue, errorOptions) {\n if (typeof configValue !== 'string') return undefined;\n else if (['legacy', 'regional'].indexOf(configValue.toLowerCase()) >= 0) {\n return configValue.toLowerCase();\n } else {\n throw AWS.util.error(new Error(), errorOptions);\n }\n}\n\n/**\n * Resolve the configuration value for regional endpoint from difference sources: client\n * config, environmental variable, shared config file. Value can be case-insensitive\n * 'legacy' or 'reginal'.\n * @param originalConfig user-supplied config object to resolve\n * @param options a map of config property names from individual configuration source\n * - env: name of environmental variable that refers to the config\n * - sharedConfig: name of shared configuration file property that refers to the config\n * - clientConfig: name of client configuration property that refers to the config\n *\n * @api private\n */\nfunction resolveRegionalEndpointsFlag(originalConfig, options) {\n originalConfig = originalConfig || {};\n //validate config value\n var resolved;\n if (originalConfig[options.clientConfig]) {\n resolved = validateRegionalEndpointsFlagValue(originalConfig[options.clientConfig], {\n code: 'InvalidConfiguration',\n message: 'invalid \"' + options.clientConfig + '\" configuration. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + originalConfig[options.clientConfig] + '\".'\n });\n if (resolved) return resolved;\n }\n if (!AWS.util.isNode()) return resolved;\n //validate environmental variable\n if (Object.prototype.hasOwnProperty.call(process.env, options.env)) {\n var envFlag = process.env[options.env];\n resolved = validateRegionalEndpointsFlagValue(envFlag, {\n code: 'InvalidEnvironmentalVariable',\n message: 'invalid ' + options.env + ' environmental variable. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + process.env[options.env] + '\".'\n });\n if (resolved) return resolved;\n }\n //validate shared config file\n var profile = {};\n try {\n var profiles = AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader);\n profile = profiles[process.env.AWS_PROFILE || AWS.util.defaultProfile];\n } catch (e) {};\n if (profile && Object.prototype.hasOwnProperty.call(profile, options.sharedConfig)) {\n var fileFlag = profile[options.sharedConfig];\n resolved = validateRegionalEndpointsFlagValue(fileFlag, {\n code: 'InvalidConfiguration',\n message: 'invalid ' + options.sharedConfig + ' profile config. Expect \"legacy\" ' +\n ' or \"regional\". Got \"' + profile[options.sharedConfig] + '\".'\n });\n if (resolved) return resolved;\n }\n return resolved;\n}\n\nmodule.exports = resolveRegionalEndpointsFlag;\n","/**\n * The main AWS namespace\n */\nvar AWS = { util: require('./util') };\n\n/**\n * @api private\n * @!macro [new] nobrowser\n * @note This feature is not supported in the browser environment of the SDK.\n */\nvar _hidden = {}; _hidden.toString(); // hack to parse macro\n\n/**\n * @api private\n */\nmodule.exports = AWS;\n\nAWS.util.update(AWS, {\n\n /**\n * @constant\n */\n VERSION: '2.1290.0',\n\n /**\n * @api private\n */\n Signers: {},\n\n /**\n * @api private\n */\n Protocol: {\n Json: require('./protocol/json'),\n Query: require('./protocol/query'),\n Rest: require('./protocol/rest'),\n RestJson: require('./protocol/rest_json'),\n RestXml: require('./protocol/rest_xml')\n },\n\n /**\n * @api private\n */\n XML: {\n Builder: require('./xml/builder'),\n Parser: null // conditionally set based on environment\n },\n\n /**\n * @api private\n */\n JSON: {\n Builder: require('./json/builder'),\n Parser: require('./json/parser')\n },\n\n /**\n * @api private\n */\n Model: {\n Api: require('./model/api'),\n Operation: require('./model/operation'),\n Shape: require('./model/shape'),\n Paginator: require('./model/paginator'),\n ResourceWaiter: require('./model/resource_waiter')\n },\n\n /**\n * @api private\n */\n apiLoader: require('./api_loader'),\n\n /**\n * @api private\n */\n EndpointCache: require('../vendor/endpoint-cache').EndpointCache\n});\nrequire('./sequential_executor');\nrequire('./service');\nrequire('./config');\nrequire('./http');\nrequire('./event_listeners');\nrequire('./request');\nrequire('./response');\nrequire('./resource_waiter');\nrequire('./signers/request_signer');\nrequire('./param_validator');\n\n/**\n * @readonly\n * @return [AWS.SequentialExecutor] a collection of global event listeners that\n * are attached to every sent request.\n * @see AWS.Request AWS.Request for a list of events to listen for\n * @example Logging the time taken to send a request\n * AWS.events.on('send', function startSend(resp) {\n * resp.startTime = new Date().getTime();\n * }).on('complete', function calculateTime(resp) {\n * var time = (new Date().getTime() - resp.startTime) / 1000;\n * console.log('Request took ' + time + ' seconds');\n * });\n *\n * new AWS.S3().listBuckets(); // prints 'Request took 0.285 seconds'\n */\nAWS.events = new AWS.SequentialExecutor();\n\n//create endpoint cache lazily\nAWS.util.memoizedProperty(AWS, 'endpointCache', function() {\n return new AWS.EndpointCache(AWS.config.endpointCacheSize);\n}, true);\n","var AWS = require('./core');\n\n/**\n * Represents your AWS security credentials, specifically the\n * {accessKeyId}, {secretAccessKey}, and optional {sessionToken}.\n * Creating a `Credentials` object allows you to pass around your\n * security information to configuration and service objects.\n *\n * Note that this class typically does not need to be constructed manually,\n * as the {AWS.Config} and {AWS.Service} classes both accept simple\n * options hashes with the three keys. These structures will be converted\n * into Credentials objects automatically.\n *\n * ## Expiring and Refreshing Credentials\n *\n * Occasionally credentials can expire in the middle of a long-running\n * application. In this case, the SDK will automatically attempt to\n * refresh the credentials from the storage location if the Credentials\n * class implements the {refresh} method.\n *\n * If you are implementing a credential storage location, you\n * will want to create a subclass of the `Credentials` class and\n * override the {refresh} method. This method allows credentials to be\n * retrieved from the backing store, be it a file system, database, or\n * some network storage. The method should reset the credential attributes\n * on the object.\n *\n * @!attribute expired\n * @return [Boolean] whether the credentials have been expired and\n * require a refresh. Used in conjunction with {expireTime}.\n * @!attribute expireTime\n * @return [Date] a time when credentials should be considered expired. Used\n * in conjunction with {expired}.\n * @!attribute accessKeyId\n * @return [String] the AWS access key ID\n * @!attribute secretAccessKey\n * @return [String] the AWS secret access key\n * @!attribute sessionToken\n * @return [String] an optional AWS session token\n */\nAWS.Credentials = AWS.util.inherit({\n /**\n * A credentials object can be created using positional arguments or an options\n * hash.\n *\n * @overload AWS.Credentials(accessKeyId, secretAccessKey, sessionToken=null)\n * Creates a Credentials object with a given set of credential information\n * as positional arguments.\n * @param accessKeyId [String] the AWS access key ID\n * @param secretAccessKey [String] the AWS secret access key\n * @param sessionToken [String] the optional AWS session token\n * @example Create a credentials object with AWS credentials\n * var creds = new AWS.Credentials('akid', 'secret', 'session');\n * @overload AWS.Credentials(options)\n * Creates a Credentials object with a given set of credential information\n * as an options hash.\n * @option options accessKeyId [String] the AWS access key ID\n * @option options secretAccessKey [String] the AWS secret access key\n * @option options sessionToken [String] the optional AWS session token\n * @example Create a credentials object with AWS credentials\n * var creds = new AWS.Credentials({\n * accessKeyId: 'akid', secretAccessKey: 'secret', sessionToken: 'session'\n * });\n */\n constructor: function Credentials() {\n // hide secretAccessKey from being displayed with util.inspect\n AWS.util.hideProperties(this, ['secretAccessKey']);\n\n this.expired = false;\n this.expireTime = null;\n this.refreshCallbacks = [];\n if (arguments.length === 1 && typeof arguments[0] === 'object') {\n var creds = arguments[0].credentials || arguments[0];\n this.accessKeyId = creds.accessKeyId;\n this.secretAccessKey = creds.secretAccessKey;\n this.sessionToken = creds.sessionToken;\n } else {\n this.accessKeyId = arguments[0];\n this.secretAccessKey = arguments[1];\n this.sessionToken = arguments[2];\n }\n },\n\n /**\n * @return [Integer] the number of seconds before {expireTime} during which\n * the credentials will be considered expired.\n */\n expiryWindow: 15,\n\n /**\n * @return [Boolean] whether the credentials object should call {refresh}\n * @note Subclasses should override this method to provide custom refresh\n * logic.\n */\n needsRefresh: function needsRefresh() {\n var currentTime = AWS.util.date.getDate().getTime();\n var adjustedTime = new Date(currentTime + this.expiryWindow * 1000);\n\n if (this.expireTime && adjustedTime > this.expireTime) {\n return true;\n } else {\n return this.expired || !this.accessKeyId || !this.secretAccessKey;\n }\n },\n\n /**\n * Gets the existing credentials, refreshing them if they are not yet loaded\n * or have expired. Users should call this method before using {refresh},\n * as this will not attempt to reload credentials when they are already\n * loaded into the object.\n *\n * @callback callback function(err)\n * When this callback is called with no error, it means either credentials\n * do not need to be refreshed or refreshed credentials information has\n * been loaded into the object (as the `accessKeyId`, `secretAccessKey`,\n * and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n */\n get: function get(callback) {\n var self = this;\n if (this.needsRefresh()) {\n this.refresh(function(err) {\n if (!err) self.expired = false; // reset expired flag\n if (callback) callback(err);\n });\n } else if (callback) {\n callback();\n }\n },\n\n /**\n * @!method getPromise()\n * Returns a 'thenable' promise.\n * Gets the existing credentials, refreshing them if they are not yet loaded\n * or have expired. Users should call this method before using {refresh},\n * as this will not attempt to reload credentials when they are already\n * loaded into the object.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function()\n * Called if the promise is fulfilled. When this callback is called, it\n * means either credentials do not need to be refreshed or refreshed\n * credentials information has been loaded into the object (as the\n * `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `get` call.\n * @example Calling the `getPromise` method.\n * var promise = credProvider.getPromise();\n * promise.then(function() { ... }, function(err) { ... });\n */\n\n /**\n * @!method refreshPromise()\n * Returns a 'thenable' promise.\n * Refreshes the credentials. Users should call {get} before attempting\n * to forcibly refresh credentials.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function()\n * Called if the promise is fulfilled. When this callback is called, it\n * means refreshed credentials information has been loaded into the object\n * (as the `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `refresh` call.\n * @example Calling the `refreshPromise` method.\n * var promise = credProvider.refreshPromise();\n * promise.then(function() { ... }, function(err) { ... });\n */\n\n /**\n * Refreshes the credentials. Users should call {get} before attempting\n * to forcibly refresh credentials.\n *\n * @callback callback function(err)\n * When this callback is called with no error, it means refreshed\n * credentials information has been loaded into the object (as the\n * `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @note Subclasses should override this class to reset the\n * {accessKeyId}, {secretAccessKey} and optional {sessionToken}\n * on the credentials object and then call the callback with\n * any error information.\n * @see get\n */\n refresh: function refresh(callback) {\n this.expired = false;\n callback();\n },\n\n /**\n * @api private\n * @param callback\n */\n coalesceRefresh: function coalesceRefresh(callback, sync) {\n var self = this;\n if (self.refreshCallbacks.push(callback) === 1) {\n self.load(function onLoad(err) {\n AWS.util.arrayEach(self.refreshCallbacks, function(callback) {\n if (sync) {\n callback(err);\n } else {\n // callback could throw, so defer to ensure all callbacks are notified\n AWS.util.defer(function () {\n callback(err);\n });\n }\n });\n self.refreshCallbacks.length = 0;\n });\n }\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n callback();\n }\n});\n\n/**\n * @api private\n */\nAWS.Credentials.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.getPromise = AWS.util.promisifyMethod('get', PromiseDependency);\n this.prototype.refreshPromise = AWS.util.promisifyMethod('refresh', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.Credentials.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.getPromise;\n delete this.prototype.refreshPromise;\n};\n\nAWS.util.addPromises(AWS.Credentials);\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * AWS.ChainableTemporaryCredentials differs from AWS.TemporaryCredentials in\n * the way masterCredentials and refreshes are handled.\n * AWS.ChainableTemporaryCredentials refreshes expired credentials using the\n * masterCredentials passed by the user to support chaining of STS credentials.\n * However, AWS.TemporaryCredentials recursively collapses the masterCredentials\n * during instantiation, precluding the ability to refresh credentials which\n * require intermediate, temporary credentials.\n *\n * For example, if the application should use RoleA, which must be assumed from\n * RoleB, and the environment provides credentials which can assume RoleB, then\n * AWS.ChainableTemporaryCredentials must be used to support refreshing the\n * temporary credentials for RoleA:\n *\n * ```javascript\n * var roleACreds = new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: 'RoleA'},\n * masterCredentials: new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: 'RoleB'},\n * masterCredentials: new AWS.EnvironmentCredentials('AWS')\n * })\n * });\n * ```\n *\n * If AWS.TemporaryCredentials had been used in the previous example,\n * `roleACreds` would fail to refresh because `roleACreds` would\n * use the environment credentials for the AssumeRole request.\n *\n * Another difference is that AWS.ChainableTemporaryCredentials creates the STS\n * service instance during instantiation while AWS.TemporaryCredentials creates\n * the STS service instance during the first refresh. Creating the service\n * instance during instantiation effectively captures the master credentials\n * from the global config, so that subsequent changes to the global config do\n * not affect the master credentials used to refresh the temporary credentials.\n *\n * This allows an instance of AWS.ChainableTemporaryCredentials to be assigned\n * to AWS.config.credentials:\n *\n * ```javascript\n * var envCreds = new AWS.EnvironmentCredentials('AWS');\n * AWS.config.credentials = envCreds;\n * // masterCredentials will be envCreds\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: '...'}\n * });\n * ```\n *\n * Similarly, to use the CredentialProviderChain's default providers as the\n * master credentials, simply create a new instance of\n * AWS.ChainableTemporaryCredentials:\n *\n * ```javascript\n * AWS.config.credentials = new ChainableTemporaryCredentials({\n * params: {RoleArn: '...'}\n * });\n * ```\n *\n * @!attribute service\n * @return [AWS.STS] the STS service instance used to\n * get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\nAWS.ChainableTemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new temporary credentials object.\n *\n * @param options [map] a set of options\n * @option options params [map] ({}) a map of options that are passed to the\n * {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n * If a `RoleArn` parameter is passed in, credentials will be based on the\n * IAM role. If a `SerialNumber` parameter is passed in, {tokenCodeFn} must\n * also be passed in or an error will be thrown.\n * @option options masterCredentials [AWS.Credentials] the master credentials\n * used to get and refresh temporary credentials from AWS STS. By default,\n * AWS.config.credentials or AWS.config.credentialProvider will be used.\n * @option options tokenCodeFn [Function] (null) Function to provide\n * `TokenCode`, if `SerialNumber` is provided for profile in {params}. Function\n * is called with value of `SerialNumber` and `callback`, and should provide\n * the `TokenCode` or an error to the callback in the format\n * `callback(err, token)`.\n * @example Creating a new credentials object for generic temporary credentials\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials();\n * @example Creating a new credentials object for an IAM role\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n * params: {\n * RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials'\n * }\n * });\n * @see AWS.STS.assumeRole\n * @see AWS.STS.getSessionToken\n */\n constructor: function ChainableTemporaryCredentials(options) {\n AWS.Credentials.call(this);\n options = options || {};\n this.errorCode = 'ChainableTemporaryCredentialsProviderFailure';\n this.expired = true;\n this.tokenCodeFn = null;\n\n var params = AWS.util.copy(options.params) || {};\n if (params.RoleArn) {\n params.RoleSessionName = params.RoleSessionName || 'temporary-credentials';\n }\n if (params.SerialNumber) {\n if (!options.tokenCodeFn || (typeof options.tokenCodeFn !== 'function')) {\n throw new AWS.util.error(\n new Error('tokenCodeFn must be a function when params.SerialNumber is given'),\n {code: this.errorCode}\n );\n } else {\n this.tokenCodeFn = options.tokenCodeFn;\n }\n }\n var config = AWS.util.merge(\n {\n params: params,\n credentials: options.masterCredentials || AWS.config.credentials\n },\n options.stsConfig || {}\n );\n this.service = new STS(config);\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRole} or\n * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n * to the credentials {constructor}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n var operation = self.service.config.params.RoleArn ? 'assumeRole' : 'getSessionToken';\n this.getTokenCode(function (err, tokenCode) {\n var params = {};\n if (err) {\n callback(err);\n return;\n }\n if (tokenCode) {\n params.TokenCode = tokenCode;\n }\n self.service[operation](params, function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n });\n },\n\n /**\n * @api private\n */\n getTokenCode: function getTokenCode(callback) {\n var self = this;\n if (this.tokenCodeFn) {\n this.tokenCodeFn(this.service.config.params.SerialNumber, function (err, token) {\n if (err) {\n var message = err;\n if (err instanceof Error) {\n message = err.message;\n }\n callback(\n AWS.util.error(\n new Error('Error fetching MFA token: ' + message),\n { code: self.errorCode}\n )\n );\n return;\n }\n callback(null, token);\n });\n } else {\n callback(null);\n }\n }\n});\n","var AWS = require('../core');\nvar CognitoIdentity = require('../../clients/cognitoidentity');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS Web Identity Federation using\n * the Amazon Cognito Identity service.\n *\n * By default this provider gets credentials using the\n * {AWS.CognitoIdentity.getCredentialsForIdentity} service operation, which\n * requires either an `IdentityId` or an `IdentityPoolId` (Amazon Cognito\n * Identity Pool ID), which is used to call {AWS.CognitoIdentity.getId} to\n * obtain an `IdentityId`. If the identity or identity pool is not configured in\n * the Amazon Cognito Console to use IAM roles with the appropriate permissions,\n * then additionally a `RoleArn` is required containing the ARN of the IAM trust\n * policy for the Amazon Cognito role that the user will log into. If a `RoleArn`\n * is provided, then this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation, after first getting an\n * Open ID token from {AWS.CognitoIdentity.getOpenIdToken}.\n *\n * In addition, if this credential provider is used to provide authenticated\n * login, the `Logins` map may be set to the tokens provided by the respective\n * identity providers. See {constructor} for an example on creating a credentials\n * object with proper property values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.Logins['graph.facebook.com'] = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.CognitoIdentity.getId},\n * {AWS.CognitoIdentity.getOpenIdToken}, and\n * {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n * `params.WebIdentityToken` property.\n * @!attribute data\n * @return [map] the raw data response from the call to\n * {AWS.CognitoIdentity.getCredentialsForIdentity}, or\n * {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n * access to other properties from the response.\n * @!attribute identityId\n * @return [String] the Cognito ID returned by the last call to\n * {AWS.CognitoIdentity.getOpenIdToken}. This ID represents the actual\n * final resolved identity ID from Amazon Cognito.\n */\nAWS.CognitoIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * @api private\n */\n localStorageKey: {\n id: 'aws.cognito.identity-id.',\n providers: 'aws.cognito.identity-providers.'\n },\n\n /**\n * Creates a new credentials object.\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.CognitoIdentityCredentials({\n *\n * // either IdentityPoolId or IdentityId is required\n * // See the IdentityPoolId param for AWS.CognitoIdentity.getID (linked below)\n * // See the IdentityId param for AWS.CognitoIdentity.getCredentialsForIdentity\n * // or AWS.CognitoIdentity.getOpenIdToken (linked below)\n * IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',\n * IdentityId: 'us-east-1:128d0a74-c82f-4553-916d-90053e4a8b0f'\n *\n * // optional, only necessary when the identity pool is not configured\n * // to use IAM roles in the Amazon Cognito Console\n * // See the RoleArn param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n * RoleArn: 'arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity',\n *\n * // optional tokens, used for authenticated login\n * // See the Logins param for AWS.CognitoIdentity.getID (linked below)\n * Logins: {\n * 'graph.facebook.com': 'FBTOKEN',\n * 'www.amazon.com': 'AMAZONTOKEN',\n * 'accounts.google.com': 'GOOGLETOKEN',\n * 'api.twitter.com': 'TWITTERTOKEN',\n * 'www.digits.com': 'DIGITSTOKEN'\n * },\n *\n * // optional name, defaults to web-identity\n * // See the RoleSessionName param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n * RoleSessionName: 'web',\n *\n * // optional, only necessary when application runs in a browser\n * // and multiple users are signed in at once, used for caching\n * LoginId: 'example@gmail.com'\n *\n * }, {\n * // optionally provide configuration to apply to the underlying service clients\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n *\n * // region should match the region your identity pool is located in\n * region: 'us-east-1',\n *\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.CognitoIdentity.getId\n * @see AWS.CognitoIdentity.getCredentialsForIdentity\n * @see AWS.STS.assumeRoleWithWebIdentity\n * @see AWS.CognitoIdentity.getOpenIdToken\n * @see AWS.Config\n * @note If a region is not provided in the global AWS.config, or\n * specified in the `clientConfig` to the CognitoIdentityCredentials\n * constructor, you may encounter a 'Missing credentials in config' error\n * when calling making a service call.\n */\n constructor: function CognitoIdentityCredentials(params, clientConfig) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n this.data = null;\n this._identityId = null;\n this._clientConfig = AWS.util.copy(clientConfig || {});\n this.loadCachedId();\n var self = this;\n Object.defineProperty(this, 'identityId', {\n get: function() {\n self.loadCachedId();\n return self._identityId || self.params.IdentityId;\n },\n set: function(identityId) {\n self._identityId = identityId;\n }\n });\n },\n\n /**\n * Refreshes credentials using {AWS.CognitoIdentity.getCredentialsForIdentity},\n * or {AWS.STS.assumeRoleWithWebIdentity}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.data = null;\n self._identityId = null;\n self.getId(function(err) {\n if (!err) {\n if (!self.params.RoleArn) {\n self.getCredentialsForIdentity(callback);\n } else {\n self.getCredentialsFromSTS(callback);\n }\n } else {\n self.clearIdOnNotAuthorized(err);\n callback(err);\n }\n });\n },\n\n /**\n * Clears the cached Cognito ID associated with the currently configured\n * identity pool ID. Use this to manually invalidate your cache if\n * the identity pool ID was deleted.\n */\n clearCachedId: function clearCache() {\n this._identityId = null;\n delete this.params.IdentityId;\n\n var poolId = this.params.IdentityPoolId;\n var loginId = this.params.LoginId || '';\n delete this.storage[this.localStorageKey.id + poolId + loginId];\n delete this.storage[this.localStorageKey.providers + poolId + loginId];\n },\n\n /**\n * @api private\n */\n clearIdOnNotAuthorized: function clearIdOnNotAuthorized(err) {\n var self = this;\n if (err.code == 'NotAuthorizedException') {\n self.clearCachedId();\n }\n },\n\n /**\n * Retrieves a Cognito ID, loading from cache if it was already retrieved\n * on this device.\n *\n * @callback callback function(err, identityId)\n * @param err [Error, null] an error object if the call failed or null if\n * it succeeded.\n * @param identityId [String, null] if successful, the callback will return\n * the Cognito ID.\n * @note If not loaded explicitly, the Cognito ID is loaded and stored in\n * localStorage in the browser environment of a device.\n * @api private\n */\n getId: function getId(callback) {\n var self = this;\n if (typeof self.params.IdentityId === 'string') {\n return callback(null, self.params.IdentityId);\n }\n\n self.cognito.getId(function(err, data) {\n if (!err && data.IdentityId) {\n self.params.IdentityId = data.IdentityId;\n callback(null, data.IdentityId);\n } else {\n callback(err);\n }\n });\n },\n\n\n /**\n * @api private\n */\n loadCredentials: function loadCredentials(data, credentials) {\n if (!data || !credentials) return;\n credentials.expired = false;\n credentials.accessKeyId = data.Credentials.AccessKeyId;\n credentials.secretAccessKey = data.Credentials.SecretKey;\n credentials.sessionToken = data.Credentials.SessionToken;\n credentials.expireTime = data.Credentials.Expiration;\n },\n\n /**\n * @api private\n */\n getCredentialsForIdentity: function getCredentialsForIdentity(callback) {\n var self = this;\n self.cognito.getCredentialsForIdentity(function(err, data) {\n if (!err) {\n self.cacheId(data);\n self.data = data;\n self.loadCredentials(self.data, self);\n } else {\n self.clearIdOnNotAuthorized(err);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n getCredentialsFromSTS: function getCredentialsFromSTS(callback) {\n var self = this;\n self.cognito.getOpenIdToken(function(err, data) {\n if (!err) {\n self.cacheId(data);\n self.params.WebIdentityToken = data.Token;\n self.webIdentityCredentials.refresh(function(webErr) {\n if (!webErr) {\n self.data = self.webIdentityCredentials.data;\n self.sts.credentialsFrom(self.data, self);\n }\n callback(webErr);\n });\n } else {\n self.clearIdOnNotAuthorized(err);\n callback(err);\n }\n });\n },\n\n /**\n * @api private\n */\n loadCachedId: function loadCachedId() {\n var self = this;\n\n // in the browser we source default IdentityId from localStorage\n if (AWS.util.isBrowser() && !self.params.IdentityId) {\n var id = self.getStorage('id');\n if (id && self.params.Logins) {\n var actualProviders = Object.keys(self.params.Logins);\n var cachedProviders =\n (self.getStorage('providers') || '').split(',');\n\n // only load ID if at least one provider used this ID before\n var intersect = cachedProviders.filter(function(n) {\n return actualProviders.indexOf(n) !== -1;\n });\n if (intersect.length !== 0) {\n self.params.IdentityId = id;\n }\n } else if (id) {\n self.params.IdentityId = id;\n }\n }\n },\n\n /**\n * @api private\n */\n createClients: function() {\n var clientConfig = this._clientConfig;\n this.webIdentityCredentials = this.webIdentityCredentials ||\n new AWS.WebIdentityCredentials(this.params, clientConfig);\n if (!this.cognito) {\n var cognitoConfig = AWS.util.merge({}, clientConfig);\n cognitoConfig.params = this.params;\n this.cognito = new CognitoIdentity(cognitoConfig);\n }\n this.sts = this.sts || new STS(clientConfig);\n },\n\n /**\n * @api private\n */\n cacheId: function cacheId(data) {\n this._identityId = data.IdentityId;\n this.params.IdentityId = this._identityId;\n\n // cache this IdentityId in browser localStorage if possible\n if (AWS.util.isBrowser()) {\n this.setStorage('id', data.IdentityId);\n\n if (this.params.Logins) {\n this.setStorage('providers', Object.keys(this.params.Logins).join(','));\n }\n }\n },\n\n /**\n * @api private\n */\n getStorage: function getStorage(key) {\n return this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')];\n },\n\n /**\n * @api private\n */\n setStorage: function setStorage(key, val) {\n try {\n this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')] = val;\n } catch (_) {}\n },\n\n /**\n * @api private\n */\n storage: (function() {\n try {\n var storage = AWS.util.isBrowser() && window.localStorage !== null && typeof window.localStorage === 'object' ?\n window.localStorage : {};\n\n // Test set/remove which would throw an error in Safari's private browsing\n storage['aws.test-storage'] = 'foobar';\n delete storage['aws.test-storage'];\n\n return storage;\n } catch (_) {\n return {};\n }\n })()\n});\n","var AWS = require('../core');\n\n/**\n * Creates a credential provider chain that searches for AWS credentials\n * in a list of credential providers specified by the {providers} property.\n *\n * By default, the chain will use the {defaultProviders} to resolve credentials.\n * These providers will look in the environment using the\n * {AWS.EnvironmentCredentials} class with the 'AWS' and 'AMAZON' prefixes.\n *\n * ## Setting Providers\n *\n * Each provider in the {providers} list should be a function that returns\n * a {AWS.Credentials} object, or a hardcoded credentials object. The function\n * form allows for delayed execution of the credential construction.\n *\n * ## Resolving Credentials from a Chain\n *\n * Call {resolve} to return the first valid credential object that can be\n * loaded by the provider chain.\n *\n * For example, to resolve a chain with a custom provider that checks a file\n * on disk after the set of {defaultProviders}:\n *\n * ```javascript\n * var diskProvider = new AWS.FileSystemCredentials('./creds.json');\n * var chain = new AWS.CredentialProviderChain();\n * chain.providers.push(diskProvider);\n * chain.resolve();\n * ```\n *\n * The above code will return the `diskProvider` object if the\n * file contains credentials and the `defaultProviders` do not contain\n * any credential settings.\n *\n * @!attribute providers\n * @return [Array]\n * a list of credentials objects or functions that return credentials\n * objects. If the provider is a function, the function will be\n * executed lazily when the provider needs to be checked for valid\n * credentials. By default, this object will be set to the\n * {defaultProviders}.\n * @see defaultProviders\n */\nAWS.CredentialProviderChain = AWS.util.inherit(AWS.Credentials, {\n\n /**\n * Creates a new CredentialProviderChain with a default set of providers\n * specified by {defaultProviders}.\n */\n constructor: function CredentialProviderChain(providers) {\n if (providers) {\n this.providers = providers;\n } else {\n this.providers = AWS.CredentialProviderChain.defaultProviders.slice(0);\n }\n this.resolveCallbacks = [];\n },\n\n /**\n * @!method resolvePromise()\n * Returns a 'thenable' promise.\n * Resolves the provider chain by searching for the first set of\n * credentials in {providers}.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(credentials)\n * Called if the promise is fulfilled and the provider resolves the chain\n * to a credentials object\n * @param credentials [AWS.Credentials] the credentials object resolved\n * by the provider chain.\n * @callback rejectedCallback function(error)\n * Called if the promise is rejected.\n * @param err [Error] the error object returned if no credentials are found.\n * @return [Promise] A promise that represents the state of the `resolve` method call.\n * @example Calling the `resolvePromise` method.\n * var promise = chain.resolvePromise();\n * promise.then(function(credentials) { ... }, function(err) { ... });\n */\n\n /**\n * Resolves the provider chain by searching for the first set of\n * credentials in {providers}.\n *\n * @callback callback function(err, credentials)\n * Called when the provider resolves the chain to a credentials object\n * or null if no credentials can be found.\n *\n * @param err [Error] the error object returned if no credentials are\n * found.\n * @param credentials [AWS.Credentials] the credentials object resolved\n * by the provider chain.\n * @return [AWS.CredentialProviderChain] the provider, for chaining.\n */\n resolve: function resolve(callback) {\n var self = this;\n if (self.providers.length === 0) {\n callback(new Error('No providers'));\n return self;\n }\n\n if (self.resolveCallbacks.push(callback) === 1) {\n var index = 0;\n var providers = self.providers.slice(0);\n\n function resolveNext(err, creds) {\n if ((!err && creds) || index === providers.length) {\n AWS.util.arrayEach(self.resolveCallbacks, function (callback) {\n callback(err, creds);\n });\n self.resolveCallbacks.length = 0;\n return;\n }\n\n var provider = providers[index++];\n if (typeof provider === 'function') {\n creds = provider.call();\n } else {\n creds = provider;\n }\n\n if (creds.get) {\n creds.get(function (getErr) {\n resolveNext(getErr, getErr ? null : creds);\n });\n } else {\n resolveNext(null, creds);\n }\n }\n\n resolveNext();\n }\n\n return self;\n }\n});\n\n/**\n * The default set of providers used by a vanilla CredentialProviderChain.\n *\n * In the browser:\n *\n * ```javascript\n * AWS.CredentialProviderChain.defaultProviders = []\n * ```\n *\n * In Node.js:\n *\n * ```javascript\n * AWS.CredentialProviderChain.defaultProviders = [\n * function () { return new AWS.EnvironmentCredentials('AWS'); },\n * function () { return new AWS.EnvironmentCredentials('AMAZON'); },\n * function () { return new AWS.SsoCredentials(); },\n * function () { return new AWS.SharedIniFileCredentials(); },\n * function () { return new AWS.ECSCredentials(); },\n * function () { return new AWS.ProcessCredentials(); },\n * function () { return new AWS.TokenFileWebIdentityCredentials(); },\n * function () { return new AWS.EC2MetadataCredentials() }\n * ]\n * ```\n */\nAWS.CredentialProviderChain.defaultProviders = [];\n\n/**\n * @api private\n */\nAWS.CredentialProviderChain.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.resolvePromise = AWS.util.promisifyMethod('resolve', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.CredentialProviderChain.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.resolvePromise;\n};\n\nAWS.util.addPromises(AWS.CredentialProviderChain);\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS SAML support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithSAML} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given, as well as a `PrincipalArn`\n * representing the ARN for the SAML identity provider. In addition, the\n * `SAMLAssertion` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn`, `PrincipalArn`, and `SAMLAssertion` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the SAMLAssertion, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.SAMLAssertion = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.STS.assumeRoleWithSAML}. To update the token, set the\n * `params.SAMLAssertion` property.\n */\nAWS.SAMLCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new credentials object.\n * @param (see AWS.STS.assumeRoleWithSAML)\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.SAMLCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/SAMLRole',\n * PrincipalArn: 'arn:aws:iam::1234567890:role/SAMLPrincipal',\n * SAMLAssertion: 'base64-token', // base64-encoded token from IdP\n * });\n * @see AWS.STS.assumeRoleWithSAML\n */\n constructor: function SAMLCredentials(params) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithSAML}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.service.assumeRoleWithSAML(function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n createClients: function() {\n this.service = this.service || new STS({params: this.params});\n }\n\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * @note AWS.TemporaryCredentials is deprecated, but remains available for\n * backwards compatibility. {AWS.ChainableTemporaryCredentials} is the\n * preferred class for temporary credentials.\n *\n * To setup temporary credentials, configure a set of master credentials\n * using the standard credentials providers (environment, EC2 instance metadata,\n * or from the filesystem), then set the global credentials to a new\n * temporary credentials object:\n *\n * ```javascript\n * // Note that environment credentials are loaded by default,\n * // the following line is shown for clarity:\n * AWS.config.credentials = new AWS.EnvironmentCredentials('AWS');\n *\n * // Now set temporary credentials seeded from the master credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n *\n * // subsequent requests will now use temporary credentials from AWS STS.\n * new AWS.S3().listBucket(function(err, data) { ... });\n * ```\n *\n * @!attribute masterCredentials\n * @return [AWS.Credentials] the master (non-temporary) credentials used to\n * get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\nAWS.TemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new temporary credentials object.\n *\n * @note In order to create temporary credentials, you first need to have\n * \"master\" credentials configured in {AWS.Config.credentials}. These\n * master credentials are necessary to retrieve the temporary credentials,\n * as well as refresh the credentials when they expire.\n * @param params [map] a map of options that are passed to the\n * {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n * If a `RoleArn` parameter is passed in, credentials will be based on the\n * IAM role.\n * @param masterCredentials [AWS.Credentials] the master (non-temporary) credentials\n * used to get and refresh temporary credentials from AWS STS.\n * @example Creating a new credentials object for generic temporary credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n * @example Creating a new credentials object for an IAM role\n * AWS.config.credentials = new AWS.TemporaryCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials',\n * });\n * @see AWS.STS.assumeRole\n * @see AWS.STS.getSessionToken\n */\n constructor: function TemporaryCredentials(params, masterCredentials) {\n AWS.Credentials.call(this);\n this.loadMasterCredentials(masterCredentials);\n this.expired = true;\n\n this.params = params || {};\n if (this.params.RoleArn) {\n this.params.RoleSessionName =\n this.params.RoleSessionName || 'temporary-credentials';\n }\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRole} or\n * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n * to the credentials {constructor}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh (callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load (callback) {\n var self = this;\n self.createClients();\n self.masterCredentials.get(function () {\n self.service.config.credentials = self.masterCredentials;\n var operation = self.params.RoleArn ?\n self.service.assumeRole : self.service.getSessionToken;\n operation.call(self.service, function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n });\n },\n\n /**\n * @api private\n */\n loadMasterCredentials: function loadMasterCredentials (masterCredentials) {\n this.masterCredentials = masterCredentials || AWS.config.credentials;\n while (this.masterCredentials.masterCredentials) {\n this.masterCredentials = this.masterCredentials.masterCredentials;\n }\n\n if (typeof this.masterCredentials.get !== 'function') {\n this.masterCredentials = new AWS.Credentials(this.masterCredentials);\n }\n },\n\n /**\n * @api private\n */\n createClients: function () {\n this.service = this.service || new STS({params: this.params});\n }\n\n});\n","var AWS = require('../core');\nvar STS = require('../../clients/sts');\n\n/**\n * Represents credentials retrieved from STS Web Identity Federation support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given. In addition, the\n * `WebIdentityToken` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn` and `WebIdentityToken` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.WebIdentityToken = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n * `params.WebIdentityToken` property.\n * @!attribute data\n * @return [map] the raw data response from the call to\n * {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n * access to other properties from the response.\n */\nAWS.WebIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new credentials object.\n * @param (see AWS.STS.assumeRoleWithWebIdentity)\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.WebIdentityCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/WebIdentity',\n * WebIdentityToken: 'ABCDEFGHIJKLMNOP', // token from identity service\n * RoleSessionName: 'web' // optional name, defaults to web-identity\n * }, {\n * // optionally provide configuration to apply to the underlying AWS.STS service client\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n *\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.STS.assumeRoleWithWebIdentity\n * @see AWS.Config\n */\n constructor: function WebIdentityCredentials(params, clientConfig) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n this.params.RoleSessionName = this.params.RoleSessionName || 'web-identity';\n this.data = null;\n this._clientConfig = AWS.util.copy(clientConfig || {});\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithWebIdentity}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.service.assumeRoleWithWebIdentity(function (err, data) {\n self.data = null;\n if (!err) {\n self.data = data;\n self.service.credentialsFrom(data, self);\n }\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n createClients: function() {\n if (!this.service) {\n var stsConfig = AWS.util.merge({}, this._clientConfig);\n stsConfig.params = this.params;\n this.service = new STS(stsConfig);\n }\n }\n\n});\n","var AWS = require('./core');\nvar util = require('./util');\nvar endpointDiscoveryEnabledEnvs = ['AWS_ENABLE_ENDPOINT_DISCOVERY', 'AWS_ENDPOINT_DISCOVERY_ENABLED'];\n\n/**\n * Generate key (except resources and operation part) to index the endpoints in the cache\n * If input shape has endpointdiscoveryid trait then use\n * accessKey + operation + resources + region + service as cache key\n * If input shape doesn't have endpointdiscoveryid trait then use\n * accessKey + region + service as cache key\n * @return [map] object with keys to index endpoints.\n * @api private\n */\nfunction getCacheKey(request) {\n var service = request.service;\n var api = service.api || {};\n var operations = api.operations;\n var identifiers = {};\n if (service.config.region) {\n identifiers.region = service.config.region;\n }\n if (api.serviceId) {\n identifiers.serviceId = api.serviceId;\n }\n if (service.config.credentials.accessKeyId) {\n identifiers.accessKeyId = service.config.credentials.accessKeyId;\n }\n return identifiers;\n}\n\n/**\n * Recursive helper for marshallCustomIdentifiers().\n * Looks for required string input members that have 'endpointdiscoveryid' trait.\n * @api private\n */\nfunction marshallCustomIdentifiersHelper(result, params, shape) {\n if (!shape || params === undefined || params === null) return;\n if (shape.type === 'structure' && shape.required && shape.required.length > 0) {\n util.arrayEach(shape.required, function(name) {\n var memberShape = shape.members[name];\n if (memberShape.endpointDiscoveryId === true) {\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n result[locationName] = String(params[name]);\n } else {\n marshallCustomIdentifiersHelper(result, params[name], memberShape);\n }\n });\n }\n}\n\n/**\n * Get custom identifiers for cache key.\n * Identifies custom identifiers by checking each shape's `endpointDiscoveryId` trait.\n * @param [object] request object\n * @param [object] input shape of the given operation's api\n * @api private\n */\nfunction marshallCustomIdentifiers(request, shape) {\n var identifiers = {};\n marshallCustomIdentifiersHelper(identifiers, request.params, shape);\n return identifiers;\n}\n\n/**\n * Call endpoint discovery operation when it's optional.\n * When endpoint is available in cache then use the cached endpoints. If endpoints\n * are unavailable then use regional endpoints and call endpoint discovery operation\n * asynchronously. This is turned off by default.\n * @param [object] request object\n * @api private\n */\nfunction optionalDiscoverEndpoint(request) {\n var service = request.service;\n var api = service.api;\n var operationModel = api.operations ? api.operations[request.operation] : undefined;\n var inputShape = operationModel ? operationModel.input : undefined;\n\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operationModel) cacheKey.operation = operationModel.name;\n }\n var endpoints = AWS.endpointCache.get(cacheKey);\n if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n //endpoint operation is being made but response not yet received\n //or endpoint operation just failed in 1 minute\n return;\n } else if (endpoints && endpoints.length > 0) {\n //found endpoint record from cache\n request.httpRequest.updateEndpoint(endpoints[0].Address);\n } else {\n //endpoint record not in cache or outdated. make discovery operation\n var endpointRequest = service.makeRequest(api.endpointOperation, {\n Operation: operationModel.name,\n Identifiers: identifiers,\n });\n addApiVersionHeader(endpointRequest);\n endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n endpointRequest.removeListener('retry', AWS.EventListeners.Core.RETRY_CHECK);\n //put in a placeholder for endpoints already requested, prevent\n //too much in-flight calls\n AWS.endpointCache.put(cacheKey, [{\n Address: '',\n CachePeriodInMinutes: 1\n }]);\n endpointRequest.send(function(err, data) {\n if (data && data.Endpoints) {\n AWS.endpointCache.put(cacheKey, data.Endpoints);\n } else if (err) {\n AWS.endpointCache.put(cacheKey, [{\n Address: '',\n CachePeriodInMinutes: 1 //not to make more endpoint operation in next 1 minute\n }]);\n }\n });\n }\n}\n\nvar requestQueue = {};\n\n/**\n * Call endpoint discovery operation when it's required.\n * When endpoint is available in cache then use cached ones. If endpoints are\n * unavailable then SDK should call endpoint operation then use returned new\n * endpoint for the api call. SDK will automatically attempt to do endpoint\n * discovery. This is turned off by default\n * @param [object] request object\n * @api private\n */\nfunction requiredDiscoverEndpoint(request, done) {\n var service = request.service;\n var api = service.api;\n var operationModel = api.operations ? api.operations[request.operation] : undefined;\n var inputShape = operationModel ? operationModel.input : undefined;\n\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operationModel) cacheKey.operation = operationModel.name;\n }\n var cacheKeyStr = AWS.EndpointCache.getKeyString(cacheKey);\n var endpoints = AWS.endpointCache.get(cacheKeyStr); //endpoint cache also accepts string keys\n if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n //endpoint operation is being made but response not yet received\n //push request object to a pending queue\n if (!requestQueue[cacheKeyStr]) requestQueue[cacheKeyStr] = [];\n requestQueue[cacheKeyStr].push({request: request, callback: done});\n return;\n } else if (endpoints && endpoints.length > 0) {\n request.httpRequest.updateEndpoint(endpoints[0].Address);\n done();\n } else {\n var endpointRequest = service.makeRequest(api.endpointOperation, {\n Operation: operationModel.name,\n Identifiers: identifiers,\n });\n endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n addApiVersionHeader(endpointRequest);\n\n //put in a placeholder for endpoints already requested, prevent\n //too much in-flight calls\n AWS.endpointCache.put(cacheKeyStr, [{\n Address: '',\n CachePeriodInMinutes: 60 //long-live cache\n }]);\n endpointRequest.send(function(err, data) {\n if (err) {\n request.response.error = util.error(err, { retryable: false });\n AWS.endpointCache.remove(cacheKey);\n\n //fail all the pending requests in batch\n if (requestQueue[cacheKeyStr]) {\n var pendingRequests = requestQueue[cacheKeyStr];\n util.arrayEach(pendingRequests, function(requestContext) {\n requestContext.request.response.error = util.error(err, { retryable: false });\n requestContext.callback();\n });\n delete requestQueue[cacheKeyStr];\n }\n } else if (data) {\n AWS.endpointCache.put(cacheKeyStr, data.Endpoints);\n request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n\n //update the endpoint for all the pending requests in batch\n if (requestQueue[cacheKeyStr]) {\n var pendingRequests = requestQueue[cacheKeyStr];\n util.arrayEach(pendingRequests, function(requestContext) {\n requestContext.request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n requestContext.callback();\n });\n delete requestQueue[cacheKeyStr];\n }\n }\n done();\n });\n }\n}\n\n/**\n * add api version header to endpoint operation\n * @api private\n */\nfunction addApiVersionHeader(endpointRequest) {\n var api = endpointRequest.service.api;\n var apiVersion = api.apiVersion;\n if (apiVersion && !endpointRequest.httpRequest.headers['x-amz-api-version']) {\n endpointRequest.httpRequest.headers['x-amz-api-version'] = apiVersion;\n }\n}\n\n/**\n * If api call gets invalid endpoint exception, SDK should attempt to remove the invalid\n * endpoint from cache.\n * @api private\n */\nfunction invalidateCachedEndpoints(response) {\n var error = response.error;\n var httpResponse = response.httpResponse;\n if (error &&\n (error.code === 'InvalidEndpointException' || httpResponse.statusCode === 421)\n ) {\n var request = response.request;\n var operations = request.service.api.operations || {};\n var inputShape = operations[request.operation] ? operations[request.operation].input : undefined;\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operations[request.operation]) cacheKey.operation = operations[request.operation].name;\n }\n AWS.endpointCache.remove(cacheKey);\n }\n}\n\n/**\n * If endpoint is explicitly configured, SDK should not do endpoint discovery in anytime.\n * @param [object] client Service client object.\n * @api private\n */\nfunction hasCustomEndpoint(client) {\n //if set endpoint is set for specific client, enable endpoint discovery will raise an error.\n if (client._originalConfig && client._originalConfig.endpoint && client._originalConfig.endpointDiscoveryEnabled === true) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'Custom endpoint is supplied; endpointDiscoveryEnabled must not be true.'\n });\n };\n var svcConfig = AWS.config[client.serviceIdentifier] || {};\n return Boolean(AWS.config.endpoint || svcConfig.endpoint || (client._originalConfig && client._originalConfig.endpoint));\n}\n\n/**\n * @api private\n */\nfunction isFalsy(value) {\n return ['false', '0'].indexOf(value) >= 0;\n}\n\n/**\n * If endpoint discovery should perform for this request when no operation requires endpoint\n * discovery for the given service.\n * SDK performs config resolution in order like below:\n * 1. If set in client configuration.\n * 2. If set in env AWS_ENABLE_ENDPOINT_DISCOVERY.\n * 3. If set in shared ini config file with key 'endpoint_discovery_enabled'.\n * @param [object] request request object.\n * @returns [boolean|undefined] if endpoint discovery config is not set in any source, this\n * function returns undefined\n * @api private\n */\nfunction resolveEndpointDiscoveryConfig(request) {\n var service = request.service || {};\n if (service.config.endpointDiscoveryEnabled !== undefined) {\n return service.config.endpointDiscoveryEnabled;\n }\n\n //shared ini file is only available in Node\n //not to check env in browser\n if (util.isBrowser()) return undefined;\n\n // If any of recognized endpoint discovery config env is set\n for (var i = 0; i < endpointDiscoveryEnabledEnvs.length; i++) {\n var env = endpointDiscoveryEnabledEnvs[i];\n if (Object.prototype.hasOwnProperty.call(process.env, env)) {\n if (process.env[env] === '' || process.env[env] === undefined) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'environmental variable ' + env + ' cannot be set to nothing'\n });\n }\n return !isFalsy(process.env[env]);\n }\n }\n\n var configFile = {};\n try {\n configFile = AWS.util.iniLoader ? AWS.util.iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[AWS.util.sharedConfigFileEnv]\n }) : {};\n } catch (e) {}\n var sharedFileConfig = configFile[\n process.env.AWS_PROFILE || AWS.util.defaultProfile\n ] || {};\n if (Object.prototype.hasOwnProperty.call(sharedFileConfig, 'endpoint_discovery_enabled')) {\n if (sharedFileConfig.endpoint_discovery_enabled === undefined) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'config file entry \\'endpoint_discovery_enabled\\' cannot be set to nothing'\n });\n }\n return !isFalsy(sharedFileConfig.endpoint_discovery_enabled);\n }\n return undefined;\n}\n\n/**\n * attach endpoint discovery logic to request object\n * @param [object] request\n * @api private\n */\nfunction discoverEndpoint(request, done) {\n var service = request.service || {};\n if (hasCustomEndpoint(service) || request.isPresigned()) return done();\n\n var operations = service.api.operations || {};\n var operationModel = operations[request.operation];\n var isEndpointDiscoveryRequired = operationModel ? operationModel.endpointDiscoveryRequired : 'NULL';\n var isEnabled = resolveEndpointDiscoveryConfig(request);\n var hasRequiredEndpointDiscovery = service.api.hasRequiredEndpointDiscovery;\n if (isEnabled || hasRequiredEndpointDiscovery) {\n // Once a customer enables endpoint discovery, the SDK should start appending\n // the string endpoint-discovery to the user-agent on all requests.\n request.httpRequest.appendToUserAgent('endpoint-discovery');\n }\n switch (isEndpointDiscoveryRequired) {\n case 'OPTIONAL':\n if (isEnabled || hasRequiredEndpointDiscovery) {\n // For a given service; if at least one operation requires endpoint discovery then the SDK must enable endpoint discovery\n // by default for all operations of that service, including operations where endpoint discovery is optional.\n optionalDiscoverEndpoint(request);\n request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n }\n done();\n break;\n case 'REQUIRED':\n if (isEnabled === false) {\n // For a given operation; if endpoint discovery is required and it has been disabled on the SDK client,\n // then the SDK must return a clear and actionable exception.\n request.response.error = util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'Endpoint Discovery is disabled but ' + service.api.className + '.' + request.operation +\n '() requires it. Please check your configurations.'\n });\n done();\n break;\n }\n request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n requiredDiscoverEndpoint(request, done);\n break;\n case 'NULL':\n default:\n done();\n break;\n }\n}\n\nmodule.exports = {\n discoverEndpoint: discoverEndpoint,\n requiredDiscoverEndpoint: requiredDiscoverEndpoint,\n optionalDiscoverEndpoint: optionalDiscoverEndpoint,\n marshallCustomIdentifiers: marshallCustomIdentifiers,\n getCacheKey: getCacheKey,\n invalidateCachedEndpoint: invalidateCachedEndpoints,\n};\n","var eventMessageChunker = require('../event-stream/event-message-chunker').eventMessageChunker;\nvar parseEvent = require('./parse-event').parseEvent;\n\nfunction createEventStream(body, parser, model) {\n var eventMessages = eventMessageChunker(body);\n\n var events = [];\n\n for (var i = 0; i < eventMessages.length; i++) {\n events.push(parseEvent(parser, eventMessages[i], model));\n }\n\n return events;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n createEventStream: createEventStream\n};\n","/**\n * Takes in a buffer of event messages and splits them into individual messages.\n * @param {Buffer} buffer\n * @api private\n */\nfunction eventMessageChunker(buffer) {\n /** @type Buffer[] */\n var messages = [];\n var offset = 0;\n\n while (offset < buffer.length) {\n var totalLength = buffer.readInt32BE(offset);\n\n // create new buffer for individual message (shares memory with original)\n var message = buffer.slice(offset, totalLength + offset);\n // increment offset to it starts at the next message\n offset += totalLength;\n\n messages.push(message);\n }\n\n return messages;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n eventMessageChunker: eventMessageChunker\n};\n","var util = require('../core').util;\nvar toBuffer = util.buffer.toBuffer;\n\n/**\n * A lossless representation of a signed, 64-bit integer. Instances of this\n * class may be used in arithmetic expressions as if they were numeric\n * primitives, but the binary representation will be preserved unchanged as the\n * `bytes` property of the object. The bytes should be encoded as big-endian,\n * two's complement integers.\n * @param {Buffer} bytes\n *\n * @api private\n */\nfunction Int64(bytes) {\n if (bytes.length !== 8) {\n throw new Error('Int64 buffers must be exactly 8 bytes');\n }\n if (!util.Buffer.isBuffer(bytes)) bytes = toBuffer(bytes);\n\n this.bytes = bytes;\n}\n\n/**\n * @param {number} number\n * @returns {Int64}\n *\n * @api private\n */\nInt64.fromNumber = function(number) {\n if (number > 9223372036854775807 || number < -9223372036854775808) {\n throw new Error(\n number + ' is too large (or, if negative, too small) to represent as an Int64'\n );\n }\n\n var bytes = new Uint8Array(8);\n for (\n var i = 7, remaining = Math.abs(Math.round(number));\n i > -1 && remaining > 0;\n i--, remaining /= 256\n ) {\n bytes[i] = remaining;\n }\n\n if (number < 0) {\n negate(bytes);\n }\n\n return new Int64(bytes);\n};\n\n/**\n * @returns {number}\n *\n * @api private\n */\nInt64.prototype.valueOf = function() {\n var bytes = this.bytes.slice(0);\n var negative = bytes[0] & 128;\n if (negative) {\n negate(bytes);\n }\n\n return parseInt(bytes.toString('hex'), 16) * (negative ? -1 : 1);\n};\n\nInt64.prototype.toString = function() {\n return String(this.valueOf());\n};\n\n/**\n * @param {Buffer} bytes\n *\n * @api private\n */\nfunction negate(bytes) {\n for (var i = 0; i < 8; i++) {\n bytes[i] ^= 0xFF;\n }\n for (var i = 7; i > -1; i--) {\n bytes[i]++;\n if (bytes[i] !== 0) {\n break;\n }\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n Int64: Int64\n};\n","var parseMessage = require('./parse-message').parseMessage;\n\n/**\n *\n * @param {*} parser\n * @param {Buffer} message\n * @param {*} shape\n * @api private\n */\nfunction parseEvent(parser, message, shape) {\n var parsedMessage = parseMessage(message);\n\n // check if message is an event or error\n var messageType = parsedMessage.headers[':message-type'];\n if (messageType) {\n if (messageType.value === 'error') {\n throw parseError(parsedMessage);\n } else if (messageType.value !== 'event') {\n // not sure how to parse non-events/non-errors, ignore for now\n return;\n }\n }\n\n // determine event type\n var eventType = parsedMessage.headers[':event-type'];\n // check that the event type is modeled\n var eventModel = shape.members[eventType.value];\n if (!eventModel) {\n return;\n }\n\n var result = {};\n // check if an event payload exists\n var eventPayloadMemberName = eventModel.eventPayloadMemberName;\n if (eventPayloadMemberName) {\n var payloadShape = eventModel.members[eventPayloadMemberName];\n // if the shape is binary, return the byte array\n if (payloadShape.type === 'binary') {\n result[eventPayloadMemberName] = parsedMessage.body;\n } else {\n result[eventPayloadMemberName] = parser.parse(parsedMessage.body.toString(), payloadShape);\n }\n }\n\n // read event headers\n var eventHeaderNames = eventModel.eventHeaderMemberNames;\n for (var i = 0; i < eventHeaderNames.length; i++) {\n var name = eventHeaderNames[i];\n if (parsedMessage.headers[name]) {\n // parse the header!\n result[name] = eventModel.members[name].toType(parsedMessage.headers[name].value);\n }\n }\n\n var output = {};\n output[eventType.value] = result;\n return output;\n}\n\nfunction parseError(message) {\n var errorCode = message.headers[':error-code'];\n var errorMessage = message.headers[':error-message'];\n var error = new Error(errorMessage.value || errorMessage);\n error.code = error.name = errorCode.value || errorCode;\n return error;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n parseEvent: parseEvent\n};\n","var Int64 = require('./int64').Int64;\n\nvar splitMessage = require('./split-message').splitMessage;\n\nvar BOOLEAN_TAG = 'boolean';\nvar BYTE_TAG = 'byte';\nvar SHORT_TAG = 'short';\nvar INT_TAG = 'integer';\nvar LONG_TAG = 'long';\nvar BINARY_TAG = 'binary';\nvar STRING_TAG = 'string';\nvar TIMESTAMP_TAG = 'timestamp';\nvar UUID_TAG = 'uuid';\n\n/**\n * @api private\n *\n * @param {Buffer} headers\n */\nfunction parseHeaders(headers) {\n var out = {};\n var position = 0;\n while (position < headers.length) {\n var nameLength = headers.readUInt8(position++);\n var name = headers.slice(position, position + nameLength).toString();\n position += nameLength;\n switch (headers.readUInt8(position++)) {\n case 0 /* boolTrue */:\n out[name] = {\n type: BOOLEAN_TAG,\n value: true\n };\n break;\n case 1 /* boolFalse */:\n out[name] = {\n type: BOOLEAN_TAG,\n value: false\n };\n break;\n case 2 /* byte */:\n out[name] = {\n type: BYTE_TAG,\n value: headers.readInt8(position++)\n };\n break;\n case 3 /* short */:\n out[name] = {\n type: SHORT_TAG,\n value: headers.readInt16BE(position)\n };\n position += 2;\n break;\n case 4 /* integer */:\n out[name] = {\n type: INT_TAG,\n value: headers.readInt32BE(position)\n };\n position += 4;\n break;\n case 5 /* long */:\n out[name] = {\n type: LONG_TAG,\n value: new Int64(headers.slice(position, position + 8))\n };\n position += 8;\n break;\n case 6 /* byteArray */:\n var binaryLength = headers.readUInt16BE(position);\n position += 2;\n out[name] = {\n type: BINARY_TAG,\n value: headers.slice(position, position + binaryLength)\n };\n position += binaryLength;\n break;\n case 7 /* string */:\n var stringLength = headers.readUInt16BE(position);\n position += 2;\n out[name] = {\n type: STRING_TAG,\n value: headers.slice(\n position,\n position + stringLength\n ).toString()\n };\n position += stringLength;\n break;\n case 8 /* timestamp */:\n out[name] = {\n type: TIMESTAMP_TAG,\n value: new Date(\n new Int64(headers.slice(position, position + 8))\n .valueOf()\n )\n };\n position += 8;\n break;\n case 9 /* uuid */:\n var uuidChars = headers.slice(position, position + 16)\n .toString('hex');\n position += 16;\n out[name] = {\n type: UUID_TAG,\n value: uuidChars.substr(0, 8) + '-' +\n uuidChars.substr(8, 4) + '-' +\n uuidChars.substr(12, 4) + '-' +\n uuidChars.substr(16, 4) + '-' +\n uuidChars.substr(20)\n };\n break;\n default:\n throw new Error('Unrecognized header type tag');\n }\n }\n return out;\n}\n\nfunction parseMessage(message) {\n var parsed = splitMessage(message);\n return { headers: parseHeaders(parsed.headers), body: parsed.body };\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n parseMessage: parseMessage\n};\n","var util = require('../core').util;\nvar toBuffer = util.buffer.toBuffer;\n\n// All prelude components are unsigned, 32-bit integers\nvar PRELUDE_MEMBER_LENGTH = 4;\n// The prelude consists of two components\nvar PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2;\n// Checksums are always CRC32 hashes.\nvar CHECKSUM_LENGTH = 4;\n// Messages must include a full prelude, a prelude checksum, and a message checksum\nvar MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;\n\n/**\n * @api private\n *\n * @param {Buffer} message\n */\nfunction splitMessage(message) {\n if (!util.Buffer.isBuffer(message)) message = toBuffer(message);\n\n if (message.length < MINIMUM_MESSAGE_LENGTH) {\n throw new Error('Provided message too short to accommodate event stream message overhead');\n }\n\n if (message.length !== message.readUInt32BE(0)) {\n throw new Error('Reported message length does not match received message length');\n }\n\n var expectedPreludeChecksum = message.readUInt32BE(PRELUDE_LENGTH);\n\n if (\n expectedPreludeChecksum !== util.crypto.crc32(\n message.slice(0, PRELUDE_LENGTH)\n )\n ) {\n throw new Error(\n 'The prelude checksum specified in the message (' +\n expectedPreludeChecksum +\n ') does not match the calculated CRC32 checksum.'\n );\n }\n\n var expectedMessageChecksum = message.readUInt32BE(message.length - CHECKSUM_LENGTH);\n\n if (\n expectedMessageChecksum !== util.crypto.crc32(\n message.slice(0, message.length - CHECKSUM_LENGTH)\n )\n ) {\n throw new Error(\n 'The message checksum did not match the expected value of ' +\n expectedMessageChecksum\n );\n }\n\n var headersStart = PRELUDE_LENGTH + CHECKSUM_LENGTH;\n var headersEnd = headersStart + message.readUInt32BE(PRELUDE_MEMBER_LENGTH);\n\n return {\n headers: message.slice(headersStart, headersEnd),\n body: message.slice(headersEnd, message.length - CHECKSUM_LENGTH),\n };\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n splitMessage: splitMessage\n};\n","var AWS = require('./core');\nvar SequentialExecutor = require('./sequential_executor');\nvar DISCOVER_ENDPOINT = require('./discover_endpoint').discoverEndpoint;\n/**\n * The namespace used to register global event listeners for request building\n * and sending.\n */\nAWS.EventListeners = {\n /**\n * @!attribute VALIDATE_CREDENTIALS\n * A request listener that validates whether the request is being\n * sent with credentials.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating credentials\n * var listener = AWS.EventListeners.Core.VALIDATE_CREDENTIALS;\n * request.removeListener('validate', listener);\n * @readonly\n * @return [Function]\n * @!attribute VALIDATE_REGION\n * A request listener that validates whether the region is set\n * for a request.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating region configuration\n * var listener = AWS.EventListeners.Core.VALIDATE_REGION;\n * request.removeListener('validate', listener);\n * @readonly\n * @return [Function]\n * @!attribute VALIDATE_PARAMETERS\n * A request listener that validates input parameters in a request.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating parameters\n * var listener = AWS.EventListeners.Core.VALIDATE_PARAMETERS;\n * request.removeListener('validate', listener);\n * @example Disable parameter validation globally\n * AWS.EventListeners.Core.removeListener('validate',\n * AWS.EventListeners.Core.VALIDATE_REGION);\n * @readonly\n * @return [Function]\n * @!attribute SEND\n * A request listener that initiates the HTTP connection for a\n * request being sent. Handles the {AWS.Request~send 'send' Request event}\n * @example Replacing the HTTP handler\n * var listener = AWS.EventListeners.Core.SEND;\n * request.removeListener('send', listener);\n * request.on('send', function(response) {\n * customHandler.send(response);\n * });\n * @return [Function]\n * @readonly\n * @!attribute HTTP_DATA\n * A request listener that reads data from the HTTP connection in order\n * to build the response data.\n * Handles the {AWS.Request~httpData 'httpData' Request event}.\n * Remove this handler if you are overriding the 'httpData' event and\n * do not want extra data processing and buffering overhead.\n * @example Disabling default data processing\n * var listener = AWS.EventListeners.Core.HTTP_DATA;\n * request.removeListener('httpData', listener);\n * @return [Function]\n * @readonly\n */\n Core: {} /* doc hack */\n};\n\n/**\n * @api private\n */\nfunction getOperationAuthtype(req) {\n if (!req.service.api.operations) {\n return '';\n }\n var operation = req.service.api.operations[req.operation];\n return operation ? operation.authtype : '';\n}\n\n/**\n * @api private\n */\nfunction getIdentityType(req) {\n var service = req.service;\n\n if (service.config.signatureVersion) {\n return service.config.signatureVersion;\n }\n\n if (service.api.signatureVersion) {\n return service.api.signatureVersion;\n }\n\n return getOperationAuthtype(req);\n}\n\nAWS.EventListeners = {\n Core: new SequentialExecutor().addNamedListeners(function(add, addAsync) {\n addAsync(\n 'VALIDATE_CREDENTIALS', 'validate',\n function VALIDATE_CREDENTIALS(req, done) {\n if (!req.service.api.signatureVersion && !req.service.config.signatureVersion) return done(); // none\n\n var identityType = getIdentityType(req);\n if (identityType === 'bearer') {\n req.service.config.getToken(function(err) {\n if (err) {\n req.response.error = AWS.util.error(err, {code: 'TokenError'});\n }\n done();\n });\n return;\n }\n\n req.service.config.getCredentials(function(err) {\n if (err) {\n req.response.error = AWS.util.error(err,\n {\n code: 'CredentialsError',\n message: 'Missing credentials in config, if using AWS_CONFIG_FILE, set AWS_SDK_LOAD_CONFIG=1'\n }\n );\n }\n done();\n });\n });\n\n add('VALIDATE_REGION', 'validate', function VALIDATE_REGION(req) {\n if (!req.service.isGlobalEndpoint) {\n var dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);\n if (!req.service.config.region) {\n req.response.error = AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Missing region in config'});\n } else if (!dnsHostRegex.test(req.service.config.region)) {\n req.response.error = AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Invalid region in config'});\n }\n }\n });\n\n add('BUILD_IDEMPOTENCY_TOKENS', 'validate', function BUILD_IDEMPOTENCY_TOKENS(req) {\n if (!req.service.api.operations) {\n return;\n }\n var operation = req.service.api.operations[req.operation];\n if (!operation) {\n return;\n }\n var idempotentMembers = operation.idempotentMembers;\n if (!idempotentMembers.length) {\n return;\n }\n // creates a copy of params so user's param object isn't mutated\n var params = AWS.util.copy(req.params);\n for (var i = 0, iLen = idempotentMembers.length; i < iLen; i++) {\n if (!params[idempotentMembers[i]]) {\n // add the member\n params[idempotentMembers[i]] = AWS.util.uuid.v4();\n }\n }\n req.params = params;\n });\n\n add('VALIDATE_PARAMETERS', 'validate', function VALIDATE_PARAMETERS(req) {\n if (!req.service.api.operations) {\n return;\n }\n var rules = req.service.api.operations[req.operation].input;\n var validation = req.service.config.paramValidation;\n new AWS.ParamValidator(validation).validate(rules, req.params);\n });\n\n add('COMPUTE_CHECKSUM', 'afterBuild', function COMPUTE_CHECKSUM(req) {\n if (!req.service.api.operations) {\n return;\n }\n var operation = req.service.api.operations[req.operation];\n if (!operation) {\n return;\n }\n var body = req.httpRequest.body;\n var isNonStreamingPayload = body && (AWS.util.Buffer.isBuffer(body) || typeof body === 'string');\n var headers = req.httpRequest.headers;\n if (\n operation.httpChecksumRequired &&\n req.service.config.computeChecksums &&\n isNonStreamingPayload &&\n !headers['Content-MD5']\n ) {\n var md5 = AWS.util.crypto.md5(body, 'base64');\n headers['Content-MD5'] = md5;\n }\n });\n\n addAsync('COMPUTE_SHA256', 'afterBuild', function COMPUTE_SHA256(req, done) {\n req.haltHandlersOnError();\n if (!req.service.api.operations) {\n return;\n }\n var operation = req.service.api.operations[req.operation];\n var authtype = operation ? operation.authtype : '';\n if (!req.service.api.signatureVersion && !authtype && !req.service.config.signatureVersion) return done(); // none\n if (req.service.getSignerClass(req) === AWS.Signers.V4) {\n var body = req.httpRequest.body || '';\n if (authtype.indexOf('unsigned-body') >= 0) {\n req.httpRequest.headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n return done();\n }\n AWS.util.computeSha256(body, function(err, sha) {\n if (err) {\n done(err);\n }\n else {\n req.httpRequest.headers['X-Amz-Content-Sha256'] = sha;\n done();\n }\n });\n } else {\n done();\n }\n });\n\n add('SET_CONTENT_LENGTH', 'afterBuild', function SET_CONTENT_LENGTH(req) {\n var authtype = getOperationAuthtype(req);\n var payloadMember = AWS.util.getRequestPayloadShape(req);\n if (req.httpRequest.headers['Content-Length'] === undefined) {\n try {\n var length = AWS.util.string.byteLength(req.httpRequest.body);\n req.httpRequest.headers['Content-Length'] = length;\n } catch (err) {\n if (payloadMember && payloadMember.isStreaming) {\n if (payloadMember.requiresLength) {\n //streaming payload requires length(s3, glacier)\n throw err;\n } else if (authtype.indexOf('unsigned-body') >= 0) {\n //unbounded streaming payload(lex, mediastore)\n req.httpRequest.headers['Transfer-Encoding'] = 'chunked';\n return;\n } else {\n throw err;\n }\n }\n throw err;\n }\n }\n });\n\n add('SET_HTTP_HOST', 'afterBuild', function SET_HTTP_HOST(req) {\n req.httpRequest.headers['Host'] = req.httpRequest.endpoint.host;\n });\n\n add('SET_TRACE_ID', 'afterBuild', function SET_TRACE_ID(req) {\n var traceIdHeaderName = 'X-Amzn-Trace-Id';\n if (AWS.util.isNode() && !Object.hasOwnProperty.call(req.httpRequest.headers, traceIdHeaderName)) {\n var ENV_LAMBDA_FUNCTION_NAME = 'AWS_LAMBDA_FUNCTION_NAME';\n var ENV_TRACE_ID = '_X_AMZN_TRACE_ID';\n var functionName = process.env[ENV_LAMBDA_FUNCTION_NAME];\n var traceId = process.env[ENV_TRACE_ID];\n if (\n typeof functionName === 'string' &&\n functionName.length > 0 &&\n typeof traceId === 'string' &&\n traceId.length > 0\n ) {\n req.httpRequest.headers[traceIdHeaderName] = traceId;\n }\n }\n });\n\n add('RESTART', 'restart', function RESTART() {\n var err = this.response.error;\n if (!err || !err.retryable) return;\n\n this.httpRequest = new AWS.HttpRequest(\n this.service.endpoint,\n this.service.region\n );\n\n if (this.response.retryCount < this.service.config.maxRetries) {\n this.response.retryCount++;\n } else {\n this.response.error = null;\n }\n });\n\n var addToHead = true;\n addAsync('DISCOVER_ENDPOINT', 'sign', DISCOVER_ENDPOINT, addToHead);\n\n addAsync('SIGN', 'sign', function SIGN(req, done) {\n var service = req.service;\n var identityType = getIdentityType(req);\n if (!identityType || identityType.length === 0) return done(); // none\n\n if (identityType === 'bearer') {\n service.config.getToken(function (err, token) {\n if (err) {\n req.response.error = err;\n return done();\n }\n\n try {\n var SignerClass = service.getSignerClass(req);\n var signer = new SignerClass(req.httpRequest);\n signer.addAuthorization(token);\n } catch (e) {\n req.response.error = e;\n }\n done();\n });\n } else {\n service.config.getCredentials(function (err, credentials) {\n if (err) {\n req.response.error = err;\n return done();\n }\n\n try {\n var date = service.getSkewCorrectedDate();\n var SignerClass = service.getSignerClass(req);\n var operations = req.service.api.operations || {};\n var operation = operations[req.operation];\n var signer = new SignerClass(req.httpRequest,\n service.getSigningName(req),\n {\n signatureCache: service.config.signatureCache,\n operation: operation,\n signatureVersion: service.api.signatureVersion\n });\n signer.setServiceClientId(service._clientId);\n\n // clear old authorization headers\n delete req.httpRequest.headers['Authorization'];\n delete req.httpRequest.headers['Date'];\n delete req.httpRequest.headers['X-Amz-Date'];\n\n // add new authorization\n signer.addAuthorization(credentials, date);\n req.signedAt = date;\n } catch (e) {\n req.response.error = e;\n }\n done();\n });\n\n }\n });\n\n add('VALIDATE_RESPONSE', 'validateResponse', function VALIDATE_RESPONSE(resp) {\n if (this.service.successfulResponse(resp, this)) {\n resp.data = {};\n resp.error = null;\n } else {\n resp.data = null;\n resp.error = AWS.util.error(new Error(),\n {code: 'UnknownError', message: 'An unknown error occurred.'});\n }\n });\n\n add('ERROR', 'error', function ERROR(err, resp) {\n var awsQueryCompatible = resp.request.service.api.awsQueryCompatible;\n if (awsQueryCompatible) {\n var headers = resp.httpResponse.headers;\n var queryErrorCode = headers ? headers['x-amzn-query-error'] : undefined;\n if (queryErrorCode && queryErrorCode.includes(';')) {\n resp.error.code = queryErrorCode.split(';')[0];\n }\n }\n }, true);\n\n addAsync('SEND', 'send', function SEND(resp, done) {\n resp.httpResponse._abortCallback = done;\n resp.error = null;\n resp.data = null;\n\n function callback(httpResp) {\n resp.httpResponse.stream = httpResp;\n var stream = resp.request.httpRequest.stream;\n var service = resp.request.service;\n var api = service.api;\n var operationName = resp.request.operation;\n var operation = api.operations[operationName] || {};\n\n httpResp.on('headers', function onHeaders(statusCode, headers, statusMessage) {\n resp.request.emit(\n 'httpHeaders',\n [statusCode, headers, resp, statusMessage]\n );\n\n if (!resp.httpResponse.streaming) {\n if (AWS.HttpClient.streamsApiVersion === 2) { // streams2 API check\n // if we detect event streams, we're going to have to\n // return the stream immediately\n if (operation.hasEventOutput && service.successfulResponse(resp)) {\n // skip reading the IncomingStream\n resp.request.emit('httpDone');\n done();\n return;\n }\n\n httpResp.on('readable', function onReadable() {\n var data = httpResp.read();\n if (data !== null) {\n resp.request.emit('httpData', [data, resp]);\n }\n });\n } else { // legacy streams API\n httpResp.on('data', function onData(data) {\n resp.request.emit('httpData', [data, resp]);\n });\n }\n }\n });\n\n httpResp.on('end', function onEnd() {\n if (!stream || !stream.didCallback) {\n if (AWS.HttpClient.streamsApiVersion === 2 && (operation.hasEventOutput && service.successfulResponse(resp))) {\n // don't concatenate response chunks when streaming event stream data when response is successful\n return;\n }\n resp.request.emit('httpDone');\n done();\n }\n });\n }\n\n function progress(httpResp) {\n httpResp.on('sendProgress', function onSendProgress(value) {\n resp.request.emit('httpUploadProgress', [value, resp]);\n });\n\n httpResp.on('receiveProgress', function onReceiveProgress(value) {\n resp.request.emit('httpDownloadProgress', [value, resp]);\n });\n }\n\n function error(err) {\n if (err.code !== 'RequestAbortedError') {\n var errCode = err.code === 'TimeoutError' ? err.code : 'NetworkingError';\n err = AWS.util.error(err, {\n code: errCode,\n region: resp.request.httpRequest.region,\n hostname: resp.request.httpRequest.endpoint.hostname,\n retryable: true\n });\n }\n resp.error = err;\n resp.request.emit('httpError', [resp.error, resp], function() {\n done();\n });\n }\n\n function executeSend() {\n var http = AWS.HttpClient.getInstance();\n var httpOptions = resp.request.service.config.httpOptions || {};\n try {\n var stream = http.handleRequest(resp.request.httpRequest, httpOptions,\n callback, error);\n progress(stream);\n } catch (err) {\n error(err);\n }\n }\n var timeDiff = (resp.request.service.getSkewCorrectedDate() - this.signedAt) / 1000;\n if (timeDiff >= 60 * 10) { // if we signed 10min ago, re-sign\n this.emit('sign', [this], function(err) {\n if (err) done(err);\n else executeSend();\n });\n } else {\n executeSend();\n }\n });\n\n add('HTTP_HEADERS', 'httpHeaders',\n function HTTP_HEADERS(statusCode, headers, resp, statusMessage) {\n resp.httpResponse.statusCode = statusCode;\n resp.httpResponse.statusMessage = statusMessage;\n resp.httpResponse.headers = headers;\n resp.httpResponse.body = AWS.util.buffer.toBuffer('');\n resp.httpResponse.buffers = [];\n resp.httpResponse.numBytes = 0;\n var dateHeader = headers.date || headers.Date;\n var service = resp.request.service;\n if (dateHeader) {\n var serverTime = Date.parse(dateHeader);\n if (service.config.correctClockSkew\n && service.isClockSkewed(serverTime)) {\n service.applyClockOffset(serverTime);\n }\n }\n });\n\n add('HTTP_DATA', 'httpData', function HTTP_DATA(chunk, resp) {\n if (chunk) {\n if (AWS.util.isNode()) {\n resp.httpResponse.numBytes += chunk.length;\n\n var total = resp.httpResponse.headers['content-length'];\n var progress = { loaded: resp.httpResponse.numBytes, total: total };\n resp.request.emit('httpDownloadProgress', [progress, resp]);\n }\n\n resp.httpResponse.buffers.push(AWS.util.buffer.toBuffer(chunk));\n }\n });\n\n add('HTTP_DONE', 'httpDone', function HTTP_DONE(resp) {\n // convert buffers array into single buffer\n if (resp.httpResponse.buffers && resp.httpResponse.buffers.length > 0) {\n var body = AWS.util.buffer.concat(resp.httpResponse.buffers);\n resp.httpResponse.body = body;\n }\n delete resp.httpResponse.numBytes;\n delete resp.httpResponse.buffers;\n });\n\n add('FINALIZE_ERROR', 'retry', function FINALIZE_ERROR(resp) {\n if (resp.httpResponse.statusCode) {\n resp.error.statusCode = resp.httpResponse.statusCode;\n if (resp.error.retryable === undefined) {\n resp.error.retryable = this.service.retryableError(resp.error, this);\n }\n }\n });\n\n add('INVALIDATE_CREDENTIALS', 'retry', function INVALIDATE_CREDENTIALS(resp) {\n if (!resp.error) return;\n switch (resp.error.code) {\n case 'RequestExpired': // EC2 only\n case 'ExpiredTokenException':\n case 'ExpiredToken':\n resp.error.retryable = true;\n resp.request.service.config.credentials.expired = true;\n }\n });\n\n add('EXPIRED_SIGNATURE', 'retry', function EXPIRED_SIGNATURE(resp) {\n var err = resp.error;\n if (!err) return;\n if (typeof err.code === 'string' && typeof err.message === 'string') {\n if (err.code.match(/Signature/) && err.message.match(/expired/)) {\n resp.error.retryable = true;\n }\n }\n });\n\n add('CLOCK_SKEWED', 'retry', function CLOCK_SKEWED(resp) {\n if (!resp.error) return;\n if (this.service.clockSkewError(resp.error)\n && this.service.config.correctClockSkew) {\n resp.error.retryable = true;\n }\n });\n\n add('REDIRECT', 'retry', function REDIRECT(resp) {\n if (resp.error && resp.error.statusCode >= 300 &&\n resp.error.statusCode < 400 && resp.httpResponse.headers['location']) {\n this.httpRequest.endpoint =\n new AWS.Endpoint(resp.httpResponse.headers['location']);\n this.httpRequest.headers['Host'] = this.httpRequest.endpoint.host;\n resp.error.redirect = true;\n resp.error.retryable = true;\n }\n });\n\n add('RETRY_CHECK', 'retry', function RETRY_CHECK(resp) {\n if (resp.error) {\n if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n resp.error.retryDelay = 0;\n } else if (resp.retryCount < resp.maxRetries) {\n resp.error.retryDelay = this.service.retryDelays(resp.retryCount, resp.error) || 0;\n }\n }\n });\n\n addAsync('RESET_RETRY_STATE', 'afterRetry', function RESET_RETRY_STATE(resp, done) {\n var delay, willRetry = false;\n\n if (resp.error) {\n delay = resp.error.retryDelay || 0;\n if (resp.error.retryable && resp.retryCount < resp.maxRetries) {\n resp.retryCount++;\n willRetry = true;\n } else if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n resp.redirectCount++;\n willRetry = true;\n }\n }\n\n // delay < 0 is a signal from customBackoff to skip retries\n if (willRetry && delay >= 0) {\n resp.error = null;\n setTimeout(done, delay);\n } else {\n done();\n }\n });\n }),\n\n CorePost: new SequentialExecutor().addNamedListeners(function(add) {\n add('EXTRACT_REQUEST_ID', 'extractData', AWS.util.extractRequestId);\n add('EXTRACT_REQUEST_ID', 'extractError', AWS.util.extractRequestId);\n\n add('ENOTFOUND_ERROR', 'httpError', function ENOTFOUND_ERROR(err) {\n function isDNSError(err) {\n return err.errno === 'ENOTFOUND' ||\n typeof err.errno === 'number' &&\n typeof AWS.util.getSystemErrorName === 'function' &&\n ['EAI_NONAME', 'EAI_NODATA'].indexOf(AWS.util.getSystemErrorName(err.errno) >= 0);\n }\n if (err.code === 'NetworkingError' && isDNSError(err)) {\n var message = 'Inaccessible host: `' + err.hostname + '\\' at port `' + err.port +\n '\\'. This service may not be available in the `' + err.region +\n '\\' region.';\n this.response.error = AWS.util.error(new Error(message), {\n code: 'UnknownEndpoint',\n region: err.region,\n hostname: err.hostname,\n retryable: true,\n originalError: err\n });\n }\n });\n }),\n\n Logger: new SequentialExecutor().addNamedListeners(function(add) {\n add('LOG_REQUEST', 'complete', function LOG_REQUEST(resp) {\n var req = resp.request;\n var logger = req.service.config.logger;\n if (!logger) return;\n function filterSensitiveLog(inputShape, shape) {\n if (!shape) {\n return shape;\n }\n if (inputShape.isSensitive) {\n return '***SensitiveInformation***';\n }\n switch (inputShape.type) {\n case 'structure':\n var struct = {};\n AWS.util.each(shape, function(subShapeName, subShape) {\n if (Object.prototype.hasOwnProperty.call(inputShape.members, subShapeName)) {\n struct[subShapeName] = filterSensitiveLog(inputShape.members[subShapeName], subShape);\n } else {\n struct[subShapeName] = subShape;\n }\n });\n return struct;\n case 'list':\n var list = [];\n AWS.util.arrayEach(shape, function(subShape, index) {\n list.push(filterSensitiveLog(inputShape.member, subShape));\n });\n return list;\n case 'map':\n var map = {};\n AWS.util.each(shape, function(key, value) {\n map[key] = filterSensitiveLog(inputShape.value, value);\n });\n return map;\n default:\n return shape;\n }\n }\n\n function buildMessage() {\n var time = resp.request.service.getSkewCorrectedDate().getTime();\n var delta = (time - req.startTime.getTime()) / 1000;\n var ansi = logger.isTTY ? true : false;\n var status = resp.httpResponse.statusCode;\n var censoredParams = req.params;\n if (\n req.service.api.operations &&\n req.service.api.operations[req.operation] &&\n req.service.api.operations[req.operation].input\n ) {\n var inputShape = req.service.api.operations[req.operation].input;\n censoredParams = filterSensitiveLog(inputShape, req.params);\n }\n var params = require('util').inspect(censoredParams, true, null);\n var message = '';\n if (ansi) message += '\\x1B[33m';\n message += '[AWS ' + req.service.serviceIdentifier + ' ' + status;\n message += ' ' + delta.toString() + 's ' + resp.retryCount + ' retries]';\n if (ansi) message += '\\x1B[0;1m';\n message += ' ' + AWS.util.string.lowerFirst(req.operation);\n message += '(' + params + ')';\n if (ansi) message += '\\x1B[0m';\n return message;\n }\n\n var line = buildMessage();\n if (typeof logger.log === 'function') {\n logger.log(line);\n } else if (typeof logger.write === 'function') {\n logger.write(line + '\\n');\n }\n });\n }),\n\n Json: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/json');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n Rest: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n RestJson: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest_json');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n add('UNSET_CONTENT_LENGTH', 'afterBuild', svc.unsetContentLength);\n }),\n\n RestXml: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/rest_xml');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n\n Query: new SequentialExecutor().addNamedListeners(function(add) {\n var svc = require('./protocol/query');\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n })\n};\n","var AWS = require('./core');\nvar inherit = AWS.util.inherit;\n\n/**\n * The endpoint that a service will talk to, for example,\n * `'https://ec2.ap-southeast-1.amazonaws.com'`. If\n * you need to override an endpoint for a service, you can\n * set the endpoint on a service by passing the endpoint\n * object with the `endpoint` option key:\n *\n * ```javascript\n * var ep = new AWS.Endpoint('awsproxy.example.com');\n * var s3 = new AWS.S3({endpoint: ep});\n * s3.service.endpoint.hostname == 'awsproxy.example.com'\n * ```\n *\n * Note that if you do not specify a protocol, the protocol will\n * be selected based on your current {AWS.config} configuration.\n *\n * @!attribute protocol\n * @return [String] the protocol (http or https) of the endpoint\n * URL\n * @!attribute hostname\n * @return [String] the host portion of the endpoint, e.g.,\n * example.com\n * @!attribute host\n * @return [String] the host portion of the endpoint including\n * the port, e.g., example.com:80\n * @!attribute port\n * @return [Integer] the port of the endpoint\n * @!attribute href\n * @return [String] the full URL of the endpoint\n */\nAWS.Endpoint = inherit({\n\n /**\n * @overload Endpoint(endpoint)\n * Constructs a new endpoint given an endpoint URL. If the\n * URL omits a protocol (http or https), the default protocol\n * set in the global {AWS.config} will be used.\n * @param endpoint [String] the URL to construct an endpoint from\n */\n constructor: function Endpoint(endpoint, config) {\n AWS.util.hideProperties(this, ['slashes', 'auth', 'hash', 'search', 'query']);\n\n if (typeof endpoint === 'undefined' || endpoint === null) {\n throw new Error('Invalid endpoint: ' + endpoint);\n } else if (typeof endpoint !== 'string') {\n return AWS.util.copy(endpoint);\n }\n\n if (!endpoint.match(/^http/)) {\n var useSSL = config && config.sslEnabled !== undefined ?\n config.sslEnabled : AWS.config.sslEnabled;\n endpoint = (useSSL ? 'https' : 'http') + '://' + endpoint;\n }\n\n AWS.util.update(this, AWS.util.urlParse(endpoint));\n\n // Ensure the port property is set as an integer\n if (this.port) {\n this.port = parseInt(this.port, 10);\n } else {\n this.port = this.protocol === 'https:' ? 443 : 80;\n }\n }\n\n});\n\n/**\n * The low level HTTP request object, encapsulating all HTTP header\n * and body data sent by a service request.\n *\n * @!attribute method\n * @return [String] the HTTP method of the request\n * @!attribute path\n * @return [String] the path portion of the URI, e.g.,\n * \"/list/?start=5&num=10\"\n * @!attribute headers\n * @return [map]\n * a map of header keys and their respective values\n * @!attribute body\n * @return [String] the request body payload\n * @!attribute endpoint\n * @return [AWS.Endpoint] the endpoint for the request\n * @!attribute region\n * @api private\n * @return [String] the region, for signing purposes only.\n */\nAWS.HttpRequest = inherit({\n\n /**\n * @api private\n */\n constructor: function HttpRequest(endpoint, region) {\n endpoint = new AWS.Endpoint(endpoint);\n this.method = 'POST';\n this.path = endpoint.path || '/';\n this.headers = {};\n this.body = '';\n this.endpoint = endpoint;\n this.region = region;\n this._userAgent = '';\n this.setUserAgent();\n },\n\n /**\n * @api private\n */\n setUserAgent: function setUserAgent() {\n this._userAgent = this.headers[this.getUserAgentHeaderName()] = AWS.util.userAgent();\n },\n\n getUserAgentHeaderName: function getUserAgentHeaderName() {\n var prefix = AWS.util.isBrowser() ? 'X-Amz-' : '';\n return prefix + 'User-Agent';\n },\n\n /**\n * @api private\n */\n appendToUserAgent: function appendToUserAgent(agentPartial) {\n if (typeof agentPartial === 'string' && agentPartial) {\n this._userAgent += ' ' + agentPartial;\n }\n this.headers[this.getUserAgentHeaderName()] = this._userAgent;\n },\n\n /**\n * @api private\n */\n getUserAgent: function getUserAgent() {\n return this._userAgent;\n },\n\n /**\n * @return [String] the part of the {path} excluding the\n * query string\n */\n pathname: function pathname() {\n return this.path.split('?', 1)[0];\n },\n\n /**\n * @return [String] the query string portion of the {path}\n */\n search: function search() {\n var query = this.path.split('?', 2)[1];\n if (query) {\n query = AWS.util.queryStringParse(query);\n return AWS.util.queryParamsToString(query);\n }\n return '';\n },\n\n /**\n * @api private\n * update httpRequest endpoint with endpoint string\n */\n updateEndpoint: function updateEndpoint(endpointStr) {\n var newEndpoint = new AWS.Endpoint(endpointStr);\n this.endpoint = newEndpoint;\n this.path = newEndpoint.path || '/';\n if (this.headers['Host']) {\n this.headers['Host'] = newEndpoint.host;\n }\n }\n});\n\n/**\n * The low level HTTP response object, encapsulating all HTTP header\n * and body data returned from the request.\n *\n * @!attribute statusCode\n * @return [Integer] the HTTP status code of the response (e.g., 200, 404)\n * @!attribute headers\n * @return [map]\n * a map of response header keys and their respective values\n * @!attribute body\n * @return [String] the response body payload\n * @!attribute [r] streaming\n * @return [Boolean] whether this response is being streamed at a low-level.\n * Defaults to `false` (buffered reads). Do not modify this manually, use\n * {createUnbufferedStream} to convert the stream to unbuffered mode\n * instead.\n */\nAWS.HttpResponse = inherit({\n\n /**\n * @api private\n */\n constructor: function HttpResponse() {\n this.statusCode = undefined;\n this.headers = {};\n this.body = undefined;\n this.streaming = false;\n this.stream = null;\n },\n\n /**\n * Disables buffering on the HTTP response and returns the stream for reading.\n * @return [Stream, XMLHttpRequest, null] the underlying stream object.\n * Use this object to directly read data off of the stream.\n * @note This object is only available after the {AWS.Request~httpHeaders}\n * event has fired. This method must be called prior to\n * {AWS.Request~httpData}.\n * @example Taking control of a stream\n * request.on('httpHeaders', function(statusCode, headers) {\n * if (statusCode < 300) {\n * if (headers.etag === 'xyz') {\n * // pipe the stream, disabling buffering\n * var stream = this.response.httpResponse.createUnbufferedStream();\n * stream.pipe(process.stdout);\n * } else { // abort this request and set a better error message\n * this.abort();\n * this.response.error = new Error('Invalid ETag');\n * }\n * }\n * }).send(console.log);\n */\n createUnbufferedStream: function createUnbufferedStream() {\n this.streaming = true;\n return this.stream;\n }\n});\n\n\nAWS.HttpClient = inherit({});\n\n/**\n * @api private\n */\nAWS.HttpClient.getInstance = function getInstance() {\n if (this.singleton === undefined) {\n this.singleton = new this();\n }\n return this.singleton;\n};\n","var AWS = require('../core');\nvar EventEmitter = require('events').EventEmitter;\nrequire('../http');\n\n/**\n * @api private\n */\nAWS.XHRClient = AWS.util.inherit({\n handleRequest: function handleRequest(httpRequest, httpOptions, callback, errCallback) {\n var self = this;\n var endpoint = httpRequest.endpoint;\n var emitter = new EventEmitter();\n var href = endpoint.protocol + '//' + endpoint.hostname;\n if (endpoint.port !== 80 && endpoint.port !== 443) {\n href += ':' + endpoint.port;\n }\n href += httpRequest.path;\n\n var xhr = new XMLHttpRequest(), headersEmitted = false;\n httpRequest.stream = xhr;\n\n xhr.addEventListener('readystatechange', function() {\n try {\n if (xhr.status === 0) return; // 0 code is invalid\n } catch (e) { return; }\n\n if (this.readyState >= this.HEADERS_RECEIVED && !headersEmitted) {\n emitter.statusCode = xhr.status;\n emitter.headers = self.parseHeaders(xhr.getAllResponseHeaders());\n emitter.emit(\n 'headers',\n emitter.statusCode,\n emitter.headers,\n xhr.statusText\n );\n headersEmitted = true;\n }\n if (this.readyState === this.DONE) {\n self.finishRequest(xhr, emitter);\n }\n }, false);\n xhr.upload.addEventListener('progress', function (evt) {\n emitter.emit('sendProgress', evt);\n });\n xhr.addEventListener('progress', function (evt) {\n emitter.emit('receiveProgress', evt);\n }, false);\n xhr.addEventListener('timeout', function () {\n errCallback(AWS.util.error(new Error('Timeout'), {code: 'TimeoutError'}));\n }, false);\n xhr.addEventListener('error', function () {\n errCallback(AWS.util.error(new Error('Network Failure'), {\n code: 'NetworkingError'\n }));\n }, false);\n xhr.addEventListener('abort', function () {\n errCallback(AWS.util.error(new Error('Request aborted'), {\n code: 'RequestAbortedError'\n }));\n }, false);\n\n callback(emitter);\n xhr.open(httpRequest.method, href, httpOptions.xhrAsync !== false);\n AWS.util.each(httpRequest.headers, function (key, value) {\n if (key !== 'Content-Length' && key !== 'User-Agent' && key !== 'Host') {\n xhr.setRequestHeader(key, value);\n }\n });\n\n if (httpOptions.timeout && httpOptions.xhrAsync !== false) {\n xhr.timeout = httpOptions.timeout;\n }\n\n if (httpOptions.xhrWithCredentials) {\n xhr.withCredentials = true;\n }\n try { xhr.responseType = 'arraybuffer'; } catch (e) {}\n\n try {\n if (httpRequest.body) {\n xhr.send(httpRequest.body);\n } else {\n xhr.send();\n }\n } catch (err) {\n if (httpRequest.body && typeof httpRequest.body.buffer === 'object') {\n xhr.send(httpRequest.body.buffer); // send ArrayBuffer directly\n } else {\n throw err;\n }\n }\n\n return emitter;\n },\n\n parseHeaders: function parseHeaders(rawHeaders) {\n var headers = {};\n AWS.util.arrayEach(rawHeaders.split(/\\r?\\n/), function (line) {\n var key = line.split(':', 1)[0];\n var value = line.substring(key.length + 2);\n if (key.length > 0) headers[key.toLowerCase()] = value;\n });\n return headers;\n },\n\n finishRequest: function finishRequest(xhr, emitter) {\n var buffer;\n if (xhr.responseType === 'arraybuffer' && xhr.response) {\n var ab = xhr.response;\n buffer = new AWS.util.Buffer(ab.byteLength);\n var view = new Uint8Array(ab);\n for (var i = 0; i < buffer.length; ++i) {\n buffer[i] = view[i];\n }\n }\n\n try {\n if (!buffer && typeof xhr.responseText === 'string') {\n buffer = new AWS.util.Buffer(xhr.responseText);\n }\n } catch (e) {}\n\n if (buffer) emitter.emit('data', buffer);\n emitter.emit('end');\n }\n});\n\n/**\n * @api private\n */\nAWS.HttpClient.prototype = AWS.XHRClient.prototype;\n\n/**\n * @api private\n */\nAWS.HttpClient.streamsApiVersion = 1;\n","var util = require('../util');\n\nfunction JsonBuilder() { }\n\nJsonBuilder.prototype.build = function(value, shape) {\n return JSON.stringify(translate(value, shape));\n};\n\nfunction translate(value, shape) {\n if (!shape || value === undefined || value === null) return undefined;\n\n switch (shape.type) {\n case 'structure': return translateStructure(value, shape);\n case 'map': return translateMap(value, shape);\n case 'list': return translateList(value, shape);\n default: return translateScalar(value, shape);\n }\n}\n\nfunction translateStructure(structure, shape) {\n if (shape.isDocument) {\n return structure;\n }\n var struct = {};\n util.each(structure, function(name, value) {\n var memberShape = shape.members[name];\n if (memberShape) {\n if (memberShape.location !== 'body') return;\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n var result = translate(value, memberShape);\n if (result !== undefined) struct[locationName] = result;\n }\n });\n return struct;\n}\n\nfunction translateList(list, shape) {\n var out = [];\n util.arrayEach(list, function(value) {\n var result = translate(value, shape.member);\n if (result !== undefined) out.push(result);\n });\n return out;\n}\n\nfunction translateMap(map, shape) {\n var out = {};\n util.each(map, function(key, value) {\n var result = translate(value, shape.value);\n if (result !== undefined) out[key] = result;\n });\n return out;\n}\n\nfunction translateScalar(value, shape) {\n return shape.toWireFormat(value);\n}\n\n/**\n * @api private\n */\nmodule.exports = JsonBuilder;\n","var util = require('../util');\n\nfunction JsonParser() { }\n\nJsonParser.prototype.parse = function(value, shape) {\n return translate(JSON.parse(value), shape);\n};\n\nfunction translate(value, shape) {\n if (!shape || value === undefined) return undefined;\n\n switch (shape.type) {\n case 'structure': return translateStructure(value, shape);\n case 'map': return translateMap(value, shape);\n case 'list': return translateList(value, shape);\n default: return translateScalar(value, shape);\n }\n}\n\nfunction translateStructure(structure, shape) {\n if (structure == null) return undefined;\n if (shape.isDocument) return structure;\n\n var struct = {};\n var shapeMembers = shape.members;\n util.each(shapeMembers, function(name, memberShape) {\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n if (Object.prototype.hasOwnProperty.call(structure, locationName)) {\n var value = structure[locationName];\n var result = translate(value, memberShape);\n if (result !== undefined) struct[name] = result;\n }\n });\n return struct;\n}\n\nfunction translateList(list, shape) {\n if (list == null) return undefined;\n\n var out = [];\n util.arrayEach(list, function(value) {\n var result = translate(value, shape.member);\n if (result === undefined) out.push(null);\n else out.push(result);\n });\n return out;\n}\n\nfunction translateMap(map, shape) {\n if (map == null) return undefined;\n\n var out = {};\n util.each(map, function(key, value) {\n var result = translate(value, shape.value);\n if (result === undefined) out[key] = null;\n else out[key] = result;\n });\n return out;\n}\n\nfunction translateScalar(value, shape) {\n return shape.toType(value);\n}\n\n/**\n * @api private\n */\nmodule.exports = JsonParser;\n","var Collection = require('./collection');\nvar Operation = require('./operation');\nvar Shape = require('./shape');\nvar Paginator = require('./paginator');\nvar ResourceWaiter = require('./resource_waiter');\nvar metadata = require('../../apis/metadata.json');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Api(api, options) {\n var self = this;\n api = api || {};\n options = options || {};\n options.api = this;\n\n api.metadata = api.metadata || {};\n\n var serviceIdentifier = options.serviceIdentifier;\n delete options.serviceIdentifier;\n\n property(this, 'isApi', true, false);\n property(this, 'apiVersion', api.metadata.apiVersion);\n property(this, 'endpointPrefix', api.metadata.endpointPrefix);\n property(this, 'signingName', api.metadata.signingName);\n property(this, 'globalEndpoint', api.metadata.globalEndpoint);\n property(this, 'signatureVersion', api.metadata.signatureVersion);\n property(this, 'jsonVersion', api.metadata.jsonVersion);\n property(this, 'targetPrefix', api.metadata.targetPrefix);\n property(this, 'protocol', api.metadata.protocol);\n property(this, 'timestampFormat', api.metadata.timestampFormat);\n property(this, 'xmlNamespaceUri', api.metadata.xmlNamespace);\n property(this, 'abbreviation', api.metadata.serviceAbbreviation);\n property(this, 'fullName', api.metadata.serviceFullName);\n property(this, 'serviceId', api.metadata.serviceId);\n if (serviceIdentifier && metadata[serviceIdentifier]) {\n property(this, 'xmlNoDefaultLists', metadata[serviceIdentifier].xmlNoDefaultLists, false);\n }\n\n memoizedProperty(this, 'className', function() {\n var name = api.metadata.serviceAbbreviation || api.metadata.serviceFullName;\n if (!name) return null;\n\n name = name.replace(/^Amazon|AWS\\s*|\\(.*|\\s+|\\W+/g, '');\n if (name === 'ElasticLoadBalancing') name = 'ELB';\n return name;\n });\n\n function addEndpointOperation(name, operation) {\n if (operation.endpointoperation === true) {\n property(self, 'endpointOperation', util.string.lowerFirst(name));\n }\n if (operation.endpointdiscovery && !self.hasRequiredEndpointDiscovery) {\n property(\n self,\n 'hasRequiredEndpointDiscovery',\n operation.endpointdiscovery.required === true\n );\n }\n }\n\n property(this, 'operations', new Collection(api.operations, options, function(name, operation) {\n return new Operation(name, operation, options);\n }, util.string.lowerFirst, addEndpointOperation));\n\n property(this, 'shapes', new Collection(api.shapes, options, function(name, shape) {\n return Shape.create(shape, options);\n }));\n\n property(this, 'paginators', new Collection(api.paginators, options, function(name, paginator) {\n return new Paginator(name, paginator, options);\n }));\n\n property(this, 'waiters', new Collection(api.waiters, options, function(name, waiter) {\n return new ResourceWaiter(name, waiter, options);\n }, util.string.lowerFirst));\n\n if (options.documentation) {\n property(this, 'documentation', api.documentation);\n property(this, 'documentationUrl', api.documentationUrl);\n }\n property(this, 'awsQueryCompatible', api.metadata.awsQueryCompatible);\n}\n\n/**\n * @api private\n */\nmodule.exports = Api;\n","var memoizedProperty = require('../util').memoizedProperty;\n\nfunction memoize(name, value, factory, nameTr) {\n memoizedProperty(this, nameTr(name), function() {\n return factory(name, value);\n });\n}\n\nfunction Collection(iterable, options, factory, nameTr, callback) {\n nameTr = nameTr || String;\n var self = this;\n\n for (var id in iterable) {\n if (Object.prototype.hasOwnProperty.call(iterable, id)) {\n memoize.call(self, id, iterable[id], factory, nameTr);\n if (callback) callback(id, iterable[id]);\n }\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = Collection;\n","var Shape = require('./shape');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Operation(name, operation, options) {\n var self = this;\n options = options || {};\n\n property(this, 'name', operation.name || name);\n property(this, 'api', options.api, false);\n\n operation.http = operation.http || {};\n property(this, 'endpoint', operation.endpoint);\n property(this, 'httpMethod', operation.http.method || 'POST');\n property(this, 'httpPath', operation.http.requestUri || '/');\n property(this, 'authtype', operation.authtype || '');\n property(\n this,\n 'endpointDiscoveryRequired',\n operation.endpointdiscovery ?\n (operation.endpointdiscovery.required ? 'REQUIRED' : 'OPTIONAL') :\n 'NULL'\n );\n\n // httpChecksum replaces usage of httpChecksumRequired, but some APIs\n // (s3control) still uses old trait.\n var httpChecksumRequired = operation.httpChecksumRequired\n || (operation.httpChecksum && operation.httpChecksum.requestChecksumRequired);\n property(this, 'httpChecksumRequired', httpChecksumRequired, false);\n\n memoizedProperty(this, 'input', function() {\n if (!operation.input) {\n return new Shape.create({type: 'structure'}, options);\n }\n return Shape.create(operation.input, options);\n });\n\n memoizedProperty(this, 'output', function() {\n if (!operation.output) {\n return new Shape.create({type: 'structure'}, options);\n }\n return Shape.create(operation.output, options);\n });\n\n memoizedProperty(this, 'errors', function() {\n var list = [];\n if (!operation.errors) return null;\n\n for (var i = 0; i < operation.errors.length; i++) {\n list.push(Shape.create(operation.errors[i], options));\n }\n\n return list;\n });\n\n memoizedProperty(this, 'paginator', function() {\n return options.api.paginators[name];\n });\n\n if (options.documentation) {\n property(this, 'documentation', operation.documentation);\n property(this, 'documentationUrl', operation.documentationUrl);\n }\n\n // idempotentMembers only tracks top-level input shapes\n memoizedProperty(this, 'idempotentMembers', function() {\n var idempotentMembers = [];\n var input = self.input;\n var members = input.members;\n if (!input.members) {\n return idempotentMembers;\n }\n for (var name in members) {\n if (!members.hasOwnProperty(name)) {\n continue;\n }\n if (members[name].isIdempotent === true) {\n idempotentMembers.push(name);\n }\n }\n return idempotentMembers;\n });\n\n memoizedProperty(this, 'hasEventOutput', function() {\n var output = self.output;\n return hasEventStream(output);\n });\n}\n\nfunction hasEventStream(topLevelShape) {\n var members = topLevelShape.members;\n var payload = topLevelShape.payload;\n\n if (!topLevelShape.members) {\n return false;\n }\n\n if (payload) {\n var payloadMember = members[payload];\n return payloadMember.isEventStream;\n }\n\n // check if any member is an event stream\n for (var name in members) {\n if (!members.hasOwnProperty(name)) {\n if (members[name].isEventStream === true) {\n return true;\n }\n }\n }\n return false;\n}\n\n/**\n * @api private\n */\nmodule.exports = Operation;\n","var property = require('../util').property;\n\nfunction Paginator(name, paginator) {\n property(this, 'inputToken', paginator.input_token);\n property(this, 'limitKey', paginator.limit_key);\n property(this, 'moreResults', paginator.more_results);\n property(this, 'outputToken', paginator.output_token);\n property(this, 'resultKey', paginator.result_key);\n}\n\n/**\n * @api private\n */\nmodule.exports = Paginator;\n","var util = require('../util');\nvar property = util.property;\n\nfunction ResourceWaiter(name, waiter, options) {\n options = options || {};\n property(this, 'name', name);\n property(this, 'api', options.api, false);\n\n if (waiter.operation) {\n property(this, 'operation', util.string.lowerFirst(waiter.operation));\n }\n\n var self = this;\n var keys = [\n 'type',\n 'description',\n 'delay',\n 'maxAttempts',\n 'acceptors'\n ];\n\n keys.forEach(function(key) {\n var value = waiter[key];\n if (value) {\n property(self, key, value);\n }\n });\n}\n\n/**\n * @api private\n */\nmodule.exports = ResourceWaiter;\n","var Collection = require('./collection');\n\nvar util = require('../util');\n\nfunction property(obj, name, value) {\n if (value !== null && value !== undefined) {\n util.property.apply(this, arguments);\n }\n}\n\nfunction memoizedProperty(obj, name) {\n if (!obj.constructor.prototype[name]) {\n util.memoizedProperty.apply(this, arguments);\n }\n}\n\nfunction Shape(shape, options, memberName) {\n options = options || {};\n\n property(this, 'shape', shape.shape);\n property(this, 'api', options.api, false);\n property(this, 'type', shape.type);\n property(this, 'enum', shape.enum);\n property(this, 'min', shape.min);\n property(this, 'max', shape.max);\n property(this, 'pattern', shape.pattern);\n property(this, 'location', shape.location || this.location || 'body');\n property(this, 'name', this.name || shape.xmlName || shape.queryName ||\n shape.locationName || memberName);\n property(this, 'isStreaming', shape.streaming || this.isStreaming || false);\n property(this, 'requiresLength', shape.requiresLength, false);\n property(this, 'isComposite', shape.isComposite || false);\n property(this, 'isShape', true, false);\n property(this, 'isQueryName', Boolean(shape.queryName), false);\n property(this, 'isLocationName', Boolean(shape.locationName), false);\n property(this, 'isIdempotent', shape.idempotencyToken === true);\n property(this, 'isJsonValue', shape.jsonvalue === true);\n property(this, 'isSensitive', shape.sensitive === true || shape.prototype && shape.prototype.sensitive === true);\n property(this, 'isEventStream', Boolean(shape.eventstream), false);\n property(this, 'isEvent', Boolean(shape.event), false);\n property(this, 'isEventPayload', Boolean(shape.eventpayload), false);\n property(this, 'isEventHeader', Boolean(shape.eventheader), false);\n property(this, 'isTimestampFormatSet', Boolean(shape.timestampFormat) || shape.prototype && shape.prototype.isTimestampFormatSet === true, false);\n property(this, 'endpointDiscoveryId', Boolean(shape.endpointdiscoveryid), false);\n property(this, 'hostLabel', Boolean(shape.hostLabel), false);\n\n if (options.documentation) {\n property(this, 'documentation', shape.documentation);\n property(this, 'documentationUrl', shape.documentationUrl);\n }\n\n if (shape.xmlAttribute) {\n property(this, 'isXmlAttribute', shape.xmlAttribute || false);\n }\n\n // type conversion and parsing\n property(this, 'defaultValue', null);\n this.toWireFormat = function(value) {\n if (value === null || value === undefined) return '';\n return value;\n };\n this.toType = function(value) { return value; };\n}\n\n/**\n * @api private\n */\nShape.normalizedTypes = {\n character: 'string',\n double: 'float',\n long: 'integer',\n short: 'integer',\n biginteger: 'integer',\n bigdecimal: 'float',\n blob: 'binary'\n};\n\n/**\n * @api private\n */\nShape.types = {\n 'structure': StructureShape,\n 'list': ListShape,\n 'map': MapShape,\n 'boolean': BooleanShape,\n 'timestamp': TimestampShape,\n 'float': FloatShape,\n 'integer': IntegerShape,\n 'string': StringShape,\n 'base64': Base64Shape,\n 'binary': BinaryShape\n};\n\nShape.resolve = function resolve(shape, options) {\n if (shape.shape) {\n var refShape = options.api.shapes[shape.shape];\n if (!refShape) {\n throw new Error('Cannot find shape reference: ' + shape.shape);\n }\n\n return refShape;\n } else {\n return null;\n }\n};\n\nShape.create = function create(shape, options, memberName) {\n if (shape.isShape) return shape;\n\n var refShape = Shape.resolve(shape, options);\n if (refShape) {\n var filteredKeys = Object.keys(shape);\n if (!options.documentation) {\n filteredKeys = filteredKeys.filter(function(name) {\n return !name.match(/documentation/);\n });\n }\n\n // create an inline shape with extra members\n var InlineShape = function() {\n refShape.constructor.call(this, shape, options, memberName);\n };\n InlineShape.prototype = refShape;\n return new InlineShape();\n } else {\n // set type if not set\n if (!shape.type) {\n if (shape.members) shape.type = 'structure';\n else if (shape.member) shape.type = 'list';\n else if (shape.key) shape.type = 'map';\n else shape.type = 'string';\n }\n\n // normalize types\n var origType = shape.type;\n if (Shape.normalizedTypes[shape.type]) {\n shape.type = Shape.normalizedTypes[shape.type];\n }\n\n if (Shape.types[shape.type]) {\n return new Shape.types[shape.type](shape, options, memberName);\n } else {\n throw new Error('Unrecognized shape type: ' + origType);\n }\n }\n};\n\nfunction CompositeShape(shape) {\n Shape.apply(this, arguments);\n property(this, 'isComposite', true);\n\n if (shape.flattened) {\n property(this, 'flattened', shape.flattened || false);\n }\n}\n\nfunction StructureShape(shape, options) {\n var self = this;\n var requiredMap = null, firstInit = !this.isShape;\n\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return {}; });\n property(this, 'members', {});\n property(this, 'memberNames', []);\n property(this, 'required', []);\n property(this, 'isRequired', function() { return false; });\n property(this, 'isDocument', Boolean(shape.document));\n }\n\n if (shape.members) {\n property(this, 'members', new Collection(shape.members, options, function(name, member) {\n return Shape.create(member, options, name);\n }));\n memoizedProperty(this, 'memberNames', function() {\n return shape.xmlOrder || Object.keys(shape.members);\n });\n\n if (shape.event) {\n memoizedProperty(this, 'eventPayloadMemberName', function() {\n var members = self.members;\n var memberNames = self.memberNames;\n // iterate over members to find ones that are event payloads\n for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n if (members[memberNames[i]].isEventPayload) {\n return memberNames[i];\n }\n }\n });\n\n memoizedProperty(this, 'eventHeaderMemberNames', function() {\n var members = self.members;\n var memberNames = self.memberNames;\n var eventHeaderMemberNames = [];\n // iterate over members to find ones that are event headers\n for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n if (members[memberNames[i]].isEventHeader) {\n eventHeaderMemberNames.push(memberNames[i]);\n }\n }\n return eventHeaderMemberNames;\n });\n }\n }\n\n if (shape.required) {\n property(this, 'required', shape.required);\n property(this, 'isRequired', function(name) {\n if (!requiredMap) {\n requiredMap = {};\n for (var i = 0; i < shape.required.length; i++) {\n requiredMap[shape.required[i]] = true;\n }\n }\n\n return requiredMap[name];\n }, false, true);\n }\n\n property(this, 'resultWrapper', shape.resultWrapper || null);\n\n if (shape.payload) {\n property(this, 'payload', shape.payload);\n }\n\n if (typeof shape.xmlNamespace === 'string') {\n property(this, 'xmlNamespaceUri', shape.xmlNamespace);\n } else if (typeof shape.xmlNamespace === 'object') {\n property(this, 'xmlNamespacePrefix', shape.xmlNamespace.prefix);\n property(this, 'xmlNamespaceUri', shape.xmlNamespace.uri);\n }\n}\n\nfunction ListShape(shape, options) {\n var self = this, firstInit = !this.isShape;\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return []; });\n }\n\n if (shape.member) {\n memoizedProperty(this, 'member', function() {\n return Shape.create(shape.member, options);\n });\n }\n\n if (this.flattened) {\n var oldName = this.name;\n memoizedProperty(this, 'name', function() {\n return self.member.name || oldName;\n });\n }\n}\n\nfunction MapShape(shape, options) {\n var firstInit = !this.isShape;\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function() { return {}; });\n property(this, 'key', Shape.create({type: 'string'}, options));\n property(this, 'value', Shape.create({type: 'string'}, options));\n }\n\n if (shape.key) {\n memoizedProperty(this, 'key', function() {\n return Shape.create(shape.key, options);\n });\n }\n if (shape.value) {\n memoizedProperty(this, 'value', function() {\n return Shape.create(shape.value, options);\n });\n }\n}\n\nfunction TimestampShape(shape) {\n var self = this;\n Shape.apply(this, arguments);\n\n if (shape.timestampFormat) {\n property(this, 'timestampFormat', shape.timestampFormat);\n } else if (self.isTimestampFormatSet && this.timestampFormat) {\n property(this, 'timestampFormat', this.timestampFormat);\n } else if (this.location === 'header') {\n property(this, 'timestampFormat', 'rfc822');\n } else if (this.location === 'querystring') {\n property(this, 'timestampFormat', 'iso8601');\n } else if (this.api) {\n switch (this.api.protocol) {\n case 'json':\n case 'rest-json':\n property(this, 'timestampFormat', 'unixTimestamp');\n break;\n case 'rest-xml':\n case 'query':\n case 'ec2':\n property(this, 'timestampFormat', 'iso8601');\n break;\n }\n }\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n if (typeof value.toUTCString === 'function') return value;\n return typeof value === 'string' || typeof value === 'number' ?\n util.date.parseTimestamp(value) : null;\n };\n\n this.toWireFormat = function(value) {\n return util.date.format(value, self.timestampFormat);\n };\n}\n\nfunction StringShape() {\n Shape.apply(this, arguments);\n\n var nullLessProtocols = ['rest-xml', 'query', 'ec2'];\n this.toType = function(value) {\n value = this.api && nullLessProtocols.indexOf(this.api.protocol) > -1 ?\n value || '' : value;\n if (this.isJsonValue) {\n return JSON.parse(value);\n }\n\n return value && typeof value.toString === 'function' ?\n value.toString() : value;\n };\n\n this.toWireFormat = function(value) {\n return this.isJsonValue ? JSON.stringify(value) : value;\n };\n}\n\nfunction FloatShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n return parseFloat(value);\n };\n this.toWireFormat = this.toType;\n}\n\nfunction IntegerShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (value === null || value === undefined) return null;\n return parseInt(value, 10);\n };\n this.toWireFormat = this.toType;\n}\n\nfunction BinaryShape() {\n Shape.apply(this, arguments);\n this.toType = function(value) {\n var buf = util.base64.decode(value);\n if (this.isSensitive && util.isNode() && typeof util.Buffer.alloc === 'function') {\n /* Node.js can create a Buffer that is not isolated.\n * i.e. buf.byteLength !== buf.buffer.byteLength\n * This means that the sensitive data is accessible to anyone with access to buf.buffer.\n * If this is the node shared Buffer, then other code within this process _could_ find this secret.\n * Copy sensitive data to an isolated Buffer and zero the sensitive data.\n * While this is safe to do here, copying this code somewhere else may produce unexpected results.\n */\n var secureBuf = util.Buffer.alloc(buf.length, buf);\n buf.fill(0);\n buf = secureBuf;\n }\n return buf;\n };\n this.toWireFormat = util.base64.encode;\n}\n\nfunction Base64Shape() {\n BinaryShape.apply(this, arguments);\n}\n\nfunction BooleanShape() {\n Shape.apply(this, arguments);\n\n this.toType = function(value) {\n if (typeof value === 'boolean') return value;\n if (value === null || value === undefined) return null;\n return value === 'true';\n };\n}\n\n/**\n * @api private\n */\nShape.shapes = {\n StructureShape: StructureShape,\n ListShape: ListShape,\n MapShape: MapShape,\n StringShape: StringShape,\n BooleanShape: BooleanShape,\n Base64Shape: Base64Shape\n};\n\n/**\n * @api private\n */\nmodule.exports = Shape;\n","var AWS = require('./core');\n\n/**\n * @api private\n */\nAWS.ParamValidator = AWS.util.inherit({\n /**\n * Create a new validator object.\n *\n * @param validation [Boolean|map] whether input parameters should be\n * validated against the operation description before sending the\n * request. Pass a map to enable any of the following specific\n * validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n */\n constructor: function ParamValidator(validation) {\n if (validation === true || validation === undefined) {\n validation = {'min': true};\n }\n this.validation = validation;\n },\n\n validate: function validate(shape, params, context) {\n this.errors = [];\n this.validateMember(shape, params || {}, context || 'params');\n\n if (this.errors.length > 1) {\n var msg = this.errors.join('\\n* ');\n msg = 'There were ' + this.errors.length +\n ' validation errors:\\n* ' + msg;\n throw AWS.util.error(new Error(msg),\n {code: 'MultipleValidationErrors', errors: this.errors});\n } else if (this.errors.length === 1) {\n throw this.errors[0];\n } else {\n return true;\n }\n },\n\n fail: function fail(code, message) {\n this.errors.push(AWS.util.error(new Error(message), {code: code}));\n },\n\n validateStructure: function validateStructure(shape, params, context) {\n if (shape.isDocument) return true;\n\n this.validateType(params, context, ['object'], 'structure');\n var paramName;\n for (var i = 0; shape.required && i < shape.required.length; i++) {\n paramName = shape.required[i];\n var value = params[paramName];\n if (value === undefined || value === null) {\n this.fail('MissingRequiredParameter',\n 'Missing required key \\'' + paramName + '\\' in ' + context);\n }\n }\n\n // validate hash members\n for (paramName in params) {\n if (!Object.prototype.hasOwnProperty.call(params, paramName)) continue;\n\n var paramValue = params[paramName],\n memberShape = shape.members[paramName];\n\n if (memberShape !== undefined) {\n var memberContext = [context, paramName].join('.');\n this.validateMember(memberShape, paramValue, memberContext);\n } else if (paramValue !== undefined && paramValue !== null) {\n this.fail('UnexpectedParameter',\n 'Unexpected key \\'' + paramName + '\\' found in ' + context);\n }\n }\n\n return true;\n },\n\n validateMember: function validateMember(shape, param, context) {\n switch (shape.type) {\n case 'structure':\n return this.validateStructure(shape, param, context);\n case 'list':\n return this.validateList(shape, param, context);\n case 'map':\n return this.validateMap(shape, param, context);\n default:\n return this.validateScalar(shape, param, context);\n }\n },\n\n validateList: function validateList(shape, params, context) {\n if (this.validateType(params, context, [Array])) {\n this.validateRange(shape, params.length, context, 'list member count');\n // validate array members\n for (var i = 0; i < params.length; i++) {\n this.validateMember(shape.member, params[i], context + '[' + i + ']');\n }\n }\n },\n\n validateMap: function validateMap(shape, params, context) {\n if (this.validateType(params, context, ['object'], 'map')) {\n // Build up a count of map members to validate range traits.\n var mapCount = 0;\n for (var param in params) {\n if (!Object.prototype.hasOwnProperty.call(params, param)) continue;\n // Validate any map key trait constraints\n this.validateMember(shape.key, param,\n context + '[key=\\'' + param + '\\']');\n this.validateMember(shape.value, params[param],\n context + '[\\'' + param + '\\']');\n mapCount++;\n }\n this.validateRange(shape, mapCount, context, 'map member count');\n }\n },\n\n validateScalar: function validateScalar(shape, value, context) {\n switch (shape.type) {\n case null:\n case undefined:\n case 'string':\n return this.validateString(shape, value, context);\n case 'base64':\n case 'binary':\n return this.validatePayload(value, context);\n case 'integer':\n case 'float':\n return this.validateNumber(shape, value, context);\n case 'boolean':\n return this.validateType(value, context, ['boolean']);\n case 'timestamp':\n return this.validateType(value, context, [Date,\n /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/, 'number'],\n 'Date object, ISO-8601 string, or a UNIX timestamp');\n default:\n return this.fail('UnkownType', 'Unhandled type ' +\n shape.type + ' for ' + context);\n }\n },\n\n validateString: function validateString(shape, value, context) {\n var validTypes = ['string'];\n if (shape.isJsonValue) {\n validTypes = validTypes.concat(['number', 'object', 'boolean']);\n }\n if (value !== null && this.validateType(value, context, validTypes)) {\n this.validateEnum(shape, value, context);\n this.validateRange(shape, value.length, context, 'string length');\n this.validatePattern(shape, value, context);\n this.validateUri(shape, value, context);\n }\n },\n\n validateUri: function validateUri(shape, value, context) {\n if (shape['location'] === 'uri') {\n if (value.length === 0) {\n this.fail('UriParameterError', 'Expected uri parameter to have length >= 1,'\n + ' but found \"' + value +'\" for ' + context);\n }\n }\n },\n\n validatePattern: function validatePattern(shape, value, context) {\n if (this.validation['pattern'] && shape['pattern'] !== undefined) {\n if (!(new RegExp(shape['pattern'])).test(value)) {\n this.fail('PatternMatchError', 'Provided value \"' + value + '\" '\n + 'does not match regex pattern /' + shape['pattern'] + '/ for '\n + context);\n }\n }\n },\n\n validateRange: function validateRange(shape, value, context, descriptor) {\n if (this.validation['min']) {\n if (shape['min'] !== undefined && value < shape['min']) {\n this.fail('MinRangeError', 'Expected ' + descriptor + ' >= '\n + shape['min'] + ', but found ' + value + ' for ' + context);\n }\n }\n if (this.validation['max']) {\n if (shape['max'] !== undefined && value > shape['max']) {\n this.fail('MaxRangeError', 'Expected ' + descriptor + ' <= '\n + shape['max'] + ', but found ' + value + ' for ' + context);\n }\n }\n },\n\n validateEnum: function validateRange(shape, value, context) {\n if (this.validation['enum'] && shape['enum'] !== undefined) {\n // Fail if the string value is not present in the enum list\n if (shape['enum'].indexOf(value) === -1) {\n this.fail('EnumError', 'Found string value of ' + value + ', but '\n + 'expected ' + shape['enum'].join('|') + ' for ' + context);\n }\n }\n },\n\n validateType: function validateType(value, context, acceptedTypes, type) {\n // We will not log an error for null or undefined, but we will return\n // false so that callers know that the expected type was not strictly met.\n if (value === null || value === undefined) return false;\n\n var foundInvalidType = false;\n for (var i = 0; i < acceptedTypes.length; i++) {\n if (typeof acceptedTypes[i] === 'string') {\n if (typeof value === acceptedTypes[i]) return true;\n } else if (acceptedTypes[i] instanceof RegExp) {\n if ((value || '').toString().match(acceptedTypes[i])) return true;\n } else {\n if (value instanceof acceptedTypes[i]) return true;\n if (AWS.util.isType(value, acceptedTypes[i])) return true;\n if (!type && !foundInvalidType) acceptedTypes = acceptedTypes.slice();\n acceptedTypes[i] = AWS.util.typeName(acceptedTypes[i]);\n }\n foundInvalidType = true;\n }\n\n var acceptedType = type;\n if (!acceptedType) {\n acceptedType = acceptedTypes.join(', ').replace(/,([^,]+)$/, ', or$1');\n }\n\n var vowel = acceptedType.match(/^[aeiou]/i) ? 'n' : '';\n this.fail('InvalidParameterType', 'Expected ' + context + ' to be a' +\n vowel + ' ' + acceptedType);\n return false;\n },\n\n validateNumber: function validateNumber(shape, value, context) {\n if (value === null || value === undefined) return;\n if (typeof value === 'string') {\n var castedValue = parseFloat(value);\n if (castedValue.toString() === value) value = castedValue;\n }\n if (this.validateType(value, context, ['number'])) {\n this.validateRange(shape, value, context, 'numeric value');\n }\n },\n\n validatePayload: function validatePayload(value, context) {\n if (value === null || value === undefined) return;\n if (typeof value === 'string') return;\n if (value && typeof value.byteLength === 'number') return; // typed arrays\n if (AWS.util.isNode()) { // special check for buffer/stream in Node.js\n var Stream = AWS.util.stream.Stream;\n if (AWS.util.Buffer.isBuffer(value) || value instanceof Stream) return;\n } else {\n if (typeof Blob !== void 0 && value instanceof Blob) return;\n }\n\n var types = ['Buffer', 'Stream', 'File', 'Blob', 'ArrayBuffer', 'DataView'];\n if (value) {\n for (var i = 0; i < types.length; i++) {\n if (AWS.util.isType(value, types[i])) return;\n if (AWS.util.typeName(value.constructor) === types[i]) return;\n }\n }\n\n this.fail('InvalidParameterType', 'Expected ' + context + ' to be a ' +\n 'string, Buffer, Stream, Blob, or typed array object');\n }\n});\n","var util = require('../util');\nvar AWS = require('../core');\n\n/**\n * Prepend prefix defined by API model to endpoint that's already\n * constructed. This feature does not apply to operations using\n * endpoint discovery and can be disabled.\n * @api private\n */\nfunction populateHostPrefix(request) {\n var enabled = request.service.config.hostPrefixEnabled;\n if (!enabled) return request;\n var operationModel = request.service.api.operations[request.operation];\n //don't marshal host prefix when operation has endpoint discovery traits\n if (hasEndpointDiscover(request)) return request;\n if (operationModel.endpoint && operationModel.endpoint.hostPrefix) {\n var hostPrefixNotation = operationModel.endpoint.hostPrefix;\n var hostPrefix = expandHostPrefix(hostPrefixNotation, request.params, operationModel.input);\n prependEndpointPrefix(request.httpRequest.endpoint, hostPrefix);\n validateHostname(request.httpRequest.endpoint.hostname);\n }\n return request;\n}\n\n/**\n * @api private\n */\nfunction hasEndpointDiscover(request) {\n var api = request.service.api;\n var operationModel = api.operations[request.operation];\n var isEndpointOperation = api.endpointOperation && (api.endpointOperation === util.string.lowerFirst(operationModel.name));\n return (operationModel.endpointDiscoveryRequired !== 'NULL' || isEndpointOperation === true);\n}\n\n/**\n * @api private\n */\nfunction expandHostPrefix(hostPrefixNotation, params, shape) {\n util.each(shape.members, function(name, member) {\n if (member.hostLabel === true) {\n if (typeof params[name] !== 'string' || params[name] === '') {\n throw util.error(new Error(), {\n message: 'Parameter ' + name + ' should be a non-empty string.',\n code: 'InvalidParameter'\n });\n }\n var regex = new RegExp('\\\\{' + name + '\\\\}', 'g');\n hostPrefixNotation = hostPrefixNotation.replace(regex, params[name]);\n }\n });\n return hostPrefixNotation;\n}\n\n/**\n * @api private\n */\nfunction prependEndpointPrefix(endpoint, prefix) {\n if (endpoint.host) {\n endpoint.host = prefix + endpoint.host;\n }\n if (endpoint.hostname) {\n endpoint.hostname = prefix + endpoint.hostname;\n }\n}\n\n/**\n * @api private\n */\nfunction validateHostname(hostname) {\n var labels = hostname.split('.');\n //Reference: https://tools.ietf.org/html/rfc1123#section-2\n var hostPattern = /^[a-zA-Z0-9]{1}$|^[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]$/;\n util.arrayEach(labels, function(label) {\n if (!label.length || label.length < 1 || label.length > 63) {\n throw util.error(new Error(), {\n code: 'ValidationError',\n message: 'Hostname label length should be between 1 to 63 characters, inclusive.'\n });\n }\n if (!hostPattern.test(label)) {\n throw AWS.util.error(new Error(),\n {code: 'ValidationError', message: label + ' is not hostname compatible.'});\n }\n });\n}\n\nmodule.exports = {\n populateHostPrefix: populateHostPrefix\n};\n","var util = require('../util');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n var httpRequest = req.httpRequest;\n var api = req.service.api;\n var target = api.targetPrefix + '.' + api.operations[req.operation].name;\n var version = api.jsonVersion || '1.0';\n var input = api.operations[req.operation].input;\n var builder = new JsonBuilder();\n\n if (version === 1) version = '1.0';\n httpRequest.body = builder.build(req.params || {}, input);\n httpRequest.headers['Content-Type'] = 'application/x-amz-json-' + version;\n httpRequest.headers['X-Amz-Target'] = target;\n\n populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n var error = {};\n var httpResponse = resp.httpResponse;\n\n error.code = httpResponse.headers['x-amzn-errortype'] || 'UnknownError';\n if (typeof error.code === 'string') {\n error.code = error.code.split(':')[0];\n }\n\n if (httpResponse.body.length > 0) {\n try {\n var e = JSON.parse(httpResponse.body.toString());\n var code = e.__type || e.code || e.Code;\n if (code) {\n error.code = code.split('#').pop();\n }\n if (error.code === 'RequestEntityTooLarge') {\n error.message = 'Request body must be less than 1 MB';\n } else {\n error.message = (e.message || e.Message || null);\n }\n } catch (e) {\n error.statusCode = httpResponse.statusCode;\n error.message = httpResponse.statusMessage;\n }\n } else {\n error.statusCode = httpResponse.statusCode;\n error.message = httpResponse.statusCode.toString();\n }\n\n resp.error = util.error(new Error(), error);\n}\n\nfunction extractData(resp) {\n var body = resp.httpResponse.body.toString() || '{}';\n if (resp.request.service.config.convertResponseTypes === false) {\n resp.data = JSON.parse(body);\n } else {\n var operation = resp.request.service.api.operations[resp.request.operation];\n var shape = operation.output || {};\n var parser = new JsonParser();\n resp.data = parser.parse(body, shape);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var AWS = require('../core');\nvar util = require('../util');\nvar QueryParamSerializer = require('../query/query_param_serializer');\nvar Shape = require('../model/shape');\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n var operation = req.service.api.operations[req.operation];\n var httpRequest = req.httpRequest;\n httpRequest.headers['Content-Type'] =\n 'application/x-www-form-urlencoded; charset=utf-8';\n httpRequest.params = {\n Version: req.service.api.apiVersion,\n Action: operation.name\n };\n\n // convert the request parameters into a list of query params,\n // e.g. Deeply.NestedParam.0.Name=value\n var builder = new QueryParamSerializer();\n builder.serialize(req.params, operation.input, function(name, value) {\n httpRequest.params[name] = value;\n });\n httpRequest.body = util.queryParamsToString(httpRequest.params);\n\n populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n var data, body = resp.httpResponse.body.toString();\n if (body.match('= 0 ? '&' : '?');\n var parts = [];\n util.arrayEach(Object.keys(queryString).sort(), function(key) {\n if (!Array.isArray(queryString[key])) {\n queryString[key] = [queryString[key]];\n }\n for (var i = 0; i < queryString[key].length; i++) {\n parts.push(util.uriEscape(String(key)) + '=' + queryString[key][i]);\n }\n });\n uri += parts.join('&');\n }\n\n return uri;\n}\n\nfunction populateURI(req) {\n var operation = req.service.api.operations[req.operation];\n var input = operation.input;\n\n var uri = generateURI(req.httpRequest.endpoint.path, operation.httpPath, input, req.params);\n req.httpRequest.path = uri;\n}\n\nfunction populateHeaders(req) {\n var operation = req.service.api.operations[req.operation];\n util.each(operation.input.members, function (name, member) {\n var value = req.params[name];\n if (value === null || value === undefined) return;\n\n if (member.location === 'headers' && member.type === 'map') {\n util.each(value, function(key, memberValue) {\n req.httpRequest.headers[member.name + key] = memberValue;\n });\n } else if (member.location === 'header') {\n value = member.toWireFormat(value).toString();\n if (member.isJsonValue) {\n value = util.base64.encode(value);\n }\n req.httpRequest.headers[member.name] = value;\n }\n });\n}\n\nfunction buildRequest(req) {\n populateMethod(req);\n populateURI(req);\n populateHeaders(req);\n populateHostPrefix(req);\n}\n\nfunction extractError() {\n}\n\nfunction extractData(resp) {\n var req = resp.request;\n var data = {};\n var r = resp.httpResponse;\n var operation = req.service.api.operations[req.operation];\n var output = operation.output;\n\n // normalize headers names to lower-cased keys for matching\n var headers = {};\n util.each(r.headers, function (k, v) {\n headers[k.toLowerCase()] = v;\n });\n\n util.each(output.members, function(name, member) {\n var header = (member.name || name).toLowerCase();\n if (member.location === 'headers' && member.type === 'map') {\n data[name] = {};\n var location = member.isLocationName ? member.name : '';\n var pattern = new RegExp('^' + location + '(.+)', 'i');\n util.each(r.headers, function (k, v) {\n var result = k.match(pattern);\n if (result !== null) {\n data[name][result[1]] = v;\n }\n });\n } else if (member.location === 'header') {\n if (headers[header] !== undefined) {\n var value = member.isJsonValue ?\n util.base64.decode(headers[header]) :\n headers[header];\n data[name] = member.toType(value);\n }\n } else if (member.location === 'statusCode') {\n data[name] = parseInt(r.statusCode, 10);\n }\n });\n\n resp.data = data;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData,\n generateURI: generateURI\n};\n","var util = require('../util');\nvar Rest = require('./rest');\nvar Json = require('./json');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\n\nvar METHODS_WITHOUT_BODY = ['GET', 'HEAD', 'DELETE'];\n\nfunction unsetContentLength(req) {\n var payloadMember = util.getRequestPayloadShape(req);\n if (\n payloadMember === undefined &&\n METHODS_WITHOUT_BODY.indexOf(req.httpRequest.method) >= 0\n ) {\n delete req.httpRequest.headers['Content-Length'];\n }\n}\n\nfunction populateBody(req) {\n var builder = new JsonBuilder();\n var input = req.service.api.operations[req.operation].input;\n\n if (input.payload) {\n var params = {};\n var payloadShape = input.members[input.payload];\n params = req.params[input.payload];\n\n if (payloadShape.type === 'structure') {\n req.httpRequest.body = builder.build(params || {}, payloadShape);\n applyContentTypeHeader(req);\n } else if (params !== undefined) {\n // non-JSON payload\n req.httpRequest.body = params;\n if (payloadShape.type === 'binary' || payloadShape.isStreaming) {\n applyContentTypeHeader(req, true);\n }\n }\n } else {\n req.httpRequest.body = builder.build(req.params, input);\n applyContentTypeHeader(req);\n }\n}\n\nfunction applyContentTypeHeader(req, isBinary) {\n if (!req.httpRequest.headers['Content-Type']) {\n var type = isBinary ? 'binary/octet-stream' : 'application/json';\n req.httpRequest.headers['Content-Type'] = type;\n }\n}\n\nfunction buildRequest(req) {\n Rest.buildRequest(req);\n\n // never send body payload on GET/HEAD/DELETE\n if (METHODS_WITHOUT_BODY.indexOf(req.httpRequest.method) < 0) {\n populateBody(req);\n }\n}\n\nfunction extractError(resp) {\n Json.extractError(resp);\n}\n\nfunction extractData(resp) {\n Rest.extractData(resp);\n\n var req = resp.request;\n var operation = req.service.api.operations[req.operation];\n var rules = req.service.api.operations[req.operation].output || {};\n var parser;\n var hasEventOutput = operation.hasEventOutput;\n\n if (rules.payload) {\n var payloadMember = rules.members[rules.payload];\n var body = resp.httpResponse.body;\n if (payloadMember.isEventStream) {\n parser = new JsonParser();\n resp.data[payload] = util.createEventStream(\n AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : body,\n parser,\n payloadMember\n );\n } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {\n var parser = new JsonParser();\n resp.data[rules.payload] = parser.parse(body, payloadMember);\n } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n resp.data[rules.payload] = body;\n } else {\n resp.data[rules.payload] = payloadMember.toType(body);\n }\n } else {\n var data = resp.data;\n Json.extractData(resp);\n resp.data = util.merge(data, resp.data);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData,\n unsetContentLength: unsetContentLength\n};\n","var AWS = require('../core');\nvar util = require('../util');\nvar Rest = require('./rest');\n\nfunction populateBody(req) {\n var input = req.service.api.operations[req.operation].input;\n var builder = new AWS.XML.Builder();\n var params = req.params;\n\n var payload = input.payload;\n if (payload) {\n var payloadMember = input.members[payload];\n params = params[payload];\n if (params === undefined) return;\n\n if (payloadMember.type === 'structure') {\n var rootElement = payloadMember.name;\n req.httpRequest.body = builder.toXML(params, payloadMember, rootElement, true);\n } else { // non-xml payload\n req.httpRequest.body = params;\n }\n } else {\n req.httpRequest.body = builder.toXML(params, input, input.name ||\n input.shape || util.string.upperFirst(req.operation) + 'Request');\n }\n}\n\nfunction buildRequest(req) {\n Rest.buildRequest(req);\n\n // never send body payload on GET/HEAD\n if (['GET', 'HEAD'].indexOf(req.httpRequest.method) < 0) {\n populateBody(req);\n }\n}\n\nfunction extractError(resp) {\n Rest.extractError(resp);\n\n var data;\n try {\n data = new AWS.XML.Parser().parse(resp.httpResponse.body.toString());\n } catch (e) {\n data = {\n Code: resp.httpResponse.statusCode,\n Message: resp.httpResponse.statusMessage\n };\n }\n\n if (data.Errors) data = data.Errors;\n if (data.Error) data = data.Error;\n if (data.Code) {\n resp.error = util.error(new Error(), {\n code: data.Code,\n message: data.Message\n });\n } else {\n resp.error = util.error(new Error(), {\n code: resp.httpResponse.statusCode,\n message: null\n });\n }\n}\n\nfunction extractData(resp) {\n Rest.extractData(resp);\n\n var parser;\n var req = resp.request;\n var body = resp.httpResponse.body;\n var operation = req.service.api.operations[req.operation];\n var output = operation.output;\n\n var hasEventOutput = operation.hasEventOutput;\n\n var payload = output.payload;\n if (payload) {\n var payloadMember = output.members[payload];\n if (payloadMember.isEventStream) {\n parser = new AWS.XML.Parser();\n resp.data[payload] = util.createEventStream(\n AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : resp.httpResponse.body,\n parser,\n payloadMember\n );\n } else if (payloadMember.type === 'structure') {\n parser = new AWS.XML.Parser();\n resp.data[payload] = parser.parse(body.toString(), payloadMember);\n } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n resp.data[payload] = body;\n } else {\n resp.data[payload] = payloadMember.toType(body);\n }\n } else if (body.length > 0) {\n parser = new AWS.XML.Parser();\n var data = parser.parse(body.toString(), output);\n util.update(resp.data, data);\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n","var util = require('../util');\n\nfunction QueryParamSerializer() {\n}\n\nQueryParamSerializer.prototype.serialize = function(params, shape, fn) {\n serializeStructure('', params, shape, fn);\n};\n\nfunction ucfirst(shape) {\n if (shape.isQueryName || shape.api.protocol !== 'ec2') {\n return shape.name;\n } else {\n return shape.name[0].toUpperCase() + shape.name.substr(1);\n }\n}\n\nfunction serializeStructure(prefix, struct, rules, fn) {\n util.each(rules.members, function(name, member) {\n var value = struct[name];\n if (value === null || value === undefined) return;\n\n var memberName = ucfirst(member);\n memberName = prefix ? prefix + '.' + memberName : memberName;\n serializeMember(memberName, value, member, fn);\n });\n}\n\nfunction serializeMap(name, map, rules, fn) {\n var i = 1;\n util.each(map, function (key, value) {\n var prefix = rules.flattened ? '.' : '.entry.';\n var position = prefix + (i++) + '.';\n var keyName = position + (rules.key.name || 'key');\n var valueName = position + (rules.value.name || 'value');\n serializeMember(name + keyName, key, rules.key, fn);\n serializeMember(name + valueName, value, rules.value, fn);\n });\n}\n\nfunction serializeList(name, list, rules, fn) {\n var memberRules = rules.member || {};\n\n if (list.length === 0) {\n fn.call(this, name, null);\n return;\n }\n\n util.arrayEach(list, function (v, n) {\n var suffix = '.' + (n + 1);\n if (rules.api.protocol === 'ec2') {\n // Do nothing for EC2\n suffix = suffix + ''; // make linter happy\n } else if (rules.flattened) {\n if (memberRules.name) {\n var parts = name.split('.');\n parts.pop();\n parts.push(ucfirst(memberRules));\n name = parts.join('.');\n }\n } else {\n suffix = '.' + (memberRules.name ? memberRules.name : 'member') + suffix;\n }\n serializeMember(name + suffix, v, memberRules, fn);\n });\n}\n\nfunction serializeMember(name, value, rules, fn) {\n if (value === null || value === undefined) return;\n if (rules.type === 'structure') {\n serializeStructure(name, value, rules, fn);\n } else if (rules.type === 'list') {\n serializeList(name, value, rules, fn);\n } else if (rules.type === 'map') {\n serializeMap(name, value, rules, fn);\n } else {\n fn(name, rules.toWireFormat(value).toString());\n }\n}\n\n/**\n * @api private\n */\nmodule.exports = QueryParamSerializer;\n","module.exports = {\n //provide realtime clock for performance measurement\n now: function now() {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now();\n }\n return Date.now();\n }\n};\n","function isFipsRegion(region) {\n return typeof region === 'string' && (region.startsWith('fips-') || region.endsWith('-fips'));\n}\n\nfunction isGlobalRegion(region) {\n return typeof region === 'string' && ['aws-global', 'aws-us-gov-global'].includes(region);\n}\n\nfunction getRealRegion(region) {\n return ['fips-aws-global', 'aws-fips', 'aws-global'].includes(region)\n ? 'us-east-1'\n : ['fips-aws-us-gov-global', 'aws-us-gov-global'].includes(region)\n ? 'us-gov-west-1'\n : region.replace(/fips-(dkr-|prod-)?|-fips/, '');\n}\n\nmodule.exports = {\n isFipsRegion: isFipsRegion,\n isGlobalRegion: isGlobalRegion,\n getRealRegion: getRealRegion\n};\n","var util = require('./util');\nvar regionConfig = require('./region_config_data.json');\n\nfunction generateRegionPrefix(region) {\n if (!region) return null;\n var parts = region.split('-');\n if (parts.length < 3) return null;\n return parts.slice(0, parts.length - 2).join('-') + '-*';\n}\n\nfunction derivedKeys(service) {\n var region = service.config.region;\n var regionPrefix = generateRegionPrefix(region);\n var endpointPrefix = service.api.endpointPrefix;\n\n return [\n [region, endpointPrefix],\n [regionPrefix, endpointPrefix],\n [region, '*'],\n [regionPrefix, '*'],\n ['*', endpointPrefix],\n ['*', '*']\n ].map(function(item) {\n return item[0] && item[1] ? item.join('/') : null;\n });\n}\n\nfunction applyConfig(service, config) {\n util.each(config, function(key, value) {\n if (key === 'globalEndpoint') return;\n if (service.config[key] === undefined || service.config[key] === null) {\n service.config[key] = value;\n }\n });\n}\n\nfunction configureEndpoint(service) {\n var keys = derivedKeys(service);\n var useFipsEndpoint = service.config.useFipsEndpoint;\n var useDualstackEndpoint = service.config.useDualstackEndpoint;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!key) continue;\n\n var rules = useFipsEndpoint\n ? useDualstackEndpoint\n ? regionConfig.dualstackFipsRules\n : regionConfig.fipsRules\n : useDualstackEndpoint\n ? regionConfig.dualstackRules\n : regionConfig.rules;\n\n if (Object.prototype.hasOwnProperty.call(rules, key)) {\n var config = rules[key];\n if (typeof config === 'string') {\n config = regionConfig.patterns[config];\n }\n\n // set global endpoint\n service.isGlobalEndpoint = !!config.globalEndpoint;\n if (config.signingRegion) {\n service.signingRegion = config.signingRegion;\n }\n\n // signature version\n if (!config.signatureVersion) {\n // Note: config is a global object and should not be mutated here.\n // However, we are retaining this line for backwards compatibility.\n // The non-v4 signatureVersion will be set in a copied object below.\n config.signatureVersion = 'v4';\n }\n\n var useBearer = (service.api && service.api.signatureVersion) === 'bearer';\n\n // merge config\n applyConfig(service, Object.assign(\n {},\n config,\n { signatureVersion: useBearer ? 'bearer' : config.signatureVersion }\n ));\n return;\n }\n }\n}\n\nfunction getEndpointSuffix(region) {\n var regionRegexes = {\n '^(us|eu|ap|sa|ca|me)\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com',\n '^cn\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com.cn',\n '^us\\\\-gov\\\\-\\\\w+\\\\-\\\\d+$': 'amazonaws.com',\n '^us\\\\-iso\\\\-\\\\w+\\\\-\\\\d+$': 'c2s.ic.gov',\n '^us\\\\-isob\\\\-\\\\w+\\\\-\\\\d+$': 'sc2s.sgov.gov'\n };\n var defaultSuffix = 'amazonaws.com';\n var regexes = Object.keys(regionRegexes);\n for (var i = 0; i < regexes.length; i++) {\n var regionPattern = RegExp(regexes[i]);\n var dnsSuffix = regionRegexes[regexes[i]];\n if (regionPattern.test(region)) return dnsSuffix;\n }\n return defaultSuffix;\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n configureEndpoint: configureEndpoint,\n getEndpointSuffix: getEndpointSuffix,\n};\n","var AWS = require('./core');\nvar AcceptorStateMachine = require('./state_machine');\nvar inherit = AWS.util.inherit;\nvar domain = AWS.util.domain;\nvar jmespath = require('jmespath');\n\n/**\n * @api private\n */\nvar hardErrorStates = {success: 1, error: 1, complete: 1};\n\nfunction isTerminalState(machine) {\n return Object.prototype.hasOwnProperty.call(hardErrorStates, machine._asm.currentState);\n}\n\nvar fsm = new AcceptorStateMachine();\nfsm.setupStates = function() {\n var transition = function(_, done) {\n var self = this;\n self._haltHandlersOnError = false;\n\n self.emit(self._asm.currentState, function(err) {\n if (err) {\n if (isTerminalState(self)) {\n if (domain && self.domain instanceof domain.Domain) {\n err.domainEmitter = self;\n err.domain = self.domain;\n err.domainThrown = false;\n self.domain.emit('error', err);\n } else {\n throw err;\n }\n } else {\n self.response.error = err;\n done(err);\n }\n } else {\n done(self.response.error);\n }\n });\n\n };\n\n this.addState('validate', 'build', 'error', transition);\n this.addState('build', 'afterBuild', 'restart', transition);\n this.addState('afterBuild', 'sign', 'restart', transition);\n this.addState('sign', 'send', 'retry', transition);\n this.addState('retry', 'afterRetry', 'afterRetry', transition);\n this.addState('afterRetry', 'sign', 'error', transition);\n this.addState('send', 'validateResponse', 'retry', transition);\n this.addState('validateResponse', 'extractData', 'extractError', transition);\n this.addState('extractError', 'extractData', 'retry', transition);\n this.addState('extractData', 'success', 'retry', transition);\n this.addState('restart', 'build', 'error', transition);\n this.addState('success', 'complete', 'complete', transition);\n this.addState('error', 'complete', 'complete', transition);\n this.addState('complete', null, null, transition);\n};\nfsm.setupStates();\n\n/**\n * ## Asynchronous Requests\n *\n * All requests made through the SDK are asynchronous and use a\n * callback interface. Each service method that kicks off a request\n * returns an `AWS.Request` object that you can use to register\n * callbacks.\n *\n * For example, the following service method returns the request\n * object as \"request\", which can be used to register callbacks:\n *\n * ```javascript\n * // request is an AWS.Request object\n * var request = ec2.describeInstances();\n *\n * // register callbacks on request to retrieve response data\n * request.on('success', function(response) {\n * console.log(response.data);\n * });\n * ```\n *\n * When a request is ready to be sent, the {send} method should\n * be called:\n *\n * ```javascript\n * request.send();\n * ```\n *\n * Since registered callbacks may or may not be idempotent, requests should only\n * be sent once. To perform the same operation multiple times, you will need to\n * create multiple request objects, each with its own registered callbacks.\n *\n * ## Removing Default Listeners for Events\n *\n * Request objects are built with default listeners for the various events,\n * depending on the service type. In some cases, you may want to remove\n * some built-in listeners to customize behaviour. Doing this requires\n * access to the built-in listener functions, which are exposed through\n * the {AWS.EventListeners.Core} namespace. For instance, you may\n * want to customize the HTTP handler used when sending a request. In this\n * case, you can remove the built-in listener associated with the 'send'\n * event, the {AWS.EventListeners.Core.SEND} listener and add your own.\n *\n * ## Multiple Callbacks and Chaining\n *\n * You can register multiple callbacks on any request object. The\n * callbacks can be registered for different events, or all for the\n * same event. In addition, you can chain callback registration, for\n * example:\n *\n * ```javascript\n * request.\n * on('success', function(response) {\n * console.log(\"Success!\");\n * }).\n * on('error', function(error, response) {\n * console.log(\"Error!\");\n * }).\n * on('complete', function(response) {\n * console.log(\"Always!\");\n * }).\n * send();\n * ```\n *\n * The above example will print either \"Success! Always!\", or \"Error! Always!\",\n * depending on whether the request succeeded or not.\n *\n * @!attribute httpRequest\n * @readonly\n * @!group HTTP Properties\n * @return [AWS.HttpRequest] the raw HTTP request object\n * containing request headers and body information\n * sent by the service.\n *\n * @!attribute startTime\n * @readonly\n * @!group Operation Properties\n * @return [Date] the time that the request started\n *\n * @!group Request Building Events\n *\n * @!event validate(request)\n * Triggered when a request is being validated. Listeners\n * should throw an error if the request should not be sent.\n * @param request [Request] the request object being sent\n * @see AWS.EventListeners.Core.VALIDATE_CREDENTIALS\n * @see AWS.EventListeners.Core.VALIDATE_REGION\n * @example Ensuring that a certain parameter is set before sending a request\n * var req = s3.putObject(params);\n * req.on('validate', function() {\n * if (!req.params.Body.match(/^Hello\\s/)) {\n * throw new Error('Body must start with \"Hello \"');\n * }\n * });\n * req.send(function(err, data) { ... });\n *\n * @!event build(request)\n * Triggered when the request payload is being built. Listeners\n * should fill the necessary information to send the request\n * over HTTP.\n * @param (see AWS.Request~validate)\n * @example Add a custom HTTP header to a request\n * var req = s3.putObject(params);\n * req.on('build', function() {\n * req.httpRequest.headers['Custom-Header'] = 'value';\n * });\n * req.send(function(err, data) { ... });\n *\n * @!event sign(request)\n * Triggered when the request is being signed. Listeners should\n * add the correct authentication headers and/or adjust the body,\n * depending on the authentication mechanism being used.\n * @param (see AWS.Request~validate)\n *\n * @!group Request Sending Events\n *\n * @!event send(response)\n * Triggered when the request is ready to be sent. Listeners\n * should call the underlying transport layer to initiate\n * the sending of the request.\n * @param response [Response] the response object\n * @context [Request] the request object that was sent\n * @see AWS.EventListeners.Core.SEND\n *\n * @!event retry(response)\n * Triggered when a request failed and might need to be retried or redirected.\n * If the response is retryable, the listener should set the\n * `response.error.retryable` property to `true`, and optionally set\n * `response.error.retryDelay` to the millisecond delay for the next attempt.\n * In the case of a redirect, `response.error.redirect` should be set to\n * `true` with `retryDelay` set to an optional delay on the next request.\n *\n * If a listener decides that a request should not be retried,\n * it should set both `retryable` and `redirect` to false.\n *\n * Note that a retryable error will be retried at most\n * {AWS.Config.maxRetries} times (based on the service object's config).\n * Similarly, a request that is redirected will only redirect at most\n * {AWS.Config.maxRedirects} times.\n *\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @example Adding a custom retry for a 404 response\n * request.on('retry', function(response) {\n * // this resource is not yet available, wait 10 seconds to get it again\n * if (response.httpResponse.statusCode === 404 && response.error) {\n * response.error.retryable = true; // retry this error\n * response.error.retryDelay = 10000; // wait 10 seconds\n * }\n * });\n *\n * @!group Data Parsing Events\n *\n * @!event extractError(response)\n * Triggered on all non-2xx requests so that listeners can extract\n * error details from the response body. Listeners to this event\n * should set the `response.error` property.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event extractData(response)\n * Triggered in successful requests to allow listeners to\n * de-serialize the response body into `response.data`.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!group Completion Events\n *\n * @!event success(response)\n * Triggered when the request completed successfully.\n * `response.data` will contain the response data and\n * `response.error` will be null.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event error(error, response)\n * Triggered when an error occurs at any point during the\n * request. `response.error` will contain details about the error\n * that occurred. `response.data` will be null.\n * @param error [Error] the error object containing details about\n * the error that occurred.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event complete(response)\n * Triggered whenever a request cycle completes. `response.error`\n * should be checked, since the request may have failed.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!group HTTP Events\n *\n * @!event httpHeaders(statusCode, headers, response, statusMessage)\n * Triggered when headers are sent by the remote server\n * @param statusCode [Integer] the HTTP response code\n * @param headers [map] the response headers\n * @param (see AWS.Request~send)\n * @param statusMessage [String] A status message corresponding to the HTTP\n * response code\n * @context (see AWS.Request~send)\n *\n * @!event httpData(chunk, response)\n * Triggered when data is sent by the remote server\n * @param chunk [Buffer] the buffer data containing the next data chunk\n * from the server\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @see AWS.EventListeners.Core.HTTP_DATA\n *\n * @!event httpUploadProgress(progress, response)\n * Triggered when the HTTP request has uploaded more data\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpDownloadProgress(progress, response)\n * Triggered when the HTTP request has downloaded more data\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpError(error, response)\n * Triggered when the HTTP request failed\n * @param error [Error] the error object that was thrown\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event httpDone(response)\n * Triggered when the server is finished sending data\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @see AWS.Response\n */\nAWS.Request = inherit({\n\n /**\n * Creates a request for an operation on a given service with\n * a set of input parameters.\n *\n * @param service [AWS.Service] the service to perform the operation on\n * @param operation [String] the operation to perform on the service\n * @param params [Object] parameters to send to the operation.\n * See the operation's documentation for the format of the\n * parameters.\n */\n constructor: function Request(service, operation, params) {\n var endpoint = service.endpoint;\n var region = service.config.region;\n var customUserAgent = service.config.customUserAgent;\n\n if (service.signingRegion) {\n region = service.signingRegion;\n } else if (service.isGlobalEndpoint) {\n region = 'us-east-1';\n }\n\n this.domain = domain && domain.active;\n this.service = service;\n this.operation = operation;\n this.params = params || {};\n this.httpRequest = new AWS.HttpRequest(endpoint, region);\n this.httpRequest.appendToUserAgent(customUserAgent);\n this.startTime = service.getSkewCorrectedDate();\n\n this.response = new AWS.Response(this);\n this._asm = new AcceptorStateMachine(fsm.states, 'validate');\n this._haltHandlersOnError = false;\n\n AWS.SequentialExecutor.call(this);\n this.emit = this.emitEvent;\n },\n\n /**\n * @!group Sending a Request\n */\n\n /**\n * @overload send(callback = null)\n * Sends the request object.\n *\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @context [AWS.Request] the request object being sent.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n * @example Sending a request with a callback\n * request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * request.send(function(err, data) { console.log(err, data); });\n * @example Sending a request with no callback (using event handlers)\n * request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * request.on('complete', function(response) { ... }); // register a callback\n * request.send();\n */\n send: function send(callback) {\n if (callback) {\n // append to user agent\n this.httpRequest.appendToUserAgent('callback');\n this.on('complete', function (resp) {\n callback.call(resp, resp.error, resp.data);\n });\n }\n this.runTo();\n\n return this.response;\n },\n\n /**\n * @!method promise()\n * Sends the request and returns a 'thenable' promise.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(data)\n * Called if the promise is fulfilled.\n * @param data [Object] the de-serialized data returned from the request.\n * @callback rejectedCallback function(error)\n * Called if the promise is rejected.\n * @param error [Error] the error object returned from the request.\n * @return [Promise] A promise that represents the state of the request.\n * @example Sending a request using promises.\n * var request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * var result = request.promise();\n * result.then(function(data) { ... }, function(error) { ... });\n */\n\n /**\n * @api private\n */\n build: function build(callback) {\n return this.runTo('send', callback);\n },\n\n /**\n * @api private\n */\n runTo: function runTo(state, done) {\n this._asm.runTo(state, done, this);\n return this;\n },\n\n /**\n * Aborts a request, emitting the error and complete events.\n *\n * @!macro nobrowser\n * @example Aborting a request after sending\n * var params = {\n * Bucket: 'bucket', Key: 'key',\n * Body: Buffer.alloc(1024 * 1024 * 5) // 5MB payload\n * };\n * var request = s3.putObject(params);\n * request.send(function (err, data) {\n * if (err) console.log(\"Error:\", err.code, err.message);\n * else console.log(data);\n * });\n *\n * // abort request in 1 second\n * setTimeout(request.abort.bind(request), 1000);\n *\n * // prints \"Error: RequestAbortedError Request aborted by user\"\n * @return [AWS.Request] the same request object, for chaining.\n * @since v1.4.0\n */\n abort: function abort() {\n this.removeAllListeners('validateResponse');\n this.removeAllListeners('extractError');\n this.on('validateResponse', function addAbortedError(resp) {\n resp.error = AWS.util.error(new Error('Request aborted by user'), {\n code: 'RequestAbortedError', retryable: false\n });\n });\n\n if (this.httpRequest.stream && !this.httpRequest.stream.didCallback) { // abort HTTP stream\n this.httpRequest.stream.abort();\n if (this.httpRequest._abortCallback) {\n this.httpRequest._abortCallback();\n } else {\n this.removeAllListeners('send'); // haven't sent yet, so let's not\n }\n }\n\n return this;\n },\n\n /**\n * Iterates over each page of results given a pageable request, calling\n * the provided callback with each page of data. After all pages have been\n * retrieved, the callback is called with `null` data.\n *\n * @note This operation can generate multiple requests to a service.\n * @example Iterating over multiple pages of objects in an S3 bucket\n * var pages = 1;\n * s3.listObjects().eachPage(function(err, data) {\n * if (err) return;\n * console.log(\"Page\", pages++);\n * console.log(data);\n * });\n * @example Iterating over multiple pages with an asynchronous callback\n * s3.listObjects(params).eachPage(function(err, data, done) {\n * doSomethingAsyncAndOrExpensive(function() {\n * // The next page of results isn't fetched until done is called\n * done();\n * });\n * });\n * @callback callback function(err, data, [doneCallback])\n * Called with each page of resulting data from the request. If the\n * optional `doneCallback` is provided in the function, it must be called\n * when the callback is complete.\n *\n * @param err [Error] an error object, if an error occurred.\n * @param data [Object] a single page of response data. If there is no\n * more data, this object will be `null`.\n * @param doneCallback [Function] an optional done callback. If this\n * argument is defined in the function declaration, it should be called\n * when the next page is ready to be retrieved. This is useful for\n * controlling serial pagination across asynchronous operations.\n * @return [Boolean] if the callback returns `false`, pagination will\n * stop.\n *\n * @see AWS.Request.eachItem\n * @see AWS.Response.nextPage\n * @since v1.4.0\n */\n eachPage: function eachPage(callback) {\n // Make all callbacks async-ish\n callback = AWS.util.fn.makeAsync(callback, 3);\n\n function wrappedCallback(response) {\n callback.call(response, response.error, response.data, function (result) {\n if (result === false) return;\n\n if (response.hasNextPage()) {\n response.nextPage().on('complete', wrappedCallback).send();\n } else {\n callback.call(response, null, null, AWS.util.fn.noop);\n }\n });\n }\n\n this.on('complete', wrappedCallback).send();\n },\n\n /**\n * Enumerates over individual items of a request, paging the responses if\n * necessary.\n *\n * @api experimental\n * @since v1.4.0\n */\n eachItem: function eachItem(callback) {\n var self = this;\n function wrappedCallback(err, data) {\n if (err) return callback(err, null);\n if (data === null) return callback(null, null);\n\n var config = self.service.paginationConfig(self.operation);\n var resultKey = config.resultKey;\n if (Array.isArray(resultKey)) resultKey = resultKey[0];\n var items = jmespath.search(data, resultKey);\n var continueIteration = true;\n AWS.util.arrayEach(items, function(item) {\n continueIteration = callback(null, item);\n if (continueIteration === false) {\n return AWS.util.abort;\n }\n });\n return continueIteration;\n }\n\n this.eachPage(wrappedCallback);\n },\n\n /**\n * @return [Boolean] whether the operation can return multiple pages of\n * response data.\n * @see AWS.Response.eachPage\n * @since v1.4.0\n */\n isPageable: function isPageable() {\n return this.service.paginationConfig(this.operation) ? true : false;\n },\n\n /**\n * Sends the request and converts the request object into a readable stream\n * that can be read from or piped into a writable stream.\n *\n * @note The data read from a readable stream contains only\n * the raw HTTP body contents.\n * @example Manually reading from a stream\n * request.createReadStream().on('data', function(data) {\n * console.log(\"Got data:\", data.toString());\n * });\n * @example Piping a request body into a file\n * var out = fs.createWriteStream('/path/to/outfile.jpg');\n * s3.service.getObject(params).createReadStream().pipe(out);\n * @return [Stream] the readable stream object that can be piped\n * or read from (by registering 'data' event listeners).\n * @!macro nobrowser\n */\n createReadStream: function createReadStream() {\n var streams = AWS.util.stream;\n var req = this;\n var stream = null;\n\n if (AWS.HttpClient.streamsApiVersion === 2) {\n stream = new streams.PassThrough();\n process.nextTick(function() { req.send(); });\n } else {\n stream = new streams.Stream();\n stream.readable = true;\n\n stream.sent = false;\n stream.on('newListener', function(event) {\n if (!stream.sent && event === 'data') {\n stream.sent = true;\n process.nextTick(function() { req.send(); });\n }\n });\n }\n\n this.on('error', function(err) {\n stream.emit('error', err);\n });\n\n this.on('httpHeaders', function streamHeaders(statusCode, headers, resp) {\n if (statusCode < 300) {\n req.removeListener('httpData', AWS.EventListeners.Core.HTTP_DATA);\n req.removeListener('httpError', AWS.EventListeners.Core.HTTP_ERROR);\n req.on('httpError', function streamHttpError(error) {\n resp.error = error;\n resp.error.retryable = false;\n });\n\n var shouldCheckContentLength = false;\n var expectedLen;\n if (req.httpRequest.method !== 'HEAD') {\n expectedLen = parseInt(headers['content-length'], 10);\n }\n if (expectedLen !== undefined && !isNaN(expectedLen) && expectedLen >= 0) {\n shouldCheckContentLength = true;\n var receivedLen = 0;\n }\n\n var checkContentLengthAndEmit = function checkContentLengthAndEmit() {\n if (shouldCheckContentLength && receivedLen !== expectedLen) {\n stream.emit('error', AWS.util.error(\n new Error('Stream content length mismatch. Received ' +\n receivedLen + ' of ' + expectedLen + ' bytes.'),\n { code: 'StreamContentLengthMismatch' }\n ));\n } else if (AWS.HttpClient.streamsApiVersion === 2) {\n stream.end();\n } else {\n stream.emit('end');\n }\n };\n\n var httpStream = resp.httpResponse.createUnbufferedStream();\n\n if (AWS.HttpClient.streamsApiVersion === 2) {\n if (shouldCheckContentLength) {\n var lengthAccumulator = new streams.PassThrough();\n lengthAccumulator._write = function(chunk) {\n if (chunk && chunk.length) {\n receivedLen += chunk.length;\n }\n return streams.PassThrough.prototype._write.apply(this, arguments);\n };\n\n lengthAccumulator.on('end', checkContentLengthAndEmit);\n stream.on('error', function(err) {\n shouldCheckContentLength = false;\n httpStream.unpipe(lengthAccumulator);\n lengthAccumulator.emit('end');\n lengthAccumulator.end();\n });\n httpStream.pipe(lengthAccumulator).pipe(stream, { end: false });\n } else {\n httpStream.pipe(stream);\n }\n } else {\n\n if (shouldCheckContentLength) {\n httpStream.on('data', function(arg) {\n if (arg && arg.length) {\n receivedLen += arg.length;\n }\n });\n }\n\n httpStream.on('data', function(arg) {\n stream.emit('data', arg);\n });\n httpStream.on('end', checkContentLengthAndEmit);\n }\n\n httpStream.on('error', function(err) {\n shouldCheckContentLength = false;\n stream.emit('error', err);\n });\n }\n });\n\n return stream;\n },\n\n /**\n * @param [Array,Response] args This should be the response object,\n * or an array of args to send to the event.\n * @api private\n */\n emitEvent: function emit(eventName, args, done) {\n if (typeof args === 'function') { done = args; args = null; }\n if (!done) done = function() { };\n if (!args) args = this.eventParameters(eventName, this.response);\n\n var origEmit = AWS.SequentialExecutor.prototype.emit;\n origEmit.call(this, eventName, args, function (err) {\n if (err) this.response.error = err;\n done.call(this, err);\n });\n },\n\n /**\n * @api private\n */\n eventParameters: function eventParameters(eventName) {\n switch (eventName) {\n case 'restart':\n case 'validate':\n case 'sign':\n case 'build':\n case 'afterValidate':\n case 'afterBuild':\n return [this];\n case 'error':\n return [this.response.error, this.response];\n default:\n return [this.response];\n }\n },\n\n /**\n * @api private\n */\n presign: function presign(expires, callback) {\n if (!callback && typeof expires === 'function') {\n callback = expires;\n expires = null;\n }\n return new AWS.Signers.Presign().sign(this.toGet(), expires, callback);\n },\n\n /**\n * @api private\n */\n isPresigned: function isPresigned() {\n return Object.prototype.hasOwnProperty.call(this.httpRequest.headers, 'presigned-expires');\n },\n\n /**\n * @api private\n */\n toUnauthenticated: function toUnauthenticated() {\n this._unAuthenticated = true;\n this.removeListener('validate', AWS.EventListeners.Core.VALIDATE_CREDENTIALS);\n this.removeListener('sign', AWS.EventListeners.Core.SIGN);\n return this;\n },\n\n /**\n * @api private\n */\n toGet: function toGet() {\n if (this.service.api.protocol === 'query' ||\n this.service.api.protocol === 'ec2') {\n this.removeListener('build', this.buildAsGet);\n this.addListener('build', this.buildAsGet);\n }\n return this;\n },\n\n /**\n * @api private\n */\n buildAsGet: function buildAsGet(request) {\n request.httpRequest.method = 'GET';\n request.httpRequest.path = request.service.endpoint.path +\n '?' + request.httpRequest.body;\n request.httpRequest.body = '';\n\n // don't need these headers on a GET request\n delete request.httpRequest.headers['Content-Length'];\n delete request.httpRequest.headers['Content-Type'];\n },\n\n /**\n * @api private\n */\n haltHandlersOnError: function haltHandlersOnError() {\n this._haltHandlersOnError = true;\n }\n});\n\n/**\n * @api private\n */\nAWS.Request.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.promise = function promise() {\n var self = this;\n // append to user agent\n this.httpRequest.appendToUserAgent('promise');\n return new PromiseDependency(function(resolve, reject) {\n self.on('complete', function(resp) {\n if (resp.error) {\n reject(resp.error);\n } else {\n // define $response property so that it is not enumerable\n // this prevents circular reference errors when stringifying the JSON object\n resolve(Object.defineProperty(\n resp.data || {},\n '$response',\n {value: resp}\n ));\n }\n });\n self.runTo();\n });\n };\n};\n\n/**\n * @api private\n */\nAWS.Request.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.Request);\n\nAWS.util.mixin(AWS.Request, AWS.SequentialExecutor);\n","/**\n * Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You\n * may not use this file except in compliance with the License. A copy of\n * the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific\n * language governing permissions and limitations under the License.\n */\n\nvar AWS = require('./core');\nvar inherit = AWS.util.inherit;\nvar jmespath = require('jmespath');\n\n/**\n * @api private\n */\nfunction CHECK_ACCEPTORS(resp) {\n var waiter = resp.request._waiter;\n var acceptors = waiter.config.acceptors;\n var acceptorMatched = false;\n var state = 'retry';\n\n acceptors.forEach(function(acceptor) {\n if (!acceptorMatched) {\n var matcher = waiter.matchers[acceptor.matcher];\n if (matcher && matcher(resp, acceptor.expected, acceptor.argument)) {\n acceptorMatched = true;\n state = acceptor.state;\n }\n }\n });\n\n if (!acceptorMatched && resp.error) state = 'failure';\n\n if (state === 'success') {\n waiter.setSuccess(resp);\n } else {\n waiter.setError(resp, state === 'retry');\n }\n}\n\n/**\n * @api private\n */\nAWS.ResourceWaiter = inherit({\n /**\n * Waits for a given state on a service object\n * @param service [Service] the service object to wait on\n * @param state [String] the state (defined in waiter configuration) to wait\n * for.\n * @example Create a waiter for running EC2 instances\n * var ec2 = new AWS.EC2;\n * var waiter = new AWS.ResourceWaiter(ec2, 'instanceRunning');\n */\n constructor: function constructor(service, state) {\n this.service = service;\n this.state = state;\n this.loadWaiterConfig(this.state);\n },\n\n service: null,\n\n state: null,\n\n config: null,\n\n matchers: {\n path: function(resp, expected, argument) {\n try {\n var result = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n return jmespath.strictDeepEqual(result,expected);\n },\n\n pathAll: function(resp, expected, argument) {\n try {\n var results = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n if (!Array.isArray(results)) results = [results];\n var numResults = results.length;\n if (!numResults) return false;\n for (var ind = 0 ; ind < numResults; ind++) {\n if (!jmespath.strictDeepEqual(results[ind], expected)) {\n return false;\n }\n }\n return true;\n },\n\n pathAny: function(resp, expected, argument) {\n try {\n var results = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n if (!Array.isArray(results)) results = [results];\n var numResults = results.length;\n for (var ind = 0 ; ind < numResults; ind++) {\n if (jmespath.strictDeepEqual(results[ind], expected)) {\n return true;\n }\n }\n return false;\n },\n\n status: function(resp, expected) {\n var statusCode = resp.httpResponse.statusCode;\n return (typeof statusCode === 'number') && (statusCode === expected);\n },\n\n error: function(resp, expected) {\n if (typeof expected === 'string' && resp.error) {\n return expected === resp.error.code;\n }\n // if expected is not string, can be boolean indicating presence of error\n return expected === !!resp.error;\n }\n },\n\n listeners: new AWS.SequentialExecutor().addNamedListeners(function(add) {\n add('RETRY_CHECK', 'retry', function(resp) {\n var waiter = resp.request._waiter;\n if (resp.error && resp.error.code === 'ResourceNotReady') {\n resp.error.retryDelay = (waiter.config.delay || 0) * 1000;\n }\n });\n\n add('CHECK_OUTPUT', 'extractData', CHECK_ACCEPTORS);\n\n add('CHECK_ERROR', 'extractError', CHECK_ACCEPTORS);\n }),\n\n /**\n * @return [AWS.Request]\n */\n wait: function wait(params, callback) {\n if (typeof params === 'function') {\n callback = params; params = undefined;\n }\n\n if (params && params.$waiter) {\n params = AWS.util.copy(params);\n if (typeof params.$waiter.delay === 'number') {\n this.config.delay = params.$waiter.delay;\n }\n if (typeof params.$waiter.maxAttempts === 'number') {\n this.config.maxAttempts = params.$waiter.maxAttempts;\n }\n delete params.$waiter;\n }\n\n var request = this.service.makeRequest(this.config.operation, params);\n request._waiter = this;\n request.response.maxRetries = this.config.maxAttempts;\n request.addListeners(this.listeners);\n\n if (callback) request.send(callback);\n return request;\n },\n\n setSuccess: function setSuccess(resp) {\n resp.error = null;\n resp.data = resp.data || {};\n resp.request.removeAllListeners('extractData');\n },\n\n setError: function setError(resp, retryable) {\n resp.data = null;\n resp.error = AWS.util.error(resp.error || new Error(), {\n code: 'ResourceNotReady',\n message: 'Resource is not in the state ' + this.state,\n retryable: retryable\n });\n },\n\n /**\n * Loads waiter configuration from API configuration\n *\n * @api private\n */\n loadWaiterConfig: function loadWaiterConfig(state) {\n if (!this.service.api.waiters[state]) {\n throw new AWS.util.error(new Error(), {\n code: 'StateNotFoundError',\n message: 'State ' + state + ' not found.'\n });\n }\n\n this.config = AWS.util.copy(this.service.api.waiters[state]);\n }\n});\n","var AWS = require('./core');\nvar inherit = AWS.util.inherit;\nvar jmespath = require('jmespath');\n\n/**\n * This class encapsulates the response information\n * from a service request operation sent through {AWS.Request}.\n * The response object has two main properties for getting information\n * back from a request:\n *\n * ## The `data` property\n *\n * The `response.data` property contains the serialized object data\n * retrieved from the service request. For instance, for an\n * Amazon DynamoDB `listTables` method call, the response data might\n * look like:\n *\n * ```\n * > resp.data\n * { TableNames:\n * [ 'table1', 'table2', ... ] }\n * ```\n *\n * The `data` property can be null if an error occurs (see below).\n *\n * ## The `error` property\n *\n * In the event of a service error (or transfer error), the\n * `response.error` property will be filled with the given\n * error data in the form:\n *\n * ```\n * { code: 'SHORT_UNIQUE_ERROR_CODE',\n * message: 'Some human readable error message' }\n * ```\n *\n * In the case of an error, the `data` property will be `null`.\n * Note that if you handle events that can be in a failure state,\n * you should always check whether `response.error` is set\n * before attempting to access the `response.data` property.\n *\n * @!attribute data\n * @readonly\n * @!group Data Properties\n * @note Inside of a {AWS.Request~httpData} event, this\n * property contains a single raw packet instead of the\n * full de-serialized service response.\n * @return [Object] the de-serialized response data\n * from the service.\n *\n * @!attribute error\n * An structure containing information about a service\n * or networking error.\n * @readonly\n * @!group Data Properties\n * @note This attribute is only filled if a service or\n * networking error occurs.\n * @return [Error]\n * * code [String] a unique short code representing the\n * error that was emitted.\n * * message [String] a longer human readable error message\n * * retryable [Boolean] whether the error message is\n * retryable.\n * * statusCode [Numeric] in the case of a request that reached the service,\n * this value contains the response status code.\n * * time [Date] the date time object when the error occurred.\n * * hostname [String] set when a networking error occurs to easily\n * identify the endpoint of the request.\n * * region [String] set when a networking error occurs to easily\n * identify the region of the request.\n *\n * @!attribute requestId\n * @readonly\n * @!group Data Properties\n * @return [String] the unique request ID associated with the response.\n * Log this value when debugging requests for AWS support.\n *\n * @!attribute retryCount\n * @readonly\n * @!group Operation Properties\n * @return [Integer] the number of retries that were\n * attempted before the request was completed.\n *\n * @!attribute redirectCount\n * @readonly\n * @!group Operation Properties\n * @return [Integer] the number of redirects that were\n * followed before the request was completed.\n *\n * @!attribute httpResponse\n * @readonly\n * @!group HTTP Properties\n * @return [AWS.HttpResponse] the raw HTTP response object\n * containing the response headers and body information\n * from the server.\n *\n * @see AWS.Request\n */\nAWS.Response = inherit({\n\n /**\n * @api private\n */\n constructor: function Response(request) {\n this.request = request;\n this.data = null;\n this.error = null;\n this.retryCount = 0;\n this.redirectCount = 0;\n this.httpResponse = new AWS.HttpResponse();\n if (request) {\n this.maxRetries = request.service.numRetries();\n this.maxRedirects = request.service.config.maxRedirects;\n }\n },\n\n /**\n * Creates a new request for the next page of response data, calling the\n * callback with the page data if a callback is provided.\n *\n * @callback callback function(err, data)\n * Called when a page of data is returned from the next request.\n *\n * @param err [Error] an error object, if an error occurred in the request\n * @param data [Object] the next page of data, or null, if there are no\n * more pages left.\n * @return [AWS.Request] the request object for the next page of data\n * @return [null] if no callback is provided and there are no pages left\n * to retrieve.\n * @since v1.4.0\n */\n nextPage: function nextPage(callback) {\n var config;\n var service = this.request.service;\n var operation = this.request.operation;\n try {\n config = service.paginationConfig(operation, true);\n } catch (e) { this.error = e; }\n\n if (!this.hasNextPage()) {\n if (callback) callback(this.error, null);\n else if (this.error) throw this.error;\n return null;\n }\n\n var params = AWS.util.copy(this.request.params);\n if (!this.nextPageTokens) {\n return callback ? callback(null, null) : null;\n } else {\n var inputTokens = config.inputToken;\n if (typeof inputTokens === 'string') inputTokens = [inputTokens];\n for (var i = 0; i < inputTokens.length; i++) {\n params[inputTokens[i]] = this.nextPageTokens[i];\n }\n return service.makeRequest(this.request.operation, params, callback);\n }\n },\n\n /**\n * @return [Boolean] whether more pages of data can be returned by further\n * requests\n * @since v1.4.0\n */\n hasNextPage: function hasNextPage() {\n this.cacheNextPageTokens();\n if (this.nextPageTokens) return true;\n if (this.nextPageTokens === undefined) return undefined;\n else return false;\n },\n\n /**\n * @api private\n */\n cacheNextPageTokens: function cacheNextPageTokens() {\n if (Object.prototype.hasOwnProperty.call(this, 'nextPageTokens')) return this.nextPageTokens;\n this.nextPageTokens = undefined;\n\n var config = this.request.service.paginationConfig(this.request.operation);\n if (!config) return this.nextPageTokens;\n\n this.nextPageTokens = null;\n if (config.moreResults) {\n if (!jmespath.search(this.data, config.moreResults)) {\n return this.nextPageTokens;\n }\n }\n\n var exprs = config.outputToken;\n if (typeof exprs === 'string') exprs = [exprs];\n AWS.util.arrayEach.call(this, exprs, function (expr) {\n var output = jmespath.search(this.data, expr);\n if (output) {\n this.nextPageTokens = this.nextPageTokens || [];\n this.nextPageTokens.push(output);\n }\n });\n\n return this.nextPageTokens;\n }\n\n});\n","var AWS = require('../core');\nvar byteLength = AWS.util.string.byteLength;\nvar Buffer = AWS.util.Buffer;\n\n/**\n * The managed uploader allows for easy and efficient uploading of buffers,\n * blobs, or streams, using a configurable amount of concurrency to perform\n * multipart uploads where possible. This abstraction also enables uploading\n * streams of unknown size due to the use of multipart uploads.\n *\n * To construct a managed upload object, see the {constructor} function.\n *\n * ## Tracking upload progress\n *\n * The managed upload object can also track progress by attaching an\n * 'httpUploadProgress' listener to the upload manager. This event is similar\n * to {AWS.Request~httpUploadProgress} but groups all concurrent upload progress\n * into a single event. See {AWS.S3.ManagedUpload~httpUploadProgress} for more\n * information.\n *\n * ## Handling Multipart Cleanup\n *\n * By default, this class will automatically clean up any multipart uploads\n * when an individual part upload fails. This behavior can be disabled in order\n * to manually handle failures by setting the `leavePartsOnError` configuration\n * option to `true` when initializing the upload object.\n *\n * @!event httpUploadProgress(progress)\n * Triggered when the uploader has uploaded more data.\n * @note The `total` property may not be set if the stream being uploaded has\n * not yet finished chunking. In this case the `total` will be undefined\n * until the total stream size is known.\n * @note This event will not be emitted in Node.js 0.8.x.\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request and the `key` of the S3 object. Note that `total` may be undefined until the payload\n * size is known.\n * @context (see AWS.Request~send)\n */\nAWS.S3.ManagedUpload = AWS.util.inherit({\n /**\n * Creates a managed upload object with a set of configuration options.\n *\n * @note A \"Body\" parameter is required to be set prior to calling {send}.\n * @note In Node.js, sending \"Body\" as {https://nodejs.org/dist/latest/docs/api/stream.html#stream_object_mode object-mode stream}\n * may result in upload hangs. Using buffer stream is preferable.\n * @option options params [map] a map of parameters to pass to the upload\n * requests. The \"Body\" parameter is required to be specified either on\n * the service or in the params option.\n * @note ContentMD5 should not be provided when using the managed upload object.\n * Instead, setting \"computeChecksums\" to true will enable automatic ContentMD5 generation\n * by the managed upload object.\n * @option options queueSize [Number] (4) the size of the concurrent queue\n * manager to upload parts in parallel. Set to 1 for synchronous uploading\n * of parts. Note that the uploader will buffer at most queueSize * partSize\n * bytes into memory at any given time.\n * @option options partSize [Number] (5mb) the size in bytes for each\n * individual part to be uploaded. Adjust the part size to ensure the number\n * of parts does not exceed {maxTotalParts}. See {minPartSize} for the\n * minimum allowed part size.\n * @option options leavePartsOnError [Boolean] (false) whether to abort the\n * multipart upload if an error occurs. Set to true if you want to handle\n * failures manually.\n * @option options service [AWS.S3] an optional S3 service object to use for\n * requests. This object might have bound parameters used by the uploader.\n * @option options tags [Array] The tags to apply to the uploaded object.\n * Each tag should have a `Key` and `Value` keys.\n * @example Creating a default uploader for a stream object\n * var upload = new AWS.S3.ManagedUpload({\n * params: {Bucket: 'bucket', Key: 'key', Body: stream}\n * });\n * @example Creating an uploader with concurrency of 1 and partSize of 10mb\n * var upload = new AWS.S3.ManagedUpload({\n * partSize: 10 * 1024 * 1024, queueSize: 1,\n * params: {Bucket: 'bucket', Key: 'key', Body: stream}\n * });\n * @example Creating an uploader with tags\n * var upload = new AWS.S3.ManagedUpload({\n * params: {Bucket: 'bucket', Key: 'key', Body: stream},\n * tags: [{Key: 'tag1', Value: 'value1'}, {Key: 'tag2', Value: 'value2'}]\n * });\n * @see send\n */\n constructor: function ManagedUpload(options) {\n var self = this;\n AWS.SequentialExecutor.call(self);\n self.body = null;\n self.sliceFn = null;\n self.callback = null;\n self.parts = {};\n self.completeInfo = [];\n self.fillQueue = function() {\n self.callback(new Error('Unsupported body payload ' + typeof self.body));\n };\n\n self.configure(options);\n },\n\n /**\n * @api private\n */\n configure: function configure(options) {\n options = options || {};\n this.partSize = this.minPartSize;\n\n if (options.queueSize) this.queueSize = options.queueSize;\n if (options.partSize) this.partSize = options.partSize;\n if (options.leavePartsOnError) this.leavePartsOnError = true;\n if (options.tags) {\n if (!Array.isArray(options.tags)) {\n throw new Error('Tags must be specified as an array; ' +\n typeof options.tags + ' provided.');\n }\n this.tags = options.tags;\n }\n\n if (this.partSize < this.minPartSize) {\n throw new Error('partSize must be greater than ' +\n this.minPartSize);\n }\n\n this.service = options.service;\n this.bindServiceObject(options.params);\n this.validateBody();\n this.adjustTotalBytes();\n },\n\n /**\n * @api private\n */\n leavePartsOnError: false,\n\n /**\n * @api private\n */\n queueSize: 4,\n\n /**\n * @api private\n */\n partSize: null,\n\n /**\n * @readonly\n * @return [Number] the minimum number of bytes for an individual part\n * upload.\n */\n minPartSize: 1024 * 1024 * 5,\n\n /**\n * @readonly\n * @return [Number] the maximum allowed number of parts in a multipart upload.\n */\n maxTotalParts: 10000,\n\n /**\n * Initiates the managed upload for the payload.\n *\n * @callback callback function(err, data)\n * @param err [Error] an error or null if no error occurred.\n * @param data [map] The response data from the successful upload:\n * * `Location` (String) the URL of the uploaded object\n * * `ETag` (String) the ETag of the uploaded object\n * * `Bucket` (String) the bucket to which the object was uploaded\n * * `Key` (String) the key to which the object was uploaded\n * @example Sending a managed upload object\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * var upload = new AWS.S3.ManagedUpload({params: params});\n * upload.send(function(err, data) {\n * console.log(err, data);\n * });\n */\n send: function(callback) {\n var self = this;\n self.failed = false;\n self.callback = callback || function(err) { if (err) throw err; };\n\n var runFill = true;\n if (self.sliceFn) {\n self.fillQueue = self.fillBuffer;\n } else if (AWS.util.isNode()) {\n var Stream = AWS.util.stream.Stream;\n if (self.body instanceof Stream) {\n runFill = false;\n self.fillQueue = self.fillStream;\n self.partBuffers = [];\n self.body.\n on('error', function(err) { self.cleanup(err); }).\n on('readable', function() { self.fillQueue(); }).\n on('end', function() {\n self.isDoneChunking = true;\n self.numParts = self.totalPartNumbers;\n self.fillQueue.call(self);\n\n if (self.isDoneChunking && self.totalPartNumbers >= 1 && self.doneParts === self.numParts) {\n self.finishMultiPart();\n }\n });\n }\n }\n\n if (runFill) self.fillQueue.call(self);\n },\n\n /**\n * @!method promise()\n * Returns a 'thenable' promise.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(data)\n * Called if the promise is fulfilled.\n * @param data [map] The response data from the successful upload:\n * `Location` (String) the URL of the uploaded object\n * `ETag` (String) the ETag of the uploaded object\n * `Bucket` (String) the bucket to which the object was uploaded\n * `Key` (String) the key to which the object was uploaded\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] an error or null if no error occurred.\n * @return [Promise] A promise that represents the state of the upload request.\n * @example Sending an upload request using promises.\n * var upload = s3.upload({Bucket: 'bucket', Key: 'key', Body: stream});\n * var promise = upload.promise();\n * promise.then(function(data) { ... }, function(err) { ... });\n */\n\n /**\n * Aborts a managed upload, including all concurrent upload requests.\n * @note By default, calling this function will cleanup a multipart upload\n * if one was created. To leave the multipart upload around after aborting\n * a request, configure `leavePartsOnError` to `true` in the {constructor}.\n * @note Calling {abort} in the browser environment will not abort any requests\n * that are already in flight. If a multipart upload was created, any parts\n * not yet uploaded will not be sent, and the multipart upload will be cleaned up.\n * @example Aborting an upload\n * var params = {\n * Bucket: 'bucket', Key: 'key',\n * Body: Buffer.alloc(1024 * 1024 * 25) // 25MB payload\n * };\n * var upload = s3.upload(params);\n * upload.send(function (err, data) {\n * if (err) console.log(\"Error:\", err.code, err.message);\n * else console.log(data);\n * });\n *\n * // abort request in 1 second\n * setTimeout(upload.abort.bind(upload), 1000);\n */\n abort: function() {\n var self = this;\n //abort putObject request\n if (self.isDoneChunking === true && self.totalPartNumbers === 1 && self.singlePart) {\n self.singlePart.abort();\n } else {\n self.cleanup(AWS.util.error(new Error('Request aborted by user'), {\n code: 'RequestAbortedError', retryable: false\n }));\n }\n },\n\n /**\n * @api private\n */\n validateBody: function validateBody() {\n var self = this;\n self.body = self.service.config.params.Body;\n if (typeof self.body === 'string') {\n self.body = AWS.util.buffer.toBuffer(self.body);\n } else if (!self.body) {\n throw new Error('params.Body is required');\n }\n self.sliceFn = AWS.util.arraySliceFn(self.body);\n },\n\n /**\n * @api private\n */\n bindServiceObject: function bindServiceObject(params) {\n params = params || {};\n var self = this;\n // bind parameters to new service object\n if (!self.service) {\n self.service = new AWS.S3({params: params});\n } else {\n // Create a new S3 client from the supplied client's constructor.\n var service = self.service;\n var config = AWS.util.copy(service.config);\n config.signatureVersion = service.getSignatureVersion();\n self.service = new service.constructor.__super__(config);\n self.service.config.params =\n AWS.util.merge(self.service.config.params || {}, params);\n Object.defineProperty(self.service, '_originalConfig', {\n get: function() { return service._originalConfig; },\n enumerable: false,\n configurable: true\n });\n }\n },\n\n /**\n * @api private\n */\n adjustTotalBytes: function adjustTotalBytes() {\n var self = this;\n try { // try to get totalBytes\n self.totalBytes = byteLength(self.body);\n } catch (e) { }\n\n // try to adjust partSize if we know payload length\n if (self.totalBytes) {\n var newPartSize = Math.ceil(self.totalBytes / self.maxTotalParts);\n if (newPartSize > self.partSize) self.partSize = newPartSize;\n } else {\n self.totalBytes = undefined;\n }\n },\n\n /**\n * @api private\n */\n isDoneChunking: false,\n\n /**\n * @api private\n */\n partPos: 0,\n\n /**\n * @api private\n */\n totalChunkedBytes: 0,\n\n /**\n * @api private\n */\n totalUploadedBytes: 0,\n\n /**\n * @api private\n */\n totalBytes: undefined,\n\n /**\n * @api private\n */\n numParts: 0,\n\n /**\n * @api private\n */\n totalPartNumbers: 0,\n\n /**\n * @api private\n */\n activeParts: 0,\n\n /**\n * @api private\n */\n doneParts: 0,\n\n /**\n * @api private\n */\n parts: null,\n\n /**\n * @api private\n */\n completeInfo: null,\n\n /**\n * @api private\n */\n failed: false,\n\n /**\n * @api private\n */\n multipartReq: null,\n\n /**\n * @api private\n */\n partBuffers: null,\n\n /**\n * @api private\n */\n partBufferLength: 0,\n\n /**\n * @api private\n */\n fillBuffer: function fillBuffer() {\n var self = this;\n var bodyLen = byteLength(self.body);\n\n if (bodyLen === 0) {\n self.isDoneChunking = true;\n self.numParts = 1;\n self.nextChunk(self.body);\n return;\n }\n\n while (self.activeParts < self.queueSize && self.partPos < bodyLen) {\n var endPos = Math.min(self.partPos + self.partSize, bodyLen);\n var buf = self.sliceFn.call(self.body, self.partPos, endPos);\n self.partPos += self.partSize;\n\n if (byteLength(buf) < self.partSize || self.partPos === bodyLen) {\n self.isDoneChunking = true;\n self.numParts = self.totalPartNumbers + 1;\n }\n self.nextChunk(buf);\n }\n },\n\n /**\n * @api private\n */\n fillStream: function fillStream() {\n var self = this;\n if (self.activeParts >= self.queueSize) return;\n\n var buf = self.body.read(self.partSize - self.partBufferLength) ||\n self.body.read();\n if (buf) {\n self.partBuffers.push(buf);\n self.partBufferLength += buf.length;\n self.totalChunkedBytes += buf.length;\n }\n\n if (self.partBufferLength >= self.partSize) {\n // if we have single buffer we avoid copyfull concat\n var pbuf = self.partBuffers.length === 1 ?\n self.partBuffers[0] : Buffer.concat(self.partBuffers);\n self.partBuffers = [];\n self.partBufferLength = 0;\n\n // if we have more than partSize, push the rest back on the queue\n if (pbuf.length > self.partSize) {\n var rest = pbuf.slice(self.partSize);\n self.partBuffers.push(rest);\n self.partBufferLength += rest.length;\n pbuf = pbuf.slice(0, self.partSize);\n }\n\n self.nextChunk(pbuf);\n }\n\n if (self.isDoneChunking && !self.isDoneSending) {\n // if we have single buffer we avoid copyfull concat\n pbuf = self.partBuffers.length === 1 ?\n self.partBuffers[0] : Buffer.concat(self.partBuffers);\n self.partBuffers = [];\n self.partBufferLength = 0;\n self.totalBytes = self.totalChunkedBytes;\n self.isDoneSending = true;\n\n if (self.numParts === 0 || pbuf.length > 0) {\n self.numParts++;\n self.nextChunk(pbuf);\n }\n }\n\n self.body.read(0);\n },\n\n /**\n * @api private\n */\n nextChunk: function nextChunk(chunk) {\n var self = this;\n if (self.failed) return null;\n\n var partNumber = ++self.totalPartNumbers;\n if (self.isDoneChunking && partNumber === 1) {\n var params = {Body: chunk};\n if (this.tags) {\n params.Tagging = this.getTaggingHeader();\n }\n var req = self.service.putObject(params);\n req._managedUpload = self;\n req.on('httpUploadProgress', self.progress).send(self.finishSinglePart);\n self.singlePart = req; //save the single part request\n return null;\n } else if (self.service.config.params.ContentMD5) {\n var err = AWS.util.error(new Error('The Content-MD5 you specified is invalid for multi-part uploads.'), {\n code: 'InvalidDigest', retryable: false\n });\n\n self.cleanup(err);\n return null;\n }\n\n if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) {\n return null; // Already uploaded this part.\n }\n\n self.activeParts++;\n if (!self.service.config.params.UploadId) {\n\n if (!self.multipartReq) { // create multipart\n self.multipartReq = self.service.createMultipartUpload();\n self.multipartReq.on('success', function(resp) {\n self.service.config.params.UploadId = resp.data.UploadId;\n self.multipartReq = null;\n });\n self.queueChunks(chunk, partNumber);\n self.multipartReq.on('error', function(err) {\n self.cleanup(err);\n });\n self.multipartReq.send();\n } else {\n self.queueChunks(chunk, partNumber);\n }\n } else { // multipart is created, just send\n self.uploadPart(chunk, partNumber);\n }\n },\n\n /**\n * @api private\n */\n getTaggingHeader: function getTaggingHeader() {\n var kvPairStrings = [];\n for (var i = 0; i < this.tags.length; i++) {\n kvPairStrings.push(AWS.util.uriEscape(this.tags[i].Key) + '=' +\n AWS.util.uriEscape(this.tags[i].Value));\n }\n\n return kvPairStrings.join('&');\n },\n\n /**\n * @api private\n */\n uploadPart: function uploadPart(chunk, partNumber) {\n var self = this;\n\n var partParams = {\n Body: chunk,\n ContentLength: AWS.util.string.byteLength(chunk),\n PartNumber: partNumber\n };\n\n var partInfo = {ETag: null, PartNumber: partNumber};\n self.completeInfo[partNumber] = partInfo;\n\n var req = self.service.uploadPart(partParams);\n self.parts[partNumber] = req;\n req._lastUploadedBytes = 0;\n req._managedUpload = self;\n req.on('httpUploadProgress', self.progress);\n req.send(function(err, data) {\n delete self.parts[partParams.PartNumber];\n self.activeParts--;\n\n if (!err && (!data || !data.ETag)) {\n var message = 'No access to ETag property on response.';\n if (AWS.util.isBrowser()) {\n message += ' Check CORS configuration to expose ETag header.';\n }\n\n err = AWS.util.error(new Error(message), {\n code: 'ETagMissing', retryable: false\n });\n }\n if (err) return self.cleanup(err);\n //prevent sending part being returned twice (https://github.com/aws/aws-sdk-js/issues/2304)\n if (self.completeInfo[partNumber] && self.completeInfo[partNumber].ETag !== null) return null;\n partInfo.ETag = data.ETag;\n self.doneParts++;\n if (self.isDoneChunking && self.doneParts === self.totalPartNumbers) {\n self.finishMultiPart();\n } else {\n self.fillQueue.call(self);\n }\n });\n },\n\n /**\n * @api private\n */\n queueChunks: function queueChunks(chunk, partNumber) {\n var self = this;\n self.multipartReq.on('success', function() {\n self.uploadPart(chunk, partNumber);\n });\n },\n\n /**\n * @api private\n */\n cleanup: function cleanup(err) {\n var self = this;\n if (self.failed) return;\n\n // clean up stream\n if (typeof self.body.removeAllListeners === 'function' &&\n typeof self.body.resume === 'function') {\n self.body.removeAllListeners('readable');\n self.body.removeAllListeners('end');\n self.body.resume();\n }\n\n // cleanup multipartReq listeners\n if (self.multipartReq) {\n self.multipartReq.removeAllListeners('success');\n self.multipartReq.removeAllListeners('error');\n self.multipartReq.removeAllListeners('complete');\n delete self.multipartReq;\n }\n\n if (self.service.config.params.UploadId && !self.leavePartsOnError) {\n self.service.abortMultipartUpload().send();\n } else if (self.leavePartsOnError) {\n self.isDoneChunking = false;\n }\n\n AWS.util.each(self.parts, function(partNumber, part) {\n part.removeAllListeners('complete');\n part.abort();\n });\n\n self.activeParts = 0;\n self.partPos = 0;\n self.numParts = 0;\n self.totalPartNumbers = 0;\n self.parts = {};\n self.failed = true;\n self.callback(err);\n },\n\n /**\n * @api private\n */\n finishMultiPart: function finishMultiPart() {\n var self = this;\n var completeParams = { MultipartUpload: { Parts: self.completeInfo.slice(1) } };\n self.service.completeMultipartUpload(completeParams, function(err, data) {\n if (err) {\n return self.cleanup(err);\n }\n\n if (data && typeof data.Location === 'string') {\n data.Location = data.Location.replace(/%2F/g, '/');\n }\n\n if (Array.isArray(self.tags)) {\n for (var i = 0; i < self.tags.length; i++) {\n self.tags[i].Value = String(self.tags[i].Value);\n }\n self.service.putObjectTagging(\n {Tagging: {TagSet: self.tags}},\n function(e, d) {\n if (e) {\n self.callback(e);\n } else {\n self.callback(e, data);\n }\n }\n );\n } else {\n self.callback(err, data);\n }\n });\n },\n\n /**\n * @api private\n */\n finishSinglePart: function finishSinglePart(err, data) {\n var upload = this.request._managedUpload;\n var httpReq = this.request.httpRequest;\n var endpoint = httpReq.endpoint;\n if (err) return upload.callback(err);\n data.Location =\n [endpoint.protocol, '//', endpoint.host, httpReq.path].join('');\n data.key = this.request.params.Key; // will stay undocumented\n data.Key = this.request.params.Key;\n data.Bucket = this.request.params.Bucket;\n upload.callback(err, data);\n },\n\n /**\n * @api private\n */\n progress: function progress(info) {\n var upload = this._managedUpload;\n if (this.operation === 'putObject') {\n info.part = 1;\n info.key = this.params.Key;\n } else {\n upload.totalUploadedBytes += info.loaded - this._lastUploadedBytes;\n this._lastUploadedBytes = info.loaded;\n info = {\n loaded: upload.totalUploadedBytes,\n total: upload.totalBytes,\n part: this.params.PartNumber,\n key: this.params.Key\n };\n }\n upload.emit('httpUploadProgress', [info]);\n }\n});\n\nAWS.util.mixin(AWS.S3.ManagedUpload, AWS.SequentialExecutor);\n\n/**\n * @api private\n */\nAWS.S3.ManagedUpload.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.promise = AWS.util.promisifyMethod('send', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.S3.ManagedUpload.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.S3.ManagedUpload);\n\n/**\n * @api private\n */\nmodule.exports = AWS.S3.ManagedUpload;\n","var AWS = require('./core');\n\n/**\n * @api private\n * @!method on(eventName, callback)\n * Registers an event listener callback for the event given by `eventName`.\n * Parameters passed to the callback function depend on the individual event\n * being triggered. See the event documentation for those parameters.\n *\n * @param eventName [String] the event name to register the listener for\n * @param callback [Function] the listener callback function\n * @param toHead [Boolean] attach the listener callback to the head of callback array if set to true.\n * Default to be false.\n * @return [AWS.SequentialExecutor] the same object for chaining\n */\nAWS.SequentialExecutor = AWS.util.inherit({\n\n constructor: function SequentialExecutor() {\n this._events = {};\n },\n\n /**\n * @api private\n */\n listeners: function listeners(eventName) {\n return this._events[eventName] ? this._events[eventName].slice(0) : [];\n },\n\n on: function on(eventName, listener, toHead) {\n if (this._events[eventName]) {\n toHead ?\n this._events[eventName].unshift(listener) :\n this._events[eventName].push(listener);\n } else {\n this._events[eventName] = [listener];\n }\n return this;\n },\n\n onAsync: function onAsync(eventName, listener, toHead) {\n listener._isAsync = true;\n return this.on(eventName, listener, toHead);\n },\n\n removeListener: function removeListener(eventName, listener) {\n var listeners = this._events[eventName];\n if (listeners) {\n var length = listeners.length;\n var position = -1;\n for (var i = 0; i < length; ++i) {\n if (listeners[i] === listener) {\n position = i;\n }\n }\n if (position > -1) {\n listeners.splice(position, 1);\n }\n }\n return this;\n },\n\n removeAllListeners: function removeAllListeners(eventName) {\n if (eventName) {\n delete this._events[eventName];\n } else {\n this._events = {};\n }\n return this;\n },\n\n /**\n * @api private\n */\n emit: function emit(eventName, eventArgs, doneCallback) {\n if (!doneCallback) doneCallback = function() { };\n var listeners = this.listeners(eventName);\n var count = listeners.length;\n this.callListeners(listeners, eventArgs, doneCallback);\n return count > 0;\n },\n\n /**\n * @api private\n */\n callListeners: function callListeners(listeners, args, doneCallback, prevError) {\n var self = this;\n var error = prevError || null;\n\n function callNextListener(err) {\n if (err) {\n error = AWS.util.error(error || new Error(), err);\n if (self._haltHandlersOnError) {\n return doneCallback.call(self, error);\n }\n }\n self.callListeners(listeners, args, doneCallback, error);\n }\n\n while (listeners.length > 0) {\n var listener = listeners.shift();\n if (listener._isAsync) { // asynchronous listener\n listener.apply(self, args.concat([callNextListener]));\n return; // stop here, callNextListener will continue\n } else { // synchronous listener\n try {\n listener.apply(self, args);\n } catch (err) {\n error = AWS.util.error(error || new Error(), err);\n }\n if (error && self._haltHandlersOnError) {\n doneCallback.call(self, error);\n return;\n }\n }\n }\n doneCallback.call(self, error);\n },\n\n /**\n * Adds or copies a set of listeners from another list of\n * listeners or SequentialExecutor object.\n *\n * @param listeners [map>, AWS.SequentialExecutor]\n * a list of events and callbacks, or an event emitter object\n * containing listeners to add to this emitter object.\n * @return [AWS.SequentialExecutor] the emitter object, for chaining.\n * @example Adding listeners from a map of listeners\n * emitter.addListeners({\n * event1: [function() { ... }, function() { ... }],\n * event2: [function() { ... }]\n * });\n * emitter.emit('event1'); // emitter has event1\n * emitter.emit('event2'); // emitter has event2\n * @example Adding listeners from another emitter object\n * var emitter1 = new AWS.SequentialExecutor();\n * emitter1.on('event1', function() { ... });\n * emitter1.on('event2', function() { ... });\n * var emitter2 = new AWS.SequentialExecutor();\n * emitter2.addListeners(emitter1);\n * emitter2.emit('event1'); // emitter2 has event1\n * emitter2.emit('event2'); // emitter2 has event2\n */\n addListeners: function addListeners(listeners) {\n var self = this;\n\n // extract listeners if parameter is an SequentialExecutor object\n if (listeners._events) listeners = listeners._events;\n\n AWS.util.each(listeners, function(event, callbacks) {\n if (typeof callbacks === 'function') callbacks = [callbacks];\n AWS.util.arrayEach(callbacks, function(callback) {\n self.on(event, callback);\n });\n });\n\n return self;\n },\n\n /**\n * Registers an event with {on} and saves the callback handle function\n * as a property on the emitter object using a given `name`.\n *\n * @param name [String] the property name to set on this object containing\n * the callback function handle so that the listener can be removed in\n * the future.\n * @param (see on)\n * @return (see on)\n * @example Adding a named listener DATA_CALLBACK\n * var listener = function() { doSomething(); };\n * emitter.addNamedListener('DATA_CALLBACK', 'data', listener);\n *\n * // the following prints: true\n * console.log(emitter.DATA_CALLBACK == listener);\n */\n addNamedListener: function addNamedListener(name, eventName, callback, toHead) {\n this[name] = callback;\n this.addListener(eventName, callback, toHead);\n return this;\n },\n\n /**\n * @api private\n */\n addNamedAsyncListener: function addNamedAsyncListener(name, eventName, callback, toHead) {\n callback._isAsync = true;\n return this.addNamedListener(name, eventName, callback, toHead);\n },\n\n /**\n * Helper method to add a set of named listeners using\n * {addNamedListener}. The callback contains a parameter\n * with a handle to the `addNamedListener` method.\n *\n * @callback callback function(add)\n * The callback function is called immediately in order to provide\n * the `add` function to the block. This simplifies the addition of\n * a large group of named listeners.\n * @param add [Function] the {addNamedListener} function to call\n * when registering listeners.\n * @example Adding a set of named listeners\n * emitter.addNamedListeners(function(add) {\n * add('DATA_CALLBACK', 'data', function() { ... });\n * add('OTHER', 'otherEvent', function() { ... });\n * add('LAST', 'lastEvent', function() { ... });\n * });\n *\n * // these properties are now set:\n * emitter.DATA_CALLBACK;\n * emitter.OTHER;\n * emitter.LAST;\n */\n addNamedListeners: function addNamedListeners(callback) {\n var self = this;\n callback(\n function() {\n self.addNamedListener.apply(self, arguments);\n },\n function() {\n self.addNamedAsyncListener.apply(self, arguments);\n }\n );\n return this;\n }\n});\n\n/**\n * {on} is the prefered method.\n * @api private\n */\nAWS.SequentialExecutor.prototype.addListener = AWS.SequentialExecutor.prototype.on;\n\n/**\n * @api private\n */\nmodule.exports = AWS.SequentialExecutor;\n","var AWS = require('./core');\nvar Api = require('./model/api');\nvar regionConfig = require('./region_config');\n\nvar inherit = AWS.util.inherit;\nvar clientCount = 0;\nvar region_utils = require('./region/utils');\n\n/**\n * The service class representing an AWS service.\n *\n * @class_abstract This class is an abstract class.\n *\n * @!attribute apiVersions\n * @return [Array] the list of API versions supported by this service.\n * @readonly\n */\nAWS.Service = inherit({\n /**\n * Create a new service object with a configuration object\n *\n * @param config [map] a map of configuration options\n */\n constructor: function Service(config) {\n if (!this.loadServiceClass) {\n throw AWS.util.error(new Error(),\n 'Service must be constructed with `new\\' operator');\n }\n\n if (config) {\n if (config.region) {\n var region = config.region;\n if (region_utils.isFipsRegion(region)) {\n config.region = region_utils.getRealRegion(region);\n config.useFipsEndpoint = true;\n }\n if (region_utils.isGlobalRegion(region)) {\n config.region = region_utils.getRealRegion(region);\n }\n }\n if (typeof config.useDualstack === 'boolean'\n && typeof config.useDualstackEndpoint !== 'boolean') {\n config.useDualstackEndpoint = config.useDualstack;\n }\n }\n\n var ServiceClass = this.loadServiceClass(config || {});\n if (ServiceClass) {\n var originalConfig = AWS.util.copy(config);\n var svc = new ServiceClass(config);\n Object.defineProperty(svc, '_originalConfig', {\n get: function() { return originalConfig; },\n enumerable: false,\n configurable: true\n });\n svc._clientId = ++clientCount;\n return svc;\n }\n this.initialize(config);\n },\n\n /**\n * @api private\n */\n initialize: function initialize(config) {\n var svcConfig = AWS.config[this.serviceIdentifier];\n this.config = new AWS.Config(AWS.config);\n if (svcConfig) this.config.update(svcConfig, true);\n if (config) this.config.update(config, true);\n\n this.validateService();\n if (!this.config.endpoint) regionConfig.configureEndpoint(this);\n\n this.config.endpoint = this.endpointFromTemplate(this.config.endpoint);\n this.setEndpoint(this.config.endpoint);\n //enable attaching listeners to service client\n AWS.SequentialExecutor.call(this);\n AWS.Service.addDefaultMonitoringListeners(this);\n if ((this.config.clientSideMonitoring || AWS.Service._clientSideMonitoring) && this.publisher) {\n var publisher = this.publisher;\n this.addNamedListener('PUBLISH_API_CALL', 'apiCall', function PUBLISH_API_CALL(event) {\n process.nextTick(function() {publisher.eventHandler(event);});\n });\n this.addNamedListener('PUBLISH_API_ATTEMPT', 'apiCallAttempt', function PUBLISH_API_ATTEMPT(event) {\n process.nextTick(function() {publisher.eventHandler(event);});\n });\n }\n },\n\n /**\n * @api private\n */\n validateService: function validateService() {\n },\n\n /**\n * @api private\n */\n loadServiceClass: function loadServiceClass(serviceConfig) {\n var config = serviceConfig;\n if (!AWS.util.isEmpty(this.api)) {\n return null;\n } else if (config.apiConfig) {\n return AWS.Service.defineServiceApi(this.constructor, config.apiConfig);\n } else if (!this.constructor.services) {\n return null;\n } else {\n config = new AWS.Config(AWS.config);\n config.update(serviceConfig, true);\n var version = config.apiVersions[this.constructor.serviceIdentifier];\n version = version || config.apiVersion;\n return this.getLatestServiceClass(version);\n }\n },\n\n /**\n * @api private\n */\n getLatestServiceClass: function getLatestServiceClass(version) {\n version = this.getLatestServiceVersion(version);\n if (this.constructor.services[version] === null) {\n AWS.Service.defineServiceApi(this.constructor, version);\n }\n\n return this.constructor.services[version];\n },\n\n /**\n * @api private\n */\n getLatestServiceVersion: function getLatestServiceVersion(version) {\n if (!this.constructor.services || this.constructor.services.length === 0) {\n throw new Error('No services defined on ' +\n this.constructor.serviceIdentifier);\n }\n\n if (!version) {\n version = 'latest';\n } else if (AWS.util.isType(version, Date)) {\n version = AWS.util.date.iso8601(version).split('T')[0];\n }\n\n if (Object.hasOwnProperty(this.constructor.services, version)) {\n return version;\n }\n\n var keys = Object.keys(this.constructor.services).sort();\n var selectedVersion = null;\n for (var i = keys.length - 1; i >= 0; i--) {\n // versions that end in \"*\" are not available on disk and can be\n // skipped, so do not choose these as selectedVersions\n if (keys[i][keys[i].length - 1] !== '*') {\n selectedVersion = keys[i];\n }\n if (keys[i].substr(0, 10) <= version) {\n return selectedVersion;\n }\n }\n\n throw new Error('Could not find ' + this.constructor.serviceIdentifier +\n ' API to satisfy version constraint `' + version + '\\'');\n },\n\n /**\n * @api private\n */\n api: {},\n\n /**\n * @api private\n */\n defaultRetryCount: 3,\n\n /**\n * @api private\n */\n customizeRequests: function customizeRequests(callback) {\n if (!callback) {\n this.customRequestHandler = null;\n } else if (typeof callback === 'function') {\n this.customRequestHandler = callback;\n } else {\n throw new Error('Invalid callback type \\'' + typeof callback + '\\' provided in customizeRequests');\n }\n },\n\n /**\n * Calls an operation on a service with the given input parameters.\n *\n * @param operation [String] the name of the operation to call on the service.\n * @param params [map] a map of input options for the operation\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n makeRequest: function makeRequest(operation, params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = null;\n }\n\n params = params || {};\n if (this.config.params) { // copy only toplevel bound params\n var rules = this.api.operations[operation];\n if (rules) {\n params = AWS.util.copy(params);\n AWS.util.each(this.config.params, function(key, value) {\n if (rules.input.members[key]) {\n if (params[key] === undefined || params[key] === null) {\n params[key] = value;\n }\n }\n });\n }\n }\n\n var request = new AWS.Request(this, operation, params);\n this.addAllRequestListeners(request);\n this.attachMonitoringEmitter(request);\n if (callback) request.send(callback);\n return request;\n },\n\n /**\n * Calls an operation on a service with the given input parameters, without\n * any authentication data. This method is useful for \"public\" API operations.\n *\n * @param operation [String] the name of the operation to call on the service.\n * @param params [map] a map of input options for the operation\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n makeUnauthenticatedRequest: function makeUnauthenticatedRequest(operation, params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = {};\n }\n\n var request = this.makeRequest(operation, params).toUnauthenticated();\n return callback ? request.send(callback) : request;\n },\n\n /**\n * Waits for a given state\n *\n * @param state [String] the state on the service to wait for\n * @param params [map] a map of parameters to pass with each request\n * @option params $waiter [map] a map of configuration options for the waiter\n * @option params $waiter.delay [Number] The number of seconds to wait between\n * requests\n * @option params $waiter.maxAttempts [Number] The maximum number of requests\n * to send while waiting\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n waitFor: function waitFor(state, params, callback) {\n var waiter = new AWS.ResourceWaiter(this, state);\n return waiter.wait(params, callback);\n },\n\n /**\n * @api private\n */\n addAllRequestListeners: function addAllRequestListeners(request) {\n var list = [AWS.events, AWS.EventListeners.Core, this.serviceInterface(),\n AWS.EventListeners.CorePost];\n for (var i = 0; i < list.length; i++) {\n if (list[i]) request.addListeners(list[i]);\n }\n\n // disable parameter validation\n if (!this.config.paramValidation) {\n request.removeListener('validate',\n AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n }\n\n if (this.config.logger) { // add logging events\n request.addListeners(AWS.EventListeners.Logger);\n }\n\n this.setupRequestListeners(request);\n // call prototype's customRequestHandler\n if (typeof this.constructor.prototype.customRequestHandler === 'function') {\n this.constructor.prototype.customRequestHandler(request);\n }\n // call instance's customRequestHandler\n if (Object.prototype.hasOwnProperty.call(this, 'customRequestHandler') && typeof this.customRequestHandler === 'function') {\n this.customRequestHandler(request);\n }\n },\n\n /**\n * Event recording metrics for a whole API call.\n * @returns {object} a subset of api call metrics\n * @api private\n */\n apiCallEvent: function apiCallEvent(request) {\n var api = request.service.api.operations[request.operation];\n var monitoringEvent = {\n Type: 'ApiCall',\n Api: api ? api.name : request.operation,\n Version: 1,\n Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n Region: request.httpRequest.region,\n MaxRetriesExceeded: 0,\n UserAgent: request.httpRequest.getUserAgent(),\n };\n var response = request.response;\n if (response.httpResponse.statusCode) {\n monitoringEvent.FinalHttpStatusCode = response.httpResponse.statusCode;\n }\n if (response.error) {\n var error = response.error;\n var statusCode = response.httpResponse.statusCode;\n if (statusCode > 299) {\n if (error.code) monitoringEvent.FinalAwsException = error.code;\n if (error.message) monitoringEvent.FinalAwsExceptionMessage = error.message;\n } else {\n if (error.code || error.name) monitoringEvent.FinalSdkException = error.code || error.name;\n if (error.message) monitoringEvent.FinalSdkExceptionMessage = error.message;\n }\n }\n return monitoringEvent;\n },\n\n /**\n * Event recording metrics for an API call attempt.\n * @returns {object} a subset of api call attempt metrics\n * @api private\n */\n apiAttemptEvent: function apiAttemptEvent(request) {\n var api = request.service.api.operations[request.operation];\n var monitoringEvent = {\n Type: 'ApiCallAttempt',\n Api: api ? api.name : request.operation,\n Version: 1,\n Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n Fqdn: request.httpRequest.endpoint.hostname,\n UserAgent: request.httpRequest.getUserAgent(),\n };\n var response = request.response;\n if (response.httpResponse.statusCode) {\n monitoringEvent.HttpStatusCode = response.httpResponse.statusCode;\n }\n if (\n !request._unAuthenticated &&\n request.service.config.credentials &&\n request.service.config.credentials.accessKeyId\n ) {\n monitoringEvent.AccessKey = request.service.config.credentials.accessKeyId;\n }\n if (!response.httpResponse.headers) return monitoringEvent;\n if (request.httpRequest.headers['x-amz-security-token']) {\n monitoringEvent.SessionToken = request.httpRequest.headers['x-amz-security-token'];\n }\n if (response.httpResponse.headers['x-amzn-requestid']) {\n monitoringEvent.XAmznRequestId = response.httpResponse.headers['x-amzn-requestid'];\n }\n if (response.httpResponse.headers['x-amz-request-id']) {\n monitoringEvent.XAmzRequestId = response.httpResponse.headers['x-amz-request-id'];\n }\n if (response.httpResponse.headers['x-amz-id-2']) {\n monitoringEvent.XAmzId2 = response.httpResponse.headers['x-amz-id-2'];\n }\n return monitoringEvent;\n },\n\n /**\n * Add metrics of failed request.\n * @api private\n */\n attemptFailEvent: function attemptFailEvent(request) {\n var monitoringEvent = this.apiAttemptEvent(request);\n var response = request.response;\n var error = response.error;\n if (response.httpResponse.statusCode > 299 ) {\n if (error.code) monitoringEvent.AwsException = error.code;\n if (error.message) monitoringEvent.AwsExceptionMessage = error.message;\n } else {\n if (error.code || error.name) monitoringEvent.SdkException = error.code || error.name;\n if (error.message) monitoringEvent.SdkExceptionMessage = error.message;\n }\n return monitoringEvent;\n },\n\n /**\n * Attach listeners to request object to fetch metrics of each request\n * and emit data object through \\'ApiCall\\' and \\'ApiCallAttempt\\' events.\n * @api private\n */\n attachMonitoringEmitter: function attachMonitoringEmitter(request) {\n var attemptTimestamp; //timestamp marking the beginning of a request attempt\n var attemptStartRealTime; //Start time of request attempt. Used to calculating attemptLatency\n var attemptLatency; //latency from request sent out to http response reaching SDK\n var callStartRealTime; //Start time of API call. Used to calculating API call latency\n var attemptCount = 0; //request.retryCount is not reliable here\n var region; //region cache region for each attempt since it can be updated in plase (e.g. s3)\n var callTimestamp; //timestamp when the request is created\n var self = this;\n var addToHead = true;\n\n request.on('validate', function () {\n callStartRealTime = AWS.util.realClock.now();\n callTimestamp = Date.now();\n }, addToHead);\n request.on('sign', function () {\n attemptStartRealTime = AWS.util.realClock.now();\n attemptTimestamp = Date.now();\n region = request.httpRequest.region;\n attemptCount++;\n }, addToHead);\n request.on('validateResponse', function() {\n attemptLatency = Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n });\n request.addNamedListener('API_CALL_ATTEMPT', 'success', function API_CALL_ATTEMPT() {\n var apiAttemptEvent = self.apiAttemptEvent(request);\n apiAttemptEvent.Timestamp = attemptTimestamp;\n apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n apiAttemptEvent.Region = region;\n self.emit('apiCallAttempt', [apiAttemptEvent]);\n });\n request.addNamedListener('API_CALL_ATTEMPT_RETRY', 'retry', function API_CALL_ATTEMPT_RETRY() {\n var apiAttemptEvent = self.attemptFailEvent(request);\n apiAttemptEvent.Timestamp = attemptTimestamp;\n //attemptLatency may not be available if fail before response\n attemptLatency = attemptLatency ||\n Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n apiAttemptEvent.Region = region;\n self.emit('apiCallAttempt', [apiAttemptEvent]);\n });\n request.addNamedListener('API_CALL', 'complete', function API_CALL() {\n var apiCallEvent = self.apiCallEvent(request);\n apiCallEvent.AttemptCount = attemptCount;\n if (apiCallEvent.AttemptCount <= 0) return;\n apiCallEvent.Timestamp = callTimestamp;\n var latency = Math.round(AWS.util.realClock.now() - callStartRealTime);\n apiCallEvent.Latency = latency >= 0 ? latency : 0;\n var response = request.response;\n if (\n response.error &&\n response.error.retryable &&\n typeof response.retryCount === 'number' &&\n typeof response.maxRetries === 'number' &&\n (response.retryCount >= response.maxRetries)\n ) {\n apiCallEvent.MaxRetriesExceeded = 1;\n }\n self.emit('apiCall', [apiCallEvent]);\n });\n },\n\n /**\n * Override this method to setup any custom request listeners for each\n * new request to the service.\n *\n * @method_abstract This is an abstract method.\n */\n setupRequestListeners: function setupRequestListeners(request) {\n },\n\n /**\n * Gets the signing name for a given request\n * @api private\n */\n getSigningName: function getSigningName() {\n return this.api.signingName || this.api.endpointPrefix;\n },\n\n /**\n * Gets the signer class for a given request\n * @api private\n */\n getSignerClass: function getSignerClass(request) {\n var version;\n // get operation authtype if present\n var operation = null;\n var authtype = '';\n if (request) {\n var operations = request.service.api.operations || {};\n operation = operations[request.operation] || null;\n authtype = operation ? operation.authtype : '';\n }\n if (this.config.signatureVersion) {\n version = this.config.signatureVersion;\n } else if (authtype === 'v4' || authtype === 'v4-unsigned-body') {\n version = 'v4';\n } else if (authtype === 'bearer') {\n version = 'bearer';\n } else {\n version = this.api.signatureVersion;\n }\n return AWS.Signers.RequestSigner.getVersion(version);\n },\n\n /**\n * @api private\n */\n serviceInterface: function serviceInterface() {\n switch (this.api.protocol) {\n case 'ec2': return AWS.EventListeners.Query;\n case 'query': return AWS.EventListeners.Query;\n case 'json': return AWS.EventListeners.Json;\n case 'rest-json': return AWS.EventListeners.RestJson;\n case 'rest-xml': return AWS.EventListeners.RestXml;\n }\n if (this.api.protocol) {\n throw new Error('Invalid service `protocol\\' ' +\n this.api.protocol + ' in API config');\n }\n },\n\n /**\n * @api private\n */\n successfulResponse: function successfulResponse(resp) {\n return resp.httpResponse.statusCode < 300;\n },\n\n /**\n * How many times a failed request should be retried before giving up.\n * the defaultRetryCount can be overriden by service classes.\n *\n * @api private\n */\n numRetries: function numRetries() {\n if (this.config.maxRetries !== undefined) {\n return this.config.maxRetries;\n } else {\n return this.defaultRetryCount;\n }\n },\n\n /**\n * @api private\n */\n retryDelays: function retryDelays(retryCount, err) {\n return AWS.util.calculateRetryDelay(retryCount, this.config.retryDelayOptions, err);\n },\n\n /**\n * @api private\n */\n retryableError: function retryableError(error) {\n if (this.timeoutError(error)) return true;\n if (this.networkingError(error)) return true;\n if (this.expiredCredentialsError(error)) return true;\n if (this.throttledError(error)) return true;\n if (error.statusCode >= 500) return true;\n return false;\n },\n\n /**\n * @api private\n */\n networkingError: function networkingError(error) {\n return error.code === 'NetworkingError';\n },\n\n /**\n * @api private\n */\n timeoutError: function timeoutError(error) {\n return error.code === 'TimeoutError';\n },\n\n /**\n * @api private\n */\n expiredCredentialsError: function expiredCredentialsError(error) {\n // TODO : this only handles *one* of the expired credential codes\n return (error.code === 'ExpiredTokenException');\n },\n\n /**\n * @api private\n */\n clockSkewError: function clockSkewError(error) {\n switch (error.code) {\n case 'RequestTimeTooSkewed':\n case 'RequestExpired':\n case 'InvalidSignatureException':\n case 'SignatureDoesNotMatch':\n case 'AuthFailure':\n case 'RequestInTheFuture':\n return true;\n default: return false;\n }\n },\n\n /**\n * @api private\n */\n getSkewCorrectedDate: function getSkewCorrectedDate() {\n return new Date(Date.now() + this.config.systemClockOffset);\n },\n\n /**\n * @api private\n */\n applyClockOffset: function applyClockOffset(newServerTime) {\n if (newServerTime) {\n this.config.systemClockOffset = newServerTime - Date.now();\n }\n },\n\n /**\n * @api private\n */\n isClockSkewed: function isClockSkewed(newServerTime) {\n if (newServerTime) {\n return Math.abs(this.getSkewCorrectedDate().getTime() - newServerTime) >= 300000;\n }\n },\n\n /**\n * @api private\n */\n throttledError: function throttledError(error) {\n // this logic varies between services\n if (error.statusCode === 429) return true;\n switch (error.code) {\n case 'ProvisionedThroughputExceededException':\n case 'Throttling':\n case 'ThrottlingException':\n case 'RequestLimitExceeded':\n case 'RequestThrottled':\n case 'RequestThrottledException':\n case 'TooManyRequestsException':\n case 'TransactionInProgressException': //dynamodb\n case 'EC2ThrottledException':\n return true;\n default:\n return false;\n }\n },\n\n /**\n * @api private\n */\n endpointFromTemplate: function endpointFromTemplate(endpoint) {\n if (typeof endpoint !== 'string') return endpoint;\n\n var e = endpoint;\n e = e.replace(/\\{service\\}/g, this.api.endpointPrefix);\n e = e.replace(/\\{region\\}/g, this.config.region);\n e = e.replace(/\\{scheme\\}/g, this.config.sslEnabled ? 'https' : 'http');\n return e;\n },\n\n /**\n * @api private\n */\n setEndpoint: function setEndpoint(endpoint) {\n this.endpoint = new AWS.Endpoint(endpoint, this.config);\n },\n\n /**\n * @api private\n */\n paginationConfig: function paginationConfig(operation, throwException) {\n var paginator = this.api.operations[operation].paginator;\n if (!paginator) {\n if (throwException) {\n var e = new Error();\n throw AWS.util.error(e, 'No pagination configuration for ' + operation);\n }\n return null;\n }\n\n return paginator;\n }\n});\n\nAWS.util.update(AWS.Service, {\n\n /**\n * Adds one method for each operation described in the api configuration\n *\n * @api private\n */\n defineMethods: function defineMethods(svc) {\n AWS.util.each(svc.prototype.api.operations, function iterator(method) {\n if (svc.prototype[method]) return;\n var operation = svc.prototype.api.operations[method];\n if (operation.authtype === 'none') {\n svc.prototype[method] = function (params, callback) {\n return this.makeUnauthenticatedRequest(method, params, callback);\n };\n } else {\n svc.prototype[method] = function (params, callback) {\n return this.makeRequest(method, params, callback);\n };\n }\n });\n },\n\n /**\n * Defines a new Service class using a service identifier and list of versions\n * including an optional set of features (functions) to apply to the class\n * prototype.\n *\n * @param serviceIdentifier [String] the identifier for the service\n * @param versions [Array] a list of versions that work with this\n * service\n * @param features [Object] an object to attach to the prototype\n * @return [Class] the service class defined by this function.\n */\n defineService: function defineService(serviceIdentifier, versions, features) {\n AWS.Service._serviceMap[serviceIdentifier] = true;\n if (!Array.isArray(versions)) {\n features = versions;\n versions = [];\n }\n\n var svc = inherit(AWS.Service, features || {});\n\n if (typeof serviceIdentifier === 'string') {\n AWS.Service.addVersions(svc, versions);\n\n var identifier = svc.serviceIdentifier || serviceIdentifier;\n svc.serviceIdentifier = identifier;\n } else { // defineService called with an API\n svc.prototype.api = serviceIdentifier;\n AWS.Service.defineMethods(svc);\n }\n AWS.SequentialExecutor.call(this.prototype);\n //util.clientSideMonitoring is only available in node\n if (!this.prototype.publisher && AWS.util.clientSideMonitoring) {\n var Publisher = AWS.util.clientSideMonitoring.Publisher;\n var configProvider = AWS.util.clientSideMonitoring.configProvider;\n var publisherConfig = configProvider();\n this.prototype.publisher = new Publisher(publisherConfig);\n if (publisherConfig.enabled) {\n //if csm is enabled in environment, SDK should send all metrics\n AWS.Service._clientSideMonitoring = true;\n }\n }\n AWS.SequentialExecutor.call(svc.prototype);\n AWS.Service.addDefaultMonitoringListeners(svc.prototype);\n return svc;\n },\n\n /**\n * @api private\n */\n addVersions: function addVersions(svc, versions) {\n if (!Array.isArray(versions)) versions = [versions];\n\n svc.services = svc.services || {};\n for (var i = 0; i < versions.length; i++) {\n if (svc.services[versions[i]] === undefined) {\n svc.services[versions[i]] = null;\n }\n }\n\n svc.apiVersions = Object.keys(svc.services).sort();\n },\n\n /**\n * @api private\n */\n defineServiceApi: function defineServiceApi(superclass, version, apiConfig) {\n var svc = inherit(superclass, {\n serviceIdentifier: superclass.serviceIdentifier\n });\n\n function setApi(api) {\n if (api.isApi) {\n svc.prototype.api = api;\n } else {\n svc.prototype.api = new Api(api, {\n serviceIdentifier: superclass.serviceIdentifier\n });\n }\n }\n\n if (typeof version === 'string') {\n if (apiConfig) {\n setApi(apiConfig);\n } else {\n try {\n setApi(AWS.apiLoader(superclass.serviceIdentifier, version));\n } catch (err) {\n throw AWS.util.error(err, {\n message: 'Could not find API configuration ' +\n superclass.serviceIdentifier + '-' + version\n });\n }\n }\n if (!Object.prototype.hasOwnProperty.call(superclass.services, version)) {\n superclass.apiVersions = superclass.apiVersions.concat(version).sort();\n }\n superclass.services[version] = svc;\n } else {\n setApi(version);\n }\n\n AWS.Service.defineMethods(svc);\n return svc;\n },\n\n /**\n * @api private\n */\n hasService: function(identifier) {\n return Object.prototype.hasOwnProperty.call(AWS.Service._serviceMap, identifier);\n },\n\n /**\n * @param attachOn attach default monitoring listeners to object\n *\n * Each monitoring event should be emitted from service client to service constructor prototype and then\n * to global service prototype like bubbling up. These default monitoring events listener will transfer\n * the monitoring events to the upper layer.\n * @api private\n */\n addDefaultMonitoringListeners: function addDefaultMonitoringListeners(attachOn) {\n attachOn.addNamedListener('MONITOR_EVENTS_BUBBLE', 'apiCallAttempt', function EVENTS_BUBBLE(event) {\n var baseClass = Object.getPrototypeOf(attachOn);\n if (baseClass._events) baseClass.emit('apiCallAttempt', [event]);\n });\n attachOn.addNamedListener('CALL_EVENTS_BUBBLE', 'apiCall', function CALL_EVENTS_BUBBLE(event) {\n var baseClass = Object.getPrototypeOf(attachOn);\n if (baseClass._events) baseClass.emit('apiCall', [event]);\n });\n },\n\n /**\n * @api private\n */\n _serviceMap: {}\n});\n\nAWS.util.mixin(AWS.Service, AWS.SequentialExecutor);\n\n/**\n * @api private\n */\nmodule.exports = AWS.Service;\n","var AWS = require('../core');\nvar v4Credentials = require('../signers/v4_credentials');\nvar resolveRegionalEndpointsFlag = require('../config_regional_endpoint');\nvar s3util = require('./s3util');\nvar regionUtil = require('../region_config');\n\n// Pull in managed upload extension\nrequire('../s3/managed_upload');\n\n/**\n * @api private\n */\nvar operationsWith200StatusCodeError = {\n 'completeMultipartUpload': true,\n 'copyObject': true,\n 'uploadPartCopy': true\n};\n\n/**\n * @api private\n */\n var regionRedirectErrorCodes = [\n 'AuthorizationHeaderMalformed', // non-head operations on virtual-hosted global bucket endpoints\n 'BadRequest', // head operations on virtual-hosted global bucket endpoints\n 'PermanentRedirect', // non-head operations on path-style or regional endpoints\n 301 // head operations on path-style or regional endpoints\n ];\n\nvar OBJECT_LAMBDA_SERVICE = 's3-object-lambda';\n\nAWS.util.update(AWS.S3.prototype, {\n /**\n * @api private\n */\n getSignatureVersion: function getSignatureVersion(request) {\n var defaultApiVersion = this.api.signatureVersion;\n var userDefinedVersion = this._originalConfig ? this._originalConfig.signatureVersion : null;\n var regionDefinedVersion = this.config.signatureVersion;\n var isPresigned = request ? request.isPresigned() : false;\n /*\n 1) User defined version specified:\n a) always return user defined version\n 2) No user defined version specified:\n a) If not using presigned urls, default to V4\n b) If using presigned urls, default to lowest version the region supports\n */\n if (userDefinedVersion) {\n userDefinedVersion = userDefinedVersion === 'v2' ? 's3' : userDefinedVersion;\n return userDefinedVersion;\n }\n if (isPresigned !== true) {\n defaultApiVersion = 'v4';\n } else if (regionDefinedVersion) {\n defaultApiVersion = regionDefinedVersion;\n }\n return defaultApiVersion;\n },\n\n /**\n * @api private\n */\n getSigningName: function getSigningName(req) {\n if (req && req.operation === 'writeGetObjectResponse') {\n return OBJECT_LAMBDA_SERVICE;\n }\n\n var _super = AWS.Service.prototype.getSigningName;\n return (req && req._parsedArn && req._parsedArn.service)\n ? req._parsedArn.service\n : _super.call(this);\n },\n\n /**\n * @api private\n */\n getSignerClass: function getSignerClass(request) {\n var signatureVersion = this.getSignatureVersion(request);\n return AWS.Signers.RequestSigner.getVersion(signatureVersion);\n },\n\n /**\n * @api private\n */\n validateService: function validateService() {\n var msg;\n var messages = [];\n\n // default to us-east-1 when no region is provided\n if (!this.config.region) this.config.region = 'us-east-1';\n\n if (!this.config.endpoint && this.config.s3BucketEndpoint) {\n messages.push('An endpoint must be provided when configuring ' +\n '`s3BucketEndpoint` to true.');\n }\n if (messages.length === 1) {\n msg = messages[0];\n } else if (messages.length > 1) {\n msg = 'Multiple configuration errors:\\n' + messages.join('\\n');\n }\n if (msg) {\n throw AWS.util.error(new Error(),\n {name: 'InvalidEndpoint', message: msg});\n }\n },\n\n /**\n * @api private\n */\n shouldDisableBodySigning: function shouldDisableBodySigning(request) {\n var signerClass = this.getSignerClass();\n if (this.config.s3DisableBodySigning === true && signerClass === AWS.Signers.V4\n && request.httpRequest.endpoint.protocol === 'https:') {\n return true;\n }\n return false;\n },\n\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n var prependListener = true;\n request.addListener('validate', this.validateScheme);\n request.addListener('validate', this.validateBucketName, prependListener);\n request.addListener('validate', this.optInUsEast1RegionalEndpoint, prependListener);\n\n request.removeListener('validate',\n AWS.EventListeners.Core.VALIDATE_REGION);\n request.addListener('build', this.addContentType);\n request.addListener('build', this.computeContentMd5);\n request.addListener('build', this.computeSseCustomerKeyMd5);\n request.addListener('build', this.populateURI);\n request.addListener('afterBuild', this.addExpect100Continue);\n request.addListener('extractError', this.extractError);\n request.addListener('extractData', AWS.util.hoistPayloadMember);\n request.addListener('extractData', this.extractData);\n request.addListener('extractData', this.extractErrorFrom200Response);\n request.addListener('beforePresign', this.prepareSignedUrl);\n if (this.shouldDisableBodySigning(request)) {\n request.removeListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n request.addListener('afterBuild', this.disableBodySigning);\n }\n //deal with ARNs supplied to Bucket\n if (request.operation !== 'createBucket' && s3util.isArnInParam(request, 'Bucket')) {\n // avoid duplicate parsing in the future\n request._parsedArn = AWS.util.ARN.parse(request.params.Bucket);\n\n request.removeListener('validate', this.validateBucketName);\n request.removeListener('build', this.populateURI);\n if (request._parsedArn.service === 's3') {\n request.addListener('validate', s3util.validateS3AccessPointArn);\n request.addListener('validate', this.validateArnResourceType);\n request.addListener('validate', this.validateArnRegion);\n } else if (request._parsedArn.service === 's3-outposts') {\n request.addListener('validate', s3util.validateOutpostsAccessPointArn);\n request.addListener('validate', s3util.validateOutpostsArn);\n request.addListener('validate', s3util.validateArnRegion);\n }\n request.addListener('validate', s3util.validateArnAccount);\n request.addListener('validate', s3util.validateArnService);\n request.addListener('build', this.populateUriFromAccessPointArn);\n request.addListener('build', s3util.validatePopulateUriFromArn);\n return;\n }\n //listeners regarding region inference\n request.addListener('validate', this.validateBucketEndpoint);\n request.addListener('validate', this.correctBucketRegionFromCache);\n request.onAsync('extractError', this.requestBucketRegion);\n if (AWS.util.isBrowser()) {\n request.onAsync('retry', this.reqRegionForNetworkingError);\n }\n },\n\n /**\n * @api private\n */\n validateScheme: function(req) {\n var params = req.params,\n scheme = req.httpRequest.endpoint.protocol,\n sensitive = params.SSECustomerKey || params.CopySourceSSECustomerKey;\n if (sensitive && scheme !== 'https:') {\n var msg = 'Cannot send SSE keys over HTTP. Set \\'sslEnabled\\'' +\n 'to \\'true\\' in your configuration';\n throw AWS.util.error(new Error(),\n { code: 'ConfigError', message: msg });\n }\n },\n\n /**\n * @api private\n */\n validateBucketEndpoint: function(req) {\n if (!req.params.Bucket && req.service.config.s3BucketEndpoint) {\n var msg = 'Cannot send requests to root API with `s3BucketEndpoint` set.';\n throw AWS.util.error(new Error(),\n { code: 'ConfigError', message: msg });\n }\n },\n\n /**\n * @api private\n */\n validateArnRegion: function validateArnRegion(req) {\n s3util.validateArnRegion(req, { allowFipsEndpoint: true });\n },\n\n /**\n * Validate resource-type supplied in S3 ARN\n */\n validateArnResourceType: function validateArnResourceType(req) {\n var resource = req._parsedArn.resource;\n\n if (\n resource.indexOf('accesspoint:') !== 0 &&\n resource.indexOf('accesspoint/') !== 0\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN resource should begin with \\'accesspoint/\\''\n });\n }\n },\n\n /**\n * @api private\n */\n validateBucketName: function validateBucketName(req) {\n var service = req.service;\n var signatureVersion = service.getSignatureVersion(req);\n var bucket = req.params && req.params.Bucket;\n var key = req.params && req.params.Key;\n var slashIndex = bucket && bucket.indexOf('/');\n if (bucket && slashIndex >= 0) {\n if (typeof key === 'string' && slashIndex > 0) {\n req.params = AWS.util.copy(req.params);\n // Need to include trailing slash to match sigv2 behavior\n var prefix = bucket.substr(slashIndex + 1) || '';\n req.params.Key = prefix + '/' + key;\n req.params.Bucket = bucket.substr(0, slashIndex);\n } else if (signatureVersion === 'v4') {\n var msg = 'Bucket names cannot contain forward slashes. Bucket: ' + bucket;\n throw AWS.util.error(new Error(),\n { code: 'InvalidBucket', message: msg });\n }\n }\n },\n\n /**\n * @api private\n */\n isValidAccelerateOperation: function isValidAccelerateOperation(operation) {\n var invalidOperations = [\n 'createBucket',\n 'deleteBucket',\n 'listBuckets'\n ];\n return invalidOperations.indexOf(operation) === -1;\n },\n\n /**\n * When us-east-1 region endpoint configuration is set, in stead of sending request to\n * global endpoint(e.g. 's3.amazonaws.com'), we will send request to\n * 's3.us-east-1.amazonaws.com'.\n * @api private\n */\n optInUsEast1RegionalEndpoint: function optInUsEast1RegionalEndpoint(req) {\n var service = req.service;\n var config = service.config;\n config.s3UsEast1RegionalEndpoint = resolveRegionalEndpointsFlag(service._originalConfig, {\n env: 'AWS_S3_US_EAST_1_REGIONAL_ENDPOINT',\n sharedConfig: 's3_us_east_1_regional_endpoint',\n clientConfig: 's3UsEast1RegionalEndpoint'\n });\n if (\n !(service._originalConfig || {}).endpoint &&\n req.httpRequest.region === 'us-east-1' &&\n config.s3UsEast1RegionalEndpoint === 'regional' &&\n req.httpRequest.endpoint.hostname.indexOf('s3.amazonaws.com') >= 0\n ) {\n var insertPoint = config.endpoint.indexOf('.amazonaws.com');\n regionalEndpoint = config.endpoint.substring(0, insertPoint) +\n '.us-east-1' + config.endpoint.substring(insertPoint);\n req.httpRequest.updateEndpoint(regionalEndpoint);\n }\n },\n\n /**\n * S3 prefers dns-compatible bucket names to be moved from the uri path\n * to the hostname as a sub-domain. This is not possible, even for dns-compat\n * buckets when using SSL and the bucket name contains a dot ('.'). The\n * ssl wildcard certificate is only 1-level deep.\n *\n * @api private\n */\n populateURI: function populateURI(req) {\n var httpRequest = req.httpRequest;\n var b = req.params.Bucket;\n var service = req.service;\n var endpoint = httpRequest.endpoint;\n if (b) {\n if (!service.pathStyleBucketName(b)) {\n if (service.config.useAccelerateEndpoint && service.isValidAccelerateOperation(req.operation)) {\n if (service.config.useDualstackEndpoint) {\n endpoint.hostname = b + '.s3-accelerate.dualstack.amazonaws.com';\n } else {\n endpoint.hostname = b + '.s3-accelerate.amazonaws.com';\n }\n } else if (!service.config.s3BucketEndpoint) {\n endpoint.hostname =\n b + '.' + endpoint.hostname;\n }\n\n var port = endpoint.port;\n if (port !== 80 && port !== 443) {\n endpoint.host = endpoint.hostname + ':' +\n endpoint.port;\n } else {\n endpoint.host = endpoint.hostname;\n }\n\n httpRequest.virtualHostedBucket = b; // needed for signing the request\n service.removeVirtualHostedBucketFromPath(req);\n }\n }\n },\n\n /**\n * Takes the bucket name out of the path if bucket is virtual-hosted\n *\n * @api private\n */\n removeVirtualHostedBucketFromPath: function removeVirtualHostedBucketFromPath(req) {\n var httpRequest = req.httpRequest;\n var bucket = httpRequest.virtualHostedBucket;\n if (bucket && httpRequest.path) {\n if (req.params && req.params.Key) {\n var encodedS3Key = '/' + AWS.util.uriEscapePath(req.params.Key);\n if (httpRequest.path.indexOf(encodedS3Key) === 0 && (httpRequest.path.length === encodedS3Key.length || httpRequest.path[encodedS3Key.length] === '?')) {\n //path only contains key or path contains only key and querystring\n return;\n }\n }\n httpRequest.path = httpRequest.path.replace(new RegExp('/' + bucket), '');\n if (httpRequest.path[0] !== '/') {\n httpRequest.path = '/' + httpRequest.path;\n }\n }\n },\n\n /**\n * When user supply an access point ARN in the Bucket parameter, we need to\n * populate the URI according to the ARN.\n */\n populateUriFromAccessPointArn: function populateUriFromAccessPointArn(req) {\n var accessPointArn = req._parsedArn;\n\n var isOutpostArn = accessPointArn.service === 's3-outposts';\n var isObjectLambdaArn = accessPointArn.service === 's3-object-lambda';\n\n var outpostsSuffix = isOutpostArn ? '.' + accessPointArn.outpostId: '';\n var serviceName = isOutpostArn ? 's3-outposts': 's3-accesspoint';\n var fipsSuffix = !isOutpostArn && req.service.config.useFipsEndpoint ? '-fips': '';\n var dualStackSuffix = !isOutpostArn &&\n req.service.config.useDualstackEndpoint ? '.dualstack' : '';\n\n var endpoint = req.httpRequest.endpoint;\n var dnsSuffix = regionUtil.getEndpointSuffix(accessPointArn.region);\n var useArnRegion = req.service.config.s3UseArnRegion;\n\n endpoint.hostname = [\n accessPointArn.accessPoint + '-' + accessPointArn.accountId + outpostsSuffix,\n serviceName + fipsSuffix + dualStackSuffix,\n useArnRegion ? accessPointArn.region : req.service.config.region,\n dnsSuffix\n ].join('.');\n\n if (isObjectLambdaArn) {\n // should be in the format: \"accesspoint/${accesspointName}\"\n var serviceName = 's3-object-lambda';\n var accesspointName = accessPointArn.resource.split('/')[1];\n var fipsSuffix = req.service.config.useFipsEndpoint ? '-fips': '';\n endpoint.hostname = [\n accesspointName + '-' + accessPointArn.accountId,\n serviceName + fipsSuffix,\n useArnRegion ? accessPointArn.region : req.service.config.region,\n dnsSuffix\n ].join('.');\n }\n endpoint.host = endpoint.hostname;\n var encodedArn = AWS.util.uriEscape(req.params.Bucket);\n var path = req.httpRequest.path;\n //remove the Bucket value from path\n req.httpRequest.path = path.replace(new RegExp('/' + encodedArn), '');\n if (req.httpRequest.path[0] !== '/') {\n req.httpRequest.path = '/' + req.httpRequest.path;\n }\n req.httpRequest.region = accessPointArn.region; //region used to sign\n },\n\n /**\n * Adds Expect: 100-continue header if payload is greater-or-equal 1MB\n * @api private\n */\n addExpect100Continue: function addExpect100Continue(req) {\n var len = req.httpRequest.headers['Content-Length'];\n if (AWS.util.isNode() && (len >= 1024 * 1024 || req.params.Body instanceof AWS.util.stream.Stream)) {\n req.httpRequest.headers['Expect'] = '100-continue';\n }\n },\n\n /**\n * Adds a default content type if none is supplied.\n *\n * @api private\n */\n addContentType: function addContentType(req) {\n var httpRequest = req.httpRequest;\n if (httpRequest.method === 'GET' || httpRequest.method === 'HEAD') {\n // Content-Type is not set in GET/HEAD requests\n delete httpRequest.headers['Content-Type'];\n return;\n }\n\n if (!httpRequest.headers['Content-Type']) { // always have a Content-Type\n httpRequest.headers['Content-Type'] = 'application/octet-stream';\n }\n\n var contentType = httpRequest.headers['Content-Type'];\n if (AWS.util.isBrowser()) {\n if (typeof httpRequest.body === 'string' && !contentType.match(/;\\s*charset=/)) {\n var charset = '; charset=UTF-8';\n httpRequest.headers['Content-Type'] += charset;\n } else {\n var replaceFn = function(_, prefix, charsetName) {\n return prefix + charsetName.toUpperCase();\n };\n\n httpRequest.headers['Content-Type'] =\n contentType.replace(/(;\\s*charset=)(.+)$/, replaceFn);\n }\n }\n },\n\n /**\n * Checks whether checksums should be computed for the request if it's not\n * already set by {AWS.EventListeners.Core.COMPUTE_CHECKSUM}. It depends on\n * whether {AWS.Config.computeChecksums} is set.\n *\n * @param req [AWS.Request] the request to check against\n * @return [Boolean] whether to compute checksums for a request.\n * @api private\n */\n willComputeChecksums: function willComputeChecksums(req) {\n var rules = req.service.api.operations[req.operation].input.members;\n var body = req.httpRequest.body;\n var needsContentMD5 = req.service.config.computeChecksums &&\n rules.ContentMD5 &&\n !req.params.ContentMD5 &&\n body &&\n (AWS.util.Buffer.isBuffer(req.httpRequest.body) || typeof req.httpRequest.body === 'string');\n\n // Sha256 signing disabled, and not a presigned url\n if (needsContentMD5 && req.service.shouldDisableBodySigning(req) && !req.isPresigned()) {\n return true;\n }\n\n // SigV2 and presign, for backwards compatibility purpose.\n if (needsContentMD5 && this.getSignatureVersion(req) === 's3' && req.isPresigned()) {\n return true;\n }\n\n return false;\n },\n\n /**\n * A listener that computes the Content-MD5 and sets it in the header.\n * This listener is to support S3-specific features like\n * s3DisableBodySigning and SigV2 presign. Content MD5 logic for SigV4 is\n * handled in AWS.EventListeners.Core.COMPUTE_CHECKSUM\n *\n * @api private\n */\n computeContentMd5: function computeContentMd5(req) {\n if (req.service.willComputeChecksums(req)) {\n var md5 = AWS.util.crypto.md5(req.httpRequest.body, 'base64');\n req.httpRequest.headers['Content-MD5'] = md5;\n }\n },\n\n /**\n * @api private\n */\n computeSseCustomerKeyMd5: function computeSseCustomerKeyMd5(req) {\n var keys = {\n SSECustomerKey: 'x-amz-server-side-encryption-customer-key-MD5',\n CopySourceSSECustomerKey: 'x-amz-copy-source-server-side-encryption-customer-key-MD5'\n };\n AWS.util.each(keys, function(key, header) {\n if (req.params[key]) {\n var value = AWS.util.crypto.md5(req.params[key], 'base64');\n req.httpRequest.headers[header] = value;\n }\n });\n },\n\n /**\n * Returns true if the bucket name should be left in the URI path for\n * a request to S3. This function takes into account the current\n * endpoint protocol (e.g. http or https).\n *\n * @api private\n */\n pathStyleBucketName: function pathStyleBucketName(bucketName) {\n // user can force path style requests via the configuration\n if (this.config.s3ForcePathStyle) return true;\n if (this.config.s3BucketEndpoint) return false;\n\n if (s3util.dnsCompatibleBucketName(bucketName)) {\n return (this.config.sslEnabled && bucketName.match(/\\./)) ? true : false;\n } else {\n return true; // not dns compatible names must always use path style\n }\n },\n\n /**\n * For COPY operations, some can be error even with status code 200.\n * SDK treats the response as exception when response body indicates\n * an exception or body is empty.\n *\n * @api private\n */\n extractErrorFrom200Response: function extractErrorFrom200Response(resp) {\n if (!operationsWith200StatusCodeError[resp.request.operation]) return;\n var httpResponse = resp.httpResponse;\n if (httpResponse.body && httpResponse.body.toString().match('')) {\n // Response body with '...' indicates an exception.\n // Get S3 client object. In ManagedUpload, this.service refers to\n // S3 client object.\n resp.data = null;\n var service = this.service ? this.service : this;\n service.extractError(resp);\n throw resp.error;\n } else if (!httpResponse.body || !httpResponse.body.toString().match(/<[\\w_]/)) {\n // When body is empty or incomplete, S3 might stop the request on detecting client\n // side aborting the request.\n resp.data = null;\n throw AWS.util.error(new Error(), {\n code: 'InternalError',\n message: 'S3 aborted request'\n });\n }\n },\n\n /**\n * @return [Boolean] whether the error can be retried\n * @api private\n */\n retryableError: function retryableError(error, request) {\n if (operationsWith200StatusCodeError[request.operation] &&\n error.statusCode === 200) {\n return true;\n } else if (request._requestRegionForBucket &&\n request.service.bucketRegionCache[request._requestRegionForBucket]) {\n return false;\n } else if (error && error.code === 'RequestTimeout') {\n return true;\n } else if (error &&\n regionRedirectErrorCodes.indexOf(error.code) != -1 &&\n error.region && error.region != request.httpRequest.region) {\n request.httpRequest.region = error.region;\n if (error.statusCode === 301) {\n request.service.updateReqBucketRegion(request);\n }\n return true;\n } else {\n var _super = AWS.Service.prototype.retryableError;\n return _super.call(this, error, request);\n }\n },\n\n /**\n * Updates httpRequest with region. If region is not provided, then\n * the httpRequest will be updated based on httpRequest.region\n *\n * @api private\n */\n updateReqBucketRegion: function updateReqBucketRegion(request, region) {\n var httpRequest = request.httpRequest;\n if (typeof region === 'string' && region.length) {\n httpRequest.region = region;\n }\n if (!httpRequest.endpoint.host.match(/s3(?!-accelerate).*\\.amazonaws\\.com$/)) {\n return;\n }\n var service = request.service;\n var s3Config = service.config;\n var s3BucketEndpoint = s3Config.s3BucketEndpoint;\n if (s3BucketEndpoint) {\n delete s3Config.s3BucketEndpoint;\n }\n var newConfig = AWS.util.copy(s3Config);\n delete newConfig.endpoint;\n newConfig.region = httpRequest.region;\n\n httpRequest.endpoint = (new AWS.S3(newConfig)).endpoint;\n service.populateURI(request);\n s3Config.s3BucketEndpoint = s3BucketEndpoint;\n httpRequest.headers.Host = httpRequest.endpoint.host;\n\n if (request._asm.currentState === 'validate') {\n request.removeListener('build', service.populateURI);\n request.addListener('build', service.removeVirtualHostedBucketFromPath);\n }\n },\n\n /**\n * Provides a specialized parser for getBucketLocation -- all other\n * operations are parsed by the super class.\n *\n * @api private\n */\n extractData: function extractData(resp) {\n var req = resp.request;\n if (req.operation === 'getBucketLocation') {\n var match = resp.httpResponse.body.toString().match(/>(.+)<\\/Location/);\n delete resp.data['_'];\n if (match) {\n resp.data.LocationConstraint = match[1];\n } else {\n resp.data.LocationConstraint = '';\n }\n }\n var bucket = req.params.Bucket || null;\n if (req.operation === 'deleteBucket' && typeof bucket === 'string' && !resp.error) {\n req.service.clearBucketRegionCache(bucket);\n } else {\n var headers = resp.httpResponse.headers || {};\n var region = headers['x-amz-bucket-region'] || null;\n if (!region && req.operation === 'createBucket' && !resp.error) {\n var createBucketConfiguration = req.params.CreateBucketConfiguration;\n if (!createBucketConfiguration) {\n region = 'us-east-1';\n } else if (createBucketConfiguration.LocationConstraint === 'EU') {\n region = 'eu-west-1';\n } else {\n region = createBucketConfiguration.LocationConstraint;\n }\n }\n if (region) {\n if (bucket && region !== req.service.bucketRegionCache[bucket]) {\n req.service.bucketRegionCache[bucket] = region;\n }\n }\n }\n req.service.extractRequestIds(resp);\n },\n\n /**\n * Extracts an error object from the http response.\n *\n * @api private\n */\n extractError: function extractError(resp) {\n var codes = {\n 304: 'NotModified',\n 403: 'Forbidden',\n 400: 'BadRequest',\n 404: 'NotFound'\n };\n\n var req = resp.request;\n var code = resp.httpResponse.statusCode;\n var body = resp.httpResponse.body || '';\n\n var headers = resp.httpResponse.headers || {};\n var region = headers['x-amz-bucket-region'] || null;\n var bucket = req.params.Bucket || null;\n var bucketRegionCache = req.service.bucketRegionCache;\n if (region && bucket && region !== bucketRegionCache[bucket]) {\n bucketRegionCache[bucket] = region;\n }\n\n var cachedRegion;\n if (codes[code] && body.length === 0) {\n if (bucket && !region) {\n cachedRegion = bucketRegionCache[bucket] || null;\n if (cachedRegion !== req.httpRequest.region) {\n region = cachedRegion;\n }\n }\n resp.error = AWS.util.error(new Error(), {\n code: codes[code],\n message: null,\n region: region\n });\n } else {\n var data = new AWS.XML.Parser().parse(body.toString());\n\n if (data.Region && !region) {\n region = data.Region;\n if (bucket && region !== bucketRegionCache[bucket]) {\n bucketRegionCache[bucket] = region;\n }\n } else if (bucket && !region && !data.Region) {\n cachedRegion = bucketRegionCache[bucket] || null;\n if (cachedRegion !== req.httpRequest.region) {\n region = cachedRegion;\n }\n }\n\n resp.error = AWS.util.error(new Error(), {\n code: data.Code || code,\n message: data.Message || null,\n region: region\n });\n }\n req.service.extractRequestIds(resp);\n },\n\n /**\n * If region was not obtained synchronously, then send async request\n * to get bucket region for errors resulting from wrong region.\n *\n * @api private\n */\n requestBucketRegion: function requestBucketRegion(resp, done) {\n var error = resp.error;\n var req = resp.request;\n var bucket = req.params.Bucket || null;\n\n if (!error || !bucket || error.region || req.operation === 'listObjects' ||\n (AWS.util.isNode() && req.operation === 'headBucket') ||\n (error.statusCode === 400 && req.operation !== 'headObject') ||\n regionRedirectErrorCodes.indexOf(error.code) === -1) {\n return done();\n }\n var reqOperation = AWS.util.isNode() ? 'headBucket' : 'listObjects';\n var reqParams = {Bucket: bucket};\n if (reqOperation === 'listObjects') reqParams.MaxKeys = 0;\n var regionReq = req.service[reqOperation](reqParams);\n regionReq._requestRegionForBucket = bucket;\n regionReq.send(function() {\n var region = req.service.bucketRegionCache[bucket] || null;\n error.region = region;\n done();\n });\n },\n\n /**\n * For browser only. If NetworkingError received, will attempt to obtain\n * the bucket region.\n *\n * @api private\n */\n reqRegionForNetworkingError: function reqRegionForNetworkingError(resp, done) {\n if (!AWS.util.isBrowser()) {\n return done();\n }\n var error = resp.error;\n var request = resp.request;\n var bucket = request.params.Bucket;\n if (!error || error.code !== 'NetworkingError' || !bucket ||\n request.httpRequest.region === 'us-east-1') {\n return done();\n }\n var service = request.service;\n var bucketRegionCache = service.bucketRegionCache;\n var cachedRegion = bucketRegionCache[bucket] || null;\n\n if (cachedRegion && cachedRegion !== request.httpRequest.region) {\n service.updateReqBucketRegion(request, cachedRegion);\n done();\n } else if (!s3util.dnsCompatibleBucketName(bucket)) {\n service.updateReqBucketRegion(request, 'us-east-1');\n if (bucketRegionCache[bucket] !== 'us-east-1') {\n bucketRegionCache[bucket] = 'us-east-1';\n }\n done();\n } else if (request.httpRequest.virtualHostedBucket) {\n var getRegionReq = service.listObjects({Bucket: bucket, MaxKeys: 0});\n service.updateReqBucketRegion(getRegionReq, 'us-east-1');\n getRegionReq._requestRegionForBucket = bucket;\n\n getRegionReq.send(function() {\n var region = service.bucketRegionCache[bucket] || null;\n if (region && region !== request.httpRequest.region) {\n service.updateReqBucketRegion(request, region);\n }\n done();\n });\n } else {\n // DNS-compatible path-style\n // (s3ForcePathStyle or bucket name with dot over https)\n // Cannot obtain region information for this case\n done();\n }\n },\n\n /**\n * Cache for bucket region.\n *\n * @api private\n */\n bucketRegionCache: {},\n\n /**\n * Clears bucket region cache.\n *\n * @api private\n */\n clearBucketRegionCache: function(buckets) {\n var bucketRegionCache = this.bucketRegionCache;\n if (!buckets) {\n buckets = Object.keys(bucketRegionCache);\n } else if (typeof buckets === 'string') {\n buckets = [buckets];\n }\n for (var i = 0; i < buckets.length; i++) {\n delete bucketRegionCache[buckets[i]];\n }\n return bucketRegionCache;\n },\n\n /**\n * Corrects request region if bucket's cached region is different\n *\n * @api private\n */\n correctBucketRegionFromCache: function correctBucketRegionFromCache(req) {\n var bucket = req.params.Bucket || null;\n if (bucket) {\n var service = req.service;\n var requestRegion = req.httpRequest.region;\n var cachedRegion = service.bucketRegionCache[bucket];\n if (cachedRegion && cachedRegion !== requestRegion) {\n service.updateReqBucketRegion(req, cachedRegion);\n }\n }\n },\n\n /**\n * Extracts S3 specific request ids from the http response.\n *\n * @api private\n */\n extractRequestIds: function extractRequestIds(resp) {\n var extendedRequestId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-id-2'] : null;\n var cfId = resp.httpResponse.headers ? resp.httpResponse.headers['x-amz-cf-id'] : null;\n resp.extendedRequestId = extendedRequestId;\n resp.cfId = cfId;\n\n if (resp.error) {\n resp.error.requestId = resp.requestId || null;\n resp.error.extendedRequestId = extendedRequestId;\n resp.error.cfId = cfId;\n }\n },\n\n /**\n * Get a pre-signed URL for a given operation name.\n *\n * @note You must ensure that you have static or previously resolved\n * credentials if you call this method synchronously (with no callback),\n * otherwise it may not properly sign the request. If you cannot guarantee\n * this (you are using an asynchronous credential provider, i.e., EC2\n * IAM roles), you should always call this method with an asynchronous\n * callback.\n * @note Not all operation parameters are supported when using pre-signed\n * URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,\n * `ContentLength`, or `Tagging` must be provided as headers when sending a\n * request. If you are using pre-signed URLs to upload from a browser and\n * need to use these fields, see {createPresignedPost}.\n * @note The default signer allows altering the request by adding corresponding\n * headers to set some parameters (e.g. Range) and these added parameters\n * won't be signed. You must use signatureVersion v4 to to include these\n * parameters in the signed portion of the URL and enforce exact matching\n * between headers and signed params in the URL.\n * @note This operation cannot be used with a promise. See note above regarding\n * asynchronous credentials and use with a callback.\n * @param operation [String] the name of the operation to call\n * @param params [map] parameters to pass to the operation. See the given\n * operation for the expected operation parameters. In addition, you can\n * also pass the \"Expires\" parameter to inform S3 how long the URL should\n * work for.\n * @option params Expires [Integer] (900) the number of seconds to expire\n * the pre-signed URL operation in. Defaults to 15 minutes.\n * @param callback [Function] if a callback is provided, this function will\n * pass the URL as the second parameter (after the error parameter) to\n * the callback function.\n * @return [String] if called synchronously (with no callback), returns the\n * signed URL.\n * @return [null] nothing is returned if a callback is provided.\n * @example Pre-signing a getObject operation (synchronously)\n * var params = {Bucket: 'bucket', Key: 'key'};\n * var url = s3.getSignedUrl('getObject', params);\n * console.log('The URL is', url);\n * @example Pre-signing a putObject (asynchronously)\n * var params = {Bucket: 'bucket', Key: 'key'};\n * s3.getSignedUrl('putObject', params, function (err, url) {\n * console.log('The URL is', url);\n * });\n * @example Pre-signing a putObject operation with a specific payload\n * var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};\n * var url = s3.getSignedUrl('putObject', params);\n * console.log('The URL is', url);\n * @example Passing in a 1-minute expiry time for a pre-signed URL\n * var params = {Bucket: 'bucket', Key: 'key', Expires: 60};\n * var url = s3.getSignedUrl('getObject', params);\n * console.log('The URL is', url); // expires in 60 seconds\n */\n getSignedUrl: function getSignedUrl(operation, params, callback) {\n params = AWS.util.copy(params || {});\n var expires = params.Expires || 900;\n\n if (typeof expires !== 'number') {\n throw AWS.util.error(new Error(),\n { code: 'InvalidParameterException', message: 'The expiration must be a number, received ' + typeof expires });\n }\n\n delete params.Expires; // we can't validate this\n var request = this.makeRequest(operation, params);\n\n if (callback) {\n AWS.util.defer(function() {\n request.presign(expires, callback);\n });\n } else {\n return request.presign(expires, callback);\n }\n },\n\n /**\n * @!method getSignedUrlPromise()\n * Returns a 'thenable' promise that will be resolved with a pre-signed URL\n * for a given operation name.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @note Not all operation parameters are supported when using pre-signed\n * URLs. Certain parameters, such as `SSECustomerKey`, `ACL`, `Expires`,\n * `ContentLength`, or `Tagging` must be provided as headers when sending a\n * request. If you are using pre-signed URLs to upload from a browser and\n * need to use these fields, see {createPresignedPost}.\n * @param operation [String] the name of the operation to call\n * @param params [map] parameters to pass to the operation. See the given\n * operation for the expected operation parameters. In addition, you can\n * also pass the \"Expires\" parameter to inform S3 how long the URL should\n * work for.\n * @option params Expires [Integer] (900) the number of seconds to expire\n * the pre-signed URL operation in. Defaults to 15 minutes.\n * @callback fulfilledCallback function(url)\n * Called if the promise is fulfilled.\n * @param url [String] the signed url\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `refresh` call.\n * @example Pre-signing a getObject operation\n * var params = {Bucket: 'bucket', Key: 'key'};\n * var promise = s3.getSignedUrlPromise('getObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n * @example Pre-signing a putObject operation with a specific payload\n * var params = {Bucket: 'bucket', Key: 'key', Body: 'body'};\n * var promise = s3.getSignedUrlPromise('putObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n * @example Passing in a 1-minute expiry time for a pre-signed URL\n * var params = {Bucket: 'bucket', Key: 'key', Expires: 60};\n * var promise = s3.getSignedUrlPromise('getObject', params);\n * promise.then(function(url) {\n * console.log('The URL is', url);\n * }, function(err) { ... });\n */\n\n /**\n * Get a pre-signed POST policy to support uploading to S3 directly from an\n * HTML form.\n *\n * @param params [map]\n * @option params Bucket [String] The bucket to which the post should be\n * uploaded\n * @option params Expires [Integer] (3600) The number of seconds for which\n * the presigned policy should be valid.\n * @option params Conditions [Array] An array of conditions that must be met\n * for the presigned policy to allow the\n * upload. This can include required tags,\n * the accepted range for content lengths,\n * etc.\n * @see http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html\n * @option params Fields [map] Fields to include in the form. All\n * values passed in as fields will be\n * signed as exact match conditions.\n * @param callback [Function]\n *\n * @note All fields passed in when creating presigned post data will be signed\n * as exact match conditions. Any fields that will be interpolated by S3\n * must be added to the fields hash after signing, and an appropriate\n * condition for such fields must be explicitly added to the Conditions\n * array passed to this function before signing.\n *\n * @example Presiging post data with a known key\n * var params = {\n * Bucket: 'bucket',\n * Fields: {\n * key: 'key'\n * }\n * };\n * s3.createPresignedPost(params, function(err, data) {\n * if (err) {\n * console.error('Presigning post data encountered an error', err);\n * } else {\n * console.log('The post data is', data);\n * }\n * });\n *\n * @example Presigning post data with an interpolated key\n * var params = {\n * Bucket: 'bucket',\n * Conditions: [\n * ['starts-with', '$key', 'path/to/uploads/']\n * ]\n * };\n * s3.createPresignedPost(params, function(err, data) {\n * if (err) {\n * console.error('Presigning post data encountered an error', err);\n * } else {\n * data.Fields.key = 'path/to/uploads/${filename}';\n * console.log('The post data is', data);\n * }\n * });\n *\n * @note You must ensure that you have static or previously resolved\n * credentials if you call this method synchronously (with no callback),\n * otherwise it may not properly sign the request. If you cannot guarantee\n * this (you are using an asynchronous credential provider, i.e., EC2\n * IAM roles), you should always call this method with an asynchronous\n * callback.\n *\n * @return [map] If called synchronously (with no callback), returns a hash\n * with the url to set as the form action and a hash of fields\n * to include in the form.\n * @return [null] Nothing is returned if a callback is provided.\n *\n * @callback callback function (err, data)\n * @param err [Error] the error object returned from the policy signer\n * @param data [map] The data necessary to construct an HTML form\n * @param data.url [String] The URL to use as the action of the form\n * @param data.fields [map] A hash of fields that must be included in the\n * form for the upload to succeed. This hash will\n * include the signed POST policy, your access key\n * ID and security token (if present), etc. These\n * may be safely included as input elements of type\n * 'hidden.'\n */\n createPresignedPost: function createPresignedPost(params, callback) {\n if (typeof params === 'function' && callback === undefined) {\n callback = params;\n params = null;\n }\n\n params = AWS.util.copy(params || {});\n var boundParams = this.config.params || {};\n var bucket = params.Bucket || boundParams.Bucket,\n self = this,\n config = this.config,\n endpoint = AWS.util.copy(this.endpoint);\n if (!config.s3BucketEndpoint) {\n endpoint.pathname = '/' + bucket;\n }\n\n function finalizePost() {\n return {\n url: AWS.util.urlFormat(endpoint),\n fields: self.preparePostFields(\n config.credentials,\n config.region,\n bucket,\n params.Fields,\n params.Conditions,\n params.Expires\n )\n };\n }\n\n if (callback) {\n config.getCredentials(function (err) {\n if (err) {\n callback(err);\n } else {\n try {\n callback(null, finalizePost());\n } catch (err) {\n callback(err);\n }\n }\n });\n } else {\n return finalizePost();\n }\n },\n\n /**\n * @api private\n */\n preparePostFields: function preparePostFields(\n credentials,\n region,\n bucket,\n fields,\n conditions,\n expiresInSeconds\n ) {\n var now = this.getSkewCorrectedDate();\n if (!credentials || !region || !bucket) {\n throw new Error('Unable to create a POST object policy without a bucket,'\n + ' region, and credentials');\n }\n fields = AWS.util.copy(fields || {});\n conditions = (conditions || []).slice(0);\n expiresInSeconds = expiresInSeconds || 3600;\n\n var signingDate = AWS.util.date.iso8601(now).replace(/[:\\-]|\\.\\d{3}/g, '');\n var shortDate = signingDate.substr(0, 8);\n var scope = v4Credentials.createScope(shortDate, region, 's3');\n var credential = credentials.accessKeyId + '/' + scope;\n\n fields['bucket'] = bucket;\n fields['X-Amz-Algorithm'] = 'AWS4-HMAC-SHA256';\n fields['X-Amz-Credential'] = credential;\n fields['X-Amz-Date'] = signingDate;\n if (credentials.sessionToken) {\n fields['X-Amz-Security-Token'] = credentials.sessionToken;\n }\n for (var field in fields) {\n if (fields.hasOwnProperty(field)) {\n var condition = {};\n condition[field] = fields[field];\n conditions.push(condition);\n }\n }\n\n fields.Policy = this.preparePostPolicy(\n new Date(now.valueOf() + expiresInSeconds * 1000),\n conditions\n );\n fields['X-Amz-Signature'] = AWS.util.crypto.hmac(\n v4Credentials.getSigningKey(credentials, shortDate, region, 's3', true),\n fields.Policy,\n 'hex'\n );\n\n return fields;\n },\n\n /**\n * @api private\n */\n preparePostPolicy: function preparePostPolicy(expiration, conditions) {\n return AWS.util.base64.encode(JSON.stringify({\n expiration: AWS.util.date.iso8601(expiration),\n conditions: conditions\n }));\n },\n\n /**\n * @api private\n */\n prepareSignedUrl: function prepareSignedUrl(request) {\n request.addListener('validate', request.service.noPresignedContentLength);\n request.removeListener('build', request.service.addContentType);\n if (!request.params.Body) {\n // no Content-MD5/SHA-256 if body is not provided\n request.removeListener('build', request.service.computeContentMd5);\n } else {\n request.addListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n }\n },\n\n /**\n * @api private\n * @param request\n */\n disableBodySigning: function disableBodySigning(request) {\n var headers = request.httpRequest.headers;\n // Add the header to anything that isn't a presigned url, unless that presigned url had a body defined\n if (!Object.prototype.hasOwnProperty.call(headers, 'presigned-expires')) {\n headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n }\n },\n\n /**\n * @api private\n */\n noPresignedContentLength: function noPresignedContentLength(request) {\n if (request.params.ContentLength !== undefined) {\n throw AWS.util.error(new Error(), {code: 'UnexpectedParameter',\n message: 'ContentLength is not supported in pre-signed URLs.'});\n }\n },\n\n createBucket: function createBucket(params, callback) {\n // When creating a bucket *outside* the classic region, the location\n // constraint must be set for the bucket and it must match the endpoint.\n // This chunk of code will set the location constraint param based\n // on the region (when possible), but it will not override a passed-in\n // location constraint.\n if (typeof params === 'function' || !params) {\n callback = callback || params;\n params = {};\n }\n var hostname = this.endpoint.hostname;\n // copy params so that appending keys does not unintentioinallly\n // mutate params object argument passed in by user\n var copiedParams = AWS.util.copy(params);\n\n if (hostname !== this.api.globalEndpoint && !params.CreateBucketConfiguration) {\n copiedParams.CreateBucketConfiguration = { LocationConstraint: this.config.region };\n }\n return this.makeRequest('createBucket', copiedParams, callback);\n },\n\n writeGetObjectResponse: function writeGetObjectResponse(params, callback) {\n\n var request = this.makeRequest('writeGetObjectResponse', AWS.util.copy(params), callback);\n var hostname = this.endpoint.hostname;\n if (hostname.indexOf(this.config.region) !== -1) {\n // hostname specifies a region already\n hostname = hostname.replace('s3.', OBJECT_LAMBDA_SERVICE + '.');\n } else {\n // Hostname doesn't have a region.\n // Object Lambda requires an explicit region.\n hostname = hostname.replace('s3.', OBJECT_LAMBDA_SERVICE + '.' + this.config.region + '.');\n }\n\n request.httpRequest.endpoint = new AWS.Endpoint(hostname, this.config);\n return request;\n },\n\n /**\n * @see AWS.S3.ManagedUpload\n * @overload upload(params = {}, [options], [callback])\n * Uploads an arbitrarily sized buffer, blob, or stream, using intelligent\n * concurrent handling of parts if the payload is large enough. You can\n * configure the concurrent queue size by setting `options`. Note that this\n * is the only operation for which the SDK can retry requests with stream\n * bodies.\n *\n * @param (see AWS.S3.putObject)\n * @option (see AWS.S3.ManagedUpload.constructor)\n * @return [AWS.S3.ManagedUpload] the managed upload object that can call\n * `send()` or track progress.\n * @example Uploading a stream object\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * s3.upload(params, function(err, data) {\n * console.log(err, data);\n * });\n * @example Uploading a stream with concurrency of 1 and partSize of 10mb\n * var params = {Bucket: 'bucket', Key: 'key', Body: stream};\n * var options = {partSize: 10 * 1024 * 1024, queueSize: 1};\n * s3.upload(params, options, function(err, data) {\n * console.log(err, data);\n * });\n * @callback callback function(err, data)\n * @param err [Error] an error or null if no error occurred.\n * @param data [map] The response data from the successful upload:\n * @param data.Location [String] the URL of the uploaded object\n * @param data.ETag [String] the ETag of the uploaded object\n * @param data.Bucket [String] the bucket to which the object was uploaded\n * @param data.Key [String] the key to which the object was uploaded\n */\n upload: function upload(params, options, callback) {\n if (typeof options === 'function' && callback === undefined) {\n callback = options;\n options = null;\n }\n\n options = options || {};\n options = AWS.util.merge(options || {}, {service: this, params: params});\n\n var uploader = new AWS.S3.ManagedUpload(options);\n if (typeof callback === 'function') uploader.send(callback);\n return uploader;\n }\n});\n\n/**\n * @api private\n */\nAWS.S3.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.getSignedUrlPromise = AWS.util.promisifyMethod('getSignedUrl', PromiseDependency);\n};\n\n/**\n * @api private\n */\nAWS.S3.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.getSignedUrlPromise;\n};\n\nAWS.util.addPromises(AWS.S3);\n","var AWS = require('../core');\nvar regionUtil = require('../region_config');\n\nvar s3util = {\n /**\n * @api private\n */\n isArnInParam: function isArnInParam(req, paramName) {\n var inputShape = (req.service.api.operations[req.operation] || {}).input || {};\n var inputMembers = inputShape.members || {};\n if (!req.params[paramName] || !inputMembers[paramName]) return false;\n return AWS.util.ARN.validate(req.params[paramName]);\n },\n\n /**\n * Validate service component from ARN supplied in Bucket parameter\n */\n validateArnService: function validateArnService(req) {\n var parsedArn = req._parsedArn;\n\n if (parsedArn.service !== 's3'\n && parsedArn.service !== 's3-outposts'\n && parsedArn.service !== 's3-object-lambda') {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'expect \\'s3\\' or \\'s3-outposts\\' or \\'s3-object-lambda\\' in ARN service component'\n });\n }\n },\n\n /**\n * Validate account ID from ARN supplied in Bucket parameter is a valid account\n */\n validateArnAccount: function validateArnAccount(req) {\n var parsedArn = req._parsedArn;\n\n if (!/[0-9]{12}/.exec(parsedArn.accountId)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN accountID does not match regex \"[0-9]{12}\"'\n });\n }\n },\n\n /**\n * Validate ARN supplied in Bucket parameter is a valid access point ARN\n */\n validateS3AccessPointArn: function validateS3AccessPointArn(req) {\n var parsedArn = req._parsedArn;\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['accesspoint'.length];\n\n if (parsedArn.resource.split(delimiter).length !== 2) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access Point ARN should have one resource accesspoint/{accesspointName}'\n });\n }\n\n var accessPoint = parsedArn.resource.split(delimiter)[1];\n var accessPointPrefix = accessPoint + '-' + parsedArn.accountId;\n if (!s3util.dnsCompatibleBucketName(accessPointPrefix) || accessPointPrefix.match(/\\./)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access point resource in ARN is not DNS compatible. Got ' + accessPoint\n });\n }\n\n //set parsed valid access point\n req._parsedArn.accessPoint = accessPoint;\n },\n\n /**\n * Validate Outposts ARN supplied in Bucket parameter is a valid outposts ARN\n */\n validateOutpostsArn: function validateOutpostsArn(req) {\n var parsedArn = req._parsedArn;\n\n if (\n parsedArn.resource.indexOf('outpost:') !== 0 &&\n parsedArn.resource.indexOf('outpost/') !== 0\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'ARN resource should begin with \\'outpost/\\''\n });\n }\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['outpost'.length];\n var outpostId = parsedArn.resource.split(delimiter)[1];\n var dnsHostRegex = new RegExp(/^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9-]{0,61}[a-zA-Z0-9])$/);\n if (!dnsHostRegex.test(outpostId)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Outpost resource in ARN is not DNS compatible. Got ' + outpostId\n });\n }\n req._parsedArn.outpostId = outpostId;\n },\n\n /**\n * Validate Outposts ARN supplied in Bucket parameter is a valid outposts ARN\n */\n validateOutpostsAccessPointArn: function validateOutpostsAccessPointArn(req) {\n var parsedArn = req._parsedArn;\n\n //can be ':' or '/'\n var delimiter = parsedArn.resource['outpost'.length];\n\n if (parsedArn.resource.split(delimiter).length !== 4) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Outposts ARN should have two resources outpost/{outpostId}/accesspoint/{accesspointName}'\n });\n }\n\n var accessPoint = parsedArn.resource.split(delimiter)[3];\n var accessPointPrefix = accessPoint + '-' + parsedArn.accountId;\n if (!s3util.dnsCompatibleBucketName(accessPointPrefix) || accessPointPrefix.match(/\\./)) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: 'Access point resource in ARN is not DNS compatible. Got ' + accessPoint\n });\n }\n\n //set parsed valid access point\n req._parsedArn.accessPoint = accessPoint;\n },\n\n /**\n * Validate region field in ARN supplied in Bucket parameter is a valid region\n */\n validateArnRegion: function validateArnRegion(req, options) {\n if (options === undefined) {\n options = {};\n }\n\n var useArnRegion = s3util.loadUseArnRegionConfig(req);\n var regionFromArn = req._parsedArn.region;\n var clientRegion = req.service.config.region;\n var useFipsEndpoint = req.service.config.useFipsEndpoint;\n var allowFipsEndpoint = options.allowFipsEndpoint || false;\n\n if (!regionFromArn) {\n var message = 'ARN region is empty';\n if (req._parsedArn.service === 's3') {\n message = message + '\\nYou may want to use multi-regional ARN. The feature is not supported in current SDK. ' +\n 'You should consider switching to V3(https://github.com/aws/aws-sdk-js-v3).';\n }\n throw AWS.util.error(new Error(), {\n code: 'InvalidARN',\n message: message\n });\n }\n\n if (useFipsEndpoint && !allowFipsEndpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'ARN endpoint is not compatible with FIPS region'\n });\n }\n\n if (regionFromArn.indexOf('fips') >= 0) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'FIPS region not allowed in ARN'\n });\n }\n\n if (!useArnRegion && regionFromArn !== clientRegion) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Configured region conflicts with access point region'\n });\n } else if (\n useArnRegion &&\n regionUtil.getEndpointSuffix(regionFromArn) !== regionUtil.getEndpointSuffix(clientRegion)\n ) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Configured region and access point region not in same partition'\n });\n }\n\n if (req.service.config.useAccelerateEndpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'useAccelerateEndpoint config is not supported with access point ARN'\n });\n }\n\n if (req._parsedArn.service === 's3-outposts' && req.service.config.useDualstackEndpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Dualstack is not supported with outposts access point ARN'\n });\n }\n },\n\n loadUseArnRegionConfig: function loadUseArnRegionConfig(req) {\n var envName = 'AWS_S3_USE_ARN_REGION';\n var configName = 's3_use_arn_region';\n var useArnRegion = true;\n var originalConfig = req.service._originalConfig || {};\n if (req.service.config.s3UseArnRegion !== undefined) {\n return req.service.config.s3UseArnRegion;\n } else if (originalConfig.s3UseArnRegion !== undefined) {\n useArnRegion = originalConfig.s3UseArnRegion === true;\n } else if (AWS.util.isNode()) {\n //load from environmental variable AWS_USE_ARN_REGION\n if (process.env[envName]) {\n var value = process.env[envName].trim().toLowerCase();\n if (['false', 'true'].indexOf(value) < 0) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: envName + ' only accepts true or false. Got ' + process.env[envName],\n retryable: false\n });\n }\n useArnRegion = value === 'true';\n } else { //load from shared config property use_arn_region\n var profiles = {};\n var profile = {};\n try {\n profiles = AWS.util.getProfilesFromSharedConfig(AWS.util.iniLoader);\n profile = profiles[process.env.AWS_PROFILE || AWS.util.defaultProfile];\n } catch (e) {}\n if (profile[configName]) {\n if (['false', 'true'].indexOf(profile[configName].trim().toLowerCase()) < 0) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: configName + ' only accepts true or false. Got ' + profile[configName],\n retryable: false\n });\n }\n useArnRegion = profile[configName].trim().toLowerCase() === 'true';\n }\n }\n }\n req.service.config.s3UseArnRegion = useArnRegion;\n return useArnRegion;\n },\n\n /**\n * Validations before URI can be populated\n */\n validatePopulateUriFromArn: function validatePopulateUriFromArn(req) {\n if (req.service._originalConfig && req.service._originalConfig.endpoint) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Custom endpoint is not compatible with access point ARN'\n });\n }\n\n if (req.service.config.s3ForcePathStyle) {\n throw AWS.util.error(new Error(), {\n code: 'InvalidConfiguration',\n message: 'Cannot construct path-style endpoint with access point'\n });\n }\n },\n\n /**\n * Returns true if the bucket name is DNS compatible. Buckets created\n * outside of the classic region MUST be DNS compatible.\n *\n * @api private\n */\n dnsCompatibleBucketName: function dnsCompatibleBucketName(bucketName) {\n var b = bucketName;\n var domain = new RegExp(/^[a-z0-9][a-z0-9\\.\\-]{1,61}[a-z0-9]$/);\n var ipAddress = new RegExp(/(\\d+\\.){3}\\d+/);\n var dots = new RegExp(/\\.\\./);\n return (b.match(domain) && !b.match(ipAddress) && !b.match(dots)) ? true : false;\n },\n};\n\n/**\n * @api private\n */\nmodule.exports = s3util;\n","var AWS = require('../core');\nvar resolveRegionalEndpointsFlag = require('../config_regional_endpoint');\nvar ENV_REGIONAL_ENDPOINT_ENABLED = 'AWS_STS_REGIONAL_ENDPOINTS';\nvar CONFIG_REGIONAL_ENDPOINT_ENABLED = 'sts_regional_endpoints';\n\nAWS.util.update(AWS.STS.prototype, {\n /**\n * @overload credentialsFrom(data, credentials = null)\n * Creates a credentials object from STS response data containing\n * credentials information. Useful for quickly setting AWS credentials.\n *\n * @note This is a low-level utility function. If you want to load temporary\n * credentials into your process for subsequent requests to AWS resources,\n * you should use {AWS.TemporaryCredentials} instead.\n * @param data [map] data retrieved from a call to {getFederatedToken},\n * {getSessionToken}, {assumeRole}, or {assumeRoleWithWebIdentity}.\n * @param credentials [AWS.Credentials] an optional credentials object to\n * fill instead of creating a new object. Useful when modifying an\n * existing credentials object from a refresh call.\n * @return [AWS.TemporaryCredentials] the set of temporary credentials\n * loaded from a raw STS operation response.\n * @example Using credentialsFrom to load global AWS credentials\n * var sts = new AWS.STS();\n * sts.getSessionToken(function (err, data) {\n * if (err) console.log(\"Error getting credentials\");\n * else {\n * AWS.config.credentials = sts.credentialsFrom(data);\n * }\n * });\n * @see AWS.TemporaryCredentials\n */\n credentialsFrom: function credentialsFrom(data, credentials) {\n if (!data) return null;\n if (!credentials) credentials = new AWS.TemporaryCredentials();\n credentials.expired = false;\n credentials.accessKeyId = data.Credentials.AccessKeyId;\n credentials.secretAccessKey = data.Credentials.SecretAccessKey;\n credentials.sessionToken = data.Credentials.SessionToken;\n credentials.expireTime = data.Credentials.Expiration;\n return credentials;\n },\n\n assumeRoleWithWebIdentity: function assumeRoleWithWebIdentity(params, callback) {\n return this.makeUnauthenticatedRequest('assumeRoleWithWebIdentity', params, callback);\n },\n\n assumeRoleWithSAML: function assumeRoleWithSAML(params, callback) {\n return this.makeUnauthenticatedRequest('assumeRoleWithSAML', params, callback);\n },\n\n /**\n * @api private\n */\n setupRequestListeners: function setupRequestListeners(request) {\n request.addListener('validate', this.optInRegionalEndpoint, true);\n },\n\n /**\n * @api private\n */\n optInRegionalEndpoint: function optInRegionalEndpoint(req) {\n var service = req.service;\n var config = service.config;\n config.stsRegionalEndpoints = resolveRegionalEndpointsFlag(service._originalConfig, {\n env: ENV_REGIONAL_ENDPOINT_ENABLED,\n sharedConfig: CONFIG_REGIONAL_ENDPOINT_ENABLED,\n clientConfig: 'stsRegionalEndpoints'\n });\n if (\n config.stsRegionalEndpoints === 'regional' &&\n service.isGlobalEndpoint\n ) {\n //client will throw if region is not supplied; request will be signed with specified region\n if (!config.region) {\n throw AWS.util.error(new Error(),\n {code: 'ConfigError', message: 'Missing region in config'});\n }\n var insertPoint = config.endpoint.indexOf('.amazonaws.com');\n var regionalEndpoint = config.endpoint.substring(0, insertPoint) +\n '.' + config.region + config.endpoint.substring(insertPoint);\n req.httpRequest.updateEndpoint(regionalEndpoint);\n req.httpRequest.region = config.region;\n }\n }\n\n});\n","var AWS = require('../core');\n\n/**\n * @api private\n */\nAWS.Signers.Bearer = AWS.util.inherit(AWS.Signers.RequestSigner, {\n constructor: function Bearer(request) {\n AWS.Signers.RequestSigner.call(this, request);\n },\n\n addAuthorization: function addAuthorization(token) {\n this.request.headers['Authorization'] = 'Bearer ' + token.token;\n }\n});\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nvar expiresHeader = 'presigned-expires';\n\n/**\n * @api private\n */\nfunction signedUrlBuilder(request) {\n var expires = request.httpRequest.headers[expiresHeader];\n var signerClass = request.service.getSignerClass(request);\n\n delete request.httpRequest.headers['User-Agent'];\n delete request.httpRequest.headers['X-Amz-User-Agent'];\n\n if (signerClass === AWS.Signers.V4) {\n if (expires > 604800) { // one week expiry is invalid\n var message = 'Presigning does not support expiry time greater ' +\n 'than a week with SigV4 signing.';\n throw AWS.util.error(new Error(), {\n code: 'InvalidExpiryTime', message: message, retryable: false\n });\n }\n request.httpRequest.headers[expiresHeader] = expires;\n } else if (signerClass === AWS.Signers.S3) {\n var now = request.service ? request.service.getSkewCorrectedDate() : AWS.util.date.getDate();\n request.httpRequest.headers[expiresHeader] = parseInt(\n AWS.util.date.unixTimestamp(now) + expires, 10).toString();\n } else {\n throw AWS.util.error(new Error(), {\n message: 'Presigning only supports S3 or SigV4 signing.',\n code: 'UnsupportedSigner', retryable: false\n });\n }\n}\n\n/**\n * @api private\n */\nfunction signedUrlSigner(request) {\n var endpoint = request.httpRequest.endpoint;\n var parsedUrl = AWS.util.urlParse(request.httpRequest.path);\n var queryParams = {};\n\n if (parsedUrl.search) {\n queryParams = AWS.util.queryStringParse(parsedUrl.search.substr(1));\n }\n\n var auth = request.httpRequest.headers['Authorization'].split(' ');\n if (auth[0] === 'AWS') {\n auth = auth[1].split(':');\n queryParams['Signature'] = auth.pop();\n queryParams['AWSAccessKeyId'] = auth.join(':');\n\n AWS.util.each(request.httpRequest.headers, function (key, value) {\n if (key === expiresHeader) key = 'Expires';\n if (key.indexOf('x-amz-meta-') === 0) {\n // Delete existing, potentially not normalized key\n delete queryParams[key];\n key = key.toLowerCase();\n }\n queryParams[key] = value;\n });\n delete request.httpRequest.headers[expiresHeader];\n delete queryParams['Authorization'];\n delete queryParams['Host'];\n } else if (auth[0] === 'AWS4-HMAC-SHA256') { // SigV4 signing\n auth.shift();\n var rest = auth.join(' ');\n var signature = rest.match(/Signature=(.*?)(?:,|\\s|\\r?\\n|$)/)[1];\n queryParams['X-Amz-Signature'] = signature;\n delete queryParams['Expires'];\n }\n\n // build URL\n endpoint.pathname = parsedUrl.pathname;\n endpoint.search = AWS.util.queryParamsToString(queryParams);\n}\n\n/**\n * @api private\n */\nAWS.Signers.Presign = inherit({\n /**\n * @api private\n */\n sign: function sign(request, expireTime, callback) {\n request.httpRequest.headers[expiresHeader] = expireTime || 3600;\n request.on('build', signedUrlBuilder);\n request.on('sign', signedUrlSigner);\n request.removeListener('afterBuild',\n AWS.EventListeners.Core.SET_CONTENT_LENGTH);\n request.removeListener('afterBuild',\n AWS.EventListeners.Core.COMPUTE_SHA256);\n\n request.emit('beforePresign', [request]);\n\n if (callback) {\n request.build(function() {\n if (this.response.error) callback(this.response.error);\n else {\n callback(null, AWS.util.urlFormat(request.httpRequest.endpoint));\n }\n });\n } else {\n request.build();\n if (request.response.error) throw request.response.error;\n return AWS.util.urlFormat(request.httpRequest.endpoint);\n }\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.Presign;\n","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.RequestSigner = inherit({\n constructor: function RequestSigner(request) {\n this.request = request;\n },\n\n setServiceClientId: function setServiceClientId(id) {\n this.serviceClientId = id;\n },\n\n getServiceClientId: function getServiceClientId() {\n return this.serviceClientId;\n }\n});\n\nAWS.Signers.RequestSigner.getVersion = function getVersion(version) {\n switch (version) {\n case 'v2': return AWS.Signers.V2;\n case 'v3': return AWS.Signers.V3;\n case 's3v4': return AWS.Signers.V4;\n case 'v4': return AWS.Signers.V4;\n case 's3': return AWS.Signers.S3;\n case 'v3https': return AWS.Signers.V3Https;\n case 'bearer': return AWS.Signers.Bearer;\n }\n throw new Error('Unknown signing version ' + version);\n};\n\nrequire('./v2');\nrequire('./v3');\nrequire('./v3https');\nrequire('./v4');\nrequire('./s3');\nrequire('./presign');\nrequire('./bearer');\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.S3 = inherit(AWS.Signers.RequestSigner, {\n /**\n * When building the stringToSign, these sub resource params should be\n * part of the canonical resource string with their NON-decoded values\n */\n subResources: {\n 'acl': 1,\n 'accelerate': 1,\n 'analytics': 1,\n 'cors': 1,\n 'lifecycle': 1,\n 'delete': 1,\n 'inventory': 1,\n 'location': 1,\n 'logging': 1,\n 'metrics': 1,\n 'notification': 1,\n 'partNumber': 1,\n 'policy': 1,\n 'requestPayment': 1,\n 'replication': 1,\n 'restore': 1,\n 'tagging': 1,\n 'torrent': 1,\n 'uploadId': 1,\n 'uploads': 1,\n 'versionId': 1,\n 'versioning': 1,\n 'versions': 1,\n 'website': 1\n },\n\n // when building the stringToSign, these querystring params should be\n // part of the canonical resource string with their NON-encoded values\n responseHeaders: {\n 'response-content-type': 1,\n 'response-content-language': 1,\n 'response-expires': 1,\n 'response-cache-control': 1,\n 'response-content-disposition': 1,\n 'response-content-encoding': 1\n },\n\n addAuthorization: function addAuthorization(credentials, date) {\n if (!this.request.headers['presigned-expires']) {\n this.request.headers['X-Amz-Date'] = AWS.util.date.rfc822(date);\n }\n\n if (credentials.sessionToken) {\n // presigned URLs require this header to be lowercased\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n\n var signature = this.sign(credentials.secretAccessKey, this.stringToSign());\n var auth = 'AWS ' + credentials.accessKeyId + ':' + signature;\n\n this.request.headers['Authorization'] = auth;\n },\n\n stringToSign: function stringToSign() {\n var r = this.request;\n\n var parts = [];\n parts.push(r.method);\n parts.push(r.headers['Content-MD5'] || '');\n parts.push(r.headers['Content-Type'] || '');\n\n // This is the \"Date\" header, but we use X-Amz-Date.\n // The S3 signing mechanism requires us to pass an empty\n // string for this Date header regardless.\n parts.push(r.headers['presigned-expires'] || '');\n\n var headers = this.canonicalizedAmzHeaders();\n if (headers) parts.push(headers);\n parts.push(this.canonicalizedResource());\n\n return parts.join('\\n');\n\n },\n\n canonicalizedAmzHeaders: function canonicalizedAmzHeaders() {\n\n var amzHeaders = [];\n\n AWS.util.each(this.request.headers, function (name) {\n if (name.match(/^x-amz-/i))\n amzHeaders.push(name);\n });\n\n amzHeaders.sort(function (a, b) {\n return a.toLowerCase() < b.toLowerCase() ? -1 : 1;\n });\n\n var parts = [];\n AWS.util.arrayEach.call(this, amzHeaders, function (name) {\n parts.push(name.toLowerCase() + ':' + String(this.request.headers[name]));\n });\n\n return parts.join('\\n');\n\n },\n\n canonicalizedResource: function canonicalizedResource() {\n\n var r = this.request;\n\n var parts = r.path.split('?');\n var path = parts[0];\n var querystring = parts[1];\n\n var resource = '';\n\n if (r.virtualHostedBucket)\n resource += '/' + r.virtualHostedBucket;\n\n resource += path;\n\n if (querystring) {\n\n // collect a list of sub resources and query params that need to be signed\n var resources = [];\n\n AWS.util.arrayEach.call(this, querystring.split('&'), function (param) {\n var name = param.split('=')[0];\n var value = param.split('=')[1];\n if (this.subResources[name] || this.responseHeaders[name]) {\n var subresource = { name: name };\n if (value !== undefined) {\n if (this.subResources[name]) {\n subresource.value = value;\n } else {\n subresource.value = decodeURIComponent(value);\n }\n }\n resources.push(subresource);\n }\n });\n\n resources.sort(function (a, b) { return a.name < b.name ? -1 : 1; });\n\n if (resources.length) {\n\n querystring = [];\n AWS.util.arrayEach(resources, function (res) {\n if (res.value === undefined) {\n querystring.push(res.name);\n } else {\n querystring.push(res.name + '=' + res.value);\n }\n });\n\n resource += '?' + querystring.join('&');\n }\n\n }\n\n return resource;\n\n },\n\n sign: function sign(secret, string) {\n return AWS.util.crypto.hmac(secret, string, 'base64', 'sha1');\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.S3;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.V2 = inherit(AWS.Signers.RequestSigner, {\n addAuthorization: function addAuthorization(credentials, date) {\n\n if (!date) date = AWS.util.date.getDate();\n\n var r = this.request;\n\n r.params.Timestamp = AWS.util.date.iso8601(date);\n r.params.SignatureVersion = '2';\n r.params.SignatureMethod = 'HmacSHA256';\n r.params.AWSAccessKeyId = credentials.accessKeyId;\n\n if (credentials.sessionToken) {\n r.params.SecurityToken = credentials.sessionToken;\n }\n\n delete r.params.Signature; // delete old Signature for re-signing\n r.params.Signature = this.signature(credentials);\n\n r.body = AWS.util.queryParamsToString(r.params);\n r.headers['Content-Length'] = r.body.length;\n },\n\n signature: function signature(credentials) {\n return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n },\n\n stringToSign: function stringToSign() {\n var parts = [];\n parts.push(this.request.method);\n parts.push(this.request.endpoint.host.toLowerCase());\n parts.push(this.request.pathname());\n parts.push(AWS.util.queryParamsToString(this.request.params));\n return parts.join('\\n');\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V2;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nAWS.Signers.V3 = inherit(AWS.Signers.RequestSigner, {\n addAuthorization: function addAuthorization(credentials, date) {\n\n var datetime = AWS.util.date.rfc822(date);\n\n this.request.headers['X-Amz-Date'] = datetime;\n\n if (credentials.sessionToken) {\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n\n this.request.headers['X-Amzn-Authorization'] =\n this.authorization(credentials, datetime);\n\n },\n\n authorization: function authorization(credentials) {\n return 'AWS3 ' +\n 'AWSAccessKeyId=' + credentials.accessKeyId + ',' +\n 'Algorithm=HmacSHA256,' +\n 'SignedHeaders=' + this.signedHeaders() + ',' +\n 'Signature=' + this.signature(credentials);\n },\n\n signedHeaders: function signedHeaders() {\n var headers = [];\n AWS.util.arrayEach(this.headersToSign(), function iterator(h) {\n headers.push(h.toLowerCase());\n });\n return headers.sort().join(';');\n },\n\n canonicalHeaders: function canonicalHeaders() {\n var headers = this.request.headers;\n var parts = [];\n AWS.util.arrayEach(this.headersToSign(), function iterator(h) {\n parts.push(h.toLowerCase().trim() + ':' + String(headers[h]).trim());\n });\n return parts.sort().join('\\n') + '\\n';\n },\n\n headersToSign: function headersToSign() {\n var headers = [];\n AWS.util.each(this.request.headers, function iterator(k) {\n if (k === 'Host' || k === 'Content-Encoding' || k.match(/^X-Amz/i)) {\n headers.push(k);\n }\n });\n return headers;\n },\n\n signature: function signature(credentials) {\n return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n },\n\n stringToSign: function stringToSign() {\n var parts = [];\n parts.push(this.request.method);\n parts.push('/');\n parts.push('');\n parts.push(this.canonicalHeaders());\n parts.push(this.request.body);\n return AWS.util.crypto.sha256(parts.join('\\n'));\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V3;\n","var AWS = require('../core');\nvar inherit = AWS.util.inherit;\n\nrequire('./v3');\n\n/**\n * @api private\n */\nAWS.Signers.V3Https = inherit(AWS.Signers.V3, {\n authorization: function authorization(credentials) {\n return 'AWS3-HTTPS ' +\n 'AWSAccessKeyId=' + credentials.accessKeyId + ',' +\n 'Algorithm=HmacSHA256,' +\n 'Signature=' + this.signature(credentials);\n },\n\n stringToSign: function stringToSign() {\n return this.request.headers['X-Amz-Date'];\n }\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V3Https;\n","var AWS = require('../core');\nvar v4Credentials = require('./v4_credentials');\nvar inherit = AWS.util.inherit;\n\n/**\n * @api private\n */\nvar expiresHeader = 'presigned-expires';\n\n/**\n * @api private\n */\nAWS.Signers.V4 = inherit(AWS.Signers.RequestSigner, {\n constructor: function V4(request, serviceName, options) {\n AWS.Signers.RequestSigner.call(this, request);\n this.serviceName = serviceName;\n options = options || {};\n this.signatureCache = typeof options.signatureCache === 'boolean' ? options.signatureCache : true;\n this.operation = options.operation;\n this.signatureVersion = options.signatureVersion;\n },\n\n algorithm: 'AWS4-HMAC-SHA256',\n\n addAuthorization: function addAuthorization(credentials, date) {\n var datetime = AWS.util.date.iso8601(date).replace(/[:\\-]|\\.\\d{3}/g, '');\n\n if (this.isPresigned()) {\n this.updateForPresigned(credentials, datetime);\n } else {\n this.addHeaders(credentials, datetime);\n }\n\n this.request.headers['Authorization'] =\n this.authorization(credentials, datetime);\n },\n\n addHeaders: function addHeaders(credentials, datetime) {\n this.request.headers['X-Amz-Date'] = datetime;\n if (credentials.sessionToken) {\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n },\n\n updateForPresigned: function updateForPresigned(credentials, datetime) {\n var credString = this.credentialString(datetime);\n var qs = {\n 'X-Amz-Date': datetime,\n 'X-Amz-Algorithm': this.algorithm,\n 'X-Amz-Credential': credentials.accessKeyId + '/' + credString,\n 'X-Amz-Expires': this.request.headers[expiresHeader],\n 'X-Amz-SignedHeaders': this.signedHeaders()\n };\n\n if (credentials.sessionToken) {\n qs['X-Amz-Security-Token'] = credentials.sessionToken;\n }\n\n if (this.request.headers['Content-Type']) {\n qs['Content-Type'] = this.request.headers['Content-Type'];\n }\n if (this.request.headers['Content-MD5']) {\n qs['Content-MD5'] = this.request.headers['Content-MD5'];\n }\n if (this.request.headers['Cache-Control']) {\n qs['Cache-Control'] = this.request.headers['Cache-Control'];\n }\n\n // need to pull in any other X-Amz-* headers\n AWS.util.each.call(this, this.request.headers, function(key, value) {\n if (key === expiresHeader) return;\n if (this.isSignableHeader(key)) {\n var lowerKey = key.toLowerCase();\n // Metadata should be normalized\n if (lowerKey.indexOf('x-amz-meta-') === 0) {\n qs[lowerKey] = value;\n } else if (lowerKey.indexOf('x-amz-') === 0) {\n qs[key] = value;\n }\n }\n });\n\n var sep = this.request.path.indexOf('?') >= 0 ? '&' : '?';\n this.request.path += sep + AWS.util.queryParamsToString(qs);\n },\n\n authorization: function authorization(credentials, datetime) {\n var parts = [];\n var credString = this.credentialString(datetime);\n parts.push(this.algorithm + ' Credential=' +\n credentials.accessKeyId + '/' + credString);\n parts.push('SignedHeaders=' + this.signedHeaders());\n parts.push('Signature=' + this.signature(credentials, datetime));\n return parts.join(', ');\n },\n\n signature: function signature(credentials, datetime) {\n var signingKey = v4Credentials.getSigningKey(\n credentials,\n datetime.substr(0, 8),\n this.request.region,\n this.serviceName,\n this.signatureCache\n );\n return AWS.util.crypto.hmac(signingKey, this.stringToSign(datetime), 'hex');\n },\n\n stringToSign: function stringToSign(datetime) {\n var parts = [];\n parts.push('AWS4-HMAC-SHA256');\n parts.push(datetime);\n parts.push(this.credentialString(datetime));\n parts.push(this.hexEncodedHash(this.canonicalString()));\n return parts.join('\\n');\n },\n\n canonicalString: function canonicalString() {\n var parts = [], pathname = this.request.pathname();\n if (this.serviceName !== 's3' && this.signatureVersion !== 's3v4') pathname = AWS.util.uriEscapePath(pathname);\n\n parts.push(this.request.method);\n parts.push(pathname);\n parts.push(this.request.search());\n parts.push(this.canonicalHeaders() + '\\n');\n parts.push(this.signedHeaders());\n parts.push(this.hexEncodedBodyHash());\n return parts.join('\\n');\n },\n\n canonicalHeaders: function canonicalHeaders() {\n var headers = [];\n AWS.util.each.call(this, this.request.headers, function (key, item) {\n headers.push([key, item]);\n });\n headers.sort(function (a, b) {\n return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : 1;\n });\n var parts = [];\n AWS.util.arrayEach.call(this, headers, function (item) {\n var key = item[0].toLowerCase();\n if (this.isSignableHeader(key)) {\n var value = item[1];\n if (typeof value === 'undefined' || value === null || typeof value.toString !== 'function') {\n throw AWS.util.error(new Error('Header ' + key + ' contains invalid value'), {\n code: 'InvalidHeader'\n });\n }\n parts.push(key + ':' +\n this.canonicalHeaderValues(value.toString()));\n }\n });\n return parts.join('\\n');\n },\n\n canonicalHeaderValues: function canonicalHeaderValues(values) {\n return values.replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/g, '');\n },\n\n signedHeaders: function signedHeaders() {\n var keys = [];\n AWS.util.each.call(this, this.request.headers, function (key) {\n key = key.toLowerCase();\n if (this.isSignableHeader(key)) keys.push(key);\n });\n return keys.sort().join(';');\n },\n\n credentialString: function credentialString(datetime) {\n return v4Credentials.createScope(\n datetime.substr(0, 8),\n this.request.region,\n this.serviceName\n );\n },\n\n hexEncodedHash: function hash(string) {\n return AWS.util.crypto.sha256(string, 'hex');\n },\n\n hexEncodedBodyHash: function hexEncodedBodyHash() {\n var request = this.request;\n if (this.isPresigned() && (['s3', 's3-object-lambda'].indexOf(this.serviceName) > -1) && !request.body) {\n return 'UNSIGNED-PAYLOAD';\n } else if (request.headers['X-Amz-Content-Sha256']) {\n return request.headers['X-Amz-Content-Sha256'];\n } else {\n return this.hexEncodedHash(this.request.body || '');\n }\n },\n\n unsignableHeaders: [\n 'authorization',\n 'content-type',\n 'content-length',\n 'user-agent',\n expiresHeader,\n 'expect',\n 'x-amzn-trace-id'\n ],\n\n isSignableHeader: function isSignableHeader(key) {\n if (key.toLowerCase().indexOf('x-amz-') === 0) return true;\n return this.unsignableHeaders.indexOf(key) < 0;\n },\n\n isPresigned: function isPresigned() {\n return this.request.headers[expiresHeader] ? true : false;\n }\n\n});\n\n/**\n * @api private\n */\nmodule.exports = AWS.Signers.V4;\n","var AWS = require('../core');\n\n/**\n * @api private\n */\nvar cachedSecret = {};\n\n/**\n * @api private\n */\nvar cacheQueue = [];\n\n/**\n * @api private\n */\nvar maxCacheEntries = 50;\n\n/**\n * @api private\n */\nvar v4Identifier = 'aws4_request';\n\n/**\n * @api private\n */\nmodule.exports = {\n /**\n * @api private\n *\n * @param date [String]\n * @param region [String]\n * @param serviceName [String]\n * @return [String]\n */\n createScope: function createScope(date, region, serviceName) {\n return [\n date.substr(0, 8),\n region,\n serviceName,\n v4Identifier\n ].join('/');\n },\n\n /**\n * @api private\n *\n * @param credentials [Credentials]\n * @param date [String]\n * @param region [String]\n * @param service [String]\n * @param shouldCache [Boolean]\n * @return [String]\n */\n getSigningKey: function getSigningKey(\n credentials,\n date,\n region,\n service,\n shouldCache\n ) {\n var credsIdentifier = AWS.util.crypto\n .hmac(credentials.secretAccessKey, credentials.accessKeyId, 'base64');\n var cacheKey = [credsIdentifier, date, region, service].join('_');\n shouldCache = shouldCache !== false;\n if (shouldCache && (cacheKey in cachedSecret)) {\n return cachedSecret[cacheKey];\n }\n\n var kDate = AWS.util.crypto.hmac(\n 'AWS4' + credentials.secretAccessKey,\n date,\n 'buffer'\n );\n var kRegion = AWS.util.crypto.hmac(kDate, region, 'buffer');\n var kService = AWS.util.crypto.hmac(kRegion, service, 'buffer');\n\n var signingKey = AWS.util.crypto.hmac(kService, v4Identifier, 'buffer');\n if (shouldCache) {\n cachedSecret[cacheKey] = signingKey;\n cacheQueue.push(cacheKey);\n if (cacheQueue.length > maxCacheEntries) {\n // remove the oldest entry (not the least recently used)\n delete cachedSecret[cacheQueue.shift()];\n }\n }\n\n return signingKey;\n },\n\n /**\n * @api private\n *\n * Empties the derived signing key cache. Made available for testing purposes\n * only.\n */\n emptyCache: function emptyCache() {\n cachedSecret = {};\n cacheQueue = [];\n }\n};\n","function AcceptorStateMachine(states, state) {\n this.currentState = state || null;\n this.states = states || {};\n}\n\nAcceptorStateMachine.prototype.runTo = function runTo(finalState, done, bindObject, inputError) {\n if (typeof finalState === 'function') {\n inputError = bindObject; bindObject = done;\n done = finalState; finalState = null;\n }\n\n var self = this;\n var state = self.states[self.currentState];\n state.fn.call(bindObject || self, inputError, function(err) {\n if (err) {\n if (state.fail) self.currentState = state.fail;\n else return done ? done.call(bindObject, err) : null;\n } else {\n if (state.accept) self.currentState = state.accept;\n else return done ? done.call(bindObject) : null;\n }\n if (self.currentState === finalState) {\n return done ? done.call(bindObject, err) : null;\n }\n\n self.runTo(finalState, done, bindObject, err);\n });\n};\n\nAcceptorStateMachine.prototype.addState = function addState(name, acceptState, failState, fn) {\n if (typeof acceptState === 'function') {\n fn = acceptState; acceptState = null; failState = null;\n } else if (typeof failState === 'function') {\n fn = failState; failState = null;\n }\n\n if (!this.currentState) this.currentState = name;\n this.states[name] = { accept: acceptState, fail: failState, fn: fn };\n return this;\n};\n\n/**\n * @api private\n */\nmodule.exports = AcceptorStateMachine;\n","/* eslint guard-for-in:0 */\nvar AWS;\n\n/**\n * A set of utility methods for use with the AWS SDK.\n *\n * @!attribute abort\n * Return this value from an iterator function {each} or {arrayEach}\n * to break out of the iteration.\n * @example Breaking out of an iterator function\n * AWS.util.each({a: 1, b: 2, c: 3}, function(key, value) {\n * if (key == 'b') return AWS.util.abort;\n * });\n * @see each\n * @see arrayEach\n * @api private\n */\nvar util = {\n environment: 'nodejs',\n engine: function engine() {\n if (util.isBrowser() && typeof navigator !== 'undefined') {\n return navigator.userAgent;\n } else {\n var engine = process.platform + '/' + process.version;\n if (process.env.AWS_EXECUTION_ENV) {\n engine += ' exec-env/' + process.env.AWS_EXECUTION_ENV;\n }\n return engine;\n }\n },\n\n userAgent: function userAgent() {\n var name = util.environment;\n var agent = 'aws-sdk-' + name + '/' + require('./core').VERSION;\n if (name === 'nodejs') agent += ' ' + util.engine();\n return agent;\n },\n\n uriEscape: function uriEscape(string) {\n var output = encodeURIComponent(string);\n output = output.replace(/[^A-Za-z0-9_.~\\-%]+/g, escape);\n\n // AWS percent-encodes some extra non-standard characters in a URI\n output = output.replace(/[*]/g, function(ch) {\n return '%' + ch.charCodeAt(0).toString(16).toUpperCase();\n });\n\n return output;\n },\n\n uriEscapePath: function uriEscapePath(string) {\n var parts = [];\n util.arrayEach(string.split('/'), function (part) {\n parts.push(util.uriEscape(part));\n });\n return parts.join('/');\n },\n\n urlParse: function urlParse(url) {\n return util.url.parse(url);\n },\n\n urlFormat: function urlFormat(url) {\n return util.url.format(url);\n },\n\n queryStringParse: function queryStringParse(qs) {\n return util.querystring.parse(qs);\n },\n\n queryParamsToString: function queryParamsToString(params) {\n var items = [];\n var escape = util.uriEscape;\n var sortedKeys = Object.keys(params).sort();\n\n util.arrayEach(sortedKeys, function(name) {\n var value = params[name];\n var ename = escape(name);\n var result = ename + '=';\n if (Array.isArray(value)) {\n var vals = [];\n util.arrayEach(value, function(item) { vals.push(escape(item)); });\n result = ename + '=' + vals.sort().join('&' + ename + '=');\n } else if (value !== undefined && value !== null) {\n result = ename + '=' + escape(value);\n }\n items.push(result);\n });\n\n return items.join('&');\n },\n\n readFileSync: function readFileSync(path) {\n if (util.isBrowser()) return null;\n return require('fs').readFileSync(path, 'utf-8');\n },\n\n base64: {\n encode: function encode64(string) {\n if (typeof string === 'number') {\n throw util.error(new Error('Cannot base64 encode number ' + string));\n }\n if (string === null || typeof string === 'undefined') {\n return string;\n }\n var buf = util.buffer.toBuffer(string);\n return buf.toString('base64');\n },\n\n decode: function decode64(string) {\n if (typeof string === 'number') {\n throw util.error(new Error('Cannot base64 decode number ' + string));\n }\n if (string === null || typeof string === 'undefined') {\n return string;\n }\n return util.buffer.toBuffer(string, 'base64');\n }\n\n },\n\n buffer: {\n /**\n * Buffer constructor for Node buffer and buffer pollyfill\n */\n toBuffer: function(data, encoding) {\n return (typeof util.Buffer.from === 'function' && util.Buffer.from !== Uint8Array.from) ?\n util.Buffer.from(data, encoding) : new util.Buffer(data, encoding);\n },\n\n alloc: function(size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new Error('size passed to alloc must be a number.');\n }\n if (typeof util.Buffer.alloc === 'function') {\n return util.Buffer.alloc(size, fill, encoding);\n } else {\n var buf = new util.Buffer(size);\n if (fill !== undefined && typeof buf.fill === 'function') {\n buf.fill(fill, undefined, undefined, encoding);\n }\n return buf;\n }\n },\n\n toStream: function toStream(buffer) {\n if (!util.Buffer.isBuffer(buffer)) buffer = util.buffer.toBuffer(buffer);\n\n var readable = new (util.stream.Readable)();\n var pos = 0;\n readable._read = function(size) {\n if (pos >= buffer.length) return readable.push(null);\n\n var end = pos + size;\n if (end > buffer.length) end = buffer.length;\n readable.push(buffer.slice(pos, end));\n pos = end;\n };\n\n return readable;\n },\n\n /**\n * Concatenates a list of Buffer objects.\n */\n concat: function(buffers) {\n var length = 0,\n offset = 0,\n buffer = null, i;\n\n for (i = 0; i < buffers.length; i++) {\n length += buffers[i].length;\n }\n\n buffer = util.buffer.alloc(length);\n\n for (i = 0; i < buffers.length; i++) {\n buffers[i].copy(buffer, offset);\n offset += buffers[i].length;\n }\n\n return buffer;\n }\n },\n\n string: {\n byteLength: function byteLength(string) {\n if (string === null || string === undefined) return 0;\n if (typeof string === 'string') string = util.buffer.toBuffer(string);\n\n if (typeof string.byteLength === 'number') {\n return string.byteLength;\n } else if (typeof string.length === 'number') {\n return string.length;\n } else if (typeof string.size === 'number') {\n return string.size;\n } else if (typeof string.path === 'string') {\n return require('fs').lstatSync(string.path).size;\n } else {\n throw util.error(new Error('Cannot determine length of ' + string),\n { object: string });\n }\n },\n\n upperFirst: function upperFirst(string) {\n return string[0].toUpperCase() + string.substr(1);\n },\n\n lowerFirst: function lowerFirst(string) {\n return string[0].toLowerCase() + string.substr(1);\n }\n },\n\n ini: {\n parse: function string(ini) {\n var currentSection, map = {};\n util.arrayEach(ini.split(/\\r?\\n/), function(line) {\n line = line.split(/(^|\\s)[;#]/)[0].trim(); // remove comments and trim\n var isSection = line[0] === '[' && line[line.length - 1] === ']';\n if (isSection) {\n currentSection = line.substring(1, line.length - 1);\n if (currentSection === '__proto__' || currentSection.split(/\\s/)[1] === '__proto__') {\n throw util.error(\n new Error('Cannot load profile name \\'' + currentSection + '\\' from shared ini file.')\n );\n }\n } else if (currentSection) {\n var indexOfEqualsSign = line.indexOf('=');\n var start = 0;\n var end = line.length - 1;\n var isAssignment =\n indexOfEqualsSign !== -1 && indexOfEqualsSign !== start && indexOfEqualsSign !== end;\n\n if (isAssignment) {\n var name = line.substring(0, indexOfEqualsSign).trim();\n var value = line.substring(indexOfEqualsSign + 1).trim();\n\n map[currentSection] = map[currentSection] || {};\n map[currentSection][name] = value;\n }\n }\n });\n\n return map;\n }\n },\n\n fn: {\n noop: function() {},\n callback: function (err) { if (err) throw err; },\n\n /**\n * Turn a synchronous function into as \"async\" function by making it call\n * a callback. The underlying function is called with all but the last argument,\n * which is treated as the callback. The callback is passed passed a first argument\n * of null on success to mimick standard node callbacks.\n */\n makeAsync: function makeAsync(fn, expectedArgs) {\n if (expectedArgs && expectedArgs <= fn.length) {\n return fn;\n }\n\n return function() {\n var args = Array.prototype.slice.call(arguments, 0);\n var callback = args.pop();\n var result = fn.apply(null, args);\n callback(result);\n };\n }\n },\n\n /**\n * Date and time utility functions.\n */\n date: {\n\n /**\n * @return [Date] the current JavaScript date object. Since all\n * AWS services rely on this date object, you can override\n * this function to provide a special time value to AWS service\n * requests.\n */\n getDate: function getDate() {\n if (!AWS) AWS = require('./core');\n if (AWS.config.systemClockOffset) { // use offset when non-zero\n return new Date(new Date().getTime() + AWS.config.systemClockOffset);\n } else {\n return new Date();\n }\n },\n\n /**\n * @return [String] the date in ISO-8601 format\n */\n iso8601: function iso8601(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.toISOString().replace(/\\.\\d{3}Z$/, 'Z');\n },\n\n /**\n * @return [String] the date in RFC 822 format\n */\n rfc822: function rfc822(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.toUTCString();\n },\n\n /**\n * @return [Integer] the UNIX timestamp value for the current time\n */\n unixTimestamp: function unixTimestamp(date) {\n if (date === undefined) { date = util.date.getDate(); }\n return date.getTime() / 1000;\n },\n\n /**\n * @param [String,number,Date] date\n * @return [Date]\n */\n from: function format(date) {\n if (typeof date === 'number') {\n return new Date(date * 1000); // unix timestamp\n } else {\n return new Date(date);\n }\n },\n\n /**\n * Given a Date or date-like value, this function formats the\n * date into a string of the requested value.\n * @param [String,number,Date] date\n * @param [String] formatter Valid formats are:\n # * 'iso8601'\n # * 'rfc822'\n # * 'unixTimestamp'\n * @return [String]\n */\n format: function format(date, formatter) {\n if (!formatter) formatter = 'iso8601';\n return util.date[formatter](util.date.from(date));\n },\n\n parseTimestamp: function parseTimestamp(value) {\n if (typeof value === 'number') { // unix timestamp (number)\n return new Date(value * 1000);\n } else if (value.match(/^\\d+$/)) { // unix timestamp\n return new Date(value * 1000);\n } else if (value.match(/^\\d{4}/)) { // iso8601\n return new Date(value);\n } else if (value.match(/^\\w{3},/)) { // rfc822\n return new Date(value);\n } else {\n throw util.error(\n new Error('unhandled timestamp format: ' + value),\n {code: 'TimestampParserError'});\n }\n }\n\n },\n\n crypto: {\n crc32Table: [\n 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419,\n 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4,\n 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07,\n 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE,\n 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856,\n 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9,\n 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4,\n 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,\n 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3,\n 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A,\n 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599,\n 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924,\n 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190,\n 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F,\n 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E,\n 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,\n 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED,\n 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950,\n 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3,\n 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2,\n 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A,\n 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5,\n 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010,\n 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,\n 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17,\n 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6,\n 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615,\n 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8,\n 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344,\n 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB,\n 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A,\n 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,\n 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1,\n 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C,\n 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF,\n 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236,\n 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE,\n 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31,\n 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C,\n 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,\n 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B,\n 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242,\n 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1,\n 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C,\n 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278,\n 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7,\n 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66,\n 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,\n 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605,\n 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8,\n 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B,\n 0x2D02EF8D],\n\n crc32: function crc32(data) {\n var tbl = util.crypto.crc32Table;\n var crc = 0 ^ -1;\n\n if (typeof data === 'string') {\n data = util.buffer.toBuffer(data);\n }\n\n for (var i = 0; i < data.length; i++) {\n var code = data.readUInt8(i);\n crc = (crc >>> 8) ^ tbl[(crc ^ code) & 0xFF];\n }\n return (crc ^ -1) >>> 0;\n },\n\n hmac: function hmac(key, string, digest, fn) {\n if (!digest) digest = 'binary';\n if (digest === 'buffer') { digest = undefined; }\n if (!fn) fn = 'sha256';\n if (typeof string === 'string') string = util.buffer.toBuffer(string);\n return util.crypto.lib.createHmac(fn, key).update(string).digest(digest);\n },\n\n md5: function md5(data, digest, callback) {\n return util.crypto.hash('md5', data, digest, callback);\n },\n\n sha256: function sha256(data, digest, callback) {\n return util.crypto.hash('sha256', data, digest, callback);\n },\n\n hash: function(algorithm, data, digest, callback) {\n var hash = util.crypto.createHash(algorithm);\n if (!digest) { digest = 'binary'; }\n if (digest === 'buffer') { digest = undefined; }\n if (typeof data === 'string') data = util.buffer.toBuffer(data);\n var sliceFn = util.arraySliceFn(data);\n var isBuffer = util.Buffer.isBuffer(data);\n //Identifying objects with an ArrayBuffer as buffers\n if (util.isBrowser() && typeof ArrayBuffer !== 'undefined' && data && data.buffer instanceof ArrayBuffer) isBuffer = true;\n\n if (callback && typeof data === 'object' &&\n typeof data.on === 'function' && !isBuffer) {\n data.on('data', function(chunk) { hash.update(chunk); });\n data.on('error', function(err) { callback(err); });\n data.on('end', function() { callback(null, hash.digest(digest)); });\n } else if (callback && sliceFn && !isBuffer &&\n typeof FileReader !== 'undefined') {\n // this might be a File/Blob\n var index = 0, size = 1024 * 512;\n var reader = new FileReader();\n reader.onerror = function() {\n callback(new Error('Failed to read data.'));\n };\n reader.onload = function() {\n var buf = new util.Buffer(new Uint8Array(reader.result));\n hash.update(buf);\n index += buf.length;\n reader._continueReading();\n };\n reader._continueReading = function() {\n if (index >= data.size) {\n callback(null, hash.digest(digest));\n return;\n }\n\n var back = index + size;\n if (back > data.size) back = data.size;\n reader.readAsArrayBuffer(sliceFn.call(data, index, back));\n };\n\n reader._continueReading();\n } else {\n if (util.isBrowser() && typeof data === 'object' && !isBuffer) {\n data = new util.Buffer(new Uint8Array(data));\n }\n var out = hash.update(data).digest(digest);\n if (callback) callback(null, out);\n return out;\n }\n },\n\n toHex: function toHex(data) {\n var out = [];\n for (var i = 0; i < data.length; i++) {\n out.push(('0' + data.charCodeAt(i).toString(16)).substr(-2, 2));\n }\n return out.join('');\n },\n\n createHash: function createHash(algorithm) {\n return util.crypto.lib.createHash(algorithm);\n }\n\n },\n\n /** @!ignore */\n\n /* Abort constant */\n abort: {},\n\n each: function each(object, iterFunction) {\n for (var key in object) {\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n var ret = iterFunction.call(this, key, object[key]);\n if (ret === util.abort) break;\n }\n }\n },\n\n arrayEach: function arrayEach(array, iterFunction) {\n for (var idx in array) {\n if (Object.prototype.hasOwnProperty.call(array, idx)) {\n var ret = iterFunction.call(this, array[idx], parseInt(idx, 10));\n if (ret === util.abort) break;\n }\n }\n },\n\n update: function update(obj1, obj2) {\n util.each(obj2, function iterator(key, item) {\n obj1[key] = item;\n });\n return obj1;\n },\n\n merge: function merge(obj1, obj2) {\n return util.update(util.copy(obj1), obj2);\n },\n\n copy: function copy(object) {\n if (object === null || object === undefined) return object;\n var dupe = {};\n // jshint forin:false\n for (var key in object) {\n dupe[key] = object[key];\n }\n return dupe;\n },\n\n isEmpty: function isEmpty(obj) {\n for (var prop in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, prop)) {\n return false;\n }\n }\n return true;\n },\n\n arraySliceFn: function arraySliceFn(obj) {\n var fn = obj.slice || obj.webkitSlice || obj.mozSlice;\n return typeof fn === 'function' ? fn : null;\n },\n\n isType: function isType(obj, type) {\n // handle cross-\"frame\" objects\n if (typeof type === 'function') type = util.typeName(type);\n return Object.prototype.toString.call(obj) === '[object ' + type + ']';\n },\n\n typeName: function typeName(type) {\n if (Object.prototype.hasOwnProperty.call(type, 'name')) return type.name;\n var str = type.toString();\n var match = str.match(/^\\s*function (.+)\\(/);\n return match ? match[1] : str;\n },\n\n error: function error(err, options) {\n var originalError = null;\n if (typeof err.message === 'string' && err.message !== '') {\n if (typeof options === 'string' || (options && options.message)) {\n originalError = util.copy(err);\n originalError.message = err.message;\n }\n }\n err.message = err.message || null;\n\n if (typeof options === 'string') {\n err.message = options;\n } else if (typeof options === 'object' && options !== null) {\n util.update(err, options);\n if (options.message)\n err.message = options.message;\n if (options.code || options.name)\n err.code = options.code || options.name;\n if (options.stack)\n err.stack = options.stack;\n }\n\n if (typeof Object.defineProperty === 'function') {\n Object.defineProperty(err, 'name', {writable: true, enumerable: false});\n Object.defineProperty(err, 'message', {enumerable: true});\n }\n\n err.name = String(options && options.name || err.name || err.code || 'Error');\n err.time = new Date();\n\n if (originalError) err.originalError = originalError;\n\n return err;\n },\n\n /**\n * @api private\n */\n inherit: function inherit(klass, features) {\n var newObject = null;\n if (features === undefined) {\n features = klass;\n klass = Object;\n newObject = {};\n } else {\n var ctor = function ConstructorWrapper() {};\n ctor.prototype = klass.prototype;\n newObject = new ctor();\n }\n\n // constructor not supplied, create pass-through ctor\n if (features.constructor === Object) {\n features.constructor = function() {\n if (klass !== Object) {\n return klass.apply(this, arguments);\n }\n };\n }\n\n features.constructor.prototype = newObject;\n util.update(features.constructor.prototype, features);\n features.constructor.__super__ = klass;\n return features.constructor;\n },\n\n /**\n * @api private\n */\n mixin: function mixin() {\n var klass = arguments[0];\n for (var i = 1; i < arguments.length; i++) {\n // jshint forin:false\n for (var prop in arguments[i].prototype) {\n var fn = arguments[i].prototype[prop];\n if (prop !== 'constructor') {\n klass.prototype[prop] = fn;\n }\n }\n }\n return klass;\n },\n\n /**\n * @api private\n */\n hideProperties: function hideProperties(obj, props) {\n if (typeof Object.defineProperty !== 'function') return;\n\n util.arrayEach(props, function (key) {\n Object.defineProperty(obj, key, {\n enumerable: false, writable: true, configurable: true });\n });\n },\n\n /**\n * @api private\n */\n property: function property(obj, name, value, enumerable, isValue) {\n var opts = {\n configurable: true,\n enumerable: enumerable !== undefined ? enumerable : true\n };\n if (typeof value === 'function' && !isValue) {\n opts.get = value;\n }\n else {\n opts.value = value; opts.writable = true;\n }\n\n Object.defineProperty(obj, name, opts);\n },\n\n /**\n * @api private\n */\n memoizedProperty: function memoizedProperty(obj, name, get, enumerable) {\n var cachedValue = null;\n\n // build enumerable attribute for each value with lazy accessor.\n util.property(obj, name, function() {\n if (cachedValue === null) {\n cachedValue = get();\n }\n return cachedValue;\n }, enumerable);\n },\n\n /**\n * TODO Remove in major version revision\n * This backfill populates response data without the\n * top-level payload name.\n *\n * @api private\n */\n hoistPayloadMember: function hoistPayloadMember(resp) {\n var req = resp.request;\n var operationName = req.operation;\n var operation = req.service.api.operations[operationName];\n var output = operation.output;\n if (output.payload && !operation.hasEventOutput) {\n var payloadMember = output.members[output.payload];\n var responsePayload = resp.data[output.payload];\n if (payloadMember.type === 'structure') {\n util.each(responsePayload, function(key, value) {\n util.property(resp.data, key, value, false);\n });\n }\n }\n },\n\n /**\n * Compute SHA-256 checksums of streams\n *\n * @api private\n */\n computeSha256: function computeSha256(body, done) {\n if (util.isNode()) {\n var Stream = util.stream.Stream;\n var fs = require('fs');\n if (typeof Stream === 'function' && body instanceof Stream) {\n if (typeof body.path === 'string') { // assume file object\n var settings = {};\n if (typeof body.start === 'number') {\n settings.start = body.start;\n }\n if (typeof body.end === 'number') {\n settings.end = body.end;\n }\n body = fs.createReadStream(body.path, settings);\n } else { // TODO support other stream types\n return done(new Error('Non-file stream objects are ' +\n 'not supported with SigV4'));\n }\n }\n }\n\n util.crypto.sha256(body, 'hex', function(err, sha) {\n if (err) done(err);\n else done(null, sha);\n });\n },\n\n /**\n * @api private\n */\n isClockSkewed: function isClockSkewed(serverTime) {\n if (serverTime) {\n util.property(AWS.config, 'isClockSkewed',\n Math.abs(new Date().getTime() - serverTime) >= 300000, false);\n return AWS.config.isClockSkewed;\n }\n },\n\n applyClockOffset: function applyClockOffset(serverTime) {\n if (serverTime)\n AWS.config.systemClockOffset = serverTime - new Date().getTime();\n },\n\n /**\n * @api private\n */\n extractRequestId: function extractRequestId(resp) {\n var requestId = resp.httpResponse.headers['x-amz-request-id'] ||\n resp.httpResponse.headers['x-amzn-requestid'];\n\n if (!requestId && resp.data && resp.data.ResponseMetadata) {\n requestId = resp.data.ResponseMetadata.RequestId;\n }\n\n if (requestId) {\n resp.requestId = requestId;\n }\n\n if (resp.error) {\n resp.error.requestId = requestId;\n }\n },\n\n /**\n * @api private\n */\n addPromises: function addPromises(constructors, PromiseDependency) {\n var deletePromises = false;\n if (PromiseDependency === undefined && AWS && AWS.config) {\n PromiseDependency = AWS.config.getPromisesDependency();\n }\n if (PromiseDependency === undefined && typeof Promise !== 'undefined') {\n PromiseDependency = Promise;\n }\n if (typeof PromiseDependency !== 'function') deletePromises = true;\n if (!Array.isArray(constructors)) constructors = [constructors];\n\n for (var ind = 0; ind < constructors.length; ind++) {\n var constructor = constructors[ind];\n if (deletePromises) {\n if (constructor.deletePromisesFromClass) {\n constructor.deletePromisesFromClass();\n }\n } else if (constructor.addPromisesToClass) {\n constructor.addPromisesToClass(PromiseDependency);\n }\n }\n },\n\n /**\n * @api private\n * Return a function that will return a promise whose fate is decided by the\n * callback behavior of the given method with `methodName`. The method to be\n * promisified should conform to node.js convention of accepting a callback as\n * last argument and calling that callback with error as the first argument\n * and success value on the second argument.\n */\n promisifyMethod: function promisifyMethod(methodName, PromiseDependency) {\n return function promise() {\n var self = this;\n var args = Array.prototype.slice.call(arguments);\n return new PromiseDependency(function(resolve, reject) {\n args.push(function(err, data) {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n });\n self[methodName].apply(self, args);\n });\n };\n },\n\n /**\n * @api private\n */\n isDualstackAvailable: function isDualstackAvailable(service) {\n if (!service) return false;\n var metadata = require('../apis/metadata.json');\n if (typeof service !== 'string') service = service.serviceIdentifier;\n if (typeof service !== 'string' || !metadata.hasOwnProperty(service)) return false;\n return !!metadata[service].dualstackAvailable;\n },\n\n /**\n * @api private\n */\n calculateRetryDelay: function calculateRetryDelay(retryCount, retryDelayOptions, err) {\n if (!retryDelayOptions) retryDelayOptions = {};\n var customBackoff = retryDelayOptions.customBackoff || null;\n if (typeof customBackoff === 'function') {\n return customBackoff(retryCount, err);\n }\n var base = typeof retryDelayOptions.base === 'number' ? retryDelayOptions.base : 100;\n var delay = Math.random() * (Math.pow(2, retryCount) * base);\n return delay;\n },\n\n /**\n * @api private\n */\n handleRequestWithRetries: function handleRequestWithRetries(httpRequest, options, cb) {\n if (!options) options = {};\n var http = AWS.HttpClient.getInstance();\n var httpOptions = options.httpOptions || {};\n var retryCount = 0;\n\n var errCallback = function(err) {\n var maxRetries = options.maxRetries || 0;\n if (err && err.code === 'TimeoutError') err.retryable = true;\n\n // Call `calculateRetryDelay()` only when relevant, see #3401\n if (err && err.retryable && retryCount < maxRetries) {\n var delay = util.calculateRetryDelay(retryCount, options.retryDelayOptions, err);\n if (delay >= 0) {\n retryCount++;\n setTimeout(sendRequest, delay + (err.retryAfter || 0));\n return;\n }\n }\n cb(err);\n };\n\n var sendRequest = function() {\n var data = '';\n http.handleRequest(httpRequest, httpOptions, function(httpResponse) {\n httpResponse.on('data', function(chunk) { data += chunk.toString(); });\n httpResponse.on('end', function() {\n var statusCode = httpResponse.statusCode;\n if (statusCode < 300) {\n cb(null, data);\n } else {\n var retryAfter = parseInt(httpResponse.headers['retry-after'], 10) * 1000 || 0;\n var err = util.error(new Error(),\n {\n statusCode: statusCode,\n retryable: statusCode >= 500 || statusCode === 429\n }\n );\n if (retryAfter && err.retryable) err.retryAfter = retryAfter;\n errCallback(err);\n }\n });\n }, errCallback);\n };\n\n AWS.util.defer(sendRequest);\n },\n\n /**\n * @api private\n */\n uuid: {\n v4: function uuidV4() {\n return require('uuid').v4();\n }\n },\n\n /**\n * @api private\n */\n convertPayloadToString: function convertPayloadToString(resp) {\n var req = resp.request;\n var operation = req.operation;\n var rules = req.service.api.operations[operation].output || {};\n if (rules.payload && resp.data[rules.payload]) {\n resp.data[rules.payload] = resp.data[rules.payload].toString();\n }\n },\n\n /**\n * @api private\n */\n defer: function defer(callback) {\n if (typeof process === 'object' && typeof process.nextTick === 'function') {\n process.nextTick(callback);\n } else if (typeof setImmediate === 'function') {\n setImmediate(callback);\n } else {\n setTimeout(callback, 0);\n }\n },\n\n /**\n * @api private\n */\n getRequestPayloadShape: function getRequestPayloadShape(req) {\n var operations = req.service.api.operations;\n if (!operations) return undefined;\n var operation = (operations || {})[req.operation];\n if (!operation || !operation.input || !operation.input.payload) return undefined;\n return operation.input.members[operation.input.payload];\n },\n\n getProfilesFromSharedConfig: function getProfilesFromSharedConfig(iniLoader, filename) {\n var profiles = {};\n var profilesFromConfig = {};\n if (process.env[util.configOptInEnv]) {\n var profilesFromConfig = iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[util.sharedConfigFileEnv]\n });\n }\n var profilesFromCreds= {};\n try {\n var profilesFromCreds = iniLoader.loadFrom({\n filename: filename ||\n (process.env[util.configOptInEnv] && process.env[util.sharedCredentialsFileEnv])\n });\n } catch (error) {\n // if using config, assume it is fully descriptive without a credentials file:\n if (!process.env[util.configOptInEnv]) throw error;\n }\n for (var i = 0, profileNames = Object.keys(profilesFromConfig); i < profileNames.length; i++) {\n profiles[profileNames[i]] = objectAssign(profiles[profileNames[i]] || {}, profilesFromConfig[profileNames[i]]);\n }\n for (var i = 0, profileNames = Object.keys(profilesFromCreds); i < profileNames.length; i++) {\n profiles[profileNames[i]] = objectAssign(profiles[profileNames[i]] || {}, profilesFromCreds[profileNames[i]]);\n }\n return profiles;\n\n /**\n * Roughly the semantics of `Object.assign(target, source)`\n */\n function objectAssign(target, source) {\n for (var i = 0, keys = Object.keys(source); i < keys.length; i++) {\n target[keys[i]] = source[keys[i]];\n }\n return target;\n }\n },\n\n /**\n * @api private\n */\n ARN: {\n validate: function validateARN(str) {\n return str && str.indexOf('arn:') === 0 && str.split(':').length >= 6;\n },\n parse: function parseARN(arn) {\n var matched = arn.split(':');\n return {\n partition: matched[1],\n service: matched[2],\n region: matched[3],\n accountId: matched[4],\n resource: matched.slice(5).join(':')\n };\n },\n build: function buildARN(arnObject) {\n if (\n arnObject.service === undefined ||\n arnObject.region === undefined ||\n arnObject.accountId === undefined ||\n arnObject.resource === undefined\n ) throw util.error(new Error('Input ARN object is invalid'));\n return 'arn:'+ (arnObject.partition || 'aws') + ':' + arnObject.service +\n ':' + arnObject.region + ':' + arnObject.accountId + ':' + arnObject.resource;\n }\n },\n\n /**\n * @api private\n */\n defaultProfile: 'default',\n\n /**\n * @api private\n */\n configOptInEnv: 'AWS_SDK_LOAD_CONFIG',\n\n /**\n * @api private\n */\n sharedCredentialsFileEnv: 'AWS_SHARED_CREDENTIALS_FILE',\n\n /**\n * @api private\n */\n sharedConfigFileEnv: 'AWS_CONFIG_FILE',\n\n /**\n * @api private\n */\n imdsDisabledEnv: 'AWS_EC2_METADATA_DISABLED'\n};\n\n/**\n * @api private\n */\nmodule.exports = util;\n","var util = require('../util');\nvar Shape = require('../model/shape');\n\nfunction DomXmlParser() { }\n\nDomXmlParser.prototype.parse = function(xml, shape) {\n if (xml.replace(/^\\s+/, '') === '') return {};\n\n var result, error;\n try {\n if (window.DOMParser) {\n try {\n var parser = new DOMParser();\n result = parser.parseFromString(xml, 'text/xml');\n } catch (syntaxError) {\n throw util.error(new Error('Parse error in document'),\n {\n originalError: syntaxError,\n code: 'XMLParserError',\n retryable: true\n });\n }\n\n if (result.documentElement === null) {\n throw util.error(new Error('Cannot parse empty document.'),\n {\n code: 'XMLParserError',\n retryable: true\n });\n }\n\n var isError = result.getElementsByTagName('parsererror')[0];\n if (isError && (isError.parentNode === result ||\n isError.parentNode.nodeName === 'body' ||\n isError.parentNode.parentNode === result ||\n isError.parentNode.parentNode.nodeName === 'body')) {\n var errorElement = isError.getElementsByTagName('div')[0] || isError;\n throw util.error(new Error(errorElement.textContent || 'Parser error in document'),\n {\n code: 'XMLParserError',\n retryable: true\n });\n }\n } else if (window.ActiveXObject) {\n result = new window.ActiveXObject('Microsoft.XMLDOM');\n result.async = false;\n\n if (!result.loadXML(xml)) {\n throw util.error(new Error('Parse error in document'),\n {\n code: 'XMLParserError',\n retryable: true\n });\n }\n } else {\n throw new Error('Cannot load XML parser');\n }\n } catch (e) {\n error = e;\n }\n\n if (result && result.documentElement && !error) {\n var data = parseXml(result.documentElement, shape);\n var metadata = getElementByTagName(result.documentElement, 'ResponseMetadata');\n if (metadata) {\n data.ResponseMetadata = parseXml(metadata, {});\n }\n return data;\n } else if (error) {\n throw util.error(error || new Error(), {code: 'XMLParserError', retryable: true});\n } else { // empty xml document\n return {};\n }\n};\n\nfunction getElementByTagName(xml, tag) {\n var elements = xml.getElementsByTagName(tag);\n for (var i = 0, iLen = elements.length; i < iLen; i++) {\n if (elements[i].parentNode === xml) {\n return elements[i];\n }\n }\n}\n\nfunction parseXml(xml, shape) {\n if (!shape) shape = {};\n switch (shape.type) {\n case 'structure': return parseStructure(xml, shape);\n case 'map': return parseMap(xml, shape);\n case 'list': return parseList(xml, shape);\n case undefined: case null: return parseUnknown(xml);\n default: return parseScalar(xml, shape);\n }\n}\n\nfunction parseStructure(xml, shape) {\n var data = {};\n if (xml === null) return data;\n\n util.each(shape.members, function(memberName, memberShape) {\n if (memberShape.isXmlAttribute) {\n if (Object.prototype.hasOwnProperty.call(xml.attributes, memberShape.name)) {\n var value = xml.attributes[memberShape.name].value;\n data[memberName] = parseXml({textContent: value}, memberShape);\n }\n } else {\n var xmlChild = memberShape.flattened ? xml :\n getElementByTagName(xml, memberShape.name);\n if (xmlChild) {\n data[memberName] = parseXml(xmlChild, memberShape);\n } else if (\n !memberShape.flattened &&\n memberShape.type === 'list' &&\n !shape.api.xmlNoDefaultLists) {\n data[memberName] = memberShape.defaultValue;\n }\n }\n });\n\n return data;\n}\n\nfunction parseMap(xml, shape) {\n var data = {};\n var xmlKey = shape.key.name || 'key';\n var xmlValue = shape.value.name || 'value';\n var tagName = shape.flattened ? shape.name : 'entry';\n\n var child = xml.firstElementChild;\n while (child) {\n if (child.nodeName === tagName) {\n var key = getElementByTagName(child, xmlKey).textContent;\n var value = getElementByTagName(child, xmlValue);\n data[key] = parseXml(value, shape.value);\n }\n child = child.nextElementSibling;\n }\n return data;\n}\n\nfunction parseList(xml, shape) {\n var data = [];\n var tagName = shape.flattened ? shape.name : (shape.member.name || 'member');\n\n var child = xml.firstElementChild;\n while (child) {\n if (child.nodeName === tagName) {\n data.push(parseXml(child, shape.member));\n }\n child = child.nextElementSibling;\n }\n return data;\n}\n\nfunction parseScalar(xml, shape) {\n if (xml.getAttribute) {\n var encoding = xml.getAttribute('encoding');\n if (encoding === 'base64') {\n shape = new Shape.create({type: encoding});\n }\n }\n\n var text = xml.textContent;\n if (text === '') text = null;\n if (typeof shape.toType === 'function') {\n return shape.toType(text);\n } else {\n return text;\n }\n}\n\nfunction parseUnknown(xml) {\n if (xml === undefined || xml === null) return '';\n\n // empty object\n if (!xml.firstElementChild) {\n if (xml.parentNode.parentNode === null) return {};\n if (xml.childNodes.length === 0) return '';\n else return xml.textContent;\n }\n\n // object, parse as structure\n var shape = {type: 'structure', members: {}};\n var child = xml.firstElementChild;\n while (child) {\n var tag = child.nodeName;\n if (Object.prototype.hasOwnProperty.call(shape.members, tag)) {\n // multiple tags of the same name makes it a list\n shape.members[tag].type = 'list';\n } else {\n shape.members[tag] = {name: tag};\n }\n child = child.nextElementSibling;\n }\n return parseStructure(xml, shape);\n}\n\n/**\n * @api private\n */\nmodule.exports = DomXmlParser;\n","var util = require('../util');\nvar XmlNode = require('./xml-node').XmlNode;\nvar XmlText = require('./xml-text').XmlText;\n\nfunction XmlBuilder() { }\n\nXmlBuilder.prototype.toXML = function(params, shape, rootElement, noEmpty) {\n var xml = new XmlNode(rootElement);\n applyNamespaces(xml, shape, true);\n serialize(xml, params, shape);\n return xml.children.length > 0 || noEmpty ? xml.toString() : '';\n};\n\nfunction serialize(xml, value, shape) {\n switch (shape.type) {\n case 'structure': return serializeStructure(xml, value, shape);\n case 'map': return serializeMap(xml, value, shape);\n case 'list': return serializeList(xml, value, shape);\n default: return serializeScalar(xml, value, shape);\n }\n}\n\nfunction serializeStructure(xml, params, shape) {\n util.arrayEach(shape.memberNames, function(memberName) {\n var memberShape = shape.members[memberName];\n if (memberShape.location !== 'body') return;\n\n var value = params[memberName];\n var name = memberShape.name;\n if (value !== undefined && value !== null) {\n if (memberShape.isXmlAttribute) {\n xml.addAttribute(name, value);\n } else if (memberShape.flattened) {\n serialize(xml, value, memberShape);\n } else {\n var element = new XmlNode(name);\n xml.addChildNode(element);\n applyNamespaces(element, memberShape);\n serialize(element, value, memberShape);\n }\n }\n });\n}\n\nfunction serializeMap(xml, map, shape) {\n var xmlKey = shape.key.name || 'key';\n var xmlValue = shape.value.name || 'value';\n\n util.each(map, function(key, value) {\n var entry = new XmlNode(shape.flattened ? shape.name : 'entry');\n xml.addChildNode(entry);\n\n var entryKey = new XmlNode(xmlKey);\n var entryValue = new XmlNode(xmlValue);\n entry.addChildNode(entryKey);\n entry.addChildNode(entryValue);\n\n serialize(entryKey, key, shape.key);\n serialize(entryValue, value, shape.value);\n });\n}\n\nfunction serializeList(xml, list, shape) {\n if (shape.flattened) {\n util.arrayEach(list, function(value) {\n var name = shape.member.name || shape.name;\n var element = new XmlNode(name);\n xml.addChildNode(element);\n serialize(element, value, shape.member);\n });\n } else {\n util.arrayEach(list, function(value) {\n var name = shape.member.name || 'member';\n var element = new XmlNode(name);\n xml.addChildNode(element);\n serialize(element, value, shape.member);\n });\n }\n}\n\nfunction serializeScalar(xml, value, shape) {\n xml.addChildNode(\n new XmlText(shape.toWireFormat(value))\n );\n}\n\nfunction applyNamespaces(xml, shape, isRoot) {\n var uri, prefix = 'xmlns';\n if (shape.xmlNamespaceUri) {\n uri = shape.xmlNamespaceUri;\n if (shape.xmlNamespacePrefix) prefix += ':' + shape.xmlNamespacePrefix;\n } else if (isRoot && shape.api.xmlNamespaceUri) {\n uri = shape.api.xmlNamespaceUri;\n }\n\n if (uri) xml.addAttribute(prefix, uri);\n}\n\n/**\n * @api private\n */\nmodule.exports = XmlBuilder;\n","/**\n * Escapes characters that can not be in an XML attribute.\n */\nfunction escapeAttribute(value) {\n return value.replace(/&/g, '&').replace(/'/g, ''').replace(//g, '>').replace(/\"/g, '"');\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n escapeAttribute: escapeAttribute\n};\n","/**\n * Escapes characters that can not be in an XML element.\n */\nfunction escapeElement(value) {\n return value.replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\\r/g, ' ')\n .replace(/\\n/g, ' ')\n .replace(/\\u0085/g, '…')\n .replace(/\\u2028/, '
');\n}\n\n/**\n * @api private\n */\nmodule.exports = {\n escapeElement: escapeElement\n};\n","var escapeAttribute = require('./escape-attribute').escapeAttribute;\n\n/**\n * Represents an XML node.\n * @api private\n */\nfunction XmlNode(name, children) {\n if (children === void 0) { children = []; }\n this.name = name;\n this.children = children;\n this.attributes = {};\n}\nXmlNode.prototype.addAttribute = function (name, value) {\n this.attributes[name] = value;\n return this;\n};\nXmlNode.prototype.addChildNode = function (child) {\n this.children.push(child);\n return this;\n};\nXmlNode.prototype.removeAttribute = function (name) {\n delete this.attributes[name];\n return this;\n};\nXmlNode.prototype.toString = function () {\n var hasChildren = Boolean(this.children.length);\n var xmlText = '<' + this.name;\n // add attributes\n var attributes = this.attributes;\n for (var i = 0, attributeNames = Object.keys(attributes); i < attributeNames.length; i++) {\n var attributeName = attributeNames[i];\n var attribute = attributes[attributeName];\n if (typeof attribute !== 'undefined' && attribute !== null) {\n xmlText += ' ' + attributeName + '=\\\"' + escapeAttribute('' + attribute) + '\\\"';\n }\n }\n return xmlText += !hasChildren ? '/>' : '>' + this.children.map(function (c) { return c.toString(); }).join('') + '';\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n XmlNode: XmlNode\n};\n","var escapeElement = require('./escape-element').escapeElement;\n\n/**\n * Represents an XML text value.\n * @api private\n */\nfunction XmlText(value) {\n this.value = value;\n}\n\nXmlText.prototype.toString = function () {\n return escapeElement('' + this.value);\n};\n\n/**\n * @api private\n */\nmodule.exports = {\n XmlText: XmlText\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LRU_1 = require(\"./utils/LRU\");\nvar CACHE_SIZE = 1000;\n/**\n * Inspired node-lru-cache[https://github.com/isaacs/node-lru-cache]\n */\nvar EndpointCache = /** @class */ (function () {\n function EndpointCache(maxSize) {\n if (maxSize === void 0) { maxSize = CACHE_SIZE; }\n this.maxSize = maxSize;\n this.cache = new LRU_1.LRUCache(maxSize);\n }\n ;\n Object.defineProperty(EndpointCache.prototype, \"size\", {\n get: function () {\n return this.cache.length;\n },\n enumerable: true,\n configurable: true\n });\n EndpointCache.prototype.put = function (key, value) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n var endpointRecord = this.populateValue(value);\n this.cache.put(keyString, endpointRecord);\n };\n EndpointCache.prototype.get = function (key) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n var now = Date.now();\n var records = this.cache.get(keyString);\n if (records) {\n for (var i = records.length-1; i >= 0; i--) {\n var record = records[i];\n if (record.Expire < now) {\n records.splice(i, 1);\n }\n }\n if (records.length === 0) {\n this.cache.remove(keyString);\n return undefined;\n }\n }\n return records;\n };\n EndpointCache.getKeyString = function (key) {\n var identifiers = [];\n var identifierNames = Object.keys(key).sort();\n for (var i = 0; i < identifierNames.length; i++) {\n var identifierName = identifierNames[i];\n if (key[identifierName] === undefined)\n continue;\n identifiers.push(key[identifierName]);\n }\n return identifiers.join(' ');\n };\n EndpointCache.prototype.populateValue = function (endpoints) {\n var now = Date.now();\n return endpoints.map(function (endpoint) { return ({\n Address: endpoint.Address || '',\n Expire: now + (endpoint.CachePeriodInMinutes || 1) * 60 * 1000\n }); });\n };\n EndpointCache.prototype.empty = function () {\n this.cache.empty();\n };\n EndpointCache.prototype.remove = function (key) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n this.cache.remove(keyString);\n };\n return EndpointCache;\n}());\nexports.EndpointCache = EndpointCache;","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nvar LinkedListNode = /** @class */ (function () {\n function LinkedListNode(key, value) {\n this.key = key;\n this.value = value;\n }\n return LinkedListNode;\n}());\nvar LRUCache = /** @class */ (function () {\n function LRUCache(size) {\n this.nodeMap = {};\n this.size = 0;\n if (typeof size !== 'number' || size < 1) {\n throw new Error('Cache size can only be positive number');\n }\n this.sizeLimit = size;\n }\n Object.defineProperty(LRUCache.prototype, \"length\", {\n get: function () {\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n LRUCache.prototype.prependToList = function (node) {\n if (!this.headerNode) {\n this.tailNode = node;\n }\n else {\n this.headerNode.prev = node;\n node.next = this.headerNode;\n }\n this.headerNode = node;\n this.size++;\n };\n LRUCache.prototype.removeFromTail = function () {\n if (!this.tailNode) {\n return undefined;\n }\n var node = this.tailNode;\n var prevNode = node.prev;\n if (prevNode) {\n prevNode.next = undefined;\n }\n node.prev = undefined;\n this.tailNode = prevNode;\n this.size--;\n return node;\n };\n LRUCache.prototype.detachFromList = function (node) {\n if (this.headerNode === node) {\n this.headerNode = node.next;\n }\n if (this.tailNode === node) {\n this.tailNode = node.prev;\n }\n if (node.prev) {\n node.prev.next = node.next;\n }\n if (node.next) {\n node.next.prev = node.prev;\n }\n node.next = undefined;\n node.prev = undefined;\n this.size--;\n };\n LRUCache.prototype.get = function (key) {\n if (this.nodeMap[key]) {\n var node = this.nodeMap[key];\n this.detachFromList(node);\n this.prependToList(node);\n return node.value;\n }\n };\n LRUCache.prototype.remove = function (key) {\n if (this.nodeMap[key]) {\n var node = this.nodeMap[key];\n this.detachFromList(node);\n delete this.nodeMap[key];\n }\n };\n LRUCache.prototype.put = function (key, value) {\n if (this.nodeMap[key]) {\n this.remove(key);\n }\n else if (this.size === this.sizeLimit) {\n var tailNode = this.removeFromTail();\n var key_1 = tailNode.key;\n delete this.nodeMap[key_1];\n }\n var newNode = new LinkedListNode(key, value);\n this.nodeMap[key] = newNode;\n this.prependToList(newNode);\n };\n LRUCache.prototype.empty = function () {\n var keys = Object.keys(this.nodeMap);\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var node = this.nodeMap[key];\n this.detachFromList(node);\n delete this.nodeMap[key];\n }\n };\n return LRUCache;\n}());\nexports.LRUCache = LRUCache;"],"names":["AWS","window","module","exports","self","Service","apiLoader","services","CognitoIdentity","defineService","Object","defineProperty","get","model","paginators","enumerable","configurable","S3","waiters","STS","svc","version","hasOwnProperty","Error","Hmac","Md5","Sha1","Sha256","createHash","alg","toLowerCase","createHmac","key","createSign","Buffer","ArrayBuffer","isView","arg","viewStrings","indexOf","prototype","toString","call","isEmptyData","data","length","byteLength","convertToBuffer","Uint8Array","buffer","byteOffset","BYTES_PER_ELEMENT","hashUtils","hashCtor","secret","this","hash","outer","inner","bufferFromSecret","BLOCK_SIZE","set","i","update","input","bufferHash","digest","toHash","error","e","encoding","finished","DIGEST_LENGTH","state","DataView","bufferLength","bytesHashed","cmn","q","a","b","x","s","t","ff","c","d","gg","hh","ii","sourceData","position","setUint8","hashBuffer","_a","undecoratedLength","bitsHashed","setUint32","Math","floor","out","buff","getUint32","Uint32Array","pow","h0","h1","h2","h3","h4","block","offset","shift","totalLength","write","byte","processBlock","outView","w","f","k","temp","KEY","MAX_HASHABLE_LENGTH","Int32Array","bufferView","state0","state1","state2","state3","state4","state5","state6","state7","u","t1_1","t2_1","t1","t2","util","crypto","lib","url","querystring","realClock","environment","createEventStream","isBrowser","isNode","XML","Parser","process","browser","PromisesDependency","Config","inherit","constructor","options","undefined","extractCredentials","each","keys","value","getCredentials","callback","finish","err","credentials","credError","msg","code","message","name","getAsyncCredentials","getStaticCredentials","accessKeyId","secretAccessKey","credentialProvider","resolve","creds","getToken","token","tokenError","getAsyncToken","getStaticToken","tokenProvider","allowUnknownKeys","hasService","loadFromPath","path","clear","JSON","parse","readFileSync","fileSystemCreds","FileSystemCredentials","chain","CredentialProviderChain","providers","unshift","property","defaultValue","merge","region","logger","apiVersions","apiVersion","endpoint","httpOptions","timeout","maxRetries","maxRedirects","paramValidation","sslEnabled","s3ForcePathStyle","s3BucketEndpoint","s3DisableBodySigning","s3UsEast1RegionalEndpoint","s3UseArnRegion","computeChecksums","convertResponseTypes","correctClockSkew","customUserAgent","dynamoDbCrc32","systemClockOffset","signatureVersion","signatureCache","retryDelayOptions","useAccelerateEndpoint","clientSideMonitoring","endpointDiscoveryEnabled","endpointCacheSize","hostPrefixEnabled","stsRegionalEndpoints","useFipsEndpoint","useDualstackEndpoint","copy","Credentials","setPromisesDependency","dep","Promise","constructors","Request","push","ManagedUpload","addPromises","getPromisesDependency","config","validateRegionalEndpointsFlagValue","configValue","errorOptions","resolveRegionalEndpointsFlag","originalConfig","resolved","clientConfig","env","envFlag","profile","profiles","getProfilesFromSharedConfig","iniLoader","AWS_PROFILE","defaultProfile","sharedConfig","fileFlag","_hidden","VERSION","Signers","Protocol","Json","Query","Rest","RestJson","RestXml","Builder","Model","Api","Operation","Shape","Paginator","ResourceWaiter","EndpointCache","events","SequentialExecutor","memoizedProperty","hideProperties","expired","expireTime","refreshCallbacks","arguments","sessionToken","expiryWindow","needsRefresh","currentTime","date","getDate","getTime","adjustedTime","Date","refresh","coalesceRefresh","sync","load","arrayEach","defer","addPromisesToClass","PromiseDependency","getPromise","promisifyMethod","refreshPromise","deletePromisesFromClass","ChainableTemporaryCredentials","errorCode","tokenCodeFn","params","RoleArn","RoleSessionName","SerialNumber","masterCredentials","stsConfig","service","fn","operation","getTokenCode","tokenCode","TokenCode","credentialsFrom","CognitoIdentityCredentials","localStorageKey","id","_identityId","_clientConfig","loadCachedId","IdentityId","identityId","createClients","getId","clearIdOnNotAuthorized","getCredentialsFromSTS","getCredentialsForIdentity","clearCachedId","poolId","IdentityPoolId","loginId","LoginId","storage","cognito","loadCredentials","AccessKeyId","SecretKey","SessionToken","Expiration","cacheId","getOpenIdToken","WebIdentityToken","Token","webIdentityCredentials","webErr","sts","getStorage","Logins","actualProviders","cachedProviders","split","intersect","filter","n","WebIdentityCredentials","cognitoConfig","setStorage","join","val","_","localStorage","defaultProviders","slice","resolveCallbacks","index","resolveNext","provider","getErr","resolvePromise","SAMLCredentials","assumeRoleWithSAML","TemporaryCredentials","loadMasterCredentials","assumeRole","getSessionToken","assumeRoleWithWebIdentity","endpointDiscoveryEnabledEnvs","getCacheKey","request","api","identifiers","operations","serviceId","marshallCustomIdentifiersHelper","result","shape","type","required","memberShape","members","endpointDiscoveryId","locationName","isLocationName","String","marshallCustomIdentifiers","optionalDiscoverEndpoint","operationModel","inputShape","cacheKey","endpoints","endpointCache","Address","httpRequest","updateEndpoint","endpointRequest","makeRequest","endpointOperation","Identifiers","addApiVersionHeader","removeListener","EventListeners","Core","VALIDATE_PARAMETERS","RETRY_CHECK","put","CachePeriodInMinutes","send","Endpoints","requestQueue","requiredDiscoverEndpoint","done","cacheKeyStr","getKeyString","response","retryable","remove","pendingRequests","requestContext","headers","invalidateCachedEndpoints","httpResponse","statusCode","hasCustomEndpoint","client","_originalConfig","svcConfig","serviceIdentifier","Boolean","isFalsy","resolveEndpointDiscoveryConfig","configFile","loadFrom","isConfig","filename","sharedConfigFileEnv","sharedFileConfig","endpoint_discovery_enabled","discoverEndpoint","isPresigned","isEndpointDiscoveryRequired","endpointDiscoveryRequired","isEnabled","hasRequiredEndpointDiscovery","appendToUserAgent","addNamedListener","className","invalidateCachedEndpoint","eventMessageChunker","parseEvent","body","parser","eventMessages","messages","readInt32BE","toBuffer","Int64","bytes","isBuffer","negate","fromNumber","number","remaining","abs","round","valueOf","negative","parseInt","parseMessage","parsedMessage","messageType","parseError","eventType","eventModel","eventPayloadMemberName","payloadShape","eventHeaderNames","eventHeaderMemberNames","toType","output","errorMessage","splitMessage","BOOLEAN_TAG","BYTE_TAG","SHORT_TAG","INT_TAG","LONG_TAG","BINARY_TAG","STRING_TAG","TIMESTAMP_TAG","UUID_TAG","parseHeaders","nameLength","readUInt8","readInt8","readInt16BE","binaryLength","readUInt16BE","stringLength","uuidChars","substr","parsed","PRELUDE_MEMBER_LENGTH","PRELUDE_LENGTH","CHECKSUM_LENGTH","MINIMUM_MESSAGE_LENGTH","readUInt32BE","expectedPreludeChecksum","crc32","expectedMessageChecksum","headersStart","headersEnd","DISCOVER_ENDPOINT","getOperationAuthtype","req","authtype","getIdentityType","addNamedListeners","add","addAsync","identityType","isGlobalEndpoint","dnsHostRegex","RegExp","test","idempotentMembers","iLen","uuid","v4","rules","validation","ParamValidator","validate","isNonStreamingPayload","httpChecksumRequired","md5","haltHandlersOnError","getSignerClass","V4","computeSha256","sha","payloadMember","getRequestPayloadShape","string","isStreaming","requiresLength","host","traceIdHeaderName","ENV_LAMBDA_FUNCTION_NAME","ENV_TRACE_ID","functionName","traceId","HttpRequest","retryCount","addToHead","SignerClass","signer","addAuthorization","getSkewCorrectedDate","getSigningName","setServiceClientId","_clientId","signedAt","resp","successfulResponse","awsQueryCompatible","queryErrorCode","includes","httpResp","stream","operationName","on","statusMessage","emit","streaming","HttpClient","streamsApiVersion","hasEventOutput","read","didCallback","progress","errCode","hostname","executeSend","http","getInstance","handleRequest","_abortCallback","timeDiff","buffers","numBytes","dateHeader","serverTime","isClockSkewed","applyClockOffset","chunk","total","loaded","concat","retryableError","match","clockSkewError","Endpoint","redirect","redirectCount","retryDelay","retryDelays","delay","willRetry","setTimeout","CorePost","extractRequestId","isDNSError","errno","getSystemErrorName","port","originalError","Logger","line","buildMessage","log","filterSensitiveLog","isSensitive","struct","subShapeName","subShape","list","member","map","time","delta","startTime","ansi","isTTY","status","censoredParams","lowerFirst","buildRequest","extractData","extractError","unsetContentLength","useSSL","urlParse","protocol","method","_userAgent","setUserAgent","getUserAgentHeaderName","userAgent","prefix","agentPartial","getUserAgent","pathname","search","query","queryStringParse","queryParamsToString","endpointStr","newEndpoint","HttpResponse","createUnbufferedStream","singleton","EventEmitter","XHRClient","errCallback","emitter","href","xhr","XMLHttpRequest","headersEmitted","addEventListener","readyState","HEADERS_RECEIVED","getAllResponseHeaders","statusText","DONE","finishRequest","upload","evt","open","xhrAsync","setRequestHeader","xhrWithCredentials","withCredentials","responseType","rawHeaders","substring","ab","view","responseText","JsonBuilder","translate","translateStructure","translateMap","translateList","translateScalar","structure","isDocument","location","toWireFormat","build","stringify","JsonParser","shapeMembers","Collection","metadata","addEndpointOperation","endpointoperation","endpointdiscovery","endpointPrefix","signingName","globalEndpoint","jsonVersion","targetPrefix","timestampFormat","xmlNamespace","serviceAbbreviation","serviceFullName","xmlNoDefaultLists","replace","shapes","create","paginator","waiter","documentation","documentationUrl","memoize","factory","nameTr","iterable","requestUri","httpChecksum","requestChecksumRequired","errors","isIdempotent","hasEventStream","topLevelShape","payload","isEventStream","input_token","limit_key","more_results","output_token","result_key","forEach","obj","apply","memberName","enum","min","max","pattern","xmlName","queryName","isComposite","idempotencyToken","jsonvalue","sensitive","eventstream","event","eventpayload","eventheader","isTimestampFormatSet","endpointdiscoveryid","hostLabel","xmlAttribute","CompositeShape","flattened","StructureShape","requiredMap","firstInit","isShape","document","xmlOrder","memberNames","isEventPayload","isEventHeader","resultWrapper","uri","ListShape","oldName","MapShape","TimestampShape","toUTCString","parseTimestamp","format","StringShape","nullLessProtocols","isJsonValue","FloatShape","parseFloat","IntegerShape","BinaryShape","buf","base64","decode","alloc","secureBuf","fill","encode","Base64Shape","BooleanShape","normalizedTypes","character","double","long","short","biginteger","bigdecimal","blob","types","refShape","filteredKeys","InlineShape","origType","context","validateMember","fail","validateStructure","paramName","validateType","paramValue","memberContext","param","validateList","validateMap","validateScalar","Array","validateRange","mapCount","validateString","validatePayload","validateNumber","validTypes","validateEnum","validatePattern","validateUri","descriptor","acceptedTypes","foundInvalidType","isType","typeName","acceptedType","vowel","castedValue","Stream","Blob","populateHostPrefix","enabled","hasEndpointDiscover","hostPrefix","hostPrefixNotation","expandHostPrefix","prependEndpointPrefix","validateHostname","isEndpointOperation","regex","labels","hostPattern","label","target","builder","__type","Code","pop","Message","QueryParamSerializer","Version","Action","serialize","requestId","Errors","origRules","tmp","_XAMZRequestId","requestIdShape","populateMethod","httpMethod","generateURI","endpointPath","operationPath","queryString","queryStringSet","plus","uriEscapePath","uriEscape","isArray","parts","sort","populateURI","httpPath","populateHeaders","memberValue","r","v","header","METHODS_WITHOUT_BODY","populateBody","applyContentTypeHeader","isBinary","rootElement","toXML","upperFirst","ucfirst","isQueryName","toUpperCase","serializeStructure","serializeMember","serializeMap","keyName","valueName","serializeList","memberRules","suffix","now","performance","isFipsRegion","startsWith","endsWith","isGlobalRegion","getRealRegion","regionConfig","generateRegionPrefix","derivedKeys","regionPrefix","item","applyConfig","configureEndpoint","dualstackFipsRules","fipsRules","dualstackRules","patterns","signingRegion","useBearer","assign","getEndpointSuffix","regionRegexes","defaultSuffix","regexes","regionPattern","dnsSuffix","AcceptorStateMachine","domain","jmespath","hardErrorStates","success","complete","isTerminalState","machine","_asm","currentState","fsm","setupStates","transition","_haltHandlersOnError","Domain","domainEmitter","domainThrown","addState","active","Response","states","emitEvent","runTo","abort","removeAllListeners","eachPage","wrappedCallback","hasNextPage","nextPage","noop","makeAsync","eachItem","paginationConfig","resultKey","items","continueIteration","isPageable","createReadStream","streams","PassThrough","nextTick","readable","sent","HTTP_DATA","HTTP_ERROR","expectedLen","shouldCheckContentLength","isNaN","receivedLen","checkContentLengthAndEmit","end","httpStream","lengthAccumulator","_write","unpipe","pipe","eventName","args","eventParameters","origEmit","presign","expires","Presign","sign","toGet","toUnauthenticated","_unAuthenticated","VALIDATE_CREDENTIALS","SIGN","buildAsGet","addListener","promise","reject","mixin","CHECK_ACCEPTORS","_waiter","acceptors","acceptorMatched","acceptor","matcher","matchers","expected","argument","setSuccess","setError","loadWaiterConfig","strictDeepEqual","pathAll","results","numResults","ind","pathAny","listeners","wait","$waiter","maxAttempts","addListeners","numRetries","nextPageTokens","inputTokens","inputToken","cacheNextPageTokens","moreResults","exprs","outputToken","expr","sliceFn","completeInfo","fillQueue","configure","partSize","minPartSize","queueSize","leavePartsOnError","tags","bindServiceObject","validateBody","adjustTotalBytes","maxTotalParts","failed","runFill","fillBuffer","fillStream","partBuffers","cleanup","isDoneChunking","numParts","totalPartNumbers","doneParts","finishMultiPart","singlePart","Body","arraySliceFn","getSignatureVersion","__super__","totalBytes","newPartSize","ceil","partPos","totalChunkedBytes","totalUploadedBytes","activeParts","multipartReq","partBufferLength","bodyLen","nextChunk","endPos","pbuf","rest","isDoneSending","partNumber","Tagging","getTaggingHeader","putObject","_managedUpload","finishSinglePart","ContentMD5","ETag","UploadId","uploadPart","queueChunks","createMultipartUpload","kvPairStrings","Key","Value","partParams","ContentLength","PartNumber","partInfo","_lastUploadedBytes","resume","abortMultipartUpload","part","completeParams","MultipartUpload","Parts","completeMultipartUpload","Location","putObjectTagging","TagSet","httpReq","Bucket","info","_events","listener","toHead","onAsync","_isAsync","splice","eventArgs","doneCallback","count","callListeners","prevError","callNextListener","callbacks","addNamedAsyncListener","clientCount","region_utils","loadServiceClass","useDualstack","ServiceClass","initialize","validateService","endpointFromTemplate","setEndpoint","addDefaultMonitoringListeners","_clientSideMonitoring","publisher","eventHandler","serviceConfig","isEmpty","apiConfig","defineServiceApi","getLatestServiceClass","getLatestServiceVersion","iso8601","selectedVersion","defaultRetryCount","customizeRequests","customRequestHandler","addAllRequestListeners","attachMonitoringEmitter","makeUnauthenticatedRequest","waitFor","serviceInterface","setupRequestListeners","apiCallEvent","monitoringEvent","Type","Region","MaxRetriesExceeded","UserAgent","FinalHttpStatusCode","FinalAwsException","FinalAwsExceptionMessage","FinalSdkException","FinalSdkExceptionMessage","apiAttemptEvent","Fqdn","HttpStatusCode","AccessKey","XAmznRequestId","XAmzRequestId","XAmzId2","attemptFailEvent","AwsException","AwsExceptionMessage","SdkException","SdkExceptionMessage","attemptTimestamp","attemptStartRealTime","attemptLatency","callStartRealTime","callTimestamp","attemptCount","Timestamp","AttemptLatency","AttemptCount","latency","Latency","RequestSigner","getVersion","calculateRetryDelay","timeoutError","networkingError","expiredCredentialsError","throttledError","newServerTime","throwException","defineMethods","versions","features","_serviceMap","addVersions","identifier","Publisher","configProvider","publisherConfig","superclass","setApi","isApi","attachOn","baseClass","getPrototypeOf","v4Credentials","s3util","regionUtil","operationsWith200StatusCodeError","regionRedirectErrorCodes","OBJECT_LAMBDA_SERVICE","defaultApiVersion","userDefinedVersion","regionDefinedVersion","_super","_parsedArn","shouldDisableBodySigning","signerClass","prependListener","validateScheme","validateBucketName","optInUsEast1RegionalEndpoint","VALIDATE_REGION","addContentType","computeContentMd5","computeSseCustomerKeyMd5","addExpect100Continue","hoistPayloadMember","extractErrorFrom200Response","prepareSignedUrl","COMPUTE_SHA256","disableBodySigning","isArnInParam","ARN","validateS3AccessPointArn","validateArnResourceType","validateArnRegion","validateOutpostsAccessPointArn","validateOutpostsArn","validateArnAccount","validateArnService","populateUriFromAccessPointArn","validatePopulateUriFromArn","validateBucketEndpoint","correctBucketRegionFromCache","requestBucketRegion","reqRegionForNetworkingError","scheme","SSECustomerKey","CopySourceSSECustomerKey","allowFipsEndpoint","resource","bucket","slashIndex","isValidAccelerateOperation","invalidOperations","insertPoint","regionalEndpoint","pathStyleBucketName","virtualHostedBucket","removeVirtualHostedBucketFromPath","encodedS3Key","accessPointArn","isOutpostArn","isObjectLambdaArn","outpostsSuffix","outpostId","serviceName","fipsSuffix","dualStackSuffix","useArnRegion","accessPoint","accountId","accesspointName","encodedArn","len","contentType","replaceFn","charsetName","charset","willComputeChecksums","needsContentMD5","bucketName","dnsCompatibleBucketName","_requestRegionForBucket","bucketRegionCache","updateReqBucketRegion","s3Config","newConfig","Host","LocationConstraint","createBucketConfiguration","CreateBucketConfiguration","clearBucketRegionCache","extractRequestIds","cachedRegion","codes","reqOperation","reqParams","MaxKeys","regionReq","getRegionReq","listObjects","buckets","requestRegion","extendedRequestId","cfId","getSignedUrl","Expires","createPresignedPost","boundParams","finalizePost","urlFormat","fields","preparePostFields","Fields","Conditions","conditions","expiresInSeconds","signingDate","shortDate","scope","createScope","credential","field","condition","Policy","preparePostPolicy","hmac","getSigningKey","expiration","noPresignedContentLength","createBucket","copiedParams","writeGetObjectResponse","uploader","getSignedUrlPromise","inputMembers","parsedArn","exec","delimiter","accessPointPrefix","loadUseArnRegionConfig","regionFromArn","clientRegion","envName","configName","trim","ipAddress","dots","ENV_REGIONAL_ENDPOINT_ENABLED","CONFIG_REGIONAL_ENDPOINT_ENABLED","SecretAccessKey","optInRegionalEndpoint","Bearer","expiresHeader","signedUrlBuilder","unixTimestamp","signedUrlSigner","parsedUrl","queryParams","auth","signature","SET_CONTENT_LENGTH","serviceClientId","getServiceClientId","V2","V3","V3Https","subResources","responseHeaders","rfc822","stringToSign","canonicalizedAmzHeaders","canonicalizedResource","amzHeaders","resources","subresource","decodeURIComponent","res","SignatureVersion","SignatureMethod","AWSAccessKeyId","SecurityToken","Signature","datetime","authorization","signedHeaders","headersToSign","h","canonicalHeaders","sha256","algorithm","updateForPresigned","addHeaders","credString","credentialString","qs","isSignableHeader","lowerKey","sep","signingKey","hexEncodedHash","canonicalString","hexEncodedBodyHash","canonicalHeaderValues","values","unsignableHeaders","cachedSecret","cacheQueue","maxCacheEntries","v4Identifier","shouldCache","credsIdentifier","kDate","kRegion","kService","emptyCache","finalState","bindObject","inputError","accept","acceptState","failState","engine","navigator","platform","AWS_EXECUTION_ENV","agent","encodeURIComponent","escape","ch","charCodeAt","sortedKeys","ename","vals","from","size","toStream","pos","_read","object","ini","currentSection","isSection","indexOfEqualsSign","start","isAssignment","expectedArgs","toISOString","formatter","crc32Table","tbl","crc","FileReader","reader","onerror","onload","_continueReading","back","readAsArrayBuffer","toHex","iterFunction","ret","array","idx","obj1","obj2","dupe","prop","webkitSlice","mozSlice","str","stack","writable","klass","newObject","ctor","props","isValue","opts","cachedValue","responsePayload","fs","settings","ResponseMetadata","RequestId","deletePromises","methodName","isDualstackAvailable","dualstackAvailable","customBackoff","base","random","handleRequestWithRetries","cb","sendRequest","retryAfter","convertPayloadToString","setImmediate","profilesFromConfig","configOptInEnv","profilesFromCreds","sharedCredentialsFileEnv","profileNames","objectAssign","source","arn","matched","partition","arnObject","imdsDisabledEnv","DomXmlParser","getElementByTagName","xml","tag","elements","getElementsByTagName","parentNode","parseXml","parseStructure","parseMap","parseList","parseUnknown","parseScalar","isXmlAttribute","attributes","textContent","xmlChild","xmlKey","xmlValue","tagName","child","firstElementChild","nodeName","nextElementSibling","getAttribute","text","childNodes","DOMParser","parseFromString","syntaxError","documentElement","isError","errorElement","ActiveXObject","async","loadXML","XmlNode","XmlText","XmlBuilder","serializeScalar","addAttribute","element","addChildNode","applyNamespaces","entry","entryKey","entryValue","isRoot","xmlNamespaceUri","xmlNamespacePrefix","noEmpty","children","escapeAttribute","escapeElement","removeAttribute","hasChildren","xmlText","attributeNames","attributeName","attribute","LRU_1","CACHE_SIZE","maxSize","cache","LRUCache","keyString","endpointRecord","populateValue","records","record","Expire","identifierNames","identifierName","empty","LinkedListNode","nodeMap","sizeLimit","prependToList","node","headerNode","prev","next","tailNode","removeFromTail","prevNode","detachFromList","key_1","newNode"],"sourceRoot":""}