{"version":3,"sources":["jsdelivr-header.js","/npm/xpresspower-keycloak@11.0.0/xpresspower-keycloak.js"],"names":[],"mappings":"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","file":"/npm/xpresspower-keycloak@11.0.0/xpresspower-keycloak.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/xpresspower-keycloak@11.0.0/xpresspower-keycloak.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/*\r\n * Copyright 2016 Red Hat, Inc. and/or its affiliates\r\n * and other contributors as indicated by the @author tags.\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n\r\n(function(root, factory) {\r\n    if ( typeof exports === 'object' ) {\r\n        if ( typeof module === 'object' ) {\r\n            module.exports = factory( require(\"js-sha256\"), require(\"base64-js\") );\r\n        } else {\r\n            exports[\"keycloak\"] = factory( require(\"js-sha256\"), require(\"base64-js\") );\r\n        }\r\n    } else {\r\n        /**\r\n        * [js-sha256]{@link https://github.com/emn178/js-sha256}\r\n        *\r\n        * @version 0.9.0\r\n        * @author Chen, Yi-Cyuan [emn178@gmail.com]\r\n        * @copyright Chen, Yi-Cyuan 2014-2017\r\n        * @license MIT\r\n        */\r\n        !function () { \"use strict\"; function t(t, i) { i ? (d[0] = d[16] = d[1] = d[2] = d[3] = d[4] = d[5] = d[6] = d[7] = d[8] = d[9] = d[10] = d[11] = d[12] = d[13] = d[14] = d[15] = 0, this.blocks = d) : this.blocks = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], t ? (this.h0 = 3238371032, this.h1 = 914150663, this.h2 = 812702999, this.h3 = 4144912697, this.h4 = 4290775857, this.h5 = 1750603025, this.h6 = 1694076839, this.h7 = 3204075428) : (this.h0 = 1779033703, this.h1 = 3144134277, this.h2 = 1013904242, this.h3 = 2773480762, this.h4 = 1359893119, this.h5 = 2600822924, this.h6 = 528734635, this.h7 = 1541459225), this.block = this.start = this.bytes = this.hBytes = 0, this.finalized = this.hashed = !1, this.first = !0, this.is224 = t } function i(i, r, s) { var e, n = typeof i; if (\"string\" === n) { var o, a = [], u = i.length, c = 0; for (e = 0; e < u; ++e)(o = i.charCodeAt(e)) < 128 ? a[c++] = o : o < 2048 ? (a[c++] = 192 | o >> 6, a[c++] = 128 | 63 & o) : o < 55296 || o >= 57344 ? (a[c++] = 224 | o >> 12, a[c++] = 128 | o >> 6 & 63, a[c++] = 128 | 63 & o) : (o = 65536 + ((1023 & o) << 10 | 1023 & i.charCodeAt(++e)), a[c++] = 240 | o >> 18, a[c++] = 128 | o >> 12 & 63, a[c++] = 128 | o >> 6 & 63, a[c++] = 128 | 63 & o); i = a } else { if (\"object\" !== n) throw new Error(h); if (null === i) throw new Error(h); if (f && i.constructor === ArrayBuffer) i = new Uint8Array(i); else if (!(Array.isArray(i) || f && ArrayBuffer.isView(i))) throw new Error(h) } i.length > 64 && (i = new t(r, !0).update(i).array()); var y = [], p = []; for (e = 0; e < 64; ++e) { var l = i[e] || 0; y[e] = 92 ^ l, p[e] = 54 ^ l } t.call(this, r, s), this.update(p), this.oKeyPad = y, this.inner = !0, this.sharedMemory = s } var h = \"input is invalid type\", r = \"object\" == typeof window, s = r ? window : {}; s.JS_SHA256_NO_WINDOW && (r = !1); var e = !r && \"object\" == typeof self, n = !s.JS_SHA256_NO_NODE_JS && \"object\" == typeof process && process.versions && process.versions.node; n ? s = global : e && (s = self); var o = !s.JS_SHA256_NO_COMMON_JS && \"object\" == typeof module && module.exports, a = \"function\" == typeof define && define.amd, f = !s.JS_SHA256_NO_ARRAY_BUFFER && \"undefined\" != typeof ArrayBuffer, u = \"0123456789abcdef\".split(\"\"), c = [-2147483648, 8388608, 32768, 128], y = [24, 16, 8, 0], p = [1116352408, 1899447441, 3049323471, 3921009573, 961987163, 1508970993, 2453635748, 2870763221, 3624381080, 310598401, 607225278, 1426881987, 1925078388, 2162078206, 2614888103, 3248222580, 3835390401, 4022224774, 264347078, 604807628, 770255983, 1249150122, 1555081692, 1996064986, 2554220882, 2821834349, 2952996808, 3210313671, 3336571891, 3584528711, 113926993, 338241895, 666307205, 773529912, 1294757372, 1396182291, 1695183700, 1986661051, 2177026350, 2456956037, 2730485921, 2820302411, 3259730800, 3345764771, 3516065817, 3600352804, 4094571909, 275423344, 430227734, 506948616, 659060556, 883997877, 958139571, 1322822218, 1537002063, 1747873779, 1955562222, 2024104815, 2227730452, 2361852424, 2428436474, 2756734187, 3204031479, 3329325298], l = [\"hex\", \"array\", \"digest\", \"arrayBuffer\"], d = []; !s.JS_SHA256_NO_NODE_JS && Array.isArray || (Array.isArray = function (t) { return \"[object Array]\" === Object.prototype.toString.call(t) }), !f || !s.JS_SHA256_NO_ARRAY_BUFFER_IS_VIEW && ArrayBuffer.isView || (ArrayBuffer.isView = function (t) { return \"object\" == typeof t && t.buffer && t.buffer.constructor === ArrayBuffer }); var A = function (i, h) { return function (r) { return new t(h, !0).update(r)[i]() } }, w = function (i) { var h = A(\"hex\", i); n && (h = b(h, i)), h.create = function () { return new t(i) }, h.update = function (t) { return h.create().update(t) }; for (var r = 0; r < l.length; ++r) { var s = l[r]; h[s] = A(s, i) } return h }, b = function (t, i) { var r = eval(\"require('crypto')\"), s = eval(\"require('buffer').Buffer\"), e = i ? \"sha224\" : \"sha256\", n = function (i) { if (\"string\" == typeof i) return r.createHash(e).update(i, \"utf8\").digest(\"hex\"); if (null === i || void 0 === i) throw new Error(h); return i.constructor === ArrayBuffer && (i = new Uint8Array(i)), Array.isArray(i) || ArrayBuffer.isView(i) || i.constructor === s ? r.createHash(e).update(new s(i)).digest(\"hex\") : t(i) }; return n }, v = function (t, h) { return function (r, s) { return new i(r, h, !0).update(s)[t]() } }, _ = function (t) { var h = v(\"hex\", t); h.create = function (h) { return new i(h, t) }, h.update = function (t, i) { return h.create(t).update(i) }; for (var r = 0; r < l.length; ++r) { var s = l[r]; h[s] = v(s, t) } return h }; t.prototype.update = function (t) { if (!this.finalized) { var i, r = typeof t; if (\"string\" !== r) { if (\"object\" !== r) throw new Error(h); if (null === t) throw new Error(h); if (f && t.constructor === ArrayBuffer) t = new Uint8Array(t); else if (!(Array.isArray(t) || f && ArrayBuffer.isView(t))) throw new Error(h); i = !0 } for (var s, e, n = 0, o = t.length, a = this.blocks; n < o;) { if (this.hashed && (this.hashed = !1, a[0] = this.block, a[16] = a[1] = a[2] = a[3] = a[4] = a[5] = a[6] = a[7] = a[8] = a[9] = a[10] = a[11] = a[12] = a[13] = a[14] = a[15] = 0), i) for (e = this.start; n < o && e < 64; ++n)a[e >> 2] |= t[n] << y[3 & e++]; else for (e = this.start; n < o && e < 64; ++n)(s = t.charCodeAt(n)) < 128 ? a[e >> 2] |= s << y[3 & e++] : s < 2048 ? (a[e >> 2] |= (192 | s >> 6) << y[3 & e++], a[e >> 2] |= (128 | 63 & s) << y[3 & e++]) : s < 55296 || s >= 57344 ? (a[e >> 2] |= (224 | s >> 12) << y[3 & e++], a[e >> 2] |= (128 | s >> 6 & 63) << y[3 & e++], a[e >> 2] |= (128 | 63 & s) << y[3 & e++]) : (s = 65536 + ((1023 & s) << 10 | 1023 & t.charCodeAt(++n)), a[e >> 2] |= (240 | s >> 18) << y[3 & e++], a[e >> 2] |= (128 | s >> 12 & 63) << y[3 & e++], a[e >> 2] |= (128 | s >> 6 & 63) << y[3 & e++], a[e >> 2] |= (128 | 63 & s) << y[3 & e++]); this.lastByteIndex = e, this.bytes += e - this.start, e >= 64 ? (this.block = a[16], this.start = e - 64, this.hash(), this.hashed = !0) : this.start = e } return this.bytes > 4294967295 && (this.hBytes += this.bytes / 4294967296 << 0, this.bytes = this.bytes % 4294967296), this } }, t.prototype.finalize = function () { if (!this.finalized) { this.finalized = !0; var t = this.blocks, i = this.lastByteIndex; t[16] = this.block, t[i >> 2] |= c[3 & i], this.block = t[16], i >= 56 && (this.hashed || this.hash(), t[0] = this.block, t[16] = t[1] = t[2] = t[3] = t[4] = t[5] = t[6] = t[7] = t[8] = t[9] = t[10] = t[11] = t[12] = t[13] = t[14] = t[15] = 0), t[14] = this.hBytes << 3 | this.bytes >>> 29, t[15] = this.bytes << 3, this.hash() } }, t.prototype.hash = function () { var t, i, h, r, s, e, n, o, a, f = this.h0, u = this.h1, c = this.h2, y = this.h3, l = this.h4, d = this.h5, A = this.h6, w = this.h7, b = this.blocks; for (t = 16; t < 64; ++t)i = ((s = b[t - 15]) >>> 7 | s << 25) ^ (s >>> 18 | s << 14) ^ s >>> 3, h = ((s = b[t - 2]) >>> 17 | s << 15) ^ (s >>> 19 | s << 13) ^ s >>> 10, b[t] = b[t - 16] + i + b[t - 7] + h << 0; for (a = u & c, t = 0; t < 64; t += 4)this.first ? (this.is224 ? (e = 300032, w = (s = b[0] - 1413257819) - 150054599 << 0, y = s + 24177077 << 0) : (e = 704751109, w = (s = b[0] - 210244248) - 1521486534 << 0, y = s + 143694565 << 0), this.first = !1) : (i = (f >>> 2 | f << 30) ^ (f >>> 13 | f << 19) ^ (f >>> 22 | f << 10), r = (e = f & u) ^ f & c ^ a, w = y + (s = w + (h = (l >>> 6 | l << 26) ^ (l >>> 11 | l << 21) ^ (l >>> 25 | l << 7)) + (l & d ^ ~l & A) + p[t] + b[t]) << 0, y = s + (i + r) << 0), i = (y >>> 2 | y << 30) ^ (y >>> 13 | y << 19) ^ (y >>> 22 | y << 10), r = (n = y & f) ^ y & u ^ e, A = c + (s = A + (h = (w >>> 6 | w << 26) ^ (w >>> 11 | w << 21) ^ (w >>> 25 | w << 7)) + (w & l ^ ~w & d) + p[t + 1] + b[t + 1]) << 0, i = ((c = s + (i + r) << 0) >>> 2 | c << 30) ^ (c >>> 13 | c << 19) ^ (c >>> 22 | c << 10), r = (o = c & y) ^ c & f ^ n, d = u + (s = d + (h = (A >>> 6 | A << 26) ^ (A >>> 11 | A << 21) ^ (A >>> 25 | A << 7)) + (A & w ^ ~A & l) + p[t + 2] + b[t + 2]) << 0, i = ((u = s + (i + r) << 0) >>> 2 | u << 30) ^ (u >>> 13 | u << 19) ^ (u >>> 22 | u << 10), r = (a = u & c) ^ u & y ^ o, l = f + (s = l + (h = (d >>> 6 | d << 26) ^ (d >>> 11 | d << 21) ^ (d >>> 25 | d << 7)) + (d & A ^ ~d & w) + p[t + 3] + b[t + 3]) << 0, f = s + (i + r) << 0; this.h0 = this.h0 + f << 0, this.h1 = this.h1 + u << 0, this.h2 = this.h2 + c << 0, this.h3 = this.h3 + y << 0, this.h4 = this.h4 + l << 0, this.h5 = this.h5 + d << 0, this.h6 = this.h6 + A << 0, this.h7 = this.h7 + w << 0 }, t.prototype.hex = function () { this.finalize(); var t = this.h0, i = this.h1, h = this.h2, r = this.h3, s = this.h4, e = this.h5, n = this.h6, o = this.h7, a = u[t >> 28 & 15] + u[t >> 24 & 15] + u[t >> 20 & 15] + u[t >> 16 & 15] + u[t >> 12 & 15] + u[t >> 8 & 15] + u[t >> 4 & 15] + u[15 & t] + u[i >> 28 & 15] + u[i >> 24 & 15] + u[i >> 20 & 15] + u[i >> 16 & 15] + u[i >> 12 & 15] + u[i >> 8 & 15] + u[i >> 4 & 15] + u[15 & i] + u[h >> 28 & 15] + u[h >> 24 & 15] + u[h >> 20 & 15] + u[h >> 16 & 15] + u[h >> 12 & 15] + u[h >> 8 & 15] + u[h >> 4 & 15] + u[15 & h] + u[r >> 28 & 15] + u[r >> 24 & 15] + u[r >> 20 & 15] + u[r >> 16 & 15] + u[r >> 12 & 15] + u[r >> 8 & 15] + u[r >> 4 & 15] + u[15 & r] + u[s >> 28 & 15] + u[s >> 24 & 15] + u[s >> 20 & 15] + u[s >> 16 & 15] + u[s >> 12 & 15] + u[s >> 8 & 15] + u[s >> 4 & 15] + u[15 & s] + u[e >> 28 & 15] + u[e >> 24 & 15] + u[e >> 20 & 15] + u[e >> 16 & 15] + u[e >> 12 & 15] + u[e >> 8 & 15] + u[e >> 4 & 15] + u[15 & e] + u[n >> 28 & 15] + u[n >> 24 & 15] + u[n >> 20 & 15] + u[n >> 16 & 15] + u[n >> 12 & 15] + u[n >> 8 & 15] + u[n >> 4 & 15] + u[15 & n]; return this.is224 || (a += u[o >> 28 & 15] + u[o >> 24 & 15] + u[o >> 20 & 15] + u[o >> 16 & 15] + u[o >> 12 & 15] + u[o >> 8 & 15] + u[o >> 4 & 15] + u[15 & o]), a }, t.prototype.toString = t.prototype.hex, t.prototype.digest = function () { this.finalize(); var t = this.h0, i = this.h1, h = this.h2, r = this.h3, s = this.h4, e = this.h5, n = this.h6, o = this.h7, a = [t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, 255 & t, i >> 24 & 255, i >> 16 & 255, i >> 8 & 255, 255 & i, h >> 24 & 255, h >> 16 & 255, h >> 8 & 255, 255 & h, r >> 24 & 255, r >> 16 & 255, r >> 8 & 255, 255 & r, s >> 24 & 255, s >> 16 & 255, s >> 8 & 255, 255 & s, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, n >> 24 & 255, n >> 16 & 255, n >> 8 & 255, 255 & n]; return this.is224 || a.push(o >> 24 & 255, o >> 16 & 255, o >> 8 & 255, 255 & o), a }, t.prototype.array = t.prototype.digest, t.prototype.arrayBuffer = function () { this.finalize(); var t = new ArrayBuffer(this.is224 ? 28 : 32), i = new DataView(t); return i.setUint32(0, this.h0), i.setUint32(4, this.h1), i.setUint32(8, this.h2), i.setUint32(12, this.h3), i.setUint32(16, this.h4), i.setUint32(20, this.h5), i.setUint32(24, this.h6), this.is224 || i.setUint32(28, this.h7), t }, i.prototype = new t, i.prototype.finalize = function () { if (t.prototype.finalize.call(this), this.inner) { this.inner = !1; var i = this.array(); t.call(this, this.is224, this.sharedMemory), this.update(this.oKeyPad), this.update(i), t.prototype.finalize.call(this) } }; var B = w(); B.sha256 = B, B.sha224 = w(!0), B.sha256.hmac = _(), B.sha224.hmac = _(!0), o ? module.exports = B : (s.sha256 = B.sha256, s.sha224 = B.sha224, a && define(function () { return B })) }();\r\n\r\n        /**\r\n         * [base64-js]{@link https://github.com/beatgammit/base64-js}\r\n         *\r\n         * @version v1.3.0\r\n         * @author Kirill, Fomichev\r\n         * @copyright Kirill, Fomichev 2014\r\n         * @license MIT\r\n         */\r\n        (function (r) { if (typeof exports === \"object\" && typeof module !== \"undefined\") { module.exports = r() } else if (typeof define === \"function\" && define.amd) { define([], r) } else { var e; if (typeof window !== \"undefined\") { e = window } else if (typeof global !== \"undefined\") { e = global } else if (typeof self !== \"undefined\") { e = self } else { e = this } e.base64js = r() } })(function () { var r, e, n; return function () { function r(e, n, t) { function o(f, i) { if (!n[f]) { if (!e[f]) { var u = \"function\" == typeof require && require; if (!i && u) return u(f, !0); if (a) return a(f, !0); var v = new Error(\"Cannot find module '\" + f + \"'\"); throw v.code = \"MODULE_NOT_FOUND\", v } var d = n[f] = { exports: {} }; e[f][0].call(d.exports, function (r) { var n = e[f][1][r]; return o(n || r) }, d, d.exports, r, e, n, t) } return n[f].exports } for (var a = \"function\" == typeof require && require, f = 0; f < t.length; f++)o(t[f]); return o } return r }()({ \"/\": [function (r, e, n) { \"use strict\"; n.byteLength = d; n.toByteArray = h; n.fromByteArray = p; var t = []; var o = []; var a = typeof Uint8Array !== \"undefined\" ? Uint8Array : Array; var f = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\"; for (var i = 0, u = f.length; i < u; ++i) { t[i] = f[i]; o[f.charCodeAt(i)] = i } o[\"-\".charCodeAt(0)] = 62; o[\"_\".charCodeAt(0)] = 63; function v(r) { var e = r.length; if (e % 4 > 0) { throw new Error(\"Invalid string. Length must be a multiple of 4\") } var n = r.indexOf(\"=\"); if (n === -1) n = e; var t = n === e ? 0 : 4 - n % 4; return [n, t] } function d(r) { var e = v(r); var n = e[0]; var t = e[1]; return (n + t) * 3 / 4 - t } function c(r, e, n) { return (e + n) * 3 / 4 - n } function h(r) { var e; var n = v(r); var t = n[0]; var f = n[1]; var i = new a(c(r, t, f)); var u = 0; var d = f > 0 ? t - 4 : t; for (var h = 0; h < d; h += 4) { e = o[r.charCodeAt(h)] << 18 | o[r.charCodeAt(h + 1)] << 12 | o[r.charCodeAt(h + 2)] << 6 | o[r.charCodeAt(h + 3)]; i[u++] = e >> 16 & 255; i[u++] = e >> 8 & 255; i[u++] = e & 255 } if (f === 2) { e = o[r.charCodeAt(h)] << 2 | o[r.charCodeAt(h + 1)] >> 4; i[u++] = e & 255 } if (f === 1) { e = o[r.charCodeAt(h)] << 10 | o[r.charCodeAt(h + 1)] << 4 | o[r.charCodeAt(h + 2)] >> 2; i[u++] = e >> 8 & 255; i[u++] = e & 255 } return i } function s(r) { return t[r >> 18 & 63] + t[r >> 12 & 63] + t[r >> 6 & 63] + t[r & 63] } function l(r, e, n) { var t; var o = []; for (var a = e; a < n; a += 3) { t = (r[a] << 16 & 16711680) + (r[a + 1] << 8 & 65280) + (r[a + 2] & 255); o.push(s(t)) } return o.join(\"\") } function p(r) { var e; var n = r.length; var o = n % 3; var a = []; var f = 16383; for (var i = 0, u = n - o; i < u; i += f) { a.push(l(r, i, i + f > u ? u : i + f)) } if (o === 1) { e = r[n - 1]; a.push(t[e >> 2] + t[e << 4 & 63] + \"==\") } else if (o === 2) { e = (r[n - 2] << 8) + r[n - 1]; a.push(t[e >> 10] + t[e >> 4 & 63] + t[e << 2 & 63] + \"=\") } return a.join(\"\") } }, {}] }, {}, [])(\"/\") });\r\n\r\n        /**\r\n         * [promise-polyfill]{@link https://github.com/taylorhakes/promise-polyfill}\r\n         *\r\n         * @version v8.1.3\r\n         * @author Hakes, Taylor\r\n         * @copyright Hakes, Taylor 2014\r\n         * @license MIT\r\n         */\r\n        !function(e,n){\"object\"==typeof exports&&\"undefined\"!=typeof module?n():\"function\"==typeof define&&define.amd?define(n):n()}(0,function(){\"use strict\";function e(e){var n=this.constructor;return this.then(function(t){return n.resolve(e()).then(function(){return t})},function(t){return n.resolve(e()).then(function(){return n.reject(t)})})}function n(e){return!(!e||\"undefined\"==typeof e.length)}function t(){}function o(e){if(!(this instanceof o))throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof e)throw new TypeError(\"not a function\");this._state=0,this._handled=!1,this._value=undefined,this._deferreds=[],c(e,this)}function r(e,n){for(;3===e._state;)e=e._value;0!==e._state?(e._handled=!0,o._immediateFn(function(){var t=1===e._state?n.onFulfilled:n.onRejected;if(null!==t){var o;try{o=t(e._value)}catch(r){return void f(n.promise,r)}i(n.promise,o)}else(1===e._state?i:f)(n.promise,e._value)})):e._deferreds.push(n)}function i(e,n){try{if(n===e)throw new TypeError(\"A promise cannot be resolved with itself.\");if(n&&(\"object\"==typeof n||\"function\"==typeof n)){var t=n.then;if(n instanceof o)return e._state=3,e._value=n,void u(e);if(\"function\"==typeof t)return void c(function(e,n){return function(){e.apply(n,arguments)}}(t,n),e)}e._state=1,e._value=n,u(e)}catch(r){f(e,r)}}function f(e,n){e._state=2,e._value=n,u(e)}function u(e){2===e._state&&0===e._deferreds.length&&o._immediateFn(function(){e._handled||o._unhandledRejectionFn(e._value)});for(var n=0,t=e._deferreds.length;t>n;n++)r(e,e._deferreds[n]);e._deferreds=null}function c(e,n){var t=!1;try{e(function(e){t||(t=!0,i(n,e))},function(e){t||(t=!0,f(n,e))})}catch(o){if(t)return;t=!0,f(n,o)}}var a=setTimeout;o.prototype[\"catch\"]=function(e){return this.then(null,e)},o.prototype.then=function(e,n){var o=new this.constructor(t);return r(this,new function(e,n,t){this.onFulfilled=\"function\"==typeof e?e:null,this.onRejected=\"function\"==typeof n?n:null,this.promise=t}(e,n,o)),o},o.prototype[\"finally\"]=e,o.all=function(e){return new o(function(t,o){function r(e,n){try{if(n&&(\"object\"==typeof n||\"function\"==typeof n)){var u=n.then;if(\"function\"==typeof u)return void u.call(n,function(n){r(e,n)},o)}i[e]=n,0==--f&&t(i)}catch(c){o(c)}}if(!n(e))return o(new TypeError(\"Promise.all accepts an array\"));var i=Array.prototype.slice.call(e);if(0===i.length)return t([]);for(var f=i.length,u=0;i.length>u;u++)r(u,i[u])})},o.resolve=function(e){return e&&\"object\"==typeof e&&e.constructor===o?e:new o(function(n){n(e)})},o.reject=function(e){return new o(function(n,t){t(e)})},o.race=function(e){return new o(function(t,r){if(!n(e))return r(new TypeError(\"Promise.race accepts an array\"));for(var i=0,f=e.length;f>i;i++)o.resolve(e[i]).then(t,r)})},o._immediateFn=\"function\"==typeof setImmediate&&function(e){setImmediate(e)}||function(e){a(e,0)},o._unhandledRejectionFn=function(e){void 0!==console&&console&&console.warn(\"Possible Unhandled Promise Rejection:\",e)};var l=function(){if(\"undefined\"!=typeof self)return self;if(\"undefined\"!=typeof window)return window;if(\"undefined\"!=typeof global)return global;throw Error(\"unable to locate global object\")}();\"Promise\"in l?l.Promise.prototype[\"finally\"]||(l.Promise.prototype[\"finally\"]=e):l.Promise=o});\r\n\r\n        var Keycloak = factory( root[\"sha256\"], root[\"base64js\"] );\r\n        root[\"Keycloak\"] = Keycloak;\r\n\r\n        if ( typeof define === \"function\" && define.amd ) {\r\n            define( \"keycloak\", [], function () { return Keycloak; } );\r\n        }\r\n    }\r\n})(window, function (sha256_imported, base64js_imported) {\r\n    if (typeof Promise === 'undefined') {\r\n        throw Error('Keycloak requires an environment that supports Promises. Make sure that you include the appropriate polyfill.');\r\n    }\r\n\r\n    var loggedPromiseDeprecation = false;\r\n\r\n    function logPromiseDeprecation() {\r\n        if (!loggedPromiseDeprecation) {\r\n            loggedPromiseDeprecation = true;\r\n            console.warn('[KEYCLOAK] Usage of legacy style promise methods such as `.error()` and `.success()` has been deprecated and support will be removed in future versions. Use standard style promise methods such as `.then() and `.catch()` instead.');\r\n        }\r\n    }\r\n\r\n    function toKeycloakPromise(promise) {\r\n        promise.__proto__ = KeycloakPromise.prototype;\r\n        return promise;\r\n    }\r\n\r\n    function KeycloakPromise(executor) {\r\n        return toKeycloakPromise(new Promise(executor));\r\n    }\r\n\r\n    KeycloakPromise.prototype = Object.create(Promise.prototype);\r\n    KeycloakPromise.prototype.constructor = KeycloakPromise;\r\n\r\n    KeycloakPromise.prototype.success = function(callback) {\r\n        logPromiseDeprecation();\r\n\r\n        var promise = this.then(function handleSuccess(value) {\r\n            callback(value);\r\n        });\r\n\r\n        return toKeycloakPromise(promise);\r\n    };\r\n\r\n    KeycloakPromise.prototype.error = function(callback) {\r\n        logPromiseDeprecation();\r\n\r\n        var promise = this.catch(function handleError(error) {\r\n            callback(error);\r\n        });\r\n\r\n        return toKeycloakPromise(promise);\r\n    };\r\n\r\n    function Keycloak (config) {\r\n        if (!(this instanceof Keycloak)) {\r\n            return new Keycloak(config);\r\n        }\r\n\r\n        var kc = this;\r\n        var adapter;\r\n        var refreshQueue = [];\r\n        var callbackStorage;\r\n\r\n        var loginIframe = {\r\n            enable: true,\r\n            callbackList: [],\r\n            interval: 5\r\n        };\r\n\r\n        var scripts = document.getElementsByTagName('script');\r\n        for (var i = 0; i < scripts.length; i++) {\r\n            if ((scripts[i].src.indexOf('keycloak.js') !== -1 || scripts[i].src.indexOf('keycloak.min.js') !== -1) && scripts[i].src.indexOf('version=') !== -1) {\r\n                kc.iframeVersion = scripts[i].src.substring(scripts[i].src.indexOf('version=') + 8).split('&')[0];\r\n            }\r\n        }\r\n\r\n        var useNonce = true;\r\n        var logInfo = createLogger(console.info);\r\n        var logWarn = createLogger(console.warn);\r\n\r\n        kc.init = function (initOptions) {\r\n            kc.authenticated = false;\r\n\r\n            callbackStorage = createCallbackStorage();\r\n            var adapters = ['default', 'cordova', 'cordova-native'];\r\n\r\n            if (initOptions && adapters.indexOf(initOptions.adapter) > -1) {\r\n                adapter = loadAdapter(initOptions.adapter);\r\n            } else if (initOptions && typeof initOptions.adapter === \"object\") {\r\n                adapter = initOptions.adapter;\r\n            } else {\r\n                if (window.Cordova || window.cordova) {\r\n                    adapter = loadAdapter('cordova');\r\n                } else {\r\n                    adapter = loadAdapter();\r\n                }\r\n            }\r\n\r\n            if (initOptions) {\r\n                if (typeof initOptions.useNonce !== 'undefined') {\r\n                    useNonce = initOptions.useNonce;\r\n                }\r\n\r\n                if (typeof initOptions.checkLoginIframe !== 'undefined') {\r\n                    loginIframe.enable = initOptions.checkLoginIframe;\r\n                }\r\n\r\n                if (initOptions.checkLoginIframeInterval) {\r\n                    loginIframe.interval = initOptions.checkLoginIframeInterval;\r\n                }\r\n\r\n                if (initOptions.onLoad === 'login-required') {\r\n                    kc.loginRequired = true;\r\n                }\r\n\r\n                if (initOptions.responseMode) {\r\n                    if (initOptions.responseMode === 'query' || initOptions.responseMode === 'fragment') {\r\n                        kc.responseMode = initOptions.responseMode;\r\n                    } else {\r\n                        throw 'Invalid value for responseMode';\r\n                    }\r\n                }\r\n\r\n                if (initOptions.flow) {\r\n                    switch (initOptions.flow) {\r\n                        case 'standard':\r\n                            kc.responseType = 'code';\r\n                            break;\r\n                        case 'implicit':\r\n                            kc.responseType = 'id_token token';\r\n                            break;\r\n                        case 'hybrid':\r\n                            kc.responseType = 'code id_token token';\r\n                            break;\r\n                        default:\r\n                            throw 'Invalid value for flow';\r\n                    }\r\n                    kc.flow = initOptions.flow;\r\n                }\r\n\r\n                if (initOptions.timeSkew != null) {\r\n                    kc.timeSkew = initOptions.timeSkew;\r\n                }\r\n\r\n                if(initOptions.redirectUri) {\r\n                    kc.redirectUri = initOptions.redirectUri;\r\n                }\r\n\r\n                if (initOptions.silentCheckSsoRedirectUri) {\r\n                    kc.silentCheckSsoRedirectUri = initOptions.silentCheckSsoRedirectUri;\r\n                }\r\n\r\n                if (typeof initOptions.silentCheckSsoFallback === 'boolean') {\r\n                    kc.silentCheckSsoFallback = initOptions.silentCheckSsoFallback;\r\n                } else {\r\n                    kc.silentCheckSsoFallback = true;\r\n                }\r\n\r\n                if (initOptions.pkceMethod) {\r\n                    if (initOptions.pkceMethod !== \"S256\") {\r\n                        throw 'Invalid value for pkceMethod';\r\n                    }\r\n                    kc.pkceMethod = initOptions.pkceMethod;\r\n                }\r\n\r\n                if (typeof initOptions.enableLogging === 'boolean') {\r\n                    kc.enableLogging = initOptions.enableLogging;\r\n                } else {\r\n                    kc.enableLogging = false;\r\n                }\r\n            }\r\n\r\n            if (!kc.responseMode) {\r\n                kc.responseMode = 'fragment';\r\n            }\r\n            if (!kc.responseType) {\r\n                kc.responseType = 'code';\r\n                kc.flow = 'standard';\r\n            }\r\n\r\n            var promise = createPromise();\r\n\r\n            var initPromise = createPromise();\r\n            initPromise.promise.then(function() {\r\n                kc.onReady && kc.onReady(kc.authenticated);\r\n                promise.setSuccess(kc.authenticated);\r\n            }).catch(function(errorData) {\r\n                promise.setError(errorData);\r\n            });\r\n\r\n            var configPromise = loadConfig(config);\r\n\r\n            function onLoad() {\r\n                var doLogin = function(prompt) {\r\n                    if (!prompt) {\r\n                        options.prompt = 'none';\r\n                    }\r\n\r\n                    kc.login(options).then(function () {\r\n                        initPromise.setSuccess();\r\n                    }).catch(function () {\r\n                        initPromise.setError();\r\n                    });\r\n                }\r\n\r\n                var checkSsoSilently = function() {\r\n                    var ifrm = document.createElement(\"iframe\");\r\n                    var src = kc.createLoginUrl({prompt: 'none', redirectUri: kc.silentCheckSsoRedirectUri});\r\n                    ifrm.setAttribute(\"src\", src);\r\n                    ifrm.setAttribute(\"title\", \"keycloak-silent-check-sso\");\r\n                    ifrm.style.display = \"none\";\r\n                    document.body.appendChild(ifrm);\r\n\r\n                    var messageCallback = function(event) {\r\n                        if (event.origin !== window.location.origin || ifrm.contentWindow !== event.source) {\r\n                            return;\r\n                        }\r\n\r\n                        var oauth = parseCallback(event.data);\r\n                        processCallback(oauth, initPromise);\r\n\r\n                        document.body.removeChild(ifrm);\r\n                        window.removeEventListener(\"message\", messageCallback);\r\n                    };\r\n\r\n                    window.addEventListener(\"message\", messageCallback);\r\n                };\r\n\r\n                var options = {};\r\n                switch (initOptions.onLoad) {\r\n                    case 'check-sso':\r\n                        if (loginIframe.enable) {\r\n                            setupCheckLoginIframe().then(function() {\r\n                                checkLoginIframe().then(function (unchanged) {\r\n                                    if (!unchanged) {\r\n                                        kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);\r\n                                    } else {\r\n                                        initPromise.setSuccess();\r\n                                    }\r\n                                }).catch(function () {\r\n                                    initPromise.setError();\r\n                                });\r\n                            });\r\n                        } else {\r\n                            kc.silentCheckSsoRedirectUri ? checkSsoSilently() : doLogin(false);\r\n                        }\r\n                        break;\r\n                    case 'login-required':\r\n                        doLogin(true);\r\n                        break;\r\n                    default:\r\n                        throw 'Invalid value for onLoad';\r\n                }\r\n            }\r\n\r\n            function processInit() {\r\n                var callback = parseCallback(window.location.href);\r\n\r\n                if (callback) {\r\n                    window.history.replaceState(window.history.state, null, callback.newUrl);\r\n                }\r\n\r\n                if (callback && callback.valid) {\r\n                    return setupCheckLoginIframe().then(function() {\r\n                        processCallback(callback, initPromise);\r\n                    }).catch(function (e) {\r\n                        initPromise.setError();\r\n                    });\r\n                } else if (initOptions) {\r\n                    if (initOptions.token && initOptions.refreshToken) {\r\n                        setToken(initOptions.token, initOptions.refreshToken, initOptions.idToken);\r\n\r\n                        if (loginIframe.enable) {\r\n                            setupCheckLoginIframe().then(function() {\r\n                                checkLoginIframe().then(function (unchanged) {\r\n                                    if (unchanged) {\r\n                                        kc.onAuthSuccess && kc.onAuthSuccess();\r\n                                        initPromise.setSuccess();\r\n                                        scheduleCheckIframe();\r\n                                    } else {\r\n                                        initPromise.setSuccess();\r\n                                    }\r\n                                }).catch(function () {\r\n                                    initPromise.setError();\r\n                                });\r\n                            });\r\n                        } else {\r\n                            kc.updateToken(-1).then(function() {\r\n                                kc.onAuthSuccess && kc.onAuthSuccess();\r\n                                initPromise.setSuccess();\r\n                            }).catch(function() {\r\n                                kc.onAuthError && kc.onAuthError();\r\n                                if (initOptions.onLoad) {\r\n                                    onLoad();\r\n                                } else {\r\n                                    initPromise.setError();\r\n                                }\r\n                            });\r\n                        }\r\n                    } else if (initOptions.onLoad) {\r\n                        onLoad();\r\n                    } else {\r\n                        initPromise.setSuccess();\r\n                    }\r\n                } else {\r\n                    initPromise.setSuccess();\r\n                }\r\n            }\r\n\r\n            configPromise.then(function () {\r\n                check3pCookiesSupported().then(processInit)\r\n                .catch(function() {\r\n                    promise.setError();\r\n                });\r\n            });\r\n            configPromise.catch(function() {\r\n                promise.setError();\r\n            });\r\n\r\n            return promise.promise;\r\n        }\r\n\r\n        kc.login = function (options) {\r\n            return adapter.login(options);\r\n        }\r\n\r\n        function generateRandomData(len) {\r\n            // use web crypto APIs if possible\r\n            var array = null;\r\n            var crypto = window.crypto || window.msCrypto;\r\n            if (crypto && crypto.getRandomValues && window.Uint8Array) {\r\n                array = new Uint8Array(len);\r\n                crypto.getRandomValues(array);\r\n                return array;\r\n            }\r\n\r\n            // fallback to Math random\r\n            array = new Array(len);\r\n            for (var j = 0; j < array.length; j++) {\r\n                array[j] = Math.floor(256 * Math.random());\r\n            }\r\n            return array;\r\n        }\r\n\r\n        function generateCodeVerifier(len) {\r\n            return generateRandomString(len, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789');\r\n        }\r\n\r\n        function generateRandomString(len, alphabet){\r\n            var randomData = generateRandomData(len);\r\n            var chars = new Array(len);\r\n            for (var i = 0; i < len; i++) {\r\n                chars[i] = alphabet.charCodeAt(randomData[i] % alphabet.length);\r\n            }\r\n            return String.fromCharCode.apply(null, chars);\r\n        }\r\n\r\n        function generatePkceChallenge(pkceMethod, codeVerifier) {\r\n            switch (pkceMethod) {\r\n                // The use of the \"plain\" method is considered insecure and therefore not supported.\r\n                case \"S256\":\r\n                    // hash codeVerifier, then encode as url-safe base64 without padding\r\n                    var hashBytes = new Uint8Array(sha256_imported.arrayBuffer(codeVerifier));\r\n                    var encodedHash = base64js_imported.fromByteArray(hashBytes)\r\n                        .replace(/\\+/g, '-')\r\n                        .replace(/\\//g, '_')\r\n                        .replace(/\\=/g, '');\r\n                    return encodedHash;\r\n                default:\r\n                    throw 'Invalid value for pkceMethod';\r\n            }\r\n        }\r\n\r\n        kc.createLoginUrl = function(options) {\r\n            var state = createUUID();\r\n            var nonce = createUUID();\r\n\r\n            var redirectUri = adapter.redirectUri(options);\r\n\r\n            var callbackState = {\r\n                state: state,\r\n                nonce: nonce,\r\n                redirectUri: encodeURIComponent(redirectUri)\r\n            };\r\n\r\n            if (options && options.prompt) {\r\n                callbackState.prompt = options.prompt;\r\n            }\r\n\r\n            var baseUrl;\r\n            if (options && options.action == 'register') {\r\n                baseUrl = kc.endpoints.register();\r\n            } else {\r\n                baseUrl = kc.endpoints.authorize();\r\n            }\r\n\r\n            var scope;\r\n            if (options && options.scope) {\r\n                if (options.scope.indexOf(\"openid\") != -1) {\r\n                    scope = options.scope;\r\n                } else {\r\n                    scope = \"openid \" + options.scope;\r\n                }\r\n            } else {\r\n                scope = \"openid\";\r\n            }\r\n\r\n            var url = baseUrl\r\n                + '?client_id=' + encodeURIComponent(kc.clientId)\r\n                + '&redirect_uri=' + encodeURIComponent(redirectUri)\r\n                + '&state=' + encodeURIComponent(state)\r\n                + '&response_mode=' + encodeURIComponent(kc.responseMode)\r\n                + '&response_type=' + encodeURIComponent(kc.responseType)\r\n                + '&scope=' + encodeURIComponent(scope);\r\n            if (useNonce) {\r\n                url = url + '&nonce=' + encodeURIComponent(nonce);\r\n            }\r\n\r\n            if (options && options.prompt) {\r\n                url += '&prompt=' + encodeURIComponent(options.prompt);\r\n            }\r\n\r\n            if (options && options.maxAge) {\r\n                url += '&max_age=' + encodeURIComponent(options.maxAge);\r\n            }\r\n\r\n            if (options && options.loginHint) {\r\n                url += '&login_hint=' + encodeURIComponent(options.loginHint);\r\n            }\r\n\r\n            if (options && options.idpHint) {\r\n                url += '&kc_idp_hint=' + encodeURIComponent(options.idpHint);\r\n            }\r\n\r\n            if (options && options.action && options.action != 'register') {\r\n                url += '&kc_action=' + encodeURIComponent(options.action);\r\n            }\r\n\r\n            if (options && options.locale) {\r\n                url += '&ui_locales=' + encodeURIComponent(options.locale);\r\n            }\r\n\r\n            if (kc.pkceMethod) {\r\n                var codeVerifier = generateCodeVerifier(96);\r\n                callbackState.pkceCodeVerifier = codeVerifier;\r\n                var pkceChallenge = generatePkceChallenge(kc.pkceMethod, codeVerifier);\r\n                url += '&code_challenge=' + pkceChallenge;\r\n                url += '&code_challenge_method=' + kc.pkceMethod;\r\n            }\r\n\r\n            callbackStorage.add(callbackState);\r\n\r\n            return url;\r\n        }\r\n\r\n        kc.logout = function(options) {\r\n            return adapter.logout(options);\r\n        }\r\n\r\n        kc.createLogoutUrl = function(options) {\r\n            var url = kc.endpoints.logout()\r\n                + '?redirect_uri=' + encodeURIComponent(adapter.redirectUri(options, false));\r\n\r\n            return url;\r\n        }\r\n\r\n        kc.register = function (options) {\r\n            return adapter.register(options);\r\n        }\r\n\r\n        kc.createRegisterUrl = function(options) {\r\n            if (!options) {\r\n                options = {};\r\n            }\r\n            options.action = 'register';\r\n            return kc.createLoginUrl(options);\r\n        }\r\n\r\n        kc.createAccountUrl = function(options) {\r\n            var realm = getRealmUrl();\r\n            var url = undefined;\r\n            if (typeof realm !== 'undefined') {\r\n                url = realm\r\n                + '/account'\r\n                + '?referrer=' + encodeURIComponent(kc.clientId)\r\n                + '&referrer_uri=' + encodeURIComponent(adapter.redirectUri(options));\r\n            }\r\n            return url;\r\n        }\r\n\r\n        kc.accountManagement = function() {\r\n            return adapter.accountManagement();\r\n        }\r\n\r\n        kc.hasRealmRole = function (role) {\r\n            var access = kc.realmAccess;\r\n            return !!access && access.roles.indexOf(role) >= 0;\r\n        }\r\n\r\n        kc.hasResourceRole = function(role, resource) {\r\n            if (!kc.resourceAccess) {\r\n                return false;\r\n            }\r\n\r\n            var access = kc.resourceAccess[resource || kc.clientId];\r\n            return !!access && access.roles.indexOf(role) >= 0;\r\n        }\r\n\r\n        kc.loadUserProfile = function() {\r\n            var url = getRealmUrl() + '/account';\r\n            var req = new XMLHttpRequest();\r\n            req.open('GET', url, true);\r\n            req.setRequestHeader('Accept', 'application/json');\r\n            req.setRequestHeader('Authorization', 'bearer ' + kc.token);\r\n\r\n            var promise = createPromise();\r\n\r\n            req.onreadystatechange = function () {\r\n                if (req.readyState == 4) {\r\n                    if (req.status == 200) {\r\n                        kc.profile = JSON.parse(req.responseText);\r\n                        promise.setSuccess(kc.profile);\r\n                    } else {\r\n                        promise.setError();\r\n                    }\r\n                }\r\n            }\r\n\r\n            req.send();\r\n\r\n            return promise.promise;\r\n        }\r\n\r\n        kc.loadUserInfo = function() {\r\n            var url = kc.endpoints.userinfo();\r\n            var req = new XMLHttpRequest();\r\n            req.open('GET', url, true);\r\n            req.setRequestHeader('Accept', 'application/json');\r\n            req.setRequestHeader('Authorization', 'bearer ' + kc.token);\r\n\r\n            var promise = createPromise();\r\n\r\n            req.onreadystatechange = function () {\r\n                if (req.readyState == 4) {\r\n                    if (req.status == 200) {\r\n                        kc.userInfo = JSON.parse(req.responseText);\r\n                        promise.setSuccess(kc.userInfo);\r\n                    } else {\r\n                        promise.setError();\r\n                    }\r\n                }\r\n            }\r\n\r\n            req.send();\r\n\r\n            return promise.promise;\r\n        }\r\n\r\n        kc.isTokenExpired = function(minValidity) {\r\n            if (!kc.tokenParsed || (!kc.refreshToken && kc.flow != 'implicit' )) {\r\n                throw 'Not authenticated';\r\n            }\r\n\r\n            if (kc.timeSkew == null) {\r\n                logInfo('[KEYCLOAK] Unable to determine if token is expired as timeskew is not set');\r\n                return true;\r\n            }\r\n\r\n            var expiresIn = kc.tokenParsed['exp'] - Math.ceil(new Date().getTime() / 1000) + kc.timeSkew;\r\n            if (minValidity) {\r\n                if (isNaN(minValidity)) {\r\n                    throw 'Invalid minValidity';\r\n                }\r\n                expiresIn -= minValidity;\r\n            }\r\n            return expiresIn < 0;\r\n        }\r\n\r\n        kc.updateToken = function(minValidity) {\r\n            var promise = createPromise();\r\n\r\n            if (!kc.refreshToken) {\r\n                promise.setError();\r\n                return promise.promise;\r\n            }\r\n\r\n            minValidity = minValidity || 5;\r\n\r\n            var exec = function() {\r\n                var refreshToken = false;\r\n                if (minValidity == -1) {\r\n                    refreshToken = true;\r\n                    logInfo('[KEYCLOAK] Refreshing token: forced refresh');\r\n                } else if (!kc.tokenParsed || kc.isTokenExpired(minValidity)) {\r\n                    refreshToken = true;\r\n                    logInfo('[KEYCLOAK] Refreshing token: token expired');\r\n                }\r\n\r\n                if (!refreshToken) {\r\n                    promise.setSuccess(false);\r\n                } else {\r\n                    var params = 'grant_type=refresh_token&' + 'refresh_token=' + kc.refreshToken;\r\n                    var url = kc.endpoints.token();\r\n\r\n                    refreshQueue.push(promise);\r\n\r\n                    if (refreshQueue.length == 1) {\r\n                        var req = new XMLHttpRequest();\r\n                        req.open('POST', url, true);\r\n                        req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\r\n                        req.withCredentials = true;\r\n\r\n                        params += '&client_id=' + encodeURIComponent(kc.clientId);\r\n\r\n                        var timeLocal = new Date().getTime();\r\n\r\n                        req.onreadystatechange = function () {\r\n                            if (req.readyState == 4) {\r\n                                if (req.status == 200) {\r\n                                    logInfo('[KEYCLOAK] Token refreshed');\r\n\r\n                                    timeLocal = (timeLocal + new Date().getTime()) / 2;\r\n\r\n                                    var tokenResponse = JSON.parse(req.responseText);\r\n\r\n                                    setToken(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], timeLocal);\r\n\r\n                                    kc.onAuthRefreshSuccess && kc.onAuthRefreshSuccess();\r\n                                    for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {\r\n                                        p.setSuccess(true);\r\n                                    }\r\n                                } else {\r\n                                    logWarn('[KEYCLOAK] Failed to refresh token');\r\n\r\n                                    if (req.status == 400) {\r\n                                        kc.clearToken();\r\n                                    }\r\n\r\n                                    kc.onAuthRefreshError && kc.onAuthRefreshError();\r\n                                    for (var p = refreshQueue.pop(); p != null; p = refreshQueue.pop()) {\r\n                                        p.setError(true);\r\n                                    }\r\n                                }\r\n                            }\r\n                        };\r\n\r\n                        req.send(params);\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (loginIframe.enable) {\r\n                var iframePromise = checkLoginIframe();\r\n                iframePromise.then(function() {\r\n                    exec();\r\n                }).catch(function() {\r\n                    promise.setError();\r\n                });\r\n            } else {\r\n                exec();\r\n            }\r\n\r\n            return promise.promise;\r\n        }\r\n\r\n        kc.clearToken = function() {\r\n            if (kc.token) {\r\n                setToken(null, null, null);\r\n                kc.onAuthLogout && kc.onAuthLogout();\r\n                if (kc.loginRequired) {\r\n                    kc.login();\r\n                }\r\n            }\r\n        }\r\n\r\n        function getRealmUrl() {\r\n            if (typeof kc.authServerUrl !== 'undefined') {\r\n                if (kc.authServerUrl.charAt(kc.authServerUrl.length - 1) == '/') {\r\n                    return kc.authServerUrl + 'realms/' + encodeURIComponent(kc.realm);\r\n                } else {\r\n                    return kc.authServerUrl + '/realms/' + encodeURIComponent(kc.realm);\r\n                }\r\n            } else {\r\n            \treturn undefined;\r\n            }\r\n        }\r\n\r\n        function getOrigin() {\r\n            if (!window.location.origin) {\r\n                return window.location.protocol + \"//\" + window.location.hostname + (window.location.port ? ':' + window.location.port: '');\r\n            } else {\r\n                return window.location.origin;\r\n            }\r\n        }\r\n\r\n        function processCallback(oauth, promise) {\r\n            var code = oauth.code;\r\n            var error = oauth.error;\r\n            var prompt = oauth.prompt;\r\n\r\n            var timeLocal = new Date().getTime();\r\n\r\n            if (oauth['kc_action_status']) {\r\n                kc.onActionUpdate && kc.onActionUpdate(oauth['kc_action_status']);\r\n            }\r\n\r\n            if (error) {\r\n                if (prompt != 'none') {\r\n                    var errorData = { error: error, error_description: oauth.error_description };\r\n                    kc.onAuthError && kc.onAuthError(errorData);\r\n                    promise && promise.setError(errorData);\r\n                } else {\r\n                    promise && promise.setSuccess();\r\n                }\r\n                return;\r\n            } else if ((kc.flow != 'standard') && (oauth.access_token || oauth.id_token)) {\r\n                authSuccess(oauth.access_token, null, oauth.id_token, true);\r\n            }\r\n\r\n            if ((kc.flow != 'implicit') && code) {\r\n                var params = 'code=' + code + '&grant_type=authorization_code';\r\n                var url = kc.endpoints.token();\r\n\r\n                var req = new XMLHttpRequest();\r\n                req.open('POST', url, true);\r\n                req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');\r\n\r\n                params += '&client_id=' + encodeURIComponent(kc.clientId);\r\n                params += '&redirect_uri=' + oauth.redirectUri;\r\n\r\n                if (oauth.pkceCodeVerifier) {\r\n                    params += '&code_verifier=' + oauth.pkceCodeVerifier;\r\n                }\r\n\r\n                req.withCredentials = true;\r\n\r\n                req.onreadystatechange = function() {\r\n                    if (req.readyState == 4) {\r\n                        if (req.status == 200) {\r\n\r\n                            var tokenResponse = JSON.parse(req.responseText);\r\n                            authSuccess(tokenResponse['access_token'], tokenResponse['refresh_token'], tokenResponse['id_token'], kc.flow === 'standard');\r\n                            scheduleCheckIframe();\r\n                        } else {\r\n                            kc.onAuthError && kc.onAuthError();\r\n                            promise && promise.setError();\r\n                        }\r\n                    }\r\n                };\r\n\r\n                req.send(params);\r\n            }\r\n\r\n            function authSuccess(accessToken, refreshToken, idToken, fulfillPromise) {\r\n                timeLocal = (timeLocal + new Date().getTime()) / 2;\r\n\r\n                setToken(accessToken, refreshToken, idToken, timeLocal);\r\n\r\n                if (useNonce && ((kc.tokenParsed && kc.tokenParsed.nonce != oauth.storedNonce) ||\r\n                    (kc.refreshTokenParsed && kc.refreshTokenParsed.nonce != oauth.storedNonce) ||\r\n                    (kc.idTokenParsed && kc.idTokenParsed.nonce != oauth.storedNonce))) {\r\n\r\n                    logInfo('[KEYCLOAK] Invalid nonce, clearing token');\r\n                    kc.clearToken();\r\n                    promise && promise.setError();\r\n                } else {\r\n                    if (fulfillPromise) {\r\n                        kc.onAuthSuccess && kc.onAuthSuccess();\r\n                        promise && promise.setSuccess();\r\n                    }\r\n                }\r\n            }\r\n\r\n        }\r\n\r\n        function loadConfig(url) {\r\n            var promise = createPromise();\r\n            var configUrl;\r\n\r\n            if (!config) {\r\n                configUrl = 'keycloak.json';\r\n            } else if (typeof config === 'string') {\r\n                configUrl = config;\r\n            }\r\n\r\n            function setupOidcEndoints(oidcConfiguration) {\r\n                if (! oidcConfiguration) {\r\n                    kc.endpoints = {\r\n                        authorize: function() {\r\n                            return getRealmUrl() + '/protocol/openid-connect/auth';\r\n                        },\r\n                        token: function() {\r\n                            return getRealmUrl() + '/protocol/openid-connect/token';\r\n                        },\r\n                        logout: function() {\r\n                            return getRealmUrl() + '/protocol/openid-connect/logout';\r\n                        },\r\n                        checkSessionIframe: function() {\r\n                            var src = getRealmUrl() + '/protocol/openid-connect/login-status-iframe.html';\r\n                            if (kc.iframeVersion) {\r\n                              src = src + '?version=' + kc.iframeVersion;\r\n                            }\r\n                            return src;\r\n                        },\r\n                        thirdPartyCookiesIframe: function() {\r\n                            var src = getRealmUrl() + '/protocol/openid-connect/3p-cookies/step1.html';\r\n                            if (kc.iframeVersion) {\r\n                                src = src + '?version=' + kc.iframeVersion;\r\n                            }\r\n                            return src;\r\n                        },\r\n                        register: function() {\r\n                            return getRealmUrl() + '/protocol/openid-connect/registrations';\r\n                        },\r\n                        userinfo: function() {\r\n                            return getRealmUrl() + '/protocol/openid-connect/userinfo';\r\n                        }\r\n                    };\r\n                } else {\r\n                    kc.endpoints = {\r\n                        authorize: function() {\r\n                            return oidcConfiguration.authorization_endpoint;\r\n                        },\r\n                        token: function() {\r\n                            return oidcConfiguration.token_endpoint;\r\n                        },\r\n                        logout: function() {\r\n                            if (!oidcConfiguration.end_session_endpoint) {\r\n                                throw \"Not supported by the OIDC server\";\r\n                            }\r\n                            return oidcConfiguration.end_session_endpoint;\r\n                        },\r\n                        checkSessionIframe: function() {\r\n                            if (!oidcConfiguration.check_session_iframe) {\r\n                                throw \"Not supported by the OIDC server\";\r\n                            }\r\n                            return oidcConfiguration.check_session_iframe;\r\n                        },\r\n                        register: function() {\r\n                            throw 'Redirection to \"Register user\" page not supported in standard OIDC mode';\r\n                        },\r\n                        userinfo: function() {\r\n                            if (!oidcConfiguration.userinfo_endpoint) {\r\n                                throw \"Not supported by the OIDC server\";\r\n                            }\r\n                            return oidcConfiguration.userinfo_endpoint;\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (configUrl) {\r\n                var req = new XMLHttpRequest();\r\n                req.open('GET', configUrl, true);\r\n                req.setRequestHeader('Accept', 'application/json');\r\n\r\n                req.onreadystatechange = function () {\r\n                    if (req.readyState == 4) {\r\n                        if (req.status == 200 || fileLoaded(req)) {\r\n                            var config = JSON.parse(req.responseText);\r\n\r\n                            kc.authServerUrl = config['auth-server-url'];\r\n                            kc.realm = config['realm'];\r\n                            kc.clientId = config['resource'];\r\n                            setupOidcEndoints(null);\r\n                            promise.setSuccess();\r\n                        } else {\r\n                            promise.setError();\r\n                        }\r\n                    }\r\n                };\r\n\r\n                req.send();\r\n            } else {\r\n                if (!config.clientId) {\r\n                    throw 'clientId missing';\r\n                }\r\n\r\n                kc.clientId = config.clientId;\r\n\r\n                var oidcProvider = config['oidcProvider'];\r\n                if (!oidcProvider) {\r\n                    if (!config['url']) {\r\n                        var scripts = document.getElementsByTagName('script');\r\n                        for (var i = 0; i < scripts.length; i++) {\r\n                            if (scripts[i].src.match(/.*keycloak\\.js/)) {\r\n                                config.url = scripts[i].src.substr(0, scripts[i].src.indexOf('/js/keycloak.js'));\r\n                                break;\r\n                            }\r\n                        }\r\n                    }\r\n                    if (!config.realm) {\r\n                        throw 'realm missing';\r\n                    }\r\n\r\n                    kc.authServerUrl = config.url;\r\n                    kc.realm = config.realm;\r\n                    setupOidcEndoints(null);\r\n                    promise.setSuccess();\r\n                } else {\r\n                    if (typeof oidcProvider === 'string') {\r\n                        var oidcProviderConfigUrl;\r\n                        if (oidcProvider.charAt(oidcProvider.length - 1) == '/') {\r\n                            oidcProviderConfigUrl = oidcProvider + '.well-known/openid-configuration';\r\n                        } else {\r\n                            oidcProviderConfigUrl = oidcProvider + '/.well-known/openid-configuration';\r\n                        }\r\n                        var req = new XMLHttpRequest();\r\n                        req.open('GET', oidcProviderConfigUrl, true);\r\n                        req.setRequestHeader('Accept', 'application/json');\r\n\r\n                        req.onreadystatechange = function () {\r\n                            if (req.readyState == 4) {\r\n                                if (req.status == 200 || fileLoaded(req)) {\r\n                                    var oidcProviderConfig = JSON.parse(req.responseText);\r\n                                    setupOidcEndoints(oidcProviderConfig);\r\n                                    promise.setSuccess();\r\n                                } else {\r\n                                    promise.setError();\r\n                                }\r\n                            }\r\n                        };\r\n\r\n                        req.send();\r\n                    } else {\r\n                        setupOidcEndoints(oidcProvider);\r\n                        promise.setSuccess();\r\n                    }\r\n                }\r\n            }\r\n\r\n            return promise.promise;\r\n        }\r\n\r\n        function fileLoaded(xhr) {\r\n            return xhr.status == 0 && xhr.responseText && xhr.responseURL.startsWith('file:');\r\n        }\r\n\r\n        function setToken(token, refreshToken, idToken, timeLocal) {\r\n            if (kc.tokenTimeoutHandle) {\r\n                clearTimeout(kc.tokenTimeoutHandle);\r\n                kc.tokenTimeoutHandle = null;\r\n            }\r\n\r\n            if (refreshToken) {\r\n                kc.refreshToken = refreshToken;\r\n                kc.refreshTokenParsed = decodeToken(refreshToken);\r\n            } else {\r\n                delete kc.refreshToken;\r\n                delete kc.refreshTokenParsed;\r\n            }\r\n\r\n            if (idToken) {\r\n                kc.idToken = idToken;\r\n                kc.idTokenParsed = decodeToken(idToken);\r\n            } else {\r\n                delete kc.idToken;\r\n                delete kc.idTokenParsed;\r\n            }\r\n\r\n            if (token) {\r\n                kc.token = token;\r\n                kc.tokenParsed = decodeToken(token);\r\n                kc.sessionId = kc.tokenParsed.session_state;\r\n                kc.authenticated = true;\r\n                kc.subject = kc.tokenParsed.sub;\r\n                kc.realmAccess = kc.tokenParsed.realm_access;\r\n                kc.resourceAccess = kc.tokenParsed.resource_access;\r\n\r\n                if (timeLocal) {\r\n                    kc.timeSkew = Math.floor(timeLocal / 1000) - kc.tokenParsed.iat;\r\n                }\r\n\r\n                if (kc.timeSkew != null) {\r\n                    logInfo('[KEYCLOAK] Estimated time difference between browser and server is ' + kc.timeSkew + ' seconds');\r\n\r\n                    if (kc.onTokenExpired) {\r\n                        var expiresIn = (kc.tokenParsed['exp'] - (new Date().getTime() / 1000) + kc.timeSkew) * 1000;\r\n                        logInfo('[KEYCLOAK] Token expires in ' + Math.round(expiresIn / 1000) + ' s');\r\n                        if (expiresIn <= 0) {\r\n                            kc.onTokenExpired();\r\n                        } else {\r\n                            kc.tokenTimeoutHandle = setTimeout(kc.onTokenExpired, expiresIn);\r\n                        }\r\n                    }\r\n                }\r\n            } else {\r\n                delete kc.token;\r\n                delete kc.tokenParsed;\r\n                delete kc.subject;\r\n                delete kc.realmAccess;\r\n                delete kc.resourceAccess;\r\n\r\n                kc.authenticated = false;\r\n            }\r\n        }\r\n\r\n        function decodeToken(str) {\r\n            str = str.split('.')[1];\r\n\r\n            str = str.replace('/-/g', '+');\r\n            str = str.replace('/_/g', '/');\r\n            switch (str.length % 4) {\r\n                case 0:\r\n                    break;\r\n                case 2:\r\n                    str += '==';\r\n                    break;\r\n                case 3:\r\n                    str += '=';\r\n                    break;\r\n                default:\r\n                    throw 'Invalid token';\r\n            }\r\n\r\n            str = decodeURIComponent(escape(atob(str)));\r\n\r\n            str = JSON.parse(str);\r\n            return str;\r\n        }\r\n\r\n        function createUUID() {\r\n            var hexDigits = '0123456789abcdef';\r\n            var s = generateRandomString(36, hexDigits).split(\"\");\r\n            s[14] = '4';\r\n            s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1);\r\n            s[8] = s[13] = s[18] = s[23] = '-';\r\n            var uuid = s.join('');\r\n            return uuid;\r\n        }\r\n\r\n        function parseCallback(url) {\r\n            var oauth = parseCallbackUrl(url);\r\n            if (!oauth) {\r\n                return;\r\n            }\r\n\r\n            var oauthState = callbackStorage.get(oauth.state);\r\n\r\n            if (oauthState) {\r\n                oauth.valid = true;\r\n                oauth.redirectUri = oauthState.redirectUri;\r\n                oauth.storedNonce = oauthState.nonce;\r\n                oauth.prompt = oauthState.prompt;\r\n                oauth.pkceCodeVerifier = oauthState.pkceCodeVerifier;\r\n            }\r\n\r\n            return oauth;\r\n        }\r\n\r\n        function parseCallbackUrl(url) {\r\n            var supportedParams;\r\n            switch (kc.flow) {\r\n                case 'standard':\r\n                    supportedParams = ['code', 'state', 'session_state', 'kc_action_status'];\r\n                    break;\r\n                case 'implicit':\r\n                    supportedParams = ['access_token', 'token_type', 'id_token', 'state', 'session_state', 'expires_in', 'kc_action_status'];\r\n                    break;\r\n                case 'hybrid':\r\n                    supportedParams = ['access_token', 'id_token', 'code', 'state', 'session_state', 'kc_action_status'];\r\n                    break;\r\n            }\r\n\r\n            supportedParams.push('error');\r\n            supportedParams.push('error_description');\r\n            supportedParams.push('error_uri');\r\n\r\n            var queryIndex = url.indexOf('?');\r\n            var fragmentIndex = url.indexOf('#');\r\n\r\n            var newUrl;\r\n            var parsed;\r\n\r\n            if (kc.responseMode === 'query' && queryIndex !== -1) {\r\n                newUrl = url.substring(0, queryIndex);\r\n                parsed = parseCallbackParams(url.substring(queryIndex + 1, fragmentIndex !== -1 ? fragmentIndex : url.length), supportedParams);\r\n                if (parsed.paramsString !== '') {\r\n                    newUrl += '?' + parsed.paramsString;\r\n                }\r\n                if (fragmentIndex !== -1) {\r\n                    newUrl += url.substring(fragmentIndex);\r\n                }\r\n            } else if (kc.responseMode === 'fragment' && fragmentIndex !== -1) {\r\n                newUrl = url.substring(0, fragmentIndex);\r\n                parsed = parseCallbackParams(url.substring(fragmentIndex + 1), supportedParams);\r\n                if (parsed.paramsString !== '') {\r\n                    newUrl += '#' + parsed.paramsString;\r\n                }\r\n            }\r\n\r\n            if (parsed && parsed.oauthParams) {\r\n                if (kc.flow === 'standard' || kc.flow === 'hybrid') {\r\n                    if ((parsed.oauthParams.code || parsed.oauthParams.error) && parsed.oauthParams.state) {\r\n                        parsed.oauthParams.newUrl = newUrl;\r\n                        return parsed.oauthParams;\r\n                    }\r\n                } else if (kc.flow === 'implicit') {\r\n                    if ((parsed.oauthParams.access_token || parsed.oauthParams.error) && parsed.oauthParams.state) {\r\n                        parsed.oauthParams.newUrl = newUrl;\r\n                        return parsed.oauthParams;\r\n                    }\r\n                }\r\n            }\r\n        }\r\n\r\n        function parseCallbackParams(paramsString, supportedParams) {\r\n            var p = paramsString.split('&');\r\n            var result = {\r\n                paramsString: '',\r\n                oauthParams: {}\r\n            }\r\n            for (var i = 0; i < p.length; i++) {\r\n                var split = p[i].indexOf(\"=\");\r\n                var key = p[i].slice(0, split);\r\n                if (supportedParams.indexOf(key) !== -1) {\r\n                    result.oauthParams[key] = p[i].slice(split + 1);\r\n                } else {\r\n                    if (result.paramsString !== '') {\r\n                        result.paramsString += '&';\r\n                    }\r\n                    result.paramsString += p[i];\r\n                }\r\n            }\r\n            return result;\r\n        }\r\n\r\n        function createPromise() {\r\n            // Need to create a native Promise which also preserves the\r\n            // interface of the custom promise type previously used by the API\r\n            var p = {\r\n                setSuccess: function(result) {\r\n                    p.resolve(result);\r\n                },\r\n\r\n                setError: function(result) {\r\n                    p.reject(result);\r\n                }\r\n            };\r\n            p.promise = new KeycloakPromise(function(resolve, reject) {\r\n                p.resolve = resolve;\r\n                p.reject = reject;\r\n            });\r\n            return p;\r\n        }\r\n\r\n\r\n        function setupCheckLoginIframe() {\r\n            var promise = createPromise();\r\n\r\n            if (!loginIframe.enable) {\r\n                promise.setSuccess();\r\n                return promise.promise;\r\n            }\r\n\r\n            if (loginIframe.iframe) {\r\n                promise.setSuccess();\r\n                return promise.promise;\r\n            }\r\n\r\n            var iframe = document.createElement('iframe');\r\n            loginIframe.iframe = iframe;\r\n\r\n            iframe.onload = function() {\r\n                var authUrl = kc.endpoints.authorize();\r\n                if (authUrl.charAt(0) === '/') {\r\n                    loginIframe.iframeOrigin = getOrigin();\r\n                } else {\r\n                    loginIframe.iframeOrigin = authUrl.substring(0, authUrl.indexOf('/', 8));\r\n                }\r\n                promise.setSuccess();\r\n            }\r\n\r\n            var src = kc.endpoints.checkSessionIframe();\r\n            iframe.setAttribute('src', src );\r\n            iframe.setAttribute('title', 'keycloak-session-iframe' );\r\n            iframe.style.display = 'none';\r\n            document.body.appendChild(iframe);\r\n\r\n            var messageCallback = function(event) {\r\n                if ((event.origin !== loginIframe.iframeOrigin) || (loginIframe.iframe.contentWindow !== event.source)) {\r\n                    return;\r\n                }\r\n\r\n                if (!(event.data == 'unchanged' || event.data == 'changed' || event.data == 'error')) {\r\n                    return;\r\n                }\r\n\r\n\r\n                if (event.data != 'unchanged') {\r\n                    kc.clearToken();\r\n                }\r\n\r\n                var callbacks = loginIframe.callbackList.splice(0, loginIframe.callbackList.length);\r\n\r\n                for (var i = callbacks.length - 1; i >= 0; --i) {\r\n                    var promise = callbacks[i];\r\n                    if (event.data == 'error') {\r\n                        promise.setError();\r\n                    } else {\r\n                        promise.setSuccess(event.data == 'unchanged');\r\n                    }\r\n                }\r\n            };\r\n\r\n            window.addEventListener('message', messageCallback, false);\r\n\r\n            return promise.promise;\r\n        }\r\n\r\n        function scheduleCheckIframe() {\r\n            if (loginIframe.enable) {\r\n                if (kc.token) {\r\n                    setTimeout(function() {\r\n                        checkLoginIframe().then(function(unchanged) {\r\n                            if (unchanged) {\r\n                                scheduleCheckIframe();\r\n                            }\r\n                        });\r\n                    }, loginIframe.interval * 1000);\r\n                }\r\n            }\r\n        }\r\n\r\n        function checkLoginIframe() {\r\n            var promise = createPromise();\r\n\r\n            if (loginIframe.iframe && loginIframe.iframeOrigin ) {\r\n                var msg = kc.clientId + ' ' + (kc.sessionId ? kc.sessionId : '');\r\n                loginIframe.callbackList.push(promise);\r\n                var origin = loginIframe.iframeOrigin;\r\n                if (loginIframe.callbackList.length == 1) {\r\n                    loginIframe.iframe.contentWindow.postMessage(msg, origin);\r\n                }\r\n            } else {\r\n                promise.setSuccess();\r\n            }\r\n\r\n            return promise.promise;\r\n        }\r\n\r\n        function check3pCookiesSupported() {\r\n            var promise = createPromise();\r\n\r\n            if (loginIframe.enable || kc.silentCheckSsoRedirectUri) {\r\n                var iframe = document.createElement('iframe');\r\n                iframe.setAttribute('src', kc.endpoints.thirdPartyCookiesIframe());\r\n                iframe.setAttribute('title', 'keycloak-3p-check-iframe' );\r\n                iframe.style.display = 'none';\r\n                document.body.appendChild(iframe);\r\n\r\n                var messageCallback = function(event) {\r\n                    if (iframe.contentWindow !== event.source) {\r\n                        return;\r\n                    }\r\n\r\n                    if (event.data !== \"supported\" && event.data !== \"unsupported\") {\r\n                        promise.setError();\r\n                    } else if (event.data === \"unsupported\") {\r\n                        loginIframe.enable = false;\r\n                        if (kc.silentCheckSsoFallback) {\r\n                            kc.silentCheckSsoRedirectUri = false;\r\n                        }\r\n                        logWarn(\"[KEYCLOAK] 3rd party cookies aren't supported by this browser. checkLoginIframe and \" +\r\n                            \"silent check-sso are not available.\")\r\n                    }\r\n\r\n                    document.body.removeChild(iframe);\r\n                    window.removeEventListener(\"message\", messageCallback);\r\n                    promise.setSuccess();\r\n                };\r\n\r\n                window.addEventListener('message', messageCallback, false);\r\n            } else {\r\n                promise.setSuccess();\r\n            }\r\n\r\n            return promise.promise;\r\n        }\r\n\r\n        function loadAdapter(type) {\r\n            if (!type || type == 'default') {\r\n                return {\r\n                    login: function(options) {\r\n                        window.location.replace(kc.createLoginUrl(options));\r\n                        return createPromise().promise;\r\n                    },\r\n\r\n                    logout: function(options) {\r\n                        window.location.replace(kc.createLogoutUrl(options));\r\n                        return createPromise().promise;\r\n                    },\r\n\r\n                    register: function(options) {\r\n                        window.location.replace(kc.createRegisterUrl(options));\r\n                        return createPromise().promise;\r\n                    },\r\n\r\n                    accountManagement : function() {\r\n                        var accountUrl = kc.createAccountUrl();\r\n                        if (typeof accountUrl !== 'undefined') {\r\n                            window.location.href = accountUrl;\r\n                        } else {\r\n                            throw \"Not supported by the OIDC server\";\r\n                        }\r\n                        return createPromise().promise;\r\n                    },\r\n\r\n                    redirectUri: function(options, encodeHash) {\r\n                        if (arguments.length == 1) {\r\n                            encodeHash = true;\r\n                        }\r\n\r\n                        if (options && options.redirectUri) {\r\n                            return options.redirectUri;\r\n                        } else if (kc.redirectUri) {\r\n                            return kc.redirectUri;\r\n                        } else {\r\n                            return location.href;\r\n                        }\r\n                    }\r\n                };\r\n            }\r\n\r\n            if (type == 'cordova') {\r\n                loginIframe.enable = false;\r\n                var cordovaOpenWindowWrapper = function(loginUrl, target, options) {\r\n                    if (window.cordova && window.cordova.InAppBrowser) {\r\n                        // Use inappbrowser for IOS and Android if available\r\n                        return window.cordova.InAppBrowser.open(loginUrl, target, options);\r\n                    } else {\r\n                        return window.open(loginUrl, target, options);\r\n                    }\r\n                };\r\n\r\n                var shallowCloneCordovaOptions = function (userOptions) {\r\n                    if (userOptions && userOptions.cordovaOptions) {\r\n                        return Object.keys(userOptions.cordovaOptions).reduce(function (options, optionName) {\r\n                            options[optionName] = userOptions.cordovaOptions[optionName];\r\n                            return options;\r\n                        }, {});\r\n                    } else {\r\n                        return {};\r\n                    }\r\n                };\r\n\r\n                var formatCordovaOptions = function (cordovaOptions) {\r\n                    return Object.keys(cordovaOptions).reduce(function (options, optionName) {\r\n                        options.push(optionName+\"=\"+cordovaOptions[optionName]);\r\n                        return options;\r\n                    }, []).join(\",\");\r\n                };\r\n\r\n                var createCordovaOptions = function (userOptions) {\r\n                    var cordovaOptions = shallowCloneCordovaOptions(userOptions);\r\n                    cordovaOptions.location = 'no';\r\n                    if (userOptions && userOptions.prompt == 'none') {\r\n                        cordovaOptions.hidden = 'yes';\r\n                    }\r\n                    return formatCordovaOptions(cordovaOptions);\r\n                };\r\n\r\n                return {\r\n                    login: function(options) {\r\n                        var promise = createPromise();\r\n\r\n                        var cordovaOptions = createCordovaOptions(options);\r\n                        var loginUrl = kc.createLoginUrl(options);\r\n                        var ref = cordovaOpenWindowWrapper(loginUrl, '_blank', cordovaOptions);\r\n                        var completed = false;\r\n\r\n                        var closed = false;\r\n                        var closeBrowser = function() {\r\n                            closed = true;\r\n                            ref.close();\r\n                        };\r\n\r\n                        ref.addEventListener('loadstart', function(event) {\r\n                            if (event.url.indexOf('http://localhost') == 0) {\r\n                                var callback = parseCallback(event.url);\r\n                                processCallback(callback, promise);\r\n                                closeBrowser();\r\n                                completed = true;\r\n                            }\r\n                        });\r\n\r\n                        ref.addEventListener('loaderror', function(event) {\r\n                            if (!completed) {\r\n                                if (event.url.indexOf('http://localhost') == 0) {\r\n                                    var callback = parseCallback(event.url);\r\n                                    processCallback(callback, promise);\r\n                                    closeBrowser();\r\n                                    completed = true;\r\n                                } else {\r\n                                    promise.setError();\r\n                                    closeBrowser();\r\n                                }\r\n                            }\r\n                        });\r\n\r\n                        ref.addEventListener('exit', function(event) {\r\n                            if (!closed) {\r\n                                promise.setError({\r\n                                    reason: \"closed_by_user\"\r\n                                });\r\n                            }\r\n                        });\r\n\r\n                        return promise.promise;\r\n                    },\r\n\r\n                    logout: function(options) {\r\n                        var promise = createPromise();\r\n\r\n                        var logoutUrl = kc.createLogoutUrl(options);\r\n                        var ref = cordovaOpenWindowWrapper(logoutUrl, '_blank', 'location=no,hidden=yes');\r\n\r\n                        var error;\r\n\r\n                        ref.addEventListener('loadstart', function(event) {\r\n                            if (event.url.indexOf('http://localhost') == 0) {\r\n                                ref.close();\r\n                            }\r\n                        });\r\n\r\n                        ref.addEventListener('loaderror', function(event) {\r\n                            if (event.url.indexOf('http://localhost') == 0) {\r\n                                ref.close();\r\n                            } else {\r\n                                error = true;\r\n                                ref.close();\r\n                            }\r\n                        });\r\n\r\n                        ref.addEventListener('exit', function(event) {\r\n                            if (error) {\r\n                                promise.setError();\r\n                            } else {\r\n                                kc.clearToken();\r\n                                promise.setSuccess();\r\n                            }\r\n                        });\r\n\r\n                        return promise.promise;\r\n                    },\r\n\r\n                    register : function(options) {\r\n                        var promise = createPromise();\r\n                        var registerUrl = kc.createRegisterUrl();\r\n                        var cordovaOptions = createCordovaOptions(options);\r\n                        var ref = cordovaOpenWindowWrapper(registerUrl, '_blank', cordovaOptions);\r\n                        ref.addEventListener('loadstart', function(event) {\r\n                            if (event.url.indexOf('http://localhost') == 0) {\r\n                                ref.close();\r\n                                var oauth = parseCallback(event.url);\r\n                                processCallback(oauth, promise);\r\n                            }\r\n                        });\r\n                        return promise.promise;\r\n                    },\r\n\r\n                    accountManagement : function() {\r\n                        var accountUrl = kc.createAccountUrl();\r\n                        if (typeof accountUrl !== 'undefined') {\r\n                            var ref = cordovaOpenWindowWrapper(accountUrl, '_blank', 'location=no');\r\n                            ref.addEventListener('loadstart', function(event) {\r\n                                if (event.url.indexOf('http://localhost') == 0) {\r\n                                    ref.close();\r\n                                }\r\n                            });\r\n                        } else {\r\n                            throw \"Not supported by the OIDC server\";\r\n                        }\r\n                    },\r\n\r\n                    redirectUri: function(options) {\r\n                        return 'http://localhost';\r\n                    }\r\n                }\r\n            }\r\n\r\n            if (type == 'cordova-native') {\r\n                loginIframe.enable = false;\r\n\r\n                return {\r\n                    login: function(options) {\r\n                        var promise = createPromise();\r\n                        var loginUrl = kc.createLoginUrl(options);\r\n\r\n                        universalLinks.subscribe('keycloak', function(event) {\r\n                            universalLinks.unsubscribe('keycloak');\r\n                            window.cordova.plugins.browsertab.close();\r\n                            var oauth = parseCallback(event.url);\r\n                            processCallback(oauth, promise);\r\n                        });\r\n\r\n                        window.cordova.plugins.browsertab.openUrl(loginUrl);\r\n                        return promise.promise;\r\n                    },\r\n\r\n                    logout: function(options) {\r\n                        var promise = createPromise();\r\n                        var logoutUrl = kc.createLogoutUrl(options);\r\n\r\n                        universalLinks.subscribe('keycloak', function(event) {\r\n                            universalLinks.unsubscribe('keycloak');\r\n                            window.cordova.plugins.browsertab.close();\r\n                            kc.clearToken();\r\n                            promise.setSuccess();\r\n                        });\r\n\r\n                        window.cordova.plugins.browsertab.openUrl(logoutUrl);\r\n                        return promise.promise;\r\n                    },\r\n\r\n                    register : function(options) {\r\n                        var promise = createPromise();\r\n                        var registerUrl = kc.createRegisterUrl(options);\r\n                        universalLinks.subscribe('keycloak' , function(event) {\r\n                            universalLinks.unsubscribe('keycloak');\r\n                            window.cordova.plugins.browsertab.close();\r\n                            var oauth = parseCallback(event.url);\r\n                            processCallback(oauth, promise);\r\n                        });\r\n                        window.cordova.plugins.browsertab.openUrl(registerUrl);\r\n                        return promise.promise;\r\n\r\n                    },\r\n\r\n                    accountManagement : function() {\r\n                        var accountUrl = kc.createAccountUrl();\r\n                        if (typeof accountUrl !== 'undefined') {\r\n                            window.cordova.plugins.browsertab.openUrl(accountUrl);\r\n                        } else {\r\n                            throw \"Not supported by the OIDC server\";\r\n                        }\r\n                    },\r\n\r\n                    redirectUri: function(options) {\r\n                        if (options && options.redirectUri) {\r\n                            return options.redirectUri;\r\n                        } else if (kc.redirectUri) {\r\n                            return kc.redirectUri;\r\n                        } else {\r\n                            return \"http://localhost\";\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            throw 'invalid adapter type: ' + type;\r\n        }\r\n\r\n        var LocalStorage = function() {\r\n            if (!(this instanceof LocalStorage)) {\r\n                return new LocalStorage();\r\n            }\r\n\r\n            localStorage.setItem('kc-test', 'test');\r\n            localStorage.removeItem('kc-test');\r\n\r\n            var cs = this;\r\n\r\n            function clearExpired() {\r\n                var time = new Date().getTime();\r\n                for (var i = 0; i < localStorage.length; i++)  {\r\n                    var key = localStorage.key(i);\r\n                    if (key && key.indexOf('kc-callback-') == 0) {\r\n                        var value = localStorage.getItem(key);\r\n                        if (value) {\r\n                            try {\r\n                                var expires = JSON.parse(value).expires;\r\n                                if (!expires || expires < time) {\r\n                                    localStorage.removeItem(key);\r\n                                }\r\n                            } catch (err) {\r\n                                localStorage.removeItem(key);\r\n                            }\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n\r\n            cs.get = function(state) {\r\n                if (!state) {\r\n                    return;\r\n                }\r\n\r\n                var key = 'kc-callback-' + state;\r\n                var value = localStorage.getItem(key);\r\n                if (value) {\r\n                    localStorage.removeItem(key);\r\n                    value = JSON.parse(value);\r\n                }\r\n\r\n                clearExpired();\r\n                return value;\r\n            };\r\n\r\n            cs.add = function(state) {\r\n                clearExpired();\r\n\r\n                var key = 'kc-callback-' + state.state;\r\n                state.expires = new Date().getTime() + (60 * 60 * 1000);\r\n                localStorage.setItem(key, JSON.stringify(state));\r\n            };\r\n        };\r\n\r\n        var CookieStorage = function() {\r\n            if (!(this instanceof CookieStorage)) {\r\n                return new CookieStorage();\r\n            }\r\n\r\n            var cs = this;\r\n\r\n            cs.get = function(state) {\r\n                if (!state) {\r\n                    return;\r\n                }\r\n\r\n                var value = getCookie('kc-callback-' + state);\r\n                setCookie('kc-callback-' + state, '', cookieExpiration(-100));\r\n                if (value) {\r\n                    return JSON.parse(value);\r\n                }\r\n            };\r\n\r\n            cs.add = function(state) {\r\n                setCookie('kc-callback-' + state.state, JSON.stringify(state), cookieExpiration(60));\r\n            };\r\n\r\n            cs.removeItem = function(key) {\r\n                setCookie(key, '', cookieExpiration(-100));\r\n            };\r\n\r\n            var cookieExpiration = function (minutes) {\r\n                var exp = new Date();\r\n                exp.setTime(exp.getTime() + (minutes*60*1000));\r\n                return exp;\r\n            };\r\n\r\n            var getCookie = function (key) {\r\n                var name = key + '=';\r\n                var ca = document.cookie.split(';');\r\n                for (var i = 0; i < ca.length; i++) {\r\n                    var c = ca[i];\r\n                    while (c.charAt(0) == ' ') {\r\n                        c = c.substring(1);\r\n                    }\r\n                    if (c.indexOf(name) == 0) {\r\n                        return c.substring(name.length, c.length);\r\n                    }\r\n                }\r\n                return '';\r\n            };\r\n\r\n            var setCookie = function (key, value, expirationDate) {\r\n                var cookie = key + '=' + value + '; '\r\n                    + 'expires=' + expirationDate.toUTCString() + '; ';\r\n                document.cookie = cookie;\r\n            }\r\n        };\r\n\r\n        function createCallbackStorage() {\r\n            try {\r\n                return new LocalStorage();\r\n            } catch (err) {\r\n            }\r\n\r\n            return new CookieStorage();\r\n        }\r\n\r\n        function createLogger(fn) {\r\n            return function() {\r\n                if (kc.enableLogging) {\r\n                    fn.apply(console, Array.prototype.slice.call(arguments));\r\n                }\r\n            };\r\n        }\r\n    }\r\n\r\n    return Keycloak;\r\n})"]}