{"version":3,"file":"scripts/@lvflanders/bar/lvflanders-bar-14.min.js","mappings":"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","sources":["webpack://ng-cli/webpack/bootstrap","webpack://ng-cli/webpack/runtime/define property getters","webpack://ng-cli/webpack/runtime/hasOwnProperty shorthand","webpack://ng-cli/webpack/runtime/make namespace object","webpack://ng-cli/external var \"localforage\"","webpack://ng-cli/external var \"window[\\\"date-fns\\\"]\"","webpack://ng-cli/./node_modules/tslib/tslib.es6.mjs","webpack://ng-cli/external var \"window[\\\"microsoft\\\"][\\\"signalr\\\"]\"","webpack://ng-cli/./dist/@lvflanders/bar/fesm2015/lvflanders-bar.mjs","webpack://ng-cli/./cdn/lvflanders-bar.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = localforage;","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"date-fns\"];","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n};\n","const __WEBPACK_NAMESPACE_OBJECT__ = window[\"microsoft\"][\"signalr\"];","import localforage from 'localforage';\nimport { addSeconds, isBefore } from 'date-fns';\nimport { __awaiter } from 'tslib';\nimport * as signalR from '@microsoft/signalr';\n\n/** Reads a cookie. */\r\nfunction readCookie(name) {\r\n const nameEQ = name + '=';\r\n const ca = document.cookie.split(';');\r\n for (let i = 0; i < ca.length; i++) {\r\n let c = ca[i];\r\n while (c.charAt(0) === ' ')\r\n c = c.substring(1, c.length);\r\n if (c.indexOf(nameEQ) === 0)\r\n return decodeURIComponent(c.substring(nameEQ.length, c.length));\r\n }\r\n return null;\r\n}\r\n/** Deletes all cookies which can be deleted. */\r\nfunction deleteAllCookies() {\r\n const cookies = document.cookie.split(';');\r\n for (let i = 0; i < cookies.length; i++) {\r\n const cookie = cookies[i];\r\n const eqPos = cookie.indexOf('=');\r\n const name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\r\n deleteCookie(name);\r\n }\r\n}\r\n/** Deletes a cookie. */\r\nfunction deleteCookie(name) {\r\n document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';\r\n}\n\nfunction checkDateObject(value) {\r\n return Object.prototype.toString.call(value) === '[object Date]';\r\n}\r\n// NOTE alternatief voor toISOString() omdat hierbij telkens een convertie gedaan wordt naar UTC + 0.\r\n/** Converts a given date as it to an ISO string without converting to UTC +0. */\r\nfunction convertToISOString(value) {\r\n if (!value)\r\n return value;\r\n return new Date(Date.UTC(value.getFullYear(), value.getMonth(), value.getDate(), value.getHours(), value.getMinutes(), value.getSeconds(), value.getMilliseconds())).toISOString();\r\n}\n\n/** Deletes all indexed db databases. */\r\nfunction deleteAllIndexedDb() {\r\n return new Promise((resolve) => {\r\n window.indexedDB\r\n .databases()\r\n .then((r) => {\r\n for (let i = 0; i < r.length; i++)\r\n window.indexedDB.deleteDatabase(r[i].name);\r\n })\r\n .then(() => {\r\n resolve();\r\n });\r\n });\r\n}\r\n/** Deletes an entire indexed db. */\r\nfunction deleteIndexedDb(name) {\r\n window.indexedDB.deleteDatabase(name);\r\n}\r\n/** Gets the version of an indexed db. */\r\nfunction getIndexedDbVersion(name) {\r\n return new Promise((resolve) => {\r\n const request = window.indexedDB.open(name);\r\n request.onsuccess = (event) => {\r\n const db = event.target.result;\r\n // close db because we need to do an upgrade\r\n db.close();\r\n resolve(event.target.result.version);\r\n };\r\n });\r\n}\r\n/*** Gets information about a given indexed db. */\r\nfunction getIndexedDbInfo(name) {\r\n return new Promise((resolve) => {\r\n const request = window.indexedDB.open(name);\r\n request.onsuccess = (event) => {\r\n const db = event.target.result;\r\n // close db because we need to do an upgrade\r\n db.close();\r\n resolve({\r\n version: event.target.result.version,\r\n objectStoreNames: [...db.objectStoreNames]\r\n });\r\n };\r\n });\r\n}\r\n/** Internal method to delete all object stores in a given indexed db with the actual version. */\r\nfunction _deleteIndexedDbObjectStores(name, version, storeNames) {\r\n return new Promise((resolve) => {\r\n const request = indexedDB.open(name, version);\r\n request.onupgradeneeded = (event) => {\r\n const db = event.target.result;\r\n storeNames.forEach((storeName) => {\r\n db.deleteObjectStore(storeName);\r\n });\r\n db.close();\r\n resolve();\r\n };\r\n });\r\n}\n\n// http://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\r\n/**\r\n * Generate universally unique identifier.\r\n */\r\nfunction generateUuid() {\r\n let d = Date.now(); // support from IE9 onwards\r\n if (window.performance && typeof window.performance.now === 'function') {\r\n d += performance.now(); //use high-precision timer if available\r\n }\r\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n const r = (d + Math.random() * 16) % 16 | 0;\r\n d = Math.floor(d / 16);\r\n return (c == 'x' ? r : (r & 0x3) | 0x8).toString(16);\r\n });\r\n return uuid;\r\n}\r\n/**\r\n * Will get the value or execute the function to get the value.\r\n * @param value\r\n */\r\nfunction resolveValue(value) {\r\n if (typeof value === 'function') {\r\n return value();\r\n }\r\n else {\r\n return value;\r\n }\r\n}\r\n/**\r\n * Ensures the creation of a global variable with nesting and gives the reference to the last property.\r\n * @param nestedObject\r\n */\r\nfunction ensureGlobal(nestedObject) {\r\n let result = null;\r\n if (nestedObject != null && nestedObject.length > 0) {\r\n let global = window;\r\n const pieces = nestedObject.split('.');\r\n pieces.forEach((piece) => {\r\n if (global[piece] == null) {\r\n global[piece] = {};\r\n }\r\n global = global[piece];\r\n });\r\n result = global;\r\n }\r\n return result;\r\n}\r\n// https://www.geeksforgeeks.org/how-to-get-the-javascript-function-parameter-names-values-dynamically/\r\n/** Gets the parameters of a function. */\r\nfunction getParamNames(func) {\r\n // String representaation of the function code\r\n let str = func.toString();\r\n // Remove comments of the form /* ... */\r\n // Removing comments of the form //\r\n // Remove body of the function { ... }\r\n // removing '=>' if func is arrow function\r\n str = str\r\n .replace(/\\/\\*[\\s\\S]*?\\*\\//g, '')\r\n .replace(/\\/\\/(.)*/g, '')\r\n .replace(/{[\\s\\S]*}/, '')\r\n .replace(/=>/g, '')\r\n .trim();\r\n // Start parameter names after first '('\r\n const start = str.indexOf('(') + 1;\r\n // End parameter names is just before last ')'\r\n const end = str.length - 1;\r\n const result = str.substring(start, end).split(', ');\r\n const params = [];\r\n result.forEach((element) => {\r\n // Removing any default value\r\n element = element.replace(/=[\\s\\S]*/g, '').trim();\r\n if (element.length > 0)\r\n params.push(element);\r\n });\r\n return params;\r\n}\r\nfunction getStack() {\r\n try {\r\n throw new Error();\r\n }\r\n catch (e) {\r\n return e.stack.replace('Error\\n', '').trim();\r\n }\r\n}\r\n/** Compares 2 versions end returns 0 if equal, 1 if version 1 is higher than 2 and -1 if version 1 is lower than 2. */\r\nfunction versionCompare(v1, v2, options = undefined) {\r\n const lexicographical = options && options.lexicographical;\r\n const zeroExtend = options && options.zeroExtend;\r\n let v1parts = v1.split('.');\r\n let v2parts = v2.split('.');\r\n function isValidPart(x) {\r\n return (lexicographical ? /^\\d+[A-Za-z]*$/ : /^\\d+$/).test(x);\r\n }\r\n if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) {\r\n return NaN;\r\n }\r\n if (zeroExtend) {\r\n while (v1parts.length < v2parts.length)\r\n v1parts.push('0');\r\n while (v2parts.length < v1parts.length)\r\n v2parts.push('0');\r\n }\r\n if (!lexicographical) {\r\n v1parts = v1parts.map(Number);\r\n v2parts = v2parts.map(Number);\r\n }\r\n for (let i = 0; i < v1parts.length; ++i) {\r\n if (v2parts.length == i) {\r\n return 1;\r\n }\r\n if (v1parts[i] == v2parts[i]) {\r\n continue;\r\n }\r\n else if (v1parts[i] > v2parts[i]) {\r\n return 1;\r\n }\r\n else {\r\n return -1;\r\n }\r\n }\r\n if (v1parts.length != v2parts.length) {\r\n return -1;\r\n }\r\n return 0;\r\n}\r\n// NOTE from BARVUY\r\nfunction generateRandomNumber(min, max) {\r\n // find diff\r\n const difference = max - min;\r\n // generate random number\r\n let rand = Math.random();\r\n // multiply with difference\r\n rand = Math.floor(rand * difference);\r\n // add with min value\r\n return rand + min;\r\n}\n\nclass BarStopwatch {\r\n constructor() {\r\n this.id = null;\r\n /** Duration of the watch */\r\n this.duration = null;\r\n }\r\n /** Starts the stopwatch */\r\n start() {\r\n this.reset();\r\n if (window.performance && window.performance.timing) {\r\n this.id = generateUuid();\r\n window.performance.mark(this.id + '_start');\r\n }\r\n }\r\n /** Ends the stopwatch and defines the duration */\r\n stop() {\r\n if (window.performance && window.performance.timing && this.id != null) {\r\n window.performance.mark(this.id + '_end');\r\n window.performance.measure(this.id, this.id + '_start', this.id + '_end');\r\n const entries = window.performance.getEntriesByName(this.id);\r\n window.performance.clearMarks(this.id + '_end');\r\n window.performance.clearMeasures(this.id);\r\n // cleanup\r\n this.reset();\r\n this.duration = entries[0].duration;\r\n }\r\n }\r\n /** Resets the stopwatch */\r\n reset() {\r\n if (this.id != null) {\r\n window.performance.clearMarks(this.id + '_start');\r\n this.id = null;\r\n this.duration = null;\r\n }\r\n }\r\n}\n\n// Based on https://stackoverflow.com/a/4460624/2174621 + added circular dependency safety check\r\n/**\r\n * Deep clones an object.\r\n * @param item The item to clone.\r\n */\r\nfunction deepClone(item) {\r\n // we need to keep track of what we cloned\r\n const traversed = [];\r\n return deepCloneInternal(item, traversed);\r\n}\r\nfunction deepCloneInternal(item, traversed) {\r\n if (!item) {\r\n return item;\r\n } // null, undefined values check\r\n let types = [Number, String, Boolean], result;\r\n // normalizing primitives if someone did new String('aaa'), or new Number('444');\r\n types.forEach(function (type) {\r\n if (item instanceof type) {\r\n result = type(item);\r\n }\r\n });\r\n if (typeof result == 'undefined') {\r\n if (Object.prototype.toString.call(item) === '[object Array]') {\r\n result = [];\r\n item.forEach(function (child, index, array) {\r\n result[index] = deepClone(child);\r\n });\r\n }\r\n else if (typeof item == 'object') {\r\n // testing that this is DOM\r\n if (item.nodeType && typeof item.cloneNode == 'function') {\r\n result = item.cloneNode(true);\r\n }\r\n else if (!item.prototype) {\r\n // check that this is a literal\r\n if (item instanceof Date) {\r\n result = new Date(item);\r\n }\r\n else {\r\n // check if we already handled this object\r\n const traversedItem = traversed.find((t) => t.originalItem == item);\r\n if (traversedItem != null) {\r\n // return the already cloned item\r\n result = traversedItem.clonedItem;\r\n }\r\n else {\r\n // it is an object literal\r\n result = {};\r\n // keep track of the clone\r\n traversed.push({\r\n originalItem: item,\r\n clonedItem: result\r\n });\r\n for (const i in item) {\r\n result[i] = deepCloneInternal(item[i], traversed);\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // depending what you would like here,\r\n // just keep the reference, or create new object\r\n if (item.constructor) {\r\n // would not advice to do that, reason? Read below\r\n result = new item.constructor();\r\n }\r\n else {\r\n result = item;\r\n }\r\n }\r\n }\r\n else {\r\n result = item;\r\n }\r\n }\r\n return result;\r\n}\n\n/**\r\n * Gets an object containing the parts of a given URL.\r\n */\r\nfunction extractUrlParts(url) {\r\n const a = document.createElement('a');\r\n a.href = url;\r\n return {\r\n url: a.href,\r\n host: a.host,\r\n hostname: a.hostname,\r\n port: a.port,\r\n pathname: a.pathname,\r\n protocol: a.protocol,\r\n hash: a.hash,\r\n search: a.search,\r\n // NOTE in IE the anchor gives undefined on origin, so we use a custom method\r\n origin: extractUrlOrigin(url)\r\n };\r\n}\r\n// https://stackoverflow.com/a/1420902/2174621\r\n/**\r\n * Extracts the origin from a given URL.\r\n * @param url\r\n */\r\nfunction extractUrlOrigin(url) {\r\n if (url == null || url.length == 0)\r\n return null;\r\n const pathArray = url.split('/');\r\n const protocol = pathArray[0];\r\n const host = pathArray[2];\r\n return protocol + '//' + host;\r\n}\r\n/**\r\n * Checks whether a given URL is absolute.\r\n * @param url\r\n */\r\n// https://stackoverflow.com/questions/10687099/how-to-test-if-a-url-string-is-absolute-or-relative\r\nfunction checkUrlAbsolute(url) {\r\n return new RegExp('^(?:[a-z]+:)?//', 'i').test(url);\r\n}\r\n// https://stackoverflow.com/a/901144/2174621\r\n/**\r\n * Gets a query string value.\r\n * @param name Query string key name.\r\n * @param url Optional URL.\r\n */\r\nfunction parseQueryStringValue(name, url = null) {\r\n if (url == null)\r\n url = window.location.href;\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n const regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url);\r\n if (!results)\r\n return null;\r\n if (!results[2])\r\n return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n}\r\n/**\r\n * Resolves an url from the origin (domain) of the application.\r\n * @param url\r\n */\r\nfunction resolveUrlFromOrigin(url) {\r\n return checkUrlAbsolute(url) ? url : document.location.origin + url;\r\n}\r\n/**\r\n * Opens an URI.\r\n * @param uri\r\n */\r\nfunction openUrl(url, target = null) {\r\n const a = document.createElement('a');\r\n a.href = url;\r\n if (target != null)\r\n a.target = target;\r\n document.body.appendChild(a);\r\n a.click();\r\n a.parentNode.removeChild(a);\r\n}\r\n/** Checks whether we are in localhost modus. */\r\nfunction checkLocalhost() {\r\n return window.location.hostname === 'localhost';\r\n}\r\n/** Concats different pieces of an url with slashes. */\r\nfunction concatUrl(...urlSegments) {\r\n let result = null;\r\n if (urlSegments && urlSegments.length) {\r\n result = '';\r\n urlSegments.forEach((urlSegment) => {\r\n if (urlSegment && urlSegment.length) {\r\n if (result.length && !result.endsWith('/') && !urlSegment.startsWith('/'))\r\n result += '/';\r\n else if (result.endsWith('/') && urlSegment.startsWith('/'))\r\n result = result.substring(0, result.length - 1);\r\n result += urlSegment;\r\n }\r\n });\r\n }\r\n return result;\r\n}\n\nconst STORAGE_KEY_PREFIX = 'lvflanders.bar.shared.';\r\nconst _BAAS_SHARED_CONSTANTS = {\r\n STORAGE_KEY: {\r\n BAAS_STATE_CONTEXT: STORAGE_KEY_PREFIX + 'baas-state-context',\r\n BAR_APPINFO_CONTEXT: STORAGE_KEY_PREFIX + 'bar-appinfo-context'\r\n }\r\n};\n\nconst APP_INFO_COOKIE_NAME = 'domain.basisarchitectuur.appinfo';\r\n/** Wrapper around the appinfo cookies which is not exposed. */\r\nclass BarAppInfoManager {\r\n /** Gets the app info. */\r\n getAppInfo() {\r\n const cookie = readCookie(APP_INFO_COOKIE_NAME);\r\n const obj = cookie == null ? null : JSON.parse(cookie);\r\n return obj == null\r\n ? null\r\n : {\r\n userId: obj.ToepUser,\r\n securityTicketGuid: obj.SecurityTicketGuid\r\n };\r\n }\r\n}\n\nclass BarIdpError extends Error {\r\n constructor(message) {\r\n super(message); // (1)\r\n this.name = this.constructor.name;\r\n if (arguments.length > 1) {\r\n this.status = arguments[1]; // we houden de httpStatus bij\r\n }\r\n }\r\n}\r\nclass BarIdpServerError extends BarIdpError {\r\n}\r\nclass BarIdpClientError extends BarIdpError {\r\n}\n\n/** Options for idp client. */\r\nclass BarIdpClientOptions {\r\n}\r\nclass BarAuthValues {\r\n}\r\nclass BarIdentity {\r\n}\r\nclass BarKlant {\r\n}\r\nvar BarIdentityType;\r\n(function (BarIdentityType) {\r\n BarIdentityType[\"Anoniem\"] = \"ANONIEM\";\r\n BarIdentityType[\"CID\"] = \"CID\";\r\n BarIdentityType[\"Windows\"] = \"WINDOWS\";\r\n BarIdentityType[\"Cryptokey\"] = \"CRYPTOKEY\";\r\n BarIdentityType[\"Klantnummer\"] = \"ALVNUMMER\";\r\n BarIdentityType[\"Testprofiel\"] = \"TESTPROFIEL\";\r\n BarIdentityType[\"Fas\"] = \"FAS\";\r\n})(BarIdentityType || (BarIdentityType = {}));\n\n/*\r\n * De WebWorker Orchestrator zorgt voor het opstarten van de webworker.\r\n * Deze webworker zal om de 10 minuten (default waarde) de Idp validatie functie oproepen\r\n * Deze kan een config object ontvangen met de baseUrl en initiele Timeout setting\r\n */\r\nclass BarIdpWebworkerOrchestrator {\r\n constructor(idpUrl, wwUrl) {\r\n this.idpUrl = idpUrl;\r\n this.wwUrl = wwUrl;\r\n /* afhandelen van binnenkomende webworker messages */\r\n this.processMessage = function (event) {\r\n if (event) {\r\n const parsedData = JSON.parse(event.data);\r\n switch (Object.keys(parsedData)[0]) {\r\n case 'INFO':\r\n if (parsedData.INFO) {\r\n console.info(`webworker INFO message : ${parsedData.INFO.message}`);\r\n }\r\n break;\r\n case 'WARNING':\r\n console.warn(`webworker WARNING message: ${parsedData.WARNING.message}`);\r\n break;\r\n case 'ERROR':\r\n console.error(parsedData.ERROR);\r\n break;\r\n }\r\n }\r\n };\r\n /* afhandelen van binnenkomende webworker errors */\r\n this.processError = function (errorEvent) {\r\n console.error(errorEvent);\r\n // bij catastrophale fout gaan we webworker stoppen (de webworker kan dit ook zelf door self.close() aan te roepen, maar wij doen het in de orchestrator via terminate()\r\n if (window.Worker && typeof this.idpww != 'undefined' && typeof this.idpww.terminate == 'function')\r\n this.idpww.terminate();\r\n };\r\n }\r\n // deze functie zorgt voor aanmaak van een idp webworker indien deze nog niet bestaat en initialiseert deze met ticketId, baseUrl, idpUrl, timeout\r\n init(ticketId, timeout) {\r\n try {\r\n if (window.Worker) {\r\n if (typeof this.idpww == 'undefined') {\r\n // in localhost we just point to the same origin because we cannot add workers from other domains (we can use a proxy)\r\n let workerUrl = checkLocalhost() ? window.location.origin : this.wwUrl;\r\n if (!workerUrl.endsWith('/'))\r\n workerUrl += '/';\r\n workerUrl += 'scripts/idp-validation-worker/main.js';\r\n this.idpww = new Worker(workerUrl);\r\n if (typeof this.idpww.postMessage == 'function') {\r\n if (timeout != null) {\r\n this.idpww.postMessage(JSON.stringify({ SETTIMEOUT: timeout }));\r\n }\r\n this.idpww.postMessage(JSON.stringify({\r\n INIT: {\r\n idpUrl: this.idpUrl,\r\n timeout: timeout\r\n }\r\n }));\r\n }\r\n else {\r\n console.warn('initWebworker : Er kon geen message verstuurd worden naar de webworker');\r\n }\r\n this.idpww.onmessage = (ev) => this.processMessage(ev);\r\n this.idpww.onerror = (ev) => this.processError(ev);\r\n }\r\n else {\r\n console.warn('initWebworker : initialisatie niet uitgevoerd, we hebben reeds een webworker');\r\n }\r\n }\r\n else {\r\n document.getElementById('result').innerHTML = 'Sorry, uw browser ondersteunt geen Web Workers...';\r\n console.error('Sorry, uw browser ondersteunt geen Web Workers...');\r\n }\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n setTimeout(timeout) {\r\n try {\r\n if (window.Worker && typeof this.idpww != 'undefined' && typeof this.idpww.postMessage == 'function')\r\n this.idpww.postMessage(JSON.stringify({ SETTIMEOUT: timeout }));\r\n else\r\n console.warn('setTimeout : Er kon geen message verstuurd worden naar de webworker');\r\n }\r\n catch (Error) {\r\n console.error('er ging iets mis voor setTimeout ' + timeout);\r\n }\r\n }\r\n getTimeout() {\r\n try {\r\n if (window.Worker && typeof this.idpww != 'undefined' && typeof this.idpww.postMessage == 'function')\r\n this.idpww.postMessage(JSON.stringify({ GETTIMEOUT: true }));\r\n else\r\n console.warn('getTimeout : Er kon geen message verstuurd worden naar de webworker');\r\n }\r\n catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n}\n\n// https://stackoverflow.com/questions/15035473/destroying-webworkers\r\n/* De authProviderclient is een security browser Relying party met volgende functies :\r\n- Authenticate(authValues);\r\n - redirect naar IdP (de redirect terug vanuit de IdP moet je niet opvangen, dit wordt afgehandeld door @BAR (ander backlog item))\r\n - het authValues object bevat alles values om de IdP aan te roepen (Authenticatie via url met querystring parameters)\r\n- Validate(guid);\r\n - deze zal web worker starten die om de 10 minuten de IdP validatie functie oproept (web api oproep)\r\n - een andere timeout kan meegegeven worden (in minuten)\r\n\r\n*/\r\nclass BarIdpClient {\r\n constructor(options = new BarIdpClientOptions()) {\r\n this.options = options;\r\n this.appInfoMgr = new BarAppInfoManager();\r\n }\r\n get authenticated() {\r\n return this.appInfoCookie != null;\r\n }\r\n get authUrl() {\r\n if (this.options.idpUrl.endsWith('/'))\r\n return this.options.idpUrl + 'auth/token';\r\n else\r\n return this.options.idpUrl + '/auth/token';\r\n }\r\n get logoutUrl() {\r\n if (this.options.idpUrl.endsWith('/'))\r\n return this.options.idpUrl + 'auth/logout';\r\n else\r\n return this.options.idpUrl + '/auth/logout';\r\n }\r\n get appInfoCookie() {\r\n return this.appInfoMgr.getAppInfo();\r\n }\r\n /* Authenticatie voert een redirect uit naar de IdP en geeft de via config doorgegeven authenticatie waardes op\r\n (zoals identitytype, hoedanigheid, voorwie)\r\n Technische 'demonstratie' pagina : https://alv-dotnet4-d/a/idp/wui/auth/token?target=https://alv-dotnet4-d/a/idp/wui/tech\r\n Voorbeeld url 1 : https://alv-dotnet4-d/a/idp/wui/auth/token?target=https://alv-dotnet4-d/a/idp/wui/tech&identityType=ALVNUMMER&identityValue=00010001407&vw=00015782102&vwrc=LB\r\n Voorbeeld url 2 : https://alv-dotnet4-d/a/idp/wui/auth/token?target=https://alv-dotnet4-d/a/idp/wui/tech&identityType=WINDOWS&identityValue=GUNDAM\r\n */\r\n authenticate(config = {\r\n identity: undefined,\r\n target: this.options.targetUrl\r\n }) {\r\n var _a, _b;\r\n // Als er geen identity\r\n if (!config.identity) {\r\n if (this.options.zone === 'E') {\r\n config.identity = { type: BarIdentityType.Fas };\r\n }\r\n else {\r\n config.identity = { type: BarIdentityType.Windows };\r\n }\r\n }\r\n if (!this.options.idpUrl)\r\n throw new BarIdpClientError('De idpUrl is niet gedefinieerd.');\r\n let authUrl = this.authUrl;\r\n /* target of default */\r\n authUrl = this.appendQuerystring(authUrl, 'target', config.target || window.location.href);\r\n /* Identity is required */\r\n if (!config || !config.identity || !config.identity.type)\r\n throw Error('Fatale fout : er werd geen identiteitstype meegegeven');\r\n else\r\n authUrl = this.appendQuerystring(authUrl, 'identityType', config.identity.type);\r\n /* identityvalue */\r\n if (config && config.identity && config.identity.value)\r\n authUrl = this.appendQuerystring(authUrl, 'identityValue', config.identity.value);\r\n /* voorwie values */\r\n if (config && config.voorwie && config.voorwie.rolcode)\r\n authUrl = this.appendQuerystring(authUrl, 'vw', config.voorwie.klantnummer);\r\n if (config && config.voorwie && config.voorwie.rolcode)\r\n authUrl = this.appendQuerystring(authUrl, 'vwrc', config.voorwie.rolcode);\r\n /* hoedanigheid values */\r\n if (config && config.voorwie && config.hoedanigheid.klantnummer)\r\n authUrl = this.appendQuerystring(authUrl, 'vw', config.hoedanigheid.klantnummer);\r\n if (config && config.voorwie && config.hoedanigheid.rolcode)\r\n authUrl = this.appendQuerystring(authUrl, 'vwrc', config.hoedanigheid.rolcode);\r\n if (this.options.formatToken)\r\n authUrl = this.appendQuerystring(authUrl, 'formattoken', this.options.formatToken);\r\n (_a = window.sessionStorage) === null || _a === void 0 ? void 0 : _a.removeItem(_BAAS_SHARED_CONSTANTS.STORAGE_KEY.BAAS_STATE_CONTEXT); //idp service is cookie-first, so state in session storage must be cleared\r\n (_b = window.localStorage) === null || _b === void 0 ? void 0 : _b.removeItem(_BAAS_SHARED_CONSTANTS.STORAGE_KEY.BAAS_STATE_CONTEXT); //idp service is cookie-first, so state in session storage must be cleared\r\n window.location.replace(authUrl);\r\n return Promise.resolve();\r\n }\r\n authenticateWithAlvnr(identityValue) {\r\n return this.authenticate({\r\n identity: {\r\n type: BarIdentityType.Klantnummer,\r\n value: identityValue\r\n },\r\n target: this.options.targetUrl\r\n });\r\n }\r\n authenticateWithAnoniem() {\r\n return this.authenticate({\r\n identity: { type: BarIdentityType.Anoniem },\r\n target: this.options.targetUrl\r\n });\r\n }\r\n authenticateWithCBIuserId(identityValue) {\r\n return this.authenticate({\r\n identity: { type: BarIdentityType.CID, value: identityValue },\r\n target: this.options.targetUrl\r\n });\r\n }\r\n authenticateWithCryptoKey(identityValue) {\r\n return this.authenticate({\r\n identity: { type: BarIdentityType.Cryptokey, value: identityValue },\r\n target: this.options.targetUrl\r\n });\r\n }\r\n authenticateWithWindows(identityValue) {\r\n return this.authenticate({\r\n identity: { type: BarIdentityType.Windows, value: identityValue },\r\n target: this.options.targetUrl\r\n });\r\n }\r\n authenticateWithFas() {\r\n return this.authenticate({\r\n identity: { type: BarIdentityType.Fas },\r\n target: this.options.targetUrl\r\n });\r\n }\r\n authenticateWithTestProfiel(identityValue) {\r\n return this.authenticate({\r\n identity: {\r\n type: BarIdentityType.Testprofiel,\r\n value: identityValue\r\n },\r\n target: this.options.targetUrl\r\n });\r\n }\r\n // NOTE ticketid as an argument is obsolete and fixed with ng 18\r\n /* Deze functie start een webworker op die om de x minuten een validate functie zal aanroepen */\r\n validate(timeout, ticketId) {\r\n if (!this.options.wwUrl)\r\n throw new BarIdpClientError('De web worker URL is niet gedefinieerd.');\r\n this.wwMgr = new BarIdpWebworkerOrchestrator(this.options.idpUrl, this.options.wwUrl);\r\n if (timeout != null) {\r\n this.wwMgr.init(null, timeout);\r\n }\r\n else {\r\n this.wwMgr.init(null);\r\n }\r\n }\r\n logout(target) {\r\n let logoutUrl = this.logoutUrl;\r\n if (target) {\r\n if (!checkUrlAbsolute(target))\r\n target = concatUrl(window.location.origin, target);\r\n logoutUrl += `?target=${target}`;\r\n }\r\n // just perform redirect\r\n window.location.replace(logoutUrl);\r\n return Promise.resolve();\r\n }\r\n /*\r\n Voegt een querystring toe met de juiste separator\r\n */\r\n appendQuerystring(url, qsPrm, sqValue) {\r\n const separator = url.indexOf('?') > 0 ? '&' : '?';\r\n return url + separator + qsPrm + '=' + sqValue;\r\n }\r\n}\n\nclass BarSharedBootstrapper {\r\n /** Launches the shared boostrapping. */\r\n launch() {\r\n // define global logging variables\r\n this.defineLogging();\r\n }\r\n defineLogging() {\r\n const log = ensureGlobal('lvflanders.bar.shared.log');\r\n log.enabled = {};\r\n Object.defineProperty(log.enabled, 'cacheStorage', {\r\n get() {\r\n const enabledStr = window.localStorage.getItem('lvflanders.bar.shared.log.enabled.cacheStorage');\r\n return enabledStr != null ? JSON.parse(enabledStr) : false;\r\n },\r\n set(newValue) {\r\n window.localStorage.setItem('lvflanders.bar.shared.log.enabled.cacheStorage', JSON.stringify(newValue));\r\n }\r\n });\r\n Object.defineProperty(log, 'format', {\r\n get() {\r\n const enabledStr = window.localStorage.getItem('lvflanders.bar.shared.log.format');\r\n return enabledStr || 'object';\r\n },\r\n set(newValue) {\r\n if (newValue)\r\n newValue = newValue.toLowerCase();\r\n if (!newValue || newValue === 'json' || newValue === 'object')\r\n window.localStorage.setItem('lvflanders.bar.shared.log.format', newValue);\r\n else\r\n console.warn(\"can only set value to 'json', 'object' or nothing.\");\r\n }\r\n });\r\n }\r\n}\n\n// @dynamic\r\nclass BarCacheEntryOptions {\r\n constructor() {\r\n /** Whether to store for the lifecycle of a session */\r\n this.session = true;\r\n }\r\n /** Gets the default cache entry options */\r\n static get default() {\r\n return { session: true };\r\n }\r\n}\n\n/** Generic internal logger to start log based on a flag in localstorage. */\r\nclass BarLogger {\r\n constructor(options) {\r\n this.options = options;\r\n }\r\n get enabled() {\r\n var _a;\r\n if (this._enabled == null) {\r\n if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.category) {\r\n // if we have a flag to check by default it is not enabled.\r\n this._enabled = false;\r\n const item = window.localStorage.getItem(`lvflanders.bar.shared.log.enabled.${this.options.category}`);\r\n if (item != null && item.length > 0) {\r\n // parse the string value\r\n this._enabled = JSON.parse(item);\r\n }\r\n // if we don't pass on a flag to check in storage we just assume it is enabled\r\n }\r\n else\r\n this._enabled = true;\r\n }\r\n return this._enabled;\r\n }\r\n get format() {\r\n if (this._format == null) {\r\n const item = window.localStorage.getItem('lvflanders.bar.shared.log.format');\r\n if (item != null && item.length > 0) {\r\n switch (item.toLowerCase()) {\r\n case 'json':\r\n this._format = 'json';\r\n break;\r\n default:\r\n this._format = 'object';\r\n break;\r\n }\r\n }\r\n }\r\n return this._format;\r\n }\r\n /** Logs a message. */\r\n log(message) {\r\n var _a, _b, _c;\r\n if (this.enabled) {\r\n if (!message.category)\r\n message.category = (_a = this.options) === null || _a === void 0 ? void 0 : _a.category;\r\n if (!message.context)\r\n message.context = (_b = this.options) === null || _b === void 0 ? void 0 : _b.context;\r\n if (!message.stack)\r\n message.stack = getStack();\r\n if ((_c = this.options) === null || _c === void 0 ? void 0 : _c.correlation) {\r\n // if we gave a correlation as global option we mark it as being the parent\r\n if (message.correlation)\r\n message.correlation.parent = this.options.correlation;\r\n // otherwise we just use it as the leaf correlation for the message\r\n else\r\n message.correlation = this.options.correlation;\r\n }\r\n switch (this.format) {\r\n case 'json':\r\n console.log(JSON.stringify(message));\r\n break;\r\n default:\r\n console.log(message);\r\n break;\r\n }\r\n }\r\n }\r\n}\n\nclass BarDefaultAppState {\r\n}\n\n// NOTE wrapper around LocalForage to be able to swap underlying mechanism in an easy fashion\r\n/** Used to store data in an Indexed DB object store. */\r\nclass BarStore {\r\n constructor(name, storeName) {\r\n this._localforage = localforage.createInstance({\r\n name: name,\r\n storeName: storeName,\r\n // force indexed db, we are not interested in other drivers\r\n driver: localforage.INDEXEDDB\r\n });\r\n this.logger = new BarLogger({\r\n category: 'cacheStorage',\r\n context: {\r\n name: name,\r\n storeName: storeName,\r\n type: 'BarStore (LocalForage)'\r\n }\r\n });\r\n }\r\n /** Internally sets a correlation used for logging purposes. Not to be used outside this library. */\r\n set _correlation(value) {\r\n // define parent correlation (optionally)\r\n this.logger.options.correlation = value;\r\n }\r\n /**\r\n * Gets an item from the object store.\r\n * @param key Key.\r\n */\r\n getItem(key) {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Begin getItem with key '${key}'`, correlation: correlation });\r\n return this._localforage.getItem(key).finally(() => {\r\n this.logger.log({ message: `End getItem with key '${key}'`, correlation: correlation });\r\n });\r\n }\r\n /**\r\n * Sets an item in the object store.\r\n * @param key Key.\r\n * @param value Object value.\r\n */\r\n setItem(key, value) {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Begin setItem with key '${key}'`, correlation: correlation });\r\n return this._localforage.setItem(key, value).finally(() => {\r\n this.logger.log({ message: `End setItem with key '${key}'`, correlation: correlation });\r\n });\r\n }\r\n /**\r\n * Removes an item from the store.\r\n * @param key Key of item.\r\n */\r\n removeItem(key) {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Begin removeItem with key '${key}'`, correlation: correlation });\r\n return this._localforage.removeItem(key).finally(() => {\r\n this.logger.log({ message: `End removeItem with key '${key}'`, correlation: correlation });\r\n });\r\n }\r\n /** Drops the entire store. */\r\n drop() {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: 'Begin drop', correlation: correlation });\r\n return this._localforage.dropInstance().finally(() => {\r\n this.logger.log({ message: 'End drop', correlation: correlation });\r\n });\r\n }\r\n /** Clears the store but doesn't drop it (like it's hot). */\r\n clear() {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: 'Begin clear', correlation: correlation });\r\n return this._localforage.clear().finally(() => {\r\n this.logger.log({ message: 'End clear', correlation: correlation });\r\n });\r\n }\r\n close() {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: 'Begin close', correlation: correlation });\r\n const dbInfo = this._localforage._dbInfo;\r\n if (dbInfo) {\r\n const db = dbInfo.db;\r\n if (db)\r\n db.close();\r\n }\r\n this.logger.log({ message: 'End close', correlation: correlation });\r\n }\r\n /**\r\n * Iterates over all records in the store.\r\n * @param iteratee Iterator callback function.\r\n */\r\n iterate(iteratee) {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: 'Begin iterate', correlation: correlation });\r\n return this._localforage.iterate(iteratee).finally(() => {\r\n this.logger.log({ message: 'End iterate', correlation: correlation });\r\n });\r\n }\r\n /** Gets all keys in the store. */\r\n keys() {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: 'Begin get keys', correlation: correlation });\r\n return this._localforage.keys().finally(() => {\r\n this.logger.log({ message: 'End get keys', correlation: correlation });\r\n });\r\n }\r\n}\n\n/** Represents a cache entry stored into the cache which contains the data and the metadata. */\r\nclass BarCacheEntry {\r\n}\n\n/** Key-value wrapper around object store with caching. */\r\nclass BarCacheStore {\r\n constructor(name, storeName) {\r\n this.name = name;\r\n this.storeName = storeName;\r\n // NOTE we use double underscore because the internal property already has an underscore.\r\n this.__appState = new BarDefaultAppState();\r\n this.logger = new BarLogger({\r\n category: 'cacheStorage',\r\n context: {\r\n type: 'BarCacheStore',\r\n name: this.name,\r\n storeName: this.storeName\r\n }\r\n });\r\n }\r\n // NOTE we use underscore because internal\r\n /** Sets the app state. */\r\n set _appState(value) {\r\n this.__appState = value;\r\n }\r\n /** Gets the app state. */\r\n get _appState() {\r\n return this.__appState;\r\n }\r\n /** Internally sets a correlation used for logging purposes. Not to be used outside this library. */\r\n set _correlation(value) {\r\n // define parent correlation (optionally)\r\n this.logger.options.correlation = value;\r\n }\r\n /**\r\n * Gets an item from the cache or executes a callback to set it if not in the cache.\r\n * @param key Key.\r\n * @param getCallback Callback to get the value in case the value is not in the cache.\r\n */\r\n getOrSetItem(key, getCallback, options = BarCacheEntryOptions.default) {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Begin getOrSetItem with key '${key}'`, correlation: correlation });\r\n const instance = this.getStoreInstance(correlation);\r\n return new Promise((resolve) => {\r\n this.getItemInternal(instance, key).then((value) => {\r\n if (value != null) {\r\n resolve(value);\r\n }\r\n else {\r\n const handleResult = (data) => {\r\n // put it in the cache\r\n this.setItemInternal(instance, key, data, options).then(() => {\r\n resolve(data);\r\n });\r\n };\r\n // execute the callback\r\n const result = getCallback();\r\n if (result instanceof Promise) {\r\n // if it's a promise we execute the promise\r\n result.then((resultValue) => {\r\n handleResult(resultValue);\r\n });\r\n }\r\n else {\r\n // not a promise or null just handle it\r\n handleResult(result);\r\n }\r\n }\r\n });\r\n }).finally(() => {\r\n instance.close();\r\n this.logger.log({ message: `End getOrSetItem with key '${key}'`, correlation: correlation });\r\n });\r\n }\r\n /** Gets an item from the cache. */\r\n getItem(key) {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Begin getItem with key '${key}'`, correlation: correlation });\r\n const instance = this.getStoreInstance(correlation);\r\n return this.getItemInternal(instance, key).finally(() => {\r\n instance.close();\r\n this.logger.log({ message: `End getItem with key '${key}'`, correlation: correlation });\r\n });\r\n }\r\n /** Sets an item in the cache with options. */\r\n setItem(key, value, options = BarCacheEntryOptions.default) {\r\n var _a;\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Begin setItem with key '${key}'`, correlation: correlation });\r\n const instance = this.getStoreInstance(correlation);\r\n const entry = new BarCacheEntry();\r\n entry.value = value;\r\n entry.timestamp = new Date();\r\n // compute the expiration based on ttl\r\n entry.expiration = options != null && options.ttl != null ? addSeconds(entry.timestamp, options.ttl) : null;\r\n entry.options = options;\r\n entry.sessionId = (_a = this._appState) === null || _a === void 0 ? void 0 : _a.sessionId;\r\n return new Promise((resolve) => {\r\n instance.setItem(key, entry).then(() => resolve());\r\n }).finally(() => {\r\n instance.close();\r\n this.logger.log({ message: `End setItem with key '${key}'`, correlation: correlation });\r\n });\r\n }\r\n /** Removes an item from the cache. */\r\n removeItem(key) {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Begin removeItem with key '${key}'`, correlation: correlation });\r\n const instance = this.getStoreInstance(correlation);\r\n return instance.removeItem(key).finally(() => {\r\n instance.close();\r\n this.logger.log({ message: `End removeItem with key '${key}'`, correlation: correlation });\r\n });\r\n }\r\n /** Clears all items from the cache. */\r\n clear() {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: 'Begin clear', correlation: correlation });\r\n const instance = this.getStoreInstance(correlation);\r\n return instance.clear().finally(() => {\r\n instance.close();\r\n this.logger.log({ message: 'End clear', correlation: correlation });\r\n });\r\n }\r\n /** Drops the cache. */\r\n drop() {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: 'Begin drop', correlation: correlation });\r\n const instance = this.getStoreInstance(correlation);\r\n return instance.drop().finally(() => {\r\n instance.close();\r\n this.logger.log({ message: 'End drop', correlation: correlation });\r\n });\r\n }\r\n /**\r\n * Invalidates the store by removing expired cache entries.\r\n * @param clearSession Whether to clear the session cache entries.\r\n */\r\n invalidate(clearSession = false) {\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Begin invalidate with clearSession = ${clearSession}`, correlation: correlation });\r\n const instance = this.getStoreInstance(correlation);\r\n return new Promise((resolve) => {\r\n // here we hold an array of all promises used to remove items from the cache\r\n const invalidationPromises = [];\r\n // we iterate through the entire store\r\n instance\r\n .iterate((entry, key) => {\r\n // now we check if the entry is expired or if the consumer wants to clear session entries\r\n if (this.checkExpired(entry) || (clearSession && entry.options != null && entry.options.session)) {\r\n const invalidationPromise = this.removeItem(key);\r\n invalidationPromises.push(invalidationPromise);\r\n }\r\n })\r\n .then(() => {\r\n Promise.all(invalidationPromises).then(() => {\r\n instance.keys().then((keys) => {\r\n // here we check if the store still has items\r\n if (keys.length === 0) {\r\n // no items anymore: drop the instance\r\n instance.drop().then(() => {\r\n // finalize process\r\n resolve();\r\n });\r\n }\r\n else {\r\n // finalize process\r\n resolve();\r\n }\r\n });\r\n });\r\n });\r\n }).finally(() => {\r\n instance.close();\r\n this.logger.log({ message: `End invalidate with clearSession = ${clearSession}`, correlation: correlation });\r\n });\r\n }\r\n checkExpired(entry) {\r\n var _a, _b;\r\n return (\r\n // expiration expired\r\n (entry.expiration != null && isBefore(entry.expiration, new Date())) ||\r\n // or session expired (entry from previous session) in case we can check this\r\n (((_a = entry.options) === null || _a === void 0 ? void 0 : _a.session) && ((_b = this._appState) === null || _b === void 0 ? void 0 : _b.sessionId) && entry.sessionId != this._appState.sessionId));\r\n }\r\n /* NOTE store used interally (LocalForage)\r\n Create new instance of the store on every occasion to avoid problems with newer versions of the database.\r\n Object stores with caching can be created and removed dynamically. Keeping an instance open would cause issues.\r\n */\r\n getStoreInstance(correlation) {\r\n const store = new BarStore(this.name, this.storeName);\r\n store._correlation = correlation;\r\n return store;\r\n }\r\n getItemInternal(store, key) {\r\n return new Promise((resolve) => {\r\n store.getItem(key).then((entry) => {\r\n if (entry == null) {\r\n resolve(null);\r\n }\r\n else {\r\n // check if expired\r\n if (this.checkExpired(entry)) {\r\n // if expired remove it\r\n store.removeItem(key).then(() => {\r\n // and return nothing\r\n resolve(null);\r\n });\r\n }\r\n else {\r\n // not expired value is valid\r\n entry.lastAccess = new Date();\r\n // update the entry again with last acess timestamp\r\n store.setItem(key, entry).then(() => {\r\n // finally return the value\r\n resolve(entry.value);\r\n });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n setItemInternal(store, key, value, options) {\r\n return new Promise((resolve) => {\r\n var _a;\r\n const entry = new BarCacheEntry();\r\n entry.value = value;\r\n entry.timestamp = new Date();\r\n // compute the expiration based on ttl\r\n entry.expiration = options != null && options.ttl != null ? addSeconds(entry.timestamp, options.ttl) : null;\r\n entry.sessionId = (_a = this._appState) === null || _a === void 0 ? void 0 : _a.sessionId;\r\n entry.options = options;\r\n store.setItem(key, entry).then(() => {\r\n resolve();\r\n });\r\n });\r\n }\r\n}\n\n/** Defines how to store a given item. */\r\nvar BarCacheStoreType;\r\n(function (BarCacheStoreType) {\r\n /** Cache store on application level */\r\n BarCacheStoreType[BarCacheStoreType[\"Application\"] = 0] = \"Application\";\r\n /** Cache store on user level. */\r\n BarCacheStoreType[BarCacheStoreType[\"User\"] = 1] = \"User\";\r\n /** Cache store on global level. */\r\n BarCacheStoreType[BarCacheStoreType[\"Global\"] = 2] = \"Global\";\r\n /** Cache store on application and user level. */\r\n BarCacheStoreType[BarCacheStoreType[\"ApplicationUser\"] = 3] = \"ApplicationUser\";\r\n})(BarCacheStoreType || (BarCacheStoreType = {}));\n\nconst DB_NAME_PREFIX = 'domain.lv.cache.';\r\nconst DB_NAME_APP = `${DB_NAME_PREFIX}app`;\r\nconst DB_NAME_USER = `${DB_NAME_PREFIX}user`;\r\nconst DB_NAME_APP_USER = `${DB_NAME_PREFIX}appUser`;\r\nconst DB_NAME_GLOBAL = `${DB_NAME_PREFIX}global`;\r\n// GVK gets its own database to avoid conflicts, but invalidation logic will be integrated\r\nconst DB_NAME_GVK = `${DB_NAME_PREFIX}gvk`;\r\nclass BarCacheManager {\r\n constructor(appState = new BarDefaultAppState()) {\r\n this.appState = appState;\r\n this.logger = new BarLogger({ category: 'cacheStorage', context: 'BarCacheManager' });\r\n }\r\n /**\r\n * Gets a cache store with given store options.\r\n * @param options\r\n */\r\n getStore(options) {\r\n let name = null;\r\n let storeName = null;\r\n switch (options.storeType) {\r\n case BarCacheStoreType.Application: {\r\n name = DB_NAME_APP;\r\n storeName = options.appCode;\r\n break;\r\n }\r\n case BarCacheStoreType.User: {\r\n name = DB_NAME_USER;\r\n storeName = options.userId;\r\n break;\r\n }\r\n case BarCacheStoreType.ApplicationUser: {\r\n name = DB_NAME_APP_USER;\r\n storeName = `${options.appCode}_${options.userId}`;\r\n break;\r\n }\r\n case BarCacheStoreType.Global: {\r\n name = DB_NAME_GLOBAL;\r\n storeName = 'main';\r\n break;\r\n }\r\n }\r\n if (options.store != null) {\r\n // check if consumer wants separate store in the database\r\n storeName += `_${options.store}`;\r\n }\r\n const result = new BarCacheStore(name, storeName);\r\n // define the app state context to use (which is the one from this class) by assigning internal property\r\n result._appState = this.appState;\r\n return result;\r\n }\r\n /**\r\n * Invalidates all caches.\r\n * @param clearSession Whether to clear all session cache entries.\r\n */\r\n invalidate(clearSession = false) {\r\n // use a guid to correlate all actions together for logging purposes\r\n const correlation = { value: generateUuid() };\r\n this.logger.log({ message: `Starting cache invalidation with argument clearSession = ${clearSession}`, correlation: correlation });\r\n return new Promise((resolve) => {\r\n Promise.all([\r\n this.invalidateDatabase(DB_NAME_APP, clearSession, correlation),\r\n this.invalidateDatabase(DB_NAME_USER, clearSession, correlation),\r\n this.invalidateDatabase(DB_NAME_APP_USER, clearSession, correlation),\r\n this.invalidateDatabase(DB_NAME_GLOBAL, clearSession, correlation),\r\n this.invalidateDatabase(DB_NAME_GVK, clearSession, correlation)\r\n ]).then(() => {\r\n this.logger.log({ message: 'Ending cache invalidation', correlation: correlation });\r\n resolve();\r\n });\r\n });\r\n }\r\n invalidateDatabase(name, clearSession, correlation) {\r\n this.logger.log({ message: `Starting database invalidation with name '${name}'`, correlation: correlation });\r\n return new Promise((resolve) => {\r\n this.logger.log({ message: 'Getting objectStoreNames for invalidation purposes', correlation: correlation });\r\n this.getObjectStoreNames(name).then((objectStoreNames) => {\r\n this.logger.log({ message: 'Retrieved objectStoreNames for invalidation purposes', correlation: correlation });\r\n const promises = [];\r\n objectStoreNames.forEach((storeName) => {\r\n const store = new BarCacheStore(name, storeName);\r\n store._correlation = correlation;\r\n const promise = store.invalidate(clearSession);\r\n promises.push(promise);\r\n });\r\n Promise.all(promises).then(() => {\r\n this.logger.log({ message: 'Getting objectStoreNames for dropping purposes', correlation: correlation });\r\n this.getObjectStoreNames(name).then((objectStoreNames) => {\r\n this.logger.log({ message: 'Retrieved objectStoreNames for dropping purposes', correlation: correlation });\r\n if (objectStoreNames.length == 0) {\r\n // drop database in case empty\r\n localforage\r\n .dropInstance({\r\n name: name\r\n })\r\n .then(function () {\r\n resolve();\r\n });\r\n }\r\n else {\r\n this.logger.log({ message: `Ending database invalidation with name '${name}'`, correlation: correlation });\r\n resolve();\r\n }\r\n });\r\n });\r\n });\r\n });\r\n }\r\n getObjectStoreNames(name) {\r\n return new Promise((resolve) => {\r\n // open up a connection\r\n const openRequest = indexedDB.open(name);\r\n openRequest.onsuccess = () => {\r\n const db = openRequest.result;\r\n // to read all object store names\r\n const objectStoreNames = db.objectStoreNames;\r\n db.close();\r\n resolve(this.toArray(objectStoreNames));\r\n };\r\n });\r\n }\r\n // https://stackoverflow.com/a/2735133/2174621\r\n toArray(obj) {\r\n const array = [];\r\n // iterate backwards ensuring that length is an UInt32\r\n for (let i = obj.length >>> 0; i--;) {\r\n array[i] = obj[i];\r\n }\r\n return array;\r\n }\r\n}\n\nclass BarCacheStoreOptions {\r\n}\n\nconst LOCALE = {\r\n FLEMISH: 'nl-be',\r\n DUTCH: 'nl'\r\n};\n\n/** Allow to hook into the error handling.. */\r\nclass BarErrorHandling {\r\n constructor() {\r\n this._delegates = [];\r\n }\r\n /** Register an error handler in the pipeline */\r\n registerDelegate(handler) {\r\n this._delegates.push(handler);\r\n }\r\n /** Gets the registered handlers. */\r\n get delegates() {\r\n return this._delegates;\r\n }\r\n}\r\nBarErrorHandling.instance = new BarErrorHandling();\n\nvar BarGvkCompatibilityMode;\r\n(function (BarGvkCompatibilityMode) {\r\n // in version 1 we use Application storage and embed the user id in the key.\r\n /** Compatible with version 1 of Gebruikersvoorkeuren. */\r\n BarGvkCompatibilityMode[BarGvkCompatibilityMode[\"Version_1\"] = 0] = \"Version_1\";\r\n // in version 2 we use Application User storage where the key is kept proper (by default this is used).\r\n /** Compatible with version 2 of Gebruikersvoorkeuren. */\r\n BarGvkCompatibilityMode[BarGvkCompatibilityMode[\"Version_2\"] = 1] = \"Version_2\";\r\n})(BarGvkCompatibilityMode || (BarGvkCompatibilityMode = {}));\n\n/** Default state for GVK */\r\nclass BarGvkDefaultState {\r\n constructor() {\r\n // this is the relative Root URL from the root which can be configured\r\n this.apiRootUrl = `${window.origin}/basisarchitectuur/domain.basisarchitectuur.web/`;\r\n // whether remote calls on localhost to the remote api are enabled\r\n this.remoteLocalhostApiEnabled = !checkLocalhost();\r\n this.appInfoMgr = new BarAppInfoManager();\r\n }\r\n // TODO @lvflanders/bar should be statefull\r\n get appCode() {\r\n let result;\r\n // Q&D try get toepassing code from Angular context\r\n try {\r\n result = window.lvflanders.bar.ng.core.state.toepassing.code;\r\n }\r\n catch (_a) {\r\n result = null;\r\n }\r\n if (!result) {\r\n // Q&D try get toepassing code from MVC context\r\n try {\r\n result = window.domain.WebCore.basisContext.appCode();\r\n }\r\n catch (_b) {\r\n result = null;\r\n }\r\n }\r\n return result;\r\n }\r\n get userId() {\r\n const appInfo = this.appInfoMgr.getAppInfo();\r\n return appInfo == null ? null : appInfo.userId;\r\n }\r\n}\n\n/** GVK storage modus defining where state is persisted. */\r\nvar BarGvkStorageMode;\r\n(function (BarGvkStorageMode) {\r\n /** GVK will use browser storage and remote storage (if accessible) to persist the state. */\r\n BarGvkStorageMode[BarGvkStorageMode[\"Default\"] = 0] = \"Default\";\r\n /** GVK will only use browser storage and no remote storage to persist the state. */\r\n BarGvkStorageMode[BarGvkStorageMode[\"BrowserOnly\"] = 1] = \"BrowserOnly\";\r\n /** GVK will only use remote storage and no browser storage to persist the state. */\r\n BarGvkStorageMode[BarGvkStorageMode[\"RemoteOnly\"] = 2] = \"RemoteOnly\";\r\n})(BarGvkStorageMode || (BarGvkStorageMode = {}));\n\nclass BarGvkDefaultStore {\r\n constructor(appCode, userId) {\r\n this.store = new BarCacheStore(DB_NAME_GVK, `${appCode}_${userId}`);\r\n }\r\n getItem(key) {\r\n return this.store.getItem(key);\r\n }\r\n setItem(key, value) {\r\n // by default we set an item for indefinite time in the cache\r\n return this.store.setItem(key, value, { session: false });\r\n }\r\n removeItem(key) {\r\n return this.store.removeItem(key);\r\n }\r\n}\n\nconst DB_NAME_GVK_LEGACY = 'domain.gebruikersvoorkeuren';\r\nclass BarGvkLegacyStore {\r\n constructor(appCode, userId) {\r\n this.appCode = appCode;\r\n this.userId = userId;\r\n }\r\n getItem(key) {\r\n const realKey = this.generateRealKey(key);\r\n const store = this.getStoreInstance();\r\n return store.getItem(realKey).finally(() => {\r\n // always close the store to avoid IndexedDB locks\r\n store.close();\r\n });\r\n }\r\n setItem(key, value) {\r\n const realKey = this.generateRealKey(key);\r\n const store = this.getStoreInstance();\r\n return store.setItem(realKey, value).finally(() => {\r\n // always close the store to avoid IndexedDB locks\r\n store.close();\r\n });\r\n }\r\n removeItem(key) {\r\n const realKey = this.generateRealKey(key);\r\n const store = this.getStoreInstance();\r\n return store.removeItem(realKey).finally(() => {\r\n // always close the store to avoid IndexedDB locks\r\n store.close();\r\n });\r\n }\r\n generateRealKey(key) {\r\n // in legacy mode we integrate the user id into the key\r\n return `_${this.userId}_${key}`;\r\n }\r\n getStoreInstance() {\r\n return new BarStore(DB_NAME_GVK_LEGACY, this.appCode);\r\n }\r\n}\n\n/** retrieves baaS context header to window.sessionStorage */\r\nclass BaasContextUtil {\r\n /** returns stored baas context object in stringified format (used for baas.context.backend header)*/\r\n getBaasContextAsHeaderString() {\r\n const data = this.getBaasContextString();\r\n if (data == null)\r\n return '';\r\n return data;\r\n }\r\n /**get raw string from session or local storage */\r\n getBaasContextString() {\r\n let data = window.sessionStorage.getItem(_BAAS_SHARED_CONSTANTS.STORAGE_KEY.BAAS_STATE_CONTEXT);\r\n if (data === null) {\r\n data = window.localStorage.getItem(_BAAS_SHARED_CONSTANTS.STORAGE_KEY.BAAS_STATE_CONTEXT); //get it from local storage backup (and copy in sessionstorga) instead!\r\n if (data !== null)\r\n window.sessionStorage.setItem(_BAAS_SHARED_CONSTANTS.STORAGE_KEY.BAAS_STATE_CONTEXT, data);\r\n }\r\n return data;\r\n }\r\n get baasHeaderName() {\r\n return 'baas.context.backend';\r\n }\r\n}\n\n// NOTE originates from GVK\r\n/** Vanilla HTTP utility class (ajax). */\r\nclass HttpUtility {\r\n constructor(baasContextUtil = new BaasContextUtil()) {\r\n this.baasContextUtil = baasContextUtil;\r\n }\r\n /**\r\n * Performs an ajax GET operation.\r\n * @param url Url to invoke.\r\n * @param callback Callback when finished.\r\n */\r\n get(url, callback) {\r\n const xmlhttp = new XMLHttpRequest();\r\n xmlhttp.withCredentials = true;\r\n xmlhttp.onreadystatechange = () => {\r\n this.handleXmlHttpRequestDone(xmlhttp, callback);\r\n };\r\n xmlhttp.open('GET', url, true);\r\n xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n this.addBaasHeaders(xmlhttp);\r\n xmlhttp.send();\r\n }\r\n /**\r\n * Performs an ajax POST operation.\r\n * @param url Url to invoke.\r\n * @param params Params.\r\n * @param callback Callback when finished.\r\n */\r\n post(url, params, callback) {\r\n const xmlhttp = new XMLHttpRequest();\r\n xmlhttp.withCredentials = true;\r\n xmlhttp.onreadystatechange = () => {\r\n this.handleXmlHttpRequestDone(xmlhttp, callback);\r\n };\r\n xmlhttp.open('POST', url, true);\r\n xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n xmlhttp.setRequestHeader('Content-type', 'application/json');\r\n this.addBaasHeaders(xmlhttp);\r\n xmlhttp.send(params);\r\n }\r\n /**\r\n * Performs an ajax PUT operation.\r\n * @param url Url to invoke.\r\n * @param params Params.\r\n * @param callback Callback when finished.\r\n */\r\n put(url, params, callback) {\r\n const xmlhttp = new XMLHttpRequest();\r\n xmlhttp.withCredentials = true;\r\n xmlhttp.onreadystatechange = () => {\r\n this.handleXmlHttpRequestDone(xmlhttp, callback);\r\n };\r\n xmlhttp.open('PUT', url, true);\r\n xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n xmlhttp.setRequestHeader('Content-type', 'application/json');\r\n this.addBaasHeaders(xmlhttp);\r\n xmlhttp.send(params);\r\n }\r\n /**\r\n * Performs an ajax DELETE operation.\r\n * @param url Url to invoke.\r\n * @param params Params.\r\n * @param callback Callback when finished.\r\n */\r\n delete(url, params, callback) {\r\n const xmlhttp = new XMLHttpRequest();\r\n xmlhttp.withCredentials = true;\r\n xmlhttp.onreadystatechange = () => {\r\n this.handleXmlHttpRequestDone(xmlhttp, callback);\r\n };\r\n xmlhttp.open('DELETE', url, true);\r\n xmlhttp.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n this.addBaasHeaders(xmlhttp);\r\n xmlhttp.send(params);\r\n }\r\n /**\r\n * Checks whether a given response is an error response.\r\n * @param response HTTP response.\r\n */\r\n isErrorResponse(response) {\r\n if (response.status == 'fail' || response.status == 'error') {\r\n return true;\r\n }\r\n else if (response.hasErrors) {\r\n return true;\r\n }\r\n else if (response.error) {\r\n return true;\r\n }\r\n else if (response.errors) {\r\n return true;\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n /**\r\n * Gets the error message from the response.\r\n * @param response HTTP response.\r\n */\r\n getErrorResponseMessage(response) {\r\n if (response.status == 'fail') {\r\n return 'A validation failed';\r\n }\r\n else if (response.status == 'error') {\r\n return response.message;\r\n }\r\n else if (response.error) {\r\n return response.message;\r\n }\r\n else if (response.errors) {\r\n return 'Error';\r\n }\r\n else {\r\n return null;\r\n }\r\n }\r\n /**\r\n * Gets the data from the response.\r\n * @param response HTTP response.\r\n */\r\n getResponseData(response) {\r\n if (response.data) {\r\n return response.data;\r\n }\r\n else {\r\n return response;\r\n }\r\n }\r\n /**\r\n * adds the baaS headers from session storage to GVK calls\r\n */\r\n addBaasHeaders(xmlhttp) {\r\n const ctx = this.baasContextUtil.getBaasContextAsHeaderString();\r\n if (ctx !== '')\r\n xmlhttp.setRequestHeader(this.baasContextUtil.baasHeaderName, ctx);\r\n }\r\n handleXmlHttpRequestDone(xmlhttp, callback) {\r\n if (xmlhttp.readyState == 4) {\r\n let response;\r\n // Indien 'response' geen 'hasErrors' of 'errors' property heeft dan is deze malformed.\r\n // In principe moet de GVK web API steeds (minimaal) deze properties teruggeven.\r\n if (!xmlhttp.responseText) {\r\n if (xmlhttp.status == 200) {\r\n response = { status: 'success' };\r\n }\r\n else if (xmlhttp.status >= 400 && xmlhttp.status < 500) {\r\n response = {\r\n status: 'fail',\r\n data: {\r\n message: 'Status code ' + xmlhttp.status + ' returned.'\r\n }\r\n };\r\n }\r\n else {\r\n response = {\r\n status: 'error',\r\n message: 'Status code ' + xmlhttp.status + ' returned.'\r\n };\r\n }\r\n }\r\n else {\r\n let responseText = xmlhttp.responseText;\r\n if (responseText.indexOf(HttpUtility.ANTI_XSSI_TOKEN) == 0) {\r\n if (responseText.length > HttpUtility.ANTI_XSSI_TOKEN.length) {\r\n responseText = responseText.substring(HttpUtility.ANTI_XSSI_TOKEN.length);\r\n }\r\n else {\r\n responseText = '';\r\n }\r\n }\r\n response = JSON.parse(responseText);\r\n }\r\n if (callback) {\r\n callback(response);\r\n }\r\n }\r\n }\r\n}\r\nHttpUtility.ANTI_XSSI_TOKEN = \")]}',\";\n\nclass BarGvkRemoteStore {\r\n constructor(urlRoot, appCode) {\r\n this.urlRoot = urlRoot;\r\n this.appCode = appCode;\r\n this.http = new HttpUtility();\r\n }\r\n /** Checks whether the remote storage is disabled. */\r\n checkDisabled() {\r\n return new Promise((resolve) => {\r\n // Opgelet: deze promise zal altijd 'resolven' en nooit rejecten.\r\n // Bij fouten wordt het zeker voor het onzeker genomen: de voorkeuren zullen niet geladen worden.\r\n this.http.get(`${this.urlRoot}/${this.appCode}/settings`, (jsonResponse) => {\r\n try {\r\n if (this.http.isErrorResponse(jsonResponse)) {\r\n resolve(true);\r\n }\r\n else {\r\n resolve(this.http.getResponseData(jsonResponse).disabled);\r\n }\r\n }\r\n catch (ex) {\r\n console.error(ex);\r\n resolve(true);\r\n }\r\n });\r\n });\r\n }\r\n getItem(key) {\r\n return new Promise((resolve, reject) => {\r\n this.http.get(`${this.urlRoot}/${this.appCode}?key=${encodeURIComponent(key)}`, (jsonResponse) => {\r\n try {\r\n if (this.http.isErrorResponse(jsonResponse)) {\r\n reject('Server side fout bij ophalen voorkeuren via LoadVoorkeuren: ' + this.http.isErrorResponse(jsonResponse));\r\n }\r\n else if (this.http.getResponseData(jsonResponse).hasVoorkeuren) {\r\n resolve(this.http.getResponseData(jsonResponse).voorkeuren);\r\n }\r\n else {\r\n resolve(undefined);\r\n }\r\n }\r\n catch (ex) {\r\n reject('Fout bij uitlezen van ajax LoadVoorkeuren response: ' + ex);\r\n }\r\n });\r\n });\r\n }\r\n setItem(key, value) {\r\n return new Promise((resolve, reject) => {\r\n this.http.put(`${this.urlRoot}/${this.appCode}?key=${encodeURIComponent(key)}`, value, (jsonResponse) => {\r\n try {\r\n if (this.http.isErrorResponse(jsonResponse)) {\r\n // #310620 just log a warning, don't reject entire save\r\n console.error('Server side fout bij wegschrijven voorkeuren: ' + this.http.getErrorResponseMessage(jsonResponse));\r\n }\r\n resolve();\r\n }\r\n catch (ex) {\r\n reject('Fout bij uitlezen van voorkeuren ajax response: ' + ex);\r\n }\r\n });\r\n });\r\n }\r\n removeItem(key) {\r\n return new Promise((resolve, reject) => {\r\n // En dan nu de backend verwittigen\r\n // TODO: optimalisatie -> meerdere setNames in één keer doorgeven.\r\n let optionalSetName = '';\r\n // userId hoeft niet, want dat regelt BAR (sessie)\r\n if (key)\r\n optionalSetName = `?key=${encodeURIComponent(key)}`;\r\n this.http.delete(`${this.urlRoot}/${this.appCode}${optionalSetName}`, null, (jsonResponse) => {\r\n try {\r\n if (this.http.isErrorResponse(jsonResponse)) {\r\n reject('Server side fout bij verwijderen van voorkeuren via ClearVoorkeuren: ' + this.http.getErrorResponseMessage(jsonResponse));\r\n }\r\n else {\r\n resolve();\r\n }\r\n }\r\n catch (ex) {\r\n reject('Fout bij uitlezen van ajax ClearVoorkeuren response: ' + ex);\r\n }\r\n });\r\n });\r\n }\r\n}\n\n// NOTE this is based on the original GVK and is not exposed to the outside world\r\n// API voor de 'storage' layer.\r\n// De storage layer maakt gebruikt van een lokale storage (BarStorage) en remote storage (ProfielBeheer met laagje er bovenop).\r\nclass BarGvkInternalManager {\r\n constructor(state, remoteStore) {\r\n this.state = state;\r\n this.remoteStore = remoteStore;\r\n this.warningBrowserOnlyStorageTriggered = false;\r\n this.disabled = false;\r\n }\r\n get urlRoot() {\r\n // we hebben de root URL nodig waarop we onze calls gaan doen (domain + segment)\r\n let result = this.state.apiRootUrl || '';\r\n if (!result.endsWith('/'))\r\n result += '/';\r\n // hier maken we een assumptie dat de web api er relatief als volgt eruit ziet\r\n result += 'api/gvk';\r\n return result;\r\n }\r\n // Zijn de gebruikersvoorkeuren uitgeschakeld (via een 'master' switch in profielbeheer)?\r\n // Dit is van belang om voorkeuren te kunnen uitschakelen 'op afstand' indien er issues zijn.\r\n checkDisabled(loadRemoteSettings, appCode, userId) {\r\n return new Promise((resolve) => {\r\n if (this.disabled) {\r\n // if globally disabled we just exit\r\n resolve(true);\r\n return;\r\n }\r\n const uniqueKey = this.getUniqueKeyForSessionStorage(appCode, userId, '_disabled'), localSessionValue = window.sessionStorage.getItem(uniqueKey);\r\n if (localSessionValue === undefined || localSessionValue === null) {\r\n if (loadRemoteSettings) {\r\n this.getRemoteStore(appCode)\r\n .checkDisabled()\r\n .then((disabled) => {\r\n window.sessionStorage.setItem(uniqueKey, disabled.toString());\r\n resolve(disabled);\r\n });\r\n }\r\n else {\r\n sessionStorage.setItem(uniqueKey, 'false');\r\n resolve(false);\r\n }\r\n }\r\n else\r\n resolve(localSessionValue === 'true');\r\n });\r\n }\r\n // Gets the gebruikersvoorkeuren.\r\n getItem(appCode, userId, setName, storageMode, noSettingsAction, sets, forceGetFromRemoteStorage, compatibilityMode) {\r\n // confirm storage mode based on state (eventually change it if incompatiblity)\r\n storageMode = this.confirmStorageMode(storageMode);\r\n let returnPromise = Promise.resolve();\r\n // Remote storage heeft voorrang op local storage.\r\n // Let wel: remote storage wordt maar één keer bevraagd (bij start van sessie) en wordt dan ook lokaal bewaard.\r\n // Bij volgende 'loads' zal de resolve dus steeds een 'undefined' geven, maar dat is geen probleem omdat de settings\r\n // lokaal werden bewaard.\r\n if (storageMode !== BarGvkStorageMode.BrowserOnly) {\r\n returnPromise = new Promise((resolve, reject) => {\r\n returnPromise\r\n .then((value) => {\r\n const uniqueKey = this.getUniqueKeyForSessionStorage(appCode, userId, setName), localSessionValue = sessionStorage.getItem(uniqueKey);\r\n if (localSessionValue === undefined || localSessionValue === null || forceGetFromRemoteStorage) {\r\n // Onthouden dat we het al opgehaald hebben in deze sessie (of althans een poging gedaan hebben).\r\n // userId moet niet opgegeven want daar zorgt BAR voor (sessie).\r\n sessionStorage.setItem(uniqueKey, new Date().getTime().toString());\r\n this.getRemoteStore(appCode)\r\n .getItem(setName)\r\n .then((data) => {\r\n if (data != null) {\r\n // Als profielbeheer voorkeuren heeft: lokaal bewaren.\r\n this.setItem(appCode, userId, setName, BarGvkStorageMode.BrowserOnly, data, compatibilityMode).then(() => {\r\n resolve(data);\r\n });\r\n }\r\n else {\r\n // Profielbeheer heeft geen voorkeuren (meer): lokaal leegmaken.\r\n this.removeItem(appCode, userId, setName, BarGvkStorageMode.BrowserOnly, compatibilityMode).then(() => {\r\n resolve(undefined);\r\n });\r\n }\r\n });\r\n }\r\n else\r\n resolve(undefined);\r\n })\r\n .catch((error) => {\r\n reject('Fout bij ophalen localPromise van get: ' + error);\r\n });\r\n });\r\n }\r\n // Indien er remote geen settings zijn of werden opgehaald, dan wordt local storage gecontroleerd.\r\n if (storageMode !== BarGvkStorageMode.RemoteOnly) {\r\n returnPromise = new Promise((resolve, reject) => {\r\n returnPromise\r\n .then((value) => {\r\n if (!value) {\r\n this.getBrowserStore(appCode, userId, compatibilityMode)\r\n .getItem(setName)\r\n .then((value) => {\r\n resolve(value);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n }\r\n else\r\n resolve(value);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n // En indien er remote en/of local niets gevonden werd: dan kunnen de voorkeuren eventueel 'berekend' worden door een callback.\r\n if (noSettingsAction.action !== 'none') {\r\n returnPromise = new Promise((resolve, reject) => {\r\n returnPromise\r\n .then((value) => {\r\n if (!value) {\r\n if (noSettingsAction.action === 'callback') {\r\n const ctx = {\r\n appCode: appCode,\r\n setName: setName,\r\n // TODO check concept of sets\r\n settings: sets != null && sets.get(setName) ? sets.get(setName).settings : this.createEmptySettings(setName)\r\n };\r\n noSettingsAction.callback\r\n .apply(null, [ctx])\r\n .then((voorkeuren) => {\r\n if (!voorkeuren) {\r\n resolve(undefined);\r\n }\r\n // Om gebruikers van deze API enigszins 'flexibiliteit' aan te bieden kunnen zij kiezen om een JSON string terug te geven of\r\n // een gewoon JavaScript object.\r\n let voorkeurenObject = null, voorkeurenString = null;\r\n if (typeof voorkeuren === 'string') {\r\n voorkeurenObject = JSON.parse(voorkeuren);\r\n voorkeurenString = voorkeuren;\r\n }\r\n else if (voorkeuren instanceof String) {\r\n voorkeurenObject = JSON.parse(voorkeuren.toString());\r\n voorkeurenString = voorkeuren;\r\n }\r\n else {\r\n voorkeurenObject = voorkeuren;\r\n voorkeurenString = JSON.stringify(voorkeuren);\r\n }\r\n // Controle op 'well-formedness' van het object.\r\n // Deze check zou nog doorgedrevener kunnen, maar dit is al goed genoeg.\r\n if (voorkeurenObject._gvk_setName && voorkeurenObject._gvk_timeStamp) {\r\n this.setItem(appCode, userId, setName, storageMode, voorkeurenString, compatibilityMode);\r\n resolve(voorkeurenString);\r\n }\r\n else\r\n reject('Aanroep van noSettingsAction.callback heeft een foutief gestructureerd JSON object teruggegeven.');\r\n })\r\n .catch((error) => {\r\n reject('Aanroep van noSettingsAction.callback heeft een fout teruggegeven: ' + error);\r\n });\r\n }\r\n }\r\n else\r\n resolve(value);\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n return returnPromise;\r\n }\r\n // Bewaren van voorkeuren\r\n setItem(appCode, userId, setName, storageMode, voorkeuren, compatibilityMode) {\r\n // confirm storage mode based on state (eventually change it if incompatiblity)\r\n storageMode = this.confirmStorageMode(storageMode);\r\n return new Promise((resolve, reject) => {\r\n if (storageMode == BarGvkStorageMode.BrowserOnly) {\r\n this.getBrowserStore(appCode, userId, compatibilityMode)\r\n .setItem(setName, voorkeuren)\r\n .then(() => {\r\n resolve();\r\n });\r\n }\r\n else {\r\n // TODO take into account localStorageMode === 'off' ??\r\n this.getBrowserStore(appCode, userId, compatibilityMode)\r\n .setItem(setName, voorkeuren)\r\n .then(() => {\r\n const uniqueKey = this.getUniqueKeyForSessionStorage(appCode, userId, setName);\r\n // Onthouden dat we het opgestuurd hebben (of althans een poging gedaan hebben).\r\n sessionStorage.setItem(uniqueKey, new Date().getTime().toString());\r\n this.getRemoteStore(appCode)\r\n .setItem(setName, voorkeuren)\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n });\r\n }\r\n });\r\n }\r\n // Opkuisen (clearen) van voorkeuren\r\n removeItem(appCode, userId, setName, storageMode, compatibilityMode) {\r\n // confirm storage mode based on state (eventually change it if incompatiblity)\r\n storageMode = this.confirmStorageMode(storageMode);\r\n // clearen gebeurt in de 2 storage systemen. Eventueel zou localStorageMode kunnen uitgelezen worden.\r\n const localPromise = this.getBrowserStore(appCode, userId, compatibilityMode).removeItem(setName);\r\n if (storageMode == BarGvkStorageMode.BrowserOnly) {\r\n return localPromise;\r\n }\r\n else {\r\n return new Promise((resolve, reject) => {\r\n localPromise\r\n .then(() => {\r\n // Sessie opkuisen\r\n const uniqueKey = this.getUniqueKeyForSessionStorage(appCode, userId, setName);\r\n if (appCode === null || userId === null || setName === null) {\r\n let i = 0;\r\n const keysToRemove = [];\r\n for (i = 0; i < sessionStorage.length; i++) {\r\n if (sessionStorage.key(i).indexOf(uniqueKey) == 0) {\r\n keysToRemove.push(sessionStorage.key(i));\r\n }\r\n }\r\n for (i = 0; i < keysToRemove.length; i++) {\r\n sessionStorage.removeItem(keysToRemove[i]);\r\n }\r\n }\r\n else {\r\n sessionStorage.removeItem(uniqueKey);\r\n }\r\n this.getRemoteStore(appCode)\r\n .removeItem(setName)\r\n .then(() => {\r\n resolve();\r\n })\r\n .catch((error) => {\r\n reject(error);\r\n });\r\n })\r\n .catch((error) => {\r\n reject('Fout bij ophalen localPromise van clearVoorkeuren: ' + error);\r\n });\r\n });\r\n }\r\n }\r\n confirmStorageMode(storageMode) {\r\n if (storageMode !== BarGvkStorageMode.BrowserOnly) {\r\n // in case we allow remote access we need to check if it is enabled otherwise we set it back to browser only with a warning\r\n if (!this.state.remoteLocalhostApiEnabled) {\r\n storageMode = BarGvkStorageMode.BrowserOnly;\r\n if (!this.warningBrowserOnlyStorageTriggered) {\r\n this.warningBrowserOnlyStorageTriggered = true;\r\n console.warn('GVK remote storage cannot be used in localhost session because XDC is not enabled. Browser storage will be used instead.');\r\n }\r\n }\r\n }\r\n return storageMode;\r\n }\r\n createEmptySettings(setName) {\r\n const settings = {\r\n _gvk_setName: setName,\r\n _gvk_timeStamp: null // Wordt bij het saven opgevuld.\r\n };\r\n return settings;\r\n }\r\n // Helper functie voor het genereren van unieke key voor de sessionStorage.\r\n getUniqueKeyForSessionStorage(appCode, userId, setName) {\r\n let key = 'domain.gvk';\r\n if (appCode) {\r\n key = key + '_' + appCode;\r\n if (userId) {\r\n key = key + '_' + userId;\r\n if (setName) {\r\n key = key + '_' + setName;\r\n }\r\n }\r\n }\r\n return key;\r\n }\r\n getBrowserStore(appCode, userId, compatibilityMode) {\r\n if (compatibilityMode == BarGvkCompatibilityMode.Version_1) {\r\n return new BarGvkLegacyStore(appCode, userId);\r\n }\r\n else {\r\n return new BarGvkDefaultStore(appCode, userId);\r\n }\r\n }\r\n getRemoteStore(appCode) {\r\n if (this.remoteStore != null) {\r\n if (typeof this.remoteStore === 'function') {\r\n return this.remoteStore(appCode);\r\n }\r\n else {\r\n return this.remoteStore;\r\n }\r\n }\r\n else {\r\n return new BarGvkRemoteStore(this.urlRoot, appCode);\r\n }\r\n }\r\n}\n\n/** BAR user storage service to get and set gebruikersvoorkeuren. */\r\nclass BarGvkManager {\r\n constructor(\r\n // default state mainly used to get app and user for which we want to keep gebruikersvoorkeuren\r\n state = new BarGvkDefaultState(), \r\n // default settings used\r\n settings = {\r\n storageMode: BarGvkStorageMode.Default\r\n }, \r\n // here we pass an optional remote store for alternative implementations\r\n remoteStore = null) {\r\n this.state = state;\r\n this.settings = settings;\r\n this.remoteStore = remoteStore;\r\n this.storage = new BarGvkInternalManager(this.state, this.remoteStore);\r\n }\r\n /** Sets GVK as being disabled (globally). */\r\n set disabled(value) {\r\n this.storage.disabled = value;\r\n }\r\n /** Gets whether GVK is (globally). */\r\n get disabled() {\r\n return this.storage.disabled;\r\n }\r\n /**\r\n * Checks whether user storage is disabled for the application/user.\r\n */\r\n checkDisabled(appCode = this.state.appCode) {\r\n return this.storage.checkDisabled(true, appCode, this.state.userId);\r\n }\r\n /**\r\n * Loads an object from the storage.\r\n * @param key Key from the storage.\r\n */\r\n getItem(key, settings = this.settings) {\r\n return new Promise((resolve) => {\r\n this.storage\r\n .getItem(settings.appCode || this.state.appCode, this.state.userId, key, settings.storageMode, { action: 'none' }, null, settings.storageMode == BarGvkStorageMode.RemoteOnly, settings.compatibilityMode)\r\n .then((strData) => {\r\n const data = strData == null ? null : JSON.parse(strData);\r\n resolve(data);\r\n });\r\n });\r\n }\r\n /**\r\n * Saves an object to the storage.\r\n * @param key Key from the storage.\r\n * @param value The value to store in the storage.\r\n * @param settings Optional settings for the user storage.\r\n */\r\n setItem(key, value, settings = this.settings) {\r\n if (value && typeof value !== 'object')\r\n throw new Error('GVK item value must be a JS object.');\r\n return this.storage.setItem(settings.appCode || this.state.appCode, this.state.userId, key, settings.storageMode, value == null ? null : JSON.stringify(value), settings.compatibilityMode);\r\n }\r\n /**\r\n * Removes an object from the storage.\r\n * @param key Key from the storage.\r\n */\r\n removeItem(key, settings = this.settings) {\r\n return this.storage.removeItem(settings.appCode || this.state.appCode, this.state.userId, key, settings.storageMode, settings.compatibilityMode);\r\n }\r\n}\n\n/** GVK call settings. */\r\nclass BarGvkSettings {\r\n constructor() {\r\n /** Defines how to store the state. */\r\n this.storageMode = BarGvkStorageMode.Default;\r\n /** Defines the compatibility */\r\n this.compatibilityMode = BarGvkCompatibilityMode.Version_2;\r\n }\r\n}\n\nvar BarClearStateTarget;\r\n(function (BarClearStateTarget) {\r\n /// \r\n /// Clear all known BaaS/BAR caches.\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"Baas\"] = 0] = \"Baas\";\r\n /// \r\n /// Full cache clear.\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"Full\"] = 1] = \"Full\";\r\n /// \r\n /// Only clear everything related to profiel/configuration.\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"Configuration\"] = 2] = \"Configuration\";\r\n /// \r\n /// Clear everything concerning security (actie allowed).\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"Security\"] = 3] = \"Security\";\r\n /// \r\n /// Clear everything regarding caching & storage (indexed db).\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"CacheStorage\"] = 4] = \"CacheStorage\";\r\n /// \r\n /// Clear all application state in caching & storage (indexed db).\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"CacheStorageApp\"] = 5] = \"CacheStorageApp\";\r\n /// \r\n /// Clear all application/user state in caching & storage (indexed db).\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"CacheStorageAppUser\"] = 6] = \"CacheStorageAppUser\";\r\n /// \r\n /// Clear all user state in caching & storage (indexed db).\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"CacheStorageUser\"] = 7] = \"CacheStorageUser\";\r\n /// \r\n /// Clear all global state in caching & storage (indexed db).\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"CacheStorageGlobal\"] = 8] = \"CacheStorageGlobal\";\r\n /// \r\n /// Clear all state regarding gvk.\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"Gvk\"] = 9] = \"Gvk\";\r\n /// \r\n /// Clear all local storage.\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"LocalStorage\"] = 10] = \"LocalStorage\";\r\n /// \r\n /// Clear all session storage.\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"SessionStorage\"] = 11] = \"SessionStorage\";\r\n // https://gist.github.com/rmehner/b9a41d9f659c9b1c3340\r\n /// \r\n /// Clear all indexed db.\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"IndexedDb\"] = 12] = \"IndexedDb\";\r\n // https://stackoverflow.com/questions/179355/clearing-all-cookies-with-javascript\r\n /// \r\n /// Clear all cookies (except what cannot be removed due to security).\r\n /// \r\n BarClearStateTarget[BarClearStateTarget[\"Cookies\"] = 13] = \"Cookies\";\r\n})(BarClearStateTarget || (BarClearStateTarget = {}));\n\n/*** Handles hub message to show a push notification. */\r\nclass BarClearStateHubMessageHandler {\r\n constructor() {\r\n this.action = 'ClearState';\r\n }\r\n handle(target) {\r\n switch (target) {\r\n case BarClearStateTarget.Baas: {\r\n this.clearCacheStorage();\r\n this.clearGvk(false);\r\n this.clearStorageByPrefix(window.sessionStorage, 'domain.gvk_');\r\n this.clearStorageByPrefix(window.localStorage, 'lvflanders.bar.ng.core');\r\n this.clearStorageByPrefix(window.sessionStorage, 'lvflanders.bar.ng.core');\r\n break;\r\n }\r\n case BarClearStateTarget.Cookies: {\r\n deleteAllCookies();\r\n break;\r\n }\r\n case BarClearStateTarget.SessionStorage: {\r\n window.sessionStorage.clear();\r\n break;\r\n }\r\n case BarClearStateTarget.LocalStorage: {\r\n window.localStorage.clear();\r\n break;\r\n }\r\n case BarClearStateTarget.IndexedDb: {\r\n deleteAllIndexedDb();\r\n break;\r\n }\r\n case BarClearStateTarget.Full: {\r\n deleteAllCookies();\r\n window.sessionStorage.clear();\r\n window.localStorage.clear();\r\n deleteAllIndexedDb();\r\n break;\r\n }\r\n case BarClearStateTarget.Gvk: {\r\n this.clearGvk();\r\n break;\r\n }\r\n case BarClearStateTarget.CacheStorageGlobal: {\r\n deleteIndexedDb(DB_NAME_GLOBAL);\r\n break;\r\n }\r\n case BarClearStateTarget.CacheStorageUser: {\r\n deleteIndexedDb(DB_NAME_USER);\r\n break;\r\n }\r\n case BarClearStateTarget.CacheStorageApp: {\r\n deleteIndexedDb(DB_NAME_APP);\r\n break;\r\n }\r\n case BarClearStateTarget.CacheStorageAppUser: {\r\n deleteIndexedDb(DB_NAME_APP_USER);\r\n break;\r\n }\r\n case BarClearStateTarget.CacheStorage: {\r\n this.clearCacheStorage();\r\n break;\r\n }\r\n case BarClearStateTarget.Configuration: {\r\n this.clearUserObjectStores('profiel', 'configuration');\r\n break;\r\n }\r\n case BarClearStateTarget.Security: {\r\n this.clearUserObjectStores('actieAllowed');\r\n break;\r\n }\r\n }\r\n }\r\n clearUserObjectStores(...objectStoreNameSuffixes) {\r\n return new Promise((resolve) => {\r\n getIndexedDbInfo(DB_NAME_USER).then((info) => {\r\n const objectStoresToDelete = info.objectStoreNames.filter((storeName) => {\r\n return objectStoreNameSuffixes.some((suffix) => storeName.endsWith(`_${suffix}`));\r\n });\r\n if (objectStoresToDelete.length)\r\n _deleteIndexedDbObjectStores(DB_NAME_USER, info.version + 1, objectStoresToDelete).then(() => resolve());\r\n else\r\n resolve();\r\n });\r\n });\r\n }\r\n clearCacheStorage() {\r\n deleteIndexedDb(DB_NAME_APP);\r\n deleteIndexedDb(DB_NAME_APP_USER);\r\n deleteIndexedDb(DB_NAME_USER);\r\n deleteIndexedDb(DB_NAME_GLOBAL);\r\n deleteIndexedDb(DB_NAME_GVK);\r\n }\r\n clearGvk(clearNonLegacy = true) {\r\n deleteIndexedDb(DB_NAME_GVK_LEGACY);\r\n if (clearNonLegacy)\r\n deleteIndexedDb(DB_NAME_GVK);\r\n this.clearStorageByPrefix(window.sessionStorage, 'domain.gvk_');\r\n }\r\n clearStorageByPrefix(storage, keyPrefix) {\r\n Object.keys(storage)\r\n .filter((key) => key.startsWith(keyPrefix))\r\n .forEach((key) => {\r\n storage.removeItem(key);\r\n });\r\n }\r\n}\n\nclass BarCustomHubMessageHandler {\r\n constructor() {\r\n this.action = 'CustomMessage';\r\n }\r\n handle(data) {\r\n const customEvent = new CustomEvent('customHubMessage', {\r\n detail: data\r\n });\r\n // Dispatch the custom event on a JavaScript object or DOM element\r\n window.dispatchEvent(customEvent);\r\n }\r\n}\n\n/** Manages browser notifications with service workers. */\r\nclass BarNotificationManager {\r\n /** Will init the notification system and ask for permissions. */\r\n init() {\r\n Notification.requestPermission((status) => {\r\n console.info('Notification permission status:', status);\r\n });\r\n }\r\n /** Shows a notification. */\r\n show(notification) {\r\n if (Notification.permission === 'granted') {\r\n navigator.serviceWorker.getRegistration().then((reg) => {\r\n if (reg)\r\n reg.showNotification(notification.title, notification.options);\r\n else {\r\n console.warn('No service worker registration retrieved to show notification.');\r\n }\r\n });\r\n }\r\n }\r\n}\n\n/*** Handles hub message to show a push notification. */\r\nclass BarPushNotificationHubMessageHandler {\r\n constructor(notificationManager = new BarNotificationManager()) {\r\n this.notificationManager = notificationManager;\r\n this.action = 'PushNotification';\r\n }\r\n handle(data) {\r\n this.notificationManager.show(data);\r\n }\r\n}\n\nclass BarHubClient {\r\n constructor() {\r\n this.retryCount = 1; // 1 as initial call always gets fired\r\n this.handlers = [\r\n new BarPushNotificationHubMessageHandler(),\r\n new BarClearStateHubMessageHandler(),\r\n new BarCustomHubMessageHandler()\r\n ];\r\n }\r\n /** Adds a hub message handler. */\r\n addHandler(handler) {\r\n this.handlers.push(handler);\r\n }\r\n /** Initializes the connection to the hub and starts it. */\r\n init(options) {\r\n const neededHeaders = {\r\n 'communication-app-code': options.appCode,\r\n 'communication-user-token': options.securityTicketId\r\n };\r\n const connUrl = (options === null || options === void 0 ? void 0 : options.hubUrl) + '?connectionIdentifier=' + generateUuid();\r\n this.connection = new signalR.HubConnectionBuilder()\r\n .withUrl(connUrl, { headers: neededHeaders })\r\n // NOTE we don't use a truthy check because 0 is a valid value (trace level)\r\n // by default log level none\r\n .configureLogging(options.logLevel == null ? signalR.LogLevel.None : options.logLevel)\r\n .build();\r\n this.connection.onclose(() => __awaiter(this, void 0, void 0, function* () {\r\n yield this.start({ userId: options === null || options === void 0 ? void 0 : options.userId, appCode: options.appCode, securityTicketId: options.securityTicketId });\r\n }));\r\n this.connection.on('ReceiveMessage', (message) => {\r\n const handlers = this.handlers.filter((h) => h.action === message.action);\r\n if (handlers.length)\r\n handlers.forEach((handler) => handler.handle(message.detail));\r\n else\r\n console.warn(`No handler found for hub messages of type ${message.action}.`, message);\r\n });\r\n this.start({ userId: options === null || options === void 0 ? void 0 : options.userId, appCode: options.appCode, securityTicketId: options.securityTicketId });\r\n }\r\n start(registration) {\r\n return __awaiter(this, void 0, void 0, function* () {\r\n try {\r\n yield this.connection.start();\r\n console.info('Connected to Bar SignalR');\r\n }\r\n catch (e) {\r\n console.error(e);\r\n if (this.retryCount >= 5) {\r\n console.error('Exceeded maximum retry times for connecting SignalR Hub (5).');\r\n }\r\n else {\r\n this.retryCount++;\r\n setTimeout(() => this.start(registration), 2000);\r\n }\r\n }\r\n });\r\n }\r\n}\n\n/*\r\n * Public API Surface of @lvflanders/bar\r\n */\n\n/**\r\n * Generated bundle index. Do not edit.\r\n */\n\nexport { BarAuthValues, BarCacheEntryOptions, BarCacheManager, BarCacheStore, BarCacheStoreOptions, BarCacheStoreType, BarErrorHandling, BarGvkCompatibilityMode, BarGvkManager, BarGvkSettings, BarGvkStorageMode, BarHubClient, BarIdentity, BarIdentityType, BarIdpClient, BarIdpClientOptions, BarKlant, BarNotificationManager, BarSharedBootstrapper, BarStopwatch, BarStore, DB_NAME_APP, DB_NAME_APP_USER, DB_NAME_GLOBAL, DB_NAME_GVK, DB_NAME_USER, LOCALE, _BAAS_SHARED_CONSTANTS, checkDateObject, checkLocalhost, checkUrlAbsolute, concatUrl, convertToISOString, deepClone, deleteAllCookies, deleteAllIndexedDb, deleteCookie, ensureGlobal, extractUrlOrigin, extractUrlParts, generateRandomNumber, generateUuid, getParamNames, getStack, openUrl, parseQueryStringValue, readCookie, resolveUrlFromOrigin, resolveValue, versionCompare };\n//# sourceMappingURL=lvflanders-bar.mjs.map\n","import * as lvFlandersBarShared from '../dist/@lvflanders/bar';\r\n\r\n// global glue variable for externals\r\nif (window['lvflanders'] == null) window['lvflanders'] = {};\r\nif (window['lvflanders'].bar == null) window['lvflanders'].bar = {};\r\n\r\nwindow['lvflanders'].bar.shared = lvFlandersBarShared;\r\n\r\nexport { lvFlandersBarShared };\r\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","localforage","window","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","step","next","e","rejected","result","done","then","apply","create","SuppressedError","readCookie","name","nameEQ","ca","document","cookie","split","i","length","c","charAt","substring","indexOf","decodeURIComponent","deleteAllCookies","cookies","eqPos","deleteCookie","substr","checkDateObject","toString","convertToISOString","Date","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","toISOString","deleteAllIndexedDb","indexedDB","databases","r","deleteDatabase","deleteIndexedDb","generateUuid","d","now","performance","replace","Math","random","floor","resolveValue","ensureGlobal","nestedObject","global","forEach","piece","getParamNames","func","str","trim","start","end","params","element","push","getStack","Error","stack","versionCompare","v1","v2","options","undefined","lexicographical","zeroExtend","v1parts","v2parts","isValidPart","x","test","every","NaN","map","Number","generateRandomNumber","min","max","difference","rand","BarStopwatch","constructor","this","id","duration","reset","timing","mark","stop","measure","entries","getEntriesByName","clearMarks","clearMeasures","deepClone","item","deepCloneInternal","traversed","String","Boolean","type","child","index","array","nodeType","cloneNode","traversedItem","find","t","originalItem","clonedItem","extractUrlParts","url","a","createElement","href","host","hostname","port","pathname","protocol","hash","search","origin","extractUrlOrigin","pathArray","checkUrlAbsolute","RegExp","parseQueryStringValue","location","results","exec","resolveUrlFromOrigin","openUrl","target","body","appendChild","click","parentNode","removeChild","checkLocalhost","concatUrl","urlSegments","urlSegment","endsWith","startsWith","STORAGE_KEY_PREFIX","_BAAS_SHARED_CONSTANTS","STORAGE_KEY","BAAS_STATE_CONTEXT","BAR_APPINFO_CONTEXT","BarAppInfoManager","getAppInfo","JSON","parse","userId","ToepUser","securityTicketGuid","SecurityTicketGuid","BarIdpError","message","super","arguments","status","BarIdpClientError","BarIdpClientOptions","BarAuthValues","BarIdentity","BarKlant","BarIdentityType","BarCacheStoreType","BarIdpWebworkerOrchestrator","idpUrl","wwUrl","processMessage","event","parsedData","data","keys","INFO","console","info","warn","WARNING","error","ERROR","processError","errorEvent","Worker","idpww","terminate","init","ticketId","timeout","workerUrl","postMessage","stringify","SETTIMEOUT","INIT","onmessage","ev","onerror","getElementById","innerHTML","setTimeout","getTimeout","GETTIMEOUT","BarIdpClient","appInfoMgr","authenticated","appInfoCookie","authUrl","logoutUrl","authenticate","config","identity","targetUrl","_a","_b","zone","Fas","Windows","appendQuerystring","voorwie","rolcode","klantnummer","hoedanigheid","formatToken","sessionStorage","removeItem","localStorage","authenticateWithAlvnr","identityValue","Klantnummer","authenticateWithAnoniem","Anoniem","authenticateWithCBIuserId","CID","authenticateWithCryptoKey","Cryptokey","authenticateWithWindows","authenticateWithFas","authenticateWithTestProfiel","Testprofiel","validate","wwMgr","logout","qsPrm","sqValue","separator","BarSharedBootstrapper","launch","defineLogging","log","enabled","enabledStr","getItem","set","newValue","setItem","toLowerCase","BarCacheEntryOptions","session","BarLogger","_enabled","category","format","_format","_c","context","correlation","parent","BarDefaultAppState","BarStore","storeName","_localforage","driver","logger","_correlation","finally","drop","dropInstance","clear","close","dbInfo","_dbInfo","db","iterate","iteratee","BarCacheEntry","BarCacheStore","__appState","_appState","getOrSetItem","getCallback","default","instance","getStoreInstance","getItemInternal","handleResult","setItemInternal","resultValue","entry","timestamp","expiration","ttl","addSeconds","sessionId","invalidate","clearSession","invalidationPromises","checkExpired","invalidationPromise","all","isBefore","store","lastAccess","DB_NAME_PREFIX","DB_NAME_APP","DB_NAME_USER","DB_NAME_APP_USER","DB_NAME_GLOBAL","DB_NAME_GVK","BarCacheManager","appState","getStore","storeType","Application","appCode","User","ApplicationUser","Global","invalidateDatabase","getObjectStoreNames","objectStoreNames","promises","promise","openRequest","open","onsuccess","toArray","BarCacheStoreOptions","LOCALE","FLEMISH","DUTCH","BarErrorHandling","_delegates","registerDelegate","handler","delegates","BarGvkCompatibilityMode","BarGvkStorageMode","BarGvkDefaultState","apiRootUrl","remoteLocalhostApiEnabled","lvflanders","bar","ng","core","state","toepassing","code","domain","WebCore","basisContext","appInfo","BarGvkDefaultStore","DB_NAME_GVK_LEGACY","BarGvkLegacyStore","realKey","generateRealKey","BaasContextUtil","getBaasContextAsHeaderString","getBaasContextString","baasHeaderName","HttpUtility","baasContextUtil","callback","xmlhttp","XMLHttpRequest","withCredentials","onreadystatechange","handleXmlHttpRequestDone","setRequestHeader","addBaasHeaders","send","post","put","isErrorResponse","response","hasErrors","errors","getErrorResponseMessage","getResponseData","ctx","readyState","responseText","ANTI_XSSI_TOKEN","BarGvkRemoteStore","urlRoot","http","checkDisabled","jsonResponse","disabled","ex","encodeURIComponent","hasVoorkeuren","voorkeuren","optionalSetName","delete","BarGvkInternalManager","remoteStore","warningBrowserOnlyStorageTriggered","loadRemoteSettings","uniqueKey","getUniqueKeyForSessionStorage","localSessionValue","getRemoteStore","setName","storageMode","noSettingsAction","sets","forceGetFromRemoteStorage","compatibilityMode","confirmStorageMode","returnPromise","BrowserOnly","getTime","catch","RemoteOnly","getBrowserStore","action","settings","createEmptySettings","voorkeurenObject","voorkeurenString","_gvk_setName","_gvk_timeStamp","localPromise","keysToRemove","Version_1","BarGvkManager","Default","storage","strData","BarGvkSettings","Version_2","BarClearStateTarget","BarClearStateHubMessageHandler","handle","Baas","clearCacheStorage","clearGvk","clearStorageByPrefix","Cookies","SessionStorage","LocalStorage","IndexedDb","Full","Gvk","CacheStorageGlobal","CacheStorageUser","CacheStorageApp","CacheStorageAppUser","CacheStorage","Configuration","clearUserObjectStores","Security","objectStoreNameSuffixes","version","objectStoresToDelete","filter","some","suffix","storeNames","onupgradeneeded","deleteObjectStore","_deleteIndexedDbObjectStores","clearNonLegacy","keyPrefix","BarCustomHubMessageHandler","customEvent","CustomEvent","detail","dispatchEvent","BarNotificationManager","Notification","requestPermission","show","notification","permission","navigator","serviceWorker","getRegistration","reg","showNotification","title","BarPushNotificationHubMessageHandler","notificationManager","BarHubClient","retryCount","handlers","addHandler","neededHeaders","securityTicketId","connUrl","hubUrl","connection","withUrl","headers","configureLogging","logLevel","build","onclose","on","h","registration","shared"],"sourceRoot":""}