{"version":3,"file":"winklogin.module.js","sources":["../node_modules/base64-js/index.js","../node_modules/js-sha256/src/sha256.js","../node_modules/keycloak-js/dist/keycloak.mjs","../src/helper.ts","../src/index.ts"],"sourcesContent":["'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n var i\n for (i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","/**\n * [js-sha256]{@link https://github.com/emn178/js-sha256}\n *\n * @version 0.9.0\n * @author Chen, Yi-Cyuan [emn178@gmail.com]\n * @copyright Chen, Yi-Cyuan 2014-2017\n * @license MIT\n */\n/*jslint bitwise: true */\n(function () {\n 'use strict';\n\n var ERROR = 'input is invalid type';\n var WINDOW = typeof window === 'object';\n var root = WINDOW ? window : {};\n if (root.JS_SHA256_NO_WINDOW) {\n WINDOW = false;\n }\n var WEB_WORKER = !WINDOW && typeof self === 'object';\n var NODE_JS = !root.JS_SHA256_NO_NODE_JS && typeof process === 'object' && process.versions && process.versions.node;\n if (NODE_JS) {\n root = global;\n } else if (WEB_WORKER) {\n root = self;\n }\n var COMMON_JS = !root.JS_SHA256_NO_COMMON_JS && typeof module === 'object' && module.exports;\n var AMD = typeof define === 'function' && define.amd;\n var ARRAY_BUFFER = !root.JS_SHA256_NO_ARRAY_BUFFER && typeof ArrayBuffer !== 'undefined';\n var HEX_CHARS = '0123456789abcdef'.split('');\n var EXTRA = [-2147483648, 8388608, 32768, 128];\n var SHIFT = [24, 16, 8, 0];\n var K = [\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n ];\n var OUTPUT_TYPES = ['hex', 'array', 'digest', 'arrayBuffer'];\n\n var blocks = [];\n\n if (root.JS_SHA256_NO_NODE_JS || !Array.isArray) {\n Array.isArray = function (obj) {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n }\n\n if (ARRAY_BUFFER && (root.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW || !ArrayBuffer.isView)) {\n ArrayBuffer.isView = function (obj) {\n return typeof obj === 'object' && obj.buffer && obj.buffer.constructor === ArrayBuffer;\n };\n }\n\n var createOutputMethod = function (outputType, is224) {\n return function (message) {\n return new Sha256(is224, true).update(message)[outputType]();\n };\n };\n\n var createMethod = function (is224) {\n var method = createOutputMethod('hex', is224);\n if (NODE_JS) {\n method = nodeWrap(method, is224);\n }\n method.create = function () {\n return new Sha256(is224);\n };\n method.update = function (message) {\n return method.create().update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createOutputMethod(type, is224);\n }\n return method;\n };\n\n var nodeWrap = function (method, is224) {\n var crypto = eval(\"require('crypto')\");\n var Buffer = eval(\"require('buffer').Buffer\");\n var algorithm = is224 ? 'sha224' : 'sha256';\n var nodeMethod = function (message) {\n if (typeof message === 'string') {\n return crypto.createHash(algorithm).update(message, 'utf8').digest('hex');\n } else {\n if (message === null || message === undefined) {\n throw new Error(ERROR);\n } else if (message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n }\n }\n if (Array.isArray(message) || ArrayBuffer.isView(message) ||\n message.constructor === Buffer) {\n return crypto.createHash(algorithm).update(new Buffer(message)).digest('hex');\n } else {\n return method(message);\n }\n };\n return nodeMethod;\n };\n\n var createHmacOutputMethod = function (outputType, is224) {\n return function (key, message) {\n return new HmacSha256(key, is224, true).update(message)[outputType]();\n };\n };\n\n var createHmacMethod = function (is224) {\n var method = createHmacOutputMethod('hex', is224);\n method.create = function (key) {\n return new HmacSha256(key, is224);\n };\n method.update = function (key, message) {\n return method.create(key).update(message);\n };\n for (var i = 0; i < OUTPUT_TYPES.length; ++i) {\n var type = OUTPUT_TYPES[i];\n method[type] = createHmacOutputMethod(type, is224);\n }\n return method;\n };\n\n function Sha256(is224, sharedMemory) {\n if (sharedMemory) {\n blocks[0] = blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n this.blocks = blocks;\n } else {\n this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n\n if (is224) {\n this.h0 = 0xc1059ed8;\n this.h1 = 0x367cd507;\n this.h2 = 0x3070dd17;\n this.h3 = 0xf70e5939;\n this.h4 = 0xffc00b31;\n this.h5 = 0x68581511;\n this.h6 = 0x64f98fa7;\n this.h7 = 0xbefa4fa4;\n } else { // 256\n this.h0 = 0x6a09e667;\n this.h1 = 0xbb67ae85;\n this.h2 = 0x3c6ef372;\n this.h3 = 0xa54ff53a;\n this.h4 = 0x510e527f;\n this.h5 = 0x9b05688c;\n this.h6 = 0x1f83d9ab;\n this.h7 = 0x5be0cd19;\n }\n\n this.block = this.start = this.bytes = this.hBytes = 0;\n this.finalized = this.hashed = false;\n this.first = true;\n this.is224 = is224;\n }\n\n Sha256.prototype.update = function (message) {\n if (this.finalized) {\n return;\n }\n var notString, type = typeof message;\n if (type !== 'string') {\n if (type === 'object') {\n if (message === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && message.constructor === ArrayBuffer) {\n message = new Uint8Array(message);\n } else if (!Array.isArray(message)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(message)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n notString = true;\n }\n var code, index = 0, i, length = message.length, blocks = this.blocks;\n\n while (index < length) {\n if (this.hashed) {\n this.hashed = false;\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n\n if (notString) {\n for (i = this.start; index < length && i < 64; ++index) {\n blocks[i >> 2] |= message[index] << SHIFT[i++ & 3];\n }\n } else {\n for (i = this.start; index < length && i < 64; ++index) {\n code = message.charCodeAt(index);\n if (code < 0x80) {\n blocks[i >> 2] |= code << SHIFT[i++ & 3];\n } else if (code < 0x800) {\n blocks[i >> 2] |= (0xc0 | (code >> 6)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else if (code < 0xd800 || code >= 0xe000) {\n blocks[i >> 2] |= (0xe0 | (code >> 12)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (message.charCodeAt(++index) & 0x3ff));\n blocks[i >> 2] |= (0xf0 | (code >> 18)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 12) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | ((code >> 6) & 0x3f)) << SHIFT[i++ & 3];\n blocks[i >> 2] |= (0x80 | (code & 0x3f)) << SHIFT[i++ & 3];\n }\n }\n }\n\n this.lastByteIndex = i;\n this.bytes += i - this.start;\n if (i >= 64) {\n this.block = blocks[16];\n this.start = i - 64;\n this.hash();\n this.hashed = true;\n } else {\n this.start = i;\n }\n }\n if (this.bytes > 4294967295) {\n this.hBytes += this.bytes / 4294967296 << 0;\n this.bytes = this.bytes % 4294967296;\n }\n return this;\n };\n\n Sha256.prototype.finalize = function () {\n if (this.finalized) {\n return;\n }\n this.finalized = true;\n var blocks = this.blocks, i = this.lastByteIndex;\n blocks[16] = this.block;\n blocks[i >> 2] |= EXTRA[i & 3];\n this.block = blocks[16];\n if (i >= 56) {\n if (!this.hashed) {\n this.hash();\n }\n blocks[0] = this.block;\n blocks[16] = blocks[1] = blocks[2] = blocks[3] =\n blocks[4] = blocks[5] = blocks[6] = blocks[7] =\n blocks[8] = blocks[9] = blocks[10] = blocks[11] =\n blocks[12] = blocks[13] = blocks[14] = blocks[15] = 0;\n }\n blocks[14] = this.hBytes << 3 | this.bytes >>> 29;\n blocks[15] = this.bytes << 3;\n this.hash();\n };\n\n Sha256.prototype.hash = function () {\n var a = this.h0, b = this.h1, c = this.h2, d = this.h3, e = this.h4, f = this.h5, g = this.h6,\n h = this.h7, blocks = this.blocks, j, s0, s1, maj, t1, t2, ch, ab, da, cd, bc;\n\n for (j = 16; j < 64; ++j) {\n // rightrotate\n t1 = blocks[j - 15];\n s0 = ((t1 >>> 7) | (t1 << 25)) ^ ((t1 >>> 18) | (t1 << 14)) ^ (t1 >>> 3);\n t1 = blocks[j - 2];\n s1 = ((t1 >>> 17) | (t1 << 15)) ^ ((t1 >>> 19) | (t1 << 13)) ^ (t1 >>> 10);\n blocks[j] = blocks[j - 16] + s0 + blocks[j - 7] + s1 << 0;\n }\n\n bc = b & c;\n for (j = 0; j < 64; j += 4) {\n if (this.first) {\n if (this.is224) {\n ab = 300032;\n t1 = blocks[0] - 1413257819;\n h = t1 - 150054599 << 0;\n d = t1 + 24177077 << 0;\n } else {\n ab = 704751109;\n t1 = blocks[0] - 210244248;\n h = t1 - 1521486534 << 0;\n d = t1 + 143694565 << 0;\n }\n this.first = false;\n } else {\n s0 = ((a >>> 2) | (a << 30)) ^ ((a >>> 13) | (a << 19)) ^ ((a >>> 22) | (a << 10));\n s1 = ((e >>> 6) | (e << 26)) ^ ((e >>> 11) | (e << 21)) ^ ((e >>> 25) | (e << 7));\n ab = a & b;\n maj = ab ^ (a & c) ^ bc;\n ch = (e & f) ^ (~e & g);\n t1 = h + s1 + ch + K[j] + blocks[j];\n t2 = s0 + maj;\n h = d + t1 << 0;\n d = t1 + t2 << 0;\n }\n s0 = ((d >>> 2) | (d << 30)) ^ ((d >>> 13) | (d << 19)) ^ ((d >>> 22) | (d << 10));\n s1 = ((h >>> 6) | (h << 26)) ^ ((h >>> 11) | (h << 21)) ^ ((h >>> 25) | (h << 7));\n da = d & a;\n maj = da ^ (d & b) ^ ab;\n ch = (h & e) ^ (~h & f);\n t1 = g + s1 + ch + K[j + 1] + blocks[j + 1];\n t2 = s0 + maj;\n g = c + t1 << 0;\n c = t1 + t2 << 0;\n s0 = ((c >>> 2) | (c << 30)) ^ ((c >>> 13) | (c << 19)) ^ ((c >>> 22) | (c << 10));\n s1 = ((g >>> 6) | (g << 26)) ^ ((g >>> 11) | (g << 21)) ^ ((g >>> 25) | (g << 7));\n cd = c & d;\n maj = cd ^ (c & a) ^ da;\n ch = (g & h) ^ (~g & e);\n t1 = f + s1 + ch + K[j + 2] + blocks[j + 2];\n t2 = s0 + maj;\n f = b + t1 << 0;\n b = t1 + t2 << 0;\n s0 = ((b >>> 2) | (b << 30)) ^ ((b >>> 13) | (b << 19)) ^ ((b >>> 22) | (b << 10));\n s1 = ((f >>> 6) | (f << 26)) ^ ((f >>> 11) | (f << 21)) ^ ((f >>> 25) | (f << 7));\n bc = b & c;\n maj = bc ^ (b & d) ^ cd;\n ch = (f & g) ^ (~f & h);\n t1 = e + s1 + ch + K[j + 3] + blocks[j + 3];\n t2 = s0 + maj;\n e = a + t1 << 0;\n a = t1 + t2 << 0;\n }\n\n this.h0 = this.h0 + a << 0;\n this.h1 = this.h1 + b << 0;\n this.h2 = this.h2 + c << 0;\n this.h3 = this.h3 + d << 0;\n this.h4 = this.h4 + e << 0;\n this.h5 = this.h5 + f << 0;\n this.h6 = this.h6 + g << 0;\n this.h7 = this.h7 + h << 0;\n };\n\n Sha256.prototype.hex = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\n h6 = this.h6, h7 = this.h7;\n\n var hex = HEX_CHARS[(h0 >> 28) & 0x0F] + HEX_CHARS[(h0 >> 24) & 0x0F] +\n HEX_CHARS[(h0 >> 20) & 0x0F] + HEX_CHARS[(h0 >> 16) & 0x0F] +\n HEX_CHARS[(h0 >> 12) & 0x0F] + HEX_CHARS[(h0 >> 8) & 0x0F] +\n HEX_CHARS[(h0 >> 4) & 0x0F] + HEX_CHARS[h0 & 0x0F] +\n HEX_CHARS[(h1 >> 28) & 0x0F] + HEX_CHARS[(h1 >> 24) & 0x0F] +\n HEX_CHARS[(h1 >> 20) & 0x0F] + HEX_CHARS[(h1 >> 16) & 0x0F] +\n HEX_CHARS[(h1 >> 12) & 0x0F] + HEX_CHARS[(h1 >> 8) & 0x0F] +\n HEX_CHARS[(h1 >> 4) & 0x0F] + HEX_CHARS[h1 & 0x0F] +\n HEX_CHARS[(h2 >> 28) & 0x0F] + HEX_CHARS[(h2 >> 24) & 0x0F] +\n HEX_CHARS[(h2 >> 20) & 0x0F] + HEX_CHARS[(h2 >> 16) & 0x0F] +\n HEX_CHARS[(h2 >> 12) & 0x0F] + HEX_CHARS[(h2 >> 8) & 0x0F] +\n HEX_CHARS[(h2 >> 4) & 0x0F] + HEX_CHARS[h2 & 0x0F] +\n HEX_CHARS[(h3 >> 28) & 0x0F] + HEX_CHARS[(h3 >> 24) & 0x0F] +\n HEX_CHARS[(h3 >> 20) & 0x0F] + HEX_CHARS[(h3 >> 16) & 0x0F] +\n HEX_CHARS[(h3 >> 12) & 0x0F] + HEX_CHARS[(h3 >> 8) & 0x0F] +\n HEX_CHARS[(h3 >> 4) & 0x0F] + HEX_CHARS[h3 & 0x0F] +\n HEX_CHARS[(h4 >> 28) & 0x0F] + HEX_CHARS[(h4 >> 24) & 0x0F] +\n HEX_CHARS[(h4 >> 20) & 0x0F] + HEX_CHARS[(h4 >> 16) & 0x0F] +\n HEX_CHARS[(h4 >> 12) & 0x0F] + HEX_CHARS[(h4 >> 8) & 0x0F] +\n HEX_CHARS[(h4 >> 4) & 0x0F] + HEX_CHARS[h4 & 0x0F] +\n HEX_CHARS[(h5 >> 28) & 0x0F] + HEX_CHARS[(h5 >> 24) & 0x0F] +\n HEX_CHARS[(h5 >> 20) & 0x0F] + HEX_CHARS[(h5 >> 16) & 0x0F] +\n HEX_CHARS[(h5 >> 12) & 0x0F] + HEX_CHARS[(h5 >> 8) & 0x0F] +\n HEX_CHARS[(h5 >> 4) & 0x0F] + HEX_CHARS[h5 & 0x0F] +\n HEX_CHARS[(h6 >> 28) & 0x0F] + HEX_CHARS[(h6 >> 24) & 0x0F] +\n HEX_CHARS[(h6 >> 20) & 0x0F] + HEX_CHARS[(h6 >> 16) & 0x0F] +\n HEX_CHARS[(h6 >> 12) & 0x0F] + HEX_CHARS[(h6 >> 8) & 0x0F] +\n HEX_CHARS[(h6 >> 4) & 0x0F] + HEX_CHARS[h6 & 0x0F];\n if (!this.is224) {\n hex += HEX_CHARS[(h7 >> 28) & 0x0F] + HEX_CHARS[(h7 >> 24) & 0x0F] +\n HEX_CHARS[(h7 >> 20) & 0x0F] + HEX_CHARS[(h7 >> 16) & 0x0F] +\n HEX_CHARS[(h7 >> 12) & 0x0F] + HEX_CHARS[(h7 >> 8) & 0x0F] +\n HEX_CHARS[(h7 >> 4) & 0x0F] + HEX_CHARS[h7 & 0x0F];\n }\n return hex;\n };\n\n Sha256.prototype.toString = Sha256.prototype.hex;\n\n Sha256.prototype.digest = function () {\n this.finalize();\n\n var h0 = this.h0, h1 = this.h1, h2 = this.h2, h3 = this.h3, h4 = this.h4, h5 = this.h5,\n h6 = this.h6, h7 = this.h7;\n\n var arr = [\n (h0 >> 24) & 0xFF, (h0 >> 16) & 0xFF, (h0 >> 8) & 0xFF, h0 & 0xFF,\n (h1 >> 24) & 0xFF, (h1 >> 16) & 0xFF, (h1 >> 8) & 0xFF, h1 & 0xFF,\n (h2 >> 24) & 0xFF, (h2 >> 16) & 0xFF, (h2 >> 8) & 0xFF, h2 & 0xFF,\n (h3 >> 24) & 0xFF, (h3 >> 16) & 0xFF, (h3 >> 8) & 0xFF, h3 & 0xFF,\n (h4 >> 24) & 0xFF, (h4 >> 16) & 0xFF, (h4 >> 8) & 0xFF, h4 & 0xFF,\n (h5 >> 24) & 0xFF, (h5 >> 16) & 0xFF, (h5 >> 8) & 0xFF, h5 & 0xFF,\n (h6 >> 24) & 0xFF, (h6 >> 16) & 0xFF, (h6 >> 8) & 0xFF, h6 & 0xFF\n ];\n if (!this.is224) {\n arr.push((h7 >> 24) & 0xFF, (h7 >> 16) & 0xFF, (h7 >> 8) & 0xFF, h7 & 0xFF);\n }\n return arr;\n };\n\n Sha256.prototype.array = Sha256.prototype.digest;\n\n Sha256.prototype.arrayBuffer = function () {\n this.finalize();\n\n var buffer = new ArrayBuffer(this.is224 ? 28 : 32);\n var dataView = new DataView(buffer);\n dataView.setUint32(0, this.h0);\n dataView.setUint32(4, this.h1);\n dataView.setUint32(8, this.h2);\n dataView.setUint32(12, this.h3);\n dataView.setUint32(16, this.h4);\n dataView.setUint32(20, this.h5);\n dataView.setUint32(24, this.h6);\n if (!this.is224) {\n dataView.setUint32(28, this.h7);\n }\n return buffer;\n };\n\n function HmacSha256(key, is224, sharedMemory) {\n var i, type = typeof key;\n if (type === 'string') {\n var bytes = [], length = key.length, index = 0, code;\n for (i = 0; i < length; ++i) {\n code = key.charCodeAt(i);\n if (code < 0x80) {\n bytes[index++] = code;\n } else if (code < 0x800) {\n bytes[index++] = (0xc0 | (code >> 6));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else if (code < 0xd800 || code >= 0xe000) {\n bytes[index++] = (0xe0 | (code >> 12));\n bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n } else {\n code = 0x10000 + (((code & 0x3ff) << 10) | (key.charCodeAt(++i) & 0x3ff));\n bytes[index++] = (0xf0 | (code >> 18));\n bytes[index++] = (0x80 | ((code >> 12) & 0x3f));\n bytes[index++] = (0x80 | ((code >> 6) & 0x3f));\n bytes[index++] = (0x80 | (code & 0x3f));\n }\n }\n key = bytes;\n } else {\n if (type === 'object') {\n if (key === null) {\n throw new Error(ERROR);\n } else if (ARRAY_BUFFER && key.constructor === ArrayBuffer) {\n key = new Uint8Array(key);\n } else if (!Array.isArray(key)) {\n if (!ARRAY_BUFFER || !ArrayBuffer.isView(key)) {\n throw new Error(ERROR);\n }\n }\n } else {\n throw new Error(ERROR);\n }\n }\n\n if (key.length > 64) {\n key = (new Sha256(is224, true)).update(key).array();\n }\n\n var oKeyPad = [], iKeyPad = [];\n for (i = 0; i < 64; ++i) {\n var b = key[i] || 0;\n oKeyPad[i] = 0x5c ^ b;\n iKeyPad[i] = 0x36 ^ b;\n }\n\n Sha256.call(this, is224, sharedMemory);\n\n this.update(iKeyPad);\n this.oKeyPad = oKeyPad;\n this.inner = true;\n this.sharedMemory = sharedMemory;\n }\n HmacSha256.prototype = new Sha256();\n\n HmacSha256.prototype.finalize = function () {\n Sha256.prototype.finalize.call(this);\n if (this.inner) {\n this.inner = false;\n var innerHash = this.array();\n Sha256.call(this, this.is224, this.sharedMemory);\n this.update(this.oKeyPad);\n this.update(innerHash);\n Sha256.prototype.finalize.call(this);\n }\n };\n\n var exports = createMethod();\n exports.sha256 = exports;\n exports.sha224 = createMethod(true);\n exports.sha256.hmac = createHmacMethod();\n exports.sha224.hmac = createHmacMethod(true);\n\n if (COMMON_JS) {\n module.exports = exports;\n } else {\n root.sha256 = exports.sha256;\n root.sha224 = exports.sha224;\n if (AMD) {\n define(function () {\n return exports;\n });\n }\n }\n})();\n","import base64 from 'base64-js';\nimport sha256 from 'js-sha256';\n\n/*\n * Copyright 2016 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nif (typeof Promise === 'undefined') {\n throw Error('Keycloak requires an environment that supports Promises. Make sure that you include the appropriate polyfill.');\n}\n\nfunction Keycloak (config) {\n if (!(this instanceof Keycloak)) {\n throw new Error(\"The 'Keycloak' constructor must be invoked with 'new'.\")\n }\n\n var kc = this;\n var adapter;\n var refreshQueue = [];\n var callbackStorage;\n\n var loginIframe = {\n enable: true,\n callbackList: [],\n interval: 5\n };\n\n var scripts = document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n if ((scripts[i].src.indexOf('keycloak.js') !== -1 || scripts[i].src.indexOf('keycloak.min.js') !== -1) && scripts[i].src.indexOf('version=') !== -1) {\n kc.iframeVersion = scripts[i].src.substring(scripts[i].src.indexOf('version=') + 8).split('&')[0];\n }\n }\n\n var useNonce = true;\n var logInfo = createLogger(console.info);\n var logWarn = createLogger(console.warn);\n\n kc.init = function (initOptions) {\n if (kc.didInitialize) {\n throw new Error(\"A 'Keycloak' instance can only be initialized once.\");\n }\n\n kc.didInitialize = true;\n\n kc.authenticated = false;\n\n callbackStorage = createCallbackStorage();\n var adapters = ['default', 'cordova', 'cordova-native'];\n\n if (initOptions && adapters.indexOf(initOptions.adapter) > -1) {\n adapter = loadAdapter(initOptions.adapter);\n } else if (initOptions && typeof initOptions.adapter === \"object\") {\n adapter = initOptions.adapter;\n } else {\n if (window.Cordova || window.cordova) {\n adapter = loadAdapter('cordova');\n } else {\n adapter = loadAdapter();\n }\n }\n\n if (initOptions) {\n if (typeof initOptions.useNonce !== 'undefined') {\n useNonce = initOptions.useNonce;\n }\n\n if (typeof initOptions.checkLoginIframe !== 'undefined') {\n loginIframe.enable = initOptions.checkLoginIframe;\n }\n\n if (initOptions.checkLoginIframeInterval) {\n loginIframe.interval = initOptions.checkLoginIframeInterval;\n }\n\n if (initOptions.onLoad === 'login-required') {\n kc.loginRequired = true;\n }\n\n if (initOptions.responseMode) {\n if (initOptions.responseMode === 'query' || initOptions.responseMode === 'fragment') {\n kc.responseMode = initOptions.responseMode;\n } else {\n throw 'Invalid value for responseMode';\n }\n }\n\n if (initOptions.flow) {\n switch (initOptions.flow) {\n case 'standard':\n kc.responseType = 'code';\n break;\n case 'implicit':\n kc.responseType = 'id_token token';\n break;\n case 'hybrid':\n kc.responseType = 'code id_token token';\n break;\n default:\n throw 'Invalid value for flow';\n }\n kc.flow = initOptions.flow;\n }\n\n if (initOptions.timeSkew != null) {\n kc.timeSkew = initOptions.timeSkew;\n }\n\n if(initOptions.redirectUri) {\n kc.redirectUri = initOptions.redirectUri;\n }\n\n if (initOptions.silentCheckSsoRedirectUri) {\n kc.silentCheckSsoRedirectUri = initOptions.silentCheckSsoRedirectUri;\n }\n\n if (typeof initOptions.silentCheckSsoFallback === 'boolean') {\n kc.silentCheckSsoFallback = initOptions.silentCheckSsoFallback;\n } else {\n kc.silentCheckSsoFallback = true;\n }\n\n if (initOptions.pkceMethod) {\n if (initOptions.pkceMethod !== \"S256\") {\n throw 'Invalid value for pkceMethod';\n }\n kc.pkceMethod = initOptions.pkceMethod;\n }\n\n if (typeof initOptions.enableLogging === 'boolean') {\n kc.enableLogging = initOptions.enableLogging;\n } else {\n kc.enableLogging = false;\n }\n\n if (typeof initOptions.scope === 'string') {\n kc.scope = initOptions.scope;\n }\n\n if (typeof initOptions.messageReceiveTimeout === 'number' && initOptions.messageReceiveTimeout > 0) {\n kc.messageReceiveTimeout = initOptions.messageReceiveTimeout;\n } else {\n kc.messageReceiveTimeout = 10000;\n }\n }\n\n if (!kc.responseMode) {\n kc.responseMode = 'fragment';\n }\n if (!kc.responseType) {\n kc.responseType = 'code';\n kc.flow = 'standard';\n }\n\n var promise = createPromise();\n\n var initPromise = createPromise();\n initPromise.promise.then(function() {\n kc.onReady && kc.onReady(kc.authenticated);\n promise.setSuccess(kc.authenticated);\n }).catch(function(error) {\n promise.setError(error);\n });\n\n var configPromise = loadConfig();\n\n function onLoad() {\n var doLogin = function(prompt) {\n if (!prompt) {\n options.prompt = 'none';\n }\n\n if (initOptions && initOptions.locale) {\n options.locale = initOptions.locale;\n }\n kc.login(options).then(function () {\n initPromise.setSuccess();\n }).catch(function (error) {\n initPromise.setError(error);\n });\n };\n\n var checkSsoSilently = function() {\n var ifrm = document.createElement(\"iframe\");\n var src = kc.createLoginUrl({prompt: 'none', redirectUri: kc.silentCheckSsoRedirectUri});\n ifrm.setAttribute(\"src\", src);\n ifrm.setAttribute(\"sandbox\", \"allow-scripts allow-same-origin\");\n ifrm.setAttribute(\"title\", \"keycloak-silent-check-sso\");\n ifrm.style.display = \"none\";\n document.body.appendChild(ifrm);\n\n var messageCallback = function(event) {\n if (event.origin !== window.location.origin || ifrm.contentWindow !== event.source) {\n return;\n }\n\n var oauth = parseCallback(event.data);\n processCallback(oauth, initPromise);\n\n document.body.removeChild(ifrm);\n window.removeEventListener(\"message\", messageCallback);\n };\n\n window.addEventListener(\"message\", messageCallback);\n };\n\n var options = {};\n switch (initOptions.onLoad) {\n case 'check-sso':\n if (loginIframe.enable) {\n setupCheckLoginIframe().then(function() {\n checkLoginIframe().then(function (unchanged) {\n if (!unchanged) {\n kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);\n } else {\n initPromise.setSuccess();\n }\n }).catch(function (error) {\n initPromise.setError(error);\n });\n });\n } else {\n kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);\n }\n break;\n case 'login-required':\n doLogin(true);\n break;\n default:\n throw 'Invalid value for onLoad';\n }\n }\n\n function processInit() {\n var callback = parseCallback(window.location.href);\n\n if (callback) {\n window.history.replaceState(window.history.state, null, callback.newUrl);\n }\n\n if (callback && callback.valid) {\n return setupCheckLoginIframe().then(function() {\n processCallback(callback, initPromise);\n }).catch(function (error) {\n initPromise.setError(error);\n });\n } else if (initOptions) {\n if (initOptions.token && initOptions.refreshToken) {\n setToken(initOptions.token, initOptions.refreshToken, initOptions.idToken);\n\n if (loginIframe.enable) {\n setupCheckLoginIframe().then(function() {\n checkLoginIframe().then(function (unchanged) {\n if (unchanged) {\n kc.onAuthSuccess && kc.onAuthSuccess();\n initPromise.setSuccess();\n scheduleCheckIframe();\n } else {\n initPromise.setSuccess();\n }\n }).catch(function (error) {\n initPromise.setError(error);\n });\n });\n } else {\n kc.updateToken(-1).then(function() {\n kc.onAuthSuccess && kc.onAuthSuccess();\n initPromise.setSuccess();\n }).catch(function(error) {\n kc.onAuthError && kc.onAuthError();\n if (initOptions.onLoad) {\n onLoad();\n } else {\n initPromise.setError(error);\n }\n });\n }\n } else if (initOptions.onLoad) {\n onLoad();\n } else {\n initPromise.setSuccess();\n }\n } else {\n initPromise.setSuccess();\n }\n }\n\n function domReady() {\n var promise = createPromise();\n\n var checkReadyState = function () {\n if (document.readyState === 'interactive' || document.readyState === 'complete') {\n document.removeEventListener('readystatechange', checkReadyState);\n promise.setSuccess();\n }\n };\n document.addEventListener('readystatechange', checkReadyState);\n\n checkReadyState(); // just in case the event was already fired and we missed it (in case the init is done later than at the load time, i.e. it's done from code)\n\n return promise.promise;\n }\n\n configPromise.then(function () {\n domReady()\n .then(check3pCookiesSupported)\n .then(processInit)\n .catch(function (error) {\n promise.setError(error);\n });\n });\n configPromise.catch(function (error) {\n promise.setError(error);\n });\n\n return promise.promise;\n };\n\n kc.login = function (options) {\n return adapter.login(options);\n };\n\n function generateRandomData(len) {\n // use web crypto APIs if possible\n var array = null;\n var crypto = window.crypto || window.msCrypto;\n if (crypto && crypto.getRandomValues && window.Uint8Array) {\n array = new Uint8Array(len);\n crypto.getRandomValues(array);\n return array;\n }\n\n // fallback to Math random\n array = new Array(len);\n for (var j = 0; j < array.length; j++) {\n array[j] = Math.floor(256 * Math.random());\n }\n return array;\n }\n\n function generateCodeVerifier(len) {\n return generateRandomString(len, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');\n }\n\n function generateRandomString(len, alphabet){\n var randomData = generateRandomData(len);\n var chars = new Array(len);\n for (var i = 0; i < len; i++) {\n chars[i] = alphabet.charCodeAt(randomData[i] % alphabet.length);\n }\n return String.fromCharCode.apply(null, chars);\n }\n\n function generatePkceChallenge(pkceMethod, codeVerifier) {\n switch (pkceMethod) {\n // The use of the \"plain\" method is considered insecure and therefore not supported.\n case \"S256\":\n // hash codeVerifier, then encode as url-safe base64 without padding\n var hashBytes = new Uint8Array(sha256.arrayBuffer(codeVerifier));\n var encodedHash = base64.fromByteArray(hashBytes)\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/\\=/g, '');\n return encodedHash;\n default:\n throw 'Invalid value for pkceMethod';\n }\n }\n\n function buildClaimsParameter(requestedAcr){\n var claims = {\n id_token: {\n acr: requestedAcr\n }\n };\n return JSON.stringify(claims);\n }\n\n kc.createLoginUrl = function(options) {\n var state = createUUID();\n var nonce = createUUID();\n\n var redirectUri = adapter.redirectUri(options);\n\n var callbackState = {\n state: state,\n nonce: nonce,\n redirectUri: encodeURIComponent(redirectUri)\n };\n\n if (options && options.prompt) {\n callbackState.prompt = options.prompt;\n }\n\n var baseUrl;\n if (options && options.action == 'register') {\n baseUrl = kc.endpoints.register();\n } else {\n baseUrl = kc.endpoints.authorize();\n }\n\n var scope = options && options.scope || kc.scope;\n if (!scope) {\n // if scope is not set, default to \"openid\"\n scope = \"openid\";\n } else if (scope.indexOf(\"openid\") === -1) {\n // if openid scope is missing, prefix the given scopes with it\n scope = \"openid \" + scope;\n }\n\n var url = baseUrl\n + '?client_id=' + encodeURIComponent(kc.clientId)\n + '&redirect_uri=' + encodeURIComponent(redirectUri)\n + '&state=' + encodeURIComponent(state)\n + '&response_mode=' + encodeURIComponent(kc.responseMode)\n + '&response_type=' + encodeURIComponent(kc.responseType)\n + '&scope=' + encodeURIComponent(scope);\n if (useNonce) {\n url = url + '&nonce=' + encodeURIComponent(nonce);\n }\n\n if (options && options.prompt) {\n url += '&prompt=' + encodeURIComponent(options.prompt);\n }\n\n if (options && options.maxAge) {\n url += '&max_age=' + encodeURIComponent(options.maxAge);\n }\n\n if (options && options.loginHint) {\n url += '&login_hint=' + encodeURIComponent(options.loginHint);\n }\n\n if (options && options.idpHint) {\n url += '&kc_idp_hint=' + encodeURIComponent(options.idpHint);\n }\n\n if (options && options.action && options.action != 'register') {\n url += '&kc_action=' + encodeURIComponent(options.action);\n }\n\n if (options && options.locale) {\n url += '&ui_locales=' + encodeURIComponent(options.locale);\n }\n\n if (options && options.acr) {\n var claimsParameter = buildClaimsParameter(options.acr);\n url += '&claims=' + encodeURIComponent(claimsParameter);\n }\n\n if (kc.pkceMethod) {\n var codeVerifier = generateCodeVerifier(96);\n callbackState.pkceCodeVerifier = codeVerifier;\n var pkceChallenge = generatePkceChallenge(kc.pkceMethod, codeVerifier);\n url += '&code_challenge=' + pkceChallenge;\n url += '&code_challenge_method=' + kc.pkceMethod;\n }\n\n callbackStorage.add(callbackState);\n\n return url;\n };\n\n kc.logout = function(options) {\n return adapter.logout(options);\n };\n\n kc.createLogoutUrl = function(options) {\n var url = kc.endpoints.logout()\n + '?client_id=' + encodeURIComponent(kc.clientId)\n + '&post_logout_redirect_uri=' + encodeURIComponent(adapter.redirectUri(options, false));\n\n if (kc.idToken) {\n url += '&id_token_hint=' + encodeURIComponent(kc.idToken);\n }\n\n return url;\n };\n\n kc.register = function (options) {\n return adapter.register(options);\n };\n\n kc.createRegisterUrl = function(options) {\n if (!options) {\n options = {};\n }\n options.action = 'register';\n return kc.createLoginUrl(options);\n };\n\n kc.createAccountUrl = function(options) {\n var realm = getRealmUrl();\n var url = undefined;\n if (typeof realm !== 'undefined') {\n url = realm\n + '/account'\n + '?referrer=' + encodeURIComponent(kc.clientId)\n + '&referrer_uri=' + encodeURIComponent(adapter.redirectUri(options));\n }\n return url;\n };\n\n kc.accountManagement = function() {\n return adapter.accountManagement();\n };\n\n kc.hasRealmRole = function (role) {\n var access = kc.realmAccess;\n return !!access && access.roles.indexOf(role) >= 0;\n };\n\n kc.hasResourceRole = function(role, resource) {\n if (!kc.resourceAccess) {\n return false;\n }\n\n var access = kc.resourceAccess[resource || kc.clientId];\n return !!access && access.roles.indexOf(role) >= 0;\n };\n\n kc.loadUserProfile = function() {\n var url = getRealmUrl() + '/account';\n var req = new XMLHttpRequest();\n req.open('GET', url, true);\n req.setRequestHeader('Accept', 'application/json');\n req.setRequestHeader('Authorization', 'bearer ' + kc.token);\n\n var promise = createPromise();\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200) {\n kc.profile = JSON.parse(req.responseText);\n promise.setSuccess(kc.profile);\n } else {\n promise.setError();\n }\n }\n };\n\n req.send();\n\n return promise.promise;\n };\n\n kc.loadUserInfo = function() {\n var url = kc.endpoints.userinfo();\n var req = new XMLHttpRequest();\n req.open('GET', url, true);\n req.setRequestHeader('Accept', 'application/json');\n req.setRequestHeader('Authorization', 'bearer ' + kc.token);\n\n var promise = createPromise();\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200) {\n kc.userInfo = JSON.parse(req.responseText);\n promise.setSuccess(kc.userInfo);\n } else {\n promise.setError();\n }\n }\n };\n\n req.send();\n\n return promise.promise;\n };\n\n kc.isTokenExpired = function(minValidity) {\n if (!kc.tokenParsed || (!kc.refreshToken && kc.flow != 'implicit' )) {\n throw 'Not authenticated';\n }\n\n if (kc.timeSkew == null) {\n logInfo('[KEYCLOAK] Unable to determine if token is expired as timeskew is not set');\n return true;\n }\n\n var expiresIn = kc.tokenParsed['exp'] - Math.ceil(new Date().getTime() / 1000) + kc.timeSkew;\n if (minValidity) {\n if (isNaN(minValidity)) {\n throw 'Invalid minValidity';\n }\n expiresIn -= minValidity;\n }\n return expiresIn < 0;\n };\n\n kc.updateToken = function(minValidity) {\n var promise = createPromise();\n\n if (!kc.refreshToken) {\n promise.setError();\n return promise.promise;\n }\n\n minValidity = minValidity || 5;\n\n var exec = function() {\n var refreshToken = false;\n if (minValidity == -1) {\n refreshToken = true;\n logInfo('[KEYCLOAK] Refreshing token: forced refresh');\n } else if (!kc.tokenParsed || kc.isTokenExpired(minValidity)) {\n refreshToken = true;\n logInfo('[KEYCLOAK] Refreshing token: token expired');\n }\n\n if (!refreshToken) {\n promise.setSuccess(false);\n } else {\n var params = 'grant_type=refresh_token&' + 'refresh_token=' + kc.refreshToken;\n var url = kc.endpoints.token();\n\n refreshQueue.push(promise);\n\n if (refreshQueue.length == 1) {\n var req = new XMLHttpRequest();\n req.open('POST', url, true);\n req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n req.withCredentials = true;\n\n params += '&client_id=' + encodeURIComponent(kc.clientId);\n\n var timeLocal = new Date().getTime();\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200) {\n logInfo('[KEYCLOAK] Token refreshed');\n\n timeLocal = (timeLocal + new Date().getTime()) / 2;\n\n var tokenResponse = JSON.parse(req.responseText);\n\n setToken(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], timeLocal);\n\n kc.onAuthRefreshSuccess && kc.onAuthRefreshSuccess();\n for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {\n p.setSuccess(true);\n }\n } else {\n logWarn('[KEYCLOAK] Failed to refresh token');\n\n if (req.status == 400) {\n kc.clearToken();\n }\n\n kc.onAuthRefreshError && kc.onAuthRefreshError();\n for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {\n p.setError(true);\n }\n }\n }\n };\n\n req.send(params);\n }\n }\n };\n\n if (loginIframe.enable) {\n var iframePromise = checkLoginIframe();\n iframePromise.then(function() {\n exec();\n }).catch(function(error) {\n promise.setError(error);\n });\n } else {\n exec();\n }\n\n return promise.promise;\n };\n\n kc.clearToken = function() {\n if (kc.token) {\n setToken(null, null, null);\n kc.onAuthLogout && kc.onAuthLogout();\n if (kc.loginRequired) {\n kc.login();\n }\n }\n };\n\n function getRealmUrl() {\n if (typeof kc.authServerUrl !== 'undefined') {\n if (kc.authServerUrl.charAt(kc.authServerUrl.length - 1) == '/') {\n return kc.authServerUrl + 'realms/' + encodeURIComponent(kc.realm);\n } else {\n return kc.authServerUrl + '/realms/' + encodeURIComponent(kc.realm);\n }\n } else {\n return undefined;\n }\n }\n\n function getOrigin() {\n if (!window.location.origin) {\n return window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');\n } else {\n return window.location.origin;\n }\n }\n\n function processCallback(oauth, promise) {\n var code = oauth.code;\n var error = oauth.error;\n var prompt = oauth.prompt;\n\n var timeLocal = new Date().getTime();\n\n if (oauth['kc_action_status']) {\n kc.onActionUpdate && kc.onActionUpdate(oauth['kc_action_status']);\n }\n\n if (error) {\n if (prompt != 'none') {\n var errorData = { error: error, error_description: oauth.error_description };\n kc.onAuthError && kc.onAuthError(errorData);\n promise && promise.setError(errorData);\n } else {\n promise && promise.setSuccess();\n }\n return;\n } else if ((kc.flow != 'standard') && (oauth.access_token || oauth.id_token)) {\n authSuccess(oauth.access_token, null, oauth.id_token, true);\n }\n\n if ((kc.flow != 'implicit') && code) {\n var params = 'code=' + code + '&grant_type=authorization_code';\n var url = kc.endpoints.token();\n\n var req = new XMLHttpRequest();\n req.open('POST', url, true);\n req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\n\n params += '&client_id=' + encodeURIComponent(kc.clientId);\n params += '&redirect_uri=' + oauth.redirectUri;\n\n if (oauth.pkceCodeVerifier) {\n params += '&code_verifier=' + oauth.pkceCodeVerifier;\n }\n\n req.withCredentials = true;\n\n req.onreadystatechange = function() {\n if (req.readyState == 4) {\n if (req.status == 200) {\n\n var tokenResponse = JSON.parse(req.responseText);\n authSuccess(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], kc.flow === 'standard');\n scheduleCheckIframe();\n } else {\n kc.onAuthError && kc.onAuthError();\n promise && promise.setError();\n }\n }\n };\n\n req.send(params);\n }\n\n function authSuccess(accessToken, refreshToken, idToken, fulfillPromise) {\n timeLocal = (timeLocal + new Date().getTime()) / 2;\n\n setToken(accessToken, refreshToken, idToken, timeLocal);\n\n if (useNonce && ((kc.tokenParsed && kc.tokenParsed.nonce != oauth.storedNonce) ||\n (kc.refreshTokenParsed && kc.refreshTokenParsed.nonce != oauth.storedNonce) ||\n (kc.idTokenParsed && kc.idTokenParsed.nonce != oauth.storedNonce))) {\n\n logInfo('[KEYCLOAK] Invalid nonce, clearing token');\n kc.clearToken();\n promise && promise.setError();\n } else {\n if (fulfillPromise) {\n kc.onAuthSuccess && kc.onAuthSuccess();\n promise && promise.setSuccess();\n }\n }\n }\n\n }\n\n function loadConfig(url) {\n var promise = createPromise();\n var configUrl;\n\n if (!config) {\n configUrl = 'keycloak.json';\n } else if (typeof config === 'string') {\n configUrl = config;\n }\n\n function setupOidcEndoints(oidcConfiguration) {\n if (! oidcConfiguration) {\n kc.endpoints = {\n authorize: function() {\n return getRealmUrl() + '/protocol/openid-connect/auth';\n },\n token: function() {\n return getRealmUrl() + '/protocol/openid-connect/token';\n },\n logout: function() {\n return getRealmUrl() + '/protocol/openid-connect/logout';\n },\n checkSessionIframe: function() {\n var src = getRealmUrl() + '/protocol/openid-connect/login-status-iframe.html';\n if (kc.iframeVersion) {\n src = src + '?version=' + kc.iframeVersion;\n }\n return src;\n },\n thirdPartyCookiesIframe: function() {\n var src = getRealmUrl() + '/protocol/openid-connect/3p-cookies/step1.html';\n if (kc.iframeVersion) {\n src = src + '?version=' + kc.iframeVersion;\n }\n return src;\n },\n register: function() {\n return getRealmUrl() + '/protocol/openid-connect/registrations';\n },\n userinfo: function() {\n return getRealmUrl() + '/protocol/openid-connect/userinfo';\n }\n };\n } else {\n kc.endpoints = {\n authorize: function() {\n return oidcConfiguration.authorization_endpoint;\n },\n token: function() {\n return oidcConfiguration.token_endpoint;\n },\n logout: function() {\n if (!oidcConfiguration.end_session_endpoint) {\n throw \"Not supported by the OIDC server\";\n }\n return oidcConfiguration.end_session_endpoint;\n },\n checkSessionIframe: function() {\n if (!oidcConfiguration.check_session_iframe) {\n throw \"Not supported by the OIDC server\";\n }\n return oidcConfiguration.check_session_iframe;\n },\n register: function() {\n throw 'Redirection to \"Register user\" page not supported in standard OIDC mode';\n },\n userinfo: function() {\n if (!oidcConfiguration.userinfo_endpoint) {\n throw \"Not supported by the OIDC server\";\n }\n return oidcConfiguration.userinfo_endpoint;\n }\n };\n }\n }\n\n if (configUrl) {\n var req = new XMLHttpRequest();\n req.open('GET', configUrl, true);\n req.setRequestHeader('Accept', 'application/json');\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200 || fileLoaded(req)) {\n var config = JSON.parse(req.responseText);\n\n kc.authServerUrl = config['auth-server-url'];\n kc.realm = config['realm'];\n kc.clientId = config['resource'];\n setupOidcEndoints(null);\n promise.setSuccess();\n } else {\n promise.setError();\n }\n }\n };\n\n req.send();\n } else {\n if (!config.clientId) {\n throw 'clientId missing';\n }\n\n kc.clientId = config.clientId;\n\n var oidcProvider = config['oidcProvider'];\n if (!oidcProvider) {\n if (!config['url']) {\n var scripts = document.getElementsByTagName('script');\n for (var i = 0; i < scripts.length; i++) {\n if (scripts[i].src.match(/.*keycloak\\.js/)) {\n config.url = scripts[i].src.substr(0, scripts[i].src.indexOf('/js/keycloak.js'));\n break;\n }\n }\n }\n if (!config.realm) {\n throw 'realm missing';\n }\n\n kc.authServerUrl = config.url;\n kc.realm = config.realm;\n setupOidcEndoints(null);\n promise.setSuccess();\n } else {\n if (typeof oidcProvider === 'string') {\n var oidcProviderConfigUrl;\n if (oidcProvider.charAt(oidcProvider.length - 1) == '/') {\n oidcProviderConfigUrl = oidcProvider + '.well-known/openid-configuration';\n } else {\n oidcProviderConfigUrl = oidcProvider + '/.well-known/openid-configuration';\n }\n var req = new XMLHttpRequest();\n req.open('GET', oidcProviderConfigUrl, true);\n req.setRequestHeader('Accept', 'application/json');\n\n req.onreadystatechange = function () {\n if (req.readyState == 4) {\n if (req.status == 200 || fileLoaded(req)) {\n var oidcProviderConfig = JSON.parse(req.responseText);\n setupOidcEndoints(oidcProviderConfig);\n promise.setSuccess();\n } else {\n promise.setError();\n }\n }\n };\n\n req.send();\n } else {\n setupOidcEndoints(oidcProvider);\n promise.setSuccess();\n }\n }\n }\n\n return promise.promise;\n }\n\n function fileLoaded(xhr) {\n return xhr.status == 0 && xhr.responseText && xhr.responseURL.startsWith('file:');\n }\n\n function setToken(token, refreshToken, idToken, timeLocal) {\n if (kc.tokenTimeoutHandle) {\n clearTimeout(kc.tokenTimeoutHandle);\n kc.tokenTimeoutHandle = null;\n }\n\n if (refreshToken) {\n kc.refreshToken = refreshToken;\n kc.refreshTokenParsed = decodeToken(refreshToken);\n } else {\n delete kc.refreshToken;\n delete kc.refreshTokenParsed;\n }\n\n if (idToken) {\n kc.idToken = idToken;\n kc.idTokenParsed = decodeToken(idToken);\n } else {\n delete kc.idToken;\n delete kc.idTokenParsed;\n }\n\n if (token) {\n kc.token = token;\n kc.tokenParsed = decodeToken(token);\n kc.sessionId = kc.tokenParsed.session_state;\n kc.authenticated = true;\n kc.subject = kc.tokenParsed.sub;\n kc.realmAccess = kc.tokenParsed.realm_access;\n kc.resourceAccess = kc.tokenParsed.resource_access;\n\n if (timeLocal) {\n kc.timeSkew = Math.floor(timeLocal / 1000) - kc.tokenParsed.iat;\n }\n\n if (kc.timeSkew != null) {\n logInfo('[KEYCLOAK] Estimated time difference between browser and server is ' + kc.timeSkew + ' seconds');\n\n if (kc.onTokenExpired) {\n var expiresIn = (kc.tokenParsed['exp'] - (new Date().getTime() / 1000) + kc.timeSkew) * 1000;\n logInfo('[KEYCLOAK] Token expires in ' + Math.round(expiresIn / 1000) + ' s');\n if (expiresIn <= 0) {\n kc.onTokenExpired();\n } else {\n kc.tokenTimeoutHandle = setTimeout(kc.onTokenExpired, expiresIn);\n }\n }\n }\n } else {\n delete kc.token;\n delete kc.tokenParsed;\n delete kc.subject;\n delete kc.realmAccess;\n delete kc.resourceAccess;\n\n kc.authenticated = false;\n }\n }\n\n function decodeToken(str) {\n str = str.split('.')[1];\n\n str = str.replace(/-/g, '+');\n str = str.replace(/_/g, '/');\n switch (str.length % 4) {\n case 0:\n break;\n case 2:\n str += '==';\n break;\n case 3:\n str += '=';\n break;\n default:\n throw 'Invalid token';\n }\n\n str = decodeURIComponent(escape(atob(str)));\n\n str = JSON.parse(str);\n return str;\n }\n\n function createUUID() {\n var hexDigits = '0123456789abcdef';\n var s = generateRandomString(36, hexDigits).split(\"\");\n s[14] = '4';\n s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);\n s[8] = s[13] = s[18] = s[23] = '-';\n var uuid = s.join('');\n return uuid;\n }\n\n function parseCallback(url) {\n var oauth = parseCallbackUrl(url);\n if (!oauth) {\n return;\n }\n\n var oauthState = callbackStorage.get(oauth.state);\n\n if (oauthState) {\n oauth.valid = true;\n oauth.redirectUri = oauthState.redirectUri;\n oauth.storedNonce = oauthState.nonce;\n oauth.prompt = oauthState.prompt;\n oauth.pkceCodeVerifier = oauthState.pkceCodeVerifier;\n }\n\n return oauth;\n }\n\n function parseCallbackUrl(url) {\n var supportedParams;\n switch (kc.flow) {\n case 'standard':\n supportedParams = ['code', 'state', 'session_state', 'kc_action_status'];\n break;\n case 'implicit':\n supportedParams = ['access_token', 'token_type', 'id_token', 'state', 'session_state', 'expires_in', 'kc_action_status'];\n break;\n case 'hybrid':\n supportedParams = ['access_token', 'token_type', 'id_token', 'code', 'state', 'session_state', 'expires_in', 'kc_action_status'];\n break;\n }\n\n supportedParams.push('error');\n supportedParams.push('error_description');\n supportedParams.push('error_uri');\n\n var queryIndex = url.indexOf('?');\n var fragmentIndex = url.indexOf('#');\n\n var newUrl;\n var parsed;\n\n if (kc.responseMode === 'query' && queryIndex !== -1) {\n newUrl = url.substring(0, queryIndex);\n parsed = parseCallbackParams(url.substring(queryIndex + 1, fragmentIndex !== -1 ? fragmentIndex : url.length), supportedParams);\n if (parsed.paramsString !== '') {\n newUrl += '?' + parsed.paramsString;\n }\n if (fragmentIndex !== -1) {\n newUrl += url.substring(fragmentIndex);\n }\n } else if (kc.responseMode === 'fragment' && fragmentIndex !== -1) {\n newUrl = url.substring(0, fragmentIndex);\n parsed = parseCallbackParams(url.substring(fragmentIndex + 1), supportedParams);\n if (parsed.paramsString !== '') {\n newUrl += '#' + parsed.paramsString;\n }\n }\n\n if (parsed && parsed.oauthParams) {\n if (kc.flow === 'standard' || kc.flow === 'hybrid') {\n if ((parsed.oauthParams.code || parsed.oauthParams.error) && parsed.oauthParams.state) {\n parsed.oauthParams.newUrl = newUrl;\n return parsed.oauthParams;\n }\n } else if (kc.flow === 'implicit') {\n if ((parsed.oauthParams.access_token || parsed.oauthParams.error) && parsed.oauthParams.state) {\n parsed.oauthParams.newUrl = newUrl;\n return parsed.oauthParams;\n }\n }\n }\n }\n\n function parseCallbackParams(paramsString, supportedParams) {\n var p = paramsString.split('&');\n var result = {\n paramsString: '',\n oauthParams: {}\n };\n for (var i = 0; i < p.length; i++) {\n var split = p[i].indexOf(\"=\");\n var key = p[i].slice(0, split);\n if (supportedParams.indexOf(key) !== -1) {\n result.oauthParams[key] = p[i].slice(split + 1);\n } else {\n if (result.paramsString !== '') {\n result.paramsString += '&';\n }\n result.paramsString += p[i];\n }\n }\n return result;\n }\n\n function createPromise() {\n // Need to create a native Promise which also preserves the\n // interface of the custom promise type previously used by the API\n var p = {\n setSuccess: function(result) {\n p.resolve(result);\n },\n\n setError: function(result) {\n p.reject(result);\n }\n };\n p.promise = new Promise(function(resolve, reject) {\n p.resolve = resolve;\n p.reject = reject;\n });\n\n return p;\n }\n\n // Function to extend existing native Promise with timeout\n function applyTimeoutToPromise(promise, timeout, errorMessage) {\n var timeoutHandle = null;\n var timeoutPromise = new Promise(function (resolve, reject) {\n timeoutHandle = setTimeout(function () {\n reject({ \"error\": errorMessage || \"Promise is not settled within timeout of \" + timeout + \"ms\" });\n }, timeout);\n });\n\n return Promise.race([promise, timeoutPromise]).finally(function () {\n clearTimeout(timeoutHandle);\n });\n }\n\n function setupCheckLoginIframe() {\n var promise = createPromise();\n\n if (!loginIframe.enable) {\n promise.setSuccess();\n return promise.promise;\n }\n\n if (loginIframe.iframe) {\n promise.setSuccess();\n return promise.promise;\n }\n\n var iframe = document.createElement('iframe');\n loginIframe.iframe = iframe;\n\n iframe.onload = function() {\n var authUrl = kc.endpoints.authorize();\n if (authUrl.charAt(0) === '/') {\n loginIframe.iframeOrigin = getOrigin();\n } else {\n loginIframe.iframeOrigin = authUrl.substring(0, authUrl.indexOf('/', 8));\n }\n promise.setSuccess();\n };\n\n var src = kc.endpoints.checkSessionIframe();\n iframe.setAttribute('src', src );\n iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin');\n iframe.setAttribute('title', 'keycloak-session-iframe' );\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n\n var messageCallback = function(event) {\n if ((event.origin !== loginIframe.iframeOrigin) || (loginIframe.iframe.contentWindow !== event.source)) {\n return;\n }\n\n if (!(event.data == 'unchanged' || event.data == 'changed' || event.data == 'error')) {\n return;\n }\n\n\n if (event.data != 'unchanged') {\n kc.clearToken();\n }\n\n var callbacks = loginIframe.callbackList.splice(0, loginIframe.callbackList.length);\n\n for (var i = callbacks.length - 1; i >= 0; --i) {\n var promise = callbacks[i];\n if (event.data == 'error') {\n promise.setError();\n } else {\n promise.setSuccess(event.data == 'unchanged');\n }\n }\n };\n\n window.addEventListener('message', messageCallback, false);\n\n return promise.promise;\n }\n\n function scheduleCheckIframe() {\n if (loginIframe.enable) {\n if (kc.token) {\n setTimeout(function() {\n checkLoginIframe().then(function(unchanged) {\n if (unchanged) {\n scheduleCheckIframe();\n }\n });\n }, loginIframe.interval * 1000);\n }\n }\n }\n\n function checkLoginIframe() {\n var promise = createPromise();\n\n if (loginIframe.iframe && loginIframe.iframeOrigin ) {\n var msg = kc.clientId + ' ' + (kc.sessionId ? kc.sessionId : '');\n loginIframe.callbackList.push(promise);\n var origin = loginIframe.iframeOrigin;\n if (loginIframe.callbackList.length == 1) {\n loginIframe.iframe.contentWindow.postMessage(msg, origin);\n }\n } else {\n promise.setSuccess();\n }\n\n return promise.promise;\n }\n\n function check3pCookiesSupported() {\n var promise = createPromise();\n\n if (loginIframe.enable || kc.silentCheckSsoRedirectUri) {\n var iframe = document.createElement('iframe');\n iframe.setAttribute('src', kc.endpoints.thirdPartyCookiesIframe());\n iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin');\n iframe.setAttribute('title', 'keycloak-3p-check-iframe' );\n iframe.style.display = 'none';\n document.body.appendChild(iframe);\n\n var messageCallback = function(event) {\n if (iframe.contentWindow !== event.source) {\n return;\n }\n\n if (event.data !== \"supported\" && event.data !== \"unsupported\") {\n return;\n } else if (event.data === \"unsupported\") {\n loginIframe.enable = false;\n if (kc.silentCheckSsoFallback) {\n kc.silentCheckSsoRedirectUri = false;\n }\n logWarn(\"[KEYCLOAK] 3rd party cookies aren't supported by this browser. checkLoginIframe and \" +\n \"silent check-sso are not available.\");\n }\n\n document.body.removeChild(iframe);\n window.removeEventListener(\"message\", messageCallback);\n promise.setSuccess();\n };\n\n window.addEventListener('message', messageCallback, false);\n } else {\n promise.setSuccess();\n }\n\n return applyTimeoutToPromise(promise.promise, kc.messageReceiveTimeout, \"Timeout when waiting for 3rd party check iframe message.\");\n }\n\n function loadAdapter(type) {\n if (!type || type == 'default') {\n return {\n login: function(options) {\n window.location.assign(kc.createLoginUrl(options));\n return createPromise().promise;\n },\n\n logout: function(options) {\n window.location.replace(kc.createLogoutUrl(options));\n return createPromise().promise;\n },\n\n register: function(options) {\n window.location.assign(kc.createRegisterUrl(options));\n return createPromise().promise;\n },\n\n accountManagement : function() {\n var accountUrl = kc.createAccountUrl();\n if (typeof accountUrl !== 'undefined') {\n window.location.href = accountUrl;\n } else {\n throw \"Not supported by the OIDC server\";\n }\n return createPromise().promise;\n },\n\n redirectUri: function(options, encodeHash) {\n\n if (options && options.redirectUri) {\n return options.redirectUri;\n } else if (kc.redirectUri) {\n return kc.redirectUri;\n } else {\n return location.href;\n }\n }\n };\n }\n\n if (type == 'cordova') {\n loginIframe.enable = false;\n var cordovaOpenWindowWrapper = function(loginUrl, target, options) {\n if (window.cordova && window.cordova.InAppBrowser) {\n // Use inappbrowser for IOS and Android if available\n return window.cordova.InAppBrowser.open(loginUrl, target, options);\n } else {\n return window.open(loginUrl, target, options);\n }\n };\n\n var shallowCloneCordovaOptions = function (userOptions) {\n if (userOptions && userOptions.cordovaOptions) {\n return Object.keys(userOptions.cordovaOptions).reduce(function (options, optionName) {\n options[optionName] = userOptions.cordovaOptions[optionName];\n return options;\n }, {});\n } else {\n return {};\n }\n };\n\n var formatCordovaOptions = function (cordovaOptions) {\n return Object.keys(cordovaOptions).reduce(function (options, optionName) {\n options.push(optionName+\"=\"+cordovaOptions[optionName]);\n return options;\n }, []).join(\",\");\n };\n\n var createCordovaOptions = function (userOptions) {\n var cordovaOptions = shallowCloneCordovaOptions(userOptions);\n cordovaOptions.location = 'no';\n if (userOptions && userOptions.prompt == 'none') {\n cordovaOptions.hidden = 'yes';\n }\n return formatCordovaOptions(cordovaOptions);\n };\n\n var cordovaRedirectUri = kc.redirectUri || 'http://localhost';\n \n return {\n login: function(options) {\n var promise = createPromise();\n\n var cordovaOptions = createCordovaOptions(options);\n var loginUrl = kc.createLoginUrl(options);\n var ref = cordovaOpenWindowWrapper(loginUrl, '_blank', cordovaOptions);\n var completed = false;\n\n var closed = false;\n var closeBrowser = function() {\n closed = true;\n ref.close();\n };\n\n ref.addEventListener('loadstart', function(event) {\n if (event.url.indexOf(cordovaRedirectUri) == 0) {\n var callback = parseCallback(event.url);\n processCallback(callback, promise);\n closeBrowser();\n completed = true;\n }\n });\n\n ref.addEventListener('loaderror', function(event) {\n if (!completed) {\n if (event.url.indexOf(cordovaRedirectUri) == 0) {\n var callback = parseCallback(event.url);\n processCallback(callback, promise);\n closeBrowser();\n completed = true;\n } else {\n promise.setError();\n closeBrowser();\n }\n }\n });\n\n ref.addEventListener('exit', function(event) {\n if (!closed) {\n promise.setError({\n reason: \"closed_by_user\"\n });\n }\n });\n\n return promise.promise;\n },\n\n logout: function(options) {\n var promise = createPromise();\n\n var logoutUrl = kc.createLogoutUrl(options);\n var ref = cordovaOpenWindowWrapper(logoutUrl, '_blank', 'location=no,hidden=yes,clearcache=yes');\n\n var error;\n\n ref.addEventListener('loadstart', function(event) {\n if (event.url.indexOf(cordovaRedirectUri) == 0) {\n ref.close();\n }\n });\n\n ref.addEventListener('loaderror', function(event) {\n if (event.url.indexOf(cordovaRedirectUri) == 0) {\n ref.close();\n } else {\n error = true;\n ref.close();\n }\n });\n\n ref.addEventListener('exit', function(event) {\n if (error) {\n promise.setError();\n } else {\n kc.clearToken();\n promise.setSuccess();\n }\n });\n\n return promise.promise;\n },\n\n register : function(options) {\n var promise = createPromise();\n var registerUrl = kc.createRegisterUrl();\n var cordovaOptions = createCordovaOptions(options);\n var ref = cordovaOpenWindowWrapper(registerUrl, '_blank', cordovaOptions);\n ref.addEventListener('loadstart', function(event) {\n if (event.url.indexOf(cordovaRedirectUri) == 0) {\n ref.close();\n var oauth = parseCallback(event.url);\n processCallback(oauth, promise);\n }\n });\n return promise.promise;\n },\n\n accountManagement : function() {\n var accountUrl = kc.createAccountUrl();\n if (typeof accountUrl !== 'undefined') {\n var ref = cordovaOpenWindowWrapper(accountUrl, '_blank', 'location=no');\n ref.addEventListener('loadstart', function(event) {\n if (event.url.indexOf(cordovaRedirectUri) == 0) {\n ref.close();\n }\n });\n } else {\n throw \"Not supported by the OIDC server\";\n }\n },\n\n redirectUri: function(options) {\n return cordovaRedirectUri;\n }\n }\n }\n\n if (type == 'cordova-native') {\n loginIframe.enable = false;\n\n return {\n login: function(options) {\n var promise = createPromise();\n var loginUrl = kc.createLoginUrl(options);\n\n universalLinks.subscribe('keycloak', function(event) {\n universalLinks.unsubscribe('keycloak');\n window.cordova.plugins.browsertab.close();\n var oauth = parseCallback(event.url);\n processCallback(oauth, promise);\n });\n\n window.cordova.plugins.browsertab.openUrl(loginUrl);\n return promise.promise;\n },\n\n logout: function(options) {\n var promise = createPromise();\n var logoutUrl = kc.createLogoutUrl(options);\n\n universalLinks.subscribe('keycloak', function(event) {\n universalLinks.unsubscribe('keycloak');\n window.cordova.plugins.browsertab.close();\n kc.clearToken();\n promise.setSuccess();\n });\n\n window.cordova.plugins.browsertab.openUrl(logoutUrl);\n return promise.promise;\n },\n\n register : function(options) {\n var promise = createPromise();\n var registerUrl = kc.createRegisterUrl(options);\n universalLinks.subscribe('keycloak' , function(event) {\n universalLinks.unsubscribe('keycloak');\n window.cordova.plugins.browsertab.close();\n var oauth = parseCallback(event.url);\n processCallback(oauth, promise);\n });\n window.cordova.plugins.browsertab.openUrl(registerUrl);\n return promise.promise;\n\n },\n\n accountManagement : function() {\n var accountUrl = kc.createAccountUrl();\n if (typeof accountUrl !== 'undefined') {\n window.cordova.plugins.browsertab.openUrl(accountUrl);\n } else {\n throw \"Not supported by the OIDC server\";\n }\n },\n\n redirectUri: function(options) {\n if (options && options.redirectUri) {\n return options.redirectUri;\n } else if (kc.redirectUri) {\n return kc.redirectUri;\n } else {\n return \"http://localhost\";\n }\n }\n }\n }\n\n throw 'invalid adapter type: ' + type;\n }\n\n var LocalStorage = function() {\n if (!(this instanceof LocalStorage)) {\n return new LocalStorage();\n }\n\n localStorage.setItem('kc-test', 'test');\n localStorage.removeItem('kc-test');\n\n var cs = this;\n\n function clearExpired() {\n var time = new Date().getTime();\n for (var i = 0; i < localStorage.length; i++) {\n var key = localStorage.key(i);\n if (key && key.indexOf('kc-callback-') == 0) {\n var value = localStorage.getItem(key);\n if (value) {\n try {\n var expires = JSON.parse(value).expires;\n if (!expires || expires < time) {\n localStorage.removeItem(key);\n }\n } catch (err) {\n localStorage.removeItem(key);\n }\n }\n }\n }\n }\n\n cs.get = function(state) {\n if (!state) {\n return;\n }\n\n var key = 'kc-callback-' + state;\n var value = localStorage.getItem(key);\n if (value) {\n localStorage.removeItem(key);\n value = JSON.parse(value);\n }\n\n clearExpired();\n return value;\n };\n\n cs.add = function(state) {\n clearExpired();\n\n var key = 'kc-callback-' + state.state;\n state.expires = new Date().getTime() + (60 * 60 * 1000);\n localStorage.setItem(key, JSON.stringify(state));\n };\n };\n\n var CookieStorage = function() {\n if (!(this instanceof CookieStorage)) {\n return new CookieStorage();\n }\n\n var cs = this;\n\n cs.get = function(state) {\n if (!state) {\n return;\n }\n\n var value = getCookie('kc-callback-' + state);\n setCookie('kc-callback-' + state, '', cookieExpiration(-100));\n if (value) {\n return JSON.parse(value);\n }\n };\n\n cs.add = function(state) {\n setCookie('kc-callback-' + state.state, JSON.stringify(state), cookieExpiration(60));\n };\n\n cs.removeItem = function(key) {\n setCookie(key, '', cookieExpiration(-100));\n };\n\n var cookieExpiration = function (minutes) {\n var exp = new Date();\n exp.setTime(exp.getTime() + (minutes*60*1000));\n return exp;\n };\n\n var getCookie = function (key) {\n var name = key + '=';\n var ca = document.cookie.split(';');\n for (var i = 0; i < ca.length; i++) {\n var c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) == 0) {\n return c.substring(name.length, c.length);\n }\n }\n return '';\n };\n\n var setCookie = function (key, value, expirationDate) {\n var cookie = key + '=' + value + '; '\n + 'expires=' + expirationDate.toUTCString() + '; ';\n document.cookie = cookie;\n };\n };\n\n function createCallbackStorage() {\n try {\n return new LocalStorage();\n } catch (err) {\n }\n\n return new CookieStorage();\n }\n\n function createLogger(fn) {\n return function() {\n if (kc.enableLogging) {\n fn.apply(console, Array.prototype.slice.call(arguments));\n }\n };\n }\n}\n\nexport { Keycloak as default };\n","import Keycloak, { KeycloakInitOptions, KeycloakLogoutOptions } from 'keycloak-js';\n\nexport const appendParentOriginIntoUrl = (url: string, loggingEnabled: boolean): string => {\n var isInIframe = window === window.parent ? false : true;\n\n if (isInIframe) {\n try {\n // window.opener.location.href, window.opener.location.href throw an error due to security reasons\n\n const documentReferrer = document.referrer;\n const documentReferrerHost = documentReferrer.split('/')[2];\n\n if (loggingEnabled) {\n console.info('DOCUMENT REFERRER: ', documentReferrer);\n console.info('DOCUMENT REFERRER HOST: ', documentReferrerHost);\n }\n\n const firstAncestorOrigin = window.location.ancestorOrigins?.[0];\n const firstAncestorOriginHost = firstAncestorOrigin?.split('/')?.[2];\n\n if (loggingEnabled) {\n console.info('ANCESTOR ORIGIN: ', firstAncestorOrigin);\n console.info('ANCESTOR ORIGIN HOST: ', firstAncestorOriginHost);\n }\n\n const parentHost =\n window.location !== window.parent.location\n ? documentReferrerHost ?? firstAncestorOriginHost\n : window.location.hostname;\n\n if (loggingEnabled) {\n console.info('WINK PARENT ORIGIN HOST: ', parentHost);\n }\n\n url = url + '&wink-parent-origin=' + encodeURIComponent(parentHost);\n } catch (error) {\n console.error('Unable to add wink parent origin query param due to error: ', error);\n }\n }\n\n return url;\n};\n\nexport const defaultKeycloakInitConfig: KeycloakInitOptions = {\n onLoad: 'check-sso',\n pkceMethod: 'S256',\n silentCheckSsoRedirectUri: window.location.origin + '/silent-check-sso.html',\n checkLoginIframe: true,\n silentCheckSsoFallback: true,\n enableLogging: true,\n};\n\nexport const getUrl = ({ authServerUrl, realm }: Keycloak) => {\n if (!authServerUrl) {\n return null;\n }\n\n if (authServerUrl.charAt(authServerUrl.length - 1) === '/') {\n return authServerUrl + 'realms/' + encodeURIComponent(realm!);\n }\n\n return authServerUrl + '/realms/' + encodeURIComponent(realm!);\n};\n\nexport const getRedirectUri = (keycloak: Keycloak, options?: KeycloakLogoutOptions | undefined) => {\n return options?.redirectUri\n ? options.redirectUri\n : keycloak.redirectUri\n ? keycloak.redirectUri\n : location.href;\n};\n\nexport const getLogoutUrl = (keycloak: Keycloak, options?: KeycloakLogoutOptions): string => {\n const { idToken, clientId } = keycloak;\n\n return (\n getUrl(keycloak) +\n '/winklogout' +\n '?post_logout_redirect_uri=' +\n encodeURIComponent(getRedirectUri(keycloak, options)) +\n '&id_token_hint=' +\n encodeURIComponent(idToken!) +\n '&client_id=' +\n encodeURIComponent(clientId!)\n );\n};\n\nexport const getLoginUrl = ({ createLoginUrl }: Keycloak, loggingEnabled: boolean): string => {\n const loginUrl = appendParentOriginIntoUrl(createLoginUrl(), loggingEnabled);\n\n return loginUrl;\n};\n\nconst changeUrlWithoutReloading = (url: string) => {\n const stateObj = { page: url };\n history.pushState(stateObj, '', url);\n};\n\nexport const getUrlParamValue = (paramName: string) => {\n const queryString = window.location.search;\n const params = new URLSearchParams(queryString);\n return params.get(paramName);\n};\n\nexport const removeUrlParam = (paramName: string) => {\n const originalUrl = window.location;\n const updatedUrl = removeParameterFromUrl(originalUrl.href, paramName);\n changeUrlWithoutReloading(updatedUrl);\n};\n\nconst removeParameterFromUrl = (url: string, parameter: string) => {\n const urlObj = new URL(url);\n const searchParams = urlObj.searchParams;\n searchParams.delete(parameter);\n urlObj.search = searchParams.toString();\n const updatedUrl = urlObj.toString();\n return updatedUrl;\n};\n\nexport const winkSetCookie = (name: string, value: string, expiration = 1) => {\n const d = new Date();\n d.setTime(d.getTime() + expiration * 24 * 60 * 60 * 1000);\n let expires = 'expires=' + d.toUTCString();\n document.cookie = name + '=' + value + ';' + expires + ';path=/';\n};\n\nexport const winkGetCookie = (cname: string) => {\n let name = cname + '=';\n let decodedCookie = decodeURIComponent(document.cookie);\n let ca = decodedCookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) == ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) == 0) {\n return c.substring(name.length, c.length);\n }\n }\n return '';\n};\n\nexport const winkEraseCookie = (name: string) => {\n document.cookie = name + '=; Max-Age=-99999999;';\n};\n","import OriginalKeycloak, {\n KeycloakConfig,\n KeycloakError,\n KeycloakLoginOptions,\n KeycloakLogoutOptions,\n} from 'keycloak-js';\n\nimport {\n defaultKeycloakInitConfig,\n getLogoutUrl,\n appendParentOriginIntoUrl,\n getUrlParamValue,\n removeUrlParam,\n winkGetCookie,\n winkEraseCookie,\n winkSetCookie,\n} from './helper';\n\ntype WinkInitParams = {\n onFailure?(error: unknown): void;\n onSuccess?(): void | Promise;\n};\n\ntype WinkKeycloakConfig = KeycloakConfig & {\n onAuthErrorFailure?(error: KeycloakError): void;\n loggingEnabled?: boolean;\n};\n\ntype WinkLoginParams = KeycloakLoginOptions & {\n onFailure?(error: unknown): void;\n};\n\ntype WinkLogoutParams = KeycloakLogoutOptions & {\n onFailure?(error: unknown): void;\n};\n\nclass CustomKeycloak extends OriginalKeycloak {\n onAuthErrorFailure?: (error: KeycloakError) => void;\n loggingEnabled: boolean = true;\n\n constructor(config: WinkKeycloakConfig) {\n super(config);\n this.onAuthErrorFailure = config.onAuthErrorFailure;\n this.loggingEnabled = config.loggingEnabled ?? true;\n }\n\n onReady(authenticated?: boolean | undefined): void {\n if (this.loggingEnabled) {\n console.debug('Keycloak client ready.');\n console.debug('Keycloak client authenticated: ', authenticated);\n }\n }\n\n onAuthError(errorData: KeycloakError): void {\n this.onAuthErrorFailure?.(errorData);\n\n if (this.loggingEnabled) {\n console.error('Keycloak client authentication error: ', errorData);\n }\n }\n\n // NOTE custom logout url\n createLogoutUrl = (options?: KeycloakLogoutOptions): string => {\n try {\n const logoutUrl = getLogoutUrl(this, options);\n\n return logoutUrl;\n } catch (error) {\n if (this.loggingEnabled) {\n console.error('Error while constructing the logout url: ', error);\n }\n throw error;\n }\n };\n\n winkInit = async (params?: WinkInitParams): Promise => {\n const { onFailure, onSuccess } = params ?? {};\n try {\n if (this.loggingEnabled) {\n console.debug('Calling Keycloak init.');\n }\n const authenticated = await this.init(defaultKeycloakInitConfig);\n\n if (authenticated) {\n onSuccess?.();\n // Following line is workaround for iframe 3rd party cookie issue\n winkSetCookie('wink_id_token', this.idToken!);\n }\n // Following code is workaround for iframe 3rd party cookie issue\n else {\n // Following if is workaround for iframe 3rd party cookie issue\n if (getUrlParamValue('login_session_state') === '1') {\n this.winkLogin();\n }\n }\n } catch (error) {\n if (this.loggingEnabled) {\n console.error('Error while wink client initialization: ', error);\n }\n onFailure?.(error);\n }\n };\n\n winkLogin = async (params?: WinkLoginParams): Promise => {\n const { onFailure } = params ?? {};\n try {\n if (this.loggingEnabled) {\n console.debug('Calling Keycloak login.');\n }\n\n await this.login(params);\n } catch (error) {\n if (this.loggingEnabled) {\n console.error('Error while wink client login: ', error);\n }\n\n onFailure?.(error);\n }\n };\n\n winkLogout = async (params?: WinkLogoutParams): Promise => {\n const { onFailure } = params ?? {};\n try {\n if (this.loggingEnabled) {\n console.debug('Calling Keycloak logout.');\n }\n // Following code is workaround for iframe 3rd party cookie issue\n this.idToken = this.idToken ?? winkGetCookie('wink_id_token');\n winkEraseCookie('wink_id_token');\n removeUrlParam('login_session_state');\n // End of workaround\n\n await this.logout(params);\n } catch (error) {\n if (this.loggingEnabled) {\n console.error('Error while wink client logout: ', error);\n }\n\n onFailure?.(error);\n }\n };\n}\n\n//TODO custom login url workaround, can not override createLoginUrl, https://github.com/keycloak/keycloak/discussions/20989\nconst getWinkLoginClient = (config: WinkKeycloakConfig) => {\n const keycloakInstance = new CustomKeycloak(config);\n\n const originalCreateLoginUrl = keycloakInstance.createLoginUrl;\n\n keycloakInstance.createLoginUrl = function (options?: KeycloakLoginOptions) {\n const url = originalCreateLoginUrl.call(this, options);\n const urlWithParentOrigin = appendParentOriginIntoUrl(url, config.loggingEnabled ?? true);\n\n return urlWithParentOrigin;\n };\n\n return keycloakInstance;\n};\n\nconsole.info('winklogin.module.js - version 2.1.1');\n\n//@ts-ignore\nwindow.getWinkLoginClient = getWinkLoginClient;\n"],"names":["byteLength_1","byteLength","toByteArray_1","toByteArray","fromByteArray_1","fromByteArray","lookup","revLookup","Arr","Uint8Array","Array","code","i","len","length","charCodeAt","getLens","b64","Error","validLen","indexOf","lens","placeHoldersLen","_byteLength","tmp","arr","curByte","tripletToBase64","num","encodeChunk","uint8","start","end","output","push","join","extraBytes","parts","maxChunkLength","len2","ERROR","WINDOW","window","root","JS_SHA256_NO_WINDOW","WEB_WORKER","self","NODE_JS","JS_SHA256_NO_NODE_JS","process","versions","node","global","COMMON_JS","JS_SHA256_NO_COMMON_JS","module","exports","ARRAY_BUFFER","JS_SHA256_NO_ARRAY_BUFFER","ArrayBuffer","HEX_CHARS","split","EXTRA","SHIFT","K","OUTPUT_TYPES","blocks","isArray","obj","Object","prototype","toString","call","JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW","isView","buffer","constructor","createOutputMethod","outputType","is224","message","Sha256","update","createMethod","method","nodeWrap","create","type","crypto","eval","Buffer","algorithm","nodeMethod","createHash","digest","createHmacOutputMethod","key","HmacSha256","createHmacMethod","sharedMemory","this","h0","h1","h2","h3","h4","h5","h6","h7","block","bytes","hBytes","finalized","hashed","first","index","array","oKeyPad","iKeyPad","b","inner","notString","lastByteIndex","hash","finalize","j","t1","ab","da","cd","bc","a","c","d","e","f","g","h","hex","arrayBuffer","dataView","DataView","setUint32","innerHash","sha256","sha224","hmac","Promise","Keycloak","config","adapter","callbackStorage","kc","refreshQueue","loginIframe","enable","callbackList","interval","scripts","document","getElementsByTagName","src","iframeVersion","substring","useNonce","logInfo","createLogger","console","info","logWarn","warn","generateRandomString","alphabet","randomData","msCrypto","getRandomValues","Math","floor","random","generateRandomData","chars","String","fromCharCode","apply","getRealmUrl","authServerUrl","charAt","encodeURIComponent","realm","processCallback","oauth","promise","error","prompt","timeLocal","Date","getTime","onActionUpdate","errorData","error_description","onAuthError","setError","setSuccess","flow","access_token","id_token","authSuccess","params","url","endpoints","token","req","XMLHttpRequest","open","setRequestHeader","clientId","redirectUri","pkceCodeVerifier","withCredentials","onreadystatechange","readyState","status","tokenResponse","JSON","parse","responseText","scheduleCheckIframe","send","accessToken","refreshToken","idToken","fulfillPromise","setToken","tokenParsed","nonce","storedNonce","refreshTokenParsed","idTokenParsed","clearToken","onAuthSuccess","fileLoaded","xhr","responseURL","startsWith","tokenTimeoutHandle","clearTimeout","decodeToken","sessionId","session_state","authenticated","subject","sub","realmAccess","realm_access","resourceAccess","resource_access","timeSkew","iat","onTokenExpired","expiresIn","round","setTimeout","str","replace","decodeURIComponent","escape","atob","createUUID","hexDigits","s","substr","parseCallback","supportedParams","newUrl","parsed","queryIndex","fragmentIndex","responseMode","parseCallbackParams","paramsString","oauthParams","state","parseCallbackUrl","oauthState","get","valid","p","result","slice","createPromise","resolve","reject","setupCheckLoginIframe","iframe","createElement","onload","authUrl","authorize","iframeOrigin","location","origin","protocol","hostname","port","checkSessionIframe","setAttribute","style","display","body","appendChild","addEventListener","event","contentWindow","source","data","callbacks","splice","checkLoginIframe","then","unchanged","msg","postMessage","check3pCookiesSupported","silentCheckSsoRedirectUri","thirdPartyCookiesIframe","messageCallback","silentCheckSsoFallback","removeChild","removeEventListener","timeout","errorMessage","timeoutHandle","timeoutPromise","race","finally","applyTimeoutToPromise","messageReceiveTimeout","loadAdapter","login","options","assign","createLoginUrl","logout","createLogoutUrl","register","createRegisterUrl","accountManagement","accountUrl","createAccountUrl","href","encodeHash","cordovaOpenWindowWrapper","loginUrl","target","cordova","InAppBrowser","createCordovaOptions","userOptions","cordovaOptions","keys","reduce","optionName","shallowCloneCordovaOptions","hidden","formatCordovaOptions","cordovaRedirectUri","ref","completed","closed","closeBrowser","close","reason","logoutUrl","registerUrl","universalLinks","subscribe","unsubscribe","plugins","browsertab","openUrl","init","initOptions","didInitialize","LocalStorage","err","CookieStorage","createCallbackStorage","Cordova","checkLoginIframeInterval","onLoad","loginRequired","responseType","pkceMethod","enableLogging","scope","initPromise","onReady","catch","configPromise","configUrl","setupOidcEndoints","oidcConfiguration","authorization_endpoint","token_endpoint","end_session_endpoint","check_session_iframe","userinfo","userinfo_endpoint","oidcProvider","oidcProviderConfigUrl","match","loadConfig","doLogin","locale","checkSsoSilently","ifrm","processInit","callback","history","replaceState","updateToken","checkReadyState","domReady","baseUrl","callbackState","action","maxAge","loginHint","idpHint","acr","claimsParameter","stringify","codeVerifier","pkceChallenge","hashBytes","base64","generatePkceChallenge","add","undefined","hasRealmRole","role","access","roles","hasResourceRole","resource","loadUserProfile","profile","loadUserInfo","userInfo","isTokenExpired","minValidity","ceil","isNaN","exec","onAuthRefreshSuccess","pop","onAuthRefreshError","onAuthLogout","clearExpired","time","localStorage","value","getItem","expires","removeItem","setItem","cs","getCookie","setCookie","cookieExpiration","minutes","exp","setTime","name","ca","cookie","expirationDate","toUTCString","fn","arguments","appendParentOriginIntoUrl","loggingEnabled","parent","_window$location$ance","_firstAncestorOrigin$","documentReferrer","referrer","documentReferrerHost","firstAncestorOrigin","ancestorOrigins","firstAncestorOriginHost","parentHost","defaultKeycloakInitConfig","getUrl","getRedirectUri","keycloak","getLogoutUrl","changeUrlWithoutReloading","pushState","page","getUrlParamValue","paramName","queryString","search","URLSearchParams","updatedUrl","removeParameterFromUrl","originalUrl","parameter","urlObj","searchParams","winkSetCookie","expiration","cname","winkEraseCookie","CustomKeycloak","_OriginalKeycloak","_config$loggingEnable","_this","onAuthErrorFailure","_assertThisInitialized","winkInit","onFailure","onSuccess","_temp2","_catch","debug","winkLogin","_temp4","winkLogout","_temp6","_this$idToken","winkGetCookie","removeUrlParam","_inheritsLoose","_this$onAuthErrorFail","OriginalKeycloak","getWinkLoginClient","keycloakInstance","originalCreateLoginUrl","_config$loggingEnable2"],"mappings":"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"}