{"version":3,"sources":["webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/credentials/chainable_temporary_credentials.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/protocol/rest.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/event-stream/int64.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/config.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/browserSha1.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/credentials/cognito_identity_credentials.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/api_loader.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/credentials/saml_credentials.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/protocol/json.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/model/operation.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/state_machine.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/querystring-es3/encode.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/browserSha256.js","webpack:///./node_modules/gatsby/node_modules/core-js/internals/string-trim-forced.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/xml/xml-text.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/browserHmac.js","webpack:///./node_modules/crypto-js/hmac-sha256.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/services/sts.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/xml/escape-element.js","webpack:///./node_modules/@aws-amplify/core/node_modules/uuid/index.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/event-stream/parse-message.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/browserCryptoLib.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/request.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/signers/presign.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/types/Auth.js","webpack:///./node_modules/amazon-cognito-identity-js/es/AuthenticationDetails.js","webpack:///./node_modules/amazon-cognito-identity-js/es/BigInteger.js","webpack:///./node_modules/amazon-cognito-identity-js/es/AuthenticationHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoJwtToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoAccessToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoIdToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoRefreshToken.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserSession.js","webpack:///./node_modules/amazon-cognito-identity-js/es/DateHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserAttribute.js","webpack:///./node_modules/amazon-cognito-identity-js/es/StorageHelper.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUser.js","webpack:///./node_modules/amazon-cognito-identity-js/es/UserAgent.js","webpack:///./node_modules/amazon-cognito-identity-js/es/Client.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CognitoUserPool.js","webpack:///./node_modules/amazon-cognito-identity-js/es/CookieStorage.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/Errors.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/Auth.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/urlOpener.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/OAuth.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/OAuth/oauthStorage.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/urlListener.js","webpack:///./node_modules/@aws-amplify/auth/lib-esm/index.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/xml/builder.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/signers/s3.js","webpack:///./node_modules/jmespath/jmespath.js","webpack:///./node_modules/url/url.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/util.js","webpack:///./node_modules/crypto-js/enc-base64.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/signers/v2.js","webpack:///./node_modules/crypto-js/lib-typedarrays.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/json/builder.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/credentials/temporary_credentials.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/clients/cognitoidentity.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/services/cognitoidentity.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Logger/ConsoleLogger.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Amplify.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/ClientDevice/browser.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/ClientDevice/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Hub.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/I18n/I18n.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/I18n/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Signer.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Parser.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/OAuthHelper/GoogleOAuth.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/OAuthHelper/FacebookOAuth.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/OAuthHelper/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/StorageHelper/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Credentials.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/RNComponents/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/Platform/index.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/ServiceWorker/ServiceWorker.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/index.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/protocol/rest_xml.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/resource_waiter.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/protocol/rest_json.js","webpack:///./node_modules/@aws-amplify/core/lib-esm/JS.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/browserMd5.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/browser_loader.js","webpack:///./node_modules/crypto-js/core.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/query/query_param_serializer.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/signers/v4.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/realclock/browserClock.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/json/parser.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/url/util.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/vendor/endpoint-cache/utils/LRU.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/credentials/credential_provider_chain.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/signers/v3.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/signers/request_signer.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/signers/v4_credentials.js","webpack:///./node_modules/@aws-amplify/core/node_modules/uuid/lib/bytesToUuid.js","webpack:///./node_modules/crypto-js/hmac.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/protocol/query.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/model/api.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/http/xhr.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/model/collection.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/param_validator.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/response.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/browserHashUtils.js","webpack:///./node_modules/@aws-amplify/core/node_modules/uuid/lib/rng-browser.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/xml/xml-node.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/sequential_executor.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/event-stream/event-message-chunker.js","webpack:///./node_modules/gatsby/node_modules/core-js/modules/es.string.trim-start.js","webpack:///./node_modules/node-libs-browser/node_modules/events/events.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/core.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/clients/sts.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/credentials.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/event-stream/buffered-create-event-stream.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/event-stream/parse-event.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/querystring-es3/decode.js","webpack:///./node_modules/@aws-amplify/core/node_modules/uuid/v1.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/model/paginator.js","webpack:///./node_modules/crypto-js/sha256.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/service.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/credentials/web_identity_credentials.js","webpack:///./node_modules/@aws-amplify/core/node_modules/uuid/v4.js","webpack:///./node_modules/punycode/punycode.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/event-stream/split-message.js","webpack:///./node_modules/js-cookie/src/js.cookie.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/browser.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/event_listeners.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/xml/escape-attribute.js","webpack:///./node_modules/querystring-es3/index.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/model/resource_waiter.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/region_config.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/xml/browser_parser.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/protocol/helpers.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/vendor/endpoint-cache/index.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/model/shape.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/signers/v3https.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/http.js","webpack:///./node_modules/@aws-amplify/core/node_modules/aws-sdk/lib/discover_endpoint.js"],"names":["AWS","STS","ChainableTemporaryCredentials","util","inherit","Credentials","constructor","options","call","this","errorCode","expired","tokenCodeFn","params","copy","RoleArn","RoleSessionName","SerialNumber","error","Error","code","config","merge","credentials","masterCredentials","stsConfig","service","refresh","callback","coalesceRefresh","fn","load","self","operation","getTokenCode","err","tokenCode","TokenCode","data","credentialsFrom","token","message","populateHostPrefix","generateURI","endpointPath","operationPath","input","uri","join","replace","queryString","queryStringSet","each","members","name","member","paramValue","location","regex","RegExp","_","plus","uriEscapePath","uriEscape","String","type","map","val","toWireFormat","toString","key","value","Array","isArray","indexOf","parts","arrayEach","Object","keys","sort","i","length","push","module","exports","buildRequest","req","httpRequest","method","api","operations","httpMethod","populateMethod","endpoint","path","httpPath","populateURI","memberValue","headers","isJsonValue","base64","encode","populateHeaders","extractError","extractData","resp","request","r","httpResponse","output","k","v","toLowerCase","header","isLocationName","pattern","result","match","undefined","decode","toType","parseInt","statusCode","toBuffer","buffer","Int64","bytes","Buffer","isBuffer","negate","fromNumber","number","Uint8Array","remaining","Math","abs","round","prototype","valueOf","slice","negative","PromisesDependency","Config","extractCredentials","set","getCredentials","finish","credError","msg","get","accessKeyId","secretAccessKey","credentialProvider","resolve","creds","update","allowUnknownKeys","hasOwnProperty","Service","hasService","loadFromPath","clear","JSON","parse","readFileSync","fileSystemCreds","FileSystemCredentials","chain","CredentialProviderChain","providers","unshift","property","defaultValue","region","logger","apiVersions","apiVersion","httpOptions","timeout","maxRetries","maxRedirects","paramValidation","sslEnabled","s3ForcePathStyle","s3BucketEndpoint","s3DisableBodySigning","computeChecksums","convertResponseTypes","correctClockSkew","customUserAgent","dynamoDbCrc32","systemClockOffset","signatureVersion","signatureCache","retryDelayOptions","useAccelerateEndpoint","clientSideMonitoring","endpointDiscoveryEnabled","endpointCacheSize","hostPrefixEnabled","setPromisesDependency","dep","Promise","constructors","Request","S3","ManagedUpload","addPromises","getPromisesDependency","arg","fill","readUInt8","hashUtils","Uint32Array","pow","Sha1","h0","h1","h2","h3","h4","block","offset","shift","totalLength","BLOCK_SIZE","finished","isEmptyData","convertToBuffer","write","byte","processBlock","digest","encoding","s","out","outView","DataView","setUint32","w","f","a","b","c","d","e","temp","CognitoIdentity","CognitoIdentityCredentials","localStorageKey","id","clientConfig","_identityId","_clientConfig","loadCachedId","defineProperty","IdentityId","identityId","createClients","getId","clearIdOnNotAuthorized","getCredentialsFromSTS","getCredentialsForIdentity","clearCachedId","poolId","IdentityPoolId","loginId","LoginId","storage","cognito","loadCredentials","AccessKeyId","SecretKey","sessionToken","SessionToken","expireTime","Expiration","cacheId","getOpenIdToken","WebIdentityToken","Token","webIdentityCredentials","webErr","sts","isBrowser","getStorage","Logins","actualProviders","split","filter","n","WebIdentityCredentials","cognitoConfig","setStorage","window","localStorage","apiLoader","svc","version","services","SAMLCredentials","assumeRoleWithSAML","JsonBuilder","JsonParser","target","targetPrefix","jsonVersion","builder","body","build","__type","pop","Message","statusMessage","shape","parser","Shape","memoizedProperty","http","requestUri","authtype","endpointdiscovery","required","create","list","errors","paginators","documentation","documentationUrl","idempotentMembers","isIdempotent","topLevelShape","payload","isEventStream","hasEventStream","AcceptorStateMachine","states","state","currentState","runTo","finalState","done","bindObject","inputError","fail","accept","addState","acceptState","failState","arr","stringifyPrimitive","isFinite","obj","sep","eq","objectKeys","ks","encodeURIComponent","xs","res","KEY","MAX_HASHABLE_LENGTH","Sha256","Int32Array","bufferLength","bytesHashed","position","byteLength","hashBuffer","bitsHashed","bufferView","byteOffset","undecoratedLength","setUint8","floor","state0","state1","state2","state3","state4","state5","state6","state7","u","t1_1","t2_1","t1","t2","fails","whitespaces","METHOD_NAME","escapeElement","XmlText","Hmac","hashCtor","secret","hash","outer","inner","bufferHash","bufferFromSecret","toHash","CryptoJS","HmacSHA256","TemporaryCredentials","SecretAccessKey","assumeRoleWithWebIdentity","makeUnauthenticatedRequest","v1","v4","uuid","splitMessage","parseHeaders","nameLength","readInt8","readInt16BE","readInt32BE","binaryLength","readUInt16BE","stringLength","Date","uuidChars","substr","parseMessage","parsed","Md5","createHash","alg","createHmac","createSign","domain","jmespath","hardErrorStates","success","complete","fsm","setupStates","transition","_haltHandlersOnError","emit","_asm","machine","Domain","domainEmitter","domainThrown","response","isGlobalEndpoint","active","HttpRequest","appendToUserAgent","startTime","getSkewCorrectedDate","Response","SequentialExecutor","emitEvent","send","on","abort","removeAllListeners","retryable","stream","didCallback","_abortCallback","eachPage","makeAsync","wrappedCallback","hasNextPage","nextPage","noop","eachItem","resultKey","paginationConfig","items","search","continueIteration","item","isPageable","createReadStream","streams","HttpClient","streamsApiVersion","PassThrough","process","nextTick","Stream","readable","sent","event","removeListener","EventListeners","Core","HTTP_DATA","HTTP_ERROR","expectedLen","shouldCheckContentLength","isNaN","receivedLen","checkContentLengthAndEmit","end","httpStream","createUnbufferedStream","lengthAccumulator","_write","chunk","apply","arguments","unpipe","pipe","eventName","args","eventParameters","presign","expires","Signers","Presign","sign","toGet","isPresigned","toUnauthenticated","_unAuthenticated","VALIDATE_CREDENTIALS","SIGN","protocol","buildAsGet","addListener","haltHandlersOnError","addPromisesToClass","PromiseDependency","promise","reject","deletePromisesFromClass","mixin","expiresHeader","signedUrlBuilder","signerClass","getSignerClass","V4","now","date","getDate","unixTimestamp","signedUrlSigner","parsedUrl","urlParse","queryParams","queryStringParse","auth","signature","pathname","queryParamsToString","SET_CONTENT_LENGTH","COMPUTE_SHA256","urlFormat","CognitoHostedUIIdentityProvider","AuthErrorTypes","isFederatedSignInOptions","find","isCognitoHostedOpts","oauth","redirectSignIn","dbits","AuthenticationDetails","instance","Constructor","TypeError","_classCallCheck","_ref","ValidationData","Username","Password","AuthParameters","ClientMetadata","validationData","authParameters","clientMetadata","username","password","getUsername","getPassword","getValidationData","getAuthParameters","getClientMetadata","BigInteger","fromString","nbi","inBrowser","navigator","appName","am","x","j","xl","xh","l","h","m","DB","DM","DV","FV","F1","F2","rr","vv","BI_RC","charCodeAt","int2char","charAt","intAt","nbv","fromInt","nbits","t","Montgomery","mp","invDigit","mpl","mph","um","mt2","convert","dlShiftTo","divRemTo","compareTo","ZERO","subTo","revert","copyTo","reduce","u0","clamp","drShiftTo","mulTo","y","multiplyTo","sqrTo","squareTo","mi","sh","max","lShiftTo","bs","cbs","bm","ds","rShiftTo","min","q","pm","pt","ts","ms","nsh","ys","y0","yt","d1","d2","ONE","qd","addTo","km","p","bitLength","mod","equals","add","subtract","multiply","divide","modPow","z","g","k1","g2","is1","r2","nBytes","from","lib","WordArray","random","AuthenticationHelper","PoolName","N","hexHash","smallAValue","generateRandomSmallA","getLargeAValue","infoBits","poolName","getSmallAValue","_this","largeAValue","calculateA","hexRandom","generateRandomString","getRandomPassword","randomPassword","getSaltDevices","SaltToHashDevices","getVerifierDevices","verifierDevices","generateHashDevice","deviceGroupKey","_this2","combinedString","hashedString","padHex","verifierDevicesNotPadded","_this3","A","calculateU","B","UHexHash","buf","str","hashHex","hexStr","computehkdf","ikm","salt","infoBitsWordArray","concat","fromCharCode","ikmWordArray","saltWordArray","prk","hmac","getPasswordAuthenticationKey","serverBValue","_this4","UValue","usernamePassword","usernamePasswordHash","xValue","calculateS","sValue","hkdf","_this5","gModPowXN","err2","getNewPasswordRequiredChallengeUserAttributePrefix","bigInt","hashStr","CognitoJwtToken","jwtToken","decodePayload","getJwtToken","getExpiration","exp","getIssuedAt","iat","_possibleConstructorReturn","ReferenceError","_CognitoJwtToken","CognitoAccessToken","AccessToken","subClass","superClass","enumerable","writable","configurable","setPrototypeOf","__proto__","_inherits","CognitoIdToken","IdToken","CognitoRefreshToken","RefreshToken","getToken","CognitoUserSession","ClockDrift","idToken","refreshToken","accessToken","clockDrift","calculateClockDrift","getIdToken","getRefreshToken","getAccessToken","getClockDrift","isValid","adjusted","monthNames","weekNames","DateHelper","getNowString","weekDay","getUTCDay","month","getUTCMonth","day","getUTCDate","hours","getUTCHours","minutes","getUTCMinutes","seconds","getUTCSeconds","getUTCFullYear","CognitoUserAttribute","Name","Value","getValue","setValue","getName","setName","stringify","toJSON","dataMemory","MemoryStorage","setItem","getItem","removeItem","StorageHelper","storageWindow","exception","CognitoUser","Pool","pool","Session","client","signInUserSession","authenticationFlowType","Storage","keyPrefix","getClientId","userDataKey","setSignInUserSession","clearCachedUserData","cacheTokens","getSignInUserSession","getAuthenticationFlowType","setAuthenticationFlowType","initiateAuth","authDetails","USERNAME","clientMetaData","jsonReq","AuthFlow","ClientId","getUserContextData","UserContextData","onFailure","challengeName","ChallengeName","challengeParameters","ChallengeParameters","customChallenge","getCognitoUserSession","AuthenticationResult","onSuccess","authenticateUser","authenticateUserPlainUsernamePassword","authenticateUserDefaultAuth","authenticationHelper","getUserPoolId","dateHelper","deviceKey","DEVICE_KEY","errOnAValue","aValue","SRP_A","CHALLENGE_NAME","USER_ID_FOR_SRP","SRP_B","SALT","getCachedDeviceKeyAndPassword","errOnHkdf","dateNow","SECRET_BLOCK","signatureString","challengeResponses","PASSWORD_CLAIM_SECRET_BLOCK","TIMESTAMP","PASSWORD_CLAIM_SIGNATURE","jsonReqResp","ChallengeResponses","respondToAuthChallenge","challenge","challengeCallback","errChallenge","dataChallenge","clearCachedDeviceKeyAndPassword","errAuthenticate","dataAuthenticate","authenticateUserInternal","PASSWORD","authResult","mfaRequired","selectMFAType","mfaSetup","totpRequired","userAttributes","rawRequiredAttributes","requiredAttributes","userAttributesPrefix","newPasswordRequired","newDeviceMetadata","NewDeviceMetadata","DeviceGroupKey","DeviceKey","errGenHash","deviceSecretVerifierConfig","Salt","PasswordVerifier","DeviceSecretVerifierConfig","DeviceName","userAgent","errConfirm","dataConfirm","cacheDeviceKeyAndPassword","UserConfirmationNecessary","getDeviceResponse","completeNewPasswordChallenge","newPassword","requiredAttributeData","finalUserAttributes","forEach","NEW_PASSWORD","_this6","errAValue","errHkdf","confirmRegistration","confirmationCode","forceAliasCreation","ConfirmationCode","ForceAliasCreation","sendCustomChallengeAnswer","answerChallenge","_this7","ANSWER","sendMFACode","mfaType","_this8","SMS_MFA_CODE","mfaTypeSelection","SOFTWARE_TOKEN_MFA_CODE","changePassword","oldUserPassword","newUserPassword","PreviousPassword","ProposedPassword","enableMFA","mfaOptions","DeliveryMedium","AttributeName","MFAOptions","setUserMfaPreference","smsMfaSettings","softwareTokenMfaSettings","SMSMfaSettings","SoftwareTokenMfaSettings","disableMFA","deleteUser","_this9","clearCachedUser","updateAttributes","attributes","UserAttributes","getUserAttributes","userData","attributeList","attribute","userAttribute","getMFAOptions","getUserData","_this10","bypassCache","latestUserData","cacheUserData","refreshSession","refreshError","deleteAttributes","UserAttributeNames","resendConfirmationCode","getSession","idTokenKey","accessTokenKey","refreshTokenKey","clockDriftKey","cachedSession","_this11","REFRESH_TOKEN","lastUserKey","deviceKeyKey","authenticationResult","clearCachedTokens","randomPasswordKey","deviceGroupKeyKey","forgotPassword","inputVerificationCode","confirmPassword","getAttributeVerificationCode","attributeName","verifyAttribute","Code","getDevice","forgetSpecificDevice","forgetDevice","_this12","setDeviceStatusRemembered","DeviceRememberedStatus","setDeviceStatusNotRemembered","listDevices","limit","paginationToken","Limit","PaginationToken","globalSignOut","_this13","signOut","sendMFASelectionAnswer","_this14","associateSoftwareToken","_this15","associateSecretCode","SecretCode","verifySoftwareToken","totpCode","friendlyDeviceName","_this16","UserCode","FriendlyDeviceName","errRespond","dataRespond","UserAgent","Client","mode","cache","fetch","then","json","catch","ok","_error","status","ex","CognitoUserPool","UserPoolId","AdvancedSecurityDataCollectionFlag","test","userPoolId","clientId","advancedSecurityDataCollectionFlag","signUp","cognitoUser","returnData","user","userConfirmed","UserConfirmed","userSub","UserSub","codeDeliveryDetails","CodeDeliveryDetails","getCurrentUser","lastAuthUser","AmazonCognitoAdvancedSecurityData","amazonCognitoAdvancedSecurityDataConst","advancedSecurityData","getData","EncodedData","_extendStatics","CookieStorage","secure","cookies","index","launchUri","url","windowProxy","open","__assign","assign","__awaiter","thisArg","_arguments","P","generator","fulfilled","step","next","rejected","__generator","label","trys","ops","verb","Symbol","iterator","op","SHA256","Base64","AMPLIFY_SYMBOL","for","dispatch","OAuth","_a","cognitoClientId","_b","scopes","_urlOpener","urlOpener","_config","_cognitoClientId","_scopes","oauthSignIn","responseType","provider","customState","Cognito","generatedState","_generateState","sessionStorage","private_key","pkce_key","_generateRandom","code_challenge","_generateChallenge","URL","entries","redirect_uri","response_type","client_id","identity_provider","code_challenge_method","debug","_handleCodeFlow","currentUrl","oAuthTokenEndpoint","code_verifier","oAuthTokenBody","access_token","refresh_token","id_token","query","pairings","accum","clientID","redirectUri","ouath_pkce_key","grant_type","_handleImplicitFlow","handleAuthResponse","urlParams","error_description","e_1","_c","entry","acc","_validateState","oauth_state","savedState","returnedState","oAuthLogoutEndpoint","signout_uri","redirectSignOut","returnTo","logout_uri","oAuth","chars","_base64URL","string","size","crypto","getRandomValues","_bufferToString","CHARSET","__extends","__","AuthError","_super","authErrorMessages","log","NoUserPoolError","noConfig","missingAuthConfig","emptyUsername","invalidUsername","emptyPassword","emptyCode","signUpError","noMFA","invalidMFA","emptyChallengeResponse","noUserSession","default","Auth","AuthClass","userPool","configure","currentUserCredentials","bind","warn","listen","_storage","getModuleName","conf","parseMobilehubConfig","userPoolWebClientId","cookieStorage","identityPoolId","mandatorySignIn","refreshHandlers","identityPoolRegion","_isValidAuthStorage","_storageSync","userPoolData","cognitoHostedUIConfig","awsCognito","cognitoAuthParams","_oAuthHandler","browserOrNode","href","isNode","urlListener","_handleAuthResponse","restOfAttrs","_i","rejectNoUserPool","email","phone_number","rejectAuthError","SignUpError","attrs_1","ele","EmptyPassword","EmptyUsername","confirmSignUp","EmptyCode","createCognitoUser","resendSignUp","signIn","usernameOrSignInOpts","pw","InvalidUsername","signInWithPassword","signInWithoutPassword","authCallbacks","that","session","cred","currentUser","e_2","currentUserPoolUser","challengeParam","rej","getPreferredMFA","_getMfaTypeFromUserData","ret","preferredMFA","PreferredMfaSetting","mfaList","UserMFASettingList","_getUserData","setPreferredMFA","mfaMethod","totpMfaSettings","currentMFAType","PreferredMfa","Enabled","InvalidMFA","NoMFA","disableSMS","enableSMS","setupTOTP","secretCode","verifyTotpToken","challengeAnswer","confirmSignIn","e_3","completeNewPassword","e_4","EmptyChallengeResponse","updateUserAttributes","userSession","attr","verifiedContact","attrs","attributesToObject","unverified","verified","scope","includes","currentAuthenticatedUser","federatedUser","e_5","e_6","currentSession","NoUserSession","e_7","federatedInfo","refreshFederatedToken","currentCredentials","verifyUserAttribute","verifyUserAttributeSubmit","verifyCurrentUserAttribute","verifyCurrentUserAttributeSubmit","cognitoIdentitySignOut","opts","e_8","isSignedInHostedUI","global","cleanCachedItems","oldPassword","forgotPasswordSubmit","currentUserInfo","source","userAttrs","e_10","err_1","getCredSource","federatedSignIn","providerOrOptions","loggedInUser","identity_id","expires_at","customProvider","hasCodeOrError","hasTokenOrError","isCustomStateIncluded","err_2","history","replaceState","essentialCredentials","authenticated","noUserPoolErrorHandler","NoConfig","MissingAuthConfig","_instance","register","XmlNode","XmlBuilder","serialize","xml","memberNames","memberName","memberShape","isXmlAttribute","addAttribute","flattened","element","addChildNode","applyNamespaces","serializeStructure","xmlKey","xmlValue","entryKey","entryValue","serializeMap","serializeList","serializeScalar","isRoot","prefix","xmlNamespaceUri","xmlNamespacePrefix","toXML","rootElement","noEmpty","children","RequestSigner","subResources","responseHeaders","addAuthorization","rfc822","stringToSign","canonicalizedAmzHeaders","canonicalizedResource","amzHeaders","querystring","resource","virtualHostedBucket","resources","param","subresource","decodeURIComponent","isObject","strictDeepEqual","first","second","keysSeen","key2","isFalse","trimLeft","TYPE_NUMBER","TYPE_STRING","basicTokens","operatorStartToken","skipChars","isNum","ch","Lexer","tokenize","start","identifier","tokens","_current","_consumeUnquotedIdentifier","_consumeNumber","_consumeLBracket","_consumeQuotedIdentifier","_consumeRawStringLiteral","literal","_consumeLiteral","_consumeOperator","maxLength","current","startingChar","literalString","_looksLikeJSON","bindingPower","Parser","TreeInterpreter","runtime","Runtime","interpreter","_interpreter","functionTable","_func","_functionAbs","_signature","types","avg","_functionAvg","ceil","_functionCeil","contains","_functionContains","_functionEndsWith","_functionFloor","_functionLength","_functionMap","_functionMax","_functionMerge","variadic","_functionMaxBy","sum","_functionSum","_functionStartsWith","_functionMin","_functionMinBy","_functionType","_functionKeys","values","_functionValues","_functionSort","_functionSortBy","_functionJoin","reverse","_functionReverse","_functionToArray","_functionToString","_functionToNumber","_functionNotNull","expression","_loadTokens","ast","_lookahead","_lookaheadToken","rbp","leftToken","_advance","left","nud","currentToken","led","right","node","Not","_parseProjectionRHS","Star","_parseMultiselectHash","Flatten","_parseIndexExpression","_projectIfSlice","_parseMultiselectList","Expref","_match","_errorToken","tokenName","Dot","_parseDotRHS","Pipe","Or","And","condition","Filter","_parseComparator","tokenType","_parseSliceExpression","indexExpr","comparator","lookahead","expressions","keyToken","keyName","pairs","identifierTypes","visit","matched","field","collected","sliceParams","computed","computeSliceParams","stop","base","objValues","filtered","finalResults","original","merged","child","resolvedArgs","callFunction","refNode","jmespathType","arrayLength","stepValueNegative","capSliceRange","actualValue","functionEntry","_validateArgs","pluralized","currentSpec","actualType","typeMatched","_getTypeName","_typeMatches","actual","expected","argValue","subtype","lastIndexOf","searchStr","suffix","originalStr","reversedStr","reversedArray","inputArray","mapped","exprefNode","elements","maxElement","localeCompare","minElement","listToSum","joinChar","convertedValue","typeName","sortedArray","requiredType","decorated","exprA","exprB","maxRecord","resolvedArray","keyFunction","createKeyFunction","maxNumber","Infinity","minRecord","minNumber","allowedTypes","compile","punycode","Url","slashes","host","port","hostname","relative","resolveObject","format","isString","protocolPattern","portPattern","simplePathPattern","unwise","autoEscape","nonHostChars","hostEndingChars","hostnamePartPattern","hostnamePartStart","unsafeProtocol","hostlessProtocol","slashedProtocol","parseQueryString","slashesDenoteHost","queryIndex","splitter","uSplit","rest","trim","simplePath","exec","proto","lowerProto","atSign","hostEnd","hec","parseHost","ipv6Hostname","hostparts","part","newpart","validParts","notHost","bit","toASCII","ae","esc","escape","qm","rel","tkeys","tk","tkey","rkeys","rk","rkey","relPath","isSourceAbs","isRelAbs","mustEndAbs","removeAllDots","srcPath","psychotic","isNullOrUndefined","authInHost","isNull","last","hasTrailingSlash","up","splice","isAbsolute","environment","engine","platform","AWS_EXECUTION_ENV","agent","VERSION","toUpperCase","qs","sortedKeys","ename","vals","alloc","toStream","Readable","pos","_read","buffers","lstatSync","object","upperFirst","lowerFirst","ini","currentSection","line","section","expectedArgs","getTime","iso8601","toISOString","toUTCString","formatter","parseTimestamp","crc32Table","crc32","tbl","crc","md5","sha256","algorithm","sliceFn","arraySliceFn","ArrayBuffer","FileReader","reader","onerror","onload","_continueReading","back","readAsArrayBuffer","toHex","iterFunction","array","idx","obj1","obj2","dupe","isEmpty","prop","webkitSlice","mozSlice","isType","originalError","stack","time","klass","features","newObject","ctor","__super__","hideProperties","props","isValue","cachedValue","hoistPayloadMember","operationName","hasEventOutput","payloadMember","responsePayload","computeSha256","fs","settings","sha","isClockSkewed","serverTime","applyClockOffset","extractRequestId","requestId","ResponseMetadata","RequestId","deletePromises","ind","promisifyMethod","methodName","isDualstackAvailable","metadata","serviceIdentifier","dualstackAvailable","calculateRetryDelay","retryCount","customBackoff","handleRequestWithRetries","cb","getInstance","errCallback","delay","setTimeout","sendRequest","retryAfter","handleRequest","defer","convertPayloadToString","rules","setImmediate","getRequestPayloadShape","getProfilesFromSharedConfig","iniLoader","filename","profiles","profilesFromConfig","configOptInEnv","loadFrom","isConfig","sharedConfigFileEnv","profilesFromCreds","sharedCredentialsFileEnv","profileNames","defaultProfile","imdsDisabledEnv","C","enc","wordArray","words","sigBytes","_map","base64Chars","triplet","paddingChar","base64Str","base64StrLength","reverseMap","_reverseMap","paddingIndex","bits1","bits2","parseLoop","V2","Timestamp","SignatureVersion","SignatureMethod","AWSAccessKeyId","SecurityToken","Signature","superInit","init","typedArray","Int8Array","Uint8ClampedArray","Int16Array","Uint16Array","Float32Array","Float64Array","typedArrayByteLength","translate","structure","struct","locationName","translateStructure","translateMap","translateList","translateScalar","loadMasterCredentials","assumeRole","getSessionToken","defineService","model","pagination","__spreadArrays","il","jl","LOG_LEVELS","VERBOSE","DEBUG","INFO","WARN","ERROR","ConsoleLogger","level","_padding","_ts","dt","getMinutes","getSeconds","getMilliseconds","_log","logger_level_name","LOG_LEVEL","logger_level","type_level","console","info","verbose","Amplify","comp","_components","addPluggable","pluggable","Analytics","API","I18n","Cache","PubSub","Interactions","Pushnotification","UI","XR","Predictions","Logger","ServiceWorker","clientInfo","nav","product","vendor","language","operaMatch","ieMatch","cfMatch","sMatch","awkMatch","anyMatch","browserType","timezone","tzMatch","make","appVersion","browserClientInfo","ClientDevice","dimension","width","height","innerWidth","innerHeight","HubClass","listeners","patterns","protectedChannels","remove","channel","listener","pattern_1","holder","ampSymbol","capsule","patternInfo","_toListeners","listenerName","onHubCapsule","isLegacyCallback","payloadStr_1","groups","dispatchingCapsule","_options","_lang","_dict","setLanguage","lang","defVal","getByLanguage","lang_dict","putVocabulariesForLanguage","vocabularies","putVocabularies","_i18n","createInstance","checkConfig","__rest","getOwnPropertySymbols","propertyIsEnumerable","encrypt","src","signed_headers","canonical_request","url_info","key_val","reencoded_val","key_a","key_b","parse_service_info","credential_scope","d_str","string_to_sign","dt_str","get_signing_key","secret_key","service_info","k_date","k_region","k_service","get_signature","signing_key","str_to_sign","Signer","access_info","session_token","request_str","serviceInfo","authorization_header","access_key","get_authorization_header","signUrl","urlOrRequest","accessInfo","expiration","urlToSign","today","signedHeaders","credentialScope","sessionTokenRequired","canonicalRequest","additionalQueryParams","storageConfig","amplifyConfig","AWSPinpoint","appId","AWSS3","bucket","dangerouslyConnectToHttpEndpointForTesting","waitForInit","JS","auth2","GoogleOAuth","initialized","refreshGoogleToken","_refreshGoogleTokenImpl","ga","getAuthInstance","googleAuth","googleUser","isSignedIn","reloadAuthResponse","authResponse","profile","getBasicProfile","getEmail","FacebookOAuth","refreshFacebookToken","_refreshFacebookTokenImpl","fb","getLoginStatus","fbResponse","expiresIn","_gettingCredPromise","_refreshHandlers","_credentials_source","_pickupCredentials","isPending","makeQuerablePromise","_setCredentialsFromAWS","_keepAlive","_credentials","_isExpired","_setCredentialsFromFederation","_setCredentialsForGuest","attempted","_loadCredentials","newCredentials","google","facebook","amazon","developer","logins","_setCredentialsFromSession","priority","shear","packageInfo","ServiceWorkerClass","_logger","_serviceWorker","filePath","serviceWorker","registration","installing","waiting","_registration","_setupListeners","enablePush","publicKey","_publicKey","pushManager","getSubscription","subscription","subscribe","userVisibleOnly","applicationServerKey","_urlB64ToUint8Array","_subscription","base64String","repeat","rawData","atob","outputArray","postMessage","addEventListener","record","Platform","isReactNative","Constants","Rest","XML","Builder","populateBody","Errors","createEventStream","isStreaming","CHECK_ACCEPTORS","waiter","_waiter","acceptors","acceptorMatched","acceptor","matcher","matchers","argument","setSuccess","setError","ResourceWaiter","loadWaiterConfig","pathAll","results","numResults","pathAny","addNamedListeners","retryDelay","wait","$waiter","maxAttempts","makeRequest","addListeners","waiters","b64","lens","getLens","validLen","placeHoldersLen","toByteArray","tmp","Arr","_byteLength","curByte","len","revLookup","fromByteArray","uint8","extraBytes","len2","encodeChunk","lookup","num","Json","applyContentTypeHeader","isBinary","payloadShape","MIME_MAP","ext","sortByField","dir","dirX","a_val","b_val","objectLessAttributes","less","filenameToContentType","mime","endsWith","isTextFile","contentType","startsWith","isResolved","isRejected","isFullfilled","document","versions","transferKeyToLowerCase","whiteListForItself","whiteListForChildren","isStrictObject","transferKeyToUpperCase","Function","Number","Boolean","cmn","ff","gg","hh","ii","sourceData","buff","getUint32","realClock","browser","F","C_lib","Base","extend","overrides","mixIn","$super","properties","propertyName","clone","encoder","Hex","thisWords","thatWords","thisSigBytes","thatSigBytes","thatByte","rcache","m_w","m_z","mask","_r","C_enc","hexChars","bite","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","utf8Str","unescape","BufferedBlockAlgorithm","reset","_data","_nDataBytes","_append","_process","doFlush","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","_doProcessBlock","processedWords","C_algo","Hasher","cfg","_doReset","messageUpdate","finalize","_doFinalize","_createHelper","hasher","_createHmacHelper","HMAC","algo","QueryParamSerializer","ucfirst","isQueryName","serializeMember","memberRules","valueName","v4Credentials","serviceName","datetime","updateForPresigned","addHeaders","authorization","credString","credentialString","isSignableHeader","lowerKey","signingKey","getSigningKey","hexEncodedHash","canonicalString","canonicalHeaders","hexEncodedBodyHash","canonicalHeaderValues","createScope","unsignableHeaders","superCtor","super_","TempCtor","performance","shapeMembers","getOwnPropertyDescriptors","descriptors","getOwnPropertyDescriptor","formatRegExp","objects","inspect","deprecate","noDeprecation","warned","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","ctx","seen","stylize","stylizeNoColor","depth","colors","isBoolean","showHidden","_extend","isUndefined","customInspect","stylizeWithColor","formatValue","styleType","style","styles","recurseTimes","isFunction","primitive","simple","isNumber","formatPrimitive","visibleKeys","arrayToHash","getOwnPropertyNames","isError","formatError","isRegExp","isDate","braces","formatProperty","formatArray","prev","cur","numLinesEst","reduceToSingleString","desc","ar","re","objectToString","o","pad","debuglog","NODE_DEBUG","pid","isSymbol","isPrimitive","months","timestamp","getHours","getMonth","inherits","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","newReason","promisify","promiseResolve","promiseReject","getPrototypeOf","defineProperties","custom","callbackify","callbackified","maybeCb","LinkedListNode","LRUCache","nodeMap","sizeLimit","prependToList","headerNode","tailNode","removeFromTail","prevNode","detachFromList","put","key_1","newNode","empty","defaultProviders","resolveCallbacks","resolveNext","getErr","resolvePromise","V3","headersToSign","setServiceClientId","serviceClientId","getServiceClientId","getVersion","V3Https","Timeout","clearFn","_id","_clearFn","clearTimeout","setInterval","clearInterval","close","unref","ref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","cachedSecret","cacheQueue","v4Identifier","shouldCache","cacheKey","kDate","kRegion","kService","emptyCache","byteToHex","bth","_hasher","hasherBlockSize","hasherBlockSizeBytes","oKey","_oKey","iKey","_iKey","oKeyWords","iKeyWords","innerHash","Version","Action","origRules","resultWrapper","_XAMZRequestId","requestIdShape","registerImmediate","html","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","handle","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","createElement","documentElement","script","onreadystatechange","removeChild","appendChild","attachEvent","task","run","Collection","Operation","Paginator","endpointPrefix","signingName","globalEndpoint","timestampFormat","xmlNamespace","serviceAbbreviation","serviceFullName","serviceId","endpointoperation","shapes","paginator","webpackPolyfill","paths","EventEmitter","XHRClient","emitter","xhr","XMLHttpRequest","headersEmitted","readyState","HEADERS_RECEIVED","getAllResponseHeaders","statusText","DONE","finishRequest","upload","evt","xhrAsync","setRequestHeader","xhrWithCredentials","withCredentials","rawHeaders","substring","ab","view","responseText","memoize","factory","nameTr","iterable","ParamValidator","validation","validate","context","validateMember","validateStructure","paramName","validateType","memberContext","validateList","validateMap","validateScalar","validateRange","mapCount","validateString","validatePayload","validateNumber","validTypes","validateEnum","validatePattern","validateUri","descriptor","acceptedTypes","foundInvalidType","acceptedType","vowel","castedValue","parseFloat","Blob","redirectCount","HttpResponse","numRetries","nextPageTokens","inputTokens","inputToken","cacheNextPageTokens","moreResults","exprs","outputToken","expr","isView","viewStrings","BYTES_PER_ELEMENT","msCrypto","rnds8","rnds","escapeAttribute","removeAttribute","hasChildren","xmlText","attributeNames","_events","toHead","onAsync","_isAsync","eventArgs","doneCallback","count","callListeners","prevError","callNextListener","callbacks","addNamedListener","addNamedAsyncListener","eventMessageChunker","messages","$","$trimStart","FORCED","forcedStringTrimMethod","trimStart","forced","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","ownKeys","NumberIsNaN","once","eventListener","errorListener","_eventsCount","_maxListeners","defaultMaxListeners","checkListener","_getMaxListeners","_addListener","prepend","events","existing","warning","newListener","onceWrapper","fired","wrapFn","_onceWrap","wrapped","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","RangeError","setMaxListeners","getMaxListeners","doError","er","handler","prependListener","prependOnceListener","originalListener","spliceOne","off","rawListeners","eventNames","Protocol","Query","RestJson","RestXml","Model","Api","EndpointCache","refreshCallbacks","expiryWindow","needsRefresh","currentTime","adjustedTime","sync","getPromise","refreshPromise","parseEvent","eventMessages","parsedMessage","messageType","errorMessage","parseError","eventType","eventModel","eventPayloadMemberName","eventHeaderNames","eventHeaderMemberNames","read","isLE","mLen","eLen","eMax","eBias","nBits","NaN","rt","LN2","regexp","maxKeys","kstr","vstr","_nodeId","_clockseq","rng","bytesToUuid","_lastMSecs","_lastNSecs","clockseq","seedBytes","nsecs","tl","tmh","input_token","limit_key","more_results","output_token","result_key","H","K","isPrime","sqrtN","sqrt","factor","getFractionalBits","nPrime","W","_hash","M","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","nBitsTotal","nBitsLeft","regionConfig","clientCount","loadServiceClass","ServiceClass","originalConfig","_clientId","initialize","svcConfig","validateService","endpointFromTemplate","setEndpoint","addDefaultMonitoringListeners","_clientSideMonitoring","publisher","eventHandler","serviceConfig","apiConfig","defineServiceApi","getLatestServiceClass","getLatestServiceVersion","selectedVersion","defaultRetryCount","customizeRequests","customRequestHandler","addAllRequestListeners","attachMonitoringEmitter","waitFor","serviceInterface","CorePost","VALIDATE_PARAMETERS","setupRequestListeners","apiCallEvent","monitoringEvent","Type","Region","MaxRetriesExceeded","getUserAgent","FinalHttpStatusCode","FinalAwsException","FinalAwsExceptionMessage","FinalSdkException","FinalSdkExceptionMessage","apiAttemptEvent","Fqdn","HttpStatusCode","AccessKey","XAmznRequestId","XAmzRequestId","XAmzId2","attemptFailEvent","AwsException","AwsExceptionMessage","SdkException","SdkExceptionMessage","attemptTimestamp","attemptStartRealTime","attemptLatency","callStartRealTime","callTimestamp","attemptCount","AttemptLatency","AttemptCount","latency","Latency","successfulResponse","retryDelays","retryableError","timeoutError","networkingError","expiredCredentialsError","throttledError","clockSkewError","newServerTime","Endpoint","throwException","defineMethods","_serviceMap","addVersions","Publisher","publisherConfig","configProvider","enabled","superclass","setApi","isApi","attachOn","baseClass","root","nodeType","freeGlobal","maxInt","regexPunycode","regexNonASCII","regexSeparators","stringFromCharCode","mapDomain","ucs2decode","extra","counter","ucs2encode","digitToBasic","digit","flag","adapt","delta","numPoints","firstTime","baseMinusTMin","basic","oldi","baseMinusT","codePoint","inputLength","bias","handledCPCount","basicLength","currentValue","handledCPCountPlusOne","qMinusT","PRELUDE_LENGTH","readUInt32BE","expectedPreludeChecksum","PRELUDE_MEMBER_LENGTH","expectedMessageChecksum","headersEnd","OldCookies","Cookies","noConflict","converter","defaults","stringifiedAttributes","cookie","jar","getJSON","withConverter","DISCOVER_ENDPOINT","discoverEndpoint","addAsync","iLen","getOperationAuthtype","requiresLength","signer","signedAt","httpResp","streaming","errCode","executeSend","numBytes","dateHeader","total","progress","loaded","redirect","willRetry","errno","ansi","isTTY","censoredParams","filterSensitiveLog","inputShape","subShapeName","subShape","isSensitive","buildMessage","applyConfig","regionPrefix","generateRegionPrefix","derivedKeys","useDualstack","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","encodingOrOffset","allocUnsafe","fromArrayLike","fromArrayBuffer","isEncoding","checked","fromObject","assertSize","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","arrLength","valLength","foundIndex","found","hexWrite","strLen","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","bytesPerSequence","codePoints","decodeCodePointsArray","SlowBuffer","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","swap16","swap32","swap64","thisStart","thisEnd","thisCopy","targetCopy","_arr","checkOffset","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt16LE","readUInt32LE","readIntLE","readIntBE","readInt16LE","readInt32LE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","stringtrim","base64clean","dst","DomXmlParser","getElementByTagName","tag","getElementsByTagName","parentNode","parseXml","parseStructure","tagName","firstElementChild","nodeName","textContent","nextElementSibling","parseMap","parseList","childNodes","parseUnknown","getAttribute","text","parseScalar","xmlChild","DOMParser","parseFromString","syntaxError","errorElement","ActiveXObject","async","loadXML","labels","hostPattern","operationModel","isEndpointOperation","endpointOperation","endpointDiscoveryRequired","hasEndpointDiscover","hostPrefix","hostPrefixNotation","hostLabel","expandHostPrefix","prependEndpointPrefix","LRU_1","maxSize","keyString","getKeyString","endpointRecord","populateValue","records","Expire","identifiers","identifierNames","identifierName","endpoints","Address","CachePeriodInMinutes","enum","xmlName","queryName","isComposite","idempotencyToken","jsonvalue","sensitive","eventstream","eventpayload","eventheader","isTimestampFormatSet","endpointdiscoveryid","xmlAttribute","CompositeShape","StructureShape","requiredMap","firstInit","isShape","xmlOrder","isEventPayload","isEventHeader","ListShape","oldName","MapShape","StringShape","nullLessProtocols","BinaryShape","secureBuf","Base64Shape","BooleanShape","normalizedTypes","character","double","long","short","biginteger","bigdecimal","blob","refShape","filteredKeys","InlineShape","origType","_userAgent","setUserAgent","getUserAgentHeaderName","agentPartial","updateEndpoint","endpointStr","newEndpoint","singleton","endpointDiscoveryEnabledEnvs","getCacheKey","marshallCustomIdentifiers","marshallCustomIdentifiersHelper","endpointDiscoveryId","optionalDiscoverEndpoint","endpointCache","endpointRequest","Identifiers","addApiVersionHeader","RETRY_CHECK","Endpoints","requestQueue","requiredDiscoverEndpoint","cacheKeyStr","errorParams","pendingRequests","requestContext","invalidateCachedEndpoints","isFalsy","_originalConfig","hasCustomEndpoint","env","configFile","sharedFileConfig","AWS_PROFILE","endpoint_discovery_enabled","isEndpointDiscoveryApplicable","invalidateCachedEndpoint"],"mappings":"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","file":"ed7b6a97d4f4228ed87632a23eaa629b06aba432-e6ed8c1b7c19971ac6f2.js","sourcesContent":["var AWS = require('../core');\n\nvar STS = require('../../clients/sts');\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * AWS.ChainableTemporaryCredentials differs from AWS.TemporaryCredentials in\n * the way masterCredentials and refreshes are handled.\n * AWS.ChainableTemporaryCredentials refreshes expired credentials using the\n * masterCredentials passed by the user to support chaining of STS credentials.\n * However, AWS.TemporaryCredentials recursively collapses the masterCredentials\n * during instantiation, precluding the ability to refresh credentials which\n * require intermediate, temporary credentials.\n *\n * For example, if the application should use RoleA, which must be assumed from\n * RoleB, and the environment provides credentials which can assume RoleB, then\n * AWS.ChainableTemporaryCredentials must be used to support refreshing the\n * temporary credentials for RoleA:\n *\n * ```javascript\n * var roleACreds = new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: 'RoleA'},\n * masterCredentials: new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: 'RoleB'},\n * masterCredentials: new AWS.EnvironmentCredentials('AWS')\n * })\n * });\n * ```\n *\n * If AWS.TemporaryCredentials had been used in the previous example,\n * `roleACreds` would fail to refresh because `roleACreds` would\n * use the environment credentials for the AssumeRole request.\n *\n * Another difference is that AWS.ChainableTemporaryCredentials creates the STS\n * service instance during instantiation while AWS.TemporaryCredentials creates\n * the STS service instance during the first refresh. Creating the service\n * instance during instantiation effectively captures the master credentials\n * from the global config, so that subsequent changes to the global config do\n * not affect the master credentials used to refresh the temporary credentials.\n *\n * This allows an instance of AWS.ChainableTemporaryCredentials to be assigned\n * to AWS.config.credentials:\n *\n * ```javascript\n * var envCreds = new AWS.EnvironmentCredentials('AWS');\n * AWS.config.credentials = envCreds;\n * // masterCredentials will be envCreds\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n * params: {RoleArn: '...'}\n * });\n * ```\n *\n * Similarly, to use the CredentialProviderChain's default providers as the\n * master credentials, simply create a new instance of\n * AWS.ChainableTemporaryCredentials:\n *\n * ```javascript\n * AWS.config.credentials = new ChainableTemporaryCredentials({\n * params: {RoleArn: '...'}\n * });\n * ```\n *\n * @!attribute service\n * @return [AWS.STS] the STS service instance used to\n * get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\n\n\nAWS.ChainableTemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new temporary credentials object.\n *\n * @param options [map] a set of options\n * @option options params [map] ({}) a map of options that are passed to the\n * {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n * If a `RoleArn` parameter is passed in, credentials will be based on the\n * IAM role. If a `SerialNumber` parameter is passed in, {tokenCodeFn} must\n * also be passed in or an error will be thrown.\n * @option options masterCredentials [AWS.Credentials] the master credentials\n * used to get and refresh temporary credentials from AWS STS. By default,\n * AWS.config.credentials or AWS.config.credentialProvider will be used.\n * @option options tokenCodeFn [Function] (null) Function to provide\n * `TokenCode`, if `SerialNumber` is provided for profile in {params}. Function\n * is called with value of `SerialNumber` and `callback`, and should provide\n * the `TokenCode` or an error to the callback in the format\n * `callback(err, token)`.\n * @example Creating a new credentials object for generic temporary credentials\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials();\n * @example Creating a new credentials object for an IAM role\n * AWS.config.credentials = new AWS.ChainableTemporaryCredentials({\n * params: {\n * RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials'\n * }\n * });\n * @see AWS.STS.assumeRole\n * @see AWS.STS.getSessionToken\n */\n constructor: function ChainableTemporaryCredentials(options) {\n AWS.Credentials.call(this);\n options = options || {};\n this.errorCode = 'ChainableTemporaryCredentialsProviderFailure';\n this.expired = true;\n this.tokenCodeFn = null;\n var params = AWS.util.copy(options.params) || {};\n\n if (params.RoleArn) {\n params.RoleSessionName = params.RoleSessionName || 'temporary-credentials';\n }\n\n if (params.SerialNumber) {\n if (!options.tokenCodeFn || typeof options.tokenCodeFn !== 'function') {\n throw new AWS.util.error(new Error('tokenCodeFn must be a function when params.SerialNumber is given'), {\n code: this.errorCode\n });\n } else {\n this.tokenCodeFn = options.tokenCodeFn;\n }\n }\n\n config = AWS.util.merge({\n params: params,\n credentials: options.masterCredentials || AWS.config.credentials\n }, options.stsConfig || {});\n this.service = new STS(config);\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRole} or\n * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n * to the credentials {constructor}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n var operation = self.service.config.params.RoleArn ? 'assumeRole' : 'getSessionToken';\n this.getTokenCode(function (err, tokenCode) {\n var params = {};\n\n if (err) {\n callback(err);\n return;\n }\n\n if (tokenCode) {\n params.TokenCode = tokenCode;\n }\n\n self.service[operation](params, function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n\n callback(err);\n });\n });\n },\n\n /**\n * @api private\n */\n getTokenCode: function getTokenCode(callback) {\n var self = this;\n\n if (this.tokenCodeFn) {\n this.tokenCodeFn(this.service.config.params.SerialNumber, function (err, token) {\n if (err) {\n var message = err;\n\n if (err instanceof Error) {\n message = err.message;\n }\n\n callback(AWS.util.error(new Error('Error fetching MFA token: ' + message), {\n code: self.errorCode\n }));\n return;\n }\n\n callback(null, token);\n });\n } else {\n callback(null);\n }\n }\n});","var util = require('../util');\n\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\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 var queryString = {},\n queryStringSet = false;\n util.each(input.members, function (name, member) {\n var paramValue = params[name];\n if (paramValue === null || paramValue === undefined) return;\n\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(member.member.toWireFormat(val).toString());\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(member.toWireFormat(paramValue).toString());\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\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 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\n if (member.isJsonValue) {\n value = util.base64.encode(value);\n }\n\n req.httpRequest.headers[member.name] = value;\n }\n });\n}\n\nfunction buildRequest(req) {\n populateMethod(req);\n populateURI(req);\n populateHeaders(req);\n populateHostPrefix(req);\n}\n\nfunction extractError() {}\n\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; // normalize headers names to lower-cased keys for matching\n\n var headers = {};\n util.each(r.headers, function (k, v) {\n headers[k.toLowerCase()] = v;\n });\n util.each(output.members, function (name, member) {\n var header = (member.name || name).toLowerCase();\n\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\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 ? util.base64.decode(headers[header]) : 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 resp.data = data;\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData,\n generateURI: generateURI\n};","var util = require('../core').util;\n\nvar toBuffer = util.buffer.toBuffer;\n/**\n * A lossless representation of a signed, 64-bit integer. Instances of this\n * class may be used in arithmetic expressions as if they were numeric\n * primitives, but the binary representation will be preserved unchanged as the\n * `bytes` property of the object. The bytes should be encoded as big-endian,\n * two's complement integers.\n * @param {Buffer} bytes\n *\n * @api private\n */\n\nfunction Int64(bytes) {\n if (bytes.length !== 8) {\n throw new Error('Int64 buffers must be exactly 8 bytes');\n }\n\n if (!util.Buffer.isBuffer(bytes)) bytes = toBuffer(bytes);\n this.bytes = bytes;\n}\n/**\n * @param {number} number\n * @returns {Int64}\n *\n * @api private\n */\n\n\nInt64.fromNumber = function (number) {\n if (number > 9223372036854775807 || number < -9223372036854775808) {\n throw new Error(number + ' is too large (or, if negative, too small) to represent as an Int64');\n }\n\n var bytes = new Uint8Array(8);\n\n for (var i = 7, remaining = Math.abs(Math.round(number)); i > -1 && remaining > 0; i--, remaining /= 256) {\n bytes[i] = remaining;\n }\n\n if (number < 0) {\n negate(bytes);\n }\n\n return new Int64(bytes);\n};\n/**\n * @returns {number}\n *\n * @api private\n */\n\n\nInt64.prototype.valueOf = function () {\n var bytes = this.bytes.slice(0);\n var negative = bytes[0] & 128;\n\n if (negative) {\n negate(bytes);\n }\n\n return parseInt(bytes.toString('hex'), 16) * (negative ? -1 : 1);\n};\n\nInt64.prototype.toString = function () {\n return String(this.valueOf());\n};\n/**\n * @param {Buffer} bytes\n *\n * @api private\n */\n\n\nfunction negate(bytes) {\n for (var i = 0; i < 8; i++) {\n bytes[i] ^= 0xFF;\n }\n\n for (var i = 7; i > -1; i--) {\n bytes[i]++;\n\n if (bytes[i] !== 0) {\n break;\n }\n }\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n Int64: Int64\n};","var AWS = require('./core');\n\nrequire('./credentials');\n\nrequire('./credentials/credential_provider_chain');\n\nvar PromisesDependency;\n/**\n * The main configuration class used by all service objects to set\n * the region, credentials, and other options for requests.\n *\n * By default, credentials and region settings are left unconfigured.\n * This should be configured by the application before using any\n * AWS service APIs.\n *\n * In order to set global configuration options, properties should\n * be assigned to the global {AWS.config} object.\n *\n * @see AWS.config\n *\n * @!group General Configuration Options\n *\n * @!attribute credentials\n * @return [AWS.Credentials] the AWS credentials to sign requests with.\n *\n * @!attribute region\n * @example Set the global region setting to us-west-2\n * AWS.config.update({region: 'us-west-2'});\n * @return [AWS.Credentials] The region to send service requests to.\n * @see http://docs.amazonwebservices.com/general/latest/gr/rande.html\n * A list of available endpoints for each AWS service\n *\n * @!attribute maxRetries\n * @return [Integer] the maximum amount of retries to perform for a\n * service request. By default this value is calculated by the specific\n * service object that the request is being made to.\n *\n * @!attribute maxRedirects\n * @return [Integer] the maximum amount of redirects to follow for a\n * service request. Defaults to 10.\n *\n * @!attribute paramValidation\n * @return [Boolean|map] whether input parameters should be validated against\n * the operation description before sending the request. Defaults to true.\n * Pass a map to enable any of the following specific validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n *\n * @!attribute computeChecksums\n * @return [Boolean] whether to compute checksums for payload bodies when\n * the service accepts it (currently supported in S3 only).\n *\n * @!attribute convertResponseTypes\n * @return [Boolean] whether types are converted when parsing response data.\n * Currently only supported for JSON based services. Turning this off may\n * improve performance on large response payloads. Defaults to `true`.\n *\n * @!attribute correctClockSkew\n * @return [Boolean] whether to apply a clock skew correction and retry\n * requests that fail because of an skewed client clock. Defaults to\n * `false`.\n *\n * @!attribute sslEnabled\n * @return [Boolean] whether SSL is enabled for requests\n *\n * @!attribute s3ForcePathStyle\n * @return [Boolean] whether to force path style URLs for S3 objects\n *\n * @!attribute s3BucketEndpoint\n * @note Setting this configuration option requires an `endpoint` to be\n * provided explicitly to the service constructor.\n * @return [Boolean] whether the provided endpoint addresses an individual\n * bucket (false if it addresses the root API endpoint).\n *\n * @!attribute s3DisableBodySigning\n * @return [Boolean] whether to disable S3 body signing when using signature version `v4`.\n * Body signing can only be disabled when using https. Defaults to `true`.\n *\n * @!attribute useAccelerateEndpoint\n * @note This configuration option is only compatible with S3 while accessing\n * dns-compatible buckets.\n * @return [Boolean] Whether to use the Accelerate endpoint with the S3 service.\n * Defaults to `false`.\n *\n * @!attribute retryDelayOptions\n * @example Set the base retry delay for all services to 300 ms\n * AWS.config.update({retryDelayOptions: {base: 300}});\n * // Delays with maxRetries = 3: 300, 600, 1200\n * @example Set a custom backoff function to provide delay values on retries\n * AWS.config.update({retryDelayOptions: {customBackoff: function(retryCount) {\n * // returns delay in ms\n * }}});\n * @return [map] A set of options to configure the retry delay on retryable errors.\n * Currently supported options are:\n *\n * * **base** [Integer] — The base number of milliseconds to use in the\n * exponential backoff for operation retries. Defaults to 100 ms for all services except\n * DynamoDB, where it defaults to 50ms.\n * * **customBackoff ** [function] — A custom function that accepts a retry count\n * and returns the amount of time to delay in milliseconds. The `base` option will be\n * ignored if this option is supplied.\n *\n * @!attribute httpOptions\n * @return [map] A set of options to pass to the low-level HTTP request.\n * Currently supported options are:\n *\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only supported in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — Sets the socket to timeout after timeout\n * milliseconds of inactivity on the socket. Defaults to two minutes\n * (120000)\n * * **xhrAsync** [Boolean] — Whether the SDK will send asynchronous\n * HTTP requests. Used in the browser environment only. Set to false to\n * send requests synchronously. Defaults to true (async on).\n * * **xhrWithCredentials** [Boolean] — Sets the \"withCredentials\"\n * property of an XMLHttpRequest object. Used in the browser environment\n * only. Defaults to false.\n * @!attribute logger\n * @return [#write,#log] an object that responds to .write() (like a stream)\n * or .log() (like the console object) in order to log information about\n * requests\n *\n * @!attribute systemClockOffset\n * @return [Number] an offset value in milliseconds to apply to all signing\n * times. Use this to compensate for clock skew when your system may be\n * out of sync with the service time. Note that this configuration option\n * can only be applied to the global `AWS.config` object and cannot be\n * overridden in service-specific configuration. Defaults to 0 milliseconds.\n *\n * @!attribute signatureVersion\n * @return [String] the signature version to sign requests with (overriding\n * the API configuration). Possible values are: 'v2', 'v3', 'v4'.\n *\n * @!attribute signatureCache\n * @return [Boolean] whether the signature to sign requests with (overriding\n * the API configuration) is cached. Only applies to the signature version 'v4'.\n * Defaults to `true`.\n *\n * @!attribute endpointDiscoveryEnabled\n * @return [Boolean] whether to enable endpoint discovery for operations that\n * allow optionally using an endpoint returned by the service.\n * Defaults to 'false'\n *\n * @!attribute endpointCacheSize\n * @return [Number] the size of the global cache storing endpoints from endpoint\n * discovery operations. Once endpoint cache is created, updating this setting\n * cannot change existing cache size.\n * Defaults to 1000\n *\n * @!attribute hostPrefixEnabled\n * @return [Boolean] whether to marshal request parameters to the prefix of\n * hostname. Defaults to `true`.\n */\n\nAWS.Config = AWS.util.inherit({\n /**\n * @!endgroup\n */\n\n /**\n * Creates a new configuration object. This is the object that passes\n * option data along to service requests, including credentials, security,\n * region information, and some service specific settings.\n *\n * @example Creating a new configuration object with credentials and region\n * var config = new AWS.Config({\n * accessKeyId: 'AKID', secretAccessKey: 'SECRET', region: 'us-west-2'\n * });\n * @option options accessKeyId [String] your AWS access key ID.\n * @option options secretAccessKey [String] your AWS secret access key.\n * @option options sessionToken [AWS.Credentials] the optional AWS\n * session token to sign requests with.\n * @option options credentials [AWS.Credentials] the AWS credentials\n * to sign requests with. You can either specify this object, or\n * specify the accessKeyId and secretAccessKey options directly.\n * @option options credentialProvider [AWS.CredentialProviderChain] the\n * provider chain used to resolve credentials if no static `credentials`\n * property is set.\n * @option options region [String] the region to send service requests to.\n * See {region} for more information.\n * @option options maxRetries [Integer] the maximum amount of retries to\n * attempt with a request. See {maxRetries} for more information.\n * @option options maxRedirects [Integer] the maximum amount of redirects to\n * follow with a request. See {maxRedirects} for more information.\n * @option options sslEnabled [Boolean] whether to enable SSL for\n * requests.\n * @option options paramValidation [Boolean|map] whether input parameters\n * should be validated against the operation description before sending\n * the request. Defaults to true. Pass a map to enable any of the\n * following specific validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n * @option options computeChecksums [Boolean] whether to compute checksums\n * for payload bodies when the service accepts it (currently supported\n * in S3 only)\n * @option options convertResponseTypes [Boolean] whether types are converted\n * when parsing response data. Currently only supported for JSON based\n * services. Turning this off may improve performance on large response\n * payloads. Defaults to `true`.\n * @option options correctClockSkew [Boolean] whether to apply a clock skew\n * correction and retry requests that fail because of an skewed client\n * clock. Defaults to `false`.\n * @option options s3ForcePathStyle [Boolean] whether to force path\n * style URLs for S3 objects.\n * @option options s3BucketEndpoint [Boolean] whether the provided endpoint\n * addresses an individual bucket (false if it addresses the root API\n * endpoint). Note that setting this configuration option requires an\n * `endpoint` to be provided explicitly to the service constructor.\n * @option options s3DisableBodySigning [Boolean] whether S3 body signing\n * should be disabled when using signature version `v4`. Body signing\n * can only be disabled when using https. Defaults to `true`.\n *\n * @option options retryDelayOptions [map] A set of options to configure\n * the retry delay on retryable errors. Currently supported options are:\n *\n * * **base** [Integer] — The base number of milliseconds to use in the\n * exponential backoff for operation retries. Defaults to 100 ms for all\n * services except DynamoDB, where it defaults to 50ms.\n * * **customBackoff ** [function] — A custom function that accepts a retry count\n * and returns the amount of time to delay in milliseconds. The `base` option will be\n * ignored if this option is supplied.\n * @option options httpOptions [map] A set of options to pass to the low-level\n * HTTP request. Currently supported options are:\n *\n * * **proxy** [String] — the URL to proxy requests through\n * * **agent** [http.Agent, https.Agent] — the Agent object to perform\n * HTTP requests with. Used for connection pooling. Defaults to the global\n * agent (`http.globalAgent`) for non-SSL connections. Note that for\n * SSL connections, a special Agent object is used in order to enable\n * peer certificate verification. This feature is only available in the\n * Node.js environment.\n * * **connectTimeout** [Integer] — Sets the socket to timeout after\n * failing to establish a connection with the server after\n * `connectTimeout` milliseconds. This timeout has no effect once a socket\n * connection has been established.\n * * **timeout** [Integer] — Sets the socket to timeout after timeout\n * milliseconds of inactivity on the socket. Defaults to two minutes\n * (120000).\n * * **xhrAsync** [Boolean] — Whether the SDK will send asynchronous\n * HTTP requests. Used in the browser environment only. Set to false to\n * send requests synchronously. Defaults to true (async on).\n * * **xhrWithCredentials** [Boolean] — Sets the \"withCredentials\"\n * property of an XMLHttpRequest object. Used in the browser environment\n * only. Defaults to false.\n * @option options apiVersion [String, Date] a String in YYYY-MM-DD format\n * (or a date) that represents the latest possible API version that can be\n * used in all services (unless overridden by `apiVersions`). Specify\n * 'latest' to use the latest possible version.\n * @option options apiVersions [map] a map of service\n * identifiers (the lowercase service class name) with the API version to\n * use when instantiating a service. Specify 'latest' for each individual\n * that can use the latest available version.\n * @option options logger [#write,#log] an object that responds to .write()\n * (like a stream) or .log() (like the console object) in order to log\n * information about requests\n * @option options systemClockOffset [Number] an offset value in milliseconds\n * to apply to all signing times. Use this to compensate for clock skew\n * when your system may be out of sync with the service time. Note that\n * this configuration option can only be applied to the global `AWS.config`\n * object and cannot be overridden in service-specific configuration.\n * Defaults to 0 milliseconds.\n * @option options signatureVersion [String] the signature version to sign\n * requests with (overriding the API configuration). Possible values are:\n * 'v2', 'v3', 'v4'.\n * @option options signatureCache [Boolean] whether the signature to sign\n * requests with (overriding the API configuration) is cached. Only applies\n * to the signature version 'v4'. Defaults to `true`.\n * @option options dynamoDbCrc32 [Boolean] whether to validate the CRC32\n * checksum of HTTP response bodies returned by DynamoDB. Default: `true`.\n * @option options useAccelerateEndpoint [Boolean] Whether to use the\n * S3 Transfer Acceleration endpoint with the S3 service. Default: `false`.\n * @option options clientSideMonitoring [Boolean] whether to collect and\n * publish this client's performance metrics of all its API requests.\n * @option options endpointDiscoveryEnabled [Boolean] whether to enable endpoint\n * discovery for operations that allow optionally using an endpoint returned by\n * the service.\n * Defaults to 'false'\n * @option options endpointCacheSize [Number] the size of the global cache storing\n * endpoints from endpoint discovery operations. Once endpoint cache is created,\n * updating this setting cannot change existing cache size.\n * Defaults to 1000\n * @option options hostPrefixEnabled [Boolean] whether to marshal request\n * parameters to the prefix of hostname.\n * Defaults to `true`.\n */\n constructor: function Config(options) {\n if (options === undefined) options = {};\n options = this.extractCredentials(options);\n AWS.util.each.call(this, this.keys, function (key, value) {\n this.set(key, options[key], value);\n });\n },\n\n /**\n * @!group Managing Credentials\n */\n\n /**\n * Loads credentials from the configuration object. This is used internally\n * by the SDK to ensure that refreshable {Credentials} objects are properly\n * refreshed and loaded when sending a request. If you want to ensure that\n * your credentials are loaded prior to a request, you can use this method\n * directly to provide accurate credential data stored in the object.\n *\n * @note If you configure the SDK with static or environment credentials,\n * the credential data should already be present in {credentials} attribute.\n * This method is primarily necessary to load credentials from asynchronous\n * sources, or sources that can refresh credentials periodically.\n * @example Getting your access key\n * AWS.config.getCredentials(function(err) {\n * if (err) console.log(err.stack); // credentials not loaded\n * else console.log(\"Access Key:\", AWS.config.credentials.accessKeyId);\n * })\n * @callback callback function(err)\n * Called when the {credentials} have been properly set on the configuration\n * object.\n *\n * @param err [Error] if this is set, credentials were not successfully\n * loaded and this error provides information why.\n * @see credentials\n * @see Credentials\n */\n getCredentials: function getCredentials(callback) {\n var self = this;\n\n function finish(err) {\n callback(err, err ? null : self.credentials);\n }\n\n function credError(msg, err) {\n return new AWS.util.error(err || new Error(), {\n code: 'CredentialsError',\n message: msg,\n name: 'CredentialsError'\n });\n }\n\n function getAsyncCredentials() {\n self.credentials.get(function (err) {\n if (err) {\n var msg = 'Could not load credentials from ' + self.credentials.constructor.name;\n err = credError(msg, err);\n }\n\n finish(err);\n });\n }\n\n function getStaticCredentials() {\n var err = null;\n\n if (!self.credentials.accessKeyId || !self.credentials.secretAccessKey) {\n err = credError('Missing credentials');\n }\n\n finish(err);\n }\n\n if (self.credentials) {\n if (typeof self.credentials.get === 'function') {\n getAsyncCredentials();\n } else {\n // static credentials\n getStaticCredentials();\n }\n } else if (self.credentialProvider) {\n self.credentialProvider.resolve(function (err, creds) {\n if (err) {\n err = credError('Could not load credentials from any providers', err);\n }\n\n self.credentials = creds;\n finish(err);\n });\n } else {\n finish(credError('No credentials to load'));\n }\n },\n\n /**\n * @!group Loading and Setting Configuration Options\n */\n\n /**\n * @overload update(options, allowUnknownKeys = false)\n * Updates the current configuration object with new options.\n *\n * @example Update maxRetries property of a configuration object\n * config.update({maxRetries: 10});\n * @param [Object] options a map of option keys and values.\n * @param [Boolean] allowUnknownKeys whether unknown keys can be set on\n * the configuration object. Defaults to `false`.\n * @see constructor\n */\n update: function update(options, allowUnknownKeys) {\n allowUnknownKeys = allowUnknownKeys || false;\n options = this.extractCredentials(options);\n AWS.util.each.call(this, options, function (key, value) {\n if (allowUnknownKeys || Object.prototype.hasOwnProperty.call(this.keys, key) || AWS.Service.hasService(key)) {\n this.set(key, value);\n }\n });\n },\n\n /**\n * Loads configuration data from a JSON file into this config object.\n * @note Loading configuration will reset all existing configuration\n * on the object.\n * @!macro nobrowser\n * @param path [String] the path relative to your process's current\n * working directory to load configuration from.\n * @return [AWS.Config] the same configuration object\n */\n loadFromPath: function loadFromPath(path) {\n this.clear();\n var options = JSON.parse(AWS.util.readFileSync(path));\n var fileSystemCreds = new AWS.FileSystemCredentials(path);\n var chain = new AWS.CredentialProviderChain();\n chain.providers.unshift(fileSystemCreds);\n chain.resolve(function (err, creds) {\n if (err) throw err;else options.credentials = creds;\n });\n this.constructor(options);\n return this;\n },\n\n /**\n * Clears configuration data on this object\n *\n * @api private\n */\n clear: function clear() {\n /*jshint forin:false */\n AWS.util.each.call(this, this.keys, function (key) {\n delete this[key];\n }); // reset credential provider\n\n this.set('credentials', undefined);\n this.set('credentialProvider', undefined);\n },\n\n /**\n * Sets a property on the configuration object, allowing for a\n * default value\n * @api private\n */\n set: function set(property, value, defaultValue) {\n if (value === undefined) {\n if (defaultValue === undefined) {\n defaultValue = this.keys[property];\n }\n\n if (typeof defaultValue === 'function') {\n this[property] = defaultValue.call(this);\n } else {\n this[property] = defaultValue;\n }\n } else if (property === 'httpOptions' && this[property]) {\n // deep merge httpOptions\n this[property] = AWS.util.merge(this[property], value);\n } else {\n this[property] = value;\n }\n },\n\n /**\n * All of the keys with their default values.\n *\n * @constant\n * @api private\n */\n keys: {\n credentials: null,\n credentialProvider: null,\n region: null,\n logger: null,\n apiVersions: {},\n apiVersion: null,\n endpoint: undefined,\n httpOptions: {\n timeout: 120000\n },\n maxRetries: undefined,\n maxRedirects: 10,\n paramValidation: true,\n sslEnabled: true,\n s3ForcePathStyle: false,\n s3BucketEndpoint: false,\n s3DisableBodySigning: true,\n computeChecksums: true,\n convertResponseTypes: true,\n correctClockSkew: false,\n customUserAgent: null,\n dynamoDbCrc32: true,\n systemClockOffset: 0,\n signatureVersion: null,\n signatureCache: true,\n retryDelayOptions: {},\n useAccelerateEndpoint: false,\n clientSideMonitoring: false,\n endpointDiscoveryEnabled: false,\n endpointCacheSize: 1000,\n hostPrefixEnabled: true\n },\n\n /**\n * Extracts accessKeyId, secretAccessKey and sessionToken\n * from a configuration hash.\n *\n * @api private\n */\n extractCredentials: function extractCredentials(options) {\n if (options.accessKeyId && options.secretAccessKey) {\n options = AWS.util.copy(options);\n options.credentials = new AWS.Credentials(options);\n }\n\n return options;\n },\n\n /**\n * Sets the promise dependency the SDK will use wherever Promises are returned.\n * Passing `null` will force the SDK to use native Promises if they are available.\n * If native Promises are not available, passing `null` will have no effect.\n * @param [Constructor] dep A reference to a Promise constructor\n */\n setPromisesDependency: function setPromisesDependency(dep) {\n PromisesDependency = dep; // if null was passed in, we should try to use native promises\n\n if (dep === null && typeof Promise === 'function') {\n PromisesDependency = Promise;\n }\n\n var constructors = [AWS.Request, AWS.Credentials, AWS.CredentialProviderChain];\n if (AWS.S3 && AWS.S3.ManagedUpload) constructors.push(AWS.S3.ManagedUpload);\n AWS.util.addPromises(constructors, PromisesDependency);\n },\n\n /**\n * Gets the promise dependency set by `AWS.config.setPromisesDependency`.\n */\n getPromisesDependency: function getPromisesDependency() {\n return PromisesDependency;\n }\n});\n/**\n * @return [AWS.Config] The global configuration object singleton instance\n * @readonly\n * @see AWS.Config\n */\n\nAWS.config = new AWS.Config();","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object' && typeof arg.copy === 'function' && typeof arg.fill === 'function' && typeof arg.readUInt8 === 'function';\n};","var Buffer = require('buffer/').Buffer;\n\nvar hashUtils = require('./browserHashUtils');\n\nvar BLOCK_SIZE = 64;\nvar DIGEST_LENGTH = 20;\nvar KEY = new Uint32Array([0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0]);\nvar INIT = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];\nvar MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n/**\n * @api private\n */\n\nfunction Sha1() {\n this.h0 = 0x67452301;\n this.h1 = 0xEFCDAB89;\n this.h2 = 0x98BADCFE;\n this.h3 = 0x10325476;\n this.h4 = 0xC3D2E1F0; // The first 64 bytes (16 words) is the data chunk\n\n this.block = new Uint32Array(80);\n this.offset = 0;\n this.shift = 24;\n this.totalLength = 0;\n}\n/**\n * @api private\n */\n\n\nmodule.exports = exports = Sha1;\nSha1.BLOCK_SIZE = BLOCK_SIZE;\n\nSha1.prototype.update = function (data) {\n if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n if (hashUtils.isEmptyData(data)) {\n return this;\n }\n\n data = hashUtils.convertToBuffer(data);\n var length = data.length;\n this.totalLength += length * 8;\n\n for (var i = 0; i < length; i++) {\n this.write(data[i]);\n }\n\n return this;\n};\n\nSha1.prototype.write = function write(byte) {\n this.block[this.offset] |= (byte & 0xff) << this.shift;\n\n if (this.shift) {\n this.shift -= 8;\n } else {\n this.offset++;\n this.shift = 24;\n }\n\n if (this.offset === 16) this.processBlock();\n};\n\nSha1.prototype.digest = function (encoding) {\n // Pad\n this.write(0x80);\n\n if (this.offset > 14 || this.offset === 14 && this.shift < 24) {\n this.processBlock();\n }\n\n this.offset = 14;\n this.shift = 24; // 64-bit length big-endian\n\n this.write(0x00); // numbers this big aren't accurate in javascript anyway\n\n this.write(0x00); // ..So just hard-code to zero.\n\n this.write(this.totalLength > 0xffffffffff ? this.totalLength / 0x10000000000 : 0x00);\n this.write(this.totalLength > 0xffffffff ? this.totalLength / 0x100000000 : 0x00);\n\n for (var s = 24; s >= 0; s -= 8) {\n this.write(this.totalLength >> s);\n } // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n\n\n var out = new Buffer(DIGEST_LENGTH);\n var outView = new DataView(out.buffer);\n outView.setUint32(0, this.h0, false);\n outView.setUint32(4, this.h1, false);\n outView.setUint32(8, this.h2, false);\n outView.setUint32(12, this.h3, false);\n outView.setUint32(16, this.h4, false);\n return encoding ? out.toString(encoding) : out;\n};\n\nSha1.prototype.processBlock = function processBlock() {\n // Extend the sixteen 32-bit words into eighty 32-bit words:\n for (var i = 16; i < 80; i++) {\n var w = this.block[i - 3] ^ this.block[i - 8] ^ this.block[i - 14] ^ this.block[i - 16];\n this.block[i] = w << 1 | w >>> 31;\n } // Initialize hash value for this chunk:\n\n\n var a = this.h0;\n var b = this.h1;\n var c = this.h2;\n var d = this.h3;\n var e = this.h4;\n var f, k; // Main loop:\n\n for (i = 0; i < 80; i++) {\n if (i < 20) {\n f = d ^ b & (c ^ d);\n k = 0x5A827999;\n } else if (i < 40) {\n f = b ^ c ^ d;\n k = 0x6ED9EBA1;\n } else if (i < 60) {\n f = b & c | d & (b | c);\n k = 0x8F1BBCDC;\n } else {\n f = b ^ c ^ d;\n k = 0xCA62C1D6;\n }\n\n var temp = (a << 5 | a >>> 27) + f + e + k + (this.block[i] | 0);\n e = d;\n d = c;\n c = b << 30 | b >>> 2;\n b = a;\n a = temp;\n } // Add this chunk's hash to result so far:\n\n\n this.h0 = this.h0 + a | 0;\n this.h1 = this.h1 + b | 0;\n this.h2 = this.h2 + c | 0;\n this.h3 = this.h3 + d | 0;\n this.h4 = this.h4 + e | 0; // The block is now reusable.\n\n this.offset = 0;\n\n for (i = 0; i < 16; i++) {\n this.block[i] = 0;\n }\n};","var AWS = require('../core');\n\nvar CognitoIdentity = require('../../clients/cognitoidentity');\n\nvar STS = require('../../clients/sts');\n/**\n * Represents credentials retrieved from STS Web Identity Federation using\n * the Amazon Cognito Identity service.\n *\n * By default this provider gets credentials using the\n * {AWS.CognitoIdentity.getCredentialsForIdentity} service operation, which\n * requires either an `IdentityId` or an `IdentityPoolId` (Amazon Cognito\n * Identity Pool ID), which is used to call {AWS.CognitoIdentity.getId} to\n * obtain an `IdentityId`. If the identity or identity pool is not configured in\n * the Amazon Cognito Console to use IAM roles with the appropriate permissions,\n * then additionally a `RoleArn` is required containing the ARN of the IAM trust\n * policy for the Amazon Cognito role that the user will log into. If a `RoleArn`\n * is provided, then this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation, after first getting an\n * Open ID token from {AWS.CognitoIdentity.getOpenIdToken}.\n *\n * In addition, if this credential provider is used to provide authenticated\n * login, the `Logins` map may be set to the tokens provided by the respective\n * identity providers. See {constructor} for an example on creating a credentials\n * object with proper property values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.Logins['graph.facebook.com'] = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.CognitoIdentity.getId},\n * {AWS.CognitoIdentity.getOpenIdToken}, and\n * {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n * `params.WebIdentityToken` property.\n * @!attribute data\n * @return [map] the raw data response from the call to\n * {AWS.CognitoIdentity.getCredentialsForIdentity}, or\n * {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n * access to other properties from the response.\n * @!attribute identityId\n * @return [String] the Cognito ID returned by the last call to\n * {AWS.CognitoIdentity.getOpenIdToken}. This ID represents the actual\n * final resolved identity ID from Amazon Cognito.\n */\n\n\nAWS.CognitoIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * @api private\n */\n localStorageKey: {\n id: 'aws.cognito.identity-id.',\n providers: 'aws.cognito.identity-providers.'\n },\n\n /**\n * Creates a new credentials object.\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.CognitoIdentityCredentials({\n *\n * // either IdentityPoolId or IdentityId is required\n * // See the IdentityPoolId param for AWS.CognitoIdentity.getID (linked below)\n * // See the IdentityId param for AWS.CognitoIdentity.getCredentialsForIdentity\n * // or AWS.CognitoIdentity.getOpenIdToken (linked below)\n * IdentityPoolId: 'us-east-1:1699ebc0-7900-4099-b910-2df94f52a030',\n * IdentityId: 'us-east-1:128d0a74-c82f-4553-916d-90053e4a8b0f'\n *\n * // optional, only necessary when the identity pool is not configured\n * // to use IAM roles in the Amazon Cognito Console\n * // See the RoleArn param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n * RoleArn: 'arn:aws:iam::1234567890:role/MYAPP-CognitoIdentity',\n *\n * // optional tokens, used for authenticated login\n * // See the Logins param for AWS.CognitoIdentity.getID (linked below)\n * Logins: {\n * 'graph.facebook.com': 'FBTOKEN',\n * 'www.amazon.com': 'AMAZONTOKEN',\n * 'accounts.google.com': 'GOOGLETOKEN',\n * 'api.twitter.com': 'TWITTERTOKEN',\n * 'www.digits.com': 'DIGITSTOKEN'\n * },\n *\n * // optional name, defaults to web-identity\n * // See the RoleSessionName param for AWS.STS.assumeRoleWithWebIdentity (linked below)\n * RoleSessionName: 'web',\n *\n * // optional, only necessary when application runs in a browser\n * // and multiple users are signed in at once, used for caching\n * LoginId: 'example@gmail.com'\n *\n * }, {\n * // optionally provide configuration to apply to the underlying service clients\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n *\n * // region should match the region your identity pool is located in\n * region: 'us-east-1',\n *\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.CognitoIdentity.getId\n * @see AWS.CognitoIdentity.getCredentialsForIdentity\n * @see AWS.STS.assumeRoleWithWebIdentity\n * @see AWS.CognitoIdentity.getOpenIdToken\n * @see AWS.Config\n * @note If a region is not provided in the global AWS.config, or\n * specified in the `clientConfig` to the CognitoIdentityCredentials\n * constructor, you may encounter a 'Missing credentials in config' error\n * when calling making a service call.\n */\n constructor: function CognitoIdentityCredentials(params, clientConfig) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n this.data = null;\n this._identityId = null;\n this._clientConfig = AWS.util.copy(clientConfig || {});\n this.loadCachedId();\n var self = this;\n Object.defineProperty(this, 'identityId', {\n get: function get() {\n self.loadCachedId();\n return self._identityId || self.params.IdentityId;\n },\n set: function set(identityId) {\n self._identityId = identityId;\n }\n });\n },\n\n /**\n * Refreshes credentials using {AWS.CognitoIdentity.getCredentialsForIdentity},\n * or {AWS.STS.assumeRoleWithWebIdentity}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see AWS.Credentials.get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.data = null;\n self._identityId = null;\n self.getId(function (err) {\n if (!err) {\n if (!self.params.RoleArn) {\n self.getCredentialsForIdentity(callback);\n } else {\n self.getCredentialsFromSTS(callback);\n }\n } else {\n self.clearIdOnNotAuthorized(err);\n callback(err);\n }\n });\n },\n\n /**\n * Clears the cached Cognito ID associated with the currently configured\n * identity pool ID. Use this to manually invalidate your cache if\n * the identity pool ID was deleted.\n */\n clearCachedId: function clearCache() {\n this._identityId = null;\n delete this.params.IdentityId;\n var poolId = this.params.IdentityPoolId;\n var loginId = this.params.LoginId || '';\n delete this.storage[this.localStorageKey.id + poolId + loginId];\n delete this.storage[this.localStorageKey.providers + poolId + loginId];\n },\n\n /**\n * @api private\n */\n clearIdOnNotAuthorized: function clearIdOnNotAuthorized(err) {\n var self = this;\n\n if (err.code == 'NotAuthorizedException') {\n self.clearCachedId();\n }\n },\n\n /**\n * Retrieves a Cognito ID, loading from cache if it was already retrieved\n * on this device.\n *\n * @callback callback function(err, identityId)\n * @param err [Error, null] an error object if the call failed or null if\n * it succeeded.\n * @param identityId [String, null] if successful, the callback will return\n * the Cognito ID.\n * @note If not loaded explicitly, the Cognito ID is loaded and stored in\n * localStorage in the browser environment of a device.\n * @api private\n */\n getId: function getId(callback) {\n var self = this;\n\n if (typeof self.params.IdentityId === 'string') {\n return callback(null, self.params.IdentityId);\n }\n\n self.cognito.getId(function (err, data) {\n if (!err && data.IdentityId) {\n self.params.IdentityId = data.IdentityId;\n callback(null, data.IdentityId);\n } else {\n callback(err);\n }\n });\n },\n\n /**\n * @api private\n */\n loadCredentials: function loadCredentials(data, credentials) {\n if (!data || !credentials) return;\n credentials.expired = false;\n credentials.accessKeyId = data.Credentials.AccessKeyId;\n credentials.secretAccessKey = data.Credentials.SecretKey;\n credentials.sessionToken = data.Credentials.SessionToken;\n credentials.expireTime = data.Credentials.Expiration;\n },\n\n /**\n * @api private\n */\n getCredentialsForIdentity: function getCredentialsForIdentity(callback) {\n var self = this;\n self.cognito.getCredentialsForIdentity(function (err, data) {\n if (!err) {\n self.cacheId(data);\n self.data = data;\n self.loadCredentials(self.data, self);\n } else {\n self.clearIdOnNotAuthorized(err);\n }\n\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n getCredentialsFromSTS: function getCredentialsFromSTS(callback) {\n var self = this;\n self.cognito.getOpenIdToken(function (err, data) {\n if (!err) {\n self.cacheId(data);\n self.params.WebIdentityToken = data.Token;\n self.webIdentityCredentials.refresh(function (webErr) {\n if (!webErr) {\n self.data = self.webIdentityCredentials.data;\n self.sts.credentialsFrom(self.data, self);\n }\n\n callback(webErr);\n });\n } else {\n self.clearIdOnNotAuthorized(err);\n callback(err);\n }\n });\n },\n\n /**\n * @api private\n */\n loadCachedId: function loadCachedId() {\n var self = this; // in the browser we source default IdentityId from localStorage\n\n if (AWS.util.isBrowser() && !self.params.IdentityId) {\n var id = self.getStorage('id');\n\n if (id && self.params.Logins) {\n var actualProviders = Object.keys(self.params.Logins);\n var cachedProviders = (self.getStorage('providers') || '').split(','); // only load ID if at least one provider used this ID before\n\n var intersect = cachedProviders.filter(function (n) {\n return actualProviders.indexOf(n) !== -1;\n });\n\n if (intersect.length !== 0) {\n self.params.IdentityId = id;\n }\n } else if (id) {\n self.params.IdentityId = id;\n }\n }\n },\n\n /**\n * @api private\n */\n createClients: function createClients() {\n var clientConfig = this._clientConfig;\n this.webIdentityCredentials = this.webIdentityCredentials || new AWS.WebIdentityCredentials(this.params, clientConfig);\n\n if (!this.cognito) {\n var cognitoConfig = AWS.util.merge({}, clientConfig);\n cognitoConfig.params = this.params;\n this.cognito = new CognitoIdentity(cognitoConfig);\n }\n\n this.sts = this.sts || new STS(clientConfig);\n },\n\n /**\n * @api private\n */\n cacheId: function cacheId(data) {\n this._identityId = data.IdentityId;\n this.params.IdentityId = this._identityId; // cache this IdentityId in browser localStorage if possible\n\n if (AWS.util.isBrowser()) {\n this.setStorage('id', data.IdentityId);\n\n if (this.params.Logins) {\n this.setStorage('providers', Object.keys(this.params.Logins).join(','));\n }\n }\n },\n\n /**\n * @api private\n */\n getStorage: function getStorage(key) {\n return this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')];\n },\n\n /**\n * @api private\n */\n setStorage: function setStorage(key, val) {\n try {\n this.storage[this.localStorageKey[key] + this.params.IdentityPoolId + (this.params.LoginId || '')] = val;\n } catch (_) {}\n },\n\n /**\n * @api private\n */\n storage: function () {\n try {\n var storage = AWS.util.isBrowser() && window.localStorage !== null && typeof window.localStorage === 'object' ? window.localStorage : {}; // Test set/remove which would throw an error in Safari's private browsing\n\n storage['aws.test-storage'] = 'foobar';\n delete storage['aws.test-storage'];\n return storage;\n } catch (_) {\n return {};\n }\n }()\n});","function apiLoader(svc, version) {\n if (!apiLoader.services.hasOwnProperty(svc)) {\n throw new Error('InvalidService: Failed to load api for ' + svc);\n }\n\n return apiLoader.services[svc][version];\n}\n/**\n * @api private\n *\n * This member of AWS.apiLoader is private, but changing it will necessitate a\n * change to ../scripts/services-table-generator.ts\n */\n\n\napiLoader.services = {};\n/**\n * @api private\n */\n\nmodule.exports = apiLoader;","var AWS = require('../core');\n\nvar STS = require('../../clients/sts');\n/**\n * Represents credentials retrieved from STS SAML support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithSAML} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given, as well as a `PrincipalArn`\n * representing the ARN for the SAML identity provider. In addition, the\n * `SAMLAssertion` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn`, `PrincipalArn`, and `SAMLAssertion` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the SAMLAssertion, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.SAMLAssertion = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.STS.assumeRoleWithSAML}. To update the token, set the\n * `params.SAMLAssertion` property.\n */\n\n\nAWS.SAMLCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new credentials object.\n * @param (see AWS.STS.assumeRoleWithSAML)\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.SAMLCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/SAMLRole',\n * PrincipalArn: 'arn:aws:iam::1234567890:role/SAMLPrincipal',\n * SAMLAssertion: 'base64-token', // base64-encoded token from IdP\n * });\n * @see AWS.STS.assumeRoleWithSAML\n */\n constructor: function SAMLCredentials(params) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithSAML}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.service.assumeRoleWithSAML(function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n createClients: function createClients() {\n this.service = this.service || new STS({\n params: this.params\n });\n }\n});","var util = require('../util');\n\nvar JsonBuilder = require('../json/builder');\n\nvar JsonParser = require('../json/parser');\n\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n var httpRequest = req.httpRequest;\n var api = req.service.api;\n var target = api.targetPrefix + '.' + api.operations[req.operation].name;\n var version = api.jsonVersion || '1.0';\n var input = api.operations[req.operation].input;\n var builder = new JsonBuilder();\n 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 populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n var error = {};\n var httpResponse = resp.httpResponse;\n error.code = httpResponse.headers['x-amzn-errortype'] || 'UnknownError';\n\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\n if (e.__type || e.code) {\n error.code = (e.__type || e.code).split('#').pop();\n }\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\n if (resp.request.service.config.convertResponseTypes === false) {\n resp.data = JSON.parse(body);\n } else {\n var operation = resp.request.service.api.operations[resp.request.operation];\n var shape = operation.output || {};\n var parser = new JsonParser();\n resp.data = parser.parse(body, shape);\n }\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};","var Shape = require('./shape');\n\nvar util = require('../util');\n\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Operation(name, operation, options) {\n var self = this;\n options = options || {};\n property(this, 'name', operation.name || name);\n property(this, 'api', options.api, false);\n operation.http = operation.http || {};\n property(this, 'endpoint', operation.endpoint);\n property(this, 'httpMethod', operation.http.method || 'POST');\n property(this, 'httpPath', operation.http.requestUri || '/');\n property(this, 'authtype', operation.authtype || '');\n property(this, 'endpointDiscoveryRequired', operation.endpointdiscovery ? operation.endpointdiscovery.required ? 'REQUIRED' : 'OPTIONAL' : 'NULL');\n memoizedProperty(this, 'input', function () {\n if (!operation.input) {\n return new Shape.create({\n type: 'structure'\n }, options);\n }\n\n return Shape.create(operation.input, options);\n });\n memoizedProperty(this, 'output', function () {\n if (!operation.output) {\n return new Shape.create({\n type: 'structure'\n }, options);\n }\n\n return Shape.create(operation.output, options);\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 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 } // idempotentMembers only tracks top-level input shapes\n\n\n memoizedProperty(this, 'idempotentMembers', function () {\n var idempotentMembers = [];\n var input = self.input;\n var members = input.members;\n\n if (!input.members) {\n return idempotentMembers;\n }\n\n for (var name in members) {\n if (!members.hasOwnProperty(name)) {\n continue;\n }\n\n if (members[name].isIdempotent === true) {\n idempotentMembers.push(name);\n }\n }\n\n return idempotentMembers;\n });\n memoizedProperty(this, 'hasEventOutput', function () {\n var output = self.output;\n return hasEventStream(output);\n });\n}\n\nfunction hasEventStream(topLevelShape) {\n var members = topLevelShape.members;\n var payload = topLevelShape.payload;\n\n if (!topLevelShape.members) {\n return false;\n }\n\n if (payload) {\n var payloadMember = members[payload];\n return payloadMember.isEventStream;\n } // check if any member is an event stream\n\n\n for (var name in members) {\n if (!members.hasOwnProperty(name)) {\n if (members[name].isEventStream === true) {\n return true;\n }\n }\n }\n\n return false;\n}\n/**\n * @api private\n */\n\n\nmodule.exports = Operation;","function AcceptorStateMachine(states, state) {\n this.currentState = state || null;\n this.states = states || {};\n}\n\nAcceptorStateMachine.prototype.runTo = function runTo(finalState, done, bindObject, inputError) {\n if (typeof finalState === 'function') {\n inputError = bindObject;\n bindObject = done;\n done = finalState;\n finalState = null;\n }\n\n var self = this;\n var state = self.states[self.currentState];\n state.fn.call(bindObject || self, inputError, function (err) {\n if (err) {\n if (state.fail) self.currentState = state.fail;else return done ? done.call(bindObject, err) : null;\n } else {\n if (state.accept) self.currentState = state.accept;else return done ? done.call(bindObject) : null;\n }\n\n if (self.currentState === finalState) {\n return done ? done.call(bindObject, err) : null;\n }\n\n self.runTo(finalState, done, bindObject, err);\n });\n};\n\nAcceptorStateMachine.prototype.addState = function addState(name, acceptState, failState, fn) {\n if (typeof acceptState === 'function') {\n fn = acceptState;\n acceptState = null;\n failState = null;\n } else if (typeof failState === 'function') {\n fn = failState;\n failState = null;\n }\n\n if (!this.currentState) this.currentState = name;\n this.states[name] = {\n accept: acceptState,\n fail: failState,\n fn: fn\n };\n return this;\n};\n/**\n * @api private\n */\n\n\nmodule.exports = AcceptorStateMachine;","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};","// 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'use strict';\n\nvar stringifyPrimitive = function stringifyPrimitive(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function (obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return map(objectKeys(obj), function (k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n\n if (isArray(obj[k])) {\n return map(obj[k], function (v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq + encodeURIComponent(stringifyPrimitive(obj));\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};\n\nfunction map(xs, f) {\n if (xs.map) return xs.map(f);\n var res = [];\n\n for (var i = 0; i < xs.length; i++) {\n res.push(f(xs[i], i));\n }\n\n return res;\n}\n\nvar objectKeys = Object.keys || function (obj) {\n var res = [];\n\n for (var key in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);\n }\n\n return res;\n};","var Buffer = require('buffer/').Buffer;\n\nvar hashUtils = require('./browserHashUtils');\n\nvar BLOCK_SIZE = 64;\nvar DIGEST_LENGTH = 32;\nvar KEY = new Uint32Array([0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2]);\nvar INIT = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];\nvar MAX_HASHABLE_LENGTH = Math.pow(2, 53) - 1;\n/**\n * @private\n */\n\nfunction Sha256() {\n this.state = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];\n this.temp = new Int32Array(64);\n this.buffer = new Uint8Array(64);\n this.bufferLength = 0;\n this.bytesHashed = 0;\n /**\n * @private\n */\n\n this.finished = false;\n}\n/**\n * @api private\n */\n\n\nmodule.exports = exports = Sha256;\nSha256.BLOCK_SIZE = BLOCK_SIZE;\n\nSha256.prototype.update = function (data) {\n if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n if (hashUtils.isEmptyData(data)) {\n return this;\n }\n\n data = hashUtils.convertToBuffer(data);\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n\n if (this.bytesHashed * 8 > MAX_HASHABLE_LENGTH) {\n throw new Error('Cannot hash more than 2^53 - 1 bits');\n }\n\n while (byteLength > 0) {\n this.buffer[this.bufferLength++] = data[position++];\n byteLength--;\n\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n\n return this;\n};\n\nSha256.prototype.digest = function (encoding) {\n if (!this.finished) {\n var bitsHashed = this.bytesHashed * 8;\n var bufferView = new DataView(this.buffer.buffer, this.buffer.byteOffset, this.buffer.byteLength);\n var undecoratedLength = this.bufferLength;\n bufferView.setUint8(this.bufferLength++, 0x80); // Ensure the final block has enough room for the hashed length\n\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n bufferView.setUint8(i, 0);\n }\n\n this.hashBuffer();\n this.bufferLength = 0;\n }\n\n for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n bufferView.setUint8(i, 0);\n }\n\n bufferView.setUint32(BLOCK_SIZE - 8, Math.floor(bitsHashed / 0x100000000), true);\n bufferView.setUint32(BLOCK_SIZE - 4, bitsHashed);\n this.hashBuffer();\n this.finished = true;\n } // The value in state is little-endian rather than big-endian, so flip\n // each word into a new Uint8Array\n\n\n var out = new Buffer(DIGEST_LENGTH);\n\n for (var i = 0; i < 8; i++) {\n out[i * 4] = this.state[i] >>> 24 & 0xff;\n out[i * 4 + 1] = this.state[i] >>> 16 & 0xff;\n out[i * 4 + 2] = this.state[i] >>> 8 & 0xff;\n out[i * 4 + 3] = this.state[i] >>> 0 & 0xff;\n }\n\n return encoding ? out.toString(encoding) : out;\n};\n\nSha256.prototype.hashBuffer = function () {\n var _a = this,\n buffer = _a.buffer,\n state = _a.state;\n\n var state0 = state[0],\n state1 = state[1],\n state2 = state[2],\n state3 = state[3],\n state4 = state[4],\n state5 = state[5],\n state6 = state[6],\n state7 = state[7];\n\n for (var i = 0; i < BLOCK_SIZE; i++) {\n if (i < 16) {\n this.temp[i] = (buffer[i * 4] & 0xff) << 24 | (buffer[i * 4 + 1] & 0xff) << 16 | (buffer[i * 4 + 2] & 0xff) << 8 | buffer[i * 4 + 3] & 0xff;\n } else {\n var u = this.temp[i - 2];\n var t1_1 = (u >>> 17 | u << 15) ^ (u >>> 19 | u << 13) ^ u >>> 10;\n u = this.temp[i - 15];\n var t2_1 = (u >>> 7 | u << 25) ^ (u >>> 18 | u << 14) ^ u >>> 3;\n this.temp[i] = (t1_1 + this.temp[i - 7] | 0) + (t2_1 + this.temp[i - 16] | 0);\n }\n\n var t1 = (((state4 >>> 6 | state4 << 26) ^ (state4 >>> 11 | state4 << 21) ^ (state4 >>> 25 | state4 << 7)) + (state4 & state5 ^ ~state4 & state6) | 0) + (state7 + (KEY[i] + this.temp[i] | 0) | 0) | 0;\n var t2 = ((state0 >>> 2 | state0 << 30) ^ (state0 >>> 13 | state0 << 19) ^ (state0 >>> 22 | state0 << 10)) + (state0 & state1 ^ state0 & state2 ^ state1 & state2) | 0;\n state7 = state6;\n state6 = state5;\n state5 = state4;\n state4 = state3 + t1 | 0;\n state3 = state2;\n state2 = state1;\n state1 = state0;\n state0 = t1 + t2 | 0;\n }\n\n state[0] += state0;\n state[1] += state1;\n state[2] += state2;\n state[3] += state3;\n state[4] += state4;\n state[5] += state5;\n state[6] += state6;\n state[7] += state7;\n};","var fails = require('../internals/fails');\nvar whitespaces = require('../internals/whitespaces');\n\nvar non = '\\u200B\\u0085\\u180E';\n\n// check that a method works with the correct list\n// of whitespaces and has a correct name\nmodule.exports = function (METHOD_NAME) {\n return fails(function () {\n return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;\n });\n};\n","var escapeElement = require('./escape-element').escapeElement;\n/**\n * Represents an XML text value.\n * @api private\n */\n\n\nfunction XmlText(value) {\n this.value = value;\n}\n\nXmlText.prototype.toString = function () {\n return escapeElement('' + this.value);\n};\n/**\n * @api private\n */\n\n\nmodule.exports = {\n XmlText: XmlText\n};","var hashUtils = require('./browserHashUtils');\n/**\n * @api private\n */\n\n\nfunction Hmac(hashCtor, secret) {\n this.hash = new hashCtor();\n this.outer = new hashCtor();\n var inner = bufferFromSecret(hashCtor, secret);\n var outer = new Uint8Array(hashCtor.BLOCK_SIZE);\n outer.set(inner);\n\n for (var i = 0; i < hashCtor.BLOCK_SIZE; i++) {\n inner[i] ^= 0x36;\n outer[i] ^= 0x5c;\n }\n\n this.hash.update(inner);\n this.outer.update(outer); // Zero out the copied key buffer.\n\n for (var i = 0; i < inner.byteLength; i++) {\n inner[i] = 0;\n }\n}\n/**\n * @api private\n */\n\n\nmodule.exports = exports = Hmac;\n\nHmac.prototype.update = function (toHash) {\n if (hashUtils.isEmptyData(toHash) || this.error) {\n return this;\n }\n\n try {\n this.hash.update(hashUtils.convertToBuffer(toHash));\n } catch (e) {\n this.error = e;\n }\n\n return this;\n};\n\nHmac.prototype.digest = function (encoding) {\n if (!this.outer.finished) {\n this.outer.update(this.hash.digest());\n }\n\n return this.outer.digest(encoding);\n};\n\nfunction bufferFromSecret(hashCtor, secret) {\n var input = hashUtils.convertToBuffer(secret);\n\n if (input.byteLength > hashCtor.BLOCK_SIZE) {\n var bufferHash = new hashCtor();\n bufferHash.update(input);\n input = bufferHash.digest();\n }\n\n var buffer = new Uint8Array(hashCtor.BLOCK_SIZE);\n buffer.set(input);\n return buffer;\n}",";\n\n(function (root, factory, undef) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\", \"./sha256\", \"./hmac\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n return CryptoJS.HmacSHA256;\n});","var AWS = require('../core');\n\nAWS.util.update(AWS.STS.prototype, {\n /**\n * @overload credentialsFrom(data, credentials = null)\n * Creates a credentials object from STS response data containing\n * credentials information. Useful for quickly setting AWS credentials.\n *\n * @note This is a low-level utility function. If you want to load temporary\n * credentials into your process for subsequent requests to AWS resources,\n * you should use {AWS.TemporaryCredentials} instead.\n * @param data [map] data retrieved from a call to {getFederatedToken},\n * {getSessionToken}, {assumeRole}, or {assumeRoleWithWebIdentity}.\n * @param credentials [AWS.Credentials] an optional credentials object to\n * fill instead of creating a new object. Useful when modifying an\n * existing credentials object from a refresh call.\n * @return [AWS.TemporaryCredentials] the set of temporary credentials\n * loaded from a raw STS operation response.\n * @example Using credentialsFrom to load global AWS credentials\n * var sts = new AWS.STS();\n * sts.getSessionToken(function (err, data) {\n * if (err) console.log(\"Error getting credentials\");\n * else {\n * AWS.config.credentials = sts.credentialsFrom(data);\n * }\n * });\n * @see AWS.TemporaryCredentials\n */\n credentialsFrom: function credentialsFrom(data, credentials) {\n if (!data) return null;\n if (!credentials) credentials = new AWS.TemporaryCredentials();\n credentials.expired = false;\n credentials.accessKeyId = data.Credentials.AccessKeyId;\n credentials.secretAccessKey = data.Credentials.SecretAccessKey;\n credentials.sessionToken = data.Credentials.SessionToken;\n credentials.expireTime = data.Credentials.Expiration;\n return credentials;\n },\n assumeRoleWithWebIdentity: function assumeRoleWithWebIdentity(params, callback) {\n return this.makeUnauthenticatedRequest('assumeRoleWithWebIdentity', params, callback);\n },\n assumeRoleWithSAML: function assumeRoleWithSAML(params, callback) {\n return this.makeUnauthenticatedRequest('assumeRoleWithSAML', params, callback);\n }\n});","/**\n * Escapes characters that can not be in an XML element.\n */\nfunction escapeElement(value) {\n return value.replace(/&/g, '&').replace(//g, '>');\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n escapeElement: escapeElement\n};","var v1 = require('./v1');\n\nvar v4 = require('./v4');\n\nvar uuid = v4;\nuuid.v1 = v1;\nuuid.v4 = v4;\nmodule.exports = uuid;","var Int64 = require('./int64').Int64;\n\nvar splitMessage = require('./split-message').splitMessage;\n\nvar BOOLEAN_TAG = 'boolean';\nvar BYTE_TAG = 'byte';\nvar SHORT_TAG = 'short';\nvar INT_TAG = 'integer';\nvar LONG_TAG = 'long';\nvar BINARY_TAG = 'binary';\nvar STRING_TAG = 'string';\nvar TIMESTAMP_TAG = 'timestamp';\nvar UUID_TAG = 'uuid';\n/**\n * @api private\n *\n * @param {Buffer} headers\n */\n\nfunction parseHeaders(headers) {\n var out = {};\n var position = 0;\n\n while (position < headers.length) {\n var nameLength = headers.readUInt8(position++);\n var name = headers.slice(position, position + nameLength).toString();\n position += nameLength;\n\n switch (headers.readUInt8(position++)) {\n case 0\n /* boolTrue */\n :\n out[name] = {\n type: BOOLEAN_TAG,\n value: true\n };\n break;\n\n case 1\n /* boolFalse */\n :\n out[name] = {\n type: BOOLEAN_TAG,\n value: false\n };\n break;\n\n case 2\n /* byte */\n :\n out[name] = {\n type: BYTE_TAG,\n value: headers.readInt8(position++)\n };\n break;\n\n case 3\n /* short */\n :\n out[name] = {\n type: SHORT_TAG,\n value: headers.readInt16BE(position)\n };\n position += 2;\n break;\n\n case 4\n /* integer */\n :\n out[name] = {\n type: INT_TAG,\n value: headers.readInt32BE(position)\n };\n position += 4;\n break;\n\n case 5\n /* long */\n :\n out[name] = {\n type: LONG_TAG,\n value: new Int64(headers.slice(position, position + 8))\n };\n position += 8;\n break;\n\n case 6\n /* byteArray */\n :\n var binaryLength = headers.readUInt16BE(position);\n position += 2;\n out[name] = {\n type: BINARY_TAG,\n value: headers.slice(position, position + binaryLength)\n };\n position += binaryLength;\n break;\n\n case 7\n /* string */\n :\n var stringLength = headers.readUInt16BE(position);\n position += 2;\n out[name] = {\n type: STRING_TAG,\n value: headers.slice(position, position + stringLength).toString()\n };\n position += stringLength;\n break;\n\n case 8\n /* timestamp */\n :\n out[name] = {\n type: TIMESTAMP_TAG,\n value: new Date(new Int64(headers.slice(position, position + 8)).valueOf())\n };\n position += 8;\n break;\n\n case 9\n /* uuid */\n :\n var uuidChars = headers.slice(position, position + 16).toString('hex');\n position += 16;\n out[name] = {\n type: UUID_TAG,\n value: uuidChars.substr(0, 8) + '-' + uuidChars.substr(8, 4) + '-' + uuidChars.substr(12, 4) + '-' + uuidChars.substr(16, 4) + '-' + uuidChars.substr(20)\n };\n break;\n\n default:\n throw new Error('Unrecognized header type tag');\n }\n }\n\n return out;\n}\n\nfunction parseMessage(message) {\n var parsed = splitMessage(message);\n return {\n headers: parseHeaders(parsed.headers),\n body: parsed.body\n };\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n parseMessage: parseMessage\n};","var Hmac = require('./browserHmac');\n\nvar Md5 = require('./browserMd5');\n\nvar Sha1 = require('./browserSha1');\n\nvar Sha256 = require('./browserSha256');\n/**\n * @api private\n */\n\n\nmodule.exports = exports = {\n createHash: function createHash(alg) {\n alg = alg.toLowerCase();\n\n if (alg === 'md5') {\n return new Md5();\n } else if (alg === 'sha256') {\n return new Sha256();\n } else if (alg === 'sha1') {\n return new Sha1();\n }\n\n throw new Error('Hash algorithm ' + alg + ' is not supported in the browser SDK');\n },\n createHmac: function createHmac(alg, key) {\n alg = alg.toLowerCase();\n\n if (alg === 'md5') {\n return new Hmac(Md5, key);\n } else if (alg === 'sha256') {\n return new Hmac(Sha256, key);\n } else if (alg === 'sha1') {\n return new Hmac(Sha1, key);\n }\n\n throw new Error('HMAC algorithm ' + alg + ' is not supported in the browser SDK');\n },\n createSign: function createSign() {\n throw new Error('createSign is not implemented in the browser');\n }\n};","var AWS = require('./core');\n\nvar AcceptorStateMachine = require('./state_machine');\n\nvar inherit = AWS.util.inherit;\nvar domain = AWS.util.domain;\n\nvar jmespath = require('jmespath');\n/**\n * @api private\n */\n\n\nvar hardErrorStates = {\n success: 1,\n error: 1,\n complete: 1\n};\n\nfunction isTerminalState(machine) {\n return Object.prototype.hasOwnProperty.call(hardErrorStates, machine._asm.currentState);\n}\n\nvar fsm = new AcceptorStateMachine();\n\nfsm.setupStates = function () {\n var transition = function transition(_, done) {\n var self = this;\n self._haltHandlersOnError = false;\n self.emit(self._asm.currentState, function (err) {\n if (err) {\n if (isTerminalState(self)) {\n if (domain && self.domain instanceof domain.Domain) {\n err.domainEmitter = self;\n err.domain = self.domain;\n err.domainThrown = false;\n self.domain.emit('error', err);\n } else {\n throw err;\n }\n } else {\n self.response.error = err;\n done(err);\n }\n } else {\n done(self.response.error);\n }\n });\n };\n\n this.addState('validate', 'build', 'error', transition);\n this.addState('build', 'afterBuild', 'restart', transition);\n this.addState('afterBuild', 'sign', 'restart', transition);\n this.addState('sign', 'send', 'retry', transition);\n this.addState('retry', 'afterRetry', 'afterRetry', transition);\n this.addState('afterRetry', 'sign', 'error', transition);\n this.addState('send', 'validateResponse', 'retry', transition);\n this.addState('validateResponse', 'extractData', 'extractError', transition);\n this.addState('extractError', 'extractData', 'retry', transition);\n this.addState('extractData', 'success', 'retry', transition);\n this.addState('restart', 'build', 'error', transition);\n this.addState('success', 'complete', 'complete', transition);\n this.addState('error', 'complete', 'complete', transition);\n this.addState('complete', null, null, transition);\n};\n\nfsm.setupStates();\n/**\n * ## Asynchronous Requests\n *\n * All requests made through the SDK are asynchronous and use a\n * callback interface. Each service method that kicks off a request\n * returns an `AWS.Request` object that you can use to register\n * callbacks.\n *\n * For example, the following service method returns the request\n * object as \"request\", which can be used to register callbacks:\n *\n * ```javascript\n * // request is an AWS.Request object\n * var request = ec2.describeInstances();\n *\n * // register callbacks on request to retrieve response data\n * request.on('success', function(response) {\n * console.log(response.data);\n * });\n * ```\n *\n * When a request is ready to be sent, the {send} method should\n * be called:\n *\n * ```javascript\n * request.send();\n * ```\n *\n * Since registered callbacks may or may not be idempotent, requests should only\n * be sent once. To perform the same operation multiple times, you will need to\n * create multiple request objects, each with its own registered callbacks.\n *\n * ## Removing Default Listeners for Events\n *\n * Request objects are built with default listeners for the various events,\n * depending on the service type. In some cases, you may want to remove\n * some built-in listeners to customize behaviour. Doing this requires\n * access to the built-in listener functions, which are exposed through\n * the {AWS.EventListeners.Core} namespace. For instance, you may\n * want to customize the HTTP handler used when sending a request. In this\n * case, you can remove the built-in listener associated with the 'send'\n * event, the {AWS.EventListeners.Core.SEND} listener and add your own.\n *\n * ## Multiple Callbacks and Chaining\n *\n * You can register multiple callbacks on any request object. The\n * callbacks can be registered for different events, or all for the\n * same event. In addition, you can chain callback registration, for\n * example:\n *\n * ```javascript\n * request.\n * on('success', function(response) {\n * console.log(\"Success!\");\n * }).\n * on('error', function(error, response) {\n * console.log(\"Error!\");\n * }).\n * on('complete', function(response) {\n * console.log(\"Always!\");\n * }).\n * send();\n * ```\n *\n * The above example will print either \"Success! Always!\", or \"Error! Always!\",\n * depending on whether the request succeeded or not.\n *\n * @!attribute httpRequest\n * @readonly\n * @!group HTTP Properties\n * @return [AWS.HttpRequest] the raw HTTP request object\n * containing request headers and body information\n * sent by the service.\n *\n * @!attribute startTime\n * @readonly\n * @!group Operation Properties\n * @return [Date] the time that the request started\n *\n * @!group Request Building Events\n *\n * @!event validate(request)\n * Triggered when a request is being validated. Listeners\n * should throw an error if the request should not be sent.\n * @param request [Request] the request object being sent\n * @see AWS.EventListeners.Core.VALIDATE_CREDENTIALS\n * @see AWS.EventListeners.Core.VALIDATE_REGION\n * @example Ensuring that a certain parameter is set before sending a request\n * var req = s3.putObject(params);\n * req.on('validate', function() {\n * if (!req.params.Body.match(/^Hello\\s/)) {\n * throw new Error('Body must start with \"Hello \"');\n * }\n * });\n * req.send(function(err, data) { ... });\n *\n * @!event build(request)\n * Triggered when the request payload is being built. Listeners\n * should fill the necessary information to send the request\n * over HTTP.\n * @param (see AWS.Request~validate)\n * @example Add a custom HTTP header to a request\n * var req = s3.putObject(params);\n * req.on('build', function() {\n * req.httpRequest.headers['Custom-Header'] = 'value';\n * });\n * req.send(function(err, data) { ... });\n *\n * @!event sign(request)\n * Triggered when the request is being signed. Listeners should\n * add the correct authentication headers and/or adjust the body,\n * depending on the authentication mechanism being used.\n * @param (see AWS.Request~validate)\n *\n * @!group Request Sending Events\n *\n * @!event send(response)\n * Triggered when the request is ready to be sent. Listeners\n * should call the underlying transport layer to initiate\n * the sending of the request.\n * @param response [Response] the response object\n * @context [Request] the request object that was sent\n * @see AWS.EventListeners.Core.SEND\n *\n * @!event retry(response)\n * Triggered when a request failed and might need to be retried or redirected.\n * If the response is retryable, the listener should set the\n * `response.error.retryable` property to `true`, and optionally set\n * `response.error.retryDelay` to the millisecond delay for the next attempt.\n * In the case of a redirect, `response.error.redirect` should be set to\n * `true` with `retryDelay` set to an optional delay on the next request.\n *\n * If a listener decides that a request should not be retried,\n * it should set both `retryable` and `redirect` to false.\n *\n * Note that a retryable error will be retried at most\n * {AWS.Config.maxRetries} times (based on the service object's config).\n * Similarly, a request that is redirected will only redirect at most\n * {AWS.Config.maxRedirects} times.\n *\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @example Adding a custom retry for a 404 response\n * request.on('retry', function(response) {\n * // this resource is not yet available, wait 10 seconds to get it again\n * if (response.httpResponse.statusCode === 404 && response.error) {\n * response.error.retryable = true; // retry this error\n * response.error.retryDelay = 10000; // wait 10 seconds\n * }\n * });\n *\n * @!group Data Parsing Events\n *\n * @!event extractError(response)\n * Triggered on all non-2xx requests so that listeners can extract\n * error details from the response body. Listeners to this event\n * should set the `response.error` property.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event extractData(response)\n * Triggered in successful requests to allow listeners to\n * de-serialize the response body into `response.data`.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!group Completion Events\n *\n * @!event success(response)\n * Triggered when the request completed successfully.\n * `response.data` will contain the response data and\n * `response.error` will be null.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event error(error, response)\n * Triggered when an error occurs at any point during the\n * request. `response.error` will contain details about the error\n * that occurred. `response.data` will be null.\n * @param error [Error] the error object containing details about\n * the error that occurred.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event complete(response)\n * Triggered whenever a request cycle completes. `response.error`\n * should be checked, since the request may have failed.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!group HTTP Events\n *\n * @!event httpHeaders(statusCode, headers, response, statusMessage)\n * Triggered when headers are sent by the remote server\n * @param statusCode [Integer] the HTTP response code\n * @param headers [map] the response headers\n * @param (see AWS.Request~send)\n * @param statusMessage [String] A status message corresponding to the HTTP\n * response code\n * @context (see AWS.Request~send)\n *\n * @!event httpData(chunk, response)\n * Triggered when data is sent by the remote server\n * @param chunk [Buffer] the buffer data containing the next data chunk\n * from the server\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @see AWS.EventListeners.Core.HTTP_DATA\n *\n * @!event httpUploadProgress(progress, response)\n * Triggered when the HTTP request has uploaded more data\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpDownloadProgress(progress, response)\n * Triggered when the HTTP request has downloaded more data\n * @param progress [map] An object containing the `loaded` and `total` bytes\n * of the request.\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n * @note This event will not be emitted in Node.js 0.8.x.\n *\n * @!event httpError(error, response)\n * Triggered when the HTTP request failed\n * @param error [Error] the error object that was thrown\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @!event httpDone(response)\n * Triggered when the server is finished sending data\n * @param (see AWS.Request~send)\n * @context (see AWS.Request~send)\n *\n * @see AWS.Response\n */\n\nAWS.Request = inherit({\n /**\n * Creates a request for an operation on a given service with\n * a set of input parameters.\n *\n * @param service [AWS.Service] the service to perform the operation on\n * @param operation [String] the operation to perform on the service\n * @param params [Object] parameters to send to the operation.\n * See the operation's documentation for the format of the\n * parameters.\n */\n constructor: function Request(service, operation, params) {\n var endpoint = service.endpoint;\n var region = service.config.region;\n var customUserAgent = service.config.customUserAgent; // global endpoints sign as us-east-1\n\n if (service.isGlobalEndpoint) region = 'us-east-1';\n this.domain = domain && domain.active;\n this.service = service;\n this.operation = operation;\n this.params = params || {};\n this.httpRequest = new AWS.HttpRequest(endpoint, region);\n this.httpRequest.appendToUserAgent(customUserAgent);\n this.startTime = service.getSkewCorrectedDate();\n this.response = new AWS.Response(this);\n this._asm = new AcceptorStateMachine(fsm.states, 'validate');\n this._haltHandlersOnError = false;\n AWS.SequentialExecutor.call(this);\n this.emit = this.emitEvent;\n },\n\n /**\n * @!group Sending a Request\n */\n\n /**\n * @overload send(callback = null)\n * Sends the request object.\n *\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @context [AWS.Request] the request object being sent.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n * @example Sending a request with a callback\n * request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * request.send(function(err, data) { console.log(err, data); });\n * @example Sending a request with no callback (using event handlers)\n * request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * request.on('complete', function(response) { ... }); // register a callback\n * request.send();\n */\n send: function send(callback) {\n if (callback) {\n // append to user agent\n this.httpRequest.appendToUserAgent('callback');\n this.on('complete', function (resp) {\n callback.call(resp, resp.error, resp.data);\n });\n }\n\n this.runTo();\n return this.response;\n },\n\n /**\n * @!method promise()\n * Sends the request and returns a 'thenable' promise.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(data)\n * Called if the promise is fulfilled.\n * @param data [Object] the de-serialized data returned from the request.\n * @callback rejectedCallback function(error)\n * Called if the promise is rejected.\n * @param error [Error] the error object returned from the request.\n * @return [Promise] A promise that represents the state of the request.\n * @example Sending a request using promises.\n * var request = s3.putObject({Bucket: 'bucket', Key: 'key'});\n * var result = request.promise();\n * result.then(function(data) { ... }, function(error) { ... });\n */\n\n /**\n * @api private\n */\n build: function build(callback) {\n return this.runTo('send', callback);\n },\n\n /**\n * @api private\n */\n runTo: function runTo(state, done) {\n this._asm.runTo(state, done, this);\n\n return this;\n },\n\n /**\n * Aborts a request, emitting the error and complete events.\n *\n * @!macro nobrowser\n * @example Aborting a request after sending\n * var params = {\n * Bucket: 'bucket', Key: 'key',\n * Body: Buffer.alloc(1024 * 1024 * 5) // 5MB payload\n * };\n * var request = s3.putObject(params);\n * request.send(function (err, data) {\n * if (err) console.log(\"Error:\", err.code, err.message);\n * else console.log(data);\n * });\n *\n * // abort request in 1 second\n * setTimeout(request.abort.bind(request), 1000);\n *\n * // prints \"Error: RequestAbortedError Request aborted by user\"\n * @return [AWS.Request] the same request object, for chaining.\n * @since v1.4.0\n */\n abort: function abort() {\n this.removeAllListeners('validateResponse');\n this.removeAllListeners('extractError');\n this.on('validateResponse', function addAbortedError(resp) {\n resp.error = AWS.util.error(new Error('Request aborted by user'), {\n code: 'RequestAbortedError',\n retryable: false\n });\n });\n\n if (this.httpRequest.stream && !this.httpRequest.stream.didCallback) {\n // abort HTTP stream\n this.httpRequest.stream.abort();\n\n if (this.httpRequest._abortCallback) {\n this.httpRequest._abortCallback();\n } else {\n this.removeAllListeners('send'); // haven't sent yet, so let's not\n }\n }\n\n return this;\n },\n\n /**\n * Iterates over each page of results given a pageable request, calling\n * the provided callback with each page of data. After all pages have been\n * retrieved, the callback is called with `null` data.\n *\n * @note This operation can generate multiple requests to a service.\n * @example Iterating over multiple pages of objects in an S3 bucket\n * var pages = 1;\n * s3.listObjects().eachPage(function(err, data) {\n * if (err) return;\n * console.log(\"Page\", pages++);\n * console.log(data);\n * });\n * @example Iterating over multiple pages with an asynchronous callback\n * s3.listObjects(params).eachPage(function(err, data, done) {\n * doSomethingAsyncAndOrExpensive(function() {\n * // The next page of results isn't fetched until done is called\n * done();\n * });\n * });\n * @callback callback function(err, data, [doneCallback])\n * Called with each page of resulting data from the request. If the\n * optional `doneCallback` is provided in the function, it must be called\n * when the callback is complete.\n *\n * @param err [Error] an error object, if an error occurred.\n * @param data [Object] a single page of response data. If there is no\n * more data, this object will be `null`.\n * @param doneCallback [Function] an optional done callback. If this\n * argument is defined in the function declaration, it should be called\n * when the next page is ready to be retrieved. This is useful for\n * controlling serial pagination across asynchronous operations.\n * @return [Boolean] if the callback returns `false`, pagination will\n * stop.\n *\n * @see AWS.Request.eachItem\n * @see AWS.Response.nextPage\n * @since v1.4.0\n */\n eachPage: function eachPage(callback) {\n // Make all callbacks async-ish\n callback = AWS.util.fn.makeAsync(callback, 3);\n\n function wrappedCallback(response) {\n callback.call(response, response.error, response.data, function (result) {\n if (result === false) return;\n\n if (response.hasNextPage()) {\n response.nextPage().on('complete', wrappedCallback).send();\n } else {\n callback.call(response, null, null, AWS.util.fn.noop);\n }\n });\n }\n\n this.on('complete', wrappedCallback).send();\n },\n\n /**\n * Enumerates over individual items of a request, paging the responses if\n * necessary.\n *\n * @api experimental\n * @since v1.4.0\n */\n eachItem: function eachItem(callback) {\n var self = this;\n\n function wrappedCallback(err, data) {\n if (err) return callback(err, null);\n if (data === null) return callback(null, null);\n var config = self.service.paginationConfig(self.operation);\n var resultKey = config.resultKey;\n if (Array.isArray(resultKey)) resultKey = resultKey[0];\n var items = jmespath.search(data, resultKey);\n var continueIteration = true;\n AWS.util.arrayEach(items, function (item) {\n continueIteration = callback(null, item);\n\n if (continueIteration === false) {\n return AWS.util.abort;\n }\n });\n return continueIteration;\n }\n\n this.eachPage(wrappedCallback);\n },\n\n /**\n * @return [Boolean] whether the operation can return multiple pages of\n * response data.\n * @see AWS.Response.eachPage\n * @since v1.4.0\n */\n isPageable: function isPageable() {\n return this.service.paginationConfig(this.operation) ? true : false;\n },\n\n /**\n * Sends the request and converts the request object into a readable stream\n * that can be read from or piped into a writable stream.\n *\n * @note The data read from a readable stream contains only\n * the raw HTTP body contents.\n * @example Manually reading from a stream\n * request.createReadStream().on('data', function(data) {\n * console.log(\"Got data:\", data.toString());\n * });\n * @example Piping a request body into a file\n * var out = fs.createWriteStream('/path/to/outfile.jpg');\n * s3.service.getObject(params).createReadStream().pipe(out);\n * @return [Stream] the readable stream object that can be piped\n * or read from (by registering 'data' event listeners).\n * @!macro nobrowser\n */\n createReadStream: function createReadStream() {\n var streams = AWS.util.stream;\n var req = this;\n var stream = null;\n\n if (AWS.HttpClient.streamsApiVersion === 2) {\n stream = new streams.PassThrough();\n process.nextTick(function () {\n req.send();\n });\n } else {\n stream = new streams.Stream();\n stream.readable = true;\n stream.sent = false;\n stream.on('newListener', function (event) {\n if (!stream.sent && event === 'data') {\n stream.sent = true;\n process.nextTick(function () {\n req.send();\n });\n }\n });\n }\n\n this.on('error', function (err) {\n stream.emit('error', err);\n });\n this.on('httpHeaders', function streamHeaders(statusCode, headers, resp) {\n if (statusCode < 300) {\n req.removeListener('httpData', AWS.EventListeners.Core.HTTP_DATA);\n req.removeListener('httpError', AWS.EventListeners.Core.HTTP_ERROR);\n req.on('httpError', function streamHttpError(error) {\n resp.error = error;\n resp.error.retryable = false;\n });\n var shouldCheckContentLength = false;\n var expectedLen;\n\n if (req.httpRequest.method !== 'HEAD') {\n expectedLen = parseInt(headers['content-length'], 10);\n }\n\n if (expectedLen !== undefined && !isNaN(expectedLen) && expectedLen >= 0) {\n shouldCheckContentLength = true;\n var receivedLen = 0;\n }\n\n var checkContentLengthAndEmit = function checkContentLengthAndEmit() {\n if (shouldCheckContentLength && receivedLen !== expectedLen) {\n stream.emit('error', AWS.util.error(new Error('Stream content length mismatch. Received ' + receivedLen + ' of ' + expectedLen + ' bytes.'), {\n code: 'StreamContentLengthMismatch'\n }));\n } else if (AWS.HttpClient.streamsApiVersion === 2) {\n stream.end();\n } else {\n stream.emit('end');\n }\n };\n\n var httpStream = resp.httpResponse.createUnbufferedStream();\n\n if (AWS.HttpClient.streamsApiVersion === 2) {\n if (shouldCheckContentLength) {\n var lengthAccumulator = new streams.PassThrough();\n\n lengthAccumulator._write = function (chunk) {\n if (chunk && chunk.length) {\n receivedLen += chunk.length;\n }\n\n return streams.PassThrough.prototype._write.apply(this, arguments);\n };\n\n lengthAccumulator.on('end', checkContentLengthAndEmit);\n stream.on('error', function (err) {\n shouldCheckContentLength = false;\n httpStream.unpipe(lengthAccumulator);\n lengthAccumulator.emit('end');\n lengthAccumulator.end();\n });\n httpStream.pipe(lengthAccumulator).pipe(stream, {\n end: false\n });\n } else {\n httpStream.pipe(stream);\n }\n } else {\n if (shouldCheckContentLength) {\n httpStream.on('data', function (arg) {\n if (arg && arg.length) {\n receivedLen += arg.length;\n }\n });\n }\n\n httpStream.on('data', function (arg) {\n stream.emit('data', arg);\n });\n httpStream.on('end', checkContentLengthAndEmit);\n }\n\n httpStream.on('error', function (err) {\n shouldCheckContentLength = false;\n stream.emit('error', err);\n });\n }\n });\n return stream;\n },\n\n /**\n * @param [Array,Response] args This should be the response object,\n * or an array of args to send to the event.\n * @api private\n */\n emitEvent: function emit(eventName, args, done) {\n if (typeof args === 'function') {\n done = args;\n args = null;\n }\n\n if (!done) done = function done() {};\n if (!args) args = this.eventParameters(eventName, this.response);\n var origEmit = AWS.SequentialExecutor.prototype.emit;\n origEmit.call(this, eventName, args, function (err) {\n if (err) this.response.error = err;\n done.call(this, err);\n });\n },\n\n /**\n * @api private\n */\n eventParameters: function eventParameters(eventName) {\n switch (eventName) {\n case 'restart':\n case 'validate':\n case 'sign':\n case 'build':\n case 'afterValidate':\n case 'afterBuild':\n return [this];\n\n case 'error':\n return [this.response.error, this.response];\n\n default:\n return [this.response];\n }\n },\n\n /**\n * @api private\n */\n presign: function presign(expires, callback) {\n if (!callback && typeof expires === 'function') {\n callback = expires;\n expires = null;\n }\n\n return new AWS.Signers.Presign().sign(this.toGet(), expires, callback);\n },\n\n /**\n * @api private\n */\n isPresigned: function isPresigned() {\n return Object.prototype.hasOwnProperty.call(this.httpRequest.headers, 'presigned-expires');\n },\n\n /**\n * @api private\n */\n toUnauthenticated: function toUnauthenticated() {\n this._unAuthenticated = true;\n this.removeListener('validate', AWS.EventListeners.Core.VALIDATE_CREDENTIALS);\n this.removeListener('sign', AWS.EventListeners.Core.SIGN);\n return this;\n },\n\n /**\n * @api private\n */\n toGet: function toGet() {\n if (this.service.api.protocol === 'query' || this.service.api.protocol === 'ec2') {\n this.removeListener('build', this.buildAsGet);\n this.addListener('build', this.buildAsGet);\n }\n\n return this;\n },\n\n /**\n * @api private\n */\n buildAsGet: function buildAsGet(request) {\n request.httpRequest.method = 'GET';\n request.httpRequest.path = request.service.endpoint.path + '?' + request.httpRequest.body;\n request.httpRequest.body = ''; // don't need these headers on a GET request\n\n delete request.httpRequest.headers['Content-Length'];\n delete request.httpRequest.headers['Content-Type'];\n },\n\n /**\n * @api private\n */\n haltHandlersOnError: function haltHandlersOnError() {\n this._haltHandlersOnError = true;\n }\n});\n/**\n * @api private\n */\n\nAWS.Request.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.promise = function promise() {\n var self = this; // append to user agent\n\n this.httpRequest.appendToUserAgent('promise');\n return new PromiseDependency(function (resolve, reject) {\n self.on('complete', function (resp) {\n if (resp.error) {\n reject(resp.error);\n } else {\n // define $response property so that it is not enumberable\n // this prevents circular reference errors when stringifying the JSON object\n resolve(Object.defineProperty(resp.data || {}, '$response', {\n value: resp\n }));\n }\n });\n self.runTo();\n });\n };\n};\n/**\n * @api private\n */\n\n\nAWS.Request.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.promise;\n};\n\nAWS.util.addPromises(AWS.Request);\nAWS.util.mixin(AWS.Request, AWS.SequentialExecutor);","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n/**\n * @api private\n */\n\nvar expiresHeader = 'presigned-expires';\n/**\n * @api private\n */\n\nfunction signedUrlBuilder(request) {\n var expires = request.httpRequest.headers[expiresHeader];\n var signerClass = request.service.getSignerClass(request);\n delete request.httpRequest.headers['User-Agent'];\n delete request.httpRequest.headers['X-Amz-User-Agent'];\n\n if (signerClass === AWS.Signers.V4) {\n if (expires > 604800) {\n // one week expiry is invalid\n var message = 'Presigning does not support expiry time greater ' + 'than a week with SigV4 signing.';\n throw AWS.util.error(new Error(), {\n code: 'InvalidExpiryTime',\n message: message,\n retryable: false\n });\n }\n\n request.httpRequest.headers[expiresHeader] = expires;\n } else if (signerClass === AWS.Signers.S3) {\n var now = request.service ? request.service.getSkewCorrectedDate() : AWS.util.date.getDate();\n request.httpRequest.headers[expiresHeader] = parseInt(AWS.util.date.unixTimestamp(now) + expires, 10).toString();\n } else {\n throw AWS.util.error(new Error(), {\n message: 'Presigning only supports S3 or SigV4 signing.',\n code: 'UnsupportedSigner',\n retryable: false\n });\n }\n}\n/**\n * @api private\n */\n\n\nfunction signedUrlSigner(request) {\n var endpoint = request.httpRequest.endpoint;\n var parsedUrl = AWS.util.urlParse(request.httpRequest.path);\n var queryParams = {};\n\n if (parsedUrl.search) {\n queryParams = AWS.util.queryStringParse(parsedUrl.search.substr(1));\n }\n\n var auth = request.httpRequest.headers['Authorization'].split(' ');\n\n if (auth[0] === 'AWS') {\n auth = auth[1].split(':');\n queryParams['AWSAccessKeyId'] = auth[0];\n queryParams['Signature'] = auth[1];\n AWS.util.each(request.httpRequest.headers, function (key, value) {\n if (key === expiresHeader) key = 'Expires';\n\n if (key.indexOf('x-amz-meta-') === 0) {\n // Delete existing, potentially not normalized key\n delete queryParams[key];\n key = key.toLowerCase();\n }\n\n queryParams[key] = value;\n });\n delete request.httpRequest.headers[expiresHeader];\n delete queryParams['Authorization'];\n delete queryParams['Host'];\n } else if (auth[0] === 'AWS4-HMAC-SHA256') {\n // SigV4 signing\n auth.shift();\n var rest = auth.join(' ');\n var signature = rest.match(/Signature=(.*?)(?:,|\\s|\\r?\\n|$)/)[1];\n queryParams['X-Amz-Signature'] = signature;\n delete queryParams['Expires'];\n } // build URL\n\n\n endpoint.pathname = parsedUrl.pathname;\n endpoint.search = AWS.util.queryParamsToString(queryParams);\n}\n/**\n * @api private\n */\n\n\nAWS.Signers.Presign = inherit({\n /**\n * @api private\n */\n sign: function sign(request, expireTime, callback) {\n request.httpRequest.headers[expiresHeader] = expireTime || 3600;\n request.on('build', signedUrlBuilder);\n request.on('sign', signedUrlSigner);\n request.removeListener('afterBuild', AWS.EventListeners.Core.SET_CONTENT_LENGTH);\n request.removeListener('afterBuild', AWS.EventListeners.Core.COMPUTE_SHA256);\n request.emit('beforePresign', [request]);\n\n if (callback) {\n request.build(function () {\n if (this.response.error) callback(this.response.error);else {\n callback(null, AWS.util.urlFormat(request.httpRequest.endpoint));\n }\n });\n } else {\n request.build();\n if (request.response.error) throw request.response.error;\n return AWS.util.urlFormat(request.httpRequest.endpoint);\n }\n }\n});\n/**\n * @api private\n */\n\nmodule.exports = AWS.Signers.Presign;","/*\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 */\nexport var CognitoHostedUIIdentityProvider;\n\n(function (CognitoHostedUIIdentityProvider) {\n CognitoHostedUIIdentityProvider[\"Cognito\"] = \"COGNITO\";\n CognitoHostedUIIdentityProvider[\"Google\"] = \"Google\";\n CognitoHostedUIIdentityProvider[\"Facebook\"] = \"Facebook\";\n CognitoHostedUIIdentityProvider[\"Amazon\"] = \"LoginWithAmazon\";\n})(CognitoHostedUIIdentityProvider || (CognitoHostedUIIdentityProvider = {}));\n\nexport function isFederatedSignInOptions(obj) {\n var keys = ['provider', 'customState'];\n return obj && !!keys.find(function (k) {\n return obj.hasOwnProperty(k);\n });\n}\nexport function isFederatedSignInOptionsCustom(obj) {\n var keys = ['customProvider', 'customState'];\n return obj && !!keys.find(function (k) {\n return obj.hasOwnProperty(k);\n });\n}\nexport function isCognitoHostedOpts(oauth) {\n return oauth.redirectSignIn !== undefined;\n}\nexport var AuthErrorTypes;\n\n(function (AuthErrorTypes) {\n AuthErrorTypes[\"NoConfig\"] = \"noConfig\";\n AuthErrorTypes[\"MissingAuthConfig\"] = \"missingAuthConfig\";\n AuthErrorTypes[\"EmptyUsername\"] = \"emptyUsername\";\n AuthErrorTypes[\"InvalidUsername\"] = \"invalidUsername\";\n AuthErrorTypes[\"EmptyPassword\"] = \"emptyPassword\";\n AuthErrorTypes[\"EmptyCode\"] = \"emptyCode\";\n AuthErrorTypes[\"SignUpError\"] = \"signUpError\";\n AuthErrorTypes[\"NoMFA\"] = \"noMFA\";\n AuthErrorTypes[\"InvalidMFA\"] = \"invalidMFA\";\n AuthErrorTypes[\"EmptyChallengeResponse\"] = \"emptyChallengeResponse\";\n AuthErrorTypes[\"NoUserSession\"] = \"noUserSession\";\n AuthErrorTypes[\"Default\"] = \"default\";\n})(AuthErrorTypes || (AuthErrorTypes = {}));\n\nexport function isUsernamePasswordOpts(obj) {\n return !!obj.username;\n}","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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 */\n\n\nvar AuthenticationDetails = function () {\n /**\n * Constructs a new AuthenticationDetails object\n * @param {object=} data Creation options.\n * @param {string} data.Username User being authenticated.\n * @param {string} data.Password Plain-text password to authenticate with.\n * @param {(AttributeArg[])?} data.ValidationData Application extra metadata.\n * @param {(AttributeArg[])?} data.AuthParamaters Authentication paramaters for custom auth.\n */\n function AuthenticationDetails(data) {\n _classCallCheck(this, AuthenticationDetails);\n\n var _ref = data || {},\n ValidationData = _ref.ValidationData,\n Username = _ref.Username,\n Password = _ref.Password,\n AuthParameters = _ref.AuthParameters,\n ClientMetadata = _ref.ClientMetadata;\n\n this.validationData = ValidationData || {};\n this.authParameters = AuthParameters || {};\n this.clientMetadata = ClientMetadata || {};\n this.username = Username;\n this.password = Password;\n }\n /**\n * @returns {string} the record's username\n */\n\n\n AuthenticationDetails.prototype.getUsername = function getUsername() {\n return this.username;\n };\n /**\n * @returns {string} the record's password\n */\n\n\n AuthenticationDetails.prototype.getPassword = function getPassword() {\n return this.password;\n };\n /**\n * @returns {Array} the record's validationData\n */\n\n\n AuthenticationDetails.prototype.getValidationData = function getValidationData() {\n return this.validationData;\n };\n /**\n * @returns {Array} the record's authParameters\n */\n\n\n AuthenticationDetails.prototype.getAuthParameters = function getAuthParameters() {\n return this.authParameters;\n };\n /**\n * @returns {ClientMetadata} the clientMetadata for a Lambda trigger\n */\n\n\n AuthenticationDetails.prototype.getClientMetadata = function getClientMetadata() {\n return this.clientMetadata;\n };\n\n return AuthenticationDetails;\n}();\n\nexport default AuthenticationDetails;","import \"core-js/modules/es.array.reduce.js\";\n// 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\nexport default BigInteger;\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// (public) Constructor\n\nfunction BigInteger(a, b) {\n if (a != null) this.fromString(a, b);\n} // return new, unset BigInteger\n\n\nfunction nbi() {\n return new BigInteger(null);\n} // Bits per digit\n\n\nvar dbits; // JavaScript engine analysis\n\nvar canary = 0xdeadbeefcafe;\nvar j_lm = (canary & 0xffffff) == 0xefcafe; // 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// 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)\n\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\n return c;\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)\n\n\nfunction am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff,\n xh = x >> 15;\n\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\n return c;\n} // Alternately, set max digit bits to 28 since some\n// browsers slow down when dealing with 32-bit numbers.\n\n\nfunction am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff,\n xh = x >> 14;\n\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\n return c;\n}\n\nvar inBrowser = typeof navigator !== 'undefined';\n\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;\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; // Digit conversions\n\nvar BI_RM = '0123456789abcdefghijklmnopqrstuvwxyz';\nvar BI_RC = new Array();\nvar rr, vv;\nrr = '0'.charCodeAt(0);\n\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nrr = 'a'.charCodeAt(0);\n\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nrr = 'A'.charCodeAt(0);\n\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\n\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return c == null ? -1 : c;\n} // (protected) copy this to r\n\n\nfunction bnpCopyTo(r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n\n r.t = this.t;\n r.s = this.s;\n} // (protected) set from integer value x, -DV <= x < DV\n\n\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} // return bigint initialized to value\n\n\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n} // (protected) set from string and radix\n\n\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\n while (--i >= 0) {\n var x = intAt(s, i);\n\n if (x < 0) {\n if (s.charAt(i) == '-') mi = true;\n continue;\n }\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\n this.clamp();\n if (mi) BigInteger.ZERO.subTo(this, this);\n} // (protected) clamp off excess high words\n\n\nfunction bnpClamp() {\n var c = this.s & this.DM;\n\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n} // (public) return string representation in given radix\n\n\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\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = int2char(d);\n }\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\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n\n if (d > 0) m = true;\n if (m) r += int2char(d);\n }\n }\n\n return m ? r : '0';\n} // (public) -this\n\n\nfunction bnNegate() {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n} // (public) |this|\n\n\nfunction bnAbs() {\n return this.s < 0 ? this.negate() : this;\n} // (public) return + if this > a, - if this < a, 0 if equal\n\n\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\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) return r;\n }\n\n return 0;\n} // returns bit length of the integer x\n\n\nfunction nbits(x) {\n var r = 1,\n t;\n\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n\n return r;\n} // (public) return the number of bits in \"this\"\n\n\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} // (protected) r = this << n*DB\n\n\nfunction bnpDLShiftTo(n, r) {\n var i;\n\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n\n r.t = this.t + n;\n r.s = this.s;\n} // (protected) r = this >> n*DB\n\n\nfunction bnpDRShiftTo(n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n} // (protected) r = this << n\n\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\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\n for (i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n} // (protected) r = this >> n\n\n\nfunction bnpRShiftTo(n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\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\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\n if (bs > 0) r[this.t - ds - 1] |= (this.s & bm) << cbs;\n r.t = this.t - ds;\n r.clamp();\n} // (protected) r = this - a\n\n\nfunction bnpSubTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n if (a.t < this.t) {\n c -= a.s;\n\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += this.s;\n } else {\n c += this.s;\n\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c -= a.s;\n }\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} // (protected) r = this * a, r != this,a (HAC 14.12)\n// \"this\" should be the larger one if appropriate.\n\n\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\n while (--i >= 0) {\n r[i] = 0;\n }\n\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n\n r.s = 0;\n r.clamp();\n if (this.s != a.s) BigInteger.ZERO.subTo(r, r);\n} // (protected) r = this^2, r != this (HAC 14.16)\n\n\nfunction bnpSquareTo(r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n\n while (--i >= 0) {\n r[i] = 0;\n }\n\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n\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\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} // (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.\n\n\nfunction bnpDivRemTo(m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) return;\n var pt = this.abs();\n\n if (pt.t < pm.t) {\n if (q != null) q.fromInt(0);\n if (r != null) this.copyTo(r);\n return;\n }\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]); // normalize modulus\n\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\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\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n\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\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\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) BigInteger.ZERO.subTo(q, q);\n }\n\n r.t = ys;\n r.clamp();\n if (nsh > 0) r.rShiftTo(nsh, r); // Denormalize remainder\n\n if (ts < 0) BigInteger.ZERO.subTo(r, r);\n} // (public) this mod a\n\n\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} // (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.\n\n\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; // y == 1/x mod 2^2\n\n y = y * (2 - (x & 0xf) * y) & 0xf; // y == 1/x mod 2^4\n\n y = y * (2 - (x & 0xff) * y) & 0xff; // y == 1/x mod 2^8\n\n y = y * (2 - ((x & 0xffff) * y & 0xffff)) & 0xffff; // 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\n y = y * (2 - x * y % this.DV) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n\n return y > 0 ? this.DV - y : -y;\n}\n\nfunction bnEquals(a) {\n return this.compareTo(a) == 0;\n} // (protected) r = this + a\n\n\nfunction bnpAddTo(a, r) {\n var i = 0,\n c = 0,\n m = Math.min(a.t, this.t);\n\n while (i < m) {\n c += this[i] + a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n if (a.t < this.t) {\n c += a.s;\n\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += this.s;\n } else {\n c += this.s;\n\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n\n c += a.s;\n }\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} // (public) this + a\n\n\nfunction bnAdd(a) {\n var r = nbi();\n this.addTo(a, r);\n return r;\n} // (public) this - a\n\n\nfunction bnSubtract(a) {\n var r = nbi();\n this.subTo(a, r);\n return r;\n} // (public) this * a\n\n\nfunction bnMultiply(a) {\n var r = nbi();\n this.multiplyTo(a, r);\n return r;\n} // (public) this / a\n\n\nfunction bnDivide(a) {\n var r = nbi();\n this.divRemTo(a, r, null);\n return r;\n} // Montgomery reduction\n\n\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} // xR mod m\n\n\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} // x/R mod m\n\n\nfunction montRevert(x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n} // x = x/R mod m (HAC 14.32)\n\n\nfunction montReduce(x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n\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; // use am to combine the multiply-shift-add into one call\n\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t); // propagate carry\n\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\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} // r = \"x^2/R mod m\"; x != r\n\n\nfunction montSqrTo(x, r) {\n x.squareTo(r);\n this.reduce(r);\n} // r = \"xy/R mod m\"; x,y != r\n\n\nfunction montMulTo(x, y, r) {\n x.multiplyTo(y, r);\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; // (public) this^e % m (HAC 14.85)\n\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; // precomputation\n\n var g = new Array(),\n n = 3,\n k1 = k - 1,\n km = (1 << k) - 1;\n g[1] = z.convert(this);\n\n if (k > 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n\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\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 = k;\n\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\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\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\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n\n var result = z.revert(r);\n callback(null, result);\n return result;\n} // protected\n\n\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; // public\n\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; // \"constants\"\n\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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\nimport { Buffer } from 'buffer/';\nimport CryptoJS from 'crypto-js/core';\nimport 'crypto-js/lib-typedarrays'; // necessary for crypto js\n\nimport SHA256 from 'crypto-js/sha256';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\n\nvar randomBytes = function randomBytes(nBytes) {\n return Buffer.from(CryptoJS.lib.WordArray.random(nBytes).toString(), 'hex');\n};\n\nimport BigInteger from './BigInteger';\nvar initN = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD1' + '29024E088A67CC74020BBEA63B139B22514A08798E3404DD' + 'EF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245' + 'E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' + 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3D' + 'C2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F' + '83655D23DCA3AD961C62F356208552BB9ED529077096966D' + '670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' + 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9' + 'DE2BCBF6955817183995497CEA956AE515D2261898FA0510' + '15728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64' + 'ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7' + 'ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6B' + 'F12FFA06D98A0864D87602733EC86A64521F2B18177B200C' + 'BBE117577A615D6C770988C0BAD946E208E24FA074E5AB31' + '43DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF';\nvar newPasswordRequiredChallengeUserAttributePrefix = 'userAttributes.';\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 this.smallAValue = this.generateRandomSmallA();\n this.getLargeAValue(function () {});\n this.infoBits = Buffer.from('Caldera Derived Key', 'utf8');\n this.poolName = PoolName;\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 * @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 * 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 var randomBigInt = new BigInteger(hexRandom, 16);\n var smallABigInt = randomBigInt.mod(this.N);\n return smallABigInt;\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 * @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 * @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 * @returns {string} Value used to verify devices.\n */\n\n\n AuthenticationHelper.prototype.getVerifierDevices = function getVerifierDevices() {\n return this.verifierDevices;\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 var hexRandom = randomBytes(16).toString('hex');\n this.SaltToHashDevices = this.padHex(new BigInteger(hexRandom, 16));\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 * 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 * 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 return finalU;\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 str = buf instanceof Buffer ? CryptoJS.lib.WordArray.create(buf) : buf;\n var hashHex = SHA256(str).toString();\n return new Array(64 - hashHex.length).join('0') + hashHex;\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 * 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 infoBitsWordArray = CryptoJS.lib.WordArray.create(Buffer.concat([this.infoBits, Buffer.from(String.fromCharCode(1), 'utf8')]));\n var ikmWordArray = ikm instanceof Buffer ? CryptoJS.lib.WordArray.create(ikm) : ikm;\n var saltWordArray = salt instanceof Buffer ? CryptoJS.lib.WordArray.create(salt) : salt;\n var prk = HmacSHA256(ikmWordArray, saltWordArray);\n var hmac = HmacSHA256(infoBitsWordArray, prk);\n return Buffer.from(hmac.toString(), 'hex').slice(0, 16);\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 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 * 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 * Return constant newPasswordRequiredChallengeUserAttributePrefix\n * @return {newPasswordRequiredChallengeUserAttributePrefix} constant prefix value\n */\n\n\n AuthenticationHelper.prototype.getNewPasswordRequiredChallengeUserAttributePrefix = function getNewPasswordRequiredChallengeUserAttributePrefix() {\n return newPasswordRequiredChallengeUserAttributePrefix;\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\n if (hashStr.length % 2 === 1) {\n hashStr = '0' + hashStr;\n } else if ('89ABCDEFabcdef'.indexOf(hashStr[0]) !== -1) {\n hashStr = '00' + hashStr;\n }\n\n return hashStr;\n };\n\n return AuthenticationHelper;\n}();\n\nexport default AuthenticationHelper;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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\nimport { Buffer } from 'buffer/';\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); // Assign object\n\n\n this.jwtToken = token || '';\n this.payload = this.decodePayload();\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 * @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 * @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 * @returns {object} the token's payload.\n */\n\n\n CognitoJwtToken.prototype.decodePayload = function decodePayload() {\n var payload = this.jwtToken.split('.')[1];\n\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;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n 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\n\nimport CognitoJwtToken from './CognitoJwtToken';\n/** @class */\n\nvar CognitoAccessToken = function (_CognitoJwtToken) {\n _inherits(CognitoAccessToken, _CognitoJwtToken);\n /**\n * Constructs a new CognitoAccessToken object\n * @param {string=} AccessToken The JWT access token.\n */\n\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;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nfunction _possibleConstructorReturn(self, call) {\n if (!self) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n\n return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self;\n}\n\nfunction _inherits(subClass, superClass) {\n if (typeof superClass !== \"function\" && superClass !== null) {\n throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass);\n }\n\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n 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\n\nimport CognitoJwtToken from './CognitoJwtToken';\n/** @class */\n\nvar CognitoIdToken = function (_CognitoJwtToken) {\n _inherits(CognitoIdToken, _CognitoJwtToken);\n /**\n * Constructs a new CognitoIdToken object\n * @param {string=} IdToken The JWT Id token\n */\n\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;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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 */\n\n\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); // Assign object\n\n\n this.token = RefreshToken || '';\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;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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 */\n\n\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 * @returns {CognitoIdToken} the session's Id token\n */\n\n\n CognitoUserSession.prototype.getIdToken = function getIdToken() {\n return this.idToken;\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 * @returns {CognitoAccessToken} the session's access token\n */\n\n\n CognitoUserSession.prototype.getAccessToken = function getAccessToken() {\n return this.accessToken;\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 * @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 return now - iat;\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 return adjusted < this.accessToken.getExpiration() && adjusted < this.idToken.getExpiration();\n };\n\n return CognitoUserSession;\n}();\n\nexport default CognitoUserSession;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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\nvar monthNames = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];\nvar weekNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n/** @class */\n\nvar DateHelper = function () {\n function DateHelper() {\n _classCallCheck(this, DateHelper);\n }\n /**\n * @returns {string} The current time in \"ddd MMM D HH:mm:ss UTC YYYY\" format.\n */\n\n\n DateHelper.prototype.getNowString = function getNowString() {\n var now = new Date();\n var weekDay = weekNames[now.getUTCDay()];\n var month = monthNames[now.getUTCMonth()];\n var day = now.getUTCDate();\n var hours = now.getUTCHours();\n\n if (hours < 10) {\n hours = '0' + hours;\n }\n\n var minutes = now.getUTCMinutes();\n\n if (minutes < 10) {\n minutes = '0' + minutes;\n }\n\n var seconds = now.getUTCSeconds();\n\n if (seconds < 10) {\n seconds = '0' + seconds;\n }\n\n var year = now.getUTCFullYear(); // ddd MMM D HH:mm:ss UTC YYYY\n\n var dateNow = weekDay + ' ' + month + ' ' + day + ' ' + hours + ':' + minutes + ':' + seconds + ' UTC ' + year;\n return dateNow;\n };\n\n return DateHelper;\n}();\n\nexport default DateHelper;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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 */\n\n\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 * @returns {string} the record's value.\n */\n\n\n CognitoUserAttribute.prototype.getValue = function getValue() {\n return this.Value;\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 * @returns {string} the record's name.\n */\n\n\n CognitoUserAttribute.prototype.getName = function getName() {\n return this.Name;\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 * @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 * @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;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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\nvar dataMemory = {};\n/** @class */\n\nvar MemoryStorage = function () {\n function MemoryStorage() {\n _classCallCheck(this, MemoryStorage);\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\n\n MemoryStorage.setItem = function setItem(key, value) {\n dataMemory[key] = value;\n return dataMemory[key];\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 * 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 * 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/** @class */\n\n\nvar StorageHelper = function () {\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 * 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;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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\nimport { Buffer } from 'buffer/';\nimport CryptoJS from 'crypto-js/core';\nimport TypedArrays from 'crypto-js/lib-typedarrays'; // necessary for crypto js\n\nimport Base64 from 'crypto-js/enc-base64';\nimport HmacSHA256 from 'crypto-js/hmac-sha256';\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 * @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 this.client = data.Pool.client;\n this.signInUserSession = null;\n this.authenticationFlowType = 'USER_SRP_AUTH';\n this.storage = data.Storage || new StorageHelper().getStorage();\n this.keyPrefix = 'CognitoIdentityServiceProvider.' + this.pool.getClientId();\n this.userDataKey = this.keyPrefix + '.' + this.username + '.userData';\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.clearCachedUserData();\n this.signInUserSession = signInUserSession;\n this.cacheTokens();\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 * @returns {string} the user's username\n */\n\n\n CognitoUser.prototype.getUsername = function getUsername() {\n return this.username;\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 * 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 * 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 var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: 'CUSTOM_AUTH',\n ClientId: this.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\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\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\n _this.signInUserSession = _this.getCognitoUserSession(data.AuthenticationResult);\n\n _this.cacheTokens();\n\n return callback.onSuccess(_this.signInUserSession);\n });\n };\n /**\n * This is used for authenticating the user.\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 if (this.authenticationFlowType === 'USER_PASSWORD_AUTH') {\n return this.authenticateUserPlainUsernamePassword(authDetails, callback);\n } else if (this.authenticationFlowType === 'USER_SRP_AUTH' || this.authenticationFlowType === 'CUSTOM_AUTH') {\n return this.authenticateUserDefaultAuth(authDetails, callback);\n }\n\n return callback.onFailure(new Error('Authentication flow type is invalid.'));\n };\n /**\n * PRIVATE ONLY: This is an internal only method and should not\n * be directly called by the consumers.\n * 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.authenticateUserDefaultAuth = function authenticateUserDefaultAuth(authDetails, callback) {\n var _this2 = this;\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n var dateHelper = new DateHelper();\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 clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: _this2.authenticationFlowType,\n ClientId: _this2.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\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 _this2.username = challengeParameters.USER_ID_FOR_SRP;\n serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n salt = new BigInteger(challengeParameters.SALT, 16);\n\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 var message = CryptoJS.lib.WordArray.create(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')]));\n var key = CryptoJS.lib.WordArray.create(hkdf);\n var signatureString = Base64.stringify(HmacSHA256(message, key));\n var challengeResponses = {};\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\n _this2.clearCachedDeviceKeyAndPassword();\n\n return respondToAuthChallenge(challenge, challengeCallback);\n }\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 ClientMetadata: clientMetaData\n };\n\n if (_this2.getUserContextData()) {\n jsonReqResp.UserContextData = _this2.getUserContextData();\n }\n\n respondToAuthChallenge(jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n return _this2.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n });\n return undefined; // getPasswordAuthenticationKey callback end\n });\n return undefined;\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 {AuthenticationDetails} authDetails Contains the authentication data.\n * @param {object} callback Result callback map.\n * @param {onFailure} callback.onFailure Called on any error.\n * @param {mfaRequired} callback.mfaRequired MFA code\n * required to continue.\n * @param {authSuccess} callback.onSuccess Called on success with the new session.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.authenticateUserPlainUsernamePassword = function authenticateUserPlainUsernamePassword(authDetails, callback) {\n var _this3 = this;\n\n var authParameters = {};\n authParameters.USERNAME = this.username;\n authParameters.PASSWORD = authDetails.getPassword();\n\n if (!authParameters.PASSWORD) {\n callback.onFailure(new Error('PASSWORD parameter is required'));\n return;\n }\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n this.getCachedDeviceKeyAndPassword();\n\n if (this.deviceKey != null) {\n authParameters.DEVICE_KEY = this.deviceKey;\n }\n\n var clientMetaData = Object.keys(authDetails.getValidationData()).length !== 0 ? authDetails.getValidationData() : authDetails.getClientMetadata();\n var jsonReq = {\n AuthFlow: 'USER_PASSWORD_AUTH',\n ClientId: this.pool.getClientId(),\n AuthParameters: authParameters,\n ClientMetadata: clientMetaData\n };\n\n if (this.getUserContextData(this.username)) {\n jsonReq.UserContextData = this.getUserContextData(this.username);\n } // USER_PASSWORD_AUTH happens in a single round-trip: client sends userName and password,\n // Cognito UserPools verifies password and returns tokens.\n\n\n this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return _this3.authenticateUserInternal(authResult, authenticationHelper, callback);\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 _this4 = 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 === 'NEW_PASSWORD_REQUIRED') {\n this.Session = dataAuthenticate.Session;\n var userAttributes = null;\n var rawRequiredAttributes = null;\n var requiredAttributes = [];\n var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n\n if (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\n return callback.newPasswordRequired(userAttributes, requiredAttributes);\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.challengeName = challengeName;\n this.cacheTokens();\n var newDeviceMetadata = dataAuthenticate.AuthenticationResult.NewDeviceMetadata;\n\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 _this4.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n _this4.deviceGroupKey = newDeviceMetadata.DeviceGroupKey;\n _this4.randomPassword = authenticationHelper.getRandomPassword();\n\n _this4.client.request('ConfirmDevice', {\n DeviceKey: newDeviceMetadata.DeviceKey,\n AccessToken: _this4.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 _this4.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n\n _this4.cacheDeviceKeyAndPassword();\n\n if (dataConfirm.UserConfirmationNecessary === true) {\n return callback.onSuccess(_this4.signInUserSession, dataConfirm.UserConfirmationNecessary);\n }\n\n return callback.onSuccess(_this4.signInUserSession);\n });\n\n return undefined;\n });\n return undefined;\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.completeNewPasswordChallenge = function completeNewPasswordChallenge(newPassword, requiredAttributeData, callback, clientMetadata) {\n var _this5 = this;\n\n if (!newPassword) {\n return callback.onFailure(new Error('New password is required.'));\n }\n\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n var userAttributesPrefix = authenticationHelper.getNewPasswordRequiredChallengeUserAttributePrefix();\n var finalUserAttributes = {};\n\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 ClientMetadata: clientMetadata\n };\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\n return _this5.authenticateUserInternal(dataAuthenticate, authenticationHelper, callback);\n });\n return undefined;\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n * @private\n */\n\n\n CognitoUser.prototype.getDeviceResponse = function getDeviceResponse(callback, clientMetadata) {\n var _this6 = this;\n\n var authenticationHelper = new AuthenticationHelper(this.deviceGroupKey);\n var dateHelper = new DateHelper();\n var authParameters = {};\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 var jsonReq = {\n ChallengeName: 'DEVICE_SRP_AUTH',\n ClientId: _this6.pool.getClientId(),\n ChallengeResponses: authParameters,\n ClientMetadata: clientMetadata\n };\n\n if (_this6.getUserContextData()) {\n jsonReq.UserContextData = _this6.getUserContextData();\n }\n\n _this6.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n var challengeParameters = data.ChallengeParameters;\n var serverBValue = new BigInteger(challengeParameters.SRP_B, 16);\n var salt = new BigInteger(challengeParameters.SALT, 16);\n authenticationHelper.getPasswordAuthenticationKey(_this6.deviceKey, _this6.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 var message = CryptoJS.lib.WordArray.create(Buffer.concat([Buffer.from(_this6.deviceGroupKey, 'utf8'), Buffer.from(_this6.deviceKey, 'utf8'), Buffer.from(challengeParameters.SECRET_BLOCK, 'base64'), Buffer.from(dateNow, 'utf8')]));\n var key = CryptoJS.lib.WordArray.create(hkdf);\n var signatureString = Base64.stringify(HmacSHA256(message, key));\n var challengeResponses = {};\n challengeResponses.USERNAME = _this6.username;\n challengeResponses.PASSWORD_CLAIM_SECRET_BLOCK = challengeParameters.SECRET_BLOCK;\n challengeResponses.TIMESTAMP = dateNow;\n challengeResponses.PASSWORD_CLAIM_SIGNATURE = signatureString;\n challengeResponses.DEVICE_KEY = _this6.deviceKey;\n var jsonReqResp = {\n ChallengeName: 'DEVICE_PASSWORD_VERIFIER',\n ClientId: _this6.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: data.Session\n };\n\n if (_this6.getUserContextData()) {\n jsonReqResp.UserContextData = _this6.getUserContextData();\n }\n\n _this6.client.request('RespondToAuthChallenge', jsonReqResp, function (errAuthenticate, dataAuthenticate) {\n if (errAuthenticate) {\n return callback.onFailure(errAuthenticate);\n }\n\n _this6.signInUserSession = _this6.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n\n _this6.cacheTokens();\n\n return callback.onSuccess(_this6.signInUserSession);\n });\n\n return undefined; // getPasswordAuthenticationKey callback end\n });\n return undefined;\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.confirmRegistration = function confirmRegistration(confirmationCode, forceAliasCreation, callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n ConfirmationCode: confirmationCode,\n Username: this.username,\n ForceAliasCreation: forceAliasCreation,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ConfirmSignUp', jsonReq, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\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 challenge 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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.sendCustomChallengeAnswer = function sendCustomChallengeAnswer(answerChallenge, callback, clientMetadata) {\n var _this7 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.ANSWER = answerChallenge;\n var authenticationHelper = new AuthenticationHelper(this.pool.getUserPoolId().split('_')[1]);\n this.getCachedDeviceKeyAndPassword();\n\n if (this.deviceKey != null) {\n challengeResponses.DEVICE_KEY = this.deviceKey;\n }\n\n var jsonReq = {\n ChallengeName: 'CUSTOM_CHALLENGE',\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return _this7.authenticateUserInternal(data, authenticationHelper, callback);\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.sendMFACode = function sendMFACode(confirmationCode, callback, mfaType, clientMetadata) {\n var _this8 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.SMS_MFA_CODE = confirmationCode;\n var mfaTypeSelection = mfaType || 'SMS_MFA';\n\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 ClientMetadata: clientMetadata\n };\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 _this8.getDeviceResponse(callback);\n\n return undefined;\n }\n\n _this8.signInUserSession = _this8.getCognitoUserSession(dataAuthenticate.AuthenticationResult);\n\n _this8.cacheTokens();\n\n if (dataAuthenticate.AuthenticationResult.NewDeviceMetadata == null) {\n return callback.onSuccess(_this8.signInUserSession);\n }\n\n var authenticationHelper = new AuthenticationHelper(_this8.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 _this8.verifierDevices = deviceSecretVerifierConfig.PasswordVerifier;\n _this8.deviceGroupKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceGroupKey;\n _this8.randomPassword = authenticationHelper.getRandomPassword();\n\n _this8.client.request('ConfirmDevice', {\n DeviceKey: dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey,\n AccessToken: _this8.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 _this8.deviceKey = dataAuthenticate.AuthenticationResult.NewDeviceMetadata.DeviceKey;\n\n _this8.cacheDeviceKeyAndPassword();\n\n if (dataConfirm.UserConfirmationNecessary === true) {\n return callback.onSuccess(_this8.signInUserSession, dataConfirm.UserConfirmationNecessary);\n }\n\n return callback.onSuccess(_this8.signInUserSession);\n });\n\n return undefined;\n });\n return undefined;\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.changePassword = function changePassword(oldUserPassword, newUserPassword, callback, clientMetadata) {\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 ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n /**\n * This is used by an authenticated user to enable MFA for itself\n * @deprecated\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 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\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n /**\n * This is used by an authenticated user to enable MFA for itself\n * @param {IMfaSettings} smsMfaSettings the sms mfa settings\n * @param {IMFASettings} 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\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n /**\n * This is used by an authenticated user to disable MFA for itself\n * @deprecated\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 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\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n /**\n * This is used by an authenticated user to delete itself\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.deleteUser = function deleteUser(callback, clientMetadata) {\n var _this9 = 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 ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n _this9.clearCachedUser();\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n /**\n * @typedef {CognitoUserAttribute | { Name:string, Value:string }} AttributeArg\n */\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.updateAttributes = function updateAttributes(attributes, callback, clientMetadata) {\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 ClientMetadata: clientMetadata\n }, function (err) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, 'SUCCESS');\n });\n return undefined;\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 * 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 * This is used by an authenticated users to get the userData\n * @param {nodeCallback} callback Called on success or error.\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getUserData = function getUserData(callback, params) {\n var _this10 = this;\n\n if (!(this.signInUserSession != null && this.signInUserSession.isValid())) {\n this.clearCachedUserData();\n return callback(new Error('User is not authenticated'), null);\n }\n\n var bypassCache = params ? params.bypassCache : false;\n var userData = this.storage.getItem(this.userDataKey); // get the cached user data\n\n if (!userData || bypassCache) {\n this.client.request('GetUser', {\n AccessToken: this.signInUserSession.getAccessToken().getJwtToken()\n }, function (err, latestUserData) {\n if (err) {\n return callback(err, null);\n }\n\n _this10.cacheUserData(latestUserData);\n\n var refresh = _this10.signInUserSession.getRefreshToken();\n\n if (refresh && refresh.getToken()) {\n _this10.refreshSession(refresh, function (refreshError, data) {\n if (refreshError) {\n return callback(refreshError, null);\n }\n\n return callback(null, latestUserData);\n });\n } else {\n return callback(null, latestUserData);\n }\n });\n } else {\n try {\n return callback(null, JSON.parse(userData));\n } catch (err) {\n this.clearCachedUserData();\n return callback(err, null);\n }\n }\n\n return undefined;\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\n return callback(null, 'SUCCESS');\n });\n return undefined;\n };\n /**\n * This is used by a user to resend a confirmation code\n * @param {nodeCallback} callback Called on success or error.\n * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.resendConfirmationCode = function resendConfirmationCode(callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ClientMetadata: clientMetadata\n };\n this.client.request('ResendConfirmationCode', jsonReq, function (err, result) {\n if (err) {\n return callback(err, null);\n }\n\n return callback(null, result);\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 var sessionData = {\n IdToken: idToken,\n AccessToken: accessToken,\n RefreshToken: refreshToken,\n ClockDrift: clockDrift\n };\n var cachedSession = new CognitoUserSession(sessionData);\n\n if (cachedSession.isValid()) {\n this.signInUserSession = cachedSession;\n return callback(null, this.signInUserSession);\n }\n\n if (!refreshToken.getToken()) {\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 * 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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.refreshSession = function refreshSession(refreshToken, callback, clientMetadata) {\n var _this11 = 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 ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('InitiateAuth', jsonReq, function (err, authResult) {\n if (err) {\n if (err.code === 'NotAuthorizedException') {\n _this11.clearCachedUser();\n }\n\n return callback(err, null);\n }\n\n if (authResult) {\n var authenticationResult = authResult.AuthenticationResult;\n\n if (!Object.prototype.hasOwnProperty.call(authenticationResult, 'RefreshToken')) {\n authenticationResult.RefreshToken = refreshToken.getToken();\n }\n\n _this11.signInUserSession = _this11.getCognitoUserSession(authenticationResult);\n\n _this11.cacheTokens();\n\n return callback(null, _this11.signInUserSession);\n }\n\n return undefined;\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 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 * This is to cache user data\n */\n\n\n CognitoUser.prototype.cacheUserData = function cacheUserData(userData) {\n this.storage.setItem(this.userDataKey, JSON.stringify(userData));\n };\n /**\n * This is to remove cached user data\n */\n\n\n CognitoUser.prototype.clearCachedUserData = function clearCachedUserData() {\n this.storage.removeItem(this.userDataKey);\n };\n\n CognitoUser.prototype.clearCachedUser = function clearCachedUser() {\n this.clearCachedTokens();\n this.clearCachedUserData();\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 this.storage.setItem(deviceKeyKey, this.deviceKey);\n this.storage.setItem(randomPasswordKey, this.randomPassword);\n this.storage.setItem(deviceGroupKeyKey, this.deviceGroupKey);\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 * 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 this.storage.removeItem(deviceKeyKey);\n this.storage.removeItem(randomPasswordKey);\n this.storage.removeItem(deviceGroupKeyKey);\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 var clockDriftKey = keyPrefix + '.' + this.username + '.clockDrift';\n this.storage.removeItem(idTokenKey);\n this.storage.removeItem(accessTokenKey);\n this.storage.removeItem(refreshTokenKey);\n this.storage.removeItem(lastUserKey);\n this.storage.removeItem(clockDriftKey);\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 var sessionData = {\n IdToken: idToken,\n AccessToken: accessToken,\n RefreshToken: refreshToken\n };\n return new CognitoUserSession(sessionData);\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.forgotPassword = function forgotPassword(callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ForgotPassword', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n if (typeof callback.inputVerificationCode === 'function') {\n return callback.inputVerificationCode(data);\n }\n\n return callback.onSuccess(data);\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.confirmPassword = function confirmPassword(confirmationCode, newPassword, callback, clientMetadata) {\n var jsonReq = {\n ClientId: this.pool.getClientId(),\n Username: this.username,\n ConfirmationCode: confirmationCode,\n Password: newPassword,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('ConfirmForgotPassword', jsonReq, function (err) {\n if (err) {\n return callback.onFailure(err);\n }\n\n return callback.onSuccess();\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 * @param {ClientMetadata} clientMetadata object which is passed from client to Cognito Lambda trigger\n * @returns {void}\n */\n\n\n CognitoUser.prototype.getAttributeVerificationCode = function getAttributeVerificationCode(attributeName, callback, clientMetadata) {\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 ClientMetadata: clientMetadata\n }, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n if (typeof callback.inputVerificationCode === 'function') {\n return callback.inputVerificationCode(data);\n }\n\n return callback.onSuccess();\n });\n return undefined;\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\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\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\n return callback.onSuccess(data);\n });\n return undefined;\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\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\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 _this12 = this;\n\n this.forgetSpecificDevice(this.deviceKey, {\n onFailure: callback.onFailure,\n onSuccess: function onSuccess(result) {\n _this12.deviceKey = null;\n _this12.deviceGroupKey = null;\n _this12.randomPassword = null;\n\n _this12.clearCachedDeviceKeyAndPassword();\n\n return callback.onSuccess(result);\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\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\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\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\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\n return callback.onSuccess(data);\n });\n return undefined;\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 _this13 = 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\n _this13.clearCachedUser();\n\n return callback.onSuccess('SUCCESS');\n });\n return undefined;\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.clearCachedUser();\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 _this14 = this;\n\n var challengeResponses = {};\n challengeResponses.USERNAME = this.username;\n challengeResponses.ANSWER = answerChallenge;\n var jsonReq = {\n ChallengeName: 'SELECT_MFA_TYPE',\n ChallengeResponses: challengeResponses,\n ClientId: this.pool.getClientId(),\n Session: this.Session\n };\n\n if (this.getUserContextData()) {\n jsonReq.UserContextData = this.getUserContextData();\n }\n\n this.client.request('RespondToAuthChallenge', jsonReq, function (err, data) {\n if (err) {\n return callback.onFailure(err);\n }\n\n _this14.Session = data.Session;\n\n if (answerChallenge === 'SMS_MFA') {\n return callback.mfaRequired(data.challengeName, data.challengeParameters);\n }\n\n if (answerChallenge === 'SOFTWARE_TOKEN_MFA') {\n return callback.totpRequired(data.challengeName, data.challengeParameters);\n }\n\n return undefined;\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 * 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 _this15 = 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\n _this15.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\n return callback.associateSecretCode(data.SecretCode);\n });\n }\n };\n /**\n * This is used by an authenticated or a user trying to authenticate to verify 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 _this16 = 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\n _this16.Session = data.Session;\n var challengeResponses = {};\n challengeResponses.USERNAME = _this16.username;\n var jsonReq = {\n ChallengeName: 'MFA_SETUP',\n ClientId: _this16.pool.getClientId(),\n ChallengeResponses: challengeResponses,\n Session: _this16.Session\n };\n\n if (_this16.getUserContextData()) {\n jsonReq.UserContextData = _this16.getUserContextData();\n }\n\n _this16.client.request('RespondToAuthChallenge', jsonReq, function (errRespond, dataRespond) {\n if (errRespond) {\n return callback.onFailure(errRespond);\n }\n\n _this16.signInUserSession = _this16.getCognitoUserSession(dataRespond.AuthenticationResult);\n\n _this16.cacheTokens();\n\n return callback.onSuccess(_this16.signInUserSession);\n });\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\n return callback.onSuccess(data);\n });\n }\n };\n\n return CognitoUser;\n}();\n\nexport default CognitoUser;","// class for defining the amzn user-agent\nexport default UserAgent; // constructor\n\nfunction UserAgent() {} // public\n\n\nUserAgent.prototype.userAgent = 'aws-amplify/0.1.x js';","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nimport UserAgent from './UserAgent';\n/** @class */\n\nvar Client = function () {\n /**\n * Constructs a new AWS Cognito Identity Provider client object\n * @param {string} region AWS region\n * @param {string} endpoint endpoint\n */\n function Client(region, endpoint) {\n _classCallCheck(this, Client);\n\n this.endpoint = endpoint || 'https://cognito-idp.' + region + '.amazonaws.com/';\n this.userAgent = UserAgent.prototype.userAgent || 'aws-amplify/0.1.x js';\n }\n /**\n * Makes an unauthenticated request on AWS Cognito Identity Provider API\n * using fetch\n * @param {string} operation API operation\n * @param {object} params Input parameters\n * @param {function} callback Callback called when a response is returned\n * @returns {void}\n */\n\n\n Client.prototype.request = function request(operation, params, callback) {\n var headers = {\n 'Content-Type': 'application/x-amz-json-1.1',\n 'X-Amz-Target': 'AWSCognitoIdentityProviderService.' + operation,\n 'X-Amz-User-Agent': this.userAgent\n };\n var options = {\n headers: headers,\n method: 'POST',\n mode: 'cors',\n cache: 'no-cache',\n body: JSON.stringify(params)\n };\n var response = void 0;\n var responseJsonData = void 0;\n fetch(this.endpoint, options).then(function (resp) {\n response = resp;\n return resp;\n }, function (err) {\n // If error happens here, the request failed\n // if it is TypeError throw network error\n if (err instanceof TypeError) {\n throw new Error('Network error');\n }\n\n throw err;\n }).then(function (resp) {\n return resp.json().catch(function () {\n return {};\n });\n }).then(function (data) {\n // return parsed body stream\n if (response.ok) return callback(null, data);\n responseJsonData = data; // Taken from aws-sdk-js/lib/protocol/json.js\n // eslint-disable-next-line no-underscore-dangle\n\n var code = (data.__type || data.code).split('#').pop();\n var error = {\n code: code,\n name: code,\n message: data.message || data.Message || null\n };\n return callback(error);\n }).catch(function (err) {\n // first check if we have a service error\n if (response && response.headers && response.headers.get('x-amzn-errortype')) {\n try {\n var code = response.headers.get('x-amzn-errortype').split(':')[0];\n var error = {\n code: code,\n name: code,\n statusCode: response.status,\n message: response.status ? response.status.toString() : null\n };\n return callback(error);\n } catch (ex) {\n return callback(err);\n } // otherwise check if error is Network error\n\n } else if (err instanceof Error && err.message === 'Network error') {\n var _error = {\n code: 'NetworkError',\n name: err.name,\n message: err.message\n };\n return callback(_error);\n } else {\n return callback(err);\n }\n });\n };\n\n return Client;\n}();\n\nexport default Client;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\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\nimport Client from './Client';\nimport CognitoUser from './CognitoUser';\nimport StorageHelper from './StorageHelper';\n/** @class */\n\nvar CognitoUserPool = function () {\n /**\n * Constructs a new CognitoUserPool object\n * @param {object} data Creation options.\n * @param {string} data.UserPoolId Cognito user pool id.\n * @param {string} data.ClientId User pool application client id.\n * @param {object} data.Storage Optional storage object.\n * @param {boolean} data.AdvancedSecurityDataCollectionFlag Optional:\n * boolean flag indicating if the data collection is enabled\n * to support cognito advanced security features. By default, this\n * flag is set to true.\n */\n function CognitoUserPool(data) {\n _classCallCheck(this, CognitoUserPool);\n\n var _ref = data || {},\n UserPoolId = _ref.UserPoolId,\n ClientId = _ref.ClientId,\n endpoint = _ref.endpoint,\n AdvancedSecurityDataCollectionFlag = _ref.AdvancedSecurityDataCollectionFlag;\n\n if (!UserPoolId || !ClientId) {\n throw new Error('Both UserPoolId and ClientId are required.');\n }\n\n if (!/^[\\w-]+_.+$/.test(UserPoolId)) {\n throw new Error('Invalid UserPoolId format.');\n }\n\n var region = UserPoolId.split('_')[0];\n this.userPoolId = UserPoolId;\n this.clientId = ClientId;\n this.client = new Client(region, endpoint);\n /**\n * By default, AdvancedSecurityDataCollectionFlag is set to true,\n * if no input value is provided.\n */\n\n this.advancedSecurityDataCollectionFlag = AdvancedSecurityDataCollectionFlag !== false;\n this.storage = data.Storage || new StorageHelper().getStorage();\n }\n /**\n * @returns {string} the user pool id\n */\n\n\n CognitoUserPool.prototype.getUserPoolId = function getUserPoolId() {\n return this.userPoolId;\n };\n /**\n * @returns {string} the client id\n */\n\n\n CognitoUserPool.prototype.getClientId = function getClientId() {\n return this.clientId;\n };\n /**\n * @typedef {object} SignUpResult\n * @property {CognitoUser} user New user.\n * @property {bool} userConfirmed If the user is already confirmed.\n */\n\n /**\n * method for signing up a user\n * @param {string} username User's username.\n * @param {string} password Plain-text initial password entered by user.\n * @param {(AttributeArg[])=} userAttributes New user attributes.\n * @param {(AttributeArg[])=} validationData Application metadata.\n * @param {(AttributeArg[])=} clientMetadata Client metadata.\n * @param {nodeCallback} callback Called on error or with the new user.\n * @returns {void}\n */\n\n\n CognitoUserPool.prototype.signUp = function signUp(username, password, userAttributes, validationData, callback, clientMetadata) {\n var _this = this;\n\n var jsonReq = {\n ClientId: this.clientId,\n Username: username,\n Password: password,\n UserAttributes: userAttributes,\n ValidationData: validationData,\n ClientMetadata: clientMetadata\n };\n\n if (this.getUserContextData(username)) {\n jsonReq.UserContextData = this.getUserContextData(username);\n }\n\n this.client.request('SignUp', jsonReq, function (err, data) {\n if (err) {\n return callback(err, null);\n }\n\n var cognitoUser = {\n Username: username,\n Pool: _this,\n Storage: _this.storage\n };\n var returnData = {\n user: new CognitoUser(cognitoUser),\n userConfirmed: data.UserConfirmed,\n userSub: data.UserSub,\n codeDeliveryDetails: data.CodeDeliveryDetails\n };\n return callback(null, returnData);\n });\n };\n /**\n * method for getting the current user of the application from the local storage\n *\n * @returns {CognitoUser} the user retrieved from storage\n */\n\n\n CognitoUserPool.prototype.getCurrentUser = function getCurrentUser() {\n var lastUserKey = 'CognitoIdentityServiceProvider.' + this.clientId + '.LastAuthUser';\n var lastAuthUser = this.storage.getItem(lastUserKey);\n\n if (lastAuthUser) {\n var cognitoUser = {\n Username: lastAuthUser,\n Pool: this,\n Storage: this.storage\n };\n return new CognitoUser(cognitoUser);\n }\n\n return null;\n };\n /**\n * This method returns the encoded data string used for cognito advanced security feature.\n * This would be generated only when developer has included the JS used for collecting the\n * data on their client. Please refer to documentation to know more about using AdvancedSecurity\n * features\n * @param {string} username the username for the context data\n * @returns {string} the user context data\n **/\n\n\n CognitoUserPool.prototype.getUserContextData = function getUserContextData(username) {\n if (typeof AmazonCognitoAdvancedSecurityData === 'undefined') {\n return undefined;\n }\n /* eslint-disable */\n\n\n var amazonCognitoAdvancedSecurityDataConst = AmazonCognitoAdvancedSecurityData;\n /* eslint-enable */\n\n if (this.advancedSecurityDataCollectionFlag) {\n var advancedSecurityData = amazonCognitoAdvancedSecurityDataConst.getData(username, this.userPoolId, this.clientId);\n\n if (advancedSecurityData) {\n var userContextData = {\n EncodedData: advancedSecurityData\n };\n return userContextData;\n }\n }\n\n return {};\n };\n\n return CognitoUserPool;\n}();\n\nexport default CognitoUserPool;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nimport * as Cookies from 'js-cookie';\n/** @class */\n\nvar CookieStorage = function () {\n /**\n * Constructs a new CookieStorage object\n * @param {object} data Creation options.\n * @param {string} data.domain Cookies domain (mandatory).\n * @param {string} data.path Cookies path (default: '/')\n * @param {integer} data.expires Cookie expiration (in days, default: 365)\n * @param {boolean} data.secure Cookie secure flag (default: true)\n */\n function CookieStorage(data) {\n _classCallCheck(this, CookieStorage);\n\n if (data.domain) {\n this.domain = data.domain;\n } else {\n throw new Error('The domain of cookieStorage can not be undefined.');\n }\n\n if (data.path) {\n this.path = data.path;\n } else {\n this.path = '/';\n }\n\n if (Object.prototype.hasOwnProperty.call(data, 'expires')) {\n this.expires = data.expires;\n } else {\n this.expires = 365;\n }\n\n if (Object.prototype.hasOwnProperty.call(data, 'secure')) {\n this.secure = data.secure;\n } else {\n this.secure = true;\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\n\n CookieStorage.prototype.setItem = function setItem(key, value) {\n Cookies.set(key, value, {\n path: this.path,\n expires: this.expires,\n domain: this.domain,\n secure: this.secure\n });\n return Cookies.get(key);\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 CookieStorage.prototype.getItem = function getItem(key) {\n return Cookies.get(key);\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 CookieStorage.prototype.removeItem = function removeItem(key) {\n return Cookies.remove(key, {\n path: this.path,\n domain: this.domain,\n secure: this.secure\n });\n };\n /**\n * This is used to clear the storage\n * @returns {string} nothing\n */\n\n\n CookieStorage.prototype.clear = function clear() {\n var cookies = Cookies.get();\n var index = void 0;\n\n for (index = 0; index < cookies.length; ++index) {\n Cookies.remove(cookies[index]);\n }\n\n return {};\n };\n\n return CookieStorage;\n}();\n\nexport default CookieStorage;","/*\n * Copyright 2019-2020 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 */\nvar __extends = this && this.__extends || function () {\n var _extendStatics = function extendStatics(d, b) {\n _extendStatics = Object.setPrototypeOf || {\n __proto__: []\n } instanceof Array && function (d, b) {\n d.__proto__ = b;\n } || function (d, b) {\n for (var p in b) {\n if (b.hasOwnProperty(p)) d[p] = b[p];\n }\n };\n\n return _extendStatics(d, b);\n };\n\n return function (d, b) {\n _extendStatics(d, b);\n\n function __() {\n this.constructor = d;\n }\n\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n}();\n\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\nvar logger = new Logger('AuthError');\nvar DEFAULT_MSG = 'Authentication Error';\n\nvar AuthError =\n/** @class */\nfunction (_super) {\n __extends(AuthError, _super);\n\n function AuthError(type) {\n var _this = this;\n\n var _a = authErrorMessages[type],\n message = _a.message,\n log = _a.log;\n _this = _super.call(this, message) || this; // Hack for making the custom error class work when transpiled to es5\n // TODO: Delete the following 2 lines after we change the build target to >= es2015\n\n _this.constructor = AuthError;\n Object.setPrototypeOf(_this, AuthError.prototype);\n _this.name = 'AuthError';\n _this.log = log || message;\n logger.error(_this.log);\n return _this;\n }\n\n return AuthError;\n}(Error);\n\nexport { AuthError };\n\nvar NoUserPoolError =\n/** @class */\nfunction (_super) {\n __extends(NoUserPoolError, _super);\n\n function NoUserPoolError(type) {\n var _this = _super.call(this, type) || this; // Hack for making the custom error class work when transpiled to es5\n // TODO: Delete the following 2 lines after we change the build target to >= es2015\n\n\n _this.constructor = NoUserPoolError;\n Object.setPrototypeOf(_this, NoUserPoolError.prototype);\n _this.name = 'NoUserPoolError';\n return _this;\n }\n\n return NoUserPoolError;\n}(AuthError);\n\nexport { NoUserPoolError };\nexport var authErrorMessages = {\n noConfig: {\n message: DEFAULT_MSG,\n log: \"\\n Error: Amplify has not been configured correctly.\\n This error is typically caused by one of the following scenarios:\\n\\n 1. Make sure you're passing the awsconfig object to Amplify.configure() in your app's entry point\\n See https://aws-amplify.github.io/docs/js/authentication#configure-your-app for more information\\n \\n 2. There might be multiple conflicting versions of aws-amplify or amplify packages in your node_modules.\\n Try deleting your node_modules folder and reinstalling the dependencies with `yarn install`\\n \"\n },\n missingAuthConfig: {\n message: DEFAULT_MSG,\n log: \"\\n Error: Amplify has not been configured correctly. \\n The configuration object is missing required auth properties. \\n Did you run `amplify push` after adding auth via `amplify add auth`?\\n See https://aws-amplify.github.io/docs/js/authentication#amplify-project-setup for more information\\n \"\n },\n emptyUsername: {\n message: 'Username cannot be empty'\n },\n // TODO: should include a list of valid sign-in types\n invalidUsername: {\n message: 'The username should either be a string or one of the sign in types'\n },\n emptyPassword: {\n message: 'Password cannot be empty'\n },\n emptyCode: {\n message: 'Confirmation code cannot be empty'\n },\n signUpError: {\n message: 'Error creating account',\n log: 'The first parameter should either be non-null string or object'\n },\n noMFA: {\n message: 'No valid MFA method provided'\n },\n invalidMFA: {\n message: 'Invalid MFA type'\n },\n emptyChallengeResponse: {\n message: 'Challenge response cannot be empty'\n },\n noUserSession: {\n message: 'Failed to get the session because the user is empty'\n },\n default: {\n message: DEFAULT_MSG\n }\n};","/*\n * Copyright 2017-2019 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 */\nvar __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n\nimport { isUsernamePasswordOpts, isCognitoHostedOpts, isFederatedSignInOptions, isFederatedSignInOptionsCustom } from './types';\nimport { AWS, ConsoleLogger as Logger, Constants, Hub, JS, Parser, Credentials, StorageHelper } from '@aws-amplify/core';\nimport { CookieStorage, CognitoUserPool, AuthenticationDetails, CognitoUser, CognitoUserSession, CognitoUserAttribute, CognitoIdToken, CognitoRefreshToken, CognitoAccessToken } from 'amazon-cognito-identity-js';\nimport { parse } from 'url';\nimport OAuth from './OAuth/OAuth';\nimport { default as urlListener } from './urlListener';\nimport { AuthError, NoUserPoolError } from './Errors';\nimport { AuthErrorTypes } from './types/Auth';\nvar logger = new Logger('AuthClass');\nvar USER_ADMIN_SCOPE = 'aws.cognito.signin.user.admin';\nvar AMPLIFY_SYMBOL = typeof Symbol !== 'undefined' && typeof Symbol.for === 'function' ? Symbol.for('amplify_default') : '@@amplify_default';\n\nvar dispatchAuthEvent = function dispatchAuthEvent(event, data, message) {\n Hub.dispatch('auth', {\n event: event,\n data: data,\n message: message\n }, 'Auth', AMPLIFY_SYMBOL);\n};\n\nexport var CognitoHostedUIIdentityProvider;\n\n(function (CognitoHostedUIIdentityProvider) {\n CognitoHostedUIIdentityProvider[\"Cognito\"] = \"COGNITO\";\n CognitoHostedUIIdentityProvider[\"Google\"] = \"Google\";\n CognitoHostedUIIdentityProvider[\"Facebook\"] = \"Facebook\";\n CognitoHostedUIIdentityProvider[\"Amazon\"] = \"LoginWithAmazon\";\n})(CognitoHostedUIIdentityProvider || (CognitoHostedUIIdentityProvider = {}));\n/**\n * Provide authentication steps\n */\n\n\nvar AuthClass =\n/** @class */\nfunction () {\n /**\n * Initialize Auth with AWS configurations\n * @param {Object} config - Configuration of the Auth\n */\n function AuthClass(config) {\n var _this = this;\n\n this.userPool = null;\n this.user = null;\n this.configure(config);\n this.currentUserCredentials = this.currentUserCredentials.bind(this);\n\n if (AWS.config) {\n AWS.config.update({\n customUserAgent: Constants.userAgent\n });\n } else {\n logger.warn('No AWS.config');\n }\n\n Hub.listen('auth', function (_a) {\n var payload = _a.payload;\n var event = payload.event;\n\n switch (event) {\n case 'signIn':\n _this._storage.setItem('amplify-signin-with-hostedUI', 'false');\n\n break;\n\n case 'signOut':\n _this._storage.removeItem('amplify-signin-with-hostedUI');\n\n break;\n\n case 'cognitoHostedUI':\n _this._storage.setItem('amplify-signin-with-hostedUI', 'true');\n\n break;\n }\n });\n }\n\n AuthClass.prototype.getModuleName = function () {\n return 'Auth';\n };\n\n AuthClass.prototype.configure = function (config) {\n var _this = this;\n\n if (!config) return this._config || {};\n logger.debug('configure Auth');\n var conf = Object.assign({}, this._config, Parser.parseMobilehubConfig(config).Auth, config);\n this._config = conf;\n var _a = this._config,\n userPoolId = _a.userPoolId,\n userPoolWebClientId = _a.userPoolWebClientId,\n cookieStorage = _a.cookieStorage,\n oauth = _a.oauth,\n region = _a.region,\n identityPoolId = _a.identityPoolId,\n mandatorySignIn = _a.mandatorySignIn,\n refreshHandlers = _a.refreshHandlers,\n identityPoolRegion = _a.identityPoolRegion,\n clientMetadata = _a.clientMetadata;\n\n if (!this._config.storage) {\n // backward compatbility\n if (cookieStorage) this._storage = new CookieStorage(cookieStorage);else {\n this._storage = new StorageHelper().getStorage();\n }\n } else {\n if (!this._isValidAuthStorage(this._config.storage)) {\n logger.error('The storage in the Auth config is not valid!');\n throw new Error('Empty storage object');\n }\n\n this._storage = this._config.storage;\n }\n\n this._storageSync = Promise.resolve();\n\n if (typeof this._storage['sync'] === 'function') {\n this._storageSync = this._storage['sync']();\n }\n\n if (userPoolId) {\n var userPoolData = {\n UserPoolId: userPoolId,\n ClientId: userPoolWebClientId\n };\n userPoolData.Storage = this._storage;\n this.userPool = new CognitoUserPool(userPoolData);\n }\n\n Credentials.configure({\n mandatorySignIn: mandatorySignIn,\n region: identityPoolRegion || region,\n userPoolId: userPoolId,\n identityPoolId: identityPoolId,\n refreshHandlers: refreshHandlers,\n storage: this._storage\n }); // initiailize cognitoauth client if hosted ui options provided\n // to keep backward compatibility:\n\n var cognitoHostedUIConfig = oauth ? isCognitoHostedOpts(this._config.oauth) ? oauth : oauth.awsCognito : undefined;\n\n if (cognitoHostedUIConfig) {\n var cognitoAuthParams = Object.assign({\n cognitoClientId: userPoolWebClientId,\n UserPoolId: userPoolId,\n domain: cognitoHostedUIConfig['domain'],\n scopes: cognitoHostedUIConfig['scope'],\n redirectSignIn: cognitoHostedUIConfig['redirectSignIn'],\n redirectSignOut: cognitoHostedUIConfig['redirectSignOut'],\n responseType: cognitoHostedUIConfig['responseType'],\n Storage: this._storage,\n urlOpener: cognitoHostedUIConfig['urlOpener'],\n clientMetadata: clientMetadata\n }, cognitoHostedUIConfig['options']);\n this._oAuthHandler = new OAuth({\n scopes: cognitoAuthParams.scopes,\n config: cognitoAuthParams,\n cognitoClientId: cognitoAuthParams.cognitoClientId\n }); // **NOTE** - Remove this in a future major release as it is a breaking change\n\n urlListener(function (_a) {\n var url = _a.url;\n\n _this._handleAuthResponse(url);\n });\n }\n\n dispatchAuthEvent('configured', null, \"The Auth category has been configured successfully\");\n return this._config;\n };\n /**\n * Sign up with username, password and other attrbutes like phone, email\n * @param {String | object} params - The user attirbutes used for signin\n * @param {String[]} restOfAttrs - for the backward compatability\n * @return - A promise resolves callback data if success\n */\n\n\n AuthClass.prototype.signUp = function (params) {\n var _this = this;\n\n var restOfAttrs = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n restOfAttrs[_i - 1] = arguments[_i];\n }\n\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n\n var username = null;\n var password = null;\n var attributes = [];\n var validationData = null;\n var clientMetadata;\n\n if (params && typeof params === 'string') {\n username = params;\n password = restOfAttrs ? restOfAttrs[0] : null;\n var email = restOfAttrs ? restOfAttrs[1] : null;\n var phone_number = restOfAttrs ? restOfAttrs[2] : null;\n if (email) attributes.push({\n Name: 'email',\n Value: email\n });\n if (phone_number) attributes.push({\n Name: 'phone_number',\n Value: phone_number\n });\n } else if (params && typeof params === 'object') {\n username = params['username'];\n password = params['password'];\n\n if (params && params.clientMetadata) {\n clientMetadata = params.clientMetadata;\n } else if (this._config.clientMetadata) {\n clientMetadata = this._config.clientMetadata;\n }\n\n var attrs_1 = params['attributes'];\n\n if (attrs_1) {\n Object.keys(attrs_1).map(function (key) {\n var ele = {\n Name: key,\n Value: attrs_1[key]\n };\n attributes.push(ele);\n });\n }\n\n validationData = params['validationData'] || null;\n } else {\n return this.rejectAuthError(AuthErrorTypes.SignUpError);\n }\n\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n\n if (!password) {\n return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n }\n\n logger.debug('signUp attrs:', attributes);\n logger.debug('signUp validation data:', validationData);\n return new Promise(function (resolve, reject) {\n _this.userPool.signUp(username, password, attributes, validationData, function (err, data) {\n if (err) {\n dispatchAuthEvent('signUp_failure', err, username + \" failed to signup\");\n reject(err);\n } else {\n dispatchAuthEvent('signUp', data, username + \" has signed up successfully\");\n resolve(data);\n }\n }, clientMetadata);\n });\n };\n /**\n * Send the verfication code to confirm sign up\n * @param {String} username - The username to be confirmed\n * @param {String} code - The verification code\n * @param {ConfirmSignUpOptions} options - other options for confirm signup\n * @return - A promise resolves callback data if success\n */\n\n\n AuthClass.prototype.confirmSignUp = function (username, code, options) {\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n\n if (!code) {\n return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n }\n\n var user = this.createCognitoUser(username);\n var forceAliasCreation = options && typeof options.forceAliasCreation === 'boolean' ? options.forceAliasCreation : true;\n var clientMetadata;\n\n if (options && options.clientMetadata) {\n clientMetadata = options.clientMetadata;\n } else if (this._config.clientMetadata) {\n clientMetadata = this._config.clientMetadata;\n }\n\n return new Promise(function (resolve, reject) {\n user.confirmRegistration(code, forceAliasCreation, function (err, data) {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n }, clientMetadata);\n });\n };\n /**\n * Resend the verification code\n * @param {String} username - The username to be confirmed\n * @param {ClientMetadata} clientMetadata - Metadata to be passed to Cognito Lambda triggers\n * @return - A promise resolves data if success\n */\n\n\n AuthClass.prototype.resendSignUp = function (username, clientMetadata) {\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n\n var user = this.createCognitoUser(username);\n return new Promise(function (resolve, reject) {\n user.resendConfirmationCode(function (err, data) {\n if (err) {\n reject(err);\n } else {\n resolve(data);\n }\n }, clientMetadata);\n });\n };\n /**\n * Sign in\n * @param {String | SignInOpts} usernameOrSignInOpts - The username to be signed in or the sign in options\n * @param {String} password - The password of the username\n * @return - A promise resolves the CognitoUser\n */\n\n\n AuthClass.prototype.signIn = function (usernameOrSignInOpts, pw, clientMetadata) {\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n\n var username = null;\n var password = null;\n var validationData = {}; // for backward compatibility\n\n if (typeof usernameOrSignInOpts === 'string') {\n username = usernameOrSignInOpts;\n password = pw;\n } else if (isUsernamePasswordOpts(usernameOrSignInOpts)) {\n if (typeof pw !== 'undefined') {\n logger.warn('The password should be defined under the first parameter object!');\n }\n\n username = usernameOrSignInOpts.username;\n password = usernameOrSignInOpts.password;\n validationData = usernameOrSignInOpts.validationData;\n } else {\n return this.rejectAuthError(AuthErrorTypes.InvalidUsername);\n }\n\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n\n var authDetails = new AuthenticationDetails({\n Username: username,\n Password: password,\n ValidationData: validationData,\n ClientMetadata: clientMetadata\n });\n\n if (password) {\n return this.signInWithPassword(authDetails);\n } else {\n return this.signInWithoutPassword(authDetails);\n }\n };\n /**\n * Return an object with the authentication callbacks\n * @param {CognitoUser} user - the cognito user object\n * @param {} resolve - function called when resolving the current step\n * @param {} reject - function called when rejecting the current step\n * @return - an object with the callback methods for user authentication\n */\n\n\n AuthClass.prototype.authCallbacks = function (user, resolve, reject) {\n var _this = this;\n\n var that = this;\n return {\n onSuccess: function onSuccess(session) {\n return __awaiter(_this, void 0, void 0, function () {\n var cred, e_1, currentUser, e_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug(session);\n delete user['challengeName'];\n delete user['challengeParam'];\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 4, 5, 9]);\n\n return [4\n /*yield*/\n , Credentials.clear()];\n\n case 2:\n _a.sent();\n\n return [4\n /*yield*/\n , Credentials.set(session, 'session')];\n\n case 3:\n cred = _a.sent();\n logger.debug('succeed to get cognito credentials', cred);\n return [3\n /*break*/\n , 9];\n\n case 4:\n e_1 = _a.sent();\n logger.debug('cannot get cognito credentials', e_1);\n return [3\n /*break*/\n , 9];\n\n case 5:\n _a.trys.push([5, 7,, 8]);\n\n return [4\n /*yield*/\n , this.currentUserPoolUser()];\n\n case 6:\n currentUser = _a.sent();\n that.user = currentUser;\n dispatchAuthEvent('signIn', currentUser, \"A user \" + user.getUsername() + \" has been signed in\");\n resolve(currentUser);\n return [3\n /*break*/\n , 8];\n\n case 7:\n e_2 = _a.sent();\n logger.error('Failed to get the signed in user', e_2);\n reject(e_2);\n return [3\n /*break*/\n , 8];\n\n case 8:\n return [7\n /*endfinally*/\n ];\n\n case 9:\n return [2\n /*return*/\n ];\n }\n });\n });\n },\n onFailure: function onFailure(err) {\n logger.debug('signIn failure', err);\n dispatchAuthEvent('signIn_failure', err, user.getUsername() + \" failed to signin\");\n reject(err);\n },\n customChallenge: function customChallenge(challengeParam) {\n logger.debug('signIn custom challenge answer required');\n user['challengeName'] = 'CUSTOM_CHALLENGE';\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n mfaRequired: function mfaRequired(challengeName, challengeParam) {\n logger.debug('signIn MFA required');\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n mfaSetup: function mfaSetup(challengeName, challengeParam) {\n logger.debug('signIn mfa setup', challengeName);\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n newPasswordRequired: function newPasswordRequired(userAttributes, requiredAttributes) {\n logger.debug('signIn new password');\n user['challengeName'] = 'NEW_PASSWORD_REQUIRED';\n user['challengeParam'] = {\n userAttributes: userAttributes,\n requiredAttributes: requiredAttributes\n };\n resolve(user);\n },\n totpRequired: function totpRequired(challengeName, challengeParam) {\n logger.debug('signIn totpRequired');\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n selectMFAType: function selectMFAType(challengeName, challengeParam) {\n logger.debug('signIn selectMFAType', challengeName);\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n }\n };\n };\n /**\n * Sign in with a password\n * @private\n * @param {AuthenticationDetails} authDetails - the user sign in data\n * @return - A promise resolves the CognitoUser object if success or mfa required\n */\n\n\n AuthClass.prototype.signInWithPassword = function (authDetails) {\n var _this = this;\n\n var user = this.createCognitoUser(authDetails.getUsername());\n return new Promise(function (resolve, reject) {\n user.authenticateUser(authDetails, _this.authCallbacks(user, resolve, reject));\n });\n };\n /**\n * Sign in without a password\n * @private\n * @param {AuthenticationDetails} authDetails - the user sign in data\n * @return - A promise resolves the CognitoUser object if success or mfa required\n */\n\n\n AuthClass.prototype.signInWithoutPassword = function (authDetails) {\n var _this = this;\n\n var user = this.createCognitoUser(authDetails.getUsername());\n user.setAuthenticationFlowType('CUSTOM_AUTH');\n return new Promise(function (resolve, reject) {\n user.initiateAuth(authDetails, _this.authCallbacks(user, resolve, reject));\n });\n };\n /**\n * get user current preferred mfa option\n * this method doesn't work with totp, we need to deprecate it.\n * @deprecated\n * @param {CognitoUser} user - the current user\n * @return - A promise resolves the current preferred mfa option if success\n */\n\n\n AuthClass.prototype.getMFAOptions = function (user) {\n return new Promise(function (res, rej) {\n user.getMFAOptions(function (err, mfaOptions) {\n if (err) {\n logger.debug('get MFA Options failed', err);\n rej(err);\n return;\n }\n\n logger.debug('get MFA options success', mfaOptions);\n res(mfaOptions);\n return;\n });\n });\n };\n /**\n * get preferred mfa method\n * @param {CognitoUser} user - the current cognito user\n * @param {GetPreferredMFAOpts} params - options for getting the current user preferred MFA\n */\n\n\n AuthClass.prototype.getPreferredMFA = function (user, params) {\n var that = this;\n return new Promise(function (res, rej) {\n var bypassCache = params ? params.bypassCache : false;\n user.getUserData(function (err, data) {\n if (err) {\n logger.debug('getting preferred mfa failed', err);\n rej(err);\n return;\n }\n\n var mfaType = that._getMfaTypeFromUserData(data);\n\n if (!mfaType) {\n rej('invalid MFA Type');\n return;\n } else {\n res(mfaType);\n return;\n }\n }, {\n bypassCache: bypassCache\n });\n });\n };\n\n AuthClass.prototype._getMfaTypeFromUserData = function (data) {\n var ret = null;\n var preferredMFA = data.PreferredMfaSetting; // if the user has used Auth.setPreferredMFA() to setup the mfa type\n // then the \"PreferredMfaSetting\" would exist in the response\n\n if (preferredMFA) {\n ret = preferredMFA;\n } else {\n // if mfaList exists but empty, then its noMFA\n var mfaList = data.UserMFASettingList;\n\n if (!mfaList) {\n // if SMS was enabled by using Auth.enableSMS(),\n // the response would contain MFAOptions\n // as for now Cognito only supports for SMS, so we will say it is 'SMS_MFA'\n // if it does not exist, then it should be NOMFA\n var MFAOptions = data.MFAOptions;\n\n if (MFAOptions) {\n ret = 'SMS_MFA';\n } else {\n ret = 'NOMFA';\n }\n } else if (mfaList.length === 0) {\n ret = 'NOMFA';\n } else {\n logger.debug('invalid case for getPreferredMFA', data);\n }\n }\n\n return ret;\n };\n\n AuthClass.prototype._getUserData = function (user, params) {\n return new Promise(function (res, rej) {\n user.getUserData(function (err, data) {\n if (err) {\n logger.debug('getting user data failed', err);\n rej(err);\n return;\n } else {\n res(data);\n return;\n }\n }, params);\n });\n };\n /**\n * set preferred MFA method\n * @param {CognitoUser} user - the current Cognito user\n * @param {string} mfaMethod - preferred mfa method\n * @return - A promise resolve if success\n */\n\n\n AuthClass.prototype.setPreferredMFA = function (user, mfaMethod) {\n return __awaiter(this, void 0, void 0, function () {\n var userData, smsMfaSettings, totpMfaSettings, _a, mfaList, currentMFAType, that;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n return [4\n /*yield*/\n , this._getUserData(user, {\n bypassCache: true\n })];\n\n case 1:\n userData = _b.sent();\n smsMfaSettings = null;\n totpMfaSettings = null;\n _a = mfaMethod;\n\n switch (_a) {\n case 'TOTP' || 'SOFTWARE_TOKEN_MFA':\n return [3\n /*break*/\n , 2];\n\n case 'SMS' || 'SMS_MFA':\n return [3\n /*break*/\n , 3];\n\n case 'NOMFA':\n return [3\n /*break*/\n , 4];\n }\n\n return [3\n /*break*/\n , 6];\n\n case 2:\n totpMfaSettings = {\n PreferredMfa: true,\n Enabled: true\n };\n return [3\n /*break*/\n , 7];\n\n case 3:\n smsMfaSettings = {\n PreferredMfa: true,\n Enabled: true\n };\n return [3\n /*break*/\n , 7];\n\n case 4:\n mfaList = userData['UserMFASettingList'];\n return [4\n /*yield*/\n , this._getMfaTypeFromUserData(userData)];\n\n case 5:\n currentMFAType = _b.sent();\n\n if (currentMFAType === 'NOMFA') {\n return [2\n /*return*/\n , Promise.resolve('No change for mfa type')];\n } else if (currentMFAType === 'SMS_MFA') {\n smsMfaSettings = {\n PreferredMfa: false,\n Enabled: false\n };\n } else if (currentMFAType === 'SOFTWARE_TOKEN_MFA') {\n totpMfaSettings = {\n PreferredMfa: false,\n Enabled: false\n };\n } else {\n return [2\n /*return*/\n , this.rejectAuthError(AuthErrorTypes.InvalidMFA)];\n } // if there is a UserMFASettingList in the response\n // we need to disable every mfa type in that list\n\n\n if (mfaList && mfaList.length !== 0) {\n // to disable SMS or TOTP if exists in that list\n mfaList.forEach(function (mfaType) {\n if (mfaType === 'SMS_MFA') {\n smsMfaSettings = {\n PreferredMfa: false,\n Enabled: false\n };\n } else if (mfaType === 'SOFTWARE_TOKEN_MFA') {\n totpMfaSettings = {\n PreferredMfa: false,\n Enabled: false\n };\n }\n });\n }\n\n return [3\n /*break*/\n , 7];\n\n case 6:\n logger.debug('no validmfa method provided');\n return [2\n /*return*/\n , this.rejectAuthError(AuthErrorTypes.NoMFA)];\n\n case 7:\n that = this;\n return [2\n /*return*/\n , new Promise(function (res, rej) {\n user.setUserMfaPreference(smsMfaSettings, totpMfaSettings, function (err, result) {\n if (err) {\n logger.debug('Set user mfa preference error', err);\n return rej(err);\n }\n\n logger.debug('Set user mfa success', result);\n logger.debug('Caching the latest user data into local'); // cache the latest result into user data\n\n user.getUserData(function (err, data) {\n if (err) {\n logger.debug('getting user data failed', err);\n return rej(err);\n } else {\n return res(result);\n }\n }, {\n bypassCache: true\n });\n });\n })];\n }\n });\n });\n };\n /**\n * diable SMS\n * @deprecated\n * @param {CognitoUser} user - the current user\n * @return - A promise resolves is success\n */\n\n\n AuthClass.prototype.disableSMS = function (user) {\n return new Promise(function (res, rej) {\n user.disableMFA(function (err, data) {\n if (err) {\n logger.debug('disable mfa failed', err);\n rej(err);\n return;\n }\n\n logger.debug('disable mfa succeed', data);\n res(data);\n return;\n });\n });\n };\n /**\n * enable SMS\n * @deprecated\n * @param {CognitoUser} user - the current user\n * @return - A promise resolves is success\n */\n\n\n AuthClass.prototype.enableSMS = function (user) {\n return new Promise(function (res, rej) {\n user.enableMFA(function (err, data) {\n if (err) {\n logger.debug('enable mfa failed', err);\n rej(err);\n return;\n }\n\n logger.debug('enable mfa succeed', data);\n res(data);\n return;\n });\n });\n };\n /**\n * Setup TOTP\n * @param {CognitoUser} user - the current user\n * @return - A promise resolves with the secret code if success\n */\n\n\n AuthClass.prototype.setupTOTP = function (user) {\n return new Promise(function (res, rej) {\n user.associateSoftwareToken({\n onFailure: function onFailure(err) {\n logger.debug('associateSoftwareToken failed', err);\n rej(err);\n return;\n },\n associateSecretCode: function associateSecretCode(secretCode) {\n logger.debug('associateSoftwareToken sucess', secretCode);\n res(secretCode);\n return;\n }\n });\n });\n };\n /**\n * verify TOTP setup\n * @param {CognitoUser} user - the current user\n * @param {string} challengeAnswer - challenge answer\n * @return - A promise resolves is success\n */\n\n\n AuthClass.prototype.verifyTotpToken = function (user, challengeAnswer) {\n logger.debug('verfication totp token', user, challengeAnswer);\n return new Promise(function (res, rej) {\n user.verifySoftwareToken(challengeAnswer, 'My TOTP device', {\n onFailure: function onFailure(err) {\n logger.debug('verifyTotpToken failed', err);\n rej(err);\n return;\n },\n onSuccess: function onSuccess(data) {\n logger.debug('verifyTotpToken success', data);\n res(data);\n return;\n }\n });\n });\n };\n /**\n * Send MFA code to confirm sign in\n * @param {Object} user - The CognitoUser object\n * @param {String} code - The confirmation code\n */\n\n\n AuthClass.prototype.confirmSignIn = function (user, code, mfaType, clientMetadata) {\n var _this = this;\n\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n if (!code) {\n return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n }\n\n var that = this;\n return new Promise(function (resolve, reject) {\n user.sendMFACode(code, {\n onSuccess: function onSuccess(session) {\n return __awaiter(_this, void 0, void 0, function () {\n var cred, e_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug(session);\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 4, 5, 6]);\n\n return [4\n /*yield*/\n , Credentials.clear()];\n\n case 2:\n _a.sent();\n\n return [4\n /*yield*/\n , Credentials.set(session, 'session')];\n\n case 3:\n cred = _a.sent();\n logger.debug('succeed to get cognito credentials', cred);\n return [3\n /*break*/\n , 6];\n\n case 4:\n e_3 = _a.sent();\n logger.debug('cannot get cognito credentials', e_3);\n return [3\n /*break*/\n , 6];\n\n case 5:\n that.user = user;\n dispatchAuthEvent('signIn', user, user + \" has signed in\");\n resolve(user);\n return [7\n /*endfinally*/\n ];\n\n case 6:\n return [2\n /*return*/\n ];\n }\n });\n });\n },\n onFailure: function onFailure(err) {\n logger.debug('confirm signIn failure', err);\n reject(err);\n }\n }, mfaType, clientMetadata);\n });\n };\n\n AuthClass.prototype.completeNewPassword = function (user, password, requiredAttributes, clientMetadata) {\n var _this = this;\n\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n if (!password) {\n return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n }\n\n var that = this;\n return new Promise(function (resolve, reject) {\n user.completeNewPasswordChallenge(password, requiredAttributes, {\n onSuccess: function onSuccess(session) {\n return __awaiter(_this, void 0, void 0, function () {\n var cred, e_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug(session);\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 4, 5, 6]);\n\n return [4\n /*yield*/\n , Credentials.clear()];\n\n case 2:\n _a.sent();\n\n return [4\n /*yield*/\n , Credentials.set(session, 'session')];\n\n case 3:\n cred = _a.sent();\n logger.debug('succeed to get cognito credentials', cred);\n return [3\n /*break*/\n , 6];\n\n case 4:\n e_4 = _a.sent();\n logger.debug('cannot get cognito credentials', e_4);\n return [3\n /*break*/\n , 6];\n\n case 5:\n that.user = user;\n dispatchAuthEvent('signIn', user, user + \" has signed in\");\n resolve(user);\n return [7\n /*endfinally*/\n ];\n\n case 6:\n return [2\n /*return*/\n ];\n }\n });\n });\n },\n onFailure: function onFailure(err) {\n logger.debug('completeNewPassword failure', err);\n dispatchAuthEvent('completeNewPassword_failure', err, _this.user + \" failed to complete the new password flow\");\n reject(err);\n },\n mfaRequired: function mfaRequired(challengeName, challengeParam) {\n logger.debug('signIn MFA required');\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n },\n mfaSetup: function mfaSetup(challengeName, challengeParam) {\n logger.debug('signIn mfa setup', challengeName);\n user['challengeName'] = challengeName;\n user['challengeParam'] = challengeParam;\n resolve(user);\n }\n }, clientMetadata);\n });\n };\n /**\n * Send the answer to a custom challenge\n * @param {CognitoUser} user - The CognitoUser object\n * @param {String} challengeResponses - The confirmation code\n */\n\n\n AuthClass.prototype.sendCustomChallengeAnswer = function (user, challengeResponses, clientMetadata) {\n var _this = this;\n\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n\n if (!challengeResponses) {\n return this.rejectAuthError(AuthErrorTypes.EmptyChallengeResponse);\n }\n\n var that = this;\n return new Promise(function (resolve, reject) {\n user.sendCustomChallengeAnswer(challengeResponses, _this.authCallbacks(user, resolve, reject), clientMetadata);\n });\n };\n /**\n * Update an authenticated users' attributes\n * @param {CognitoUser} - The currently logged in user object\n * @return {Promise}\n **/\n\n\n AuthClass.prototype.updateUserAttributes = function (user, attributes, clientMetadata) {\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n var attributeList = [];\n var that = this;\n return new Promise(function (resolve, reject) {\n that.userSession(user).then(function (session) {\n for (var key in attributes) {\n if (key !== 'sub' && key.indexOf('_verified') < 0) {\n var attr = {\n Name: key,\n Value: attributes[key]\n };\n attributeList.push(attr);\n }\n }\n\n user.updateAttributes(attributeList, function (err, result) {\n if (err) {\n return reject(err);\n } else {\n return resolve(result);\n }\n }, clientMetadata);\n });\n });\n };\n /**\n * Return user attributes\n * @param {Object} user - The CognitoUser object\n * @return - A promise resolves to user attributes if success\n */\n\n\n AuthClass.prototype.userAttributes = function (user) {\n var _this = this;\n\n return new Promise(function (resolve, reject) {\n _this.userSession(user).then(function (session) {\n user.getUserAttributes(function (err, attributes) {\n if (err) {\n reject(err);\n } else {\n resolve(attributes);\n }\n });\n });\n });\n };\n\n AuthClass.prototype.verifiedContact = function (user) {\n var that = this;\n return this.userAttributes(user).then(function (attributes) {\n var attrs = that.attributesToObject(attributes);\n var unverified = {};\n var verified = {};\n\n if (attrs['email']) {\n if (attrs['email_verified']) {\n verified['email'] = attrs['email'];\n } else {\n unverified['email'] = attrs['email'];\n }\n }\n\n if (attrs['phone_number']) {\n if (attrs['phone_number_verified']) {\n verified['phone_number'] = attrs['phone_number'];\n } else {\n unverified['phone_number'] = attrs['phone_number'];\n }\n }\n\n return {\n verified: verified,\n unverified: unverified\n };\n });\n };\n /**\n * Get current authenticated user\n * @return - A promise resolves to current authenticated CognitoUser if success\n */\n\n\n AuthClass.prototype.currentUserPoolUser = function (params) {\n var _this = this;\n\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n\n var that = this;\n return new Promise(function (res, rej) {\n _this._storageSync.then(function () {\n var user = that.userPool.getCurrentUser();\n\n if (!user) {\n logger.debug('Failed to get user from user pool');\n rej('No current user');\n return;\n } // refresh the session if the session expired.\n\n\n user.getSession(function (err, session) {\n if (err) {\n logger.debug('Failed to get the user session', err);\n rej(err);\n return;\n } // get user data from Cognito\n\n\n var bypassCache = params ? params.bypassCache : false; // validate the token's scope fisrt before calling this function\n\n var _a = session.getAccessToken().decodePayload().scope,\n scope = _a === void 0 ? '' : _a;\n\n if (scope.split(' ').includes(USER_ADMIN_SCOPE)) {\n user.getUserData(function (err, data) {\n if (err) {\n logger.debug('getting user data failed', err); // Make sure the user is still valid\n\n if (err.message === 'User is disabled' || err.message === 'User does not exist.') {\n rej(err);\n } else {\n // the error may also be thrown when lack of permissions to get user info etc\n // in that case we just bypass the error\n res(user);\n }\n\n return;\n }\n\n var preferredMFA = data.PreferredMfaSetting || 'NOMFA';\n var attributeList = [];\n\n for (var i = 0; i < data.UserAttributes.length; i++) {\n var attribute = {\n Name: data.UserAttributes[i].Name,\n Value: data.UserAttributes[i].Value\n };\n var userAttribute = new CognitoUserAttribute(attribute);\n attributeList.push(userAttribute);\n }\n\n var attributes = that.attributesToObject(attributeList);\n Object.assign(user, {\n attributes: attributes,\n preferredMFA: preferredMFA\n });\n return res(user);\n }, {\n bypassCache: bypassCache\n });\n } else {\n logger.debug(\"Unable to get the user data because the \" + USER_ADMIN_SCOPE + \" \" + \"is not in the scopes of the access token\");\n return res(user);\n }\n });\n }).catch(function (e) {\n logger.debug('Failed to sync cache info into memory', e);\n return rej(e);\n });\n });\n };\n /**\n * Get current authenticated user\n * @param {CurrentUserOpts} - options for getting the current user\n * @return - A promise resolves to current authenticated CognitoUser if success\n */\n\n\n AuthClass.prototype.currentAuthenticatedUser = function (params) {\n return __awaiter(this, void 0, void 0, function () {\n var federatedUser, e_5, user, e_6;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug('getting current authenticated user');\n federatedUser = null;\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 3,, 4]);\n\n return [4\n /*yield*/\n , this._storageSync];\n\n case 2:\n _a.sent();\n\n return [3\n /*break*/\n , 4];\n\n case 3:\n e_5 = _a.sent();\n logger.debug('Failed to sync cache info into memory', e_5);\n throw e_5;\n\n case 4:\n try {\n federatedUser = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo')).user;\n } catch (e) {\n logger.debug('cannot load federated user from auth storage');\n }\n\n if (!federatedUser) return [3\n /*break*/\n , 5];\n this.user = federatedUser;\n logger.debug('get current authenticated federated user', this.user);\n return [2\n /*return*/\n , this.user];\n\n case 5:\n logger.debug('get current authenticated userpool user');\n user = null;\n _a.label = 6;\n\n case 6:\n _a.trys.push([6, 8,, 9]);\n\n return [4\n /*yield*/\n , this.currentUserPoolUser(params)];\n\n case 7:\n user = _a.sent();\n return [3\n /*break*/\n , 9];\n\n case 8:\n e_6 = _a.sent();\n\n if (e_6 === 'No userPool') {\n logger.error('Cannot get the current user because the user pool is missing. ' + 'Please make sure the Auth module is configured with a valid Cognito User Pool ID');\n }\n\n logger.debug('The user is not authenticated by the error', e_6);\n throw 'not authenticated';\n\n case 9:\n this.user = user;\n return [2\n /*return*/\n , this.user];\n }\n });\n });\n };\n /**\n * Get current user's session\n * @return - A promise resolves to session object if success\n */\n\n\n AuthClass.prototype.currentSession = function () {\n var that = this;\n logger.debug('Getting current session'); // Purposely not calling the reject method here because we don't need a console error\n\n if (!this.userPool) {\n return Promise.reject();\n }\n\n return new Promise(function (res, rej) {\n that.currentUserPoolUser().then(function (user) {\n that.userSession(user).then(function (session) {\n res(session);\n return;\n }).catch(function (e) {\n logger.debug('Failed to get the current session', e);\n rej(e);\n return;\n });\n }).catch(function (e) {\n logger.debug('Failed to get the current user', e);\n rej(e);\n return;\n });\n });\n };\n /**\n * Get the corresponding user session\n * @param {Object} user - The CognitoUser object\n * @return - A promise resolves to the session\n */\n\n\n AuthClass.prototype.userSession = function (user) {\n if (!user) {\n logger.debug('the user is null');\n return this.rejectAuthError(AuthErrorTypes.NoUserSession);\n }\n\n return new Promise(function (resolve, reject) {\n logger.debug('Getting the session from this user:', user);\n user.getSession(function (err, session) {\n if (err) {\n logger.debug('Failed to get the session from user', user);\n reject(err);\n return;\n } else {\n logger.debug('Succeed to get the user session', session);\n resolve(session);\n return;\n }\n });\n });\n };\n /**\n * Get authenticated credentials of current user.\n * @return - A promise resolves to be current user's credentials\n */\n\n\n AuthClass.prototype.currentUserCredentials = function () {\n return __awaiter(this, void 0, void 0, function () {\n var that, e_7, federatedInfo;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n that = this;\n logger.debug('Getting current user credentials');\n _a.label = 1;\n\n case 1:\n _a.trys.push([1, 3,, 4]);\n\n return [4\n /*yield*/\n , this._storageSync];\n\n case 2:\n _a.sent();\n\n return [3\n /*break*/\n , 4];\n\n case 3:\n e_7 = _a.sent();\n logger.debug('Failed to sync cache info into memory', e_7);\n throw e_7;\n\n case 4:\n federatedInfo = null;\n\n try {\n federatedInfo = JSON.parse(this._storage.getItem('aws-amplify-federatedInfo'));\n } catch (e) {\n logger.debug('failed to get or parse item aws-amplify-federatedInfo', e);\n }\n\n if (federatedInfo) {\n // refresh the jwt token here if necessary\n return [2\n /*return*/\n , Credentials.refreshFederatedToken(federatedInfo)];\n } else {\n return [2\n /*return*/\n , this.currentSession().then(function (session) {\n logger.debug('getting session success', session);\n return Credentials.set(session, 'session');\n }).catch(function (error) {\n logger.debug('getting session failed', error);\n return Credentials.set(null, 'guest');\n })];\n }\n\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n AuthClass.prototype.currentCredentials = function () {\n logger.debug('getting current credntials');\n return Credentials.get();\n };\n /**\n * Initiate an attribute confirmation request\n * @param {Object} user - The CognitoUser\n * @param {Object} attr - The attributes to be verified\n * @return - A promise resolves to callback data if success\n */\n\n\n AuthClass.prototype.verifyUserAttribute = function (user, attr, clientMetadata) {\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n return new Promise(function (resolve, reject) {\n user.getAttributeVerificationCode(attr, {\n onSuccess: function onSuccess() {\n return resolve();\n },\n onFailure: function onFailure(err) {\n return reject(err);\n },\n clientMetadata: clientMetadata\n });\n });\n };\n /**\n * Confirm an attribute using a confirmation code\n * @param {Object} user - The CognitoUser\n * @param {Object} attr - The attribute to be verified\n * @param {String} code - The confirmation code\n * @return - A promise resolves to callback data if success\n */\n\n\n AuthClass.prototype.verifyUserAttributeSubmit = function (user, attr, code) {\n if (!code) {\n return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n }\n\n return new Promise(function (resolve, reject) {\n user.verifyAttribute(attr, code, {\n onSuccess: function onSuccess(data) {\n resolve(data);\n return;\n },\n onFailure: function onFailure(err) {\n reject(err);\n return;\n }\n });\n });\n };\n\n AuthClass.prototype.verifyCurrentUserAttribute = function (attr) {\n var that = this;\n return that.currentUserPoolUser().then(function (user) {\n return that.verifyUserAttribute(user, attr);\n });\n };\n /**\n * Confirm current user's attribute using a confirmation code\n * @param {Object} attr - The attribute to be verified\n * @param {String} code - The confirmation code\n * @return - A promise resolves to callback data if success\n */\n\n\n AuthClass.prototype.verifyCurrentUserAttributeSubmit = function (attr, code) {\n var that = this;\n return that.currentUserPoolUser().then(function (user) {\n return that.verifyUserAttributeSubmit(user, attr, code);\n });\n };\n\n AuthClass.prototype.cognitoIdentitySignOut = function (opts, user) {\n return __awaiter(this, void 0, void 0, function () {\n var e_8, isSignedInHostedUI;\n\n var _this = this;\n\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2,, 3]);\n\n return [4\n /*yield*/\n , this._storageSync];\n\n case 1:\n _a.sent();\n\n return [3\n /*break*/\n , 3];\n\n case 2:\n e_8 = _a.sent();\n logger.debug('Failed to sync cache info into memory', e_8);\n throw e_8;\n\n case 3:\n isSignedInHostedUI = this._oAuthHandler && this._storage.getItem('amplify-signin-with-hostedUI') === 'true';\n return [2\n /*return*/\n , new Promise(function (res, rej) {\n if (opts && opts.global) {\n logger.debug('user global sign out', user); // in order to use global signout\n // we must validate the user as an authenticated user by using getSession\n\n user.getSession(function (err, result) {\n if (err) {\n logger.debug('failed to get the user session', err);\n return rej(err);\n }\n\n user.globalSignOut({\n onSuccess: function onSuccess(data) {\n logger.debug('global sign out success');\n\n if (isSignedInHostedUI) {\n return res(_this._oAuthHandler.signOut());\n } else {\n return res();\n }\n },\n onFailure: function onFailure(err) {\n logger.debug('global sign out failed', err);\n return rej(err);\n }\n });\n });\n } else {\n logger.debug('user sign out', user);\n user.signOut();\n\n if (isSignedInHostedUI) {\n return res(_this._oAuthHandler.signOut());\n } else {\n return res();\n }\n }\n })];\n }\n });\n });\n };\n /**\n * Sign out method\n * @\n * @return - A promise resolved if success\n */\n\n\n AuthClass.prototype.signOut = function (opts) {\n return __awaiter(this, void 0, void 0, function () {\n var e_9, user;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2,, 3]);\n\n return [4\n /*yield*/\n , this.cleanCachedItems()];\n\n case 1:\n _a.sent();\n\n return [3\n /*break*/\n , 3];\n\n case 2:\n e_9 = _a.sent();\n logger.debug('failed to clear cached items');\n return [3\n /*break*/\n , 3];\n\n case 3:\n if (!this.userPool) return [3\n /*break*/\n , 7];\n user = this.userPool.getCurrentUser();\n if (!user) return [3\n /*break*/\n , 5];\n return [4\n /*yield*/\n , this.cognitoIdentitySignOut(opts, user)];\n\n case 4:\n _a.sent();\n\n return [3\n /*break*/\n , 6];\n\n case 5:\n logger.debug('no current Cognito user');\n _a.label = 6;\n\n case 6:\n return [3\n /*break*/\n , 8];\n\n case 7:\n logger.debug('no Congito User pool');\n _a.label = 8;\n\n case 8:\n /**\n * Note for future refactor - no reliable way to get username with\n * Cognito User Pools vs Identity when federating with Social Providers\n * This is why we need a well structured session object that can be inspected\n * and information passed back in the message below for Hub dispatch\n */\n dispatchAuthEvent('signOut', this.user, \"A user has been signed out\");\n this.user = null;\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n AuthClass.prototype.cleanCachedItems = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // clear cognito cached item\n return [4\n /*yield*/\n , Credentials.clear()];\n\n case 1:\n // clear cognito cached item\n _a.sent();\n\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\n * Change a password for an authenticated user\n * @param {Object} user - The CognitoUser object\n * @param {String} oldPassword - the current password\n * @param {String} newPassword - the requested new password\n * @return - A promise resolves if success\n */\n\n\n AuthClass.prototype.changePassword = function (user, oldPassword, newPassword, clientMetadata) {\n var _this = this;\n\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n return new Promise(function (resolve, reject) {\n _this.userSession(user).then(function (session) {\n user.changePassword(oldPassword, newPassword, function (err, data) {\n if (err) {\n logger.debug('change password failure', err);\n return reject(err);\n } else {\n return resolve(data);\n }\n }, clientMetadata);\n });\n });\n };\n /**\n * Initiate a forgot password request\n * @param {String} username - the username to change password\n * @return - A promise resolves if success\n */\n\n\n AuthClass.prototype.forgotPassword = function (username, clientMetadata) {\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n\n var user = this.createCognitoUser(username);\n return new Promise(function (resolve, reject) {\n user.forgotPassword({\n onSuccess: function onSuccess() {\n resolve();\n return;\n },\n onFailure: function onFailure(err) {\n logger.debug('forgot password failure', err);\n dispatchAuthEvent('forgotPassword_failure', err, username + \" forgotPassword failed\");\n reject(err);\n return;\n },\n inputVerificationCode: function inputVerificationCode(data) {\n dispatchAuthEvent('forgotPassword', user, username + \" has initiated forgot password flow\");\n resolve(data);\n return;\n }\n }, clientMetadata);\n });\n };\n /**\n * Confirm a new password using a confirmation Code\n * @param {String} username - The username\n * @param {String} code - The confirmation code\n * @param {String} password - The new password\n * @return - A promise that resolves if success\n */\n\n\n AuthClass.prototype.forgotPasswordSubmit = function (username, code, password, clientMetadata) {\n if (clientMetadata === void 0) {\n clientMetadata = this._config.clientMetadata;\n }\n\n if (!this.userPool) {\n return this.rejectNoUserPool();\n }\n\n if (!username) {\n return this.rejectAuthError(AuthErrorTypes.EmptyUsername);\n }\n\n if (!code) {\n return this.rejectAuthError(AuthErrorTypes.EmptyCode);\n }\n\n if (!password) {\n return this.rejectAuthError(AuthErrorTypes.EmptyPassword);\n }\n\n var user = this.createCognitoUser(username);\n return new Promise(function (resolve, reject) {\n user.confirmPassword(code, password, {\n onSuccess: function onSuccess() {\n dispatchAuthEvent('forgotPasswordSubmit', user, username + \" forgotPasswordSubmit successful\");\n resolve();\n return;\n },\n onFailure: function onFailure(err) {\n dispatchAuthEvent('forgotPasswordSubmit_failure', err, username + \" forgotPasswordSubmit failed\");\n reject(err);\n return;\n }\n }, clientMetadata);\n });\n };\n /**\n * Get user information\n * @async\n * @return {Object }- current User's information\n */\n\n\n AuthClass.prototype.currentUserInfo = function () {\n return __awaiter(this, void 0, void 0, function () {\n var source, user, attributes, userAttrs, credentials, e_10, info, err_1, user;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n source = Credentials.getCredSource();\n if (!(!source || source === 'aws' || source === 'userPool')) return [3\n /*break*/\n , 9];\n return [4\n /*yield*/\n , this.currentUserPoolUser().catch(function (err) {\n return logger.debug(err);\n })];\n\n case 1:\n user = _a.sent();\n\n if (!user) {\n return [2\n /*return*/\n , null];\n }\n\n _a.label = 2;\n\n case 2:\n _a.trys.push([2, 8,, 9]);\n\n return [4\n /*yield*/\n , this.userAttributes(user)];\n\n case 3:\n attributes = _a.sent();\n userAttrs = this.attributesToObject(attributes);\n credentials = null;\n _a.label = 4;\n\n case 4:\n _a.trys.push([4, 6,, 7]);\n\n return [4\n /*yield*/\n , this.currentCredentials()];\n\n case 5:\n credentials = _a.sent();\n return [3\n /*break*/\n , 7];\n\n case 6:\n e_10 = _a.sent();\n logger.debug('Failed to retrieve credentials while getting current user info', e_10);\n return [3\n /*break*/\n , 7];\n\n case 7:\n info = {\n id: credentials ? credentials.identityId : undefined,\n username: user.getUsername(),\n attributes: userAttrs\n };\n return [2\n /*return*/\n , info];\n\n case 8:\n err_1 = _a.sent();\n logger.debug('currentUserInfo error', err_1);\n return [2\n /*return*/\n , {}];\n\n case 9:\n if (source === 'federated') {\n user = this.user;\n return [2\n /*return*/\n , user ? user : {}];\n }\n\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n AuthClass.prototype.federatedSignIn = function (providerOrOptions, response, user) {\n return __awaiter(this, void 0, void 0, function () {\n var options, provider, customState, client_id, redirect_uri, provider, loggedInUser, token, identity_id, expires_at, credentials, currentUser;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this._config.identityPoolId && !this._config.userPoolId) {\n throw new Error(\"Federation requires either a User Pool or Identity Pool in config\");\n } // Ensure backwards compatability\n\n\n if (typeof providerOrOptions === 'undefined') {\n if (this._config.identityPoolId && !this._config.userPoolId) {\n throw new Error(\"Federation with Identity Pools requires tokens passed as arguments\");\n }\n }\n\n if (!(isFederatedSignInOptions(providerOrOptions) || isFederatedSignInOptionsCustom(providerOrOptions) || typeof providerOrOptions === 'undefined')) return [3\n /*break*/\n , 1];\n options = providerOrOptions || {\n provider: CognitoHostedUIIdentityProvider.Cognito\n };\n provider = isFederatedSignInOptions(options) ? options.provider : options.customProvider;\n customState = isFederatedSignInOptions(options) ? options.customState : options.customState;\n\n if (this._config.userPoolId) {\n client_id = isCognitoHostedOpts(this._config.oauth) ? this._config.userPoolWebClientId : this._config.oauth.clientID;\n redirect_uri = isCognitoHostedOpts(this._config.oauth) ? this._config.oauth.redirectSignIn : this._config.oauth.redirectUri;\n\n this._oAuthHandler.oauthSignIn(this._config.oauth.responseType, this._config.oauth.domain, redirect_uri, client_id, provider, customState);\n }\n\n return [3\n /*break*/\n , 4];\n\n case 1:\n provider = providerOrOptions; // To check if the user is already logged in\n\n try {\n loggedInUser = JSON.stringify(JSON.parse(this._storage.getItem('aws-amplify-federatedInfo')).user);\n\n if (loggedInUser) {\n logger.warn(\"There is already a signed in user: \" + loggedInUser + \" in your app.\\n\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\t\\tYou should not call Auth.federatedSignIn method again as it may cause unexpected behavior.\");\n }\n } catch (e) {}\n\n token = response.token, identity_id = response.identity_id, expires_at = response.expires_at;\n return [4\n /*yield*/\n , Credentials.set({\n provider: provider,\n token: token,\n identity_id: identity_id,\n user: user,\n expires_at: expires_at\n }, 'federation')];\n\n case 2:\n credentials = _a.sent();\n return [4\n /*yield*/\n , this.currentAuthenticatedUser()];\n\n case 3:\n currentUser = _a.sent();\n dispatchAuthEvent('signIn', currentUser, \"A user \" + currentUser.username + \" has been signed in\");\n logger.debug('federated sign in credentials', credentials);\n return [2\n /*return*/\n , credentials];\n\n case 4:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\n * Used to complete the OAuth flow with or without the Cognito Hosted UI\n * @param {String} URL - optional parameter for customers to pass in the response URL\n */\n\n\n AuthClass.prototype._handleAuthResponse = function (URL) {\n return __awaiter(this, void 0, void 0, function () {\n var currentUrl, hasCodeOrError, hasTokenOrError, _a, accessToken, idToken, refreshToken, state, session, credentials, isCustomStateIncluded, currentUser, _b, customState, err_2;\n\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n if (!this._config.userPoolId) {\n throw new Error(\"OAuth responses require a User Pool defined in config\");\n }\n\n dispatchAuthEvent('parsingCallbackUrl', {\n url: URL\n }, \"The callback url is being parsed\");\n currentUrl = URL || (JS.browserOrNode().isBrowser ? window.location.href : '');\n hasCodeOrError = !!(parse(currentUrl).query || '').split('&').map(function (entry) {\n return entry.split('=');\n }).find(function (_a) {\n var k = _a[0];\n return k === 'code' || k === 'error';\n });\n hasTokenOrError = !!(parse(currentUrl).hash || '#').substr(1).split('&').map(function (entry) {\n return entry.split('=');\n }).find(function (_a) {\n var k = _a[0];\n return k === 'access_token' || k === 'error';\n });\n if (!(hasCodeOrError || hasTokenOrError)) return [3\n /*break*/\n , 6];\n _c.label = 1;\n\n case 1:\n _c.trys.push([1, 5,, 6]);\n\n return [4\n /*yield*/\n , this._oAuthHandler.handleAuthResponse(currentUrl)];\n\n case 2:\n _a = _c.sent(), accessToken = _a.accessToken, idToken = _a.idToken, refreshToken = _a.refreshToken, state = _a.state;\n session = new CognitoUserSession({\n IdToken: new CognitoIdToken({\n IdToken: idToken\n }),\n RefreshToken: new CognitoRefreshToken({\n RefreshToken: refreshToken\n }),\n AccessToken: new CognitoAccessToken({\n AccessToken: accessToken\n })\n });\n credentials = void 0;\n if (!this._config.identityPoolId) return [3\n /*break*/\n , 4];\n return [4\n /*yield*/\n , Credentials.set(session, 'session')];\n\n case 3:\n credentials = _c.sent();\n logger.debug('AWS credentials', credentials);\n _c.label = 4;\n\n case 4:\n isCustomStateIncluded = /-/.test(state);\n currentUser = this.createCognitoUser(session.getIdToken().decodePayload()['cognito:username']);\n dispatchAuthEvent('signIn', currentUser, \"A user \" + currentUser.getUsername() + \" has been signed in\");\n dispatchAuthEvent('cognitoHostedUI', currentUser, \"A user \" + currentUser.getUsername() + \" has been signed in via Cognito Hosted UI\");\n\n if (isCustomStateIncluded) {\n _b = state.split('-'), customState = _b[1];\n dispatchAuthEvent('customOAuthState', customState, \"State for user \" + currentUser.getUsername());\n } // This calls cacheTokens() in Cognito SDK\n\n\n currentUser.setSignInUserSession(session); //#endregion\n\n if (window && typeof window.history !== 'undefined') {\n window.history.replaceState({}, null, this._config.oauth.redirectSignIn);\n }\n\n return [2\n /*return*/\n , credentials];\n\n case 5:\n err_2 = _c.sent();\n logger.debug('Error in cognito hosted auth response', err_2);\n dispatchAuthEvent('signIn_failure', err_2, \"The OAuth response flow failed\");\n dispatchAuthEvent('cognitoHostedUI_failure', err_2, \"A failure occurred when returning to the Cognito Hosted UI\");\n dispatchAuthEvent('customState_failure', err_2, \"A failure occurred when returning state\");\n throw err_2;\n\n case 6:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\n * Compact version of credentials\n * @param {Object} credentials\n * @return {Object} - Credentials\n */\n\n\n AuthClass.prototype.essentialCredentials = function (credentials) {\n return {\n accessKeyId: credentials.accessKeyId,\n sessionToken: credentials.sessionToken,\n secretAccessKey: credentials.secretAccessKey,\n identityId: credentials.identityId,\n authenticated: credentials.authenticated\n };\n };\n\n AuthClass.prototype.attributesToObject = function (attributes) {\n var obj = {};\n\n if (attributes) {\n attributes.map(function (attribute) {\n if (attribute.Value === 'true') {\n obj[attribute.Name] = true;\n } else if (attribute.Value === 'false') {\n obj[attribute.Name] = false;\n } else {\n obj[attribute.Name] = attribute.Value;\n }\n });\n }\n\n return obj;\n };\n\n AuthClass.prototype.createCognitoUser = function (username) {\n var userData = {\n Username: username,\n Pool: this.userPool\n };\n userData.Storage = this._storage;\n var authenticationFlowType = this._config.authenticationFlowType;\n var user = new CognitoUser(userData);\n\n if (authenticationFlowType) {\n user.setAuthenticationFlowType(authenticationFlowType);\n }\n\n return user;\n };\n\n AuthClass.prototype._isValidAuthStorage = function (obj) {\n // We need to check if the obj has the functions of Storage\n return !!obj && typeof obj.getItem === 'function' && typeof obj.setItem === 'function' && typeof obj.removeItem === 'function' && typeof obj.clear === 'function';\n };\n\n AuthClass.prototype.noUserPoolErrorHandler = function (config) {\n if (config) {\n if (!config.userPoolId || !config.identityPoolId) {\n return AuthErrorTypes.MissingAuthConfig;\n }\n }\n\n return AuthErrorTypes.NoConfig;\n };\n\n AuthClass.prototype.rejectAuthError = function (type) {\n return Promise.reject(new AuthError(type));\n };\n\n AuthClass.prototype.rejectNoUserPool = function () {\n var type = this.noUserPoolErrorHandler(this._config);\n return Promise.reject(new NoUserPoolError(type));\n };\n\n return AuthClass;\n}();\n\nexport default AuthClass;","/*\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 */\nvar SELF = '_self';\nexport var launchUri = function launchUri(url) {\n var windowProxy = window.open(url, SELF);\n\n if (windowProxy) {\n return Promise.resolve(windowProxy);\n } else {\n return Promise.reject();\n }\n};","import \"core-js/modules/es.array.reduce.js\";\n\n/*\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 */\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n\nimport { parse } from 'url'; // Used for OAuth parsing of Cognito Hosted UI\n\nimport { launchUri } from './urlOpener';\nimport * as oAuthStorage from './oauthStorage';\nimport { isCognitoHostedOpts, CognitoHostedUIIdentityProvider } from '../types/Auth';\nimport { ConsoleLogger as Logger, Hub } from '@aws-amplify/core';\n\nvar SHA256 = require('crypto-js/sha256');\n\nvar Base64 = require('crypto-js/enc-base64');\n\nvar AMPLIFY_SYMBOL = typeof Symbol !== 'undefined' && typeof Symbol.for === 'function' ? Symbol.for('amplify_default') : '@@amplify_default';\n\nvar dispatchAuthEvent = function dispatchAuthEvent(event, data, message) {\n Hub.dispatch('auth', {\n event: event,\n data: data,\n message: message\n }, 'Auth', AMPLIFY_SYMBOL);\n};\n\nvar logger = new Logger('OAuth');\n\nvar OAuth =\n/** @class */\nfunction () {\n function OAuth(_a) {\n var config = _a.config,\n cognitoClientId = _a.cognitoClientId,\n _b = _a.scopes,\n scopes = _b === void 0 ? [] : _b;\n this._urlOpener = config.urlOpener || launchUri;\n this._config = config;\n this._cognitoClientId = cognitoClientId;\n this._scopes = scopes;\n }\n\n OAuth.prototype.oauthSignIn = function (responseType, domain, redirectSignIn, clientId, provider, customState) {\n if (responseType === void 0) {\n responseType = 'code';\n }\n\n if (provider === void 0) {\n provider = CognitoHostedUIIdentityProvider.Cognito;\n }\n\n var generatedState = this._generateState(32);\n\n var state = customState ? generatedState + \"-\" + customState : generatedState;\n oAuthStorage.setState(encodeURIComponent(state));\n\n var pkce_key = this._generateRandom(128);\n\n oAuthStorage.setPKCE(pkce_key);\n\n var code_challenge = this._generateChallenge(pkce_key);\n\n var code_challenge_method = 'S256';\n var queryString = Object.entries(__assign(__assign({\n redirect_uri: redirectSignIn,\n response_type: responseType,\n client_id: clientId,\n identity_provider: provider,\n scopes: this._scopes,\n state: state\n }, responseType === 'code' ? {\n code_challenge: code_challenge\n } : {}), responseType === 'code' ? {\n code_challenge_method: code_challenge_method\n } : {})).map(function (_a) {\n var k = _a[0],\n v = _a[1];\n return encodeURIComponent(k) + \"=\" + encodeURIComponent(v);\n }).join('&');\n var URL = \"https://\" + domain + \"/oauth2/authorize?\" + queryString;\n logger.debug(\"Redirecting to \" + URL);\n\n this._urlOpener(URL, redirectSignIn);\n };\n\n OAuth.prototype._handleCodeFlow = function (currentUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var code, oAuthTokenEndpoint, client_id, redirect_uri, code_verifier, oAuthTokenBody, body, _a, access_token, refresh_token, id_token, error;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n code = (parse(currentUrl).query || '').split('&').map(function (pairings) {\n return pairings.split('=');\n }).reduce(function (accum, _a) {\n var _b;\n\n var k = _a[0],\n v = _a[1];\n return __assign(__assign({}, accum), (_b = {}, _b[k] = v, _b));\n }, {\n code: undefined\n }).code;\n\n if (!code) {\n return [2\n /*return*/\n ];\n }\n\n oAuthTokenEndpoint = 'https://' + this._config.domain + '/oauth2/token';\n dispatchAuthEvent('codeFlow', {}, \"Retrieving tokens from \" + oAuthTokenEndpoint);\n client_id = isCognitoHostedOpts(this._config) ? this._cognitoClientId : this._config.clientID;\n redirect_uri = isCognitoHostedOpts(this._config) ? this._config.redirectSignIn : this._config.redirectUri;\n code_verifier = oAuthStorage.getPKCE();\n oAuthTokenBody = __assign({\n grant_type: 'authorization_code',\n code: code,\n client_id: client_id,\n redirect_uri: redirect_uri\n }, code_verifier ? {\n code_verifier: code_verifier\n } : {});\n logger.debug(\"Calling token endpoint: \" + oAuthTokenEndpoint + \" with\", oAuthTokenBody);\n body = Object.entries(oAuthTokenBody).map(function (_a) {\n var k = _a[0],\n v = _a[1];\n return encodeURIComponent(k) + \"=\" + encodeURIComponent(v);\n }).join('&');\n return [4\n /*yield*/\n , fetch(oAuthTokenEndpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded'\n },\n body: body\n })];\n\n case 1:\n return [4\n /*yield*/\n , _b.sent().json()];\n\n case 2:\n _a = _b.sent(), access_token = _a.access_token, refresh_token = _a.refresh_token, id_token = _a.id_token, error = _a.error;\n\n if (error) {\n throw new Error(error);\n }\n\n return [2\n /*return*/\n , {\n accessToken: access_token,\n refreshToken: refresh_token,\n idToken: id_token\n }];\n }\n });\n });\n };\n\n OAuth.prototype._handleImplicitFlow = function (currentUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var _a, id_token, access_token;\n\n return __generator(this, function (_b) {\n _a = parse(currentUrl).hash.substr(1) // Remove # from returned code\n .split('&').map(function (pairings) {\n return pairings.split('=');\n }).reduce(function (accum, _a) {\n var _b;\n\n var k = _a[0],\n v = _a[1];\n return __assign(__assign({}, accum), (_b = {}, _b[k] = v, _b));\n }, {\n id_token: undefined,\n access_token: undefined\n }), id_token = _a.id_token, access_token = _a.access_token;\n dispatchAuthEvent('implicitFlow', {}, \"Got tokens from \" + currentUrl);\n logger.debug(\"Retrieving implicit tokens from \" + currentUrl + \" with\");\n return [2\n /*return*/\n , {\n accessToken: access_token,\n idToken: id_token,\n refreshToken: null\n }];\n });\n });\n };\n\n OAuth.prototype.handleAuthResponse = function (currentUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var urlParams, error, error_description, state, _a, _b, e_1;\n\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _c.trys.push([0, 5,, 6]);\n\n urlParams = currentUrl ? __assign(__assign({}, (parse(currentUrl).hash || '#').substr(1).split('&').map(function (entry) {\n return entry.split('=');\n }).reduce(function (acc, _a) {\n var k = _a[0],\n v = _a[1];\n return acc[k] = v, acc;\n }, {})), (parse(currentUrl).query || '').split('&').map(function (entry) {\n return entry.split('=');\n }).reduce(function (acc, _a) {\n var k = _a[0],\n v = _a[1];\n return acc[k] = v, acc;\n }, {})) : {};\n error = urlParams.error, error_description = urlParams.error_description;\n\n if (error) {\n throw new Error(error_description);\n }\n\n state = this._validateState(urlParams);\n logger.debug(\"Starting \" + this._config.responseType + \" flow with \" + currentUrl);\n if (!(this._config.responseType === 'code')) return [3\n /*break*/\n , 2];\n _a = [{}];\n return [4\n /*yield*/\n , this._handleCodeFlow(currentUrl)];\n\n case 1:\n return [2\n /*return*/\n , __assign.apply(void 0, [__assign.apply(void 0, _a.concat([_c.sent()])), {\n state: state\n }])];\n\n case 2:\n _b = [{}];\n return [4\n /*yield*/\n , this._handleImplicitFlow(currentUrl)];\n\n case 3:\n return [2\n /*return*/\n , __assign.apply(void 0, [__assign.apply(void 0, _b.concat([_c.sent()])), {\n state: state\n }])];\n\n case 4:\n return [3\n /*break*/\n , 6];\n\n case 5:\n e_1 = _c.sent();\n logger.error(\"Error handling auth response.\", e_1);\n return [3\n /*break*/\n , 6];\n\n case 6:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n\n OAuth.prototype._validateState = function (urlParams) {\n if (!urlParams) {\n return;\n }\n\n var savedState = oAuthStorage.getState();\n var returnedState = urlParams.state; // This is because savedState only exists if the flow was initiated by Amplify\n\n if (savedState && savedState !== returnedState) {\n throw new Error('Invalid state in OAuth flow');\n }\n\n return returnedState;\n };\n\n OAuth.prototype.signOut = function () {\n return __awaiter(this, void 0, void 0, function () {\n var oAuthLogoutEndpoint, client_id, signout_uri;\n return __generator(this, function (_a) {\n oAuthLogoutEndpoint = 'https://' + this._config.domain + '/logout?';\n client_id = isCognitoHostedOpts(this._config) ? this._cognitoClientId : this._config.oauth.clientID;\n signout_uri = isCognitoHostedOpts(this._config) ? this._config.redirectSignOut : this._config.returnTo;\n oAuthLogoutEndpoint += Object.entries({\n client_id: client_id,\n logout_uri: encodeURIComponent(signout_uri)\n }).map(function (_a) {\n var k = _a[0],\n v = _a[1];\n return k + \"=\" + v;\n }).join('&');\n dispatchAuthEvent('oAuthSignOut', {\n oAuth: 'signOut'\n }, \"Signing out from \" + oAuthLogoutEndpoint);\n logger.debug(\"Signing out from \" + oAuthLogoutEndpoint);\n return [2\n /*return*/\n , this._urlOpener(oAuthLogoutEndpoint)];\n });\n });\n };\n\n OAuth.prototype._generateState = function (length) {\n var result = '';\n var i = length;\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n for (; i > 0; --i) {\n result += chars[Math.round(Math.random() * (chars.length - 1))];\n }\n\n return result;\n };\n\n OAuth.prototype._generateChallenge = function (code) {\n return this._base64URL(SHA256(code));\n };\n\n OAuth.prototype._base64URL = function (string) {\n return string.toString(Base64).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n };\n\n OAuth.prototype._generateRandom = function (size) {\n var CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~';\n var buffer = new Uint8Array(size);\n\n if (typeof window !== 'undefined' && !!window.crypto) {\n window.crypto.getRandomValues(buffer);\n } else {\n for (var i = 0; i < size; i += 1) {\n buffer[i] = Math.random() * CHARSET.length | 0;\n }\n }\n\n return this._bufferToString(buffer);\n };\n\n OAuth.prototype._bufferToString = function (buffer) {\n var CHARSET = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n var state = [];\n\n for (var i = 0; i < buffer.byteLength; i += 1) {\n var index = buffer[i] % CHARSET.length;\n state.push(CHARSET[index]);\n }\n\n return state.join('');\n };\n\n return OAuth;\n}();\n\nexport default OAuth;","/*\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 */\nexport var setState = function setState(state) {\n window.sessionStorage.setItem('oauth_state', state);\n};\nexport var getState = function getState() {\n var oauth_state = window.sessionStorage.getItem('oauth_state');\n window.sessionStorage.removeItem('oauth_state');\n return oauth_state;\n};\nexport var setPKCE = function setPKCE(private_key) {\n window.sessionStorage.setItem('ouath_pkce_key', private_key);\n};\nexport var getPKCE = function getPKCE() {\n var ouath_pkce_key = window.sessionStorage.getItem('ouath_pkce_key');\n window.sessionStorage.removeItem('ouath_pkce_key');\n return ouath_pkce_key;\n};\nexport var clearAll = function clearAll() {\n window.sessionStorage.removeItem('ouath_pkce_key');\n window.sessionStorage.removeItem('oauth_state');\n};","/*\n * Copyright 2017-2019 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 */\nimport { JS } from '@aws-amplify/core';\nexport default (function (callback) {\n if (JS.browserOrNode().isBrowser && window.location) {\n var url = window.location.href;\n callback({\n url: url\n });\n } else if (JS.browserOrNode().isNode) {\n // continue building on ssr\n (function () {}); // noop\n\n } else {\n throw new Error('Not supported');\n }\n});","/*\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 */\nimport AuthClass, { CognitoHostedUIIdentityProvider } from './Auth';\nimport { CognitoUser, CookieStorage } from 'amazon-cognito-identity-js';\nimport Amplify, { ConsoleLogger as Logger } from '@aws-amplify/core';\nvar logger = new Logger('Auth');\nvar _instance = null;\n\nif (!_instance) {\n logger.debug('Create Auth Instance');\n _instance = new AuthClass(null);\n}\n\nvar Auth = _instance;\nAmplify.register(Auth);\nexport default Auth;\nexport { AuthClass, CognitoUser, CookieStorage, CognitoHostedUIIdentityProvider };","var util = require('../util');\n\nvar XmlNode = require('./xml-node').XmlNode;\n\nvar XmlText = require('./xml-text').XmlText;\n\nfunction XmlBuilder() {}\n\nXmlBuilder.prototype.toXML = function (params, shape, rootElement, noEmpty) {\n var xml = new XmlNode(rootElement);\n applyNamespaces(xml, shape, true);\n serialize(xml, params, shape);\n return xml.children.length > 0 || noEmpty ? xml.toString() : '';\n};\n\nfunction serialize(xml, value, shape) {\n switch (shape.type) {\n case 'structure':\n return serializeStructure(xml, value, shape);\n\n case 'map':\n return serializeMap(xml, value, shape);\n\n case 'list':\n return serializeList(xml, value, shape);\n\n default:\n return serializeScalar(xml, value, shape);\n }\n}\n\nfunction serializeStructure(xml, params, shape) {\n util.arrayEach(shape.memberNames, function (memberName) {\n var memberShape = shape.members[memberName];\n if (memberShape.location !== 'body') return;\n var value = params[memberName];\n var name = memberShape.name;\n\n if (value !== undefined && value !== null) {\n if (memberShape.isXmlAttribute) {\n xml.addAttribute(name, value);\n } else if (memberShape.flattened) {\n serialize(xml, value, memberShape);\n } else {\n var element = new XmlNode(name);\n xml.addChildNode(element);\n applyNamespaces(element, memberShape);\n serialize(element, value, memberShape);\n }\n }\n });\n}\n\nfunction serializeMap(xml, map, shape) {\n var xmlKey = shape.key.name || 'key';\n var xmlValue = shape.value.name || 'value';\n util.each(map, function (key, value) {\n var entry = new XmlNode(shape.flattened ? shape.name : 'entry');\n xml.addChildNode(entry);\n var entryKey = new XmlNode(xmlKey);\n var entryValue = new XmlNode(xmlValue);\n entry.addChildNode(entryKey);\n entry.addChildNode(entryValue);\n serialize(entryKey, key, shape.key);\n serialize(entryValue, value, shape.value);\n });\n}\n\nfunction serializeList(xml, list, shape) {\n if (shape.flattened) {\n util.arrayEach(list, function (value) {\n var name = shape.member.name || shape.name;\n var element = new XmlNode(name);\n xml.addChildNode(element);\n serialize(element, value, shape.member);\n });\n } else {\n util.arrayEach(list, function (value) {\n var name = shape.member.name || 'member';\n var element = new XmlNode(name);\n xml.addChildNode(element);\n serialize(element, value, shape.member);\n });\n }\n}\n\nfunction serializeScalar(xml, value, shape) {\n xml.addChildNode(new XmlText(shape.toWireFormat(value)));\n}\n\nfunction applyNamespaces(xml, shape, isRoot) {\n var uri,\n prefix = 'xmlns';\n\n if (shape.xmlNamespaceUri) {\n uri = shape.xmlNamespaceUri;\n if (shape.xmlNamespacePrefix) prefix += ':' + shape.xmlNamespacePrefix;\n } else if (isRoot && shape.api.xmlNamespaceUri) {\n uri = shape.api.xmlNamespaceUri;\n }\n\n if (uri) xml.addAttribute(prefix, uri);\n}\n/**\n * @api private\n */\n\n\nmodule.exports = XmlBuilder;","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n/**\n * @api private\n */\n\nAWS.Signers.S3 = inherit(AWS.Signers.RequestSigner, {\n /**\n * When building the stringToSign, these sub resource params should be\n * part of the canonical resource string with their NON-decoded values\n */\n subResources: {\n 'acl': 1,\n 'accelerate': 1,\n 'analytics': 1,\n 'cors': 1,\n 'lifecycle': 1,\n 'delete': 1,\n 'inventory': 1,\n 'location': 1,\n 'logging': 1,\n 'metrics': 1,\n 'notification': 1,\n 'partNumber': 1,\n 'policy': 1,\n 'requestPayment': 1,\n 'replication': 1,\n 'restore': 1,\n 'tagging': 1,\n 'torrent': 1,\n 'uploadId': 1,\n 'uploads': 1,\n 'versionId': 1,\n 'versioning': 1,\n 'versions': 1,\n 'website': 1\n },\n // when building the stringToSign, these querystring params should be\n // part of the canonical resource string with their NON-encoded values\n responseHeaders: {\n 'response-content-type': 1,\n 'response-content-language': 1,\n 'response-expires': 1,\n 'response-cache-control': 1,\n 'response-content-disposition': 1,\n 'response-content-encoding': 1\n },\n addAuthorization: function addAuthorization(credentials, date) {\n if (!this.request.headers['presigned-expires']) {\n this.request.headers['X-Amz-Date'] = AWS.util.date.rfc822(date);\n }\n\n if (credentials.sessionToken) {\n // presigned URLs require this header to be lowercased\n this.request.headers['x-amz-security-token'] = credentials.sessionToken;\n }\n\n var signature = this.sign(credentials.secretAccessKey, this.stringToSign());\n var auth = 'AWS ' + credentials.accessKeyId + ':' + signature;\n this.request.headers['Authorization'] = auth;\n },\n stringToSign: function stringToSign() {\n var r = this.request;\n var parts = [];\n parts.push(r.method);\n parts.push(r.headers['Content-MD5'] || '');\n parts.push(r.headers['Content-Type'] || ''); // This is the \"Date\" header, but we use X-Amz-Date.\n // The S3 signing mechanism requires us to pass an empty\n // string for this Date header regardless.\n\n parts.push(r.headers['presigned-expires'] || '');\n var headers = this.canonicalizedAmzHeaders();\n if (headers) parts.push(headers);\n parts.push(this.canonicalizedResource());\n return parts.join('\\n');\n },\n canonicalizedAmzHeaders: function canonicalizedAmzHeaders() {\n var amzHeaders = [];\n AWS.util.each(this.request.headers, function (name) {\n if (name.match(/^x-amz-/i)) amzHeaders.push(name);\n });\n amzHeaders.sort(function (a, b) {\n return a.toLowerCase() < b.toLowerCase() ? -1 : 1;\n });\n var parts = [];\n AWS.util.arrayEach.call(this, amzHeaders, function (name) {\n parts.push(name.toLowerCase() + ':' + String(this.request.headers[name]));\n });\n return parts.join('\\n');\n },\n canonicalizedResource: function canonicalizedResource() {\n var r = this.request;\n var parts = r.path.split('?');\n var path = parts[0];\n var querystring = parts[1];\n var resource = '';\n if (r.virtualHostedBucket) resource += '/' + r.virtualHostedBucket;\n resource += path;\n\n if (querystring) {\n // collect a list of sub resources and query params that need to be signed\n var resources = [];\n AWS.util.arrayEach.call(this, querystring.split('&'), function (param) {\n var name = param.split('=')[0];\n var value = param.split('=')[1];\n\n if (this.subResources[name] || this.responseHeaders[name]) {\n var subresource = {\n name: name\n };\n\n if (value !== undefined) {\n if (this.subResources[name]) {\n subresource.value = value;\n } else {\n subresource.value = decodeURIComponent(value);\n }\n }\n\n resources.push(subresource);\n }\n });\n resources.sort(function (a, b) {\n return a.name < b.name ? -1 : 1;\n });\n\n if (resources.length) {\n querystring = [];\n AWS.util.arrayEach(resources, function (res) {\n if (res.value === undefined) {\n querystring.push(res.name);\n } else {\n querystring.push(res.name + '=' + res.value);\n }\n });\n resource += '?' + querystring.join('&');\n }\n }\n\n return resource;\n },\n sign: function sign(secret, string) {\n return AWS.util.crypto.hmac(secret, string, 'base64', 'sha1');\n }\n});\n/**\n * @api private\n */\n\nmodule.exports = AWS.Signers.S3;","require(\"core-js/modules/es.string.trim-start.js\");\n\n(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 } // Check if they are the same type.\n\n\n var firstType = Object.prototype.toString.call(first);\n\n if (firstType !== Object.prototype.toString.call(second)) {\n return false;\n } // We know that first and second have the same type so we can just check the\n // first type from now on.\n\n\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\n for (var i = 0; i < first.length; i++) {\n if (strictDeepEqual(first[i], second[i]) === false) {\n return false;\n }\n }\n\n return true;\n }\n\n if (isObject(first) === true) {\n // An object is equal if it has the same key/value pairs.\n var keysSeen = {};\n\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\n keysSeen[key] = true;\n }\n } // Now check that there aren't any keys in second that weren't\n // in first.\n\n\n for (var key2 in second) {\n if (hasOwnProperty.call(second, key2)) {\n if (keysSeen[key2] !== true) {\n return false;\n }\n }\n }\n\n return true;\n }\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 // 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\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\n for (var i = 0; i < keys.length; i++) {\n values.push(obj[keys[i]]);\n }\n\n return values;\n }\n\n function merge(a, b) {\n var merged = {};\n\n for (var key in a) {\n merged[key] = a[key];\n }\n\n for (var key2 in b) {\n merged[key2] = b[key2];\n }\n\n return merged;\n }\n\n var trimLeft;\n\n if (typeof String.prototype.trimLeft === \"function\") {\n trimLeft = function trimLeft(str) {\n return str.trimLeft();\n };\n } else {\n trimLeft = function trimLeft(str) {\n return str.match(/^\\s*(.*)/)[1];\n };\n } // Type constants used to define functions.\n\n\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 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\"; // 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 var operatorStartToken = {\n \"<\": true,\n \">\": true,\n \"=\": true,\n \"!\": true\n };\n var skipChars = {\n \" \": true,\n \"\\t\": true,\n \"\\n\": true\n };\n\n function isAlpha(ch) {\n return ch >= \"a\" && ch <= \"z\" || ch >= \"A\" && ch <= \"Z\" || ch === \"_\";\n }\n\n function isNum(ch) {\n return ch >= \"0\" && ch <= \"9\" || ch === \"-\";\n }\n\n function isAlphaNum(ch) {\n return ch >= \"a\" && ch <= \"z\" || ch >= \"A\" && ch <= \"Z\" || ch >= \"0\" && ch <= \"9\" || ch === \"_\";\n }\n\n function Lexer() {}\n\n Lexer.prototype = {\n tokenize: function tokenize(stream) {\n var tokens = [];\n this._current = 0;\n var start;\n var identifier;\n var token;\n\n while (this._current < stream.length) {\n if (isAlpha(stream[this._current])) {\n start = this._current;\n identifier = this._consumeUnquotedIdentifier(stream);\n tokens.push({\n type: TOK_UNQUOTEDIDENTIFIER,\n value: identifier,\n start: start\n });\n } else if (basicTokens[stream[this._current]] !== undefined) {\n tokens.push({\n type: basicTokens[stream[this._current]],\n value: stream[this._current],\n start: this._current\n });\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({\n type: TOK_QUOTEDIDENTIFIER,\n value: identifier,\n start: start\n });\n } else if (stream[this._current] === \"'\") {\n start = this._current;\n identifier = this._consumeRawStringLiteral(stream);\n tokens.push({\n type: TOK_LITERAL,\n value: identifier,\n start: start\n });\n } else if (stream[this._current] === \"`\") {\n start = this._current;\n\n var literal = this._consumeLiteral(stream);\n\n tokens.push({\n type: TOK_LITERAL,\n value: literal,\n start: start\n });\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\n if (stream[this._current] === \"&\") {\n this._current++;\n tokens.push({\n type: TOK_AND,\n value: \"&&\",\n start: start\n });\n } else {\n tokens.push({\n type: TOK_EXPREF,\n value: \"&\",\n start: start\n });\n }\n } else if (stream[this._current] === \"|\") {\n start = this._current;\n this._current++;\n\n if (stream[this._current] === \"|\") {\n this._current++;\n tokens.push({\n type: TOK_OR,\n value: \"||\",\n start: start\n });\n } else {\n tokens.push({\n type: TOK_PIPE,\n value: \"|\",\n start: start\n });\n }\n } else {\n var error = new Error(\"Unknown character:\" + stream[this._current]);\n error.name = \"LexerError\";\n throw error;\n }\n }\n\n return tokens;\n },\n _consumeUnquotedIdentifier: function _consumeUnquotedIdentifier(stream) {\n var start = this._current;\n this._current++;\n\n while (this._current < stream.length && isAlphaNum(stream[this._current])) {\n this._current++;\n }\n\n return stream.slice(start, this._current);\n },\n _consumeQuotedIdentifier: function _consumeQuotedIdentifier(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n\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\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" || stream[current + 1] === \"\\\"\")) {\n current += 2;\n } else {\n current++;\n }\n\n this._current = current;\n }\n\n this._current++;\n return JSON.parse(stream.slice(start, this._current));\n },\n _consumeRawStringLiteral: function _consumeRawStringLiteral(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n\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\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" || stream[current + 1] === \"'\")) {\n current += 2;\n } else {\n current++;\n }\n\n this._current = current;\n }\n\n this._current++;\n var literal = stream.slice(start + 1, this._current - 1);\n return literal.replace(\"\\\\'\", \"'\");\n },\n _consumeNumber: function _consumeNumber(stream) {\n var start = this._current;\n this._current++;\n var maxLength = stream.length;\n\n while (isNum(stream[this._current]) && this._current < maxLength) {\n this._current++;\n }\n\n var value = parseInt(stream.slice(start, this._current));\n return {\n type: TOK_NUMBER,\n value: value,\n start: start\n };\n },\n _consumeLBracket: function _consumeLBracket(stream) {\n var start = this._current;\n this._current++;\n\n if (stream[this._current] === \"?\") {\n this._current++;\n return {\n type: TOK_FILTER,\n value: \"[?\",\n start: start\n };\n } else if (stream[this._current] === \"]\") {\n this._current++;\n return {\n type: TOK_FLATTEN,\n value: \"[]\",\n start: start\n };\n } else {\n return {\n type: TOK_LBRACKET,\n value: \"[\",\n start: start\n };\n }\n },\n _consumeOperator: function _consumeOperator(stream) {\n var start = this._current;\n var startingChar = stream[start];\n this._current++;\n\n if (startingChar === \"!\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {\n type: TOK_NE,\n value: \"!=\",\n start: start\n };\n } else {\n return {\n type: TOK_NOT,\n value: \"!\",\n start: start\n };\n }\n } else if (startingChar === \"<\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {\n type: TOK_LTE,\n value: \"<=\",\n start: start\n };\n } else {\n return {\n type: TOK_LT,\n value: \"<\",\n start: start\n };\n }\n } else if (startingChar === \">\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {\n type: TOK_GTE,\n value: \">=\",\n start: start\n };\n } else {\n return {\n type: TOK_GT,\n value: \">\",\n start: start\n };\n }\n } else if (startingChar === \"=\") {\n if (stream[this._current] === \"=\") {\n this._current++;\n return {\n type: TOK_EQ,\n value: \"==\",\n start: start\n };\n }\n }\n },\n _consumeLiteral: function _consumeLiteral(stream) {\n this._current++;\n var start = this._current;\n var maxLength = stream.length;\n var literal;\n\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\n if (stream[current] === \"\\\\\" && (stream[current + 1] === \"\\\\\" || stream[current + 1] === \"`\")) {\n current += 2;\n } else {\n current++;\n }\n\n this._current = current;\n }\n\n var literalString = trimLeft(stream.slice(start, this._current));\n literalString = literalString.replace(\"\\\\`\", \"`\");\n\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 } // +1 gets us to the ending \"`\", +1 to move on to the next char.\n\n\n this._current++;\n return literal;\n },\n _looksLikeJSON: function _looksLikeJSON(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 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 Parser.prototype = {\n parse: function parse(expression) {\n this._loadTokens(expression);\n\n this.index = 0;\n var ast = this.expression(0);\n\n if (this._lookahead(0) !== TOK_EOF) {\n var t = this._lookaheadToken(0);\n\n var error = new Error(\"Unexpected token type: \" + t.type + \", value: \" + t.value);\n error.name = \"ParserError\";\n throw error;\n }\n\n return ast;\n },\n _loadTokens: function _loadTokens(expression) {\n var lexer = new Lexer();\n var tokens = lexer.tokenize(expression);\n tokens.push({\n type: TOK_EOF,\n value: \"\",\n start: expression.length\n });\n this.tokens = tokens;\n },\n expression: function expression(rbp) {\n var leftToken = this._lookaheadToken(0);\n\n this._advance();\n\n var left = this.nud(leftToken);\n\n var currentToken = this._lookahead(0);\n\n while (rbp < bindingPower[currentToken]) {\n this._advance();\n\n left = this.led(currentToken, left);\n currentToken = this._lookahead(0);\n }\n\n return left;\n },\n _lookahead: function _lookahead(number) {\n return this.tokens[this.index + number].type;\n },\n _lookaheadToken: function _lookaheadToken(number) {\n return this.tokens[this.index + number];\n },\n _advance: function _advance() {\n this.index++;\n },\n nud: function nud(token) {\n var left;\n var right;\n var expression;\n\n switch (token.type) {\n case TOK_LITERAL:\n return {\n type: \"Literal\",\n value: token.value\n };\n\n case TOK_UNQUOTEDIDENTIFIER:\n return {\n type: \"Field\",\n name: token.value\n };\n\n case TOK_QUOTEDIDENTIFIER:\n var node = {\n type: \"Field\",\n name: token.value\n };\n\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\n break;\n\n case TOK_NOT:\n right = this.expression(bindingPower.Not);\n return {\n type: \"NotExpression\",\n children: [right]\n };\n\n case TOK_STAR:\n left = {\n type: \"Identity\"\n };\n right = null;\n\n if (this._lookahead(0) === TOK_RBRACKET) {\n // This can happen in a multiselect,\n // [a, b, *]\n right = {\n type: \"Identity\"\n };\n } else {\n right = this._parseProjectionRHS(bindingPower.Star);\n }\n\n return {\n type: \"ValueProjection\",\n children: [left, right]\n };\n\n case TOK_FILTER:\n return this.led(token.type, {\n type: \"Identity\"\n });\n\n case TOK_LBRACE:\n return this._parseMultiselectHash();\n\n case TOK_FLATTEN:\n left = {\n type: TOK_FLATTEN,\n children: [{\n type: \"Identity\"\n }]\n };\n right = this._parseProjectionRHS(bindingPower.Flatten);\n return {\n type: \"Projection\",\n children: [left, right]\n };\n\n case TOK_LBRACKET:\n if (this._lookahead(0) === TOK_NUMBER || this._lookahead(0) === TOK_COLON) {\n right = this._parseIndexExpression();\n return this._projectIfSlice({\n type: \"Identity\"\n }, right);\n } else if (this._lookahead(0) === TOK_STAR && this._lookahead(1) === TOK_RBRACKET) {\n this._advance();\n\n this._advance();\n\n right = this._parseProjectionRHS(bindingPower.Star);\n return {\n type: \"Projection\",\n children: [{\n type: \"Identity\"\n }, right]\n };\n } else {\n return this._parseMultiselectList();\n }\n\n break;\n\n case TOK_CURRENT:\n return {\n type: TOK_CURRENT\n };\n\n case TOK_EXPREF:\n expression = this.expression(bindingPower.Expref);\n return {\n type: \"ExpressionReference\",\n children: [expression]\n };\n\n case TOK_LPAREN:\n var args = [];\n\n while (this._lookahead(0) !== TOK_RPAREN) {\n if (this._lookahead(0) === TOK_CURRENT) {\n expression = {\n type: TOK_CURRENT\n };\n\n this._advance();\n } else {\n expression = this.expression(0);\n }\n\n args.push(expression);\n }\n\n this._match(TOK_RPAREN);\n\n return args[0];\n\n default:\n this._errorToken(token);\n\n }\n },\n led: function led(tokenName, left) {\n var right;\n\n switch (tokenName) {\n case TOK_DOT:\n var rbp = bindingPower.Dot;\n\n if (this._lookahead(0) !== TOK_STAR) {\n right = this._parseDotRHS(rbp);\n return {\n type: \"Subexpression\",\n children: [left, right]\n };\n } else {\n // Creating a projection.\n this._advance();\n\n right = this._parseProjectionRHS(rbp);\n return {\n type: \"ValueProjection\",\n children: [left, right]\n };\n }\n\n break;\n\n case TOK_PIPE:\n right = this.expression(bindingPower.Pipe);\n return {\n type: TOK_PIPE,\n children: [left, right]\n };\n\n case TOK_OR:\n right = this.expression(bindingPower.Or);\n return {\n type: \"OrExpression\",\n children: [left, right]\n };\n\n case TOK_AND:\n right = this.expression(bindingPower.And);\n return {\n type: \"AndExpression\",\n children: [left, right]\n };\n\n case TOK_LPAREN:\n var name = left.name;\n var args = [];\n var expression, node;\n\n while (this._lookahead(0) !== TOK_RPAREN) {\n if (this._lookahead(0) === TOK_CURRENT) {\n expression = {\n type: TOK_CURRENT\n };\n\n this._advance();\n } else {\n expression = this.expression(0);\n }\n\n if (this._lookahead(0) === TOK_COMMA) {\n this._match(TOK_COMMA);\n }\n\n args.push(expression);\n }\n\n this._match(TOK_RPAREN);\n\n node = {\n type: \"Function\",\n name: name,\n children: args\n };\n return node;\n\n case TOK_FILTER:\n var condition = this.expression(0);\n\n this._match(TOK_RBRACKET);\n\n if (this._lookahead(0) === TOK_FLATTEN) {\n right = {\n type: \"Identity\"\n };\n } else {\n right = this._parseProjectionRHS(bindingPower.Filter);\n }\n\n return {\n type: \"FilterProjection\",\n children: [left, right, condition]\n };\n\n case TOK_FLATTEN:\n var leftNode = {\n type: TOK_FLATTEN,\n children: [left]\n };\n\n var rightNode = this._parseProjectionRHS(bindingPower.Flatten);\n\n return {\n type: \"Projection\",\n children: [leftNode, rightNode]\n };\n\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\n case TOK_LBRACKET:\n var token = this._lookaheadToken(0);\n\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\n this._match(TOK_RBRACKET);\n\n right = this._parseProjectionRHS(bindingPower.Star);\n return {\n type: \"Projection\",\n children: [left, right]\n };\n }\n\n break;\n\n default:\n this._errorToken(this._lookaheadToken(0));\n\n }\n },\n _match: function _match(tokenType) {\n if (this._lookahead(0) === tokenType) {\n this._advance();\n } else {\n var t = this._lookaheadToken(0);\n\n var error = new Error(\"Expected \" + tokenType + \", got: \" + t.type);\n error.name = \"ParserError\";\n throw error;\n }\n },\n _errorToken: function _errorToken(token) {\n var error = new Error(\"Invalid token (\" + token.type + \"): \\\"\" + token.value + \"\\\"\");\n error.name = \"ParserError\";\n throw error;\n },\n _parseIndexExpression: function _parseIndexExpression() {\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 };\n\n this._advance();\n\n this._match(TOK_RBRACKET);\n\n return node;\n }\n },\n _projectIfSlice: function _projectIfSlice(left, right) {\n var indexExpr = {\n type: \"IndexExpression\",\n children: [left, right]\n };\n\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 _parseSliceExpression: function _parseSliceExpression() {\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\n var currentToken = this._lookahead(0);\n\n while (currentToken !== TOK_RBRACKET && index < 3) {\n if (currentToken === TOK_COLON) {\n index++;\n\n this._advance();\n } else if (currentToken === TOK_NUMBER) {\n parts[index] = this._lookaheadToken(0).value;\n\n this._advance();\n } else {\n var t = this._lookahead(0);\n\n var error = new Error(\"Syntax error, unexpected token: \" + t.value + \"(\" + t.type + \")\");\n error.name = \"Parsererror\";\n throw error;\n }\n\n currentToken = this._lookahead(0);\n }\n\n this._match(TOK_RBRACKET);\n\n return {\n type: \"Slice\",\n children: parts\n };\n },\n _parseComparator: function _parseComparator(left, comparator) {\n var right = this.expression(bindingPower[comparator]);\n return {\n type: \"Comparator\",\n name: comparator,\n children: [left, right]\n };\n },\n _parseDotRHS: function _parseDotRHS(rbp) {\n var lookahead = this._lookahead(0);\n\n var exprTokens = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER, TOK_STAR];\n\n if (exprTokens.indexOf(lookahead) >= 0) {\n return this.expression(rbp);\n } else if (lookahead === TOK_LBRACKET) {\n this._match(TOK_LBRACKET);\n\n return this._parseMultiselectList();\n } else if (lookahead === TOK_LBRACE) {\n this._match(TOK_LBRACE);\n\n return this._parseMultiselectHash();\n }\n },\n _parseProjectionRHS: function _parseProjectionRHS(rbp) {\n var right;\n\n if (bindingPower[this._lookahead(0)] < 10) {\n right = {\n type: \"Identity\"\n };\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\n right = this._parseDotRHS(rbp);\n } else {\n var t = this._lookaheadToken(0);\n\n var error = new Error(\"Sytanx error, unexpected token: \" + t.value + \"(\" + t.type + \")\");\n error.name = \"ParserError\";\n throw error;\n }\n\n return right;\n },\n _parseMultiselectList: function _parseMultiselectList() {\n var expressions = [];\n\n while (this._lookahead(0) !== TOK_RBRACKET) {\n var expression = this.expression(0);\n expressions.push(expression);\n\n if (this._lookahead(0) === TOK_COMMA) {\n this._match(TOK_COMMA);\n\n if (this._lookahead(0) === TOK_RBRACKET) {\n throw new Error(\"Unexpected token Rbracket\");\n }\n }\n }\n\n this._match(TOK_RBRACKET);\n\n return {\n type: \"MultiSelectList\",\n children: expressions\n };\n },\n _parseMultiselectHash: function _parseMultiselectHash() {\n var pairs = [];\n var identifierTypes = [TOK_UNQUOTEDIDENTIFIER, TOK_QUOTEDIDENTIFIER];\n var keyToken, keyName, value, node;\n\n for (;;) {\n keyToken = this._lookaheadToken(0);\n\n if (identifierTypes.indexOf(keyToken.type) < 0) {\n throw new Error(\"Expecting an identifier token, got: \" + keyToken.type);\n }\n\n keyName = keyToken.value;\n\n this._advance();\n\n this._match(TOK_COLON);\n\n value = this.expression(0);\n node = {\n type: \"KeyValuePair\",\n name: keyName,\n value: value\n };\n pairs.push(node);\n\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\n break;\n }\n }\n\n return {\n type: \"MultiSelectHash\",\n children: pairs\n };\n }\n };\n\n function TreeInterpreter(runtime) {\n this.runtime = runtime;\n }\n\n TreeInterpreter.prototype = {\n search: function search(node, value) {\n return this.visit(node, value);\n },\n visit: function visit(node, value) {\n var matched, current, result, first, second, field, left, right, collected, i;\n\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\n if (field === undefined) {\n return null;\n } else {\n return field;\n }\n } else {\n return null;\n }\n\n break;\n\n case \"Subexpression\":\n result = this.visit(node.children[0], value);\n\n for (i = 1; i < node.children.length; i++) {\n result = this.visit(node.children[1], result);\n\n if (result === null) {\n return null;\n }\n }\n\n return result;\n\n case \"IndexExpression\":\n left = this.visit(node.children[0], value);\n right = this.visit(node.children[1], left);\n return right;\n\n case \"Index\":\n if (!isArray(value)) {\n return null;\n }\n\n var index = node.value;\n\n if (index < 0) {\n index = value.length + index;\n }\n\n result = value[index];\n\n if (result === undefined) {\n result = null;\n }\n\n return result;\n\n case \"Slice\":\n if (!isArray(value)) {\n return null;\n }\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\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\n return result;\n\n case \"Projection\":\n // Evaluate left child.\n var base = this.visit(node.children[0], value);\n\n if (!isArray(base)) {\n return null;\n }\n\n collected = [];\n\n for (i = 0; i < base.length; i++) {\n current = this.visit(node.children[1], base[i]);\n\n if (current !== null) {\n collected.push(current);\n }\n }\n\n return collected;\n\n case \"ValueProjection\":\n // Evaluate left child.\n base = this.visit(node.children[0], value);\n\n if (!isObject(base)) {\n return null;\n }\n\n collected = [];\n var values = objValues(base);\n\n for (i = 0; i < values.length; i++) {\n current = this.visit(node.children[1], values[i]);\n\n if (current !== null) {\n collected.push(current);\n }\n }\n\n return collected;\n\n case \"FilterProjection\":\n base = this.visit(node.children[0], value);\n\n if (!isArray(base)) {\n return null;\n }\n\n var filtered = [];\n var finalResults = [];\n\n for (i = 0; i < base.length; i++) {\n matched = this.visit(node.children[2], base[i]);\n\n if (!isFalse(matched)) {\n filtered.push(base[i]);\n }\n }\n\n for (var j = 0; j < filtered.length; j++) {\n current = this.visit(node.children[1], filtered[j]);\n\n if (current !== null) {\n finalResults.push(current);\n }\n }\n\n return finalResults;\n\n case \"Comparator\":\n first = this.visit(node.children[0], value);\n second = this.visit(node.children[1], value);\n\n switch (node.name) {\n case TOK_EQ:\n result = strictDeepEqual(first, second);\n break;\n\n case TOK_NE:\n result = !strictDeepEqual(first, second);\n break;\n\n case TOK_GT:\n result = first > second;\n break;\n\n case TOK_GTE:\n result = first >= second;\n break;\n\n case TOK_LT:\n result = first < second;\n break;\n\n case TOK_LTE:\n result = first <= second;\n break;\n\n default:\n throw new Error(\"Unknown comparator: \" + node.name);\n }\n\n return result;\n\n case TOK_FLATTEN:\n var original = this.visit(node.children[0], value);\n\n if (!isArray(original)) {\n return null;\n }\n\n var merged = [];\n\n for (i = 0; i < original.length; i++) {\n current = original[i];\n\n if (isArray(current)) {\n merged.push.apply(merged, current);\n } else {\n merged.push(current);\n }\n }\n\n return merged;\n\n case \"Identity\":\n return value;\n\n case \"MultiSelectList\":\n if (value === null) {\n return null;\n }\n\n collected = [];\n\n for (i = 0; i < node.children.length; i++) {\n collected.push(this.visit(node.children[i], value));\n }\n\n return collected;\n\n case \"MultiSelectHash\":\n if (value === null) {\n return null;\n }\n\n collected = {};\n var child;\n\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\n return collected;\n\n case \"OrExpression\":\n matched = this.visit(node.children[0], value);\n\n if (isFalse(matched)) {\n matched = this.visit(node.children[1], value);\n }\n\n return matched;\n\n case \"AndExpression\":\n first = this.visit(node.children[0], value);\n\n if (isFalse(first) === true) {\n return first;\n }\n\n return this.visit(node.children[1], value);\n\n case \"NotExpression\":\n first = this.visit(node.children[0], value);\n return isFalse(first);\n\n case \"Literal\":\n return node.value;\n\n case TOK_PIPE:\n left = this.visit(node.children[0], value);\n return this.visit(node.children[1], left);\n\n case TOK_CURRENT:\n return value;\n\n case \"Function\":\n var resolvedArgs = [];\n\n for (i = 0; i < node.children.length; i++) {\n resolvedArgs.push(this.visit(node.children[i], value));\n }\n\n return this.runtime.callFunction(node.name, resolvedArgs);\n\n case \"ExpressionReference\":\n var refNode = node.children[0]; // Tag the node with a specific attribute so the type\n // checker verify the type.\n\n refNode.jmespathType = TOK_EXPREF;\n return refNode;\n\n default:\n throw new Error(\"Unknown node type: \" + node.type);\n }\n },\n computeSliceParams: function computeSliceParams(arrayLength, sliceParams) {\n var start = sliceParams[0];\n var stop = sliceParams[1];\n var step = sliceParams[2];\n var computed = [null, null, null];\n\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\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\n computed[0] = start;\n computed[1] = stop;\n computed[2] = step;\n return computed;\n },\n capSliceRange: function capSliceRange(arrayLength, actualValue, step) {\n if (actualValue < 0) {\n actualValue += arrayLength;\n\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\n return actualValue;\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: {\n _func: this._functionAbs,\n _signature: [{\n types: [TYPE_NUMBER]\n }]\n },\n avg: {\n _func: this._functionAvg,\n _signature: [{\n types: [TYPE_ARRAY_NUMBER]\n }]\n },\n ceil: {\n _func: this._functionCeil,\n _signature: [{\n types: [TYPE_NUMBER]\n }]\n },\n contains: {\n _func: this._functionContains,\n _signature: [{\n types: [TYPE_STRING, TYPE_ARRAY]\n }, {\n types: [TYPE_ANY]\n }]\n },\n \"ends_with\": {\n _func: this._functionEndsWith,\n _signature: [{\n types: [TYPE_STRING]\n }, {\n types: [TYPE_STRING]\n }]\n },\n floor: {\n _func: this._functionFloor,\n _signature: [{\n types: [TYPE_NUMBER]\n }]\n },\n length: {\n _func: this._functionLength,\n _signature: [{\n types: [TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT]\n }]\n },\n map: {\n _func: this._functionMap,\n _signature: [{\n types: [TYPE_EXPREF]\n }, {\n types: [TYPE_ARRAY]\n }]\n },\n max: {\n _func: this._functionMax,\n _signature: [{\n types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]\n }]\n },\n \"merge\": {\n _func: this._functionMerge,\n _signature: [{\n types: [TYPE_OBJECT],\n variadic: true\n }]\n },\n \"max_by\": {\n _func: this._functionMaxBy,\n _signature: [{\n types: [TYPE_ARRAY]\n }, {\n types: [TYPE_EXPREF]\n }]\n },\n sum: {\n _func: this._functionSum,\n _signature: [{\n types: [TYPE_ARRAY_NUMBER]\n }]\n },\n \"starts_with\": {\n _func: this._functionStartsWith,\n _signature: [{\n types: [TYPE_STRING]\n }, {\n types: [TYPE_STRING]\n }]\n },\n min: {\n _func: this._functionMin,\n _signature: [{\n types: [TYPE_ARRAY_NUMBER, TYPE_ARRAY_STRING]\n }]\n },\n \"min_by\": {\n _func: this._functionMinBy,\n _signature: [{\n types: [TYPE_ARRAY]\n }, {\n types: [TYPE_EXPREF]\n }]\n },\n type: {\n _func: this._functionType,\n _signature: [{\n types: [TYPE_ANY]\n }]\n },\n keys: {\n _func: this._functionKeys,\n _signature: [{\n types: [TYPE_OBJECT]\n }]\n },\n values: {\n _func: this._functionValues,\n _signature: [{\n types: [TYPE_OBJECT]\n }]\n },\n sort: {\n _func: this._functionSort,\n _signature: [{\n types: [TYPE_ARRAY_STRING, TYPE_ARRAY_NUMBER]\n }]\n },\n \"sort_by\": {\n _func: this._functionSortBy,\n _signature: [{\n types: [TYPE_ARRAY]\n }, {\n types: [TYPE_EXPREF]\n }]\n },\n join: {\n _func: this._functionJoin,\n _signature: [{\n types: [TYPE_STRING]\n }, {\n types: [TYPE_ARRAY_STRING]\n }]\n },\n reverse: {\n _func: this._functionReverse,\n _signature: [{\n types: [TYPE_STRING, TYPE_ARRAY]\n }]\n },\n \"to_array\": {\n _func: this._functionToArray,\n _signature: [{\n types: [TYPE_ANY]\n }]\n },\n \"to_string\": {\n _func: this._functionToString,\n _signature: [{\n types: [TYPE_ANY]\n }]\n },\n \"to_number\": {\n _func: this._functionToNumber,\n _signature: [{\n types: [TYPE_ANY]\n }]\n },\n \"not_null\": {\n _func: this._functionNotNull,\n _signature: [{\n types: [TYPE_ANY],\n variadic: true\n }]\n }\n };\n }\n\n Runtime.prototype = {\n callFunction: function callFunction(name, resolvedArgs) {\n var functionEntry = this.functionTable[name];\n\n if (functionEntry === undefined) {\n throw new Error(\"Unknown function: \" + name + \"()\");\n }\n\n this._validateArgs(name, resolvedArgs, functionEntry._signature);\n\n return functionEntry._func.call(this, resolvedArgs);\n },\n _validateArgs: function _validateArgs(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\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 + \"() \" + \"takes at least\" + signature.length + pluralized + \" 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 + \"() \" + \"takes \" + signature.length + pluralized + \" but received \" + args.length);\n }\n\n var currentSpec;\n var actualType;\n var typeMatched;\n\n for (var i = 0; i < signature.length; i++) {\n typeMatched = false;\n currentSpec = signature[i].types;\n actualType = this._getTypeName(args[i]);\n\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\n if (!typeMatched) {\n throw new Error(\"TypeError: \" + name + \"() \" + \"expected argument \" + (i + 1) + \" to be type \" + currentSpec + \" but received type \" + actualType + \" instead.\");\n }\n }\n },\n _typeMatches: function _typeMatches(actual, expected, argValue) {\n if (expected === TYPE_ANY) {\n return true;\n }\n\n if (expected === TYPE_ARRAY_STRING || expected === TYPE_ARRAY_NUMBER || 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\n if (expected === TYPE_ARRAY_NUMBER) {\n subtype = TYPE_NUMBER;\n } else if (expected === TYPE_ARRAY_STRING) {\n subtype = TYPE_STRING;\n }\n\n for (var i = 0; i < argValue.length; i++) {\n if (!this._typeMatches(this._getTypeName(argValue[i]), subtype, argValue[i])) {\n return false;\n }\n }\n\n return true;\n }\n } else {\n return actual === expected;\n }\n },\n _getTypeName: function _getTypeName(obj) {\n switch (Object.prototype.toString.call(obj)) {\n case \"[object String]\":\n return TYPE_STRING;\n\n case \"[object Number]\":\n return TYPE_NUMBER;\n\n case \"[object Array]\":\n return TYPE_ARRAY;\n\n case \"[object Boolean]\":\n return TYPE_BOOLEAN;\n\n case \"[object Null]\":\n return TYPE_NULL;\n\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 _functionStartsWith(resolvedArgs) {\n return resolvedArgs[0].lastIndexOf(resolvedArgs[1]) === 0;\n },\n _functionEndsWith: function _functionEndsWith(resolvedArgs) {\n var searchStr = resolvedArgs[0];\n var suffix = resolvedArgs[1];\n return searchStr.indexOf(suffix, searchStr.length - suffix.length) !== -1;\n },\n _functionReverse: function _functionReverse(resolvedArgs) {\n var typeName = this._getTypeName(resolvedArgs[0]);\n\n if (typeName === TYPE_STRING) {\n var originalStr = resolvedArgs[0];\n var reversedStr = \"\";\n\n for (var i = originalStr.length - 1; i >= 0; i--) {\n reversedStr += originalStr[i];\n }\n\n return reversedStr;\n } else {\n var reversedArray = resolvedArgs[0].slice(0);\n reversedArray.reverse();\n return reversedArray;\n }\n },\n _functionAbs: function _functionAbs(resolvedArgs) {\n return Math.abs(resolvedArgs[0]);\n },\n _functionCeil: function _functionCeil(resolvedArgs) {\n return Math.ceil(resolvedArgs[0]);\n },\n _functionAvg: function _functionAvg(resolvedArgs) {\n var sum = 0;\n var inputArray = resolvedArgs[0];\n\n for (var i = 0; i < inputArray.length; i++) {\n sum += inputArray[i];\n }\n\n return sum / inputArray.length;\n },\n _functionContains: function _functionContains(resolvedArgs) {\n return resolvedArgs[0].indexOf(resolvedArgs[1]) >= 0;\n },\n _functionFloor: function _functionFloor(resolvedArgs) {\n return Math.floor(resolvedArgs[0]);\n },\n _functionLength: function _functionLength(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 _functionMap: function _functionMap(resolvedArgs) {\n var mapped = [];\n var interpreter = this._interpreter;\n var exprefNode = resolvedArgs[0];\n var elements = resolvedArgs[1];\n\n for (var i = 0; i < elements.length; i++) {\n mapped.push(interpreter.visit(exprefNode, elements[i]));\n }\n\n return mapped;\n },\n _functionMerge: function _functionMerge(resolvedArgs) {\n var merged = {};\n\n for (var i = 0; i < resolvedArgs.length; i++) {\n var current = resolvedArgs[i];\n\n for (var key in current) {\n merged[key] = current[key];\n }\n }\n\n return merged;\n },\n _functionMax: function _functionMax(resolvedArgs) {\n if (resolvedArgs[0].length > 0) {\n var typeName = this._getTypeName(resolvedArgs[0][0]);\n\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\n for (var i = 1; i < elements.length; i++) {\n if (maxElement.localeCompare(elements[i]) < 0) {\n maxElement = elements[i];\n }\n }\n\n return maxElement;\n }\n } else {\n return null;\n }\n },\n _functionMin: function _functionMin(resolvedArgs) {\n if (resolvedArgs[0].length > 0) {\n var typeName = this._getTypeName(resolvedArgs[0][0]);\n\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\n for (var i = 1; i < elements.length; i++) {\n if (elements[i].localeCompare(minElement) < 0) {\n minElement = elements[i];\n }\n }\n\n return minElement;\n }\n } else {\n return null;\n }\n },\n _functionSum: function _functionSum(resolvedArgs) {\n var sum = 0;\n var listToSum = resolvedArgs[0];\n\n for (var i = 0; i < listToSum.length; i++) {\n sum += listToSum[i];\n }\n\n return sum;\n },\n _functionType: function _functionType(resolvedArgs) {\n switch (this._getTypeName(resolvedArgs[0])) {\n case TYPE_NUMBER:\n return \"number\";\n\n case TYPE_STRING:\n return \"string\";\n\n case TYPE_ARRAY:\n return \"array\";\n\n case TYPE_OBJECT:\n return \"object\";\n\n case TYPE_BOOLEAN:\n return \"boolean\";\n\n case TYPE_EXPREF:\n return \"expref\";\n\n case TYPE_NULL:\n return \"null\";\n }\n },\n _functionKeys: function _functionKeys(resolvedArgs) {\n return Object.keys(resolvedArgs[0]);\n },\n _functionValues: function _functionValues(resolvedArgs) {\n var obj = resolvedArgs[0];\n var keys = Object.keys(obj);\n var values = [];\n\n for (var i = 0; i < keys.length; i++) {\n values.push(obj[keys[i]]);\n }\n\n return values;\n },\n _functionJoin: function _functionJoin(resolvedArgs) {\n var joinChar = resolvedArgs[0];\n var listJoin = resolvedArgs[1];\n return listJoin.join(joinChar);\n },\n _functionToArray: function _functionToArray(resolvedArgs) {\n if (this._getTypeName(resolvedArgs[0]) === TYPE_ARRAY) {\n return resolvedArgs[0];\n } else {\n return [resolvedArgs[0]];\n }\n },\n _functionToString: function _functionToString(resolvedArgs) {\n if (this._getTypeName(resolvedArgs[0]) === TYPE_STRING) {\n return resolvedArgs[0];\n } else {\n return JSON.stringify(resolvedArgs[0]);\n }\n },\n _functionToNumber: function _functionToNumber(resolvedArgs) {\n var typeName = this._getTypeName(resolvedArgs[0]);\n\n var convertedValue;\n\n if (typeName === TYPE_NUMBER) {\n return resolvedArgs[0];\n } else if (typeName === TYPE_STRING) {\n convertedValue = +resolvedArgs[0];\n\n if (!isNaN(convertedValue)) {\n return convertedValue;\n }\n }\n\n return null;\n },\n _functionNotNull: function _functionNotNull(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\n return null;\n },\n _functionSort: function _functionSort(resolvedArgs) {\n var sortedArray = resolvedArgs[0].slice(0);\n sortedArray.sort();\n return sortedArray;\n },\n _functionSortBy: function _functionSortBy(resolvedArgs) {\n var sortedArray = resolvedArgs[0].slice(0);\n\n if (sortedArray.length === 0) {\n return sortedArray;\n }\n\n var interpreter = this._interpreter;\n var exprefNode = resolvedArgs[1];\n\n var requiredType = this._getTypeName(interpreter.visit(exprefNode, sortedArray[0]));\n\n if ([TYPE_NUMBER, TYPE_STRING].indexOf(requiredType) < 0) {\n throw new Error(\"TypeError\");\n }\n\n var that = this; // 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\n var decorated = [];\n\n for (var i = 0; i < sortedArray.length; i++) {\n decorated.push([i, sortedArray[i]]);\n }\n\n decorated.sort(function (a, b) {\n var exprA = interpreter.visit(exprefNode, a[1]);\n var exprB = interpreter.visit(exprefNode, b[1]);\n\n if (that._getTypeName(exprA) !== requiredType) {\n throw new Error(\"TypeError: expected \" + requiredType + \", received \" + that._getTypeName(exprA));\n } else if (that._getTypeName(exprB) !== requiredType) {\n throw new Error(\"TypeError: expected \" + requiredType + \", received \" + that._getTypeName(exprB));\n }\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 }); // Undecorate: extract out the original list elements.\n\n for (var j = 0; j < decorated.length; j++) {\n sortedArray[j] = decorated[j][1];\n }\n\n return sortedArray;\n },\n _functionMaxBy: function _functionMaxBy(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\n for (var i = 0; i < resolvedArray.length; i++) {\n current = keyFunction(resolvedArray[i]);\n\n if (current > maxNumber) {\n maxNumber = current;\n maxRecord = resolvedArray[i];\n }\n }\n\n return maxRecord;\n },\n _functionMinBy: function _functionMinBy(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\n for (var i = 0; i < resolvedArray.length; i++) {\n current = keyFunction(resolvedArray[i]);\n\n if (current < minNumber) {\n minNumber = current;\n minRecord = resolvedArray[i];\n }\n }\n\n return minRecord;\n },\n createKeyFunction: function createKeyFunction(exprefNode, allowedTypes) {\n var that = this;\n var interpreter = this._interpreter;\n\n var keyFunc = function keyFunc(x) {\n var current = interpreter.visit(exprefNode, x);\n\n if (allowedTypes.indexOf(that._getTypeName(current)) < 0) {\n var msg = \"TypeError: expected one of \" + allowedTypes + \", received \" + that._getTypeName(current);\n\n throw new Error(msg);\n }\n\n return current;\n };\n\n return keyFunc;\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(); // 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\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);","// 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'use strict';\n\nvar punycode = require('punycode');\n\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\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} // Reference: RFC 3986, RFC 1808, RFC 2396\n// define these here so at least they only have to be\n// compiled once on the first module load.\n\n\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n // Special case for a simple path URL\nsimplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n // RFC 2396: characters reserved for delimiting URLs.\n// We actually just auto-escape these.\ndelims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n // RFC 2396: characters not allowed for various reasons.\nunwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\nautoEscape = ['\\''].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.\nnonHostChars = ['%', '/', '?', ';', '#'].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.\nunsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n},\n // protocols that never have a hostname.\nhostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n},\n // protocols that always contain a // bit.\nslashedProtocol = {\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 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 } // 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\n\n var queryIndex = url.indexOf('?'),\n splitter = 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 var rest = url; // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\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\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n\n if (simplePath[2]) {\n this.search = simplePath[2];\n\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\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\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\n\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] && (slashes || proto && !slashedProtocol[proto])) {\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 // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;\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\n\n var auth, atSign;\n\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 } // Now we have a portion which is definitely the auth.\n // Pull that off.\n\n\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n } // the host is the remaining to the left of the first non-host char\n\n\n hostEnd = -1;\n\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd)) hostEnd = hec;\n } // if we still have not hit it, then the entire thing is a host.\n\n\n if (hostEnd === -1) hostEnd = rest.length;\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd); // pull out port.\n\n this.parseHost(); // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n\n this.hostname = this.hostname || ''; // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n\n var ipv6Hostname = this.hostname[0] === '[' && this.hostname[this.hostname.length - 1] === ']'; // validate a little.\n\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n\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 } // we test again with ASCII char only\n\n\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\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\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; // strip [ and ] from the hostname\n // the host field still retains them, though\n\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n } // now rest is set to the post-host stuff.\n // chop off any delim chars.\n\n\n if (!unsafeProtocol[lowerProto]) {\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) continue;\n var esc = encodeURIComponent(ae);\n\n if (esc === ae) {\n esc = escape(ae);\n }\n\n rest = rest.split(ae).join(esc);\n }\n } // chop off from the tail first.\n\n\n var hash = rest.indexOf('#');\n\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n\n var qm = rest.indexOf('?');\n\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\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\n if (rest) this.pathname = rest;\n\n if (slashedProtocol[lowerProto] && this.hostname && !this.pathname) {\n this.pathname = '/';\n } //to support http.request\n\n\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n } // finally, reconstruct the href based on what has been validated.\n\n\n this.href = this.format();\n return this;\n}; // format a parsed object into a url string\n\n\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\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 ? this.hostname : '[' + this.hostname + ']');\n\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query && util.isObject(this.query) && Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || query && '?' + query || '';\n if (protocol && protocol.substr(-1) !== ':') protocol += ':'; // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n\n if (this.slashes || (!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 pathname = pathname.replace(/[?#]/g, function (match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\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\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n } // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n\n\n result.hash = relative.hash; // if the relative url is empty, then there's nothing left to do here.\n\n if (relative.href === '') {\n result.href = result.format();\n return result;\n } // hrefs like //foo/bar always cut to the protocol.\n\n\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol') result[rkey] = relative[rkey];\n } //urlParse appends trailing / to urls like http://www.example.com\n\n\n if (slashedProtocol[result.protocol] && 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\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n\n while (relPath.length && !(relative.host = relPath.shift())) {\n ;\n }\n\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\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; // to support http.request\n\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\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 = relative.host || relative.pathname && relative.pathname.charAt(0) === '/',\n mustEndAbs = isRelAbs || isSourceAbs || 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]; // 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\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;else srcPath.unshift(result.host);\n }\n\n result.host = '';\n\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;else relPath.unshift(relative.host);\n }\n\n relative.host = null;\n }\n\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = relative.host || relative.host === '' ? relative.host : result.host;\n result.hostname = relative.hostname || relative.hostname === '' ? relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath; // 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(); //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\n var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n result.search = relative.search;\n result.query = relative.query; //to support http.request\n\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n }\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; //to support http.request\n\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n\n result.href = result.format();\n return result;\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\n\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (result.host || relative.host || srcPath.length > 1) && (last === '.' || last === '..') || last === ''; // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n\n var up = 0;\n\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n\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 } // if the path is allowed to go above the root, restore leading ..s\n\n\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' && (!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] === '' || srcPath[0] && srcPath[0].charAt(0) === '/'; // put the host back\n\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' : srcPath.length ? srcPath.shift() : ''; //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\n var authInHost = result.host && result.host.indexOf('@') > 0 ? result.host.split('@') : false;\n\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 } //to support request.http\n\n\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') + (result.search ? result.search : '');\n }\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\n if (port) {\n port = port[0];\n\n if (port !== ':') {\n this.port = port.substr(1);\n }\n\n host = host.substr(0, host.length - port.length);\n }\n\n if (host) this.hostname = host;\n};","/* eslint guard-for-in:0 */\nvar AWS;\n/**\n * A set of utility methods for use with the AWS SDK.\n *\n * @!attribute abort\n * Return this value from an iterator function {each} or {arrayEach}\n * to break out of the iteration.\n * @example Breaking out of an iterator function\n * AWS.util.each({a: 1, b: 2, c: 3}, function(key, value) {\n * if (key == 'b') return AWS.util.abort;\n * });\n * @see each\n * @see arrayEach\n * @api private\n */\n\nvar util = {\n environment: 'nodejs',\n engine: function engine() {\n if (util.isBrowser() && typeof navigator !== 'undefined') {\n return navigator.userAgent;\n } else {\n var engine = process.platform + '/' + process.version;\n\n if (process.env.AWS_EXECUTION_ENV) {\n engine += ' exec-env/' + process.env.AWS_EXECUTION_ENV;\n }\n\n return engine;\n }\n },\n userAgent: function userAgent() {\n var name = util.environment;\n\n var agent = 'aws-sdk-' + name + '/' + require('./core').VERSION;\n\n if (name === 'nodejs') agent += ' ' + util.engine();\n return agent;\n },\n uriEscape: function uriEscape(string) {\n var output = encodeURIComponent(string);\n output = output.replace(/[^A-Za-z0-9_.~\\-%]+/g, escape); // AWS percent-encodes some extra non-standard characters in a URI\n\n output = output.replace(/[*]/g, function (ch) {\n return '%' + ch.charCodeAt(0).toString(16).toUpperCase();\n });\n return output;\n },\n uriEscapePath: function uriEscapePath(string) {\n var parts = [];\n util.arrayEach(string.split('/'), function (part) {\n parts.push(util.uriEscape(part));\n });\n return parts.join('/');\n },\n urlParse: function urlParse(url) {\n return util.url.parse(url);\n },\n urlFormat: function urlFormat(url) {\n return util.url.format(url);\n },\n queryStringParse: function queryStringParse(qs) {\n return util.querystring.parse(qs);\n },\n queryParamsToString: function queryParamsToString(params) {\n var items = [];\n var escape = util.uriEscape;\n var sortedKeys = Object.keys(params).sort();\n util.arrayEach(sortedKeys, function (name) {\n var value = params[name];\n var ename = escape(name);\n var result = ename + '=';\n\n if (Array.isArray(value)) {\n var vals = [];\n util.arrayEach(value, function (item) {\n vals.push(escape(item));\n });\n result = ename + '=' + vals.sort().join('&' + ename + '=');\n } else if (value !== undefined && value !== null) {\n result = ename + '=' + escape(value);\n }\n\n items.push(result);\n });\n return items.join('&');\n },\n readFileSync: function readFileSync(path) {\n if (util.isBrowser()) return null;\n return require('fs').readFileSync(path, 'utf-8');\n },\n base64: {\n encode: function encode64(string) {\n if (typeof string === 'number') {\n throw util.error(new Error('Cannot base64 encode number ' + string));\n }\n\n if (string === null || typeof string === 'undefined') {\n return string;\n }\n\n var buf = util.buffer.toBuffer(string);\n return buf.toString('base64');\n },\n decode: function decode64(string) {\n if (typeof string === 'number') {\n throw util.error(new Error('Cannot base64 decode number ' + string));\n }\n\n if (string === null || typeof string === 'undefined') {\n return string;\n }\n\n return util.buffer.toBuffer(string, 'base64');\n }\n },\n buffer: {\n /**\n * Buffer constructor for Node buffer and buffer pollyfill\n */\n toBuffer: function toBuffer(data, encoding) {\n return typeof util.Buffer.from === 'function' && util.Buffer.from !== Uint8Array.from ? util.Buffer.from(data, encoding) : new util.Buffer(data, encoding);\n },\n alloc: function alloc(size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new Error('size passed to alloc must be a number.');\n }\n\n if (typeof util.Buffer.alloc === 'function') {\n return util.Buffer.alloc(size, fill, encoding);\n } else {\n var buf = new util.Buffer(size);\n\n if (fill !== undefined && typeof buf.fill === 'function') {\n buf.fill(fill, undefined, undefined, encoding);\n }\n\n return buf;\n }\n },\n toStream: function toStream(buffer) {\n if (!util.Buffer.isBuffer(buffer)) buffer = util.buffer.toBuffer(buffer);\n var readable = new util.stream.Readable();\n var pos = 0;\n\n readable._read = function (size) {\n if (pos >= buffer.length) return readable.push(null);\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 concat(buffers) {\n var length = 0,\n offset = 0,\n buffer = null,\n i;\n\n for (i = 0; i < buffers.length; i++) {\n length += buffers[i].length;\n }\n\n buffer = util.buffer.alloc(length);\n\n for (i = 0; i < buffers.length; i++) {\n buffers[i].copy(buffer, offset);\n offset += buffers[i].length;\n }\n\n return buffer;\n }\n },\n string: {\n byteLength: function byteLength(string) {\n if (string === null || string === undefined) return 0;\n if (typeof string === 'string') string = util.buffer.toBuffer(string);\n\n if (typeof string.byteLength === 'number') {\n return string.byteLength;\n } else if (typeof string.length === 'number') {\n return string.length;\n } else if (typeof string.size === 'number') {\n return string.size;\n } else if (typeof string.path === 'string') {\n return require('fs').lstatSync(string.path).size;\n } else {\n throw util.error(new Error('Cannot determine length of ' + string), {\n object: string\n });\n }\n },\n upperFirst: function upperFirst(string) {\n return string[0].toUpperCase() + string.substr(1);\n },\n lowerFirst: function lowerFirst(string) {\n return string[0].toLowerCase() + string.substr(1);\n }\n },\n ini: {\n parse: function string(ini) {\n var currentSection,\n map = {};\n util.arrayEach(ini.split(/\\r?\\n/), function (line) {\n line = line.split(/(^|\\s)[;#]/)[0]; // remove comments\n\n var section = line.match(/^\\s*\\[([^\\[\\]]+)\\]\\s*$/);\n\n if (section) {\n currentSection = section[1];\n } else if (currentSection) {\n var item = line.match(/^\\s*(.+?)\\s*=\\s*(.+?)\\s*$/);\n\n if (item) {\n map[currentSection] = map[currentSection] || {};\n map[currentSection][item[1]] = item[2];\n }\n }\n });\n return map;\n }\n },\n fn: {\n noop: function noop() {},\n callback: function callback(err) {\n if (err) throw err;\n },\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 * @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\n if (AWS.config.systemClockOffset) {\n // 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) {\n date = util.date.getDate();\n }\n\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) {\n date = util.date.getDate();\n }\n\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) {\n date = util.date.getDate();\n }\n\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 parseTimestamp: function parseTimestamp(value) {\n if (typeof value === 'number') {\n // unix timestamp (number)\n return new Date(value * 1000);\n } else if (value.match(/^\\d+$/)) {\n // unix timestamp\n return new Date(value * 1000);\n } else if (value.match(/^\\d{4}/)) {\n // iso8601\n return new Date(value);\n } else if (value.match(/^\\w{3},/)) {\n // rfc822\n return new Date(value);\n } else {\n throw util.error(new Error('unhandled timestamp format: ' + value), {\n code: 'TimestampParserError'\n });\n }\n }\n },\n crypto: {\n crc32Table: [0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D],\n crc32: function crc32(data) {\n var tbl = util.crypto.crc32Table;\n var crc = 0 ^ -1;\n\n if (typeof data === 'string') {\n data = util.buffer.toBuffer(data);\n }\n\n for (var i = 0; i < data.length; i++) {\n var code = data.readUInt8(i);\n crc = crc >>> 8 ^ tbl[(crc ^ code) & 0xFF];\n }\n\n return (crc ^ -1) >>> 0;\n },\n hmac: function hmac(key, string, digest, fn) {\n if (!digest) digest = 'binary';\n\n if (digest === 'buffer') {\n digest = undefined;\n }\n\n if (!fn) fn = 'sha256';\n if (typeof string === 'string') string = util.buffer.toBuffer(string);\n return util.crypto.lib.createHmac(fn, key).update(string).digest(digest);\n },\n md5: function md5(data, digest, callback) {\n return util.crypto.hash('md5', data, digest, callback);\n },\n sha256: function sha256(data, digest, callback) {\n return util.crypto.hash('sha256', data, digest, callback);\n },\n hash: function hash(algorithm, data, digest, callback) {\n var hash = util.crypto.createHash(algorithm);\n\n if (!digest) {\n digest = 'binary';\n }\n\n if (digest === 'buffer') {\n digest = undefined;\n }\n\n if (typeof data === 'string') data = util.buffer.toBuffer(data);\n var sliceFn = util.arraySliceFn(data);\n var isBuffer = util.Buffer.isBuffer(data); //Identifying objects with an ArrayBuffer as buffers\n\n if (util.isBrowser() && typeof ArrayBuffer !== 'undefined' && data && data.buffer instanceof ArrayBuffer) isBuffer = true;\n\n if (callback && typeof data === 'object' && typeof data.on === 'function' && !isBuffer) {\n data.on('data', function (chunk) {\n hash.update(chunk);\n });\n data.on('error', function (err) {\n callback(err);\n });\n data.on('end', function () {\n callback(null, hash.digest(digest));\n });\n } else if (callback && sliceFn && !isBuffer && typeof FileReader !== 'undefined') {\n // this might be a File/Blob\n var index = 0,\n size = 1024 * 512;\n var reader = new FileReader();\n\n reader.onerror = function () {\n callback(new Error('Failed to read data.'));\n };\n\n reader.onload = function () {\n var buf = new util.Buffer(new Uint8Array(reader.result));\n hash.update(buf);\n index += buf.length;\n\n reader._continueReading();\n };\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\n var out = hash.update(data).digest(digest);\n if (callback) callback(null, out);\n return out;\n }\n },\n toHex: function toHex(data) {\n var out = [];\n\n for (var i = 0; i < data.length; i++) {\n out.push(('0' + data.charCodeAt(i).toString(16)).substr(-2, 2));\n }\n\n return out.join('');\n },\n createHash: function createHash(algorithm) {\n return util.crypto.lib.createHash(algorithm);\n }\n },\n\n /** @!ignore */\n\n /* Abort constant */\n abort: {},\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 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 update: function update(obj1, obj2) {\n util.each(obj2, function iterator(key, item) {\n obj1[key] = item;\n });\n return obj1;\n },\n merge: function merge(obj1, obj2) {\n return util.update(util.copy(obj1), obj2);\n },\n copy: function copy(object) {\n if (object === null || object === undefined) return object;\n var dupe = {}; // jshint forin:false\n\n for (var key in object) {\n dupe[key] = object[key];\n }\n\n return dupe;\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\n return true;\n },\n arraySliceFn: function arraySliceFn(obj) {\n var fn = obj.slice || obj.webkitSlice || obj.mozSlice;\n return typeof fn === 'function' ? fn : null;\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 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 error: function error(err, options) {\n var originalError = null;\n\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\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) err.message = options.message;\n if (options.code || options.name) err.code = options.code || options.name;\n if (options.stack) err.stack = options.stack;\n }\n\n if (typeof Object.defineProperty === 'function') {\n Object.defineProperty(err, 'name', {\n writable: true,\n enumerable: false\n });\n Object.defineProperty(err, 'message', {\n enumerable: true\n });\n }\n\n err.name = options && options.name || err.name || err.code || 'Error';\n err.time = new Date();\n if (originalError) err.originalError = originalError;\n return err;\n },\n\n /**\n * @api private\n */\n inherit: function inherit(klass, features) {\n var newObject = null;\n\n if (features === undefined) {\n features = klass;\n klass = Object;\n newObject = {};\n } else {\n var ctor = function ConstructorWrapper() {};\n\n ctor.prototype = klass.prototype;\n newObject = new ctor();\n } // constructor not supplied, create pass-through ctor\n\n\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\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\n if (prop !== 'constructor') {\n klass.prototype[prop] = fn;\n }\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 util.arrayEach(props, function (key) {\n Object.defineProperty(obj, key, {\n enumerable: false,\n writable: true,\n configurable: true\n });\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\n if (typeof value === 'function' && !isValue) {\n opts.get = value;\n } else {\n opts.value = value;\n 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; // build enumerable attribute for each value with lazy accessor.\n\n util.property(obj, name, function () {\n if (cachedValue === null) {\n cachedValue = get();\n }\n\n return cachedValue;\n }, enumerable);\n },\n\n /**\n * TODO Remove in major version revision\n * This backfill populates response data without the\n * top-level payload name.\n *\n * @api private\n */\n hoistPayloadMember: function hoistPayloadMember(resp) {\n var req = resp.request;\n var operationName = req.operation;\n var operation = req.service.api.operations[operationName];\n var output = operation.output;\n\n if (output.payload && !operation.hasEventOutput) {\n var payloadMember = output.members[output.payload];\n var responsePayload = resp.data[output.payload];\n\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\n var fs = require('fs');\n\n if (typeof Stream === 'function' && body instanceof Stream) {\n if (typeof body.path === 'string') {\n // assume file object\n var settings = {};\n\n if (typeof body.start === 'number') {\n settings.start = body.start;\n }\n\n if (typeof body.end === 'number') {\n settings.end = body.end;\n }\n\n body = fs.createReadStream(body.path, settings);\n } else {\n // TODO support other stream types\n return done(new Error('Non-file stream objects are ' + 'not supported with SigV4'));\n }\n }\n }\n\n util.crypto.sha256(body, 'hex', function (err, sha) {\n if (err) done(err);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', Math.abs(new Date().getTime() - serverTime) >= 300000, false);\n return AWS.config.isClockSkewed;\n }\n },\n applyClockOffset: function applyClockOffset(serverTime) {\n if (serverTime) 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'] || resp.httpResponse.headers['x-amzn-requestid'];\n\n if (!requestId && resp.data && resp.data.ResponseMetadata) {\n requestId = resp.data.ResponseMetadata.RequestId;\n }\n\n if (requestId) {\n resp.requestId = requestId;\n }\n\n if (resp.error) {\n resp.error.requestId = requestId;\n }\n },\n\n /**\n * @api private\n */\n addPromises: function addPromises(constructors, PromiseDependency) {\n var deletePromises = false;\n\n if (PromiseDependency === undefined && AWS && AWS.config) {\n PromiseDependency = AWS.config.getPromisesDependency();\n }\n\n if (PromiseDependency === undefined && typeof Promise !== 'undefined') {\n PromiseDependency = Promise;\n }\n\n if (typeof PromiseDependency !== 'function') deletePromises = true;\n if (!Array.isArray(constructors)) constructors = [constructors];\n\n for (var ind = 0; ind < constructors.length; ind++) {\n var constructor = constructors[ind];\n\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\n var metadata = require('../apis/metadata.json');\n\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\n if (typeof customBackoff === 'function') {\n return customBackoff(retryCount);\n }\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 errCallback(err) {\n var maxRetries = options.maxRetries || 0;\n if (err && err.code === 'TimeoutError') err.retryable = true;\n\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 sendRequest() {\n var data = '';\n http.handleRequest(httpRequest, httpOptions, function (httpResponse) {\n httpResponse.on('data', function (chunk) {\n data += chunk.toString();\n });\n httpResponse.on('end', function () {\n var statusCode = httpResponse.statusCode;\n\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\n if (rules.payload && resp.data[rules.payload]) {\n resp.data[rules.payload] = resp.data[rules.payload].toString();\n }\n },\n\n /**\n * @api private\n */\n defer: function defer(callback) {\n if (typeof process === 'object' && typeof process.nextTick === 'function') {\n process.nextTick(callback);\n } else if (typeof setImmediate === 'function') {\n setImmediate(callback);\n } else {\n setTimeout(callback, 0);\n }\n },\n\n /**\n * @api private\n */\n getRequestPayloadShape: function getRequestPayloadShape(req) {\n var operations = req.service.api.operations;\n if (!operations) return undefined;\n var operation = (operations || {})[req.operation];\n if (!operation || !operation.input || !operation.input.payload) return undefined;\n return operation.input.members[operation.input.payload];\n },\n getProfilesFromSharedConfig: function getProfilesFromSharedConfig(iniLoader, filename) {\n var profiles = {};\n var profilesFromConfig = {};\n\n if (process.env[util.configOptInEnv]) {\n var profilesFromConfig = iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[util.sharedConfigFileEnv]\n });\n }\n\n var profilesFromCreds = iniLoader.loadFrom({\n filename: filename || process.env[util.configOptInEnv] && process.env[util.sharedCredentialsFileEnv]\n });\n\n for (var i = 0, profileNames = Object.keys(profilesFromConfig); i < profileNames.length; i++) {\n profiles[profileNames[i]] = profilesFromConfig[profileNames[i]];\n }\n\n for (var i = 0, profileNames = Object.keys(profilesFromCreds); i < profileNames.length; i++) {\n profiles[profileNames[i]] = profilesFromCreds[profileNames[i]];\n }\n\n return profiles;\n },\n\n /**\n * @api private\n */\n defaultProfile: 'default',\n\n /**\n * @api private\n */\n configOptInEnv: 'AWS_SDK_LOAD_CONFIG',\n\n /**\n * @api private\n */\n sharedCredentialsFileEnv: 'AWS_SHARED_CREDENTIALS_FILE',\n\n /**\n * @api private\n */\n sharedConfigFileEnv: 'AWS_CONFIG_FILE',\n\n /**\n * @api private\n */\n imdsDisabledEnv: 'AWS_EC2_METADATA_DISABLED'\n};\n/**\n * @api private\n */\n\nmodule.exports = util;",";\n\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n /**\n * Base64 encoding strategy.\n */\n\n var Base64 = C_enc.Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var map = this._map; // Clamp excess bits\n\n wordArray.clamp(); // Convert\n\n var base64Chars = [];\n\n for (var i = 0; i < sigBytes; i += 3) {\n var byte1 = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n var byte2 = words[i + 1 >>> 2] >>> 24 - (i + 1) % 4 * 8 & 0xff;\n var byte3 = words[i + 2 >>> 2] >>> 24 - (i + 2) % 4 * 8 & 0xff;\n var triplet = byte1 << 16 | byte2 << 8 | byte3;\n\n for (var j = 0; j < 4 && i + j * 0.75 < sigBytes; j++) {\n base64Chars.push(map.charAt(triplet >>> 6 * (3 - j) & 0x3f));\n }\n } // Add padding\n\n\n var paddingChar = map.charAt(64);\n\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n\n return base64Chars.join('');\n },\n\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse: function parse(base64Str) {\n // Shortcuts\n var base64StrLength = base64Str.length;\n var map = this._map;\n var reverseMap = this._reverseMap;\n\n if (!reverseMap) {\n reverseMap = this._reverseMap = [];\n\n for (var j = 0; j < map.length; j++) {\n reverseMap[map.charCodeAt(j)] = j;\n }\n } // Ignore padding\n\n\n var paddingChar = map.charAt(64);\n\n if (paddingChar) {\n var paddingIndex = base64Str.indexOf(paddingChar);\n\n if (paddingIndex !== -1) {\n base64StrLength = paddingIndex;\n }\n } // Convert\n\n\n return parseLoop(base64Str, base64StrLength, reverseMap);\n },\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n };\n\n function parseLoop(base64Str, base64StrLength, reverseMap) {\n var words = [];\n var nBytes = 0;\n\n for (var i = 0; i < base64StrLength; i++) {\n if (i % 4) {\n var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << i % 4 * 2;\n var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> 6 - i % 4 * 2;\n words[nBytes >>> 2] |= (bits1 | bits2) << 24 - nBytes % 4 * 8;\n nBytes++;\n }\n }\n\n return WordArray.create(words, nBytes);\n }\n })();\n\n return CryptoJS.enc.Base64;\n});","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n/**\n * @api private\n */\n\nAWS.Signers.V2 = inherit(AWS.Signers.RequestSigner, {\n addAuthorization: function addAuthorization(credentials, date) {\n if (!date) date = AWS.util.date.getDate();\n var r = this.request;\n r.params.Timestamp = AWS.util.date.iso8601(date);\n r.params.SignatureVersion = '2';\n r.params.SignatureMethod = 'HmacSHA256';\n r.params.AWSAccessKeyId = credentials.accessKeyId;\n\n if (credentials.sessionToken) {\n r.params.SecurityToken = credentials.sessionToken;\n }\n\n delete r.params.Signature; // delete old Signature for re-signing\n\n r.params.Signature = this.signature(credentials);\n r.body = AWS.util.queryParamsToString(r.params);\n r.headers['Content-Length'] = r.body.length;\n },\n signature: function signature(credentials) {\n return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\n },\n stringToSign: function stringToSign() {\n var parts = [];\n parts.push(this.request.method);\n parts.push(this.request.endpoint.host.toLowerCase());\n parts.push(this.request.pathname());\n parts.push(AWS.util.queryParamsToString(this.request.params));\n return parts.join('\\n');\n }\n});\n/**\n * @api private\n */\n\nmodule.exports = AWS.Signers.V2;",";\n\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Check if typed arrays are supported\n if (typeof ArrayBuffer != 'function') {\n return;\n } // Shortcuts\n\n\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray; // Reference original init\n\n var superInit = WordArray.init; // Augment WordArray.init to handle typed arrays\n\n var subInit = WordArray.init = function (typedArray) {\n // Convert buffers to uint8\n if (typedArray instanceof ArrayBuffer) {\n typedArray = new Uint8Array(typedArray);\n } // Convert other array views to uint8\n\n\n if (typedArray instanceof Int8Array || typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray || typedArray instanceof Int16Array || typedArray instanceof Uint16Array || typedArray instanceof Int32Array || typedArray instanceof Uint32Array || typedArray instanceof Float32Array || typedArray instanceof Float64Array) {\n typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n } // Handle Uint8Array\n\n\n if (typedArray instanceof Uint8Array) {\n // Shortcut\n var typedArrayByteLength = typedArray.byteLength; // Extract bytes\n\n var words = [];\n\n for (var i = 0; i < typedArrayByteLength; i++) {\n words[i >>> 2] |= typedArray[i] << 24 - i % 4 * 8;\n } // Initialize this word array\n\n\n superInit.call(this, words, typedArrayByteLength);\n } else {\n // Else call normal init\n superInit.apply(this, arguments);\n }\n };\n\n subInit.prototype = WordArray;\n })();\n\n return CryptoJS.lib.WordArray;\n});","var util = require('../util');\n\nfunction JsonBuilder() {}\n\nJsonBuilder.prototype.build = function (value, shape) {\n return JSON.stringify(translate(value, shape));\n};\n\nfunction translate(value, shape) {\n if (!shape || value === undefined || value === null) return undefined;\n\n switch (shape.type) {\n case 'structure':\n return translateStructure(value, shape);\n\n case 'map':\n return translateMap(value, shape);\n\n case 'list':\n return translateList(value, shape);\n\n default:\n 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\n if (memberShape) {\n if (memberShape.location !== 'body') return;\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n var result = translate(value, memberShape);\n if (result !== undefined) struct[locationName] = result;\n }\n });\n return struct;\n}\n\nfunction translateList(list, shape) {\n var out = [];\n util.arrayEach(list, function (value) {\n var result = translate(value, shape.member);\n if (result !== undefined) out.push(result);\n });\n return out;\n}\n\nfunction translateMap(map, shape) {\n var out = {};\n util.each(map, function (key, value) {\n var result = translate(value, shape.value);\n if (result !== undefined) out[key] = result;\n });\n return out;\n}\n\nfunction translateScalar(value, shape) {\n return shape.toWireFormat(value);\n}\n/**\n * @api private\n */\n\n\nmodule.exports = JsonBuilder;","var AWS = require('../core');\n\nvar STS = require('../../clients/sts');\n/**\n * Represents temporary credentials retrieved from {AWS.STS}. Without any\n * extra parameters, credentials will be fetched from the\n * {AWS.STS.getSessionToken} operation. If an IAM role is provided, the\n * {AWS.STS.assumeRole} operation will be used to fetch credentials for the\n * role instead.\n *\n * @note AWS.TemporaryCredentials is deprecated, but remains available for\n * backwards compatibility. {AWS.ChainableTemporaryCredentials} is the\n * preferred class for temporary credentials.\n *\n * To setup temporary credentials, configure a set of master credentials\n * using the standard credentials providers (environment, EC2 instance metadata,\n * or from the filesystem), then set the global credentials to a new\n * temporary credentials object:\n *\n * ```javascript\n * // Note that environment credentials are loaded by default,\n * // the following line is shown for clarity:\n * AWS.config.credentials = new AWS.EnvironmentCredentials('AWS');\n *\n * // Now set temporary credentials seeded from the master credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n *\n * // subsequent requests will now use temporary credentials from AWS STS.\n * new AWS.S3().listBucket(function(err, data) { ... });\n * ```\n *\n * @!attribute masterCredentials\n * @return [AWS.Credentials] the master (non-temporary) credentials used to\n * get and refresh temporary credentials from AWS STS.\n * @note (see constructor)\n */\n\n\nAWS.TemporaryCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new temporary credentials object.\n *\n * @note In order to create temporary credentials, you first need to have\n * \"master\" credentials configured in {AWS.Config.credentials}. These\n * master credentials are necessary to retrieve the temporary credentials,\n * as well as refresh the credentials when they expire.\n * @param params [map] a map of options that are passed to the\n * {AWS.STS.assumeRole} or {AWS.STS.getSessionToken} operations.\n * If a `RoleArn` parameter is passed in, credentials will be based on the\n * IAM role.\n * @param masterCredentials [AWS.Credentials] the master (non-temporary) credentials\n * used to get and refresh temporary credentials from AWS STS.\n * @example Creating a new credentials object for generic temporary credentials\n * AWS.config.credentials = new AWS.TemporaryCredentials();\n * @example Creating a new credentials object for an IAM role\n * AWS.config.credentials = new AWS.TemporaryCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/TemporaryCredentials',\n * });\n * @see AWS.STS.assumeRole\n * @see AWS.STS.getSessionToken\n */\n constructor: function TemporaryCredentials(params, masterCredentials) {\n AWS.Credentials.call(this);\n this.loadMasterCredentials(masterCredentials);\n this.expired = true;\n this.params = params || {};\n\n if (this.params.RoleArn) {\n this.params.RoleSessionName = this.params.RoleSessionName || 'temporary-credentials';\n }\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRole} or\n * {AWS.STS.getSessionToken}, depending on whether an IAM role ARN was passed\n * to the credentials {constructor}.\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.masterCredentials.get(function () {\n self.service.config.credentials = self.masterCredentials;\n var operation = self.params.RoleArn ? self.service.assumeRole : self.service.getSessionToken;\n operation.call(self.service, function (err, data) {\n if (!err) {\n self.service.credentialsFrom(data, self);\n }\n\n callback(err);\n });\n });\n },\n\n /**\n * @api private\n */\n loadMasterCredentials: function loadMasterCredentials(masterCredentials) {\n this.masterCredentials = masterCredentials || AWS.config.credentials;\n\n while (this.masterCredentials.masterCredentials) {\n this.masterCredentials = this.masterCredentials.masterCredentials;\n }\n\n if (typeof this.masterCredentials.get !== 'function') {\n this.masterCredentials = new AWS.Credentials(this.masterCredentials);\n }\n },\n\n /**\n * @api private\n */\n createClients: function createClients() {\n this.service = this.service || new STS({\n params: this.params\n });\n }\n});","require('../lib/node_loader');\n\nvar AWS = require('../lib/core');\n\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\napiLoader.services['cognitoidentity'] = {};\nAWS.CognitoIdentity = Service.defineService('cognitoidentity', ['2014-06-30']);\n\nrequire('../lib/services/cognitoidentity');\n\nObject.defineProperty(apiLoader.services['cognitoidentity'], '2014-06-30', {\n get: function get() {\n var model = require('../apis/cognito-identity-2014-06-30.min.json');\n\n model.paginators = require('../apis/cognito-identity-2014-06-30.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nmodule.exports = AWS.CognitoIdentity;","var AWS = require('../core');\n\nAWS.util.update(AWS.CognitoIdentity.prototype, {\n getOpenIdToken: function getOpenIdToken(params, callback) {\n return this.makeUnauthenticatedRequest('getOpenIdToken', params, callback);\n },\n getId: function getId(params, callback) {\n return this.makeUnauthenticatedRequest('getId', params, callback);\n },\n getCredentialsForIdentity: function getCredentialsForIdentity(params, callback) {\n return this.makeUnauthenticatedRequest('getCredentialsForIdentity', params, callback);\n }\n});","/*\n * Copyright 2017-2019 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 */\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nvar LOG_LEVELS = {\n VERBOSE: 1,\n DEBUG: 2,\n INFO: 3,\n WARN: 4,\n ERROR: 5\n};\n/**\n * Write logs\n * @class Logger\n */\n\nvar ConsoleLogger =\n/** @class */\nfunction () {\n /**\n * @constructor\n * @param {string} name - Name of the logger\n */\n function ConsoleLogger(name, level) {\n if (level === void 0) {\n level = 'WARN';\n }\n\n this.name = name;\n this.level = level;\n }\n\n ConsoleLogger.prototype._padding = function (n) {\n return n < 10 ? '0' + n : '' + n;\n };\n\n ConsoleLogger.prototype._ts = function () {\n var dt = new Date();\n return [this._padding(dt.getMinutes()), this._padding(dt.getSeconds())].join(':') + '.' + dt.getMilliseconds();\n };\n /**\n * Write log\n * @method\n * @memeberof Logger\n * @param {string} type - log type, default INFO\n * @param {string|object} msg - Logging message or object\n */\n\n\n ConsoleLogger.prototype._log = function (type) {\n var msg = [];\n\n for (var _i = 1; _i < arguments.length; _i++) {\n msg[_i - 1] = arguments[_i];\n }\n\n var logger_level_name = this.level;\n\n if (ConsoleLogger.LOG_LEVEL) {\n logger_level_name = ConsoleLogger.LOG_LEVEL;\n }\n\n if (typeof window !== 'undefined' && window.LOG_LEVEL) {\n logger_level_name = window.LOG_LEVEL;\n }\n\n var logger_level = LOG_LEVELS[logger_level_name];\n var type_level = LOG_LEVELS[type];\n\n if (!(type_level >= logger_level)) {\n // Do nothing if type is not greater than or equal to logger level (handle undefined)\n return;\n }\n\n var log = console.log.bind(console);\n\n if (type === 'ERROR' && console.error) {\n log = console.error.bind(console);\n }\n\n if (type === 'WARN' && console.warn) {\n log = console.warn.bind(console);\n }\n\n var prefix = \"[\" + type + \"] \" + this._ts() + \" \" + this.name;\n\n if (msg.length === 1 && typeof msg[0] === 'string') {\n log(prefix + \" - \" + msg[0]);\n } else if (msg.length === 1) {\n log(prefix, msg[0]);\n } else if (typeof msg[0] === 'string') {\n var obj = msg.slice(1);\n\n if (obj.length === 1) {\n obj = obj[0];\n }\n\n log(prefix + \" - \" + msg[0], obj);\n } else {\n log(prefix, msg);\n }\n };\n /**\n * Write General log. Default to INFO\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n\n\n ConsoleLogger.prototype.log = function () {\n var msg = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n msg[_i] = arguments[_i];\n }\n\n this._log.apply(this, __spreadArrays(['INFO'], msg));\n };\n /**\n * Write INFO log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n\n\n ConsoleLogger.prototype.info = function () {\n var msg = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n msg[_i] = arguments[_i];\n }\n\n this._log.apply(this, __spreadArrays(['INFO'], msg));\n };\n /**\n * Write WARN log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n\n\n ConsoleLogger.prototype.warn = function () {\n var msg = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n msg[_i] = arguments[_i];\n }\n\n this._log.apply(this, __spreadArrays(['WARN'], msg));\n };\n /**\n * Write ERROR log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n\n\n ConsoleLogger.prototype.error = function () {\n var msg = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n msg[_i] = arguments[_i];\n }\n\n this._log.apply(this, __spreadArrays(['ERROR'], msg));\n };\n /**\n * Write DEBUG log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n\n\n ConsoleLogger.prototype.debug = function () {\n var msg = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n msg[_i] = arguments[_i];\n }\n\n this._log.apply(this, __spreadArrays(['DEBUG'], msg));\n };\n /**\n * Write VERBOSE log\n * @method\n * @memeberof Logger\n * @param {string|object} msg - Logging message or object\n */\n\n\n ConsoleLogger.prototype.verbose = function () {\n var msg = [];\n\n for (var _i = 0; _i < arguments.length; _i++) {\n msg[_i] = arguments[_i];\n }\n\n this._log.apply(this, __spreadArrays(['VERBOSE'], msg));\n };\n\n ConsoleLogger.LOG_LEVEL = null;\n return ConsoleLogger;\n}();\n\nexport { ConsoleLogger };","import { ConsoleLogger as LoggerClass } from './Logger';\nvar logger = new LoggerClass('Amplify');\n\nvar Amplify =\n/** @class */\nfunction () {\n function Amplify() {}\n\n Amplify.register = function (comp) {\n logger.debug('component registered in amplify', comp);\n\n this._components.push(comp);\n\n if (typeof comp.getModuleName === 'function') {\n Amplify[comp.getModuleName()] = comp;\n } else {\n logger.debug('no getModuleName method for component', comp);\n }\n };\n\n Amplify.configure = function (config) {\n var _this = this;\n\n if (!config) return this._config;\n this._config = Object.assign(this._config, config);\n logger.debug('amplify config', this._config);\n\n this._components.map(function (comp) {\n comp.configure(_this._config);\n });\n\n return this._config;\n };\n\n Amplify.addPluggable = function (pluggable) {\n if (pluggable && pluggable['getCategory'] && typeof pluggable['getCategory'] === 'function') {\n this._components.map(function (comp) {\n if (comp['addPluggable'] && typeof comp['addPluggable'] === 'function') {\n comp.addPluggable(pluggable);\n }\n });\n }\n };\n\n Amplify._components = [];\n Amplify._config = {}; // for backward compatibility to avoid breaking change\n // if someone is using like Amplify.Auth\n\n Amplify.Auth = null;\n Amplify.Analytics = null;\n Amplify.API = null;\n Amplify.Storage = null;\n Amplify.I18n = null;\n Amplify.Cache = null;\n Amplify.PubSub = null;\n Amplify.Interactions = null;\n Amplify.Pushnotification = null;\n Amplify.UI = null;\n Amplify.XR = null;\n Amplify.Predictions = null;\n Amplify.Logger = LoggerClass;\n Amplify.ServiceWorker = null;\n return Amplify;\n}();\n\nexport default Amplify;","/*\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 */\nimport { ConsoleLogger as Logger } from '../Logger';\nvar logger = new Logger('ClientDevice_Browser');\nexport function clientInfo() {\n if (typeof window === 'undefined') {\n return {};\n }\n\n return browserClientInfo();\n}\n\nfunction browserClientInfo() {\n if (typeof window === 'undefined') {\n logger.warn('No window object available to get browser client info');\n return {};\n }\n\n var nav = window.navigator;\n\n if (!nav) {\n logger.warn('No navigator object available to get browser client info');\n return {};\n }\n\n var platform = nav.platform,\n product = nav.product,\n vendor = nav.vendor,\n userAgent = nav.userAgent,\n language = nav.language;\n var type = browserType(userAgent);\n var timezone = browserTimezone();\n return {\n platform: platform,\n make: product || vendor,\n model: type.type,\n version: type.version,\n appVersion: [type.type, type.version].join('/'),\n language: language,\n timezone: timezone\n };\n}\n\nexport function dimension() {\n if (typeof window === 'undefined') {\n logger.warn('No window object available to get browser client info');\n return {\n width: 320,\n height: 320\n };\n }\n\n return {\n width: window.innerWidth,\n height: window.innerHeight\n };\n}\n\nfunction browserTimezone() {\n var tzMatch = /\\(([A-Za-z\\s].*)\\)/.exec(new Date().toString());\n return tzMatch ? tzMatch[1] || '' : '';\n}\n\nfunction browserType(userAgent) {\n var operaMatch = /.+(Opera[\\s[A-Z]*|OPR[\\sA-Z]*)\\/([0-9\\.]+).*/i.exec(userAgent);\n\n if (operaMatch) {\n return {\n type: operaMatch[1],\n version: operaMatch[2]\n };\n }\n\n var ieMatch = /.+(Trident|Edge)\\/([0-9\\.]+).*/i.exec(userAgent);\n\n if (ieMatch) {\n return {\n type: ieMatch[1],\n version: ieMatch[2]\n };\n }\n\n var cfMatch = /.+(Chrome|Firefox|FxiOS)\\/([0-9\\.]+).*/i.exec(userAgent);\n\n if (cfMatch) {\n return {\n type: cfMatch[1],\n version: cfMatch[2]\n };\n }\n\n var sMatch = /.+(Safari)\\/([0-9\\.]+).*/i.exec(userAgent);\n\n if (sMatch) {\n return {\n type: sMatch[1],\n version: sMatch[2]\n };\n }\n\n var awkMatch = /.+(AppleWebKit)\\/([0-9\\.]+).*/i.exec(userAgent);\n\n if (awkMatch) {\n return {\n type: awkMatch[1],\n version: awkMatch[2]\n };\n }\n\n var anyMatch = /.*([A-Z]+)\\/([0-9\\.]+).*/i.exec(userAgent);\n\n if (anyMatch) {\n return {\n type: anyMatch[1],\n version: anyMatch[2]\n };\n }\n\n return {\n type: '',\n version: ''\n };\n}","/*\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 */\nimport * as Browser from './browser';\n\nvar ClientDevice =\n/** @class */\nfunction () {\n function ClientDevice() {}\n\n ClientDevice.clientInfo = function () {\n return Browser.clientInfo();\n };\n\n ClientDevice.dimension = function () {\n return Browser.dimension();\n };\n\n return ClientDevice;\n}();\n\nexport default ClientDevice;","/*\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 */\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __spreadArrays = this && this.__spreadArrays || function () {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) {\n s += arguments[i].length;\n }\n\n for (var r = Array(s), k = 0, i = 0; i < il; i++) {\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) {\n r[k] = a[j];\n }\n }\n\n return r;\n};\n\nimport { ConsoleLogger as Logger } from './Logger';\nvar logger = new Logger('Hub');\nvar AMPLIFY_SYMBOL = typeof Symbol !== 'undefined' && typeof Symbol.for === 'function' ? Symbol.for('amplify_default') : '@@amplify_default';\n\nfunction isLegacyCallback(callback) {\n return callback.onHubCapsule !== undefined;\n}\n\nvar HubClass =\n/** @class */\nfunction () {\n function HubClass(name) {\n this.listeners = [];\n this.patterns = [];\n this.protectedChannels = ['core', 'auth', 'api', 'analytics', 'interactions', 'pubsub', 'storage', 'xr'];\n this.name = name;\n } // Note - Need to pass channel as a reference for removal to work and not anonymous function\n\n\n HubClass.prototype.remove = function (channel, listener) {\n if (channel instanceof RegExp) {\n var pattern_1 = this.patterns.find(function (_a) {\n var pattern = _a.pattern;\n return pattern.source === channel.source;\n });\n\n if (!pattern_1) {\n logger.warn(\"No listeners for \" + channel);\n return;\n }\n\n this.patterns = __spreadArrays(this.patterns.filter(function (x) {\n return x !== pattern_1;\n }));\n } else {\n var holder = this.listeners[channel];\n\n if (!holder) {\n logger.warn(\"No listeners for \" + channel);\n return;\n }\n\n this.listeners[channel] = __spreadArrays(holder.filter(function (_a) {\n var callback = _a.callback;\n return callback !== listener;\n }));\n }\n };\n\n HubClass.prototype.dispatch = function (channel, payload, source, ampSymbol) {\n if (source === void 0) {\n source = '';\n }\n\n if (this.protectedChannels.indexOf(channel) > -1) {\n var hasAccess = ampSymbol === AMPLIFY_SYMBOL;\n\n if (!hasAccess) {\n logger.warn(\"WARNING: \" + channel + \" is protected and dispatching on it can have unintended consequences\");\n }\n }\n\n var capsule = {\n channel: channel,\n payload: __assign({}, payload),\n source: source,\n patternInfo: []\n };\n\n try {\n this._toListeners(capsule);\n } catch (e) {\n logger.error(e);\n }\n };\n\n HubClass.prototype.listen = function (channel, callback, listenerName) {\n if (listenerName === void 0) {\n listenerName = 'noname';\n }\n\n var cb; // Check for legacy onHubCapsule callback for backwards compatability\n\n if (isLegacyCallback(callback)) {\n logger.warn(\"WARNING onHubCapsule is Deprecated. Please pass in a callback.\");\n cb = callback.onHubCapsule.bind(callback);\n } else if (typeof callback !== 'function') {\n throw new Error('No callback supplied to Hub');\n } else {\n cb = callback;\n }\n\n if (channel instanceof RegExp) {\n this.patterns.push({\n pattern: channel,\n callback: cb\n });\n } else {\n var holder = this.listeners[channel];\n\n if (!holder) {\n holder = [];\n this.listeners[channel] = holder;\n }\n\n holder.push({\n name: listenerName,\n callback: cb\n });\n }\n };\n\n HubClass.prototype._toListeners = function (capsule) {\n var channel = capsule.channel,\n payload = capsule.payload;\n var holder = this.listeners[channel];\n\n if (holder) {\n holder.forEach(function (listener) {\n logger.debug(\"Dispatching to \" + channel + \" with \", payload);\n\n try {\n listener.callback(capsule);\n } catch (e) {\n logger.error(e);\n }\n });\n }\n\n if (this.patterns.length > 0) {\n if (!payload.message) {\n logger.warn(\"Cannot perform pattern matching without a message key\");\n return;\n }\n\n var payloadStr_1 = payload.message;\n this.patterns.forEach(function (pattern) {\n var match = payloadStr_1.match(pattern.pattern);\n\n if (match) {\n var groups = match.slice(1);\n\n var dispatchingCapsule = __assign(__assign({}, capsule), {\n patternInfo: groups\n });\n\n try {\n pattern.callback(dispatchingCapsule);\n } catch (e) {\n logger.error(e);\n }\n }\n });\n }\n };\n\n return HubClass;\n}();\n\nexport { HubClass };\n/*We export a __default__ instance of HubClass to use it as a\npsuedo Singleton for the main messaging bus, however you can still create\nyour own instance of HubClass() for a separate \"private bus\" of events.*/\n\nvar Hub = new HubClass('__default__');\nexport default Hub;","/*\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 */\nimport { ConsoleLogger as Logger } from '../Logger';\nvar logger = new Logger('I18n');\n/**\n * Language transition class\n */\n\nvar I18n =\n/** @class */\nfunction () {\n /**\n * @constructor\n * Initialize with configurations\n * @param {Object} options\n */\n function I18n(options) {\n /**\n * @private\n */\n this._options = null;\n /**\n * @private\n */\n\n this._lang = null;\n /**\n * @private\n */\n\n this._dict = {};\n this._options = Object.assign({}, options);\n this._lang = this._options.language;\n\n if (!this._lang && typeof window !== 'undefined' && window && window.navigator) {\n this._lang = window.navigator.language;\n }\n\n logger.debug(this._lang);\n }\n /**\n * @method\n * Explicitly setting language\n * @param {String} lang\n */\n\n\n I18n.prototype.setLanguage = function (lang) {\n this._lang = lang;\n };\n /**\n * @method\n * Get value\n * @param {String} key\n * @param {String} defVal - Default value\n */\n\n\n I18n.prototype.get = function (key, defVal) {\n if (defVal === void 0) {\n defVal = undefined;\n }\n\n if (!this._lang) {\n return typeof defVal !== 'undefined' ? defVal : key;\n }\n\n var lang = this._lang;\n var val = this.getByLanguage(key, lang);\n\n if (val) {\n return val;\n }\n\n if (lang.indexOf('-') > 0) {\n val = this.getByLanguage(key, lang.split('-')[0]);\n }\n\n if (val) {\n return val;\n }\n\n return typeof defVal !== 'undefined' ? defVal : key;\n };\n /**\n * @method\n * Get value according to specified language\n * @param {String} key\n * @param {String} language - Specified langurage to be used\n * @param {String} defVal - Default value\n */\n\n\n I18n.prototype.getByLanguage = function (key, language, defVal) {\n if (defVal === void 0) {\n defVal = null;\n }\n\n if (!language) {\n return defVal;\n }\n\n var lang_dict = this._dict[language];\n\n if (!lang_dict) {\n return defVal;\n }\n\n return lang_dict[key];\n };\n /**\n * @method\n * Add vocabularies for one language\n * @param {String} langurage - Language of the dictionary\n * @param {Object} vocabularies - Object that has key-value as dictionary entry\n */\n\n\n I18n.prototype.putVocabulariesForLanguage = function (language, vocabularies) {\n var lang_dict = this._dict[language];\n\n if (!lang_dict) {\n lang_dict = this._dict[language] = {};\n }\n\n Object.assign(lang_dict, vocabularies);\n };\n /**\n * @method\n * Add vocabularies for one language\n * @param {Object} vocabularies - Object that has language as key,\n * vocabularies of each language as value\n */\n\n\n I18n.prototype.putVocabularies = function (vocabularies) {\n var _this = this;\n\n Object.keys(vocabularies).map(function (key) {\n _this.putVocabulariesForLanguage(key, vocabularies[key]);\n });\n };\n\n return I18n;\n}();\n\nexport { I18n };","/*\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 */\nimport { I18n as I18nClass } from './I18n';\nimport { ConsoleLogger as Logger } from '../Logger';\nimport Amplify from '../Amplify';\nvar logger = new Logger('I18n');\nvar _config = null;\nvar _i18n = null;\n/**\n * Export I18n APIs\n */\n\nvar I18n =\n/** @class */\nfunction () {\n function I18n() {}\n /**\n * @static\n * @method\n * Configure I18n part\n * @param {Object} config - Configuration of the I18n\n */\n\n\n I18n.configure = function (config) {\n logger.debug('configure I18n');\n\n if (!config) {\n return _config;\n }\n\n _config = Object.assign({}, _config, config.I18n || config);\n I18n.createInstance();\n return _config;\n };\n\n I18n.getModuleName = function () {\n return 'I18n';\n };\n /**\n * @static\n * @method\n * Create an instance of I18n for the library\n */\n\n\n I18n.createInstance = function () {\n logger.debug('create I18n instance');\n\n if (_i18n) {\n return;\n }\n\n _i18n = new I18nClass(_config);\n };\n /**\n * @static @method\n * Explicitly setting language\n * @param {String} lang\n */\n\n\n I18n.setLanguage = function (lang) {\n I18n.checkConfig();\n return _i18n.setLanguage(lang);\n };\n /**\n * @static @method\n * Get value\n * @param {String} key\n * @param {String} defVal - Default value\n */\n\n\n I18n.get = function (key, defVal) {\n if (!I18n.checkConfig()) {\n return typeof defVal === 'undefined' ? key : defVal;\n }\n\n return _i18n.get(key, defVal);\n };\n /**\n * @static\n * @method\n * Add vocabularies for one language\n * @param {String} langurage - Language of the dictionary\n * @param {Object} vocabularies - Object that has key-value as dictionary entry\n */\n\n\n I18n.putVocabulariesForLanguage = function (language, vocabularies) {\n I18n.checkConfig();\n return _i18n.putVocabulariesForLanguage(language, vocabularies);\n };\n /**\n * @static\n * @method\n * Add vocabularies for one language\n * @param {Object} vocabularies - Object that has language as key,\n * vocabularies of each language as value\n */\n\n\n I18n.putVocabularies = function (vocabularies) {\n I18n.checkConfig();\n return _i18n.putVocabularies(vocabularies);\n };\n\n I18n.checkConfig = function () {\n if (!_i18n) {\n _i18n = new I18nClass(_config);\n }\n\n return true;\n };\n\n return I18n;\n}();\n\nAmplify.register(I18n);\nexport default I18n;","/*\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 */\nvar __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __rest = this && this.__rest || function (s, e) {\n var t = {};\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p];\n }\n\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]];\n }\n return t;\n};\n\nimport { ConsoleLogger as Logger } from './Logger';\nimport { AWS } from './Facet';\n\nvar logger = new Logger('Signer'),\n url = require('url'),\n crypto = AWS['util'].crypto;\n\nvar DEFAULT_ALGORITHM = 'AWS4-HMAC-SHA256';\nvar IOT_SERVICE_NAME = 'iotdevicegateway';\n\nvar encrypt = function encrypt(key, src, encoding) {\n return crypto.lib.createHmac('sha256', key).update(src, 'utf8').digest(encoding);\n};\n\nvar hash = function hash(src) {\n var arg = src || '';\n return crypto.createHash('sha256').update(arg, 'utf8').digest('hex');\n};\n/**\n * @private\n * RFC 3986 compliant version of encodeURIComponent\n */\n\n\nvar escape_RFC3986 = function escape_RFC3986(component) {\n return component.replace(/[!'()*]/g, function (c) {\n return '%' + c.charCodeAt(0).toString(16).toUpperCase();\n });\n};\n/**\n * @private\n * Create canonical query string\n *\n */\n\n\nvar canonical_query = function canonical_query(query) {\n if (!query || query.length === 0) {\n return '';\n }\n\n return query.split('&').map(function (e) {\n var key_val = e.split('=');\n\n if (key_val.length === 1) {\n return e;\n } else {\n var reencoded_val = escape_RFC3986(key_val[1]);\n return key_val[0] + '=' + reencoded_val;\n }\n }).sort(function (a, b) {\n var key_a = a.split('=')[0];\n var key_b = b.split('=')[0];\n\n if (key_a === key_b) {\n return a < b ? -1 : 1;\n } else {\n return key_a < key_b ? -1 : 1;\n }\n }).join('&');\n};\n/**\n* @private\n* Create canonical headers\n*\n
\nCanonicalHeaders =\n    CanonicalHeadersEntry0 + CanonicalHeadersEntry1 + ... + CanonicalHeadersEntryN\nCanonicalHeadersEntry =\n    Lowercase(HeaderName) + ':' + Trimall(HeaderValue) + '\\n'\n
\n*/\n\n\nvar canonical_headers = function canonical_headers(headers) {\n if (!headers || Object.keys(headers).length === 0) {\n return '';\n }\n\n return Object.keys(headers).map(function (key) {\n return {\n key: key.toLowerCase(),\n value: headers[key] ? headers[key].trim().replace(/\\s+/g, ' ') : ''\n };\n }).sort(function (a, b) {\n return a.key < b.key ? -1 : 1;\n }).map(function (item) {\n return item.key + ':' + item.value;\n }).join('\\n') + '\\n';\n};\n/**\n * List of header keys included in the canonical headers.\n * @access private\n */\n\n\nvar signed_headers = function signed_headers(headers) {\n return Object.keys(headers).map(function (key) {\n return key.toLowerCase();\n }).sort().join(';');\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*/\n\n\nvar canonical_request = function canonical_request(request) {\n var url_info = url.parse(request.url);\n return [request.method || '/', encodeURIComponent(url_info.pathname).replace(/%2F/gi, '/'), canonical_query(url_info.query), canonical_headers(request.headers), signed_headers(request.headers), hash(request.data)].join('\\n');\n};\n\nvar parse_service_info = function parse_service_info(request) {\n var url_info = url.parse(request.url),\n host = url_info.host;\n var matched = host.match(/([^\\.]+)\\.(?:([^\\.]*)\\.)?amazonaws\\.com$/);\n var parsed = (matched || []).slice(1, 3);\n\n if (parsed[1] === 'es') {\n // 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\nvar credential_scope = function credential_scope(d_str, region, service) {\n return [d_str, region, service, 'aws4_request'].join('/');\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*/\n\n\nvar string_to_sign = function string_to_sign(algorithm, canonical_request, dt_str, scope) {\n return [algorithm, dt_str, scope, hash(canonical_request)].join('\\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*/\n\n\nvar get_signing_key = function get_signing_key(secret_key, d_str, service_info) {\n logger.debug(service_info);\n var 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 return k_signing;\n};\n\nvar get_signature = function get_signature(signing_key, str_to_sign) {\n return encrypt(signing_key, str_to_sign, 'hex');\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 */\n\n\nvar get_authorization_header = function get_authorization_header(algorithm, access_key, scope, signed_headers, signature) {\n return [algorithm + ' ' + 'Credential=' + access_key + '/' + scope, 'SignedHeaders=' + signed_headers, 'Signature=' + signature].join(', ');\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 */\n\n\nvar Signer =\n/** @class */\nfunction () {\n function Signer() {}\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
\n  request: {\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
\n  access_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
\n  service_info: {\n      service: ...,\n      region: ...\n  }\n  
\n *\n * @returns {object} Signed HTTP request\n */\n\n\n Signer.sign = function (request, access_info, service_info) {\n if (service_info === void 0) {\n service_info = null;\n }\n\n request.headers = request.headers || {}; // datetime string and date string\n\n var dt = new Date(),\n dt_str = dt.toISOString().replace(/[:\\-]|\\.\\d{3}/g, ''),\n d_str = dt_str.substr(0, 8);\n var url_info = url.parse(request.url);\n request.headers['host'] = url_info.host;\n request.headers['x-amz-date'] = dt_str;\n\n if (access_info.session_token) {\n request.headers['X-Amz-Security-Token'] = access_info.session_token;\n } // Task 1: Create a Canonical Request\n\n\n var request_str = canonical_request(request);\n logger.debug(request_str); // Task 2: Create a String to Sign\n\n var serviceInfo = service_info || parse_service_info(request),\n scope = credential_scope(d_str, serviceInfo.region, serviceInfo.service),\n str_to_sign = string_to_sign(DEFAULT_ALGORITHM, request_str, dt_str, scope); // Task 3: Calculate the Signature\n\n var signing_key = get_signing_key(access_info.secret_key, d_str, serviceInfo),\n signature = get_signature(signing_key, str_to_sign); // Task 4: Adding the Signing information to the Request\n\n var authorization_header = get_authorization_header(DEFAULT_ALGORITHM, access_info.access_key, scope, signed_headers(request.headers), signature);\n request.headers['Authorization'] = authorization_header;\n return request;\n };\n\n Signer.signUrl = function (urlOrRequest, accessInfo, serviceInfo, expiration) {\n var urlToSign = typeof urlOrRequest === 'object' ? urlOrRequest.url : urlOrRequest;\n var method = typeof urlOrRequest === 'object' ? urlOrRequest.method : 'GET';\n var body = typeof urlOrRequest === 'object' ? urlOrRequest.body : undefined;\n var now = new Date().toISOString().replace(/[:\\-]|\\.\\d{3}/g, '');\n var today = now.substr(0, 8); // Intentionally discarding search\n\n var _a = url.parse(urlToSign, true, true),\n search = _a.search,\n parsedUrl = __rest(_a, [\"search\"]);\n\n var host = parsedUrl.host;\n var signedHeaders = {\n host: host\n };\n\n var _b = serviceInfo || parse_service_info({\n url: url.format(parsedUrl)\n }),\n region = _b.region,\n service = _b.service;\n\n var credentialScope = credential_scope(today, region, service); // IoT service does not allow the session token in the canonical request\n // https://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html\n\n var sessionTokenRequired = accessInfo.session_token && service !== IOT_SERVICE_NAME;\n\n var queryParams = __assign(__assign(__assign({\n 'X-Amz-Algorithm': DEFAULT_ALGORITHM,\n 'X-Amz-Credential': [accessInfo.access_key, credentialScope].join('/'),\n 'X-Amz-Date': now.substr(0, 16)\n }, sessionTokenRequired ? {\n 'X-Amz-Security-Token': \"\" + accessInfo.session_token\n } : {}), expiration ? {\n 'X-Amz-Expires': \"\" + expiration\n } : {}), {\n 'X-Amz-SignedHeaders': Object.keys(signedHeaders).join(',')\n });\n\n var canonicalRequest = canonical_request({\n method: method,\n url: url.format(__assign(__assign({}, parsedUrl), {\n query: __assign(__assign({}, parsedUrl.query), queryParams)\n })),\n headers: signedHeaders,\n data: body\n });\n var stringToSign = string_to_sign(DEFAULT_ALGORITHM, canonicalRequest, now, credentialScope);\n var signing_key = get_signing_key(accessInfo.secret_key, today, {\n region: region,\n service: service\n });\n var signature = get_signature(signing_key, stringToSign);\n\n var additionalQueryParams = __assign({\n 'X-Amz-Signature': signature\n }, accessInfo.session_token && {\n 'X-Amz-Security-Token': accessInfo.session_token\n });\n\n var result = url.format({\n protocol: parsedUrl.protocol,\n slashes: true,\n hostname: parsedUrl.hostname,\n port: parsedUrl.port,\n pathname: parsedUrl.pathname,\n query: __assign(__assign(__assign({}, parsedUrl.query), queryParams), additionalQueryParams)\n });\n return result;\n };\n\n return Signer;\n}();\n\nexport default Signer;","import { ConsoleLogger as Logger } from './Logger';\nvar logger = new Logger('Parser');\n\nvar Parser =\n/** @class */\nfunction () {\n function Parser() {}\n\n Parser.parseMobilehubConfig = function (config) {\n var amplifyConfig = {}; // Analytics\n\n if (config['aws_mobile_analytics_app_id']) {\n var Analytics = {\n AWSPinpoint: {\n appId: config['aws_mobile_analytics_app_id'],\n region: config['aws_mobile_analytics_app_region']\n }\n };\n amplifyConfig.Analytics = Analytics;\n } // Auth\n\n\n if (config['aws_cognito_identity_pool_id'] || config['aws_user_pools_id']) {\n var Auth = {\n userPoolId: config['aws_user_pools_id'],\n userPoolWebClientId: config['aws_user_pools_web_client_id'],\n region: config['aws_cognito_region'],\n identityPoolId: config['aws_cognito_identity_pool_id'],\n mandatorySignIn: config['aws_mandatory_sign_in'] === 'enable' ? true : false\n };\n amplifyConfig.Auth = Auth;\n } // Storage\n\n\n var storageConfig;\n\n if (config['aws_user_files_s3_bucket']) {\n storageConfig = {\n AWSS3: {\n bucket: config['aws_user_files_s3_bucket'],\n region: config['aws_user_files_s3_bucket_region'],\n dangerouslyConnectToHttpEndpointForTesting: config['aws_user_files_s3_dangerously_connect_to_http_endpoint_for_testing']\n }\n };\n } else {\n storageConfig = config ? config.Storage || config : {};\n }\n\n amplifyConfig.Analytics = Object.assign({}, amplifyConfig.Analytics, config.Analytics);\n amplifyConfig.Auth = Object.assign({}, amplifyConfig.Auth, config.Auth);\n amplifyConfig.Storage = Object.assign({}, storageConfig);\n logger.debug('parse config', config, 'to amplifyconfig', amplifyConfig);\n return amplifyConfig;\n };\n\n return Parser;\n}();\n\nexport default Parser;","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n/*\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\nimport { ConsoleLogger as Logger } from '../Logger';\nimport JS from '../JS';\nvar logger = new Logger('CognitoCredentials');\nvar waitForInit = new Promise(function (res, rej) {\n if (!JS.browserOrNode().isBrowser) {\n logger.debug('not in the browser, directly resolved');\n return res();\n }\n\n var ga = window['gapi'] && window['gapi'].auth2 ? window['gapi'].auth2 : null;\n\n if (ga) {\n logger.debug('google api already loaded');\n return res();\n } else {\n setTimeout(function () {\n return res();\n }, 2000);\n }\n});\n\nvar GoogleOAuth =\n/** @class */\nfunction () {\n function GoogleOAuth() {\n this.initialized = false;\n this.refreshGoogleToken = this.refreshGoogleToken.bind(this);\n this._refreshGoogleTokenImpl = this._refreshGoogleTokenImpl.bind(this);\n }\n\n GoogleOAuth.prototype.refreshGoogleToken = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!this.initialized) return [3\n /*break*/\n , 2];\n logger.debug('need to wait for the Google SDK loaded');\n return [4\n /*yield*/\n , waitForInit];\n\n case 1:\n _a.sent();\n\n this.initialized = true;\n logger.debug('finish waiting');\n _a.label = 2;\n\n case 2:\n return [2\n /*return*/\n , this._refreshGoogleTokenImpl()];\n }\n });\n });\n };\n\n GoogleOAuth.prototype._refreshGoogleTokenImpl = function () {\n var ga = null;\n if (JS.browserOrNode().isBrowser) ga = window['gapi'] && window['gapi'].auth2 ? window['gapi'].auth2 : null;\n\n if (!ga) {\n logger.debug('no gapi auth2 available');\n return Promise.reject('no gapi auth2 available');\n }\n\n return new Promise(function (res, rej) {\n ga.getAuthInstance().then(function (googleAuth) {\n if (!googleAuth) {\n console.log('google Auth undefiend');\n rej('google Auth undefiend');\n }\n\n var googleUser = googleAuth.currentUser.get(); // refresh the token\n\n if (googleUser.isSignedIn()) {\n logger.debug('refreshing the google access token');\n googleUser.reloadAuthResponse().then(function (authResponse) {\n var id_token = authResponse.id_token,\n expires_at = authResponse.expires_at;\n var profile = googleUser.getBasicProfile();\n var user = {\n email: profile.getEmail(),\n name: profile.getName()\n };\n res({\n token: id_token,\n expires_at: expires_at\n });\n });\n } else {\n rej('User is not signed in with Google');\n }\n }).catch(function (err) {\n logger.debug('Failed to refresh google token', err);\n rej('Failed to refresh google token');\n });\n });\n };\n\n return GoogleOAuth;\n}();\n\nexport default GoogleOAuth;","var __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n/*\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\nimport { ConsoleLogger as Logger } from '../Logger';\nimport JS from '../JS';\nvar logger = new Logger('CognitoCredentials');\nvar waitForInit = new Promise(function (res, rej) {\n if (!JS.browserOrNode().isBrowser) {\n logger.debug('not in the browser, directly resolved');\n return res();\n }\n\n var fb = window['FB'];\n\n if (fb) {\n logger.debug('FB SDK already loaded');\n return res();\n } else {\n setTimeout(function () {\n return res();\n }, 2000);\n }\n});\n\nvar FacebookOAuth =\n/** @class */\nfunction () {\n function FacebookOAuth() {\n this.initialized = false;\n this.refreshFacebookToken = this.refreshFacebookToken.bind(this);\n this._refreshFacebookTokenImpl = this._refreshFacebookTokenImpl.bind(this);\n }\n\n FacebookOAuth.prototype.refreshFacebookToken = function () {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!this.initialized) return [3\n /*break*/\n , 2];\n logger.debug('need to wait for the Facebook SDK loaded');\n return [4\n /*yield*/\n , waitForInit];\n\n case 1:\n _a.sent();\n\n this.initialized = true;\n logger.debug('finish waiting');\n _a.label = 2;\n\n case 2:\n return [2\n /*return*/\n , this._refreshFacebookTokenImpl()];\n }\n });\n });\n };\n\n FacebookOAuth.prototype._refreshFacebookTokenImpl = function () {\n var fb = null;\n if (JS.browserOrNode().isBrowser) fb = window['FB'];\n\n if (!fb) {\n logger.debug('no fb sdk available');\n return Promise.reject('no fb sdk available');\n }\n\n return new Promise(function (res, rej) {\n fb.getLoginStatus(function (fbResponse) {\n if (!fbResponse || !fbResponse.authResponse) {\n logger.debug('no response from facebook when refreshing the jwt token');\n rej('no response from facebook when refreshing the jwt token');\n }\n\n var response = fbResponse.authResponse;\n var accessToken = response.accessToken,\n expiresIn = response.expiresIn;\n var date = new Date();\n var expires_at = expiresIn * 1000 + date.getTime();\n\n if (!accessToken) {\n logger.debug('the jwtToken is undefined');\n rej('the jwtToken is undefined');\n }\n\n res({\n token: accessToken,\n expires_at: expires_at\n });\n }, {\n scope: 'public_profile,email'\n });\n });\n };\n\n return FacebookOAuth;\n}();\n\nexport default FacebookOAuth;","/*\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 */\nimport GoogleOAuthClass from './GoogleOAuth';\nimport FacebookOAuthClass from './FacebookOAuth';\nvar GoogleOAuth = new GoogleOAuthClass();\nvar FacebookOAuth = new FacebookOAuthClass();\nexport { GoogleOAuth, FacebookOAuth };","/*\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 */\nvar dataMemory = {};\n/** @class */\n\nvar MemoryStorage =\n/** @class */\nfunction () {\n function MemoryStorage() {}\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\n\n MemoryStorage.setItem = function (key, value) {\n dataMemory[key] = value;\n return dataMemory[key];\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 (key) {\n return Object.prototype.hasOwnProperty.call(dataMemory, key) ? dataMemory[key] : undefined;\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 (key) {\n return delete dataMemory[key];\n };\n /**\n * This is used to clear the storage\n * @returns {string} nothing\n */\n\n\n MemoryStorage.clear = function () {\n dataMemory = {};\n return dataMemory;\n };\n\n return MemoryStorage;\n}();\n\nexport { MemoryStorage };\n\nvar StorageHelper =\n/** @class */\nfunction () {\n /**\n * This is used to get a storage object\n * @returns {object} the storage\n */\n function StorageHelper() {\n try {\n this.storageWindow = window.localStorage;\n this.storageWindow.setItem('aws.amplify.test-ls', 1);\n this.storageWindow.removeItem('aws.amplify.test-ls');\n } catch (exception) {\n this.storageWindow = MemoryStorage;\n }\n }\n /**\n * This is used to return the storage\n * @returns {object} the storage\n */\n\n\n StorageHelper.prototype.getStorage = function () {\n return this.storageWindow;\n };\n\n return StorageHelper;\n}();\n\nexport default StorageHelper;","var __assign = this && this.__assign || function () {\n __assign = Object.assign || function (t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n\n for (var p in s) {\n if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n }\n\n return t;\n };\n\n return __assign.apply(this, arguments);\n};\n\nvar __awaiter = this && this.__awaiter || function (thisArg, _arguments, P, generator) {\n function adopt(value) {\n return value instanceof P ? value : new P(function (resolve) {\n resolve(value);\n });\n }\n\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) {\n try {\n step(generator.next(value));\n } catch (e) {\n reject(e);\n }\n }\n\n function rejected(value) {\n try {\n step(generator[\"throw\"](value));\n } catch (e) {\n reject(e);\n }\n }\n\n function step(result) {\n result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n }\n\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\n\nvar __generator = this && this.__generator || function (thisArg, body) {\n var _ = {\n label: 0,\n sent: function sent() {\n if (t[0] & 1) throw t[1];\n return t[1];\n },\n trys: [],\n ops: []\n },\n f,\n y,\n t,\n g;\n return g = {\n next: verb(0),\n \"throw\": verb(1),\n \"return\": verb(2)\n }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n return this;\n }), g;\n\n function verb(n) {\n return function (v) {\n return step([n, v]);\n };\n }\n\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n\n while (_) {\n try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n\n switch (op[0]) {\n case 0:\n case 1:\n t = op;\n break;\n\n case 4:\n _.label++;\n return {\n value: op[1],\n done: false\n };\n\n case 5:\n _.label++;\n y = op[1];\n op = [0];\n continue;\n\n case 7:\n op = _.ops.pop();\n\n _.trys.pop();\n\n continue;\n\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n _ = 0;\n continue;\n }\n\n if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n _.label = op[1];\n break;\n }\n\n if (op[0] === 6 && _.label < t[1]) {\n _.label = t[1];\n t = op;\n break;\n }\n\n if (t && _.label < t[2]) {\n _.label = t[2];\n\n _.ops.push(op);\n\n break;\n }\n\n if (t[2]) _.ops.pop();\n\n _.trys.pop();\n\n continue;\n }\n\n op = body.call(thisArg, _);\n } catch (e) {\n op = [6, e];\n y = 0;\n } finally {\n f = t = 0;\n }\n }\n\n if (op[0] & 5) throw op[1];\n return {\n value: op[0] ? op[1] : void 0,\n done: true\n };\n }\n};\n\nimport { ConsoleLogger as Logger } from './Logger';\nimport StorageHelper from './StorageHelper';\nimport { AWS } from './Facet';\nimport JS from './JS';\nimport { FacebookOAuth, GoogleOAuth } from './OAuthHelper';\nimport Amplify from './Amplify';\nvar logger = new Logger('Credentials');\n\nvar Credentials =\n/** @class */\nfunction () {\n function Credentials(config) {\n this._gettingCredPromise = null;\n this._refreshHandlers = {};\n this.configure(config);\n this._refreshHandlers['google'] = GoogleOAuth.refreshGoogleToken;\n this._refreshHandlers['facebook'] = FacebookOAuth.refreshFacebookToken;\n }\n\n Credentials.prototype.getCredSource = function () {\n return this._credentials_source;\n };\n\n Credentials.prototype.configure = function (config) {\n if (!config) return this._config || {};\n this._config = Object.assign({}, this._config, config);\n var refreshHandlers = this._config.refreshHandlers; // If the developer has provided an object of refresh handlers,\n // then we can merge the provided handlers with the current handlers.\n\n if (refreshHandlers) {\n this._refreshHandlers = __assign(__assign({}, this._refreshHandlers), refreshHandlers);\n }\n\n this._storage = this._config.storage;\n\n if (!this._storage) {\n this._storage = new StorageHelper().getStorage();\n }\n\n this._storageSync = Promise.resolve();\n\n if (typeof this._storage['sync'] === 'function') {\n this._storageSync = this._storage['sync']();\n }\n\n return this._config;\n };\n\n Credentials.prototype.get = function () {\n logger.debug('getting credentials');\n return this._pickupCredentials();\n };\n\n Credentials.prototype._pickupCredentials = function () {\n logger.debug('picking up credentials');\n\n if (!this._gettingCredPromise || !this._gettingCredPromise.isPending()) {\n logger.debug('getting new cred promise');\n\n if (AWS.config && AWS.config.credentials && AWS.config.credentials instanceof AWS.Credentials) {\n this._gettingCredPromise = JS.makeQuerablePromise(this._setCredentialsFromAWS());\n } else {\n this._gettingCredPromise = JS.makeQuerablePromise(this._keepAlive());\n }\n } else {\n logger.debug('getting old cred promise');\n }\n\n return this._gettingCredPromise;\n };\n\n Credentials.prototype._keepAlive = function () {\n logger.debug('checking if credentials exists and not expired');\n var cred = this._credentials;\n\n if (cred && !this._isExpired(cred)) {\n logger.debug('credentials not changed and not expired, directly return');\n return Promise.resolve(cred);\n }\n\n logger.debug('need to get a new credential or refresh the existing one');\n\n if (Amplify.Auth && typeof Amplify.Auth.currentUserCredentials === 'function') {\n return Amplify.Auth.currentUserCredentials();\n } else {\n return Promise.reject('No Auth module registered in Amplify');\n }\n };\n\n Credentials.prototype.refreshFederatedToken = function (federatedInfo) {\n var _this = this;\n\n logger.debug('Getting federated credentials');\n var provider = federatedInfo.provider,\n user = federatedInfo.user;\n var token = federatedInfo.token;\n var expires_at = federatedInfo.expires_at;\n var identity_id = federatedInfo.identity_id;\n var that = this;\n logger.debug('checking if federated jwt token expired');\n\n if (expires_at > new Date().getTime()) {\n // if not expired\n logger.debug('token not expired');\n return this._setCredentialsFromFederation({\n provider: provider,\n token: token,\n user: user,\n identity_id: identity_id,\n expires_at: expires_at\n });\n } else {\n // if refresh handler exists\n if (that._refreshHandlers[provider] && typeof that._refreshHandlers[provider] === 'function') {\n logger.debug('getting refreshed jwt token from federation provider');\n return that._refreshHandlers[provider]().then(function (data) {\n logger.debug('refresh federated token sucessfully', data);\n token = data.token;\n identity_id = data.identity_id;\n expires_at = data.expires_at;\n return that._setCredentialsFromFederation({\n provider: provider,\n token: token,\n user: user,\n identity_id: identity_id,\n expires_at: expires_at\n });\n }).catch(function (e) {\n logger.debug('refresh federated token failed', e);\n\n _this.clear();\n\n return Promise.reject('refreshing federation token failed: ' + e);\n });\n } else {\n logger.debug('no refresh handler for provider:', provider);\n this.clear();\n return Promise.reject('no refresh handler for provider');\n }\n }\n };\n\n Credentials.prototype._isExpired = function (credentials) {\n if (!credentials) {\n logger.debug('no credentials for expiration check');\n return true;\n }\n\n logger.debug('is this credentials expired?', credentials);\n var ts = new Date().getTime();\n var delta = 10 * 60 * 1000; // 10 minutes\n\n var expired = credentials.expired,\n expireTime = credentials.expireTime;\n\n if (!expired && expireTime > ts + delta) {\n return false;\n }\n\n return true;\n };\n\n Credentials.prototype._setCredentialsForGuest = function () {\n return __awaiter(this, void 0, void 0, function () {\n var attempted, _a, identityPoolId, region, mandatorySignIn, identityId, e_1, credentials, that;\n\n var _this = this;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n attempted = false;\n logger.debug('setting credentials for guest');\n _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region, mandatorySignIn = _a.mandatorySignIn;\n\n if (mandatorySignIn) {\n return [2\n /*return*/\n , Promise.reject('cannot get guest credentials when mandatory signin enabled')];\n }\n\n if (!identityPoolId) {\n logger.debug('No Cognito Federated Identity pool provided');\n return [2\n /*return*/\n , Promise.reject('No Cognito Federated Identity pool provided')];\n }\n\n identityId = undefined;\n _b.label = 1;\n\n case 1:\n _b.trys.push([1, 3,, 4]);\n\n return [4\n /*yield*/\n , this._storageSync];\n\n case 2:\n _b.sent();\n\n identityId = this._storage.getItem('CognitoIdentityId-' + identityPoolId);\n return [3\n /*break*/\n , 4];\n\n case 3:\n e_1 = _b.sent();\n logger.debug('Failed to get the cached identityId', e_1);\n return [3\n /*break*/\n , 4];\n\n case 4:\n credentials = new AWS.CognitoIdentityCredentials({\n IdentityPoolId: identityPoolId,\n IdentityId: identityId ? identityId : undefined\n }, {\n region: region\n });\n that = this;\n return [2\n /*return*/\n , this._loadCredentials(credentials, 'guest', false, null).then(function (res) {\n return res;\n }).catch(function (e) {\n return __awaiter(_this, void 0, void 0, function () {\n var newCredentials;\n return __generator(this, function (_a) {\n // If identity id is deleted in the console, we make one attempt to recreate it\n // and remove existing id from cache.\n if (e.code === 'ResourceNotFoundException' && e.message === \"Identity '\" + identityId + \"' not found.\" && !attempted) {\n attempted = true;\n logger.debug('Failed to load guest credentials');\n\n this._storage.removeItem('CognitoIdentityId-' + identityPoolId);\n\n credentials.clearCachedId();\n newCredentials = new AWS.CognitoIdentityCredentials({\n IdentityPoolId: identityPoolId,\n IdentityId: undefined\n }, {\n region: region\n });\n return [2\n /*return*/\n , this._loadCredentials(newCredentials, 'guest', false, null)];\n } else {\n return [2\n /*return*/\n , e];\n }\n\n return [2\n /*return*/\n ];\n });\n });\n })];\n }\n });\n });\n };\n\n Credentials.prototype._setCredentialsFromAWS = function () {\n var credentials = AWS.config.credentials;\n logger.debug('setting credentials from aws');\n var that = this;\n\n if (credentials instanceof AWS.Credentials) {\n return Promise.resolve(credentials);\n } else {\n logger.debug('AWS.config.credentials is not an instance of AWS Credentials');\n return Promise.reject('AWS.config.credentials is not an instance of AWS Credentials');\n }\n };\n\n Credentials.prototype._setCredentialsFromFederation = function (params) {\n var provider = params.provider,\n token = params.token,\n identity_id = params.identity_id,\n user = params.user,\n expires_at = params.expires_at;\n var domains = {\n google: 'accounts.google.com',\n facebook: 'graph.facebook.com',\n amazon: 'www.amazon.com',\n developer: 'cognito-identity.amazonaws.com'\n }; // Use custom provider url instead of the predefined ones\n\n var domain = domains[provider] || provider;\n\n if (!domain) {\n return Promise.reject('You must specify a federated provider');\n }\n\n var logins = {};\n logins[domain] = token;\n var _a = this._config,\n identityPoolId = _a.identityPoolId,\n region = _a.region;\n\n if (!identityPoolId) {\n logger.debug('No Cognito Federated Identity pool provided');\n return Promise.reject('No Cognito Federated Identity pool provided');\n }\n\n var credentials = new AWS.CognitoIdentityCredentials({\n IdentityPoolId: identityPoolId,\n IdentityId: identity_id,\n Logins: logins\n }, {\n region: region\n });\n return this._loadCredentials(credentials, 'federated', true, params);\n };\n\n Credentials.prototype._setCredentialsFromSession = function (session) {\n logger.debug('set credentials from session');\n var idToken = session.getIdToken().getJwtToken();\n var _a = this._config,\n region = _a.region,\n userPoolId = _a.userPoolId,\n identityPoolId = _a.identityPoolId;\n\n if (!identityPoolId) {\n logger.debug('No Cognito Federated Identity pool provided');\n return Promise.reject('No Cognito Federated Identity pool provided');\n }\n\n var key = 'cognito-idp.' + region + '.amazonaws.com/' + userPoolId;\n var logins = {};\n logins[key] = idToken;\n var credentials = new AWS.CognitoIdentityCredentials({\n IdentityPoolId: identityPoolId,\n Logins: logins\n }, {\n region: region\n });\n return this._loadCredentials(credentials, 'userPool', true, null);\n };\n\n Credentials.prototype._loadCredentials = function (credentials, source, authenticated, info) {\n var _this = this;\n\n var that = this;\n var identityPoolId = this._config.identityPoolId;\n return new Promise(function (res, rej) {\n credentials.get(function (err) {\n return __awaiter(_this, void 0, void 0, function () {\n var user, provider, token, expires_at, identity_id, e_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (err) {\n logger.debug('Failed to load credentials', credentials);\n rej(err);\n return [2\n /*return*/\n ];\n }\n\n logger.debug('Load credentials successfully', credentials);\n that._credentials = credentials;\n that._credentials.authenticated = authenticated;\n that._credentials_source = source;\n if (!(source === 'federated')) return [3\n /*break*/\n , 3];\n user = Object.assign({\n id: this._credentials.identityId\n }, info.user);\n provider = info.provider, token = info.token, expires_at = info.expires_at, identity_id = info.identity_id;\n\n try {\n this._storage.setItem('aws-amplify-federatedInfo', JSON.stringify({\n provider: provider,\n token: token,\n user: user,\n expires_at: expires_at,\n identity_id: identity_id\n }));\n } catch (e) {\n logger.debug('Failed to put federated info into auth storage', e);\n }\n\n if (!(Amplify.Cache && typeof Amplify.Cache.setItem === 'function')) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , Amplify.Cache.setItem('federatedInfo', {\n provider: provider,\n token: token,\n user: user,\n expires_at: expires_at,\n identity_id: identity_id\n }, {\n priority: 1\n })];\n\n case 1:\n _a.sent();\n\n return [3\n /*break*/\n , 3];\n\n case 2:\n logger.debug('No Cache module registered in Amplify');\n _a.label = 3;\n\n case 3:\n if (!(source === 'guest')) return [3\n /*break*/\n , 7];\n _a.label = 4;\n\n case 4:\n _a.trys.push([4, 6,, 7]);\n\n return [4\n /*yield*/\n , this._storageSync];\n\n case 5:\n _a.sent();\n\n this._storage.setItem('CognitoIdentityId-' + identityPoolId, credentials.identityId);\n\n return [3\n /*break*/\n , 7];\n\n case 6:\n e_2 = _a.sent();\n logger.debug('Failed to cache identityId', e_2);\n return [3\n /*break*/\n , 7];\n\n case 7:\n res(that._credentials);\n return [2\n /*return*/\n ];\n }\n });\n });\n });\n });\n };\n\n Credentials.prototype.set = function (params, source) {\n if (source === 'session') {\n return this._setCredentialsFromSession(params);\n } else if (source === 'federation') {\n return this._setCredentialsFromFederation(params);\n } else if (source === 'guest') {\n return this._setCredentialsForGuest();\n } else {\n logger.debug('no source specified for setting credentials');\n return Promise.reject('invalid source');\n }\n };\n\n Credentials.prototype.clear = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, identityPoolId, region, credentials;\n\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this._config, identityPoolId = _a.identityPoolId, region = _a.region;\n\n if (identityPoolId) {\n credentials = new AWS.CognitoIdentityCredentials({\n IdentityPoolId: identityPoolId\n }, {\n region: region\n });\n credentials.clearCachedId();\n }\n\n this._credentials = null;\n this._credentials_source = null;\n\n this._storage.removeItem('aws-amplify-federatedInfo');\n\n if (!(Amplify.Cache && typeof Amplify.Cache.setItem === 'function')) return [3\n /*break*/\n , 2];\n return [4\n /*yield*/\n , Amplify.Cache.removeItem('federatedInfo')];\n\n case 1:\n _b.sent();\n\n return [3\n /*break*/\n , 3];\n\n case 2:\n logger.debug('No Cache module registered in Amplify');\n _b.label = 3;\n\n case 3:\n return [2\n /*return*/\n ];\n }\n });\n });\n };\n /**\n * Compact version of credentials\n * @param {Object} credentials\n * @return {Object} - Credentials\n */\n\n\n Credentials.prototype.shear = function (credentials) {\n return {\n accessKeyId: credentials.accessKeyId,\n sessionToken: credentials.sessionToken,\n secretAccessKey: credentials.secretAccessKey,\n identityId: credentials.identityId,\n authenticated: credentials.authenticated\n };\n };\n\n return Credentials;\n}();\n\nexport { Credentials };\nvar instance = new Credentials(null);\nexport default instance;","/*\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 */\nimport JS from '../JS';\nimport MemoryStorage from '../StorageHelper';\nvar Linking = {};\nvar AppState = {\n addEventListener: function addEventListener(action, handler) {\n return;\n }\n}; // if not in react native, just use local storage\n\nvar AsyncStorage = JS.browserOrNode().isBrowser ? new MemoryStorage().getStorage() : undefined;\nexport { Linking, AppState, AsyncStorage };","/*\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 */\nvar packageInfo = require('../../package.json');\n\nvar Platform = {\n userAgent: \"aws-amplify/\" + packageInfo.version + \" js\",\n product: '',\n navigator: null,\n isReactNative: false\n};\n\nif (typeof navigator !== 'undefined' && navigator.product) {\n Platform.product = navigator.product || '';\n Platform.navigator = navigator || null;\n\n switch (navigator.product) {\n case 'ReactNative':\n Platform.userAgent = \"aws-amplify/\" + packageInfo.version + \" react-native\";\n Platform.isReactNative = true;\n break;\n\n default:\n Platform.userAgent = \"aws-amplify/\" + packageInfo.version + \" js\";\n Platform.isReactNative = false;\n break;\n }\n}\n\nexport default Platform;","/**\n * Copyright 2018 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 */\nimport { ConsoleLogger as Logger } from '../Logger';\nimport JS from '../JS';\nimport Amplify from '../Amplify';\n/**\n * Provides a means to registering a service worker in the browser\n * and communicating with it via postMessage events.\n * https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/\n *\n * postMessage events are currently not supported in all browsers. See:\n * https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n *\n * At the minmum this class will register the service worker and listen\n * and attempt to dispatch messages on state change and record analytics\n * events based on the service worker lifecycle.\n */\n\nvar ServiceWorkerClass =\n/** @class */\nfunction () {\n function ServiceWorkerClass() {\n // The AWS Amplify logger\n this._logger = new Logger('ServiceWorker');\n }\n\n Object.defineProperty(ServiceWorkerClass.prototype, \"serviceWorker\", {\n /**\n * Get the currently active service worker\n */\n get: function get() {\n return this._serviceWorker;\n },\n enumerable: true,\n configurable: true\n });\n /**\n * Register the service-worker.js file in the browser\n * Make sure the service-worker.js is part of the build\n * for example with Angular, modify the angular-cli.json file\n * and add to \"assets\" array \"service-worker.js\"\n * @param {string} - (optional) Service worker file. Defaults to \"/service-worker.js\"\n * @param {string} - (optional) The service worker scope. Defaults to \"/\"\n * - API Doc: https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register\n * @returns {Promise}\n *\t- resolve(ServiceWorkerRegistration)\n *\t- reject(Error)\n **/\n\n ServiceWorkerClass.prototype.register = function (filePath, scope) {\n var _this = this;\n\n if (filePath === void 0) {\n filePath = '/service-worker.js';\n }\n\n if (scope === void 0) {\n scope = '/';\n }\n\n this._logger.debug(\"registering \" + filePath);\n\n this._logger.debug(\"registering service worker with scope \" + scope);\n\n return new Promise(function (resolve, reject) {\n if (navigator && 'serviceWorker' in navigator) {\n navigator.serviceWorker.register(filePath, {\n scope: scope\n }).then(function (registration) {\n if (registration.installing) {\n _this._serviceWorker = registration.installing;\n } else if (registration.waiting) {\n _this._serviceWorker = registration.waiting;\n } else if (registration.active) {\n _this._serviceWorker = registration.active;\n }\n\n _this._registration = registration;\n\n _this._setupListeners();\n\n _this._logger.debug(\"Service Worker Registration Success: \" + registration);\n\n return resolve(registration);\n }).catch(function (error) {\n _this._logger.debug(\"Service Worker Registration Failed \" + error);\n\n return reject(error);\n });\n } else {\n return reject(new Error('Service Worker not available'));\n }\n });\n };\n /**\n * Enable web push notifications. If not subscribed, a new subscription will\n * be created and registered.\n * \tTest Push Server: https://web-push-codelab.glitch.me/\n * \tPush Server Libraries: https://github.com/web-push-libs/\n * \tAPI Doc: https://developers.google.com/web/fundamentals/codelabs/push-notifications/\n * @param publicKey\n * @returns {Promise}\n * \t- resolve(PushSubscription)\n * - reject(Error)\n */\n\n\n ServiceWorkerClass.prototype.enablePush = function (publicKey) {\n var _this = this;\n\n if (!this._registration) throw new Error('Service Worker not registered');\n this._publicKey = publicKey;\n return new Promise(function (resolve, reject) {\n if (JS.browserOrNode().isBrowser) {\n _this._registration.pushManager.getSubscription().then(function (subscription) {\n if (subscription) {\n _this._subscription = subscription;\n\n _this._logger.debug(\"User is subscribed to push: \" + JSON.stringify(subscription));\n\n resolve(subscription);\n } else {\n _this._logger.debug(\"User is NOT subscribed to push\");\n\n return _this._registration.pushManager.subscribe({\n userVisibleOnly: true,\n applicationServerKey: _this._urlB64ToUint8Array(publicKey)\n }).then(function (subscription) {\n _this._subscription = subscription;\n\n _this._logger.debug(\"User subscribed: \" + JSON.stringify(subscription));\n\n resolve(subscription);\n }).catch(function (error) {\n _this._logger.error(error);\n });\n }\n });\n } else {\n return reject(new Error('Service Worker not available'));\n }\n });\n };\n /**\n * Convert a base64 encoded string to a Uint8 array for the push server key\n * @param base64String\n */\n\n\n ServiceWorkerClass.prototype._urlB64ToUint8Array = function (base64String) {\n var padding = '='.repeat((4 - base64String.length % 4) % 4);\n var base64 = (base64String + padding).replace(/\\-/g, '+').replace(/_/g, '/');\n var rawData = window.atob(base64);\n var outputArray = new Uint8Array(rawData.length);\n\n for (var i = 0; i < rawData.length; ++i) {\n outputArray[i] = rawData.charCodeAt(i);\n }\n\n return outputArray;\n };\n /**\n * Send a message to the service worker. The service worker needs\n * to implement `self.addEventListener('message') to handle the\n * message. This ***currently*** does not work in Safari or IE.\n * @param {object | string} - An arbitrary JSON object or string message to send to the service worker\n *\t- see: https://developer.mozilla.org/en-US/docs/Web/API/Transferable\n * @returns {Promise}\n **/\n\n\n ServiceWorkerClass.prototype.send = function (message) {\n if (this._serviceWorker) {\n this._serviceWorker.postMessage(typeof message === 'object' ? JSON.stringify(message) : message);\n }\n };\n /**\n * Listen for service worker state change and message events\n * https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/state\n **/\n\n\n ServiceWorkerClass.prototype._setupListeners = function () {\n var _this = this;\n\n this._serviceWorker.addEventListener('statechange', function (event) {\n var currentState = _this._serviceWorker.state;\n\n _this._logger.debug(\"ServiceWorker statechange: \" + currentState);\n\n if (Amplify.Analytics && typeof Amplify.Analytics.record === 'function') {\n Amplify.Analytics.record({\n name: 'ServiceWorker',\n attributes: {\n state: currentState\n }\n });\n }\n });\n\n this._serviceWorker.addEventListener('message', function (event) {\n _this._logger.debug(\"ServiceWorker message event: \" + event);\n });\n };\n\n return ServiceWorkerClass;\n}();\n\nexport default ServiceWorkerClass;","/*\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 */\nimport { AWS } from './Facet';\nimport { ConsoleLogger as Logger } from './Logger';\nimport Amplify from './Amplify';\nexport * from './Facet';\nexport { default as ClientDevice } from './ClientDevice';\nexport { ConsoleLogger, ConsoleLogger as Logger } from './Logger';\nexport * from './Errors';\nexport { default as Hub } from './Hub';\nexport { default as I18n } from './I18n';\nexport { default as JS } from './JS';\nexport { default as Signer } from './Signer';\nexport { default as Parser } from './Parser';\nexport { FacebookOAuth, GoogleOAuth } from './OAuthHelper';\nexport * from './RNComponents';\nexport { default as Credentials } from './Credentials';\nexport { default as ServiceWorker } from './ServiceWorker';\nexport { default as StorageHelper, MemoryStorage } from './StorageHelper';\nexport { default as Platform } from './Platform';\nimport Platform from './Platform';\nexport var Constants = {\n userAgent: Platform.userAgent\n};\nexport default Amplify;\nvar logger = new Logger('Core');\n\nif (AWS['util']) {\n AWS['util'].userAgent = function () {\n return Constants.userAgent;\n };\n} else if (AWS.config) {\n AWS.config.update({\n customUserAgent: Constants.userAgent\n });\n} else {\n logger.warn('No AWS.config');\n}","var AWS = require('../core');\n\nvar util = require('../util');\n\nvar Rest = require('./rest');\n\nfunction populateBody(req) {\n var input = req.service.api.operations[req.operation].input;\n var builder = new AWS.XML.Builder();\n var params = req.params;\n var payload = input.payload;\n\n if (payload) {\n var payloadMember = input.members[payload];\n params = params[payload];\n if (params === undefined) return;\n\n if (payloadMember.type === 'structure') {\n var rootElement = payloadMember.name;\n req.httpRequest.body = builder.toXML(params, payloadMember, rootElement, true);\n } else {\n // non-xml payload\n req.httpRequest.body = params;\n }\n } else {\n req.httpRequest.body = builder.toXML(params, input, input.name || input.shape || util.string.upperFirst(req.operation) + 'Request');\n }\n}\n\nfunction buildRequest(req) {\n Rest.buildRequest(req); // never send body payload on GET/HEAD\n\n if (['GET', 'HEAD'].indexOf(req.httpRequest.method) < 0) {\n populateBody(req);\n }\n}\n\nfunction extractError(resp) {\n Rest.extractError(resp);\n var data;\n\n try {\n data = new AWS.XML.Parser().parse(resp.httpResponse.body.toString());\n } catch (e) {\n data = {\n Code: resp.httpResponse.statusCode,\n Message: resp.httpResponse.statusMessage\n };\n }\n\n if (data.Errors) data = data.Errors;\n if (data.Error) data = data.Error;\n\n if (data.Code) {\n resp.error = util.error(new Error(), {\n code: data.Code,\n message: data.Message\n });\n } else {\n resp.error = util.error(new Error(), {\n code: resp.httpResponse.statusCode,\n message: null\n });\n }\n}\n\nfunction extractData(resp) {\n Rest.extractData(resp);\n var parser;\n var req = resp.request;\n var body = resp.httpResponse.body;\n var operation = req.service.api.operations[req.operation];\n var output = operation.output;\n var hasEventOutput = operation.hasEventOutput;\n var payload = output.payload;\n\n if (payload) {\n var payloadMember = output.members[payload];\n\n if (payloadMember.isEventStream) {\n parser = new AWS.XML.Parser();\n resp.data[payload] = util.createEventStream(AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : resp.httpResponse.body, parser, payloadMember);\n } else if (payloadMember.type === 'structure') {\n parser = new AWS.XML.Parser();\n resp.data[payload] = parser.parse(body.toString(), payloadMember);\n } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n resp.data[payload] = body;\n } else {\n resp.data[payload] = payloadMember.toType(body);\n }\n } else if (body.length > 0) {\n parser = new AWS.XML.Parser();\n var data = parser.parse(body.toString(), output);\n util.update(resp.data, data);\n }\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};","/**\n * Copyright 2012-2013 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You\n * may not use this file except in compliance with the License. A copy of\n * the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is\n * distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific\n * language governing permissions and limitations under the License.\n */\nvar AWS = require('./core');\n\nvar inherit = AWS.util.inherit;\n\nvar jmespath = require('jmespath');\n/**\n * @api private\n */\n\n\nfunction CHECK_ACCEPTORS(resp) {\n var waiter = resp.request._waiter;\n var acceptors = waiter.config.acceptors;\n var acceptorMatched = false;\n var state = 'retry';\n acceptors.forEach(function (acceptor) {\n if (!acceptorMatched) {\n var matcher = waiter.matchers[acceptor.matcher];\n\n if (matcher && matcher(resp, acceptor.expected, acceptor.argument)) {\n acceptorMatched = true;\n state = acceptor.state;\n }\n }\n });\n if (!acceptorMatched && resp.error) state = 'failure';\n\n if (state === 'success') {\n waiter.setSuccess(resp);\n } else {\n waiter.setError(resp, state === 'retry');\n }\n}\n/**\n * @api private\n */\n\n\nAWS.ResourceWaiter = inherit({\n /**\n * Waits for a given state on a service object\n * @param service [Service] the service object to wait on\n * @param state [String] the state (defined in waiter configuration) to wait\n * for.\n * @example Create a waiter for running EC2 instances\n * var ec2 = new AWS.EC2;\n * var waiter = new AWS.ResourceWaiter(ec2, 'instanceRunning');\n */\n constructor: function constructor(service, state) {\n this.service = service;\n this.state = state;\n this.loadWaiterConfig(this.state);\n },\n service: null,\n state: null,\n config: null,\n matchers: {\n path: function path(resp, expected, argument) {\n try {\n var result = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n return jmespath.strictDeepEqual(result, expected);\n },\n pathAll: function pathAll(resp, expected, argument) {\n try {\n var results = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n if (!Array.isArray(results)) results = [results];\n var numResults = results.length;\n if (!numResults) return false;\n\n for (var ind = 0; ind < numResults; ind++) {\n if (!jmespath.strictDeepEqual(results[ind], expected)) {\n return false;\n }\n }\n\n return true;\n },\n pathAny: function pathAny(resp, expected, argument) {\n try {\n var results = jmespath.search(resp.data, argument);\n } catch (err) {\n return false;\n }\n\n if (!Array.isArray(results)) results = [results];\n var numResults = results.length;\n\n for (var ind = 0; ind < numResults; ind++) {\n if (jmespath.strictDeepEqual(results[ind], expected)) {\n return true;\n }\n }\n\n return false;\n },\n status: function status(resp, expected) {\n var statusCode = resp.httpResponse.statusCode;\n return typeof statusCode === 'number' && statusCode === expected;\n },\n error: function error(resp, expected) {\n if (typeof expected === 'string' && resp.error) {\n return expected === resp.error.code;\n } // if expected is not string, can be boolean indicating presence of error\n\n\n return expected === !!resp.error;\n }\n },\n listeners: new AWS.SequentialExecutor().addNamedListeners(function (add) {\n add('RETRY_CHECK', 'retry', function (resp) {\n var waiter = resp.request._waiter;\n\n if (resp.error && resp.error.code === 'ResourceNotReady') {\n resp.error.retryDelay = (waiter.config.delay || 0) * 1000;\n }\n });\n add('CHECK_OUTPUT', 'extractData', CHECK_ACCEPTORS);\n add('CHECK_ERROR', 'extractError', CHECK_ACCEPTORS);\n }),\n\n /**\n * @return [AWS.Request]\n */\n wait: function wait(params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = undefined;\n }\n\n if (params && params.$waiter) {\n params = AWS.util.copy(params);\n\n if (typeof params.$waiter.delay === 'number') {\n this.config.delay = params.$waiter.delay;\n }\n\n if (typeof params.$waiter.maxAttempts === 'number') {\n this.config.maxAttempts = params.$waiter.maxAttempts;\n }\n\n delete params.$waiter;\n }\n\n var request = this.service.makeRequest(this.config.operation, params);\n request._waiter = this;\n request.response.maxRetries = this.config.maxAttempts;\n request.addListeners(this.listeners);\n if (callback) request.send(callback);\n return request;\n },\n setSuccess: function setSuccess(resp) {\n resp.error = null;\n resp.data = resp.data || {};\n resp.request.removeAllListeners('extractData');\n },\n setError: function setError(resp, retryable) {\n resp.data = null;\n resp.error = AWS.util.error(resp.error || new Error(), {\n code: 'ResourceNotReady',\n message: 'Resource is not in the state ' + this.state,\n retryable: retryable\n });\n },\n\n /**\n * Loads waiter configuration from API configuration\n *\n * @api private\n */\n loadWaiterConfig: function loadWaiterConfig(state) {\n if (!this.service.api.waiters[state]) {\n throw new AWS.util.error(new Error(), {\n code: 'StateNotFoundError',\n message: 'State ' + state + ' not found.'\n });\n }\n\n this.config = AWS.util.copy(this.service.api.waiters[state]);\n }\n});","'use strict';\n\nexports.byteLength = byteLength;\nexports.toByteArray = toByteArray;\nexports.fromByteArray = fromByteArray;\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n} // Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\nrevLookup['-'.charCodeAt(0)] = 62;\nrevLookup['_'.charCodeAt(0)] = 63;\n\nfunction getLens(b64) {\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4');\n } // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n var validLen = b64.indexOf('=');\n if (validLen === -1) validLen = len;\n var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n return [validLen, placeHoldersLen];\n} // base64 is 4/3 + up to two characters of the original data\n\n\nfunction byteLength(b64) {\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction _byteLength(b64, validLen, placeHoldersLen) {\n return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction toByteArray(b64) {\n var tmp;\n var lens = getLens(b64);\n var validLen = lens[0];\n var placeHoldersLen = lens[1];\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n var i;\n\n for (i = 0; i < len; i += 4) {\n tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n arr[curByte++] = tmp >> 16 & 0xFF;\n arr[curByte++] = tmp >> 8 & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 2) {\n tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n arr[curByte++] = tmp & 0xFF;\n }\n\n if (placeHoldersLen === 1) {\n tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n arr[curByte++] = tmp >> 8 & 0xFF;\n arr[curByte++] = tmp & 0xFF;\n }\n\n return arr;\n}\n\nfunction tripletToBase64(num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];\n}\n\nfunction encodeChunk(uint8, start, end) {\n var tmp;\n var output = [];\n\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);\n output.push(tripletToBase64(tmp));\n }\n\n return output.join('');\n}\n\nfunction fromByteArray(uint8) {\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n // go through the array every three bytes, we'll deal with trailing stuff later\n\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');\n }\n\n return parts.join('');\n}","var util = require('../util');\n\nvar Rest = require('./rest');\n\nvar Json = require('./json');\n\nvar JsonBuilder = require('../json/builder');\n\nvar JsonParser = require('../json/parser');\n\nfunction populateBody(req) {\n var builder = new JsonBuilder();\n var input = req.service.api.operations[req.operation].input;\n\n if (input.payload) {\n var params = {};\n var payloadShape = input.members[input.payload];\n params = req.params[input.payload];\n if (params === undefined) return;\n\n if (payloadShape.type === 'structure') {\n req.httpRequest.body = builder.build(params, payloadShape);\n applyContentTypeHeader(req);\n } else {\n // non-JSON payload\n req.httpRequest.body = params;\n\n if (payloadShape.type === 'binary' || payloadShape.isStreaming) {\n applyContentTypeHeader(req, true);\n }\n }\n } else {\n var body = builder.build(req.params, input);\n\n if (body !== '{}' || req.httpRequest.method !== 'GET') {\n //don't send empty body for GET method\n req.httpRequest.body = body;\n }\n\n applyContentTypeHeader(req);\n }\n}\n\nfunction applyContentTypeHeader(req, isBinary) {\n var operation = req.service.api.operations[req.operation];\n var input = operation.input;\n\n if (!req.httpRequest.headers['Content-Type']) {\n var type = isBinary ? 'binary/octet-stream' : 'application/json';\n req.httpRequest.headers['Content-Type'] = type;\n }\n}\n\nfunction buildRequest(req) {\n Rest.buildRequest(req); // never send body payload on HEAD/DELETE\n\n if (['HEAD', 'DELETE'].indexOf(req.httpRequest.method) < 0) {\n populateBody(req);\n }\n}\n\nfunction extractError(resp) {\n Json.extractError(resp);\n}\n\nfunction extractData(resp) {\n Rest.extractData(resp);\n var req = resp.request;\n var operation = req.service.api.operations[req.operation];\n var rules = req.service.api.operations[req.operation].output || {};\n var parser;\n var hasEventOutput = operation.hasEventOutput;\n\n if (rules.payload) {\n var payloadMember = rules.members[rules.payload];\n var body = resp.httpResponse.body;\n\n if (payloadMember.isEventStream) {\n parser = new JsonParser();\n resp.data[payload] = util.createEventStream(AWS.HttpClient.streamsApiVersion === 2 ? resp.httpResponse.stream : body, parser, payloadMember);\n } else if (payloadMember.type === 'structure' || payloadMember.type === 'list') {\n var parser = new JsonParser();\n resp.data[rules.payload] = parser.parse(body, payloadMember);\n } else if (payloadMember.type === 'binary' || payloadMember.isStreaming) {\n resp.data[rules.payload] = body;\n } else {\n resp.data[rules.payload] = payloadMember.toType(body);\n }\n } else {\n var data = resp.data;\n Json.extractData(resp);\n resp.data = util.merge(data, resp.data);\n }\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n buildRequest: buildRequest,\n extractError: extractError,\n extractData: extractData\n};","/*\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 */\nvar MIME_MAP = [{\n type: 'text/plain',\n ext: 'txt'\n}, {\n type: 'text/html',\n ext: 'html'\n}, {\n type: 'text/javascript',\n ext: 'js'\n}, {\n type: 'text/css',\n ext: 'css'\n}, {\n type: 'text/csv',\n ext: 'csv'\n}, {\n type: 'text/yaml',\n ext: 'yml'\n}, {\n type: 'text/yaml',\n ext: 'yaml'\n}, {\n type: 'text/calendar',\n ext: 'ics'\n}, {\n type: 'text/calendar',\n ext: 'ical'\n}, {\n type: 'image/png',\n ext: 'png'\n}, {\n type: 'image/gif',\n ext: 'gif'\n}, {\n type: 'image/jpeg',\n ext: 'jpg'\n}, {\n type: 'image/jpeg',\n ext: 'jpeg'\n}, {\n type: 'image/bmp',\n ext: 'bmp'\n}, {\n type: 'image/x-icon',\n ext: 'ico'\n}, {\n type: 'image/tiff',\n ext: 'tif'\n}, {\n type: 'image/tiff',\n ext: 'tiff'\n}, {\n type: 'image/svg+xml',\n ext: 'svg'\n}, {\n type: 'application/json',\n ext: 'json'\n}, {\n type: 'application/xml',\n ext: 'xml'\n}, {\n type: 'application/x-sh',\n ext: 'sh'\n}, {\n type: 'application/zip',\n ext: 'zip'\n}, {\n type: 'application/x-rar-compressed',\n ext: 'rar'\n}, {\n type: 'application/x-tar',\n ext: 'tar'\n}, {\n type: 'application/x-bzip',\n ext: 'bz'\n}, {\n type: 'application/x-bzip2',\n ext: 'bz2'\n}, {\n type: 'application/pdf',\n ext: 'pdf'\n}, {\n type: 'application/java-archive',\n ext: 'jar'\n}, {\n type: 'application/msword',\n ext: 'doc'\n}, {\n type: 'application/vnd.ms-excel',\n ext: 'xls'\n}, {\n type: 'application/vnd.ms-excel',\n ext: 'xlsx'\n}, {\n type: 'message/rfc822',\n ext: 'eml'\n}];\n\nvar JS =\n/** @class */\nfunction () {\n function JS() {}\n\n JS.isEmpty = function (obj) {\n return Object.keys(obj).length === 0;\n };\n\n JS.sortByField = function (list, field, dir) {\n if (!list || !list.sort) {\n return false;\n }\n\n var dirX = dir && dir === 'desc' ? -1 : 1;\n list.sort(function (a, b) {\n var a_val = a[field];\n var b_val = b[field];\n\n if (typeof b_val === 'undefined') {\n return typeof a_val === 'undefined' ? 0 : 1 * dirX;\n }\n\n if (typeof a_val === 'undefined') {\n return -1 * dirX;\n }\n\n if (a_val < b_val) {\n return -1 * dirX;\n }\n\n if (a_val > b_val) {\n return 1 * dirX;\n }\n\n return 0;\n });\n return true;\n };\n\n JS.objectLessAttributes = function (obj, less) {\n var ret = Object.assign({}, obj);\n\n if (less) {\n if (typeof less === 'string') {\n delete ret[less];\n } else {\n less.forEach(function (attr) {\n delete ret[attr];\n });\n }\n }\n\n return ret;\n };\n\n JS.filenameToContentType = function (filename, defVal) {\n if (defVal === void 0) {\n defVal = 'application/octet-stream';\n }\n\n var name = filename.toLowerCase();\n var filtered = MIME_MAP.filter(function (mime) {\n return name.endsWith('.' + mime.ext);\n });\n return filtered.length > 0 ? filtered[0].type : defVal;\n };\n\n JS.isTextFile = function (contentType) {\n var type = contentType.toLowerCase();\n\n if (type.startsWith('text/')) {\n return true;\n }\n\n return 'application/json' === type || 'application/xml' === type || 'application/sh' === type;\n };\n /**\n * generate random string\n */\n\n\n JS.generateRandomString = function () {\n var result = '';\n var chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n for (var i = 32; i > 0; i -= 1) {\n result += chars[Math.floor(Math.random() * chars.length)];\n }\n\n return result;\n };\n\n JS.makeQuerablePromise = function (promise) {\n if (promise.isResolved) return promise;\n var isPending = true;\n var isRejected = false;\n var isFullfilled = false;\n var result = promise.then(function (data) {\n isFullfilled = true;\n isPending = false;\n return data;\n }, function (e) {\n isRejected = true;\n isPending = false;\n throw e;\n });\n\n result.isFullfilled = function () {\n return isFullfilled;\n };\n\n result.isPending = function () {\n return isPending;\n };\n\n result.isRejected = function () {\n return isRejected;\n };\n\n return result;\n };\n\n JS.browserOrNode = function () {\n var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined';\n var isNode = typeof process !== 'undefined' && process.versions != null && process.versions.node != null;\n return {\n isBrowser: isBrowser,\n isNode: isNode\n };\n };\n /**\n * transfer the first letter of the keys to lowercase\n * @param {Object} obj - the object need to be transferred\n * @param {Array} whiteListForItself - whitelist itself from being transferred\n * @param {Array} whiteListForChildren - whitelist its children keys from being transferred\n */\n\n\n JS.transferKeyToLowerCase = function (obj, whiteListForItself, whiteListForChildren) {\n if (whiteListForItself === void 0) {\n whiteListForItself = [];\n }\n\n if (whiteListForChildren === void 0) {\n whiteListForChildren = [];\n }\n\n if (!JS.isStrictObject(obj)) return obj;\n var ret = {};\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n var transferedKey = whiteListForItself.includes(key) ? key : key[0].toLowerCase() + key.slice(1);\n ret[transferedKey] = whiteListForChildren.includes(key) ? obj[key] : JS.transferKeyToLowerCase(obj[key], whiteListForItself, whiteListForChildren);\n }\n }\n\n return ret;\n };\n /**\n * transfer the first letter of the keys to lowercase\n * @param {Object} obj - the object need to be transferred\n * @param {Array} whiteListForItself - whitelist itself from being transferred\n * @param {Array} whiteListForChildren - whitelist its children keys from being transferred\n */\n\n\n JS.transferKeyToUpperCase = function (obj, whiteListForItself, whiteListForChildren) {\n if (whiteListForItself === void 0) {\n whiteListForItself = [];\n }\n\n if (whiteListForChildren === void 0) {\n whiteListForChildren = [];\n }\n\n if (!JS.isStrictObject(obj)) return obj;\n var ret = {};\n\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n var transferedKey = whiteListForItself.includes(key) ? key : key[0].toUpperCase() + key.slice(1);\n ret[transferedKey] = whiteListForChildren.includes(key) ? obj[key] : JS.transferKeyToUpperCase(obj[key], whiteListForItself, whiteListForChildren);\n }\n }\n\n return ret;\n };\n /**\n * Return true if the object is a strict object\n * which means it's not Array, Function, Number, String, Boolean or Null\n * @param obj the Object\n */\n\n\n JS.isStrictObject = function (obj) {\n return obj instanceof Object && !(obj instanceof Array) && !(obj instanceof Function) && !(obj instanceof Number) && !(obj instanceof String) && !(obj instanceof Boolean);\n };\n\n return JS;\n}();\n\nexport default JS;","var hashUtils = require('./browserHashUtils');\n\nvar Buffer = require('buffer/').Buffer;\n\nvar BLOCK_SIZE = 64;\nvar DIGEST_LENGTH = 16;\nvar INIT = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476];\n/**\n * @api private\n */\n\nfunction Md5() {\n this.state = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476];\n this.buffer = new DataView(new ArrayBuffer(BLOCK_SIZE));\n this.bufferLength = 0;\n this.bytesHashed = 0;\n this.finished = false;\n}\n/**\n * @api private\n */\n\n\nmodule.exports = exports = Md5;\nMd5.BLOCK_SIZE = BLOCK_SIZE;\n\nMd5.prototype.update = function (sourceData) {\n if (hashUtils.isEmptyData(sourceData)) {\n return this;\n } else if (this.finished) {\n throw new Error('Attempted to update an already finished hash.');\n }\n\n var data = hashUtils.convertToBuffer(sourceData);\n var position = 0;\n var byteLength = data.byteLength;\n this.bytesHashed += byteLength;\n\n while (byteLength > 0) {\n this.buffer.setUint8(this.bufferLength++, data[position++]);\n byteLength--;\n\n if (this.bufferLength === BLOCK_SIZE) {\n this.hashBuffer();\n this.bufferLength = 0;\n }\n }\n\n return this;\n};\n\nMd5.prototype.digest = function (encoding) {\n if (!this.finished) {\n var _a = this,\n buffer = _a.buffer,\n undecoratedLength = _a.bufferLength,\n bytesHashed = _a.bytesHashed;\n\n var bitsHashed = bytesHashed * 8;\n buffer.setUint8(this.bufferLength++, 128); // Ensure the final block has enough room for the hashed length\n\n if (undecoratedLength % BLOCK_SIZE >= BLOCK_SIZE - 8) {\n for (var i = this.bufferLength; i < BLOCK_SIZE; i++) {\n buffer.setUint8(i, 0);\n }\n\n this.hashBuffer();\n this.bufferLength = 0;\n }\n\n for (var i = this.bufferLength; i < BLOCK_SIZE - 8; i++) {\n buffer.setUint8(i, 0);\n }\n\n buffer.setUint32(BLOCK_SIZE - 8, bitsHashed >>> 0, true);\n buffer.setUint32(BLOCK_SIZE - 4, Math.floor(bitsHashed / 0x100000000), true);\n this.hashBuffer();\n this.finished = true;\n }\n\n var out = new DataView(new ArrayBuffer(DIGEST_LENGTH));\n\n for (var i = 0; i < 4; i++) {\n out.setUint32(i * 4, this.state[i], true);\n }\n\n var buff = new Buffer(out.buffer, out.byteOffset, out.byteLength);\n return encoding ? buff.toString(encoding) : buff;\n};\n\nMd5.prototype.hashBuffer = function () {\n var _a = this,\n buffer = _a.buffer,\n state = _a.state;\n\n var a = state[0],\n b = state[1],\n c = state[2],\n d = state[3];\n a = ff(a, b, c, d, buffer.getUint32(0, true), 7, 0xd76aa478);\n d = ff(d, a, b, c, buffer.getUint32(4, true), 12, 0xe8c7b756);\n c = ff(c, d, a, b, buffer.getUint32(8, true), 17, 0x242070db);\n b = ff(b, c, d, a, buffer.getUint32(12, true), 22, 0xc1bdceee);\n a = ff(a, b, c, d, buffer.getUint32(16, true), 7, 0xf57c0faf);\n d = ff(d, a, b, c, buffer.getUint32(20, true), 12, 0x4787c62a);\n c = ff(c, d, a, b, buffer.getUint32(24, true), 17, 0xa8304613);\n b = ff(b, c, d, a, buffer.getUint32(28, true), 22, 0xfd469501);\n a = ff(a, b, c, d, buffer.getUint32(32, true), 7, 0x698098d8);\n d = ff(d, a, b, c, buffer.getUint32(36, true), 12, 0x8b44f7af);\n c = ff(c, d, a, b, buffer.getUint32(40, true), 17, 0xffff5bb1);\n b = ff(b, c, d, a, buffer.getUint32(44, true), 22, 0x895cd7be);\n a = ff(a, b, c, d, buffer.getUint32(48, true), 7, 0x6b901122);\n d = ff(d, a, b, c, buffer.getUint32(52, true), 12, 0xfd987193);\n c = ff(c, d, a, b, buffer.getUint32(56, true), 17, 0xa679438e);\n b = ff(b, c, d, a, buffer.getUint32(60, true), 22, 0x49b40821);\n a = gg(a, b, c, d, buffer.getUint32(4, true), 5, 0xf61e2562);\n d = gg(d, a, b, c, buffer.getUint32(24, true), 9, 0xc040b340);\n c = gg(c, d, a, b, buffer.getUint32(44, true), 14, 0x265e5a51);\n b = gg(b, c, d, a, buffer.getUint32(0, true), 20, 0xe9b6c7aa);\n a = gg(a, b, c, d, buffer.getUint32(20, true), 5, 0xd62f105d);\n d = gg(d, a, b, c, buffer.getUint32(40, true), 9, 0x02441453);\n c = gg(c, d, a, b, buffer.getUint32(60, true), 14, 0xd8a1e681);\n b = gg(b, c, d, a, buffer.getUint32(16, true), 20, 0xe7d3fbc8);\n a = gg(a, b, c, d, buffer.getUint32(36, true), 5, 0x21e1cde6);\n d = gg(d, a, b, c, buffer.getUint32(56, true), 9, 0xc33707d6);\n c = gg(c, d, a, b, buffer.getUint32(12, true), 14, 0xf4d50d87);\n b = gg(b, c, d, a, buffer.getUint32(32, true), 20, 0x455a14ed);\n a = gg(a, b, c, d, buffer.getUint32(52, true), 5, 0xa9e3e905);\n d = gg(d, a, b, c, buffer.getUint32(8, true), 9, 0xfcefa3f8);\n c = gg(c, d, a, b, buffer.getUint32(28, true), 14, 0x676f02d9);\n b = gg(b, c, d, a, buffer.getUint32(48, true), 20, 0x8d2a4c8a);\n a = hh(a, b, c, d, buffer.getUint32(20, true), 4, 0xfffa3942);\n d = hh(d, a, b, c, buffer.getUint32(32, true), 11, 0x8771f681);\n c = hh(c, d, a, b, buffer.getUint32(44, true), 16, 0x6d9d6122);\n b = hh(b, c, d, a, buffer.getUint32(56, true), 23, 0xfde5380c);\n a = hh(a, b, c, d, buffer.getUint32(4, true), 4, 0xa4beea44);\n d = hh(d, a, b, c, buffer.getUint32(16, true), 11, 0x4bdecfa9);\n c = hh(c, d, a, b, buffer.getUint32(28, true), 16, 0xf6bb4b60);\n b = hh(b, c, d, a, buffer.getUint32(40, true), 23, 0xbebfbc70);\n a = hh(a, b, c, d, buffer.getUint32(52, true), 4, 0x289b7ec6);\n d = hh(d, a, b, c, buffer.getUint32(0, true), 11, 0xeaa127fa);\n c = hh(c, d, a, b, buffer.getUint32(12, true), 16, 0xd4ef3085);\n b = hh(b, c, d, a, buffer.getUint32(24, true), 23, 0x04881d05);\n a = hh(a, b, c, d, buffer.getUint32(36, true), 4, 0xd9d4d039);\n d = hh(d, a, b, c, buffer.getUint32(48, true), 11, 0xe6db99e5);\n c = hh(c, d, a, b, buffer.getUint32(60, true), 16, 0x1fa27cf8);\n b = hh(b, c, d, a, buffer.getUint32(8, true), 23, 0xc4ac5665);\n a = ii(a, b, c, d, buffer.getUint32(0, true), 6, 0xf4292244);\n d = ii(d, a, b, c, buffer.getUint32(28, true), 10, 0x432aff97);\n c = ii(c, d, a, b, buffer.getUint32(56, true), 15, 0xab9423a7);\n b = ii(b, c, d, a, buffer.getUint32(20, true), 21, 0xfc93a039);\n a = ii(a, b, c, d, buffer.getUint32(48, true), 6, 0x655b59c3);\n d = ii(d, a, b, c, buffer.getUint32(12, true), 10, 0x8f0ccc92);\n c = ii(c, d, a, b, buffer.getUint32(40, true), 15, 0xffeff47d);\n b = ii(b, c, d, a, buffer.getUint32(4, true), 21, 0x85845dd1);\n a = ii(a, b, c, d, buffer.getUint32(32, true), 6, 0x6fa87e4f);\n d = ii(d, a, b, c, buffer.getUint32(60, true), 10, 0xfe2ce6e0);\n c = ii(c, d, a, b, buffer.getUint32(24, true), 15, 0xa3014314);\n b = ii(b, c, d, a, buffer.getUint32(52, true), 21, 0x4e0811a1);\n a = ii(a, b, c, d, buffer.getUint32(16, true), 6, 0xf7537e82);\n d = ii(d, a, b, c, buffer.getUint32(44, true), 10, 0xbd3af235);\n c = ii(c, d, a, b, buffer.getUint32(8, true), 15, 0x2ad7d2bb);\n b = ii(b, c, d, a, buffer.getUint32(36, true), 21, 0xeb86d391);\n state[0] = a + state[0] & 0xFFFFFFFF;\n state[1] = b + state[1] & 0xFFFFFFFF;\n state[2] = c + state[2] & 0xFFFFFFFF;\n state[3] = d + state[3] & 0xFFFFFFFF;\n};\n\nfunction cmn(q, a, b, x, s, t) {\n a = (a + q & 0xFFFFFFFF) + (x + t & 0xFFFFFFFF) & 0xFFFFFFFF;\n return (a << s | a >>> 32 - s) + b & 0xFFFFFFFF;\n}\n\nfunction ff(a, b, c, d, x, s, t) {\n return cmn(b & c | ~b & d, a, b, x, s, t);\n}\n\nfunction gg(a, b, c, d, x, s, t) {\n return cmn(b & d | c & ~d, a, b, x, s, t);\n}\n\nfunction hh(a, b, c, d, x, s, t) {\n return cmn(b ^ c ^ d, a, b, x, s, t);\n}\n\nfunction ii(a, b, c, d, x, s, t) {\n return cmn(c ^ (b | ~d), a, b, x, s, t);\n}","var util = require('./util'); // browser specific modules\n\n\nutil.crypto.lib = require('./browserCryptoLib');\nutil.Buffer = require('buffer/').Buffer;\nutil.url = require('url/');\nutil.querystring = require('querystring/');\nutil.realClock = require('./realclock/browserClock');\nutil.environment = 'js';\nutil.createEventStream = require('./event-stream/buffered-create-event-stream').createEventStream;\n\nutil.isBrowser = function () {\n return true;\n};\n\nutil.isNode = function () {\n return false;\n};\n\nvar AWS = require('./core');\n/**\n * @api private\n */\n\n\nmodule.exports = AWS;\n\nrequire('./credentials');\n\nrequire('./credentials/credential_provider_chain');\n\nrequire('./credentials/temporary_credentials');\n\nrequire('./credentials/chainable_temporary_credentials');\n\nrequire('./credentials/web_identity_credentials');\n\nrequire('./credentials/cognito_identity_credentials');\n\nrequire('./credentials/saml_credentials'); // Load the DOMParser XML parser\n\n\nAWS.XML.Parser = require('./xml/browser_parser'); // Load the XHR HttpClient\n\nrequire('./http/xhr');\n\nif (typeof process === 'undefined') {\n var process = {\n browser: true\n };\n}",";\n\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory();\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([], factory);\n } else {\n // Global (browser)\n root.CryptoJS = factory();\n }\n})(this, function () {\n /**\n * CryptoJS core components.\n */\n var CryptoJS = CryptoJS || function (Math, undefined) {\n /*\n * Local polyfil of Object.create\n */\n var create = Object.create || function () {\n function F() {}\n\n ;\n return function (obj) {\n var subtype;\n F.prototype = obj;\n subtype = new F();\n F.prototype = null;\n return subtype;\n };\n }();\n /**\n * CryptoJS namespace.\n */\n\n\n var C = {};\n /**\n * Library namespace.\n */\n\n var C_lib = C.lib = {};\n /**\n * Base object for prototypal inheritance.\n */\n\n var Base = C_lib.Base = function () {\n return {\n /**\n * Creates a new object that inherits from this object.\n *\n * @param {Object} overrides Properties to copy into the new object.\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * field: 'value',\n *\n * method: function () {\n * }\n * });\n */\n extend: function extend(overrides) {\n // Spawn\n var subtype = create(this); // Augment\n\n if (overrides) {\n subtype.mixIn(overrides);\n } // Create default initializer\n\n\n if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n subtype.init = function () {\n subtype.$super.init.apply(this, arguments);\n };\n } // Initializer's prototype is the subtype object\n\n\n subtype.init.prototype = subtype; // Reference supertype\n\n subtype.$super = this;\n return subtype;\n },\n\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n create: function create() {\n var instance = this.extend();\n instance.init.apply(instance, arguments);\n return instance;\n },\n\n /**\n * Initializes a newly created object.\n * Override this method to add some logic when your objects are created.\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * init: function () {\n * // ...\n * }\n * });\n */\n init: function init() {},\n\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn: function mixIn(properties) {\n for (var propertyName in properties) {\n if (properties.hasOwnProperty(propertyName)) {\n this[propertyName] = properties[propertyName];\n }\n } // IE won't copy toString using the loop above\n\n\n if (properties.hasOwnProperty('toString')) {\n this.toString = properties.toString;\n }\n },\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone: function clone() {\n return this.init.prototype.extend(this);\n }\n };\n }();\n /**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n\n\n var WordArray = C_lib.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n init: function init(words, sigBytes) {\n words = this.words = words || [];\n\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 4;\n }\n },\n\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString: function toString(encoder) {\n return (encoder || Hex).stringify(this);\n },\n\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat: function concat(wordArray) {\n // Shortcuts\n var thisWords = this.words;\n var thatWords = wordArray.words;\n var thisSigBytes = this.sigBytes;\n var thatSigBytes = wordArray.sigBytes; // Clamp excess bits\n\n this.clamp(); // Concat\n\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (var i = 0; i < thatSigBytes; i++) {\n var thatByte = thatWords[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n thisWords[thisSigBytes + i >>> 2] |= thatByte << 24 - (thisSigBytes + i) % 4 * 8;\n }\n } else {\n // Copy one word at a time\n for (var i = 0; i < thatSigBytes; i += 4) {\n thisWords[thisSigBytes + i >>> 2] = thatWords[i >>> 2];\n }\n }\n\n this.sigBytes += thatSigBytes; // Chainable\n\n return this;\n },\n\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp: function clamp() {\n // Shortcuts\n var words = this.words;\n var sigBytes = this.sigBytes; // Clamp\n\n words[sigBytes >>> 2] &= 0xffffffff << 32 - sigBytes % 4 * 8;\n words.length = Math.ceil(sigBytes / 4);\n },\n\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n clone.words = this.words.slice(0);\n return clone;\n },\n\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n random: function random(nBytes) {\n var words = [];\n\n var r = function r(m_w) {\n var m_w = m_w;\n var m_z = 0x3ade68b1;\n var mask = 0xffffffff;\n return function () {\n m_z = 0x9069 * (m_z & 0xFFFF) + (m_z >> 0x10) & mask;\n m_w = 0x4650 * (m_w & 0xFFFF) + (m_w >> 0x10) & mask;\n var result = (m_z << 0x10) + m_w & mask;\n result /= 0x100000000;\n result += 0.5;\n return result * (Math.random() > .5 ? 1 : -1);\n };\n };\n\n for (var i = 0, rcache; i < nBytes; i += 4) {\n var _r = r((rcache || Math.random()) * 0x100000000);\n\n rcache = _r() * 0x3ade67b7;\n words.push(_r() * 0x100000000 | 0);\n }\n\n return new WordArray.init(words, nBytes);\n }\n });\n /**\n * Encoder namespace.\n */\n\n var C_enc = C.enc = {};\n /**\n * Hex encoding strategy.\n */\n\n var Hex = C_enc.Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes; // Convert\n\n var hexChars = [];\n\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n\n return hexChars.join('');\n },\n\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse: function parse(hexStr) {\n // Shortcut\n var hexStrLength = hexStr.length; // Convert\n\n var words = [];\n\n for (var i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << 24 - i % 8 * 4;\n }\n\n return new WordArray.init(words, hexStrLength / 2);\n }\n };\n /**\n * Latin1 encoding strategy.\n */\n\n var Latin1 = C_enc.Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes; // Convert\n\n var latin1Chars = [];\n\n for (var i = 0; i < sigBytes; i++) {\n var bite = words[i >>> 2] >>> 24 - i % 4 * 8 & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n\n return latin1Chars.join('');\n },\n\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse: function parse(latin1Str) {\n // Shortcut\n var latin1StrLength = latin1Str.length; // Convert\n\n var words = [];\n\n for (var i = 0; i < latin1StrLength; i++) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << 24 - i % 4 * 8;\n }\n\n return new WordArray.init(words, latin1StrLength);\n }\n };\n /**\n * UTF-8 encoding strategy.\n */\n\n var Utf8 = C_enc.Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify: function stringify(wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse: function parse(utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n }\n };\n /**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\n\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset: function reset() {\n // Initial values\n this._data = new WordArray.init();\n this._nDataBytes = 0;\n },\n\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append: function _append(data) {\n // Convert string to WordArray, else assume WordArray already\n if (typeof data == 'string') {\n data = Utf8.parse(data);\n } // Append\n\n\n this._data.concat(data);\n\n this._nDataBytes += data.sigBytes;\n },\n\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process: function _process(doFlush) {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var dataSigBytes = data.sigBytes;\n var blockSize = this.blockSize;\n var blockSizeBytes = blockSize * 4; // Count blocks ready\n\n var nBlocksReady = dataSigBytes / blockSizeBytes;\n\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n } // Count words ready\n\n\n var nWordsReady = nBlocksReady * blockSize; // Count bytes ready\n\n var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes); // Process blocks\n\n if (nWordsReady) {\n for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n } // Remove processed words\n\n\n var processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n } // Return processed words\n\n\n return new WordArray.init(processedWords, nBytesReady);\n },\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone: function clone() {\n var clone = Base.clone.call(this);\n clone._data = this._data.clone();\n return clone;\n },\n _minBufferSize: 0\n });\n /**\n * Abstract hasher template.\n *\n * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\n\n var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n */\n cfg: Base.extend(),\n\n /**\n * Initializes a newly created hasher.\n *\n * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n *\n * @example\n *\n * var hasher = CryptoJS.algo.SHA256.create();\n */\n init: function init(cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg); // Set initial values\n\n this.reset();\n },\n\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset: function reset() {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this); // Perform concrete-hasher logic\n\n this._doReset();\n },\n\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update: function update(messageUpdate) {\n // Append\n this._append(messageUpdate); // Update the hash\n\n\n this._process(); // Chainable\n\n\n return this;\n },\n\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize: function finalize(messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n } // Perform concrete-hasher logic\n\n\n var hash = this._doFinalize();\n\n return hash;\n },\n blockSize: 512 / 32,\n\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} hasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n _createHelper: function _createHelper(hasher) {\n return function (message, cfg) {\n return new hasher.init(cfg).finalize(message);\n };\n },\n\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} hasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n _createHmacHelper: function _createHmacHelper(hasher) {\n return function (message, key) {\n return new C_algo.HMAC.init(hasher, key).finalize(message);\n };\n }\n });\n /**\n * Algorithm namespace.\n */\n\n var C_algo = C.algo = {};\n return C;\n }(Math);\n\n return CryptoJS;\n});","var util = require('../util');\n\nfunction QueryParamSerializer() {}\n\nQueryParamSerializer.prototype.serialize = function (params, shape, fn) {\n serializeStructure('', params, shape, fn);\n};\n\nfunction ucfirst(shape) {\n if (shape.isQueryName || shape.api.protocol !== 'ec2') {\n return shape.name;\n } else {\n return shape.name[0].toUpperCase() + shape.name.substr(1);\n }\n}\n\nfunction serializeStructure(prefix, struct, rules, fn) {\n util.each(rules.members, function (name, member) {\n var value = struct[name];\n if (value === null || value === undefined) return;\n var memberName = ucfirst(member);\n memberName = prefix ? prefix + '.' + memberName : memberName;\n serializeMember(memberName, value, member, fn);\n });\n}\n\nfunction serializeMap(name, map, rules, fn) {\n var i = 1;\n util.each(map, function (key, value) {\n var prefix = rules.flattened ? '.' : '.entry.';\n var position = prefix + i++ + '.';\n var keyName = position + (rules.key.name || 'key');\n var valueName = position + (rules.value.name || 'value');\n serializeMember(name + keyName, key, rules.key, fn);\n serializeMember(name + valueName, value, rules.value, fn);\n });\n}\n\nfunction serializeList(name, list, rules, fn) {\n var memberRules = rules.member || {};\n\n if (list.length === 0) {\n fn.call(this, name, null);\n return;\n }\n\n util.arrayEach(list, function (v, n) {\n var suffix = '.' + (n + 1);\n\n if (rules.api.protocol === 'ec2') {\n // Do nothing for EC2\n suffix = suffix + ''; // make linter happy\n } else if (rules.flattened) {\n if (memberRules.name) {\n var parts = name.split('.');\n parts.pop();\n parts.push(ucfirst(memberRules));\n name = parts.join('.');\n }\n } else {\n suffix = '.' + (memberRules.name ? memberRules.name : 'member') + suffix;\n }\n\n serializeMember(name + suffix, v, memberRules, fn);\n });\n}\n\nfunction serializeMember(name, value, rules, fn) {\n if (value === null || value === undefined) return;\n\n if (rules.type === 'structure') {\n serializeStructure(name, value, rules, fn);\n } else if (rules.type === 'list') {\n serializeList(name, value, rules, fn);\n } else if (rules.type === 'map') {\n serializeMap(name, value, rules, fn);\n } else {\n fn(name, rules.toWireFormat(value).toString());\n }\n}\n/**\n * @api private\n */\n\n\nmodule.exports = QueryParamSerializer;","var AWS = require('../core');\n\nvar v4Credentials = require('./v4_credentials');\n\nvar inherit = AWS.util.inherit;\n/**\n * @api private\n */\n\nvar expiresHeader = 'presigned-expires';\n/**\n * @api private\n */\n\nAWS.Signers.V4 = inherit(AWS.Signers.RequestSigner, {\n constructor: function V4(request, serviceName, options) {\n AWS.Signers.RequestSigner.call(this, request);\n this.serviceName = serviceName;\n options = options || {};\n this.signatureCache = typeof options.signatureCache === 'boolean' ? options.signatureCache : true;\n this.operation = options.operation;\n this.signatureVersion = options.signatureVersion;\n },\n algorithm: 'AWS4-HMAC-SHA256',\n addAuthorization: function addAuthorization(credentials, date) {\n var datetime = AWS.util.date.iso8601(date).replace(/[:\\-]|\\.\\d{3}/g, '');\n\n if (this.isPresigned()) {\n this.updateForPresigned(credentials, datetime);\n } else {\n this.addHeaders(credentials, datetime);\n }\n\n this.request.headers['Authorization'] = this.authorization(credentials, datetime);\n },\n addHeaders: function addHeaders(credentials, datetime) {\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 updateForPresigned: function updateForPresigned(credentials, datetime) {\n var credString = this.credentialString(datetime);\n var qs = {\n 'X-Amz-Date': datetime,\n 'X-Amz-Algorithm': this.algorithm,\n 'X-Amz-Credential': credentials.accessKeyId + '/' + credString,\n 'X-Amz-Expires': this.request.headers[expiresHeader],\n 'X-Amz-SignedHeaders': this.signedHeaders()\n };\n\n if (credentials.sessionToken) {\n qs['X-Amz-Security-Token'] = credentials.sessionToken;\n }\n\n if (this.request.headers['Content-Type']) {\n qs['Content-Type'] = this.request.headers['Content-Type'];\n }\n\n if (this.request.headers['Content-MD5']) {\n qs['Content-MD5'] = this.request.headers['Content-MD5'];\n }\n\n if (this.request.headers['Cache-Control']) {\n qs['Cache-Control'] = this.request.headers['Cache-Control'];\n } // need to pull in any other X-Amz-* headers\n\n\n AWS.util.each.call(this, this.request.headers, function (key, value) {\n if (key === expiresHeader) return;\n\n if (this.isSignableHeader(key)) {\n var lowerKey = key.toLowerCase(); // Metadata should be normalized\n\n if (lowerKey.indexOf('x-amz-meta-') === 0) {\n qs[lowerKey] = value;\n } else if (lowerKey.indexOf('x-amz-') === 0) {\n qs[key] = value;\n }\n }\n });\n var sep = this.request.path.indexOf('?') >= 0 ? '&' : '?';\n this.request.path += sep + AWS.util.queryParamsToString(qs);\n },\n authorization: function authorization(credentials, datetime) {\n var parts = [];\n var credString = this.credentialString(datetime);\n parts.push(this.algorithm + ' Credential=' + credentials.accessKeyId + '/' + credString);\n parts.push('SignedHeaders=' + this.signedHeaders());\n parts.push('Signature=' + this.signature(credentials, datetime));\n return parts.join(', ');\n },\n signature: function signature(credentials, datetime) {\n var signingKey = v4Credentials.getSigningKey(credentials, datetime.substr(0, 8), this.request.region, this.serviceName, this.signatureCache);\n return AWS.util.crypto.hmac(signingKey, this.stringToSign(datetime), 'hex');\n },\n stringToSign: function stringToSign(datetime) {\n var parts = [];\n parts.push('AWS4-HMAC-SHA256');\n parts.push(datetime);\n parts.push(this.credentialString(datetime));\n parts.push(this.hexEncodedHash(this.canonicalString()));\n return parts.join('\\n');\n },\n canonicalString: function canonicalString() {\n var parts = [],\n pathname = this.request.pathname();\n if (this.serviceName !== 's3' && this.signatureVersion !== 's3v4') pathname = AWS.util.uriEscapePath(pathname);\n parts.push(this.request.method);\n parts.push(pathname);\n parts.push(this.request.search());\n parts.push(this.canonicalHeaders() + '\\n');\n parts.push(this.signedHeaders());\n parts.push(this.hexEncodedBodyHash());\n return parts.join('\\n');\n },\n canonicalHeaders: function canonicalHeaders() {\n var headers = [];\n AWS.util.each.call(this, this.request.headers, function (key, item) {\n headers.push([key, item]);\n });\n headers.sort(function (a, b) {\n return a[0].toLowerCase() < b[0].toLowerCase() ? -1 : 1;\n });\n var parts = [];\n AWS.util.arrayEach.call(this, headers, function (item) {\n var key = item[0].toLowerCase();\n\n if (this.isSignableHeader(key)) {\n var value = item[1];\n\n if (typeof value === 'undefined' || value === null || typeof value.toString !== 'function') {\n throw AWS.util.error(new Error('Header ' + key + ' contains invalid value'), {\n code: 'InvalidHeader'\n });\n }\n\n parts.push(key + ':' + this.canonicalHeaderValues(value.toString()));\n }\n });\n return parts.join('\\n');\n },\n canonicalHeaderValues: function canonicalHeaderValues(values) {\n return values.replace(/\\s+/g, ' ').replace(/^\\s+|\\s+$/g, '');\n },\n signedHeaders: function signedHeaders() {\n var keys = [];\n AWS.util.each.call(this, this.request.headers, function (key) {\n key = key.toLowerCase();\n if (this.isSignableHeader(key)) keys.push(key);\n });\n return keys.sort().join(';');\n },\n credentialString: function credentialString(datetime) {\n return v4Credentials.createScope(datetime.substr(0, 8), this.request.region, this.serviceName);\n },\n hexEncodedHash: function hash(string) {\n return AWS.util.crypto.sha256(string, 'hex');\n },\n hexEncodedBodyHash: function hexEncodedBodyHash() {\n var request = this.request;\n\n if (this.isPresigned() && this.serviceName === 's3' && !request.body) {\n return 'UNSIGNED-PAYLOAD';\n } else if (request.headers['X-Amz-Content-Sha256']) {\n return request.headers['X-Amz-Content-Sha256'];\n } else {\n return this.hexEncodedHash(this.request.body || '');\n }\n },\n unsignableHeaders: ['authorization', 'content-type', 'content-length', 'user-agent', expiresHeader, 'expect', 'x-amzn-trace-id'],\n isSignableHeader: function isSignableHeader(key) {\n if (key.toLowerCase().indexOf('x-amz-') === 0) return true;\n return this.unsignableHeaders.indexOf(key) < 0;\n },\n isPresigned: function isPresigned() {\n return this.request.headers[expiresHeader] ? true : false;\n }\n});\n/**\n * @api private\n */\n\nmodule.exports = AWS.Signers.V4;","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor;\n\n var TempCtor = function TempCtor() {};\n\n TempCtor.prototype = superCtor.prototype;\n ctor.prototype = new TempCtor();\n ctor.prototype.constructor = ctor;\n };\n}","module.exports = {\n //provide realtime clock for performance measurement\n now: function now() {\n if (typeof performance !== 'undefined' && typeof performance.now === 'function') {\n return performance.now();\n }\n\n return Date.now();\n }\n};","var util = require('../util');\n\nfunction JsonParser() {}\n\nJsonParser.prototype.parse = function (value, shape) {\n return translate(JSON.parse(value), shape);\n};\n\nfunction translate(value, shape) {\n if (!shape || value === undefined) return undefined;\n\n switch (shape.type) {\n case 'structure':\n return translateStructure(value, shape);\n\n case 'map':\n return translateMap(value, shape);\n\n case 'list':\n return translateList(value, shape);\n\n default:\n return translateScalar(value, shape);\n }\n}\n\nfunction translateStructure(structure, shape) {\n if (structure == null) return undefined;\n var struct = {};\n var shapeMembers = shape.members;\n util.each(shapeMembers, function (name, memberShape) {\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n\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 var out = [];\n util.arrayEach(list, function (value) {\n var result = translate(value, shape.member);\n if (result === undefined) out.push(null);else out.push(result);\n });\n return out;\n}\n\nfunction translateMap(map, shape) {\n if (map == null) return undefined;\n var out = {};\n util.each(map, function (key, value) {\n var result = translate(value, shape.value);\n if (result === undefined) out[key] = null;else out[key] = result;\n });\n return out;\n}\n\nfunction translateScalar(value, shape) {\n return shape.toType(value);\n}\n/**\n * @api private\n */\n\n\nmodule.exports = JsonParser;","require(\"core-js/modules/es.array.reduce.js\");\n\n// 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.\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n\n return descriptors;\n};\n\nvar formatRegExp = /%[sdj%]/g;\n\nexports.format = function (f) {\n if (!isString(f)) {\n var objects = [];\n\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function (x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n\n switch (x) {\n case '%s':\n return String(args[i++]);\n\n case '%d':\n return Number(args[i++]);\n\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n\n default:\n return x;\n }\n });\n\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n\n return str;\n}; // Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\n\n\nexports.deprecate = function (fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n } // Allow for deprecating things in the process of starting up.\n\n\n if (typeof process === 'undefined') {\n return function () {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n\n warned = true;\n }\n\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\nvar debugs = {};\nvar debugEnviron;\n\nexports.debuglog = function (set) {\n if (isUndefined(debugEnviron)) debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n\n debugs[set] = function () {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function () {};\n }\n }\n\n return debugs[set];\n};\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n\n/* legacy: obj, showHidden, depth, colors*/\n\n\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n }; // legacy...\n\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n } // set default options\n\n\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\n\nexports.inspect = inspect; // http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\n\ninspect.colors = {\n 'bold': [1, 22],\n 'italic': [3, 23],\n 'underline': [4, 24],\n 'inverse': [7, 27],\n 'white': [37, 39],\n 'grey': [90, 39],\n 'black': [30, 39],\n 'blue': [34, 39],\n 'cyan': [36, 39],\n 'green': [32, 39],\n 'magenta': [35, 39],\n 'red': [31, 39],\n 'yellow': [33, 39]\n}; // Don't use 'blue' not visible on cmd.exe\n\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return \"\\x1B[\" + inspect.colors[style][0] + 'm' + str + \"\\x1B[\" + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\nfunction arrayToHash(array) {\n var hash = {};\n array.forEach(function (val, idx) {\n hash[val] = true;\n });\n return hash;\n}\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect && value && isFunction(value.inspect) && // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect && // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n\n return ret;\n } // Primitive types cannot have properties\n\n\n var primitive = formatPrimitive(ctx, value);\n\n if (primitive) {\n return primitive;\n } // Look up the keys of the object.\n\n\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n } // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n\n\n if (isError(value) && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n } // Some type of object without properties can be shortcutted.\n\n\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '',\n array = false,\n braces = ['{', '}']; // Make Array say that they are Array\n\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n } // Make functions say that they are functions\n\n\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n } // Make RegExps say that they are RegExps\n\n\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n } // Make dates with properties first say the date\n\n\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n } // Make error with message first say the error\n\n\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n var output;\n\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function (key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n return reduceToSingleString(output, base, braces);\n}\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value)) return ctx.stylize('undefined', 'undefined');\n\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '').replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n\n if (isNumber(value)) return ctx.stylize('' + value, 'number');\n if (isBoolean(value)) return ctx.stylize('' + value, 'boolean'); // For some reason typeof null is \"object\", so special case here.\n\n if (isNull(value)) return ctx.stylize('null', 'null');\n}\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, String(i), true));\n } else {\n output.push('');\n }\n }\n\n keys.forEach(function (key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys, key, true));\n }\n });\n return output;\n}\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || {\n value: value[key]\n };\n\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function (line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function (line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n\n name = JSON.stringify('' + key);\n\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\").replace(/\\\\\"/g, '\"').replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function (prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] + (base === '' ? '' : base + '\\n ') + ' ' + output.join(',\\n ') + ' ' + braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n} // NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\n\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\n\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\n\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\n\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\n\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\n\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\n\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\n\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\n\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\n\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\n\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\n\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) && (objectToString(e) === '[object Error]' || e instanceof Error);\n}\n\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\n\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\n\nexports.isPrimitive = isPrimitive;\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; // 26 Feb 16:19:34\n\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()), pad(d.getMinutes()), pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n} // log is just a thin wrapper to console.log that prepends a timestamp\n\n\nexports.log = function () {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\n\n\nexports.inherits = require('inherits');\n\nexports._extend = function (origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n var keys = Object.keys(add);\n var i = keys.length;\n\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function') throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn,\n enumerable: false,\n writable: false,\n configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n var args = [];\n\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn,\n enumerable: false,\n writable: false,\n configurable: true\n });\n return Object.defineProperties(fn, getOwnPropertyDescriptors(original));\n};\n\nexports.promisify.custom = kCustomPromisifiedSymbol;\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n } // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n\n\n function callbackified() {\n var args = [];\n\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n\n var self = this;\n\n var cb = function cb() {\n return maybeCb.apply(self, arguments);\n }; // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n\n\n original.apply(this, args).then(function (ret) {\n process.nextTick(cb, null, ret);\n }, function (rej) {\n process.nextTick(callbackifyOnRejected, rej, cb);\n });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified, getOwnPropertyDescriptors(original));\n return callbackified;\n}\n\nexports.callbackify = callbackify;","'use strict';\n\nmodule.exports = {\n isString: function isString(arg) {\n return typeof arg === 'string';\n },\n isObject: function isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n },\n isNull: function isNull(arg) {\n return arg === null;\n },\n isNullOrUndefined: function isNullOrUndefined(arg) {\n return arg == null;\n }\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar LinkedListNode =\n/** @class */\nfunction () {\n function LinkedListNode(key, value) {\n this.key = key;\n this.value = value;\n }\n\n return LinkedListNode;\n}();\n\nvar LRUCache =\n/** @class */\nfunction () {\n function LRUCache(size) {\n this.nodeMap = {};\n this.size = 0;\n\n if (typeof size !== 'number' || size < 1) {\n throw new Error('Cache size can only be positive number');\n }\n\n this.sizeLimit = size;\n }\n\n Object.defineProperty(LRUCache.prototype, \"length\", {\n get: function get() {\n return this.size;\n },\n enumerable: true,\n configurable: true\n });\n\n LRUCache.prototype.prependToList = function (node) {\n if (!this.headerNode) {\n this.tailNode = node;\n } else {\n this.headerNode.prev = node;\n node.next = this.headerNode;\n }\n\n this.headerNode = node;\n this.size++;\n };\n\n LRUCache.prototype.removeFromTail = function () {\n if (!this.tailNode) {\n return undefined;\n }\n\n var node = this.tailNode;\n var prevNode = node.prev;\n\n if (prevNode) {\n prevNode.next = undefined;\n }\n\n node.prev = undefined;\n this.tailNode = prevNode;\n this.size--;\n return node;\n };\n\n LRUCache.prototype.detachFromList = function (node) {\n if (this.headerNode === node) {\n this.headerNode = node.next;\n }\n\n if (this.tailNode === node) {\n this.tailNode = node.prev;\n }\n\n if (node.prev) {\n node.prev.next = node.next;\n }\n\n if (node.next) {\n node.next.prev = node.prev;\n }\n\n node.next = undefined;\n node.prev = undefined;\n this.size--;\n };\n\n LRUCache.prototype.get = function (key) {\n if (this.nodeMap[key]) {\n var node = this.nodeMap[key];\n this.detachFromList(node);\n this.prependToList(node);\n return node.value;\n }\n };\n\n LRUCache.prototype.remove = function (key) {\n if (this.nodeMap[key]) {\n var node = this.nodeMap[key];\n this.detachFromList(node);\n delete this.nodeMap[key];\n }\n };\n\n LRUCache.prototype.put = function (key, value) {\n if (this.nodeMap[key]) {\n this.remove(key);\n } else if (this.size === this.sizeLimit) {\n var tailNode = this.removeFromTail();\n var key_1 = tailNode.key;\n delete this.nodeMap[key_1];\n }\n\n var newNode = new LinkedListNode(key, value);\n this.nodeMap[key] = newNode;\n this.prependToList(newNode);\n };\n\n LRUCache.prototype.empty = function () {\n var keys = Object.keys(this.nodeMap);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n var node = this.nodeMap[key];\n this.detachFromList(node);\n delete this.nodeMap[key];\n }\n };\n\n return LRUCache;\n}();\n\nexports.LRUCache = LRUCache;","var AWS = require('../core');\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 */\n\n\nAWS.CredentialProviderChain = AWS.util.inherit(AWS.Credentials, {\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 this.resolveCallbacks = [];\n },\n\n /**\n * @!method resolvePromise()\n * Returns a 'thenable' promise.\n * Resolves the provider chain by searching for the first set of\n * credentials in {providers}.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function(credentials)\n * Called if the promise is fulfilled and the provider resolves the chain\n * to a credentials object\n * @param credentials [AWS.Credentials] the credentials object resolved\n * by the provider chain.\n * @callback rejectedCallback function(error)\n * Called if the promise is rejected.\n * @param err [Error] the error object returned if no credentials are found.\n * @return [Promise] A promise that represents the state of the `resolve` method call.\n * @example Calling the `resolvePromise` method.\n * var promise = chain.resolvePromise();\n * promise.then(function(credentials) { ... }, function(err) { ... });\n */\n\n /**\n * Resolves the provider chain by searching for the first set of\n * credentials in {providers}.\n *\n * @callback callback function(err, credentials)\n * Called when the provider resolves the chain to a credentials object\n * or null if no credentials can be found.\n *\n * @param err [Error] the error object returned if no credentials are\n * found.\n * @param credentials [AWS.Credentials] the credentials object resolved\n * by the provider chain.\n * @return [AWS.CredentialProviderChain] the provider, for chaining.\n */\n resolve: function resolve(callback) {\n var self = this;\n\n if (self.providers.length === 0) {\n callback(new Error('No providers'));\n return self;\n }\n\n if (self.resolveCallbacks.push(callback) === 1) {\n var index = 0;\n var providers = self.providers.slice(0);\n\n function resolveNext(err, creds) {\n if (!err && creds || index === providers.length) {\n AWS.util.arrayEach(self.resolveCallbacks, function (callback) {\n callback(err, creds);\n });\n self.resolveCallbacks.length = 0;\n return;\n }\n\n var provider = providers[index++];\n\n if (typeof provider === 'function') {\n creds = provider.call();\n } else {\n creds = provider;\n }\n\n if (creds.get) {\n creds.get(function (getErr) {\n resolveNext(getErr, getErr ? null : creds);\n });\n } else {\n resolveNext(null, creds);\n }\n }\n\n resolveNext();\n }\n\n return self;\n }\n});\n/**\n * 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 () { return new AWS.ECSCredentials(); },\n * function () { return new AWS.ProcessCredentials(); },\n * function () { return new AWS.EC2MetadataCredentials() }\n * ]\n * ```\n */\n\nAWS.CredentialProviderChain.defaultProviders = [];\n/**\n * @api private\n */\n\nAWS.CredentialProviderChain.addPromisesToClass = function addPromisesToClass(PromiseDependency) {\n this.prototype.resolvePromise = AWS.util.promisifyMethod('resolve', PromiseDependency);\n};\n/**\n * @api private\n */\n\n\nAWS.CredentialProviderChain.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.resolvePromise;\n};\n\nAWS.util.addPromises(AWS.CredentialProviderChain);","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n/**\n * @api private\n */\n\nAWS.Signers.V3 = inherit(AWS.Signers.RequestSigner, {\n addAuthorization: function addAuthorization(credentials, date) {\n var datetime = AWS.util.date.rfc822(date);\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'] = this.authorization(credentials, datetime);\n },\n authorization: function authorization(credentials) {\n return 'AWS3 ' + 'AWSAccessKeyId=' + credentials.accessKeyId + ',' + 'Algorithm=HmacSHA256,' + 'SignedHeaders=' + this.signedHeaders() + ',' + 'Signature=' + this.signature(credentials);\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 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 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 signature: function signature(credentials) {\n return AWS.util.crypto.hmac(credentials.secretAccessKey, this.stringToSign(), 'base64');\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 * @api private\n */\n\nmodule.exports = AWS.Signers.V3;","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n/**\n * @api private\n */\n\nAWS.Signers.RequestSigner = inherit({\n constructor: function RequestSigner(request) {\n this.request = request;\n },\n setServiceClientId: function setServiceClientId(id) {\n this.serviceClientId = id;\n },\n getServiceClientId: function getServiceClientId() {\n return this.serviceClientId;\n }\n});\n\nAWS.Signers.RequestSigner.getVersion = function getVersion(version) {\n switch (version) {\n case 'v2':\n return AWS.Signers.V2;\n\n case 'v3':\n return AWS.Signers.V3;\n\n case 's3v4':\n return AWS.Signers.V4;\n\n case 'v4':\n return AWS.Signers.V4;\n\n case 's3':\n return AWS.Signers.S3;\n\n case 'v3https':\n return AWS.Signers.V3Https;\n }\n\n throw new Error('Unknown signing version ' + version);\n};\n\nrequire('./v2');\n\nrequire('./v3');\n\nrequire('./v3https');\n\nrequire('./v4');\n\nrequire('./s3');\n\nrequire('./presign');","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply; // DOM APIs, for completeness\n\nexports.setTimeout = function () {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\n\nexports.setInterval = function () {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\n\nexports.clearTimeout = exports.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}\n\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\n\nTimeout.prototype.close = function () {\n this._clearFn.call(scope, this._id);\n}; // Does not start the time, just sets up the members needed.\n\n\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 var msecs = item._idleTimeout;\n\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout) item._onTimeout();\n }, msecs);\n }\n}; // setimmediate attaches itself to the global object\n\n\nrequire(\"setimmediate\"); // On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\n\n\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","var AWS = require('../core');\n/**\n * @api private\n */\n\n\nvar cachedSecret = {};\n/**\n * @api private\n */\n\nvar cacheQueue = [];\n/**\n * @api private\n */\n\nvar maxCacheEntries = 50;\n/**\n * @api private\n */\n\nvar v4Identifier = 'aws4_request';\n/**\n * @api private\n */\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 [date.substr(0, 8), region, serviceName, v4Identifier].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(credentials, date, region, service, shouldCache) {\n var credsIdentifier = AWS.util.crypto.hmac(credentials.secretAccessKey, credentials.accessKeyId, 'base64');\n var cacheKey = [credsIdentifier, date, region, service].join('_');\n shouldCache = shouldCache !== false;\n\n if (shouldCache && cacheKey in cachedSecret) {\n return cachedSecret[cacheKey];\n }\n\n var kDate = AWS.util.crypto.hmac('AWS4' + credentials.secretAccessKey, date, 'buffer');\n var kRegion = AWS.util.crypto.hmac(kDate, region, 'buffer');\n var kService = AWS.util.crypto.hmac(kRegion, service, 'buffer');\n var signingKey = AWS.util.crypto.hmac(kService, v4Identifier, 'buffer');\n\n if (shouldCache) {\n cachedSecret[cacheKey] = signingKey;\n cacheQueue.push(cacheKey);\n\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 * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\nvar byteToHex = [];\n\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; // join used to fix memory issue caused by concatenation: https://bugs.chromium.org/p/v8/issues/detail?id=3175#c4\n\n return [bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], '-', bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]], bth[buf[i++]]].join('');\n}\n\nmodule.exports = bytesToUuid;",";\n\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var C_algo = C.algo;\n /**\n * HMAC algorithm.\n */\n\n var HMAC = C_algo.HMAC = Base.extend({\n /**\n * Initializes a newly created HMAC.\n *\n * @param {Hasher} hasher The hash algorithm to use.\n * @param {WordArray|string} key The secret key.\n *\n * @example\n *\n * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n */\n init: function init(hasher, key) {\n // Init hasher\n hasher = this._hasher = new hasher.init(); // Convert string to WordArray, else assume WordArray already\n\n if (typeof key == 'string') {\n key = Utf8.parse(key);\n } // Shortcuts\n\n\n var hasherBlockSize = hasher.blockSize;\n var hasherBlockSizeBytes = hasherBlockSize * 4; // Allow arbitrary length keys\n\n if (key.sigBytes > hasherBlockSizeBytes) {\n key = hasher.finalize(key);\n } // Clamp excess bits\n\n\n key.clamp(); // Clone key for inner and outer pads\n\n var oKey = this._oKey = key.clone();\n var iKey = this._iKey = key.clone(); // Shortcuts\n\n var oKeyWords = oKey.words;\n var iKeyWords = iKey.words; // XOR keys with pad constants\n\n for (var i = 0; i < hasherBlockSize; i++) {\n oKeyWords[i] ^= 0x5c5c5c5c;\n iKeyWords[i] ^= 0x36363636;\n }\n\n oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes; // Set initial values\n\n this.reset();\n },\n\n /**\n * Resets this HMAC to its initial state.\n *\n * @example\n *\n * hmacHasher.reset();\n */\n reset: function reset() {\n // Shortcut\n var hasher = this._hasher; // Reset\n\n hasher.reset();\n hasher.update(this._iKey);\n },\n\n /**\n * Updates this HMAC with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {HMAC} This HMAC instance.\n *\n * @example\n *\n * hmacHasher.update('message');\n * hmacHasher.update(wordArray);\n */\n update: function update(messageUpdate) {\n this._hasher.update(messageUpdate); // Chainable\n\n\n return this;\n },\n\n /**\n * Finalizes the HMAC computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The HMAC.\n *\n * @example\n *\n * var hmac = hmacHasher.finalize();\n * var hmac = hmacHasher.finalize('message');\n * var hmac = hmacHasher.finalize(wordArray);\n */\n finalize: function finalize(messageUpdate) {\n // Shortcut\n var hasher = this._hasher; // Compute HMAC\n\n var innerHash = hasher.finalize(messageUpdate);\n hasher.reset();\n var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n return hmac;\n }\n });\n })();\n});","var AWS = require('../core');\n\nvar util = require('../util');\n\nvar QueryParamSerializer = require('../query/query_param_serializer');\n\nvar Shape = require('../model/shape');\n\nvar populateHostPrefix = require('./helpers').populateHostPrefix;\n\nfunction buildRequest(req) {\n var operation = req.service.api.operations[req.operation];\n var httpRequest = req.httpRequest;\n httpRequest.headers['Content-Type'] = 'application/x-www-form-urlencoded; charset=utf-8';\n httpRequest.params = {\n Version: req.service.api.apiVersion,\n Action: operation.name\n }; // convert the request parameters into a list of query params,\n // e.g. Deeply.NestedParam.0.Name=value\n\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 populateHostPrefix(req);\n}\n\nfunction extractError(resp) {\n var data,\n body = resp.httpResponse.body.toString();\n\n if (body.match(' element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function registerImmediate(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n\n\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments.\n\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);","var Collection = require('./collection');\n\nvar Operation = require('./operation');\n\nvar Shape = require('./shape');\n\nvar Paginator = require('./paginator');\n\nvar ResourceWaiter = require('./resource_waiter');\n\nvar util = require('../util');\n\nvar property = util.property;\nvar memoizedProperty = util.memoizedProperty;\n\nfunction Api(api, options) {\n var self = this;\n api = api || {};\n options = options || {};\n options.api = this;\n api.metadata = api.metadata || {};\n property(this, 'isApi', true, false);\n property(this, 'apiVersion', api.metadata.apiVersion);\n property(this, 'endpointPrefix', api.metadata.endpointPrefix);\n property(this, 'signingName', api.metadata.signingName);\n property(this, 'globalEndpoint', api.metadata.globalEndpoint);\n property(this, 'signatureVersion', api.metadata.signatureVersion);\n property(this, 'jsonVersion', api.metadata.jsonVersion);\n property(this, 'targetPrefix', api.metadata.targetPrefix);\n property(this, 'protocol', api.metadata.protocol);\n property(this, 'timestampFormat', api.metadata.timestampFormat);\n property(this, 'xmlNamespaceUri', api.metadata.xmlNamespace);\n property(this, 'abbreviation', api.metadata.serviceAbbreviation);\n property(this, 'fullName', api.metadata.serviceFullName);\n property(this, 'serviceId', api.metadata.serviceId);\n memoizedProperty(this, 'className', function () {\n var name = api.metadata.serviceAbbreviation || api.metadata.serviceFullName;\n if (!name) return null;\n name = name.replace(/^Amazon|AWS\\s*|\\(.*|\\s+|\\W+/g, '');\n if (name === 'ElasticLoadBalancing') name = 'ELB';\n return name;\n });\n\n function addEndpointOperation(name, operation) {\n if (operation.endpointoperation === true) {\n property(self, 'endpointOperation', util.string.lowerFirst(name));\n }\n }\n\n property(this, 'operations', new Collection(api.operations, options, function (name, operation) {\n return new Operation(name, operation, options);\n }, util.string.lowerFirst, addEndpointOperation));\n property(this, 'shapes', new Collection(api.shapes, options, function (name, shape) {\n return Shape.create(shape, options);\n }));\n property(this, 'paginators', new Collection(api.paginators, options, function (name, paginator) {\n return new Paginator(name, paginator, options);\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/**\n * @api private\n */\n\n\nmodule.exports = Api;","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var AWS = require('../core');\n\nvar EventEmitter = require('events').EventEmitter;\n\nrequire('../http');\n/**\n * @api private\n */\n\n\nAWS.XHRClient = AWS.util.inherit({\n handleRequest: function handleRequest(httpRequest, httpOptions, callback, errCallback) {\n var self = this;\n var endpoint = httpRequest.endpoint;\n var emitter = new EventEmitter();\n var href = endpoint.protocol + '//' + endpoint.hostname;\n\n if (endpoint.port !== 80 && endpoint.port !== 443) {\n href += ':' + endpoint.port;\n }\n\n href += httpRequest.path;\n var xhr = new XMLHttpRequest(),\n headersEmitted = false;\n httpRequest.stream = xhr;\n xhr.addEventListener('readystatechange', function () {\n try {\n if (xhr.status === 0) return; // 0 code is invalid\n } catch (e) {\n return;\n }\n\n if (this.readyState >= this.HEADERS_RECEIVED && !headersEmitted) {\n emitter.statusCode = xhr.status;\n emitter.headers = self.parseHeaders(xhr.getAllResponseHeaders());\n emitter.emit('headers', emitter.statusCode, emitter.headers, xhr.statusText);\n headersEmitted = true;\n }\n\n if (this.readyState === this.DONE) {\n self.finishRequest(xhr, emitter);\n }\n }, false);\n xhr.upload.addEventListener('progress', function (evt) {\n emitter.emit('sendProgress', evt);\n });\n xhr.addEventListener('progress', function (evt) {\n emitter.emit('receiveProgress', evt);\n }, false);\n xhr.addEventListener('timeout', function () {\n errCallback(AWS.util.error(new Error('Timeout'), {\n code: 'TimeoutError'\n }));\n }, false);\n xhr.addEventListener('error', function () {\n errCallback(AWS.util.error(new Error('Network Failure'), {\n code: 'NetworkingError'\n }));\n }, false);\n xhr.addEventListener('abort', function () {\n errCallback(AWS.util.error(new Error('Request aborted'), {\n code: 'RequestAbortedError'\n }));\n }, false);\n callback(emitter);\n xhr.open(httpRequest.method, href, httpOptions.xhrAsync !== false);\n AWS.util.each(httpRequest.headers, function (key, value) {\n if (key !== 'Content-Length' && key !== 'User-Agent' && key !== 'Host') {\n xhr.setRequestHeader(key, value);\n }\n });\n\n if (httpOptions.timeout && httpOptions.xhrAsync !== false) {\n xhr.timeout = httpOptions.timeout;\n }\n\n if (httpOptions.xhrWithCredentials) {\n xhr.withCredentials = true;\n }\n\n try {\n xhr.responseType = 'arraybuffer';\n } catch (e) {}\n\n try {\n if (httpRequest.body) {\n xhr.send(httpRequest.body);\n } else {\n xhr.send();\n }\n } catch (err) {\n if (httpRequest.body && typeof httpRequest.body.buffer === 'object') {\n xhr.send(httpRequest.body.buffer); // send ArrayBuffer directly\n } else {\n throw err;\n }\n }\n\n return emitter;\n },\n parseHeaders: function parseHeaders(rawHeaders) {\n var headers = {};\n AWS.util.arrayEach(rawHeaders.split(/\\r?\\n/), function (line) {\n var key = line.split(':', 1)[0];\n var value = line.substring(key.length + 2);\n if (key.length > 0) headers[key.toLowerCase()] = value;\n });\n return headers;\n },\n finishRequest: function finishRequest(xhr, emitter) {\n var buffer;\n\n if (xhr.responseType === 'arraybuffer' && xhr.response) {\n var ab = xhr.response;\n buffer = new AWS.util.Buffer(ab.byteLength);\n var view = new Uint8Array(ab);\n\n for (var i = 0; i < buffer.length; ++i) {\n buffer[i] = view[i];\n }\n }\n\n try {\n if (!buffer && typeof xhr.responseText === 'string') {\n buffer = new AWS.util.Buffer(xhr.responseText);\n }\n } catch (e) {}\n\n if (buffer) emitter.emit('data', buffer);\n emitter.emit('end');\n }\n});\n/**\n * @api private\n */\n\nAWS.HttpClient.prototype = AWS.XHRClient.prototype;\n/**\n * @api private\n */\n\nAWS.HttpClient.streamsApiVersion = 1;","var memoizedProperty = require('../util').memoizedProperty;\n\nfunction memoize(name, value, factory, nameTr) {\n memoizedProperty(this, nameTr(name), function () {\n return factory(name, value);\n });\n}\n\nfunction Collection(iterable, options, factory, nameTr, callback) {\n nameTr = nameTr || String;\n var self = this;\n\n for (var id in iterable) {\n if (Object.prototype.hasOwnProperty.call(iterable, id)) {\n memoize.call(self, id, iterable[id], factory, nameTr);\n if (callback) callback(id, iterable[id]);\n }\n }\n}\n/**\n * @api private\n */\n\n\nmodule.exports = Collection;","var AWS = require('./core');\n/**\n * @api private\n */\n\n\nAWS.ParamValidator = AWS.util.inherit({\n /**\n * Create a new validator object.\n *\n * @param validation [Boolean|map] whether input parameters should be\n * validated against the operation description before sending the\n * request. Pass a map to enable any of the following specific\n * validation features:\n *\n * * **min** [Boolean] — Validates that a value meets the min\n * constraint. This is enabled by default when paramValidation is set\n * to `true`.\n * * **max** [Boolean] — Validates that a value meets the max\n * constraint.\n * * **pattern** [Boolean] — Validates that a string value matches a\n * regular expression.\n * * **enum** [Boolean] — Validates that a string value matches one\n * of the allowable enum values.\n */\n constructor: function ParamValidator(validation) {\n if (validation === true || validation === undefined) {\n validation = {\n 'min': true\n };\n }\n\n this.validation = validation;\n },\n validate: function validate(shape, params, context) {\n this.errors = [];\n this.validateMember(shape, params || {}, context || 'params');\n\n if (this.errors.length > 1) {\n var msg = this.errors.join('\\n* ');\n msg = 'There were ' + this.errors.length + ' validation errors:\\n* ' + msg;\n throw AWS.util.error(new Error(msg), {\n code: 'MultipleValidationErrors',\n errors: this.errors\n });\n } else if (this.errors.length === 1) {\n throw this.errors[0];\n } else {\n return true;\n }\n },\n fail: function fail(code, message) {\n this.errors.push(AWS.util.error(new Error(message), {\n code: code\n }));\n },\n validateStructure: function validateStructure(shape, params, context) {\n this.validateType(params, context, ['object'], 'structure');\n var paramName;\n\n for (var i = 0; shape.required && i < shape.required.length; i++) {\n paramName = shape.required[i];\n var value = params[paramName];\n\n if (value === undefined || value === null) {\n this.fail('MissingRequiredParameter', 'Missing required key \\'' + paramName + '\\' in ' + context);\n }\n } // validate hash members\n\n\n for (paramName in params) {\n if (!Object.prototype.hasOwnProperty.call(params, paramName)) continue;\n var paramValue = params[paramName],\n memberShape = shape.members[paramName];\n\n if (memberShape !== undefined) {\n var memberContext = [context, paramName].join('.');\n this.validateMember(memberShape, paramValue, memberContext);\n } else {\n this.fail('UnexpectedParameter', 'Unexpected key \\'' + paramName + '\\' found in ' + context);\n }\n }\n\n return true;\n },\n validateMember: function validateMember(shape, param, context) {\n switch (shape.type) {\n case 'structure':\n return this.validateStructure(shape, param, context);\n\n case 'list':\n return this.validateList(shape, param, context);\n\n case 'map':\n return this.validateMap(shape, param, context);\n\n default:\n return this.validateScalar(shape, param, context);\n }\n },\n validateList: function validateList(shape, params, context) {\n if (this.validateType(params, context, [Array])) {\n this.validateRange(shape, params.length, context, 'list member count'); // validate array members\n\n for (var i = 0; i < params.length; i++) {\n this.validateMember(shape.member, params[i], context + '[' + i + ']');\n }\n }\n },\n validateMap: function validateMap(shape, params, context) {\n if (this.validateType(params, context, ['object'], 'map')) {\n // Build up a count of map members to validate range traits.\n var mapCount = 0;\n\n for (var param in params) {\n if (!Object.prototype.hasOwnProperty.call(params, param)) continue; // Validate any map key trait constraints\n\n this.validateMember(shape.key, param, context + '[key=\\'' + param + '\\']');\n this.validateMember(shape.value, params[param], context + '[\\'' + param + '\\']');\n mapCount++;\n }\n\n this.validateRange(shape, mapCount, context, 'map member count');\n }\n },\n validateScalar: function validateScalar(shape, value, context) {\n switch (shape.type) {\n case null:\n case undefined:\n case 'string':\n return this.validateString(shape, value, context);\n\n case 'base64':\n case 'binary':\n return this.validatePayload(value, context);\n\n case 'integer':\n case 'float':\n return this.validateNumber(shape, value, context);\n\n case 'boolean':\n return this.validateType(value, context, ['boolean']);\n\n case 'timestamp':\n return this.validateType(value, context, [Date, /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?Z$/, 'number'], 'Date object, ISO-8601 string, or a UNIX timestamp');\n\n default:\n return this.fail('UnkownType', 'Unhandled type ' + shape.type + ' for ' + context);\n }\n },\n validateString: function validateString(shape, value, context) {\n var validTypes = ['string'];\n\n if (shape.isJsonValue) {\n validTypes = validTypes.concat(['number', 'object', 'boolean']);\n }\n\n if (value !== null && this.validateType(value, context, validTypes)) {\n this.validateEnum(shape, value, context);\n this.validateRange(shape, value.length, context, 'string length');\n this.validatePattern(shape, value, context);\n this.validateUri(shape, value, context);\n }\n },\n validateUri: function validateUri(shape, value, context) {\n if (shape['location'] === 'uri') {\n if (value.length === 0) {\n this.fail('UriParameterError', 'Expected uri parameter to have length >= 1,' + ' but found \"' + value + '\" for ' + context);\n }\n }\n },\n validatePattern: function validatePattern(shape, value, context) {\n if (this.validation['pattern'] && shape['pattern'] !== undefined) {\n if (!new RegExp(shape['pattern']).test(value)) {\n this.fail('PatternMatchError', 'Provided value \"' + value + '\" ' + 'does not match regex pattern /' + shape['pattern'] + '/ for ' + context);\n }\n }\n },\n validateRange: function validateRange(shape, value, context, descriptor) {\n if (this.validation['min']) {\n if (shape['min'] !== undefined && value < shape['min']) {\n this.fail('MinRangeError', 'Expected ' + descriptor + ' >= ' + shape['min'] + ', but found ' + value + ' for ' + context);\n }\n }\n\n if (this.validation['max']) {\n if (shape['max'] !== undefined && value > shape['max']) {\n this.fail('MaxRangeError', 'Expected ' + descriptor + ' <= ' + shape['max'] + ', but found ' + value + ' for ' + context);\n }\n }\n },\n validateEnum: function validateRange(shape, value, context) {\n if (this.validation['enum'] && shape['enum'] !== undefined) {\n // Fail if the string value is not present in the enum list\n if (shape['enum'].indexOf(value) === -1) {\n this.fail('EnumError', 'Found string value of ' + value + ', but ' + 'expected ' + shape['enum'].join('|') + ' for ' + context);\n }\n }\n },\n validateType: function validateType(value, context, acceptedTypes, type) {\n // We will not log an error for null or undefined, but we will return\n // false so that callers know that the expected type was not strictly met.\n if (value === null || value === undefined) return false;\n var foundInvalidType = false;\n\n for (var i = 0; i < acceptedTypes.length; i++) {\n if (typeof acceptedTypes[i] === 'string') {\n if (typeof value === acceptedTypes[i]) return true;\n } else if (acceptedTypes[i] instanceof RegExp) {\n if ((value || '').toString().match(acceptedTypes[i])) return true;\n } else {\n if (value instanceof acceptedTypes[i]) return true;\n if (AWS.util.isType(value, acceptedTypes[i])) return true;\n if (!type && !foundInvalidType) acceptedTypes = acceptedTypes.slice();\n acceptedTypes[i] = AWS.util.typeName(acceptedTypes[i]);\n }\n\n foundInvalidType = true;\n }\n\n var acceptedType = type;\n\n if (!acceptedType) {\n acceptedType = acceptedTypes.join(', ').replace(/,([^,]+)$/, ', or$1');\n }\n\n var vowel = acceptedType.match(/^[aeiou]/i) ? 'n' : '';\n this.fail('InvalidParameterType', 'Expected ' + context + ' to be a' + vowel + ' ' + acceptedType);\n return false;\n },\n validateNumber: function validateNumber(shape, value, context) {\n if (value === null || value === undefined) return;\n\n if (typeof value === 'string') {\n var castedValue = parseFloat(value);\n if (castedValue.toString() === value) value = castedValue;\n }\n\n if (this.validateType(value, context, ['number'])) {\n this.validateRange(shape, value, context, 'numeric value');\n }\n },\n validatePayload: function validatePayload(value, context) {\n if (value === null || value === undefined) return;\n if (typeof value === 'string') return;\n if (value && typeof value.byteLength === 'number') return; // typed arrays\n\n if (AWS.util.isNode()) {\n // special check for buffer/stream in Node.js\n var Stream = AWS.util.stream.Stream;\n if (AWS.util.Buffer.isBuffer(value) || value instanceof Stream) return;\n } else {\n if (typeof Blob !== void 0 && value instanceof Blob) return;\n }\n\n var types = ['Buffer', 'Stream', 'File', 'Blob', 'ArrayBuffer', 'DataView'];\n\n if (value) {\n for (var i = 0; i < types.length; i++) {\n if (AWS.util.isType(value, types[i])) return;\n if (AWS.util.typeName(value.constructor) === types[i]) return;\n }\n }\n\n this.fail('InvalidParameterType', 'Expected ' + context + ' to be a ' + 'string, Buffer, Stream, Blob, or typed array object');\n }\n});","var AWS = require('./core');\n\nvar inherit = AWS.util.inherit;\n\nvar jmespath = require('jmespath');\n/**\n * This class encapsulates the response information\n * from a service request operation sent through {AWS.Request}.\n * The response object has two main properties for getting information\n * back from a request:\n *\n * ## The `data` property\n *\n * The `response.data` property contains the serialized object data\n * retrieved from the service request. For instance, for an\n * Amazon DynamoDB `listTables` method call, the response data might\n * look like:\n *\n * ```\n * > resp.data\n * { TableNames:\n * [ 'table1', 'table2', ... ] }\n * ```\n *\n * The `data` property can be null if an error occurs (see below).\n *\n * ## The `error` property\n *\n * In the event of a service error (or transfer error), the\n * `response.error` property will be filled with the given\n * error data in the form:\n *\n * ```\n * { code: 'SHORT_UNIQUE_ERROR_CODE',\n * message: 'Some human readable error message' }\n * ```\n *\n * In the case of an error, the `data` property will be `null`.\n * Note that if you handle events that can be in a failure state,\n * you should always check whether `response.error` is set\n * before attempting to access the `response.data` property.\n *\n * @!attribute data\n * @readonly\n * @!group Data Properties\n * @note Inside of a {AWS.Request~httpData} event, this\n * property contains a single raw packet instead of the\n * full de-serialized service response.\n * @return [Object] the de-serialized response data\n * from the service.\n *\n * @!attribute error\n * An structure containing information about a service\n * or networking error.\n * @readonly\n * @!group Data Properties\n * @note This attribute is only filled if a service or\n * networking error occurs.\n * @return [Error]\n * * code [String] a unique short code representing the\n * error that was emitted.\n * * message [String] a longer human readable error message\n * * retryable [Boolean] whether the error message is\n * retryable.\n * * statusCode [Numeric] in the case of a request that reached the service,\n * this value contains the response status code.\n * * time [Date] the date time object when the error occurred.\n * * hostname [String] set when a networking error occurs to easily\n * identify the endpoint of the request.\n * * region [String] set when a networking error occurs to easily\n * identify the region of the request.\n *\n * @!attribute requestId\n * @readonly\n * @!group Data Properties\n * @return [String] the unique request ID associated with the response.\n * Log this value when debugging requests for AWS support.\n *\n * @!attribute retryCount\n * @readonly\n * @!group Operation Properties\n * @return [Integer] the number of retries that were\n * attempted before the request was completed.\n *\n * @!attribute redirectCount\n * @readonly\n * @!group Operation Properties\n * @return [Integer] the number of redirects that were\n * followed before the request was completed.\n *\n * @!attribute httpResponse\n * @readonly\n * @!group HTTP Properties\n * @return [AWS.HttpResponse] the raw HTTP response object\n * containing the response headers and body information\n * from the server.\n *\n * @see AWS.Request\n */\n\n\nAWS.Response = inherit({\n /**\n * @api private\n */\n constructor: function Response(request) {\n this.request = request;\n this.data = null;\n this.error = null;\n this.retryCount = 0;\n this.redirectCount = 0;\n this.httpResponse = new AWS.HttpResponse();\n\n if (request) {\n this.maxRetries = request.service.numRetries();\n this.maxRedirects = request.service.config.maxRedirects;\n }\n },\n\n /**\n * Creates a new request for the next page of response data, calling the\n * callback with the page data if a callback is provided.\n *\n * @callback callback function(err, data)\n * Called when a page of data is returned from the next request.\n *\n * @param err [Error] an error object, if an error occurred in the request\n * @param data [Object] the next page of data, or null, if there are no\n * more pages left.\n * @return [AWS.Request] the request object for the next page of data\n * @return [null] if no callback is provided and there are no pages left\n * to retrieve.\n * @since v1.4.0\n */\n nextPage: function nextPage(callback) {\n var config;\n var service = this.request.service;\n var operation = this.request.operation;\n\n try {\n config = service.paginationConfig(operation, true);\n } catch (e) {\n this.error = e;\n }\n\n if (!this.hasNextPage()) {\n if (callback) callback(this.error, null);else if (this.error) throw this.error;\n return null;\n }\n\n var params = AWS.util.copy(this.request.params);\n\n if (!this.nextPageTokens) {\n return callback ? callback(null, null) : null;\n } else {\n var inputTokens = config.inputToken;\n if (typeof inputTokens === 'string') inputTokens = [inputTokens];\n\n for (var i = 0; i < inputTokens.length; i++) {\n params[inputTokens[i]] = this.nextPageTokens[i];\n }\n\n return service.makeRequest(this.request.operation, params, callback);\n }\n },\n\n /**\n * @return [Boolean] whether more pages of data can be returned by further\n * requests\n * @since v1.4.0\n */\n hasNextPage: function hasNextPage() {\n this.cacheNextPageTokens();\n if (this.nextPageTokens) return true;\n if (this.nextPageTokens === undefined) return undefined;else return false;\n },\n\n /**\n * @api private\n */\n cacheNextPageTokens: function cacheNextPageTokens() {\n if (Object.prototype.hasOwnProperty.call(this, 'nextPageTokens')) return this.nextPageTokens;\n this.nextPageTokens = undefined;\n var config = this.request.service.paginationConfig(this.request.operation);\n if (!config) return this.nextPageTokens;\n this.nextPageTokens = null;\n\n if (config.moreResults) {\n if (!jmespath.search(this.data, config.moreResults)) {\n return this.nextPageTokens;\n }\n }\n\n var exprs = config.outputToken;\n if (typeof exprs === 'string') exprs = [exprs];\n AWS.util.arrayEach.call(this, exprs, function (expr) {\n var output = jmespath.search(this.data, expr);\n\n if (output) {\n this.nextPageTokens = this.nextPageTokens || [];\n this.nextPageTokens.push(output);\n }\n });\n return this.nextPageTokens;\n }\n});","var Buffer = require('buffer/').Buffer;\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 */\n\n\nif (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'undefined') {\n ArrayBuffer.isView = function (arg) {\n return viewStrings.indexOf(Object.prototype.toString.call(arg)) > -1;\n };\n}\n/**\n * @api private\n */\n\n\nvar viewStrings = ['[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]', '[object DataView]'];\n/**\n * @api private\n */\n\nfunction isEmptyData(data) {\n if (typeof data === 'string') {\n return data.length === 0;\n }\n\n return data.byteLength === 0;\n}\n/**\n * @api private\n */\n\n\nfunction convertToBuffer(data) {\n if (typeof data === 'string') {\n data = new Buffer(data, 'utf8');\n }\n\n if (ArrayBuffer.isView(data)) {\n return new Uint8Array(data.buffer, data.byteOffset, data.byteLength / Uint8Array.BYTES_PER_ELEMENT);\n }\n\n return new Uint8Array(data);\n}\n/**\n * @api private\n */\n\n\nmodule.exports = exports = {\n isEmptyData: isEmptyData,\n convertToBuffer: convertToBuffer\n};","// 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\n// getRandomValues needs to be invoked in a context where \"this\" is a Crypto\n// implementation. Also, find the complete implementation of crypto on IE11.\nvar getRandomValues = typeof crypto != 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || typeof msCrypto != 'undefined' && typeof window.msCrypto.getRandomValues == 'function' && msCrypto.getRandomValues.bind(msCrypto);\n\nif (getRandomValues) {\n // WHATWG crypto RNG - http://wiki.whatwg.org/wiki/Crypto\n var rnds8 = new Uint8Array(16); // eslint-disable-line no-undef\n\n module.exports = function whatwgRNG() {\n getRandomValues(rnds8);\n return rnds8;\n };\n} else {\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\n module.exports = function mathRNG() {\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}","var escapeAttribute = require('./escape-attribute').escapeAttribute;\n/**\n * Represents an XML node.\n * @api private\n */\n\n\nfunction XmlNode(name, children) {\n if (children === void 0) {\n children = [];\n }\n\n this.name = name;\n this.children = children;\n this.attributes = {};\n}\n\nXmlNode.prototype.addAttribute = function (name, value) {\n this.attributes[name] = value;\n return this;\n};\n\nXmlNode.prototype.addChildNode = function (child) {\n this.children.push(child);\n return this;\n};\n\nXmlNode.prototype.removeAttribute = function (name) {\n delete this.attributes[name];\n return this;\n};\n\nXmlNode.prototype.toString = function () {\n var hasChildren = Boolean(this.children.length);\n var xmlText = '<' + this.name; // add attributes\n\n var attributes = this.attributes;\n\n for (var i = 0, attributeNames = Object.keys(attributes); i < attributeNames.length; i++) {\n var attributeName = attributeNames[i];\n var attribute = attributes[attributeName];\n\n if (typeof attribute !== 'undefined' && attribute !== null) {\n xmlText += ' ' + attributeName + '=\\\"' + escapeAttribute('' + attribute) + '\\\"';\n }\n }\n\n return xmlText += !hasChildren ? '/>' : '>' + this.children.map(function (c) {\n return c.toString();\n }).join('') + '';\n};\n/**\n * @api private\n */\n\n\nmodule.exports = {\n XmlNode: XmlNode\n};","var AWS = require('./core');\n/**\n * @api private\n * @!method on(eventName, callback)\n * Registers an event listener callback for the event given by `eventName`.\n * Parameters passed to the callback function depend on the individual event\n * being triggered. See the event documentation for those parameters.\n *\n * @param eventName [String] the event name to register the listener for\n * @param callback [Function] the listener callback function\n * @param toHead [Boolean] attach the listener callback to the head of callback array if set to true.\n * Default to be false.\n * @return [AWS.SequentialExecutor] the same object for chaining\n */\n\n\nAWS.SequentialExecutor = AWS.util.inherit({\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 on: function on(eventName, listener, toHead) {\n if (this._events[eventName]) {\n toHead ? this._events[eventName].unshift(listener) : this._events[eventName].push(listener);\n } else {\n this._events[eventName] = [listener];\n }\n\n return this;\n },\n onAsync: function onAsync(eventName, listener, toHead) {\n listener._isAsync = true;\n return this.on(eventName, listener, toHead);\n },\n removeListener: function removeListener(eventName, listener) {\n var listeners = this._events[eventName];\n\n if (listeners) {\n var length = listeners.length;\n var position = -1;\n\n for (var i = 0; i < length; ++i) {\n if (listeners[i] === listener) {\n position = i;\n }\n }\n\n if (position > -1) {\n listeners.splice(position, 1);\n }\n }\n\n return this;\n },\n removeAllListeners: function removeAllListeners(eventName) {\n if (eventName) {\n delete this._events[eventName];\n } else {\n this._events = {};\n }\n\n return this;\n },\n\n /**\n * @api private\n */\n emit: function emit(eventName, eventArgs, doneCallback) {\n if (!doneCallback) doneCallback = function doneCallback() {};\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\n if (self._haltHandlersOnError) {\n return doneCallback.call(self, error);\n }\n }\n\n self.callListeners(listeners, args, doneCallback, error);\n }\n\n while (listeners.length > 0) {\n var listener = listeners.shift();\n\n if (listener._isAsync) {\n // asynchronous listener\n listener.apply(self, args.concat([callNextListener]));\n return; // stop here, callNextListener will continue\n } else {\n // synchronous listener\n try {\n listener.apply(self, args);\n } catch (err) {\n error = AWS.util.error(error || new Error(), err);\n }\n\n if (error && self._haltHandlersOnError) {\n doneCallback.call(self, error);\n return;\n }\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; // extract listeners if parameter is an SequentialExecutor object\n\n if (listeners._events) listeners = listeners._events;\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 return self;\n },\n\n /**\n * Registers an event with {on} and saves the callback handle function\n * as a property on the emitter object using a given `name`.\n *\n * @param name [String] the property name to set on this object containing\n * the callback function handle so that the listener can be removed in\n * the future.\n * @param (see on)\n * @return (see on)\n * @example Adding a named listener DATA_CALLBACK\n * var listener = function() { doSomething(); };\n * emitter.addNamedListener('DATA_CALLBACK', 'data', listener);\n *\n * // the following prints: true\n * console.log(emitter.DATA_CALLBACK == listener);\n */\n addNamedListener: function addNamedListener(name, eventName, callback, toHead) {\n this[name] = callback;\n this.addListener(eventName, callback, toHead);\n return this;\n },\n\n /**\n * @api private\n */\n addNamedAsyncListener: function addNamedAsyncListener(name, eventName, callback, toHead) {\n callback._isAsync = true;\n return this.addNamedListener(name, eventName, callback, toHead);\n },\n\n /**\n * Helper method to add a set of named listeners using\n * {addNamedListener}. The callback contains a parameter\n * with a handle to the `addNamedListener` method.\n *\n * @callback callback function(add)\n * The callback function is called immediately in order to provide\n * the `add` function to the block. This simplifies the addition of\n * a large group of named listeners.\n * @param add [Function] the {addNamedListener} function to call\n * when registering listeners.\n * @example Adding a set of named listeners\n * emitter.addNamedListeners(function(add) {\n * add('DATA_CALLBACK', 'data', function() { ... });\n * add('OTHER', 'otherEvent', function() { ... });\n * add('LAST', 'lastEvent', function() { ... });\n * });\n *\n * // these properties are now set:\n * emitter.DATA_CALLBACK;\n * emitter.OTHER;\n * emitter.LAST;\n */\n addNamedListeners: function addNamedListeners(callback) {\n var self = this;\n callback(function () {\n self.addNamedListener.apply(self, arguments);\n }, function () {\n self.addNamedAsyncListener.apply(self, arguments);\n });\n return this;\n }\n});\n/**\n * {on} is the prefered method.\n * @api private\n */\n\nAWS.SequentialExecutor.prototype.addListener = AWS.SequentialExecutor.prototype.on;\n/**\n * @api private\n */\n\nmodule.exports = AWS.SequentialExecutor;","/**\n * Takes in a buffer of event messages and splits them into individual messages.\n * @param {Buffer} buffer\n * @api private\n */\nfunction eventMessageChunker(buffer) {\n /** @type Buffer[] */\n var messages = [];\n var offset = 0;\n\n while (offset < buffer.length) {\n var totalLength = buffer.readInt32BE(offset); // create new buffer for individual message (shares memory with original)\n\n var message = buffer.slice(offset, totalLength + offset); // increment offset to it starts at the next message\n\n offset += totalLength;\n messages.push(message);\n }\n\n return messages;\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n eventMessageChunker: eventMessageChunker\n};","'use strict';\nvar $ = require('../internals/export');\nvar $trimStart = require('../internals/string-trim').start;\nvar forcedStringTrimMethod = require('../internals/string-trim-forced');\n\nvar FORCED = forcedStringTrimMethod('trimStart');\n\nvar trimStart = FORCED ? function trimStart() {\n return $trimStart(this);\n} : ''.trimStart;\n\n// `String.prototype.{ trimStart, trimLeft }` methods\n// https://tc39.es/ecma262/#sec-string.prototype.trimstart\n// https://tc39.es/ecma262/#String.prototype.trimleft\n$({ target: 'String', proto: true, forced: FORCED }, {\n trimStart: trimStart,\n trimLeft: trimStart\n});\n","// 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'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n};\nvar ReflectOwnKeys;\n\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n};\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\n\nmodule.exports = EventEmitter;\nmodule.exports.once = once; // Backwards-compat with node 0.10.x\n\nEventEmitter.EventEmitter = EventEmitter;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\n\nvar defaultMaxListeners = 10;\n\nfunction checkListener(listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n}\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function get() {\n return defaultMaxListeners;\n },\n set: function set(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function () {\n if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n}; // Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\n\n\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n\n this._maxListeners = n;\n return this;\n};\n\nfunction _getMaxListeners(that) {\n if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return _getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n\n for (var i = 1; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var doError = type === 'error';\n var events = this._events;\n if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw.\n\n if (doError) {\n var er;\n if (args.length > 0) er = args[0];\n\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n } // At least give some kind of context to the user\n\n\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n if (handler === undefined) return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n\n for (var i = 0; i < len; ++i) {\n ReflectApply(listeners[i], this, args);\n }\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n checkListener(listener);\n events = target._events;\n\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n\n events = target._events;\n }\n\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n } // Check for listener leak\n\n\n m = _getMaxListeners(target);\n\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true; // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n\n var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener = function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n};\n\nfunction onceWrapper() {\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n if (arguments.length === 0) return this.listener.call(this.target);\n return this.listener.apply(this.target, arguments);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = {\n fired: false,\n wrapFn: undefined,\n target: target,\n type: type,\n listener: listener\n };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n checkListener(listener);\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {\n checkListener(listener);\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n}; // Emits a 'removeListener' event if and only if the listener was removed.\n\n\nEventEmitter.prototype.removeListener = function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n checkListener(listener);\n events = this._events;\n if (events === undefined) return this;\n list = events[type];\n if (list === undefined) return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else {\n delete events[type];\n if (events.removeListener) this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0) return this;\n if (position === 0) list.shift();else {\n spliceOne(list, position);\n }\n if (list.length === 1) events[type] = list[0];\n if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n};\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n var listeners, events, i;\n events = this._events;\n if (events === undefined) return this; // not listening for removeListener, no need to emit\n\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];\n }\n\n return this;\n } // emit removeListener for all listeners on all events\n\n\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n};\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n if (events === undefined) return [];\n var evlistener = events[type];\n if (evlistener === undefined) return [];\n if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function (emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\n\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n\n for (var i = 0; i < n; ++i) {\n copy[i] = arr[i];\n }\n\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++) {\n list[index] = list[index + 1];\n }\n\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n\n return ret;\n}\n\nfunction once(emitter, name) {\n return new Promise(function (resolve, reject) {\n function eventListener() {\n if (errorListener !== undefined) {\n emitter.removeListener('error', errorListener);\n }\n\n resolve([].slice.call(arguments));\n }\n\n ;\n var errorListener; // Adding an error listener is not optional because\n // if an error is thrown on an event emitter we cannot\n // guarantee that the actual event we are waiting will\n // be fired. The result could be a silent way to create\n // memory or file descriptor leaks, which is something\n // we should avoid.\n\n if (name !== 'error') {\n errorListener = function errorListener(err) {\n emitter.removeListener(name, eventListener);\n reject(err);\n };\n\n emitter.once('error', errorListener);\n }\n\n emitter.once(name, eventListener);\n });\n}","/**\n * The main AWS namespace\n */\nvar AWS = {\n util: require('./util')\n};\n/**\n * @api private\n * @!macro [new] nobrowser\n * @note This feature is not supported in the browser environment of the SDK.\n */\n\nvar _hidden = {};\n\n_hidden.toString(); // hack to parse macro\n\n/**\n * @api private\n */\n\n\nmodule.exports = AWS;\nAWS.util.update(AWS, {\n /**\n * @constant\n */\n VERSION: '2.518.0',\n\n /**\n * @api private\n */\n Signers: {},\n\n /**\n * @api private\n */\n Protocol: {\n Json: require('./protocol/json'),\n Query: require('./protocol/query'),\n Rest: require('./protocol/rest'),\n RestJson: require('./protocol/rest_json'),\n RestXml: require('./protocol/rest_xml')\n },\n\n /**\n * @api private\n */\n XML: {\n Builder: require('./xml/builder'),\n Parser: null // conditionally set based on environment\n\n },\n\n /**\n * @api private\n */\n JSON: {\n Builder: require('./json/builder'),\n Parser: require('./json/parser')\n },\n\n /**\n * @api private\n */\n Model: {\n Api: require('./model/api'),\n Operation: require('./model/operation'),\n Shape: require('./model/shape'),\n Paginator: require('./model/paginator'),\n ResourceWaiter: require('./model/resource_waiter')\n },\n\n /**\n * @api private\n */\n apiLoader: require('./api_loader'),\n\n /**\n * @api private\n */\n EndpointCache: require('../vendor/endpoint-cache').EndpointCache\n});\n\nrequire('./sequential_executor');\n\nrequire('./service');\n\nrequire('./config');\n\nrequire('./http');\n\nrequire('./event_listeners');\n\nrequire('./request');\n\nrequire('./response');\n\nrequire('./resource_waiter');\n\nrequire('./signers/request_signer');\n\nrequire('./param_validator');\n/**\n * @readonly\n * @return [AWS.SequentialExecutor] a collection of global event listeners that\n * are attached to every sent request.\n * @see AWS.Request AWS.Request for a list of events to listen for\n * @example Logging the time taken to send a request\n * AWS.events.on('send', function startSend(resp) {\n * resp.startTime = new Date().getTime();\n * }).on('complete', function calculateTime(resp) {\n * var time = (new Date().getTime() - resp.startTime) / 1000;\n * console.log('Request took ' + time + ' seconds');\n * });\n *\n * new AWS.S3().listBuckets(); // prints 'Request took 0.285 seconds'\n */\n\n\nAWS.events = new AWS.SequentialExecutor(); //create endpoint cache lazily\n\nAWS.util.memoizedProperty(AWS, 'endpointCache', function () {\n return new AWS.EndpointCache(AWS.config.endpointCacheSize);\n}, true);","require('../lib/node_loader');\n\nvar AWS = require('../lib/core');\n\nvar Service = AWS.Service;\nvar apiLoader = AWS.apiLoader;\napiLoader.services['sts'] = {};\nAWS.STS = Service.defineService('sts', ['2011-06-15']);\n\nrequire('../lib/services/sts');\n\nObject.defineProperty(apiLoader.services['sts'], '2011-06-15', {\n get: function get() {\n var model = require('../apis/sts-2011-06-15.min.json');\n\n model.paginators = require('../apis/sts-2011-06-15.paginators.json').pagination;\n return model;\n },\n enumerable: true,\n configurable: true\n});\nmodule.exports = AWS.STS;","var AWS = require('./core');\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 */\n\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 this.expired = false;\n this.expireTime = null;\n this.refreshCallbacks = [];\n\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\n if (this.needsRefresh()) {\n this.refresh(function (err) {\n if (!err) self.expired = false; // reset expired flag\n\n if (callback) callback(err);\n });\n } else if (callback) {\n callback();\n }\n },\n\n /**\n * @!method getPromise()\n * Returns a 'thenable' promise.\n * Gets the existing credentials, refreshing them if they are not yet loaded\n * or have expired. Users should call this method before using {refresh},\n * as this will not attempt to reload credentials when they are already\n * loaded into the object.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function()\n * Called if the promise is fulfilled. When this callback is called, it\n * means either credentials do not need to be refreshed or refreshed\n * credentials information has been loaded into the object (as the\n * `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `get` call.\n * @example Calling the `getPromise` method.\n * var promise = credProvider.getPromise();\n * promise.then(function() { ... }, function(err) { ... });\n */\n\n /**\n * @!method refreshPromise()\n * Returns a 'thenable' promise.\n * Refreshes the credentials. Users should call {get} before attempting\n * to forcibly refresh credentials.\n *\n * Two callbacks can be provided to the `then` method on the returned promise.\n * The first callback will be called if the promise is fulfilled, and the second\n * callback will be called if the promise is rejected.\n * @callback fulfilledCallback function()\n * Called if the promise is fulfilled. When this callback is called, it\n * means refreshed credentials information has been loaded into the object\n * (as the `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @callback rejectedCallback function(err)\n * Called if the promise is rejected.\n * @param err [Error] if an error occurred, this value will be filled\n * @return [Promise] A promise that represents the state of the `refresh` call.\n * @example Calling the `refreshPromise` method.\n * var promise = credProvider.refreshPromise();\n * promise.then(function() { ... }, function(err) { ... });\n */\n\n /**\n * Refreshes the credentials. Users should call {get} before attempting\n * to forcibly refresh credentials.\n *\n * @callback callback function(err)\n * When this callback is called with no error, it means refreshed\n * credentials information has been loaded into the object (as the\n * `accessKeyId`, `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @note Subclasses should override this class to reset the\n * {accessKeyId}, {secretAccessKey} and optional {sessionToken}\n * on the credentials object and then call the callback with\n * any error information.\n * @see get\n */\n refresh: function refresh(callback) {\n this.expired = false;\n callback();\n },\n\n /**\n * @api private\n * @param callback\n */\n coalesceRefresh: function coalesceRefresh(callback, sync) {\n var self = this;\n\n if (self.refreshCallbacks.push(callback) === 1) {\n self.load(function onLoad(err) {\n AWS.util.arrayEach(self.refreshCallbacks, function (callback) {\n if (sync) {\n callback(err);\n } else {\n // callback could throw, so defer to ensure all callbacks are notified\n AWS.util.defer(function () {\n callback(err);\n });\n }\n });\n self.refreshCallbacks.length = 0;\n });\n }\n },\n\n /**\n * @api private\n * @param callback\n */\n load: function load(callback) {\n callback();\n }\n});\n/**\n * @api private\n */\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 * @api private\n */\n\n\nAWS.Credentials.deletePromisesFromClass = function deletePromisesFromClass() {\n delete this.prototype.getPromise;\n delete this.prototype.refreshPromise;\n};\n\nAWS.util.addPromises(AWS.Credentials);","var eventMessageChunker = require('../event-stream/event-message-chunker').eventMessageChunker;\n\nvar parseEvent = require('./parse-event').parseEvent;\n\nfunction createEventStream(body, parser, model) {\n var eventMessages = eventMessageChunker(body);\n var events = [];\n\n for (var i = 0; i < eventMessages.length; i++) {\n events.push(parseEvent(parser, eventMessages[i], model));\n }\n\n return events;\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n createEventStream: createEventStream\n};","var parseMessage = require('./parse-message').parseMessage;\n/**\n *\n * @param {*} parser\n * @param {Buffer} message\n * @param {*} shape\n * @api private\n */\n\n\nfunction parseEvent(parser, message, shape) {\n var parsedMessage = parseMessage(message); // check if message is an event or error\n\n var messageType = parsedMessage.headers[':message-type'];\n\n if (messageType) {\n if (messageType.value === 'error') {\n throw parseError(parsedMessage);\n } else if (messageType.value !== 'event') {\n // not sure how to parse non-events/non-errors, ignore for now\n return;\n }\n } // determine event type\n\n\n var eventType = parsedMessage.headers[':event-type']; // check that the event type is modeled\n\n var eventModel = shape.members[eventType.value];\n\n if (!eventModel) {\n return;\n }\n\n var result = {}; // check if an event payload exists\n\n var eventPayloadMemberName = eventModel.eventPayloadMemberName;\n\n if (eventPayloadMemberName) {\n var payloadShape = eventModel.members[eventPayloadMemberName]; // if the shape is binary, return the byte array\n\n if (payloadShape.type === 'binary') {\n result[eventPayloadMemberName] = parsedMessage.body;\n } else {\n result[eventPayloadMemberName] = parser.parse(parsedMessage.body.toString(), payloadShape);\n }\n } // read event headers\n\n\n var eventHeaderNames = eventModel.eventHeaderMemberNames;\n\n for (var i = 0; i < eventHeaderNames.length; i++) {\n var name = eventHeaderNames[i];\n\n if (parsedMessage.headers[name]) {\n // parse the header!\n result[name] = eventModel.members[name].toType(parsedMessage.headers[name].value);\n }\n }\n\n var output = {};\n output[eventType.value] = result;\n return output;\n}\n\nfunction parseError(message) {\n var errorCode = message.headers[':error-code'];\n var errorMessage = message.headers[':error-message'];\n var error = new Error(errorMessage.value || errorMessage);\n error.code = error.name = errorCode.value || errorCode;\n return error;\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n parseEvent: parseEvent\n};","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? nBytes - 1 : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n i += d;\n e = s & (1 << -nBits) - 1;\n s >>= -nBits;\n nBits += eLen;\n\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : (s ? -1 : 1) * Infinity;\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n};\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n var i = isLE ? 0 : nBytes - 1;\n var d = isLE ? 1 : -1;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = e << mLen | m;\n eLen += mLen;\n\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n};","// 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'use strict'; // If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function (qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n var maxKeys = 1000;\n\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length; // maxKeys <= 0 means that we should not limit keys count\n\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr,\n vstr,\n k,\n v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n\nvar isArray = Array.isArray || function (xs) {\n return Object.prototype.toString.call(xs) === '[object Array]';\n};","var rng = require('./lib/rng');\n\nvar bytesToUuid = require('./lib/bytesToUuid'); // **`v1()` - Generate time-based UUID**\n//\n// Inspired by https://github.com/LiosK/UUID.js\n// and http://docs.python.org/library/uuid.html\n\n\nvar _nodeId;\n\nvar _clockseq; // Previous uuid creation time\n\n\nvar _lastMSecs = 0;\nvar _lastNSecs = 0; // See https://github.com/broofa/node-uuid for API details\n\nfunction v1(options, buf, offset) {\n var i = buf && offset || 0;\n var b = buf || [];\n options = options || {};\n var node = options.node || _nodeId;\n var clockseq = options.clockseq !== undefined ? options.clockseq : _clockseq; // node and clockseq need to be initialized to random values if they're not\n // specified. We do this lazily to minimize issues related to insufficient\n // system entropy. See #189\n\n if (node == null || clockseq == null) {\n var seedBytes = rng();\n\n if (node == null) {\n // Per 4.5, create and 48-bit node id, (47 random bits + multicast bit = 1)\n node = _nodeId = [seedBytes[0] | 0x01, seedBytes[1], seedBytes[2], seedBytes[3], seedBytes[4], seedBytes[5]];\n }\n\n if (clockseq == null) {\n // Per 4.2.2, randomize (14 bit) clockseq\n clockseq = _clockseq = (seedBytes[6] << 8 | seedBytes[7]) & 0x3fff;\n }\n } // UUID timestamps are 100 nano-second units since the Gregorian epoch,\n // (1582-10-15 00:00). JSNumbers aren't precise enough for this, so\n // time is handled internally as 'msecs' (integer milliseconds) and 'nsecs'\n // (100-nanoseconds offset from msecs) since unix epoch, 1970-01-01 00:00.\n\n\n var msecs = options.msecs !== undefined ? options.msecs : new Date().getTime(); // Per 4.2.1.2, use count of uuid's generated during the current clock\n // cycle to simulate higher resolution clock\n\n var nsecs = options.nsecs !== undefined ? options.nsecs : _lastNSecs + 1; // Time since last uuid creation (in msecs)\n\n var dt = msecs - _lastMSecs + (nsecs - _lastNSecs) / 10000; // Per 4.2.1.2, Bump clockseq on clock regression\n\n if (dt < 0 && options.clockseq === undefined) {\n clockseq = clockseq + 1 & 0x3fff;\n } // Reset nsecs if clock regresses (new clockseq) or we've moved onto a new\n // time interval\n\n\n if ((dt < 0 || msecs > _lastMSecs) && options.nsecs === undefined) {\n nsecs = 0;\n } // Per 4.2.1.2 Throw error if too many uuids are requested\n\n\n if (nsecs >= 10000) {\n throw new Error('uuid.v1(): Can\\'t create more than 10M uuids/sec');\n }\n\n _lastMSecs = msecs;\n _lastNSecs = nsecs;\n _clockseq = clockseq; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch\n\n msecs += 12219292800000; // `time_low`\n\n var tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;\n b[i++] = tl >>> 24 & 0xff;\n b[i++] = tl >>> 16 & 0xff;\n b[i++] = tl >>> 8 & 0xff;\n b[i++] = tl & 0xff; // `time_mid`\n\n var tmh = msecs / 0x100000000 * 10000 & 0xfffffff;\n b[i++] = tmh >>> 8 & 0xff;\n b[i++] = tmh & 0xff; // `time_high_and_version`\n\n b[i++] = tmh >>> 24 & 0xf | 0x10; // include version\n\n b[i++] = tmh >>> 16 & 0xff; // `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)\n\n b[i++] = clockseq >>> 8 | 0x80; // `clock_seq_low`\n\n b[i++] = clockseq & 0xff; // `node`\n\n for (var n = 0; n < 6; ++n) {\n b[i + n] = node[n];\n }\n\n return buf ? buf : bytesToUuid(b);\n}\n\nmodule.exports = v1;","var property = require('../util').property;\n\nfunction Paginator(name, paginator) {\n property(this, 'inputToken', paginator.input_token);\n property(this, 'limitKey', paginator.limit_key);\n property(this, 'moreResults', paginator.more_results);\n property(this, 'outputToken', paginator.output_token);\n property(this, 'resultKey', paginator.result_key);\n}\n/**\n * @api private\n */\n\n\nmodule.exports = Paginator;",";\n\n(function (root, factory) {\n if (typeof exports === \"object\") {\n // CommonJS\n module.exports = exports = factory(require(\"./core\"));\n } else if (typeof define === \"function\" && define.amd) {\n // AMD\n define([\"./core\"], factory);\n } else {\n // Global (browser)\n factory(root.CryptoJS);\n }\n})(this, function (CryptoJS) {\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo; // Initialization and round constants tables\n\n var H = [];\n var K = []; // Compute constants\n\n (function () {\n function isPrime(n) {\n var sqrtN = Math.sqrt(n);\n\n for (var factor = 2; factor <= sqrtN; factor++) {\n if (!(n % factor)) {\n return false;\n }\n }\n\n return true;\n }\n\n function getFractionalBits(n) {\n return (n - (n | 0)) * 0x100000000 | 0;\n }\n\n var n = 2;\n var nPrime = 0;\n\n while (nPrime < 64) {\n if (isPrime(n)) {\n if (nPrime < 8) {\n H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n }\n\n K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n nPrime++;\n }\n\n n++;\n }\n })(); // Reusable object\n\n\n var W = [];\n /**\n * SHA-256 hash algorithm.\n */\n\n var SHA256 = C_algo.SHA256 = Hasher.extend({\n _doReset: function _doReset() {\n this._hash = new WordArray.init(H.slice(0));\n },\n _doProcessBlock: function _doProcessBlock(M, offset) {\n // Shortcut\n var H = this._hash.words; // Working variables\n\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n var e = H[4];\n var f = H[5];\n var g = H[6];\n var h = H[7]; // Computation\n\n for (var i = 0; i < 64; i++) {\n if (i < 16) {\n W[i] = M[offset + i] | 0;\n } else {\n var gamma0x = W[i - 15];\n var gamma0 = (gamma0x << 25 | gamma0x >>> 7) ^ (gamma0x << 14 | gamma0x >>> 18) ^ gamma0x >>> 3;\n var gamma1x = W[i - 2];\n var gamma1 = (gamma1x << 15 | gamma1x >>> 17) ^ (gamma1x << 13 | gamma1x >>> 19) ^ gamma1x >>> 10;\n W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n }\n\n var ch = e & f ^ ~e & g;\n var maj = a & b ^ a & c ^ b & c;\n var sigma0 = (a << 30 | a >>> 2) ^ (a << 19 | a >>> 13) ^ (a << 10 | a >>> 22);\n var sigma1 = (e << 26 | e >>> 6) ^ (e << 21 | e >>> 11) ^ (e << 7 | e >>> 25);\n var t1 = h + sigma1 + ch + K[i] + W[i];\n var t2 = sigma0 + maj;\n h = g;\n g = f;\n f = e;\n e = d + t1 | 0;\n d = c;\n c = b;\n b = a;\n a = t1 + t2 | 0;\n } // Intermediate hash value\n\n\n H[0] = H[0] + a | 0;\n H[1] = H[1] + b | 0;\n H[2] = H[2] + c | 0;\n H[3] = H[3] + d | 0;\n H[4] = H[4] + e | 0;\n H[5] = H[5] + f | 0;\n H[6] = H[6] + g | 0;\n H[7] = H[7] + h | 0;\n },\n _doFinalize: function _doFinalize() {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8; // Add padding\n\n dataWords[nBitsLeft >>> 5] |= 0x80 << 24 - nBitsLeft % 32;\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n dataWords[(nBitsLeft + 64 >>> 9 << 4) + 15] = nBitsTotal;\n data.sigBytes = dataWords.length * 4; // Hash final blocks\n\n this._process(); // Return final computed hash\n\n\n return this._hash;\n },\n clone: function clone() {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n return clone;\n }\n });\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.SHA256('message');\n * var hash = CryptoJS.SHA256(wordArray);\n */\n\n C.SHA256 = Hasher._createHelper(SHA256);\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacSHA256(message, key);\n */\n\n C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n })(Math);\n\n return CryptoJS.SHA256;\n});","var AWS = require('./core');\n\nvar Api = require('./model/api');\n\nvar regionConfig = require('./region_config');\n\nvar inherit = AWS.util.inherit;\nvar clientCount = 0;\n/**\n * The service class representing an AWS service.\n *\n * @class_abstract This class is an abstract class.\n *\n * @!attribute apiVersions\n * @return [Array] the list of API versions supported by this service.\n * @readonly\n */\n\nAWS.Service = inherit({\n /**\n * Create a new service object with a configuration object\n *\n * @param config [map] a map of configuration options\n */\n constructor: function Service(config) {\n if (!this.loadServiceClass) {\n throw AWS.util.error(new Error(), 'Service must be constructed with `new\\' operator');\n }\n\n var ServiceClass = this.loadServiceClass(config || {});\n\n if (ServiceClass) {\n var originalConfig = AWS.util.copy(config);\n var svc = new ServiceClass(config);\n Object.defineProperty(svc, '_originalConfig', {\n get: function get() {\n return originalConfig;\n },\n enumerable: false,\n configurable: true\n });\n svc._clientId = ++clientCount;\n return svc;\n }\n\n this.initialize(config);\n },\n\n /**\n * @api private\n */\n initialize: function initialize(config) {\n var svcConfig = AWS.config[this.serviceIdentifier];\n this.config = new AWS.Config(AWS.config);\n if (svcConfig) this.config.update(svcConfig, true);\n if (config) this.config.update(config, true);\n this.validateService();\n if (!this.config.endpoint) regionConfig(this);\n this.config.endpoint = this.endpointFromTemplate(this.config.endpoint);\n this.setEndpoint(this.config.endpoint); //enable attaching listeners to service client\n\n AWS.SequentialExecutor.call(this);\n AWS.Service.addDefaultMonitoringListeners(this);\n\n if ((this.config.clientSideMonitoring || AWS.Service._clientSideMonitoring) && this.publisher) {\n var publisher = this.publisher;\n this.addNamedListener('PUBLISH_API_CALL', 'apiCall', function PUBLISH_API_CALL(event) {\n process.nextTick(function () {\n publisher.eventHandler(event);\n });\n });\n this.addNamedListener('PUBLISH_API_ATTEMPT', 'apiCallAttempt', function PUBLISH_API_ATTEMPT(event) {\n process.nextTick(function () {\n publisher.eventHandler(event);\n });\n });\n }\n },\n\n /**\n * @api private\n */\n validateService: function validateService() {},\n\n /**\n * @api private\n */\n loadServiceClass: function loadServiceClass(serviceConfig) {\n var config = serviceConfig;\n\n if (!AWS.util.isEmpty(this.api)) {\n return null;\n } else if (config.apiConfig) {\n return AWS.Service.defineServiceApi(this.constructor, config.apiConfig);\n } else if (!this.constructor.services) {\n return null;\n } else {\n config = new AWS.Config(AWS.config);\n config.update(serviceConfig, true);\n var version = config.apiVersions[this.constructor.serviceIdentifier];\n version = version || config.apiVersion;\n return this.getLatestServiceClass(version);\n }\n },\n\n /**\n * @api private\n */\n getLatestServiceClass: function getLatestServiceClass(version) {\n version = this.getLatestServiceVersion(version);\n\n if (this.constructor.services[version] === null) {\n AWS.Service.defineServiceApi(this.constructor, version);\n }\n\n return this.constructor.services[version];\n },\n\n /**\n * @api private\n */\n getLatestServiceVersion: function getLatestServiceVersion(version) {\n if (!this.constructor.services || this.constructor.services.length === 0) {\n throw new Error('No services defined on ' + this.constructor.serviceIdentifier);\n }\n\n if (!version) {\n version = 'latest';\n } else if (AWS.util.isType(version, Date)) {\n version = AWS.util.date.iso8601(version).split('T')[0];\n }\n\n if (Object.hasOwnProperty(this.constructor.services, version)) {\n return version;\n }\n\n var keys = Object.keys(this.constructor.services).sort();\n var selectedVersion = null;\n\n for (var i = keys.length - 1; i >= 0; i--) {\n // versions that end in \"*\" are not available on disk and can be\n // skipped, so do not choose these as selectedVersions\n if (keys[i][keys[i].length - 1] !== '*') {\n selectedVersion = keys[i];\n }\n\n if (keys[i].substr(0, 10) <= version) {\n return selectedVersion;\n }\n }\n\n throw new Error('Could not find ' + this.constructor.serviceIdentifier + ' API to satisfy version constraint `' + version + '\\'');\n },\n\n /**\n * @api private\n */\n api: {},\n\n /**\n * @api private\n */\n defaultRetryCount: 3,\n\n /**\n * @api private\n */\n customizeRequests: function customizeRequests(callback) {\n if (!callback) {\n this.customRequestHandler = null;\n } else if (typeof callback === 'function') {\n this.customRequestHandler = callback;\n } else {\n throw new Error('Invalid callback type \\'' + typeof callback + '\\' provided in customizeRequests');\n }\n },\n\n /**\n * Calls an operation on a service with the given input parameters.\n *\n * @param operation [String] the name of the operation to call on the service.\n * @param params [map] a map of input options for the operation\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n makeRequest: function makeRequest(operation, params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = null;\n }\n\n params = params || {};\n\n if (this.config.params) {\n // copy only toplevel bound params\n var rules = this.api.operations[operation];\n\n if (rules) {\n params = AWS.util.copy(params);\n AWS.util.each(this.config.params, function (key, value) {\n if (rules.input.members[key]) {\n if (params[key] === undefined || params[key] === null) {\n params[key] = value;\n }\n }\n });\n }\n }\n\n var request = new AWS.Request(this, operation, params);\n this.addAllRequestListeners(request);\n this.attachMonitoringEmitter(request);\n if (callback) request.send(callback);\n return request;\n },\n\n /**\n * Calls an operation on a service with the given input parameters, without\n * any authentication data. This method is useful for \"public\" API operations.\n *\n * @param operation [String] the name of the operation to call on the service.\n * @param params [map] a map of input options for the operation\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n makeUnauthenticatedRequest: function makeUnauthenticatedRequest(operation, params, callback) {\n if (typeof params === 'function') {\n callback = params;\n params = {};\n }\n\n var request = this.makeRequest(operation, params).toUnauthenticated();\n return callback ? request.send(callback) : request;\n },\n\n /**\n * Waits for a given state\n *\n * @param state [String] the state on the service to wait for\n * @param params [map] a map of parameters to pass with each request\n * @option params $waiter [map] a map of configuration options for the waiter\n * @option params $waiter.delay [Number] The number of seconds to wait between\n * requests\n * @option params $waiter.maxAttempts [Number] The maximum number of requests\n * to send while waiting\n * @callback callback function(err, data)\n * If a callback is supplied, it is called when a response is returned\n * from the service.\n * @param err [Error] the error object returned from the request.\n * Set to `null` if the request is successful.\n * @param data [Object] the de-serialized data returned from\n * the request. Set to `null` if a request error occurs.\n */\n waitFor: function waitFor(state, params, callback) {\n var waiter = new AWS.ResourceWaiter(this, state);\n return waiter.wait(params, callback);\n },\n\n /**\n * @api private\n */\n addAllRequestListeners: function addAllRequestListeners(request) {\n var list = [AWS.events, AWS.EventListeners.Core, this.serviceInterface(), AWS.EventListeners.CorePost];\n\n for (var i = 0; i < list.length; i++) {\n if (list[i]) request.addListeners(list[i]);\n } // disable parameter validation\n\n\n if (!this.config.paramValidation) {\n request.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n }\n\n if (this.config.logger) {\n // add logging events\n request.addListeners(AWS.EventListeners.Logger);\n }\n\n this.setupRequestListeners(request); // call prototype's customRequestHandler\n\n if (typeof this.constructor.prototype.customRequestHandler === 'function') {\n this.constructor.prototype.customRequestHandler(request);\n } // call instance's customRequestHandler\n\n\n if (Object.prototype.hasOwnProperty.call(this, 'customRequestHandler') && typeof this.customRequestHandler === 'function') {\n this.customRequestHandler(request);\n }\n },\n\n /**\n * Event recording metrics for a whole API call.\n * @returns {object} a subset of api call metrics\n * @api private\n */\n apiCallEvent: function apiCallEvent(request) {\n var api = request.service.api.operations[request.operation];\n var monitoringEvent = {\n Type: 'ApiCall',\n Api: api ? api.name : request.operation,\n Version: 1,\n Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n Region: request.httpRequest.region,\n MaxRetriesExceeded: 0,\n UserAgent: request.httpRequest.getUserAgent()\n };\n var response = request.response;\n\n if (response.httpResponse.statusCode) {\n monitoringEvent.FinalHttpStatusCode = response.httpResponse.statusCode;\n }\n\n if (response.error) {\n var error = response.error;\n var statusCode = response.httpResponse.statusCode;\n\n if (statusCode > 299) {\n if (error.code) monitoringEvent.FinalAwsException = error.code;\n if (error.message) monitoringEvent.FinalAwsExceptionMessage = error.message;\n } else {\n if (error.code || error.name) monitoringEvent.FinalSdkException = error.code || error.name;\n if (error.message) monitoringEvent.FinalSdkExceptionMessage = error.message;\n }\n }\n\n return monitoringEvent;\n },\n\n /**\n * Event recording metrics for an API call attempt.\n * @returns {object} a subset of api call attempt metrics\n * @api private\n */\n apiAttemptEvent: function apiAttemptEvent(request) {\n var api = request.service.api.operations[request.operation];\n var monitoringEvent = {\n Type: 'ApiCallAttempt',\n Api: api ? api.name : request.operation,\n Version: 1,\n Service: request.service.api.serviceId || request.service.api.endpointPrefix,\n Fqdn: request.httpRequest.endpoint.hostname,\n UserAgent: request.httpRequest.getUserAgent()\n };\n var response = request.response;\n\n if (response.httpResponse.statusCode) {\n monitoringEvent.HttpStatusCode = response.httpResponse.statusCode;\n }\n\n if (!request._unAuthenticated && request.service.config.credentials && request.service.config.credentials.accessKeyId) {\n monitoringEvent.AccessKey = request.service.config.credentials.accessKeyId;\n }\n\n if (!response.httpResponse.headers) return monitoringEvent;\n\n if (request.httpRequest.headers['x-amz-security-token']) {\n monitoringEvent.SessionToken = request.httpRequest.headers['x-amz-security-token'];\n }\n\n if (response.httpResponse.headers['x-amzn-requestid']) {\n monitoringEvent.XAmznRequestId = response.httpResponse.headers['x-amzn-requestid'];\n }\n\n if (response.httpResponse.headers['x-amz-request-id']) {\n monitoringEvent.XAmzRequestId = response.httpResponse.headers['x-amz-request-id'];\n }\n\n if (response.httpResponse.headers['x-amz-id-2']) {\n monitoringEvent.XAmzId2 = response.httpResponse.headers['x-amz-id-2'];\n }\n\n return monitoringEvent;\n },\n\n /**\n * Add metrics of failed request.\n * @api private\n */\n attemptFailEvent: function attemptFailEvent(request) {\n var monitoringEvent = this.apiAttemptEvent(request);\n var response = request.response;\n var error = response.error;\n\n if (response.httpResponse.statusCode > 299) {\n if (error.code) monitoringEvent.AwsException = error.code;\n if (error.message) monitoringEvent.AwsExceptionMessage = error.message;\n } else {\n if (error.code || error.name) monitoringEvent.SdkException = error.code || error.name;\n if (error.message) monitoringEvent.SdkExceptionMessage = error.message;\n }\n\n return monitoringEvent;\n },\n\n /**\n * Attach listeners to request object to fetch metrics of each request\n * and emit data object through \\'ApiCall\\' and \\'ApiCallAttempt\\' events.\n * @api private\n */\n attachMonitoringEmitter: function attachMonitoringEmitter(request) {\n var attemptTimestamp; //timestamp marking the beginning of a request attempt\n\n var attemptStartRealTime; //Start time of request attempt. Used to calculating attemptLatency\n\n var attemptLatency; //latency from request sent out to http response reaching SDK\n\n var callStartRealTime; //Start time of API call. Used to calculating API call latency\n\n var attemptCount = 0; //request.retryCount is not reliable here\n\n var region; //region cache region for each attempt since it can be updated in plase (e.g. s3)\n\n var callTimestamp; //timestamp when the request is created\n\n var self = this;\n var addToHead = true;\n request.on('validate', function () {\n callStartRealTime = AWS.util.realClock.now();\n callTimestamp = Date.now();\n }, addToHead);\n request.on('sign', function () {\n attemptStartRealTime = AWS.util.realClock.now();\n attemptTimestamp = Date.now();\n region = request.httpRequest.region;\n attemptCount++;\n }, addToHead);\n request.on('validateResponse', function () {\n attemptLatency = Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n });\n request.addNamedListener('API_CALL_ATTEMPT', 'success', function API_CALL_ATTEMPT() {\n var apiAttemptEvent = self.apiAttemptEvent(request);\n apiAttemptEvent.Timestamp = attemptTimestamp;\n apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n apiAttemptEvent.Region = region;\n self.emit('apiCallAttempt', [apiAttemptEvent]);\n });\n request.addNamedListener('API_CALL_ATTEMPT_RETRY', 'retry', function API_CALL_ATTEMPT_RETRY() {\n var apiAttemptEvent = self.attemptFailEvent(request);\n apiAttemptEvent.Timestamp = attemptTimestamp; //attemptLatency may not be available if fail before response\n\n attemptLatency = attemptLatency || Math.round(AWS.util.realClock.now() - attemptStartRealTime);\n apiAttemptEvent.AttemptLatency = attemptLatency >= 0 ? attemptLatency : 0;\n apiAttemptEvent.Region = region;\n self.emit('apiCallAttempt', [apiAttemptEvent]);\n });\n request.addNamedListener('API_CALL', 'complete', function API_CALL() {\n var apiCallEvent = self.apiCallEvent(request);\n apiCallEvent.AttemptCount = attemptCount;\n if (apiCallEvent.AttemptCount <= 0) return;\n apiCallEvent.Timestamp = callTimestamp;\n var latency = Math.round(AWS.util.realClock.now() - callStartRealTime);\n apiCallEvent.Latency = latency >= 0 ? latency : 0;\n var response = request.response;\n\n if (typeof response.retryCount === 'number' && typeof response.maxRetries === 'number' && response.retryCount >= response.maxRetries) {\n apiCallEvent.MaxRetriesExceeded = 1;\n }\n\n self.emit('apiCall', [apiCallEvent]);\n });\n },\n\n /**\n * Override this method to setup any custom request listeners for each\n * new request to the service.\n *\n * @method_abstract This is an abstract method.\n */\n setupRequestListeners: function setupRequestListeners(request) {},\n\n /**\n * Gets the signer class for a given request\n * @api private\n */\n getSignerClass: function getSignerClass(request) {\n var version; // get operation authtype if present\n\n var operation = null;\n var authtype = '';\n\n if (request) {\n var operations = request.service.api.operations || {};\n operation = operations[request.operation] || null;\n authtype = operation ? operation.authtype : '';\n }\n\n if (this.config.signatureVersion) {\n version = this.config.signatureVersion;\n } else if (authtype === 'v4' || authtype === 'v4-unsigned-body') {\n version = 'v4';\n } else {\n version = this.api.signatureVersion;\n }\n\n return AWS.Signers.RequestSigner.getVersion(version);\n },\n\n /**\n * @api private\n */\n serviceInterface: function serviceInterface() {\n switch (this.api.protocol) {\n case 'ec2':\n return AWS.EventListeners.Query;\n\n case 'query':\n return AWS.EventListeners.Query;\n\n case 'json':\n return AWS.EventListeners.Json;\n\n case 'rest-json':\n return AWS.EventListeners.RestJson;\n\n case 'rest-xml':\n return AWS.EventListeners.RestXml;\n }\n\n if (this.api.protocol) {\n throw new Error('Invalid service `protocol\\' ' + this.api.protocol + ' in API config');\n }\n },\n\n /**\n * @api private\n */\n successfulResponse: function successfulResponse(resp) {\n return resp.httpResponse.statusCode < 300;\n },\n\n /**\n * How many times a failed request should be retried before giving up.\n * the defaultRetryCount can be overriden by service classes.\n *\n * @api private\n */\n numRetries: function numRetries() {\n if (this.config.maxRetries !== undefined) {\n return this.config.maxRetries;\n } else {\n return this.defaultRetryCount;\n }\n },\n\n /**\n * @api private\n */\n retryDelays: function retryDelays(retryCount) {\n return AWS.util.calculateRetryDelay(retryCount, this.config.retryDelayOptions);\n },\n\n /**\n * @api private\n */\n retryableError: function retryableError(error) {\n if (this.timeoutError(error)) return true;\n if (this.networkingError(error)) return true;\n if (this.expiredCredentialsError(error)) return true;\n if (this.throttledError(error)) return true;\n if (error.statusCode >= 500) return true;\n return false;\n },\n\n /**\n * @api private\n */\n networkingError: function networkingError(error) {\n return error.code === 'NetworkingError';\n },\n\n /**\n * @api private\n */\n timeoutError: function timeoutError(error) {\n return error.code === 'TimeoutError';\n },\n\n /**\n * @api private\n */\n expiredCredentialsError: function expiredCredentialsError(error) {\n // TODO : this only handles *one* of the expired credential codes\n return error.code === 'ExpiredTokenException';\n },\n\n /**\n * @api private\n */\n clockSkewError: function clockSkewError(error) {\n switch (error.code) {\n case 'RequestTimeTooSkewed':\n case 'RequestExpired':\n case 'InvalidSignatureException':\n case 'SignatureDoesNotMatch':\n case 'AuthFailure':\n case 'RequestInTheFuture':\n return true;\n\n default:\n return false;\n }\n },\n\n /**\n * @api private\n */\n getSkewCorrectedDate: function getSkewCorrectedDate() {\n return new Date(Date.now() + this.config.systemClockOffset);\n },\n\n /**\n * @api private\n */\n applyClockOffset: function applyClockOffset(newServerTime) {\n if (newServerTime) {\n this.config.systemClockOffset = newServerTime - Date.now();\n }\n },\n\n /**\n * @api private\n */\n isClockSkewed: function isClockSkewed(newServerTime) {\n if (newServerTime) {\n return Math.abs(this.getSkewCorrectedDate().getTime() - newServerTime) >= 30000;\n }\n },\n\n /**\n * @api private\n */\n throttledError: function throttledError(error) {\n // this logic varies between services\n switch (error.code) {\n case 'ProvisionedThroughputExceededException':\n case 'Throttling':\n case 'ThrottlingException':\n case 'RequestLimitExceeded':\n case 'RequestThrottled':\n case 'RequestThrottledException':\n case 'TooManyRequestsException':\n case 'TransactionInProgressException':\n //dynamodb\n return true;\n\n default:\n return false;\n }\n },\n\n /**\n * @api private\n */\n endpointFromTemplate: function endpointFromTemplate(endpoint) {\n if (typeof endpoint !== 'string') return endpoint;\n var e = endpoint;\n e = e.replace(/\\{service\\}/g, this.api.endpointPrefix);\n e = e.replace(/\\{region\\}/g, this.config.region);\n e = e.replace(/\\{scheme\\}/g, this.config.sslEnabled ? 'https' : 'http');\n return e;\n },\n\n /**\n * @api private\n */\n setEndpoint: function setEndpoint(endpoint) {\n this.endpoint = new AWS.Endpoint(endpoint, this.config);\n },\n\n /**\n * @api private\n */\n paginationConfig: function paginationConfig(operation, throwException) {\n var paginator = this.api.operations[operation].paginator;\n\n if (!paginator) {\n if (throwException) {\n var e = new Error();\n throw AWS.util.error(e, 'No pagination configuration for ' + operation);\n }\n\n return null;\n }\n\n return paginator;\n }\n});\nAWS.util.update(AWS.Service, {\n /**\n * Adds one method for each operation described in the api configuration\n *\n * @api private\n */\n defineMethods: function defineMethods(svc) {\n AWS.util.each(svc.prototype.api.operations, function iterator(method) {\n if (svc.prototype[method]) return;\n var operation = svc.prototype.api.operations[method];\n\n if (operation.authtype === 'none') {\n svc.prototype[method] = function (params, callback) {\n return this.makeUnauthenticatedRequest(method, params, callback);\n };\n } else {\n svc.prototype[method] = function (params, callback) {\n return this.makeRequest(method, params, callback);\n };\n }\n });\n },\n\n /**\n * Defines a new Service class using a service identifier and list of versions\n * including an optional set of features (functions) to apply to the class\n * prototype.\n *\n * @param serviceIdentifier [String] the identifier for the service\n * @param versions [Array] a list of versions that work with this\n * service\n * @param features [Object] an object to attach to the prototype\n * @return [Class] the service class defined by this function.\n */\n defineService: function defineService(serviceIdentifier, versions, features) {\n AWS.Service._serviceMap[serviceIdentifier] = true;\n\n if (!Array.isArray(versions)) {\n features = versions;\n versions = [];\n }\n\n var svc = inherit(AWS.Service, features || {});\n\n if (typeof serviceIdentifier === 'string') {\n AWS.Service.addVersions(svc, versions);\n var identifier = svc.serviceIdentifier || serviceIdentifier;\n svc.serviceIdentifier = identifier;\n } else {\n // defineService called with an API\n svc.prototype.api = serviceIdentifier;\n AWS.Service.defineMethods(svc);\n }\n\n AWS.SequentialExecutor.call(this.prototype); //util.clientSideMonitoring is only available in node\n\n if (!this.prototype.publisher && AWS.util.clientSideMonitoring) {\n var Publisher = AWS.util.clientSideMonitoring.Publisher;\n var configProvider = AWS.util.clientSideMonitoring.configProvider;\n var publisherConfig = configProvider();\n this.prototype.publisher = new Publisher(publisherConfig);\n\n if (publisherConfig.enabled) {\n //if csm is enabled in environment, SDK should send all metrics\n AWS.Service._clientSideMonitoring = true;\n }\n }\n\n AWS.SequentialExecutor.call(svc.prototype);\n AWS.Service.addDefaultMonitoringListeners(svc.prototype);\n return svc;\n },\n\n /**\n * @api private\n */\n addVersions: function addVersions(svc, versions) {\n if (!Array.isArray(versions)) versions = [versions];\n svc.services = svc.services || {};\n\n for (var i = 0; i < versions.length; i++) {\n if (svc.services[versions[i]] === undefined) {\n svc.services[versions[i]] = null;\n }\n }\n\n svc.apiVersions = Object.keys(svc.services).sort();\n },\n\n /**\n * @api private\n */\n defineServiceApi: function defineServiceApi(superclass, version, apiConfig) {\n var svc = inherit(superclass, {\n serviceIdentifier: superclass.serviceIdentifier\n });\n\n function setApi(api) {\n if (api.isApi) {\n svc.prototype.api = api;\n } else {\n svc.prototype.api = new Api(api);\n }\n }\n\n if (typeof version === 'string') {\n if (apiConfig) {\n setApi(apiConfig);\n } else {\n try {\n setApi(AWS.apiLoader(superclass.serviceIdentifier, version));\n } catch (err) {\n throw AWS.util.error(err, {\n message: 'Could not find API configuration ' + superclass.serviceIdentifier + '-' + version\n });\n }\n }\n\n if (!Object.prototype.hasOwnProperty.call(superclass.services, version)) {\n superclass.apiVersions = superclass.apiVersions.concat(version).sort();\n }\n\n superclass.services[version] = svc;\n } else {\n setApi(version);\n }\n\n AWS.Service.defineMethods(svc);\n return svc;\n },\n\n /**\n * @api private\n */\n hasService: function hasService(identifier) {\n return Object.prototype.hasOwnProperty.call(AWS.Service._serviceMap, identifier);\n },\n\n /**\n * @param attachOn attach default monitoring listeners to object\n *\n * Each monitoring event should be emitted from service client to service constructor prototype and then\n * to global service prototype like bubbling up. These default monitoring events listener will transfer\n * the monitoring events to the upper layer.\n * @api private\n */\n addDefaultMonitoringListeners: function addDefaultMonitoringListeners(attachOn) {\n attachOn.addNamedListener('MONITOR_EVENTS_BUBBLE', 'apiCallAttempt', function EVENTS_BUBBLE(event) {\n var baseClass = Object.getPrototypeOf(attachOn);\n if (baseClass._events) baseClass.emit('apiCallAttempt', [event]);\n });\n attachOn.addNamedListener('CALL_EVENTS_BUBBLE', 'apiCall', function CALL_EVENTS_BUBBLE(event) {\n var baseClass = Object.getPrototypeOf(attachOn);\n if (baseClass._events) baseClass.emit('apiCall', [event]);\n });\n },\n\n /**\n * @api private\n */\n _serviceMap: {}\n});\nAWS.util.mixin(AWS.Service, AWS.SequentialExecutor);\n/**\n * @api private\n */\n\nmodule.exports = AWS.Service;","var AWS = require('../core');\n\nvar STS = require('../../clients/sts');\n/**\n * Represents credentials retrieved from STS Web Identity Federation support.\n *\n * By default this provider gets credentials using the\n * {AWS.STS.assumeRoleWithWebIdentity} service operation. This operation\n * requires a `RoleArn` containing the ARN of the IAM trust policy for the\n * application for which credentials will be given. In addition, the\n * `WebIdentityToken` must be set to the token provided by the identity\n * provider. See {constructor} for an example on creating a credentials\n * object with proper `RoleArn` and `WebIdentityToken` values.\n *\n * ## Refreshing Credentials from Identity Service\n *\n * In addition to AWS credentials expiring after a given amount of time, the\n * login token from the identity provider will also expire. Once this token\n * expires, it will not be usable to refresh AWS credentials, and another\n * token will be needed. The SDK does not manage refreshing of the token value,\n * but this can be done through a \"refresh token\" supported by most identity\n * providers. Consult the documentation for the identity provider for refreshing\n * tokens. Once the refreshed token is acquired, you should make sure to update\n * this new token in the credentials object's {params} property. The following\n * code will update the WebIdentityToken, assuming you have retrieved an updated\n * token from the identity provider:\n *\n * ```javascript\n * AWS.config.credentials.params.WebIdentityToken = updatedToken;\n * ```\n *\n * Future calls to `credentials.refresh()` will now use the new token.\n *\n * @!attribute params\n * @return [map] the map of params passed to\n * {AWS.STS.assumeRoleWithWebIdentity}. To update the token, set the\n * `params.WebIdentityToken` property.\n * @!attribute data\n * @return [map] the raw data response from the call to\n * {AWS.STS.assumeRoleWithWebIdentity}. Use this if you want to get\n * access to other properties from the response.\n */\n\n\nAWS.WebIdentityCredentials = AWS.util.inherit(AWS.Credentials, {\n /**\n * Creates a new credentials object.\n * @param (see AWS.STS.assumeRoleWithWebIdentity)\n * @example Creating a new credentials object\n * AWS.config.credentials = new AWS.WebIdentityCredentials({\n * RoleArn: 'arn:aws:iam::1234567890:role/WebIdentity',\n * WebIdentityToken: 'ABCDEFGHIJKLMNOP', // token from identity service\n * RoleSessionName: 'web' // optional name, defaults to web-identity\n * }, {\n * // optionally provide configuration to apply to the underlying AWS.STS service client\n * // if configuration is not provided, then configuration will be pulled from AWS.config\n *\n * // specify timeout options\n * httpOptions: {\n * timeout: 100\n * }\n * });\n * @see AWS.STS.assumeRoleWithWebIdentity\n * @see AWS.Config\n */\n constructor: function WebIdentityCredentials(params, clientConfig) {\n AWS.Credentials.call(this);\n this.expired = true;\n this.params = params;\n this.params.RoleSessionName = this.params.RoleSessionName || 'web-identity';\n this.data = null;\n this._clientConfig = AWS.util.copy(clientConfig || {});\n },\n\n /**\n * Refreshes credentials using {AWS.STS.assumeRoleWithWebIdentity}\n *\n * @callback callback function(err)\n * Called when the STS service responds (or fails). When\n * this callback is called with no error, it means that the credentials\n * information has been loaded into the object (as the `accessKeyId`,\n * `secretAccessKey`, and `sessionToken` properties).\n * @param err [Error] if an error occurred, this value will be filled\n * @see get\n */\n refresh: function refresh(callback) {\n this.coalesceRefresh(callback || AWS.util.fn.callback);\n },\n\n /**\n * @api private\n */\n load: function load(callback) {\n var self = this;\n self.createClients();\n self.service.assumeRoleWithWebIdentity(function (err, data) {\n self.data = null;\n\n if (!err) {\n self.data = data;\n self.service.credentialsFrom(data, self);\n }\n\n callback(err);\n });\n },\n\n /**\n * @api private\n */\n createClients: function createClients() {\n if (!this.service) {\n var stsConfig = AWS.util.merge({}, this._clientConfig);\n stsConfig.params = this.params;\n this.service = new STS(stsConfig);\n }\n }\n});","var rng = require('./lib/rng');\n\nvar bytesToUuid = require('./lib/bytesToUuid');\n\nfunction v4(options, buf, offset) {\n var i = buf && offset || 0;\n\n if (typeof options == 'string') {\n buf = options === 'binary' ? new Array(16) : null;\n options = null;\n }\n\n options = options || {};\n var rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n for (var ii = 0; ii < 16; ++ii) {\n buf[i + ii] = rnds[ii];\n }\n }\n\n return buf || bytesToUuid(rnds);\n}\n\nmodule.exports = v4;","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;\n\n(function (root) {\n /** Detect free variables */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n var freeModule = typeof module == 'object' && module && !module.nodeType && module;\n var freeGlobal = typeof global == 'object' && global;\n\n if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal || freeGlobal.self === freeGlobal) {\n root = freeGlobal;\n }\n /**\n * The `punycode` object.\n * @name punycode\n * @type Object\n */\n\n\n var punycode,\n\n /** Highest positive signed 32-bit float value */\n maxInt = 2147483647,\n // aka. 0x7FFFFFFF or 2^31-1\n\n /** Bootstring parameters */\n base = 36,\n tMin = 1,\n tMax = 26,\n skew = 38,\n damp = 700,\n initialBias = 72,\n initialN = 128,\n // 0x80\n delimiter = '-',\n // '\\x2D'\n\n /** Regular expressions */\n regexPunycode = /^xn--/,\n regexNonASCII = /[^\\x20-\\x7E]/,\n // unprintable ASCII chars + non-ASCII chars\n regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g,\n // RFC 3490 separators\n\n /** Error messages */\n errors = {\n 'overflow': 'Overflow: input needs wider integers to process',\n 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n 'invalid-input': 'Invalid input'\n },\n\n /** Convenience shortcuts */\n baseMinusTMin = base - tMin,\n floor = Math.floor,\n stringFromCharCode = String.fromCharCode,\n\n /** Temporary variable */\n key;\n /*--------------------------------------------------------------------------*/\n\n /**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\n\n function error(type) {\n throw RangeError(errors[type]);\n }\n /**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} callback The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\n\n\n function map(array, fn) {\n var length = array.length;\n var result = [];\n\n while (length--) {\n result[length] = fn(array[length]);\n }\n\n return result;\n }\n /**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} callback The function that gets called for every\n * character.\n * @returns {Array} A new string of characters returned by the callback\n * function.\n */\n\n\n function mapDomain(string, fn) {\n var parts = string.split('@');\n var result = '';\n\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + '@';\n string = parts[1];\n } // Avoid `split(regex)` for IE8 compatibility. See #17.\n\n\n string = string.replace(regexSeparators, '\\x2E');\n var labels = string.split('.');\n var encoded = map(labels, fn).join('.');\n return result + encoded;\n }\n /**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see \n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\n\n\n function ucs2decode(string) {\n var output = [],\n counter = 0,\n length = string.length,\n value,\n extra;\n\n while (counter < length) {\n value = string.charCodeAt(counter++);\n\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // high surrogate, and there is a next character\n extra = string.charCodeAt(counter++);\n\n if ((extra & 0xFC00) == 0xDC00) {\n // low surrogate\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // unmatched surrogate; only append this code unit, in case the next\n // code unit is the high surrogate of a surrogate pair\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n\n return output;\n }\n /**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\n\n\n function ucs2encode(array) {\n return map(array, function (value) {\n var output = '';\n\n if (value > 0xFFFF) {\n value -= 0x10000;\n output += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n value = 0xDC00 | value & 0x3FF;\n }\n\n output += stringFromCharCode(value);\n return output;\n }).join('');\n }\n /**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\n\n\n function basicToDigit(codePoint) {\n if (codePoint - 48 < 10) {\n return codePoint - 22;\n }\n\n if (codePoint - 65 < 26) {\n return codePoint - 65;\n }\n\n if (codePoint - 97 < 26) {\n return codePoint - 97;\n }\n\n return base;\n }\n /**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\n\n\n function digitToBasic(digit, flag) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n }\n /**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * http://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\n\n\n function adapt(delta, numPoints, firstTime) {\n var k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n\n for (;\n /* no initialization */\n delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n }\n /**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\n\n\n function decode(input) {\n // Don't use UCS-2\n var output = [],\n inputLength = input.length,\n out,\n i = 0,\n n = initialN,\n bias = initialBias,\n basic,\n j,\n index,\n oldi,\n w,\n k,\n digit,\n t,\n\n /** Cached calculation results */\n baseMinusT; // Handle the basic code points: let `basic` be the number of input code\n // points before the last delimiter, or `0` if there is none, then copy\n // the first basic code points to the output.\n\n basic = input.lastIndexOf(delimiter);\n\n if (basic < 0) {\n basic = 0;\n }\n\n for (j = 0; j < basic; ++j) {\n // if it's not a basic code point\n if (input.charCodeAt(j) >= 0x80) {\n error('not-basic');\n }\n\n output.push(input.charCodeAt(j));\n } // Main decoding loop: start just after the last delimiter if any basic code\n // points were copied; start at the beginning otherwise.\n\n\n for (index = basic > 0 ? basic + 1 : 0; index < inputLength;)\n /* no final expression */\n {\n // `index` is the index of the next character to be consumed.\n // Decode a generalized variable-length integer into `delta`,\n // which gets added to `i`. The overflow checking is easier\n // if we increase `i` as we go, then subtract off its starting\n // value at the end to obtain `delta`.\n for (oldi = i, w = 1, k = base;;\n /* no condition */\n k += base) {\n if (index >= inputLength) {\n error('invalid-input');\n }\n\n digit = basicToDigit(input.charCodeAt(index++));\n\n if (digit >= base || digit > floor((maxInt - i) / w)) {\n error('overflow');\n }\n\n i += digit * w;\n t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n if (digit < t) {\n break;\n }\n\n baseMinusT = base - t;\n\n if (w > floor(maxInt / baseMinusT)) {\n error('overflow');\n }\n\n w *= baseMinusT;\n }\n\n out = output.length + 1;\n bias = adapt(i - oldi, out, oldi == 0); // `i` was supposed to wrap around from `out` to `0`,\n // incrementing `n` each time, so we'll fix that now:\n\n if (floor(i / out) > maxInt - n) {\n error('overflow');\n }\n\n n += floor(i / out);\n i %= out; // Insert `n` at position `i` of the output\n\n output.splice(i++, 0, n);\n }\n\n return ucs2encode(output);\n }\n /**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\n\n\n function encode(input) {\n var n,\n delta,\n handledCPCount,\n basicLength,\n bias,\n j,\n m,\n q,\n k,\n t,\n currentValue,\n output = [],\n\n /** `inputLength` will hold the number of code points in `input`. */\n inputLength,\n\n /** Cached calculation results */\n handledCPCountPlusOne,\n baseMinusT,\n qMinusT; // Convert the input in UCS-2 to Unicode\n\n input = ucs2decode(input); // Cache the length\n\n inputLength = input.length; // Initialize the state\n\n n = initialN;\n delta = 0;\n bias = initialBias; // Handle the basic code points\n\n for (j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n handledCPCount = basicLength = output.length; // `handledCPCount` is the number of code points that have been handled;\n // `basicLength` is the number of basic code points.\n // Finish the basic string - if it is not empty - with a delimiter\n\n if (basicLength) {\n output.push(delimiter);\n } // Main encoding loop:\n\n\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next\n // larger one:\n for (m = maxInt, j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n } // Increase `delta` enough to advance the decoder's state to ,\n // but guard against overflow\n\n\n handledCPCountPlusOne = handledCPCount + 1;\n\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error('overflow');\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (j = 0; j < inputLength; ++j) {\n currentValue = input[j];\n\n if (currentValue < n && ++delta > maxInt) {\n error('overflow');\n }\n\n if (currentValue == n) {\n // Represent delta as a generalized variable-length integer\n for (q = delta, k = base;;\n /* no condition */\n k += base) {\n t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;\n\n if (q < t) {\n break;\n }\n\n qMinusT = q - t;\n baseMinusT = base - t;\n output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n\n return output.join('');\n }\n /**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\n\n\n function toUnicode(input) {\n return mapDomain(input, function (string) {\n return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;\n });\n }\n /**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\n\n\n function toASCII(input) {\n return mapDomain(input, function (string) {\n return regexNonASCII.test(string) ? 'xn--' + encode(string) : string;\n });\n }\n /*--------------------------------------------------------------------------*/\n\n /** Define the public API */\n\n\n punycode = {\n /**\n * A string representing the current Punycode.js version number.\n * @memberOf punycode\n * @type String\n */\n 'version': '1.3.2',\n\n /**\n * An object of methods to convert from JavaScript's internal character\n * representation (UCS-2) to Unicode code points, and back.\n * @see \n * @memberOf punycode\n * @type Object\n */\n 'ucs2': {\n 'decode': ucs2decode,\n 'encode': ucs2encode\n },\n 'decode': decode,\n 'encode': encode,\n 'toASCII': toASCII,\n 'toUnicode': toUnicode\n };\n /** Expose `punycode` */\n // Some AMD build optimizers, like r.js, check for specific condition patterns\n // like the following:\n\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n define('punycode', function () {\n return punycode;\n });\n } else if (freeExports && freeModule) {\n if (module.exports == freeExports) {\n // in Node.js or RingoJS v0.8.0+\n freeModule.exports = punycode;\n } else {\n // in Narwhal or RingoJS v0.7.0-\n for (key in punycode) {\n punycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n }\n }\n } else {\n // in Rhino or a web browser\n root.punycode = punycode;\n }\n})(this);","var util = require('../core').util;\n\nvar toBuffer = util.buffer.toBuffer; // All prelude components are unsigned, 32-bit integers\n\nvar PRELUDE_MEMBER_LENGTH = 4; // The prelude consists of two components\n\nvar PRELUDE_LENGTH = PRELUDE_MEMBER_LENGTH * 2; // Checksums are always CRC32 hashes.\n\nvar CHECKSUM_LENGTH = 4; // Messages must include a full prelude, a prelude checksum, and a message checksum\n\nvar MINIMUM_MESSAGE_LENGTH = PRELUDE_LENGTH + CHECKSUM_LENGTH * 2;\n/**\n * @api private\n *\n * @param {Buffer} message\n */\n\nfunction splitMessage(message) {\n if (!util.Buffer.isBuffer(message)) message = toBuffer(message);\n\n if (message.length < MINIMUM_MESSAGE_LENGTH) {\n throw new Error('Provided message too short to accommodate event stream message overhead');\n }\n\n if (message.length !== message.readUInt32BE(0)) {\n throw new Error('Reported message length does not match received message length');\n }\n\n var expectedPreludeChecksum = message.readUInt32BE(PRELUDE_LENGTH);\n\n if (expectedPreludeChecksum !== util.crypto.crc32(message.slice(0, PRELUDE_LENGTH))) {\n throw new Error('The prelude checksum specified in the message (' + expectedPreludeChecksum + ') does not match the calculated CRC32 checksum.');\n }\n\n var expectedMessageChecksum = message.readUInt32BE(message.length - CHECKSUM_LENGTH);\n\n if (expectedMessageChecksum !== util.crypto.crc32(message.slice(0, message.length - CHECKSUM_LENGTH))) {\n throw new Error('The message checksum did not match the expected value of ' + expectedMessageChecksum);\n }\n\n var headersStart = PRELUDE_LENGTH + CHECKSUM_LENGTH;\n var headersEnd = headersStart + message.readUInt32BE(PRELUDE_MEMBER_LENGTH);\n return {\n headers: message.slice(headersStart, headersEnd),\n body: message.slice(headersEnd, message.length - CHECKSUM_LENGTH)\n };\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n splitMessage: splitMessage\n};","/*!\n * JavaScript Cookie v2.2.1\n * https://github.com/js-cookie/js-cookie\n *\n * Copyright 2006, 2015 Klaus Hartl & Fagner Brack\n * Released under the MIT license\n */\n;\n\n(function (factory) {\n var registeredInModuleLoader;\n\n if (typeof define === 'function' && define.amd) {\n define(factory);\n registeredInModuleLoader = true;\n }\n\n if (typeof exports === 'object') {\n module.exports = factory();\n registeredInModuleLoader = true;\n }\n\n if (!registeredInModuleLoader) {\n var OldCookies = window.Cookies;\n var api = window.Cookies = factory();\n\n api.noConflict = function () {\n window.Cookies = OldCookies;\n return api;\n };\n }\n})(function () {\n function extend() {\n var i = 0;\n var result = {};\n\n for (; i < arguments.length; i++) {\n var attributes = arguments[i];\n\n for (var key in attributes) {\n result[key] = attributes[key];\n }\n }\n\n return result;\n }\n\n function decode(s) {\n return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);\n }\n\n function init(converter) {\n function api() {}\n\n function set(key, value, attributes) {\n if (typeof document === 'undefined') {\n return;\n }\n\n attributes = extend({\n path: '/'\n }, api.defaults, attributes);\n\n if (typeof attributes.expires === 'number') {\n attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);\n } // We're using \"expires\" because \"max-age\" is not supported by IE\n\n\n attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';\n\n try {\n var result = JSON.stringify(value);\n\n if (/^[\\{\\[]/.test(result)) {\n value = result;\n }\n } catch (e) {}\n\n value = converter.write ? converter.write(value, key) : encodeURIComponent(String(value)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);\n key = encodeURIComponent(String(key)).replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent).replace(/[\\(\\)]/g, escape);\n var stringifiedAttributes = '';\n\n for (var attributeName in attributes) {\n if (!attributes[attributeName]) {\n continue;\n }\n\n stringifiedAttributes += '; ' + attributeName;\n\n if (attributes[attributeName] === true) {\n continue;\n } // Considers RFC 6265 section 5.2:\n // ...\n // 3. If the remaining unparsed-attributes contains a %x3B (\";\")\n // character:\n // Consume the characters of the unparsed-attributes up to,\n // not including, the first %x3B (\";\") character.\n // ...\n\n\n stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];\n }\n\n return document.cookie = key + '=' + value + stringifiedAttributes;\n }\n\n function get(key, json) {\n if (typeof document === 'undefined') {\n return;\n }\n\n var jar = {}; // To prevent the for loop in the first place assign an empty array\n // in case there are no cookies at all.\n\n var cookies = document.cookie ? document.cookie.split('; ') : [];\n var i = 0;\n\n for (; i < cookies.length; i++) {\n var parts = cookies[i].split('=');\n var cookie = parts.slice(1).join('=');\n\n if (!json && cookie.charAt(0) === '\"') {\n cookie = cookie.slice(1, -1);\n }\n\n try {\n var name = decode(parts[0]);\n cookie = (converter.read || converter)(cookie, name) || decode(cookie);\n\n if (json) {\n try {\n cookie = JSON.parse(cookie);\n } catch (e) {}\n }\n\n jar[name] = cookie;\n\n if (key === name) {\n break;\n }\n } catch (e) {}\n }\n\n return key ? jar[key] : jar;\n }\n\n api.set = set;\n\n api.get = function (key) {\n return get(key, false\n /* read as raw */\n );\n };\n\n api.getJSON = function (key) {\n return get(key, true\n /* read as json */\n );\n };\n\n api.remove = function (key, attributes) {\n set(key, '', extend(attributes, {\n expires: -1\n }));\n };\n\n api.defaults = {};\n api.withConverter = init;\n return api;\n }\n\n return init(function () {});\n});","require('./lib/browser_loader');\n\nvar AWS = require('./lib/core');\n\nif (typeof window !== 'undefined') window.AWS = AWS;\nif (typeof module !== 'undefined') module.exports = AWS;\nif (typeof self !== 'undefined') self.AWS = AWS;","var AWS = require('./core');\n\nvar SequentialExecutor = require('./sequential_executor');\n\nvar DISCOVER_ENDPOINT = require('./discover_endpoint').discoverEndpoint;\n/**\n * The namespace used to register global event listeners for request building\n * and sending.\n */\n\n\nAWS.EventListeners = {\n /**\n * @!attribute VALIDATE_CREDENTIALS\n * A request listener that validates whether the request is being\n * sent with credentials.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating credentials\n * var listener = AWS.EventListeners.Core.VALIDATE_CREDENTIALS;\n * request.removeListener('validate', listener);\n * @readonly\n * @return [Function]\n * @!attribute VALIDATE_REGION\n * A request listener that validates whether the region is set\n * for a request.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating region configuration\n * var listener = AWS.EventListeners.Core.VALIDATE_REGION;\n * request.removeListener('validate', listener);\n * @readonly\n * @return [Function]\n * @!attribute VALIDATE_PARAMETERS\n * A request listener that validates input parameters in a request.\n * Handles the {AWS.Request~validate 'validate' Request event}\n * @example Sending a request without validating parameters\n * var listener = AWS.EventListeners.Core.VALIDATE_PARAMETERS;\n * request.removeListener('validate', listener);\n * @example Disable parameter validation globally\n * AWS.EventListeners.Core.removeListener('validate',\n * AWS.EventListeners.Core.VALIDATE_REGION);\n * @readonly\n * @return [Function]\n * @!attribute SEND\n * A request listener that initiates the HTTP connection for a\n * request being sent. Handles the {AWS.Request~send 'send' Request event}\n * @example Replacing the HTTP handler\n * var listener = AWS.EventListeners.Core.SEND;\n * request.removeListener('send', listener);\n * request.on('send', function(response) {\n * customHandler.send(response);\n * });\n * @return [Function]\n * @readonly\n * @!attribute HTTP_DATA\n * A request listener that reads data from the HTTP connection in order\n * to build the response data.\n * Handles the {AWS.Request~httpData 'httpData' Request event}.\n * Remove this handler if you are overriding the 'httpData' event and\n * do not want extra data processing and buffering overhead.\n * @example Disabling default data processing\n * var listener = AWS.EventListeners.Core.HTTP_DATA;\n * request.removeListener('httpData', listener);\n * @return [Function]\n * @readonly\n */\n Core: {}\n /* doc hack */\n\n};\n/**\n * @api private\n */\n\nfunction getOperationAuthtype(req) {\n if (!req.service.api.operations) {\n return '';\n }\n\n var operation = req.service.api.operations[req.operation];\n return operation ? operation.authtype : '';\n}\n\nAWS.EventListeners = {\n Core: new SequentialExecutor().addNamedListeners(function (add, addAsync) {\n addAsync('VALIDATE_CREDENTIALS', 'validate', function VALIDATE_CREDENTIALS(req, done) {\n if (!req.service.api.signatureVersion) return done(); // none\n\n req.service.config.getCredentials(function (err) {\n if (err) {\n req.response.error = AWS.util.error(err, {\n code: 'CredentialsError',\n message: 'Missing credentials in config'\n });\n }\n\n done();\n });\n });\n add('VALIDATE_REGION', 'validate', function VALIDATE_REGION(req) {\n if (!req.service.config.region && !req.service.isGlobalEndpoint) {\n req.response.error = AWS.util.error(new Error(), {\n code: 'ConfigError',\n message: 'Missing region in config'\n });\n }\n });\n add('BUILD_IDEMPOTENCY_TOKENS', 'validate', function BUILD_IDEMPOTENCY_TOKENS(req) {\n if (!req.service.api.operations) {\n return;\n }\n\n var operation = req.service.api.operations[req.operation];\n\n if (!operation) {\n return;\n }\n\n var idempotentMembers = operation.idempotentMembers;\n\n if (!idempotentMembers.length) {\n return;\n } // creates a copy of params so user's param object isn't mutated\n\n\n var params = AWS.util.copy(req.params);\n\n for (var i = 0, iLen = idempotentMembers.length; i < iLen; i++) {\n if (!params[idempotentMembers[i]]) {\n // add the member\n params[idempotentMembers[i]] = AWS.util.uuid.v4();\n }\n }\n\n req.params = params;\n });\n add('VALIDATE_PARAMETERS', 'validate', function VALIDATE_PARAMETERS(req) {\n if (!req.service.api.operations) {\n return;\n }\n\n var rules = req.service.api.operations[req.operation].input;\n var validation = req.service.config.paramValidation;\n new AWS.ParamValidator(validation).validate(rules, req.params);\n });\n addAsync('COMPUTE_SHA256', 'afterBuild', function COMPUTE_SHA256(req, done) {\n req.haltHandlersOnError();\n\n if (!req.service.api.operations) {\n return;\n }\n\n var operation = req.service.api.operations[req.operation];\n var authtype = operation ? operation.authtype : '';\n if (!req.service.api.signatureVersion && !authtype) return done(); // none\n\n if (req.service.getSignerClass(req) === AWS.Signers.V4) {\n var body = req.httpRequest.body || '';\n\n if (authtype.indexOf('unsigned-body') >= 0) {\n req.httpRequest.headers['X-Amz-Content-Sha256'] = 'UNSIGNED-PAYLOAD';\n return done();\n }\n\n AWS.util.computeSha256(body, function (err, sha) {\n if (err) {\n done(err);\n } else {\n req.httpRequest.headers['X-Amz-Content-Sha256'] = sha;\n done();\n }\n });\n } else {\n done();\n }\n });\n add('SET_CONTENT_LENGTH', 'afterBuild', function SET_CONTENT_LENGTH(req) {\n var authtype = getOperationAuthtype(req);\n var payloadMember = AWS.util.getRequestPayloadShape(req);\n\n if (req.httpRequest.headers['Content-Length'] === undefined) {\n try {\n var length = AWS.util.string.byteLength(req.httpRequest.body);\n req.httpRequest.headers['Content-Length'] = length;\n } catch (err) {\n if (payloadMember && payloadMember.isStreaming) {\n if (payloadMember.requiresLength) {\n //streaming payload requires length(s3, glacier)\n throw err;\n } else if (authtype.indexOf('unsigned-body') >= 0) {\n //unbounded streaming payload(lex, mediastore)\n req.httpRequest.headers['Transfer-Encoding'] = 'chunked';\n return;\n } else {\n throw err;\n }\n }\n\n throw err;\n }\n }\n });\n add('SET_HTTP_HOST', 'afterBuild', function SET_HTTP_HOST(req) {\n req.httpRequest.headers['Host'] = req.httpRequest.endpoint.host;\n });\n add('RESTART', 'restart', function RESTART() {\n var err = this.response.error;\n if (!err || !err.retryable) return;\n this.httpRequest = new AWS.HttpRequest(this.service.endpoint, this.service.region);\n\n if (this.response.retryCount < this.service.config.maxRetries) {\n this.response.retryCount++;\n } else {\n this.response.error = null;\n }\n });\n var addToHead = true;\n addAsync('DISCOVER_ENDPOINT', 'sign', DISCOVER_ENDPOINT, addToHead);\n addAsync('SIGN', 'sign', function SIGN(req, done) {\n var service = req.service;\n var operations = req.service.api.operations || {};\n var operation = operations[req.operation];\n var authtype = operation ? operation.authtype : '';\n if (!service.api.signatureVersion && !authtype) return done(); // none\n\n service.config.getCredentials(function (err, credentials) {\n if (err) {\n req.response.error = err;\n return done();\n }\n\n try {\n var date = service.getSkewCorrectedDate();\n var SignerClass = service.getSignerClass(req);\n var signer = new SignerClass(req.httpRequest, service.api.signingName || service.api.endpointPrefix, {\n signatureCache: service.config.signatureCache,\n operation: operation,\n signatureVersion: service.api.signatureVersion\n });\n signer.setServiceClientId(service._clientId); // clear old authorization headers\n\n delete req.httpRequest.headers['Authorization'];\n delete req.httpRequest.headers['Date'];\n delete req.httpRequest.headers['X-Amz-Date']; // add new authorization\n\n signer.addAuthorization(credentials, date);\n req.signedAt = date;\n } catch (e) {\n req.response.error = e;\n }\n\n done();\n });\n });\n add('VALIDATE_RESPONSE', 'validateResponse', function VALIDATE_RESPONSE(resp) {\n if (this.service.successfulResponse(resp, this)) {\n resp.data = {};\n resp.error = null;\n } else {\n resp.data = null;\n resp.error = AWS.util.error(new Error(), {\n code: 'UnknownError',\n message: 'An unknown error occurred.'\n });\n }\n });\n addAsync('SEND', 'send', function SEND(resp, done) {\n resp.httpResponse._abortCallback = done;\n resp.error = null;\n resp.data = null;\n\n function callback(httpResp) {\n resp.httpResponse.stream = httpResp;\n var stream = resp.request.httpRequest.stream;\n var service = resp.request.service;\n var api = service.api;\n var operationName = resp.request.operation;\n var operation = api.operations[operationName] || {};\n httpResp.on('headers', function onHeaders(statusCode, headers, statusMessage) {\n resp.request.emit('httpHeaders', [statusCode, headers, resp, statusMessage]);\n\n if (!resp.httpResponse.streaming) {\n if (AWS.HttpClient.streamsApiVersion === 2) {\n // streams2 API check\n // if we detect event streams, we're going to have to\n // return the stream immediately\n if (operation.hasEventOutput && service.successfulResponse(resp)) {\n // skip reading the IncomingStream\n resp.request.emit('httpDone');\n done();\n return;\n }\n\n httpResp.on('readable', function onReadable() {\n var data = httpResp.read();\n\n if (data !== null) {\n resp.request.emit('httpData', [data, resp]);\n }\n });\n } else {\n // legacy streams API\n httpResp.on('data', function onData(data) {\n resp.request.emit('httpData', [data, resp]);\n });\n }\n }\n });\n httpResp.on('end', function onEnd() {\n if (!stream || !stream.didCallback) {\n if (AWS.HttpClient.streamsApiVersion === 2 && operation.hasEventOutput && service.successfulResponse(resp)) {\n // don't concatenate response chunks when streaming event stream data when response is successful\n return;\n }\n\n resp.request.emit('httpDone');\n done();\n }\n });\n }\n\n function progress(httpResp) {\n httpResp.on('sendProgress', function onSendProgress(value) {\n resp.request.emit('httpUploadProgress', [value, resp]);\n });\n httpResp.on('receiveProgress', function onReceiveProgress(value) {\n resp.request.emit('httpDownloadProgress', [value, resp]);\n });\n }\n\n function error(err) {\n if (err.code !== 'RequestAbortedError') {\n var errCode = err.code === 'TimeoutError' ? err.code : 'NetworkingError';\n err = AWS.util.error(err, {\n code: errCode,\n region: resp.request.httpRequest.region,\n hostname: resp.request.httpRequest.endpoint.hostname,\n retryable: true\n });\n }\n\n resp.error = err;\n resp.request.emit('httpError', [resp.error, resp], function () {\n done();\n });\n }\n\n function executeSend() {\n var http = AWS.HttpClient.getInstance();\n var httpOptions = resp.request.service.config.httpOptions || {};\n\n try {\n var stream = http.handleRequest(resp.request.httpRequest, httpOptions, callback, error);\n progress(stream);\n } catch (err) {\n error(err);\n }\n }\n\n var timeDiff = (resp.request.service.getSkewCorrectedDate() - this.signedAt) / 1000;\n\n if (timeDiff >= 60 * 10) {\n // if we signed 10min ago, re-sign\n this.emit('sign', [this], function (err) {\n if (err) done(err);else executeSend();\n });\n } else {\n executeSend();\n }\n });\n add('HTTP_HEADERS', 'httpHeaders', function HTTP_HEADERS(statusCode, headers, resp, statusMessage) {\n resp.httpResponse.statusCode = statusCode;\n resp.httpResponse.statusMessage = statusMessage;\n resp.httpResponse.headers = headers;\n resp.httpResponse.body = AWS.util.buffer.toBuffer('');\n resp.httpResponse.buffers = [];\n resp.httpResponse.numBytes = 0;\n var dateHeader = headers.date || headers.Date;\n var service = resp.request.service;\n\n if (dateHeader) {\n var serverTime = Date.parse(dateHeader);\n\n if (service.config.correctClockSkew && service.isClockSkewed(serverTime)) {\n service.applyClockOffset(serverTime);\n }\n }\n });\n add('HTTP_DATA', 'httpData', function HTTP_DATA(chunk, resp) {\n if (chunk) {\n if (AWS.util.isNode()) {\n resp.httpResponse.numBytes += chunk.length;\n var total = resp.httpResponse.headers['content-length'];\n var progress = {\n loaded: resp.httpResponse.numBytes,\n total: total\n };\n resp.request.emit('httpDownloadProgress', [progress, resp]);\n }\n\n resp.httpResponse.buffers.push(AWS.util.buffer.toBuffer(chunk));\n }\n });\n add('HTTP_DONE', 'httpDone', function HTTP_DONE(resp) {\n // convert buffers array into single buffer\n if (resp.httpResponse.buffers && resp.httpResponse.buffers.length > 0) {\n var body = AWS.util.buffer.concat(resp.httpResponse.buffers);\n resp.httpResponse.body = body;\n }\n\n delete resp.httpResponse.numBytes;\n delete resp.httpResponse.buffers;\n });\n add('FINALIZE_ERROR', 'retry', function FINALIZE_ERROR(resp) {\n if (resp.httpResponse.statusCode) {\n resp.error.statusCode = resp.httpResponse.statusCode;\n\n if (resp.error.retryable === undefined) {\n resp.error.retryable = this.service.retryableError(resp.error, this);\n }\n }\n });\n add('INVALIDATE_CREDENTIALS', 'retry', function INVALIDATE_CREDENTIALS(resp) {\n if (!resp.error) return;\n\n switch (resp.error.code) {\n case 'RequestExpired': // EC2 only\n\n case 'ExpiredTokenException':\n case 'ExpiredToken':\n resp.error.retryable = true;\n resp.request.service.config.credentials.expired = true;\n }\n });\n add('EXPIRED_SIGNATURE', 'retry', function EXPIRED_SIGNATURE(resp) {\n var err = resp.error;\n if (!err) return;\n\n if (typeof err.code === 'string' && typeof err.message === 'string') {\n if (err.code.match(/Signature/) && err.message.match(/expired/)) {\n resp.error.retryable = true;\n }\n }\n });\n add('CLOCK_SKEWED', 'retry', function CLOCK_SKEWED(resp) {\n if (!resp.error) return;\n\n if (this.service.clockSkewError(resp.error) && this.service.config.correctClockSkew) {\n resp.error.retryable = true;\n }\n });\n add('REDIRECT', 'retry', function REDIRECT(resp) {\n if (resp.error && resp.error.statusCode >= 300 && resp.error.statusCode < 400 && resp.httpResponse.headers['location']) {\n this.httpRequest.endpoint = new AWS.Endpoint(resp.httpResponse.headers['location']);\n this.httpRequest.headers['Host'] = this.httpRequest.endpoint.host;\n resp.error.redirect = true;\n resp.error.retryable = true;\n }\n });\n add('RETRY_CHECK', 'retry', function RETRY_CHECK(resp) {\n if (resp.error) {\n if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n resp.error.retryDelay = 0;\n } else if (resp.retryCount < resp.maxRetries) {\n resp.error.retryDelay = this.service.retryDelays(resp.retryCount) || 0;\n }\n }\n });\n addAsync('RESET_RETRY_STATE', 'afterRetry', function RESET_RETRY_STATE(resp, done) {\n var delay,\n willRetry = false;\n\n if (resp.error) {\n delay = resp.error.retryDelay || 0;\n\n if (resp.error.retryable && resp.retryCount < resp.maxRetries) {\n resp.retryCount++;\n willRetry = true;\n } else if (resp.error.redirect && resp.redirectCount < resp.maxRedirects) {\n resp.redirectCount++;\n willRetry = true;\n }\n }\n\n if (willRetry) {\n resp.error = null;\n setTimeout(done, delay);\n } else {\n done();\n }\n });\n }),\n CorePost: new SequentialExecutor().addNamedListeners(function (add) {\n add('EXTRACT_REQUEST_ID', 'extractData', AWS.util.extractRequestId);\n add('EXTRACT_REQUEST_ID', 'extractError', AWS.util.extractRequestId);\n add('ENOTFOUND_ERROR', 'httpError', function ENOTFOUND_ERROR(err) {\n if (err.code === 'NetworkingError' && err.errno === 'ENOTFOUND') {\n var message = 'Inaccessible host: `' + err.hostname + '\\'. This service may not be available in the `' + err.region + '\\' region.';\n this.response.error = AWS.util.error(new Error(message), {\n code: 'UnknownEndpoint',\n region: err.region,\n hostname: err.hostname,\n retryable: true,\n originalError: err\n });\n }\n });\n }),\n Logger: new SequentialExecutor().addNamedListeners(function (add) {\n add('LOG_REQUEST', 'complete', function LOG_REQUEST(resp) {\n var req = resp.request;\n var logger = req.service.config.logger;\n if (!logger) return;\n\n function filterSensitiveLog(inputShape, shape) {\n if (!shape) {\n return shape;\n }\n\n switch (inputShape.type) {\n case 'structure':\n var struct = {};\n AWS.util.each(shape, function (subShapeName, subShape) {\n if (Object.prototype.hasOwnProperty.call(inputShape.members, subShapeName)) {\n struct[subShapeName] = filterSensitiveLog(inputShape.members[subShapeName], subShape);\n } else {\n struct[subShapeName] = subShape;\n }\n });\n return struct;\n\n case 'list':\n var list = [];\n AWS.util.arrayEach(shape, function (subShape, index) {\n list.push(filterSensitiveLog(inputShape.member, subShape));\n });\n return list;\n\n case 'map':\n var map = {};\n AWS.util.each(shape, function (key, value) {\n map[key] = filterSensitiveLog(inputShape.value, value);\n });\n return map;\n\n default:\n if (inputShape.isSensitive) {\n return '***SensitiveInformation***';\n } else {\n return shape;\n }\n\n }\n }\n\n function buildMessage() {\n var time = resp.request.service.getSkewCorrectedDate().getTime();\n var delta = (time - req.startTime.getTime()) / 1000;\n var ansi = logger.isTTY ? true : false;\n var status = resp.httpResponse.statusCode;\n var censoredParams = req.params;\n\n if (req.service.api.operations && req.service.api.operations[req.operation] && req.service.api.operations[req.operation].input) {\n var inputShape = req.service.api.operations[req.operation].input;\n censoredParams = filterSensitiveLog(inputShape, req.params);\n }\n\n var params = require('util').inspect(censoredParams, true, null);\n\n var message = '';\n if (ansi) message += '\\x1B[33m';\n message += '[AWS ' + req.service.serviceIdentifier + ' ' + status;\n message += ' ' + delta.toString() + 's ' + resp.retryCount + ' retries]';\n if (ansi) message += '\\x1B[0;1m';\n message += ' ' + AWS.util.string.lowerFirst(req.operation);\n message += '(' + params + ')';\n if (ansi) message += '\\x1B[0m';\n return message;\n }\n\n var line = buildMessage();\n\n if (typeof logger.log === 'function') {\n logger.log(line);\n } else if (typeof logger.write === 'function') {\n logger.write(line + '\\n');\n }\n });\n }),\n Json: new SequentialExecutor().addNamedListeners(function (add) {\n var svc = require('./protocol/json');\n\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n Rest: new SequentialExecutor().addNamedListeners(function (add) {\n var svc = require('./protocol/rest');\n\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n RestJson: new SequentialExecutor().addNamedListeners(function (add) {\n var svc = require('./protocol/rest_json');\n\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n RestXml: new SequentialExecutor().addNamedListeners(function (add) {\n var svc = require('./protocol/rest_xml');\n\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n }),\n Query: new SequentialExecutor().addNamedListeners(function (add) {\n var svc = require('./protocol/query');\n\n add('BUILD', 'build', svc.buildRequest);\n add('EXTRACT_DATA', 'extractData', svc.extractData);\n add('EXTRACT_ERROR', 'extractError', svc.extractError);\n })\n};","/**\n * Escapes characters that can not be in an XML attribute.\n */\nfunction escapeAttribute(value) {\n return value.replace(/&/g, '&').replace(/'/g, ''').replace(//g, '>').replace(/\"/g, '"');\n}\n/**\n * @api private\n */\n\n\nmodule.exports = {\n escapeAttribute: escapeAttribute\n};","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');","var util = require('../util');\n\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 = ['type', 'description', 'delay', 'maxAttempts', 'acceptors'];\n keys.forEach(function (key) {\n var value = waiter[key];\n\n if (value) {\n property(self, key, value);\n }\n });\n}\n/**\n * @api private\n */\n\n\nmodule.exports = ResourceWaiter;","var util = require('./util');\n\nvar regionConfig = require('./region_config_data.json');\n\nfunction generateRegionPrefix(region) {\n if (!region) return null;\n var parts = region.split('-');\n if (parts.length < 3) return null;\n return parts.slice(0, parts.length - 2).join('-') + '-*';\n}\n\nfunction derivedKeys(service) {\n var region = service.config.region;\n var regionPrefix = generateRegionPrefix(region);\n var endpointPrefix = service.api.endpointPrefix;\n return [[region, endpointPrefix], [regionPrefix, endpointPrefix], [region, '*'], [regionPrefix, '*'], ['*', endpointPrefix], ['*', '*']].map(function (item) {\n return item[0] && item[1] ? item.join('/') : null;\n });\n}\n\nfunction applyConfig(service, config) {\n util.each(config, function (key, value) {\n if (key === 'globalEndpoint') return;\n\n if (service.config[key] === undefined || service.config[key] === null) {\n service.config[key] = value;\n }\n });\n}\n\nfunction configureEndpoint(service) {\n var keys = derivedKeys(service);\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!key) continue;\n\n if (Object.prototype.hasOwnProperty.call(regionConfig.rules, key)) {\n var config = regionConfig.rules[key];\n\n if (typeof config === 'string') {\n config = regionConfig.patterns[config];\n } // set dualstack endpoint\n\n\n if (service.config.useDualstack && util.isDualstackAvailable(service)) {\n config = util.copy(config);\n config.endpoint = '{service}.dualstack.{region}.amazonaws.com';\n } // set global endpoint\n\n\n service.isGlobalEndpoint = !!config.globalEndpoint; // signature version\n\n if (!config.signatureVersion) config.signatureVersion = 'v4'; // merge config\n\n applyConfig(service, config);\n return;\n }\n }\n}\n/**\n * @api private\n */\n\n\nmodule.exports = configureEndpoint;","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh \n * @license MIT\n */\n\n/* eslint-disable no-proto */\n'use strict';\n\nvar base64 = require('base64-js');\n\nvar ieee754 = require('ieee754');\n\nvar isArray = require('isarray');\n\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\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 */\n\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();\n/*\n * Export kMaxLength after typed array support is determined.\n */\n\nexports.kMaxLength = kMaxLength();\n\nfunction typedArraySupport() {\n try {\n var arr = new Uint8Array(1);\n arr.__proto__ = {\n __proto__: Uint8Array.prototype,\n foo: function foo() {\n return 42;\n }\n };\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 ? 0x7fffffff : 0x3fffffff;\n}\n\nfunction createBuffer(that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length');\n }\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\n that.length = length;\n }\n\n return that;\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\n\nfunction Buffer(arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length);\n } // Common case.\n\n\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error('If encoding is specified then the first argument must be a string');\n }\n\n return allocUnsafe(this, arg);\n }\n\n return from(this, arg, encodingOrOffset, length);\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n// TODO: Legacy, not needed anymore. Remove in next major version.\n\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 * 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 **/\n\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\n if (typeof Symbol !== 'undefined' && Symbol.species && 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\n if (size <= 0) {\n return createBuffer(that, size);\n }\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' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);\n }\n\n return createBuffer(that, size);\n}\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\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\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n\n return that;\n}\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\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 */\n\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 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\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\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\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' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0);\n }\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 ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');\n }\n\n return length | 0;\n}\n\nfunction SlowBuffer(length) {\n if (+length != length) {\n // eslint-disable-line eqeqeq\n length = 0;\n }\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 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\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\n if (length === undefined) {\n length = 0;\n\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\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers');\n }\n\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n\n return buffer;\n};\n\nfunction byteLength(string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length;\n }\n\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength;\n }\n\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0; // Use a for loop to avoid recursion\n\n var loweredCase = false;\n\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len;\n\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length;\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2;\n\n case 'hex':\n return len >>> 1;\n\n case 'base64':\n return base64ToBytes(string).length;\n\n default:\n if (loweredCase) return utf8ToBytes(string).length; // assume utf8\n\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\n\nBuffer.byteLength = byteLength;\n\nfunction slowToString(encoding, start, end) {\n var loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\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\n if (start === undefined || start < 0) {\n start = 0;\n } // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n\n\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 } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n\n\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} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\n\n\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\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits');\n }\n\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n\n return this;\n};\n\nBuffer.prototype.swap32 = function swap32() {\n var len = this.length;\n\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits');\n }\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\n return this;\n};\n\nBuffer.prototype.swap64 = function swap64() {\n var len = this.length;\n\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits');\n }\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\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\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\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\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n\n if (thisStart === undefined) {\n thisStart = 0;\n }\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\n if (thisStart >= thisEnd) {\n return -1;\n }\n\n if (start >= end) {\n return 1;\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n if (this === target) return 0;\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\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}; // 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\n\n\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1; // Normalize byteOffset\n\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\n byteOffset = +byteOffset; // Coerce to Number.\n\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 } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n if (byteOffset >= buffer.length) {\n if (dir) return -1;else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;else return -1;\n } // Normalize val\n\n\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\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\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\n if (Buffer.TYPED_ARRAY_SUPPORT && 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\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\n if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1;\n }\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\n if (dir) {\n var foundIndex = -1;\n\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\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n\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\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\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n\n if (length > remaining) {\n length = remaining;\n }\n } // must be an even number of digits\n\n\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\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\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; // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0; // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n } // legacy write(string, encoding, offset, length) - remove in v0.13\n\n } else {\n throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\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 var loweredCase = false;\n\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 var i = start;\n\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 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\n break;\n\n case 2:\n secondByte = buf[i + 1];\n\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n\n break;\n\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n\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\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\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} // 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\n\n\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray(codePoints) {\n var len = codePoints.length;\n\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n var res = '';\n var i = 0;\n\n while (i < len) {\n res += String.fromCharCode.apply(String, 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\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\n return ret;\n}\n\nfunction hexSlice(buf, start, end) {\n var len = buf.length;\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n var out = '';\n\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n\n return out;\n}\n\nfunction utf16leSlice(buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\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 var newBuf;\n\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\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf;\n};\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\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 var val = this[offset];\n var mul = 1;\n var i = 0;\n\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\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n\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 return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | 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 var val = this[offset];\n var mul = 1;\n var i = 0;\n\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n mul *= 0x80;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\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 var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n\n mul *= 0x80;\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\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 return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | 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\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\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\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\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\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)) >>> (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\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\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\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\n return offset + 2;\n};\n\nfunction objectWriteUInt32(buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n\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\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\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\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\n return offset + 4;\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\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\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\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\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\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\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\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\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\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\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\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\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\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\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\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\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\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}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\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; // Copy 0 bytes; we're done\n\n if (end === start) return 0;\n if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds');\n }\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'); // Are we oob?\n\n if (end > this.length) end = this.length;\n\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(target, this.subarray(start, start + len), targetStart);\n }\n\n return len;\n}; // Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\n\n\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\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n\n if (code < 256) {\n val = code;\n }\n }\n\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string');\n }\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 } // Invalid ranges are not set to a default, so can range check early.\n\n\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 if (!val) val = 0;\n var i;\n\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) ? val : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this;\n}; // HELPER FUNCTIONS\n// ================\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, ''); // Node converts strings with length < 2 to ''\n\n if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\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); // is surrogate component\n\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 } // valid lead\n\n\n leadSurrogate = codePoint;\n continue;\n } // 2 leads in a row\n\n\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue;\n } // valid surrogate pair\n\n\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; // encode utf8\n\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(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break;\n bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break;\n bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n } else {\n throw new Error('Invalid code point');\n }\n }\n\n return bytes;\n}\n\nfunction asciiToBytes(str) {\n var byteArray = [];\n\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\n return byteArray;\n}\n\nfunction utf16leToBytes(str, units) {\n var c, hi, lo;\n var byteArray = [];\n\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break;\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\n return i;\n}\n\nfunction isnan(val) {\n return val !== val; // eslint-disable-line no-self-compare\n}","var util = require('../util');\n\nvar Shape = require('../model/shape');\n\nfunction DomXmlParser() {}\n\nDomXmlParser.prototype.parse = function (xml, shape) {\n if (xml.replace(/^\\s+/, '') === '') return {};\n var result, error;\n\n try {\n if (window.DOMParser) {\n try {\n var parser = new DOMParser();\n result = parser.parseFromString(xml, 'text/xml');\n } catch (syntaxError) {\n throw util.error(new Error('Parse error in document'), {\n originalError: syntaxError,\n code: 'XMLParserError',\n retryable: true\n });\n }\n\n if (result.documentElement === null) {\n throw util.error(new Error('Cannot parse empty document.'), {\n code: 'XMLParserError',\n retryable: true\n });\n }\n\n var isError = result.getElementsByTagName('parsererror')[0];\n\n if (isError && (isError.parentNode === result || isError.parentNode.nodeName === 'body' || isError.parentNode.parentNode === result || isError.parentNode.parentNode.nodeName === 'body')) {\n var errorElement = isError.getElementsByTagName('div')[0] || isError;\n throw util.error(new Error(errorElement.textContent || 'Parser error in document'), {\n code: 'XMLParserError',\n retryable: true\n });\n }\n } else if (window.ActiveXObject) {\n result = new window.ActiveXObject('Microsoft.XMLDOM');\n result.async = false;\n\n if (!result.loadXML(xml)) {\n throw util.error(new Error('Parse error in document'), {\n code: 'XMLParserError',\n retryable: true\n });\n }\n } else {\n throw new Error('Cannot load XML parser');\n }\n } catch (e) {\n error = e;\n }\n\n if (result && result.documentElement && !error) {\n var data = parseXml(result.documentElement, shape);\n var metadata = getElementByTagName(result.documentElement, 'ResponseMetadata');\n\n if (metadata) {\n data.ResponseMetadata = parseXml(metadata, {});\n }\n\n return data;\n } else if (error) {\n throw util.error(error || new Error(), {\n code: 'XMLParserError',\n retryable: true\n });\n } else {\n // empty xml document\n return {};\n }\n};\n\nfunction getElementByTagName(xml, tag) {\n var elements = xml.getElementsByTagName(tag);\n\n for (var i = 0, iLen = elements.length; i < iLen; i++) {\n if (elements[i].parentNode === xml) {\n return elements[i];\n }\n }\n}\n\nfunction parseXml(xml, shape) {\n if (!shape) shape = {};\n\n switch (shape.type) {\n case 'structure':\n return parseStructure(xml, shape);\n\n case 'map':\n return parseMap(xml, shape);\n\n case 'list':\n return parseList(xml, shape);\n\n case undefined:\n case null:\n return parseUnknown(xml);\n\n default:\n return parseScalar(xml, shape);\n }\n}\n\nfunction parseStructure(xml, shape) {\n var data = {};\n if (xml === null) return data;\n util.each(shape.members, function (memberName, memberShape) {\n if (memberShape.isXmlAttribute) {\n if (Object.prototype.hasOwnProperty.call(xml.attributes, memberShape.name)) {\n var value = xml.attributes[memberShape.name].value;\n data[memberName] = parseXml({\n textContent: value\n }, memberShape);\n }\n } else {\n var xmlChild = memberShape.flattened ? xml : getElementByTagName(xml, memberShape.name);\n\n if (xmlChild) {\n data[memberName] = parseXml(xmlChild, memberShape);\n } else if (!memberShape.flattened && memberShape.type === 'list') {\n data[memberName] = memberShape.defaultValue;\n }\n }\n });\n return data;\n}\n\nfunction parseMap(xml, shape) {\n var data = {};\n var xmlKey = shape.key.name || 'key';\n var xmlValue = shape.value.name || 'value';\n var tagName = shape.flattened ? shape.name : 'entry';\n var child = xml.firstElementChild;\n\n while (child) {\n if (child.nodeName === tagName) {\n var key = getElementByTagName(child, xmlKey).textContent;\n var value = getElementByTagName(child, xmlValue);\n data[key] = parseXml(value, shape.value);\n }\n\n child = child.nextElementSibling;\n }\n\n return data;\n}\n\nfunction parseList(xml, shape) {\n var data = [];\n var tagName = shape.flattened ? shape.name : shape.member.name || 'member';\n var child = xml.firstElementChild;\n\n while (child) {\n if (child.nodeName === tagName) {\n data.push(parseXml(child, shape.member));\n }\n\n child = child.nextElementSibling;\n }\n\n return data;\n}\n\nfunction parseScalar(xml, shape) {\n if (xml.getAttribute) {\n var encoding = xml.getAttribute('encoding');\n\n if (encoding === 'base64') {\n shape = new Shape.create({\n type: encoding\n });\n }\n }\n\n var text = xml.textContent;\n if (text === '') text = null;\n\n if (typeof shape.toType === 'function') {\n return shape.toType(text);\n } else {\n return text;\n }\n}\n\nfunction parseUnknown(xml) {\n if (xml === undefined || xml === null) return ''; // empty object\n\n if (!xml.firstElementChild) {\n if (xml.parentNode.parentNode === null) return {};\n if (xml.childNodes.length === 0) return '';else return xml.textContent;\n } // object, parse as structure\n\n\n var shape = {\n type: 'structure',\n members: {}\n };\n var child = xml.firstElementChild;\n\n while (child) {\n var tag = child.nodeName;\n\n if (Object.prototype.hasOwnProperty.call(shape.members, tag)) {\n // multiple tags of the same name makes it a list\n shape.members[tag].type = 'list';\n } else {\n shape.members[tag] = {\n name: tag\n };\n }\n\n child = child.nextElementSibling;\n }\n\n return parseStructure(xml, shape);\n}\n/**\n * @api private\n */\n\n\nmodule.exports = DomXmlParser;","var util = require('../util');\n\nvar AWS = require('../core');\n/**\n * Prepend prefix defined by API model to endpoint that's already\n * constructed. This feature does not apply to operations using\n * endpoint discovery and can be disabled.\n * @api private\n */\n\n\nfunction populateHostPrefix(request) {\n var enabled = request.service.config.hostPrefixEnabled;\n if (!enabled) return request;\n var operationModel = request.service.api.operations[request.operation]; //don't marshal host prefix when operation has endpoint discovery traits\n\n if (hasEndpointDiscover(request)) return request;\n\n if (operationModel.endpoint && operationModel.endpoint.hostPrefix) {\n var hostPrefixNotation = operationModel.endpoint.hostPrefix;\n var hostPrefix = expandHostPrefix(hostPrefixNotation, request.params, operationModel.input);\n prependEndpointPrefix(request.httpRequest.endpoint, hostPrefix);\n validateHostname(request.httpRequest.endpoint.hostname);\n }\n\n return request;\n}\n/**\n * @api private\n */\n\n\nfunction hasEndpointDiscover(request) {\n var api = request.service.api;\n var operationModel = api.operations[request.operation];\n var isEndpointOperation = api.endpointOperation && api.endpointOperation === util.string.lowerFirst(operationModel.name);\n return operationModel.endpointDiscoveryRequired !== 'NULL' || isEndpointOperation === true;\n}\n/**\n * @api private\n */\n\n\nfunction expandHostPrefix(hostPrefixNotation, params, shape) {\n util.each(shape.members, function (name, member) {\n if (member.hostLabel === true) {\n if (typeof params[name] !== 'string' || params[name] === '') {\n throw util.error(new Error(), {\n message: 'Parameter ' + name + ' should be a non-empty string.',\n code: 'InvalidParameter'\n });\n }\n\n var regex = new RegExp('\\\\{' + name + '\\\\}', 'g');\n hostPrefixNotation = hostPrefixNotation.replace(regex, params[name]);\n }\n });\n return hostPrefixNotation;\n}\n/**\n * @api private\n */\n\n\nfunction prependEndpointPrefix(endpoint, prefix) {\n if (endpoint.host) {\n endpoint.host = prefix + endpoint.host;\n }\n\n if (endpoint.hostname) {\n endpoint.hostname = prefix + endpoint.hostname;\n }\n}\n/**\n * @api private\n */\n\n\nfunction validateHostname(hostname) {\n var labels = hostname.split('.'); //Reference: https://tools.ietf.org/html/rfc1123#section-2\n\n var hostPattern = /^[a-zA-Z0-9]{1}$|^[a-zA-Z0-9][a-zA-Z0-9\\-]*[a-zA-Z0-9]$/;\n util.arrayEach(labels, function (label) {\n if (!label.length || label.length < 1 || label.length > 63) {\n throw util.error(new Error(), {\n code: 'ValidationError',\n message: 'Hostname label length should be between 1 to 63 characters, inclusive.'\n });\n }\n\n if (!hostPattern.test(label)) {\n throw AWS.util.error(new Error(), {\n code: 'ValidationError',\n message: label + ' is not hostname compatible.'\n });\n }\n });\n}\n\nmodule.exports = {\n populateHostPrefix: populateHostPrefix\n};","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar LRU_1 = require(\"./utils/LRU\");\n\nvar CACHE_SIZE = 1000;\n/**\n * Inspired node-lru-cache[https://github.com/isaacs/node-lru-cache]\n */\n\nvar EndpointCache =\n/** @class */\nfunction () {\n function EndpointCache(maxSize) {\n if (maxSize === void 0) {\n maxSize = CACHE_SIZE;\n }\n\n this.maxSize = maxSize;\n this.cache = new LRU_1.LRUCache(maxSize);\n }\n\n ;\n Object.defineProperty(EndpointCache.prototype, \"size\", {\n get: function get() {\n return this.cache.length;\n },\n enumerable: true,\n configurable: true\n });\n\n EndpointCache.prototype.put = function (key, value) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n var endpointRecord = this.populateValue(value);\n this.cache.put(keyString, endpointRecord);\n };\n\n EndpointCache.prototype.get = function (key) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n var now = Date.now();\n var records = this.cache.get(keyString);\n\n if (records) {\n for (var i = 0; i < records.length; i++) {\n var record = records[i];\n\n if (record.Expire < now) {\n this.cache.remove(keyString);\n return undefined;\n }\n }\n }\n\n return records;\n };\n\n EndpointCache.getKeyString = function (key) {\n var identifiers = [];\n var identifierNames = Object.keys(key).sort();\n\n for (var i = 0; i < identifierNames.length; i++) {\n var identifierName = identifierNames[i];\n if (key[identifierName] === undefined) continue;\n identifiers.push(key[identifierName]);\n }\n\n return identifiers.join(' ');\n };\n\n EndpointCache.prototype.populateValue = function (endpoints) {\n var now = Date.now();\n return endpoints.map(function (endpoint) {\n return {\n Address: endpoint.Address || '',\n Expire: now + (endpoint.CachePeriodInMinutes || 1) * 60 * 1000\n };\n });\n };\n\n EndpointCache.prototype.empty = function () {\n this.cache.empty();\n };\n\n EndpointCache.prototype.remove = function (key) {\n var keyString = typeof key !== 'string' ? EndpointCache.getKeyString(key) : key;\n this.cache.remove(keyString);\n };\n\n return EndpointCache;\n}();\n\nexports.EndpointCache = EndpointCache;","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 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 || shape.locationName || memberName);\n property(this, 'isStreaming', shape.streaming || this.isStreaming || false);\n property(this, 'requiresLength', shape.requiresLength, false);\n property(this, 'isComposite', shape.isComposite || false);\n property(this, 'isShape', true, false);\n property(this, 'isQueryName', Boolean(shape.queryName), false);\n property(this, 'isLocationName', Boolean(shape.locationName), false);\n property(this, 'isIdempotent', shape.idempotencyToken === true);\n property(this, 'isJsonValue', shape.jsonvalue === true);\n property(this, 'isSensitive', shape.sensitive === true || shape.prototype && shape.prototype.sensitive === true);\n property(this, 'isEventStream', Boolean(shape.eventstream), false);\n property(this, 'isEvent', Boolean(shape.event), false);\n property(this, 'isEventPayload', Boolean(shape.eventpayload), false);\n property(this, 'isEventHeader', Boolean(shape.eventheader), false);\n property(this, 'isTimestampFormatSet', Boolean(shape.timestampFormat) || shape.prototype && shape.prototype.isTimestampFormatSet === true, false);\n property(this, 'endpointDiscoveryId', Boolean(shape.endpointdiscoveryid), false);\n property(this, 'hostLabel', Boolean(shape.hostLabel), false);\n\n if (options.documentation) {\n property(this, 'documentation', shape.documentation);\n property(this, 'documentationUrl', shape.documentationUrl);\n }\n\n if (shape.xmlAttribute) {\n property(this, 'isXmlAttribute', shape.xmlAttribute || false);\n } // type conversion and parsing\n\n\n property(this, 'defaultValue', null);\n\n this.toWireFormat = function (value) {\n if (value === null || value === undefined) return '';\n return value;\n };\n\n this.toType = function (value) {\n return value;\n };\n}\n/**\n * @api private\n */\n\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 * @api private\n */\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\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 var refShape = Shape.resolve(shape, options);\n\n if (refShape) {\n var filteredKeys = Object.keys(shape);\n\n if (!options.documentation) {\n filteredKeys = filteredKeys.filter(function (name) {\n return !name.match(/documentation/);\n });\n } // create an inline shape with extra members\n\n\n var InlineShape = function InlineShape() {\n refShape.constructor.call(this, shape, options, memberName);\n };\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';else if (shape.member) shape.type = 'list';else if (shape.key) shape.type = 'map';else shape.type = 'string';\n } // normalize types\n\n\n var origType = shape.type;\n\n if (Shape.normalizedTypes[shape.type]) {\n shape.type = Shape.normalizedTypes[shape.type];\n }\n\n if (Shape.types[shape.type]) {\n return new Shape.types[shape.type](shape, options, memberName);\n } else {\n throw new Error('Unrecognized shape type: ' + origType);\n }\n }\n};\n\nfunction CompositeShape(shape) {\n Shape.apply(this, arguments);\n property(this, 'isComposite', true);\n\n if (shape.flattened) {\n property(this, 'flattened', shape.flattened || false);\n }\n}\n\nfunction StructureShape(shape, options) {\n var self = this;\n var requiredMap = null,\n firstInit = !this.isShape;\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function () {\n return {};\n });\n property(this, 'members', {});\n property(this, 'memberNames', []);\n property(this, 'required', []);\n property(this, 'isRequired', function () {\n return false;\n });\n }\n\n if (shape.members) {\n property(this, 'members', new Collection(shape.members, options, function (name, member) {\n return Shape.create(member, options, name);\n }));\n memoizedProperty(this, 'memberNames', function () {\n return shape.xmlOrder || Object.keys(shape.members);\n });\n\n if (shape.event) {\n memoizedProperty(this, 'eventPayloadMemberName', function () {\n var members = self.members;\n var memberNames = self.memberNames; // iterate over members to find ones that are event payloads\n\n for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n if (members[memberNames[i]].isEventPayload) {\n return memberNames[i];\n }\n }\n });\n memoizedProperty(this, 'eventHeaderMemberNames', function () {\n var members = self.members;\n var memberNames = self.memberNames;\n var eventHeaderMemberNames = []; // iterate over members to find ones that are event headers\n\n for (var i = 0, iLen = memberNames.length; i < iLen; i++) {\n if (members[memberNames[i]].isEventHeader) {\n eventHeaderMemberNames.push(memberNames[i]);\n }\n }\n\n return eventHeaderMemberNames;\n });\n }\n }\n\n if (shape.required) {\n property(this, 'required', shape.required);\n property(this, 'isRequired', function (name) {\n if (!requiredMap) {\n requiredMap = {};\n\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,\n firstInit = !this.isShape;\n CompositeShape.apply(this, arguments);\n\n if (firstInit) {\n property(this, 'defaultValue', function () {\n return [];\n });\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 () {\n return {};\n });\n property(this, 'key', Shape.create({\n type: 'string'\n }, options));\n property(this, 'value', Shape.create({\n type: 'string'\n }, options));\n }\n\n if (shape.key) {\n memoizedProperty(this, 'key', function () {\n return Shape.create(shape.key, options);\n });\n }\n\n if (shape.value) {\n memoizedProperty(this, 'value', function () {\n return Shape.create(shape.value, options);\n });\n }\n}\n\nfunction TimestampShape(shape) {\n var self = this;\n Shape.apply(this, arguments);\n\n if (shape.timestampFormat) {\n property(this, 'timestampFormat', shape.timestampFormat);\n } else if (self.isTimestampFormatSet && this.timestampFormat) {\n property(this, 'timestampFormat', this.timestampFormat);\n } else if (this.location === 'header') {\n property(this, 'timestampFormat', 'rfc822');\n } else if (this.location === 'querystring') {\n property(this, 'timestampFormat', 'iso8601');\n } else if (this.api) {\n switch (this.api.protocol) {\n case 'json':\n case 'rest-json':\n property(this, 'timestampFormat', 'unixTimestamp');\n break;\n\n case 'rest-xml':\n case 'query':\n case 'ec2':\n property(this, 'timestampFormat', 'iso8601');\n break;\n }\n }\n\n this.toType = function (value) {\n if (value === null || value === undefined) return null;\n if (typeof value.toUTCString === 'function') return value;\n return typeof value === 'string' || typeof value === 'number' ? 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 var nullLessProtocols = ['rest-xml', 'query', 'ec2'];\n\n this.toType = function (value) {\n value = this.api && nullLessProtocols.indexOf(this.api.protocol) > -1 ? value || '' : value;\n\n if (this.isJsonValue) {\n return JSON.parse(value);\n }\n\n return value && typeof value.toString === 'function' ? 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\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\n this.toWireFormat = this.toType;\n}\n\nfunction BinaryShape() {\n Shape.apply(this, arguments);\n\n this.toType = function (value) {\n var buf = util.base64.decode(value);\n\n if (this.isSensitive && util.isNode() && typeof util.Buffer.alloc === 'function') {\n /* Node.js can create a Buffer that is not isolated.\n * i.e. buf.byteLength !== buf.buffer.byteLength\n * This means that the sensitive data is accessible to anyone with access to buf.buffer.\n * If this is the node shared Buffer, then other code within this process _could_ find this secret.\n * Copy sensitive data to an isolated Buffer and zero the sensitive data.\n * While this is safe to do here, copying this code somewhere else may produce unexpected results.\n */\n var secureBuf = util.Buffer.alloc(buf.length, buf);\n buf.fill(0);\n buf = secureBuf;\n }\n\n return buf;\n };\n\n this.toWireFormat = util.base64.encode;\n}\n\nfunction Base64Shape() {\n BinaryShape.apply(this, arguments);\n}\n\nfunction BooleanShape() {\n Shape.apply(this, arguments);\n\n this.toType = function (value) {\n if (typeof value === 'boolean') return value;\n if (value === null || value === undefined) return null;\n return value === 'true';\n };\n}\n/**\n * @api private\n */\n\n\nShape.shapes = {\n StructureShape: StructureShape,\n ListShape: ListShape,\n MapShape: MapShape,\n StringShape: StringShape,\n BooleanShape: BooleanShape,\n Base64Shape: Base64Shape\n};\n/**\n * @api private\n */\n\nmodule.exports = Shape;","var AWS = require('../core');\n\nvar inherit = AWS.util.inherit;\n\nrequire('./v3');\n/**\n * @api private\n */\n\n\nAWS.Signers.V3Https = inherit(AWS.Signers.V3, {\n authorization: function authorization(credentials) {\n return 'AWS3-HTTPS ' + 'AWSAccessKeyId=' + credentials.accessKeyId + ',' + 'Algorithm=HmacSHA256,' + 'Signature=' + this.signature(credentials);\n },\n stringToSign: function stringToSign() {\n return this.request.headers['X-Amz-Date'];\n }\n});\n/**\n * @api private\n */\n\nmodule.exports = AWS.Signers.V3Https;","var AWS = require('./core');\n\nvar inherit = AWS.util.inherit;\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 */\n\nAWS.Endpoint = inherit({\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 ? config.sslEnabled : AWS.config.sslEnabled;\n endpoint = (useSSL ? 'https' : 'http') + '://' + endpoint;\n }\n\n AWS.util.update(this, AWS.util.urlParse(endpoint)); // Ensure the port property is set as an integer\n\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 * 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 */\n\nAWS.HttpRequest = inherit({\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 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\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\n if (query) {\n query = AWS.util.queryStringParse(query);\n return AWS.util.queryParamsToString(query);\n }\n\n return '';\n },\n\n /**\n * @api private\n * update httpRequest endpoint with endpoint string\n */\n updateEndpoint: function updateEndpoint(endpointStr) {\n var newEndpoint = new AWS.Endpoint(endpointStr);\n this.endpoint = newEndpoint;\n this.path = newEndpoint.path || '/';\n }\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 */\n\nAWS.HttpResponse = inherit({\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});\nAWS.HttpClient = inherit({});\n/**\n * @api private\n */\n\nAWS.HttpClient.getInstance = function getInstance() {\n if (this.singleton === undefined) {\n this.singleton = new this();\n }\n\n return this.singleton;\n};","var AWS = require('./core');\n\nvar util = require('./util');\n\nvar endpointDiscoveryEnabledEnvs = ['AWS_ENABLE_ENDPOINT_DISCOVERY', 'AWS_ENDPOINT_DISCOVERY_ENABLED'];\n/**\n * Generate key (except resources and operation part) to index the endpoints in the cache\n * If input shape has endpointdiscoveryid trait then use\n * accessKey + operation + resources + region + service as cache key\n * If input shape doesn't have endpointdiscoveryid trait then use\n * accessKey + region + service as cache key\n * @return [map] object with keys to index endpoints.\n * @api private\n */\n\nfunction getCacheKey(request) {\n var service = request.service;\n var api = service.api || {};\n var operations = api.operations;\n var identifiers = {};\n\n if (service.config.region) {\n identifiers.region = service.config.region;\n }\n\n if (api.serviceId) {\n identifiers.serviceId = api.serviceId;\n }\n\n if (service.config.credentials.accessKeyId) {\n identifiers.accessKeyId = service.config.credentials.accessKeyId;\n }\n\n return identifiers;\n}\n/**\n * Recursive helper for marshallCustomIdentifiers().\n * Looks for required string input members that have 'endpointdiscoveryid' trait.\n * @api private\n */\n\n\nfunction marshallCustomIdentifiersHelper(result, params, shape) {\n if (!shape || params === undefined || params === null) return;\n\n if (shape.type === 'structure' && shape.required && shape.required.length > 0) {\n util.arrayEach(shape.required, function (name) {\n var memberShape = shape.members[name];\n\n if (memberShape.endpointDiscoveryId === true) {\n var locationName = memberShape.isLocationName ? memberShape.name : name;\n result[locationName] = String(params[name]);\n } else {\n marshallCustomIdentifiersHelper(result, params[name], memberShape);\n }\n });\n }\n}\n/**\n * Get custom identifiers for cache key.\n * Identifies custom identifiers by checking each shape's `endpointDiscoveryId` trait.\n * @param [object] request object\n * @param [object] input shape of the given operation's api\n * @api private\n */\n\n\nfunction marshallCustomIdentifiers(request, shape) {\n var identifiers = {};\n marshallCustomIdentifiersHelper(identifiers, request.params, shape);\n return identifiers;\n}\n/**\n * Call endpoint discovery operation when it's optional.\n * When endpoint is available in cache then use the cached endpoints. If endpoints\n * are unavailable then use regional endpoints and call endpoint discovery operation\n * asynchronously. This is turned off by default.\n * @param [object] request object\n * @api private\n */\n\n\nfunction optionalDiscoverEndpoint(request) {\n var service = request.service;\n var api = service.api;\n var operationModel = api.operations ? api.operations[request.operation] : undefined;\n var inputShape = operationModel ? operationModel.input : undefined;\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operationModel) cacheKey.operation = operationModel.name;\n }\n\n var endpoints = AWS.endpointCache.get(cacheKey);\n\n if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n //endpoint operation is being made but response not yet received\n //or endpoint operation just failed in 1 minute\n return;\n } else if (endpoints && endpoints.length > 0) {\n //found endpoint record from cache\n request.httpRequest.updateEndpoint(endpoints[0].Address);\n } else {\n //endpoint record not in cache or outdated. make discovery operation\n var endpointRequest = service.makeRequest(api.endpointOperation, {\n Operation: operationModel.name,\n Identifiers: identifiers\n });\n addApiVersionHeader(endpointRequest);\n endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n endpointRequest.removeListener('retry', AWS.EventListeners.Core.RETRY_CHECK); //put in a placeholder for endpoints already requested, prevent\n //too much in-flight calls\n\n AWS.endpointCache.put(cacheKey, [{\n Address: '',\n CachePeriodInMinutes: 1\n }]);\n endpointRequest.send(function (err, data) {\n if (data && data.Endpoints) {\n AWS.endpointCache.put(cacheKey, data.Endpoints);\n } else if (err) {\n AWS.endpointCache.put(cacheKey, [{\n Address: '',\n CachePeriodInMinutes: 1 //not to make more endpoint operation in next 1 minute\n\n }]);\n }\n });\n }\n}\n\nvar requestQueue = {};\n/**\n * Call endpoint discovery operation when it's required.\n * When endpoint is available in cache then use cached ones. If endpoints are\n * unavailable then SDK should call endpoint operation then use returned new\n * endpoint for the api call. SDK will automatically attempt to do endpoint\n * discovery. This is turned off by default\n * @param [object] request object\n * @api private\n */\n\nfunction requiredDiscoverEndpoint(request, done) {\n var service = request.service;\n var api = service.api;\n var operationModel = api.operations ? api.operations[request.operation] : undefined;\n var inputShape = operationModel ? operationModel.input : undefined;\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operationModel) cacheKey.operation = operationModel.name;\n }\n\n var cacheKeyStr = AWS.EndpointCache.getKeyString(cacheKey);\n var endpoints = AWS.endpointCache.get(cacheKeyStr); //endpoint cache also accepts string keys\n\n if (endpoints && endpoints.length === 1 && endpoints[0].Address === '') {\n //endpoint operation is being made but response not yet received\n //push request object to a pending queue\n if (!requestQueue[cacheKeyStr]) requestQueue[cacheKeyStr] = [];\n requestQueue[cacheKeyStr].push({\n request: request,\n callback: done\n });\n return;\n } else if (endpoints && endpoints.length > 0) {\n request.httpRequest.updateEndpoint(endpoints[0].Address);\n done();\n } else {\n var endpointRequest = service.makeRequest(api.endpointOperation, {\n Operation: operationModel.name,\n Identifiers: identifiers\n });\n endpointRequest.removeListener('validate', AWS.EventListeners.Core.VALIDATE_PARAMETERS);\n addApiVersionHeader(endpointRequest); //put in a placeholder for endpoints already requested, prevent\n //too much in-flight calls\n\n AWS.endpointCache.put(cacheKeyStr, [{\n Address: '',\n CachePeriodInMinutes: 60 //long-live cache\n\n }]);\n endpointRequest.send(function (err, data) {\n if (err) {\n var errorParams = {\n code: 'EndpointDiscoveryException',\n message: 'Request cannot be fulfilled without specifying an endpoint',\n retryable: false\n };\n request.response.error = util.error(err, errorParams);\n AWS.endpointCache.remove(cacheKey); //fail all the pending requests in batch\n\n if (requestQueue[cacheKeyStr]) {\n var pendingRequests = requestQueue[cacheKeyStr];\n util.arrayEach(pendingRequests, function (requestContext) {\n requestContext.request.response.error = util.error(err, errorParams);\n requestContext.callback();\n });\n delete requestQueue[cacheKeyStr];\n }\n } else if (data) {\n AWS.endpointCache.put(cacheKeyStr, data.Endpoints);\n request.httpRequest.updateEndpoint(data.Endpoints[0].Address); //update the endpoint for all the pending requests in batch\n\n if (requestQueue[cacheKeyStr]) {\n var pendingRequests = requestQueue[cacheKeyStr];\n util.arrayEach(pendingRequests, function (requestContext) {\n requestContext.request.httpRequest.updateEndpoint(data.Endpoints[0].Address);\n requestContext.callback();\n });\n delete requestQueue[cacheKeyStr];\n }\n }\n\n done();\n });\n }\n}\n/**\n * add api version header to endpoint operation\n * @api private\n */\n\n\nfunction addApiVersionHeader(endpointRequest) {\n var api = endpointRequest.service.api;\n var apiVersion = api.apiVersion;\n\n if (apiVersion && !endpointRequest.httpRequest.headers['x-amz-api-version']) {\n endpointRequest.httpRequest.headers['x-amz-api-version'] = apiVersion;\n }\n}\n/**\n * If api call gets invalid endpoint exception, SDK should attempt to remove the invalid\n * endpoint from cache.\n * @api private\n */\n\n\nfunction invalidateCachedEndpoints(response) {\n var error = response.error;\n var httpResponse = response.httpResponse;\n\n if (error && (error.code === 'InvalidEndpointException' || httpResponse.statusCode === 421)) {\n var request = response.request;\n var operations = request.service.api.operations || {};\n var inputShape = operations[request.operation] ? operations[request.operation].input : undefined;\n var identifiers = marshallCustomIdentifiers(request, inputShape);\n var cacheKey = getCacheKey(request);\n\n if (Object.keys(identifiers).length > 0) {\n cacheKey = util.update(cacheKey, identifiers);\n if (operations[request.operation]) cacheKey.operation = operations[request.operation].name;\n }\n\n AWS.endpointCache.remove(cacheKey);\n }\n}\n/**\n * If endpoint is explicitly configured, SDK should not do endpoint discovery in anytime.\n * @param [object] client Service client object.\n * @api private\n */\n\n\nfunction hasCustomEndpoint(client) {\n //if set endpoint is set for specific client, enable endpoint discovery will raise an error.\n if (client._originalConfig && client._originalConfig.endpoint && client._originalConfig.endpointDiscoveryEnabled === true) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'Custom endpoint is supplied; endpointDiscoveryEnabled must not be true.'\n });\n }\n\n ;\n var svcConfig = AWS.config[client.serviceIdentifier] || {};\n return Boolean(AWS.config.endpoint || svcConfig.endpoint || client._originalConfig && client._originalConfig.endpoint);\n}\n/**\n * @api private\n */\n\n\nfunction isFalsy(value) {\n return ['false', '0'].indexOf(value) >= 0;\n}\n/**\n * If endpoint discovery should perform for this request when endpoint discovery is optional.\n * SDK performs config resolution in order like below:\n * 1. If turned on client configuration(default to off) then turn on endpoint discovery.\n * 2. If turned on in env AWS_ENABLE_ENDPOINT_DISCOVERY then turn on endpoint discovery.\n * 3. If turned on in shared ini config file with key 'endpoint_discovery_enabled', then\n * turn on endpoint discovery.\n * @param [object] request request object.\n * @api private\n */\n\n\nfunction isEndpointDiscoveryApplicable(request) {\n var service = request.service || {};\n if (service.config.endpointDiscoveryEnabled === true) return true; //shared ini file is only available in Node\n //not to check env in browser\n\n if (util.isBrowser()) return false;\n\n for (var i = 0; i < endpointDiscoveryEnabledEnvs.length; i++) {\n var env = endpointDiscoveryEnabledEnvs[i];\n\n if (Object.prototype.hasOwnProperty.call(process.env, env)) {\n if (process.env[env] === '' || process.env[env] === undefined) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'environmental variable ' + env + ' cannot be set to nothing'\n });\n }\n\n if (!isFalsy(process.env[env])) return true;\n }\n }\n\n var configFile = {};\n\n try {\n configFile = AWS.util.iniLoader ? AWS.util.iniLoader.loadFrom({\n isConfig: true,\n filename: process.env[AWS.util.sharedConfigFileEnv]\n }) : {};\n } catch (e) {}\n\n var sharedFileConfig = configFile[process.env.AWS_PROFILE || AWS.util.defaultProfile] || {};\n\n if (Object.prototype.hasOwnProperty.call(sharedFileConfig, 'endpoint_discovery_enabled')) {\n if (sharedFileConfig.endpoint_discovery_enabled === undefined) {\n throw util.error(new Error(), {\n code: 'ConfigurationException',\n message: 'config file entry \\'endpoint_discovery_enabled\\' cannot be set to nothing'\n });\n }\n\n if (!isFalsy(sharedFileConfig.endpoint_discovery_enabled)) return true;\n }\n\n return false;\n}\n/**\n * attach endpoint discovery logic to request object\n * @param [object] request\n * @api private\n */\n\n\nfunction discoverEndpoint(request, done) {\n var service = request.service || {};\n if (hasCustomEndpoint(service) || request.isPresigned()) return done();\n if (!isEndpointDiscoveryApplicable(request)) return done();\n request.httpRequest.appendToUserAgent('endpoint-discovery');\n var operations = service.api.operations || {};\n var operationModel = operations[request.operation];\n var isEndpointDiscoveryRequired = operationModel ? operationModel.endpointDiscoveryRequired : 'NULL';\n\n switch (isEndpointDiscoveryRequired) {\n case 'OPTIONAL':\n optionalDiscoverEndpoint(request);\n request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n done();\n break;\n\n case 'REQUIRED':\n request.addNamedListener('INVALIDATE_CACHED_ENDPOINTS', 'extractError', invalidateCachedEndpoints);\n requiredDiscoverEndpoint(request, done);\n break;\n\n case 'NULL':\n default:\n done();\n break;\n }\n}\n\nmodule.exports = {\n discoverEndpoint: discoverEndpoint,\n requiredDiscoverEndpoint: requiredDiscoverEndpoint,\n optionalDiscoverEndpoint: optionalDiscoverEndpoint,\n marshallCustomIdentifiers: marshallCustomIdentifiers,\n getCacheKey: getCacheKey,\n invalidateCachedEndpoint: invalidateCachedEndpoints\n};"],"sourceRoot":""}