{"version":3,"sources":["webpack:///./node_modules/@aws-amplify/analytics/lib-esm/Providers/AWSPinpointProvider.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/utils/MethodEmbed.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/trackers/PageViewTracker.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/vendor/dom-utils/matches.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/vendor/dom-utils/parents.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/vendor/dom-utils/closest.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/vendor/dom-utils/delegate.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/vendor/dom-utils/parse-url.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/trackers/EventTracker.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/Providers/AmazonPersonalizeHelper/MediaAutoTrack.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/trackers/SessionTracker.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/Analytics.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/Providers/AWSKinesisProvider.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/Providers/AmazonPersonalizeHelper/SessionInfoManager.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/Providers/AmazonPersonalizeProvider.js","webpack:///./node_modules/@aws-amplify/analytics/lib-esm/index.js"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","adopt","value","resolve","Promise","reject","fulfilled","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","AMPLIFY_SYMBOL","for","dispatchAnalyticsEvent","event","data","dispatch","logger","RETRYABLE_CODES","ACCEPTED_CODES","MOBILE_SERVICE_NAME","BEACON_SUPPORTED","navigator","sendBeacon","BUFFER_SIZE","FLUSH_SIZE","FLUSH_INTERVAL","RESEND_LIMIT","AWSPinpointProvider","config","_endpointGenerating","_buffer","_config","bufferSize","flushSize","flushInterval","resendLimit","_clientInfo","clientInfo","_setupTimer","_this","_timer","clearInterval","_a","that","setInterval","size","shift","params","handlers","_send","_putToBuffer","debug","Error","getCategory","category","getProviderName","providerName","configure","conf","cacheKey","_getEndpointId","endpointId","catch","record","credentials","timestamp","_getCredentials","Date","getTime","_generateSession","eventId","uuid","immediate","_sessionId","name","_sessionStartTimestamp","session","Id","StartTimestamp","toISOString","stopTimestamp","Duration","StopTimestamp","undefined","_updateEndpoint","_pinpointSendStopSession","_record","_generateBatchItemContext","attributes","metrics","appId","endpointContext","eventParams","ApplicationId","EventsRequest","BatchItem","endpointObj","EventType","Timestamp","Attributes","Metrics","Session","_pinpointPutEvents","request","pinpointClient","putEvents","on","httpRequest","path","send","err","error","warn","_b","_c","EventsResponse","Results","EventsItemResponse","StatusCode","Message","includes","_retry","region","accessInfo","secret_key","secretAccessKey","access_key","accessKeyId","session_token","sessionToken","url","JSON","stringify","method","serviceInfo","service","requestUrl","signUrl","success","eventName","_initClients","update_params","_endpointRequest","transferKeyToLowerCase","EndpointId","EndpointRequest","updateEndpoint","message","startsWith","_removeUnusedEndpoints","User","UserId","userId","res","rej","getUserEndpoints","endpoints","EndpointsResponse","Item","endpointToBeDeleted","timeStamp1","parse","timeStamp2","isNaN","mobileAnalytics","identityId","isReactNative","customizeRequests","req","headers","userAgent","getItem","setItem","clientContext","defaultEndpointConfig","endpoint","demographicByClientInfo","appVersion","make","model","modelVersion","version","platform","demographicByClientContext","clientId","appTitle","appVersionName","appVersionCode","appPackageName","channelType","address","tmp","requestId","effectiveDate","demographic","location","user","userAttributes","ret","transferKeyToUpperCase","get","shear","lists","MethodEmbed","context","methodName","_originalMethod","bind","add","methodOverride","getInstance","set","remove","args","_i","instance","filter","h","PREV_URL_KEY","getUrl","browserOrNode","isBrowser","window","origin","pathname","defaultOpts","enable","provider","PageViewTracker","tracker","opts","_tracker","_hasEnabled","_trackFunc","type","_pageViewTrackSPA","_pageViewTrackDefault","_isSameUrl","prevUrl","sessionStorage","curUrl","customAttrs","addEventListener","history","pushState","removeEventListener","proto","nativeMatches","matches","matchesSelector","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","element","test","nodeType","item","selector","nodes","parentNode","querySelectorAll","node","parents","ele","list","closest","shouldCheckSelf","parent_1","parentElements","concat","delegate","ancestor","eventType","callback","listener","delegateTarget","composedPath","target","destroy","HTTP_PORT","HTTPS_PORT","RegExp","document","createElement","HTML5_MEDIA_EVENT","MEDIA_TYPE","EVENT_TYPE","events","selectorPrefix","EventTracker","_delegates","keys","selector_1","forEach","evt","composed","useCapture","key","attrs","defaultAttrs","getAttribute","split","attr","trim","localName","id","initialEventSent","SessionTracker","_trackBeforeUnload","_envCheck","hidden","_hidden","_visibilityChange","visibilityState","custom","_sendInitialEvent","trackers","pageView","AnalyticsClass","_pluggables","_disabled","_trackers","getModuleName","amplifyConfig","parseMobilehubConfig","Analytics","pluggable","providerConfig","disabled","addPluggable","getPluggable","removePluggable","idx","splice","disable","startSession","_sendEvent","stopSession","errMsg","isAnalyticsConfigured","autoTrack","trackerType","entries","AWSKinesisProvider","_sendFromBuffer","eventsGroups","preCred","group","cred","map","evts","_sendEvents","initClients","_init","records","streamName","Data","PartitionKey","partitionKey","_kinesis","putRecords","Records","StreamName","apiVersion","PERSONALIZE_CACHE","PERSONALIZE_CACHE_USERID","PERSONALIZE_CACHE_SESSIONID","DEFAULT_CACHE_PREFIX","TIMER_INTERVAL","DELIMITER","CACHE_EXPIRY_IN_DAYS","SessionInfoManager","prefixKey","_isBrowser","_timerKey","substr","_refreshTimer","storeValue","today","expire","setTime","_getCachePrefix","expires","retrieveValue","host","getTimerKey","updateSessionInfo","sessionInfo","existUserId","existSessionId","sessionId","_isRequireNewSession","newSessionId","_isRequireUpdateSessionInfo","cachedSessionUserId","cachedSessionSessionId","isNoCachedSession","retrieveSessionInfo","trackingId","isSignoutCase","isSwitchUserCase","MediaAutoTrack","eventActionMapping","ENDED","endedEventAction","PLAY","playEventAction","PAUSE","pauseEventAction","eventData","_params","_mediaElement","getElementById","properties","_started","_provider","mediaTrackFunMapping","IFRAME","_iframeMediaTracker","VIDEO","_html5MediaTracker","AUDIO","tagName","_initYoutubeFrame","_youTubeIframeLoader","src","loading","loaded","listeners","load","setTimeout","script","appendChild","recordEvent","TIME_WATCHED","YT","_iframePlayer","Player","onStateChange","_onPlayerStateChange","iframeEventMapping","0","1","2","mediaType","newParams","currentTime","duration","_financial","getCurrentTime","getDuration","percentage","parseFloat","eventValue","Number","toFixed","domElementId","putToBuffer","x","FLUSH_SIZE_THRESHHOLD","IDENTIFY_EVENT","AmazonPersonalizeProvider","_sessionManager","_sessionInfo","requestParams","isLoaded","sentAt","generateRequestParams","isElementFullyLoaded","loadElement","domId","clientHeight","operation","delay","times","wait","ms","r","reason","groupLen","eventPayload","_generateSingleRecordPayload","payload","eventList","_personalize","currRequestParams","trackPayload","endpointUpdated","authConfigured","analyticsConfigured","_instance","register","capsule","channel","source","authEvent","storageEvent","analyticsEvent","sendEvents","listen"],"mappings":"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","file":"js/chunk-vendors~5a0cee19.b6cd5ce8.js","sourcesContent":["/*\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 __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};\nimport { ConsoleLogger as Logger, ClientDevice, Platform, Credentials, Signer, JS, Hub, } from '@aws-amplify/core';\nimport * as MobileAnalytics from 'aws-sdk/clients/mobileanalytics';\nimport * as Pinpoint from 'aws-sdk/clients/pinpoint';\nimport Cache from '@aws-amplify/cache';\nimport { v1 as uuid } from 'uuid';\nvar AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n typeof Symbol.for === 'function'\n ? Symbol.for('amplify_default')\n : '@@amplify_default');\nvar dispatchAnalyticsEvent = function (event, data) {\n Hub.dispatch('analytics', { event: event, data: data }, 'Analytics', AMPLIFY_SYMBOL);\n};\nvar logger = new Logger('AWSPinpointProvider');\nvar RETRYABLE_CODES = [429, 500];\nvar ACCEPTED_CODES = [202];\nvar MOBILE_SERVICE_NAME = 'mobiletargeting';\nvar BEACON_SUPPORTED = navigator && typeof navigator.sendBeacon === 'function';\n// events buffer\nvar BUFFER_SIZE = 1000;\nvar FLUSH_SIZE = 100;\nvar FLUSH_INTERVAL = 5 * 1000; // 5s\nvar RESEND_LIMIT = 5;\n// params: { event: {name: , .... }, timeStamp, config, resendLimit }\nvar AWSPinpointProvider = /** @class */ (function () {\n function AWSPinpointProvider(config) {\n this._endpointGenerating = true;\n this._buffer = [];\n this._config = config ? config : {};\n this._config.bufferSize = this._config.bufferSize || BUFFER_SIZE;\n this._config.flushSize = this._config.flushSize || FLUSH_SIZE;\n this._config.flushInterval = this._config.flushInterval || FLUSH_INTERVAL;\n this._config.resendLimit = this._config.resendLimit || RESEND_LIMIT;\n this._clientInfo = ClientDevice.clientInfo();\n }\n AWSPinpointProvider.prototype._setupTimer = function () {\n var _this = this;\n if (this._timer) {\n clearInterval(this._timer);\n }\n var _a = this._config, flushSize = _a.flushSize, flushInterval = _a.flushInterval;\n var that = this;\n this._timer = setInterval(function () {\n var size = _this._buffer.length < flushSize ? _this._buffer.length : flushSize;\n for (var i = 0; i < size; i += 1) {\n var _a = _this._buffer.shift(), params = _a.params, handlers = _a.handlers;\n that._send(params, handlers);\n // If this is the first request sent by Analytics module, we should stop sending remaining requests\n // to prevent race condition of updating one endpoint when it's being created in the backend\n if (_this._endpointGenerating)\n break;\n }\n }, flushInterval);\n };\n /**\n * @private\n * @param params - params for the event recording\n * Put events into buffer\n */\n AWSPinpointProvider.prototype._putToBuffer = function (params, handlers) {\n var bufferSize = this._config.bufferSize;\n if (this._buffer.length < bufferSize) {\n this._buffer.push({ params: params, handlers: handlers });\n }\n else {\n logger.debug('exceed analytics events buffer size');\n return handlers.reject(new Error('Exceed the size of analytics events buffer'));\n }\n };\n /**\n * get the category of the plugin\n */\n AWSPinpointProvider.prototype.getCategory = function () {\n return AWSPinpointProvider.category;\n };\n /**\n * get provider name of the plugin\n */\n AWSPinpointProvider.prototype.getProviderName = function () {\n return AWSPinpointProvider.providerName;\n };\n /**\n * configure the plugin\n * @param {Object} config - configuration\n */\n AWSPinpointProvider.prototype.configure = function (config) {\n var _this = this;\n logger.debug('configure Analytics', config);\n var conf = config ? config : {};\n this._config = Object.assign({}, this._config, conf);\n if (this._config['appId'] && !this._config['disabled']) {\n if (!this._config['endpointId']) {\n var cacheKey = this.getProviderName() + '_' + this._config['appId'];\n this._getEndpointId(cacheKey)\n .then(function (endpointId) {\n logger.debug('setting endpoint id from the cache', endpointId);\n _this._config['endpointId'] = endpointId;\n dispatchAnalyticsEvent('pinpointProvider_configured', null);\n })\n .catch(function (e) {\n logger.debug('Failed to generate endpointId', e);\n });\n }\n else {\n dispatchAnalyticsEvent('pinpointProvider_configured', null);\n }\n this._setupTimer();\n }\n else {\n if (this._timer) {\n clearInterval(this._timer);\n }\n }\n return this._config;\n };\n /**\n * record an event\n * @param {Object} params - the params of an event\n */\n AWSPinpointProvider.prototype.record = function (params, handlers) {\n return __awaiter(this, void 0, void 0, function () {\n var credentials, timestamp;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._getCredentials()];\n case 1:\n credentials = _a.sent();\n if (!credentials || !this._config['appId'] || !this._config['region']) {\n logger.debug('cannot send events without credentials, applicationId or region');\n return [2 /*return*/, handlers.reject(new Error('No credentials, applicationId or region'))];\n }\n timestamp = new Date().getTime();\n // attach the session and eventId\n this._generateSession(params);\n params.event.eventId = uuid();\n Object.assign(params, { timestamp: timestamp, config: this._config, credentials: credentials });\n if (params.event.immediate) {\n return [2 /*return*/, this._send(params, handlers)];\n }\n else {\n this._putToBuffer(params, handlers);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n AWSPinpointProvider.prototype._generateSession = function (params) {\n this._sessionId = this._sessionId || uuid();\n var event = params.event;\n switch (event.name) {\n case '_session.start':\n // refresh the session id and session start time\n this._sessionStartTimestamp = new Date().getTime();\n this._sessionId = uuid();\n event.session = {\n Id: this._sessionId,\n StartTimestamp: new Date(this._sessionStartTimestamp).toISOString(),\n };\n break;\n case '_session.stop':\n var stopTimestamp = new Date().getTime();\n this._sessionStartTimestamp =\n this._sessionStartTimestamp || new Date().getTime();\n this._sessionId = this._sessionId || uuid();\n event.session = {\n Id: this._sessionId,\n Duration: stopTimestamp - this._sessionStartTimestamp,\n StartTimestamp: new Date(this._sessionStartTimestamp).toISOString(),\n StopTimestamp: new Date(stopTimestamp).toISOString(),\n };\n this._sessionId = undefined;\n this._sessionStartTimestamp = undefined;\n break;\n default:\n this._sessionStartTimestamp =\n this._sessionStartTimestamp || new Date().getTime();\n this._sessionId = this._sessionId || uuid();\n event.session = {\n Id: this._sessionId,\n StartTimestamp: new Date(this._sessionStartTimestamp).toISOString(),\n };\n break;\n }\n };\n AWSPinpointProvider.prototype._send = function (params, handlers) {\n return __awaiter(this, void 0, void 0, function () {\n var event, config;\n return __generator(this, function (_a) {\n event = params.event, config = params.config;\n switch (event.name) {\n case '_update_endpoint':\n return [2 /*return*/, this._updateEndpoint(params, handlers)];\n case '_session.stop':\n return [2 /*return*/, this._pinpointSendStopSession(params, handlers)];\n default:\n return [2 /*return*/, this._record(params, handlers)];\n }\n return [2 /*return*/];\n });\n });\n };\n AWSPinpointProvider.prototype._generateBatchItemContext = function (params) {\n var event = params.event, timestamp = params.timestamp, config = params.config, credentials = params.credentials;\n var name = event.name, attributes = event.attributes, metrics = event.metrics, eventId = event.eventId, session = event.session;\n var appId = config.appId, endpointId = config.endpointId;\n var endpointContext = {};\n var eventParams = {\n ApplicationId: appId,\n EventsRequest: {\n BatchItem: {},\n },\n };\n eventParams.EventsRequest.BatchItem[endpointId] = {};\n var endpointObj = eventParams.EventsRequest.BatchItem[endpointId];\n endpointObj['Endpoint'] = endpointContext;\n endpointObj['Events'] = {};\n endpointObj['Events'][eventId] = {\n EventType: name,\n Timestamp: new Date(timestamp).toISOString(),\n Attributes: attributes,\n Metrics: metrics,\n Session: session,\n };\n return eventParams;\n };\n AWSPinpointProvider.prototype._pinpointPutEvents = function (params, handlers) {\n return __awaiter(this, void 0, void 0, function () {\n var eventId, endpointId, eventParams, request;\n var _this = this;\n return __generator(this, function (_a) {\n eventId = params.event.eventId, endpointId = params.config.endpointId;\n eventParams = this._generateBatchItemContext(params);\n request = this.pinpointClient.putEvents(eventParams);\n // in order to keep backward compatiblity\n // we are using a legacy api: /apps/{appid}/events/legacy\n // so that users don't need to update their IAM Policy\n // will use the formal one in the next break release\n request.on('build', function () {\n request.httpRequest.path = request.httpRequest.path + '/legacy';\n });\n request.send(function (err, data) {\n if (err) {\n logger.error('record event failed. ', err);\n logger.warn('If you have not updated your Pinpoint IAM Policy' +\n ' with the Action: \"mobiletargeting:PutEvents\" yet, please do it.' +\n ' This action is not necessary for now' +\n ' but in order to avoid breaking changes in the future,' +\n ' please update it as soon as possible.');\n return handlers.reject(err);\n }\n else {\n var _a = endpointId, _b = eventId, _c = data.EventsResponse.Results[_a].EventsItemResponse[_b], StatusCode = _c.StatusCode, Message = _c.Message;\n if (ACCEPTED_CODES.includes(StatusCode)) {\n _this._endpointGenerating = false;\n logger.debug('record event success. ', data);\n return handlers.resolve(data);\n }\n else {\n if (RETRYABLE_CODES.includes(StatusCode)) {\n _this._retry(params, handlers);\n }\n else {\n logger.error(\"Event \" + eventId + \" is not accepted, the error is \" + Message);\n return handlers.reject(data);\n }\n }\n }\n });\n return [2 /*return*/];\n });\n });\n };\n AWSPinpointProvider.prototype._pinpointSendStopSession = function (params, handlers) {\n if (!BEACON_SUPPORTED) {\n this._record(params, handlers);\n return;\n }\n var eventParams = this._generateBatchItemContext(params);\n var region = this._config.region;\n var ApplicationId = eventParams.ApplicationId, EventsRequest = eventParams.EventsRequest;\n var accessInfo = {\n secret_key: this._config.credentials.secretAccessKey,\n access_key: this._config.credentials.accessKeyId,\n session_token: this._config.credentials.sessionToken,\n };\n var url = \"https://pinpoint.\" + region + \".amazonaws.com/v1/apps/\" + ApplicationId + \"/events\";\n var body = JSON.stringify(EventsRequest);\n var method = 'POST';\n var request = {\n url: url,\n body: body,\n method: method,\n };\n var serviceInfo = { region: region, service: MOBILE_SERVICE_NAME };\n var requestUrl = Signer.signUrl(request, accessInfo, serviceInfo, null);\n var success = navigator.sendBeacon(requestUrl, body);\n if (success) {\n return handlers.resolve('sendBeacon success');\n }\n return handlers.reject('sendBeacon failure');\n };\n AWSPinpointProvider.prototype._retry = function (params, handlers) {\n var resendLimit = params.config.resendLimit;\n // For backward compatibility\n params.resendLimit =\n typeof params.resendLimit === 'number' ? params.resendLimit : resendLimit;\n if (params.resendLimit-- > 0) {\n logger.debug(\"resending event \" + params.eventName + \" with \" + params.resendLimit + \" retry times left\");\n this._putToBuffer(params, handlers);\n }\n else {\n logger.debug(\"retry times used up for event \" + params.eventName);\n }\n };\n AWSPinpointProvider.prototype._record = function (params, handlers) {\n return __awaiter(this, void 0, void 0, function () {\n var event, timestamp, config, credentials;\n return __generator(this, function (_a) {\n event = params.event, timestamp = params.timestamp, config = params.config, credentials = params.credentials;\n this._initClients(config, credentials);\n return [2 /*return*/, this._pinpointPutEvents(params, handlers)];\n });\n });\n };\n AWSPinpointProvider.prototype._updateEndpoint = function (params, handlers) {\n return __awaiter(this, void 0, void 0, function () {\n var timestamp, config, credentials, event, appId, region, endpointId, request, update_params, that;\n var _this = this;\n return __generator(this, function (_a) {\n timestamp = params.timestamp, config = params.config, credentials = params.credentials, event = params.event;\n appId = config.appId, region = config.region, endpointId = config.endpointId;\n this._initClients(config, credentials);\n request = this._endpointRequest(config, JS.transferKeyToLowerCase(event, [], ['attributes', 'userAttributes', 'Attributes', 'UserAttributes']));\n update_params = {\n ApplicationId: appId,\n EndpointId: endpointId,\n EndpointRequest: request,\n };\n that = this;\n logger.debug('updateEndpoint with params: ', update_params);\n that.pinpointClient.updateEndpoint(update_params, function (err, data) {\n if (err) {\n logger.debug('updateEndpoint failed', err);\n if (err.message.startsWith('Exceeded maximum endpoint per user count')) {\n _this._removeUnusedEndpoints(appId, request.User.UserId)\n .then(function () {\n logger.debug('Remove the unused endpoints successfully');\n _this._retry(params, handlers);\n })\n .catch(function (e) {\n logger.warn(\"Failed to remove unused endpoints with error: \" + e);\n logger.warn(\"Please ensure you have updated your Pinpoint IAM Policy \" +\n \"with the Action: \\\"mobiletargeting:GetUserEndpoints\\\" \" +\n \"in order to get endpoints info of the user\");\n return handlers.reject(err);\n });\n }\n else\n return handlers.reject(err);\n }\n else {\n logger.debug('updateEndpoint success', data);\n _this._endpointGenerating = false;\n return handlers.resolve(data);\n }\n });\n return [2 /*return*/];\n });\n });\n };\n AWSPinpointProvider.prototype._removeUnusedEndpoints = function (appId, userId) {\n return __awaiter(this, void 0, void 0, function () {\n var _this = this;\n return __generator(this, function (_a) {\n return [2 /*return*/, new Promise(function (res, rej) {\n _this.pinpointClient.getUserEndpoints({\n ApplicationId: appId,\n UserId: userId,\n }, function (err, data) {\n if (err) {\n logger.debug(\"Failed to get endpoints associated with the userId: \" + userId + \" with error\", err);\n return rej(err);\n }\n var endpoints = data.EndpointsResponse.Item;\n logger.debug(\"get endpoints associated with the userId: \" + userId + \" with data\", endpoints);\n var endpointToBeDeleted = endpoints[0];\n for (var i = 1; i < endpoints.length; i++) {\n var timeStamp1 = Date.parse(endpointToBeDeleted['EffectiveDate']);\n var timeStamp2 = Date.parse(endpoints[i]['EffectiveDate']);\n // delete the one with invalid effective date\n if (isNaN(timeStamp1))\n break;\n if (isNaN(timeStamp2)) {\n endpointToBeDeleted = endpoints[i];\n break;\n }\n if (timeStamp2 < timeStamp1) {\n endpointToBeDeleted = endpoints[i];\n }\n }\n // update the endpoint's user id with an empty string\n var update_params = {\n ApplicationId: appId,\n EndpointId: endpointToBeDeleted['Id'],\n EndpointRequest: {\n User: {\n UserId: '',\n },\n },\n };\n _this.pinpointClient.updateEndpoint(update_params, function (err, data) {\n if (err) {\n logger.debug('Failed to update the endpoint', err);\n return rej(err);\n }\n logger.debug('The old endpoint is updated with an empty string for user id');\n return res(data);\n });\n });\n })];\n });\n });\n };\n /**\n * @private\n * @param config\n * Init the clients\n */\n AWSPinpointProvider.prototype._initClients = function (config, credentials) {\n return __awaiter(this, void 0, void 0, function () {\n var region;\n return __generator(this, function (_a) {\n logger.debug('init clients');\n if (this.mobileAnalytics &&\n this.pinpointClient &&\n this._config.credentials &&\n this._config.credentials.sessionToken === credentials.sessionToken &&\n this._config.credentials.identityId === credentials.identityId) {\n logger.debug('no change for aws credentials, directly return from init');\n return [2 /*return*/];\n }\n this._config.credentials = credentials;\n region = config.region;\n logger.debug('init clients with credentials', credentials);\n this.mobileAnalytics = new MobileAnalytics({ credentials: credentials, region: region });\n this.pinpointClient = new Pinpoint({ region: region, credentials: credentials });\n if (Platform.isReactNative) {\n this.pinpointClient.customizeRequests(function (request) {\n request.on('build', function (req) {\n req.httpRequest.headers['user-agent'] = Platform.userAgent;\n });\n });\n }\n return [2 /*return*/];\n });\n });\n };\n AWSPinpointProvider.prototype._getEndpointId = function (cacheKey) {\n return __awaiter(this, void 0, void 0, function () {\n var endpointId;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Cache.getItem(cacheKey)];\n case 1:\n endpointId = _a.sent();\n logger.debug('endpointId from cache', endpointId, 'type', typeof endpointId);\n if (!endpointId) {\n endpointId = uuid();\n Cache.setItem(cacheKey, endpointId);\n }\n return [2 /*return*/, endpointId];\n }\n });\n });\n };\n /**\n * EndPoint request\n * @return {Object} - The request of updating endpoint\n */\n AWSPinpointProvider.prototype._endpointRequest = function (config, event) {\n var credentials = config.credentials;\n var clientInfo = this._clientInfo || {};\n var clientContext = config.clientContext || {};\n // for now we have three different ways for default endpoint configurations\n // clientInfo\n // clientContext (deprecated)\n // config.endpoint\n var defaultEndpointConfig = config.endpoint || {};\n var demographicByClientInfo = {\n appVersion: clientInfo.appVersion,\n make: clientInfo.make,\n model: clientInfo.model,\n modelVersion: clientInfo.version,\n platform: clientInfo.platform,\n };\n // for backward compatibility\n var clientId = clientContext.clientId, appTitle = clientContext.appTitle, appVersionName = clientContext.appVersionName, appVersionCode = clientContext.appVersionCode, appPackageName = clientContext.appPackageName, demographicByClientContext = __rest(clientContext, [\"clientId\", \"appTitle\", \"appVersionName\", \"appVersionCode\", \"appPackageName\"]);\n var channelType = event.address\n ? clientInfo.platform === 'android'\n ? 'GCM'\n : 'APNS'\n : undefined;\n var tmp = __assign(__assign(__assign({ channelType: channelType, requestId: uuid(), effectiveDate: new Date().toISOString() }, defaultEndpointConfig), event), { attributes: __assign(__assign({}, defaultEndpointConfig.attributes), event.attributes), demographic: __assign(__assign(__assign(__assign({}, demographicByClientInfo), demographicByClientContext), defaultEndpointConfig.demographic), event.demographic), location: __assign(__assign({}, defaultEndpointConfig.location), event.location), metrics: __assign(__assign({}, defaultEndpointConfig.metrics), event.metrics), user: {\n userId: event.userId ||\n defaultEndpointConfig.userId ||\n credentials.identityId,\n userAttributes: __assign(__assign({}, defaultEndpointConfig.userAttributes), event.userAttributes),\n } });\n // eliminate unnecessary params\n var userId = tmp.userId, userAttributes = tmp.userAttributes, name = tmp.name, session = tmp.session, eventId = tmp.eventId, immediate = tmp.immediate, ret = __rest(tmp, [\"userId\", \"userAttributes\", \"name\", \"session\", \"eventId\", \"immediate\"]);\n return JS.transferKeyToUpperCase(ret, [], ['metrics', 'userAttributes', 'attributes']);\n };\n /**\n * @private\n * check if current credentials exists\n */\n AWSPinpointProvider.prototype._getCredentials = function () {\n var that = this;\n return Credentials.get()\n .then(function (credentials) {\n if (!credentials)\n return null;\n logger.debug('set credentials for analytics', credentials);\n return Credentials.shear(credentials);\n })\n .catch(function (err) {\n logger.debug('ensure credentials error', err);\n return null;\n });\n };\n AWSPinpointProvider.category = 'Analytics';\n AWSPinpointProvider.providerName = 'AWSPinpoint';\n return AWSPinpointProvider;\n}());\nexport default AWSPinpointProvider;\n//# sourceMappingURL=AWSPinpointProvider.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 lists = [];\nvar MethodEmbed = /** @class */ (function () {\n function MethodEmbed(context, methodName) {\n this.context = context;\n this.methodName = methodName;\n this._originalMethod = context[methodName].bind(context);\n }\n MethodEmbed.add = function (context, methodName, methodOverride) {\n getInstance(context, methodName).set(methodOverride);\n };\n MethodEmbed.remove = function (context, methodName) {\n getInstance(context, methodName).remove();\n };\n MethodEmbed.prototype.set = function (methodOverride) {\n var _this = this;\n this.context[this.methodName] = function () {\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n return methodOverride(_this._originalMethod.apply(_this, args));\n };\n };\n MethodEmbed.prototype.remove = function () {\n this.context[this.methodName] = this._originalMethod;\n };\n return MethodEmbed;\n}());\nexport default MethodEmbed;\nfunction getInstance(context, methodName) {\n var instance = lists.filter(function (h) { return h.context === context && h.methodName === methodName; })[0];\n if (!instance) {\n instance = new MethodEmbed(context, methodName);\n lists.push(instance);\n }\n return instance;\n}\n//# sourceMappingURL=MethodEmbed.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 __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 MethodEmbed from '../utils/MethodEmbed';\nimport { ConsoleLogger as Logger, JS } from '@aws-amplify/core';\nvar logger = new Logger('PageViewTracker');\nvar PREV_URL_KEY = 'aws-amplify-analytics-prevUrl';\nvar getUrl = function () {\n if (!JS.browserOrNode().isBrowser)\n return '';\n else\n return window.location.origin + window.location.pathname;\n};\nvar defaultOpts = {\n enable: false,\n provider: 'AWSPinpoint',\n getUrl: getUrl,\n};\nvar PageViewTracker = /** @class */ (function () {\n function PageViewTracker(tracker, opts) {\n logger.debug('initialize pageview tracker with opts', opts);\n this._config = Object.assign({}, defaultOpts, opts);\n this._tracker = tracker;\n this._hasEnabled = false;\n this._trackFunc = this._trackFunc.bind(this);\n if (this._config.type === 'SPA') {\n this._pageViewTrackSPA();\n }\n else {\n this._pageViewTrackDefault();\n }\n }\n PageViewTracker.prototype.configure = function (opts) {\n Object.assign(this._config, opts);\n // if spa, need to remove those listeners if disabled\n if (this._config.type === 'SPA') {\n this._pageViewTrackSPA();\n }\n return this._config;\n };\n PageViewTracker.prototype._isSameUrl = function () {\n var prevUrl = sessionStorage.getItem(PREV_URL_KEY);\n var curUrl = this._config.getUrl();\n if (prevUrl === curUrl) {\n logger.debug('the url is same');\n return true;\n }\n else\n return false;\n };\n PageViewTracker.prototype._pageViewTrackDefault = function () {\n return __awaiter(this, void 0, void 0, function () {\n var url, customAttrs, _a, attributes;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!JS.browserOrNode().isBrowser ||\n !window.addEventListener ||\n !window.sessionStorage) {\n logger.debug('not in the supported web enviroment');\n return [2 /*return*/];\n }\n url = this._config.getUrl();\n if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n return [4 /*yield*/, this._config.attributes()];\n case 1:\n _a = _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = this._config.attributes;\n _b.label = 3;\n case 3:\n customAttrs = _a;\n attributes = Object.assign({\n url: url,\n }, customAttrs);\n if (this._config.enable && !this._isSameUrl()) {\n this._tracker({\n name: this._config.eventName || 'pageView',\n attributes: attributes,\n }, this._config.provider).catch(function (e) {\n logger.debug('Failed to record the page view event', e);\n });\n sessionStorage.setItem(PREV_URL_KEY, url);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n PageViewTracker.prototype._trackFunc = function () {\n return __awaiter(this, void 0, void 0, function () {\n var url, customAttrs, _a, attributes;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!JS.browserOrNode().isBrowser ||\n !window.addEventListener ||\n !history.pushState ||\n !window.sessionStorage) {\n logger.debug('not in the supported web enviroment');\n return [2 /*return*/];\n }\n url = this._config.getUrl();\n if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n return [4 /*yield*/, this._config.attributes()];\n case 1:\n _a = _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = this._config.attributes;\n _b.label = 3;\n case 3:\n customAttrs = _a;\n attributes = Object.assign({\n url: url,\n }, customAttrs);\n if (!this._isSameUrl()) {\n this._tracker({\n name: this._config.eventName || 'pageView',\n attributes: attributes,\n }, this._config.provider).catch(function (e) {\n logger.debug('Failed to record the page view event', e);\n });\n sessionStorage.setItem(PREV_URL_KEY, url);\n }\n return [2 /*return*/];\n }\n });\n });\n };\n PageViewTracker.prototype._pageViewTrackSPA = function () {\n if (!JS.browserOrNode().isBrowser ||\n !window.addEventListener ||\n !history.pushState) {\n logger.debug('not in the supported web enviroment');\n return;\n }\n if (this._config.enable && !this._hasEnabled) {\n MethodEmbed.add(history, 'pushState', this._trackFunc);\n MethodEmbed.add(history, 'replaceState', this._trackFunc);\n window.addEventListener('popstate', this._trackFunc);\n this._trackFunc();\n this._hasEnabled = true;\n }\n else {\n MethodEmbed.remove(history, 'pushState');\n MethodEmbed.remove(history, 'replaceState');\n window.removeEventListener('popstate', this._trackFunc);\n this._hasEnabled = false;\n }\n };\n return PageViewTracker;\n}());\nexport default PageViewTracker;\n//# sourceMappingURL=PageViewTracker.js.map","/**\n * Copyright (c) 2017, Philip Walton \n */\nimport { JS } from '@aws-amplify/core';\nvar proto = JS.browserOrNode().isBrowser && window['Element']\n ? window['Element'].prototype\n : null;\nvar nativeMatches = proto\n ? proto.matches ||\n // @ts-ignore\n proto.matchesSelector ||\n // @ts-ignore\n proto.webkitMatchesSelector ||\n // @ts-ignore\n proto.mozMatchesSelector ||\n // @ts-ignore\n proto.msMatchesSelector ||\n // @ts-ignore\n proto.oMatchesSelector\n : null;\n/**\n * Tests if a DOM elements matches any of the test DOM elements or selectors.\n * @param {Element} element The DOM element to test.\n * @param {Element|string|Array} test A DOM element, a CSS\n * selector, or an array of DOM elements or CSS selectors to match against.\n * @return {boolean} True of any part of the test matches.\n */\nexport default function matches(element, test) {\n // Validate input.\n if (element && element.nodeType === 1 && test) {\n // if test is a string or DOM element test it.\n if (typeof test === 'string' || test.nodeType === 1) {\n return (element === test || matchesSelector(element, /** @type {string} */ test));\n }\n else if ('length' in test) {\n // if it has a length property iterate over the items\n // and return true if any match.\n for (var i = 0, item = void 0; (item = test[i]); i++) {\n if (element === item || matchesSelector(element, item))\n return true;\n }\n }\n }\n // Still here? Return false\n return false;\n}\n/**\n * Tests whether a DOM element matches a selector. This polyfills the native\n * Element.prototype.matches method across browsers.\n * @param {!Element} element The DOM element to test.\n * @param {string} selector The CSS selector to test element against.\n * @return {boolean} True if the selector matches.\n */\nfunction matchesSelector(element, selector) {\n if (typeof selector !== 'string')\n return false;\n if (nativeMatches)\n return nativeMatches.call(element, selector);\n var nodes = element.parentNode.querySelectorAll(selector);\n for (var i = 0, node = void 0; (node = nodes[i]); i++) {\n if (node === element)\n return true;\n }\n return false;\n}\n//# sourceMappingURL=matches.js.map","/**\n * Copyright (c) 2017, Philip Walton \n */\n/**\n * Returns an array of a DOM element's parent elements.\n * @param {!Element} element The DOM element whose parents to get.\n * @return {!Array} An array of all parent elemets, or an empty array if no\n * parent elements are found.\n */\nexport default function parents(ele) {\n var list = [];\n var element = ele;\n while (element && element.parentNode && element.parentNode.nodeType === 1) {\n element = /** @type {!Element} */ element.parentNode;\n list.push(element);\n }\n return list;\n}\n//# sourceMappingURL=parents.js.map","/**\n * Copyright (c) 2017, Philip Walton \n */\nimport matches from './matches';\nimport parents from './parents';\n/**\n * Gets the closest parent element that matches the passed selector.\n * @param {Element} element The element whose parents to check.\n * @param {string} selector The CSS selector to match against.\n * @param {boolean=} shouldCheckSelf True if the selector should test against\n * the passed element itself.\n * @return {Element|undefined} The matching element or undefined.\n */\nexport default function closest(element, selector, shouldCheckSelf) {\n if (shouldCheckSelf === void 0) { shouldCheckSelf = false; }\n if (!(element && element.nodeType === 1 && selector))\n return;\n var parentElements = (shouldCheckSelf ? [element] : []).concat(parents(element));\n for (var i = 0, parent_1; (parent_1 = parentElements[i]); i++) {\n if (matches(parent_1, selector))\n return parent_1;\n }\n}\n//# sourceMappingURL=closest.js.map","/**\n * Copyright (c) 2017, Philip Walton \n */\nimport closest from './closest';\nimport matches from './matches';\n/**\n * Delegates the handling of events for an element matching a selector to an\n * ancestor of the matching element.\n * @param {!Node} ancestor The ancestor element to add the listener to.\n * @param {string} eventType The event type to listen to.\n * @param {string} selector A CSS selector to match against child elements.\n * @param {!Function} callback A function to run any time the event happens.\n * @param {Object=} opts A configuration options object. The available options:\n * - useCapture: If true, bind to the event capture phase.\n * - deep: If true, delegate into shadow trees.\n * @return {Object} The delegate object. It contains a destroy method.\n */\nexport default function delegate(ancestor, eventType, selector, callback, opts) {\n if (opts === void 0) { opts = {}; }\n // Defines the event listener.\n var listener = function (event) {\n var delegateTarget;\n // If opts.composed is true and the event originated from inside a Shadow\n // tree, check the composed path nodes.\n if (opts['composed'] && typeof event['composedPath'] === 'function') {\n var composedPath = event.composedPath();\n for (var i = 0, node = void 0; (node = composedPath[i]); i++) {\n if (node.nodeType === 1 && matches(node, selector)) {\n delegateTarget = node;\n }\n }\n }\n else {\n // Otherwise check the parents.\n delegateTarget = closest(event.target, selector, true);\n }\n if (delegateTarget) {\n callback.call(delegateTarget, event, delegateTarget);\n }\n };\n ancestor.addEventListener(eventType, listener, opts['useCapture']);\n return {\n destroy: function () {\n ancestor.removeEventListener(eventType, listener, opts['useCapture']);\n },\n };\n}\n//# sourceMappingURL=delegate.js.map","/**\n * Copyright (c) 2017, Philip Walton \n */\nimport { JS } from '@aws-amplify/core';\nvar HTTP_PORT = '80';\nvar HTTPS_PORT = '443';\nvar DEFAULT_PORT = RegExp(':(' + HTTP_PORT + '|' + HTTPS_PORT + ')$');\nvar a = JS.browserOrNode().isBrowser ? document.createElement('a') : null;\nvar cache = {};\n/**\n * Parses the given url and returns an object mimicing a `Location` object.\n * @param {string} url The url to parse.\n * @return {!Object} An object with the same properties as a `Location`.\n */\nexport default function parseUrl(u) {\n var url = u;\n // All falsy values (as well as \".\") should map to the current URL.\n url = !url || url === '.' ? location.href : url;\n if (cache[url])\n return cache[url];\n a.href = url;\n // When parsing file relative paths (e.g. `../index.html`), IE will correctly\n // resolve the `href` property but will keep the `..` in the `path` property.\n // It will also not include the `host` or `hostname` properties. Furthermore,\n // IE will sometimes return no protocol or just a colon, especially for things\n // like relative protocol URLs (e.g. \"//google.com\").\n // To workaround all of these issues, we reparse with the full URL from the\n // `href` property.\n if (url.charAt(0) === '.' || url.charAt(0) === '/')\n return parseUrl(a.href);\n // Don't include default ports.\n var port = a.port === HTTP_PORT || a.port === HTTPS_PORT ? '' : a.port;\n // PhantomJS sets the port to \"0\" when using the file: protocol.\n port = port === '0' ? '' : port;\n // Sometimes IE incorrectly includes a port for default ports\n // (e.g. `:80` or `:443`) even when no port is specified in the URL.\n // http://bit.ly/1rQNoMg\n var host = a.host.replace(DEFAULT_PORT, '');\n // Not all browser support `origin` so we have to build it.\n var origin = a['origin'] ? a['origin'] : a.protocol + '//' + host;\n // Sometimes IE doesn't include the leading slash for pathname.\n // http://bit.ly/1rQNoMg\n var pathname = a.pathname.charAt(0) === '/' ? a.pathname : '/' + a.pathname;\n return (cache[url] = {\n hash: a.hash,\n host: host,\n hostname: a.hostname,\n href: a.href,\n origin: origin,\n pathname: pathname,\n port: port,\n protocol: a.protocol,\n search: a.search,\n });\n}\n//# sourceMappingURL=parse-url.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 __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 { delegate } from '../vendor/dom-utils';\nimport { ConsoleLogger as Logger, JS } from '@aws-amplify/core';\nvar logger = new Logger('EventTracker');\nvar defaultOpts = {\n enable: false,\n events: ['click'],\n selectorPrefix: 'data-amplify-analytics-',\n provider: 'AWSPinpoint',\n};\nvar EventTracker = /** @class */ (function () {\n function EventTracker(tracker, opts) {\n if (!JS.browserOrNode().isBrowser || !window.addEventListener) {\n logger.debug('not in the supported web environment');\n return;\n }\n this._config = Object.assign({}, defaultOpts, opts);\n this._tracker = tracker;\n this._delegates = {};\n this._trackFunc = this._trackFunc.bind(this);\n logger.debug('initialize pageview tracker with opts', this._config);\n this.configure(this._config);\n }\n EventTracker.prototype.configure = function (opts) {\n var _this = this;\n Object.assign(this._config, opts);\n if (!this._config.enable) {\n Object.keys(this._delegates).forEach(function (key) {\n if (typeof _this._delegates[key].destroy === 'function')\n _this._delegates[key].destroy();\n });\n this._delegates = {};\n }\n else if (this._config.enable &&\n Object.keys(this._delegates).length === 0) {\n var selector_1 = '[' + this._config.selectorPrefix + 'on]';\n this._config.events.forEach(function (evt) {\n _this._delegates[evt] = delegate(document, evt, selector_1, _this._trackFunc, { composed: true, useCapture: true });\n });\n }\n return this._config;\n };\n EventTracker.prototype._trackFunc = function (event, element) {\n return __awaiter(this, void 0, void 0, function () {\n var customAttrs, events, eventName, attrs, defaultAttrs, _a, attributes;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n customAttrs = {};\n events = element\n .getAttribute(this._config.selectorPrefix + 'on')\n .split(/\\s*,\\s*/);\n eventName = element.getAttribute(this._config.selectorPrefix + 'name');\n attrs = element.getAttribute(this._config.selectorPrefix + 'attrs');\n if (attrs) {\n attrs.split(/\\s*,\\s*/).forEach(function (attr) {\n var tmp = attr.trim().split(/\\s*:\\s*/);\n customAttrs[tmp[0]] = tmp[1];\n });\n }\n if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n return [4 /*yield*/, this._config.attributes()];\n case 1:\n _a = _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = this._config.attributes;\n _b.label = 3;\n case 3:\n defaultAttrs = _a;\n attributes = Object.assign({\n type: event.type,\n target: event.target.localName + \" with id \" + event.target.id,\n }, defaultAttrs, customAttrs);\n logger.debug('events needed to be recorded', events);\n logger.debug('attributes needed to be attached', customAttrs);\n if (events.indexOf(event.type) < 0) {\n logger.debug(\"event \" + event.type + \" is not selected to be recorded\");\n return [2 /*return*/];\n }\n this._tracker({\n name: eventName || 'event',\n attributes: attributes,\n }, this._config.provider).catch(function (e) {\n logger.debug(\"Failed to record the \" + event.type + \" event', \" + e);\n });\n return [2 /*return*/];\n }\n });\n });\n };\n return EventTracker;\n}());\nexport default EventTracker;\n//# sourceMappingURL=EventTracker.js.map","var HTML5_MEDIA_EVENT;\n(function (HTML5_MEDIA_EVENT) {\n HTML5_MEDIA_EVENT[\"PLAY\"] = \"play\";\n HTML5_MEDIA_EVENT[\"PAUSE\"] = \"pause\";\n HTML5_MEDIA_EVENT[\"ENDED\"] = \"Ended\";\n})(HTML5_MEDIA_EVENT || (HTML5_MEDIA_EVENT = {}));\nvar MEDIA_TYPE;\n(function (MEDIA_TYPE) {\n MEDIA_TYPE[\"IFRAME\"] = \"IFRAME\";\n MEDIA_TYPE[\"VIDEO\"] = \"VIDEO\";\n MEDIA_TYPE[\"AUDIO\"] = \"AUDIO\";\n})(MEDIA_TYPE || (MEDIA_TYPE = {}));\nvar EVENT_TYPE;\n(function (EVENT_TYPE) {\n EVENT_TYPE[\"PLAY\"] = \"Play\";\n EVENT_TYPE[\"ENDED\"] = \"Ended\";\n EVENT_TYPE[\"PAUSE\"] = \"Pause\";\n EVENT_TYPE[\"TIME_WATCHED\"] = \"TimeWatched\";\n})(EVENT_TYPE || (EVENT_TYPE = {}));\nvar MediaAutoTrack = /** @class */ (function () {\n function MediaAutoTrack(params, provider) {\n var _a;\n this.eventActionMapping = (_a = {},\n _a[EVENT_TYPE.ENDED] = this.endedEventAction.bind(this),\n _a[EVENT_TYPE.PLAY] = this.playEventAction.bind(this),\n _a[EVENT_TYPE.PAUSE] = this.pauseEventAction.bind(this),\n _a);\n var eventData = params.eventData;\n this._params = params;\n this._mediaElement = document.getElementById(eventData.properties['domElementId']);\n this._started = false;\n this._provider = provider;\n var mediaTrackFunMapping = {\n IFRAME: this._iframeMediaTracker,\n VIDEO: this._html5MediaTracker,\n AUDIO: this._html5MediaTracker,\n };\n mediaTrackFunMapping[this._mediaElement.tagName].bind(this)();\n this._initYoutubeFrame();\n }\n MediaAutoTrack.prototype._initYoutubeFrame = function () {\n this._youTubeIframeLoader = {\n src: 'https://www.youtube.com/iframe_api',\n loading: false,\n loaded: false,\n listeners: [],\n load: function (callback) {\n var _this = this;\n this.listeners.push(callback);\n if (this.loaded) {\n setTimeout(function () {\n _this.done();\n });\n return;\n }\n if (this.loading) {\n return;\n }\n this.loading = true;\n window['onYouTubeIframeAPIReady'] = function () {\n _this.loaded = true;\n _this.done();\n };\n var script = document.createElement('script');\n script.type = 'text/javascript';\n script.src = this.src;\n document.body.appendChild(script);\n },\n done: function () {\n delete window['onYouTubeIframeAPIReady'];\n while (this.listeners.length) {\n this.listeners.pop()(window['YT']);\n }\n },\n };\n };\n MediaAutoTrack.prototype._iframeMediaTracker = function () {\n var that = this;\n setInterval(function () {\n if (that._started) {\n that.recordEvent(MEDIA_TYPE.IFRAME, EVENT_TYPE.TIME_WATCHED);\n }\n }, 3 * 1000);\n this._youTubeIframeLoader.load(function (YT) {\n that._iframePlayer = new YT.Player(that._mediaElement.id, {\n events: { onStateChange: that._onPlayerStateChange.bind(that) },\n });\n });\n };\n MediaAutoTrack.prototype._onPlayerStateChange = function (event) {\n var iframeEventMapping = {\n 0: EVENT_TYPE.ENDED,\n 1: EVENT_TYPE.PLAY,\n 2: EVENT_TYPE.PAUSE,\n };\n var eventType = iframeEventMapping[event.data];\n if (eventType) {\n this.eventActionMapping[eventType](MEDIA_TYPE.IFRAME);\n }\n };\n MediaAutoTrack.prototype._html5MediaTracker = function () {\n var that = this;\n setInterval(function () {\n if (that._started) {\n that.recordEvent(MEDIA_TYPE.VIDEO, EVENT_TYPE.TIME_WATCHED);\n }\n }, 3 * 1000);\n this._mediaElement.addEventListener(HTML5_MEDIA_EVENT.PLAY, function () {\n that.eventActionMapping[EVENT_TYPE.PLAY](MEDIA_TYPE.VIDEO);\n }, false);\n this._mediaElement.addEventListener(HTML5_MEDIA_EVENT.PAUSE, function () {\n that.eventActionMapping[EVENT_TYPE.PAUSE](MEDIA_TYPE.VIDEO);\n }, false);\n this._mediaElement.addEventListener(HTML5_MEDIA_EVENT.ENDED, function () {\n that.eventActionMapping[EVENT_TYPE.ENDED](MEDIA_TYPE.VIDEO);\n }, false);\n };\n MediaAutoTrack.prototype.playEventAction = function (mediaType) {\n this._started = true;\n this.recordEvent(mediaType, EVENT_TYPE.PLAY);\n };\n MediaAutoTrack.prototype.pauseEventAction = function (mediaType) {\n this._started = false;\n this.recordEvent(mediaType, EVENT_TYPE.PAUSE);\n };\n MediaAutoTrack.prototype.endedEventAction = function (mediaType) {\n this._started = false;\n this.recordEvent(mediaType, EVENT_TYPE.ENDED);\n };\n MediaAutoTrack.prototype.recordEvent = function (mediaType, eventType) {\n var newParams = Object.assign({}, this._params);\n var eventData = newParams.eventData;\n eventData.eventType = eventType;\n if (mediaType === MEDIA_TYPE.VIDEO) {\n eventData.properties.timestamp = this._mediaElement.currentTime;\n eventData.properties.duration = this._mediaElement.duration;\n }\n else {\n eventData.properties.timestamp = this._financial(this._iframePlayer.getCurrentTime());\n eventData.properties.duration = this._financial(this._iframePlayer.getDuration());\n }\n var percentage = parseFloat(eventData.properties.timestamp) /\n parseFloat(eventData.properties.duration);\n eventData.properties.eventValue = Number(percentage.toFixed(4));\n delete eventData.properties.domElementId;\n this._provider.putToBuffer(newParams);\n };\n MediaAutoTrack.prototype._financial = function (x) {\n return Number.parseFloat(x).toFixed(4);\n };\n return MediaAutoTrack;\n}());\nexport { MediaAutoTrack };\n//# sourceMappingURL=MediaAutoTrack.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 __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// the session tracker for web\nimport { ConsoleLogger as Logger, JS } from '@aws-amplify/core';\nvar logger = new Logger('SessionTracker');\nvar defaultOpts = {\n enable: false,\n provider: 'AWSPinpoint',\n};\nvar initialEventSent = false;\nvar SessionTracker = /** @class */ (function () {\n function SessionTracker(tracker, opts) {\n this._config = Object.assign({}, defaultOpts, opts);\n this._tracker = tracker;\n this._hasEnabled = false;\n this._trackFunc = this._trackFunc.bind(this);\n this._trackBeforeUnload = this._trackBeforeUnload.bind(this);\n this.configure(this._config);\n }\n SessionTracker.prototype._envCheck = function () {\n if (!JS.browserOrNode().isBrowser) {\n return false;\n }\n if (!document || !document.addEventListener) {\n logger.debug('not in the supported web environment');\n return false;\n }\n if (typeof document.hidden !== 'undefined') {\n this._hidden = 'hidden';\n this._visibilityChange = 'visibilitychange';\n }\n else if (typeof document['msHidden'] !== 'undefined') {\n this._hidden = 'msHidden';\n this._visibilityChange = 'msvisibilitychange';\n }\n else if (typeof document['webkitHidden'] !== 'undefined') {\n this._hidden = 'webkitHidden';\n this._visibilityChange = 'webkitvisibilitychange';\n }\n else {\n logger.debug('not in the supported web environment');\n return false;\n }\n return true;\n };\n SessionTracker.prototype._trackFunc = function () {\n return __awaiter(this, void 0, void 0, function () {\n var customAttrs, _a, attributes;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n return [4 /*yield*/, this._config.attributes()];\n case 1:\n _a = _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = this._config.attributes;\n _b.label = 3;\n case 3:\n customAttrs = _a;\n attributes = Object.assign({}, customAttrs);\n if (document.visibilityState === this._hidden) {\n this._tracker({\n name: '_session.stop',\n attributes: attributes,\n }, this._config.provider).catch(function (e) {\n logger.debug('record session stop event failed.', e);\n });\n }\n else {\n this._tracker({\n name: '_session.start',\n attributes: attributes,\n }, this._config.provider).catch(function (e) {\n logger.debug('record session start event failed.', e);\n });\n }\n return [2 /*return*/];\n }\n });\n });\n };\n SessionTracker.prototype._trackBeforeUnload = function (event) {\n // before unload callback cannot be async => https://github.com/aws-amplify/amplify-js/issues/2088\n var _this = this;\n var customAttrs = typeof this._config.attributes === 'function'\n ? Promise.resolve(this._config.attributes())\n : Promise.resolve(this._config.attributes);\n customAttrs.then(function (custom) {\n var attributes = Object.assign({}, custom);\n _this._tracker({\n name: '_session.stop',\n attributes: attributes,\n immediate: true,\n }, _this._config.provider).catch(function (e) {\n logger.debug('record session stop event failed.', e);\n });\n });\n };\n // to keep configure a synchronized function\n SessionTracker.prototype._sendInitialEvent = function () {\n return __awaiter(this, void 0, void 0, function () {\n var customAttrs, _a, attributes;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0:\n if (initialEventSent) {\n logger.debug('the start session has been sent when the page is loaded');\n return [2 /*return*/];\n }\n else {\n initialEventSent = true;\n }\n if (!(typeof this._config.attributes === 'function')) return [3 /*break*/, 2];\n return [4 /*yield*/, this._config.attributes()];\n case 1:\n _a = _b.sent();\n return [3 /*break*/, 3];\n case 2:\n _a = this._config.attributes;\n _b.label = 3;\n case 3:\n customAttrs = _a;\n attributes = Object.assign({}, customAttrs);\n this._tracker({\n name: '_session.start',\n attributes: attributes,\n }, this._config.provider).catch(function (e) {\n logger.debug('record session start event failed.', e);\n });\n return [2 /*return*/];\n }\n });\n });\n };\n SessionTracker.prototype.configure = function (opts) {\n if (!this._envCheck()) {\n return this._config;\n }\n Object.assign(this._config, opts);\n if (this._config.enable && !this._hasEnabled) {\n // send a start session as soon as it's enabled\n this._sendInitialEvent();\n // listen on events\n document.addEventListener(this._visibilityChange, this._trackFunc, false);\n window.addEventListener('beforeunload', this._trackBeforeUnload, false);\n this._hasEnabled = true;\n }\n else if (!this._config.enable && this._hasEnabled) {\n document.removeEventListener(this._visibilityChange, this._trackFunc, false);\n window.removeEventListener('beforeunload', this._trackBeforeUnload, false);\n this._hasEnabled = false;\n }\n return this._config;\n };\n return SessionTracker;\n}());\nexport default SessionTracker;\n//# sourceMappingURL=SessionTracker.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 __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, Hub, Parser, } from '@aws-amplify/core';\nimport AWSPinpointProvider from './Providers/AWSPinpointProvider';\nimport { PageViewTracker, EventTracker, SessionTracker } from './trackers';\nvar logger = new Logger('AnalyticsClass');\nvar AMPLIFY_SYMBOL = (typeof Symbol !== 'undefined' &&\n typeof Symbol.for === 'function'\n ? Symbol.for('amplify_default')\n : '@@amplify_default');\nvar dispatchAnalyticsEvent = function (event, data, message) {\n Hub.dispatch('analytics', { event: event, data: data, message: message }, 'Analytics', AMPLIFY_SYMBOL);\n};\nvar trackers = {\n pageView: PageViewTracker,\n event: EventTracker,\n session: SessionTracker,\n};\n/**\n * Provide mobile analytics client functions\n */\nvar AnalyticsClass = /** @class */ (function () {\n /**\n * Initialize Analtyics\n * @param config - Configuration of the Analytics\n */\n function AnalyticsClass() {\n this._config = {};\n this._pluggables = [];\n this._disabled = false;\n this._trackers = {};\n this.record = this.record.bind(this);\n }\n AnalyticsClass.prototype.getModuleName = function () {\n return 'Analytics';\n };\n /**\n * configure Analytics\n * @param {Object} config - Configuration of the Analytics\n */\n AnalyticsClass.prototype.configure = function (config) {\n var _this = this;\n if (!config)\n return this._config;\n logger.debug('configure Analytics', config);\n var amplifyConfig = Parser.parseMobilehubConfig(config);\n this._config = Object.assign({}, this._config, amplifyConfig.Analytics, config);\n if (this._config['disabled']) {\n this._disabled = true;\n }\n this._pluggables.forEach(function (pluggable) {\n // for backward compatibility\n var providerConfig = pluggable.getProviderName() === 'AWSPinpoint' &&\n !_this._config['AWSPinpoint']\n ? _this._config\n : _this._config[pluggable.getProviderName()];\n pluggable.configure(__assign({ disabled: _this._config['disabled'] }, providerConfig));\n });\n if (this._pluggables.length === 0) {\n this.addPluggable(new AWSPinpointProvider());\n }\n // turn on the autoSessionRecord if not specified\n if (this._config['autoSessionRecord'] === undefined) {\n this._config['autoSessionRecord'] = true;\n }\n dispatchAnalyticsEvent('configured', null, \"The Analytics category has been configured successfully\");\n logger.debug('current configuration', this._config);\n return this._config;\n };\n /**\n * add plugin into Analytics category\n * @param {Object} pluggable - an instance of the plugin\n */\n AnalyticsClass.prototype.addPluggable = function (pluggable) {\n if (pluggable && pluggable.getCategory() === 'Analytics') {\n this._pluggables.push(pluggable);\n // for backward compatibility\n var providerConfig = pluggable.getProviderName() === 'AWSPinpoint' &&\n !this._config['AWSPinpoint']\n ? this._config\n : this._config[pluggable.getProviderName()];\n var config = __assign({ disabled: this._config['disabled'] }, providerConfig);\n pluggable.configure(config);\n return config;\n }\n };\n /**\n * Get the plugin object\n * @param providerName - the name of the plugin\n */\n AnalyticsClass.prototype.getPluggable = function (providerName) {\n for (var i = 0; i < this._pluggables.length; i += 1) {\n var pluggable = this._pluggables[i];\n if (pluggable.getProviderName() === providerName) {\n return pluggable;\n }\n }\n logger.debug('No plugin found with providerName', providerName);\n return null;\n };\n /**\n * Remove the plugin object\n * @param providerName - the name of the plugin\n */\n AnalyticsClass.prototype.removePluggable = function (providerName) {\n var idx = 0;\n while (idx < this._pluggables.length) {\n if (this._pluggables[idx].getProviderName() === providerName) {\n break;\n }\n idx += 1;\n }\n if (idx === this._pluggables.length) {\n logger.debug('No plugin found with providerName', providerName);\n return;\n }\n else {\n this._pluggables.splice(idx, idx + 1);\n return;\n }\n };\n /**\n * stop sending events\n */\n AnalyticsClass.prototype.disable = function () {\n this._disabled = true;\n };\n /**\n * start sending events\n */\n AnalyticsClass.prototype.enable = function () {\n this._disabled = false;\n };\n /**\n * Record Session start\n * @return - A promise which resolves if buffer doesn't overflow\n */\n AnalyticsClass.prototype.startSession = function (provider) {\n return __awaiter(this, void 0, void 0, function () {\n var params;\n return __generator(this, function (_a) {\n params = { event: { name: '_session.start' }, provider: provider };\n return [2 /*return*/, this._sendEvent(params)];\n });\n });\n };\n /**\n * Record Session stop\n * @return - A promise which resolves if buffer doesn't overflow\n */\n AnalyticsClass.prototype.stopSession = function (provider) {\n return __awaiter(this, void 0, void 0, function () {\n var params;\n return __generator(this, function (_a) {\n params = { event: { name: '_session.stop' }, provider: provider };\n return [2 /*return*/, this._sendEvent(params)];\n });\n });\n };\n /**\n * Record one analytic event and send it to Pinpoint\n * @param {String} name - The name of the event\n * @param {Object} [attributs] - Attributes of the event\n * @param {Object} [metrics] - Event metrics\n * @return - A promise which resolves if buffer doesn't overflow\n */\n AnalyticsClass.prototype.record = function (event, provider, metrics) {\n return __awaiter(this, void 0, void 0, function () {\n var errMsg, params;\n return __generator(this, function (_a) {\n if (!this.isAnalyticsConfigured()) {\n errMsg = 'Analytics has not been configured';\n logger.debug(errMsg);\n return [2 /*return*/, Promise.reject(new Error(errMsg))];\n }\n params = null;\n // this is just for compatibility, going to be deprecated\n if (typeof event === 'string') {\n params = {\n event: {\n name: event,\n attributes: provider,\n metrics: metrics,\n },\n provider: 'AWSPinpoint',\n };\n }\n else {\n params = { event: event, provider: provider };\n }\n return [2 /*return*/, this._sendEvent(params)];\n });\n });\n };\n AnalyticsClass.prototype.updateEndpoint = function (attrs, provider) {\n return __awaiter(this, void 0, void 0, function () {\n var event;\n return __generator(this, function (_a) {\n event = Object.assign({ name: '_update_endpoint' }, attrs);\n return [2 /*return*/, this.record(event, provider)];\n });\n });\n };\n AnalyticsClass.prototype._sendEvent = function (params) {\n var _this = this;\n if (!this.isAnalyticsConfigured()) {\n var errMsg = 'Analytics has not been configured';\n logger.debug(errMsg);\n return Promise.reject(new Error(errMsg));\n }\n if (this._disabled) {\n logger.debug('Analytics has been disabled');\n return Promise.resolve();\n }\n var provider = params.provider ? params.provider : 'AWSPinpoint';\n return new Promise(function (resolve, reject) {\n _this._pluggables.forEach(function (pluggable) {\n if (pluggable.getProviderName() === provider) {\n pluggable.record(params, { resolve: resolve, reject: reject });\n }\n });\n });\n };\n AnalyticsClass.prototype.autoTrack = function (trackerType, opts) {\n if (!trackers[trackerType]) {\n logger.debug('invalid tracker type');\n return;\n }\n // to sync up two different configuration ways of auto session tracking\n if (trackerType === 'session') {\n this._config['autoSessionRecord'] = opts['enable'];\n }\n var tracker = this._trackers[trackerType];\n if (!tracker) {\n this._trackers[trackerType] = new trackers[trackerType](this.record, opts);\n }\n else {\n tracker.configure(opts);\n }\n };\n AnalyticsClass.prototype.isAnalyticsConfigured = function () {\n return this._config && Object.entries(this._config).length > 0;\n };\n return AnalyticsClass;\n}());\nexport default AnalyticsClass;\n//# sourceMappingURL=Analytics.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 __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, Credentials } from '@aws-amplify/core';\nimport * as Kinesis from 'aws-sdk/clients/kinesis';\nvar logger = new Logger('AWSKineisProvider');\n// events buffer\nvar BUFFER_SIZE = 1000;\nvar FLUSH_SIZE = 100;\nvar FLUSH_INTERVAL = 5 * 1000; // 5s\nvar RESEND_LIMIT = 5;\nvar AWSKinesisProvider = /** @class */ (function () {\n function AWSKinesisProvider(config) {\n this._buffer = [];\n this._config = config ? config : {};\n this._config.bufferSize = this._config.bufferSize || BUFFER_SIZE;\n this._config.flushSize = this._config.flushSize || FLUSH_SIZE;\n this._config.flushInterval = this._config.flushInterval || FLUSH_INTERVAL;\n this._config.resendLimit = this._config.resendLimit || RESEND_LIMIT;\n // events batch\n var that = this;\n // flush event buffer\n this._setupTimer();\n }\n AWSKinesisProvider.prototype._setupTimer = function () {\n var _this = this;\n if (this._timer) {\n clearInterval(this._timer);\n }\n var _a = this._config, flushSize = _a.flushSize, flushInterval = _a.flushInterval;\n var that = this;\n this._timer = setInterval(function () {\n var size = _this._buffer.length < flushSize ? _this._buffer.length : flushSize;\n var events = [];\n for (var i = 0; i < size; i += 1) {\n var params = _this._buffer.shift();\n events.push(params);\n }\n that._sendFromBuffer(events);\n }, flushInterval);\n };\n /**\n * get the category of the plugin\n */\n AWSKinesisProvider.prototype.getCategory = function () {\n return 'Analytics';\n };\n /**\n * get provider name of the plugin\n */\n AWSKinesisProvider.prototype.getProviderName = function () {\n return 'AWSKinesis';\n };\n /**\n * configure the plugin\n * @param {Object} config - configuration\n */\n AWSKinesisProvider.prototype.configure = function (config) {\n logger.debug('configure Analytics', config);\n var conf = config ? config : {};\n this._config = Object.assign({}, this._config, conf);\n this._setupTimer();\n return this._config;\n };\n /**\n * record an event\n * @param {Object} params - the params of an event\n */\n AWSKinesisProvider.prototype.record = function (params) {\n return __awaiter(this, void 0, void 0, function () {\n var credentials;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, this._getCredentials()];\n case 1:\n credentials = _a.sent();\n if (!credentials)\n return [2 /*return*/, Promise.resolve(false)];\n Object.assign(params, { config: this._config, credentials: credentials });\n return [2 /*return*/, this._putToBuffer(params)];\n }\n });\n });\n };\n AWSKinesisProvider.prototype.updateEndpoint = function (params) {\n logger.debug('updateEndpoint is not implemented in Kinesis provider');\n return Promise.resolve(true);\n };\n /**\n * @private\n * @param params - params for the event recording\n * Put events into buffer\n */\n AWSKinesisProvider.prototype._putToBuffer = function (params) {\n if (this._buffer.length < BUFFER_SIZE) {\n this._buffer.push(params);\n return Promise.resolve(true);\n }\n else {\n logger.debug('exceed analytics events buffer size');\n return Promise.reject(false);\n }\n };\n AWSKinesisProvider.prototype._sendFromBuffer = function (events) {\n var _this = this;\n // collapse events by credentials\n // events = [ {params} ]\n var eventsGroups = [];\n var preCred = null;\n var group = [];\n for (var i = 0; i < events.length; i += 1) {\n var cred = events[i].credentials;\n if (i === 0) {\n group.push(events[i]);\n preCred = cred;\n }\n else {\n if (cred.sessionToken === preCred.sessionToken &&\n cred.identityId === preCred.identityId) {\n logger.debug('no change for cred, put event in the same group');\n group.push(events[i]);\n }\n else {\n eventsGroups.push(group);\n group = [];\n group.push(events[i]);\n preCred = cred;\n }\n }\n }\n eventsGroups.push(group);\n eventsGroups.map(function (evts) {\n _this._sendEvents(evts);\n });\n };\n AWSKinesisProvider.prototype._sendEvents = function (group) {\n var _this = this;\n if (group.length === 0) {\n // logger.debug('events array is empty, directly return');\n return;\n }\n var _a = group[0], config = _a.config, credentials = _a.credentials;\n var initClients = this._init(config, credentials);\n if (!initClients)\n return false;\n var records = {};\n group.map(function (params) {\n // spit by streamName\n var evt = params.event;\n var streamName = evt.streamName;\n if (records[streamName] === undefined) {\n records[streamName] = [];\n }\n var Data = JSON.stringify(evt.data);\n var PartitionKey = evt.partitionKey || 'partition-' + credentials.identityId;\n var record = { Data: Data, PartitionKey: PartitionKey };\n records[streamName].push(record);\n });\n Object.keys(records).map(function (streamName) {\n logger.debug('putting records to kinesis with records', records[streamName]);\n _this._kinesis.putRecords({\n Records: records[streamName],\n StreamName: streamName,\n }, function (err, data) {\n if (err)\n logger.debug('Failed to upload records to Kinesis', err);\n else\n logger.debug('Upload records to stream', streamName);\n });\n });\n };\n AWSKinesisProvider.prototype._init = function (config, credentials) {\n logger.debug('init clients');\n if (this._kinesis &&\n this._config.credentials &&\n this._config.credentials.sessionToken === credentials.sessionToken &&\n this._config.credentials.identityId === credentials.identityId) {\n logger.debug('no change for analytics config, directly return from init');\n return true;\n }\n this._config.credentials = credentials;\n var region = config.region;\n logger.debug('initialize kinesis with credentials', credentials);\n this._kinesis = new Kinesis({\n apiVersion: '2013-12-02',\n region: region,\n credentials: credentials,\n });\n return true;\n };\n /**\n * @private\n * check if current credentials exists\n */\n AWSKinesisProvider.prototype._getCredentials = function () {\n var that = this;\n return Credentials.get()\n .then(function (credentials) {\n if (!credentials)\n return null;\n logger.debug('set credentials for analytics', that._config.credentials);\n return Credentials.shear(credentials);\n })\n .catch(function (err) {\n logger.debug('ensure credentials error', err);\n return null;\n });\n };\n return AWSKinesisProvider;\n}());\nexport default AWSKinesisProvider;\n//# sourceMappingURL=AWSKinesisProvider.js.map","import { isEmpty, isEqual } from 'lodash';\nimport { v1 as uuid } from 'uuid';\nimport { ConsoleLogger as Logger, JS } from '@aws-amplify/core';\nimport Cache from '@aws-amplify/cache';\nvar PERSONALIZE_CACHE = '_awsct';\nvar PERSONALIZE_CACHE_USERID = '_awsct_uid';\nvar PERSONALIZE_CACHE_SESSIONID = '_awsct_sid';\nvar DEFAULT_CACHE_PREFIX = 'peronslize';\nvar TIMER_INTERVAL = 30 * 1000;\nvar DELIMITER = '.';\nvar CACHE_EXPIRY_IN_DAYS = 7;\nvar logger = new Logger('AmazonPersonalizeProvider');\nvar SessionInfoManager = /** @class */ (function () {\n function SessionInfoManager(prefixKey) {\n if (prefixKey === void 0) { prefixKey = ''; }\n this._isBrowser = JS.browserOrNode().isBrowser;\n this._timerKey = uuid().substr(0, 15);\n this._refreshTimer();\n }\n SessionInfoManager.prototype._refreshTimer = function () {\n if (this._timer) {\n clearInterval(this._timer);\n }\n var that = this;\n this._timer = setInterval(function () {\n that._timerKey = uuid().substr(0, 15);\n }, TIMER_INTERVAL);\n };\n SessionInfoManager.prototype.storeValue = function (key, value) {\n var today = new Date();\n var expire = new Date();\n expire.setTime(today.getTime() + 3600000 * 24 * CACHE_EXPIRY_IN_DAYS);\n Cache.setItem(this._getCachePrefix(key), value, {\n expires: expire.getTime(),\n });\n };\n SessionInfoManager.prototype.retrieveValue = function (key) {\n return Cache.getItem(this._getCachePrefix(key));\n };\n SessionInfoManager.prototype._getCachePrefix = function (key) {\n if (this._isBrowser) {\n return key + DELIMITER + window.location.host;\n }\n return DEFAULT_CACHE_PREFIX;\n };\n SessionInfoManager.prototype.getTimerKey = function () {\n return this._timerKey;\n };\n SessionInfoManager.prototype.updateSessionInfo = function (userId, sessionInfo) {\n var existUserId = sessionInfo.userId;\n var existSessionId = sessionInfo.sessionId;\n if (this._isRequireNewSession(userId, existUserId, existSessionId)) {\n var newSessionId = uuid();\n this.storeValue(PERSONALIZE_CACHE_USERID, userId);\n this.storeValue(PERSONALIZE_CACHE_SESSIONID, newSessionId);\n sessionInfo.sessionId = newSessionId;\n }\n else if (this._isRequireUpdateSessionInfo(userId, existUserId, existSessionId)) {\n this.storeValue(PERSONALIZE_CACHE_USERID, userId);\n }\n sessionInfo.userId = userId;\n };\n SessionInfoManager.prototype._isRequireUpdateSessionInfo = function (userId, cachedSessionUserId, cachedSessionSessionId) {\n // anonymouse => sign in : hasSession && s_userId == null && curr_userId !=null\n var isNoCachedSession = isEmpty(cachedSessionSessionId);\n return (!isNoCachedSession && isEmpty(cachedSessionUserId) && !isEmpty(userId));\n };\n SessionInfoManager.prototype.retrieveSessionInfo = function (trackingId) {\n var sessionInfo = {};\n sessionInfo.trackingId = trackingId;\n sessionInfo.sessionId = this.retrieveValue(PERSONALIZE_CACHE_SESSIONID);\n sessionInfo.userId = this.retrieveValue(PERSONALIZE_CACHE_USERID);\n if (isEmpty(sessionInfo.sessionId)) {\n sessionInfo.sessionId = uuid();\n this.storeValue(PERSONALIZE_CACHE_SESSIONID, sessionInfo.sessionId);\n }\n this.storeValue(PERSONALIZE_CACHE, trackingId);\n return sessionInfo;\n };\n SessionInfoManager.prototype._isRequireNewSession = function (userId, cachedSessionUserId, cachedSessionSessionId) {\n // new session => 1. no cached session info 2. signOut: s_userId !=null && curr_userId ==null\n // 3. switch account: s_userId !=null && curr_userId !=null && s_userId != curr_userId\n var isNoCachedSession = isEmpty(cachedSessionSessionId);\n var isSignoutCase = isEmpty(userId) && !isEmpty(cachedSessionUserId);\n var isSwitchUserCase = !isEmpty(userId) &&\n !isEmpty(cachedSessionUserId) &&\n !isEqual(userId, cachedSessionUserId);\n return isNoCachedSession || isSignoutCase || isSwitchUserCase;\n };\n return SessionInfoManager;\n}());\nexport { SessionInfoManager };\n//# sourceMappingURL=SessionInfoManager.js.map","/*\n * Copyright 2019-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"). You may not use this file except in compliance with\n * the License. A copy of the License is located at\n *\n * http://aws.amazon.com/apache2.0/\n *\n * or in the \"license\" file accompanying this file. This file is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR\n * CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions\n * and limitations under the License.\n */\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { 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, Credentials, JS } from '@aws-amplify/core';\nimport * as PersonalizeEvents from 'aws-sdk/clients/personalizeevents';\nimport { SessionInfoManager, MediaAutoTrack, } from './AmazonPersonalizeHelper';\nimport { isEmpty, isEqual, get } from 'lodash';\nvar logger = new Logger('AmazonPersonalizeProvider');\n// events buffer\nvar FLUSH_SIZE = 5;\nvar FLUSH_SIZE_THRESHHOLD = 10;\nvar FLUSH_INTERVAL = 5 * 1000; // 5s\nvar IDENTIFY_EVENT = 'Identify';\nvar AmazonPersonalizeProvider = /** @class */ (function () {\n function AmazonPersonalizeProvider(config) {\n this._buffer = [];\n this._config = config ? config : {};\n this._config.flushSize =\n this._config.flushSize > 0 &&\n this._config.flushSize <= FLUSH_SIZE_THRESHHOLD\n ? this._config.flushSize\n : FLUSH_SIZE;\n this._config.flushInterval = this._config.flushInterval || FLUSH_INTERVAL;\n this._sessionManager = new SessionInfoManager();\n if (!isEmpty(this._config.trackingId)) {\n this._sessionInfo = this._sessionManager.retrieveSessionInfo(this._config.trackingId);\n }\n this._isBrowser = JS.browserOrNode().isBrowser;\n // flush event buffer\n this._setupTimer();\n }\n AmazonPersonalizeProvider.prototype._setupTimer = function () {\n if (this._timer) {\n clearInterval(this._timer);\n }\n var _a = this._config, flushSize = _a.flushSize, flushInterval = _a.flushInterval;\n var that = this;\n this._timer = setInterval(function () {\n that._sendFromBuffer();\n }, flushInterval);\n };\n /**\n * Record event\n * @param eventType - type of the event action. e.g. \"Click\"\n * @param properties - properties of the event\n * @return Promise\n */\n AmazonPersonalizeProvider.prototype.record = function (params) {\n return __awaiter(this, void 0, void 0, function () {\n var credentials, _a, eventType, properties, requestParams, isLoaded;\n return __generator(this, function (_b) {\n switch (_b.label) {\n case 0: return [4 /*yield*/, this._getCredentials()];\n case 1:\n credentials = _b.sent();\n if (!credentials)\n return [2 /*return*/, Promise.resolve(false)];\n Object.assign(params, {\n config: this._config,\n credentials: credentials,\n sentAt: new Date().getTime() / 1000,\n });\n _a = params.event, eventType = _a.eventType, properties = _a.properties;\n if (eventType === IDENTIFY_EVENT) {\n this._sessionManager.updateSessionInfo(properties && properties.userId ? properties.userId : '', this._sessionInfo);\n return [2 /*return*/];\n }\n else if (!isEmpty(params.event.userId)) {\n this._sessionManager.updateSessionInfo(params.event.userId, this._sessionInfo);\n }\n requestParams = this.generateRequestParams(params, this._sessionInfo);\n if (!(eventType === 'MediaAutoTrack')) return [3 /*break*/, 7];\n if (!this._isBrowser) return [3 /*break*/, 5];\n if (!!isEmpty(get(requestParams, 'eventData.properties.domElementId', null))) return [3 /*break*/, 3];\n return [4 /*yield*/, this.isElementFullyLoaded(this.loadElement, requestParams.eventData.properties['domElementId'], 500, 5)];\n case 2:\n isLoaded = _b.sent();\n if (isLoaded) {\n new MediaAutoTrack(requestParams, this);\n }\n else {\n logger.debug('Cannot find the media element.');\n }\n return [3 /*break*/, 4];\n case 3:\n logger.debug(\"Missing domElementId field in 'properties' for MediaAutoTrack event type.\");\n _b.label = 4;\n case 4: return [3 /*break*/, 6];\n case 5:\n logger.debug('MediaAutoTrack only for browser');\n _b.label = 6;\n case 6: return [2 /*return*/];\n case 7: return [2 /*return*/, this.putToBuffer(requestParams)];\n }\n });\n });\n };\n AmazonPersonalizeProvider.prototype.loadElement = function (domId) {\n return new Promise(function (resolve, reject) {\n if (document.getElementById(domId) &&\n document.getElementById(domId).clientHeight) {\n return resolve(true);\n }\n else {\n return reject(true);\n }\n });\n };\n AmazonPersonalizeProvider.prototype.isElementFullyLoaded = function (operation, params, delay, times) {\n var _this = this;\n var wait = function (ms) { return new Promise(function (r) { return setTimeout(r, ms); }); };\n return new Promise(function (resolve, reject) {\n return operation(params)\n .then(resolve)\n .catch(function (reason) {\n if (times - 1 > 0) {\n return wait(delay)\n .then(_this.isElementFullyLoaded.bind(null, operation, params, delay, times - 1))\n .then(resolve)\n .catch(reject);\n }\n return reject(reason);\n });\n });\n };\n /**\n * get the category of the plugin\n */\n AmazonPersonalizeProvider.prototype.getCategory = function () {\n return 'Analytics';\n };\n /**\n * get provider name of the plugin\n */\n AmazonPersonalizeProvider.prototype.getProviderName = function () {\n return 'AmazonPersonalize';\n };\n /**\n * configure the plugin\n * @param {Object} config - configuration\n */\n AmazonPersonalizeProvider.prototype.configure = function (config) {\n logger.debug('configure Analytics', config);\n var conf = config ? config : {};\n this._config = Object.assign({}, this._config, conf);\n if (!isEmpty(this._config.trackingId)) {\n this._sessionInfo = this._sessionManager.retrieveSessionInfo(this._config.trackingId);\n }\n this._setupTimer();\n return this._config;\n };\n /**\n * Generate the requestParams from customer input params and sessionInfo\n * @private\n * @param eventData - customer input for event data\n * @param api - api name\n * @return RequestParams - wrapper object with all information required for make request\n */\n AmazonPersonalizeProvider.prototype.generateRequestParams = function (params, sessionInfo) {\n var requestParams = {};\n var _a = params.event, eventType = _a.eventType, properties = _a.properties;\n requestParams.eventData = { eventType: eventType, properties: properties };\n requestParams.sessionInfo = sessionInfo;\n requestParams.sentAt = params.sentAt;\n requestParams.credentials = params.credentials;\n requestParams.config = params.config;\n return requestParams;\n };\n /**\n * record an event\n * @param {Object} params - the params of an event\n */\n AmazonPersonalizeProvider.prototype._sendEvents = function (group) {\n var groupLen = group.length;\n if (groupLen === 0) {\n logger.debug('events array is empty, directly return');\n return;\n }\n var _a = group[0], config = _a.config, credentials = _a.credentials, sessionInfo = _a.sessionInfo;\n var initClients = this._init(config, credentials);\n if (!initClients)\n return false;\n if (groupLen > 0) {\n var events = [];\n for (var i = 0; i < groupLen; i += 1) {\n var params = group.shift();\n var eventPayload = this._generateSingleRecordPayload(params, sessionInfo);\n events.push(eventPayload);\n }\n var payload = {};\n payload.trackingId = sessionInfo.trackingId;\n payload.sessionId = sessionInfo.sessionId;\n payload.userId = sessionInfo.userId;\n payload.eventList = events;\n this._personalize.putEvents(payload, function (err, data) {\n if (err)\n logger.debug('Failed to call putEvents in Personalize', err);\n else\n logger.debug('Put events');\n });\n }\n };\n /**\n * Put event into buffer\n * @private\n * @param params - params for the event recording\n */\n AmazonPersonalizeProvider.prototype.putToBuffer = function (params) {\n if (this._buffer.length < this._config.flushSize) {\n this._buffer.push(params);\n }\n else {\n this._buffer.push(params);\n this._sendFromBuffer();\n }\n return Promise.resolve(true);\n };\n /**\n * flush the buffer and batch sending the request\n * @private\n * @param eventsParams - the buffer for cache the payload\n */\n AmazonPersonalizeProvider.prototype._sendFromBuffer = function () {\n var _this = this;\n var size = this._buffer.length;\n if (size <= 0)\n return;\n var eventsGroups = [];\n var preCred = null;\n var group = [];\n for (var i = 0; i < size; i += 1) {\n var currRequestParams = this._buffer.shift();\n var cred = currRequestParams.credentials;\n var sessionInfo = currRequestParams.sessionInfo;\n if (i === 0) {\n group.push(currRequestParams);\n preCred = cred;\n }\n else {\n if (isEqual(sessionInfo, this._sessionInfo) &&\n cred.sessionToken === preCred.sessionToken &&\n cred.identityId === preCred.identityId) {\n logger.debug('no change for cred, put event in the same group');\n group.push(currRequestParams);\n }\n else {\n eventsGroups.push(group);\n group = [];\n group.push(currRequestParams);\n preCred = cred;\n this._sessionInfo = sessionInfo;\n }\n }\n }\n eventsGroups.push(group);\n eventsGroups.map(function (group) {\n _this._sendEvents(group);\n });\n };\n /**\n * Generate the record payload for single event\n * @private\n * @param params - RequestParams\n */\n AmazonPersonalizeProvider.prototype._generateSingleRecordPayload = function (params, sessionInfo) {\n var eventData = params.eventData, sentAt = params.sentAt;\n var trackPayload = {};\n trackPayload.sentAt = sentAt;\n trackPayload.properties = eventData.properties;\n trackPayload.eventId =\n this._sessionManager.getTimerKey() + sessionInfo.sessionId;\n trackPayload.eventType = eventData.eventType;\n return trackPayload;\n };\n /**\n * Initialize the personalize client\n * @private\n * @param params - RequestParams\n */\n AmazonPersonalizeProvider.prototype._init = function (config, credentials) {\n logger.debug('init clients');\n if (this._personalize &&\n this._config.credentials &&\n this._config.credentials.sessionToken === credentials.sessionToken &&\n this._config.credentials.identityId === credentials.identityId) {\n logger.debug('no change for analytics config, directly return from init');\n return true;\n }\n this._config.credentials = credentials;\n var region = config.region;\n logger.debug('initialize personalize with credentials', credentials);\n this._personalize = new PersonalizeEvents({\n apiVersion: '2018-03-22',\n region: region,\n credentials: credentials,\n });\n return true;\n };\n /**\n * check if current credentials exists\n * @private\n */\n AmazonPersonalizeProvider.prototype._getCredentials = function () {\n var that = this;\n return Credentials.get()\n .then(function (credentials) {\n if (!credentials)\n return null;\n logger.debug('set credentials for analytics', that._config.credentials);\n return Credentials.shear(credentials);\n })\n .catch(function (err) {\n logger.debug('ensure credentials error', err);\n return null;\n });\n };\n return AmazonPersonalizeProvider;\n}());\nexport default AmazonPersonalizeProvider;\n//# sourceMappingURL=AmazonPersonalizeProvider.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 */\nimport AnalyticsClass from './Analytics';\nimport Amplify, { ConsoleLogger as Logger, Hub, } from '@aws-amplify/core';\nvar logger = new Logger('Analytics');\nvar endpointUpdated = false;\nvar authConfigured = false;\nvar analyticsConfigured = false;\nvar _instance = null;\nif (!_instance) {\n logger.debug('Create Analytics Instance');\n _instance = new AnalyticsClass();\n}\nvar Analytics = _instance;\nAmplify.register(Analytics);\nexport default Analytics;\nexport { AnalyticsClass };\nexport * from './Providers';\nvar listener = function (capsule) {\n var channel = capsule.channel, payload = capsule.payload, source = capsule.source;\n logger.debug('on hub capsule ' + channel, payload);\n switch (channel) {\n case 'auth':\n authEvent(payload);\n break;\n case 'storage':\n storageEvent(payload);\n break;\n case 'analytics':\n analyticsEvent(payload);\n break;\n default:\n break;\n }\n};\nvar storageEvent = function (payload) {\n var _a = payload.data, attrs = _a.attrs, metrics = _a.metrics;\n if (!attrs)\n return;\n if (analyticsConfigured) {\n Analytics.record({\n name: 'Storage',\n attributes: attrs,\n metrics: metrics,\n }).catch(function (e) {\n logger.debug('Failed to send the storage event automatically', e);\n });\n }\n};\nvar authEvent = function (payload) {\n var event = payload.event;\n if (!event) {\n return;\n }\n switch (event) {\n case 'signIn':\n if (authConfigured && analyticsConfigured) {\n Analytics.record({\n name: '_userauth.sign_in',\n }).catch(function (e) {\n logger.debug('Failed to send the sign in event automatically', e);\n });\n }\n break;\n case 'signUp':\n if (authConfigured && analyticsConfigured) {\n Analytics.record({\n name: '_userauth.sign_up',\n }).catch(function (e) {\n logger.debug('Failed to send the sign up event automatically', e);\n });\n }\n break;\n case 'signOut':\n break;\n case 'signIn_failure':\n if (authConfigured && analyticsConfigured) {\n Analytics.record({\n name: '_userauth.auth_fail',\n }).catch(function (e) {\n logger.debug('Failed to send the sign in failure event automatically', e);\n });\n }\n break;\n case 'configured':\n authConfigured = true;\n if (authConfigured && analyticsConfigured) {\n sendEvents();\n }\n break;\n }\n};\nvar analyticsEvent = function (payload) {\n var event = payload.event;\n if (!event)\n return;\n switch (event) {\n case 'pinpointProvider_configured':\n analyticsConfigured = true;\n if (authConfigured && analyticsConfigured) {\n sendEvents();\n }\n break;\n }\n};\nvar sendEvents = function () {\n var config = Analytics.configure();\n if (!endpointUpdated && config['autoSessionRecord']) {\n Analytics.updateEndpoint({ immediate: true }).catch(function (e) {\n logger.debug('Failed to update the endpoint', e);\n });\n endpointUpdated = true;\n }\n Analytics.autoTrack('session', {\n enable: config['autoSessionRecord'],\n });\n};\nHub.listen('auth', listener);\nHub.listen('storage', listener);\nHub.listen('analytics', listener);\n//# sourceMappingURL=index.js.map"],"sourceRoot":""}