@optionfactory/ful 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ful.iife.js","sources":["../src/bindings.mjs","../src/encodings.mjs","../src/forms.mjs","../src/http-client.mjs","../src/storage.mjs","../src/oauth-authorization-code.mjs","../src/timing.mjs","../src/wizard.mjs","../src/app.mjs"],"sourcesContent":["/* global CSS */\n\nfunction extract(extractors, el) {\n const maybeExtractor = extractors[el.dataset['bindExtractor']] || extractors[el.dataset['bindProvide']];\n if (maybeExtractor) {\n return maybeExtractor(el);\n }\n if (el.getAttribute('type') === 'radio') {\n if (!el.checked) {\n return undefined;\n }\n return el.dataset['bindType'] === 'boolean' ? el.value === 'true' : el.value;\n }\n if (el.getAttribute('type') === 'checkbox') {\n return el.checked;\n }\n if (el.dataset['bindType'] === 'boolean') {\n return !el.value ? null : el.value === 'true';\n }\n return el.value || null;\n}\n\nfunction mutate(mutators, el, raw, key, values) {\n const maybeMutator = mutators[el.dataset['bindMutator']] || mutators[el.dataset['bindProvide']];\n if (maybeMutator) {\n maybeMutator(el, raw, key, values);\n return;\n }\n if (el.getAttribute('type') === 'radio') {\n el.checked = el.getAttribute('value') === raw;\n return;\n }\n if (el.getAttribute('type') === 'checkbox') {\n el.checked = raw;\n return;\n }\n el.value = raw;\n}\n\n\nfunction providePath(result, path, value) {\n const keys = path.split(\".\").map((k) => k.match(/^[0-9]+$/) ? +k : k);\n let current = result;\n let previous = null;\n for (let i = 0; ; ++i) {\n const ckey = keys[i];\n const pkey = keys[i - 1];\n if (Number.isInteger(ckey) && !Array.isArray(current)) {\n if (previous !== null) {\n previous[pkey] = current = [];\n } else {\n result = current = [];\n }\n }\n if (i === keys.length - 1) {\n //when value is undefined we only want to define the property if it's not defined \n current[ckey] = value !== undefined ? value : (ckey in current ? current[ckey] : null);\n return result;\n }\n if (current[ckey] === undefined) {\n current[ckey] = {};\n }\n previous = current;\n current = current[ckey];\n }\n}\n\nclass Bindings {\n\n constructor( {extractors, mutators, ignoredChildrenSelector, valueHoldersSelector}) {\n this.extractors = extractors || {};\n this.mutators = mutators || {};\n this.valueHoldersSelector = valueHoldersSelector || 'input[name], select[name], textarea[name]';\n this.ignoredChildrenSelector = ignoredChildrenSelector || '.d-none';\n }\n setValues(el, values) {\n for (let k in values) {\n if (!values.hasOwnProperty(k)) {\n continue;\n }\n Array.from(el.querySelectorAll(`[name='${CSS.escape(k)}']`)).forEach((el) => {\n mutate(this.mutators, el, values[k], k, values);\n });\n }\n }\n getValues(el) {\n return Array.from(el.querySelectorAll(this.valueHoldersSelector))\n .filter((el) => {\n if (el.dataset['bindInclude'] === 'never') {\n return false;\n }\n return el.dataset['bindInclude'] === 'always' || el.closest(this.ignoredChildrenSelector) === null;\n })\n .reduce((result, el) => {\n return providePath(result, el.getAttribute('name'), extract(this.extractors, el));\n }, {});\n }\n}\n\n\n\nexport { Bindings };","\n\nclass Base64 {\n static encode(arrayBuffer, dialect) {\n const d = dialect || Base64.URL_SAFE;\n const len = arrayBuffer.byteLength;\n const view = new Uint8Array(arrayBuffer);\n let res = '';\n for (let i = 0; i < len; i += 3) {\n const v1 = d[view[i] >> 2];\n const v2 = d[((view[i] & 3) << 4) | (view[i + 1] >> 4)];\n const v3 = d[((view[i + 1] & 15) << 2) | (view[i + 2] >> 6)];\n const v4 = d[view[i + 2] & 63];\n res += v1 + v2 + v3 + v4;\n }\n if (len % 3 === 2) {\n res = res.substring(0, res.length - 1);\n } else if (len % 3 === 1) {\n res = res.substring(0, res.length - 2);\n }\n return res;\n }\n static decode(str, dialect) {\n const d = dialect || Base64.URL_SAFE;\n let nbytes = Math.floor(str.length * 0.75);\n for (let i = 0; i !== str.length; ++i) {\n if (str[str.length - i - 1] !== '=') {\n break;\n }\n --nbytes;\n }\n const view = new Uint8Array(nbytes);\n\n let vi = 0;\n let si = 0;\n while (vi < str.length * 0.75) {\n const v1 = d.indexOf(str.charAt(si++));\n const v2 = d.indexOf(str.charAt(si++));\n const v3 = d.indexOf(str.charAt(si++));\n const v4 = d.indexOf(str.charAt(si++));\n view[vi++] = (v1 << 2) | (v2 >> 4);\n view[vi++] = ((v2 & 15) << 4) | (v3 >> 2);\n view[vi++] = ((v3 & 3) << 6) | v4;\n }\n\n return view.buffer;\n }\n}\n\nBase64.STANDARD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nBase64.URL_SAFE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n\nclass Hex {\n static decode(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(\"invalid length\");\n }\n const lenInBytes = hex.length / 2;\n return new Uint8Array(lenInBytes).map((e, i) => {\n const offset = i * 2;\n const octet = hex.substring(offset, offset + 2);\n return parseInt(octet, 16);\n });\n }\n static encode(bytes, upper) {\n return Array.from(bytes)\n .map(b => b.toString(16))\n .map(b => upper ? b.toUpperCase() : b)\n .map(o => o.padStart(2, 0))\n .join('');\n }\n}\n\nexport { Base64, Hex };","/* global Infinity, CSS */\n\n\nclass Form {\n constructor(el, bindings, {globalErrorsEl, fieldContainerSelector, errorClass, hideClass}) {\n this.el = el;\n this.bindings = bindings;\n this.globalErrorsEl = globalErrorsEl;\n this.fieldContainerSelector = fieldContainerSelector !== undefined ? fieldContainerSelector : Form.DEFAULT_FIELD_CONTAINER_SELECTOR;\n this.errorClass = errorClass || Form.DEFAULT_ERROR_CLASS;\n this.hideClass = hideClass || Form.DEFAULT_HIDE_CLASS;\n }\n setValues(values) {\n return this.bindings.setValues(this.el, values);\n }\n getValues() {\n return this.bindings.getValues(this.el);\n }\n setErrors(errors, scrollFirstErrorIntoView, context) {\n\n this.clearErrors();\n errors\n .map(this.mapError ? this.mapError : (e) => e)\n .filter((e) => e.type === 'FIELD_ERROR' || e.type === 'INVALID_FORMAT')\n .forEach((e) => {\n const name = e.context.replace(\"[\", \".\").replace(\"].\", \".\");\n Array.from(this.el.querySelectorAll(`[name='${CSS.escape(name)}']`))\n .map(el => this.fieldContainerSelector ? el.closest(this.fieldContainerSelector) : el)\n .filter(el => el !== null)\n .forEach(label => {\n label.classList.add(this.errorClass);\n label.dataset['error'] = e.reason;\n });\n });\n if (this.globalErrorsEl) {\n const globalErrors = errors.filter((e) => e.type !== 'FIELD_ERROR' && e.type !== 'INVALID_FORMAT');\n this.globalErrorsEl.innerHTML = globalErrors.map(e => e.reason).join(\"\\n\");\n if (globalErrors.length !== 0) {\n this.globalErrorsEl.classList.remove(this.hideClass);\n }\n }\n if (!scrollFirstErrorIntoView) {\n return;\n }\n const yOffsets = Array.from(this.el.querySelectorAll('.${CSS.escape(this.errorClass)}'))\n .map((label) => label.getBoundingClientRect().y + window.scrollY);\n const firstErrorScrollY = Math.min(...yOffsets);\n if (firstErrorScrollY !== Infinity) {\n window.scroll(window.scrollX, firstErrorScrollY > 100 ? firstErrorScrollY - 100 : 0);\n }\n }\n clearErrors() {\n this.el.querySelectorAll(`.${CSS.escape(this.errorClass)}`).forEach(l => l.classList.remove(this.errorClass));\n if (this.globalErrorsEl) {\n this.globalErrorsEl.innerHTML = '';\n this.globalErrorsEl.classList.add(this.hideClass);\n }\n }\n}\n\nForm.DEFAULT_FIELD_CONTAINER_SELECTOR = 'label';\nForm.DEFAULT_ERROR_CLASS = 'has-error';\nForm.DEFAULT_HIDE_CLASS = 'd-none';\n\n\n/*\n export function forms() {\n }\n \n forms.dropContext = function (context) {\n return function (e) {\n if (e.context && e.context.indexOf(context) === 0) {\n e.context = e.context.substring(context.length);\n }\n return e;\n };\n };\n \n \n Dom.ready(() => {\n document.querySelectorAll('label:not([data-error])').forEach(el => {\n el.dataset['error'] = \"Il valore inserito non è valido\";\n });\n });\n \n Dom.ready(() => {\n Dom.on(document.body, 'change', '[data-pattern]', {}, evt => {\n const el = evt.srcElement;\n const pattern = el.dataset['pattern'];\n const matches = el.value.match(pattern);\n const label = el.closest('label');\n if(label === null){\n return;\n }\n label.classList[matches ? 'remove' : 'add']('has-error'); \n });\n });\n */\nexport { Form };","class ContextInterceptor {\n constructor() {\n const context = document.querySelector(\"meta[name='context']\").getAttribute(\"content\");\n this.context = context.endsWith(\"/\") ? context.substring(0, context.length - 1) : context;\n }\n before(request) {\n const separator = request.resource.startsWith(\"/\") ? \"\" : \"/\";\n request.resource = this.context + separator + request.resource;\n }\n}\n\nclass CsrfTokenInterceptor {\n constructor() {\n this.k = document.querySelector(\"meta[name='_csrf_header']\").getAttribute(\"content\");\n this.v = document.querySelector(\"meta[name='_csrf']\").getAttribute(\"content\");\n }\n before(request) {\n const headers = new Headers(request.options.headers);\n headers.set(this.k, this.v);\n request.options.headers = headers;\n }\n}\n\nclass RedirectOnUnauthorizedInterceptor {\n constructor(redirectUri) {\n this.redirectUri = redirectUri;\n }\n after(request, response) {\n if (response.status !== 401) {\n return;\n }\n window.location.href = redirectUri;\n }\n}\n\nclass Failure extends Error {\n static parseProblems(status, text) {\n const def = [{\n type: \"GENERIC_PROBLEM\",\n context: null,\n reason: `${status}: ${text}`,\n details: null\n }];\n try {\n return text ? JSON.parse(text) : def;\n } catch (e) {\n return def;\n }\n }\n static fromResponse(status, text) {\n return new Failure(status, Failure.parseProblems(status, text));\n }\n constructor(status, problems) {\n super(JSON.stringify(problems));\n this.name = `Failure:${status}`;\n this.status = status;\n this.problems = problems;\n }\n}\n\nclass HttpClientBuilder {\n constructor() {\n this.interceptors = [];\n }\n withContext() {\n this.interceptors.push(new ContextInterceptor());\n return this;\n }\n withCsrfToken() {\n this.interceptors.push(new CsrfTokenInterceptor());\n return this;\n }\n withRedirectOnUnauthorized(redirectUri) {\n this.interceptors.push(new RedirectOnUnauthorizedInterceptor(redirectUri));\n return this;\n }\n withInterceptors(...interceptors) {\n this.interceptors.push(...interceptors);\n return this;\n }\n build() {\n const interceptors = this.interceptors;\n return new HttpClient({interceptors});\n }\n}\n\nclass HttpClient {\n static builder() {\n return new HttpClientBuilder();\n }\n constructor( {interceptors}){\n this.interceptors = interceptors || [];\n }\n async fetch(resource, options) {\n const is = this.interceptors.concat(options.interceptors || []);\n const request = {resource, options};\n await is.forEach(async (i) => {\n if (!i.before) {\n return;\n }\n await i.before(request);\n });\n const response = await fetch(request.resource, request.options);\n await is.forEach(async (i) => {\n if (!i.after) {\n return;\n }\n await i.after(request, response);\n });\n\n return response;\n }\n async json(resource, options) {\n try {\n const response = await this.fetch(resource, options);\n if (!response.ok) {\n const message = await response.text();\n throw Failure.fromResponse(response.status, message);\n }\n const text = await response.text();\n return text ? JSON.parse(text) : undefined;\n } catch (e) {\n if (e instanceof Failure) {\n throw e;\n }\n throw new Failure(0, [{\n type: \"CONNECTION_PROBLEM\",\n context: null,\n reason: e.message,\n details: null\n }]);\n }\n }\n async form(resource, options, uiOptions) {\n const ui = uiOptions || {};\n ui.buttons?.forEach(el => {\n el.setAttribute(\"disabled\", \"disabled\");\n if (ui.loader) {\n el.dataset['oldContent'] = el.innerHTML;\n el.innerHTML = ui.loader;\n }\n });\n try {\n const r = await this.json(resource, options);\n ui.form?.clearErrors();\n return r;\n } catch (e) {\n ui.form?.setErrors(e.problems);\n throw e;\n } finally {\n ui.buttons?.forEach(el => {\n el.removeAttribute(\"disabled\");\n el.innerHTML = el.dataset['oldContent'];\n delete el.dataset['oldContent'];\n });\n }\n }\n}\n\n\n\nexport { HttpClient, Failure };\n","\nclass Storage {\n constructor(prefix, storage) {\n this.prefix = prefix;\n this.storage = storage;\n }\n save(k, v) {\n this.storage.setItem(`${this.prefix}-${k}`, JSON.stringify(v));\n }\n load(k) {\n const got = this.storage.getItem(`${this.prefix}-${k}`);\n return got === undefined ? undefined : JSON.parse(got);\n }\n remove(k) {\n this.storage.removeItem(`${this.prefix}-${k}`);\n }\n pop(k) {\n const decoded = this.load(k);\n this.remove(k);\n return decoded;\n }\n}\n\nclass LocalStorage extends Storage {\n constructor(prefix) {\n super(prefix, localStorage);\n }\n}\n\nclass SessionStorage extends Storage {\n constructor(prefix) {\n super(prefix, sessionStorage);\n }\n}\n\nclass VersionedStorage {\n constructor(storage, key, dataSupplier){\n this.storage = storage;\n this.key = key;\n this.dataSupplier = dataSupplier;\n this.cache = null;\n \n }\n async load(revision){\n const saved = this.storage.load(this.key);\n if (!!saved && saved.revision === revision) {\n this.cache = saved.value;\n return;\n }\n const freshData = await this.dataSupplier(revision, this.key);\n this.storage.save(this.key, {\n revision: revision,\n value: freshData\n });\n this.cache = freshData;\n }\n data(){\n return this.cache;\n }\n}\n\n\n\nexport {LocalStorage, SessionStorage, VersionedStorage};","import { Base64 } from \"./encodings.mjs\";\nimport { SessionStorage } from \"./storage.mjs\";\n\n\nclass AuthorizationCodeFlow {\n static forKeycloak(clientId, realmBaseUrl, redirectUri){\n const authUri = new URL(\"protocol/openid-connect/auth\", realmBaseUrl);\n const tokenUri = new URL(\"protocol/openid-connect/token\", realmBaseUrl);\n const logoutUri = new URL(\"protocol/openid-connect/logout\", realmBaseUrl);\n const scope = \"openid profile\";\n return new AuthorizationCodeFlow(clientId, scope, authUri, tokenUri, logoutUri, redirectUri); \n }\n constructor(clientId, scope, authUri, tokenUri, logoutUri, redirectUri) {\n this.clientId = clientId;\n this.scope = scope;\n this.authUri = authUri;\n this.tokenUri = tokenUri;\n this.logoutUri = logoutUri;\n this.redirectUri = redirectUri;\n this.storage = new SessionStorage(clientId);\n }\n async _auth() {\n const pkceVerifier = Base64.encode(crypto.getRandomValues(new Uint8Array(32)).buffer);\n const pkceChallenge = Base64.encode(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(pkceVerifier)));\n const state = this.clientId + Base64.encode(crypto.getRandomValues(new Uint8Array(16)).buffer);\n this.storage.save(AuthorizationCodeFlow.PKCE_AND_STATE_KEY, {\n state: state,\n verifier: pkceVerifier\n });\n const url = new URL(this.authUri);\n url.searchParams.set(\"client_id\", this.clientId);\n url.searchParams.set(\"redirect_uri\", this.redirectUri);\n url.searchParams.set(\"response_type\", 'code');\n url.searchParams.set(\"scope\", this.scope);\n url.searchParams.set(\"state\", state);\n url.searchParams.set(\"code_challenge\", pkceChallenge);\n url.searchParams.set(\"code_challenge_method\", 'S256');\n window.location = url;\n }\n async _tokenExchange(code, state) {\n window.history.replaceState('', \"\", this.redirectUri);\n const stateAndVerifier = this.storage.pop(AuthorizationCodeFlow.PKCE_AND_STATE_KEY);\n if (stateAndVerifier.state !== state) {\n throw new Error(\"State mismatch\");\n }\n const response = await fetch(this.tokenUri, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"code\", code],\n [\"grant_type\", \"authorization_code\"],\n [\"code_verifier\", stateAndVerifier.verifier],\n [\"state\", stateAndVerifier.state],\n [\"redirect_uri\", this.redirectUri]\n ])\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\"Error:\" + response.status + \": \" + text);\n }\n const token = await response.json();\n return new AuthorizationCodeFlowSession(this.clientId, token, this.tokenUri, this.logoutUri, this.redirectUri);\n }\n\n async ensureLoggedIn() {\n const url = new URL(window.location.href);\n const code = url.searchParams.get(\"code\");\n if (code) {\n //if callback from keycloak\n const state = url.searchParams.get(\"state\");\n return await this._tokenExchange(code, state);\n }\n //if not authorized\n await this._auth();\n return null;\n }\n}\nAuthorizationCodeFlow.PKCE_AND_STATE_KEY = \"state-and-verifier\";\n\nclass AuthorizationCodeFlowSession {\n static parseToken(token) {\n const [rawHeader, rawPayload, signature] = token.split(\".\");\n return {\n header: JSON.parse(atob(rawHeader)),\n payload: JSON.parse(atob(rawPayload)),\n signature: signature\n };\n } \n constructor(clientId, token, tokenUri, logoutUri, redirectUri) {\n this.clientId = clientId;\n this.token = token;\n this.tokenUri = tokenUri;\n this.logoutUri = logoutUri;\n this.redirectUri = redirectUri;\n this.accessToken = AuthorizationCodeFlowSession.parseToken(token.access_token);\n this.refreshToken = AuthorizationCodeFlowSession.parseToken(token.refresh_token);\n this.refreshCallback = null;\n }\n onRefresh(callback) {\n this.refreshCallback = callback;\n }\n async refresh() {\n const response = await fetch(this.tokenUri, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"grant_type\", \"refresh_token\"],\n [\"refresh_token\", this.token.refresh_token]\n ])\n });\n if (!response.ok) {\n throw new Error(\"Error:\" + response.code + \": \" + response.text());\n }\n const token = await response.json();\n this.token = token;\n this.accessToken = this._parseToken(token.access_token);\n this.refreshToken = this._parseToken(token.refresh_token);\n if (this.refreshCallback) {\n this.refreshCallback(this.token, this.accessToken, this.refreshToken);\n }\n }\n shouldBeRefreshed(gracePeriod) {\n const now = new Date().getTime();\n const refreshTokenExpiresAt = this.refreshToken.payload.exp * 1000;\n const expired = now > refreshTokenExpiresAt;\n const shouldRefresh = now - gracePeriod > refreshTokenExpiresAt;\n return !expired && shouldRefresh;\n }\n async refreshIf(gracePeriod) {\n if (!this.shouldBeRefreshed(gracePeriod)) {\n return;\n }\n await this.refresh();\n }\n logout() {\n const url = new URL(this.logoutUri);\n url.searchParams.set(\"post_logout_redirect_uri\", this.redirectUri);\n url.searchParams.set(\"id_token_hint\", this.token.id_token);\n window.location = url;\n }\n\n bearerToken() {\n return `Bearer ${this.token.access_token}`;\n }\n \n interceptor(gracePeriodBefore, gracePeriodAfter){\n return new AuthorizationCodeFlowInterceptor(this, gracePeriodBefore, gracePeriodAfter); \n }\n}\n\nclass AuthorizationCodeFlowInterceptor {\n constructor(session, gracePeriodBefore, gracePeriodAfter) {\n this.session = session;\n this.gracePeriodBefore = gracePeriodBefore || 2000;\n this.gracePeriodAfter = gracePeriodAfter || 30000;\n }\n async before(request) {\n await this.session.refreshIf(this.gracePeriodBefore);\n const headers = new Headers(request.options.headers);\n headers.set(\"Authorization\", this.session.bearerToken());\n return request;\n }\n async after(request, response) {\n await this.session.refreshIf(this.gracePeriodAfter);\n return response;\n }\n}\n\n\nexport {AuthorizationCodeFlow, AuthorizationCodeFlowSession, AuthorizationCodeFlowInterceptor };","\nconst timing = {\n sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n },\n DEBOUNCE_DEFAULT: 0,\n DEBOUNCE_IMMEDIATE: 1,\n debounce(timeoutMs, func, options) {\n let tid = null;\n let args = [];\n let previousTimestamp = 0;\n let opts = options || timing.DEBOUNCE_DEFAULT;\n\n const later = () => {\n const elapsed = new Date().getTime() - previousTimestamp;\n if (timeoutMs > elapsed) {\n tid = setTimeout(later, timeoutMs - elapsed);\n return;\n }\n tid = null;\n if (opts !== timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n // This check is needed because `func` can recursively invoke `debounced`.\n if (tid === null) {\n args = [];\n }\n };\n\n return function () {\n args = arguments;\n previousTimestamp = new Date().getTime();\n if (tid === null) {\n tid = setTimeout(later, timeoutMs);\n if (opts === timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n }\n };\n },\n THROTTLE_DEFAULT: 0,\n THROTTLE_NO_LEADING: 1,\n THROTTLE_NO_TRAILING: 2,\n throttle(timeoutMs, func, options) {\n let tid = null;\n let args = [];\n let previousTimestamp = 0;\n let opts = options || timing.THROTTLE_DEFAULT;\n\n const later = () => {\n previousTimestamp = (opts & timing.THROTTLE_NO_LEADING) ? 0 : new Date().getTime();\n tid = null;\n func(...args);\n if (tid === null) {\n args = [];\n }\n };\n\n return function () {\n const now = new Date().getTime();\n if (!previousTimestamp && (opts & timing.THROTTLE_NO_LEADING)) {\n previousTimestamp = now;\n }\n const remaining = timeoutMs - (now - previousTimestamp);\n args = arguments;\n if (remaining <= 0 || remaining > timeoutMs) {\n if (tid !== null) {\n clearTimeout(tid);\n tid = null;\n }\n previousTimestamp = now;\n func(...args);\n if (tid === null) {\n args = [];\n }\n } else if (tid === null && !(opts & timing.THROTTLE_NO_TRAILING)) {\n tid = setTimeout(later, remaining);\n }\n };\n\n }\n};\n\n\nexport { timing };","class Wizard {\n constructor(el) {\n this.el = el;\n this.progress = [...el.children].filter(e => e.matches(\"header,ol,ul\"));\n\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n if (current === undefined && children.length > 0) {\n children[0].classList.add('active');\n }\n });\n if (this.el.querySelector('section.current') === null) {\n const firstSection = this.el.querySelector('section:first-of-type');\n if (firstSection !== null) {\n firstSection.classList.add('current');\n }\n }\n }\n next() {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n current?.nextElementSibling?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection.classList.remove(\"current\");\n currentSection.nextElementSibling.classList.add('current');\n\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n\n }\n prev() {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n current?.previousElementSibling?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection.classList.remove(\"current\");\n currentSection.previousElementSibling.classList.add('current');\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n }\n moveTo = function (n) {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n p.children[+n]?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection?.classList.remove(\"current\");\n const nthSection = this.el.querySelector(`section:nth-child(${+n})`);\n nthSection.classList.add('current');\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n }\n}\n\n\n\n\nexport { Wizard };\n","class App {\n constructor() {\n this.configurers = [];\n this.initializers = [];\n this.handlers = [];\n this.running = false;\n document.addEventListener(\"DOMContentLoaded\", async () => {\n await Promise.all(this.configurers);\n await Promise.all(this.initializers.map(h => Promise.resolve(h())));\n await Promise.all(this.handlers.map(h => Promise.resolve(h())));\n });\n }\n configure(cb) {\n this.configurers.push(Promise.resolve(cb()));\n return this;\n }\n initialize(cb) {\n this.initializers.push(cb);\n return this;\n }\n ready(cb) {\n this.handlers.push(cb);\n return this;\n }\n}\n\nexport { App };\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ var ful=function(e){"use strict";function t(e,t,r,s,i){const o=e[t.dataset.bindMutator]||e[t.dataset.bindProvide];o?o(t,r,s,i):"radio"!==t.getAttribute("type")?"checkbox"!==t.getAttribute("type")?t.value=r:t.checked=r:t.checked=t.getAttribute("value")===r}class r{static encode(e,t){const s=t||r.URL_SAFE,i=e.byteLength,o=new Uint8Array(e);let n="";for(let e=0;e<i;e+=3){n+=s[o[e]>>2]+s[(3&o[e])<<4|o[e+1]>>4]+s[(15&o[e+1])<<2|o[e+2]>>6]+s[63&o[e+2]]}return i%3==2?n=n.substring(0,n.length-1):i%3==1&&(n=n.substring(0,n.length-2)),n}static decode(e,t){const s=t||r.URL_SAFE;let i=Math.floor(.75*e.length);for(let t=0;t!==e.length&&"="===e[e.length-t-1];++t)--i;const o=new Uint8Array(i);let n=0,a=0;for(;n<.75*e.length;){const t=s.indexOf(e.charAt(a++)),r=s.indexOf(e.charAt(a++)),i=s.indexOf(e.charAt(a++)),c=s.indexOf(e.charAt(a++));o[n++]=t<<2|r>>4,o[n++]=(15&r)<<4|i>>2,o[n++]=(3&i)<<6|c}return o.buffer}}r.STANDARD="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r.URL_SAFE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";class s{constructor(e,t,{globalErrorsEl:r,fieldContainerSelector:i,errorClass:o,hideClass:n}){this.el=e,this.bindings=t,this.globalErrorsEl=r,this.fieldContainerSelector=void 0!==i?i:s.DEFAULT_FIELD_CONTAINER_SELECTOR,this.errorClass=o||s.DEFAULT_ERROR_CLASS,this.hideClass=n||s.DEFAULT_HIDE_CLASS}setValues(e){return this.bindings.setValues(this.el,e)}getValues(){return this.bindings.getValues(this.el)}setErrors(e,t,r){if(this.clearErrors(),e.map(this.mapError?this.mapError:e=>e).filter((e=>"FIELD_ERROR"===e.type||"INVALID_FORMAT"===e.type)).forEach((e=>{const t=e.context.replace("[",".").replace("].",".");Array.from(this.el.querySelectorAll(`[name='${CSS.escape(t)}']`)).map((e=>this.fieldContainerSelector?e.closest(this.fieldContainerSelector):e)).filter((e=>null!==e)).forEach((t=>{t.classList.add(this.errorClass),t.dataset.error=e.reason}))})),this.globalErrorsEl){const t=e.filter((e=>"FIELD_ERROR"!==e.type&&"INVALID_FORMAT"!==e.type));this.globalErrorsEl.innerHTML=t.map((e=>e.reason)).join("\n"),0!==t.length&&this.globalErrorsEl.classList.remove(this.hideClass)}if(!t)return;const s=Array.from(this.el.querySelectorAll(".${CSS.escape(this.errorClass)}")).map((e=>e.getBoundingClientRect().y+window.scrollY)),i=Math.min(...s);i!==1/0&&window.scroll(window.scrollX,i>100?i-100:0)}clearErrors(){this.el.querySelectorAll(`.${CSS.escape(this.errorClass)}`).forEach((e=>e.classList.remove(this.errorClass))),this.globalErrorsEl&&(this.globalErrorsEl.innerHTML="",this.globalErrorsEl.classList.add(this.hideClass))}}s.DEFAULT_FIELD_CONTAINER_SELECTOR="label",s.DEFAULT_ERROR_CLASS="has-error",s.DEFAULT_HIDE_CLASS="d-none";class i{constructor(){const e=document.querySelector("meta[name='context']").getAttribute("content");this.context=e.endsWith("/")?e.substring(0,e.length-1):e}before(e){const t=e.resource.startsWith("/")?"":"/";e.resource=this.context+t+e.resource}}class o{constructor(){this.k=document.querySelector("meta[name='_csrf_header']").getAttribute("content"),this.v=document.querySelector("meta[name='_csrf']").getAttribute("content")}before(e){const t=new Headers(e.options.headers);t.set(this.k,this.v),e.options.headers=t}}class n{constructor(e){this.redirectUri=e}after(e,t){401===t.status&&(window.location.href=redirectUri)}}class a extends Error{static parseProblems(e,t){const r=[{type:"GENERIC_PROBLEM",context:null,reason:`${e}: ${t}`,details:null}];try{return t?JSON.parse(t):r}catch(e){return r}}static fromResponse(e,t){return new a(e,a.parseProblems(e,t))}constructor(e,t){super(JSON.stringify(t)),this.name=`Failure:${e}`,this.status=e,this.problems=t}}class c{constructor(){this.interceptors=[]}withContext(){return this.interceptors.push(new i),this}withCsrfToken(){return this.interceptors.push(new o),this}withRedirectOnUnauthorized(e){return this.interceptors.push(new n(e)),this}withInterceptors(...e){return this.interceptors.push(...e),this}build(){const e=this.interceptors;return new l({interceptors:e})}}class l{static builder(){return new c}constructor({interceptors:e}){this.interceptors=e||[]}async fetch(e,t){const r=this.interceptors.concat(t.interceptors||[]),s={resource:e,options:t};await r.forEach((async e=>{e.before&&await e.before(s)}));const i=await fetch(s.resource,s.options);return await r.forEach((async e=>{e.after&&await e.after(s,i)})),i}async json(e,t){try{const r=await this.fetch(e,t);if(!r.ok){const e=await r.text();throw a.fromResponse(r.status,e)}const s=await r.text();return s?JSON.parse(s):void 0}catch(e){if(e instanceof a)throw e;throw new a(0,[{type:"CONNECTION_PROBLEM",context:null,reason:e.message,details:null}])}}async form(e,t,r){const s=r||{};s.buttons?.forEach((e=>{e.setAttribute("disabled","disabled"),s.loader&&(e.dataset.oldContent=e.innerHTML,e.innerHTML=s.loader)}));try{const r=await this.json(e,t);return s.form?.clearErrors(),r}catch(e){throw s.form?.setErrors(e.problems),e}finally{s.buttons?.forEach((e=>{e.removeAttribute("disabled"),e.innerHTML=e.dataset.oldContent,delete e.dataset.oldContent}))}}}class h{constructor(e,t){this.prefix=e,this.storage=t}save(e,t){this.storage.setItem(`${this.prefix}-${e}`,JSON.stringify(t))}load(e){const t=this.storage.getItem(`${this.prefix}-${e}`);return void 0===t?void 0:JSON.parse(t)}remove(e){this.storage.removeItem(`${this.prefix}-${e}`)}pop(e){const t=this.load(e);return this.remove(e),t}}class u extends h{constructor(e){super(e,sessionStorage)}}class d{static forKeycloak(e,t,r){const s=new URL("protocol/openid-connect/auth",t),i=new URL("protocol/openid-connect/token",t),o=new URL("protocol/openid-connect/logout",t);return new d(e,"openid profile",s,i,o,r)}constructor(e,t,r,s,i,o){this.clientId=e,this.scope=t,this.authUri=r,this.tokenUri=s,this.logoutUri=i,this.redirectUri=o,this.storage=new u(e)}async _auth(){const e=r.encode(crypto.getRandomValues(new Uint8Array(32)).buffer),t=r.encode(await crypto.subtle.digest("SHA-256",(new TextEncoder).encode(e))),s=this.clientId+r.encode(crypto.getRandomValues(new Uint8Array(16)).buffer);this.storage.save(d.PKCE_AND_STATE_KEY,{state:s,verifier:e});const i=new URL(this.authUri);i.searchParams.set("client_id",this.clientId),i.searchParams.set("redirect_uri",this.redirectUri),i.searchParams.set("response_type","code"),i.searchParams.set("scope",this.scope),i.searchParams.set("state",s),i.searchParams.set("code_challenge",t),i.searchParams.set("code_challenge_method","S256"),window.location=i}async _tokenExchange(e,t){window.history.replaceState("","",this.redirectUri);const r=this.storage.pop(d.PKCE_AND_STATE_KEY);if(r.state!==t)throw new Error("State mismatch");const s=await fetch(this.tokenUri,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams([["client_id",this.clientId],["code",e],["grant_type","authorization_code"],["code_verifier",r.verifier],["state",r.state],["redirect_uri",this.redirectUri]])});if(!s.ok){const e=await s.text();throw new Error("Error:"+s.status+": "+e)}const i=await s.json();return new f(this.clientId,i,this.tokenUri,this.logoutUri,this.redirectUri)}async ensureLoggedIn(){const e=new URL(window.location.href),t=e.searchParams.get("code");if(t){const r=e.searchParams.get("state");return await this._tokenExchange(t,r)}return await this._auth(),null}}d.PKCE_AND_STATE_KEY="state-and-verifier";class f{static parseToken(e){const[t,r,s]=e.split(".");return{header:JSON.parse(atob(t)),payload:JSON.parse(atob(r)),signature:s}}constructor(e,t,r,s,i){this.clientId=e,this.token=t,this.tokenUri=r,this.logoutUri=s,this.redirectUri=i,this.accessToken=f.parseToken(t.access_token),this.refreshToken=f.parseToken(t.refresh_token),this.refreshCallback=null}onRefresh(e){this.refreshCallback=e}async refresh(){const e=await fetch(this.tokenUri,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams([["client_id",this.clientId],["grant_type","refresh_token"],["refresh_token",this.token.refresh_token]])});if(!e.ok)throw new Error("Error:"+e.code+": "+e.text());const t=await e.json();this.token=t,this.accessToken=this._parseToken(t.access_token),this.refreshToken=this._parseToken(t.refresh_token),this.refreshCallback&&this.refreshCallback(this.token,this.accessToken,this.refreshToken)}shouldBeRefreshed(e){const t=(new Date).getTime(),r=1e3*this.refreshToken.payload.exp;return!(t>r)&&t-e>r}async refreshIf(e){this.shouldBeRefreshed(e)&&await this.refresh()}logout(){const e=new URL(this.logoutUri);e.searchParams.set("post_logout_redirect_uri",this.redirectUri),e.searchParams.set("id_token_hint",this.token.id_token),window.location=e}bearerToken(){return`Bearer ${this.token.access_token}`}interceptor(e,t){return new p(this,e,t)}}class p{constructor(e,t,r){this.session=e,this.gracePeriodBefore=t||2e3,this.gracePeriodAfter=r||3e4}async before(e){await this.session.refreshIf(this.gracePeriodBefore);return new Headers(e.options.headers).set("Authorization",this.session.bearerToken()),e}async after(e,t){return await this.session.refreshIf(this.gracePeriodAfter),t}}const E={sleep:e=>new Promise((t=>setTimeout(t,e))),DEBOUNCE_DEFAULT:0,DEBOUNCE_IMMEDIATE:1,debounce(e,t,r){let s=null,i=[],o=0,n=r||E.DEBOUNCE_DEFAULT;const a=()=>{const r=(new Date).getTime()-o;e>r?s=setTimeout(a,e-r):(s=null,n!==E.DEBOUNCE_IMMEDIATE&&t(...i),null===s&&(i=[]))};return function(){i=arguments,o=(new Date).getTime(),null===s&&(s=setTimeout(a,e),n===E.DEBOUNCE_IMMEDIATE&&t(...i))}},THROTTLE_DEFAULT:0,THROTTLE_NO_LEADING:1,THROTTLE_NO_TRAILING:2,throttle(e,t,r){let s=null,i=[],o=0,n=r||E.THROTTLE_DEFAULT;const a=()=>{o=n&E.THROTTLE_NO_LEADING?0:(new Date).getTime(),s=null,t(...i),null===s&&(i=[])};return function(){const r=(new Date).getTime();!o&&n&E.THROTTLE_NO_LEADING&&(o=r);const c=e-(r-o);i=arguments,c<=0||c>e?(null!==s&&(clearTimeout(s),s=null),o=r,t(...i),null===s&&(i=[])):null!==s||n&E.THROTTLE_NO_TRAILING||(s=setTimeout(a,c))}}};return e.App=class{constructor(){this.configurers=[],this.initializers=[],this.handlers=[],this.running=!1,document.addEventListener("DOMContentLoaded",(async()=>{await Promise.all(this.configurers),await Promise.all(this.initializers.map((e=>Promise.resolve(e())))),await Promise.all(this.handlers.map((e=>Promise.resolve(e()))))}))}configure(e){return this.configurers.push(Promise.resolve(e())),this}initialize(e){return this.initializers.push(e),this}ready(e){return this.handlers.push(e),this}},e.AuthorizationCodeFlow=d,e.AuthorizationCodeFlowInterceptor=p,e.AuthorizationCodeFlowSession=f,e.Base64=r,e.Bindings=class{constructor({extractors:e,mutators:t,ignoredChildrenSelector:r,valueHoldersSelector:s}){this.extractors=e||{},this.mutators=t||{},this.valueHoldersSelector=s||"input[name], select[name], textarea[name]",this.ignoredChildrenSelector=r||".d-none"}setValues(e,r){for(let s in r)r.hasOwnProperty(s)&&Array.from(e.querySelectorAll(`[name='${CSS.escape(s)}']`)).forEach((e=>{t(this.mutators,e,r[s],s,r)}))}getValues(e){return Array.from(e.querySelectorAll(this.valueHoldersSelector)).filter((e=>"never"!==e.dataset.bindInclude&&("always"===e.dataset.bindInclude||null===e.closest(this.ignoredChildrenSelector)))).reduce(((e,t)=>function(e,t,r){const s=t.split(".").map((e=>e.match(/^[0-9]+$/)?+e:e));let i=e,o=null;for(let t=0;;++t){const n=s[t],a=s[t-1];if(Number.isInteger(n)&&!Array.isArray(i)&&(null!==o?o[a]=i=[]:e=i=[]),t===s.length-1)return i[n]=void 0!==r?r:n in i?i[n]:null,e;void 0===i[n]&&(i[n]={}),o=i,i=i[n]}}(e,t.getAttribute("name"),function(e,t){const r=e[t.dataset.bindExtractor]||e[t.dataset.bindProvide];if(r)return r(t);if("radio"===t.getAttribute("type")){if(!t.checked)return;return"boolean"===t.dataset.bindType?"true"===t.value:t.value}return"checkbox"===t.getAttribute("type")?t.checked:"boolean"===t.dataset.bindType?t.value?"true"===t.value:null:t.value||null}(this.extractors,t))),{})}},e.Failure=a,e.Form=s,e.Hex=class{static decode(e){if(e.length%2!=0)throw new Error("invalid length");const t=e.length/2;return new Uint8Array(t).map(((t,r)=>{const s=2*r,i=e.substring(s,s+2);return parseInt(i,16)}))}static encode(e,t){return Array.from(e).map((e=>e.toString(16))).map((e=>t?e.toUpperCase():e)).map((e=>e.padStart(2,0))).join("")}},e.HttpClient=l,e.LocalStorage=class extends h{constructor(e){super(e,localStorage)}},e.SessionStorage=u,e.VersionedStorage=class{constructor(e,t,r){this.storage=e,this.key=t,this.dataSupplier=r,this.cache=null}async load(e){const t=this.storage.load(this.key);if(t&&t.revision===e)return void(this.cache=t.value);const r=await this.dataSupplier(e,this.key);this.storage.save(this.key,{revision:e,value:r}),this.cache=r}data(){return this.cache}},e.Wizard=class{constructor(e){if(this.el=e,this.progress=[...e.children].filter((e=>e.matches("header,ol,ul"))),this.progress.forEach((e=>{const t=[...e.children];void 0===t.filter((e=>e.matches(".active")))[0]&&t.length>0&&t[0].classList.add("active")})),null===this.el.querySelector("section.current")){const e=this.el.querySelector("section:first-of-type");null!==e&&e.classList.add("current")}}next(){this.progress.forEach((e=>{const t=[...e.children].filter((e=>e.matches(".active")))[0];t?.classList.remove("active"),t?.nextElementSibling?.classList.add("active")}));const e=this.el.querySelector("section.current");e.classList.remove("current"),e.nextElementSibling.classList.add("current"),this.el.dispatchEvent(new CustomEvent("wizard:activate",{bubbles:!0,cancelable:!0}))}prev(){this.progress.forEach((e=>{const t=[...e.children].filter((e=>e.matches(".active")))[0];t?.classList.remove("active"),t?.previousElementSibling?.classList.add("active")}));const e=this.el.querySelector("section.current");e.classList.remove("current"),e.previousElementSibling.classList.add("current"),this.el.dispatchEvent(new CustomEvent("wizard:activate",{bubbles:!0,cancelable:!0}))}moveTo=function(e){this.progress.forEach((t=>{[...t.children].filter((e=>e.matches(".active")))[0]?.classList.remove("active"),t.children[+e]?.classList.add("active")}));this.el.querySelector("section.current")?.classList.remove("current");this.el.querySelector(`section:nth-child(${+e})`).classList.add("current"),this.el.dispatchEvent(new CustomEvent("wizard:activate",{bubbles:!0,cancelable:!0}))}},e.timing=E,Object.defineProperty(e,"__esModule",{value:!0}),e}({});
2
+ //# sourceMappingURL=ful.iife.min.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ful.iife.min.js","sources":["../src/bindings.mjs","../src/encodings.mjs","../src/forms.mjs","../src/http-client.mjs","../src/storage.mjs","../src/oauth-authorization-code.mjs","../src/timing.mjs","../src/app.mjs","../src/wizard.mjs"],"sourcesContent":["/* global CSS */\n\nfunction extract(extractors, el) {\n const maybeExtractor = extractors[el.dataset['bindExtractor']] || extractors[el.dataset['bindProvide']];\n if (maybeExtractor) {\n return maybeExtractor(el);\n }\n if (el.getAttribute('type') === 'radio') {\n if (!el.checked) {\n return undefined;\n }\n return el.dataset['bindType'] === 'boolean' ? el.value === 'true' : el.value;\n }\n if (el.getAttribute('type') === 'checkbox') {\n return el.checked;\n }\n if (el.dataset['bindType'] === 'boolean') {\n return !el.value ? null : el.value === 'true';\n }\n return el.value || null;\n}\n\nfunction mutate(mutators, el, raw, key, values) {\n const maybeMutator = mutators[el.dataset['bindMutator']] || mutators[el.dataset['bindProvide']];\n if (maybeMutator) {\n maybeMutator(el, raw, key, values);\n return;\n }\n if (el.getAttribute('type') === 'radio') {\n el.checked = el.getAttribute('value') === raw;\n return;\n }\n if (el.getAttribute('type') === 'checkbox') {\n el.checked = raw;\n return;\n }\n el.value = raw;\n}\n\n\nfunction providePath(result, path, value) {\n const keys = path.split(\".\").map((k) => k.match(/^[0-9]+$/) ? +k : k);\n let current = result;\n let previous = null;\n for (let i = 0; ; ++i) {\n const ckey = keys[i];\n const pkey = keys[i - 1];\n if (Number.isInteger(ckey) && !Array.isArray(current)) {\n if (previous !== null) {\n previous[pkey] = current = [];\n } else {\n result = current = [];\n }\n }\n if (i === keys.length - 1) {\n //when value is undefined we only want to define the property if it's not defined \n current[ckey] = value !== undefined ? value : (ckey in current ? current[ckey] : null);\n return result;\n }\n if (current[ckey] === undefined) {\n current[ckey] = {};\n }\n previous = current;\n current = current[ckey];\n }\n}\n\nclass Bindings {\n\n constructor( {extractors, mutators, ignoredChildrenSelector, valueHoldersSelector}) {\n this.extractors = extractors || {};\n this.mutators = mutators || {};\n this.valueHoldersSelector = valueHoldersSelector || 'input[name], select[name], textarea[name]';\n this.ignoredChildrenSelector = ignoredChildrenSelector || '.d-none';\n }\n setValues(el, values) {\n for (let k in values) {\n if (!values.hasOwnProperty(k)) {\n continue;\n }\n Array.from(el.querySelectorAll(`[name='${CSS.escape(k)}']`)).forEach((el) => {\n mutate(this.mutators, el, values[k], k, values);\n });\n }\n }\n getValues(el) {\n return Array.from(el.querySelectorAll(this.valueHoldersSelector))\n .filter((el) => {\n if (el.dataset['bindInclude'] === 'never') {\n return false;\n }\n return el.dataset['bindInclude'] === 'always' || el.closest(this.ignoredChildrenSelector) === null;\n })\n .reduce((result, el) => {\n return providePath(result, el.getAttribute('name'), extract(this.extractors, el));\n }, {});\n }\n}\n\n\n\nexport { Bindings };","\n\nclass Base64 {\n static encode(arrayBuffer, dialect) {\n const d = dialect || Base64.URL_SAFE;\n const len = arrayBuffer.byteLength;\n const view = new Uint8Array(arrayBuffer);\n let res = '';\n for (let i = 0; i < len; i += 3) {\n const v1 = d[view[i] >> 2];\n const v2 = d[((view[i] & 3) << 4) | (view[i + 1] >> 4)];\n const v3 = d[((view[i + 1] & 15) << 2) | (view[i + 2] >> 6)];\n const v4 = d[view[i + 2] & 63];\n res += v1 + v2 + v3 + v4;\n }\n if (len % 3 === 2) {\n res = res.substring(0, res.length - 1);\n } else if (len % 3 === 1) {\n res = res.substring(0, res.length - 2);\n }\n return res;\n }\n static decode(str, dialect) {\n const d = dialect || Base64.URL_SAFE;\n let nbytes = Math.floor(str.length * 0.75);\n for (let i = 0; i !== str.length; ++i) {\n if (str[str.length - i - 1] !== '=') {\n break;\n }\n --nbytes;\n }\n const view = new Uint8Array(nbytes);\n\n let vi = 0;\n let si = 0;\n while (vi < str.length * 0.75) {\n const v1 = d.indexOf(str.charAt(si++));\n const v2 = d.indexOf(str.charAt(si++));\n const v3 = d.indexOf(str.charAt(si++));\n const v4 = d.indexOf(str.charAt(si++));\n view[vi++] = (v1 << 2) | (v2 >> 4);\n view[vi++] = ((v2 & 15) << 4) | (v3 >> 2);\n view[vi++] = ((v3 & 3) << 6) | v4;\n }\n\n return view.buffer;\n }\n}\n\nBase64.STANDARD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nBase64.URL_SAFE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n\nclass Hex {\n static decode(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(\"invalid length\");\n }\n const lenInBytes = hex.length / 2;\n return new Uint8Array(lenInBytes).map((e, i) => {\n const offset = i * 2;\n const octet = hex.substring(offset, offset + 2);\n return parseInt(octet, 16);\n });\n }\n static encode(bytes, upper) {\n return Array.from(bytes)\n .map(b => b.toString(16))\n .map(b => upper ? b.toUpperCase() : b)\n .map(o => o.padStart(2, 0))\n .join('');\n }\n}\n\nexport { Base64, Hex };","/* global Infinity, CSS */\n\n\nclass Form {\n constructor(el, bindings, {globalErrorsEl, fieldContainerSelector, errorClass, hideClass}) {\n this.el = el;\n this.bindings = bindings;\n this.globalErrorsEl = globalErrorsEl;\n this.fieldContainerSelector = fieldContainerSelector !== undefined ? fieldContainerSelector : Form.DEFAULT_FIELD_CONTAINER_SELECTOR;\n this.errorClass = errorClass || Form.DEFAULT_ERROR_CLASS;\n this.hideClass = hideClass || Form.DEFAULT_HIDE_CLASS;\n }\n setValues(values) {\n return this.bindings.setValues(this.el, values);\n }\n getValues() {\n return this.bindings.getValues(this.el);\n }\n setErrors(errors, scrollFirstErrorIntoView, context) {\n\n this.clearErrors();\n errors\n .map(this.mapError ? this.mapError : (e) => e)\n .filter((e) => e.type === 'FIELD_ERROR' || e.type === 'INVALID_FORMAT')\n .forEach((e) => {\n const name = e.context.replace(\"[\", \".\").replace(\"].\", \".\");\n Array.from(this.el.querySelectorAll(`[name='${CSS.escape(name)}']`))\n .map(el => this.fieldContainerSelector ? el.closest(this.fieldContainerSelector) : el)\n .filter(el => el !== null)\n .forEach(label => {\n label.classList.add(this.errorClass);\n label.dataset['error'] = e.reason;\n });\n });\n if (this.globalErrorsEl) {\n const globalErrors = errors.filter((e) => e.type !== 'FIELD_ERROR' && e.type !== 'INVALID_FORMAT');\n this.globalErrorsEl.innerHTML = globalErrors.map(e => e.reason).join(\"\\n\");\n if (globalErrors.length !== 0) {\n this.globalErrorsEl.classList.remove(this.hideClass);\n }\n }\n if (!scrollFirstErrorIntoView) {\n return;\n }\n const yOffsets = Array.from(this.el.querySelectorAll('.${CSS.escape(this.errorClass)}'))\n .map((label) => label.getBoundingClientRect().y + window.scrollY);\n const firstErrorScrollY = Math.min(...yOffsets);\n if (firstErrorScrollY !== Infinity) {\n window.scroll(window.scrollX, firstErrorScrollY > 100 ? firstErrorScrollY - 100 : 0);\n }\n }\n clearErrors() {\n this.el.querySelectorAll(`.${CSS.escape(this.errorClass)}`).forEach(l => l.classList.remove(this.errorClass));\n if (this.globalErrorsEl) {\n this.globalErrorsEl.innerHTML = '';\n this.globalErrorsEl.classList.add(this.hideClass);\n }\n }\n}\n\nForm.DEFAULT_FIELD_CONTAINER_SELECTOR = 'label';\nForm.DEFAULT_ERROR_CLASS = 'has-error';\nForm.DEFAULT_HIDE_CLASS = 'd-none';\n\n\n/*\n export function forms() {\n }\n \n forms.dropContext = function (context) {\n return function (e) {\n if (e.context && e.context.indexOf(context) === 0) {\n e.context = e.context.substring(context.length);\n }\n return e;\n };\n };\n \n \n Dom.ready(() => {\n document.querySelectorAll('label:not([data-error])').forEach(el => {\n el.dataset['error'] = \"Il valore inserito non è valido\";\n });\n });\n \n Dom.ready(() => {\n Dom.on(document.body, 'change', '[data-pattern]', {}, evt => {\n const el = evt.srcElement;\n const pattern = el.dataset['pattern'];\n const matches = el.value.match(pattern);\n const label = el.closest('label');\n if(label === null){\n return;\n }\n label.classList[matches ? 'remove' : 'add']('has-error'); \n });\n });\n */\nexport { Form };","class ContextInterceptor {\n constructor() {\n const context = document.querySelector(\"meta[name='context']\").getAttribute(\"content\");\n this.context = context.endsWith(\"/\") ? context.substring(0, context.length - 1) : context;\n }\n before(request) {\n const separator = request.resource.startsWith(\"/\") ? \"\" : \"/\";\n request.resource = this.context + separator + request.resource;\n }\n}\n\nclass CsrfTokenInterceptor {\n constructor() {\n this.k = document.querySelector(\"meta[name='_csrf_header']\").getAttribute(\"content\");\n this.v = document.querySelector(\"meta[name='_csrf']\").getAttribute(\"content\");\n }\n before(request) {\n const headers = new Headers(request.options.headers);\n headers.set(this.k, this.v);\n request.options.headers = headers;\n }\n}\n\nclass RedirectOnUnauthorizedInterceptor {\n constructor(redirectUri) {\n this.redirectUri = redirectUri;\n }\n after(request, response) {\n if (response.status !== 401) {\n return;\n }\n window.location.href = redirectUri;\n }\n}\n\nclass Failure extends Error {\n static parseProblems(status, text) {\n const def = [{\n type: \"GENERIC_PROBLEM\",\n context: null,\n reason: `${status}: ${text}`,\n details: null\n }];\n try {\n return text ? JSON.parse(text) : def;\n } catch (e) {\n return def;\n }\n }\n static fromResponse(status, text) {\n return new Failure(status, Failure.parseProblems(status, text));\n }\n constructor(status, problems) {\n super(JSON.stringify(problems));\n this.name = `Failure:${status}`;\n this.status = status;\n this.problems = problems;\n }\n}\n\nclass HttpClientBuilder {\n constructor() {\n this.interceptors = [];\n }\n withContext() {\n this.interceptors.push(new ContextInterceptor());\n return this;\n }\n withCsrfToken() {\n this.interceptors.push(new CsrfTokenInterceptor());\n return this;\n }\n withRedirectOnUnauthorized(redirectUri) {\n this.interceptors.push(new RedirectOnUnauthorizedInterceptor(redirectUri));\n return this;\n }\n withInterceptors(...interceptors) {\n this.interceptors.push(...interceptors);\n return this;\n }\n build() {\n const interceptors = this.interceptors;\n return new HttpClient({interceptors});\n }\n}\n\nclass HttpClient {\n static builder() {\n return new HttpClientBuilder();\n }\n constructor( {interceptors}){\n this.interceptors = interceptors || [];\n }\n async fetch(resource, options) {\n const is = this.interceptors.concat(options.interceptors || []);\n const request = {resource, options};\n await is.forEach(async (i) => {\n if (!i.before) {\n return;\n }\n await i.before(request);\n });\n const response = await fetch(request.resource, request.options);\n await is.forEach(async (i) => {\n if (!i.after) {\n return;\n }\n await i.after(request, response);\n });\n\n return response;\n }\n async json(resource, options) {\n try {\n const response = await this.fetch(resource, options);\n if (!response.ok) {\n const message = await response.text();\n throw Failure.fromResponse(response.status, message);\n }\n const text = await response.text();\n return text ? JSON.parse(text) : undefined;\n } catch (e) {\n if (e instanceof Failure) {\n throw e;\n }\n throw new Failure(0, [{\n type: \"CONNECTION_PROBLEM\",\n context: null,\n reason: e.message,\n details: null\n }]);\n }\n }\n async form(resource, options, uiOptions) {\n const ui = uiOptions || {};\n ui.buttons?.forEach(el => {\n el.setAttribute(\"disabled\", \"disabled\");\n if (ui.loader) {\n el.dataset['oldContent'] = el.innerHTML;\n el.innerHTML = ui.loader;\n }\n });\n try {\n const r = await this.json(resource, options);\n ui.form?.clearErrors();\n return r;\n } catch (e) {\n ui.form?.setErrors(e.problems);\n throw e;\n } finally {\n ui.buttons?.forEach(el => {\n el.removeAttribute(\"disabled\");\n el.innerHTML = el.dataset['oldContent'];\n delete el.dataset['oldContent'];\n });\n }\n }\n}\n\n\n\nexport { HttpClient, Failure };\n","\nclass Storage {\n constructor(prefix, storage) {\n this.prefix = prefix;\n this.storage = storage;\n }\n save(k, v) {\n this.storage.setItem(`${this.prefix}-${k}`, JSON.stringify(v));\n }\n load(k) {\n const got = this.storage.getItem(`${this.prefix}-${k}`);\n return got === undefined ? undefined : JSON.parse(got);\n }\n remove(k) {\n this.storage.removeItem(`${this.prefix}-${k}`);\n }\n pop(k) {\n const decoded = this.load(k);\n this.remove(k);\n return decoded;\n }\n}\n\nclass LocalStorage extends Storage {\n constructor(prefix) {\n super(prefix, localStorage);\n }\n}\n\nclass SessionStorage extends Storage {\n constructor(prefix) {\n super(prefix, sessionStorage);\n }\n}\n\nclass VersionedStorage {\n constructor(storage, key, dataSupplier){\n this.storage = storage;\n this.key = key;\n this.dataSupplier = dataSupplier;\n this.cache = null;\n \n }\n async load(revision){\n const saved = this.storage.load(this.key);\n if (!!saved && saved.revision === revision) {\n this.cache = saved.value;\n return;\n }\n const freshData = await this.dataSupplier(revision, this.key);\n this.storage.save(this.key, {\n revision: revision,\n value: freshData\n });\n this.cache = freshData;\n }\n data(){\n return this.cache;\n }\n}\n\n\n\nexport {LocalStorage, SessionStorage, VersionedStorage};","import { Base64 } from \"./encodings.mjs\";\nimport { SessionStorage } from \"./storage.mjs\";\n\n\nclass AuthorizationCodeFlow {\n static forKeycloak(clientId, realmBaseUrl, redirectUri){\n const authUri = new URL(\"protocol/openid-connect/auth\", realmBaseUrl);\n const tokenUri = new URL(\"protocol/openid-connect/token\", realmBaseUrl);\n const logoutUri = new URL(\"protocol/openid-connect/logout\", realmBaseUrl);\n const scope = \"openid profile\";\n return new AuthorizationCodeFlow(clientId, scope, authUri, tokenUri, logoutUri, redirectUri); \n }\n constructor(clientId, scope, authUri, tokenUri, logoutUri, redirectUri) {\n this.clientId = clientId;\n this.scope = scope;\n this.authUri = authUri;\n this.tokenUri = tokenUri;\n this.logoutUri = logoutUri;\n this.redirectUri = redirectUri;\n this.storage = new SessionStorage(clientId);\n }\n async _auth() {\n const pkceVerifier = Base64.encode(crypto.getRandomValues(new Uint8Array(32)).buffer);\n const pkceChallenge = Base64.encode(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(pkceVerifier)));\n const state = this.clientId + Base64.encode(crypto.getRandomValues(new Uint8Array(16)).buffer);\n this.storage.save(AuthorizationCodeFlow.PKCE_AND_STATE_KEY, {\n state: state,\n verifier: pkceVerifier\n });\n const url = new URL(this.authUri);\n url.searchParams.set(\"client_id\", this.clientId);\n url.searchParams.set(\"redirect_uri\", this.redirectUri);\n url.searchParams.set(\"response_type\", 'code');\n url.searchParams.set(\"scope\", this.scope);\n url.searchParams.set(\"state\", state);\n url.searchParams.set(\"code_challenge\", pkceChallenge);\n url.searchParams.set(\"code_challenge_method\", 'S256');\n window.location = url;\n }\n async _tokenExchange(code, state) {\n window.history.replaceState('', \"\", this.redirectUri);\n const stateAndVerifier = this.storage.pop(AuthorizationCodeFlow.PKCE_AND_STATE_KEY);\n if (stateAndVerifier.state !== state) {\n throw new Error(\"State mismatch\");\n }\n const response = await fetch(this.tokenUri, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"code\", code],\n [\"grant_type\", \"authorization_code\"],\n [\"code_verifier\", stateAndVerifier.verifier],\n [\"state\", stateAndVerifier.state],\n [\"redirect_uri\", this.redirectUri]\n ])\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\"Error:\" + response.status + \": \" + text);\n }\n const token = await response.json();\n return new AuthorizationCodeFlowSession(this.clientId, token, this.tokenUri, this.logoutUri, this.redirectUri);\n }\n\n async ensureLoggedIn() {\n const url = new URL(window.location.href);\n const code = url.searchParams.get(\"code\");\n if (code) {\n //if callback from keycloak\n const state = url.searchParams.get(\"state\");\n return await this._tokenExchange(code, state);\n }\n //if not authorized\n await this._auth();\n return null;\n }\n}\nAuthorizationCodeFlow.PKCE_AND_STATE_KEY = \"state-and-verifier\";\n\nclass AuthorizationCodeFlowSession {\n static parseToken(token) {\n const [rawHeader, rawPayload, signature] = token.split(\".\");\n return {\n header: JSON.parse(atob(rawHeader)),\n payload: JSON.parse(atob(rawPayload)),\n signature: signature\n };\n } \n constructor(clientId, token, tokenUri, logoutUri, redirectUri) {\n this.clientId = clientId;\n this.token = token;\n this.tokenUri = tokenUri;\n this.logoutUri = logoutUri;\n this.redirectUri = redirectUri;\n this.accessToken = AuthorizationCodeFlowSession.parseToken(token.access_token);\n this.refreshToken = AuthorizationCodeFlowSession.parseToken(token.refresh_token);\n this.refreshCallback = null;\n }\n onRefresh(callback) {\n this.refreshCallback = callback;\n }\n async refresh() {\n const response = await fetch(this.tokenUri, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"grant_type\", \"refresh_token\"],\n [\"refresh_token\", this.token.refresh_token]\n ])\n });\n if (!response.ok) {\n throw new Error(\"Error:\" + response.code + \": \" + response.text());\n }\n const token = await response.json();\n this.token = token;\n this.accessToken = this._parseToken(token.access_token);\n this.refreshToken = this._parseToken(token.refresh_token);\n if (this.refreshCallback) {\n this.refreshCallback(this.token, this.accessToken, this.refreshToken);\n }\n }\n shouldBeRefreshed(gracePeriod) {\n const now = new Date().getTime();\n const refreshTokenExpiresAt = this.refreshToken.payload.exp * 1000;\n const expired = now > refreshTokenExpiresAt;\n const shouldRefresh = now - gracePeriod > refreshTokenExpiresAt;\n return !expired && shouldRefresh;\n }\n async refreshIf(gracePeriod) {\n if (!this.shouldBeRefreshed(gracePeriod)) {\n return;\n }\n await this.refresh();\n }\n logout() {\n const url = new URL(this.logoutUri);\n url.searchParams.set(\"post_logout_redirect_uri\", this.redirectUri);\n url.searchParams.set(\"id_token_hint\", this.token.id_token);\n window.location = url;\n }\n\n bearerToken() {\n return `Bearer ${this.token.access_token}`;\n }\n \n interceptor(gracePeriodBefore, gracePeriodAfter){\n return new AuthorizationCodeFlowInterceptor(this, gracePeriodBefore, gracePeriodAfter); \n }\n}\n\nclass AuthorizationCodeFlowInterceptor {\n constructor(session, gracePeriodBefore, gracePeriodAfter) {\n this.session = session;\n this.gracePeriodBefore = gracePeriodBefore || 2000;\n this.gracePeriodAfter = gracePeriodAfter || 30000;\n }\n async before(request) {\n await this.session.refreshIf(this.gracePeriodBefore);\n const headers = new Headers(request.options.headers);\n headers.set(\"Authorization\", this.session.bearerToken());\n return request;\n }\n async after(request, response) {\n await this.session.refreshIf(this.gracePeriodAfter);\n return response;\n }\n}\n\n\nexport {AuthorizationCodeFlow, AuthorizationCodeFlowSession, AuthorizationCodeFlowInterceptor };","\nconst timing = {\n sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n },\n DEBOUNCE_DEFAULT: 0,\n DEBOUNCE_IMMEDIATE: 1,\n debounce(timeoutMs, func, options) {\n let tid = null;\n let args = [];\n let previousTimestamp = 0;\n let opts = options || timing.DEBOUNCE_DEFAULT;\n\n const later = () => {\n const elapsed = new Date().getTime() - previousTimestamp;\n if (timeoutMs > elapsed) {\n tid = setTimeout(later, timeoutMs - elapsed);\n return;\n }\n tid = null;\n if (opts !== timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n // This check is needed because `func` can recursively invoke `debounced`.\n if (tid === null) {\n args = [];\n }\n };\n\n return function () {\n args = arguments;\n previousTimestamp = new Date().getTime();\n if (tid === null) {\n tid = setTimeout(later, timeoutMs);\n if (opts === timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n }\n };\n },\n THROTTLE_DEFAULT: 0,\n THROTTLE_NO_LEADING: 1,\n THROTTLE_NO_TRAILING: 2,\n throttle(timeoutMs, func, options) {\n let tid = null;\n let args = [];\n let previousTimestamp = 0;\n let opts = options || timing.THROTTLE_DEFAULT;\n\n const later = () => {\n previousTimestamp = (opts & timing.THROTTLE_NO_LEADING) ? 0 : new Date().getTime();\n tid = null;\n func(...args);\n if (tid === null) {\n args = [];\n }\n };\n\n return function () {\n const now = new Date().getTime();\n if (!previousTimestamp && (opts & timing.THROTTLE_NO_LEADING)) {\n previousTimestamp = now;\n }\n const remaining = timeoutMs - (now - previousTimestamp);\n args = arguments;\n if (remaining <= 0 || remaining > timeoutMs) {\n if (tid !== null) {\n clearTimeout(tid);\n tid = null;\n }\n previousTimestamp = now;\n func(...args);\n if (tid === null) {\n args = [];\n }\n } else if (tid === null && !(opts & timing.THROTTLE_NO_TRAILING)) {\n tid = setTimeout(later, remaining);\n }\n };\n\n }\n};\n\n\nexport { timing };","class App {\n constructor() {\n this.configurers = [];\n this.initializers = [];\n this.handlers = [];\n this.running = false;\n document.addEventListener(\"DOMContentLoaded\", async () => {\n await Promise.all(this.configurers);\n await Promise.all(this.initializers.map(h => Promise.resolve(h())));\n await Promise.all(this.handlers.map(h => Promise.resolve(h())));\n });\n }\n configure(cb) {\n this.configurers.push(Promise.resolve(cb()));\n return this;\n }\n initialize(cb) {\n this.initializers.push(cb);\n return this;\n }\n ready(cb) {\n this.handlers.push(cb);\n return this;\n }\n}\n\nexport { App };\n","class Wizard {\n constructor(el) {\n this.el = el;\n this.progress = [...el.children].filter(e => e.matches(\"header,ol,ul\"));\n\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n if (current === undefined && children.length > 0) {\n children[0].classList.add('active');\n }\n });\n if (this.el.querySelector('section.current') === null) {\n const firstSection = this.el.querySelector('section:first-of-type');\n if (firstSection !== null) {\n firstSection.classList.add('current');\n }\n }\n }\n next() {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n current?.nextElementSibling?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection.classList.remove(\"current\");\n currentSection.nextElementSibling.classList.add('current');\n\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n\n }\n prev() {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n current?.previousElementSibling?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection.classList.remove(\"current\");\n currentSection.previousElementSibling.classList.add('current');\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n }\n moveTo = function (n) {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n p.children[+n]?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection?.classList.remove(\"current\");\n const nthSection = this.el.querySelector(`section:nth-child(${+n})`);\n nthSection.classList.add('current');\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n }\n}\n\n\n\n\nexport { Wizard };\n"],"names":["mutate","mutators","el","raw","key","values","maybeMutator","dataset","getAttribute","value","checked","Base64","static","arrayBuffer","dialect","d","URL_SAFE","len","byteLength","view","Uint8Array","res","i","substring","length","str","nbytes","Math","floor","vi","si","v1","indexOf","charAt","v2","v3","v4","buffer","STANDARD","Form","constructor","bindings","globalErrorsEl","fieldContainerSelector","errorClass","hideClass","this","undefined","DEFAULT_FIELD_CONTAINER_SELECTOR","DEFAULT_ERROR_CLASS","DEFAULT_HIDE_CLASS","setValues","getValues","setErrors","errors","scrollFirstErrorIntoView","context","clearErrors","map","mapError","e","filter","type","forEach","name","replace","Array","from","querySelectorAll","CSS","escape","closest","label","classList","add","reason","globalErrors","innerHTML","join","remove","yOffsets","getBoundingClientRect","y","window","scrollY","firstErrorScrollY","min","Infinity","scroll","scrollX","l","ContextInterceptor","document","querySelector","endsWith","before","request","separator","resource","startsWith","CsrfTokenInterceptor","k","v","headers","Headers","options","set","RedirectOnUnauthorizedInterceptor","redirectUri","after","response","status","location","href","Failure","Error","text","def","details","JSON","parse","parseProblems","problems","super","stringify","HttpClientBuilder","interceptors","withContext","push","withCsrfToken","withRedirectOnUnauthorized","withInterceptors","build","HttpClient","async","is","concat","fetch","ok","message","fromResponse","uiOptions","ui","buttons","setAttribute","loader","r","json","form","removeAttribute","Storage","prefix","storage","save","setItem","load","got","getItem","removeItem","pop","decoded","SessionStorage","sessionStorage","AuthorizationCodeFlow","clientId","realmBaseUrl","authUri","URL","tokenUri","logoutUri","scope","pkceVerifier","encode","crypto","getRandomValues","pkceChallenge","subtle","digest","TextEncoder","state","PKCE_AND_STATE_KEY","verifier","url","searchParams","code","history","replaceState","stateAndVerifier","method","body","URLSearchParams","token","AuthorizationCodeFlowSession","get","_tokenExchange","_auth","rawHeader","rawPayload","signature","split","header","atob","payload","accessToken","parseToken","access_token","refreshToken","refresh_token","refreshCallback","onRefresh","callback","_parseToken","shouldBeRefreshed","gracePeriod","now","Date","getTime","refreshTokenExpiresAt","exp","refresh","logout","id_token","bearerToken","interceptor","gracePeriodBefore","gracePeriodAfter","AuthorizationCodeFlowInterceptor","session","refreshIf","timing","sleep","ms","Promise","resolve","setTimeout","DEBOUNCE_DEFAULT","DEBOUNCE_IMMEDIATE","debounce","timeoutMs","func","tid","args","previousTimestamp","opts","later","elapsed","arguments","THROTTLE_DEFAULT","THROTTLE_NO_LEADING","THROTTLE_NO_TRAILING","throttle","remaining","clearTimeout","configurers","initializers","handlers","running","addEventListener","all","h","configure","cb","initialize","ready","extractors","ignoredChildrenSelector","valueHoldersSelector","hasOwnProperty","reduce","result","path","keys","match","current","previous","ckey","pkey","Number","isInteger","isArray","providePath","maybeExtractor","extract","hex","lenInBytes","offset","octet","parseInt","bytes","upper","b","toString","toUpperCase","o","padStart","localStorage","dataSupplier","cache","revision","saved","freshData","data","progress","children","matches","p","firstSection","next","nextElementSibling","currentSection","dispatchEvent","CustomEvent","bubbles","cancelable","prev","previousElementSibling","moveTo","n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ function e(e,t,r,s,i){const o=e[t.dataset.bindMutator]||e[t.dataset.bindProvide];o?o(t,r,s,i):"radio"!==t.getAttribute("type")?"checkbox"!==t.getAttribute("type")?t.value=r:t.checked=r:t.checked=t.getAttribute("value")===r}class t{constructor({extractors:e,mutators:t,ignoredChildrenSelector:r,valueHoldersSelector:s}){this.extractors=e||{},this.mutators=t||{},this.valueHoldersSelector=s||"input[name], select[name], textarea[name]",this.ignoredChildrenSelector=r||".d-none"}setValues(t,r){for(let s in r)r.hasOwnProperty(s)&&Array.from(t.querySelectorAll(`[name='${CSS.escape(s)}']`)).forEach((t=>{e(this.mutators,t,r[s],s,r)}))}getValues(e){return Array.from(e.querySelectorAll(this.valueHoldersSelector)).filter((e=>"never"!==e.dataset.bindInclude&&("always"===e.dataset.bindInclude||null===e.closest(this.ignoredChildrenSelector)))).reduce(((e,t)=>function(e,t,r){const s=t.split(".").map((e=>e.match(/^[0-9]+$/)?+e:e));let i=e,o=null;for(let t=0;;++t){const n=s[t],a=s[t-1];if(Number.isInteger(n)&&!Array.isArray(i)&&(null!==o?o[a]=i=[]:e=i=[]),t===s.length-1)return i[n]=void 0!==r?r:n in i?i[n]:null,e;void 0===i[n]&&(i[n]={}),o=i,i=i[n]}}(e,t.getAttribute("name"),function(e,t){const r=e[t.dataset.bindExtractor]||e[t.dataset.bindProvide];if(r)return r(t);if("radio"===t.getAttribute("type")){if(!t.checked)return;return"boolean"===t.dataset.bindType?"true"===t.value:t.value}return"checkbox"===t.getAttribute("type")?t.checked:"boolean"===t.dataset.bindType?t.value?"true"===t.value:null:t.value||null}(this.extractors,t))),{})}}class r{static encode(e,t){const s=t||r.URL_SAFE,i=e.byteLength,o=new Uint8Array(e);let n="";for(let e=0;e<i;e+=3){n+=s[o[e]>>2]+s[(3&o[e])<<4|o[e+1]>>4]+s[(15&o[e+1])<<2|o[e+2]>>6]+s[63&o[e+2]]}return i%3==2?n=n.substring(0,n.length-1):i%3==1&&(n=n.substring(0,n.length-2)),n}static decode(e,t){const s=t||r.URL_SAFE;let i=Math.floor(.75*e.length);for(let t=0;t!==e.length&&"="===e[e.length-t-1];++t)--i;const o=new Uint8Array(i);let n=0,a=0;for(;n<.75*e.length;){const t=s.indexOf(e.charAt(a++)),r=s.indexOf(e.charAt(a++)),i=s.indexOf(e.charAt(a++)),c=s.indexOf(e.charAt(a++));o[n++]=t<<2|r>>4,o[n++]=(15&r)<<4|i>>2,o[n++]=(3&i)<<6|c}return o.buffer}}r.STANDARD="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",r.URL_SAFE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";class s{static decode(e){if(e.length%2!=0)throw new Error("invalid length");const t=e.length/2;return new Uint8Array(t).map(((t,r)=>{const s=2*r,i=e.substring(s,s+2);return parseInt(i,16)}))}static encode(e,t){return Array.from(e).map((e=>e.toString(16))).map((e=>t?e.toUpperCase():e)).map((e=>e.padStart(2,0))).join("")}}class i{constructor(e,t,{globalErrorsEl:r,fieldContainerSelector:s,errorClass:o,hideClass:n}){this.el=e,this.bindings=t,this.globalErrorsEl=r,this.fieldContainerSelector=void 0!==s?s:i.DEFAULT_FIELD_CONTAINER_SELECTOR,this.errorClass=o||i.DEFAULT_ERROR_CLASS,this.hideClass=n||i.DEFAULT_HIDE_CLASS}setValues(e){return this.bindings.setValues(this.el,e)}getValues(){return this.bindings.getValues(this.el)}setErrors(e,t,r){if(this.clearErrors(),e.map(this.mapError?this.mapError:e=>e).filter((e=>"FIELD_ERROR"===e.type||"INVALID_FORMAT"===e.type)).forEach((e=>{const t=e.context.replace("[",".").replace("].",".");Array.from(this.el.querySelectorAll(`[name='${CSS.escape(t)}']`)).map((e=>this.fieldContainerSelector?e.closest(this.fieldContainerSelector):e)).filter((e=>null!==e)).forEach((t=>{t.classList.add(this.errorClass),t.dataset.error=e.reason}))})),this.globalErrorsEl){const t=e.filter((e=>"FIELD_ERROR"!==e.type&&"INVALID_FORMAT"!==e.type));this.globalErrorsEl.innerHTML=t.map((e=>e.reason)).join("\n"),0!==t.length&&this.globalErrorsEl.classList.remove(this.hideClass)}if(!t)return;const s=Array.from(this.el.querySelectorAll(".${CSS.escape(this.errorClass)}")).map((e=>e.getBoundingClientRect().y+window.scrollY)),i=Math.min(...s);i!==1/0&&window.scroll(window.scrollX,i>100?i-100:0)}clearErrors(){this.el.querySelectorAll(`.${CSS.escape(this.errorClass)}`).forEach((e=>e.classList.remove(this.errorClass))),this.globalErrorsEl&&(this.globalErrorsEl.innerHTML="",this.globalErrorsEl.classList.add(this.hideClass))}}i.DEFAULT_FIELD_CONTAINER_SELECTOR="label",i.DEFAULT_ERROR_CLASS="has-error",i.DEFAULT_HIDE_CLASS="d-none";class o{constructor(){const e=document.querySelector("meta[name='context']").getAttribute("content");this.context=e.endsWith("/")?e.substring(0,e.length-1):e}before(e){const t=e.resource.startsWith("/")?"":"/";e.resource=this.context+t+e.resource}}class n{constructor(){this.k=document.querySelector("meta[name='_csrf_header']").getAttribute("content"),this.v=document.querySelector("meta[name='_csrf']").getAttribute("content")}before(e){const t=new Headers(e.options.headers);t.set(this.k,this.v),e.options.headers=t}}class a{constructor(e){this.redirectUri=e}after(e,t){401===t.status&&(window.location.href=redirectUri)}}class c extends Error{static parseProblems(e,t){const r=[{type:"GENERIC_PROBLEM",context:null,reason:`${e}: ${t}`,details:null}];try{return t?JSON.parse(t):r}catch(e){return r}}static fromResponse(e,t){return new c(e,c.parseProblems(e,t))}constructor(e,t){super(JSON.stringify(t)),this.name=`Failure:${e}`,this.status=e,this.problems=t}}class l{constructor(){this.interceptors=[]}withContext(){return this.interceptors.push(new o),this}withCsrfToken(){return this.interceptors.push(new n),this}withRedirectOnUnauthorized(e){return this.interceptors.push(new a(e)),this}withInterceptors(...e){return this.interceptors.push(...e),this}build(){const e=this.interceptors;return new h({interceptors:e})}}class h{static builder(){return new l}constructor({interceptors:e}){this.interceptors=e||[]}async fetch(e,t){const r=this.interceptors.concat(t.interceptors||[]),s={resource:e,options:t};await r.forEach((async e=>{e.before&&await e.before(s)}));const i=await fetch(s.resource,s.options);return await r.forEach((async e=>{e.after&&await e.after(s,i)})),i}async json(e,t){try{const r=await this.fetch(e,t);if(!r.ok){const e=await r.text();throw c.fromResponse(r.status,e)}const s=await r.text();return s?JSON.parse(s):void 0}catch(e){if(e instanceof c)throw e;throw new c(0,[{type:"CONNECTION_PROBLEM",context:null,reason:e.message,details:null}])}}async form(e,t,r){const s=r||{};s.buttons?.forEach((e=>{e.setAttribute("disabled","disabled"),s.loader&&(e.dataset.oldContent=e.innerHTML,e.innerHTML=s.loader)}));try{const r=await this.json(e,t);return s.form?.clearErrors(),r}catch(e){throw s.form?.setErrors(e.problems),e}finally{s.buttons?.forEach((e=>{e.removeAttribute("disabled"),e.innerHTML=e.dataset.oldContent,delete e.dataset.oldContent}))}}}class u{constructor(e,t){this.prefix=e,this.storage=t}save(e,t){this.storage.setItem(`${this.prefix}-${e}`,JSON.stringify(t))}load(e){const t=this.storage.getItem(`${this.prefix}-${e}`);return void 0===t?void 0:JSON.parse(t)}remove(e){this.storage.removeItem(`${this.prefix}-${e}`)}pop(e){const t=this.load(e);return this.remove(e),t}}class d extends u{constructor(e){super(e,localStorage)}}class f extends u{constructor(e){super(e,sessionStorage)}}class p{constructor(e,t,r){this.storage=e,this.key=t,this.dataSupplier=r,this.cache=null}async load(e){const t=this.storage.load(this.key);if(t&&t.revision===e)return void(this.cache=t.value);const r=await this.dataSupplier(e,this.key);this.storage.save(this.key,{revision:e,value:r}),this.cache=r}data(){return this.cache}}class E{static forKeycloak(e,t,r){const s=new URL("protocol/openid-connect/auth",t),i=new URL("protocol/openid-connect/token",t),o=new URL("protocol/openid-connect/logout",t);return new E(e,"openid profile",s,i,o,r)}constructor(e,t,r,s,i,o){this.clientId=e,this.scope=t,this.authUri=r,this.tokenUri=s,this.logoutUri=i,this.redirectUri=o,this.storage=new f(e)}async _auth(){const e=r.encode(crypto.getRandomValues(new Uint8Array(32)).buffer),t=r.encode(await crypto.subtle.digest("SHA-256",(new TextEncoder).encode(e))),s=this.clientId+r.encode(crypto.getRandomValues(new Uint8Array(16)).buffer);this.storage.save(E.PKCE_AND_STATE_KEY,{state:s,verifier:e});const i=new URL(this.authUri);i.searchParams.set("client_id",this.clientId),i.searchParams.set("redirect_uri",this.redirectUri),i.searchParams.set("response_type","code"),i.searchParams.set("scope",this.scope),i.searchParams.set("state",s),i.searchParams.set("code_challenge",t),i.searchParams.set("code_challenge_method","S256"),window.location=i}async _tokenExchange(e,t){window.history.replaceState("","",this.redirectUri);const r=this.storage.pop(E.PKCE_AND_STATE_KEY);if(r.state!==t)throw new Error("State mismatch");const s=await fetch(this.tokenUri,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams([["client_id",this.clientId],["code",e],["grant_type","authorization_code"],["code_verifier",r.verifier],["state",r.state],["redirect_uri",this.redirectUri]])});if(!s.ok){const e=await s.text();throw new Error("Error:"+s.status+": "+e)}const i=await s.json();return new m(this.clientId,i,this.tokenUri,this.logoutUri,this.redirectUri)}async ensureLoggedIn(){const e=new URL(window.location.href),t=e.searchParams.get("code");if(t){const r=e.searchParams.get("state");return await this._tokenExchange(t,r)}return await this._auth(),null}}E.PKCE_AND_STATE_KEY="state-and-verifier";class m{static parseToken(e){const[t,r,s]=e.split(".");return{header:JSON.parse(atob(t)),payload:JSON.parse(atob(r)),signature:s}}constructor(e,t,r,s,i){this.clientId=e,this.token=t,this.tokenUri=r,this.logoutUri=s,this.redirectUri=i,this.accessToken=m.parseToken(t.access_token),this.refreshToken=m.parseToken(t.refresh_token),this.refreshCallback=null}onRefresh(e){this.refreshCallback=e}async refresh(){const e=await fetch(this.tokenUri,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams([["client_id",this.clientId],["grant_type","refresh_token"],["refresh_token",this.token.refresh_token]])});if(!e.ok)throw new Error("Error:"+e.code+": "+e.text());const t=await e.json();this.token=t,this.accessToken=this._parseToken(t.access_token),this.refreshToken=this._parseToken(t.refresh_token),this.refreshCallback&&this.refreshCallback(this.token,this.accessToken,this.refreshToken)}shouldBeRefreshed(e){const t=(new Date).getTime(),r=1e3*this.refreshToken.payload.exp;return!(t>r)&&t-e>r}async refreshIf(e){this.shouldBeRefreshed(e)&&await this.refresh()}logout(){const e=new URL(this.logoutUri);e.searchParams.set("post_logout_redirect_uri",this.redirectUri),e.searchParams.set("id_token_hint",this.token.id_token),window.location=e}bearerToken(){return`Bearer ${this.token.access_token}`}interceptor(e,t){return new g(this,e,t)}}class g{constructor(e,t,r){this.session=e,this.gracePeriodBefore=t||2e3,this.gracePeriodAfter=r||3e4}async before(e){await this.session.refreshIf(this.gracePeriodBefore);return new Headers(e.options.headers).set("Authorization",this.session.bearerToken()),e}async after(e,t){return await this.session.refreshIf(this.gracePeriodAfter),t}}const w={sleep:e=>new Promise((t=>setTimeout(t,e))),DEBOUNCE_DEFAULT:0,DEBOUNCE_IMMEDIATE:1,debounce(e,t,r){let s=null,i=[],o=0,n=r||w.DEBOUNCE_DEFAULT;const a=()=>{const r=(new Date).getTime()-o;e>r?s=setTimeout(a,e-r):(s=null,n!==w.DEBOUNCE_IMMEDIATE&&t(...i),null===s&&(i=[]))};return function(){i=arguments,o=(new Date).getTime(),null===s&&(s=setTimeout(a,e),n===w.DEBOUNCE_IMMEDIATE&&t(...i))}},THROTTLE_DEFAULT:0,THROTTLE_NO_LEADING:1,THROTTLE_NO_TRAILING:2,throttle(e,t,r){let s=null,i=[],o=0,n=r||w.THROTTLE_DEFAULT;const a=()=>{o=n&w.THROTTLE_NO_LEADING?0:(new Date).getTime(),s=null,t(...i),null===s&&(i=[])};return function(){const r=(new Date).getTime();!o&&n&w.THROTTLE_NO_LEADING&&(o=r);const c=e-(r-o);i=arguments,c<=0||c>e?(null!==s&&(clearTimeout(s),s=null),o=r,t(...i),null===s&&(i=[])):null!==s||n&w.THROTTLE_NO_TRAILING||(s=setTimeout(a,c))}}};class b{constructor(e){if(this.el=e,this.progress=[...e.children].filter((e=>e.matches("header,ol,ul"))),this.progress.forEach((e=>{const t=[...e.children];void 0===t.filter((e=>e.matches(".active")))[0]&&t.length>0&&t[0].classList.add("active")})),null===this.el.querySelector("section.current")){const e=this.el.querySelector("section:first-of-type");null!==e&&e.classList.add("current")}}next(){this.progress.forEach((e=>{const t=[...e.children].filter((e=>e.matches(".active")))[0];t?.classList.remove("active"),t?.nextElementSibling?.classList.add("active")}));const e=this.el.querySelector("section.current");e.classList.remove("current"),e.nextElementSibling.classList.add("current"),this.el.dispatchEvent(new CustomEvent("wizard:activate",{bubbles:!0,cancelable:!0}))}prev(){this.progress.forEach((e=>{const t=[...e.children].filter((e=>e.matches(".active")))[0];t?.classList.remove("active"),t?.previousElementSibling?.classList.add("active")}));const e=this.el.querySelector("section.current");e.classList.remove("current"),e.previousElementSibling.classList.add("current"),this.el.dispatchEvent(new CustomEvent("wizard:activate",{bubbles:!0,cancelable:!0}))}moveTo=function(e){this.progress.forEach((t=>{[...t.children].filter((e=>e.matches(".active")))[0]?.classList.remove("active"),t.children[+e]?.classList.add("active")}));this.el.querySelector("section.current")?.classList.remove("current");this.el.querySelector(`section:nth-child(${+e})`).classList.add("current"),this.el.dispatchEvent(new CustomEvent("wizard:activate",{bubbles:!0,cancelable:!0}))}}class T{constructor(){this.configurers=[],this.initializers=[],this.handlers=[],this.running=!1,document.addEventListener("DOMContentLoaded",(async()=>{await Promise.all(this.configurers),await Promise.all(this.initializers.map((e=>Promise.resolve(e())))),await Promise.all(this.handlers.map((e=>Promise.resolve(e()))))}))}configure(e){return this.configurers.push(Promise.resolve(e())),this}initialize(e){return this.initializers.push(e),this}ready(e){return this.handlers.push(e),this}}export{T as App,E as AuthorizationCodeFlow,g as AuthorizationCodeFlowInterceptor,m as AuthorizationCodeFlowSession,r as Base64,t as Bindings,c as Failure,i as Form,s as Hex,h as HttpClient,d as LocalStorage,f as SessionStorage,p as VersionedStorage,b as Wizard,w as timing};
2
+ //# sourceMappingURL=ful.min.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ful.min.mjs","sources":["../src/bindings.mjs","../src/encodings.mjs","../src/forms.mjs","../src/http-client.mjs","../src/storage.mjs","../src/oauth-authorization-code.mjs","../src/timing.mjs","../src/wizard.mjs","../src/app.mjs"],"sourcesContent":["/* global CSS */\n\nfunction extract(extractors, el) {\n const maybeExtractor = extractors[el.dataset['bindExtractor']] || extractors[el.dataset['bindProvide']];\n if (maybeExtractor) {\n return maybeExtractor(el);\n }\n if (el.getAttribute('type') === 'radio') {\n if (!el.checked) {\n return undefined;\n }\n return el.dataset['bindType'] === 'boolean' ? el.value === 'true' : el.value;\n }\n if (el.getAttribute('type') === 'checkbox') {\n return el.checked;\n }\n if (el.dataset['bindType'] === 'boolean') {\n return !el.value ? null : el.value === 'true';\n }\n return el.value || null;\n}\n\nfunction mutate(mutators, el, raw, key, values) {\n const maybeMutator = mutators[el.dataset['bindMutator']] || mutators[el.dataset['bindProvide']];\n if (maybeMutator) {\n maybeMutator(el, raw, key, values);\n return;\n }\n if (el.getAttribute('type') === 'radio') {\n el.checked = el.getAttribute('value') === raw;\n return;\n }\n if (el.getAttribute('type') === 'checkbox') {\n el.checked = raw;\n return;\n }\n el.value = raw;\n}\n\n\nfunction providePath(result, path, value) {\n const keys = path.split(\".\").map((k) => k.match(/^[0-9]+$/) ? +k : k);\n let current = result;\n let previous = null;\n for (let i = 0; ; ++i) {\n const ckey = keys[i];\n const pkey = keys[i - 1];\n if (Number.isInteger(ckey) && !Array.isArray(current)) {\n if (previous !== null) {\n previous[pkey] = current = [];\n } else {\n result = current = [];\n }\n }\n if (i === keys.length - 1) {\n //when value is undefined we only want to define the property if it's not defined \n current[ckey] = value !== undefined ? value : (ckey in current ? current[ckey] : null);\n return result;\n }\n if (current[ckey] === undefined) {\n current[ckey] = {};\n }\n previous = current;\n current = current[ckey];\n }\n}\n\nclass Bindings {\n\n constructor( {extractors, mutators, ignoredChildrenSelector, valueHoldersSelector}) {\n this.extractors = extractors || {};\n this.mutators = mutators || {};\n this.valueHoldersSelector = valueHoldersSelector || 'input[name], select[name], textarea[name]';\n this.ignoredChildrenSelector = ignoredChildrenSelector || '.d-none';\n }\n setValues(el, values) {\n for (let k in values) {\n if (!values.hasOwnProperty(k)) {\n continue;\n }\n Array.from(el.querySelectorAll(`[name='${CSS.escape(k)}']`)).forEach((el) => {\n mutate(this.mutators, el, values[k], k, values);\n });\n }\n }\n getValues(el) {\n return Array.from(el.querySelectorAll(this.valueHoldersSelector))\n .filter((el) => {\n if (el.dataset['bindInclude'] === 'never') {\n return false;\n }\n return el.dataset['bindInclude'] === 'always' || el.closest(this.ignoredChildrenSelector) === null;\n })\n .reduce((result, el) => {\n return providePath(result, el.getAttribute('name'), extract(this.extractors, el));\n }, {});\n }\n}\n\n\n\nexport { Bindings };","\n\nclass Base64 {\n static encode(arrayBuffer, dialect) {\n const d = dialect || Base64.URL_SAFE;\n const len = arrayBuffer.byteLength;\n const view = new Uint8Array(arrayBuffer);\n let res = '';\n for (let i = 0; i < len; i += 3) {\n const v1 = d[view[i] >> 2];\n const v2 = d[((view[i] & 3) << 4) | (view[i + 1] >> 4)];\n const v3 = d[((view[i + 1] & 15) << 2) | (view[i + 2] >> 6)];\n const v4 = d[view[i + 2] & 63];\n res += v1 + v2 + v3 + v4;\n }\n if (len % 3 === 2) {\n res = res.substring(0, res.length - 1);\n } else if (len % 3 === 1) {\n res = res.substring(0, res.length - 2);\n }\n return res;\n }\n static decode(str, dialect) {\n const d = dialect || Base64.URL_SAFE;\n let nbytes = Math.floor(str.length * 0.75);\n for (let i = 0; i !== str.length; ++i) {\n if (str[str.length - i - 1] !== '=') {\n break;\n }\n --nbytes;\n }\n const view = new Uint8Array(nbytes);\n\n let vi = 0;\n let si = 0;\n while (vi < str.length * 0.75) {\n const v1 = d.indexOf(str.charAt(si++));\n const v2 = d.indexOf(str.charAt(si++));\n const v3 = d.indexOf(str.charAt(si++));\n const v4 = d.indexOf(str.charAt(si++));\n view[vi++] = (v1 << 2) | (v2 >> 4);\n view[vi++] = ((v2 & 15) << 4) | (v3 >> 2);\n view[vi++] = ((v3 & 3) << 6) | v4;\n }\n\n return view.buffer;\n }\n}\n\nBase64.STANDARD = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\nBase64.URL_SAFE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_';\n\n\nclass Hex {\n static decode(hex) {\n if (hex.length % 2 !== 0) {\n throw new Error(\"invalid length\");\n }\n const lenInBytes = hex.length / 2;\n return new Uint8Array(lenInBytes).map((e, i) => {\n const offset = i * 2;\n const octet = hex.substring(offset, offset + 2);\n return parseInt(octet, 16);\n });\n }\n static encode(bytes, upper) {\n return Array.from(bytes)\n .map(b => b.toString(16))\n .map(b => upper ? b.toUpperCase() : b)\n .map(o => o.padStart(2, 0))\n .join('');\n }\n}\n\nexport { Base64, Hex };","/* global Infinity, CSS */\n\n\nclass Form {\n constructor(el, bindings, {globalErrorsEl, fieldContainerSelector, errorClass, hideClass}) {\n this.el = el;\n this.bindings = bindings;\n this.globalErrorsEl = globalErrorsEl;\n this.fieldContainerSelector = fieldContainerSelector !== undefined ? fieldContainerSelector : Form.DEFAULT_FIELD_CONTAINER_SELECTOR;\n this.errorClass = errorClass || Form.DEFAULT_ERROR_CLASS;\n this.hideClass = hideClass || Form.DEFAULT_HIDE_CLASS;\n }\n setValues(values) {\n return this.bindings.setValues(this.el, values);\n }\n getValues() {\n return this.bindings.getValues(this.el);\n }\n setErrors(errors, scrollFirstErrorIntoView, context) {\n\n this.clearErrors();\n errors\n .map(this.mapError ? this.mapError : (e) => e)\n .filter((e) => e.type === 'FIELD_ERROR' || e.type === 'INVALID_FORMAT')\n .forEach((e) => {\n const name = e.context.replace(\"[\", \".\").replace(\"].\", \".\");\n Array.from(this.el.querySelectorAll(`[name='${CSS.escape(name)}']`))\n .map(el => this.fieldContainerSelector ? el.closest(this.fieldContainerSelector) : el)\n .filter(el => el !== null)\n .forEach(label => {\n label.classList.add(this.errorClass);\n label.dataset['error'] = e.reason;\n });\n });\n if (this.globalErrorsEl) {\n const globalErrors = errors.filter((e) => e.type !== 'FIELD_ERROR' && e.type !== 'INVALID_FORMAT');\n this.globalErrorsEl.innerHTML = globalErrors.map(e => e.reason).join(\"\\n\");\n if (globalErrors.length !== 0) {\n this.globalErrorsEl.classList.remove(this.hideClass);\n }\n }\n if (!scrollFirstErrorIntoView) {\n return;\n }\n const yOffsets = Array.from(this.el.querySelectorAll('.${CSS.escape(this.errorClass)}'))\n .map((label) => label.getBoundingClientRect().y + window.scrollY);\n const firstErrorScrollY = Math.min(...yOffsets);\n if (firstErrorScrollY !== Infinity) {\n window.scroll(window.scrollX, firstErrorScrollY > 100 ? firstErrorScrollY - 100 : 0);\n }\n }\n clearErrors() {\n this.el.querySelectorAll(`.${CSS.escape(this.errorClass)}`).forEach(l => l.classList.remove(this.errorClass));\n if (this.globalErrorsEl) {\n this.globalErrorsEl.innerHTML = '';\n this.globalErrorsEl.classList.add(this.hideClass);\n }\n }\n}\n\nForm.DEFAULT_FIELD_CONTAINER_SELECTOR = 'label';\nForm.DEFAULT_ERROR_CLASS = 'has-error';\nForm.DEFAULT_HIDE_CLASS = 'd-none';\n\n\n/*\n export function forms() {\n }\n \n forms.dropContext = function (context) {\n return function (e) {\n if (e.context && e.context.indexOf(context) === 0) {\n e.context = e.context.substring(context.length);\n }\n return e;\n };\n };\n \n \n Dom.ready(() => {\n document.querySelectorAll('label:not([data-error])').forEach(el => {\n el.dataset['error'] = \"Il valore inserito non è valido\";\n });\n });\n \n Dom.ready(() => {\n Dom.on(document.body, 'change', '[data-pattern]', {}, evt => {\n const el = evt.srcElement;\n const pattern = el.dataset['pattern'];\n const matches = el.value.match(pattern);\n const label = el.closest('label');\n if(label === null){\n return;\n }\n label.classList[matches ? 'remove' : 'add']('has-error'); \n });\n });\n */\nexport { Form };","class ContextInterceptor {\n constructor() {\n const context = document.querySelector(\"meta[name='context']\").getAttribute(\"content\");\n this.context = context.endsWith(\"/\") ? context.substring(0, context.length - 1) : context;\n }\n before(request) {\n const separator = request.resource.startsWith(\"/\") ? \"\" : \"/\";\n request.resource = this.context + separator + request.resource;\n }\n}\n\nclass CsrfTokenInterceptor {\n constructor() {\n this.k = document.querySelector(\"meta[name='_csrf_header']\").getAttribute(\"content\");\n this.v = document.querySelector(\"meta[name='_csrf']\").getAttribute(\"content\");\n }\n before(request) {\n const headers = new Headers(request.options.headers);\n headers.set(this.k, this.v);\n request.options.headers = headers;\n }\n}\n\nclass RedirectOnUnauthorizedInterceptor {\n constructor(redirectUri) {\n this.redirectUri = redirectUri;\n }\n after(request, response) {\n if (response.status !== 401) {\n return;\n }\n window.location.href = redirectUri;\n }\n}\n\nclass Failure extends Error {\n static parseProblems(status, text) {\n const def = [{\n type: \"GENERIC_PROBLEM\",\n context: null,\n reason: `${status}: ${text}`,\n details: null\n }];\n try {\n return text ? JSON.parse(text) : def;\n } catch (e) {\n return def;\n }\n }\n static fromResponse(status, text) {\n return new Failure(status, Failure.parseProblems(status, text));\n }\n constructor(status, problems) {\n super(JSON.stringify(problems));\n this.name = `Failure:${status}`;\n this.status = status;\n this.problems = problems;\n }\n}\n\nclass HttpClientBuilder {\n constructor() {\n this.interceptors = [];\n }\n withContext() {\n this.interceptors.push(new ContextInterceptor());\n return this;\n }\n withCsrfToken() {\n this.interceptors.push(new CsrfTokenInterceptor());\n return this;\n }\n withRedirectOnUnauthorized(redirectUri) {\n this.interceptors.push(new RedirectOnUnauthorizedInterceptor(redirectUri));\n return this;\n }\n withInterceptors(...interceptors) {\n this.interceptors.push(...interceptors);\n return this;\n }\n build() {\n const interceptors = this.interceptors;\n return new HttpClient({interceptors});\n }\n}\n\nclass HttpClient {\n static builder() {\n return new HttpClientBuilder();\n }\n constructor( {interceptors}){\n this.interceptors = interceptors || [];\n }\n async fetch(resource, options) {\n const is = this.interceptors.concat(options.interceptors || []);\n const request = {resource, options};\n await is.forEach(async (i) => {\n if (!i.before) {\n return;\n }\n await i.before(request);\n });\n const response = await fetch(request.resource, request.options);\n await is.forEach(async (i) => {\n if (!i.after) {\n return;\n }\n await i.after(request, response);\n });\n\n return response;\n }\n async json(resource, options) {\n try {\n const response = await this.fetch(resource, options);\n if (!response.ok) {\n const message = await response.text();\n throw Failure.fromResponse(response.status, message);\n }\n const text = await response.text();\n return text ? JSON.parse(text) : undefined;\n } catch (e) {\n if (e instanceof Failure) {\n throw e;\n }\n throw new Failure(0, [{\n type: \"CONNECTION_PROBLEM\",\n context: null,\n reason: e.message,\n details: null\n }]);\n }\n }\n async form(resource, options, uiOptions) {\n const ui = uiOptions || {};\n ui.buttons?.forEach(el => {\n el.setAttribute(\"disabled\", \"disabled\");\n if (ui.loader) {\n el.dataset['oldContent'] = el.innerHTML;\n el.innerHTML = ui.loader;\n }\n });\n try {\n const r = await this.json(resource, options);\n ui.form?.clearErrors();\n return r;\n } catch (e) {\n ui.form?.setErrors(e.problems);\n throw e;\n } finally {\n ui.buttons?.forEach(el => {\n el.removeAttribute(\"disabled\");\n el.innerHTML = el.dataset['oldContent'];\n delete el.dataset['oldContent'];\n });\n }\n }\n}\n\n\n\nexport { HttpClient, Failure };\n","\nclass Storage {\n constructor(prefix, storage) {\n this.prefix = prefix;\n this.storage = storage;\n }\n save(k, v) {\n this.storage.setItem(`${this.prefix}-${k}`, JSON.stringify(v));\n }\n load(k) {\n const got = this.storage.getItem(`${this.prefix}-${k}`);\n return got === undefined ? undefined : JSON.parse(got);\n }\n remove(k) {\n this.storage.removeItem(`${this.prefix}-${k}`);\n }\n pop(k) {\n const decoded = this.load(k);\n this.remove(k);\n return decoded;\n }\n}\n\nclass LocalStorage extends Storage {\n constructor(prefix) {\n super(prefix, localStorage);\n }\n}\n\nclass SessionStorage extends Storage {\n constructor(prefix) {\n super(prefix, sessionStorage);\n }\n}\n\nclass VersionedStorage {\n constructor(storage, key, dataSupplier){\n this.storage = storage;\n this.key = key;\n this.dataSupplier = dataSupplier;\n this.cache = null;\n \n }\n async load(revision){\n const saved = this.storage.load(this.key);\n if (!!saved && saved.revision === revision) {\n this.cache = saved.value;\n return;\n }\n const freshData = await this.dataSupplier(revision, this.key);\n this.storage.save(this.key, {\n revision: revision,\n value: freshData\n });\n this.cache = freshData;\n }\n data(){\n return this.cache;\n }\n}\n\n\n\nexport {LocalStorage, SessionStorage, VersionedStorage};","import { Base64 } from \"./encodings.mjs\";\nimport { SessionStorage } from \"./storage.mjs\";\n\n\nclass AuthorizationCodeFlow {\n static forKeycloak(clientId, realmBaseUrl, redirectUri){\n const authUri = new URL(\"protocol/openid-connect/auth\", realmBaseUrl);\n const tokenUri = new URL(\"protocol/openid-connect/token\", realmBaseUrl);\n const logoutUri = new URL(\"protocol/openid-connect/logout\", realmBaseUrl);\n const scope = \"openid profile\";\n return new AuthorizationCodeFlow(clientId, scope, authUri, tokenUri, logoutUri, redirectUri); \n }\n constructor(clientId, scope, authUri, tokenUri, logoutUri, redirectUri) {\n this.clientId = clientId;\n this.scope = scope;\n this.authUri = authUri;\n this.tokenUri = tokenUri;\n this.logoutUri = logoutUri;\n this.redirectUri = redirectUri;\n this.storage = new SessionStorage(clientId);\n }\n async _auth() {\n const pkceVerifier = Base64.encode(crypto.getRandomValues(new Uint8Array(32)).buffer);\n const pkceChallenge = Base64.encode(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(pkceVerifier)));\n const state = this.clientId + Base64.encode(crypto.getRandomValues(new Uint8Array(16)).buffer);\n this.storage.save(AuthorizationCodeFlow.PKCE_AND_STATE_KEY, {\n state: state,\n verifier: pkceVerifier\n });\n const url = new URL(this.authUri);\n url.searchParams.set(\"client_id\", this.clientId);\n url.searchParams.set(\"redirect_uri\", this.redirectUri);\n url.searchParams.set(\"response_type\", 'code');\n url.searchParams.set(\"scope\", this.scope);\n url.searchParams.set(\"state\", state);\n url.searchParams.set(\"code_challenge\", pkceChallenge);\n url.searchParams.set(\"code_challenge_method\", 'S256');\n window.location = url;\n }\n async _tokenExchange(code, state) {\n window.history.replaceState('', \"\", this.redirectUri);\n const stateAndVerifier = this.storage.pop(AuthorizationCodeFlow.PKCE_AND_STATE_KEY);\n if (stateAndVerifier.state !== state) {\n throw new Error(\"State mismatch\");\n }\n const response = await fetch(this.tokenUri, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"code\", code],\n [\"grant_type\", \"authorization_code\"],\n [\"code_verifier\", stateAndVerifier.verifier],\n [\"state\", stateAndVerifier.state],\n [\"redirect_uri\", this.redirectUri]\n ])\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(\"Error:\" + response.status + \": \" + text);\n }\n const token = await response.json();\n return new AuthorizationCodeFlowSession(this.clientId, token, this.tokenUri, this.logoutUri, this.redirectUri);\n }\n\n async ensureLoggedIn() {\n const url = new URL(window.location.href);\n const code = url.searchParams.get(\"code\");\n if (code) {\n //if callback from keycloak\n const state = url.searchParams.get(\"state\");\n return await this._tokenExchange(code, state);\n }\n //if not authorized\n await this._auth();\n return null;\n }\n}\nAuthorizationCodeFlow.PKCE_AND_STATE_KEY = \"state-and-verifier\";\n\nclass AuthorizationCodeFlowSession {\n static parseToken(token) {\n const [rawHeader, rawPayload, signature] = token.split(\".\");\n return {\n header: JSON.parse(atob(rawHeader)),\n payload: JSON.parse(atob(rawPayload)),\n signature: signature\n };\n } \n constructor(clientId, token, tokenUri, logoutUri, redirectUri) {\n this.clientId = clientId;\n this.token = token;\n this.tokenUri = tokenUri;\n this.logoutUri = logoutUri;\n this.redirectUri = redirectUri;\n this.accessToken = AuthorizationCodeFlowSession.parseToken(token.access_token);\n this.refreshToken = AuthorizationCodeFlowSession.parseToken(token.refresh_token);\n this.refreshCallback = null;\n }\n onRefresh(callback) {\n this.refreshCallback = callback;\n }\n async refresh() {\n const response = await fetch(this.tokenUri, {\n method: \"POST\",\n headers: {\n \"Content-Type\": 'application/x-www-form-urlencoded'\n },\n body: new URLSearchParams([\n [\"client_id\", this.clientId],\n [\"grant_type\", \"refresh_token\"],\n [\"refresh_token\", this.token.refresh_token]\n ])\n });\n if (!response.ok) {\n throw new Error(\"Error:\" + response.code + \": \" + response.text());\n }\n const token = await response.json();\n this.token = token;\n this.accessToken = this._parseToken(token.access_token);\n this.refreshToken = this._parseToken(token.refresh_token);\n if (this.refreshCallback) {\n this.refreshCallback(this.token, this.accessToken, this.refreshToken);\n }\n }\n shouldBeRefreshed(gracePeriod) {\n const now = new Date().getTime();\n const refreshTokenExpiresAt = this.refreshToken.payload.exp * 1000;\n const expired = now > refreshTokenExpiresAt;\n const shouldRefresh = now - gracePeriod > refreshTokenExpiresAt;\n return !expired && shouldRefresh;\n }\n async refreshIf(gracePeriod) {\n if (!this.shouldBeRefreshed(gracePeriod)) {\n return;\n }\n await this.refresh();\n }\n logout() {\n const url = new URL(this.logoutUri);\n url.searchParams.set(\"post_logout_redirect_uri\", this.redirectUri);\n url.searchParams.set(\"id_token_hint\", this.token.id_token);\n window.location = url;\n }\n\n bearerToken() {\n return `Bearer ${this.token.access_token}`;\n }\n \n interceptor(gracePeriodBefore, gracePeriodAfter){\n return new AuthorizationCodeFlowInterceptor(this, gracePeriodBefore, gracePeriodAfter); \n }\n}\n\nclass AuthorizationCodeFlowInterceptor {\n constructor(session, gracePeriodBefore, gracePeriodAfter) {\n this.session = session;\n this.gracePeriodBefore = gracePeriodBefore || 2000;\n this.gracePeriodAfter = gracePeriodAfter || 30000;\n }\n async before(request) {\n await this.session.refreshIf(this.gracePeriodBefore);\n const headers = new Headers(request.options.headers);\n headers.set(\"Authorization\", this.session.bearerToken());\n return request;\n }\n async after(request, response) {\n await this.session.refreshIf(this.gracePeriodAfter);\n return response;\n }\n}\n\n\nexport {AuthorizationCodeFlow, AuthorizationCodeFlowSession, AuthorizationCodeFlowInterceptor };","\nconst timing = {\n sleep(ms) {\n return new Promise(resolve => setTimeout(resolve, ms));\n },\n DEBOUNCE_DEFAULT: 0,\n DEBOUNCE_IMMEDIATE: 1,\n debounce(timeoutMs, func, options) {\n let tid = null;\n let args = [];\n let previousTimestamp = 0;\n let opts = options || timing.DEBOUNCE_DEFAULT;\n\n const later = () => {\n const elapsed = new Date().getTime() - previousTimestamp;\n if (timeoutMs > elapsed) {\n tid = setTimeout(later, timeoutMs - elapsed);\n return;\n }\n tid = null;\n if (opts !== timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n // This check is needed because `func` can recursively invoke `debounced`.\n if (tid === null) {\n args = [];\n }\n };\n\n return function () {\n args = arguments;\n previousTimestamp = new Date().getTime();\n if (tid === null) {\n tid = setTimeout(later, timeoutMs);\n if (opts === timing.DEBOUNCE_IMMEDIATE) {\n func(...args);\n }\n }\n };\n },\n THROTTLE_DEFAULT: 0,\n THROTTLE_NO_LEADING: 1,\n THROTTLE_NO_TRAILING: 2,\n throttle(timeoutMs, func, options) {\n let tid = null;\n let args = [];\n let previousTimestamp = 0;\n let opts = options || timing.THROTTLE_DEFAULT;\n\n const later = () => {\n previousTimestamp = (opts & timing.THROTTLE_NO_LEADING) ? 0 : new Date().getTime();\n tid = null;\n func(...args);\n if (tid === null) {\n args = [];\n }\n };\n\n return function () {\n const now = new Date().getTime();\n if (!previousTimestamp && (opts & timing.THROTTLE_NO_LEADING)) {\n previousTimestamp = now;\n }\n const remaining = timeoutMs - (now - previousTimestamp);\n args = arguments;\n if (remaining <= 0 || remaining > timeoutMs) {\n if (tid !== null) {\n clearTimeout(tid);\n tid = null;\n }\n previousTimestamp = now;\n func(...args);\n if (tid === null) {\n args = [];\n }\n } else if (tid === null && !(opts & timing.THROTTLE_NO_TRAILING)) {\n tid = setTimeout(later, remaining);\n }\n };\n\n }\n};\n\n\nexport { timing };","class Wizard {\n constructor(el) {\n this.el = el;\n this.progress = [...el.children].filter(e => e.matches(\"header,ol,ul\"));\n\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n if (current === undefined && children.length > 0) {\n children[0].classList.add('active');\n }\n });\n if (this.el.querySelector('section.current') === null) {\n const firstSection = this.el.querySelector('section:first-of-type');\n if (firstSection !== null) {\n firstSection.classList.add('current');\n }\n }\n }\n next() {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n current?.nextElementSibling?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection.classList.remove(\"current\");\n currentSection.nextElementSibling.classList.add('current');\n\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n\n }\n prev() {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n current?.previousElementSibling?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection.classList.remove(\"current\");\n currentSection.previousElementSibling.classList.add('current');\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n }\n moveTo = function (n) {\n this.progress.forEach(p => {\n const children = [...p.children];\n const current = children.filter(e => e.matches(\".active\"))[0];\n current?.classList.remove('active');\n p.children[+n]?.classList.add('active');\n });\n const currentSection = this.el.querySelector('section.current');\n currentSection?.classList.remove(\"current\");\n const nthSection = this.el.querySelector(`section:nth-child(${+n})`);\n nthSection.classList.add('current');\n this.el.dispatchEvent(new CustomEvent('wizard:activate', {\n bubbles: true,\n cancelable: true\n }));\n }\n}\n\n\n\n\nexport { Wizard };\n","class App {\n constructor() {\n this.configurers = [];\n this.initializers = [];\n this.handlers = [];\n this.running = false;\n document.addEventListener(\"DOMContentLoaded\", async () => {\n await Promise.all(this.configurers);\n await Promise.all(this.initializers.map(h => Promise.resolve(h())));\n await Promise.all(this.handlers.map(h => Promise.resolve(h())));\n });\n }\n configure(cb) {\n this.configurers.push(Promise.resolve(cb()));\n return this;\n }\n initialize(cb) {\n this.initializers.push(cb);\n return this;\n }\n ready(cb) {\n this.handlers.push(cb);\n return this;\n }\n}\n\nexport { App };\n"],"names":["mutate","mutators","el","raw","key","values","maybeMutator","dataset","getAttribute","value","checked","Bindings","constructor","extractors","ignoredChildrenSelector","valueHoldersSelector","this","setValues","k","hasOwnProperty","Array","from","querySelectorAll","CSS","escape","forEach","getValues","filter","closest","reduce","result","path","keys","split","map","match","current","previous","i","ckey","pkey","Number","isInteger","isArray","length","undefined","providePath","maybeExtractor","extract","Base64","static","arrayBuffer","dialect","d","URL_SAFE","len","byteLength","view","Uint8Array","res","substring","str","nbytes","Math","floor","vi","si","v1","indexOf","charAt","v2","v3","v4","buffer","STANDARD","Hex","hex","Error","lenInBytes","e","offset","octet","parseInt","bytes","upper","b","toString","toUpperCase","o","padStart","join","Form","bindings","globalErrorsEl","fieldContainerSelector","errorClass","hideClass","DEFAULT_FIELD_CONTAINER_SELECTOR","DEFAULT_ERROR_CLASS","DEFAULT_HIDE_CLASS","setErrors","errors","scrollFirstErrorIntoView","context","clearErrors","mapError","type","name","replace","label","classList","add","reason","globalErrors","innerHTML","remove","yOffsets","getBoundingClientRect","y","window","scrollY","firstErrorScrollY","min","Infinity","scroll","scrollX","l","ContextInterceptor","document","querySelector","endsWith","before","request","separator","resource","startsWith","CsrfTokenInterceptor","v","headers","Headers","options","set","RedirectOnUnauthorizedInterceptor","redirectUri","after","response","status","location","href","Failure","text","def","details","JSON","parse","parseProblems","problems","super","stringify","HttpClientBuilder","interceptors","withContext","push","withCsrfToken","withRedirectOnUnauthorized","withInterceptors","build","HttpClient","async","is","concat","fetch","ok","message","fromResponse","uiOptions","ui","buttons","setAttribute","loader","r","json","form","removeAttribute","Storage","prefix","storage","save","setItem","load","got","getItem","removeItem","pop","decoded","LocalStorage","localStorage","SessionStorage","sessionStorage","VersionedStorage","dataSupplier","cache","revision","saved","freshData","data","AuthorizationCodeFlow","clientId","realmBaseUrl","authUri","URL","tokenUri","logoutUri","scope","pkceVerifier","encode","crypto","getRandomValues","pkceChallenge","subtle","digest","TextEncoder","state","PKCE_AND_STATE_KEY","verifier","url","searchParams","code","history","replaceState","stateAndVerifier","method","body","URLSearchParams","token","AuthorizationCodeFlowSession","get","_tokenExchange","_auth","rawHeader","rawPayload","signature","header","atob","payload","accessToken","parseToken","access_token","refreshToken","refresh_token","refreshCallback","onRefresh","callback","_parseToken","shouldBeRefreshed","gracePeriod","now","Date","getTime","refreshTokenExpiresAt","exp","refresh","logout","id_token","bearerToken","interceptor","gracePeriodBefore","gracePeriodAfter","AuthorizationCodeFlowInterceptor","session","refreshIf","timing","sleep","ms","Promise","resolve","setTimeout","DEBOUNCE_DEFAULT","DEBOUNCE_IMMEDIATE","debounce","timeoutMs","func","tid","args","previousTimestamp","opts","later","elapsed","arguments","THROTTLE_DEFAULT","THROTTLE_NO_LEADING","THROTTLE_NO_TRAILING","throttle","remaining","clearTimeout","Wizard","progress","children","matches","p","firstSection","next","nextElementSibling","currentSection","dispatchEvent","CustomEvent","bubbles","cancelable","prev","previousElementSibling","moveTo","n","App","configurers","initializers","handlers","running","addEventListener","all","h","configure","cb","initialize","ready"],"mappings":"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"}