{"version":3,"sources":["webpack:///./node_modules/@aws-amplify/pubsub/lib-esm/Providers/MqttOverWSProvider.js","webpack:///./node_modules/@aws-amplify/pubsub/lib-esm/Providers/PubSubProvider.js","webpack:///./node_modules/@aws-amplify/pubsub/lib-esm/Providers/AWSAppSyncProvider.js","webpack:///./node_modules/@aws-amplify/pubsub/node_modules/graphql/jsutils/isObjectLike.mjs","webpack:///./node_modules/@aws-amplify/pubsub/node_modules/graphql/polyfills/symbols.mjs","webpack:///./node_modules/@aws-amplify/pubsub/node_modules/graphql/language/location.mjs","webpack:///./node_modules/@aws-amplify/pubsub/node_modules/graphql/language/printLocation.mjs","webpack:///./node_modules/@aws-amplify/pubsub/node_modules/graphql/error/GraphQLError.mjs","webpack:///./node_modules/@aws-amplify/pubsub/lib-esm/Providers/AWSAppSyncRealTimeProvider/constants.js","webpack:///./node_modules/@aws-amplify/pubsub/lib-esm/Providers/AWSAppSyncRealTimeProvider/index.js","webpack:///./node_modules/@aws-amplify/pubsub/lib-esm/PubSub.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/common/StorageErrorStrings.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/providers/axios-http-handler.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/common/StorageConstants.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/providers/AWSS3UploadTask.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/common/StorageUtils.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/common/S3ClientUtils.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/providers/AWSS3ProviderManagedUpload.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/providers/AWSS3Provider.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/Storage.js","webpack:///./node_modules/@aws-amplify/storage/lib-esm/index.js","webpack:///./node_modules/@aws-amplify/ui/dist/aws-amplify-ui.js","webpack:///./node_modules/@aws-amplify/pubsub/lib-esm/index.js"],"names":["extendStatics","__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","logger","AbstractPubSubProvider","options","_config","configure","config","debug","getProviderName","getCategory","defineProperty","get","enumerable","configurable","__extends","d","b","setPrototypeOf","__proto__","Array","__","constructor","create","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","Symbol","iterator","v","op","TypeError","pop","push","__rest","indexOf","getOwnPropertySymbols","propertyIsEnumerable","ClientsQueue","promises","Map","clientId","clientFactory","cachedPromise","newPromise","_a","set","undefined","from","keys","remove","delete","topicSymbol","_super","MqttOverWSProvider","_this","uuid","_clientsQueue","_topicObservers","_clientIdObservers","aws_pubsub_endpoint","aws_appsync_dangerously_connect_to_http_endpoint_for_testing","getTopicForValue","onDisconnect","errorCode","args","warn","JSON","stringify","topicsToDelete_1","clientIdObservers","forEach","observer","error","observerForTopic","observerTopic","size","topic","newClient","url","client","_b","onMessageArrived","destinationName","msg","payloadString","_onMessage","onConnectionLost","connect","useSSL","isSSLEnabled","mqttVersion","onSuccess","onFailure","clientsQueue","disconnect","isConnected","publish","topics","targetTopics","message","concat","endpoint","join","send","matchedTopicObservers_1","filter","filterArray","split","topicArray","left","right","mqttTopicMatch","parsedMessage_1","parse","observersForTopic","subscribe","Set","add","observersForClientId","e_1","_c","unsubscribe","__read","o","m","r","ar","__spread","AWSAppSyncProvider","_topicClient","_topicAlias","Error","_cleanUp","entries","map","_cleanUpForTopic","topicsForClient","has","obs","closed","mqttConnections","newSubscriptions","newAliases","alias","reduce","acc","elem","connectionInfoForTopic","find","c","all","err_1","_d","complete","values","some","data","obj","origKey","val","_typeof","asyncIterator","SYMBOL_TO_STRING_TAG","toStringTag","getLocation","source","position","match","lineRegexp","line","column","exec","index","printLocation","location","printSourceLocation","start","sourceLocation","firstLineColumnOffset","locationOffset","whitespace","lineIndex","lineOffset","lineNum","columnOffset","columnNum","locationStr","name","lines","locationLine","subLineIndex","Math","floor","subLineColumnNum","subLines","slice","printPrefixedLines","subLine","existingLines","_ref","padLen","max","_ref2","_ref3","str","prefix","len","ownKeys","object","enumerableOnly","symbols","sym","getOwnPropertyDescriptor","_defineProperty","key","writable","_defineProperties","target","props","descriptor","_possibleConstructorReturn","self","_assertThisInitialized","ReferenceError","_wrapNativeSuper","Class","_cache","fn","Function","toString","Wrapper","_construct","_getPrototypeOf","_setPrototypeOf","Parent","_isNativeReflectConstruct","Reflect","construct","a","instance","bind","sham","Proxy","Date","getPrototypeOf","_Error","subClass","superClass","_inherits","GraphQLError","Derived","hasNativeReflectConstruct","Constructor","protoProps","staticProps","Super","NewTarget","nodes","positions","path","originalError","extensions","_nodeLocations","_nodeLocations2","_nodeLocations3","_classCallCheck","undefinedIfEmpty","isArray","nodeLocations","_i2","_this$nodes","loc","locations","pos","originalExtensions","getOwnPropertyDescriptors","defineProperties","_objectSpread","stack","captureStackTrace","output","_i4","_error$nodes2","node","_i6","_error$locations2","printError","array","MESSAGE_TYPES","SUBSCRIPTION_STATUS","SOCKET_STATUS","NON_RETRYABLE_CODES","AMPLIFY_SYMBOL","for","AWS_APPSYNC_REALTIME_HEADERS","accept","CONNECTION_INIT_TIMEOUT","DEFAULT_KEEP_ALIVE_TIMEOUT","standardDomainPattern","AWSAppSyncRealTimeProvider","socketStatus","CLOSED","keepAliveTimeout","subscriptionObserverMap","promiseArray","getNewWebSocket","protocol","WebSocket","_topics","_msg","_options","isCustomDomain","appSyncGraphqlEndpoint","subscriptionId_1","_startSubscriptionWithAWSAppSyncRealTime","subscriptionId","catch","err","errors","REALTIME_SUBSCRIPTION_INIT_ERROR","subscriptionState","_waitForSubscriptionToBeConnected","CONNECTED","_sendUnsubscriptionMessage","_removeSubscriptionObserver","authenticationType","query","variables","apiKey","region","graphql_headers","_e","additionalHeaders","dataString","headerObj","_f","_g","subscriptionMessage","stringToAWSRealTime","err_2","subscriptionFailedCallback_1","_h","subscriptionFailedCallback","subscriptionReadyCallback","_j","_k","PENDING","startAckTimeoutId","_awsRealTimeHeaderBasedAuth","payload","canonicalUri","userAgent","id","authorization","type","GQL_START","_initializeWebSocketConnection","CONNECTION_FAILED","setTimeout","_timeoutStartSubscriptionAck","awsRealTimeSocket","subscriptionObserver","res","rej","readyState","OPEN","READY","unsubscribeMessage","GQL_STOP","_closeSocketIfRequired","bufferedAmount","keepAliveTimeoutId","clearTimeout","tempSocket","onclose","onerror","close","_handleIncomingSubscriptionMessage","GQL_DATA","GQL_START_ACK","GQL_CONNECTION_KEEP_ALIVE","_errorDisconnect","TIMEOUT_DISCONNECT","GQL_ERROR","FAILED","event","Hub","dispatch","dispatchApiEvent","SUBSCRIPTION_ACK","clear","headerString","headerQs","payloadQs","discoverableEndpoint","awsRealTimeUrl","err_3","CONNECTING","replace","_initializeRetryableHandshake","_initializeHandshake","err_4","errorType","newSocket","onopen","ackOk_1","reason","onmessage","connectionTimeoutMs","GQL_CONNECTION_ACK","CONNECTION_CLOSED","GQL_CONNECTION_ERROR","gqlInit","GQL_CONNECTION_INIT","ackOk","includes","headerHandler","handler","host","API_KEY","_awsRealTimeApiKeyHeader","AWS_IAM","_awsRealTimeIAMHeader","OPENID_CONNECT","_awsRealTimeOPENIDHeader","AMAZON_COGNITO_USER_POOLS","_awsRealTimeCUPHeader","AWS_LAMBDA","_customAuthHeader","currentSession","Authorization","getAccessToken","getJwtToken","token","federatedInfo","currentUser","getItem","currentAuthenticatedUser","dt","dtStr","toISOString","endpointInfo","creds","request","service","_ensureCredentials","Credentials","credentials","secret_key","secretAccessKey","access_key","accessKeyId","session_token","sessionToken","method","headers","Signer","sign","cred","shear","isNode","PubSub","PubSubClass","_pluggables","_awsAppSyncProvider","_awsAppSyncRealTimeProvider","getModuleName","opt","pluggable","addPluggable","removePluggable","providerName","getProviderByName","awsAppSyncProvider","awsAppSyncRealTimeProvider","getProviders","provider","ssr","providers","subscriptions","observable","console","subscription","Amplify","register","StorageErrorStrings","AWSS3ProviderMultipartCopierErrors","AWSS3ProviderUploadErrorStrings","__values","SEND_UPLOAD_PROGRESS_EVENT","SEND_DOWNLOAD_PROGRESS_EVENT","normalizeHeaders","normalizedName","k","toUpperCase","e_1_1","return","reactNativeRequestTransformer","Blob","defaults","transformRequest","AxiosHttpHandler","httpOptions","emitter","cancelTokenSource","destroy","handle","requestTimeoutInMs","requestTimeout","queryString","port","hostname","axiosRequest","toLowerCase","onUploadProgress","emit","onDownloadProgress","cancelToken","responseType","Platform","isReactNative","raceOfPromises","response","statusCode","status","UPLOAD_PAUSED_MESSAGE","isCancel","hasErrorResponse","race","timeoutInMs","timeoutError","AWSS3UploadTaskState","TaskEvents","SET_CONTENT_LENGTH_HEADER","UPLOADS_STORAGE_KEY","dispatchStorageEvent","track","attrs","metrics","x","isArrayBuffer","ArrayBuffer","INVALID_CRED","getPrefix","level","resolvedCustomPrefix","customPrefix","resolvedIdentityId","identityId","privatePath","private","protectedPath","protected","publicPath","public","createPrefixMiddleware","_context","clonedInput","input","Key","Prefix","autoAdjustClockskewMiddleware","serverDate","ServerTime","Code","systemClockOffset","getTime","now","autoAdjustClockskewMiddlewareOptions","prefixMiddlewareOptions","credentialsProvider","error_1","createS3Client","dangerouslyConnectToHttpEndpointForTesting","useAccelerateEndpoint","localTestingConfig","tls","bucketEndpoint","forcePathStyle","s3client","S3Client","customUserAgent","requestHandler","middlewareStack","AWSS3ProviderManagedUpload","params","opts","minPartSize","queueSize","completedParts","cancel","bytesUploaded","totalBytesToUpload","_createNewS3Client","upload","putObjectCommand","uploadId","numberOfPartsToUpload","parts","validateAndSanitizeBody","Body","byteLength","PutObjectCommand","createMultiPartUpload","ceil","createParts","checkIfUploadCancelled","uploadParts","part","removeEventListener","finishMultiPartUpload","bodyStart","bodyEnd","min","bodyPart","partNumber","events","_lastUploadedBytes","createMultiPartUploadCommand","CreateMultipartUploadCommand","UploadId","allResults","Bucket","SSECustomerAlgorithm","SSECustomerKey","SSECustomerKeyMD5","setupEventListener","UploadPartCommand","PartNumber","ETag","cancelUpload","completeUploadCommand","error_2","MultipartUpload","Parts","CompleteMultipartUploadCommand","errorMessage","error_3","cleanup","AbortMultipartUploadCommand","ListPartsCommand","removeAllListeners","on","progress","progressChanged","loaded","incrementalUpdate","total","isGenericObject","comparePartNumber","AWSS3UploadTask","s3Client","file","storage","prefixPromise","partSize","inProgress","queued","totalBytes","state","INIT","storageSync","fileId","_getFileId","_validateParams","ERROR","IN_PROGRESS","_listSingleFile","bucket","listObjectRes","Contents","ListObjectsV2Command","File","lastModified","_findCachedUploadParts","uploadRequests","cachedUploadFileData","_listCachedUploadTasks","lastTouched","setItem","_emitEvent","tasks","fileMetadata","_isCached","_removeFromCache","_onPartUploadCompletion","eTag","chunk","UPLOAD_PROGRESS","job","uploadPartInput","PAUSED","_startNextPart","_isDone","_completeUpload","sort","_verifyFileSize","UPLOAD_COMPLETE","COMPLETED","_makeUploadPartRequest","log","CANCELLED","pause","CancelToken","nextPart","shift","s3Request","valid","Boolean","Size","_createParts","_initCachedUploadParts","cachedParts","uploadedPartNumSet","_initMultipartUpload","fileName","_initializeUploadTask","_startUpload","resume","_cancel","removedInProgressReq","splice","req","unshift","DEFAULT_STORAGE_LEVEL","AWSS3Provider","_storage","StorageHelper","getStorage","listen","removeItem","CATEGORY","PROVIDER_NAME","amplifyConfig","Parser","parseMobilehubConfig","Storage","startResumableUpload","addTaskInput","progressCallback","completeCallback","errorCallback","INVALID_BLOB","task","copy","src","dest","acl","cacheControl","expires","serverSideEncryption","SSEKMSKeyId","srcLevel","srcIdentityId","srcKey","destLevel","destKey","srcPrefix","destPrefix","finalSrcKey","finalDestKey","s3","_isWithCredentials","NO_CREDENTIALS","NO_SRC_KEY","NO_DEST_KEY","_prefix","CopySource","MetadataDirective","CacheControl","Expires","ServerSideEncryption","ACL","CopyObjectCommand","download","contentDisposition","contentEncoding","contentLanguage","contentType","final_key","getObjectCommand","signer","ResponseCacheControl","ResponseContentDisposition","ResponseContentEncoding","ResponseContentLanguage","ResponseContentType","GetObjectCommand","fileSize","Number","presign","expiresIn","put","resumable","metadata","tagging","ContentType","ContentDisposition","ContentEncoding","Metadata","Tagging","uploader","accessLevel","deleteObjectCommand","error_4","DeleteObjectCommand","list","maxKeys","final_path","listObjectsCommand","error_5","MaxKeys","ListObjectsCommand","item","substr","LastModified","error_6","DEFAULT_PROVIDER","_cancelTokenSourceMap","WeakMap","getPluggable","storageKeysFromConfig","storageArrayKeys","isInStorageArrayKeys","getCancellableTokenSource","updateRequestToBeCancellable","isUploadTask","prov","responsePromise","isCancelError","_instance","vault","old_configure","vaultConfig","getInstance","module","exports","l","__esModule","default","button","signInButton","googleSignInButton","signInButtonIcon","auth0SignInButton","facebookSignInButton","amazonSignInButton","oAuthSignInButton","signInButtonContent","formContainer","formSection","formField","formRow","hint","inputLabel","radio","navBar","navRight","nav","navItem","photoPickerButton","photoPlaceholder","photoPlaceholderIcon","container","actionRow","sectionHeader","sectionHeaderHint","sectionBody","sectionHeaderContent","sectionFooter","sectionFooterPrimaryContent","sectionFooterSecondaryContent","selectInput","strike","strikeContent","toast","toastClose","totpQrcode","sumerianSceneContainer","sumerianScene","loadingOverlay","loadingContainer","loadingLogo","loadingSceneName","loadingBar","loadingBarFill","sceneErrorText","sceneBar","sceneName","sceneActions","actionButton","tooltip","actionIcon","autoShowTooltip","CONTROL_MSG"],"mappings":"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","file":"61470bb.js","sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) 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 switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n 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]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\n/*\n * Copyright 2017-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 * as Paho from 'paho-mqtt';\nimport { v4 as uuid } from 'uuid';\nimport Observable from 'zen-observable-ts';\nimport { AbstractPubSubProvider } from './PubSubProvider';\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\nvar logger = new Logger('MqttOverWSProvider');\nexport function mqttTopicMatch(filter, topic) {\n var filterArray = filter.split('/');\n var length = filterArray.length;\n var topicArray = topic.split('/');\n for (var i = 0; i < length; ++i) {\n var left = filterArray[i];\n var right = topicArray[i];\n if (left === '#')\n return topicArray.length >= length;\n if (left !== '+' && left !== right)\n return false;\n }\n return length === topicArray.length;\n}\nvar ClientsQueue = /** @class */ (function () {\n function ClientsQueue() {\n this.promises = new Map();\n }\n ClientsQueue.prototype.get = function (clientId, clientFactory) {\n return __awaiter(this, void 0, void 0, function () {\n var cachedPromise, newPromise;\n return __generator(this, function (_a) {\n cachedPromise = this.promises.get(clientId);\n if (cachedPromise) {\n return [2 /*return*/, cachedPromise];\n }\n if (clientFactory) {\n newPromise = clientFactory(clientId);\n this.promises.set(clientId, newPromise);\n return [2 /*return*/, newPromise];\n }\n return [2 /*return*/, undefined];\n });\n });\n };\n Object.defineProperty(ClientsQueue.prototype, \"allClients\", {\n get: function () {\n return Array.from(this.promises.keys());\n },\n enumerable: true,\n configurable: true\n });\n ClientsQueue.prototype.remove = function (clientId) {\n this.promises.delete(clientId);\n };\n return ClientsQueue;\n}());\nvar topicSymbol = typeof Symbol !== 'undefined' ? Symbol('topic') : '@@topic';\nvar MqttOverWSProvider = /** @class */ (function (_super) {\n __extends(MqttOverWSProvider, _super);\n function MqttOverWSProvider(options) {\n if (options === void 0) { options = {}; }\n var _this = _super.call(this, __assign(__assign({}, options), { clientId: options.clientId || uuid() })) || this;\n _this._clientsQueue = new ClientsQueue();\n _this._topicObservers = new Map();\n _this._clientIdObservers = new Map();\n return _this;\n }\n Object.defineProperty(MqttOverWSProvider.prototype, \"clientId\", {\n get: function () {\n return this.options.clientId;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MqttOverWSProvider.prototype, \"endpoint\", {\n get: function () {\n return this.options.aws_pubsub_endpoint;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MqttOverWSProvider.prototype, \"clientsQueue\", {\n get: function () {\n return this._clientsQueue;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(MqttOverWSProvider.prototype, \"isSSLEnabled\", {\n get: function () {\n return !this.options\n .aws_appsync_dangerously_connect_to_http_endpoint_for_testing;\n },\n enumerable: true,\n configurable: true\n });\n MqttOverWSProvider.prototype.getTopicForValue = function (value) {\n return typeof value === 'object' && value[topicSymbol];\n };\n MqttOverWSProvider.prototype.getProviderName = function () {\n return 'MqttOverWSProvider';\n };\n MqttOverWSProvider.prototype.onDisconnect = function (_a) {\n var _this = this;\n var clientId = _a.clientId, errorCode = _a.errorCode, args = __rest(_a, [\"clientId\", \"errorCode\"]);\n if (errorCode !== 0) {\n logger.warn(clientId, JSON.stringify(__assign({ errorCode: errorCode }, args), null, 2));\n var topicsToDelete_1 = [];\n if (!clientId) {\n return;\n }\n var clientIdObservers = this._clientIdObservers.get(clientId);\n if (!clientIdObservers) {\n return;\n }\n clientIdObservers.forEach(function (observer) {\n observer.error('Disconnected, error code: ' + errorCode);\n // removing observers for disconnected clientId\n _this._topicObservers.forEach(function (observerForTopic, observerTopic) {\n observerForTopic.delete(observer);\n if (observerForTopic.size === 0) {\n topicsToDelete_1.push(observerTopic);\n }\n });\n });\n // forgiving any trace of clientId\n this._clientIdObservers.delete(clientId);\n // Removing topics that are not listen by an observer\n topicsToDelete_1.forEach(function (topic) {\n _this._topicObservers.delete(topic);\n });\n }\n };\n MqttOverWSProvider.prototype.newClient = function (_a) {\n var url = _a.url, clientId = _a.clientId;\n return __awaiter(this, void 0, void 0, function () {\n var client;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n logger.debug('Creating new MQTT client', clientId);\n client = new Paho.Client(url, clientId);\n // client.trace = (args) => logger.debug(clientId, JSON.stringify(args, null, 2));\n client.onMessageArrived = function (_a) {\n var topic = _a.destinationName, msg = _a.payloadString;\n _this._onMessage(topic, msg);\n };\n client.onConnectionLost = function (_a) {\n var errorCode = _a.errorCode, args = __rest(_a, [\"errorCode\"]);\n _this.onDisconnect(__assign({ clientId: clientId, errorCode: errorCode }, args));\n };\n return [4 /*yield*/, new Promise(function (resolve, reject) {\n client.connect({\n useSSL: _this.isSSLEnabled,\n mqttVersion: 3,\n onSuccess: function () { return resolve(client); },\n onFailure: reject,\n });\n })];\n case 1:\n _b.sent();\n return [2 /*return*/, client];\n }\n });\n });\n };\n MqttOverWSProvider.prototype.connect = function (clientId, options) {\n if (options === void 0) { options = {}; }\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.clientsQueue.get(clientId, function (clientId) {\n return _this.newClient(__assign(__assign({}, options), { clientId: clientId }));\n })];\n case 1: return [2 /*return*/, _a.sent()];\n }\n });\n });\n };\n MqttOverWSProvider.prototype.disconnect = function (clientId) {\n return __awaiter(this, void 0, void 0, function () {\n var client;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.clientsQueue.get(clientId)];\n case 1:\n client = _a.sent();\n if (client && client.isConnected()) {\n client.disconnect();\n }\n this.clientsQueue.remove(clientId);\n return [2 /*return*/];\n }\n });\n });\n };\n MqttOverWSProvider.prototype.publish = function (topics, msg) {\n return __awaiter(this, void 0, void 0, function () {\n var targetTopics, message, url, client;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n targetTopics = [].concat(topics);\n message = JSON.stringify(msg);\n return [4 /*yield*/, this.endpoint];\n case 1:\n url = _a.sent();\n return [4 /*yield*/, this.connect(this.clientId, { url: url })];\n case 2:\n client = _a.sent();\n logger.debug('Publishing to topic(s)', targetTopics.join(','), message);\n targetTopics.forEach(function (topic) { return client.send(topic, message); });\n return [2 /*return*/];\n }\n });\n });\n };\n MqttOverWSProvider.prototype._onMessage = function (topic, msg) {\n try {\n var matchedTopicObservers_1 = [];\n this._topicObservers.forEach(function (observerForTopic, observerTopic) {\n if (mqttTopicMatch(observerTopic, topic)) {\n matchedTopicObservers_1.push(observerForTopic);\n }\n });\n var parsedMessage_1 = JSON.parse(msg);\n if (typeof parsedMessage_1 === 'object') {\n parsedMessage_1[topicSymbol] = topic;\n }\n matchedTopicObservers_1.forEach(function (observersForTopic) {\n observersForTopic.forEach(function (observer) { return observer.next(parsedMessage_1); });\n });\n }\n catch (error) {\n logger.warn('Error handling message', error, msg);\n }\n };\n MqttOverWSProvider.prototype.subscribe = function (topics, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n var targetTopics = [].concat(topics);\n logger.debug('Subscribing to topic(s)', targetTopics.join(','));\n return new Observable(function (observer) {\n targetTopics.forEach(function (topic) {\n // this._topicObservers is used to notify the observers according to the topic received on the message\n var observersForTopic = _this._topicObservers.get(topic);\n if (!observersForTopic) {\n observersForTopic = new Set();\n _this._topicObservers.set(topic, observersForTopic);\n }\n observersForTopic.add(observer);\n });\n // @ts-ignore\n var client;\n var _a = options.clientId, clientId = _a === void 0 ? _this.clientId : _a;\n // this._clientIdObservers is used to close observers when client gets disconnected\n var observersForClientId = _this._clientIdObservers.get(clientId);\n if (!observersForClientId) {\n observersForClientId = new Set();\n }\n observersForClientId.add(observer);\n _this._clientIdObservers.set(clientId, observersForClientId);\n (function () { return __awaiter(_this, void 0, void 0, function () {\n var _a, url, _b, e_1;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _a = options.url;\n if (!(_a === void 0)) return [3 /*break*/, 2];\n return [4 /*yield*/, this.endpoint];\n case 1:\n _b = _c.sent();\n return [3 /*break*/, 3];\n case 2:\n _b = _a;\n _c.label = 3;\n case 3:\n url = _b;\n _c.label = 4;\n case 4:\n _c.trys.push([4, 6, , 7]);\n return [4 /*yield*/, this.connect(clientId, { url: url })];\n case 5:\n client = _c.sent();\n targetTopics.forEach(function (topic) {\n client.subscribe(topic);\n });\n return [3 /*break*/, 7];\n case 6:\n e_1 = _c.sent();\n observer.error(e_1);\n return [3 /*break*/, 7];\n case 7: return [2 /*return*/];\n }\n });\n }); })();\n return function () {\n var _a, _b;\n logger.debug('Unsubscribing from topic(s)', targetTopics.join(','));\n if (client) {\n (_a = _this._clientIdObservers.get(clientId)) === null || _a === void 0 ? void 0 : _a.delete(observer);\n // No more observers per client => client not needed anymore\n if (((_b = _this._clientIdObservers.get(clientId)) === null || _b === void 0 ? void 0 : _b.size) === 0) {\n _this.disconnect(clientId);\n _this._clientIdObservers.delete(clientId);\n }\n targetTopics.forEach(function (topic) {\n var observersForTopic = _this._topicObservers.get(topic) ||\n new Set();\n observersForTopic.delete(observer);\n // if no observers exists for the topic, topic should be removed\n if (observersForTopic.size === 0) {\n _this._topicObservers.delete(topic);\n if (client.isConnected()) {\n client.unsubscribe(topic);\n }\n }\n });\n }\n return null;\n };\n });\n };\n return MqttOverWSProvider;\n}(AbstractPubSubProvider));\nexport { MqttOverWSProvider };\n//# sourceMappingURL=MqttOverWSProvider.js.map","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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\nvar logger = new Logger('AbstractPubSubProvider');\nvar AbstractPubSubProvider = /** @class */ (function () {\n function AbstractPubSubProvider(options) {\n if (options === void 0) { options = {}; }\n this._config = options;\n }\n AbstractPubSubProvider.prototype.configure = function (config) {\n if (config === void 0) { config = {}; }\n this._config = __assign(__assign({}, config), this._config);\n logger.debug(\"configure \" + this.getProviderName(), this._config);\n return this.options;\n };\n AbstractPubSubProvider.prototype.getCategory = function () {\n return 'PubSub';\n };\n Object.defineProperty(AbstractPubSubProvider.prototype, \"options\", {\n get: function () {\n return __assign({}, this._config);\n },\n enumerable: true,\n configurable: true\n });\n return AbstractPubSubProvider;\n}());\nexport { AbstractPubSubProvider };\n//# sourceMappingURL=PubSubProvider.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) 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 switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __rest = (this && this.__rest) || function (s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n 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]))\n t[p[i]] = s[p[i]];\n }\n return t;\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport Observable from 'zen-observable-ts';\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\nimport { MqttOverWSProvider } from './MqttOverWSProvider';\nvar logger = new Logger('AWSAppSyncProvider');\n/**\n * @deprecated Unused, all usecases have migrated to AWSAppSyncRealtimeProvider\n */\nvar AWSAppSyncProvider = /** @class */ (function (_super) {\n __extends(AWSAppSyncProvider, _super);\n function AWSAppSyncProvider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this._topicClient = new Map();\n _this._topicAlias = new Map();\n return _this;\n }\n Object.defineProperty(AWSAppSyncProvider.prototype, \"endpoint\", {\n get: function () {\n throw new Error('Not supported');\n },\n enumerable: true,\n configurable: true\n });\n AWSAppSyncProvider.prototype.getProviderName = function () {\n return 'AWSAppSyncProvider';\n };\n AWSAppSyncProvider.prototype.publish = function (topics, msg, options) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error('Operation not supported');\n });\n });\n };\n AWSAppSyncProvider.prototype._cleanUp = function (clientId) {\n var _this = this;\n var topicsForClient = Array.from(this._topicClient.entries())\n .filter(function (_a) {\n var _b = __read(_a, 2), c = _b[1];\n return c.clientId === clientId;\n })\n .map(function (_a) {\n var _b = __read(_a, 1), t = _b[0];\n return t;\n });\n topicsForClient.forEach(function (t) { return _this._cleanUpForTopic(t); });\n };\n AWSAppSyncProvider.prototype._cleanUpForTopic = function (topic) {\n this._topicClient.delete(topic);\n this._topicAlias.delete(topic);\n };\n AWSAppSyncProvider.prototype.onDisconnect = function (_a) {\n var _this = this;\n var clientId = _a.clientId, errorCode = _a.errorCode, args = __rest(_a, [\"clientId\", \"errorCode\"]);\n if (errorCode !== 0) {\n var topicsForClient = Array.from(this._topicClient.entries())\n .filter(function (_a) {\n var _b = __read(_a, 2), c = _b[1];\n return c.clientId === clientId;\n })\n .map(function (_a) {\n var _b = __read(_a, 1), t = _b[0];\n return t;\n });\n topicsForClient.forEach(function (topic) {\n if (_this._topicObservers.has(topic)) {\n _this._topicObservers.get(topic).forEach(function (obs) {\n if (!obs.closed) {\n obs.error(args);\n }\n });\n _this._topicObservers.delete(topic);\n }\n });\n this._cleanUp(clientId);\n }\n };\n AWSAppSyncProvider.prototype.disconnect = function (clientId) {\n return __awaiter(this, void 0, void 0, function () {\n var client;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.clientsQueue.get(clientId, function () { return null; })];\n case 1:\n client = _a.sent();\n return [4 /*yield*/, _super.prototype.disconnect.call(this, clientId)];\n case 2:\n _a.sent();\n this._cleanUp(clientId);\n return [2 /*return*/];\n }\n });\n });\n };\n AWSAppSyncProvider.prototype.subscribe = function (topics, options) {\n var _this = this;\n if (options === void 0) { options = {}; }\n var result = new Observable(function (observer) {\n var targetTopics = [].concat(topics);\n logger.debug('Subscribing to topic(s)', targetTopics.join(','));\n (function () { return __awaiter(_this, void 0, void 0, function () {\n var _a, mqttConnections, newSubscriptions, newAliases, map;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n // Add these topics to map\n targetTopics.forEach(function (t) {\n if (!_this._topicObservers.has(t)) {\n _this._topicObservers.set(t, new Set());\n }\n _this._topicObservers.get(t).add(observer);\n });\n _a = options.mqttConnections, mqttConnections = _a === void 0 ? [] : _a, newSubscriptions = options.newSubscriptions;\n newAliases = Object.entries(newSubscriptions).map(function (_a) {\n var _b = __read(_a, 2), alias = _b[0], v = _b[1];\n return [v.topic, alias];\n });\n // Merge new aliases with old ones\n this._topicAlias = new Map(__spread(Array.from(this._topicAlias.entries()), newAliases));\n map = Object.entries(targetTopics.reduce(function (acc, elem) {\n var connectionInfoForTopic = mqttConnections.find(function (c) { return c.topics.indexOf(elem) > -1; });\n if (connectionInfoForTopic) {\n var clientId = connectionInfoForTopic.client, url = connectionInfoForTopic.url;\n if (!acc[clientId]) {\n acc[clientId] = {\n url: url,\n topics: new Set(),\n };\n }\n acc[clientId].topics.add(elem);\n }\n return acc;\n }, {}));\n // reconnect everything we have in the map\n return [4 /*yield*/, Promise.all(map.map(function (_a) {\n var _b = __read(_a, 2), clientId = _b[0], _c = _b[1], url = _c.url, topics = _c.topics;\n return __awaiter(_this, void 0, void 0, function () {\n var client, err_1;\n var _this = this;\n return __generator(this, function (_d) {\n switch (_d.label) {\n case 0:\n client = null;\n _d.label = 1;\n case 1:\n _d.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this.connect(clientId, {\n clientId: clientId,\n url: url,\n })];\n case 2:\n client = _d.sent();\n return [3 /*break*/, 4];\n case 3:\n err_1 = _d.sent();\n observer.error({ message: 'Failed to connect', error: err_1 });\n observer.complete();\n return [2 /*return*/, undefined];\n case 4:\n // subscribe to all topics for this client\n // store topic-client mapping\n topics.forEach(function (topic) {\n if (client.isConnected()) {\n client.subscribe(topic);\n _this._topicClient.set(topic, client);\n }\n });\n return [2 /*return*/, client];\n }\n });\n });\n }))];\n case 1:\n // reconnect everything we have in the map\n _b.sent();\n return [2 /*return*/];\n }\n });\n }); })();\n return function () {\n logger.debug('Unsubscribing from topic(s)', targetTopics.join(','));\n targetTopics.forEach(function (t) {\n var client = _this._topicClient.get(t);\n if (client && client.isConnected()) {\n client.unsubscribe(t);\n _this._topicClient.delete(t);\n if (!Array.from(_this._topicClient.values()).some(function (c) { return c === client; })) {\n _this.disconnect(client.clientId);\n }\n }\n _this._topicObservers.delete(t);\n });\n };\n });\n return Observable.from(result).map(function (value) {\n var topic = _this.getTopicForValue(value);\n var alias = _this._topicAlias.get(topic);\n value.data = Object.entries(value.data).reduce(function (obj, _a) {\n var _b = __read(_a, 2), origKey = _b[0], val = _b[1];\n return ((obj[(alias || origKey)] = val), obj);\n }, {});\n return value;\n });\n };\n return AWSAppSyncProvider;\n}(MqttOverWSProvider));\nexport { AWSAppSyncProvider };\n//# sourceMappingURL=AWSAppSyncProvider.js.map","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * Return true if `value` is object-like. A value is object-like if it's not\n * `null` and has a `typeof` result of \"object\".\n */\nexport default function isObjectLike(value) {\n return _typeof(value) == 'object' && value !== null;\n}\n","// In ES2015 (or a polyfilled) environment, this will be Symbol.iterator\n// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\nexport var SYMBOL_ITERATOR = typeof Symbol === 'function' && Symbol.iterator != null ? Symbol.iterator : '@@iterator'; // In ES2017 (or a polyfilled) environment, this will be Symbol.asyncIterator\n// istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\nexport var SYMBOL_ASYNC_ITERATOR = typeof Symbol === 'function' && Symbol.asyncIterator != null ? Symbol.asyncIterator : '@@asyncIterator'; // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\nexport var SYMBOL_TO_STRING_TAG = typeof Symbol === 'function' && Symbol.toStringTag != null ? Symbol.toStringTag : '@@toStringTag';\n","/**\n * Represents a location in a Source.\n */\n\n/**\n * Takes a Source and a UTF-8 character offset, and returns the corresponding\n * line and column as a SourceLocation.\n */\nexport function getLocation(source, position) {\n var lineRegexp = /\\r\\n|[\\n\\r]/g;\n var line = 1;\n var column = position + 1;\n var match;\n\n while ((match = lineRegexp.exec(source.body)) && match.index < position) {\n line += 1;\n column = position + 1 - (match.index + match[0].length);\n }\n\n return {\n line: line,\n column: column\n };\n}\n","import { getLocation } from \"./location.mjs\";\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nexport function printLocation(location) {\n return printSourceLocation(location.source, getLocation(location.source, location.start));\n}\n/**\n * Render a helpful description of the location in the GraphQL Source document.\n */\n\nexport function printSourceLocation(source, sourceLocation) {\n var firstLineColumnOffset = source.locationOffset.column - 1;\n var body = whitespace(firstLineColumnOffset) + source.body;\n var lineIndex = sourceLocation.line - 1;\n var lineOffset = source.locationOffset.line - 1;\n var lineNum = sourceLocation.line + lineOffset;\n var columnOffset = sourceLocation.line === 1 ? firstLineColumnOffset : 0;\n var columnNum = sourceLocation.column + columnOffset;\n var locationStr = \"\".concat(source.name, \":\").concat(lineNum, \":\").concat(columnNum, \"\\n\");\n var lines = body.split(/\\r\\n|[\\n\\r]/g);\n var locationLine = lines[lineIndex]; // Special case for minified documents\n\n if (locationLine.length > 120) {\n var subLineIndex = Math.floor(columnNum / 80);\n var subLineColumnNum = columnNum % 80;\n var subLines = [];\n\n for (var i = 0; i < locationLine.length; i += 80) {\n subLines.push(locationLine.slice(i, i + 80));\n }\n\n return locationStr + printPrefixedLines([[\"\".concat(lineNum), subLines[0]]].concat(subLines.slice(1, subLineIndex + 1).map(function (subLine) {\n return ['', subLine];\n }), [[' ', whitespace(subLineColumnNum - 1) + '^'], ['', subLines[subLineIndex + 1]]]));\n }\n\n return locationStr + printPrefixedLines([// Lines specified like this: [\"prefix\", \"string\"],\n [\"\".concat(lineNum - 1), lines[lineIndex - 1]], [\"\".concat(lineNum), locationLine], ['', whitespace(columnNum - 1) + '^'], [\"\".concat(lineNum + 1), lines[lineIndex + 1]]]);\n}\n\nfunction printPrefixedLines(lines) {\n var existingLines = lines.filter(function (_ref) {\n var _ = _ref[0],\n line = _ref[1];\n return line !== undefined;\n });\n var padLen = Math.max.apply(Math, existingLines.map(function (_ref2) {\n var prefix = _ref2[0];\n return prefix.length;\n }));\n return existingLines.map(function (_ref3) {\n var prefix = _ref3[0],\n line = _ref3[1];\n return leftPad(padLen, prefix) + (line ? ' | ' + line : ' |');\n }).join('\\n');\n}\n\nfunction whitespace(len) {\n return Array(len + 1).join(' ');\n}\n\nfunction leftPad(len, str) {\n return whitespace(len - str.length) + str;\n}\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _wrapNativeSuper(Class) { var _cache = typeof Map === \"function\" ? new Map() : undefined; _wrapNativeSuper = function _wrapNativeSuper(Class) { if (Class === null || !_isNativeFunction(Class)) return Class; if (typeof Class !== \"function\") { throw new TypeError(\"Super expression must either be null or a function\"); } if (typeof _cache !== \"undefined\") { if (_cache.has(Class)) return _cache.get(Class); _cache.set(Class, Wrapper); } function Wrapper() { return _construct(Class, arguments, _getPrototypeOf(this).constructor); } Wrapper.prototype = Object.create(Class.prototype, { constructor: { value: Wrapper, enumerable: false, writable: true, configurable: true } }); return _setPrototypeOf(Wrapper, Class); }; return _wrapNativeSuper(Class); }\n\nfunction _construct(Parent, args, Class) { if (_isNativeReflectConstruct()) { _construct = Reflect.construct; } else { _construct = function _construct(Parent, args, Class) { var a = [null]; a.push.apply(a, args); var Constructor = Function.bind.apply(Parent, a); var instance = new Constructor(); if (Class) _setPrototypeOf(instance, Class.prototype); return instance; }; } return _construct.apply(null, arguments); }\n\nfunction _isNativeReflectConstruct() { if (typeof Reflect === \"undefined\" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === \"function\") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }\n\nfunction _isNativeFunction(fn) { return Function.toString.call(fn).indexOf(\"[native code]\") !== -1; }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nimport isObjectLike from \"../jsutils/isObjectLike.mjs\";\nimport { SYMBOL_TO_STRING_TAG } from \"../polyfills/symbols.mjs\";\nimport { getLocation } from \"../language/location.mjs\";\nimport { printLocation, printSourceLocation } from \"../language/printLocation.mjs\";\n/**\n * A GraphQLError describes an Error found during the parse, validate, or\n * execute phases of performing a GraphQL operation. In addition to a message\n * and stack trace, it also includes information about the locations in a\n * GraphQL document and/or execution result that correspond to the Error.\n */\n\nexport var GraphQLError = /*#__PURE__*/function (_Error) {\n _inherits(GraphQLError, _Error);\n\n var _super = _createSuper(GraphQLError);\n\n /**\n * An array of { line, column } locations within the source GraphQL document\n * which correspond to this error.\n *\n * Errors during validation often contain multiple locations, for example to\n * point out two things with the same name. Errors during execution include a\n * single location, the field which produced the error.\n *\n * Enumerable, and appears in the result of JSON.stringify().\n */\n\n /**\n * An array describing the JSON-path into the execution response which\n * corresponds to this error. Only included for errors during execution.\n *\n * Enumerable, and appears in the result of JSON.stringify().\n */\n\n /**\n * An array of GraphQL AST Nodes corresponding to this error.\n */\n\n /**\n * The source GraphQL document for the first location of this error.\n *\n * Note that if this Error represents more than one node, the source may not\n * represent nodes after the first node.\n */\n\n /**\n * An array of character offsets within the source GraphQL document\n * which correspond to this error.\n */\n\n /**\n * The original error thrown from a field resolver during execution.\n */\n\n /**\n * Extension fields to add to the formatted error.\n */\n function GraphQLError(message, nodes, source, positions, path, originalError, extensions) {\n var _nodeLocations, _nodeLocations2, _nodeLocations3;\n\n var _this;\n\n _classCallCheck(this, GraphQLError);\n\n _this = _super.call(this, message);\n _this.name = 'GraphQLError';\n _this.originalError = originalError !== null && originalError !== void 0 ? originalError : undefined; // Compute list of blame nodes.\n\n _this.nodes = undefinedIfEmpty(Array.isArray(nodes) ? nodes : nodes ? [nodes] : undefined);\n var nodeLocations = [];\n\n for (var _i2 = 0, _ref3 = (_this$nodes = _this.nodes) !== null && _this$nodes !== void 0 ? _this$nodes : []; _i2 < _ref3.length; _i2++) {\n var _this$nodes;\n\n var _ref4 = _ref3[_i2];\n var loc = _ref4.loc;\n\n if (loc != null) {\n nodeLocations.push(loc);\n }\n }\n\n nodeLocations = undefinedIfEmpty(nodeLocations); // Compute locations in the source for the given nodes/positions.\n\n _this.source = source !== null && source !== void 0 ? source : (_nodeLocations = nodeLocations) === null || _nodeLocations === void 0 ? void 0 : _nodeLocations[0].source;\n _this.positions = positions !== null && positions !== void 0 ? positions : (_nodeLocations2 = nodeLocations) === null || _nodeLocations2 === void 0 ? void 0 : _nodeLocations2.map(function (loc) {\n return loc.start;\n });\n _this.locations = positions && source ? positions.map(function (pos) {\n return getLocation(source, pos);\n }) : (_nodeLocations3 = nodeLocations) === null || _nodeLocations3 === void 0 ? void 0 : _nodeLocations3.map(function (loc) {\n return getLocation(loc.source, loc.start);\n });\n _this.path = path !== null && path !== void 0 ? path : undefined;\n var originalExtensions = originalError === null || originalError === void 0 ? void 0 : originalError.extensions;\n\n if (extensions == null && isObjectLike(originalExtensions)) {\n _this.extensions = _objectSpread({}, originalExtensions);\n } else {\n _this.extensions = extensions !== null && extensions !== void 0 ? extensions : {};\n } // By being enumerable, JSON.stringify will include bellow properties in the resulting output.\n // This ensures that the simplest possible GraphQL service adheres to the spec.\n\n\n Object.defineProperties(_assertThisInitialized(_this), {\n message: {\n enumerable: true\n },\n locations: {\n enumerable: _this.locations != null\n },\n path: {\n enumerable: _this.path != null\n },\n extensions: {\n enumerable: _this.extensions != null && Object.keys(_this.extensions).length > 0\n },\n name: {\n enumerable: false\n },\n nodes: {\n enumerable: false\n },\n source: {\n enumerable: false\n },\n positions: {\n enumerable: false\n },\n originalError: {\n enumerable: false\n }\n }); // Include (non-enumerable) stack trace.\n\n if (originalError !== null && originalError !== void 0 && originalError.stack) {\n Object.defineProperty(_assertThisInitialized(_this), 'stack', {\n value: originalError.stack,\n writable: true,\n configurable: true\n });\n return _possibleConstructorReturn(_this);\n } // istanbul ignore next (See: 'https://github.com/graphql/graphql-js/issues/2317')\n\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(_assertThisInitialized(_this), GraphQLError);\n } else {\n Object.defineProperty(_assertThisInitialized(_this), 'stack', {\n value: Error().stack,\n writable: true,\n configurable: true\n });\n }\n\n return _this;\n }\n\n _createClass(GraphQLError, [{\n key: \"toString\",\n value: function toString() {\n return printError(this);\n } // FIXME: workaround to not break chai comparisons, should be remove in v16\n // $FlowFixMe[unsupported-syntax] Flow doesn't support computed properties yet\n\n }, {\n key: SYMBOL_TO_STRING_TAG,\n get: function get() {\n return 'Object';\n }\n }]);\n\n return GraphQLError;\n}( /*#__PURE__*/_wrapNativeSuper(Error));\n\nfunction undefinedIfEmpty(array) {\n return array === undefined || array.length === 0 ? undefined : array;\n}\n/**\n * Prints a GraphQLError to a string, representing useful location information\n * about the error's position in the source.\n */\n\n\nexport function printError(error) {\n var output = error.message;\n\n if (error.nodes) {\n for (var _i4 = 0, _error$nodes2 = error.nodes; _i4 < _error$nodes2.length; _i4++) {\n var node = _error$nodes2[_i4];\n\n if (node.loc) {\n output += '\\n\\n' + printLocation(node.loc);\n }\n }\n } else if (error.source && error.locations) {\n for (var _i6 = 0, _error$locations2 = error.locations; _i6 < _error$locations2.length; _i6++) {\n var location = _error$locations2[_i6];\n output += '\\n\\n' + printSourceLocation(error.source, location);\n }\n }\n\n return output;\n}\n","export var MAX_DELAY_MS = 5000;\nexport var NON_RETRYABLE_CODES = [400, 401, 403];\nexport var MESSAGE_TYPES;\n(function (MESSAGE_TYPES) {\n /**\n * Client -> Server message.\n * This message type is the first message after handshake and this will initialize AWS AppSync RealTime communication\n */\n MESSAGE_TYPES[\"GQL_CONNECTION_INIT\"] = \"connection_init\";\n /**\n * Server -> Client message\n * This message type is in case there is an issue with AWS AppSync RealTime when establishing connection\n */\n MESSAGE_TYPES[\"GQL_CONNECTION_ERROR\"] = \"connection_error\";\n /**\n * Server -> Client message.\n * This message type is for the ack response from AWS AppSync RealTime for GQL_CONNECTION_INIT message\n */\n MESSAGE_TYPES[\"GQL_CONNECTION_ACK\"] = \"connection_ack\";\n /**\n * Client -> Server message.\n * This message type is for register subscriptions with AWS AppSync RealTime\n */\n MESSAGE_TYPES[\"GQL_START\"] = \"start\";\n /**\n * Server -> Client message.\n * This message type is for the ack response from AWS AppSync RealTime for GQL_START message\n */\n MESSAGE_TYPES[\"GQL_START_ACK\"] = \"start_ack\";\n /**\n * Server -> Client message.\n * This message type is for subscription message from AWS AppSync RealTime\n */\n MESSAGE_TYPES[\"GQL_DATA\"] = \"data\";\n /**\n * Server -> Client message.\n * This message type helps the client to know is still receiving messages from AWS AppSync RealTime\n */\n MESSAGE_TYPES[\"GQL_CONNECTION_KEEP_ALIVE\"] = \"ka\";\n /**\n * Client -> Server message.\n * This message type is for unregister subscriptions with AWS AppSync RealTime\n */\n MESSAGE_TYPES[\"GQL_STOP\"] = \"stop\";\n /**\n * Server -> Client message.\n * This message type is for the ack response from AWS AppSync RealTime for GQL_STOP message\n */\n MESSAGE_TYPES[\"GQL_COMPLETE\"] = \"complete\";\n /**\n * Server -> Client message.\n * This message type is for sending error messages from AWS AppSync RealTime to the client\n */\n MESSAGE_TYPES[\"GQL_ERROR\"] = \"error\";\n})(MESSAGE_TYPES || (MESSAGE_TYPES = {}));\nexport var SUBSCRIPTION_STATUS;\n(function (SUBSCRIPTION_STATUS) {\n SUBSCRIPTION_STATUS[SUBSCRIPTION_STATUS[\"PENDING\"] = 0] = \"PENDING\";\n SUBSCRIPTION_STATUS[SUBSCRIPTION_STATUS[\"CONNECTED\"] = 1] = \"CONNECTED\";\n SUBSCRIPTION_STATUS[SUBSCRIPTION_STATUS[\"FAILED\"] = 2] = \"FAILED\";\n})(SUBSCRIPTION_STATUS || (SUBSCRIPTION_STATUS = {}));\nexport var SOCKET_STATUS;\n(function (SOCKET_STATUS) {\n SOCKET_STATUS[SOCKET_STATUS[\"CLOSED\"] = 0] = \"CLOSED\";\n SOCKET_STATUS[SOCKET_STATUS[\"READY\"] = 1] = \"READY\";\n SOCKET_STATUS[SOCKET_STATUS[\"CONNECTING\"] = 2] = \"CONNECTING\";\n})(SOCKET_STATUS || (SOCKET_STATUS = {}));\nexport var AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' && typeof Symbol.for === 'function'\n ? Symbol.for('amplify_default')\n : '@@amplify_default');\nexport var AWS_APPSYNC_REALTIME_HEADERS = {\n accept: 'application/json, text/javascript',\n 'content-encoding': 'amz-1.0',\n 'content-type': 'application/json; charset=UTF-8',\n};\n/**\n * Time in milleseconds to wait for GQL_CONNECTION_INIT message\n */\nexport var CONNECTION_INIT_TIMEOUT = 15000;\n/**\n * Time in milleseconds to wait for GQL_START_ACK message\n */\nexport var START_ACK_TIMEOUT = 15000;\n/**\n * Default Time in milleseconds to wait for GQL_CONNECTION_KEEP_ALIVE message\n */\nexport var DEFAULT_KEEP_ALIVE_TIMEOUT = 5 * 60 * 1000;\n//# sourceMappingURL=constants.js.map","var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) 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 switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\n/*\n * Copyright 2017-2021 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 Observable from 'zen-observable-ts';\nimport { GraphQLError } from 'graphql';\nimport * as url from 'url';\nimport { v4 as uuid } from 'uuid';\nimport { Buffer } from 'buffer';\nimport { Logger, Credentials, Signer, Hub, Constants, USER_AGENT_HEADER, jitteredExponentialRetry, NonRetryableError, } from '@aws-amplify/core';\nimport Cache from '@aws-amplify/cache';\nimport Auth from '@aws-amplify/auth';\nimport { AbstractPubSubProvider } from '../PubSubProvider';\nimport { CONTROL_MSG } from '../../index';\nimport { AMPLIFY_SYMBOL, AWS_APPSYNC_REALTIME_HEADERS, CONNECTION_INIT_TIMEOUT, DEFAULT_KEEP_ALIVE_TIMEOUT, MAX_DELAY_MS, MESSAGE_TYPES, NON_RETRYABLE_CODES, SOCKET_STATUS, START_ACK_TIMEOUT, SUBSCRIPTION_STATUS, } from './constants';\nvar logger = new Logger('AWSAppSyncRealTimeProvider');\nvar dispatchApiEvent = function (event, data, message) {\n Hub.dispatch('api', { event: event, data: data, message: message }, 'PubSub', AMPLIFY_SYMBOL);\n};\nvar standardDomainPattern = /^https:\\/\\/\\w{26}\\.appsync\\-api\\.\\w{2}(?:(?:\\-\\w{2,})+)\\-\\d\\.amazonaws.com\\/graphql$/i;\nvar customDomainPath = '/realtime';\nvar AWSAppSyncRealTimeProvider = /** @class */ (function (_super) {\n __extends(AWSAppSyncRealTimeProvider, _super);\n function AWSAppSyncRealTimeProvider() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.socketStatus = SOCKET_STATUS.CLOSED;\n _this.keepAliveTimeout = DEFAULT_KEEP_ALIVE_TIMEOUT;\n _this.subscriptionObserverMap = new Map();\n _this.promiseArray = [];\n return _this;\n }\n AWSAppSyncRealTimeProvider.prototype.getNewWebSocket = function (url, protocol) {\n return new WebSocket(url, protocol);\n };\n AWSAppSyncRealTimeProvider.prototype.getProviderName = function () {\n return 'AWSAppSyncRealTimeProvider';\n };\n AWSAppSyncRealTimeProvider.prototype.newClient = function () {\n throw new Error('Not used here');\n };\n AWSAppSyncRealTimeProvider.prototype.publish = function (_topics, _msg, _options) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n throw new Error('Operation not supported');\n });\n });\n };\n // Check if url matches standard domain pattern\n AWSAppSyncRealTimeProvider.prototype.isCustomDomain = function (url) {\n return url.match(standardDomainPattern) === null;\n };\n AWSAppSyncRealTimeProvider.prototype.subscribe = function (_topics, options) {\n var _this = this;\n var appSyncGraphqlEndpoint = options === null || options === void 0 ? void 0 : options.appSyncGraphqlEndpoint;\n return new Observable(function (observer) {\n if (!options || !appSyncGraphqlEndpoint) {\n observer.error({\n errors: [\n __assign({}, new GraphQLError(\"Subscribe only available for AWS AppSync endpoint\")),\n ],\n });\n observer.complete();\n }\n else {\n var subscriptionId_1 = uuid();\n _this._startSubscriptionWithAWSAppSyncRealTime({\n options: options,\n observer: observer,\n subscriptionId: subscriptionId_1,\n }).catch(function (err) {\n observer.error({\n errors: [\n __assign({}, new GraphQLError(CONTROL_MSG.REALTIME_SUBSCRIPTION_INIT_ERROR + \": \" + err)),\n ],\n });\n observer.complete();\n });\n return function () { return __awaiter(_this, void 0, void 0, function () {\n var subscriptionState, err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, 3, 4]);\n // Waiting that subscription has been connected before trying to unsubscribe\n return [4 /*yield*/, this._waitForSubscriptionToBeConnected(subscriptionId_1)];\n case 1:\n // Waiting that subscription has been connected before trying to unsubscribe\n _a.sent();\n subscriptionState = (this.subscriptionObserverMap.get(subscriptionId_1) || {}).subscriptionState;\n if (!subscriptionState) {\n // subscription already unsubscribed\n return [2 /*return*/];\n }\n if (subscriptionState === SUBSCRIPTION_STATUS.CONNECTED) {\n this._sendUnsubscriptionMessage(subscriptionId_1);\n }\n else {\n throw new Error('Subscription never connected');\n }\n return [3 /*break*/, 4];\n case 2:\n err_1 = _a.sent();\n logger.debug(\"Error while unsubscribing \" + err_1);\n return [3 /*break*/, 4];\n case 3:\n this._removeSubscriptionObserver(subscriptionId_1);\n return [7 /*endfinally*/];\n case 4: return [2 /*return*/];\n }\n });\n }); };\n }\n });\n };\n Object.defineProperty(AWSAppSyncRealTimeProvider.prototype, \"isSSLEnabled\", {\n get: function () {\n return !this.options\n .aws_appsync_dangerously_connect_to_http_endpoint_for_testing;\n },\n enumerable: true,\n configurable: true\n });\n AWSAppSyncRealTimeProvider.prototype._startSubscriptionWithAWSAppSyncRealTime = function (_a) {\n var options = _a.options, observer = _a.observer, subscriptionId = _a.subscriptionId;\n var _b, _c;\n return __awaiter(this, void 0, void 0, function () {\n var appSyncGraphqlEndpoint, authenticationType, query, variables, apiKey, region, _d, graphql_headers, _e, additionalHeaders, subscriptionState, data, dataString, headerObj, _f, _g, subscriptionMessage, stringToAWSRealTime, err_2, message, subscriptionFailedCallback_1, _h, subscriptionFailedCallback, subscriptionReadyCallback;\n var _j;\n var _this = this;\n return __generator(this, function (_k) {\n switch (_k.label) {\n case 0:\n appSyncGraphqlEndpoint = options.appSyncGraphqlEndpoint, authenticationType = options.authenticationType, query = options.query, variables = options.variables, apiKey = options.apiKey, region = options.region, _d = options.graphql_headers, graphql_headers = _d === void 0 ? function () { return ({}); } : _d, _e = options.additionalHeaders, additionalHeaders = _e === void 0 ? {} : _e;\n subscriptionState = SUBSCRIPTION_STATUS.PENDING;\n data = {\n query: query,\n variables: variables,\n };\n // Having a subscription id map will make it simple to forward messages received\n this.subscriptionObserverMap.set(subscriptionId, {\n observer: observer,\n query: query !== null && query !== void 0 ? query : '',\n variables: variables !== null && variables !== void 0 ? variables : {},\n subscriptionState: subscriptionState,\n startAckTimeoutId: undefined,\n });\n dataString = JSON.stringify(data);\n _f = [{}];\n return [4 /*yield*/, this._awsRealTimeHeaderBasedAuth({\n apiKey: apiKey,\n appSyncGraphqlEndpoint: appSyncGraphqlEndpoint,\n authenticationType: authenticationType,\n payload: dataString,\n canonicalUri: '',\n region: region,\n additionalHeaders: additionalHeaders,\n })];\n case 1:\n _g = [__assign.apply(void 0, _f.concat([(_k.sent())]))];\n return [4 /*yield*/, graphql_headers()];\n case 2:\n headerObj = __assign.apply(void 0, [__assign.apply(void 0, [__assign.apply(void 0, _g.concat([(_k.sent())])), additionalHeaders]), (_j = {}, _j[USER_AGENT_HEADER] = Constants.userAgent, _j)]);\n subscriptionMessage = {\n id: subscriptionId,\n payload: {\n data: dataString,\n extensions: {\n authorization: __assign({}, headerObj),\n },\n },\n type: MESSAGE_TYPES.GQL_START,\n };\n stringToAWSRealTime = JSON.stringify(subscriptionMessage);\n _k.label = 3;\n case 3:\n _k.trys.push([3, 5, , 6]);\n return [4 /*yield*/, this._initializeWebSocketConnection({\n apiKey: apiKey,\n appSyncGraphqlEndpoint: appSyncGraphqlEndpoint,\n authenticationType: authenticationType,\n region: region,\n additionalHeaders: additionalHeaders,\n })];\n case 4:\n _k.sent();\n return [3 /*break*/, 6];\n case 5:\n err_2 = _k.sent();\n logger.debug({ err: err_2 });\n message = (_b = err_2['message']) !== null && _b !== void 0 ? _b : '';\n observer.error({\n errors: [\n __assign({}, new GraphQLError(CONTROL_MSG.CONNECTION_FAILED + \": \" + message)),\n ],\n });\n observer.complete();\n subscriptionFailedCallback_1 = (this.subscriptionObserverMap.get(subscriptionId) || {}).subscriptionFailedCallback;\n // Notify concurrent unsubscription\n if (typeof subscriptionFailedCallback_1 === 'function') {\n subscriptionFailedCallback_1();\n }\n return [2 /*return*/];\n case 6:\n _h = (_c = this.subscriptionObserverMap.get(subscriptionId)) !== null && _c !== void 0 ? _c : {}, subscriptionFailedCallback = _h.subscriptionFailedCallback, subscriptionReadyCallback = _h.subscriptionReadyCallback;\n // This must be done before sending the message in order to be listening immediately\n this.subscriptionObserverMap.set(subscriptionId, {\n observer: observer,\n subscriptionState: subscriptionState,\n query: query !== null && query !== void 0 ? query : '',\n variables: variables !== null && variables !== void 0 ? variables : {},\n subscriptionReadyCallback: subscriptionReadyCallback,\n subscriptionFailedCallback: subscriptionFailedCallback,\n startAckTimeoutId: setTimeout(function () {\n _this._timeoutStartSubscriptionAck.call(_this, subscriptionId);\n }, START_ACK_TIMEOUT),\n });\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.send(stringToAWSRealTime);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n // Waiting that subscription has been connected before trying to unsubscribe\n AWSAppSyncRealTimeProvider.prototype._waitForSubscriptionToBeConnected = function (subscriptionId) {\n return __awaiter(this, void 0, void 0, function () {\n var subscriptionObserver, subscriptionState;\n var _this = this;\n return __generator(this, function (_a) {\n subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n subscriptionState = subscriptionObserver.subscriptionState;\n // This in case unsubscribe is invoked before sending start subscription message\n if (subscriptionState === SUBSCRIPTION_STATUS.PENDING) {\n return [2 /*return*/, new Promise(function (res, rej) {\n var observer = subscriptionObserver.observer, subscriptionState = subscriptionObserver.subscriptionState, variables = subscriptionObserver.variables, query = subscriptionObserver.query;\n _this.subscriptionObserverMap.set(subscriptionId, {\n observer: observer,\n subscriptionState: subscriptionState,\n variables: variables,\n query: query,\n subscriptionReadyCallback: res,\n subscriptionFailedCallback: rej,\n });\n })];\n }\n }\n return [2 /*return*/];\n });\n });\n };\n AWSAppSyncRealTimeProvider.prototype._sendUnsubscriptionMessage = function (subscriptionId) {\n try {\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN &&\n this.socketStatus === SOCKET_STATUS.READY) {\n // Preparing unsubscribe message to stop receiving messages for that subscription\n var unsubscribeMessage = {\n id: subscriptionId,\n type: MESSAGE_TYPES.GQL_STOP,\n };\n var stringToAWSRealTime = JSON.stringify(unsubscribeMessage);\n this.awsRealTimeSocket.send(stringToAWSRealTime);\n }\n }\n catch (err) {\n // If GQL_STOP is not sent because of disconnection issue, then there is nothing the client can do\n logger.debug({ err: err });\n }\n };\n AWSAppSyncRealTimeProvider.prototype._removeSubscriptionObserver = function (subscriptionId) {\n this.subscriptionObserverMap.delete(subscriptionId);\n // Verifying 1000ms after removing subscription in case there are new subscription unmount/mount\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n };\n AWSAppSyncRealTimeProvider.prototype._closeSocketIfRequired = function () {\n if (this.subscriptionObserverMap.size > 0) {\n // Active subscriptions on the WebSocket\n return;\n }\n if (!this.awsRealTimeSocket) {\n this.socketStatus = SOCKET_STATUS.CLOSED;\n return;\n }\n if (this.awsRealTimeSocket.bufferedAmount > 0) {\n // Still data on the WebSocket\n setTimeout(this._closeSocketIfRequired.bind(this), 1000);\n }\n else {\n logger.debug('closing WebSocket...');\n if (this.keepAliveTimeoutId)\n clearTimeout(this.keepAliveTimeoutId);\n var tempSocket = this.awsRealTimeSocket;\n // Cleaning callbacks to avoid race condition, socket still exists\n tempSocket.onclose = null;\n tempSocket.onerror = null;\n tempSocket.close(1000);\n this.awsRealTimeSocket = undefined;\n this.socketStatus = SOCKET_STATUS.CLOSED;\n }\n };\n AWSAppSyncRealTimeProvider.prototype._handleIncomingSubscriptionMessage = function (message) {\n logger.debug(\"subscription message from AWS AppSync RealTime: \" + message.data);\n var _a = JSON.parse(message.data), _b = _a.id, id = _b === void 0 ? '' : _b, payload = _a.payload, type = _a.type;\n var _c = this.subscriptionObserverMap.get(id) || {}, _d = _c.observer, observer = _d === void 0 ? null : _d, _e = _c.query, query = _e === void 0 ? '' : _e, _f = _c.variables, variables = _f === void 0 ? {} : _f, startAckTimeoutId = _c.startAckTimeoutId, subscriptionReadyCallback = _c.subscriptionReadyCallback, subscriptionFailedCallback = _c.subscriptionFailedCallback;\n logger.debug({ id: id, observer: observer, query: query, variables: variables });\n if (type === MESSAGE_TYPES.GQL_DATA && payload && payload.data) {\n if (observer) {\n observer.next(payload);\n }\n else {\n logger.debug(\"observer not found for id: \" + id);\n }\n return;\n }\n if (type === MESSAGE_TYPES.GQL_START_ACK) {\n logger.debug(\"subscription ready for \" + JSON.stringify({ query: query, variables: variables }));\n if (typeof subscriptionReadyCallback === 'function') {\n subscriptionReadyCallback();\n }\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n dispatchApiEvent(CONTROL_MSG.SUBSCRIPTION_ACK, { query: query, variables: variables }, 'Connection established for subscription');\n var subscriptionState = SUBSCRIPTION_STATUS.CONNECTED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer: observer,\n query: query,\n variables: variables,\n startAckTimeoutId: undefined,\n subscriptionState: subscriptionState,\n subscriptionReadyCallback: subscriptionReadyCallback,\n subscriptionFailedCallback: subscriptionFailedCallback,\n });\n }\n // TODO: emit event on hub but it requires to store the id first\n return;\n }\n if (type === MESSAGE_TYPES.GQL_CONNECTION_KEEP_ALIVE) {\n if (this.keepAliveTimeoutId)\n clearTimeout(this.keepAliveTimeoutId);\n this.keepAliveTimeoutId = setTimeout(this._errorDisconnect.bind(this, CONTROL_MSG.TIMEOUT_DISCONNECT), this.keepAliveTimeout);\n return;\n }\n if (type === MESSAGE_TYPES.GQL_ERROR) {\n var subscriptionState = SUBSCRIPTION_STATUS.FAILED;\n if (observer) {\n this.subscriptionObserverMap.set(id, {\n observer: observer,\n query: query,\n variables: variables,\n startAckTimeoutId: startAckTimeoutId,\n subscriptionReadyCallback: subscriptionReadyCallback,\n subscriptionFailedCallback: subscriptionFailedCallback,\n subscriptionState: subscriptionState,\n });\n observer.error({\n errors: [\n __assign({}, new GraphQLError(CONTROL_MSG.CONNECTION_FAILED + \": \" + JSON.stringify(payload))),\n ],\n });\n if (startAckTimeoutId)\n clearTimeout(startAckTimeoutId);\n observer.complete();\n if (typeof subscriptionFailedCallback === 'function') {\n subscriptionFailedCallback();\n }\n }\n }\n };\n AWSAppSyncRealTimeProvider.prototype._errorDisconnect = function (msg) {\n logger.debug(\"Disconnect error: \" + msg);\n this.subscriptionObserverMap.forEach(function (_a) {\n var observer = _a.observer;\n if (observer && !observer.closed) {\n observer.error({\n errors: [__assign({}, new GraphQLError(msg))],\n });\n }\n });\n this.subscriptionObserverMap.clear();\n if (this.awsRealTimeSocket) {\n this.awsRealTimeSocket.close();\n }\n this.socketStatus = SOCKET_STATUS.CLOSED;\n };\n AWSAppSyncRealTimeProvider.prototype._timeoutStartSubscriptionAck = function (subscriptionId) {\n var subscriptionObserver = this.subscriptionObserverMap.get(subscriptionId);\n if (subscriptionObserver) {\n var observer = subscriptionObserver.observer, query = subscriptionObserver.query, variables = subscriptionObserver.variables;\n if (!observer) {\n return;\n }\n this.subscriptionObserverMap.set(subscriptionId, {\n observer: observer,\n query: query,\n variables: variables,\n subscriptionState: SUBSCRIPTION_STATUS.FAILED,\n });\n if (observer && !observer.closed) {\n observer.error({\n errors: [\n __assign({}, new GraphQLError(\"Subscription timeout \" + JSON.stringify({\n query: query,\n variables: variables,\n }))),\n ],\n });\n // Cleanup will be automatically executed\n observer.complete();\n }\n logger.debug('timeoutStartSubscription', JSON.stringify({ query: query, variables: variables }));\n }\n };\n AWSAppSyncRealTimeProvider.prototype._initializeWebSocketConnection = function (_a) {\n var _this = this;\n var appSyncGraphqlEndpoint = _a.appSyncGraphqlEndpoint, authenticationType = _a.authenticationType, apiKey = _a.apiKey, region = _a.region, additionalHeaders = _a.additionalHeaders;\n if (this.socketStatus === SOCKET_STATUS.READY) {\n return;\n }\n return new Promise(function (res, rej) { return __awaiter(_this, void 0, void 0, function () {\n var payloadString, headerString, _a, _b, headerQs, payloadQs, discoverableEndpoint, protocol, awsRealTimeUrl, err_3;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n this.promiseArray.push({ res: res, rej: rej });\n if (!(this.socketStatus === SOCKET_STATUS.CLOSED)) return [3 /*break*/, 5];\n _c.label = 1;\n case 1:\n _c.trys.push([1, 4, , 5]);\n this.socketStatus = SOCKET_STATUS.CONNECTING;\n payloadString = '{}';\n _b = (_a = JSON).stringify;\n return [4 /*yield*/, this._awsRealTimeHeaderBasedAuth({\n authenticationType: authenticationType,\n payload: payloadString,\n canonicalUri: '/connect',\n apiKey: apiKey,\n appSyncGraphqlEndpoint: appSyncGraphqlEndpoint,\n region: region,\n additionalHeaders: additionalHeaders,\n })];\n case 2:\n headerString = _b.apply(_a, [_c.sent()]);\n headerQs = Buffer.from(headerString).toString('base64');\n payloadQs = Buffer.from(payloadString).toString('base64');\n discoverableEndpoint = appSyncGraphqlEndpoint !== null && appSyncGraphqlEndpoint !== void 0 ? appSyncGraphqlEndpoint : '';\n if (this.isCustomDomain(discoverableEndpoint)) {\n discoverableEndpoint =\n discoverableEndpoint.concat(customDomainPath);\n }\n else {\n discoverableEndpoint = discoverableEndpoint\n .replace('appsync-api', 'appsync-realtime-api')\n .replace('gogi-beta', 'grt-beta');\n }\n protocol = this.isSSLEnabled ? 'wss://' : 'ws://';\n discoverableEndpoint = discoverableEndpoint\n .replace('https://', protocol)\n .replace('http://', protocol);\n awsRealTimeUrl = discoverableEndpoint + \"?header=\" + headerQs + \"&payload=\" + payloadQs;\n return [4 /*yield*/, this._initializeRetryableHandshake(awsRealTimeUrl)];\n case 3:\n _c.sent();\n this.promiseArray.forEach(function (_a) {\n var res = _a.res;\n logger.debug('Notifying connection successful');\n res();\n });\n this.socketStatus = SOCKET_STATUS.READY;\n this.promiseArray = [];\n return [3 /*break*/, 5];\n case 4:\n err_3 = _c.sent();\n this.promiseArray.forEach(function (_a) {\n var rej = _a.rej;\n return rej(err_3);\n });\n this.promiseArray = [];\n if (this.awsRealTimeSocket &&\n this.awsRealTimeSocket.readyState === WebSocket.OPEN) {\n this.awsRealTimeSocket.close(3001);\n }\n this.awsRealTimeSocket = undefined;\n this.socketStatus = SOCKET_STATUS.CLOSED;\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/];\n }\n });\n }); });\n };\n AWSAppSyncRealTimeProvider.prototype._initializeRetryableHandshake = function (awsRealTimeUrl) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n logger.debug(\"Initializaling retryable Handshake\");\n return [4 /*yield*/, jitteredExponentialRetry(this._initializeHandshake.bind(this), [awsRealTimeUrl], MAX_DELAY_MS)];\n case 1:\n _a.sent();\n return [2 /*return*/];\n }\n });\n });\n };\n AWSAppSyncRealTimeProvider.prototype._initializeHandshake = function (awsRealTimeUrl) {\n return __awaiter(this, void 0, void 0, function () {\n var err_4, _a, errorType, errorCode;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n logger.debug(\"Initializing handshake \" + awsRealTimeUrl);\n _b.label = 1;\n case 1:\n _b.trys.push([1, 4, , 5]);\n return [4 /*yield*/, (function () {\n return new Promise(function (res, rej) {\n var newSocket = _this.getNewWebSocket(awsRealTimeUrl, 'graphql-ws');\n newSocket.onerror = function () {\n logger.debug(\"WebSocket connection error\");\n };\n newSocket.onclose = function () {\n rej(new Error('Connection handshake error'));\n };\n newSocket.onopen = function () {\n _this.awsRealTimeSocket = newSocket;\n return res();\n };\n });\n })()];\n case 2:\n _b.sent();\n // Step 2: wait for ack from AWS AppSyncReaTime after sending init\n return [4 /*yield*/, (function () {\n return new Promise(function (res, rej) {\n if (_this.awsRealTimeSocket) {\n var ackOk_1 = false;\n _this.awsRealTimeSocket.onerror = function (error) {\n logger.debug(\"WebSocket error \" + JSON.stringify(error));\n };\n _this.awsRealTimeSocket.onclose = function (event) {\n logger.debug(\"WebSocket closed \" + event.reason);\n rej(new Error(JSON.stringify(event)));\n };\n _this.awsRealTimeSocket.onmessage = function (message) {\n logger.debug(\"subscription message from AWS AppSyncRealTime: \" + message.data + \" \");\n var data = JSON.parse(message.data);\n var type = data.type, _a = data.payload, _b = (_a === void 0 ? {} : _a).connectionTimeoutMs, connectionTimeoutMs = _b === void 0 ? DEFAULT_KEEP_ALIVE_TIMEOUT : _b;\n if (type === MESSAGE_TYPES.GQL_CONNECTION_ACK) {\n ackOk_1 = true;\n if (_this.awsRealTimeSocket) {\n _this.keepAliveTimeout = connectionTimeoutMs;\n _this.awsRealTimeSocket.onmessage =\n _this._handleIncomingSubscriptionMessage.bind(_this);\n _this.awsRealTimeSocket.onerror = function (err) {\n logger.debug(err);\n _this._errorDisconnect(CONTROL_MSG.CONNECTION_CLOSED);\n };\n _this.awsRealTimeSocket.onclose = function (event) {\n logger.debug(\"WebSocket closed \" + event.reason);\n _this._errorDisconnect(CONTROL_MSG.CONNECTION_CLOSED);\n };\n }\n res('Cool, connected to AWS AppSyncRealTime');\n return;\n }\n if (type === MESSAGE_TYPES.GQL_CONNECTION_ERROR) {\n var _c = data.payload, _d = (_c === void 0 ? {} : _c).errors, _e = __read(_d === void 0 ? [] : _d, 1), _f = _e[0], _g = _f === void 0 ? {} : _f, _h = _g.errorType, errorType = _h === void 0 ? '' : _h, _j = _g.errorCode, errorCode = _j === void 0 ? 0 : _j;\n rej({ errorType: errorType, errorCode: errorCode });\n }\n };\n var gqlInit = {\n type: MESSAGE_TYPES.GQL_CONNECTION_INIT,\n };\n _this.awsRealTimeSocket.send(JSON.stringify(gqlInit));\n setTimeout(checkAckOk.bind(_this, ackOk_1), CONNECTION_INIT_TIMEOUT);\n }\n function checkAckOk(ackOk) {\n if (!ackOk) {\n rej(new Error(\"Connection timeout: ack from AWSRealTime was not received on \" + CONNECTION_INIT_TIMEOUT + \" ms\"));\n }\n }\n });\n })()];\n case 3:\n // Step 2: wait for ack from AWS AppSyncReaTime after sending init\n _b.sent();\n return [3 /*break*/, 5];\n case 4:\n err_4 = _b.sent();\n _a = err_4, errorType = _a.errorType, errorCode = _a.errorCode;\n if (NON_RETRYABLE_CODES.includes(errorCode)) {\n throw new NonRetryableError(errorType);\n }\n else if (errorType) {\n throw new Error(errorType);\n }\n else {\n throw err_4;\n }\n return [3 /*break*/, 5];\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n AWSAppSyncRealTimeProvider.prototype._awsRealTimeHeaderBasedAuth = function (_a) {\n var authenticationType = _a.authenticationType, payload = _a.payload, canonicalUri = _a.canonicalUri, appSyncGraphqlEndpoint = _a.appSyncGraphqlEndpoint, apiKey = _a.apiKey, region = _a.region, additionalHeaders = _a.additionalHeaders;\n return __awaiter(this, void 0, void 0, function () {\n var headerHandler, handler, host, result;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n headerHandler = {\n API_KEY: this._awsRealTimeApiKeyHeader.bind(this),\n AWS_IAM: this._awsRealTimeIAMHeader.bind(this),\n OPENID_CONNECT: this._awsRealTimeOPENIDHeader.bind(this),\n AMAZON_COGNITO_USER_POOLS: this._awsRealTimeCUPHeader.bind(this),\n AWS_LAMBDA: this._customAuthHeader,\n };\n if (!(!authenticationType || !headerHandler[authenticationType])) return [3 /*break*/, 1];\n logger.debug(\"Authentication type \" + authenticationType + \" not supported\");\n return [2 /*return*/, ''];\n case 1:\n handler = headerHandler[authenticationType];\n host = url.parse(appSyncGraphqlEndpoint !== null && appSyncGraphqlEndpoint !== void 0 ? appSyncGraphqlEndpoint : '').host;\n logger.debug(\"Authenticating with \" + authenticationType);\n return [4 /*yield*/, handler({\n payload: payload,\n canonicalUri: canonicalUri,\n appSyncGraphqlEndpoint: appSyncGraphqlEndpoint,\n apiKey: apiKey,\n region: region,\n host: host,\n additionalHeaders: additionalHeaders,\n })];\n case 2:\n result = _b.sent();\n return [2 /*return*/, result];\n }\n });\n });\n };\n AWSAppSyncRealTimeProvider.prototype._awsRealTimeCUPHeader = function (_a) {\n var host = _a.host;\n return __awaiter(this, void 0, void 0, function () {\n var session;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, Auth.currentSession()];\n case 1:\n session = _b.sent();\n return [2 /*return*/, {\n Authorization: session.getAccessToken().getJwtToken(),\n host: host,\n }];\n }\n });\n });\n };\n AWSAppSyncRealTimeProvider.prototype._awsRealTimeOPENIDHeader = function (_a) {\n var host = _a.host;\n return __awaiter(this, void 0, void 0, function () {\n var token, federatedInfo, currentUser;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, Cache.getItem('federatedInfo')];\n case 1:\n federatedInfo = _b.sent();\n if (!federatedInfo) return [3 /*break*/, 2];\n token = federatedInfo.token;\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, Auth.currentAuthenticatedUser()];\n case 3:\n currentUser = _b.sent();\n if (currentUser) {\n token = currentUser.token;\n }\n _b.label = 4;\n case 4:\n if (!token) {\n throw new Error('No federated jwt');\n }\n return [2 /*return*/, {\n Authorization: token,\n host: host,\n }];\n }\n });\n });\n };\n AWSAppSyncRealTimeProvider.prototype._awsRealTimeApiKeyHeader = function (_a) {\n var apiKey = _a.apiKey, host = _a.host;\n return __awaiter(this, void 0, void 0, function () {\n var dt, dtStr;\n return __generator(this, function (_b) {\n dt = new Date();\n dtStr = dt.toISOString().replace(/[:\\-]|\\.\\d{3}/g, '');\n return [2 /*return*/, {\n host: host,\n 'x-amz-date': dtStr,\n 'x-api-key': apiKey,\n }];\n });\n });\n };\n AWSAppSyncRealTimeProvider.prototype._awsRealTimeIAMHeader = function (_a) {\n var payload = _a.payload, canonicalUri = _a.canonicalUri, appSyncGraphqlEndpoint = _a.appSyncGraphqlEndpoint, region = _a.region;\n return __awaiter(this, void 0, void 0, function () {\n var endpointInfo, credentialsOK, creds, request, signed_params;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n endpointInfo = {\n region: region,\n service: 'appsync',\n };\n return [4 /*yield*/, this._ensureCredentials()];\n case 1:\n credentialsOK = _b.sent();\n if (!credentialsOK) {\n throw new Error('No credentials');\n }\n return [4 /*yield*/, Credentials.get().then(function (credentials) {\n var _a = credentials, secretAccessKey = _a.secretAccessKey, accessKeyId = _a.accessKeyId, sessionToken = _a.sessionToken;\n return {\n secret_key: secretAccessKey,\n access_key: accessKeyId,\n session_token: sessionToken,\n };\n })];\n case 2:\n creds = _b.sent();\n request = {\n url: \"\" + appSyncGraphqlEndpoint + canonicalUri,\n data: payload,\n method: 'POST',\n headers: __assign({}, AWS_APPSYNC_REALTIME_HEADERS),\n };\n signed_params = Signer.sign(request, creds, endpointInfo);\n return [2 /*return*/, signed_params.headers];\n }\n });\n });\n };\n AWSAppSyncRealTimeProvider.prototype._customAuthHeader = function (_a) {\n var host = _a.host, additionalHeaders = _a.additionalHeaders;\n if (!additionalHeaders || !additionalHeaders['Authorization']) {\n throw new Error('No auth token specified');\n }\n return {\n Authorization: additionalHeaders.Authorization,\n host: host,\n };\n };\n /**\n * @private\n */\n AWSAppSyncRealTimeProvider.prototype._ensureCredentials = function () {\n return Credentials.get()\n .then(function (credentials) {\n if (!credentials)\n return false;\n var cred = Credentials.shear(credentials);\n logger.debug('set credentials for AWSAppSyncRealTimeProvider', cred);\n return true;\n })\n .catch(function (err) {\n logger.warn('ensure credentials error', err);\n return false;\n });\n };\n return AWSAppSyncRealTimeProvider;\n}(AbstractPubSubProvider));\nexport { AWSAppSyncRealTimeProvider };\n//# sourceMappingURL=index.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) 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 switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\n/*\n * Copyright 2017-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 */\n// import '../Common/Polyfills';\nimport Observable from 'zen-observable-ts';\nimport { Amplify, browserOrNode, ConsoleLogger as Logger, INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER, INTERNAL_AWS_APPSYNC_REALTIME_PUBSUB_PROVIDER, } from '@aws-amplify/core';\nimport { AWSAppSyncProvider, AWSAppSyncRealTimeProvider } from './Providers';\nvar isNode = browserOrNode().isNode;\nvar logger = new Logger('PubSub');\nvar PubSubClass = /** @class */ (function () {\n /**\n * Initialize PubSub with AWS configurations\n *\n * @param {PubSubOptions} options - Configuration object for PubSub\n */\n function PubSubClass(options) {\n this._options = options !== null && options !== void 0 ? options : {};\n logger.debug('PubSub Options', this._options);\n this._pluggables = [];\n this.subscribe = this.subscribe.bind(this);\n }\n Object.defineProperty(PubSubClass.prototype, \"awsAppSyncProvider\", {\n /**\n * Lazy instantiate AWSAppSyncProvider when it is required by the API category\n */\n get: function () {\n if (!this._awsAppSyncProvider) {\n this._awsAppSyncProvider = new AWSAppSyncProvider(this._options);\n }\n return this._awsAppSyncProvider;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(PubSubClass.prototype, \"awsAppSyncRealTimeProvider\", {\n /**\n * Lazy instantiate AWSAppSyncRealTimeProvider when it is required by the API category\n */\n get: function () {\n if (!this._awsAppSyncRealTimeProvider) {\n this._awsAppSyncRealTimeProvider = new AWSAppSyncRealTimeProvider(this._options);\n }\n return this._awsAppSyncRealTimeProvider;\n },\n enumerable: true,\n configurable: true\n });\n PubSubClass.prototype.getModuleName = function () {\n return 'PubSub';\n };\n /**\n * Configure PubSub part with configurations\n *\n * @param {PubSubOptions} config - Configuration for PubSub\n * @return {Object} - The current configuration\n */\n PubSubClass.prototype.configure = function (options) {\n var _this = this;\n var opt = options ? options.PubSub || options : {};\n logger.debug('configure PubSub', { opt: opt });\n this._options = Object.assign({}, this._options, opt);\n this._pluggables.map(function (pluggable) { return pluggable.configure(_this._options); });\n return this._options;\n };\n /**\n * add plugin into Analytics category\n * @param {Object} pluggable - an instance of the plugin\n */\n PubSubClass.prototype.addPluggable = function (pluggable) {\n return __awaiter(this, void 0, void 0, function () {\n var config;\n return __generator(this, function (_a) {\n if (pluggable && pluggable.getCategory() === 'PubSub') {\n this._pluggables.push(pluggable);\n config = pluggable.configure(this._options);\n return [2 /*return*/, config];\n }\n return [2 /*return*/];\n });\n });\n };\n /**\n * remove plugin from PubSub category\n * @param providerName - the name of the plugin\n */\n PubSubClass.prototype.removePluggable = function (providerName) {\n this._pluggables = this._pluggables.filter(function (pluggable) { return pluggable.getProviderName() !== providerName; });\n };\n PubSubClass.prototype.getProviderByName = function (providerName) {\n if (providerName === INTERNAL_AWS_APPSYNC_PUBSUB_PROVIDER) {\n return this.awsAppSyncProvider;\n }\n if (providerName === INTERNAL_AWS_APPSYNC_REALTIME_PUBSUB_PROVIDER) {\n return this.awsAppSyncRealTimeProvider;\n }\n return this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === providerName; });\n };\n PubSubClass.prototype.getProviders = function (options) {\n if (options === void 0) { options = {}; }\n var providerName = options.provider;\n if (!providerName) {\n return this._pluggables;\n }\n var provider = this.getProviderByName(providerName);\n if (!provider) {\n throw new Error(\"Could not find provider named \" + providerName);\n }\n return [provider];\n };\n PubSubClass.prototype.publish = function (topics, msg, options) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, Promise.all(this.getProviders(options).map(function (provider) {\n return provider.publish(topics, msg, options);\n }))];\n });\n });\n };\n PubSubClass.prototype.subscribe = function (topics, options) {\n if (isNode && this._options && this._options.ssr) {\n throw new Error('Subscriptions are not supported for Server-Side Rendering (SSR)');\n }\n logger.debug('subscribe options', options);\n var providers = this.getProviders(options);\n return new Observable(function (observer) {\n var observables = providers.map(function (provider) { return ({\n provider: provider,\n observable: provider.subscribe(topics, options),\n }); });\n var subscriptions = observables.map(function (_a) {\n var provider = _a.provider, observable = _a.observable;\n return observable.subscribe({\n start: console.error,\n next: function (value) { return observer.next({ provider: provider, value: value }); },\n error: function (error) { return observer.error({ provider: provider, error: error }); },\n });\n });\n return function () {\n return subscriptions.forEach(function (subscription) { return subscription.unsubscribe(); });\n };\n });\n };\n return PubSubClass;\n}());\nexport { PubSubClass };\nexport var PubSub = new PubSubClass();\nAmplify.register(PubSub);\n//# sourceMappingURL=PubSub.js.map","export var StorageErrorStrings;\n(function (StorageErrorStrings) {\n StorageErrorStrings[\"NO_CREDENTIALS\"] = \"No credentials\";\n StorageErrorStrings[\"NO_SRC_KEY\"] = \"source param should be an object with the property \\\"key\\\" with value of type string\";\n StorageErrorStrings[\"NO_DEST_KEY\"] = \"destination param should be an object with the property \\\"key\\\" with value of type string\";\n StorageErrorStrings[\"INVALID_BLOB\"] = \"Object must be an instance of Blob\";\n})(StorageErrorStrings || (StorageErrorStrings = {}));\nexport var AWSS3ProviderMultipartCopierErrors;\n(function (AWSS3ProviderMultipartCopierErrors) {\n AWSS3ProviderMultipartCopierErrors[\"CLEANUP_FAILED\"] = \"Multipart copy clean up failed\";\n AWSS3ProviderMultipartCopierErrors[\"NO_OBJECT_FOUND\"] = \"Object does not exist\";\n AWSS3ProviderMultipartCopierErrors[\"INVALID_QUEUESIZE\"] = \"Queue size must be a positive number\";\n AWSS3ProviderMultipartCopierErrors[\"NO_COPYSOURCE\"] = \"You must specify a copy source\";\n AWSS3ProviderMultipartCopierErrors[\"MAX_NUM_PARTS_EXCEEDED\"] = \"Only a maximum of 10000 parts are allowed\";\n})(AWSS3ProviderMultipartCopierErrors || (AWSS3ProviderMultipartCopierErrors = {}));\nexport var AWSS3ProviderUploadErrorStrings;\n(function (AWSS3ProviderUploadErrorStrings) {\n AWSS3ProviderUploadErrorStrings[\"UPLOAD_PAUSED_MESSAGE\"] = \"paused\";\n})(AWSS3ProviderUploadErrorStrings || (AWSS3ProviderUploadErrorStrings = {}));\n//# sourceMappingURL=StorageErrorStrings.js.map","/*\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 __values = (this && this.__values) || function(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { HttpResponse } from '@aws-sdk/protocol-http';\nimport { buildQueryString } from '@aws-sdk/querystring-builder';\nimport axios from 'axios';\nimport { ConsoleLogger as Logger, Platform } from '@aws-amplify/core';\nimport { AWSS3ProviderUploadErrorStrings } from '../common/StorageErrorStrings';\nvar logger = new Logger('axios-http-handler');\nexport var SEND_UPLOAD_PROGRESS_EVENT = 'sendUploadProgress';\nexport var SEND_DOWNLOAD_PROGRESS_EVENT = 'sendDownloadProgress';\nfunction isBlob(body) {\n return typeof Blob !== 'undefined' && body instanceof Blob;\n}\nfunction hasErrorResponse(error) {\n return (typeof error !== 'undefined' &&\n Object.prototype.hasOwnProperty.call(error, 'response') &&\n typeof error.response !== 'undefined' &&\n Object.prototype.hasOwnProperty.call(error.response, 'status') &&\n typeof error.response.status === 'number');\n}\nvar normalizeHeaders = function (headers, normalizedName) {\n var e_1, _a;\n try {\n for (var _b = __values(Object.entries(headers)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var _d = __read(_c.value, 2), k = _d[0], v = _d[1];\n if (k !== normalizedName &&\n k.toUpperCase() === normalizedName.toUpperCase()) {\n headers[normalizedName] = v;\n delete headers[k];\n }\n }\n }\n catch (e_1_1) { e_1 = { error: e_1_1 }; }\n finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n }\n finally { if (e_1) throw e_1.error; }\n }\n};\nexport var reactNativeRequestTransformer = [\n function (data, headers) {\n if (isBlob(data)) {\n normalizeHeaders(headers, 'Content-Type');\n normalizeHeaders(headers, 'Accept');\n return data;\n }\n // Axios' default transformRequest is an array\n return axios.defaults.transformRequest[0].call(null, data, headers);\n },\n];\nvar AxiosHttpHandler = /** @class */ (function () {\n function AxiosHttpHandler(httpOptions, emitter, cancelTokenSource) {\n if (httpOptions === void 0) { httpOptions = {}; }\n this.httpOptions = httpOptions;\n this.emitter = emitter;\n this.cancelTokenSource = cancelTokenSource;\n }\n AxiosHttpHandler.prototype.destroy = function () {\n // Do nothing. TLS and HTTP/2 connection pooling is handled by the\n // browser.\n };\n AxiosHttpHandler.prototype.handle = function (request, options) {\n var requestTimeoutInMs = this.httpOptions.requestTimeout;\n // prioritize the call specific event emitter, this is useful for multipart upload as each individual parts has\n // their own event emitter, without having to create s3client for every individual calls.\n var emitter = options.emitter || this.emitter;\n var path = request.path;\n if (request.query) {\n var queryString = buildQueryString(request.query);\n if (queryString) {\n path += \"?\" + queryString;\n }\n }\n var port = request.port;\n var url = request.protocol + \"//\" + request.hostname + (port ? \":\" + port : '') + path;\n var axiosRequest = {};\n axiosRequest.url = url;\n axiosRequest.method = request.method;\n axiosRequest.headers = request.headers;\n // The host header is automatically added by the browser and adding it explicitly in the\n // axios request throws an error https://github.com/aws-amplify/amplify-js/issues/5376\n // This is because the host header is a forbidden header for the http client to set\n // see https://developer.mozilla.org/en-US/docs/Glossary/Forbidden_header_name and\n // https://fetch.spec.whatwg.org/#forbidden-header-name\n // The reason we are removing this header here instead of in the aws-sdk's client\n // middleware is that the host header is required to be in the request signature and if\n // we remove it from the middlewares, then the request fails because the header is added\n // by the browser but is absent from the signature.\n delete axiosRequest.headers['host'];\n if (request.body) {\n axiosRequest.data = request.body;\n }\n else {\n // Fix for https://github.com/aws-amplify/amplify-js/issues/5432\n // If the POST request body is empty but content-type header is set, axios is forcibly removing it\n // See https://github.com/axios/axios/issues/1535 and refusing to fix it https://github.com/axios/axios/issues/755\n // This change is a workaround to set the data as null (instead of undefined) to prevent axios from\n // removing the content-type header. Link for the source code\n // https://github.com/axios/axios/blob/dc4bc49673943e35280e5df831f5c3d0347a9393/lib/adapters/xhr.js#L121-L123\n if (axiosRequest.headers[Object.keys(axiosRequest.headers).find(function (key) { return key.toLowerCase() === 'content-type'; })]) {\n axiosRequest.data = null;\n }\n }\n if (emitter) {\n axiosRequest.onUploadProgress = function (event) {\n emitter.emit(SEND_UPLOAD_PROGRESS_EVENT, event);\n logger.debug(event);\n };\n axiosRequest.onDownloadProgress = function (event) {\n emitter.emit(SEND_DOWNLOAD_PROGRESS_EVENT, event);\n logger.debug(event);\n };\n }\n // If a cancel token source is passed down from the provider, allows cancellation of in-flight requests\n if (this.cancelTokenSource) {\n axiosRequest.cancelToken = this.cancelTokenSource.token;\n }\n if (options.cancelTokenSource) {\n axiosRequest.cancelToken = options.cancelTokenSource.token;\n }\n // From gamma release, aws-sdk now expects all response type to be of blob or streams\n axiosRequest.responseType = 'blob';\n // In Axios, Blobs are identified by calling Object.prototype.toString on the object. However, on React Native,\n // calling Object.prototype.toString on a Blob returns '[object Object]' instead of '[object Blob]', which causes\n // Axios to treat Blobs as generic Javascript objects. Therefore we need a to use a custom request transformer\n // to correctly handle Blob in React Native.\n if (Platform.isReactNative) {\n axiosRequest.transformRequest = reactNativeRequestTransformer;\n }\n var raceOfPromises = [\n axios\n .request(axiosRequest)\n .then(function (response) {\n return {\n response: new HttpResponse({\n headers: response.headers,\n statusCode: response.status,\n body: response.data,\n }),\n };\n })\n .catch(function (error) {\n var _a, _b;\n // Error\n if (error.message !==\n AWSS3ProviderUploadErrorStrings.UPLOAD_PAUSED_MESSAGE) {\n logger.error(error.message);\n }\n // for axios' cancel error, we should re-throw it back so it's not considered an s3client error\n // if we return empty, or an abitrary error HttpResponse, it will be hard to debug down the line.\n //\n // for errors that does not have a 'response' object, it's very likely that it is an unexpected error for\n // example a disconnect. Without it we cannot meaningfully reconstruct a HttpResponse, and the AWS SDK might\n // consider the request successful by mistake. In this case we should also re-throw the error.\n if (axios.isCancel(error) || !hasErrorResponse(error)) {\n throw error;\n }\n // otherwise, we should re-construct an HttpResponse from the error, so that it can be passed down to other\n // aws sdk middleware (e.g retry, clock skew correction, error message serializing)\n return {\n response: new HttpResponse({\n statusCode: error.response.status,\n body: (_a = error.response) === null || _a === void 0 ? void 0 : _a.data,\n headers: (_b = error.response) === null || _b === void 0 ? void 0 : _b.headers,\n }),\n };\n }),\n requestTimeout(requestTimeoutInMs),\n ];\n return Promise.race(raceOfPromises);\n };\n return AxiosHttpHandler;\n}());\nexport { AxiosHttpHandler };\nfunction requestTimeout(timeoutInMs) {\n if (timeoutInMs === void 0) { timeoutInMs = 0; }\n return new Promise(function (resolve, reject) {\n if (timeoutInMs) {\n setTimeout(function () {\n var timeoutError = new Error(\"Request did not complete within \" + timeoutInMs + \" ms\");\n timeoutError.name = 'TimeoutError';\n reject(timeoutError);\n }, timeoutInMs);\n }\n });\n}\n//# sourceMappingURL=axios-http-handler.js.map","export var AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n typeof Symbol.for === 'function'\n ? Symbol.for('amplify_default')\n : '@@amplify_default');\nexport var SET_CONTENT_LENGTH_HEADER = 'contentLengthMiddleware';\nexport var localTestingStorageEndpoint = 'http://localhost:20005';\nexport var UPLOADS_STORAGE_KEY = '__uploadInProgress';\n//# sourceMappingURL=StorageConstants.js.map","var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) 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 switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spread = (this && this.__spread) || function () {\n for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));\n return ar;\n};\nimport { UploadPartCommand, CompleteMultipartUploadCommand, AbortMultipartUploadCommand, ListPartsCommand, CreateMultipartUploadCommand, ListObjectsV2Command, } from '@aws-sdk/client-s3';\nimport axios from 'axios';\nimport { Logger } from '@aws-amplify/core';\nimport { byteLength, isFile } from '../common/StorageUtils';\nimport { AWSS3ProviderUploadErrorStrings } from '../common/StorageErrorStrings';\nimport { SET_CONTENT_LENGTH_HEADER, UPLOADS_STORAGE_KEY, } from '../common/StorageConstants';\nvar logger = new Logger('AWSS3UploadTask');\nexport var AWSS3UploadTaskState;\n(function (AWSS3UploadTaskState) {\n AWSS3UploadTaskState[AWSS3UploadTaskState[\"INIT\"] = 0] = \"INIT\";\n AWSS3UploadTaskState[AWSS3UploadTaskState[\"IN_PROGRESS\"] = 1] = \"IN_PROGRESS\";\n AWSS3UploadTaskState[AWSS3UploadTaskState[\"PAUSED\"] = 2] = \"PAUSED\";\n AWSS3UploadTaskState[AWSS3UploadTaskState[\"CANCELLED\"] = 3] = \"CANCELLED\";\n AWSS3UploadTaskState[AWSS3UploadTaskState[\"COMPLETED\"] = 4] = \"COMPLETED\";\n})(AWSS3UploadTaskState || (AWSS3UploadTaskState = {}));\nexport var TaskEvents;\n(function (TaskEvents) {\n TaskEvents[\"CANCEL\"] = \"cancel\";\n TaskEvents[\"UPLOAD_COMPLETE\"] = \"uploadComplete\";\n TaskEvents[\"UPLOAD_PROGRESS\"] = \"uploadPartProgress\";\n TaskEvents[\"ERROR\"] = \"error\";\n})(TaskEvents || (TaskEvents = {}));\n// maximum number of parts per upload request according the S3 spec,\n// see: https://docs.aws.amazon.com/AmazonS3/latest/userguide/qfacts.html\nvar MAX_PARTS = 10000;\n// 5MB in bytes\nvar PART_SIZE = 5 * 1024 * 1024;\nvar DEFAULT_QUEUE_SIZE = 4;\nfunction comparePartNumber(a, b) {\n return a.PartNumber - b.PartNumber;\n}\nvar AWSS3UploadTask = /** @class */ (function () {\n function AWSS3UploadTask(_a) {\n var s3Client = _a.s3Client, file = _a.file, emitter = _a.emitter, storage = _a.storage, params = _a.params, level = _a.level, prefixPromise = _a.prefixPromise;\n this.partSize = PART_SIZE;\n this.queueSize = DEFAULT_QUEUE_SIZE;\n this.inProgress = [];\n this.completedParts = [];\n this.queued = [];\n this.bytesUploaded = 0;\n this.totalBytes = 0;\n this.state = AWSS3UploadTaskState.INIT;\n this.prefixPromise = prefixPromise;\n this.s3client = s3Client;\n this.s3client.middlewareStack.remove(SET_CONTENT_LENGTH_HEADER);\n this.storage = storage;\n this.storageSync = Promise.resolve();\n if (typeof this.storage['sync'] === 'function') {\n this.storageSync = this.storage['sync']();\n }\n this.params = params;\n this.file = file;\n this.totalBytes = this.file.size;\n this.bytesUploaded = 0;\n this.emitter = emitter;\n this.queued = [];\n this.fileId = this._getFileId(level);\n this._validateParams();\n // event emitter will re-throw an error if an event emits an error unless there's a listener, attaching a no-op\n // function to it unless user adds their own onError callback\n this.emitter.on(TaskEvents.ERROR, function () { });\n }\n Object.defineProperty(AWSS3UploadTask.prototype, \"percent\", {\n get: function () {\n return (this.bytesUploaded / this.totalBytes) * 100;\n },\n enumerable: true,\n configurable: true\n });\n Object.defineProperty(AWSS3UploadTask.prototype, \"isInProgress\", {\n get: function () {\n return this.state === AWSS3UploadTaskState.IN_PROGRESS;\n },\n enumerable: true,\n configurable: true\n });\n AWSS3UploadTask.prototype._listSingleFile = function (_a) {\n var key = _a.key, bucket = _a.bucket;\n return __awaiter(this, void 0, void 0, function () {\n var listObjectRes, _b, Contents, prefix, obj;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4 /*yield*/, this.s3client.send(new ListObjectsV2Command({\n Bucket: bucket,\n Prefix: key,\n }))];\n case 1:\n listObjectRes = _c.sent();\n _b = listObjectRes.Contents, Contents = _b === void 0 ? [] : _b;\n return [4 /*yield*/, this.prefixPromise];\n case 2:\n prefix = _c.sent();\n obj = Contents.find(function (o) { return o.Key === \"\" + prefix + key; });\n return [2 /*return*/, obj];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._getFileId = function (level) {\n // We should check if it's a File first because File is also instance of a Blob\n if (isFile(this.file)) {\n return [\n this.file.name,\n this.file.lastModified,\n this.file.size,\n this.file.type,\n this.params.Bucket,\n level,\n this.params.Key,\n ].join('-');\n }\n else {\n return [\n this.file.size,\n this.file.type,\n this.params.Bucket,\n level,\n this.params.Key,\n ].join('-');\n }\n };\n AWSS3UploadTask.prototype._findCachedUploadParts = function () {\n return __awaiter(this, void 0, void 0, function () {\n var uploadRequests, cachedUploadFileData, listPartsOutput;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._listCachedUploadTasks()];\n case 1:\n uploadRequests = _a.sent();\n if (Object.keys(uploadRequests).length === 0 ||\n !Object.prototype.hasOwnProperty.call(uploadRequests, this.fileId)) {\n return [2 /*return*/, { parts: [], uploadId: null }];\n }\n cachedUploadFileData = uploadRequests[this.fileId];\n cachedUploadFileData.lastTouched = Date.now();\n this.storage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(uploadRequests));\n return [4 /*yield*/, this.s3client.send(new ListPartsCommand({\n Bucket: this.params.Bucket,\n Key: this.params.Key,\n UploadId: cachedUploadFileData.uploadId,\n }))];\n case 2:\n listPartsOutput = _a.sent();\n return [2 /*return*/, {\n parts: listPartsOutput.Parts || [],\n uploadId: cachedUploadFileData.uploadId,\n }];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._emitEvent = function (event, payload) {\n this.emitter.emit(event, payload);\n };\n AWSS3UploadTask.prototype._validateParams = function () {\n if (this.file.size / this.partSize > MAX_PARTS) {\n throw new Error(\"Too many parts. Number of parts is \" + this.file.size /\n this.partSize + \", maximum is \" + MAX_PARTS + \".\");\n }\n };\n AWSS3UploadTask.prototype._listCachedUploadTasks = function () {\n return __awaiter(this, void 0, void 0, function () {\n var tasks;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.storageSync];\n case 1:\n _a.sent();\n tasks = this.storage.getItem(UPLOADS_STORAGE_KEY) || '{}';\n return [2 /*return*/, JSON.parse(tasks)];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._cache = function (fileMetadata) {\n return __awaiter(this, void 0, void 0, function () {\n var uploadRequests;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._listCachedUploadTasks()];\n case 1:\n uploadRequests = _a.sent();\n uploadRequests[this.fileId] = fileMetadata;\n this.storage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(uploadRequests));\n return [2 /*return*/];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._isCached = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, _b;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0:\n _b = (_a = Object.prototype.hasOwnProperty).call;\n return [4 /*yield*/, this._listCachedUploadTasks()];\n case 1: return [2 /*return*/, _b.apply(_a, [_c.sent(),\n this.fileId])];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._removeFromCache = function () {\n return __awaiter(this, void 0, void 0, function () {\n var uploadRequests;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._listCachedUploadTasks()];\n case 1:\n uploadRequests = _a.sent();\n delete uploadRequests[this.fileId];\n this.storage.setItem(UPLOADS_STORAGE_KEY, JSON.stringify(uploadRequests));\n return [2 /*return*/];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._onPartUploadCompletion = function (_a) {\n var eTag = _a.eTag, partNumber = _a.partNumber, chunk = _a.chunk;\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_b) {\n this.completedParts.push({\n ETag: eTag,\n PartNumber: partNumber,\n });\n this.bytesUploaded += byteLength(chunk);\n this._emitEvent(TaskEvents.UPLOAD_PROGRESS, {\n loaded: this.bytesUploaded,\n total: this.totalBytes,\n });\n // Remove the completed item from the inProgress array\n this.inProgress = this.inProgress.filter(function (job) { return job.uploadPartInput.PartNumber !== partNumber; });\n if (this.queued.length && this.state !== AWSS3UploadTaskState.PAUSED)\n this._startNextPart();\n if (this._isDone())\n this._completeUpload();\n return [2 /*return*/];\n });\n });\n };\n AWSS3UploadTask.prototype._completeUpload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var err_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, this.s3client.send(new CompleteMultipartUploadCommand({\n Bucket: this.params.Bucket,\n Key: this.params.Key,\n UploadId: this.uploadId,\n MultipartUpload: {\n // Parts are not always completed in order, we need to manually sort them\n Parts: this.completedParts.sort(comparePartNumber),\n },\n }))];\n case 1:\n _a.sent();\n this._verifyFileSize();\n this._emitEvent(TaskEvents.UPLOAD_COMPLETE, {\n key: this.params.Bucket + \"/\" + this.params.Key,\n });\n this._removeFromCache();\n this.state = AWSS3UploadTaskState.COMPLETED;\n return [3 /*break*/, 3];\n case 2:\n err_1 = _a.sent();\n logger.error('error completing upload', err_1);\n this._emitEvent(TaskEvents.ERROR, err_1);\n return [3 /*break*/, 3];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._makeUploadPartRequest = function (input, cancelTokenSource) {\n return __awaiter(this, void 0, void 0, function () {\n var res, err_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 3, , 4]);\n return [4 /*yield*/, this.s3client.send(new UploadPartCommand(input), {\n cancelTokenSource: cancelTokenSource,\n })];\n case 1:\n res = _a.sent();\n return [4 /*yield*/, this._onPartUploadCompletion({\n eTag: res.ETag,\n partNumber: input.PartNumber,\n chunk: input.Body,\n })];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n err_2 = _a.sent();\n if (this.state === AWSS3UploadTaskState.PAUSED) {\n logger.log('upload paused');\n }\n else if (this.state === AWSS3UploadTaskState.CANCELLED) {\n logger.log('upload aborted');\n }\n else {\n logger.error('error starting next part of upload: ', err_2);\n }\n // axios' cancel will also throw an error, however we don't need to emit an event in that case as it's an\n // expected behavior\n if (!axios.isCancel(err_2) &&\n err_2.message !== AWSS3ProviderUploadErrorStrings.UPLOAD_PAUSED_MESSAGE) {\n this._emitEvent(TaskEvents.ERROR, err_2);\n this.pause();\n }\n return [3 /*break*/, 4];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._startNextPart = function () {\n if (this.queued.length > 0 && this.state !== AWSS3UploadTaskState.PAUSED) {\n var cancelTokenSource = axios.CancelToken.source();\n var nextPart = this.queued.shift();\n this.inProgress.push({\n uploadPartInput: nextPart,\n s3Request: this._makeUploadPartRequest(nextPart, cancelTokenSource),\n cancel: cancelTokenSource.cancel,\n });\n }\n };\n /**\n * Verify on S3 side that the file size matches the one on the client side.\n *\n * @async\n * @throws throws an error if the file size does not match between local copy of the file and the file on s3.\n */\n AWSS3UploadTask.prototype._verifyFileSize = function () {\n return __awaiter(this, void 0, void 0, function () {\n var obj, valid;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._listSingleFile({\n key: this.params.Key,\n bucket: this.params.Bucket,\n })];\n case 1:\n obj = _a.sent();\n valid = Boolean(obj && obj.Size === this.file.size);\n if (!valid) {\n throw new Error('File size does not match between local file and file on s3');\n }\n return [2 /*return*/, valid];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._isDone = function () {\n return (!this.queued.length &&\n !this.inProgress.length &&\n this.bytesUploaded === this.totalBytes);\n };\n AWSS3UploadTask.prototype._createParts = function () {\n var size = this.file.size;\n var parts = [];\n for (var bodyStart = 0; bodyStart < size;) {\n var bodyEnd = Math.min(bodyStart + this.partSize, size);\n parts.push({\n Body: this.file.slice(bodyStart, bodyEnd),\n Key: this.params.Key,\n Bucket: this.params.Bucket,\n PartNumber: parts.length + 1,\n UploadId: this.uploadId,\n });\n bodyStart += this.partSize;\n }\n return parts;\n };\n AWSS3UploadTask.prototype._initCachedUploadParts = function (cachedParts) {\n this.bytesUploaded += cachedParts.reduce(function (acc, part) { return acc + part.Size; }, 0);\n // Find the set of part numbers that have already been uploaded\n var uploadedPartNumSet = new Set(cachedParts.map(function (part) { return part.PartNumber; }));\n this.queued = this.queued.filter(function (part) { return !uploadedPartNumSet.has(part.PartNumber); });\n this.completedParts = cachedParts.map(function (part) { return ({\n PartNumber: part.PartNumber,\n ETag: part.ETag,\n }); });\n this._emitEvent(TaskEvents.UPLOAD_PROGRESS, {\n loaded: this.bytesUploaded,\n total: this.totalBytes,\n });\n };\n AWSS3UploadTask.prototype._initMultipartUpload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var res;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this.s3client.send(new CreateMultipartUploadCommand(this.params))];\n case 1:\n res = _a.sent();\n this._cache({\n uploadId: res.UploadId,\n lastTouched: Date.now(),\n bucket: this.params.Bucket,\n key: this.params.Key,\n fileName: this.file instanceof File ? this.file.name : '',\n });\n return [2 /*return*/, res.UploadId];\n }\n });\n });\n };\n AWSS3UploadTask.prototype._initializeUploadTask = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, parts, uploadId, uploadId, err_3;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.state = AWSS3UploadTaskState.IN_PROGRESS;\n _b.label = 1;\n case 1:\n _b.trys.push([1, 7, , 8]);\n return [4 /*yield*/, this._isCached()];\n case 2:\n if (!_b.sent()) return [3 /*break*/, 4];\n return [4 /*yield*/, this._findCachedUploadParts()];\n case 3:\n _a = _b.sent(), parts = _a.parts, uploadId = _a.uploadId;\n this.uploadId = uploadId;\n this.queued = this._createParts();\n this._initCachedUploadParts(parts);\n this._startUpload();\n return [3 /*break*/, 6];\n case 4:\n if (!!this.uploadId) return [3 /*break*/, 6];\n return [4 /*yield*/, this._initMultipartUpload()];\n case 5:\n uploadId = _b.sent();\n this.uploadId = uploadId;\n this.queued = this._createParts();\n this._startUpload();\n _b.label = 6;\n case 6: return [3 /*break*/, 8];\n case 7:\n err_3 = _b.sent();\n if (!axios.isCancel(err_3)) {\n logger.error('Error initializing the upload task', err_3);\n }\n return [3 /*break*/, 8];\n case 8: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3UploadTask.prototype.resume = function () {\n if (this.state === AWSS3UploadTaskState.CANCELLED) {\n logger.warn('This task has already been cancelled');\n }\n else if (this.state === AWSS3UploadTaskState.COMPLETED) {\n logger.warn('This task has already been completed');\n }\n else if (this.state === AWSS3UploadTaskState.IN_PROGRESS) {\n logger.warn('Upload task already in progress');\n // first time running resume, find any cached parts on s3 or start a new multipart upload request before\n // starting the upload\n }\n else if (!this.uploadId) {\n this._initializeUploadTask();\n }\n else {\n this._startUpload();\n }\n };\n AWSS3UploadTask.prototype._startUpload = function () {\n this.state = AWSS3UploadTaskState.IN_PROGRESS;\n for (var i = 0; i < this.queueSize; i++) {\n this._startNextPart();\n }\n };\n AWSS3UploadTask.prototype._cancel = function () {\n return __awaiter(this, void 0, void 0, function () {\n var err_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(this.state === AWSS3UploadTaskState.CANCELLED)) return [3 /*break*/, 1];\n logger.warn('This task has already been cancelled');\n return [2 /*return*/, false];\n case 1:\n if (!(this.state === AWSS3UploadTaskState.COMPLETED)) return [3 /*break*/, 2];\n logger.warn('This task has already been completed');\n return [2 /*return*/, false];\n case 2:\n this.pause();\n this.queued = [];\n this.completedParts = [];\n this.bytesUploaded = 0;\n this.state = AWSS3UploadTaskState.CANCELLED;\n _a.label = 3;\n case 3:\n _a.trys.push([3, 6, , 7]);\n return [4 /*yield*/, this.s3client.send(new AbortMultipartUploadCommand({\n Bucket: this.params.Bucket,\n Key: this.params.Key,\n UploadId: this.uploadId,\n }))];\n case 4:\n _a.sent();\n return [4 /*yield*/, this._removeFromCache()];\n case 5:\n _a.sent();\n return [2 /*return*/, true];\n case 6:\n err_4 = _a.sent();\n logger.error('Error cancelling upload task', err_4);\n return [2 /*return*/, false];\n case 7: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * pause this particular upload task\n **/\n AWSS3UploadTask.prototype.pause = function () {\n var _a;\n if (this.state === AWSS3UploadTaskState.CANCELLED) {\n logger.warn('This task has already been cancelled');\n }\n else if (this.state === AWSS3UploadTaskState.COMPLETED) {\n logger.warn('This task has already been completed');\n }\n else if (this.state === AWSS3UploadTaskState.PAUSED) {\n logger.warn('This task is already paused');\n }\n this.state = AWSS3UploadTaskState.PAUSED;\n // Use axios cancel token to abort the part request immediately\n // Add the inProgress parts back to pending\n var removedInProgressReq = this.inProgress.splice(0, this.inProgress.length);\n removedInProgressReq.forEach(function (req) {\n req.cancel(AWSS3ProviderUploadErrorStrings.UPLOAD_PAUSED_MESSAGE);\n });\n // Put all removed in progress parts back into the queue\n (_a = this.queued).unshift.apply(_a, __spread(removedInProgressReq.map(function (req) { return req.uploadPartInput; })));\n };\n return AWSS3UploadTask;\n}());\nexport { AWSS3UploadTask };\n//# sourceMappingURL=AWSS3UploadTask.js.map","import { Hub } from '@aws-amplify/core';\nimport { AMPLIFY_SYMBOL } from './StorageConstants';\nexport var byteLength = function (x) {\n if (typeof x === 'string') {\n return x.length;\n }\n else if (isArrayBuffer(x)) {\n return x.byteLength;\n }\n else if (isBlob(x)) {\n return x.size;\n }\n else {\n throw new Error('Cannot determine byte length of ' + x);\n }\n};\nexport var dispatchStorageEvent = function (track, event, attrs, metrics, message) {\n if (track) {\n var data = { attrs: attrs };\n if (metrics) {\n data['metrics'] = metrics;\n }\n Hub.dispatch('storage', {\n event: event,\n data: data,\n message: message,\n }, 'Storage', AMPLIFY_SYMBOL);\n }\n};\nexport var isFile = function (x) {\n return typeof x !== 'undefined' && x instanceof File;\n};\nexport var isBlob = function (x) {\n return typeof x !== 'undefined' && x instanceof Blob;\n};\nvar isArrayBuffer = function (x) {\n return typeof x !== 'undefined' && x instanceof ArrayBuffer;\n};\n//# sourceMappingURL=StorageUtils.js.map","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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) 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 switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { Credentials, Logger, getAmplifyUserAgent, } from '@aws-amplify/core';\nimport { S3Client } from '@aws-sdk/client-s3';\nimport { AxiosHttpHandler } from '../providers/axios-http-handler';\nimport { localTestingStorageEndpoint, SET_CONTENT_LENGTH_HEADER, } from './StorageConstants';\nvar logger = new Logger('S3ClientUtils');\n// placeholder credentials in order to satisfy type requirement, always results in 403 when used\nvar INVALID_CRED = { accessKeyId: '', secretAccessKey: '' };\nexport var getPrefix = function (config) {\n var credentials = config.credentials, level = config.level, customPrefix = config.customPrefix, identityId = config.identityId;\n var resolvedCustomPrefix = customPrefix || {};\n var resolvedIdentityId = identityId || credentials.identityId;\n var privatePath = (resolvedCustomPrefix.private !== undefined\n ? resolvedCustomPrefix.private\n : 'private/') +\n resolvedIdentityId +\n '/';\n var protectedPath = (resolvedCustomPrefix.protected !== undefined\n ? resolvedCustomPrefix.protected\n : 'protected/') +\n resolvedIdentityId +\n '/';\n var publicPath = resolvedCustomPrefix.public !== undefined\n ? resolvedCustomPrefix.public\n : 'public/';\n switch (level) {\n case 'private':\n return privatePath;\n case 'protected':\n return protectedPath;\n default:\n return publicPath;\n }\n};\nexport var createPrefixMiddleware = function (opt, key) { return function (next, _context) { return function (args) { return __awaiter(void 0, void 0, void 0, function () {\n var credentials, cred, prefix, clonedInput, result;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Credentials.get()];\n case 1:\n credentials = _a.sent();\n cred = Credentials.shear(credentials);\n prefix = getPrefix(__assign(__assign({}, opt), { credentials: cred }));\n clonedInput = Object.assign({}, args.input);\n if (Object.prototype.hasOwnProperty.call(args.input, 'Key')) {\n clonedInput.Key = prefix + key;\n args.input = clonedInput;\n }\n else if (Object.prototype.hasOwnProperty.call(args.input, 'Prefix')) {\n clonedInput.Prefix = prefix + key;\n args.input = clonedInput;\n }\n result = next(args);\n return [2 /*return*/, result];\n }\n });\n}); }; }; };\nvar isTimeSkewedError = function (err) {\n return err.ServerTime &&\n typeof err.Code === 'string' &&\n err.Code === 'RequestTimeTooSkewed';\n};\n// we want to take the S3Client config in parameter so we can modify it's systemClockOffset\nexport var autoAdjustClockskewMiddleware = function (config) { return function (next, _context) { return function (args) { return __awaiter(void 0, void 0, void 0, function () {\n var err_1, serverDate;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, next(args)];\n case 1: return [2 /*return*/, _a.sent()];\n case 2:\n err_1 = _a.sent();\n if (isTimeSkewedError(err_1)) {\n serverDate = new Date(err_1.ServerTime);\n config.systemClockOffset = serverDate.getTime() - Date.now();\n }\n throw err_1;\n case 3: return [2 /*return*/];\n }\n });\n}); }; }; };\nexport var autoAdjustClockskewMiddlewareOptions = {\n step: 'finalizeRequest',\n name: 'autoAdjustClockskewMiddleware',\n};\nexport var prefixMiddlewareOptions = {\n step: 'initialize',\n name: 'addPrefixMiddleware',\n};\nexport var credentialsProvider = function () { return __awaiter(void 0, void 0, void 0, function () {\n var credentials, cred, error_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, Credentials.get()];\n case 1:\n credentials = _a.sent();\n if (!credentials)\n return [2 /*return*/, INVALID_CRED];\n cred = Credentials.shear(credentials);\n logger.debug('credentials provider get credentials', cred);\n return [2 /*return*/, cred];\n case 2:\n error_1 = _a.sent();\n logger.warn('credentials provider error', error_1);\n return [2 /*return*/, INVALID_CRED];\n case 3: return [2 /*return*/];\n }\n });\n}); };\nexport var createS3Client = function (config, emitter) {\n var region = config.region, cancelTokenSource = config.cancelTokenSource, dangerouslyConnectToHttpEndpointForTesting = config.dangerouslyConnectToHttpEndpointForTesting, useAccelerateEndpoint = config.useAccelerateEndpoint;\n var localTestingConfig = {};\n if (dangerouslyConnectToHttpEndpointForTesting) {\n localTestingConfig = {\n endpoint: localTestingStorageEndpoint,\n tls: false,\n bucketEndpoint: false,\n forcePathStyle: true,\n };\n }\n var s3client = new S3Client(__assign(__assign({ region: region, \n // Using provider instead of a static credentials, so that if an upload task was in progress, but credentials gets\n // changed or invalidated (e.g user signed out), the subsequent requests will fail.\n credentials: credentialsProvider, customUserAgent: getAmplifyUserAgent() }, localTestingConfig), { requestHandler: new AxiosHttpHandler({}, emitter, cancelTokenSource), useAccelerateEndpoint: useAccelerateEndpoint }));\n s3client.middlewareStack.remove(SET_CONTENT_LENGTH_HEADER);\n return s3client;\n};\n//# sourceMappingURL=S3ClientUtils.js.map","/*\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 __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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) 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 switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nimport { ConsoleLogger as Logger } from '@aws-amplify/core';\nimport { PutObjectCommand, CreateMultipartUploadCommand, UploadPartCommand, CompleteMultipartUploadCommand, ListPartsCommand, AbortMultipartUploadCommand, } from '@aws-sdk/client-s3';\nimport { SEND_UPLOAD_PROGRESS_EVENT, SEND_DOWNLOAD_PROGRESS_EVENT, } from './axios-http-handler';\nimport * as events from 'events';\nimport { createPrefixMiddleware, prefixMiddlewareOptions, autoAdjustClockskewMiddleware, autoAdjustClockskewMiddlewareOptions, createS3Client, } from '../common/S3ClientUtils';\nvar logger = new Logger('AWSS3ProviderManagedUpload');\nvar AWSS3ProviderManagedUpload = /** @class */ (function () {\n function AWSS3ProviderManagedUpload(params, opts, emitter) {\n // Defaults\n this.minPartSize = 5 * 1024 * 1024; // in MB\n this.queueSize = 4;\n // Data for current upload\n this.body = null;\n this.params = null;\n this.opts = null;\n this.completedParts = [];\n this.cancel = false;\n // Progress reporting\n this.bytesUploaded = 0;\n this.totalBytesToUpload = 0;\n this.emitter = null;\n this.params = params;\n this.opts = opts;\n this.emitter = emitter;\n this.s3client = this._createNewS3Client(opts, emitter);\n }\n AWSS3ProviderManagedUpload.prototype.upload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var _a, putObjectCommand, uploadId, numberOfPartsToUpload, parts, start;\n var _this = this;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n _a = this;\n return [4 /*yield*/, this.validateAndSanitizeBody(this.params.Body)];\n case 1:\n _a.body = _b.sent();\n this.totalBytesToUpload = this.byteLength(this.body);\n if (!(this.totalBytesToUpload <= this.minPartSize)) return [3 /*break*/, 2];\n // Multipart upload is not required. Upload the sanitized body as is\n this.params.Body = this.body;\n putObjectCommand = new PutObjectCommand(this.params);\n return [2 /*return*/, this.s3client.send(putObjectCommand)];\n case 2: return [4 /*yield*/, this.createMultiPartUpload()];\n case 3:\n uploadId = _b.sent();\n numberOfPartsToUpload = Math.ceil(this.totalBytesToUpload / this.minPartSize);\n parts = this.createParts();\n start = 0;\n _b.label = 4;\n case 4:\n if (!(start < numberOfPartsToUpload)) return [3 /*break*/, 9];\n /** This first block will try to cancel the upload if the cancel\n *\trequest came before any parts uploads have started.\n **/\n return [4 /*yield*/, this.checkIfUploadCancelled(uploadId)];\n case 5:\n /** This first block will try to cancel the upload if the cancel\n *\trequest came before any parts uploads have started.\n **/\n _b.sent();\n // Upload as many as `queueSize` parts simultaneously\n return [4 /*yield*/, this.uploadParts(uploadId, parts.slice(start, start + this.queueSize))];\n case 6:\n // Upload as many as `queueSize` parts simultaneously\n _b.sent();\n /** Call cleanup a second time in case there were part upload requests\n * in flight. This is to ensure that all parts are cleaned up.\n */\n return [4 /*yield*/, this.checkIfUploadCancelled(uploadId)];\n case 7:\n /** Call cleanup a second time in case there were part upload requests\n * in flight. This is to ensure that all parts are cleaned up.\n */\n _b.sent();\n _b.label = 8;\n case 8:\n start += this.queueSize;\n return [3 /*break*/, 4];\n case 9:\n parts.map(function (part) {\n _this.removeEventListener(part);\n });\n return [4 /*yield*/, this.finishMultiPartUpload(uploadId)];\n case 10: \n // Step 3: Finalize the upload such that S3 can recreate the file\n return [2 /*return*/, _b.sent()];\n }\n });\n });\n };\n AWSS3ProviderManagedUpload.prototype.createParts = function () {\n var parts = [];\n for (var bodyStart = 0; bodyStart < this.totalBytesToUpload;) {\n var bodyEnd = Math.min(bodyStart + this.minPartSize, this.totalBytesToUpload);\n parts.push({\n bodyPart: this.body.slice(bodyStart, bodyEnd),\n partNumber: parts.length + 1,\n emitter: new events.EventEmitter(),\n _lastUploadedBytes: 0,\n });\n bodyStart += this.minPartSize;\n }\n return parts;\n };\n AWSS3ProviderManagedUpload.prototype.createMultiPartUpload = function () {\n return __awaiter(this, void 0, void 0, function () {\n var createMultiPartUploadCommand, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n createMultiPartUploadCommand = new CreateMultipartUploadCommand(this.params);\n return [4 /*yield*/, this.s3client.send(createMultiPartUploadCommand)];\n case 1:\n response = _a.sent();\n logger.debug(response.UploadId);\n return [2 /*return*/, response.UploadId];\n }\n });\n });\n };\n /**\n * @private Not to be extended outside of tests\n * @VisibleFotTesting\n */\n AWSS3ProviderManagedUpload.prototype.uploadParts = function (uploadId, parts) {\n return __awaiter(this, void 0, void 0, function () {\n var allResults, i, error_1;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, Promise.all(parts.map(function (part) { return __awaiter(_this, void 0, void 0, function () {\n var options, _a, Key, Bucket, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, res;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n this.setupEventListener(part);\n options = { emitter: part.emitter };\n _a = this.params, Key = _a.Key, Bucket = _a.Bucket, SSECustomerAlgorithm = _a.SSECustomerAlgorithm, SSECustomerKey = _a.SSECustomerKey, SSECustomerKeyMD5 = _a.SSECustomerKeyMD5;\n return [4 /*yield*/, this.s3client.send(new UploadPartCommand(__assign(__assign(__assign({ PartNumber: part.partNumber, Body: part.bodyPart, UploadId: uploadId, Key: Key,\n Bucket: Bucket }, (SSECustomerAlgorithm && { SSECustomerAlgorithm: SSECustomerAlgorithm })), (SSECustomerKey && { SSECustomerKey: SSECustomerKey })), (SSECustomerKeyMD5 && { SSECustomerKeyMD5: SSECustomerKeyMD5 }))), options)];\n case 1:\n res = _b.sent();\n return [2 /*return*/, res];\n }\n });\n }); }))];\n case 1:\n allResults = _a.sent();\n // The order of resolved promises is the same as input promise order.\n for (i = 0; i < allResults.length; i++) {\n this.completedParts.push({\n PartNumber: parts[i].partNumber,\n ETag: allResults[i].ETag,\n });\n }\n return [3 /*break*/, 3];\n case 2:\n error_1 = _a.sent();\n logger.error('error happened while uploading a part. Cancelling the multipart upload', error_1);\n this.cancelUpload();\n return [2 /*return*/];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3ProviderManagedUpload.prototype.finishMultiPartUpload = function (uploadId) {\n return __awaiter(this, void 0, void 0, function () {\n var input, completeUploadCommand, data, error_2;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n input = {\n Bucket: this.params.Bucket,\n Key: this.params.Key,\n UploadId: uploadId,\n MultipartUpload: { Parts: this.completedParts },\n };\n completeUploadCommand = new CompleteMultipartUploadCommand(input);\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this.s3client.send(completeUploadCommand)];\n case 2:\n data = _a.sent();\n return [2 /*return*/, data.Key];\n case 3:\n error_2 = _a.sent();\n logger.error('error happened while finishing the upload. Cancelling the multipart upload', error_2);\n this.cancelUpload();\n return [2 /*return*/];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3ProviderManagedUpload.prototype.checkIfUploadCancelled = function (uploadId) {\n return __awaiter(this, void 0, void 0, function () {\n var errorMessage, error_3;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!this.cancel) return [3 /*break*/, 5];\n errorMessage = 'Upload was cancelled.';\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, this.cleanup(uploadId)];\n case 2:\n _a.sent();\n return [3 /*break*/, 4];\n case 3:\n error_3 = _a.sent();\n errorMessage += \" \" + error_3.message;\n return [3 /*break*/, 4];\n case 4: throw new Error(errorMessage);\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3ProviderManagedUpload.prototype.cancelUpload = function () {\n this.cancel = true;\n };\n AWSS3ProviderManagedUpload.prototype.cleanup = function (uploadId) {\n return __awaiter(this, void 0, void 0, function () {\n var input, data;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n // Reset this's state\n this.body = null;\n this.completedParts = [];\n this.bytesUploaded = 0;\n this.totalBytesToUpload = 0;\n input = {\n Bucket: this.params.Bucket,\n Key: this.params.Key,\n UploadId: uploadId,\n };\n return [4 /*yield*/, this.s3client.send(new AbortMultipartUploadCommand(input))];\n case 1:\n _a.sent();\n return [4 /*yield*/, this.s3client.send(new ListPartsCommand(input))];\n case 2:\n data = _a.sent();\n if (data && data.Parts && data.Parts.length > 0) {\n throw new Error('Multi Part upload clean up failed');\n }\n return [2 /*return*/];\n }\n });\n });\n };\n AWSS3ProviderManagedUpload.prototype.removeEventListener = function (part) {\n part.emitter.removeAllListeners(SEND_UPLOAD_PROGRESS_EVENT);\n part.emitter.removeAllListeners(SEND_DOWNLOAD_PROGRESS_EVENT);\n };\n AWSS3ProviderManagedUpload.prototype.setupEventListener = function (part) {\n var _this = this;\n part.emitter.on(SEND_UPLOAD_PROGRESS_EVENT, function (progress) {\n _this.progressChanged(part.partNumber, progress.loaded - part._lastUploadedBytes);\n part._lastUploadedBytes = progress.loaded;\n });\n };\n AWSS3ProviderManagedUpload.prototype.progressChanged = function (partNumber, incrementalUpdate) {\n this.bytesUploaded += incrementalUpdate;\n this.emitter.emit(SEND_UPLOAD_PROGRESS_EVENT, {\n loaded: this.bytesUploaded,\n total: this.totalBytesToUpload,\n part: partNumber,\n key: this.params.Key,\n });\n };\n AWSS3ProviderManagedUpload.prototype.byteLength = function (input) {\n if (input === null || input === undefined)\n return 0;\n if (typeof input.byteLength === 'number') {\n return input.byteLength;\n }\n else if (typeof input.length === 'number') {\n return input.length;\n }\n else if (typeof input.size === 'number') {\n return input.size;\n }\n else if (typeof input.path === 'string') {\n /* NodeJs Support\n return require('fs').lstatSync(input.path).size;\n */\n }\n else {\n throw new Error('Cannot determine length of ' + input);\n }\n };\n AWSS3ProviderManagedUpload.prototype.validateAndSanitizeBody = function (body) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n if (this.isGenericObject(body)) {\n // Any javascript object\n return [2 /*return*/, JSON.stringify(body)];\n }\n else {\n // Files, arrayBuffer etc\n return [2 /*return*/, body];\n }\n return [2 /*return*/];\n });\n });\n };\n AWSS3ProviderManagedUpload.prototype.isGenericObject = function (body) {\n if (body !== null && typeof body === 'object') {\n try {\n return !(this.byteLength(body) >= 0);\n }\n catch (error) {\n // If we cannot determine the length of the body, consider it\n // as a generic object and upload a stringified version of it\n return true;\n }\n }\n return false;\n };\n AWSS3ProviderManagedUpload.prototype._createNewS3Client = function (config, emitter) {\n var s3client = createS3Client(config, emitter);\n s3client.middlewareStack.add(createPrefixMiddleware(this.opts, this.params.Key), prefixMiddlewareOptions);\n s3client.middlewareStack.add(autoAdjustClockskewMiddleware(s3client.config), autoAdjustClockskewMiddlewareOptions);\n return s3client;\n };\n return AWSS3ProviderManagedUpload;\n}());\nexport { AWSS3ProviderManagedUpload };\n//# sourceMappingURL=AWSS3ProviderManagedUpload.js.map","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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) 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 switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\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 */\nimport { ConsoleLogger as Logger, Credentials, Parser, StorageHelper, Hub, } from '@aws-amplify/core';\nimport { GetObjectCommand, DeleteObjectCommand, ListObjectsCommand, CopyObjectCommand, } from '@aws-sdk/client-s3';\nimport { formatUrl } from '@aws-sdk/util-format-url';\nimport { createRequest } from '@aws-sdk/util-create-request';\nimport { S3RequestPresigner } from '@aws-sdk/s3-request-presigner';\nimport { SEND_DOWNLOAD_PROGRESS_EVENT, SEND_UPLOAD_PROGRESS_EVENT, } from './axios-http-handler';\nimport { StorageErrorStrings } from '../common/StorageErrorStrings';\nimport { dispatchStorageEvent } from '../common/StorageUtils';\nimport { createPrefixMiddleware, prefixMiddlewareOptions, getPrefix, autoAdjustClockskewMiddleware, autoAdjustClockskewMiddlewareOptions, createS3Client, } from '../common/S3ClientUtils';\nimport { AWSS3ProviderManagedUpload } from './AWSS3ProviderManagedUpload';\nimport { AWSS3UploadTask, TaskEvents } from './AWSS3UploadTask';\nimport { UPLOADS_STORAGE_KEY } from '../common/StorageConstants';\nimport * as events from 'events';\nvar logger = new Logger('AWSS3Provider');\nvar DEFAULT_STORAGE_LEVEL = 'public';\nvar DEFAULT_PRESIGN_EXPIRATION = 900;\n/**\n * Provide storage methods to use AWS S3\n */\nvar AWSS3Provider = /** @class */ (function () {\n /**\n * Initialize Storage with AWS configurations\n * @param {Object} config - Configuration object for storage\n */\n function AWSS3Provider(config) {\n var _this = this;\n this._config = config ? config : {};\n this._storage = new StorageHelper().getStorage();\n Hub.listen('auth', function (data) {\n var payload = data.payload;\n if (payload.event === 'signOut' || payload.event === 'signIn') {\n _this._storage.removeItem(UPLOADS_STORAGE_KEY);\n }\n });\n logger.debug('Storage Options', this._config);\n }\n /**\n * get the category of the plugin\n */\n AWSS3Provider.prototype.getCategory = function () {\n return AWSS3Provider.CATEGORY;\n };\n /**\n * get provider name of the plugin\n */\n AWSS3Provider.prototype.getProviderName = function () {\n return AWSS3Provider.PROVIDER_NAME;\n };\n /**\n * Configure Storage part with aws configuration\n * @param {Object} config - Configuration of the Storage\n * @return {Object} - Current configuration\n */\n AWSS3Provider.prototype.configure = function (config) {\n logger.debug('configure Storage', config);\n if (!config)\n return this._config;\n var amplifyConfig = Parser.parseMobilehubConfig(config);\n this._config = Object.assign({}, this._config, amplifyConfig.Storage);\n if (!this._config.bucket) {\n logger.debug('Do not have bucket yet');\n }\n return this._config;\n };\n AWSS3Provider.prototype.startResumableUpload = function (addTaskInput, config) {\n var s3Client = addTaskInput.s3Client, emitter = addTaskInput.emitter, key = addTaskInput.key, file = addTaskInput.file, params = addTaskInput.params;\n var progressCallback = config.progressCallback, completeCallback = config.completeCallback, errorCallback = config.errorCallback, _a = config.track, track = _a === void 0 ? false : _a;\n if (!(file instanceof Blob)) {\n throw new Error(StorageErrorStrings.INVALID_BLOB);\n }\n emitter.on(TaskEvents.UPLOAD_PROGRESS, function (event) {\n if (progressCallback) {\n if (typeof progressCallback === 'function') {\n progressCallback(event);\n }\n else {\n logger.warn('progressCallback should be a function, not a ' +\n typeof progressCallback);\n }\n }\n });\n emitter.on(TaskEvents.UPLOAD_COMPLETE, function (event) {\n if (completeCallback) {\n if (typeof completeCallback === 'function') {\n completeCallback(event);\n }\n else {\n logger.warn('completeCallback should be a function, not a ' +\n typeof completeCallback);\n }\n }\n });\n emitter.on(TaskEvents.ERROR, function (err) {\n if (errorCallback) {\n if (typeof errorCallback === 'function') {\n errorCallback(err);\n }\n else {\n logger.warn('errorCallback should be a function, not a ' + typeof errorCallback);\n }\n }\n });\n // we want to keep this function sync so we defer this promise to AWSS3UploadTask to resolve when it's needed\n // when its doing a final check with _listSingleFile function\n var prefixPromise = Credentials.get().then(function (credentials) {\n var cred = Credentials.shear(credentials);\n return getPrefix(__assign(__assign({}, config), { credentials: cred }));\n });\n var task = new AWSS3UploadTask({\n s3Client: s3Client,\n file: file,\n emitter: emitter,\n level: config.level,\n storage: this._storage,\n params: params,\n prefixPromise: prefixPromise,\n });\n dispatchStorageEvent(track, 'upload', { method: 'put', result: 'success' }, null, \"Upload Task created successfully for \" + key);\n // automatically start the upload task\n task.resume();\n return task;\n };\n /**\n * Copy an object from a source object to a new object within the same bucket. Can optionally copy files across\n * different level or identityId (if source object's level is 'protected').\n *\n * @async\n * @param {S3CopySource} src - Key and optionally access level and identityId of the source object.\n * @param {S3CopyDestination} dest - Key and optionally access level of the destination object.\n * @param {S3ProviderCopyConfig} [config] - Optional configuration for s3 commands.\n * @return {Promise} The key of the copied object.\n */\n AWSS3Provider.prototype.copy = function (src, dest, config) {\n return __awaiter(this, void 0, void 0, function () {\n var credentialsOK, opt, acl, bucket, cacheControl, expires, track, serverSideEncryption, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, SSEKMSKeyId, _a, srcLevel, srcIdentityId, srcKey, _b, destLevel, destKey, srcPrefix, destPrefix, finalSrcKey, finalDestKey, params, s3, error_1;\n return __generator(this, function (_c) {\n switch (_c.label) {\n case 0: return [4 /*yield*/, this._ensureCredentials()];\n case 1:\n credentialsOK = _c.sent();\n if (!credentialsOK || !this._isWithCredentials(this._config)) {\n throw new Error(StorageErrorStrings.NO_CREDENTIALS);\n }\n opt = Object.assign({}, this._config, config);\n acl = opt.acl, bucket = opt.bucket, cacheControl = opt.cacheControl, expires = opt.expires, track = opt.track, serverSideEncryption = opt.serverSideEncryption, SSECustomerAlgorithm = opt.SSECustomerAlgorithm, SSECustomerKey = opt.SSECustomerKey, SSECustomerKeyMD5 = opt.SSECustomerKeyMD5, SSEKMSKeyId = opt.SSEKMSKeyId;\n _a = src.level, srcLevel = _a === void 0 ? DEFAULT_STORAGE_LEVEL : _a, srcIdentityId = src.identityId, srcKey = src.key;\n _b = dest.level, destLevel = _b === void 0 ? DEFAULT_STORAGE_LEVEL : _b, destKey = dest.key;\n if (!srcKey || typeof srcKey !== 'string') {\n throw new Error(StorageErrorStrings.NO_SRC_KEY);\n }\n if (!destKey || typeof destKey !== 'string') {\n throw new Error(StorageErrorStrings.NO_DEST_KEY);\n }\n if (srcLevel !== 'protected' && srcIdentityId) {\n logger.warn(\"You may copy files from another user if the source level is \\\"protected\\\", currently it's \" + srcLevel);\n }\n srcPrefix = this._prefix(__assign(__assign(__assign({}, opt), { level: srcLevel }), (srcIdentityId && { identityId: srcIdentityId })));\n destPrefix = this._prefix(__assign(__assign({}, opt), { level: destLevel }));\n finalSrcKey = bucket + \"/\" + srcPrefix + srcKey;\n finalDestKey = \"\" + destPrefix + destKey;\n logger.debug(\"copying \" + finalSrcKey + \" to \" + finalDestKey);\n params = {\n Bucket: bucket,\n CopySource: finalSrcKey,\n Key: finalDestKey,\n // Copies over metadata like contentType as well\n MetadataDirective: 'COPY',\n };\n if (cacheControl)\n params.CacheControl = cacheControl;\n if (expires)\n params.Expires = expires;\n if (serverSideEncryption) {\n params.ServerSideEncryption = serverSideEncryption;\n }\n if (SSECustomerAlgorithm) {\n params.SSECustomerAlgorithm = SSECustomerAlgorithm;\n }\n if (SSECustomerKey) {\n params.SSECustomerKey = SSECustomerKey;\n }\n if (SSECustomerKeyMD5) {\n params.SSECustomerKeyMD5 = SSECustomerKeyMD5;\n }\n if (SSEKMSKeyId) {\n params.SSEKMSKeyId = SSEKMSKeyId;\n }\n if (acl)\n params.ACL = acl;\n s3 = this._createNewS3Client(opt);\n _c.label = 2;\n case 2:\n _c.trys.push([2, 4, , 5]);\n return [4 /*yield*/, s3.send(new CopyObjectCommand(params))];\n case 3:\n _c.sent();\n dispatchStorageEvent(track, 'copy', {\n method: 'copy',\n result: 'success',\n }, null, \"Copy success from \" + srcKey + \" to \" + destKey);\n return [2 /*return*/, {\n key: destKey,\n }];\n case 4:\n error_1 = _c.sent();\n dispatchStorageEvent(track, 'copy', {\n method: 'copy',\n result: 'failed',\n }, null, \"Copy failed from \" + srcKey + \" to \" + destKey);\n throw error_1;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3Provider.prototype.get = function (key, config) {\n return __awaiter(this, void 0, void 0, function () {\n var credentialsOK, opt, bucket, download, cacheControl, contentDisposition, contentEncoding, contentLanguage, contentType, expires, track, SSECustomerAlgorithm, SSECustomerKey, SSECustomerKeyMD5, progressCallback, prefix, final_key, emitter, s3, params, getObjectCommand, response, error_2, signer, request, url, _a, error_3;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this._ensureCredentials()];\n case 1:\n credentialsOK = _b.sent();\n if (!credentialsOK || !this._isWithCredentials(this._config)) {\n throw new Error(StorageErrorStrings.NO_CREDENTIALS);\n }\n opt = Object.assign({}, this._config, config);\n bucket = opt.bucket, download = opt.download, cacheControl = opt.cacheControl, contentDisposition = opt.contentDisposition, contentEncoding = opt.contentEncoding, contentLanguage = opt.contentLanguage, contentType = opt.contentType, expires = opt.expires, track = opt.track, SSECustomerAlgorithm = opt.SSECustomerAlgorithm, SSECustomerKey = opt.SSECustomerKey, SSECustomerKeyMD5 = opt.SSECustomerKeyMD5, progressCallback = opt.progressCallback;\n prefix = this._prefix(opt);\n final_key = prefix + key;\n emitter = new events.EventEmitter();\n s3 = this._createNewS3Client(opt, emitter);\n logger.debug('get ' + key + ' from ' + final_key);\n params = {\n Bucket: bucket,\n Key: final_key,\n };\n // See: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getObject-property\n if (cacheControl)\n params.ResponseCacheControl = cacheControl;\n if (contentDisposition)\n params.ResponseContentDisposition = contentDisposition;\n if (contentEncoding)\n params.ResponseContentEncoding = contentEncoding;\n if (contentLanguage)\n params.ResponseContentLanguage = contentLanguage;\n if (contentType)\n params.ResponseContentType = contentType;\n if (SSECustomerAlgorithm) {\n params.SSECustomerAlgorithm = SSECustomerAlgorithm;\n }\n if (SSECustomerKey) {\n params.SSECustomerKey = SSECustomerKey;\n }\n if (SSECustomerKeyMD5) {\n params.SSECustomerKeyMD5 = SSECustomerKeyMD5;\n }\n if (!(download === true)) return [3 /*break*/, 5];\n getObjectCommand = new GetObjectCommand(params);\n _b.label = 2;\n case 2:\n _b.trys.push([2, 4, , 5]);\n if (progressCallback) {\n if (typeof progressCallback === 'function') {\n emitter.on(SEND_DOWNLOAD_PROGRESS_EVENT, function (progress) {\n progressCallback(progress);\n });\n }\n else {\n logger.warn('progressCallback should be a function, not a ' +\n typeof progressCallback);\n }\n }\n return [4 /*yield*/, s3.send(getObjectCommand)];\n case 3:\n response = _b.sent();\n emitter.removeAllListeners(SEND_DOWNLOAD_PROGRESS_EVENT);\n dispatchStorageEvent(track, 'download', { method: 'get', result: 'success' }, {\n fileSize: Number(response.Body['size'] || response.Body['length']),\n }, \"Download success for \" + key);\n return [2 /*return*/, response];\n case 4:\n error_2 = _b.sent();\n dispatchStorageEvent(track, 'download', {\n method: 'get',\n result: 'failed',\n }, null, \"Download failed with \" + error_2.message);\n throw error_2;\n case 5:\n _b.trys.push([5, 8, , 9]);\n signer = new S3RequestPresigner(__assign({}, s3.config));\n return [4 /*yield*/, createRequest(s3, new GetObjectCommand(params))];\n case 6:\n request = _b.sent();\n _a = formatUrl;\n return [4 /*yield*/, signer.presign(request, {\n expiresIn: expires || DEFAULT_PRESIGN_EXPIRATION,\n })];\n case 7:\n url = _a.apply(void 0, [_b.sent()]);\n dispatchStorageEvent(track, 'getSignedUrl', { method: 'get', result: 'success' }, null, \"Signed URL: \" + url);\n return [2 /*return*/, url];\n case 8:\n error_3 = _b.sent();\n logger.warn('get signed url error', error_3);\n dispatchStorageEvent(track, 'getSignedUrl', { method: 'get', result: 'failed' }, null, \"Could not get a signed URL for \" + key);\n throw error_3;\n case 9: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * Put a file in S3 bucket specified to configure method\n * @param key - key of the object\n * @param object - File to be put in Amazon S3 bucket\n * @param [config] - Optional configuration for the underlying S3 command\n * @return an instance of AWSS3UploadTask or a promise that resolves to an object with the new object's key on\n * success.\n */\n AWSS3Provider.prototype.put = function (key, object, config) {\n var opt = Object.assign({}, this._config, config);\n var bucket = opt.bucket, track = opt.track, progressCallback = opt.progressCallback, level = opt.level, resumable = opt.resumable;\n var contentType = opt.contentType, contentDisposition = opt.contentDisposition, contentEncoding = opt.contentEncoding, cacheControl = opt.cacheControl, expires = opt.expires, metadata = opt.metadata, tagging = opt.tagging, acl = opt.acl;\n var serverSideEncryption = opt.serverSideEncryption, SSECustomerAlgorithm = opt.SSECustomerAlgorithm, SSECustomerKey = opt.SSECustomerKey, SSECustomerKeyMD5 = opt.SSECustomerKeyMD5, SSEKMSKeyId = opt.SSEKMSKeyId;\n var type = contentType ? contentType : 'binary/octet-stream';\n var params = {\n Bucket: bucket,\n Key: key,\n Body: object,\n ContentType: type,\n };\n if (cacheControl) {\n params.CacheControl = cacheControl;\n }\n if (contentDisposition) {\n params.ContentDisposition = contentDisposition;\n }\n if (contentEncoding) {\n params.ContentEncoding = contentEncoding;\n }\n if (expires) {\n params.Expires = expires;\n }\n if (metadata) {\n params.Metadata = metadata;\n }\n if (tagging) {\n params.Tagging = tagging;\n }\n if (serverSideEncryption) {\n params.ServerSideEncryption = serverSideEncryption;\n }\n if (SSECustomerAlgorithm) {\n params.SSECustomerAlgorithm = SSECustomerAlgorithm;\n }\n if (SSECustomerKey) {\n params.SSECustomerKey = SSECustomerKey;\n }\n if (SSECustomerKeyMD5) {\n params.SSECustomerKeyMD5 = SSECustomerKeyMD5;\n }\n if (SSEKMSKeyId) {\n params.SSEKMSKeyId = SSEKMSKeyId;\n }\n var emitter = new events.EventEmitter();\n var uploader = new AWSS3ProviderManagedUpload(params, opt, emitter);\n if (acl) {\n params.ACL = acl;\n }\n if (resumable === true) {\n var s3Client = this._createNewS3Client(opt);\n // we are using aws sdk middleware to inject the prefix to key, this way we don't have to call\n // this._ensureCredentials() which allows us to make this function sync so we can return non-Promise like UploadTask\n s3Client.middlewareStack.add(createPrefixMiddleware(opt, key), prefixMiddlewareOptions);\n var addTaskInput = {\n bucket: bucket,\n key: key,\n s3Client: s3Client,\n file: object,\n emitter: emitter,\n accessLevel: level,\n params: params,\n };\n // explicitly asserting the type here as Typescript could not infer that resumable is of type true\n return this.startResumableUpload(addTaskInput, config);\n }\n try {\n if (progressCallback) {\n if (typeof progressCallback === 'function') {\n emitter.on(SEND_UPLOAD_PROGRESS_EVENT, function (progress) {\n progressCallback(progress);\n });\n }\n else {\n logger.warn('progressCallback should be a function, not a ' +\n typeof progressCallback);\n }\n }\n return uploader.upload().then(function (response) {\n logger.debug('upload result', response);\n dispatchStorageEvent(track, 'upload', { method: 'put', result: 'success' }, null, \"Upload success for \" + key);\n return { key: key };\n });\n }\n catch (error) {\n logger.warn('error uploading', error);\n dispatchStorageEvent(track, 'upload', { method: 'put', result: 'failed' }, null, \"Error uploading \" + key);\n throw error;\n }\n };\n /**\n * Remove the object for specified key\n * @param {string} key - key of the object\n * @param {S3ProviderRemoveConfig} [config] - Optional configuration for the underlying S3 command\n * @return {Promise} - Promise resolves upon successful removal of the object\n */\n AWSS3Provider.prototype.remove = function (key, config) {\n return __awaiter(this, void 0, void 0, function () {\n var credentialsOK, opt, bucket, track, prefix, final_key, s3, params, deleteObjectCommand, response, error_4;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._ensureCredentials()];\n case 1:\n credentialsOK = _a.sent();\n if (!credentialsOK || !this._isWithCredentials(this._config)) {\n throw new Error(StorageErrorStrings.NO_CREDENTIALS);\n }\n opt = Object.assign({}, this._config, config);\n bucket = opt.bucket, track = opt.track;\n prefix = this._prefix(opt);\n final_key = prefix + key;\n s3 = this._createNewS3Client(opt);\n logger.debug('remove ' + key + ' from ' + final_key);\n params = {\n Bucket: bucket,\n Key: final_key,\n };\n deleteObjectCommand = new DeleteObjectCommand(params);\n _a.label = 2;\n case 2:\n _a.trys.push([2, 4, , 5]);\n return [4 /*yield*/, s3.send(deleteObjectCommand)];\n case 3:\n response = _a.sent();\n dispatchStorageEvent(track, 'delete', { method: 'remove', result: 'success' }, null, \"Deleted \" + key + \" successfully\");\n return [2 /*return*/, response];\n case 4:\n error_4 = _a.sent();\n dispatchStorageEvent(track, 'delete', { method: 'remove', result: 'failed' }, null, \"Deletion of \" + key + \" failed with \" + error_4);\n throw error_4;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n /**\n * List bucket objects relative to the level and prefix specified\n * @param {string} path - the path that contains objects\n * @param {S3ProviderListConfig} [config] - Optional configuration for the underlying S3 command\n * @return {Promise} - Promise resolves to list of keys, eTags, lastModified and file size for\n * all objects in path\n */\n AWSS3Provider.prototype.list = function (path, config) {\n return __awaiter(this, void 0, void 0, function () {\n var credentialsOK, opt, bucket, track, maxKeys, prefix, final_path, s3, params, listObjectsCommand, response, list, error_5;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._ensureCredentials()];\n case 1:\n credentialsOK = _a.sent();\n if (!credentialsOK || !this._isWithCredentials(this._config)) {\n throw new Error(StorageErrorStrings.NO_CREDENTIALS);\n }\n opt = Object.assign({}, this._config, config);\n bucket = opt.bucket, track = opt.track, maxKeys = opt.maxKeys;\n prefix = this._prefix(opt);\n final_path = prefix + path;\n s3 = this._createNewS3Client(opt);\n logger.debug('list ' + path + ' from ' + final_path);\n params = {\n Bucket: bucket,\n Prefix: final_path,\n MaxKeys: maxKeys,\n };\n listObjectsCommand = new ListObjectsCommand(params);\n _a.label = 2;\n case 2:\n _a.trys.push([2, 4, , 5]);\n return [4 /*yield*/, s3.send(listObjectsCommand)];\n case 3:\n response = _a.sent();\n list = [];\n if (response && response.Contents) {\n list = response.Contents.map(function (item) {\n return {\n key: item.Key.substr(prefix.length),\n eTag: item.ETag,\n lastModified: item.LastModified,\n size: item.Size,\n };\n });\n }\n dispatchStorageEvent(track, 'list', { method: 'list', result: 'success' }, null, list.length + \" items returned from list operation\");\n logger.debug('list', list);\n return [2 /*return*/, list];\n case 4:\n error_5 = _a.sent();\n logger.warn('list error', error_5);\n dispatchStorageEvent(track, 'list', { method: 'list', result: 'failed' }, null, \"Listing items failed: \" + error_5.message);\n throw error_5;\n case 5: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3Provider.prototype._ensureCredentials = function () {\n return __awaiter(this, void 0, void 0, function () {\n var credentials, cred, error_6;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n _a.trys.push([0, 2, , 3]);\n return [4 /*yield*/, Credentials.get()];\n case 1:\n credentials = _a.sent();\n if (!credentials)\n return [2 /*return*/, false];\n cred = Credentials.shear(credentials);\n logger.debug('set credentials for storage', cred);\n this._config.credentials = cred;\n return [2 /*return*/, true];\n case 2:\n error_6 = _a.sent();\n logger.warn('ensure credentials error', error_6);\n return [2 /*return*/, false];\n case 3: return [2 /*return*/];\n }\n });\n });\n };\n AWSS3Provider.prototype._isWithCredentials = function (config) {\n return typeof config === 'object' && config.hasOwnProperty('credentials');\n };\n AWSS3Provider.prototype._prefix = function (config) {\n var credentials = config.credentials, level = config.level;\n var customPrefix = config.customPrefix || {};\n var identityId = config.identityId || credentials.identityId;\n var privatePath = (customPrefix.private !== undefined ? customPrefix.private : 'private/') +\n identityId +\n '/';\n var protectedPath = (customPrefix.protected !== undefined\n ? customPrefix.protected\n : 'protected/') +\n identityId +\n '/';\n var publicPath = customPrefix.public !== undefined ? customPrefix.public : 'public/';\n switch (level) {\n case 'private':\n return privatePath;\n case 'protected':\n return protectedPath;\n default:\n return publicPath;\n }\n };\n /**\n * Creates an S3 client with new V3 aws sdk\n */\n AWSS3Provider.prototype._createNewS3Client = function (config, emitter) {\n var s3client = createS3Client(config, emitter);\n s3client.middlewareStack.add(autoAdjustClockskewMiddleware(s3client.config), autoAdjustClockskewMiddlewareOptions);\n return s3client;\n };\n AWSS3Provider.CATEGORY = 'Storage';\n AWSS3Provider.PROVIDER_NAME = 'AWSS3';\n return AWSS3Provider;\n}());\nexport { AWSS3Provider };\n/**\n * @deprecated use named import\n */\nexport default AWSS3Provider;\n//# sourceMappingURL=AWSS3Provider.js.map","/*\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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nimport { ConsoleLogger as Logger, Parser } from '@aws-amplify/core';\nimport { AWSS3Provider } from './providers';\nimport axios from 'axios';\nimport { AWSS3UploadTask } from './providers/AWSS3UploadTask';\nvar logger = new Logger('StorageClass');\nvar DEFAULT_PROVIDER = 'AWSS3';\n/**\n * Provide storage methods to use AWS S3\n */\nvar Storage = /** @class */ (function () {\n /**\n * Initialize Storage\n * @param {Object} config - Configuration object for storage\n */\n function Storage() {\n this._config = {};\n this._pluggables = [];\n this._cancelTokenSourceMap = new WeakMap();\n logger.debug('Storage Options', this._config);\n this.get = this.get.bind(this);\n this.put = this.put.bind(this);\n this.remove = this.remove.bind(this);\n this.list = this.list.bind(this);\n }\n Storage.prototype.getModuleName = function () {\n return 'Storage';\n };\n /**\n * add plugin into Storage category\n * @param {Object} pluggable - an instance of the plugin\n */\n Storage.prototype.addPluggable = function (pluggable) {\n if (pluggable && pluggable.getCategory() === 'Storage') {\n this._pluggables.push(pluggable);\n var config = {};\n config = pluggable.configure(this._config[pluggable.getProviderName()]);\n return config;\n }\n };\n /**\n * Get the plugin object\n * @param providerName - the name of the plugin\n */\n Storage.prototype.getPluggable = function (providerName) {\n var pluggable = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === providerName; });\n if (pluggable === undefined) {\n logger.debug('No plugin found with providerName', providerName);\n return null;\n }\n else\n return pluggable;\n };\n /**\n * Remove the plugin object\n * @param providerName - the name of the plugin\n */\n Storage.prototype.removePluggable = function (providerName) {\n this._pluggables = this._pluggables.filter(function (pluggable) { return pluggable.getProviderName() !== providerName; });\n return;\n };\n /**\n * Configure Storage\n * @param {Object} config - Configuration object for storage\n * @return {Object} - Current configuration\n */\n Storage.prototype.configure = function (config) {\n var _this = this;\n logger.debug('configure Storage');\n if (!config)\n return this._config;\n var amplifyConfig = Parser.parseMobilehubConfig(config);\n var storageKeysFromConfig = Object.keys(amplifyConfig.Storage);\n var storageArrayKeys = [\n 'bucket',\n 'region',\n 'level',\n 'track',\n 'customPrefix',\n 'serverSideEncryption',\n 'SSECustomerAlgorithm',\n 'SSECustomerKey',\n 'SSECustomerKeyMD5',\n 'SSEKMSKeyId',\n ];\n var isInStorageArrayKeys = function (k) {\n return storageArrayKeys.some(function (x) { return x === k; });\n };\n var checkConfigKeysFromArray = function (k) {\n return k.find(function (k) { return isInStorageArrayKeys(k); });\n };\n if (storageKeysFromConfig &&\n checkConfigKeysFromArray(storageKeysFromConfig) &&\n !amplifyConfig.Storage[DEFAULT_PROVIDER]) {\n amplifyConfig.Storage[DEFAULT_PROVIDER] = {};\n }\n Object.entries(amplifyConfig.Storage).map(function (_a) {\n var _b = __read(_a, 2), key = _b[0], value = _b[1];\n if (key && isInStorageArrayKeys(key) && value !== undefined) {\n amplifyConfig.Storage[DEFAULT_PROVIDER][key] = value;\n delete amplifyConfig.Storage[key];\n }\n });\n // only update new values for each provider\n Object.keys(amplifyConfig.Storage).forEach(function (providerName) {\n if (typeof amplifyConfig.Storage[providerName] !== 'string') {\n _this._config[providerName] = __assign(__assign({}, _this._config[providerName]), amplifyConfig.Storage[providerName]);\n }\n });\n this._pluggables.forEach(function (pluggable) {\n pluggable.configure(_this._config[pluggable.getProviderName()]);\n });\n if (this._pluggables.length === 0) {\n this.addPluggable(new AWSS3Provider());\n }\n return this._config;\n };\n Storage.prototype.getCancellableTokenSource = function () {\n return axios.CancelToken.source();\n };\n Storage.prototype.updateRequestToBeCancellable = function (request, cancelTokenSource) {\n this._cancelTokenSourceMap.set(request, cancelTokenSource);\n };\n Storage.prototype.isUploadTask = function (x) {\n return (typeof x !== 'undefined' &&\n typeof x['pause'] === 'function' &&\n typeof x['resume'] === 'function');\n };\n Storage.prototype.cancel = function (request, message) {\n if (request instanceof AWSS3UploadTask) {\n return request._cancel();\n }\n var cancelTokenSource = this._cancelTokenSourceMap.get(request);\n if (cancelTokenSource) {\n cancelTokenSource.cancel(message);\n }\n else {\n logger.debug('The request does not map to any cancel token');\n }\n };\n Storage.prototype.copy = function (src, dest, config) {\n var provider = (config === null || config === void 0 ? void 0 : config.provider) || DEFAULT_PROVIDER;\n var prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n if (prov === undefined) {\n logger.debug('No plugin found with providerName', provider);\n return Promise.reject('No plugin found in Storage for the provider');\n }\n var cancelTokenSource = this.getCancellableTokenSource();\n if (typeof prov.copy !== 'function') {\n return Promise.reject(\".copy is not implemented on provider \" + prov.getProviderName());\n }\n var responsePromise = prov.copy(src, dest, __assign(__assign({}, config), { cancelTokenSource: cancelTokenSource }));\n this.updateRequestToBeCancellable(responsePromise, cancelTokenSource);\n return responsePromise;\n };\n Storage.prototype.get = function (key, config) {\n var provider = (config === null || config === void 0 ? void 0 : config.provider) || DEFAULT_PROVIDER;\n var prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n if (prov === undefined) {\n logger.debug('No plugin found with providerName', provider);\n return Promise.reject('No plugin found in Storage for the provider');\n }\n var cancelTokenSource = this.getCancellableTokenSource();\n var responsePromise = prov.get(key, __assign(__assign({}, config), { cancelTokenSource: cancelTokenSource }));\n this.updateRequestToBeCancellable(responsePromise, cancelTokenSource);\n return responsePromise;\n };\n Storage.prototype.isCancelError = function (error) {\n return axios.isCancel(error);\n };\n Storage.prototype.put = function (key, object, config) {\n var provider = (config === null || config === void 0 ? void 0 : config.provider) || DEFAULT_PROVIDER;\n var prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n if (prov === undefined) {\n logger.debug('No plugin found with providerName', provider);\n return Promise.reject('No plugin found in Storage for the provider');\n }\n var cancelTokenSource = this.getCancellableTokenSource();\n var response = prov.put(key, object, __assign(__assign({}, config), { cancelTokenSource: cancelTokenSource }));\n if (!this.isUploadTask(response)) {\n this.updateRequestToBeCancellable(response, cancelTokenSource);\n }\n return response;\n };\n Storage.prototype.remove = function (key, config) {\n var provider = (config === null || config === void 0 ? void 0 : config.provider) || DEFAULT_PROVIDER;\n var prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n if (prov === undefined) {\n logger.debug('No plugin found with providerName', provider);\n return Promise.reject('No plugin found in Storage for the provider');\n }\n return prov.remove(key, config);\n };\n Storage.prototype.list = function (path, config) {\n var provider = (config === null || config === void 0 ? void 0 : config.provider) || DEFAULT_PROVIDER;\n var prov = this._pluggables.find(function (pluggable) { return pluggable.getProviderName() === provider; });\n if (prov === undefined) {\n logger.debug('No plugin found with providerName', provider);\n return Promise.reject('No plugin found in Storage for the provider');\n }\n return prov.list(path, config);\n };\n return Storage;\n}());\nexport { Storage };\n/**\n * @deprecated use named import\n */\nexport default Storage;\n//# sourceMappingURL=Storage.js.map","/*\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 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nimport { Storage as StorageClass } from './Storage';\nimport { Amplify, ConsoleLogger as Logger } from '@aws-amplify/core';\nvar logger = new Logger('Storage');\nvar _instance = null;\nvar getInstance = function () {\n if (_instance) {\n return _instance;\n }\n logger.debug('Create Storage Instance, debug');\n _instance = new StorageClass();\n _instance.vault = new StorageClass();\n var old_configure = _instance.configure;\n _instance.configure = function (options) {\n logger.debug('storage configure called');\n var vaultConfig = __assign({}, old_configure.call(_instance, options));\n // set level private for each provider for the vault\n Object.keys(vaultConfig).forEach(function (providerName) {\n if (typeof vaultConfig[providerName] !== 'string') {\n vaultConfig[providerName] = __assign(__assign({}, vaultConfig[providerName]), { level: 'private' });\n }\n });\n logger.debug('storage vault configure called');\n _instance.vault.configure(vaultConfig);\n };\n return _instance;\n};\nexport var Storage = getInstance();\nAmplify.register(Storage);\n/**\n * @deprecated use named import\n */\nexport default Storage;\nexport { StorageClass };\nexport * from './providers';\n//# sourceMappingURL=index.js.map","!function(t,_){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=_():\"function\"==typeof define&&define.amd?define(\"aws_amplify_ui\",[],_):\"object\"==typeof exports?exports.aws_amplify_ui=_():t.aws_amplify_ui=_()}(this,(function(){return function(t){var _={};function n(o){if(_[o])return _[o].exports;var e=_[o]={i:o,l:!1,exports:{}};return t[o].call(e.exports,e,e.exports,n),e.l=!0,e.exports}return n.m=t,n.c=_,n.d=function(t,_,o){n.o(t,_)||Object.defineProperty(t,_,{enumerable:!0,get:o})},n.r=function(t){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,_){if(1&_&&(t=n(t)),8&_)return t;if(4&_&&\"object\"==typeof t&&t&&t.__esModule)return t;var o=Object.create(null);if(n.r(o),Object.defineProperty(o,\"default\",{enumerable:!0,value:t}),2&_&&\"string\"!=typeof t)for(var e in t)n.d(o,e,function(_){return t[_]}.bind(null,e));return o},n.n=function(t){var _=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(_,\"a\",_),_},n.o=function(t,_){return Object.prototype.hasOwnProperty.call(t,_)},n.p=\"\",n(n.s=0)}([function(t,_,n){\"use strict\";function o(t){for(var n in t)_.hasOwnProperty(n)||(_[n]=t[n])}Object.defineProperty(_,\"__esModule\",{value:!0}),o(n(1)),o(n(2)),o(n(3)),o(n(4)),o(n(5)),o(n(6)),o(n(7)),o(n(8)),o(n(9)),o(n(10)),o(n(11)),o(n(12)),o(n(13))},function(t,_,n){t.exports={a:\"Anchor__a___1_Iz8\"}},function(t,_,n){t.exports={button:\"Button__button___vS7Mv\",signInButton:\"Button__signInButton___3bUH-\",googleSignInButton:\"Button__googleSignInButton___1YiCu\",signInButtonIcon:\"Button__signInButtonIcon___ihN75\",auth0SignInButton:\"Button__auth0SignInButton___znnCj\",facebookSignInButton:\"Button__facebookSignInButton___34Txh\",amazonSignInButton:\"Button__amazonSignInButton___2EMtl\",oAuthSignInButton:\"Button__oAuthSignInButton___3UGOl\",signInButtonContent:\"Button__signInButtonContent___xqTXJ\"}},function(t,_,n){t.exports={formContainer:\"Form__formContainer___1GA3x\",formSection:\"Form__formSection___1PPvW\",formField:\"Form__formField___38Ikl\",formRow:\"Form__formRow___2mwRs\"}},function(t,_,n){t.exports={hint:\"Hint__hint___2XngB\"}},function(t,_,n){t.exports={input:\"Input__input___3e_bf\",inputLabel:\"Input__inputLabel___3VF0S\",label:\"Input__label___23sO8\",radio:\"Input__radio___2hllK\"}},function(t,_,n){t.exports={navBar:\"Nav__navBar___xtCFA\",navRight:\"Nav__navRight___1QG2J\",nav:\"Nav__nav___2Dx2Y\",navItem:\"Nav__navItem___1LtFQ\"}},function(t,_,n){t.exports={photoPickerButton:\"PhotoPicker__photoPickerButton___2XdVn\",photoPlaceholder:\"PhotoPicker__photoPlaceholder___2JXO4\",photoPlaceholderIcon:\"PhotoPicker__photoPlaceholderIcon___3Et71\"}},function(t,_,n){t.exports={container:\"Section__container___3YYTG\",actionRow:\"Section__actionRow___2LWSU\",sectionHeader:\"Section__sectionHeader___2djyg\",sectionHeaderHint:\"Section__sectionHeaderHint___3Wxdc\",sectionBody:\"Section__sectionBody___ihqqd\",sectionHeaderContent:\"Section__sectionHeaderContent___1UCqa\",sectionFooter:\"Section__sectionFooter___1T54C\",sectionFooterPrimaryContent:\"Section__sectionFooterPrimaryContent___2r9ZX\",sectionFooterSecondaryContent:\"Section__sectionFooterSecondaryContent___Nj41Q\"}},function(t,_,n){t.exports={selectInput:\"SelectInput__selectInput___3efO4\"}},function(t,_,n){t.exports={strike:\"Strike__strike___1XV1b\",strikeContent:\"Strike__strikeContent___10gLb\"}},function(t,_,n){t.exports={toast:\"Toast__toast___XXr3v\",toastClose:\"Toast__toastClose___18lU4\"}},function(t,_,n){t.exports={totpQrcode:\"Totp__totpQrcode___1crLx\"}},function(t,_,n){t.exports={sumerianSceneContainer:\"XR__sumerianSceneContainer___3nVMt\",sumerianScene:\"XR__sumerianScene___2Tt7-\",loadingOverlay:\"XR__loadingOverlay___IbqcI\",loadingContainer:\"XR__loadingContainer___2Itxb\",loadingLogo:\"XR__loadingLogo___Ub7xQ\",loadingSceneName:\"XR__loadingSceneName___3__ne\",loadingBar:\"XR__loadingBar___2vcke\",loadingBarFill:\"XR__loadingBarFill___3M-D9\",sceneErrorText:\"XR__sceneErrorText___2y0tp\",sceneBar:\"XR__sceneBar___2ShrP\",sceneName:\"XR__sceneName___1ApHr\",sceneActions:\"XR__sceneActions___7plGs\",actionButton:\"XR__actionButton___2poIM\",tooltip:\"XR__tooltip___UYyhn\",actionIcon:\"XR__actionIcon___2qnd2\",autoShowTooltip:\"XR__autoShowTooltip___V1QH7\"}}])}));\n//# sourceMappingURL=aws-amplify-ui.js.map","/*\n * Copyright 2017-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 { PubSub } from './PubSub';\nexport * from './Providers';\nvar CONTROL_MSG;\n(function (CONTROL_MSG) {\n CONTROL_MSG[\"CONNECTION_CLOSED\"] = \"Connection closed\";\n CONTROL_MSG[\"CONNECTION_FAILED\"] = \"Connection failed\";\n CONTROL_MSG[\"REALTIME_SUBSCRIPTION_INIT_ERROR\"] = \"AppSync Realtime subscription init error\";\n CONTROL_MSG[\"SUBSCRIPTION_ACK\"] = \"Subscription ack\";\n CONTROL_MSG[\"TIMEOUT_DISCONNECT\"] = \"Timeout disconnect\";\n})(CONTROL_MSG || (CONTROL_MSG = {}));\nexport { PubSub, CONTROL_MSG };\n/**\n * @deprecated use named import\n */\nexport default PubSub;\n//# sourceMappingURL=index.js.map"],"sourceRoot":""}