{"version":3,"sources":["inovestor.ms.web.js","inovestor.ms.web.interceptor.js"],"names":["window","$","inovestor","ms","web","config","storageManager","storage","sessionStorage","getItem","key","value","JSON","stringify","parse","regexValues","exec","Date","UTC","removeItem","setItem","tokenManager","storageKey","getTokens","setTokens","accessToken","refreshToken","identityToken","tokens","refreshTokensAsync","refreshTokenEndpoint","deferred","Deferred","currentTokens","get","done","data","resolve","reject","fail","promise","dataCache","jQuery","undefined","httpBuffer","buffer","this","add","request","originalResponse","push","retryAll","i","length","item","retryHttpRequest","headers","authorization","Authorization","ajax","status","response","rejectAll","isRefreshingTokens","pluginHttpRequestInterceptor","url","options","core","isNullOrUndefined","post","then","always"],"mappings":"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","file":"../site.min.js","sourcesContent":["; (function (window, $, undefined) {\r\n inovestor = window.inovestor || {};\r\n inovestor.ms = inovestor.ms || {};\r\n inovestor.ms.web = inovestor.ms.web || {};\r\n inovestor.ms.web.config = inovestor.ms.web.config || {};\r\n\r\n inovestor.ms.web.storageManager = new (function () {\r\n var storage = window.sessionStorage;\r\n\r\n var manager = {\r\n getItem: getItem,\r\n removeItem: removeItem,\r\n setItem: setItem\r\n };\r\n\r\n return manager;\r\n\r\n function getItem(key) {\r\n var dateTimeReviver = function (key, value) {\r\n if (typeof value === 'string') {\r\n var regexValues = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2}(?:\\.\\d*)?)(Z|([+\\-])(\\d{2}):(\\d{2}))$/.exec(value);\r\n if (regexValues) {\r\n // JSON.stringify converts dates to UTC so parse them back\r\n return new Date(Date.UTC(+regexValues[1], +regexValues[2] - 1, +regexValues[3], +regexValues[4], +regexValues[5], +regexValues[6]));\r\n }\r\n }\r\n return value;\r\n };\r\n var value = storage.getItem(JSON.stringify(key));\r\n\r\n return JSON.parse(value, dateTimeReviver);\r\n }\r\n\r\n function removeItem(key) {\r\n storage.removeItem(JSON.stringify(key));\r\n }\r\n\r\n function setItem(key, value) {\r\n storage.setItem(JSON.stringify(key), JSON.stringify(value));\r\n }\r\n })();\r\n\r\n inovestor.ms.web.tokenManager = new (function () {\r\n var storageKey = 'authInfo';\r\n\r\n var manager = {\r\n getTokens: getTokens,\r\n setTokens: setTokens,\r\n refreshTokensAsync: refreshTokensAsync\r\n };\r\n\r\n return manager;\r\n\r\n function getTokens() {\r\n return inovestor.ms.web.storageManager.getItem(storageKey);\r\n }\r\n\r\n function setTokens(accessToken, refreshToken, identityToken) {\r\n var tokens = {\r\n accessToken: accessToken,\r\n refreshToken: refreshToken,\r\n identityToken: identityToken\r\n };\r\n\r\n inovestor.ms.web.storageManager.setItem(storageKey, tokens);\r\n }\r\n\r\n function refreshTokensAsync(refreshTokenEndpoint) {\r\n var deferred = $.Deferred();\r\n var currentTokens = inovestor.ms.web.tokenManager.getTokens();\r\n\r\n if (currentTokens && currentTokens.refreshToken) {\r\n $.get(refreshTokenEndpoint, { refreshToken: currentTokens.refreshToken })\r\n .done(function (data) {\r\n if (data && data.accessToken && data.refreshToken) {\r\n inovestor.ms.web.tokenManager.setTokens(data.accessToken, data.refreshToken, currentTokens.identityToken);\r\n deferred.resolve(data.accessToken);\r\n } else {\r\n deferred.reject();\r\n }\r\n })\r\n .fail(function () {\r\n deferred.reject();\r\n });\r\n } else {\r\n deferred.reject();\r\n }\r\n\r\n return deferred.promise();\r\n }\r\n })();\r\n\r\n inovestor.ms.web.dataCache = {};\r\n\r\n})(window, jQuery);","// This is dependant on\r\n//\t\tinovestor.ms.web\r\n//\t\tinovestor.ms.core\r\n\r\n; (function (window, $, undefined) {\r\n\r\n\tvar httpBuffer = new HttpBuffer();\r\n\tvar isRefreshingTokens = false;\r\n\r\n\tfunction refreshTokensAndRetryAll(refreshTokenEndpoint, refreshToken) {\r\n\t\tvar refreshTokensSuccessCallback = function (response) {\r\n\t\t\tif (response && response.accessToken && response.refreshToken) {\r\n\t\t\t\t// Get the current tokens (as to not overwrite the identity token) and persists the new ones.\r\n\t\t\t\tvar currentTokens = inovestor.ms.web.tokenManager.getTokens();\r\n\t\t\t\tinovestor.ms.web.tokenManager.setTokens(response.accessToken, response.refreshToken, currentTokens.identityToken);\r\n\r\n\t\t\t\t// Retry all previously failed requests.\r\n\t\t\t\thttpBuffer.retryAll(response.accessToken);\r\n\t\t\t} else {\r\n\t\t\t\tinovestor.ms.web.tokenManager.setTokens(undefined, undefined, undefined);\r\n\t\t\t\thttpBuffer.rejectAll();\r\n\t\t\t}\r\n\t\t}\r\n\t\tvar refreshTokensErrorCallback = function (response) {\r\n\t\t\tinovestor.ms.web.tokenManager.setTokens(undefined, undefined, undefined);\r\n\t\t\thttpBuffer.rejectAll();\r\n\t\t}\r\n\r\n\t\t// Call the refresh token endpoint to try and get some new tokens\r\n\t\t$.post(refreshTokenEndpoint, { refreshToken: refreshToken })\r\n\t\t\t.then(refreshTokensSuccessCallback, refreshTokensErrorCallback)\r\n\t\t\t.always(function () { isRefreshingTokens = false; });\r\n\t}\r\n\r\n\tfunction HttpBuffer() {\r\n\t\t// Holds all the requests, so they can be re-requested in future.\r\n\t\tvar buffer = [];\r\n\r\n\t\tthis.add = add;\r\n\t\tthis.retryAll = retryAll;\r\n\t\tthis.rejectAll = rejectAll;\r\n\r\n\t\t// Add the ajax request to the buffer.\r\n\t\tfunction add(request, originalResponse, deferred) {\r\n\t\t\tbuffer.push({\r\n\t\t\t request: request,\r\n\t\t\t originalResponse: originalResponse,\r\n\t\t\t\tdeferred: deferred\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\t// Retries all the buffered requests and clears the buffer.\r\n\t\tfunction retryAll(accessToken) {\r\n\t\t\tfor (var i = 0; i < buffer.length; ++i) {\r\n\t\t\t\tvar item = buffer[i];\r\n\t\t\t\tretryHttpRequest(item.request, item.deferred, accessToken);\r\n\t\t\t}\r\n\t\t\tbuffer = [];\r\n\t\t}\r\n\r\n\t\t// Abandon or reject (if reason provided) all the buffered requests.\r\n\t\tfunction rejectAll() {\r\n\t\t\tfor (var i = 0; i < buffer.length; ++i) {\r\n\t\t\t\tvar item = buffer[i];\r\n\t\t\t\titem.deferred.reject(item.originalResponse);\r\n\t\t\t}\r\n\r\n\t\t\tbuffer = [];\r\n\t\t}\r\n\r\n\t\tfunction retryHttpRequest(request, deferred, accessToken) {\r\n\t\t\tmodifyAuthorizationHeader(request, accessToken);\r\n\r\n\t\t\t$.ajax(request)\r\n\t\t\t\t.done(function (data, status, request) {\r\n\t\t\t\t deferred.resolve(data, status, request);\r\n\t\t\t\t})\r\n\t\t\t\t.fail(function (response) {\r\n\t\t\t\t\tdeferred.reject(response);\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\tfunction modifyAuthorizationHeader(request, accessToken) {\r\n\t\t\tif (request.headers) {\r\n\t\t\t\tif (request.headers.authorization) {\r\n\t\t\t\t\trequest.headers.authorization = \"Bearer \" + accessToken;\r\n\t\t\t\t} else if (request.headers.Authorization) {\r\n\t\t\t\t\trequest.headers.Authorization = \"Bearer \" + accessToken;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t/*\r\n\t\tGlobal function to be used when calling an authenticated API.\r\n\t*/\r\n\tinovestor.ms.web.pluginHttpRequestInterceptor = function (url, options) {\r\n\t\tif (inovestor.ms.core.isNullOrUndefined(url))\r\n\t\t\tthrow \"url is null or undefined\";\r\n\r\n\t\tif (inovestor.ms.core.isNullOrUndefined(options))\r\n\t\t\tthrow \"options is null or undefined\";\r\n\r\n\t\tvar tokens = inovestor.ms.web.tokenManager.getTokens();\r\n\r\n\t\tif (!inovestor.ms.core.isNullOrUndefined(tokens)) {\r\n\t\t var refreshTokenEndpoint = inovestor.ms.web.config.refreshTokenEndpoint;\r\n\r\n\t\t\t// Add the Authorization header\r\n\t\t\tvar headers = options.headers || {};\r\n\t\t\theaders.authorization = \"Bearer \" + tokens.accessToken;\r\n\t\t\toptions.headers = headers;\r\n\r\n\t\t\tvar deferred = $.Deferred();\r\n\r\n\t\t\t// Trigger the call.\r\n\t\t\t$.ajax(url, options)\r\n\t\t\t\t.done(function (data, status, request) {\r\n\t\t\t\t\t// Everything went well, just resolve the deferred.\r\n\t\t\t\t deferred.resolve(data, status, request);\r\n\t\t\t\t})\r\n\t\t\t\t.fail(function (response) {\r\n\t\t\t\t\tif (response.status === 401 && !inovestor.ms.core.isNullOrUndefined(tokens.refreshToken) && tokens.refreshToken !== '') {\r\n\t\t\t\t\t\t// It's a 401 and we have a refresh token. Buffer the request, try and get a new token and retry all buffered requests.\r\n\t\t\t\t\t httpBuffer.add(this, response, deferred);\r\n\r\n\t\t\t\t\t\tif (!isRefreshingTokens) {\r\n\t\t\t\t\t\t\tisRefreshingTokens = true;\r\n\t\t\t\t\t\t\trefreshTokensAndRetryAll(refreshTokenEndpoint, tokens.refreshToken);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// Not a 401, simply reject the deferred.\r\n\t\t\t\t\t\tdeferred.reject(response);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\r\n\t\t\treturn deferred.promise();\r\n\t\t} else {\r\n\t\t\treturn $.ajax(url, options);\r\n\t\t}\r\n\t};\r\n\r\n})(window, jQuery);"]}