From 947b766ee63f3954d9cf6a3d741eb9efe875df50 Mon Sep 17 00:00:00 2001 From: Richard Zhang Date: Wed, 31 Jan 2018 17:44:00 -0800 Subject: [PATCH] minor fix --- packages/aws-amplify/dist/aws-amplify.js | 3 ++- packages/aws-amplify/dist/aws-amplify.js.gz | Bin 252565 -> 252575 bytes packages/aws-amplify/dist/aws-amplify.js.map | 2 +- .../aws-amplify/dist/aws-amplify.js.map.gz | Bin 316792 -> 316818 bytes packages/aws-amplify/dist/aws-amplify.min.js | 2 +- .../aws-amplify/dist/aws-amplify.min.js.gz | Bin 124539 -> 124546 bytes .../aws-amplify/dist/aws-amplify.min.js.map | 2 +- .../dist/aws-amplify.min.js.map.gz | Bin 686973 -> 687010 bytes packages/aws-amplify/lib/Auth/Auth.js | 3 ++- packages/aws-amplify/lib/Auth/Auth.js.map | 2 +- packages/aws-amplify/package.json | 4 ++-- packages/aws-amplify/src/Auth/Auth.ts | 3 ++- 12 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/aws-amplify/dist/aws-amplify.js b/packages/aws-amplify/dist/aws-amplify.js index 07152318ebb..0c9c3de846c 100644 --- a/packages/aws-amplify/dist/aws-amplify.js +++ b/packages/aws-amplify/dist/aws-amplify.js @@ -16666,7 +16666,8 @@ var AuthClass = /** @class */ (function () { resolve(credentials); } }); - }); + }) + .catch(function () { return resolve(null); }); }); }; return AuthClass; diff --git a/packages/aws-amplify/dist/aws-amplify.js.gz b/packages/aws-amplify/dist/aws-amplify.js.gz index 4aabbb507573578871375b67c1a8c3628db0b857..01fb114ec8f65429814509fb6b007a31c9028c8a 100644 GIT binary patch delta 84600 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 delta 84341 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
-ewo$P2C2JOz}0l{B7fS+gMk;<{ynz6F}CS1@P)XMu2=PDTxCD3!j}5p z`noZ%<%VwAoY#_0>b!f;ZMvqLwrtaaYi=BO@Rl211f`5z(^A&BYu(D5{f`q2;z0!= zOX2Ti7_BsEHIw$h)0$wZoqOlSR(?al99FoaY}CEo1RLBL&khp!=r{_;v46k$&o%j%hVe>;oVX28=Xb&=qR<)a5pbXo19KCAOAntFGsBhov)Skq%G%uUon^P zHZumNY}$uC^KivJOw7ZUeb}!?@2y-tj8h6(ycN_ITX&Aoq$=ZhYn zdHxj9>8Do_o+a-|r(A8b@_+9aYBwH%yYZ^=^5yQ{ZV>u{81A;$n!Am?H6I3fAtxN_MThcLz=4nC&2>DB_tASC{{J3N z`VRB`X5Ec&cFiYo{=3`8H=c$GfLH1Oxxb%R8Zz^`9@Im@?V<2bHq^lMD`CgQjiJ#7fP%1}nA!M)db`4O+HA3u&kt z$Zd%aB$RCG4hA#Lu-Z_q_$cBp36enpO;(5pnGeW6=WqU7pYvCm3!U>@&5gL(-`vp0 z<@LtOdaJc*&iS3yZhyVs>6+tqve{Yfbz*y5-&|emHdpO&d$ZqYH2S9hW^<*#(TrQ> zINxb>SCgLU-`l9K$Fco>qq(uN+OfXq&DKg|1J3XU{%XCu-s`Rye4CwQwYP5IZ`6B9 zr(u27H#@y}?{wPnY*7T4pB;fIYzx7pon+WBa%H=AAi zy|~%wCmYtT6mK-*wY8S%-)*)!8-Swuy}s66ZNzrG4FJB;Fm|fm+U90`t!eP-x9Z8t zs{LLAm?5rPc#X}t)onD){5Fym_(FZd(x(J>YZ*!@PDIQ?{*A6t)#aR z$1OYmoy~4HZW;bq+h`_heLG(O9@a-<=(D~Nudc0Fe%fetH`X^AmcP5*^?K9dw^{Eb zcqMP>*II=sPYnIw?Pk2v7yPo`Sl{S3|Cib4ifnU~9&>K&i8JKTutP%+4L?MJ5E(+G z@X6uFvVSNw1O@qlmE&uzN>RLvNb?nHwRm6)5gGp{2~EG3KRxh;Cx_20@W*VEA2#^I z==Zw^yV!seH#Q>rCbTGLl65y8V!8)XMQ!r?=HFIVaOILuy+_Q)MB2Oy#AIBkk;@R9 zf42ym9IJnkAR8y_B{aX=f!u^4!;6e{(thyHGk@W_?>~23`1Pkk@jdyF4=>O{T2Kn2 zbA*-je|30{ONxKb5S^K0c$hKwfl!@K3bdIIxg~>uzD$VDzp&*sbTPCMiU4{?aX%O4 zAg@DzR4t2&sE^_G;q+6%emWalQNLzEzm3`5Rtmb+-EI$`V|sN(_oG6LJZ5x4jm*2^ zkbfikS(kA~Zl{I}LULa(@S6*DYdYOFg1vH`R!pa$ zVD!wKW^2`=nMY3PskU>iCXJuT);Hy~w|^e}1|4xktCi?)dE8X9P19^;Rx^Jy%A?d+ z4dK+3I2n|hGf~?-k>bGyKafi@kG0m9^%Vo8c zzM(vVzv-2QV_owHA=@?@ZsW$R#?4iy@p`4=G)4b3_4ZF{{Z{aL;J@96Yv_6Q8-M5Y z33OhkKmW4-Bht~K#|3v2|8+IMNt218Bp6|=5w5dcJUlvX+gNcLH#TQAZn}^g^-9GK zp{|G8pz*uUn)X@4KJ&-p3bM8B0^zs1T_7-9+j${dR+1Qq+6aBl$mr&Ffn0BF7wiQ- zD83aSer}3SJ-CjWFWlb7N%MvKIe+7j`NGA|IA7}LEAn~EK5xnAtM>V-e7iBc} zaPQ~6{Z|J^`#+!VpS^u^{`1e<%U?Y+H9Bu5*PvG?%eT|vJ^3(vXw+IYOn-D4{rLve zLQFseW7xJIgcA&TzdU^c1B>>O3FfouV-`xP@6{P3)Z+==EyCk{V~kPx%#C$sCn|9| zoDzDD=*NHh)6*wUp6MiJSaj394HM;jeeBYdFdP`9b78GnscFtdp=5q(G~aXFkm z)Kxv4i{gpSW(6Q_;*SSI^4@8*)>|7ZYpwMv9wy@VaSbie%DouNIDa<(w$fN?sL#BF zv2kW~%ohpBQhIKLhS?X|^vUEfMH^Lv{-nfnO?;faC$j=xFg)qSWYJu&*WpLX zckn6=9U58nqay@^u^`LKbg+kx$soN+xkgH9sYGu|KYeWOl@yAn$<=f~nPYENaZE;V zoLnUzPxOM?iI)HNaeuh9v|Lqhjz+`w+3vvszIpdI09ar8>ErtT#WHA16V-dR1a7jE-(9RMh&tybtz?a_vxc#4|EA@Kwr|GL#^?m&BTH|8*ih!TK+KpCP zoAoF&z0_F9pcdU=0rM-hfT?5$SFU>Uq=ZGqVQ%kATT$s){eQisibG(9<}A8Pd&xLb zWn`&3neqTBRT02&G{IuhX%`_J3;UMDkTli4~iyn#{QPAr@%Xz-!@_nGfG#D}TIBawMD`^(EOL{^KUTy?o5r zsn>%_seEpdD`UCw30FZ!#;-YjUMa9x?q)FPU||Dthc+p}uR#J{CBSm{KH*~5oUWOm z6EFaO<5O25(gB(|cyD-slE>lW5=KHJRb2k-*ad!Hau6t`NKct1DnQZ4$1Ar(u1mc_%QY z%EZiRS9>1JyQoT0H1`B(*8K0$;K~ftWdog?Tz{1>$zaJ&%B4S-DmhjtmGBXz_ovLw z1ATGQQ2ap7Z7$^!T`gkbkr?FhbkM_0=UTDoVd<3kL!uy2QHc?ZkT8tOX)UQS6+s&X z%5dq4%RgUMaIc9;q0uafH75{7IzmJ+7(`r2aPzKlp}7;?nm&wR2f5_Y(}r5Pq)bP#uvL7wV0+k$hbqcInk zFSnW?JzZ} zprAjZ>23c60U=G2uC}fk-hXN^V%0AxcG{ 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 z z9SoI5=-vX26Iuf`xCrES|1uv6t4%-@DR(!$zB+GPB~BYEY$$+9#)5-wk>WxiZ=uAY}Sj%ju7O3-jNT@xr2 z4%}<6U6jjej-<<405kiVH97fR9n7erGuU(VEgx-YF%JufFX~r+M*X5}Z;DYVVBwsv849{*H{O= 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 = new util.Buffer(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 = new util.Buffer(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]; // remove comments\n var section = line.match(/^\\s*\\[([^\\[\\]]+)\\]\\s*$/);\n if (section) {\n currentSection = section[1];\n } else if (currentSection) {\n var item = line.match(/^\\s*(.+?)\\s*=\\s*(.+?)\\s*$/);\n if (item) {\n map[currentSection] = map[currentSection] || {};\n map[currentSection][item[1]] = item[2];\n }\n }\n });\n\n return map;\n }\n },\n\n fn: {\n noop: function() {},\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 = new util.Buffer(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 = new util.Buffer(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 = new util.Buffer(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 = 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 operation = req.operation;\n var output = req.service.api.operations[operation].output;\n if (output.payload) {\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 (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 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') var 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 */\n promisifyMethod: function promisifyMethod(methodName, PromiseDependency) {\n return function promise() {\n var self = this;\n return new PromiseDependency(function(resolve, reject) {\n self[methodName](function(err, data) {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n });\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) {\n if (!retryDelayOptions) retryDelayOptions = {};\n var customBackoff = retryDelayOptions.customBackoff || null;\n if (typeof customBackoff === 'function') {\n return customBackoff(retryCount);\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 if (err && err.retryable && retryCount < maxRetries) {\n retryCount++;\n var delay = util.calculateRetryDelay(retryCount, options.retryDelayOptions);\n setTimeout(sendRequest, delay + (err.retryAfter || 0));\n } else {\n cb(err);\n }\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 { retryable: statusCode >= 500 || statusCode === 429 }\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 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\nmodule.exports = util;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/util.js\n// module id = 1\n// module chunks = 0 1","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of 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 distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport { AWS } from './Facet';\nimport { ConsoleLogger as Logger } from './Logger';\n\nexport * from './Facet';\nexport { default as ClientDevice } from './ClientDevice';\nexport * from './Logger';\nexport * from './Errors';\nexport { default as Hub } from './Hub';\nexport { default as JS } from './JS';\nexport { default as Signer } from './Signer';\n\nimport Platform from './Platform';\nexport const Constants = {\n 'userAgent': Platform.userAgent\n};\n\nconst logger = new Logger('Common');\n\nif (AWS['util']) {\n AWS['util'].userAgent = () => {\n return Constants.userAgent;\n };\n} else if (AWS.config) {\n AWS.config.update({'customUserAgent': Constants.userAgent});\n} else {\n logger.warn('No AWS.config');\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/Common/index.ts","var baseAssign = require('./_baseAssign'),\n baseCreate = require('./_baseCreate');\n\n/**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\nfunction create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n}\n\nmodule.exports = create;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/create.js\n// module id = 3\n// module chunks = 0 1","'use strict';\n\nvar bind = require('./helpers/bind');\nvar isBuffer = require('is-buffer');\n\n/*global toString:true*/\n\n// utils is a library of generic helper functions non-specific to axios\n\nvar toString = Object.prototype.toString;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Array, otherwise false\n */\nfunction isArray(val) {\n return toString.call(val) === '[object Array]';\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nfunction isArrayBuffer(val) {\n return toString.call(val) === '[object ArrayBuffer]';\n}\n\n/**\n * Determine if a value is a FormData\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nfunction isFormData(val) {\n return (typeof FormData !== 'undefined') && (val instanceof FormData);\n}\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n var result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (val.buffer instanceof ArrayBuffer);\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a String, otherwise false\n */\nfunction isString(val) {\n return typeof val === 'string';\n}\n\n/**\n * Determine if a value is a Number\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Number, otherwise false\n */\nfunction isNumber(val) {\n return typeof val === 'number';\n}\n\n/**\n * Determine if a value is undefined\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nfunction isUndefined(val) {\n return typeof val === 'undefined';\n}\n\n/**\n * Determine if a value is an Object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is an Object, otherwise false\n */\nfunction isObject(val) {\n return val !== null && typeof val === 'object';\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Date, otherwise false\n */\nfunction isDate(val) {\n return toString.call(val) === '[object Date]';\n}\n\n/**\n * Determine if a value is a File\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a File, otherwise false\n */\nfunction isFile(val) {\n return toString.call(val) === '[object File]';\n}\n\n/**\n * Determine if a value is a Blob\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nfunction isBlob(val) {\n return toString.call(val) === '[object Blob]';\n}\n\n/**\n * Determine if a value is a Function\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nfunction isFunction(val) {\n return toString.call(val) === '[object Function]';\n}\n\n/**\n * Determine if a value is a Stream\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nfunction isStream(val) {\n return isObject(val) && isFunction(val.pipe);\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {Object} val The value to test\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nfunction isURLSearchParams(val) {\n return typeof URLSearchParams !== 'undefined' && val instanceof URLSearchParams;\n}\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n * @returns {String} The String freed of excess whitespace\n */\nfunction trim(str) {\n return str.replace(/^\\s*/, '').replace(/\\s*$/, '');\n}\n\n/**\n * Determine if we're running in a standard browser environment\n *\n * This allows axios to run in a web worker, and react-native.\n * Both environments support XMLHttpRequest, but not fully standard globals.\n *\n * web workers:\n * typeof window -> undefined\n * typeof document -> undefined\n *\n * react-native:\n * navigator.product -> 'ReactNative'\n */\nfunction isStandardBrowserEnv() {\n if (typeof navigator !== 'undefined' && navigator.product === 'ReactNative') {\n return false;\n }\n return (\n typeof window !== 'undefined' &&\n typeof document !== 'undefined'\n );\n}\n\n/**\n * Iterate over an Array or an Object invoking a function for each item.\n *\n * If `obj` is an Array callback will be called passing\n * the value, index, and complete array for each item.\n *\n * If 'obj' is an Object callback will be called passing\n * the value, key, and complete object for each property.\n *\n * @param {Object|Array} obj The object to iterate\n * @param {Function} fn The callback to invoke for each item\n */\nfunction forEach(obj, fn) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n // Force an array if not already something iterable\n if (typeof obj !== 'object') {\n /*eslint no-param-reassign:0*/\n obj = [obj];\n }\n\n if (isArray(obj)) {\n // Iterate over array values\n for (var i = 0, l = obj.length; i < l; i++) {\n fn.call(null, obj[i], i, obj);\n }\n } else {\n // Iterate over object keys\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n fn.call(null, obj[key], key, obj);\n }\n }\n }\n}\n\n/**\n * Accepts varargs expecting each argument to be an object, then\n * immutably merges the properties of each object and returns result.\n *\n * When multiple objects contain the same key the later object in\n * the arguments list will take precedence.\n *\n * Example:\n *\n * ```js\n * var result = merge({foo: 123}, {foo: 456});\n * console.log(result.foo); // outputs 456\n * ```\n *\n * @param {Object} obj1 Object to merge\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n var result = {};\n function assignValue(val, key) {\n if (typeof result[key] === 'object' && typeof val === 'object') {\n result[key] = merge(result[key], val);\n } else {\n result[key] = val;\n }\n }\n\n for (var i = 0, l = arguments.length; i < l; i++) {\n forEach(arguments[i], assignValue);\n }\n return result;\n}\n\n/**\n * Extends object a by mutably adding to it the properties of object b.\n *\n * @param {Object} a The object to be extended\n * @param {Object} b The object to copy properties from\n * @param {Object} thisArg The object to bind function to\n * @return {Object} The resulting value of object a\n */\nfunction extend(a, b, thisArg) {\n forEach(b, function assignValue(val, key) {\n if (thisArg && typeof val === 'function') {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n });\n return a;\n}\n\nmodule.exports = {\n isArray: isArray,\n isArrayBuffer: isArrayBuffer,\n isBuffer: isBuffer,\n isFormData: isFormData,\n isArrayBufferView: isArrayBufferView,\n isString: isString,\n isNumber: isNumber,\n isObject: isObject,\n isUndefined: isUndefined,\n isDate: isDate,\n isFile: isFile,\n isBlob: isBlob,\n isFunction: isFunction,\n isStream: isStream,\n isURLSearchParams: isURLSearchParams,\n isStandardBrowserEnv: isStandardBrowserEnv,\n forEach: forEach,\n merge: merge,\n extend: extend,\n trim: trim\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/axios/lib/utils.js\n// module id = 4\n// module chunks = 0 1","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isObject.js\n// module id = 5\n// module chunks = 0 1","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nmodule.exports = isArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isArray.js\n// module id = 6\n// module chunks = 0 1","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return ''\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/buffer/index.js\n// module id = 7\n// module chunks = 0 1","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_root.js\n// module id = 8\n// module chunks = 0 1","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/process/browser.js\n// module id = 9\n// module chunks = 0 1","var baseIsNative = require('./_baseIsNative'),\n getValue = require('./_getValue');\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nmodule.exports = getNative;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_getNative.js\n// module id = 10\n// module chunks = 0 1","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.environment = 'js';\n\nvar AWS = require('./core');\nmodule.exports = AWS;\n\nrequire('./credentials');\nrequire('./credentials/credential_provider_chain');\nrequire('./credentials/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 process = {\n browser: true\n };\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/browser_loader.js\n// module id = 11\n// module chunks = 0 1","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 12\n// module chunks = 0 1","// Generated by CoffeeScript 1.9.1\n(function() {\n var XMLCData, XMLComment, XMLDeclaration, XMLDocType, XMLElement, XMLNode, XMLRaw, XMLText, isEmpty, isFunction, isObject,\n hasProp = {}.hasOwnProperty;\n\n isObject = require('lodash/isObject');\n\n isFunction = require('lodash/isFunction');\n\n isEmpty = require('lodash/isEmpty');\n\n XMLElement = null;\n\n XMLCData = null;\n\n XMLComment = null;\n\n XMLDeclaration = null;\n\n XMLDocType = null;\n\n XMLRaw = null;\n\n XMLText = null;\n\n module.exports = XMLNode = (function() {\n function XMLNode(parent) {\n this.parent = parent;\n this.options = this.parent.options;\n this.stringify = this.parent.stringify;\n if (XMLElement === null) {\n XMLElement = require('./XMLElement');\n XMLCData = require('./XMLCData');\n XMLComment = require('./XMLComment');\n XMLDeclaration = require('./XMLDeclaration');\n XMLDocType = require('./XMLDocType');\n XMLRaw = require('./XMLRaw');\n XMLText = require('./XMLText');\n }\n }\n\n XMLNode.prototype.element = function(name, attributes, text) {\n var childNode, item, j, k, key, lastChild, len, len1, ref, val;\n lastChild = null;\n if (attributes == null) {\n attributes = {};\n }\n attributes = attributes.valueOf();\n if (!isObject(attributes)) {\n ref = [attributes, text], text = ref[0], attributes = ref[1];\n }\n if (name != null) {\n name = name.valueOf();\n }\n if (Array.isArray(name)) {\n for (j = 0, len = name.length; j < len; j++) {\n item = name[j];\n lastChild = this.element(item);\n }\n } else if (isFunction(name)) {\n lastChild = this.element(name.apply());\n } else if (isObject(name)) {\n for (key in name) {\n if (!hasProp.call(name, key)) continue;\n val = name[key];\n if (isFunction(val)) {\n val = val.apply();\n }\n if ((isObject(val)) && (isEmpty(val))) {\n val = null;\n }\n if (!this.options.ignoreDecorators && this.stringify.convertAttKey && key.indexOf(this.stringify.convertAttKey) === 0) {\n lastChild = this.attribute(key.substr(this.stringify.convertAttKey.length), val);\n } else if (!this.options.ignoreDecorators && this.stringify.convertPIKey && key.indexOf(this.stringify.convertPIKey) === 0) {\n lastChild = this.instruction(key.substr(this.stringify.convertPIKey.length), val);\n } else if (!this.options.separateArrayItems && Array.isArray(val)) {\n for (k = 0, len1 = val.length; k < len1; k++) {\n item = val[k];\n childNode = {};\n childNode[key] = item;\n lastChild = this.element(childNode);\n }\n } else if (isObject(val)) {\n lastChild = this.element(key);\n lastChild.element(val);\n } else {\n lastChild = this.element(key, val);\n }\n }\n } else {\n if (!this.options.ignoreDecorators && this.stringify.convertTextKey && name.indexOf(this.stringify.convertTextKey) === 0) {\n lastChild = this.text(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertCDataKey && name.indexOf(this.stringify.convertCDataKey) === 0) {\n lastChild = this.cdata(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertCommentKey && name.indexOf(this.stringify.convertCommentKey) === 0) {\n lastChild = this.comment(text);\n } else if (!this.options.ignoreDecorators && this.stringify.convertRawKey && name.indexOf(this.stringify.convertRawKey) === 0) {\n lastChild = this.raw(text);\n } else {\n lastChild = this.node(name, attributes, text);\n }\n }\n if (lastChild == null) {\n throw new Error(\"Could not create any elements with: \" + name);\n }\n return lastChild;\n };\n\n XMLNode.prototype.insertBefore = function(name, attributes, text) {\n var child, i, removed;\n if (this.isRoot) {\n throw new Error(\"Cannot insert elements at root level\");\n }\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i);\n child = this.parent.element(name, attributes, text);\n Array.prototype.push.apply(this.parent.children, removed);\n return child;\n };\n\n XMLNode.prototype.insertAfter = function(name, attributes, text) {\n var child, i, removed;\n if (this.isRoot) {\n throw new Error(\"Cannot insert elements at root level\");\n }\n i = this.parent.children.indexOf(this);\n removed = this.parent.children.splice(i + 1);\n child = this.parent.element(name, attributes, text);\n Array.prototype.push.apply(this.parent.children, removed);\n return child;\n };\n\n XMLNode.prototype.remove = function() {\n var i, ref;\n if (this.isRoot) {\n throw new Error(\"Cannot remove the root element\");\n }\n i = this.parent.children.indexOf(this);\n [].splice.apply(this.parent.children, [i, i - i + 1].concat(ref = [])), ref;\n return this.parent;\n };\n\n XMLNode.prototype.node = function(name, attributes, text) {\n var child, ref;\n if (name != null) {\n name = name.valueOf();\n }\n if (attributes == null) {\n attributes = {};\n }\n attributes = attributes.valueOf();\n if (!isObject(attributes)) {\n ref = [attributes, text], text = ref[0], attributes = ref[1];\n }\n child = new XMLElement(this, name, attributes);\n if (text != null) {\n child.text(text);\n }\n this.children.push(child);\n return child;\n };\n\n XMLNode.prototype.text = function(value) {\n var child;\n child = new XMLText(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.cdata = function(value) {\n var child;\n child = new XMLCData(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.comment = function(value) {\n var child;\n child = new XMLComment(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.raw = function(value) {\n var child;\n child = new XMLRaw(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLNode.prototype.declaration = function(version, encoding, standalone) {\n var doc, xmldec;\n doc = this.document();\n xmldec = new XMLDeclaration(doc, version, encoding, standalone);\n doc.xmldec = xmldec;\n return doc.root();\n };\n\n XMLNode.prototype.doctype = function(pubID, sysID) {\n var doc, doctype;\n doc = this.document();\n doctype = new XMLDocType(doc, pubID, sysID);\n doc.doctype = doctype;\n return doctype;\n };\n\n XMLNode.prototype.up = function() {\n if (this.isRoot) {\n throw new Error(\"The root node has no parent. Use doc() if you need to get the document object.\");\n }\n return this.parent;\n };\n\n XMLNode.prototype.root = function() {\n var child;\n if (this.isRoot) {\n return this;\n }\n child = this.parent;\n while (!child.isRoot) {\n child = child.parent;\n }\n return child;\n };\n\n XMLNode.prototype.document = function() {\n return this.root().documentObject;\n };\n\n XMLNode.prototype.end = function(options) {\n return this.document().toString(options);\n };\n\n XMLNode.prototype.prev = function() {\n var i;\n if (this.isRoot) {\n throw new Error(\"Root node has no siblings\");\n }\n i = this.parent.children.indexOf(this);\n if (i < 1) {\n throw new Error(\"Already at the first node\");\n }\n return this.parent.children[i - 1];\n };\n\n XMLNode.prototype.next = function() {\n var i;\n if (this.isRoot) {\n throw new Error(\"Root node has no siblings\");\n }\n i = this.parent.children.indexOf(this);\n if (i === -1 || i === this.parent.children.length - 1) {\n throw new Error(\"Already at the last node\");\n }\n return this.parent.children[i + 1];\n };\n\n XMLNode.prototype.importXMLBuilder = function(xmlbuilder) {\n var clonedRoot;\n clonedRoot = xmlbuilder.root().clone();\n clonedRoot.parent = this;\n clonedRoot.isRoot = false;\n this.children.push(clonedRoot);\n return this;\n };\n\n XMLNode.prototype.ele = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLNode.prototype.nod = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLNode.prototype.txt = function(value) {\n return this.text(value);\n };\n\n XMLNode.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLNode.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLNode.prototype.doc = function() {\n return this.document();\n };\n\n XMLNode.prototype.dec = function(version, encoding, standalone) {\n return this.declaration(version, encoding, standalone);\n };\n\n XMLNode.prototype.dtd = function(pubID, sysID) {\n return this.doctype(pubID, sysID);\n };\n\n XMLNode.prototype.e = function(name, attributes, text) {\n return this.element(name, attributes, text);\n };\n\n XMLNode.prototype.n = function(name, attributes, text) {\n return this.node(name, attributes, text);\n };\n\n XMLNode.prototype.t = function(value) {\n return this.text(value);\n };\n\n XMLNode.prototype.d = function(value) {\n return this.cdata(value);\n };\n\n XMLNode.prototype.c = function(value) {\n return this.comment(value);\n };\n\n XMLNode.prototype.r = function(value) {\n return this.raw(value);\n };\n\n XMLNode.prototype.u = function() {\n return this.up();\n };\n\n return XMLNode;\n\n })();\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/xmlbuilder/lib/XMLNode.js\n// module id = 13\n// module chunks = 0 1","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of 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 distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nexport * from './ConsoleLogger';\n\n\n\n// WEBPACK FOOTER //\n// ./src/Common/Logger/index.ts","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport AuthClass from './Auth';\r\n\r\nimport { ConsoleLogger as Logger } from '../Common';\r\n\r\nconst logger = new Logger('Auth');\r\n\r\nlet _instance = null;\r\n\r\nif (!_instance) {\r\n logger.debug('Create Auth Instance');\r\n _instance = new AuthClass(null);\r\n}\r\n\r\nconst Auth = _instance;\r\nexport default Auth;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/Auth/index.ts","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, '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\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 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 }\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\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 (this.location === 'header') {\n property(this, 'timestampFormat', 'rfc822');\n } else if (shape.timestampFormat) {\n property(this, 'timestampFormat', shape.timestampFormat);\n } else if (!this.timestampFormat && this.api) {\n if (this.api.timestampFormat) {\n property(this, 'timestampFormat', this.api.timestampFormat);\n } else {\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\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 = util.base64.decode;\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\nmodule.exports = Shape;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/model/shape.js\n// module id = 16\n// module chunks = 0 1","var Symbol = require('./_Symbol'),\n getRawTag = require('./_getRawTag'),\n objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nmodule.exports = baseGetTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_baseGetTag.js\n// module id = 17\n// module chunks = 0 1","var isFunction = require('./isFunction'),\n isLength = require('./isLength');\n\n/**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\nfunction isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n}\n\nmodule.exports = isArrayLike;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isArrayLike.js\n// module id = 18\n// module chunks = 0 1","var arrayLikeKeys = require('./_arrayLikeKeys'),\n baseKeys = require('./_baseKeys'),\n isArrayLike = require('./isArrayLike');\n\n/**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nmodule.exports = keys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/keys.js\n// module id = 19\n// module chunks = 0 1","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isObjectLike.js\n// module id = 20\n// module chunks = 0 1","var util = require('../util');\n\nfunction populateMethod(req) {\n req.httpRequest.method = req.service.api.operations[req.operation].httpMethod;\n}\n\nfunction generateURI(endpointPath, operationPath, input, params) {\n var uri = [endpointPath, operationPath].join('/');\n uri = uri.replace(/\\/+/g, '/');\n\n var queryString = {}, queryStringSet = false;\n util.each(input.members, function (name, member) {\n var paramValue = params[name];\n if (paramValue === null || paramValue === undefined) return;\n if (member.location === 'uri') {\n var regex = new RegExp('\\\\{' + member.name + '(\\\\+)?\\\\}');\n uri = uri.replace(regex, function(_, plus) {\n var fn = plus ? util.uriEscapePath : util.uriEscape;\n return fn(String(paramValue));\n });\n } else if (member.location === 'querystring') {\n queryStringSet = true;\n\n if (member.type === 'list') {\n queryString[member.name] = paramValue.map(function(val) {\n return util.uriEscape(String(val));\n });\n } else if (member.type === 'map') {\n util.each(paramValue, function(key, value) {\n if (Array.isArray(value)) {\n queryString[key] = value.map(function(val) {\n return util.uriEscape(String(val));\n });\n } else {\n queryString[key] = util.uriEscape(String(value));\n }\n });\n } else {\n queryString[member.name] = util.uriEscape(String(paramValue));\n }\n }\n });\n\n if (queryStringSet) {\n uri += (uri.indexOf('?') >= 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}\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\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData,\n generateURI: generateURI\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/protocol/rest.js\n// module id = 21\n// module chunks = 0 1","var baseGetTag = require('./_baseGetTag'),\n isObject = require('./isObject');\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nmodule.exports = isFunction;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isFunction.js\n// module id = 22\n// module chunks = 0 1","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_Symbol.js\n// module id = 23\n// module chunks = 0 1","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nmodule.exports = eq;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/eq.js\n// module id = 24\n// module chunks = 0 1","var listCacheClear = require('./_listCacheClear'),\n listCacheDelete = require('./_listCacheDelete'),\n listCacheGet = require('./_listCacheGet'),\n listCacheHas = require('./_listCacheHas'),\n listCacheSet = require('./_listCacheSet');\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nmodule.exports = ListCache;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_ListCache.js\n// module id = 25\n// module chunks = 0 1","var eq = require('./eq');\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nmodule.exports = assocIndexOf;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_assocIndexOf.js\n// module id = 26\n// module chunks = 0 1","var getNative = require('./_getNative');\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nmodule.exports = nativeCreate;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_nativeCreate.js\n// module id = 27\n// module chunks = 0 1","var isKeyable = require('./_isKeyable');\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nmodule.exports = getMapData;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_getMapData.js\n// module id = 28\n// module chunks = 0 1","var isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nmodule.exports = toKey;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_toKey.js\n// module id = 29\n// module chunks = 0 1","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\nmodule.exports = exports = {\n isEmptyData: isEmptyData,\n convertToBuffer: convertToBuffer,\n}\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/browserHashUtils.js\n// module id = 30\n// module chunks = 0 1","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\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/clients/sts.js\n// module id = 31\n// module chunks = 0 1","var util = require('../util');\nvar JsonBuilder = require('../json/builder');\nvar JsonParser = require('../json/parser');\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\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 if (e.__type || e.code) {\n error.code = (e.__type || e.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\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/protocol/json.js\n// module id = 32\n// module chunks = 0 1","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 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\nmodule.exports = JsonBuilder;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/json/builder.js\n// module id = 33\n// module chunks = 0 1","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\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\nmodule.exports = JsonParser;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/json/parser.js\n// module id = 34\n// module chunks = 0 1","/**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\nfunction identity(value) {\n return value;\n}\n\nmodule.exports = identity;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/identity.js\n// module id = 35\n// module chunks = 0 1","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nmodule.exports = isLength;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isLength.js\n// module id = 36\n// module chunks = 0 1","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nmodule.exports = isIndex;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_isIndex.js\n// module id = 37\n// module chunks = 0 1","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\nfunction isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n}\n\nmodule.exports = isPrototype;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_isPrototype.js\n// module id = 38\n// module chunks = 0 1","var baseIsArguments = require('./_baseIsArguments'),\n isObjectLike = require('./isObjectLike');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nmodule.exports = isArguments;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isArguments.js\n// module id = 39\n// module chunks = 0 1","var root = require('./_root'),\n stubFalse = require('./stubFalse');\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;\n\n/**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\nvar isBuffer = nativeIsBuffer || stubFalse;\n\nmodule.exports = isBuffer;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isBuffer.js\n// module id = 40\n// module chunks = 0 1","module.exports = function(module) {\r\n\tif(!module.webpackPolyfill) {\r\n\t\tmodule.deprecate = function() {};\r\n\t\tmodule.paths = [];\r\n\t\t// module.parent = undefined by default\r\n\t\tif(!module.children) module.children = [];\r\n\t\tObject.defineProperty(module, \"loaded\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.l;\r\n\t\t\t}\r\n\t\t});\r\n\t\tObject.defineProperty(module, \"id\", {\r\n\t\t\tenumerable: true,\r\n\t\t\tget: function() {\r\n\t\t\t\treturn module.i;\r\n\t\t\t}\r\n\t\t});\r\n\t\tmodule.webpackPolyfill = 1;\r\n\t}\r\n\treturn module;\r\n};\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/module.js\n// module id = 41\n// module chunks = 0 1","var baseIsTypedArray = require('./_baseIsTypedArray'),\n baseUnary = require('./_baseUnary'),\n nodeUtil = require('./_nodeUtil');\n\n/* Node.js helper references. */\nvar nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n/**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\nvar isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\nmodule.exports = isTypedArray;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isTypedArray.js\n// module id = 42\n// module chunks = 0 1","var getNative = require('./_getNative'),\n root = require('./_root');\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nmodule.exports = Map;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_Map.js\n// module id = 43\n// module chunks = 0 1","var mapCacheClear = require('./_mapCacheClear'),\n mapCacheDelete = require('./_mapCacheDelete'),\n mapCacheGet = require('./_mapCacheGet'),\n mapCacheHas = require('./_mapCacheHas'),\n mapCacheSet = require('./_mapCacheSet');\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nmodule.exports = MapCache;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_MapCache.js\n// module id = 44\n// module chunks = 0 1","var isArray = require('./isArray'),\n isSymbol = require('./isSymbol');\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nmodule.exports = isKey;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_isKey.js\n// module id = 45\n// module chunks = 0 1","var baseGetTag = require('./_baseGetTag'),\n isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/isSymbol.js\n// module id = 46\n// module chunks = 0 1","(function(exports) {\n \"use strict\";\n\n function isArray(obj) {\n if (obj !== null) {\n return Object.prototype.toString.call(obj) === \"[object Array]\";\n } else {\n return false;\n }\n }\n\n function isObject(obj) {\n if (obj !== null) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n } else {\n return false;\n }\n }\n\n function strictDeepEqual(first, second) {\n // Check the scalar case first.\n if (first === second) {\n return true;\n }\n\n // Check if they are the same type.\n var firstType = Object.prototype.toString.call(first);\n if (firstType !== Object.prototype.toString.call(second)) {\n return false;\n }\n // We know that first and second have the same type so we can just check the\n // first type from now on.\n if (isArray(first) === true) {\n // Short circuit if they're not the same length;\n if (first.length !== second.length) {\n return false;\n }\n for (var i = 0; i < first.length; i++) {\n if (strictDeepEqual(first[i], second[i]) === false) {\n return false;\n }\n }\n return true;\n }\n if (isObject(first) === true) {\n // An object is equal if it has the same key/value pairs.\n var keysSeen = {};\n for (var key in first) {\n if (hasOwnProperty.call(first, key)) {\n if (strictDeepEqual(first[key], second[key]) === false) {\n return false;\n }\n keysSeen[key] = true;\n }\n }\n // Now check that there aren't any keys in second that weren't\n // in first.\n for (var key2 in second) {\n if (hasOwnProperty.call(second, key2)) {\n if (keysSeen[key2] !== true) {\n return false;\n }\n }\n }\n return true;\n }\n return false;\n }\n\n function isFalse(obj) {\n // From the spec:\n // A false value corresponds to the following values:\n // Empty list\n // Empty object\n // Empty string\n // False boolean\n // null value\n\n // First check the scalar values.\n if (obj === \"\" || obj === false || obj === null) {\n return true;\n } else if (isArray(obj) && obj.length === 0) {\n // Check for an empty array.\n return true;\n } else if (isObject(obj)) {\n // Check for an empty object.\n for (var key in obj) {\n // If there are any keys, then\n // the object is not empty so the object\n // is not false.\n if (obj.hasOwnProperty(key)) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n }\n\n function objValues(obj) {\n var keys = Object.keys(obj);\n var values = [];\n for (var i = 0; i < keys.length; i++) {\n values.push(obj[keys[i]]);\n }\n return values;\n }\n\n function merge(a, b) {\n var merged = {};\n for (var key in a) {\n merged[key] = a[key];\n }\n for (var key2 in b) {\n merged[key2] = b[key2];\n }\n return merged;\n }\n\n var trimLeft;\n if (typeof String.prototype.trimLeft === \"function\") {\n trimLeft = function(str) {\n return str.trimLeft();\n };\n } else {\n trimLeft = function(str) {\n return str.match(/^\\s*(.*)/)[1];\n };\n }\n\n // Type constants used to define functions.\n var TYPE_NUMBER = 0;\n var TYPE_ANY = 1;\n var TYPE_STRING = 2;\n var TYPE_ARRAY = 3;\n var TYPE_OBJECT = 4;\n var TYPE_BOOLEAN = 5;\n var TYPE_EXPREF = 6;\n var TYPE_NULL = 7;\n var TYPE_ARRAY_NUMBER = 8;\n var TYPE_ARRAY_STRING = 9;\n\n var TOK_EOF = \"EOF\";\n var TOK_UNQUOTEDIDENTIFIER = \"UnquotedIdentifier\";\n var TOK_QUOTEDIDENTIFIER = \"QuotedIdentifier\";\n var TOK_RBRACKET = \"Rbracket\";\n var TOK_RPAREN = \"Rparen\";\n var TOK_COMMA = \"Comma\";\n var TOK_COLON = \"Colon\";\n var TOK_RBRACE = \"Rbrace\";\n var TOK_NUMBER = \"Number\";\n var TOK_CURRENT = \"Current\";\n var TOK_EXPREF = \"Expref\";\n var TOK_PIPE = \"Pipe\";\n var TOK_OR = \"Or\";\n var TOK_AND = \"And\";\n var TOK_EQ = \"EQ\";\n var TOK_GT = \"GT\";\n var TOK_LT = \"LT\";\n var TOK_GTE = \"GTE\";\n var TOK_LTE = \"LTE\";\n var TOK_NE = \"NE\";\n var TOK_FLATTEN = \"Flatten\";\n var TOK_STAR = \"Star\";\n var TOK_FILTER = \"Filter\";\n var TOK_DOT = \"Dot\";\n var TOK_NOT = \"Not\";\n var TOK_LBRACE = \"Lbrace\";\n var TOK_LBRACKET = \"Lbracket\";\n var TOK_LPAREN= \"Lparen\";\n var TOK_LITERAL= \"Literal\";\n\n // The \"&\", \"[\", \"<\", \">\" tokens\n // are not in basicToken because\n // there are two token variants\n // (\"&&\", \"[?\", \"<=\", \">=\"). This is specially handled\n // below.\n\n var basicTokens = {\n \".\": TOK_DOT,\n \"*\": TOK_STAR,\n \",\": TOK_COMMA,\n \":\": TOK_COLON,\n \"{\": TOK_LBRACE,\n \"}\": TOK_RBRACE,\n \"]\": TOK_RBRACKET,\n \"(\": TOK_LPAREN,\n \")\": TOK_RPAREN,\n \"@\": TOK_CURRENT\n };\n\n var operatorStartToken = {\n \"<\": true,\n \">\": true,\n \"=\": true,\n \"!\": true\n };\n\n var skipChars = {\n \" \": true,\n \"\\t\": true,\n \"\\n\": true\n };\n\n\n function isAlpha(ch) {\n return (ch >= \"a\" && ch <= \"z\") ||\n (ch >= \"A\" && ch <= \"Z\") ||\n ch === \"_\";\n }\n\n function isNum(ch) {\n return (ch >= \"0\" && ch <= \"9\") ||\n ch === \"-\";\n }\n function isAlphaNum(ch) {\n return (ch >= \"a\" && ch <= \"z\") ||\n (ch >= \"A\" && ch <= \"Z\") ||\n (ch >= \"0\" && ch <= \"9\") ||\n ch === \"_\";\n }\n\n function Lexer() {\n }\n Lexer.prototype = {\n tokenize: function(stream) {\n var tokens = [];\n this._current = 0;\n var start;\n var identifier;\n var token;\n while (this._current < stream.length) {\n if (isAlpha(stream[this._current])) {\n start = this._current;\n identifier = this._consumeUnquotedIdentifier(stream);\n tokens.push({type: TOK_UNQUOTEDIDENTIFIER,\n value: identifier,\n start: start});\n } else if (basicTokens[stream[this._current]] !== undefined) {\n tokens.push({type: basicTokens[stream[this._current]],\n value: stream[this._current],\n start: this._current});\n this._current++;\n } else if (isNum(stream[this._current])) {\n token = this._consumeNumber(stream);\n tokens.push(token);\n } else if (stream[this._current] === \"[\") {\n // No need to increment this._current. This happens\n // in _consumeLBracket\n token = this._consumeLBracket(stream);\n tokens.push(token);\n } else if (stream[this._current] === \"\\\"\") {\n start = this._current;\n identifier = this._consumeQuotedIdentifier(stream);\n tokens.push({type: TOK_QUOTEDIDENTIFIER,\n value: identifier,\n start: start});\n } else if (stream[this._current] === \"'\") {\n start = this._current;\n identifier = this._consumeRawStringLiteral(stream);\n tokens.push({type: TOK_LITERAL,\n value: identifier,\n start: start});\n } else if (stream[this._current] === \"`\") {\n start = this._current;\n var literal = this._consumeLiteral(stream);\n tokens.push({type: TOK_LITERAL,\n value: literal,\n start: start});\n } else if (operatorStartToken[stream[this._current]] !== undefined) {\n tokens.push(this._consumeOperator(stream));\n } else if (skipChars[stream[this._current]] !== undefined) {\n // Ignore whitespace.\n this._current++;\n } else if (stream[this._current] === \"&\") {\n start = this._current;\n this._current++;\n if (stream[this._current] === \"&\") {\n this._current++;\n tokens.push({type: TOK_AND, value: \"&&\", start: start});\n } else {\n tokens.push({type: TOK_EXPREF, value: \"&\", start: start});\n }\n } else if (stream[this._current] === \"|\") {\n start = this._current;\n this._current++;\n if (stream[this._current] === \"|\") {\n this._current++;\n tokens.push({type: TOK_OR, value: \"||\", start: start});\n } else {\n tokens.push({type: TOK_PIPE, value: \"|\", start: start});\n }\n } else {\n var error = new Error(\"Unknown character:\" + stream[this._current]);\n error.name = \"LexerError\";\n throw error;\n }\n }\n return tokens;\n },\n\n _consumeUnquotedIdentifier: function(stream) {\n var start = this._current;\n this._current++;\n while (this._current < stream.length && isAlphaNum(stream[this._current])) {\n this._current++;\n }\n return stream.slice(start, this._current);\n },\n\n _consumeQuotedIdentifier: function(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n while (stream[this._current] !== \"\\\"\" && this._current < maxLength) {\n // You can escape a double quote and you can escape an escape.\n var current = this._current;\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n stream[current + 1] === \"\\\"\")) {\n current += 2;\n } else {\n current++;\n }\n this._current = current;\n }\n this._current++;\n return JSON.parse(stream.slice(start, this._current));\n },\n\n _consumeRawStringLiteral: function(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n while (stream[this._current] !== \"'\" && this._current < maxLength) {\n // You can escape a single quote and you can escape an escape.\n var current = this._current;\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n stream[current + 1] === \"'\")) {\n current += 2;\n } else {\n current++;\n }\n this._current = current;\n }\n this._current++;\n var literal = stream.slice(start + 1, this._current - 1);\n return literal.replace(\"\\\\'\", \"'\");\n },\n\n _consumeNumber: function(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n while (isNum(stream[this._current]) && this._current < maxLength) {\n this._current++;\n }\n var value = parseInt(stream.slice(start, this._current));\n return {type: TOK_NUMBER, value: value, start: start};\n },\n\n _consumeLBracket: function(stream) {\n var start = this._current;\n this._current++;\n if (stream[this._current] === \"?\") {\n this._current++;\n return {type: TOK_FILTER, value: \"[?\", start: start};\n } else if (stream[this._current] === \"]\") {\n this._current++;\n return {type: TOK_FLATTEN, value: \"[]\", start: start};\n } else {\n return {type: TOK_LBRACKET, value: \"[\", start: start};\n }\n },\n\n _consumeOperator: function(stream) {\n var start = this._current;\n var startingChar = stream[start];\n this._current++;\n if (startingChar === \"!\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {type: TOK_NE, value: \"!=\", start: start};\n } else {\n return {type: TOK_NOT, value: \"!\", start: start};\n }\n } else if (startingChar === \"<\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {type: TOK_LTE, value: \"<=\", start: start};\n } else {\n return {type: TOK_LT, value: \"<\", start: start};\n }\n } else if (startingChar === \">\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {type: TOK_GTE, value: \">=\", start: start};\n } else {\n return {type: TOK_GT, value: \">\", start: start};\n }\n } else if (startingChar === \"=\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {type: TOK_EQ, value: \"==\", start: start};\n }\n }\n },\n\n _consumeLiteral: function(stream) {\n this._current++;\n var start = this._current;\n var maxLength = stream.length;\n var literal;\n while(stream[this._current] !== \"`\" && this._current < maxLength) {\n // You can escape a literal char or you can escape the escape.\n var current = this._current;\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" ||\n stream[current + 1] === \"`\")) {\n current += 2;\n } else {\n current++;\n }\n this._current = current;\n }\n var literalString = trimLeft(stream.slice(start, this._current));\n literalString = literalString.replace(\"\\\\`\", \"`\");\n if (this._looksLikeJSON(literalString)) {\n literal = JSON.parse(literalString);\n } else {\n // Try to JSON parse it as \"\"\n literal = JSON.parse(\"\\\"\" + literalString + \"\\\"\");\n }\n // +1 gets us to the ending \"`\", +1 to move on to the next char.\n this._current++;\n return literal;\n },\n\n _looksLikeJSON: function(literalString) {\n var startingChars = \"[{\\\"\";\n var jsonLiterals = [\"true\", \"false\", \"null\"];\n var numberLooking = \"-0123456789\";\n\n if (literalString === \"\") {\n return false;\n } else if (startingChars.indexOf(literalString[0]) >= 0) {\n return true;\n } else if (jsonLiterals.indexOf(literalString) >= 0) {\n return true;\n } else if (numberLooking.indexOf(literalString[0]) >= 0) {\n try {\n JSON.parse(literalString);\n return true;\n } catch (ex) {\n return false;\n }\n } else {\n return false;\n }\n }\n };\n\n var bindingPower = {};\n bindingPower[TOK_EOF] = 0;\n bindingPower[TOK_UNQUOTEDIDENTIFIER] = 0;\n bindingPower[TOK_QUOTEDIDENTIFIER] = 0;\n bindingPower[TOK_RBRACKET] = 0;\n bindingPower[TOK_RPAREN] = 0;\n bindingPower[TOK_COMMA] = 0;\n bindingPower[TOK_RBRACE] = 0;\n bindingPower[TOK_NUMBER] = 0;\n bindingPower[TOK_CURRENT] = 0;\n bindingPower[TOK_EXPREF] = 0;\n bindingPower[TOK_PIPE] = 1;\n bindingPower[TOK_OR] = 2;\n bindingPower[TOK_AND] = 3;\n bindingPower[TOK_EQ] = 5;\n bindingPower[TOK_GT] = 5;\n bindingPower[TOK_LT] = 5;\n bindingPower[TOK_GTE] = 5;\n bindingPower[TOK_LTE] = 5;\n bindingPower[TOK_NE] = 5;\n bindingPower[TOK_FLATTEN] = 9;\n bindingPower[TOK_STAR] = 20;\n bindingPower[TOK_FILTER] = 21;\n bindingPower[TOK_DOT] = 40;\n bindingPower[TOK_NOT] = 45;\n bindingPower[TOK_LBRACE] = 50;\n bindingPower[TOK_LBRACKET] = 55;\n bindingPower[TOK_LPAREN] = 60;\n\n function Parser() {\n }\n\n Parser.prototype = {\n parse: function(expression) {\n this._loadTokens(expression);\n this.index = 0;\n var ast = this.expression(0);\n if (this._lookahead(0) !== TOK_EOF) {\n var t = this._lookaheadToken(0);\n var error = new Error(\n \"Unexpected token type: \" + t.type + \", value: \" + t.value);\n error.name = \"ParserError\";\n throw error;\n }\n return ast;\n },\n\n _loadTokens: function(expression) {\n var lexer = new Lexer();\n var tokens = lexer.tokenize(expression);\n tokens.push({type: TOK_EOF, value: \"\", start: expression.length});\n this.tokens = tokens;\n },\n\n expression: function(rbp) {\n var leftToken = this._lookaheadToken(0);\n this._advance();\n var left = this.nud(leftToken);\n var currentToken = this._lookahead(0);\n while (rbp < bindingPower[currentToken]) {\n this._advance();\n left = this.led(currentToken, left);\n currentToken = this._lookahead(0);\n }\n return left;\n },\n\n _lookahead: function(number) {\n return this.tokens[this.index + number].type;\n },\n\n _lookaheadToken: function(number) {\n return this.tokens[this.index + number];\n },\n\n _advance: function() {\n this.index++;\n },\n\n nud: function(token) {\n var left;\n var right;\n var expression;\n switch (token.type) {\n case TOK_LITERAL:\n return {type: \"Literal\", value: token.value};\n case TOK_UNQUOTEDIDENTIFIER:\n return {type: \"Field\", name: token.value};\n case TOK_QUOTEDIDENTIFIER:\n var node = {type: \"Field\", name: token.value};\n if (this._lookahead(0) === TOK_LPAREN) {\n throw new Error(\"Quoted identifier not allowed for function names.\");\n } else {\n return node;\n }\n break;\n case TOK_NOT:\n right = this.expression(bindingPower.Not);\n return {type: \"NotExpression\", children: [right]};\n case TOK_STAR:\n left = {type: \"Identity\"};\n right = null;\n if (this._lookahead(0) === TOK_RBRACKET) {\n // This can happen in a multiselect,\n // [a, b, *]\n right = {type: \"Identity\"};\n } else {\n right = this._parseProjectionRHS(bindingPower.Star);\n }\n return {type: \"ValueProjection\", children: [left, right]};\n case TOK_FILTER:\n return this.led(token.type, {type: \"Identity\"});\n case TOK_LBRACE:\n return this._parseMultiselectHash();\n case TOK_FLATTEN:\n left = {type: TOK_FLATTEN, children: [{type: \"Identity\"}]};\n right = this._parseProjectionRHS(bindingPower.Flatten);\n return {type: \"Projection\", children: [left, right]};\n case TOK_LBRACKET:\n if (this._lookahead(0) === TOK_NUMBER || this._lookahead(0) === TOK_COLON) {\n right = this._parseIndexExpression();\n return this._projectIfSlice({type: \"Identity\"}, right);\n } else if (this._lookahead(0) === TOK_STAR &&\n this._lookahead(1) === TOK_RBRACKET) {\n this._advance();\n this._advance();\n right = this._parseProjectionRHS(bindingPower.Star);\n return {type: \"Projection\",\n children: [{type: \"Identity\"}, right]};\n } else {\n return this._parseMultiselectList();\n }\n break;\n case TOK_CURRENT:\n return {type: TOK_CURRENT};\n case TOK_EXPREF:\n expression = this.expression(bindingPower.Expref);\n return {type: \"ExpressionReference\", children: [expression]};\n case TOK_LPAREN:\n var args = [];\n while (this._lookahead(0) !== TOK_RPAREN) {\n if (this._lookahead(0) === TOK_CURRENT) {\n expression = {type: TOK_CURRENT};\n this._advance();\n } else {\n expression = this.expression(0);\n }\n args.push(expression);\n }\n this._match(TOK_RPAREN);\n return args[0];\n default:\n this._errorToken(token);\n }\n },\n\n led: function(tokenName, left) {\n var right;\n switch(tokenName) {\n case TOK_DOT:\n var rbp = bindingPower.Dot;\n if (this._lookahead(0) !== TOK_STAR) {\n right = this._parseDotRHS(rbp);\n return {type: \"Subexpression\", children: [left, right]};\n } else {\n // Creating a projection.\n this._advance();\n right = this._parseProjectionRHS(rbp);\n return {type: \"ValueProjection\", children: [left, right]};\n }\n break;\n case TOK_PIPE:\n right = this.expression(bindingPower.Pipe);\n return {type: TOK_PIPE, children: [left, right]};\n case TOK_OR:\n right = this.expression(bindingPower.Or);\n return {type: \"OrExpression\", children: [left, right]};\n case TOK_AND:\n right = this.expression(bindingPower.And);\n return {type: \"AndExpression\", children: [left, right]};\n case TOK_LPAREN:\n var name = left.name;\n var args = [];\n var expression, node;\n while (this._lookahead(0) !== TOK_RPAREN) {\n if (this._lookahead(0) === TOK_CURRENT) {\n expression = {type: TOK_CURRENT};\n this._advance();\n } else {\n expression = this.expression(0);\n }\n if (this._lookahead(0) === TOK_COMMA) {\n this._match(TOK_COMMA);\n }\n args.push(expression);\n }\n this._match(TOK_RPAREN);\n node = {type: \"Function\", name: name, children: args};\n return node;\n case TOK_FILTER:\n var condition = this.expression(0);\n this._match(TOK_RBRACKET);\n if (this._lookahead(0) === TOK_FLATTEN) {\n right = {type: \"Identity\"};\n } else {\n right = this._parseProjectionRHS(bindingPower.Filter);\n }\n return {type: \"FilterProjection\", children: [left, right, condition]};\n case TOK_FLATTEN:\n var leftNode = {type: TOK_FLATTEN, children: [left]};\n var rightNode = this._parseProjectionRHS(bindingPower.Flatten);\n return {type: \"Projection\", children: [leftNode, rightNode]};\n case TOK_EQ:\n case TOK_NE:\n case TOK_GT:\n case TOK_GTE:\n case TOK_LT:\n case TOK_LTE:\n return this._parseComparator(left, tokenName);\n case TOK_LBRACKET:\n var token = this._lookaheadToken(0);\n if (token.type === TOK_NUMBER || token.type === TOK_COLON) {\n right = this._parseIndexExpression();\n return this._projectIfSlice(left, right);\n } else {\n this._match(TOK_STAR);\n this._match(TOK_RBRACKET);\n right = this._parseProjectionRHS(bindingPower.Star);\n return {type: \"Projection\", children: [left, right]};\n }\n break;\n default:\n this._errorToken(this._lookaheadToken(0));\n }\n },\n\n _match: function(tokenType) {\n if (this._lookahead(0) === tokenType) {\n this._advance();\n } else {\n var t = this._lookaheadToken(0);\n var error = new Error(\"Expected \" + tokenType + \", got: \" + t.type);\n error.name = \"ParserError\";\n throw error;\n }\n },\n\n _errorToken: function(token) {\n var error = new Error(\"Invalid token (\" +\n token.type + \"): \\\"\" +\n token.value + \"\\\"\");\n error.name = \"ParserError\";\n throw error;\n },\n\n\n _parseIndexExpression: function() {\n if (this._lookahead(0) === TOK_COLON || this._lookahead(1) === TOK_COLON) {\n return this._parseSliceExpression();\n } else {\n var node = {\n type: \"Index\",\n value: this._lookaheadToken(0).value};\n this._advance();\n this._match(TOK_RBRACKET);\n return node;\n }\n },\n\n _projectIfSlice: function(left, right) {\n var indexExpr = {type: \"IndexExpression\", children: [left, right]};\n if (right.type === \"Slice\") {\n return {\n type: \"Projection\",\n children: [indexExpr, this._parseProjectionRHS(bindingPower.Star)]\n };\n } else {\n return indexExpr;\n }\n },\n\n _parseSliceExpression: function() {\n // [start:end:step] where each part is optional, as well as the last\n // colon.\n var parts = [null, null, null];\n var index = 0;\n var currentToken = this._lookahead(0);\n while (currentToken !== TOK_RBRACKET && index < 3) {\n if (currentToken === TOK_COLON) {\n index++;\n this._advance();\n } else if (currentToken === TOK_NUMBER) {\n parts[index] = this._lookaheadToken(0).value;\n this._advance();\n } else {\n var t = this._lookahead(0);\n var error = new Error(\"Syntax error, unexpected token: \" +\n t.value + \"(\" + t.type + \")\");\n error.name = \"Parsererror\";\n throw error;\n }\n currentToken = this._lookahead(0);\n }\n this._match(TOK_RBRACKET);\n return {\n type: \"Slice\",\n children: parts\n };\n },\n\n _parseComparator: function(left, comparator) {\n var right = this.expression(bindingPower[comparator]);\n return {type: \"Comparator\", name: comparator, children: [left, right]};\n },\n\n _parseDotRHS: function(rbp) {\n var lookahead = this._lookahead(0);\n var exprTokens = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER, TOK_STAR];\n if (exprTokens.indexOf(lookahead) >= 0) {\n return this.expression(rbp);\n } else if (lookahead === TOK_LBRACKET) {\n this._match(TOK_LBRACKET);\n return this._parseMultiselectList();\n } else if (lookahead === TOK_LBRACE) {\n this._match(TOK_LBRACE);\n return this._parseMultiselectHash();\n }\n },\n\n _parseProjectionRHS: function(rbp) {\n var right;\n if (bindingPower[this._lookahead(0)] < 10) {\n right = {type: \"Identity\"};\n } else if (this._lookahead(0) === TOK_LBRACKET) {\n right = this.expression(rbp);\n } else if (this._lookahead(0) === TOK_FILTER) {\n right = this.expression(rbp);\n } else if (this._lookahead(0) === TOK_DOT) {\n this._match(TOK_DOT);\n right = this._parseDotRHS(rbp);\n } else {\n var t = this._lookaheadToken(0);\n var error = new Error(\"Sytanx error, unexpected token: \" +\n t.value + \"(\" + t.type + \")\");\n error.name = \"ParserError\";\n throw error;\n }\n return right;\n },\n\n _parseMultiselectList: function() {\n var expressions = [];\n while (this._lookahead(0) !== TOK_RBRACKET) {\n var expression = this.expression(0);\n expressions.push(expression);\n if (this._lookahead(0) === TOK_COMMA) {\n this._match(TOK_COMMA);\n if (this._lookahead(0) === TOK_RBRACKET) {\n throw new Error(\"Unexpected token Rbracket\");\n }\n }\n }\n this._match(TOK_RBRACKET);\n return {type: \"MultiSelectList\", children: expressions};\n },\n\n _parseMultiselectHash: function() {\n var pairs = [];\n var identifierTypes = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER];\n var keyToken, keyName, value, node;\n for (;;) {\n keyToken = this._lookaheadToken(0);\n if (identifierTypes.indexOf(keyToken.type) < 0) {\n throw new Error(\"Expecting an identifier token, got: \" +\n keyToken.type);\n }\n keyName = keyToken.value;\n this._advance();\n this._match(TOK_COLON);\n value = this.expression(0);\n node = {type: \"KeyValuePair\", name: keyName, value: value};\n pairs.push(node);\n if (this._lookahead(0) === TOK_COMMA) {\n this._match(TOK_COMMA);\n } else if (this._lookahead(0) === TOK_RBRACE) {\n this._match(TOK_RBRACE);\n break;\n }\n }\n return {type: \"MultiSelectHash\", children: pairs};\n }\n };\n\n\n function TreeInterpreter(runtime) {\n this.runtime = runtime;\n }\n\n TreeInterpreter.prototype = {\n search: function(node, value) {\n return this.visit(node, value);\n },\n\n visit: function(node, value) {\n var matched, current, result, first, second, field, left, right, collected, i;\n switch (node.type) {\n case \"Field\":\n if (value === null ) {\n return null;\n } else if (isObject(value)) {\n field = value[node.name];\n if (field === undefined) {\n return null;\n } else {\n return field;\n }\n } else {\n return null;\n }\n break;\n case \"Subexpression\":\n result = this.visit(node.children[0], value);\n for (i = 1; i < node.children.length; i++) {\n result = this.visit(node.children[1], result);\n if (result === null) {\n return null;\n }\n }\n return result;\n case \"IndexExpression\":\n left = this.visit(node.children[0], value);\n right = this.visit(node.children[1], left);\n return right;\n case \"Index\":\n if (!isArray(value)) {\n return null;\n }\n var index = node.value;\n if (index < 0) {\n index = value.length + index;\n }\n result = value[index];\n if (result === undefined) {\n result = null;\n }\n return result;\n case \"Slice\":\n if (!isArray(value)) {\n return null;\n }\n var sliceParams = node.children.slice(0);\n var computed = this.computeSliceParams(value.length, sliceParams);\n var start = computed[0];\n var stop = computed[1];\n var step = computed[2];\n result = [];\n if (step > 0) {\n for (i = start; i < stop; i += step) {\n result.push(value[i]);\n }\n } else {\n for (i = start; i > stop; i += step) {\n result.push(value[i]);\n }\n }\n return result;\n case \"Projection\":\n // Evaluate left child.\n var base = this.visit(node.children[0], value);\n if (!isArray(base)) {\n return null;\n }\n collected = [];\n for (i = 0; i < base.length; i++) {\n current = this.visit(node.children[1], base[i]);\n if (current !== null) {\n collected.push(current);\n }\n }\n return collected;\n case \"ValueProjection\":\n // Evaluate left child.\n base = this.visit(node.children[0], value);\n if (!isObject(base)) {\n return null;\n }\n collected = [];\n var values = objValues(base);\n for (i = 0; i < values.length; i++) {\n current = this.visit(node.children[1], values[i]);\n if (current !== null) {\n collected.push(current);\n }\n }\n return collected;\n case \"FilterProjection\":\n base = this.visit(node.children[0], value);\n if (!isArray(base)) {\n return null;\n }\n var filtered = [];\n var finalResults = [];\n for (i = 0; i < base.length; i++) {\n matched = this.visit(node.children[2], base[i]);\n if (!isFalse(matched)) {\n filtered.push(base[i]);\n }\n }\n for (var j = 0; j < filtered.length; j++) {\n current = this.visit(node.children[1], filtered[j]);\n if (current !== null) {\n finalResults.push(current);\n }\n }\n return finalResults;\n case \"Comparator\":\n first = this.visit(node.children[0], value);\n second = this.visit(node.children[1], value);\n switch(node.name) {\n case TOK_EQ:\n result = strictDeepEqual(first, second);\n break;\n case TOK_NE:\n result = !strictDeepEqual(first, second);\n break;\n case TOK_GT:\n result = first > second;\n break;\n case TOK_GTE:\n result = first >= second;\n break;\n case TOK_LT:\n result = first < second;\n break;\n case TOK_LTE:\n result = first <= second;\n break;\n default:\n throw new Error(\"Unknown comparator: \" + node.name);\n }\n return result;\n case TOK_FLATTEN:\n var original = this.visit(node.children[0], value);\n if (!isArray(original)) {\n return null;\n }\n var merged = [];\n for (i = 0; i < original.length; i++) {\n current = original[i];\n if (isArray(current)) {\n merged.push.apply(merged, current);\n } else {\n merged.push(current);\n }\n }\n return merged;\n case \"Identity\":\n return value;\n case \"MultiSelectList\":\n if (value === null) {\n return null;\n }\n collected = [];\n for (i = 0; i < node.children.length; i++) {\n collected.push(this.visit(node.children[i], value));\n }\n return collected;\n case \"MultiSelectHash\":\n if (value === null) {\n return null;\n }\n collected = {};\n var child;\n for (i = 0; i < node.children.length; i++) {\n child = node.children[i];\n collected[child.name] = this.visit(child.value, value);\n }\n return collected;\n case \"OrExpression\":\n matched = this.visit(node.children[0], value);\n if (isFalse(matched)) {\n matched = this.visit(node.children[1], value);\n }\n return matched;\n case \"AndExpression\":\n first = this.visit(node.children[0], value);\n\n if (isFalse(first) === true) {\n return first;\n }\n return this.visit(node.children[1], value);\n case \"NotExpression\":\n first = this.visit(node.children[0], value);\n return isFalse(first);\n case \"Literal\":\n return node.value;\n case TOK_PIPE:\n left = this.visit(node.children[0], value);\n return this.visit(node.children[1], left);\n case TOK_CURRENT:\n return value;\n case \"Function\":\n var resolvedArgs = [];\n for (i = 0; i < node.children.length; i++) {\n resolvedArgs.push(this.visit(node.children[i], value));\n }\n return this.runtime.callFunction(node.name, resolvedArgs);\n case \"ExpressionReference\":\n var refNode = node.children[0];\n // Tag the node with a specific attribute so the type\n // checker verify the type.\n refNode.jmespathType = TOK_EXPREF;\n return refNode;\n default:\n throw new Error(\"Unknown node type: \" + node.type);\n }\n },\n\n computeSliceParams: function(arrayLength, sliceParams) {\n var start = sliceParams[0];\n var stop = sliceParams[1];\n var step = sliceParams[2];\n var computed = [null, null, null];\n if (step === null) {\n step = 1;\n } else if (step === 0) {\n var error = new Error(\"Invalid slice, step cannot be 0\");\n error.name = \"RuntimeError\";\n throw error;\n }\n var stepValueNegative = step < 0 ? true : false;\n\n if (start === null) {\n start = stepValueNegative ? arrayLength - 1 : 0;\n } else {\n start = this.capSliceRange(arrayLength, start, step);\n }\n\n if (stop === null) {\n stop = stepValueNegative ? -1 : arrayLength;\n } else {\n stop = this.capSliceRange(arrayLength, stop, step);\n }\n computed[0] = start;\n computed[1] = stop;\n computed[2] = step;\n return computed;\n },\n\n capSliceRange: function(arrayLength, actualValue, step) {\n if (actualValue < 0) {\n actualValue += arrayLength;\n if (actualValue < 0) {\n actualValue = step < 0 ? -1 : 0;\n }\n } else if (actualValue >= arrayLength) {\n actualValue = step < 0 ? arrayLength - 1 : arrayLength;\n }\n return actualValue;\n }\n\n };\n\n function Runtime(interpreter) {\n this._interpreter = interpreter;\n this.functionTable = {\n // name: [function, ]\n // The can be:\n //\n // {\n // args: [[type1, type2], [type1, type2]],\n // variadic: true|false\n // }\n //\n // Each arg in the arg list is a list of valid types\n // (if the function is overloaded and supports multiple\n // types. If the type is \"any\" then no type checking\n // occurs on the argument. Variadic is optional\n // and if not provided is assumed to be false.\n abs: {_func: this._functionAbs, _signature: [{types: [TYPE_NUMBER]}]},\n avg: {_func: this._functionAvg, _signature: [{types: [TYPE_ARRAY_NUMBER]}]},\n ceil: {_func: this._functionCeil, _signature: [{types: [TYPE_NUMBER]}]},\n contains: {\n _func: this._functionContains,\n _signature: [{types: [TYPE_STRING, TYPE_ARRAY]},\n {types: [TYPE_ANY]}]},\n \"ends_with\": {\n _func: this._functionEndsWith,\n _signature: [{types: [TYPE_STRING]}, {types: [TYPE_STRING]}]},\n floor: {_func: this._functionFloor, _signature: [{types: [TYPE_NUMBER]}]},\n length: {\n _func: this._functionLength,\n _signature: [{types: [TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT]}]},\n map: {\n _func: this._functionMap,\n _signature: [{types: [TYPE_EXPREF]}, {types: [TYPE_ARRAY]}]},\n max: {\n _func: this._functionMax,\n _signature: [{types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]}]},\n \"merge\": {\n _func: this._functionMerge,\n _signature: [{types: [TYPE_OBJECT], variadic: true}]\n },\n \"max_by\": {\n _func: this._functionMaxBy,\n _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n },\n sum: {_func: this._functionSum, _signature: [{types: [TYPE_ARRAY_NUMBER]}]},\n \"starts_with\": {\n _func: this._functionStartsWith,\n _signature: [{types: [TYPE_STRING]}, {types: [TYPE_STRING]}]},\n min: {\n _func: this._functionMin,\n _signature: [{types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]}]},\n \"min_by\": {\n _func: this._functionMinBy,\n _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n },\n type: {_func: this._functionType, _signature: [{types: [TYPE_ANY]}]},\n keys: {_func: this._functionKeys, _signature: [{types: [TYPE_OBJECT]}]},\n values: {_func: this._functionValues, _signature: [{types: [TYPE_OBJECT]}]},\n sort: {_func: this._functionSort, _signature: [{types: [TYPE_ARRAY_STRING, TYPE_ARRAY_NUMBER]}]},\n \"sort_by\": {\n _func: this._functionSortBy,\n _signature: [{types: [TYPE_ARRAY]}, {types: [TYPE_EXPREF]}]\n },\n join: {\n _func: this._functionJoin,\n _signature: [\n {types: [TYPE_STRING]},\n {types: [TYPE_ARRAY_STRING]}\n ]\n },\n reverse: {\n _func: this._functionReverse,\n _signature: [{types: [TYPE_STRING, TYPE_ARRAY]}]},\n \"to_array\": {_func: this._functionToArray, _signature: [{types: [TYPE_ANY]}]},\n \"to_string\": {_func: this._functionToString, _signature: [{types: [TYPE_ANY]}]},\n \"to_number\": {_func: this._functionToNumber, _signature: [{types: [TYPE_ANY]}]},\n \"not_null\": {\n _func: this._functionNotNull,\n _signature: [{types: [TYPE_ANY], variadic: true}]\n }\n };\n }\n\n Runtime.prototype = {\n callFunction: function(name, resolvedArgs) {\n var functionEntry = this.functionTable[name];\n if (functionEntry === undefined) {\n throw new Error(\"Unknown function: \" + name + \"()\");\n }\n this._validateArgs(name, resolvedArgs, functionEntry._signature);\n return functionEntry._func.call(this, resolvedArgs);\n },\n\n _validateArgs: function(name, args, signature) {\n // Validating the args requires validating\n // the correct arity and the correct type of each arg.\n // If the last argument is declared as variadic, then we need\n // a minimum number of args to be required. Otherwise it has to\n // be an exact amount.\n var pluralized;\n if (signature[signature.length - 1].variadic) {\n if (args.length < signature.length) {\n pluralized = signature.length === 1 ? \" argument\" : \" arguments\";\n throw new Error(\"ArgumentError: \" + name + \"() \" +\n \"takes at least\" + signature.length + pluralized +\n \" but received \" + args.length);\n }\n } else if (args.length !== signature.length) {\n pluralized = signature.length === 1 ? \" argument\" : \" arguments\";\n throw new Error(\"ArgumentError: \" + name + \"() \" +\n \"takes \" + signature.length + pluralized +\n \" but received \" + args.length);\n }\n var currentSpec;\n var actualType;\n var typeMatched;\n for (var i = 0; i < signature.length; i++) {\n typeMatched = false;\n currentSpec = signature[i].types;\n actualType = this._getTypeName(args[i]);\n for (var j = 0; j < currentSpec.length; j++) {\n if (this._typeMatches(actualType, currentSpec[j], args[i])) {\n typeMatched = true;\n break;\n }\n }\n if (!typeMatched) {\n throw new Error(\"TypeError: \" + name + \"() \" +\n \"expected argument \" + (i + 1) +\n \" to be type \" + currentSpec +\n \" but received type \" + actualType +\n \" instead.\");\n }\n }\n },\n\n _typeMatches: function(actual, expected, argValue) {\n if (expected === TYPE_ANY) {\n return true;\n }\n if (expected === TYPE_ARRAY_STRING ||\n expected === TYPE_ARRAY_NUMBER ||\n expected === TYPE_ARRAY) {\n // The expected type can either just be array,\n // or it can require a specific subtype (array of numbers).\n //\n // The simplest case is if \"array\" with no subtype is specified.\n if (expected === TYPE_ARRAY) {\n return actual === TYPE_ARRAY;\n } else if (actual === TYPE_ARRAY) {\n // Otherwise we need to check subtypes.\n // I think this has potential to be improved.\n var subtype;\n if (expected === TYPE_ARRAY_NUMBER) {\n subtype = TYPE_NUMBER;\n } else if (expected === TYPE_ARRAY_STRING) {\n subtype = TYPE_STRING;\n }\n for (var i = 0; i < argValue.length; i++) {\n if (!this._typeMatches(\n this._getTypeName(argValue[i]), subtype,\n argValue[i])) {\n return false;\n }\n }\n return true;\n }\n } else {\n return actual === expected;\n }\n },\n _getTypeName: function(obj) {\n switch (Object.prototype.toString.call(obj)) {\n case \"[object String]\":\n return TYPE_STRING;\n case \"[object Number]\":\n return TYPE_NUMBER;\n case \"[object Array]\":\n return TYPE_ARRAY;\n case \"[object Boolean]\":\n return TYPE_BOOLEAN;\n case \"[object Null]\":\n return TYPE_NULL;\n case \"[object Object]\":\n // Check if it's an expref. If it has, it's been\n // tagged with a jmespathType attr of 'Expref';\n if (obj.jmespathType === TOK_EXPREF) {\n return TYPE_EXPREF;\n } else {\n return TYPE_OBJECT;\n }\n }\n },\n\n _functionStartsWith: function(resolvedArgs) {\n return resolvedArgs[0].lastIndexOf(resolvedArgs[1]) === 0;\n },\n\n _functionEndsWith: function(resolvedArgs) {\n var searchStr = resolvedArgs[0];\n var suffix = resolvedArgs[1];\n return searchStr.indexOf(suffix, searchStr.length - suffix.length) !== -1;\n },\n\n _functionReverse: function(resolvedArgs) {\n var typeName = this._getTypeName(resolvedArgs[0]);\n if (typeName === TYPE_STRING) {\n var originalStr = resolvedArgs[0];\n var reversedStr = \"\";\n for (var i = originalStr.length - 1; i >= 0; i--) {\n reversedStr += originalStr[i];\n }\n return reversedStr;\n } else {\n var reversedArray = resolvedArgs[0].slice(0);\n reversedArray.reverse();\n return reversedArray;\n }\n },\n\n _functionAbs: function(resolvedArgs) {\n return Math.abs(resolvedArgs[0]);\n },\n\n _functionCeil: function(resolvedArgs) {\n return Math.ceil(resolvedArgs[0]);\n },\n\n _functionAvg: function(resolvedArgs) {\n var sum = 0;\n var inputArray = resolvedArgs[0];\n for (var i = 0; i < inputArray.length; i++) {\n sum += inputArray[i];\n }\n return sum / inputArray.length;\n },\n\n _functionContains: function(resolvedArgs) {\n return resolvedArgs[0].indexOf(resolvedArgs[1]) >= 0;\n },\n\n _functionFloor: function(resolvedArgs) {\n return Math.floor(resolvedArgs[0]);\n },\n\n _functionLength: function(resolvedArgs) {\n if (!isObject(resolvedArgs[0])) {\n return resolvedArgs[0].length;\n } else {\n // As far as I can tell, there's no way to get the length\n // of an object without O(n) iteration through the object.\n return Object.keys(resolvedArgs[0]).length;\n }\n },\n\n _functionMap: function(resolvedArgs) {\n var mapped = [];\n var interpreter = this._interpreter;\n var exprefNode = resolvedArgs[0];\n var elements = resolvedArgs[1];\n for (var i = 0; i < elements.length; i++) {\n mapped.push(interpreter.visit(exprefNode, elements[i]));\n }\n return mapped;\n },\n\n _functionMerge: function(resolvedArgs) {\n var merged = {};\n for (var i = 0; i < resolvedArgs.length; i++) {\n var current = resolvedArgs[i];\n for (var key in current) {\n merged[key] = current[key];\n }\n }\n return merged;\n },\n\n _functionMax: function(resolvedArgs) {\n if (resolvedArgs[0].length > 0) {\n var typeName = this._getTypeName(resolvedArgs[0][0]);\n if (typeName === TYPE_NUMBER) {\n return Math.max.apply(Math, resolvedArgs[0]);\n } else {\n var elements = resolvedArgs[0];\n var maxElement = elements[0];\n for (var i = 1; i < elements.length; i++) {\n if (maxElement.localeCompare(elements[i]) < 0) {\n maxElement = elements[i];\n }\n }\n return maxElement;\n }\n } else {\n return null;\n }\n },\n\n _functionMin: function(resolvedArgs) {\n if (resolvedArgs[0].length > 0) {\n var typeName = this._getTypeName(resolvedArgs[0][0]);\n if (typeName === TYPE_NUMBER) {\n return Math.min.apply(Math, resolvedArgs[0]);\n } else {\n var elements = resolvedArgs[0];\n var minElement = elements[0];\n for (var i = 1; i < elements.length; i++) {\n if (elements[i].localeCompare(minElement) < 0) {\n minElement = elements[i];\n }\n }\n return minElement;\n }\n } else {\n return null;\n }\n },\n\n _functionSum: function(resolvedArgs) {\n var sum = 0;\n var listToSum = resolvedArgs[0];\n for (var i = 0; i < listToSum.length; i++) {\n sum += listToSum[i];\n }\n return sum;\n },\n\n _functionType: function(resolvedArgs) {\n switch (this._getTypeName(resolvedArgs[0])) {\n case TYPE_NUMBER:\n return \"number\";\n case TYPE_STRING:\n return \"string\";\n case TYPE_ARRAY:\n return \"array\";\n case TYPE_OBJECT:\n return \"object\";\n case TYPE_BOOLEAN:\n return \"boolean\";\n case TYPE_EXPREF:\n return \"expref\";\n case TYPE_NULL:\n return \"null\";\n }\n },\n\n _functionKeys: function(resolvedArgs) {\n return Object.keys(resolvedArgs[0]);\n },\n\n _functionValues: function(resolvedArgs) {\n var obj = resolvedArgs[0];\n var keys = Object.keys(obj);\n var values = [];\n for (var i = 0; i < keys.length; i++) {\n values.push(obj[keys[i]]);\n }\n return values;\n },\n\n _functionJoin: function(resolvedArgs) {\n var joinChar = resolvedArgs[0];\n var listJoin = resolvedArgs[1];\n return listJoin.join(joinChar);\n },\n\n _functionToArray: function(resolvedArgs) {\n if (this._getTypeName(resolvedArgs[0]) === TYPE_ARRAY) {\n return resolvedArgs[0];\n } else {\n return [resolvedArgs[0]];\n }\n },\n\n _functionToString: function(resolvedArgs) {\n if (this._getTypeName(resolvedArgs[0]) === TYPE_STRING) {\n return resolvedArgs[0];\n } else {\n return JSON.stringify(resolvedArgs[0]);\n }\n },\n\n _functionToNumber: function(resolvedArgs) {\n var typeName = this._getTypeName(resolvedArgs[0]);\n var convertedValue;\n if (typeName === TYPE_NUMBER) {\n return resolvedArgs[0];\n } else if (typeName === TYPE_STRING) {\n convertedValue = +resolvedArgs[0];\n if (!isNaN(convertedValue)) {\n return convertedValue;\n }\n }\n return null;\n },\n\n _functionNotNull: function(resolvedArgs) {\n for (var i = 0; i < resolvedArgs.length; i++) {\n if (this._getTypeName(resolvedArgs[i]) !== TYPE_NULL) {\n return resolvedArgs[i];\n }\n }\n return null;\n },\n\n _functionSort: function(resolvedArgs) {\n var sortedArray = resolvedArgs[0].slice(0);\n sortedArray.sort();\n return sortedArray;\n },\n\n _functionSortBy: function(resolvedArgs) {\n var sortedArray = resolvedArgs[0].slice(0);\n if (sortedArray.length === 0) {\n return sortedArray;\n }\n var interpreter = this._interpreter;\n var exprefNode = resolvedArgs[1];\n var requiredType = this._getTypeName(\n interpreter.visit(exprefNode, sortedArray[0]));\n if ([TYPE_NUMBER, TYPE_STRING].indexOf(requiredType) < 0) {\n throw new Error(\"TypeError\");\n }\n var that = this;\n // In order to get a stable sort out of an unstable\n // sort algorithm, we decorate/sort/undecorate (DSU)\n // by creating a new list of [index, element] pairs.\n // In the cmp function, if the evaluated elements are\n // equal, then the index will be used as the tiebreaker.\n // After the decorated list has been sorted, it will be\n // undecorated to extract the original elements.\n var decorated = [];\n for (var i = 0; i < sortedArray.length; i++) {\n decorated.push([i, sortedArray[i]]);\n }\n decorated.sort(function(a, b) {\n var exprA = interpreter.visit(exprefNode, a[1]);\n var exprB = interpreter.visit(exprefNode, b[1]);\n if (that._getTypeName(exprA) !== requiredType) {\n throw new Error(\n \"TypeError: expected \" + requiredType + \", received \" +\n that._getTypeName(exprA));\n } else if (that._getTypeName(exprB) !== requiredType) {\n throw new Error(\n \"TypeError: expected \" + requiredType + \", received \" +\n that._getTypeName(exprB));\n }\n if (exprA > exprB) {\n return 1;\n } else if (exprA < exprB) {\n return -1;\n } else {\n // If they're equal compare the items by their\n // order to maintain relative order of equal keys\n // (i.e. to get a stable sort).\n return a[0] - b[0];\n }\n });\n // Undecorate: extract out the original list elements.\n for (var j = 0; j < decorated.length; j++) {\n sortedArray[j] = decorated[j][1];\n }\n return sortedArray;\n },\n\n _functionMaxBy: function(resolvedArgs) {\n var exprefNode = resolvedArgs[1];\n var resolvedArray = resolvedArgs[0];\n var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);\n var maxNumber = -Infinity;\n var maxRecord;\n var current;\n for (var i = 0; i < resolvedArray.length; i++) {\n current = keyFunction(resolvedArray[i]);\n if (current > maxNumber) {\n maxNumber = current;\n maxRecord = resolvedArray[i];\n }\n }\n return maxRecord;\n },\n\n _functionMinBy: function(resolvedArgs) {\n var exprefNode = resolvedArgs[1];\n var resolvedArray = resolvedArgs[0];\n var keyFunction = this.createKeyFunction(exprefNode, [TYPE_NUMBER, TYPE_STRING]);\n var minNumber = Infinity;\n var minRecord;\n var current;\n for (var i = 0; i < resolvedArray.length; i++) {\n current = keyFunction(resolvedArray[i]);\n if (current < minNumber) {\n minNumber = current;\n minRecord = resolvedArray[i];\n }\n }\n return minRecord;\n },\n\n createKeyFunction: function(exprefNode, allowedTypes) {\n var that = this;\n var interpreter = this._interpreter;\n var keyFunc = function(x) {\n var current = interpreter.visit(exprefNode, x);\n if (allowedTypes.indexOf(that._getTypeName(current)) < 0) {\n var msg = \"TypeError: expected one of \" + allowedTypes +\n \", received \" + that._getTypeName(current);\n throw new Error(msg);\n }\n return current;\n };\n return keyFunc;\n }\n\n };\n\n function compile(stream) {\n var parser = new Parser();\n var ast = parser.parse(stream);\n return ast;\n }\n\n function tokenize(stream) {\n var lexer = new Lexer();\n return lexer.tokenize(stream);\n }\n\n function search(data, expression) {\n var parser = new Parser();\n // This needs to be improved. Both the interpreter and runtime depend on\n // each other. The runtime needs the interpreter to support exprefs.\n // There's likely a clean way to avoid the cyclic dependency.\n var runtime = new Runtime();\n var interpreter = new TreeInterpreter(runtime);\n runtime._interpreter = interpreter;\n var node = parser.parse(expression);\n return interpreter.search(node, data);\n }\n\n exports.tokenize = tokenize;\n exports.compile = compile;\n exports.search = search;\n exports.strictDeepEqual = strictDeepEqual;\n})(typeof exports === \"undefined\" ? this.jmespath = {} : exports);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/jmespath/jmespath.js\n// module id = 47\n// module chunks = 0 1","/* (ignored) */\n\n\n//////////////////\n// WEBPACK FOOTER\n// fs (ignored)\n// module id = 48\n// module chunks = 0 1","var Buffer = require('buffer').Buffer;\nvar intSize = 4;\nvar zeroBuffer = new Buffer(intSize); zeroBuffer.fill(0);\nvar chrsz = 8;\n\nfunction toArray(buf, bigEndian) {\n if ((buf.length % intSize) !== 0) {\n var len = buf.length + (intSize - (buf.length % intSize));\n buf = Buffer.concat([buf, zeroBuffer], len);\n }\n\n var arr = [];\n var fn = bigEndian ? buf.readInt32BE : buf.readInt32LE;\n for (var i = 0; i < buf.length; i += intSize) {\n arr.push(fn.call(buf, i));\n }\n return arr;\n}\n\nfunction toBuffer(arr, size, bigEndian) {\n var buf = new Buffer(size);\n var fn = bigEndian ? buf.writeInt32BE : buf.writeInt32LE;\n for (var i = 0; i < arr.length; i++) {\n fn.call(buf, arr[i], i * 4, true);\n }\n return buf;\n}\n\nfunction hash(buf, fn, hashSize, bigEndian) {\n if (!Buffer.isBuffer(buf)) buf = new Buffer(buf);\n var arr = fn(toArray(buf, bigEndian), buf.length * chrsz);\n return toBuffer(arr, hashSize, bigEndian);\n}\n\nmodule.exports = { hash: hash };\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../amazon-cognito-identity-js/node_modules/crypto-browserify/helpers.js\n// module id = 49\n// module chunks = 0 1","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of 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 distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nconst Platform = {\n\t'userAgent': 'aws-amplify/0.1.x js',\n\t'product': '',\n\t'navigator': null,\n\t'isReactNative': false\n};\nif (navigator && navigator.product) {\n\tPlatform.product = navigator.product || '';\n\tPlatform.navigator = navigator || null;\n\tswitch(navigator.product) {\n\t\tcase 'ReactNative':\n\t\t\tPlatform.userAgent = 'aws-amplify/0.1.x react-native';\n\t\t\tPlatform.isReactNative = true;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tPlatform.userAgent = 'aws-amplify/0.1.x js';\n\t\t\tPlatform.isReactNative = false;\n\t\t\tbreak;\n\t}\n}\nexport default Platform;\n\n\n\n// WEBPACK FOOTER //\n// ./src/Common/Platform/index.ts","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nexport * from './CacheUtils';\r\nexport { default as CacheList } from './CacheList';\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/Cache/Utils/index.ts","'use strict';\n\nvar utils = require('./utils');\nvar normalizeHeaderName = require('./helpers/normalizeHeaderName');\n\nvar DEFAULT_CONTENT_TYPE = {\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nfunction setContentTypeIfUnset(headers, value) {\n if (!utils.isUndefined(headers) && utils.isUndefined(headers['Content-Type'])) {\n headers['Content-Type'] = value;\n }\n}\n\nfunction getDefaultAdapter() {\n var adapter;\n if (typeof XMLHttpRequest !== 'undefined') {\n // For browsers use XHR adapter\n adapter = require('./adapters/xhr');\n } else if (typeof process !== 'undefined') {\n // For node use HTTP adapter\n adapter = require('./adapters/http');\n }\n return adapter;\n}\n\nvar defaults = {\n adapter: getDefaultAdapter(),\n\n transformRequest: [function transformRequest(data, headers) {\n normalizeHeaderName(headers, 'Content-Type');\n if (utils.isFormData(data) ||\n utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n setContentTypeIfUnset(headers, 'application/x-www-form-urlencoded;charset=utf-8');\n return data.toString();\n }\n if (utils.isObject(data)) {\n setContentTypeIfUnset(headers, 'application/json;charset=utf-8');\n return JSON.stringify(data);\n }\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n /*eslint no-param-reassign:0*/\n if (typeof data === 'string') {\n try {\n data = JSON.parse(data);\n } catch (e) { /* Ignore */ }\n }\n return data;\n }],\n\n timeout: 0,\n\n xsrfCookieName: 'XSRF-TOKEN',\n xsrfHeaderName: 'X-XSRF-TOKEN',\n\n maxContentLength: -1,\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n }\n};\n\ndefaults.headers = {\n common: {\n 'Accept': 'application/json, text/plain, */*'\n }\n};\n\nutils.forEach(['delete', 'get', 'head'], function forEachMethodNoData(method) {\n defaults.headers[method] = {};\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n defaults.headers[method] = utils.merge(DEFAULT_CONTENT_TYPE);\n});\n\nmodule.exports = defaults;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/axios/lib/defaults.js\n// module id = 52\n// module chunks = 0 1","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of 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 distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\n// import * as AWS from 'aws-sdk/global';\nimport * as S3 from 'aws-sdk/clients/s3';\nimport * as AWS from 'aws-sdk/global';\nimport * as Cognito from 'amazon-cognito-identity-js';\nimport * as Pinpoint from 'aws-sdk/clients/pinpoint';\nimport * as MobileAnalytics from 'aws-sdk/clients/mobileanalytics';\n\nexport {AWS, S3, Cognito, Pinpoint, MobileAnalytics };\n\n\n\n// WEBPACK FOOTER //\n// ./src/Common/Facet.ts","var AWS = require('../core');\nvar util = require('../util');\nvar QueryParamSerializer = require('../query/query_param_serializer');\nvar Shape = require('../model/shape');\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\nfunction extractError(resp) {\n var data, body = resp.httpResponse.body.toString();\n if (body.match(' 0) {\n parser = new AWS.XML.Parser();\n var data = parser.parse(body.toString(), output);\n util.update(resp.data, data);\n }\n}\n\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/protocol/rest_xml.js\n// module id = 57\n// module chunks = 0 1","var baseAssignValue = require('./_baseAssignValue'),\n eq = require('./eq');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n}\n\nmodule.exports = assignValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_assignValue.js\n// module id = 58\n// module chunks = 0 1","var defineProperty = require('./_defineProperty');\n\n/**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n}\n\nmodule.exports = baseAssignValue;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_baseAssignValue.js\n// module id = 59\n// module chunks = 0 1","var getNative = require('./_getNative');\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nmodule.exports = defineProperty;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_defineProperty.js\n// module id = 60\n// module chunks = 0 1","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_freeGlobal.js\n// module id = 61\n// module chunks = 0 1","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nmodule.exports = toSource;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_toSource.js\n// module id = 62\n// module chunks = 0 1","var assignValue = require('./_assignValue'),\n baseAssignValue = require('./_baseAssignValue');\n\n/**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\nfunction copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n}\n\nmodule.exports = copyObject;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_copyObject.js\n// module id = 63\n// module chunks = 0 1","var eq = require('./eq'),\n isArrayLike = require('./isArrayLike'),\n isIndex = require('./_isIndex'),\n isObject = require('./isObject');\n\n/**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\nfunction isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n}\n\nmodule.exports = isIterateeCall;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_isIterateeCall.js\n// module id = 64\n// module chunks = 0 1","var isPrototype = require('./_isPrototype'),\n nativeKeys = require('./_nativeKeys');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\nfunction baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n}\n\nmodule.exports = baseKeys;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_baseKeys.js\n// module id = 65\n// module chunks = 0 1","// Generated by CoffeeScript 1.9.1\n(function() {\n var XMLDeclaration, XMLNode, create, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n create = require('lodash/create');\n\n isObject = require('lodash/isObject');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLDeclaration = (function(superClass) {\n extend(XMLDeclaration, superClass);\n\n function XMLDeclaration(parent, version, encoding, standalone) {\n var ref;\n XMLDeclaration.__super__.constructor.call(this, parent);\n if (isObject(version)) {\n ref = version, version = ref.version, encoding = ref.encoding, standalone = ref.standalone;\n }\n if (!version) {\n version = '1.0';\n }\n this.version = this.stringify.xmlVersion(version);\n if (encoding != null) {\n this.encoding = this.stringify.xmlEncoding(encoding);\n }\n if (standalone != null) {\n this.standalone = this.stringify.xmlStandalone(standalone);\n }\n }\n\n XMLDeclaration.prototype.toString = function(options, level) {\n var indent, newline, offset, pretty, r, ref, ref1, ref2, space;\n pretty = (options != null ? options.pretty : void 0) || false;\n indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' ';\n offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0;\n newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\\n';\n level || (level = 0);\n space = new Array(level + offset + 1).join(indent);\n r = '';\n if (pretty) {\n r += space;\n }\n r += '';\n if (pretty) {\n r += newline;\n }\n return r;\n };\n\n return XMLDeclaration;\n\n })(XMLNode);\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/xmlbuilder/lib/XMLDeclaration.js\n// module id = 66\n// module chunks = 0 1","var DataView = require('./_DataView'),\n Map = require('./_Map'),\n Promise = require('./_Promise'),\n Set = require('./_Set'),\n WeakMap = require('./_WeakMap'),\n baseGetTag = require('./_baseGetTag'),\n toSource = require('./_toSource');\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n setTag = '[object Set]',\n weakMapTag = '[object WeakMap]';\n\nvar dataViewTag = '[object DataView]';\n\n/** Used to detect maps, sets, and weakmaps. */\nvar dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n/**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nvar getTag = baseGetTag;\n\n// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\nif ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n}\n\nmodule.exports = getTag;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_getTag.js\n// module id = 67\n// module chunks = 0 1","// Generated by CoffeeScript 1.9.1\n(function() {\n var XMLAttribute, XMLElement, XMLNode, XMLProcessingInstruction, create, every, isFunction, isObject,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n create = require('lodash/create');\n\n isObject = require('lodash/isObject');\n\n isFunction = require('lodash/isFunction');\n\n every = require('lodash/every');\n\n XMLNode = require('./XMLNode');\n\n XMLAttribute = require('./XMLAttribute');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n module.exports = XMLElement = (function(superClass) {\n extend(XMLElement, superClass);\n\n function XMLElement(parent, name, attributes) {\n XMLElement.__super__.constructor.call(this, parent);\n if (name == null) {\n throw new Error(\"Missing element name\");\n }\n this.name = this.stringify.eleName(name);\n this.children = [];\n this.instructions = [];\n this.attributes = {};\n if (attributes != null) {\n this.attribute(attributes);\n }\n }\n\n XMLElement.prototype.clone = function() {\n var att, attName, clonedSelf, i, len, pi, ref, ref1;\n clonedSelf = create(XMLElement.prototype, this);\n if (clonedSelf.isRoot) {\n clonedSelf.documentObject = null;\n }\n clonedSelf.attributes = {};\n ref = this.attributes;\n for (attName in ref) {\n if (!hasProp.call(ref, attName)) continue;\n att = ref[attName];\n clonedSelf.attributes[attName] = att.clone();\n }\n clonedSelf.instructions = [];\n ref1 = this.instructions;\n for (i = 0, len = ref1.length; i < len; i++) {\n pi = ref1[i];\n clonedSelf.instructions.push(pi.clone());\n }\n clonedSelf.children = [];\n this.children.forEach(function(child) {\n var clonedChild;\n clonedChild = child.clone();\n clonedChild.parent = clonedSelf;\n return clonedSelf.children.push(clonedChild);\n });\n return clonedSelf;\n };\n\n XMLElement.prototype.attribute = function(name, value) {\n var attName, attValue;\n if (name != null) {\n name = name.valueOf();\n }\n if (isObject(name)) {\n for (attName in name) {\n if (!hasProp.call(name, attName)) continue;\n attValue = name[attName];\n this.attribute(attName, attValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n if (!this.options.skipNullAttributes || (value != null)) {\n this.attributes[name] = new XMLAttribute(this, name, value);\n }\n }\n return this;\n };\n\n XMLElement.prototype.removeAttribute = function(name) {\n var attName, i, len;\n if (name == null) {\n throw new Error(\"Missing attribute name\");\n }\n name = name.valueOf();\n if (Array.isArray(name)) {\n for (i = 0, len = name.length; i < len; i++) {\n attName = name[i];\n delete this.attributes[attName];\n }\n } else {\n delete this.attributes[name];\n }\n return this;\n };\n\n XMLElement.prototype.instruction = function(target, value) {\n var i, insTarget, insValue, instruction, len;\n if (target != null) {\n target = target.valueOf();\n }\n if (value != null) {\n value = value.valueOf();\n }\n if (Array.isArray(target)) {\n for (i = 0, len = target.length; i < len; i++) {\n insTarget = target[i];\n this.instruction(insTarget);\n }\n } else if (isObject(target)) {\n for (insTarget in target) {\n if (!hasProp.call(target, insTarget)) continue;\n insValue = target[insTarget];\n this.instruction(insTarget, insValue);\n }\n } else {\n if (isFunction(value)) {\n value = value.apply();\n }\n instruction = new XMLProcessingInstruction(this, target, value);\n this.instructions.push(instruction);\n }\n return this;\n };\n\n XMLElement.prototype.toString = function(options, level) {\n var att, child, i, indent, instruction, j, len, len1, name, newline, offset, pretty, r, ref, ref1, ref2, ref3, ref4, ref5, space;\n pretty = (options != null ? options.pretty : void 0) || false;\n indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' ';\n offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0;\n newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\\n';\n level || (level = 0);\n space = new Array(level + offset + 1).join(indent);\n r = '';\n ref3 = this.instructions;\n for (i = 0, len = ref3.length; i < len; i++) {\n instruction = ref3[i];\n r += instruction.toString(options, level);\n }\n if (pretty) {\n r += space;\n }\n r += '<' + this.name;\n ref4 = this.attributes;\n for (name in ref4) {\n if (!hasProp.call(ref4, name)) continue;\n att = ref4[name];\n r += att.toString(options);\n }\n if (this.children.length === 0 || every(this.children, function(e) {\n return e.value === '';\n })) {\n r += '/>';\n if (pretty) {\n r += newline;\n }\n } else if (pretty && this.children.length === 1 && (this.children[0].value != null)) {\n r += '>';\n r += this.children[0].value;\n r += '';\n r += newline;\n } else {\n r += '>';\n if (pretty) {\n r += newline;\n }\n ref5 = this.children;\n for (j = 0, len1 = ref5.length; j < len1; j++) {\n child = ref5[j];\n r += child.toString(options, level + 1);\n }\n if (pretty) {\n r += space;\n }\n r += '';\n if (pretty) {\n r += newline;\n }\n }\n return r;\n };\n\n XMLElement.prototype.att = function(name, value) {\n return this.attribute(name, value);\n };\n\n XMLElement.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLElement.prototype.a = function(name, value) {\n return this.attribute(name, value);\n };\n\n XMLElement.prototype.i = function(target, value) {\n return this.instruction(target, value);\n };\n\n return XMLElement;\n\n })(XMLNode);\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/xmlbuilder/lib/XMLElement.js\n// module id = 68\n// module chunks = 0 1","var ListCache = require('./_ListCache'),\n stackClear = require('./_stackClear'),\n stackDelete = require('./_stackDelete'),\n stackGet = require('./_stackGet'),\n stackHas = require('./_stackHas'),\n stackSet = require('./_stackSet');\n\n/**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nmodule.exports = Stack;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_Stack.js\n// module id = 69\n// module chunks = 0 1","var baseIsEqualDeep = require('./_baseIsEqualDeep'),\n isObjectLike = require('./isObjectLike');\n\n/**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\nfunction baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n}\n\nmodule.exports = baseIsEqual;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_baseIsEqual.js\n// module id = 70\n// module chunks = 0 1","var SetCache = require('./_SetCache'),\n arraySome = require('./_arraySome'),\n cacheHas = require('./_cacheHas');\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\nfunction equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n}\n\nmodule.exports = equalArrays;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_equalArrays.js\n// module id = 71\n// module chunks = 0 1","var isObject = require('./isObject');\n\n/**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nmodule.exports = isStrictComparable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_isStrictComparable.js\n// module id = 72\n// module chunks = 0 1","/**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\nfunction matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n}\n\nmodule.exports = matchesStrictComparable;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_matchesStrictComparable.js\n// module id = 73\n// module chunks = 0 1","var castPath = require('./_castPath'),\n toKey = require('./_toKey');\n\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n}\n\nmodule.exports = baseGet;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_baseGet.js\n// module id = 74\n// module chunks = 0 1","var isArray = require('./isArray'),\n isKey = require('./_isKey'),\n stringToPath = require('./_stringToPath'),\n toString = require('./toString');\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nmodule.exports = castPath;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/lodash/_castPath.js\n// module id = 75\n// module chunks = 0 1","// Generated by CoffeeScript 1.9.1\n(function() {\n var XMLProcessingInstruction, create;\n\n create = require('lodash/create');\n\n module.exports = XMLProcessingInstruction = (function() {\n function XMLProcessingInstruction(parent, target, value) {\n this.stringify = parent.stringify;\n if (target == null) {\n throw new Error(\"Missing instruction target\");\n }\n this.target = this.stringify.insTarget(target);\n if (value) {\n this.value = this.stringify.insValue(value);\n }\n }\n\n XMLProcessingInstruction.prototype.clone = function() {\n return create(XMLProcessingInstruction.prototype, this);\n };\n\n XMLProcessingInstruction.prototype.toString = function(options, level) {\n var indent, newline, offset, pretty, r, ref, ref1, ref2, space;\n pretty = (options != null ? options.pretty : void 0) || false;\n indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' ';\n offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0;\n newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\\n';\n level || (level = 0);\n space = new Array(level + offset + 1).join(indent);\n r = '';\n if (pretty) {\n r += space;\n }\n r += '';\n if (pretty) {\n r += newline;\n }\n return r;\n };\n\n return XMLProcessingInstruction;\n\n })();\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/xmlbuilder/lib/XMLProcessingInstruction.js\n// module id = 76\n// module chunks = 0 1","// Generated by CoffeeScript 1.9.1\n(function() {\n var XMLCData, XMLNode, create,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n create = require('lodash/create');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLCData = (function(superClass) {\n extend(XMLCData, superClass);\n\n function XMLCData(parent, text) {\n XMLCData.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing CDATA text\");\n }\n this.text = this.stringify.cdata(text);\n }\n\n XMLCData.prototype.clone = function() {\n return create(XMLCData.prototype, this);\n };\n\n XMLCData.prototype.toString = function(options, level) {\n var indent, newline, offset, pretty, r, ref, ref1, ref2, space;\n pretty = (options != null ? options.pretty : void 0) || false;\n indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' ';\n offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0;\n newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\\n';\n level || (level = 0);\n space = new Array(level + offset + 1).join(indent);\n r = '';\n if (pretty) {\n r += space;\n }\n r += '';\n if (pretty) {\n r += newline;\n }\n return r;\n };\n\n return XMLCData;\n\n })(XMLNode);\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/xmlbuilder/lib/XMLCData.js\n// module id = 77\n// module chunks = 0 1","// Generated by CoffeeScript 1.9.1\n(function() {\n var XMLComment, XMLNode, create,\n extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n hasProp = {}.hasOwnProperty;\n\n create = require('lodash/create');\n\n XMLNode = require('./XMLNode');\n\n module.exports = XMLComment = (function(superClass) {\n extend(XMLComment, superClass);\n\n function XMLComment(parent, text) {\n XMLComment.__super__.constructor.call(this, parent);\n if (text == null) {\n throw new Error(\"Missing comment text\");\n }\n this.text = this.stringify.comment(text);\n }\n\n XMLComment.prototype.clone = function() {\n return create(XMLComment.prototype, this);\n };\n\n XMLComment.prototype.toString = function(options, level) {\n var indent, newline, offset, pretty, r, ref, ref1, ref2, space;\n pretty = (options != null ? options.pretty : void 0) || false;\n indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' ';\n offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0;\n newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\\n';\n level || (level = 0);\n space = new Array(level + offset + 1).join(indent);\n r = '';\n if (pretty) {\n r += space;\n }\n r += '';\n if (pretty) {\n r += newline;\n }\n return r;\n };\n\n return XMLComment;\n\n })(XMLNode);\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/xmlbuilder/lib/XMLComment.js\n// module id = 78\n// module chunks = 0 1","// Generated by CoffeeScript 1.9.1\n(function() {\n var XMLCData, XMLComment, XMLDTDAttList, XMLDTDElement, XMLDTDEntity, XMLDTDNotation, XMLDocType, XMLProcessingInstruction, create, isObject;\n\n create = require('lodash/create');\n\n isObject = require('lodash/isObject');\n\n XMLCData = require('./XMLCData');\n\n XMLComment = require('./XMLComment');\n\n XMLDTDAttList = require('./XMLDTDAttList');\n\n XMLDTDEntity = require('./XMLDTDEntity');\n\n XMLDTDElement = require('./XMLDTDElement');\n\n XMLDTDNotation = require('./XMLDTDNotation');\n\n XMLProcessingInstruction = require('./XMLProcessingInstruction');\n\n module.exports = XMLDocType = (function() {\n function XMLDocType(parent, pubID, sysID) {\n var ref, ref1;\n this.documentObject = parent;\n this.stringify = this.documentObject.stringify;\n this.children = [];\n if (isObject(pubID)) {\n ref = pubID, pubID = ref.pubID, sysID = ref.sysID;\n }\n if (sysID == null) {\n ref1 = [pubID, sysID], sysID = ref1[0], pubID = ref1[1];\n }\n if (pubID != null) {\n this.pubID = this.stringify.dtdPubID(pubID);\n }\n if (sysID != null) {\n this.sysID = this.stringify.dtdSysID(sysID);\n }\n }\n\n XMLDocType.prototype.element = function(name, value) {\n var child;\n child = new XMLDTDElement(this, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.attList = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n var child;\n child = new XMLDTDAttList(this, elementName, attributeName, attributeType, defaultValueType, defaultValue);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.entity = function(name, value) {\n var child;\n child = new XMLDTDEntity(this, false, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.pEntity = function(name, value) {\n var child;\n child = new XMLDTDEntity(this, true, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.notation = function(name, value) {\n var child;\n child = new XMLDTDNotation(this, name, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.cdata = function(value) {\n var child;\n child = new XMLCData(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.comment = function(value) {\n var child;\n child = new XMLComment(this, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.instruction = function(target, value) {\n var child;\n child = new XMLProcessingInstruction(this, target, value);\n this.children.push(child);\n return this;\n };\n\n XMLDocType.prototype.root = function() {\n return this.documentObject.root();\n };\n\n XMLDocType.prototype.document = function() {\n return this.documentObject;\n };\n\n XMLDocType.prototype.toString = function(options, level) {\n var child, i, indent, len, newline, offset, pretty, r, ref, ref1, ref2, ref3, space;\n pretty = (options != null ? options.pretty : void 0) || false;\n indent = (ref = options != null ? options.indent : void 0) != null ? ref : ' ';\n offset = (ref1 = options != null ? options.offset : void 0) != null ? ref1 : 0;\n newline = (ref2 = options != null ? options.newline : void 0) != null ? ref2 : '\\n';\n level || (level = 0);\n space = new Array(level + offset + 1).join(indent);\n r = '';\n if (pretty) {\n r += space;\n }\n r += ' 0) {\n r += ' [';\n if (pretty) {\n r += newline;\n }\n ref3 = this.children;\n for (i = 0, len = ref3.length; i < len; i++) {\n child = ref3[i];\n r += child.toString(options, level + 1);\n }\n r += ']';\n }\n r += '>';\n if (pretty) {\n r += newline;\n }\n return r;\n };\n\n XMLDocType.prototype.ele = function(name, value) {\n return this.element(name, value);\n };\n\n XMLDocType.prototype.att = function(elementName, attributeName, attributeType, defaultValueType, defaultValue) {\n return this.attList(elementName, attributeName, attributeType, defaultValueType, defaultValue);\n };\n\n XMLDocType.prototype.ent = function(name, value) {\n return this.entity(name, value);\n };\n\n XMLDocType.prototype.pent = function(name, value) {\n return this.pEntity(name, value);\n };\n\n XMLDocType.prototype.not = function(name, value) {\n return this.notation(name, value);\n };\n\n XMLDocType.prototype.dat = function(value) {\n return this.cdata(value);\n };\n\n XMLDocType.prototype.com = function(value) {\n return this.comment(value);\n };\n\n XMLDocType.prototype.ins = function(target, value) {\n return this.instruction(target, value);\n };\n\n XMLDocType.prototype.up = function() {\n return this.root();\n };\n\n XMLDocType.prototype.doc = function() {\n return this.document();\n };\n\n return XMLDocType;\n\n })();\n\n}).call(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/xmlbuilder/lib/XMLDocType.js\n// module id = 79\n// module chunks = 0 1","var Collection = require('./collection');\nvar Operation = require('./operation');\nvar Shape = require('./shape');\nvar Paginator = require('./paginator');\nvar ResourceWaiter = require('./resource_waiter');\n\nvar util = require('../util');\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Api(api, options) {\n api = api || {};\n options = options || {};\n options.api = this;\n\n api.metadata = api.metadata || {};\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\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 property(this, 'operations', new Collection(api.operations, options, function(name, operation) {\n return new Operation(name, operation, options);\n }, util.string.lowerFirst));\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}\n\nmodule.exports = Api;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/model/api.js\n// module id = 80\n// module chunks = 0 1","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, 'httpMethod', operation.http.method || 'POST');\n property(this, 'httpPath', operation.http.requestUri || '/');\n property(this, 'authtype', operation.authtype || '');\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}\n\nmodule.exports = Operation;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/model/operation.js\n// module id = 81\n// module chunks = 0 1","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\nmodule.exports = Paginator;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/model/paginator.js\n// module id = 82\n// module chunks = 0 1","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\nmodule.exports = ResourceWaiter;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/model/resource_waiter.js\n// module id = 83\n// module chunks = 0 1","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 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/**\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/credentials.js\n// module id = 84\n// module chunks = 0 1","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 },\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 if (this.providers.length === 0) {\n callback(new Error('No providers'));\n return this;\n }\n\n var index = 0;\n var providers = this.providers.slice(0);\n\n function resolveNext(err, creds) {\n if ((!err && creds) || index === providers.length) {\n callback(err, creds);\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 return this;\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.SharedIniFileCredentials(); },\n * function () {\n * // if AWS_CONTAINER_CREDENTIALS_RELATIVE_URI is set\n * return new AWS.ECSCredentials();\n * // else\n * return new AWS.EC2MetadataCredentials();\n * }\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/credentials/credential_provider_chain.js\n// module id = 85\n// module chunks = 0 1","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\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/http.js\n// module id = 86\n// module chunks = 0 1","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 * @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) {\n if (this._events[eventName]) {\n this._events[eventName].push(listener);\n } else {\n this._events[eventName] = [listener];\n }\n return this;\n },\n\n /**\n * @api private\n */\n onAsync: function onAsync(eventName, listener) {\n listener._isAsync = true;\n return this.on(eventName, listener);\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) {\n this[name] = callback;\n this.addListener(eventName, callback);\n return this;\n },\n\n /**\n * @api private\n */\n addNamedAsyncListener: function addNamedAsyncListener(name, eventName, callback) {\n callback._isAsync = true;\n return this.addNamedListener(name, eventName, callback);\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\nmodule.exports = AWS.SequentialExecutor;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/sequential_executor.js\n// module id = 87\n// module chunks = 0 1","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\nmodule.exports = AWS.Signers.V3;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/signers/v3.js\n// module id = 88\n// module chunks = 0 1","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\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\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/lib/signers/v4_credentials.js\n// module id = 89\n// module chunks = 0 1","// Unique ID creation requires a high quality random # generator. In the\n// browser this is a little complicated due to unknown quality of Math.random()\n// and inconsistent support for the `crypto` API. We do the best we can via\n// feature-detection\nvar rng;\n\nvar crypto = global.crypto || global.msCrypto; // for IE 11\nif (crypto && crypto.getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n rng = function whatwgRNG() {\n crypto.getRandomValues(rnds8);\n return rnds8;\n };\n}\n\nif (!rng) {\n // Math.random()-based (RNG)\n //\n // If all else fails, use Math.random(). It's fast, but is of unspecified\n // quality.\n var rnds = new Array(16);\n rng = function() {\n for (var i = 0, r; i < 16; i++) {\n if ((i & 0x03) === 0) r = Math.random() * 0x100000000;\n rnds[i] = r >>> ((i & 0x03) << 3) & 0xff;\n }\n\n return rnds;\n };\n}\n\nmodule.exports = rng;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/node_modules/uuid/lib/rng-browser.js\n// module id = 90\n// module chunks = 0 1","/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\nfor (var i = 0; i < 256; ++i) {\n byteToHex[i] = (i + 0x100).toString(16).substr(1);\n}\n\nfunction bytesToUuid(buf, offset) {\n var i = offset || 0;\n var bth = byteToHex;\n return bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] + '-' +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]] +\n bth[buf[i++]] + bth[buf[i++]];\n}\n\nmodule.exports = bytesToUuid;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/node_modules/uuid/lib/bytesToUuid.js\n// module id = 91\n// module chunks = 0 1","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/url/url.js\n// module id = 92\n// module chunks = 0 1","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/querystring-es3/index.js\n// module id = 93\n// module chunks = 0 1","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Buffer } from 'buffer/';\nimport * as crypto from 'crypto-browserify';\nvar createHash = crypto.createHash;\nvar createHmac = crypto.createHmac;\nvar randomBytes = crypto.randomBytes;\n\nimport BigInteger from './BigInteger';\n\nvar initN = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1' + '29024E088A67CC74020BBEA63B139B22514A08798E3404DD' + 'EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245' + 'E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D' + 'C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F' + '83655D23DCA3AD961C62F356208552BB9ED529077096966D' + '670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' + 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9' + 'DE2BCBF6955817183995497CEA956AE515D2261898FA0510' + '15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64' + 'ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' + 'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B' + 'F12FFA06D98A0864D87602733EC86A64521F2B18177B200C' + 'BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31' + '43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF';\n\nvar newPasswordRequiredChallengeUserAttributePrefix = 'userAttributes.';\n\n/** @class */\n\nvar AuthenticationHelper = function () {\n /**\n * Constructs a new AuthenticationHelper object\n * @param {string} PoolName Cognito user pool name.\n */\n function AuthenticationHelper(PoolName) {\n _classCallCheck(this, AuthenticationHelper);\n\n this.N = new BigInteger(initN, 16);\n this.g = new BigInteger('2', 16);\n this.k = new BigInteger(this.hexHash('00' + this.N.toString(16) + '0' + this.g.toString(16)), 16);\n\n this.smallAValue = this.generateRandomSmallA();\n this.getLargeAValue(function () {});\n\n this.infoBits = Buffer.from('Caldera Derived Key', 'utf8');\n\n this.poolName = PoolName;\n }\n\n /**\n * @returns {BigInteger} small A, a random number\n */\n\n\n AuthenticationHelper.prototype.getSmallAValue = function getSmallAValue() {\n return this.smallAValue;\n };\n\n /**\n * @param {nodeCallback} callback Called with (err, largeAValue)\n * @returns {void}\n */\n\n\n AuthenticationHelper.prototype.getLargeAValue = function getLargeAValue(callback) {\n var _this = this;\n\n if (this.largeAValue) {\n callback(null, this.largeAValue);\n } else {\n this.calculateA(this.smallAValue, function (err, largeAValue) {\n if (err) {\n callback(err, null);\n }\n\n _this.largeAValue = largeAValue;\n callback(null, _this.largeAValue);\n });\n }\n };\n\n /**\n * helper function to generate a random big integer\n * @returns {BigInteger} a random value.\n * @private\n */\n\n\n AuthenticationHelper.prototype.generateRandomSmallA = function generateRandomSmallA() {\n var hexRandom = randomBytes(128).toString('hex');\n\n var randomBigInt = new BigInteger(hexRandom, 16);\n var smallABigInt = randomBigInt.mod(this.N);\n\n return smallABigInt;\n };\n\n /**\n * helper function to generate a random string\n * @returns {string} a random value.\n * @private\n */\n\n\n AuthenticationHelper.prototype.generateRandomString = function generateRandomString() {\n return randomBytes(40).toString('base64');\n };\n\n /**\n * @returns {string} Generated random value included in password hash.\n */\n\n\n AuthenticationHelper.prototype.getRandomPassword = function getRandomPassword() {\n return this.randomPassword;\n };\n\n /**\n * @returns {string} Generated random value included in devices hash.\n */\n\n\n AuthenticationHelper.prototype.getSaltDevices = function getSaltDevices() {\n return this.SaltToHashDevices;\n };\n\n /**\n * @returns {string} Value used to verify devices.\n */\n\n\n AuthenticationHelper.prototype.getVerifierDevices = function getVerifierDevices() {\n return this.verifierDevices;\n };\n\n /**\n * Generate salts and compute verifier.\n * @param {string} deviceGroupKey Devices to generate verifier for.\n * @param {string} username User to generate verifier for.\n * @param {nodeCallback} callback Called with (err, null)\n * @returns {void}\n */\n\n\n AuthenticationHelper.prototype.generateHashDevice = function generateHashDevice(deviceGroupKey, username, callback) {\n var _this2 = this;\n\n this.randomPassword = this.generateRandomString();\n var combinedString = '' + deviceGroupKey + username + ':' + this.randomPassword;\n var hashedString = this.hash(combinedString);\n\n var hexRandom = randomBytes(16).toString('hex');\n this.SaltToHashDevices = this.padHex(new BigInteger(hexRandom, 16));\n\n this.g.modPow(new BigInteger(this.hexHash(this.SaltToHashDevices + hashedString), 16), this.N, function (err, verifierDevicesNotPadded) {\n if (err) {\n callback(err, null);\n }\n\n _this2.verifierDevices = _this2.padHex(verifierDevicesNotPadded);\n callback(null, null);\n });\n };\n\n /**\n * Calculate the client's public value A = g^a%N\n * with the generated random number a\n * @param {BigInteger} a Randomly generated small A.\n * @param {nodeCallback} callback Called with (err, largeAValue)\n * @returns {void}\n * @private\n */\n\n\n AuthenticationHelper.prototype.calculateA = function calculateA(a, callback) {\n var _this3 = this;\n\n this.g.modPow(a, this.N, function (err, A) {\n if (err) {\n callback(err, null);\n }\n\n if (A.mod(_this3.N).equals(BigInteger.ZERO)) {\n callback(new Error('Illegal paramater. A mod N cannot be 0.'), null);\n }\n\n callback(null, A);\n });\n };\n\n /**\n * Calculate the client's value U which is the hash of A and B\n * @param {BigInteger} A Large A value.\n * @param {BigInteger} B Server B value.\n * @returns {BigInteger} Computed U value.\n * @private\n */\n\n\n AuthenticationHelper.prototype.calculateU = function calculateU(A, B) {\n this.UHexHash = this.hexHash(this.padHex(A) + this.padHex(B));\n var finalU = new BigInteger(this.UHexHash, 16);\n\n return finalU;\n };\n\n /**\n * Calculate a hash from a bitArray\n * @param {Buffer} buf Value to hash.\n * @returns {String} Hex-encoded hash.\n * @private\n */\n\n\n AuthenticationHelper.prototype.hash = function hash(buf) {\n var hashHex = createHash('sha256').update(buf).digest('hex');\n return new Array(64 - hashHex.length).join('0') + hashHex;\n };\n\n /**\n * Calculate a hash from a hex string\n * @param {String} hexStr Value to hash.\n * @returns {String} Hex-encoded hash.\n * @private\n */\n\n\n AuthenticationHelper.prototype.hexHash = function hexHash(hexStr) {\n return this.hash(Buffer.from(hexStr, 'hex'));\n };\n\n /**\n * Standard hkdf algorithm\n * @param {Buffer} ikm Input key material.\n * @param {Buffer} salt Salt value.\n * @returns {Buffer} Strong key material.\n * @private\n */\n\n\n AuthenticationHelper.prototype.computehkdf = function computehkdf(ikm, salt) {\n var prk = createHmac('sha256', salt).update(ikm).digest();\n var infoBitsUpdate = Buffer.concat([this.infoBits, Buffer.from(String.fromCharCode(1), 'utf8')]);\n var hmac = createHmac('sha256', prk).update(infoBitsUpdate).digest();\n return hmac.slice(0, 16);\n };\n\n /**\n * Calculates the final hkdf based on computed S value, and computed U value and the key\n * @param {String} username Username.\n * @param {String} password Password.\n * @param {BigInteger} serverBValue Server B value.\n * @param {BigInteger} salt Generated salt.\n * @param {nodeCallback} callback Called with (err, hkdfValue)\n * @returns {void}\n */\n\n\n AuthenticationHelper.prototype.getPasswordAuthenticationKey = function getPasswordAuthenticationKey(username, password, serverBValue, salt, callback) {\n var _this4 = this;\n\n if (serverBValue.mod(this.N).equals(BigInteger.ZERO)) {\n throw new Error('B cannot be zero.');\n }\n\n this.UValue = this.calculateU(this.largeAValue, serverBValue);\n\n if (this.UValue.equals(BigInteger.ZERO)) {\n throw new Error('U cannot be zero.');\n }\n\n var usernamePassword = '' + this.poolName + username + ':' + password;\n var usernamePasswordHash = this.hash(usernamePassword);\n\n var xValue = new BigInteger(this.hexHash(this.padHex(salt) + usernamePasswordHash), 16);\n this.calculateS(xValue, serverBValue, function (err, sValue) {\n if (err) {\n callback(err, null);\n }\n\n var hkdf = _this4.computehkdf(Buffer.from(_this4.padHex(sValue), 'hex'), Buffer.from(_this4.padHex(_this4.UValue.toString(16)), 'hex'));\n\n callback(null, hkdf);\n });\n };\n\n /**\n * Calculates the S value used in getPasswordAuthenticationKey\n * @param {BigInteger} xValue Salted password hash value.\n * @param {BigInteger} serverBValue Server B value.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n AuthenticationHelper.prototype.calculateS = function calculateS(xValue, serverBValue, callback) {\n var _this5 = this;\n\n this.g.modPow(xValue, this.N, function (err, gModPowXN) {\n if (err) {\n callback(err, null);\n }\n\n var intValue2 = serverBValue.subtract(_this5.k.multiply(gModPowXN));\n intValue2.modPow(_this5.smallAValue.add(_this5.UValue.multiply(xValue)), _this5.N, function (err2, result) {\n if (err2) {\n callback(err2, null);\n }\n\n callback(null, result.mod(_this5.N));\n });\n });\n };\n\n /**\n * Return constant newPasswordRequiredChallengeUserAttributePrefix\n * @return {newPasswordRequiredChallengeUserAttributePrefix} constant prefix value\n */\n\n\n AuthenticationHelper.prototype.getNewPasswordRequiredChallengeUserAttributePrefix = function getNewPasswordRequiredChallengeUserAttributePrefix() {\n return newPasswordRequiredChallengeUserAttributePrefix;\n };\n\n /**\n * Converts a BigInteger (or hex string) to hex format padded with zeroes for hashing\n * @param {BigInteger|String} bigInt Number or string to pad.\n * @returns {String} Padded hex string.\n */\n\n\n AuthenticationHelper.prototype.padHex = function padHex(bigInt) {\n var hashStr = bigInt.toString(16);\n if (hashStr.length % 2 === 1) {\n hashStr = '0' + hashStr;\n } else if ('89ABCDEFabcdef'.indexOf(hashStr[0]) !== -1) {\n hashStr = '00' + hashStr;\n }\n return hashStr;\n };\n\n return AuthenticationHelper;\n}();\n\nexport default AuthenticationHelper;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/AuthenticationHelper.js","var Buffer = require('buffer').Buffer\nvar sha = require('./sha')\nvar sha256 = require('./sha256')\nvar rng = require('./rng')\nvar md5 = require('./md5')\n\nvar algorithms = {\n sha1: sha,\n sha256: sha256,\n md5: md5\n}\n\nvar blocksize = 64\nvar zeroBuffer = new Buffer(blocksize); zeroBuffer.fill(0)\nfunction hmac(fn, key, data) {\n if(!Buffer.isBuffer(key)) key = new Buffer(key)\n if(!Buffer.isBuffer(data)) data = new Buffer(data)\n\n if(key.length > blocksize) {\n key = fn(key)\n } else if(key.length < blocksize) {\n key = Buffer.concat([key, zeroBuffer], blocksize)\n }\n\n var ipad = new Buffer(blocksize), opad = new Buffer(blocksize)\n for(var i = 0; i < blocksize; i++) {\n ipad[i] = key[i] ^ 0x36\n opad[i] = key[i] ^ 0x5C\n }\n\n var hash = fn(Buffer.concat([ipad, data]))\n return fn(Buffer.concat([opad, hash]))\n}\n\nfunction hash(alg, key) {\n alg = alg || 'sha1'\n var fn = algorithms[alg]\n var bufs = []\n var length = 0\n if(!fn) error('algorithm:', alg, 'is not yet supported')\n return {\n update: function (data) {\n if(!Buffer.isBuffer(data)) data = new Buffer(data)\n \n bufs.push(data)\n length += data.length\n return this\n },\n digest: function (enc) {\n var buf = Buffer.concat(bufs)\n var r = key ? hmac(fn, key, buf) : fn(buf)\n bufs = null\n return enc ? r.toString(enc) : r\n }\n }\n}\n\nfunction error () {\n var m = [].slice.call(arguments).join(' ')\n throw new Error([\n m,\n 'we accept pull requests',\n 'http://github.com/dominictarr/crypto-browserify'\n ].join('\\n'))\n}\n\nexports.createHash = function (alg) { return hash(alg) }\nexports.createHmac = function (alg, key) { return hash(alg, key) }\nexports.randomBytes = function(size, callback) {\n if (callback && callback.call) {\n try {\n callback.call(this, undefined, new Buffer(rng(size)))\n } catch (err) { callback(err) }\n } else {\n return new Buffer(rng(size))\n }\n}\n\nfunction each(a, f) {\n for(var i in a)\n f(a[i], i)\n}\n\n// the least I can do is make error messages for the rest of the node.js/crypto api.\neach(['createCredentials'\n, 'createCipher'\n, 'createCipheriv'\n, 'createDecipher'\n, 'createDecipheriv'\n, 'createSign'\n, 'createVerify'\n, 'createDiffieHellman'\n, 'pbkdf2'], function (name) {\n exports[name] = function () {\n error('sorry,', name, 'is not implemented yet')\n }\n})\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ../amazon-cognito-identity-js/node_modules/crypto-browserify/index.js\n// module id = 95\n// module chunks = 0 1","// A small implementation of BigInteger based on http://www-cs-students.stanford.edu/~tjw/jsbn/\n//\n// All public methods have been removed except the following:\n// new BigInteger(a, b) (only radix 2, 4, 8, 16 and 32 supported)\n// toString (only radix 2, 4, 8, 16 and 32 supported)\n// negate\n// abs\n// compareTo\n// bitLength\n// mod\n// equals\n// add\n// subtract\n// multiply\n// divide\n// modPow\n\nexport default BigInteger;\n\n/*\n * Copyright (c) 2003-2005 Tom Wu\n * All Rights Reserved.\n *\n * Permission is hereby granted, free of charge, to any person obtaining\n * a copy of this software and associated documentation files (the\n * \"Software\"), to deal in the Software without restriction, including\n * without limitation the rights to use, copy, modify, merge, publish,\n * distribute, sublicense, and/or sell copies of the Software, and to\n * permit persons to whom the Software is furnished to do so, subject to\n * the following conditions:\n *\n * The above copyright notice and this permission notice shall be\n * included in all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS-IS\" AND WITHOUT WARRANTY OF ANY KIND,\n * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY\n * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.\n *\n * IN NO EVENT SHALL TOM WU BE LIABLE FOR ANY SPECIAL, INCIDENTAL,\n * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER\n * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF\n * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT\n * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n *\n * In addition, the following condition applies:\n *\n * All redistributions must retain an intact copy of this copyright notice\n * and disclaimer.\n */\n\n// (public) Constructor\nfunction BigInteger(a, b) {\n if (a != null) this.fromString(a, b);\n}\n\n// return new, unset BigInteger\nfunction nbi() {\n return new BigInteger(null);\n}\n\n// Bits per digit\nvar dbits;\n\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = (canary & 0xffffff) == 0xefcafe;\n\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\n\n// am1: use a single mult and divide to get the high bits,\n// max digit bits should be 26 because\n// max internal value = 2*dvalue^2-2*dvalue (< 2^53)\nfunction am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n}\n// am2 avoids a big mult-and-extract completely.\n// Max digit bits should be <= 30 because we do bitwise ops\n// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\nfunction am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff,\n xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n}\n// Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\nfunction am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff,\n xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n}\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && navigator.appName == \"Microsoft Internet Explorer\") {\n BigInteger.prototype.am = am2;\n dbits = 30;\n} else if (inBrowser && j_lm && navigator.appName != \"Netscape\") {\n BigInteger.prototype.am = am1;\n dbits = 26;\n} else {\n // Mozilla/Netscape seems to prefer am3\n BigInteger.prototype.am = am3;\n dbits = 28;\n}\n\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = (1 << dbits) - 1;\nBigInteger.prototype.DV = 1 << dbits;\n\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n\n// Digit conversions\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nvar BI_RC = new Array();\nvar rr, vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}rr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}rr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}function int2char(n) {\n return BI_RM.charAt(n);\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return c == null ? -1 : c;\n}\n\n// (protected) copy this to r\nfunction bnpCopyTo(r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }r.t = this.t;\n r.s = this.s;\n}\n\n// (protected) set from integer value x, -DV <= x < DV\nfunction bnpFromInt(x) {\n this.t = 1;\n this.s = x < 0 ? -1 : 0;\n if (x > 0) this[0] = x;else if (x < -1) this[0] = x + this.DV;else this.t = 0;\n}\n\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n\n r.fromInt(i);\n\n return r;\n}\n\n// (protected) set from string and radix\nfunction bnpFromString(s, b) {\n var k;\n if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error(\"Only radix 2, 4, 8, 16, 32 are supported\");\n this.t = 0;\n this.s = 0;\n var i = s.length,\n mi = false,\n sh = 0;\n while (--i >= 0) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") mi = true;\n continue;\n }\n mi = false;\n if (sh == 0) this[this.t++] = x;else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & (1 << this.DB - sh) - 1) << sh;\n this[this.t++] = x >> this.DB - sh;\n } else this[this.t - 1] |= x << sh;\n sh += k;\n if (sh >= this.DB) sh -= this.DB;\n }\n this.clamp();\n if (mi) BigInteger.ZERO.subTo(this, this);\n}\n\n// (protected) clamp off excess high words\nfunction bnpClamp() {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n}\n\n// (public) return string representation in given radix\nfunction bnToString(b) {\n if (this.s < 0) return \"-\" + this.negate().toString();\n var k;\n if (b == 16) k = 4;else if (b == 8) k = 3;else if (b == 2) k = 1;else if (b == 32) k = 5;else if (b == 4) k = 2;else throw new Error(\"Only radix 2, 4, 8, 16, 32 are supported\");\n var km = (1 << k) - 1,\n d,\n m = false,\n r = \"\",\n i = this.t;\n var p = this.DB - i * this.DB % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = int2char(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & (1 << p) - 1) << k - p;\n d |= this[--i] >> (p += this.DB - k);\n } else {\n d = this[i] >> (p -= k) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) m = true;\n if (m) r += int2char(d);\n }\n }\n return m ? r : \"0\";\n}\n\n// (public) -this\nfunction bnNegate() {\n var r = nbi();\n\n BigInteger.ZERO.subTo(this, r);\n\n return r;\n}\n\n// (public) |this|\nfunction bnAbs() {\n return this.s < 0 ? this.negate() : this;\n}\n\n// (public) return + if this > a, - if this < a, 0 if equal\nfunction bnCompareTo(a) {\n var r = this.s - a.s;\n if (r != 0) return r;\n var i = this.t;\n r = i - a.t;\n if (r != 0) return this.s < 0 ? -r : r;\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) return r;\n }return 0;\n}\n\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1,\n t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n\n// (public) return the number of bits in \"this\"\nfunction bnBitLength() {\n if (this.t <= 0) return 0;\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ this.s & this.DM);\n}\n\n// (protected) r = this << n*DB\nfunction bnpDLShiftTo(n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }r.t = this.t + n;\n r.s = this.s;\n}\n\n// (protected) r = this >> n*DB\nfunction bnpDRShiftTo(n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n}\n\n// (protected) r = this << n\nfunction bnpLShiftTo(n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB),\n c = this.s << bs & this.DM,\n i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = this[i] >> cbs | c;\n c = (this[i] & bm) << bs;\n }\n for (i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n}\n\n// (protected) r = this >> n\nfunction bnpRShiftTo(n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\n r.t = this.t - ds;\n r.clamp();\n}\n\n// (protected) r = this - a\nfunction bnpSubTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n } else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = c < 0 ? -1 : 0;\n if (c < -1) r[i++] = this.DV + c;else if (c > 0) r[i++] = c;\n r.t = i;\n r.clamp();\n}\n\n// (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\nfunction bnpMultiplyTo(a, r) {\n var x = this.abs(),\n y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }r.s = 0;\n r.clamp();\n if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\n}\n\n// (protected) r = this^2, r != this (HAC 14.16)\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n r.s = 0;\n r.clamp();\n}\n\n// (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n// r != q, this != m. q or r may be null.\nfunction bnpDivRemTo(m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) return;\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) q.fromInt(0);\n if (r != null) this.copyTo(r);\n return;\n }\n if (r == null) r = nbi();\n var y = nbi(),\n ts = this.s,\n ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]);\n // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n } else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) return;\n var yt = y0 * (1 << this.F1) + (ys > 1 ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt,\n d2 = (1 << this.F1) / yt,\n e = 1 << this.F2;\n var i = r.t,\n j = i - ys,\n t = q == null ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y);\n // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }while (--j >= 0) {\n // Estimate quotient digit\n var qd = r[--i] == y0 ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) {\n // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) BigInteger.ZERO.subTo(q, q);\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) r.rShiftTo(nsh, r);\n // Denormalize remainder\n if (ts < 0) BigInteger.ZERO.subTo(r, r);\n}\n\n// (public) this mod a\nfunction bnMod(a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) a.subTo(r, r);\n return r;\n}\n\n// (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n// justification:\n// xy == 1 (mod m)\n// xy = 1+km\n// xy(2-xy) = (1+km)(1-km)\n// x[y(2-xy)] = 1-k^2m^2\n// x[y(2-xy)] == 1 (mod m^2)\n// if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n// should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n// JS multiply \"overflows\" differently from C/C++, so care is needed here.\nfunction bnpInvDigit() {\n if (this.t < 1) return 0;\n var x = this[0];\n if ((x & 1) == 0) return 0;\n var y = x & 3;\n // y == 1/x mod 2^2\n y = y * (2 - (x & 0xf) * y) & 0xf;\n // y == 1/x mod 2^4\n y = y * (2 - (x & 0xff) * y) & 0xff;\n // y == 1/x mod 2^8\n y = y * (2 - ((x & 0xffff) * y & 0xffff)) & 0xffff;\n // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = y * (2 - x * y % this.DV) % this.DV;\n // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return y > 0 ? this.DV - y : -y;\n}\n\nfunction bnEquals(a) {\n return this.compareTo(a) == 0;\n}\n\n// (protected) r = this + a\nfunction bnpAddTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] + a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n } else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = c < 0 ? -1 : 0;\n if (c > 0) r[i++] = c;else if (c < -1) r[i++] = this.DV + c;\n r.t = i;\n r.clamp();\n}\n\n// (public) this + a\nfunction bnAdd(a) {\n var r = nbi();\n\n this.addTo(a, r);\n\n return r;\n}\n\n// (public) this - a\nfunction bnSubtract(a) {\n var r = nbi();\n\n this.subTo(a, r);\n\n return r;\n}\n\n// (public) this * a\nfunction bnMultiply(a) {\n var r = nbi();\n\n this.multiplyTo(a, r);\n\n return r;\n}\n\n// (public) this / a\nfunction bnDivide(a) {\n var r = nbi();\n\n this.divRemTo(a, r, null);\n\n return r;\n}\n\n// Montgomery reduction\nfunction Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << m.DB - 15) - 1;\n this.mt2 = 2 * m.t;\n}\n\n// xR mod m\nfunction montConvert(x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) this.m.subTo(r, r);\n return r;\n}\n\n// x/R mod m\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n}\n\n// x = x/R mod m (HAC 14.32)\nfunction montReduce(x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = j * this.mpl + ((j * this.mph + (x[i] >> 15) * this.mpl & this.um) << 15) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) x.subTo(this.m, x);\n}\n\n// r = \"x^2/R mod m\"; x != r\nfunction montSqrTo(x, r) {\n x.squareTo(r);\n\n this.reduce(r);\n}\n\n// r = \"xy/R mod m\"; x,y != r\nfunction montMulTo(x, y, r) {\n x.multiplyTo(y, r);\n\n this.reduce(r);\n}\n\nMontgomery.prototype.convert = montConvert;\nMontgomery.prototype.revert = montRevert;\nMontgomery.prototype.reduce = montReduce;\nMontgomery.prototype.mulTo = montMulTo;\nMontgomery.prototype.sqrTo = montSqrTo;\n\n// (public) this^e % m (HAC 14.85)\nfunction bnModPow(e, m, callback) {\n var i = e.bitLength(),\n k,\n r = nbv(1),\n z = new Montgomery(m);\n if (i <= 0) return r;else if (i < 18) k = 1;else if (i < 48) k = 3;else if (i < 144) k = 4;else if (i < 768) k = 5;else k = 6;\n\n // precomputation\n var g = new Array(),\n n = 3,\n k1 = k - 1,\n km = (1 << k) - 1;\n g[1] = z.convert(this);\n if (k > 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n\n var j = e.t - 1,\n w,\n is1 = true,\n r2 = nbi(),\n t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) w = e[j] >> i - k1 & km;else {\n w = (e[j] & (1 << i + 1) - 1) << k1 - i;\n if (j > 0) w |= e[j - 1] >> this.DB + i - k1;\n }\n\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) {\n // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n } else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) z.sqrTo(r, r2);else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n\n while (j >= 0 && (e[j] & 1 << i) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n var result = z.revert(r);\n callback(null, result);\n return result;\n}\n\n// protected\nBigInteger.prototype.copyTo = bnpCopyTo;\nBigInteger.prototype.fromInt = bnpFromInt;\nBigInteger.prototype.fromString = bnpFromString;\nBigInteger.prototype.clamp = bnpClamp;\nBigInteger.prototype.dlShiftTo = bnpDLShiftTo;\nBigInteger.prototype.drShiftTo = bnpDRShiftTo;\nBigInteger.prototype.lShiftTo = bnpLShiftTo;\nBigInteger.prototype.rShiftTo = bnpRShiftTo;\nBigInteger.prototype.subTo = bnpSubTo;\nBigInteger.prototype.multiplyTo = bnpMultiplyTo;\nBigInteger.prototype.squareTo = bnpSquareTo;\nBigInteger.prototype.divRemTo = bnpDivRemTo;\nBigInteger.prototype.invDigit = bnpInvDigit;\nBigInteger.prototype.addTo = bnpAddTo;\n\n// public\nBigInteger.prototype.toString = bnToString;\nBigInteger.prototype.negate = bnNegate;\nBigInteger.prototype.abs = bnAbs;\nBigInteger.prototype.compareTo = bnCompareTo;\nBigInteger.prototype.bitLength = bnBitLength;\nBigInteger.prototype.mod = bnMod;\nBigInteger.prototype.equals = bnEquals;\nBigInteger.prototype.add = bnAdd;\nBigInteger.prototype.subtract = bnSubtract;\nBigInteger.prototype.multiply = bnMultiply;\nBigInteger.prototype.divide = bnDivide;\nBigInteger.prototype.modPow = bnModPow;\n\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/BigInteger.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/*\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport CognitoJwtToken from './CognitoJwtToken';\n\n/** @class */\n\nvar CognitoAccessToken = function (_CognitoJwtToken) {\n _inherits(CognitoAccessToken, _CognitoJwtToken);\n\n /**\n * Constructs a new CognitoAccessToken object\n * @param {string=} AccessToken The JWT access token.\n */\n function CognitoAccessToken() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n AccessToken = _ref.AccessToken;\n\n _classCallCheck(this, CognitoAccessToken);\n\n return _possibleConstructorReturn(this, _CognitoJwtToken.call(this, AccessToken || ''));\n }\n\n return CognitoAccessToken;\n}(CognitoJwtToken);\n\nexport default CognitoAccessToken;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/CognitoAccessToken.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Buffer } from 'buffer/';\n\n/** @class */\n\nvar CognitoJwtToken = function () {\n /**\n * Constructs a new CognitoJwtToken object\n * @param {string=} token The JWT token.\n */\n function CognitoJwtToken(token) {\n _classCallCheck(this, CognitoJwtToken);\n\n // Assign object\n this.jwtToken = token || '';\n this.payload = this.decodePayload();\n }\n\n /**\n * @returns {string} the record's token.\n */\n\n\n CognitoJwtToken.prototype.getJwtToken = function getJwtToken() {\n return this.jwtToken;\n };\n\n /**\n * @returns {int} the token's expiration (exp member).\n */\n\n\n CognitoJwtToken.prototype.getExpiration = function getExpiration() {\n return this.payload.exp;\n };\n\n /**\n * @returns {int} the token's \"issued at\" (iat member).\n */\n\n\n CognitoJwtToken.prototype.getIssuedAt = function getIssuedAt() {\n return this.payload.iat;\n };\n\n /**\n * @returns {object} the token's payload.\n */\n\n\n CognitoJwtToken.prototype.decodePayload = function decodePayload() {\n var payload = this.jwtToken.split('.')[1];\n try {\n return JSON.parse(Buffer.from(payload, 'base64').toString('utf8'));\n } catch (err) {\n return {};\n }\n };\n\n return CognitoJwtToken;\n}();\n\nexport default CognitoJwtToken;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/CognitoJwtToken.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport CognitoJwtToken from './CognitoJwtToken';\n\n/** @class */\n\nvar CognitoIdToken = function (_CognitoJwtToken) {\n _inherits(CognitoIdToken, _CognitoJwtToken);\n\n /**\n * Constructs a new CognitoIdToken object\n * @param {string=} IdToken The JWT Id token\n */\n function CognitoIdToken() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n IdToken = _ref.IdToken;\n\n _classCallCheck(this, CognitoIdToken);\n\n return _possibleConstructorReturn(this, _CognitoJwtToken.call(this, IdToken || ''));\n }\n\n return CognitoIdToken;\n}(CognitoJwtToken);\n\nexport default CognitoIdToken;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/CognitoIdToken.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoRefreshToken = function () {\n /**\n * Constructs a new CognitoRefreshToken object\n * @param {string=} RefreshToken The JWT refresh token.\n */\n function CognitoRefreshToken() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n RefreshToken = _ref.RefreshToken;\n\n _classCallCheck(this, CognitoRefreshToken);\n\n // Assign object\n this.token = RefreshToken || '';\n }\n\n /**\n * @returns {string} the record's token.\n */\n\n\n CognitoRefreshToken.prototype.getToken = function getToken() {\n return this.token;\n };\n\n return CognitoRefreshToken;\n}();\n\nexport default CognitoRefreshToken;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/CognitoRefreshToken.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Buffer } from 'buffer/';\n//import createHmac from 'create-hmac';\nimport * as crypto from 'crypto-browserify';\nvar createHmac = crypto.createHmac;\n\nimport BigInteger from './BigInteger';\nimport AuthenticationHelper from './AuthenticationHelper';\nimport CognitoAccessToken from './CognitoAccessToken';\nimport CognitoIdToken from './CognitoIdToken';\nimport CognitoRefreshToken from './CognitoRefreshToken';\nimport CognitoUserSession from './CognitoUserSession';\nimport DateHelper from './DateHelper';\nimport CognitoUserAttribute from './CognitoUserAttribute';\nimport StorageHelper from './StorageHelper';\n\n/**\n * @callback nodeCallback\n * @template T result\n * @param {*} err The operation failure reason, or null.\n * @param {T} result The operation result.\n */\n\n/**\n * @callback onFailure\n * @param {*} err Failure reason.\n */\n\n/**\n * @callback onSuccess\n * @template T result\n * @param {T} result The operation result.\n */\n\n/**\n * @callback mfaRequired\n * @param {*} details MFA challenge details.\n */\n\n/**\n * @callback customChallenge\n * @param {*} details Custom challenge details.\n */\n\n/**\n * @callback inputVerificationCode\n * @param {*} data Server response.\n */\n\n/**\n * @callback authSuccess\n * @param {CognitoUserSession} session The new session.\n * @param {bool=} userConfirmationNecessary User must be confirmed.\n */\n\n/** @class */\n\nvar CognitoUser = function () {\n /**\n * Constructs a new CognitoUser object\n * @param {object} data Creation options\n * @param {string} data.Username The user's username.\n * @param {CognitoUserPool} data.Pool Pool containing the user.\n * @param {object} data.Storage Optional storage object.\n */\n function CognitoUser(data) {\n _classCallCheck(this, CognitoUser);\n\n if (data == null || data.Username == null || data.Pool == null) {\n throw new Error('Username and pool information are required.');\n }\n\n this.username = data.Username || '';\n this.pool = data.Pool;\n this.Session = null;\n\n this.client = data.Pool.client;\n\n this.signInUserSession = null;\n this.authenticationFlowType = 'USER_SRP_AUTH';\n\n this.storage = data.Storage || new StorageHelper().getStorage();\n }\n\n /**\n * Sets the session for this user\n * @param {CognitoUserSession} signInUserSession the session\n * @returns {void}\n */\n\n\n CognitoUser.prototype.setSignInUserSession = function setSignInUserSession(signInUserSession) {\n this.clearCachedTokens();\n this.signInUserSession = signInUserSession;\n this.cacheTokens();\n };\n\n /**\n * @returns {CognitoUserSession} the current session for this user\n */\n\n\n CognitoUser.prototype.getSignInUserSession = function getSignInUserSession() {\n return this.signInUserSession;\n };\n\n /**\n * @returns {string} the user's username\n */\n\n\n CognitoUser.prototype.getUsername = function getUsername() {\n return this.username;\n };\n\n /**\n * @returns {String} the authentication flow type\n */\n\n\n CognitoUser.prototype.getAuthenticationFlowType = function getAuthenticationFlowType() {\n return this.authenticationFlowType;\n };\n\n /**\n * sets authentication flow type\n * @param {string} authenticationFlowType New value.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.setAuthenticationFlowType = function setAuthenticationFlowType(authenticationFlowType) {\n this.authenticationFlowType = authenticationFlowType;\n };\n\n /**\n * This is used for authenticating the user through the custom authentication flow.\n * @param {AuthenticationDetails} authDetails Contains the authentication data\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.initiateAuth = function initiateAuth(authDetails, callback) {\n var _this = this;\n\n var authParameters = authDetails.getAuthParameters();\n authParameters.USERNAME = this.username;\n\n var jsonReq = {\n AuthFlow: 'CUSTOM_AUTH',\n ClientId: this.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: authDetails.getValidationData()\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('InitiateAuth', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n var challengeName = data.ChallengeName;\n var challengeParameters = data.ChallengeParameters;\n\n if (challengeName === 'CUSTOM_CHALLENGE') {\n _this.Session = data.Session;\n return callback.customChallenge(challengeParameters);\n }\n _this.signInUserSession = _this.getCognitoUserSession(data.AuthenticationResult);\n _this.cacheTokens();\n return callback.onSuccess(_this.signInUserSession);\n });\n };\n\n /**\n * This is used for authenticating the user. it calls the AuthenticationHelper for SRP related\n * stuff\n * @param {AuthenticationDetails} authDetails Contains the authentication data\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {newPasswordRequired} callback.newPasswordRequired new\n * password and any required attributes are required to continue\n * @param {mfaRequired} callback.mfaRequired MFA code\n * required to continue.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.authenticateUser = function authenticateUser(authDetails, callback) {\n var _this2 = this;\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n var dateHelper = new DateHelper();\n\n var serverBValue = void 0;\n var salt = void 0;\n var authParameters = {};\n\n if (this.deviceKey != null) {\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n authParameters.USERNAME = this.username;\n authenticationHelper.getLargeAValue(function (errOnAValue, aValue) {\n // getLargeAValue callback start\n if (errOnAValue) {\n callback.onFailure(errOnAValue);\n }\n\n authParameters.SRP_A = aValue.toString(16);\n\n if (_this2.authenticationFlowType === 'CUSTOM_AUTH') {\n authParameters.CHALLENGE_NAME = 'SRP_A';\n }\n\n var jsonReq = {\n AuthFlow: _this2.authenticationFlowType,\n ClientId: _this2.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: authDetails.getValidationData()\n };\n if (_this2.getUserContextData(_this2.username)) {\n jsonReq.UserContextData = _this2.getUserContextData(_this2.username);\n }\n\n _this2.client.request('InitiateAuth', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeParameters = data.ChallengeParameters;\n\n _this2.username = challengeParameters.USER_ID_FOR_SRP;\n serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n salt = new BigInteger(challengeParameters.SALT, 16);\n _this2.getCachedDeviceKeyAndPassword();\n\n authenticationHelper.getPasswordAuthenticationKey(_this2.username, authDetails.getPassword(), serverBValue, salt, function (errOnHkdf, hkdf) {\n // getPasswordAuthenticationKey callback start\n if (errOnHkdf) {\n callback.onFailure(errOnHkdf);\n }\n\n var dateNow = dateHelper.getNowString();\n\n var signatureString = createHmac('sha256', hkdf).update(Buffer.concat([Buffer.from(_this2.pool.getUserPoolId().split('_')[1], 'utf8'), Buffer.from(_this2.username, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')])).digest('base64');\n\n var challengeResponses = {};\n\n challengeResponses.USERNAME = _this2.username;\n challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n challengeResponses.TIMESTAMP = dateNow;\n challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n\n if (_this2.deviceKey != null) {\n challengeResponses.DEVICE_KEY = _this2.deviceKey;\n }\n\n var respondToAuthChallenge = function respondToAuthChallenge(challenge, challengeCallback) {\n return _this2.client.request('RespondToAuthChallenge', challenge, function (errChallenge, dataChallenge) {\n if (errChallenge && errChallenge.code === 'ResourceNotFoundException' && errChallenge.message.toLowerCase().indexOf('device') !== -1) {\n challengeResponses.DEVICE_KEY = null;\n _this2.deviceKey = null;\n _this2.randomPassword = null;\n _this2.deviceGroupKey = null;\n _this2.clearCachedDeviceKeyAndPassword();\n return respondToAuthChallenge(challenge, challengeCallback);\n }\n return challengeCallback(errChallenge, dataChallenge);\n });\n };\n\n var jsonReqResp = {\n ChallengeName: 'PASSWORD_VERIFIER',\n ClientId: _this2.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: data.Session\n };\n if (_this2.getUserContextData()) {\n jsonReqResp.UserContextData = _this2.getUserContextData();\n }\n respondToAuthChallenge(jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n var challengeName = dataAuthenticate.ChallengeName;\n if (challengeName === 'NEW_PASSWORD_REQUIRED') {\n _this2.Session = dataAuthenticate.Session;\n var userAttributes = null;\n var rawRequiredAttributes = null;\n var requiredAttributes = [];\n var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n\n if (dataAuthenticate.ChallengeParameters) {\n userAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.userAttributes);\n rawRequiredAttributes = JSON.parse(dataAuthenticate.ChallengeParameters.requiredAttributes);\n }\n\n if (rawRequiredAttributes) {\n for (var i = 0; i < rawRequiredAttributes.length; i++) {\n requiredAttributes[i] = rawRequiredAttributes[i].substr(userAttributesPrefix.length);\n }\n }\n return callback.newPasswordRequired(userAttributes, requiredAttributes);\n }\n return _this2.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n });\n return undefined;\n // getPasswordAuthenticationKey callback end\n });\n return undefined;\n });\n // getLargeAValue callback end\n });\n };\n\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n * @param {object} dataAuthenticate authentication data\n * @param {object} authenticationHelper helper created\n * @param {callback} callback passed on from caller\n * @returns {void}\n */\n\n\n CognitoUser.prototype.authenticateUserInternal = function authenticateUserInternal(dataAuthenticate, authenticationHelper, callback) {\n var _this3 = this;\n\n var challengeName = dataAuthenticate.ChallengeName;\n var challengeParameters = dataAuthenticate.ChallengeParameters;\n\n if (challengeName === 'SMS_MFA') {\n this.Session = dataAuthenticate.Session;\n return callback.mfaRequired(challengeName, challengeParameters);\n }\n\n if (challengeName === 'SELECT_MFA_TYPE') {\n this.Session = dataAuthenticate.Session;\n return callback.selectMFAType(challengeName, challengeParameters);\n }\n\n if (challengeName === 'MFA_SETUP') {\n this.Session = dataAuthenticate.Session;\n return callback.mfaSetup(challengeName, challengeParameters);\n }\n\n if (challengeName === 'SOFTWARE_TOKEN_MFA') {\n this.Session = dataAuthenticate.Session;\n return callback.totpRequired(challengeName, challengeParameters);\n }\n\n if (challengeName === 'CUSTOM_CHALLENGE') {\n this.Session = dataAuthenticate.Session;\n return callback.customChallenge(challengeParameters);\n }\n\n if (challengeName === 'DEVICE_SRP_AUTH') {\n this.getDeviceResponse(callback);\n return undefined;\n }\n\n this.signInUserSession = this.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n this.cacheTokens();\n\n var newDeviceMetadata = dataAuthenticate.AuthenticationResult.NewDeviceMetadata;\n if (newDeviceMetadata == null) {\n return callback.onSuccess(this.signInUserSession);\n }\n\n authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n if (errGenHash) {\n return callback.onFailure(errGenHash);\n }\n\n var deviceSecretVerifierConfig = {\n Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n };\n\n _this3.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n _this3.deviceGroupKey = newDeviceMetadata.DeviceGroupKey;\n _this3.randomPassword = authenticationHelper.getRandomPassword();\n\n _this3.client.request('ConfirmDevice', {\n DeviceKey: newDeviceMetadata.DeviceKey,\n AccessToken: _this3.signInUserSession.getAccessToken().getJwtToken(),\n DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n DeviceName: navigator.userAgent\n }, function (errConfirm, dataConfirm) {\n if (errConfirm) {\n return callback.onFailure(errConfirm);\n }\n\n _this3.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n _this3.cacheDeviceKeyAndPassword();\n if (dataConfirm.UserConfirmationNecessary === true) {\n return callback.onSuccess(_this3.signInUserSession, dataConfirm.UserConfirmationNecessary);\n }\n return callback.onSuccess(_this3.signInUserSession);\n });\n return undefined;\n });\n return undefined;\n };\n\n /**\n * This method is user to complete the NEW_PASSWORD_REQUIRED challenge.\n * Pass the new password with any new user attributes to be updated.\n * User attribute keys must be of format userAttributes..\n * @param {string} newPassword new password for this user\n * @param {object} requiredAttributeData map with values for all required attributes\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {mfaRequired} callback.mfaRequired MFA code required to continue.\n * @param {customChallenge} callback.customChallenge Custom challenge\n * response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.completeNewPasswordChallenge = function completeNewPasswordChallenge(newPassword, requiredAttributeData, callback) {\n var _this4 = this;\n\n if (!newPassword) {\n return callback.onFailure(new Error('New password is required.'));\n }\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n\n var finalUserAttributes = {};\n if (requiredAttributeData) {\n Object.keys(requiredAttributeData).forEach(function (key) {\n finalUserAttributes[userAttributesPrefix + key] = requiredAttributeData[key];\n });\n }\n\n finalUserAttributes.NEW_PASSWORD = newPassword;\n finalUserAttributes.USERNAME = this.username;\n var jsonReq = {\n ChallengeName: 'NEW_PASSWORD_REQUIRED',\n ClientId: this.pool.getClientId(),\n ChallengeResponses: finalUserAttributes,\n Session: this.Session\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n return _this4.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n });\n return undefined;\n };\n\n /**\n * This is used to get a session using device authentication. It is called at the end of user\n * authentication\n *\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n * @private\n */\n\n\n CognitoUser.prototype.getDeviceResponse = function getDeviceResponse(callback) {\n var _this5 = this;\n\n var authenticationHelper = new AuthenticationHelper(this.deviceGroupKey);\n var dateHelper = new DateHelper();\n\n var authParameters = {};\n\n authParameters.USERNAME = this.username;\n authParameters.DEVICE_KEY = this.deviceKey;\n authenticationHelper.getLargeAValue(function (errAValue, aValue) {\n // getLargeAValue callback start\n if (errAValue) {\n callback.onFailure(errAValue);\n }\n\n authParameters.SRP_A = aValue.toString(16);\n\n var jsonReq = {\n ChallengeName: 'DEVICE_SRP_AUTH',\n ClientId: _this5.pool.getClientId(),\n ChallengeResponses: authParameters\n };\n if (_this5.getUserContextData()) {\n jsonReq.UserContextData = _this5.getUserContextData();\n }\n _this5.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeParameters = data.ChallengeParameters;\n\n var serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n var salt = new BigInteger(challengeParameters.SALT, 16);\n\n authenticationHelper.getPasswordAuthenticationKey(_this5.deviceKey, _this5.randomPassword, serverBValue, salt, function (errHkdf, hkdf) {\n // getPasswordAuthenticationKey callback start\n if (errHkdf) {\n return callback.onFailure(errHkdf);\n }\n\n var dateNow = dateHelper.getNowString();\n\n var signatureString = createHmac('sha256', hkdf).update(Buffer.concat([Buffer.from(_this5.deviceGroupKey, 'utf8'), Buffer.from(_this5.deviceKey, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')])).digest('base64');\n\n var challengeResponses = {};\n\n challengeResponses.USERNAME = _this5.username;\n challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n challengeResponses.TIMESTAMP = dateNow;\n challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n challengeResponses.DEVICE_KEY = _this5.deviceKey;\n\n var jsonReqResp = {\n ChallengeName: 'DEVICE_PASSWORD_VERIFIER',\n ClientId: _this5.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: data.Session\n };\n if (_this5.getUserContextData()) {\n jsonReqResp.UserContextData = _this5.getUserContextData();\n }\n\n _this5.client.request('RespondToAuthChallenge', jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n _this5.signInUserSession = _this5.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n _this5.cacheTokens();\n\n return callback.onSuccess(_this5.signInUserSession);\n });\n return undefined;\n // getPasswordAuthenticationKey callback end\n });\n return undefined;\n });\n // getLargeAValue callback end\n });\n };\n\n /**\n * This is used for a certain user to confirm the registration by using a confirmation code\n * @param {string} confirmationCode Code entered by user.\n * @param {bool} forceAliasCreation Allow migrating from an existing email / phone number.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.confirmRegistration = function confirmRegistration(confirmationCode, forceAliasCreation, callback) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n ConfirmationCode: confirmationCode,\n Username: this.username,\n ForceAliasCreation: forceAliasCreation\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n this.client.request('ConfirmSignUp', jsonReq, function (err) {\n if (err) {\n return callback(err, null);\n }\n return callback(null, 'SUCCESS');\n });\n };\n\n /**\n * This is used by the user once he has the responses to a custom challenge\n * @param {string} answerChallenge The custom challange answer.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {customChallenge} callback.customChallenge\n * Custom challenge response required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.sendCustomChallengeAnswer = function sendCustomChallengeAnswer(answerChallenge, callback) {\n var _this6 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.ANSWER = answerChallenge;\n var jsonReq = {\n ChallengeName: 'CUSTOM_CHALLENGE',\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeName = data.ChallengeName;\n\n if (challengeName === 'CUSTOM_CHALLENGE') {\n _this6.Session = data.Session;\n return callback.customChallenge(data.ChallengeParameters);\n }\n\n _this6.signInUserSession = _this6.getCognitoUserSession(data.AuthenticationResult);\n _this6.cacheTokens();\n return callback.onSuccess(_this6.signInUserSession);\n });\n };\n\n /**\n * This is used by the user once he has an MFA code\n * @param {string} confirmationCode The MFA code entered by the user.\n * @param {object} callback Result callback map.\n * @param {string} mfaType The mfa we are replying to.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.sendMFACode = function sendMFACode(confirmationCode, callback, mfaType) {\n var _this7 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.SMS_MFA_CODE = confirmationCode;\n var mfaTypeSelection = mfaType || 'SMS_MFA';\n if (mfaTypeSelection === 'SOFTWARE_TOKEN_MFA') {\n challengeResponses.SOFTWARE_TOKEN_MFA_CODE = confirmationCode;\n }\n\n if (this.deviceKey != null) {\n challengeResponses.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ChallengeName: mfaTypeSelection,\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, dataAuthenticate) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeName = dataAuthenticate.ChallengeName;\n\n if (challengeName === 'DEVICE_SRP_AUTH') {\n _this7.getDeviceResponse(callback);\n return undefined;\n }\n\n _this7.signInUserSession = _this7.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n _this7.cacheTokens();\n\n if (dataAuthenticate.AuthenticationResult.NewDeviceMetadata == null) {\n return callback.onSuccess(_this7.signInUserSession);\n }\n\n var authenticationHelper = new AuthenticationHelper(_this7.pool.getUserPoolId().split('_')[1]);\n authenticationHelper.generateHashDevice(dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey, dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey, function (errGenHash) {\n if (errGenHash) {\n return callback.onFailure(errGenHash);\n }\n\n var deviceSecretVerifierConfig = {\n Salt: Buffer.from(authenticationHelper.getSaltDevices(), 'hex').toString('base64'),\n PasswordVerifier: Buffer.from(authenticationHelper.getVerifierDevices(), 'hex').toString('base64')\n };\n\n _this7.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n _this7.deviceGroupKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey;\n _this7.randomPassword = authenticationHelper.getRandomPassword();\n\n _this7.client.request('ConfirmDevice', {\n DeviceKey: dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey,\n AccessToken: _this7.signInUserSession.getAccessToken().getJwtToken(),\n DeviceSecretVerifierConfig: deviceSecretVerifierConfig,\n DeviceName: navigator.userAgent\n }, function (errConfirm, dataConfirm) {\n if (errConfirm) {\n return callback.onFailure(errConfirm);\n }\n\n _this7.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n _this7.cacheDeviceKeyAndPassword();\n if (dataConfirm.UserConfirmationNecessary === true) {\n return callback.onSuccess(_this7.signInUserSession, dataConfirm.UserConfirmationNecessary);\n }\n return callback.onSuccess(_this7.signInUserSession);\n });\n return undefined;\n });\n return undefined;\n });\n };\n\n /**\n * This is used by an authenticated user to change the current password\n * @param {string} oldUserPassword The current password.\n * @param {string} newUserPassword The requested new password.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.changePassword = function changePassword(oldUserPassword, newUserPassword, callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('ChangePassword', {\n PreviousPassword: oldUserPassword,\n ProposedPassword: newUserPassword,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used by an authenticated user to enable MFA for himself\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.enableMFA = function enableMFA(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n var mfaOptions = [];\n var mfaEnabled = {\n DeliveryMedium: 'SMS',\n AttributeName: 'phone_number'\n };\n mfaOptions.push(mfaEnabled);\n\n this.client.request('SetUserSettings', {\n MFAOptions: mfaOptions,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used by an authenticated user to enable MFA for himself\n * @param {string[]} smsMfaSettings the sms mfa settings\n * @param {string[]} softwareTokenMfaSettings the software token mfa settings\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.setUserMfaPreference = function setUserMfaPreference(smsMfaSettings, softwareTokenMfaSettings, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('SetUserMFAPreference', {\n SMSMfaSettings: smsMfaSettings,\n SoftwareTokenMfaSettings: softwareTokenMfaSettings,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used by an authenticated user to disable MFA for himself\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.disableMFA = function disableMFA(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n var mfaOptions = [];\n\n this.client.request('SetUserSettings', {\n MFAOptions: mfaOptions,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used by an authenticated user to delete himself\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.deleteUser = function deleteUser(callback) {\n var _this8 = this;\n\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('DeleteUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n _this8.clearCachedTokens();\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n\n /**\n * @typedef {CognitoUserAttribute | { Name:string, Value:string }} AttributeArg\n */\n /**\n * This is used by an authenticated user to change a list of attributes\n * @param {AttributeArg[]} attributes A list of the new user attributes.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.updateAttributes = function updateAttributes(attributes, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('UpdateUserAttributes', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n UserAttributes: attributes\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used by an authenticated user to get a list of attributes\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getUserAttributes = function getUserAttributes(callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, userData) {\n if (err) {\n return callback(err, null);\n }\n\n var attributeList = [];\n\n for (var i = 0; i < userData.UserAttributes.length; i++) {\n var attribute = {\n Name: userData.UserAttributes[i].Name,\n Value: userData.UserAttributes[i].Value\n };\n var userAttribute = new CognitoUserAttribute(attribute);\n attributeList.push(userAttribute);\n }\n\n return callback(null, attributeList);\n });\n return undefined;\n };\n\n /**\n * This is used by an authenticated user to get the MFAOptions\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getMFAOptions = function getMFAOptions(callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, userData) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, userData.MFAOptions);\n });\n return undefined;\n };\n\n /**\n * This is used by an authenticated user to delete a list of attributes\n * @param {string[]} attributeList Names of the attributes to delete.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.deleteAttributes = function deleteAttributes(attributeList, callback) {\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n return callback(new Error('User is not authenticated'), null);\n }\n\n this.client.request('DeleteUserAttributes', {\n UserAttributeNames: attributeList,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used by a user to resend a confirmation code\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.resendConfirmationCode = function resendConfirmationCode(callback) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username\n };\n\n this.client.request('ResendConfirmationCode', jsonReq, function (err, result) {\n if (err) {\n return callback(err, null);\n }\n return callback(null, result);\n });\n };\n\n /**\n * This is used to get a session, either from the session object\n * or from the local storage, or by using a refresh token\n *\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getSession = function getSession(callback) {\n if (this.username == null) {\n return callback(new Error('Username is null. Cannot retrieve a new session'), null);\n }\n\n if (this.signInUserSession != null && this.signInUserSession.isValid()) {\n return callback(null, this.signInUserSession);\n }\n\n var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId() + '.' + this.username;\n var idTokenKey = keyPrefix + '.idToken';\n var accessTokenKey = keyPrefix + '.accessToken';\n var refreshTokenKey = keyPrefix + '.refreshToken';\n var clockDriftKey = keyPrefix + '.clockDrift';\n\n if (this.storage.getItem(idTokenKey)) {\n var idToken = new CognitoIdToken({\n IdToken: this.storage.getItem(idTokenKey)\n });\n var accessToken = new CognitoAccessToken({\n AccessToken: this.storage.getItem(accessTokenKey)\n });\n var refreshToken = new CognitoRefreshToken({\n RefreshToken: this.storage.getItem(refreshTokenKey)\n });\n var clockDrift = parseInt(this.storage.getItem(clockDriftKey), 0) || 0;\n\n var sessionData = {\n IdToken: idToken,\n AccessToken: accessToken,\n RefreshToken: refreshToken,\n ClockDrift: clockDrift\n };\n var cachedSession = new CognitoUserSession(sessionData);\n if (cachedSession.isValid()) {\n this.signInUserSession = cachedSession;\n return callback(null, this.signInUserSession);\n }\n\n if (refreshToken.getToken() == null) {\n return callback(new Error('Cannot retrieve a new session. Please authenticate.'), null);\n }\n\n this.refreshSession(refreshToken, callback);\n } else {\n callback(new Error('Local storage is missing an ID Token, Please authenticate'), null);\n }\n\n return undefined;\n };\n\n /**\n * This uses the refreshToken to retrieve a new session\n * @param {CognitoRefreshToken} refreshToken A previous session's refresh token.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.refreshSession = function refreshSession(refreshToken, callback) {\n var _this9 = this;\n\n var authParameters = {};\n authParameters.REFRESH_TOKEN = refreshToken.getToken();\n var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId();\n var lastUserKey = keyPrefix + '.LastAuthUser';\n\n if (this.storage.getItem(lastUserKey)) {\n this.username = this.storage.getItem(lastUserKey);\n var deviceKeyKey = keyPrefix + '.' + this.username + '.deviceKey';\n this.deviceKey = this.storage.getItem(deviceKeyKey);\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n AuthFlow: 'REFRESH_TOKEN_AUTH',\n AuthParameters: authParameters\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n if (err) {\n if (err.code === 'NotAuthorizedException') {\n _this9.clearCachedTokens();\n }\n return callback(err, null);\n }\n if (authResult) {\n var authenticationResult = authResult.AuthenticationResult;\n if (!Object.prototype.hasOwnProperty.call(authenticationResult, 'RefreshToken')) {\n authenticationResult.RefreshToken = refreshToken.getToken();\n }\n _this9.signInUserSession = _this9.getCognitoUserSession(authenticationResult);\n _this9.cacheTokens();\n return callback(null, _this9.signInUserSession);\n }\n return undefined;\n });\n };\n\n /**\n * This is used to save the session tokens to local storage\n * @returns {void}\n */\n\n\n CognitoUser.prototype.cacheTokens = function cacheTokens() {\n var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId();\n var idTokenKey = keyPrefix + '.' + this.username + '.idToken';\n var accessTokenKey = keyPrefix + '.' + this.username + '.accessToken';\n var refreshTokenKey = keyPrefix + '.' + this.username + '.refreshToken';\n var clockDriftKey = keyPrefix + '.' + this.username + '.clockDrift';\n var lastUserKey = keyPrefix + '.LastAuthUser';\n\n this.storage.setItem(idTokenKey, this.signInUserSession.getIdToken().getJwtToken());\n this.storage.setItem(accessTokenKey, this.signInUserSession.getAccessToken().getJwtToken());\n this.storage.setItem(refreshTokenKey, this.signInUserSession.getRefreshToken().getToken());\n this.storage.setItem(clockDriftKey, '' + this.signInUserSession.getClockDrift());\n this.storage.setItem(lastUserKey, this.username);\n };\n\n /**\n * This is used to cache the device key and device group and device password\n * @returns {void}\n */\n\n\n CognitoUser.prototype.cacheDeviceKeyAndPassword = function cacheDeviceKeyAndPassword() {\n var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId() + '.' + this.username;\n var deviceKeyKey = keyPrefix + '.deviceKey';\n var randomPasswordKey = keyPrefix + '.randomPasswordKey';\n var deviceGroupKeyKey = keyPrefix + '.deviceGroupKey';\n\n this.storage.setItem(deviceKeyKey, this.deviceKey);\n this.storage.setItem(randomPasswordKey, this.randomPassword);\n this.storage.setItem(deviceGroupKeyKey, this.deviceGroupKey);\n };\n\n /**\n * This is used to get current device key and device group and device password\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getCachedDeviceKeyAndPassword = function getCachedDeviceKeyAndPassword() {\n var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId() + '.' + this.username;\n var deviceKeyKey = keyPrefix + '.deviceKey';\n var randomPasswordKey = keyPrefix + '.randomPasswordKey';\n var deviceGroupKeyKey = keyPrefix + '.deviceGroupKey';\n\n if (this.storage.getItem(deviceKeyKey)) {\n this.deviceKey = this.storage.getItem(deviceKeyKey);\n this.randomPassword = this.storage.getItem(randomPasswordKey);\n this.deviceGroupKey = this.storage.getItem(deviceGroupKeyKey);\n }\n };\n\n /**\n * This is used to clear the device key info from local storage\n * @returns {void}\n */\n\n\n CognitoUser.prototype.clearCachedDeviceKeyAndPassword = function clearCachedDeviceKeyAndPassword() {\n var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId() + '.' + this.username;\n var deviceKeyKey = keyPrefix + '.deviceKey';\n var randomPasswordKey = keyPrefix + '.randomPasswordKey';\n var deviceGroupKeyKey = keyPrefix + '.deviceGroupKey';\n\n this.storage.removeItem(deviceKeyKey);\n this.storage.removeItem(randomPasswordKey);\n this.storage.removeItem(deviceGroupKeyKey);\n };\n\n /**\n * This is used to clear the session tokens from local storage\n * @returns {void}\n */\n\n\n CognitoUser.prototype.clearCachedTokens = function clearCachedTokens() {\n var keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId();\n var idTokenKey = keyPrefix + '.' + this.username + '.idToken';\n var accessTokenKey = keyPrefix + '.' + this.username + '.accessToken';\n var refreshTokenKey = keyPrefix + '.' + this.username + '.refreshToken';\n var lastUserKey = keyPrefix + '.LastAuthUser';\n\n this.storage.removeItem(idTokenKey);\n this.storage.removeItem(accessTokenKey);\n this.storage.removeItem(refreshTokenKey);\n this.storage.removeItem(lastUserKey);\n };\n\n /**\n * This is used to build a user session from tokens retrieved in the authentication result\n * @param {object} authResult Successful auth response from server.\n * @returns {CognitoUserSession} The new user session.\n * @private\n */\n\n\n CognitoUser.prototype.getCognitoUserSession = function getCognitoUserSession(authResult) {\n var idToken = new CognitoIdToken(authResult);\n var accessToken = new CognitoAccessToken(authResult);\n var refreshToken = new CognitoRefreshToken(authResult);\n\n var sessionData = {\n IdToken: idToken,\n AccessToken: accessToken,\n RefreshToken: refreshToken\n };\n\n return new CognitoUserSession(sessionData);\n };\n\n /**\n * This is used to initiate a forgot password request\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {inputVerificationCode?} callback.inputVerificationCode\n * Optional callback raised instead of onSuccess with response data.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.forgotPassword = function forgotPassword(callback) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n this.client.request('ForgotPassword', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n if (typeof callback.inputVerificationCode === 'function') {\n return callback.inputVerificationCode(data);\n }\n return callback.onSuccess(data);\n });\n };\n\n /**\n * This is used to confirm a new password using a confirmationCode\n * @param {string} confirmationCode Code entered by user.\n * @param {string} newPassword Confirm new password.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.confirmPassword = function confirmPassword(confirmationCode, newPassword, callback) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ConfirmationCode: confirmationCode,\n Password: newPassword\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n this.client.request('ConfirmForgotPassword', jsonReq, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback.onSuccess();\n });\n };\n\n /**\n * This is used to initiate an attribute confirmation request\n * @param {string} attributeName User attribute that needs confirmation.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {inputVerificationCode} callback.inputVerificationCode Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getAttributeVerificationCode = function getAttributeVerificationCode(attributeName, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GetUserAttributeVerificationCode', {\n AttributeName: attributeName,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n if (typeof callback.inputVerificationCode === 'function') {\n return callback.inputVerificationCode(data);\n }\n return callback.onSuccess();\n });\n return undefined;\n };\n\n /**\n * This is used to confirm an attribute using a confirmation code\n * @param {string} attributeName Attribute being confirmed.\n * @param {string} confirmationCode Code entered by user.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.verifyAttribute = function verifyAttribute(attributeName, confirmationCode, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('VerifyUserAttribute', {\n AttributeName: attributeName,\n Code: confirmationCode,\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used to get the device information using the current device key\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess<*>} callback.onSuccess Called on success with device data.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getDevice = function getDevice(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GetDevice', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback.onSuccess(data);\n });\n return undefined;\n };\n\n /**\n * This is used to forget a specific device\n * @param {string} deviceKey Device key.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.forgetSpecificDevice = function forgetSpecificDevice(deviceKey, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('ForgetDevice', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: deviceKey\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used to forget the current device\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.forgetDevice = function forgetDevice(callback) {\n var _this10 = this;\n\n this.forgetSpecificDevice(this.deviceKey, {\n onFailure: callback.onFailure,\n onSuccess: function onSuccess(result) {\n _this10.deviceKey = null;\n _this10.deviceGroupKey = null;\n _this10.randomPassword = null;\n _this10.clearCachedDeviceKeyAndPassword();\n return callback.onSuccess(result);\n }\n });\n };\n\n /**\n * This is used to set the device status as remembered\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.setDeviceStatusRemembered = function setDeviceStatusRemembered(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('UpdateDeviceStatus', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey,\n DeviceRememberedStatus: 'remembered'\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used to set the device status as not remembered\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.setDeviceStatusNotRemembered = function setDeviceStatusNotRemembered(callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('UpdateDeviceStatus', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n DeviceKey: this.deviceKey,\n DeviceRememberedStatus: 'not_remembered'\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used to list all devices for a user\n *\n * @param {int} limit the number of devices returned in a call\n * @param {string} paginationToken the pagination token in case any was returned before\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess<*>} callback.onSuccess Called on success with device list.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.listDevices = function listDevices(limit, paginationToken, callback) {\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('ListDevices', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n Limit: limit,\n PaginationToken: paginationToken\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback.onSuccess(data);\n });\n return undefined;\n };\n\n /**\n * This is used to globally revoke all tokens issued to a user\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {onSuccess} callback.onSuccess Called on success.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.globalSignOut = function globalSignOut(callback) {\n var _this11 = this;\n\n if (this.signInUserSession == null || !this.signInUserSession.isValid()) {\n return callback.onFailure(new Error('User is not authenticated'));\n }\n\n this.client.request('GlobalSignOut', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n _this11.clearCachedTokens();\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\n };\n\n /**\n * This is used for the user to signOut of the application and clear the cached tokens.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.signOut = function signOut() {\n this.signInUserSession = null;\n this.clearCachedTokens();\n };\n\n /**\n * This is used by a user trying to select a given MFA\n * @param {string} answerChallenge the mfa the user wants\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.sendMFASelectionAnswer = function sendMFASelectionAnswer(answerChallenge, callback) {\n var _this12 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.ANSWER = answerChallenge;\n\n var jsonReq = {\n ChallengeName: 'SELECT_MFA_TYPE',\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session\n };\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n _this12.Session = data.Session;\n if (answerChallenge === 'SMS_MFA') {\n return callback.mfaRequired(data.challengeName, data.challengeParameters);\n }\n if (answerChallenge === 'SOFTWARE_TOKEN_MFA') {\n return callback.totpRequired(data.challengeName, data.challengeParameters);\n }\n return undefined;\n });\n };\n\n /**\n * This returns the user context data for advanced security feature.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getUserContextData = function getUserContextData() {\n var pool = this.pool;\n return pool.getUserContextData(this.username);\n };\n\n /**\n * This is used by an authenticated or a user trying to authenticate to associate a TOTP MFA\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.associateSoftwareToken = function associateSoftwareToken(callback) {\n var _this13 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.client.request('AssociateSoftwareToken', {\n Session: this.Session\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n _this13.Session = data.Session;\n return callback.associateSecretCode(data.SecretCode);\n });\n } else {\n this.client.request('AssociateSoftwareToken', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback.associateSecretCode(data.SecretCode);\n });\n }\n };\n\n /**\n * This is used by an authenticated or a user trying to authenticate to associate a TOTP MFA\n * @param {string} totpCode The MFA code entered by the user.\n * @param {string} friendlyDeviceName The device name we are assigning to the device.\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.verifySoftwareToken = function verifySoftwareToken(totpCode, friendlyDeviceName, callback) {\n var _this14 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.client.request('VerifySoftwareToken', {\n Session: this.Session,\n UserCode: totpCode,\n FriendlyDeviceName: friendlyDeviceName\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n _this14.Session = data.Session;\n var challengeResponses = {};\n challengeResponses.USERNAME = _this14.username;\n var jsonReq = {\n ChallengeName: 'MFA_SETUP',\n ClientId: _this14.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: _this14.Session\n };\n if (_this14.getUserContextData()) {\n jsonReq.UserContextData = _this14.getUserContextData();\n }\n _this14.client.request('RespondToAuthChallenge', jsonReq, function (errRespond, dataRespond) {\n if (errRespond) {\n return callback.onFailure(errRespond);\n }\n _this14.signInUserSession = _this14.getCognitoUserSession(dataRespond.AuthenticationResult);\n _this14.cacheTokens();\n return callback.onSuccess(_this14.signInUserSession);\n });\n return undefined;\n });\n } else {\n this.client.request('VerifySoftwareToken', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken(),\n UserCode: totpCode,\n FriendlyDeviceName: friendlyDeviceName\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n return callback(null, data);\n });\n }\n };\n\n return CognitoUser;\n}();\n\nexport default CognitoUser;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/CognitoUser.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserSession = function () {\n /**\n * Constructs a new CognitoUserSession object\n * @param {CognitoIdToken} IdToken The session's Id token.\n * @param {CognitoRefreshToken=} RefreshToken The session's refresh token.\n * @param {CognitoAccessToken} AccessToken The session's access token.\n * @param {int} ClockDrift The saved computer's clock drift or undefined to force calculation.\n */\n function CognitoUserSession() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n IdToken = _ref.IdToken,\n RefreshToken = _ref.RefreshToken,\n AccessToken = _ref.AccessToken,\n ClockDrift = _ref.ClockDrift;\n\n _classCallCheck(this, CognitoUserSession);\n\n if (AccessToken == null || IdToken == null) {\n throw new Error('Id token and Access Token must be present.');\n }\n\n this.idToken = IdToken;\n this.refreshToken = RefreshToken;\n this.accessToken = AccessToken;\n this.clockDrift = ClockDrift === undefined ? this.calculateClockDrift() : ClockDrift;\n }\n\n /**\n * @returns {CognitoIdToken} the session's Id token\n */\n\n\n CognitoUserSession.prototype.getIdToken = function getIdToken() {\n return this.idToken;\n };\n\n /**\n * @returns {CognitoRefreshToken} the session's refresh token\n */\n\n\n CognitoUserSession.prototype.getRefreshToken = function getRefreshToken() {\n return this.refreshToken;\n };\n\n /**\n * @returns {CognitoAccessToken} the session's access token\n */\n\n\n CognitoUserSession.prototype.getAccessToken = function getAccessToken() {\n return this.accessToken;\n };\n\n /**\n * @returns {int} the session's clock drift\n */\n\n\n CognitoUserSession.prototype.getClockDrift = function getClockDrift() {\n return this.clockDrift;\n };\n\n /**\n * @returns {int} the computer's clock drift\n */\n\n\n CognitoUserSession.prototype.calculateClockDrift = function calculateClockDrift() {\n var now = Math.floor(new Date() / 1000);\n var iat = Math.min(this.accessToken.getIssuedAt(), this.idToken.getIssuedAt());\n\n return now - iat;\n };\n\n /**\n * Checks to see if the session is still valid based on session expiry information found\n * in tokens and the current time (adjusted with clock drift)\n * @returns {boolean} if the session is still valid\n */\n\n\n CognitoUserSession.prototype.isValid = function isValid() {\n var now = Math.floor(new Date() / 1000);\n var adjusted = now - this.clockDrift;\n\n return adjusted < this.accessToken.getExpiration() && adjusted < this.idToken.getExpiration();\n };\n\n return CognitoUserSession;\n}();\n\nexport default CognitoUserSession;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/CognitoUserSession.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar weekNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n/** @class */\n\nvar DateHelper = function () {\n function DateHelper() {\n _classCallCheck(this, DateHelper);\n }\n\n /**\n * @returns {string} The current time in \"ddd MMM D HH:mm:ss UTC YYYY\" format.\n */\n DateHelper.prototype.getNowString = function getNowString() {\n var now = new Date();\n\n var weekDay = weekNames[now.getUTCDay()];\n var month = monthNames[now.getUTCMonth()];\n var day = now.getUTCDate();\n\n var hours = now.getUTCHours();\n if (hours < 10) {\n hours = '0' + hours;\n }\n\n var minutes = now.getUTCMinutes();\n if (minutes < 10) {\n minutes = '0' + minutes;\n }\n\n var seconds = now.getUTCSeconds();\n if (seconds < 10) {\n seconds = '0' + seconds;\n }\n\n var year = now.getUTCFullYear();\n\n // ddd MMM D HH:mm:ss UTC YYYY\n var dateNow = weekDay + ' ' + month + ' ' + day + ' ' + hours + ':' + minutes + ':' + seconds + ' UTC ' + year;\n\n return dateNow;\n };\n\n return DateHelper;\n}();\n\nexport default DateHelper;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/DateHelper.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** @class */\nvar CognitoUserAttribute = function () {\n /**\n * Constructs a new CognitoUserAttribute object\n * @param {string=} Name The record's name\n * @param {string=} Value The record's value\n */\n function CognitoUserAttribute() {\n var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},\n Name = _ref.Name,\n Value = _ref.Value;\n\n _classCallCheck(this, CognitoUserAttribute);\n\n this.Name = Name || '';\n this.Value = Value || '';\n }\n\n /**\n * @returns {string} the record's value.\n */\n\n\n CognitoUserAttribute.prototype.getValue = function getValue() {\n return this.Value;\n };\n\n /**\n * Sets the record's value.\n * @param {string} value The new value.\n * @returns {CognitoUserAttribute} The record for method chaining.\n */\n\n\n CognitoUserAttribute.prototype.setValue = function setValue(value) {\n this.Value = value;\n return this;\n };\n\n /**\n * @returns {string} the record's name.\n */\n\n\n CognitoUserAttribute.prototype.getName = function getName() {\n return this.Name;\n };\n\n /**\n * Sets the record's name\n * @param {string} name The new name.\n * @returns {CognitoUserAttribute} The record for method chaining.\n */\n\n\n CognitoUserAttribute.prototype.setName = function setName(name) {\n this.Name = name;\n return this;\n };\n\n /**\n * @returns {string} a string representation of the record.\n */\n\n\n CognitoUserAttribute.prototype.toString = function toString() {\n return JSON.stringify(this);\n };\n\n /**\n * @returns {object} a flat object representing the record.\n */\n\n\n CognitoUserAttribute.prototype.toJSON = function toJSON() {\n return {\n Name: this.Name,\n Value: this.Value\n };\n };\n\n return CognitoUserAttribute;\n}();\n\nexport default CognitoUserAttribute;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/CognitoUserAttribute.js","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n/*!\n * Copyright 2016 Amazon.com,\n * Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Amazon Software License (the \"License\").\n * You may not use this file except in compliance with the\n * License. A copy of the License is located at\n *\n * http://aws.amazon.com/asl/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, express or implied. See the License\n * for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar dataMemory = {};\n\n/** @class */\n\nvar MemoryStorage = function () {\n function MemoryStorage() {\n _classCallCheck(this, MemoryStorage);\n }\n\n /**\n * This is used to set a specific item in storage\n * @param {string} key - the key for the item\n * @param {object} value - the value\n * @returns {string} value that was set\n */\n MemoryStorage.setItem = function setItem(key, value) {\n dataMemory[key] = value;\n return dataMemory[key];\n };\n\n /**\n * This is used to get a specific key from storage\n * @param {string} key - the key for the item\n * This is used to clear the storage\n * @returns {string} the data item\n */\n\n\n MemoryStorage.getItem = function getItem(key) {\n return Object.prototype.hasOwnProperty.call(dataMemory, key) ? dataMemory[key] : undefined;\n };\n\n /**\n * This is used to remove an item from storage\n * @param {string} key - the key being set\n * @returns {string} value - value that was deleted\n */\n\n\n MemoryStorage.removeItem = function removeItem(key) {\n return delete dataMemory[key];\n };\n\n /**\n * This is used to clear the storage\n * @returns {string} nothing\n */\n\n\n MemoryStorage.clear = function clear() {\n dataMemory = {};\n return dataMemory;\n };\n\n return MemoryStorage;\n}();\n\n/** @class */\n\n\nvar StorageHelper = function () {\n\n /**\n * This is used to get a storage object\n * @returns {object} the storage\n */\n function StorageHelper() {\n _classCallCheck(this, StorageHelper);\n\n try {\n this.storageWindow = window.localStorage;\n this.storageWindow.setItem('aws.cognito.test-ls', 1);\n this.storageWindow.removeItem('aws.cognito.test-ls');\n } catch (exception) {\n this.storageWindow = MemoryStorage;\n }\n }\n\n /**\n * This is used to return the storage\n * @returns {object} the storage\n */\n\n\n StorageHelper.prototype.getStorage = function getStorage() {\n return this.storageWindow;\n };\n\n return StorageHelper;\n}();\n\nexport default StorageHelper;\n\n\n// WEBPACK FOOTER //\n// ../amazon-cognito-identity-js/es/StorageHelper.js","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of 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 distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport { ConsoleLogger as Logger } from './Logger';\n\nconst logger = new Logger('Hub');\n\nexport class HubClass {\n name;\n bus = [];\n listeners = {};\n\n constructor(name) {\n this.name = name;\n }\n\n static createHub(name) {\n return new HubClass(name);\n }\n\n dispatch(channel, payload, source='') {\n const capsule = {\n 'channel': channel,\n 'payload': Object.assign({}, payload),\n 'source': source\n };\n\n try {\n this.bus.push(capsule);\n this.toListeners(capsule);\n } catch (e) {\n logger.warn('Hub dispatch error', e);\n }\n }\n\n listen(channel, listener, listenerName='noname') {\n logger.debug(listenerName + ' listening ' + channel);\n\n let holder = this.listeners[channel];\n if (!holder) {\n holder = [];\n this.listeners[channel] = holder;\n }\n\n holder.push({\n 'name': listenerName,\n 'listener': listener\n });\n }\n\n toListeners(capsule) {\n const { channel, payload, source } = capsule;\n const holder = this.listeners[channel];\n if (!holder) { return; }\n\n holder.forEach(listener => {\n try {\n listener.listener.onHubCapsule(capsule);\n } catch (e) {\n logger.warn('error dispatching ' + channel + ' event to ' + listener.name);\n }\n });\n }\n}\n\nconst Hub = new HubClass('__default__');\nexport default Hub;\n\n\n\n// WEBPACK FOOTER //\n// ./src/Common/Hub.ts","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of 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 distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport { AWS, ConsoleLogger as Logger } from '../Common';\n\n\nconst logger = new Logger('Signer'),\n url = require('url'),\n crypto = AWS['util'].crypto;\n\nconst encrypt = function(key, src, encoding?) {\n return crypto.lib.createHmac('sha256', key).update(src, 'utf8').digest(encoding);\n};\n\nconst hash = function(src) {\n const arg = src || '';\n return crypto.createHash('sha256').update(arg, 'utf8').digest('hex');\n};\n\n/**\n* @private\n* Create canonical headers\n*\n

\nCanonicalHeaders =\n    CanonicalHeadersEntry0 + CanonicalHeadersEntry1 + ... + CanonicalHeadersEntryN\nCanonicalHeadersEntry =\n    Lowercase(HeaderName) + ':' + Trimall(HeaderValue) + '\\n'\n
\n*/\nconst canonical_headers = function(headers) {\n if (!headers || Object.keys(headers).length === 0) { return ''; }\n\n return Object.keys(headers)\n .map(function(key) {\n return {\n key: key.toLowerCase(),\n value: headers[key]? headers[key].trim().replace(/\\s+/g, ' ') : ''\n };\n })\n .sort(function(a, b) {\n return a.key < b.key? -1 : 1;\n })\n .map(function(item) {\n return item.key + ':' + item.value;\n })\n .join('\\n') + '\\n';\n};\n\n/**\n* List of header keys included in the canonical headers.\n* @access private\n*/\nconst signed_headers = function(headers) {\n return Object.keys(headers)\n .map(function(key) { return key.toLowerCase(); })\n .sort()\n .join(';');\n};\n\n/**\n* @private\n* Create canonical request\n* Refer to \n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-create-canonical-request.html|Create a Canonical Request}\n*\n
\nCanonicalRequest =\n    HTTPRequestMethod + '\\n' +\n    CanonicalURI + '\\n' +\n    CanonicalQueryString + '\\n' +\n    CanonicalHeaders + '\\n' +\n    SignedHeaders + '\\n' +\n    HexEncode(Hash(RequestPayload))\n
\n*/\nconst canonical_request = function(request) {\n const url_info = url.parse(request.url);\n const sorted_query = url_info.query\n ? url_info.query.split('&').sort((a,b) => a < b ? -1 : 1).join('&')\n : '';\n\n return [\n request.method || '/',\n url_info.pathname,\n sorted_query,\n canonical_headers(request.headers),\n signed_headers(request.headers),\n hash(request.data)\n ].join('\\n');\n};\n\nconst parse_service_info = function(request) {\n const url_info = url.parse(request.url),\n host = url_info.host;\n\n const matched = host.match(/([^\\.]+)\\.(?:([^\\.]*)\\.)?amazonaws\\.com$/);\n let parsed = (matched || []).slice(1, 3);\n\n if (parsed[1] === 'es') { // Elastic Search\n parsed = parsed.reverse();\n }\n\n return {\n service: request.service || parsed[0],\n region: request.region || parsed[1]\n };\n};\n\nconst credential_scope = function(d_str, region, service) {\n return [\n d_str,\n region,\n service,\n 'aws4_request',\n ].join('/');\n};\n\n/**\n* @private\n* Create a string to sign\n* Refer to \n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-create-string-to-sign.html|Create String to Sign}\n*\n
\nStringToSign =\n    Algorithm + \\n +\n    RequestDateTime + \\n +\n    CredentialScope + \\n +\n    HashedCanonicalRequest\n
\n*/\nconst string_to_sign = function(algorithm, canonical_request, dt_str, scope) {\n return [\n algorithm,\n dt_str,\n scope,\n hash(canonical_request)\n ].join('\\n');\n};\n\n/**\n* @private\n* Create signing key\n* Refer to \n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-calculate-signature.html|Calculate Signature}\n*\n
\nkSecret = your secret access key\nkDate = HMAC(\"AWS4\" + kSecret, Date)\nkRegion = HMAC(kDate, Region)\nkService = HMAC(kRegion, Service)\nkSigning = HMAC(kService, \"aws4_request\")\n
\n*/\nconst get_signing_key = function(secret_key, d_str, service_info) {\n logger.debug(service_info);\n const k = ('AWS4' + secret_key),\n k_date = encrypt(k, d_str),\n k_region = encrypt(k_date, service_info.region),\n k_service = encrypt(k_region, service_info.service),\n k_signing = encrypt(k_service, 'aws4_request');\n\n return k_signing;\n};\n\nconst get_signature = function(signing_key, str_to_sign) {\n return encrypt(signing_key, str_to_sign, 'hex');\n};\n\n/**\n* @private\n* Create authorization header\n* Refer to \n* {@link http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html|Add the Signing Information}\n*/\nconst get_authorization_header = function(algorithm, access_key, scope, signed_headers, signature) {\n return [\n algorithm + ' ' + 'Credential=' + access_key + '/' + scope,\n 'SignedHeaders=' + signed_headers,\n 'Signature=' + signature\n ].join(', ');\n};\n\n/**\n* Sign a HTTP request, add 'Authorization' header to request param\n* @method sign\n* @memberof Signer\n* @static\n*\n* @param {object} request - HTTP request object\n
\nrequest: {\n    method: GET | POST | PUT ...\n    url: ...,\n    headers: {\n        header1: ...\n    },\n    data: data\n}\n
\n* @param {object} access_info - AWS access credential info\n
\naccess_info: {\n    access_key: ...,\n    secret_key: ...,\n    session_token: ...\n}\n
\n* @param {object} [service_info] - AWS service type and region, optional,\n* if not provided then parse out from url\n
\nservice_info: {\n    service: ...,\n    region: ...\n}\n
\n*\n* @returns {object} Signed HTTP request\n*/\nconst sign = function(request, access_info, service_info = null) {\n request.headers = request.headers || {};\n \n // datetime string and date string\n const dt = new Date(),\n dt_str = dt.toISOString().replace(/[:\\-]|\\.\\d{3}/g, ''),\n d_str = dt_str.substr(0, 8),\n algorithm = 'AWS4-HMAC-SHA256';\n \n const url_info = url.parse(request.url);\n request.headers['host'] = url_info.host;\n request.headers['x-amz-date'] = dt_str;\n if (access_info.session_token) {\n request.headers['X-Amz-Security-Token'] = access_info.session_token;\n }\n\n // Task 1: Create a Canonical Request\n const request_str = canonical_request(request);\n logger.debug(request_str);\n\n // Task 2: Create a String to Sign\n const serviceInfo = service_info || parse_service_info(request),\n scope = credential_scope(\n d_str,\n serviceInfo.region,\n serviceInfo.service\n ),\n str_to_sign = string_to_sign(\n algorithm,\n request_str,\n dt_str,\n scope\n );\n\n // Task 3: Calculate the Signature\n const signing_key = get_signing_key(\n access_info.secret_key,\n d_str,\n serviceInfo\n ),\n signature = get_signature(signing_key, str_to_sign);\n\n // Task 4: Adding the Signing information to the Request\n const authorization_header = get_authorization_header(\n algorithm,\n access_info.access_key,\n scope,\n signed_headers(request.headers),\n signature\n );\n request.headers['Authorization'] = authorization_header;\n\n return request;\n};\n\n/**\n* AWS request signer.\n* Refer to {@link http://docs.aws.amazon.com/general/latest/gr/sigv4_signing.html|Signature Version 4}\n*\n* @class Signer\n*/\nexport default class Signer {\n static sign = sign;\n}\n\n\n\n// WEBPACK FOOTER //\n// ./src/Common/Signer.ts","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport BrowserStorageCache from './BrowserStorageCache';\r\nimport InMemoryCache from './InMemoryCache';\r\nimport { CacheConfig } from './types';\r\n\r\nexport { BrowserStorageCache, InMemoryCache, CacheConfig };\r\nexport default BrowserStorageCache;\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/Cache/index.ts","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport {\r\n getCurrTime,\r\n getByteLength,\r\n defaultConfig,\r\n isInteger\r\n} from './Utils';\r\n\r\nimport { CacheConfig, CacheItem, CacheItemOptions } from './types';\r\nimport { ConsoleLogger as Logger } from '../Common';\r\n\r\nconst logger = new Logger('StorageCache');\r\n\r\n/**\r\n * Initialization of the cache\r\n *\r\n */\r\nexport default class StorageCache {\r\n protected cacheCurSizeKey: string;\r\n protected config: CacheConfig;\r\n\r\n /**\r\n * Initialize the cache\r\n * @param config - the configuration of the cache\r\n */\r\n constructor(config: CacheConfig) {\r\n this.config = Object.assign({}, config);\r\n this.cacheCurSizeKey = this.config.keyPrefix + 'CurSize';\r\n this.checkConfig();\r\n }\r\n\r\n private checkConfig(): void {\r\n // check configuration\r\n if (!isInteger(this.config.capacityInBytes)) {\r\n logger.error('Invalid parameter: capacityInBytes. It should be an Integer. Setting back to default.');\r\n this.config.capacityInBytes = defaultConfig.capacityInBytes;\r\n }\r\n\r\n if (!isInteger(this.config.itemMaxSize)) {\r\n logger.error('Invalid parameter: itemMaxSize. It should be an Integer. Setting back to default.');\r\n this.config.itemMaxSize = defaultConfig.itemMaxSize;\r\n }\r\n\r\n if (!isInteger(this.config.defaultTTL)) {\r\n logger.error('Invalid parameter: defaultTTL. It should be an Integer. Setting back to default.');\r\n this.config.defaultTTL = defaultConfig.defaultTTL;\r\n }\r\n\r\n if (!isInteger(this.config.defaultPriority)) {\r\n logger.error('Invalid parameter: defaultPriority. It should be an Integer. Setting back to default.');\r\n this.config.defaultPriority = defaultConfig.defaultPriority;\r\n }\r\n\r\n if (this.config.itemMaxSize > this.config.capacityInBytes) {\r\n logger.error(\r\n 'Invalid parameter: itemMaxSize. It should be smaller than capacityInBytes. Setting back to default.'\r\n );\r\n this.config.itemMaxSize = defaultConfig.itemMaxSize;\r\n }\r\n\r\n if (this.config.defaultPriority > 5 || this.config.defaultPriority < 1) {\r\n logger.error('Invalid parameter: defaultPriority. It should be between 1 and 5. Setting back to default.');\r\n this.config.defaultPriority = defaultConfig.defaultPriority;\r\n }\r\n\r\n if (Number(this.config.warningThreshold) > 1 || Number(this.config.warningThreshold) < 0) {\r\n logger.error('Invalid parameter: warningThreshold. It should be between 0 and 1. Setting back to default.');\r\n this.config.warningThreshold = defaultConfig.warningThreshold;\r\n }\r\n // set 5MB limit\r\n const cacheLimit: number = 5 * 1024 * 1024;\r\n if (this.config.capacityInBytes > cacheLimit) {\r\n logger.error('Cache Capacity should be less than 5MB. Setting back to default. Setting back to default.');\r\n this.config.capacityInBytes = defaultConfig.capacityInBytes;\r\n }\r\n }\r\n\r\n /**\r\n * produce a JSON object with meta-data and data value\r\n * @param value - the value of the item\r\n * @param options - optional, the specified meta-data\r\n *\r\n * @return - the item which has the meta-data and the value\r\n */\r\n protected fillCacheItem(\r\n key: string, value: object | number | string | boolean,\r\n options: CacheItemOptions): CacheItem {\r\n const ret: CacheItem = {\r\n key,\r\n data: value,\r\n timestamp: getCurrTime(),\r\n visitedTime: getCurrTime(),\r\n priority: options.priority,\r\n expires: options.expires,\r\n type: typeof value,\r\n byteSize: 0\r\n };\r\n\r\n ret.byteSize = getByteLength(JSON.stringify(ret));\r\n\r\n // for accurate size\r\n ret.byteSize = getByteLength(JSON.stringify(ret));\r\n return ret;\r\n }\r\n\r\n /**\r\n * set cache with customized configuration\r\n * @param config - customized configuration\r\n *\r\n * @return - the current configuration\r\n */\r\n public configure(config?: CacheConfig): CacheConfig {\r\n if (!config) {\r\n return this.config;\r\n }\r\n if (config.keyPrefix) {\r\n logger.warn(`Don't try to configure keyPrefix!`);\r\n }\r\n\r\n this.config = Object.assign({}, this.config, config);\r\n this.checkConfig();\r\n return this.config;\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/Cache/StorageCache.ts","'use strict';\n\nmodule.exports = function bind(fn, thisArg) {\n return function wrap() {\n var args = new Array(arguments.length);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i];\n }\n return fn.apply(thisArg, args);\n };\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/axios/lib/helpers/bind.js\n// module id = 110\n// module chunks = 0 1","'use strict';\n\nvar utils = require('./../utils');\nvar settle = require('./../core/settle');\nvar buildURL = require('./../helpers/buildURL');\nvar parseHeaders = require('./../helpers/parseHeaders');\nvar isURLSameOrigin = require('./../helpers/isURLSameOrigin');\nvar createError = require('../core/createError');\nvar btoa = (typeof window !== 'undefined' && window.btoa && window.btoa.bind(window)) || require('./../helpers/btoa');\n\nmodule.exports = function xhrAdapter(config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n var requestData = config.data;\n var requestHeaders = config.headers;\n\n if (utils.isFormData(requestData)) {\n delete requestHeaders['Content-Type']; // Let the browser set it\n }\n\n var request = new XMLHttpRequest();\n var loadEvent = 'onreadystatechange';\n var xDomain = false;\n\n // For IE 8/9 CORS support\n // Only supports POST and GET calls and doesn't returns the response headers.\n // DON'T do this for testing b/c XMLHttpRequest is mocked, not XDomainRequest.\n if (process.env.NODE_ENV !== 'test' &&\n typeof window !== 'undefined' &&\n window.XDomainRequest && !('withCredentials' in request) &&\n !isURLSameOrigin(config.url)) {\n request = new window.XDomainRequest();\n loadEvent = 'onload';\n xDomain = true;\n request.onprogress = function handleProgress() {};\n request.ontimeout = function handleTimeout() {};\n }\n\n // HTTP basic authentication\n if (config.auth) {\n var username = config.auth.username || '';\n var password = config.auth.password || '';\n requestHeaders.Authorization = 'Basic ' + btoa(username + ':' + password);\n }\n\n request.open(config.method.toUpperCase(), buildURL(config.url, config.params, config.paramsSerializer), true);\n\n // Set the request timeout in MS\n request.timeout = config.timeout;\n\n // Listen for ready state\n request[loadEvent] = function handleLoad() {\n if (!request || (request.readyState !== 4 && !xDomain)) {\n return;\n }\n\n // The request errored out and we didn't get a response, this will be\n // handled by onerror instead\n // With one exception: request that using file: protocol, most browsers\n // will return status as 0 even though it's a successful request\n if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {\n return;\n }\n\n // Prepare the response\n var responseHeaders = 'getAllResponseHeaders' in request ? parseHeaders(request.getAllResponseHeaders()) : null;\n var responseData = !config.responseType || config.responseType === 'text' ? request.responseText : request.response;\n var response = {\n data: responseData,\n // IE sends 1223 instead of 204 (https://github.com/axios/axios/issues/201)\n status: request.status === 1223 ? 204 : request.status,\n statusText: request.status === 1223 ? 'No Content' : request.statusText,\n headers: responseHeaders,\n config: config,\n request: request\n };\n\n settle(resolve, reject, response);\n\n // Clean up request\n request = null;\n };\n\n // Handle low level network errors\n request.onerror = function handleError() {\n // Real errors are hidden from us by the browser\n // onerror should only fire if it's a network error\n reject(createError('Network Error', config, null, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n reject(createError('timeout of ' + config.timeout + 'ms exceeded', config, 'ECONNABORTED',\n request));\n\n // Clean up request\n request = null;\n };\n\n // Add xsrf header\n // This is only done if running in a standard browser environment.\n // Specifically not if we're in a web worker, or react-native.\n if (utils.isStandardBrowserEnv()) {\n var cookies = require('./../helpers/cookies');\n\n // Add xsrf header\n var xsrfValue = (config.withCredentials || isURLSameOrigin(config.url)) && config.xsrfCookieName ?\n cookies.read(config.xsrfCookieName) :\n undefined;\n\n if (xsrfValue) {\n requestHeaders[config.xsrfHeaderName] = xsrfValue;\n }\n }\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders, function setRequestHeader(val, key) {\n if (typeof requestData === 'undefined' && key.toLowerCase() === 'content-type') {\n // Remove Content-Type if data is undefined\n delete requestHeaders[key];\n } else {\n // Otherwise add header to the request\n request.setRequestHeader(key, val);\n }\n });\n }\n\n // Add withCredentials to request if needed\n if (config.withCredentials) {\n request.withCredentials = true;\n }\n\n // Add responseType to request if needed\n if (config.responseType) {\n try {\n request.responseType = config.responseType;\n } catch (e) {\n // Expected DOMException thrown by browsers not compatible XMLHttpRequest Level 2.\n // But, this can be suppressed for 'json' type as it can be parsed by default 'transformResponse' function.\n if (config.responseType !== 'json') {\n throw e;\n }\n }\n }\n\n // Handle progress if needed\n if (typeof config.onDownloadProgress === 'function') {\n request.addEventListener('progress', config.onDownloadProgress);\n }\n\n // Not all browsers support upload events\n if (typeof config.onUploadProgress === 'function' && request.upload) {\n request.upload.addEventListener('progress', config.onUploadProgress);\n }\n\n if (config.cancelToken) {\n // Handle cancellation\n config.cancelToken.promise.then(function onCanceled(cancel) {\n if (!request) {\n return;\n }\n\n request.abort();\n reject(cancel);\n // Clean up request\n request = null;\n });\n }\n\n if (requestData === undefined) {\n requestData = null;\n }\n\n // Send the request\n request.send(requestData);\n });\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/axios/lib/adapters/xhr.js\n// module id = 111\n// module chunks = 0 1","'use strict';\n\nvar enhanceError = require('./enhanceError');\n\n/**\n * Create an Error with the specified message, config, error code, request and response.\n *\n * @param {string} message The error message.\n * @param {Object} config The config.\n * @param {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n * @returns {Error} The created error.\n */\nmodule.exports = function createError(message, config, code, request, response) {\n var error = new Error(message);\n return enhanceError(error, config, code, request, response);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/axios/lib/core/createError.js\n// module id = 112\n// module chunks = 0 1","'use strict';\n\nmodule.exports = function isCancel(value) {\n return !!(value && value.__CANCEL__);\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/axios/lib/cancel/isCancel.js\n// module id = 113\n// module chunks = 0 1","'use strict';\n\n/**\n * A `Cancel` is an object that is thrown when an operation is canceled.\n *\n * @class\n * @param {string=} message The message.\n */\nfunction Cancel(message) {\n this.message = message;\n}\n\nCancel.prototype.toString = function toString() {\n return 'Cancel' + (this.message ? ': ' + this.message : '');\n};\n\nCancel.prototype.__CANCEL__ = true;\n\nmodule.exports = Cancel;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/axios/lib/cancel/Cancel.js\n// module id = 114\n// module chunks = 0 1","/*\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of 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 distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\n\nimport Auth from './Auth';\nimport Analytics from './Analytics';\nimport Storage from './Storage';\nimport API from './API';\nimport I18n from './I18n';\nimport Cache from './Cache';\nimport {\n ConsoleLogger as Logger,\n Hub,\n JS,\n ClientDevice,\n Signer\n} from './Common';\n\nconst logger = new Logger('Amplify');\n\nexport default class Amplify {\n static Auth = null;\n static Analytics = null;\n static API = null;\n static Storage = null;\n static I18n = null;\n static Cache = null;\n\n static Logger = null;\n\n static configure(config) {\n if (!config) { return; }\n\n Auth.configure(config);\n I18n.configure(config);\n Analytics.configure(config);\n API.configure(config);\n Storage.configure(config);\n Cache.configure(config);\n }\n}\n\nAmplify.Auth = Auth;\nAmplify.Analytics = Analytics;\nAmplify.API = API;\nAmplify.Storage = Storage;\nAmplify.I18n = I18n;\nAmplify.Cache = Cache;\n\nAmplify.Logger = Logger;\n\nexport { Auth, Analytics, Storage, API, I18n, Logger, Hub, Cache, JS, ClientDevice, Signer };\n\n\n\n// WEBPACK FOOTER //\n// ./src/index.ts","/*\r\n * Copyright 2017-2017 Amazon.com, Inc. or its affiliates. All Rights Reserved.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\r\n * the License. A copy of the License is located at\r\n *\r\n * http://aws.amazon.com/apache2.0/\r\n *\r\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\r\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\r\n * and limitations under the License.\r\n */\r\n\r\nimport { AuthOptions } from './types';\r\n\r\nimport {\r\n AWS,\r\n Cognito,\r\n ConsoleLogger as Logger,\r\n Constants,\r\n Hub\r\n} from '../Common';\r\nimport Platform from '../Common/Platform';\r\nimport Cache from '../Cache';\r\n\r\nconst logger = new Logger('AuthClass');\r\n\r\nconst {\r\n CognitoIdentityCredentials\r\n} = AWS;\r\n\r\nconst {\r\n CognitoUserPool,\r\n CognitoUserAttribute,\r\n CognitoUser,\r\n AuthenticationDetails,\r\n} = Cognito;\r\n\r\nconst dispatchAuthEvent = (event, data) => {\r\n Hub.dispatch('auth', { event, data }, 'Auth');\r\n};\r\n\r\n/**\r\n* Provide authentication steps\r\n*/\r\nexport default class AuthClass {\r\n private _config: AuthOptions;\r\n private _userPoolStorageSync: Promise;\r\n private userPool = null;\r\n\r\n private credentials = null;\r\n private credentials_source = ''; // aws, guest, userPool, federated\r\n private user:any = null;\r\n\r\n /**\r\n * Initialize Auth with AWS configurations\r\n * @param {Object} config - Configuration of the Auth\r\n */\r\n constructor(config: AuthOptions) {\r\n this.configure(config);\r\n if (AWS.config) {\r\n AWS.config.update({customUserAgent: Constants.userAgent});\r\n } else {\r\n logger.warn('No AWS.config');\r\n }\r\n }\r\n\r\n configure(config) {\r\n logger.debug('configure Auth');\r\n\r\n let conf = config? config.Auth || config : {};\r\n if (conf['aws_cognito_identity_pool_id']) {\r\n conf = {\r\n userPoolId: conf['aws_user_pools_id'],\r\n userPoolWebClientId: conf['aws_user_pools_web_client_id'],\r\n region: conf['aws_cognito_region'],\r\n identityPoolId: conf['aws_cognito_identity_pool_id']\r\n };\r\n }\r\n this._config = Object.assign({}, this._config, conf);\r\n if (!this._config.identityPoolId) { logger.debug('Do not have identityPoolId yet.'); }\r\n\r\n const { userPoolId, userPoolWebClientId } = this._config;\r\n if (userPoolId) {\r\n this.userPool = new CognitoUserPool({\r\n UserPoolId: userPoolId,\r\n ClientId: userPoolWebClientId\r\n });\r\n if (Platform.isReactNative) {\r\n const that = this;\r\n this._userPoolStorageSync = new Promise((resolve, reject) => {\r\n this.userPool.storage.sync((err, data) => {\r\n if (err) {\r\n reject(err);\r\n } else {\r\n resolve(data);\r\n }\r\n });\r\n });\r\n } else {\r\n this.pickupCredentials();\r\n }\r\n }\r\n\r\n return this._config;\r\n }\r\n\r\n /**\r\n * Sign up with username, password and other attrbutes like phone, email\r\n * @param {String | object} params - The user attirbutes used for signin\r\n * @param {String[]} restOfAttrs - for the backward compatability \r\n * @return - A promise resolves callback data if success\r\n */\r\n public signUp(params: string | object, ...restOfAttrs: string[]): Promise {\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n\r\n let username : string = null;\r\n let password : string = null;\r\n const attributes : object[] = [];\r\n let validationData: object[] = null;\r\n if (params && typeof params === 'string') {\r\n username = params;\r\n password = restOfAttrs? restOfAttrs[0] : null;\r\n const email : string = restOfAttrs? restOfAttrs[1] : null;\r\n const phone_number : string = restOfAttrs? restOfAttrs[2] : null;\r\n if (email) attributes.push({Name: 'email', Value: email});\r\n if (phone_number) attributes.push({Name: 'phone_number', Value: phone_number}); \r\n } else if (params && typeof params === 'object') {\r\n username = params['username'];\r\n password = params['password'];\r\n const attrs = params['attributes'];\r\n if (attrs) {\r\n Object.keys(attrs).map(key => {\r\n const ele : object = { Name: key, Value: attrs[key] };\r\n attributes.push(ele);\r\n });\r\n }\r\n validationData = params['validationData'] || null;\r\n } else {\r\n return Promise.reject('The first parameter should either be non-null string or object');\r\n }\r\n\r\n if (!username) { return Promise.reject('Username cannot be empty'); }\r\n if (!password) { return Promise.reject('Password cannot be empty'); } \r\n \r\n logger.debug('signUp attrs:', attributes);\r\n logger.debug('signUp validation data:', validationData);\r\n \r\n return new Promise((resolve, reject) => {\r\n this.userPool.signUp(username, password, attributes, validationData, function(err, data) {\r\n if (err) {\r\n dispatchAuthEvent('signUp_failure', err);\r\n reject(err);\r\n } else {\r\n dispatchAuthEvent('signUp', data);\r\n resolve(data);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Send the verfication code to confirm sign up\r\n * @param {String} username - The username to be confirmed\r\n * @param {String} code - The verification code\r\n * @return - A promise resolves callback data if success\r\n */\r\n public confirmSignUp(username: string, code: string): Promise {\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n if (!username) { return Promise.reject('Username cannot be empty'); }\r\n if (!code) { return Promise.reject('Code cannot be empty'); }\r\n\r\n const user = new CognitoUser({\r\n Username: username,\r\n Pool: this.userPool\r\n });\r\n return new Promise((resolve, reject) => {\r\n user.confirmRegistration(code, true, function(err, data) {\r\n if (err) { reject(err); } else { resolve(data); }\r\n });\r\n });\r\n }\r\n \r\n /**\r\n * Resend the verification code\r\n * @param {String} username - The username to be confirmed\r\n * @return - A promise resolves data if success\r\n */\r\n public resendSignUp(username: string): Promise {\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n if (!username) { return Promise.reject('Username cannot be empty'); }\r\n\r\n const user = new CognitoUser({\r\n Username: username,\r\n Pool: this.userPool\r\n });\r\n return new Promise((resolve, reject) => {\r\n user.resendConfirmationCode(function(err, data) {\r\n if (err) { reject(err); } else { resolve(data); }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Sign in\r\n * @param {String} username - The username to be signed in \r\n * @param {String} password - The password of the username\r\n * @return - A promise resolves the CognitoUser object if success or mfa required\r\n */\r\n public signIn(username: string, password: string): Promise {\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n if (!username) { return Promise.reject('Username cannot be empty'); }\r\n if (!password) { return Promise.reject('Password cannot be empty'); }\r\n\r\n const user = new CognitoUser({\r\n Username: username,\r\n Pool: this.userPool\r\n });\r\n const authDetails = new AuthenticationDetails({\r\n Username: username,\r\n Password: password\r\n });\r\n const that = this;\r\n return new Promise((resolve, reject) => {\r\n user.authenticateUser(authDetails, {\r\n onSuccess: (session) => {\r\n logger.debug(session);\r\n that.setCredentialsFromSession(session);\r\n that.user = user;\r\n dispatchAuthEvent('signIn', user);\r\n resolve(user);\r\n },\r\n onFailure: (err) => {\r\n logger.debug('signIn failure', err);\r\n dispatchAuthEvent('signIn_failure', err);\r\n reject(err);\r\n },\r\n mfaRequired: (challengeName, challengeParam) => {\r\n logger.debug('signIn MFA required');\r\n user['challengeName'] = challengeName;\r\n user['challengeParam'] = challengeParam;\r\n resolve(user);\r\n },\r\n newPasswordRequired: (userAttributes, requiredAttributes) => {\r\n logger.debug('signIn new password');\r\n user['challengeName'] = 'NEW_PASSWORD_REQUIRED';\r\n user['challengeParam'] = {\r\n userAttributes,\r\n requiredAttributes\r\n };\r\n resolve(user);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Send MFA code to confirm sign in\r\n * @param {Object} user - The CognitoUser object\r\n * @param {String} code - The confirmation code\r\n */\r\n public confirmSignIn(user: any, code: string): Promise {\r\n if (!code) { return Promise.reject('Code cannot be empty'); }\r\n\r\n const that = this;\r\n return new Promise((resolve, reject) => {\r\n user.sendMFACode(code, {\r\n onSuccess: (session) => {\r\n logger.debug(session);\r\n that.setCredentialsFromSession(session);\r\n that.user = user;\r\n dispatchAuthEvent('signIn', user);\r\n resolve(user);\r\n },\r\n onFailure: (err) => {\r\n logger.debug('confirm signIn failure', err);\r\n reject(err);\r\n }\r\n });\r\n });\r\n }\r\n\r\n public completeNewPassword(\r\n user: any,\r\n password: string,\r\n requiredAttributes: any\r\n ): Promise {\r\n if (!password) { return Promise.reject('Password cannot be empty'); }\r\n\r\n const that = this;\r\n return new Promise((resolve, reject) => {\r\n user.completeNewPasswordChallenge(password, requiredAttributes, {\r\n onSuccess: (session) => {\r\n logger.debug(session);\r\n that.setCredentialsFromSession(session);\r\n that.user = user;\r\n dispatchAuthEvent('signIn', user);\r\n resolve(user);\r\n },\r\n onFailure: (err) => {\r\n logger.debug('completeNewPassword failure', err);\r\n reject(err);\r\n },\r\n mfaRequired: (challengeName, challengeParam) => {\r\n logger.debug('signIn MFA required');\r\n user['challengeName'] = challengeName;\r\n user['challengeParam'] = challengeParam;\r\n resolve(user);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Update an authenticated users' attributes\r\n * @param {CognitoUser} - The currently logged in user object\r\n * @return {Promise} \r\n **/\r\n public updateUserAttributes(user, attributes:object): Promise {\r\n let attr:object = {};\r\n const attributeList:Array = [];\r\n return this.userSession(user)\r\n .then(session => {\r\n return new Promise((resolve, reject) => {\r\n for (const key in attributes) {\r\n if ( key !== 'sub' &&\r\n key.indexOf('_verified') < 0 && \r\n attributes[key] ) {\r\n attr = {\r\n 'Name': key,\r\n 'Value': attributes[key]\r\n };\r\n attributeList.push(attr);\r\n }\r\n }\r\n user.updateAttributes(attributeList, (err,result) => {\r\n if (err) { reject(err); } else { resolve(result); }\r\n });\r\n });\r\n }); \r\n }\r\n /**\r\n * Return user attributes\r\n * @param {Object} user - The CognitoUser object\r\n * @return - A promise resolves to user attributes if success\r\n */\r\n public userAttributes(user): Promise {\r\n return this.userSession(user)\r\n .then(session => {\r\n return new Promise((resolve, reject) => {\r\n user.getUserAttributes((err, attributes) => {\r\n if (err) { reject(err); } else { resolve(attributes); }\r\n });\r\n });\r\n });\r\n }\r\n\r\n public verifiedContact(user) {\r\n const that = this;\r\n return this.userAttributes(user)\r\n .then(attributes => {\r\n const attrs = that.attributesToObject(attributes);\r\n const unverified = {};\r\n const verified = {};\r\n if (attrs['email']) {\r\n if (attrs['email_verified']) {\r\n verified['email'] = attrs['email'];\r\n } else {\r\n unverified['email'] = attrs['email'];\r\n }\r\n }\r\n if (attrs['phone_number']) {\r\n if (attrs['phone_number_verified']) {\r\n verified['phone_number'] = attrs['phone_number'];\r\n } else {\r\n unverified['phone_number'] = attrs['phone_number'];\r\n }\r\n }\r\n return {\r\n verified,\r\n unverified\r\n };\r\n });\r\n }\r\n\r\n /**\r\n * Get current authenticated user\r\n * @return - A promise resolves to curret authenticated CognitoUser if success\r\n */\r\n public currentUserPoolUser(): Promise {\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n let user = null;\r\n if (Platform.isReactNative) {\r\n const that = this;\r\n return this.getSyncedUser().then(user => {\r\n return new Promise((resolve, reject) => {\r\n user.getSession(function(err, session) {\r\n if (err) { reject(err); } else { resolve(user); }\r\n });\r\n });\r\n });\r\n } else {\r\n user = this.userPool.getCurrentUser();\r\n if (!user) { return Promise.reject('No current user in userPool'); }\r\n return new Promise((resolve, reject) => {\r\n user.getSession(function(err, session) {\r\n if (err) { reject(err); } else { resolve(user); }\r\n });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Return the current user after synchornizing AsyncStorage\r\n * @return - A promise with the current authenticated user\r\n **/\r\n private getSyncedUser(): Promise {\r\n const that = this;\r\n return (this._userPoolStorageSync || Promise.resolve()).then(result => {\r\n if (!that.userPool) {\r\n return Promise.reject('No userPool');\r\n }\r\n that.credentials_source = 'userPool';\r\n return that.userPool.getCurrentUser();\r\n });\r\n }\r\n\r\n /**\r\n * Get current authenticated user\r\n * @return - A promise resolves to curret authenticated CognitoUser if success\r\n */\r\n public currentAuthenticatedUser(): Promise {\r\n const source = this.credentials_source;\r\n logger.debug('get current authenticated user. source ' + source);\r\n if (!source || source === 'aws' || source === 'userPool') {\r\n return this.currentUserPoolUser();\r\n }\r\n if (source === 'federated') {\r\n return Promise.resolve(this.user);\r\n }\r\n return Promise.reject('not authenticated');\r\n }\r\n\r\n /**\r\n * Get current user's session\r\n * @return - A promise resolves to session object if success \r\n */\r\n public currentSession() : Promise {\r\n let user:any;\r\n const that = this;\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n if (Platform.isReactNative) {\r\n return this.getSyncedUser().then(user => {\r\n if (!user) { return Promise.reject('No current user'); }\r\n return that.userSession(user);\r\n });\r\n } else {\r\n user = this.userPool.getCurrentUser();\r\n if (!user) { return Promise.reject('No current user'); }\r\n return this.userSession(user);\r\n }\r\n }\r\n\r\n /**\r\n * Get the corresponding user session\r\n * @param {Object} user - The CognitoUser object\r\n * @return - A promise resolves to the session\r\n */\r\n public userSession(user) : Promise {\r\n return new Promise((resolve, reject) => {\r\n logger.debug(user);\r\n user.getSession(function(err, session) {\r\n if (err) { reject(err); } else { resolve(session); }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Get authenticated credentials of current user.\r\n * @return - A promise resolves to be current user's credentials\r\n */\r\n public currentUserCredentials() : Promise {\r\n if (Platform.isReactNative) {\r\n // asyncstorage\r\n const that = this;\r\n return Cache.getItem('federatedInfo')\r\n .then((federatedInfo) => {\r\n if (federatedInfo) {\r\n const { provider, token, user} = federatedInfo;\r\n return new Promise((resolve, reject) => {\r\n that.setCredentialsFromFederation(provider, token, user);\r\n resolve();\r\n });\r\n } else {\r\n return that.currentSession()\r\n .then(session => that.setCredentialsFromSession(session));\r\n }\r\n }).catch((error) => {\r\n return new Promise((resolve, reject) => {\r\n reject(error);\r\n });\r\n });\r\n } else {\r\n // first to check whether there is federation info in the local storage\r\n const federatedInfo = Cache.getItem('federatedInfo');\r\n if (federatedInfo) {\r\n const { provider, token, user} = federatedInfo;\r\n return new Promise((resolve, reject) => {\r\n this.setCredentialsFromFederation(provider, token, user);\r\n resolve();\r\n });\r\n } else {\r\n return this.currentSession()\r\n .then(session => this.setCredentialsFromSession(session));\r\n }\r\n }\r\n }\r\n\r\n public currentCredentials(): Promise {\r\n return this.pickupCredentials();\r\n }\r\n\r\n /**\r\n * Initiate an attribute confirmation request\r\n * @param {Object} user - The CognitoUser\r\n * @param {Object} attr - The attributes to be verified\r\n * @return - A promise resolves to callback data if success\r\n */\r\n public verifyUserAttribute(user, attr): Promise {\r\n return new Promise((resolve, reject) => {\r\n user.getAttributeVerificationCode(attr, {\r\n onSuccess(data) { resolve(data); },\r\n onFailure(err) { reject(err); }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Confirm an attribute using a confirmation code\r\n * @param {Object} user - The CognitoUser\r\n * @param {Object} attr - The attribute to be verified\r\n * @param {String} code - The confirmation code\r\n * @return - A promise resolves to callback data if success\r\n */\r\n public verifyUserAttributeSubmit(user, attr, code): Promise {\r\n if (!code) { return Promise.reject('Code cannot be empty'); }\r\n\r\n return new Promise((resolve, reject) => {\r\n user.verifyAttribute(attr, code, {\r\n onSuccess(data) { resolve(data); },\r\n onFailure(err) { reject(err); }\r\n });\r\n });\r\n }\r\n\r\n verifyCurrentUserAttribute(attr) {\r\n const that = this;\r\n return that.currentUserPoolUser()\r\n .then(user => that.verifyUserAttribute(user, attr));\r\n }\r\n\r\n /**\r\n * Confirm current user's attribute using a confirmation code\r\n * @param {Object} attr - The attribute to be verified\r\n * @param {String} code - The confirmation code\r\n * @return - A promise resolves to callback data if success\r\n */\r\n verifyCurrentUserAttributeSubmit(attr, code) {\r\n const that = this;\r\n return that.currentUserPoolUser()\r\n .then(user => that.verifyUserAttributeSubmit(user, attr, code));\r\n }\r\n /**\r\n * Sign out method\r\n * @return - A promise resolved if success\r\n */\r\n public signOut(): Promise {\r\n const source = this.credentials_source;\r\n\r\n // clean out the cached stuff\r\n this.credentials.clearCachedId();\r\n // clear federatedInfo\r\n Cache.removeItem('federatedInfo');\r\n\r\n if (source === 'aws' || source === 'userPool') {\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n\r\n const user = this.userPool.getCurrentUser();\r\n if (!user) { return Promise.resolve(); }\r\n\r\n user.signOut();\r\n }\r\n\r\n return new Promise((resolve, reject) => {\r\n this.setCredentialsForGuest();\r\n dispatchAuthEvent('signOut', this.user);\r\n this.user = null;\r\n resolve();\r\n });\r\n }\r\n\r\n /**\r\n * Initiate a forgot password request\r\n * @param {String} username - the username to change password\r\n * @return - A promise resolves if success \r\n */\r\n public forgotPassword(username: string): Promise {\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n if (!username) { return Promise.reject('Username cannot be empty'); }\r\n\r\n const user = new CognitoUser({\r\n Username: username,\r\n Pool: this.userPool\r\n });\r\n return new Promise((resolve, reject) => {\r\n user.forgotPassword({\r\n onSuccess: () => { resolve(); },\r\n onFailure: err => {\r\n logger.debug('forgot password failure', err);\r\n reject(err);\r\n },\r\n inputVerificationCode: data => {\r\n resolve(data);\r\n }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Confirm a new password using a confirmation Code\r\n * @param {String} username - The username \r\n * @param {String} code - The confirmation code\r\n * @param {String} password - The new password\r\n * @return - A promise that resolves if success\r\n */\r\n public forgotPasswordSubmit(\r\n username: string,\r\n code: string,\r\n password: string\r\n ): Promise {\r\n if (!this.userPool) { return Promise.reject('No userPool'); }\r\n if (!username) { return Promise.reject('Username cannot be empty'); }\r\n if (!code) { return Promise.reject('Code cannot be empty'); }\r\n if (!password) { return Promise.reject('Password cannot be empty'); }\r\n\r\n const user = new CognitoUser({\r\n Username: username,\r\n Pool: this.userPool\r\n });\r\n return new Promise((resolve, reject) => {\r\n user.confirmPassword(code, password, {\r\n onSuccess: () => { resolve(); },\r\n onFailure: err => { reject(err); }\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Get user information\r\n * @async\r\n * @return {Object }- current User's information\r\n */\r\n public async currentUserInfo() {\r\n const credentials = this.credentials;\r\n const source = this.credentials_source;\r\n if (!source) { return null; }\r\n\r\n if (source === 'aws' || source === 'userPool') {\r\n const user = await this.currentUserPoolUser()\r\n .catch(err => logger.debug(err));\r\n if (!user) { return null; }\r\n\r\n try {\r\n const attributes = await this.userAttributes(user);\r\n const userAttrs:object = this.attributesToObject(attributes);\r\n \r\n const info = {\r\n 'id': credentials.identityId,\r\n 'username': user.username,\r\n 'attributes': userAttrs\r\n };\r\n return info;\r\n } catch(err) {\r\n console.warn(err);\r\n logger.debug('currentUserInfo error', err);\r\n return {};\r\n }\r\n }\r\n\r\n if (source === 'federated') {\r\n const user = this.user;\r\n return user? user : {};\r\n }\r\n }\r\n\r\n /**\r\n * For federated login\r\n * @param {String} provider - federation login provider\r\n * @param {Object} response - response including access_token\r\n * @param {String} user - user info \r\n */\r\n public federatedSignIn(provider, response, user) {\r\n const { token, expires_at } = response;\r\n this.setCredentialsFromFederation(provider, token, user);\r\n\r\n // store it into localstorage\r\n Cache.setItem('federatedInfo', { provider, token, user }, { priority: 1 });\r\n dispatchAuthEvent('signIn', this.user);\r\n logger.debug('federated sign in credentials', this.credentials);\r\n return this.keepAlive();\r\n }\r\n\r\n /**\r\n * Compact version of credentials\r\n * @param {Object} credentials\r\n * @return {Object} - Credentials\r\n */\r\n public essentialCredentials(credentials) {\r\n return {\r\n accessKeyId: credentials.accessKeyId,\r\n sessionToken: credentials.sessionToken,\r\n secretAccessKey: credentials.secretAccessKey,\r\n identityId: credentials.identityId,\r\n authenticated: credentials.authenticated\r\n };\r\n }\r\n\r\n private attributesToObject(attributes) {\r\n const obj = {};\r\n if (attributes) {\r\n attributes.map(attribute => {\r\n if (attribute.Name === 'sub') return;\r\n\r\n if (attribute.Value === 'true') {\r\n obj[attribute.Name] = true;\r\n } else if (attribute.Value === 'false') {\r\n obj[attribute.Name] = false;\r\n } else {\r\n obj[attribute.Name] = attribute.Value;\r\n }\r\n });\r\n }\r\n return obj;\r\n }\r\n\r\n private setCredentialsFromFederation(provider, token, user) {\r\n const domains = {\r\n 'google': 'accounts.google.com',\r\n 'facebook': 'graph.facebook.com',\r\n 'amazon': 'www.amazon.com'\r\n };\r\n\r\n const domain = domains[provider];\r\n if (!domain) {\r\n return Promise.reject(provider + ' is not supported: [google, facebook, amazon]');\r\n }\r\n\r\n const logins = {};\r\n logins[domain] = token;\r\n\r\n const { identityPoolId, region } = this._config;\r\n this.credentials = new AWS.CognitoIdentityCredentials(\r\n {\r\n IdentityPoolId: identityPoolId,\r\n Logins: logins\r\n }, {\r\n region\r\n });\r\n this.credentials.authenticated = true;\r\n this.credentials_source = 'federated';\r\n\r\n this.user = Object.assign(\r\n { id: this.credentials.identityId },\r\n user\r\n );\r\n \r\n if (AWS && AWS.config) { AWS.config.credentials = this.credentials; }\r\n }\r\n\r\n private pickupCredentials() {\r\n if (this.credentials) {\r\n return this.keepAlive();\r\n } else if (this.setCredentialsFromAWS()) {\r\n return this.keepAlive();\r\n } else {\r\n return this.currentUserCredentials()\r\n .then(() => this.keepAlive())\r\n .catch(err => {\r\n logger.debug('error when pickup', err);\r\n this.setCredentialsForGuest();\r\n return this.keepAlive();\r\n });\r\n }\r\n }\r\n\r\n private setCredentialsFromAWS() {\r\n if (AWS.config && AWS.config.credentials) {\r\n this.credentials = AWS.config.credentials;\r\n this.credentials_source = 'aws';\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private setCredentialsForGuest() {\r\n const { identityPoolId, region } = this._config;\r\n const credentials = new CognitoIdentityCredentials(\r\n {\r\n IdentityPoolId: identityPoolId\r\n }, {\r\n region\r\n });\r\n credentials.params['IdentityId'] = null; // Cognito load IdentityId from local cache\r\n this.credentials = credentials;\r\n this.credentials.authenticated = false;\r\n this.credentials_source = 'guest';\r\n }\r\n \r\n private setCredentialsFromSession(session) {\r\n logger.debug('set credentials from session');\r\n const idToken = session.getIdToken().getJwtToken();\r\n const { region, userPoolId, identityPoolId } = this._config;\r\n const key = 'cognito-idp.' + region + '.amazonaws.com/' + userPoolId;\r\n const logins = {};\r\n logins[key] = idToken;\r\n this.credentials = new CognitoIdentityCredentials(\r\n {\r\n IdentityPoolId: identityPoolId,\r\n Logins: logins\r\n }, {\r\n region\r\n });\r\n this.credentials.authenticated = true;\r\n this.credentials_source = 'userPool';\r\n }\r\n\r\n private keepAlive() {\r\n if (!this.credentials) { this.setCredentialsForGuest(); }\r\n\r\n const ts = new Date().getTime();\r\n const delta = 10 * 60 * 1000; // 10 minutes\r\n let credentials = this.credentials;\r\n const { expired, expireTime } = credentials;\r\n if (!expired && expireTime > ts + delta) {\r\n return Promise.resolve(credentials);\r\n }\r\n\r\n const that = this;\r\n return new Promise((resolve, reject) => {\r\n that.currentUserCredentials()\r\n .then(() => {\r\n credentials = that.credentials;\r\n credentials.refresh(err => {\r\n logger.debug('changed from previous');\r\n if (err) {\r\n logger.debug('refresh credentials error', err);\r\n resolve(null);\r\n } else {\r\n resolve(credentials);\r\n }\r\n });\r\n });\r\n });\r\n }\r\n}\r\n\n\n\n// WEBPACK FOOTER //\n// ./src/Auth/Auth.ts","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\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/aws-sdk/clients/s3.js\n// module id = 117\n// module chunks = 0 1","var apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, window, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, window, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(window, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\nexports.setImmediate = setImmediate;\nexports.clearImmediate = clearImmediate;\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// /Users/zhashen/Projects/javascript/aws-amplify/node_modules/timers-browserify/main.js\n// module id = 118\n// module chunks = 0 1","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a