UNPKG

wink-auth-js

Version:

Browser Javascript keycloak client

1 lines 146 kB
{"version":3,"file":"winklogin.modern.mjs","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<void>;\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<void> => {\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<void> => {\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<void> => {\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","getUrl","getRedirectUri","keycloak","getLogoutUrl","changeUrlWithoutReloading","pushState","page","getUrlParamValue","paramName","queryString","search","removeUrlParam","originalUrl","updatedUrl","removeParameterFromUrl","parameter","urlObj","searchParams","delete","expiration","cname","winkEraseCookie","CustomKeycloak","OriginalKeycloak","_this","_config$loggingEnable","super","onAuthErrorFailure","winkInit","async","onFailure","onSuccess","debug","defaultKeycloakInitConfig","winkSetCookie","winkLogin","winkLogout","_this$idToken","winkGetCookie","_this$onAuthErrorFail","getWinkLoginClient","keycloakInstance","originalCreateLoginUrl","_config$loggingEnable2"],"mappings":"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"}