!function(){"use strict";window.wpLocation={city:null,country:null,continent:null,oldDataKey:"locations-",dataKey:"locations-v5-",xhr:null,convertionV5Done:!1,cityDefault:{name:"Amsterdam",country:"NL",countryName:"Nederland",countryCode:"NL",continentKey:"europa",geoId:5575,lat:52.37403,lon:4.88969,url:"http://www.weerplaza.nl/nederland/amsterdam/5575/"},search(e,t,r){if(wpLocation.xhr?.abort(),e.length>=3){const o=`${wpApiUrl}/api/geo/search/?query=${e}&language=${t}`;wpLocation.xhr=new AbortController,fetch(o,{method:"get",signal:wpLocation.xhr.signal}).then((e=>e.json())).then((t=>r(t,e)))}else r(null)},get(e,t){const r=`${wpApiUrl}/api/geo/get/${e}`;wpLocation.xhr=new AbortController,fetch(r,{method:"get",signal:wpLocation.xhr.signal}).then((e=>e.json())).then((e=>t(e,q)))},checkBackwardsCompatibility(e){if(this.convertionV5Done||wpData.contains(this.dataKey+e)||!wpData.contains(this.oldDataKey+e))return void(this.convertionV5Done=!0);console.debug(`Converting old localstorage:${e} keys..`);const t=wpData.getObj(this.oldDataKey+e).map(((e,t)=>({identifier:e.Identifier,name:e.Name,displayName:e.DisplayName,countryCode:e.CountryCode,countryName:e.CountryName,continentKey:e.ContinentKey,geoId:e.GeoId,meteoGeoId:e.MeteoGeoId,lat:e.Lat,lon:e.Lon,url:e.URL,indexSearch:e.IndexSearch,searchIndex:e.SearchIndex,searchCanonical:e.SearchCanonical,searchTerm:e.SearchTerm,regionIdentifier:e.RegionIdentifier,fctDistance:e.FCT_Distance,obsDistance:e.OBS_Distance,locations:e.Locations})));this.save(t,e),wpData.remove(this.oldDataKey+e),this.convertionV5Done=!0},list(e){const t=wpData.getObj(this.dataKey+e)||[];return this.checkBackwardsCompatibility(e),"favs"===e&&0===t.length&&t.push(wpLocation.cityDefault),t.slice(0,50)},add(e,t){this.checkBackwardsCompatibility(t),this.remove(e,t);let r=wpData.getObj(this.dataKey+t)||[];r.unshift(e),this.save(r,t),wpWeather.check()},url(e,t,r){e||(wpLocation.continent&&(e={url:"/"+wpLocation.continent.key+"/"}),wpLocation.country&&(e={url:"/"+("NL"!==wpLocation.country.code?wpLocation.country.continent.key+"/":"")+wpLocation.country.key+"/"}),wpLocation.region&&(e={url:"/"+("NL"!==wpLocation.region.country.code?wpLocation.region.country.continent.key+"/":"")+wpLocation.region.country.key+"/"+wpLocation.region.key+"/"}),wpLocation.city&&(e=wpLocation.city));let o=e.url||"";e.geo&&(o=e.geo.url),o=o.replace("https://www.weerplaza.nl","").replace("http://www.weerplaza.nl","");const n=o.indexOf("/wintersport/")>-1;if(n&&void 0===typeof e.continentKey)return o;const a=o.indexOf("/nederland/")>-1,i=window.location.pathname,s=["regenradar","onweerradar","wereldweer","wintersport","nederland","satelliet"];null===t&&s.forEach((e=>{0===i.indexOf("/"+e+"/")&&(t=e)})),t&&(!e.countryCode||"nederland"!==t&&"wereldweer"!==t&&"wintersport"!==t||(t=0===o.indexOf("/nederland/")?"nederland":n?"wintersport":"wereldweer"),s.forEach((e=>{0===o.indexOf("/"+e)&&(o=o.replace("/"+e,""))})),o="/"+t+(n&&"wintersport"!==t?"/"+e.continentKey:"")+o);let c=a?["regen-en-wolken","motregenradar","24uur-regen-prognose","sneeuwradar","neerslagsom","hagelradar","actueel"]:["actueel"];return r||c.forEach((e=>{i.indexOf("/"+e+"/")>0&&(r=e)})),r&&!n&&(c.forEach((()=>o=o.replace(r+"/",""))),""!==r&&(o=o+r+"/")),o},remove(e,t){const r=(wpData.getObj(this.dataKey+t)||[]).filter((t=>e.url!==t.url));this.save(r,t)},save(e,t){wpData.setObj(this.dataKey+t,e)},setActiveCity(e){wpLocation.city=e},getActiveCity(){return wpLocation.list("favs")[0]||this.cityDefault},getActiveCityId:()=>wpLocation.city?wpLocation.city.geoId:0,setActiveRegion(e){wpLocation.region=e,wpLocation.region.latitude=e.latitude,wpLocation.region.longitude=e.longitude},setActiveCountry(e){wpLocation.country=e,wpLocation.country.latitude=e.latitude,wpLocation.country.longitude=e.longitude},setActiveContinent(e){wpLocation.continent=e,wpLocation.continent.latitude=e.latitude,wpLocation.continent.longitude=e.longitude}},window.wpData={prefix:"wp-",get(e){return localStorage.getItem(this.prefix+e)},contains(e){return localStorage.hasOwnProperty(this.prefix+e)},set(e,t){null===t?localStorage.removeItem(this.prefix+e):localStorage.setItem(this.prefix+e,t)},remove(e){localStorage.removeItem(this.prefix+e)},getObj(e){var t=this.get(e);return null===t?null:JSON.parse(t)},setObj(e,t){this.set(e,JSON.stringify(t))},dec2hex:e=>e.toString(16).padStart(2,"0"),generateId(e){const t=new Uint8Array((e||40)/2);return window.crypto.getRandomValues(t),Array.from(t,this.dec2hex).join("")},clear(){Object.keys(localStorage).filter((e=>e.startsWith(this.prefix))).forEach((e=>localStorage.removeItem(e)))}},window.wpCookie={get(e){const t=e+"=",r=document.cookie.split(";");for(let e=0;e<r.length;e++){let o=r[e];for(;" "===o.charAt(0);)o=o.substring(1);if(0===o.indexOf(t))return o.substring(t.length,o.length)}return""},set(e,t){const r=new Date;r.setTime(r.getTime()+31536e8);const o="expires="+r.toUTCString();document.cookie=e+"="+t+"; "+o+";path=/;Secure;SameSite=Strict"}};const e=["N","NNO","NO","ONO","O","OZO","ZO","ZZO","Z","ZZW","ZW","WZW","W","WNW","NW","NNW","N"];window.wpWeather={xhr:null,init(){if(!isWidget){wpWeather.check(),setInterval(wpWeather.check,24e4);[...document.querySelectorAll(".weather-rating:not(.r-empty)")].forEach((e=>{wpTooltip.create(e,"Weercijfer - klik voor meer informatie")}))}},check(){wpWeather.update();if(wpWeather.checkExpired(300))wpWeather.load();else{const e=wpLocation.list("favs").slice(0,10),t=wpWeather.list();e.some((e=>!t.some((t=>t.geoId===(e.meteoGeoId||e.geoId)))))&&wpWeather.load()}},checkExpired(e){let t=wpData.get("weather-timestamp");return null===t||Date.now()-parseInt(t)>1e3*e},list:()=>wpData.getObj("weather")||[],load(){const e=wpLocation.list("favs").map((e=>e.meteoGeoId||e.geoId));if(wpWeather.xhr&&(wpWeather.xhr.abort("Cancelled"),wpWeather.xhr=null),e.length<=0)return;wpData.set("weather-timestamp",Date.now()),wpWeather.xhr=new AbortController;const t="https://api.meteoplaza.com/v2/meteo/widget/list/"+e.slice(0,10).join("|");fetch(t,{signal:wpWeather.xhr.signal}).then((e=>e.json())).then((e=>{wpData.setObj("weather",e),wpWeather.update()})).catch((()=>{}))},windDirection:t=>e[Math.round(t/22.5)],update(){wpWeather.list().forEach((e=>{if(document.querySelectorAll(`.geo-${e.GeoId}.temp`).forEach((t=>{void 0!==e.TTTT&&null!==e.TTTT?(t.classList.remove("hidden"),t.innerHTML=e.TTTT+"&deg;"):t.classList.remove("hidden")})),void 0===e.WXCO||null===e.WXCO&&null===e.WXCO_EXTENDED)document.querySelectorAll(`.geo-${e.GeoId}.wx-w30`).forEach((e=>e.classList.add("hidden"))),document.querySelectorAll(`.geo-${e.GeoId}.wx-w60`).forEach((e=>e.classList.add("hidden"))),document.querySelectorAll(`.geo-${e.GeoId}.wx-w100`).forEach((e=>e.classList.add("hidden"))),document.querySelectorAll(`.geo-${e.GeoId}.wx-b30`).forEach((e=>e.classList.add("hidden"))),document.querySelectorAll(`.geo-${e.GeoId}.wx-b60`).forEach((e=>e.classList.add("hidden"))),document.querySelectorAll(`.geo-${e.GeoId}.wx-b100`).forEach((e=>e.classList.add("hidden")));else{let t="";t=null!==e.WXCO_EXTENDED?`https://icons.weerplaza.nl/extended/normal/${e.WXCO_EXTENDED}_LB.svg`:`https://icons.weerplaza.nl/shortlist/${e.WXCO}/normal.svg`,document.querySelectorAll(`.geo-${e.GeoId}.wx-w30`).forEach((e=>{e.classList.remove("hidden"),e.style.backgroundImage=`url('${t}')`})),document.querySelectorAll(`.geo-${e.GeoId}.wx-w60`).forEach((e=>{e.classList.remove("hidden"),e.style.backgroundImage=`url('${t}')`})),document.querySelectorAll(`.geo-${e.GeoId}.wx-w100`).forEach((e=>{e.classList.remove("hidden"),e.style.backgroundImage=`url('${t}')`})),document.querySelectorAll(`.geo-${e.GeoId}.wx-b30`).forEach((e=>{e.classList.remove("hidden"),e.style.backgroundImage=`url('${t}')`})),document.querySelectorAll(`.geo-${e.GeoId}.wx-b60`).forEach((e=>{e.classList.remove("hidden"),e.style.backgroundImage=`url('${t}')`})),document.querySelectorAll(`.geo-${e.GeoId}.wx-b100`).forEach((e=>{e.classList.remove("hidden"),e.style.backgroundImage=`url('${t}')`}))}}))}},document.addEventListener("DOMContentLoaded",wpWeather.init);var t={exports:{}};self,t.exports=(()=>(()=>{var e={985:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OAuth2Client=void 0,t.generateQueryString=i;const o=r(854),n=r(129);function a(e,t){return new URL(e,t).toString()}function i(e){const t=new URLSearchParams;for(const[r,o]of Object.entries(e))if(Array.isArray(o))for(const e of o)t.append(r,e);else void 0!==o&&t.set(r,o.toString());return t.toString()}t.OAuth2Client=class{constructor(e){this.discoveryDone=!1,this.serverMetadata=null,(null==e?void 0:e.fetch)||(e.fetch=fetch.bind(globalThis)),this.settings=e}async refreshToken(e,t){if(!e.refreshToken)throw new Error("This token didn't have a refreshToken. It's not possible to refresh this");const r={grant_type:"refresh_token",refresh_token:e.refreshToken};this.settings.clientSecret||(r.client_id=this.settings.clientId),(null==t?void 0:t.scope)&&(r.scope=t.scope.join(" ")),(null==t?void 0:t.resource)&&(r.resource=t.resource);const o=await this.tokenResponseToOAuth2Token(this.request("tokenEndpoint",r));return!o.refreshToken&&e.refreshToken&&(o.refreshToken=e.refreshToken),o}async clientCredentials(e){var t;const r=["client_id","client_secret","grant_type","scope"];if((null==e?void 0:e.extraParams)&&Object.keys(e.extraParams).filter((e=>r.includes(e))).length>0)throw new Error(`The following extraParams are disallowed: '${r.join("', '")}'`);const o={grant_type:"client_credentials",scope:null===(t=null==e?void 0:e.scope)||void 0===t?void 0:t.join(" "),resource:null==e?void 0:e.resource,...null==e?void 0:e.extraParams};if(!this.settings.clientSecret)throw new Error("A clientSecret must be provided to use client_credentials");return this.tokenResponseToOAuth2Token(this.request("tokenEndpoint",o))}async password(e){var t;const r={grant_type:"password",...e,scope:null===(t=e.scope)||void 0===t?void 0:t.join(" ")};return this.tokenResponseToOAuth2Token(this.request("tokenEndpoint",r))}get authorizationCode(){return new n.OAuth2AuthorizationCodeClient(this)}async introspect(e){const t={token:e.accessToken,token_type_hint:"access_token"};return this.request("introspectionEndpoint",t)}async revoke(e,t="access_token"){let r=e.accessToken;"refresh_token"===t&&(r=e.refreshToken);const o={token:r,token_type_hint:t};return this.request("revocationEndpoint",o)}async getEndpoint(e){if(void 0!==this.settings[e])return a(this.settings[e],this.settings.server);if("discoveryEndpoint"!==e&&(await this.discover(),void 0!==this.settings[e]))return a(this.settings[e],this.settings.server);if(!this.settings.server)throw new Error(`Could not determine the location of ${e}. Either specify ${e} in the settings, or the "server" endpoint to let the client discover it.`);switch(e){case"authorizationEndpoint":return a("/authorize",this.settings.server);case"tokenEndpoint":return a("/token",this.settings.server);case"discoveryEndpoint":return a("/.well-known/oauth-authorization-server",this.settings.server);case"introspectionEndpoint":return a("/introspect",this.settings.server);case"revocationEndpoint":return a("/revoke",this.settings.server)}}async discover(){var e;if(this.discoveryDone)return;let t;this.discoveryDone=!0;try{t=await this.getEndpoint("discoveryEndpoint")}catch(e){return void console.warn('[oauth2] OAuth2 discovery endpoint could not be determined. Either specify the "server" or "discoveryEndpoint')}const r=await this.settings.fetch(t,{headers:{Accept:"application/json"}});if(!r.ok)return;if(!(null===(e=r.headers.get("Content-Type"))||void 0===e?void 0:e.startsWith("application/json")))return void console.warn("[oauth2] OAuth2 discovery endpoint was not a JSON response. Response is ignored");this.serverMetadata=await r.json();const o=[["authorization_endpoint","authorizationEndpoint"],["token_endpoint","tokenEndpoint"],["introspection_endpoint","introspectionEndpoint"],["revocation_endpoint","revocationEndpoint"]];if(null!==this.serverMetadata){for(const[e,r]of o)this.serverMetadata[e]&&(this.settings[r]=a(this.serverMetadata[e],t));this.serverMetadata.token_endpoint_auth_methods_supported&&!this.settings.authenticationMethod&&(this.settings.authenticationMethod=this.serverMetadata.token_endpoint_auth_methods_supported[0])}}async request(e,t){const r=await this.getEndpoint(e),n={"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"};let a=this.settings.authenticationMethod;switch(this.settings.clientSecret||(a="client_secret_post"),a||(a="client_secret_basic"),a){case"client_secret_basic":n.Authorization="Basic "+btoa(this.settings.clientId+":"+this.settings.clientSecret);break;case"client_secret_post":t.client_id=this.settings.clientId,this.settings.clientSecret&&(t.client_secret=this.settings.clientSecret);break;default:throw new Error("Authentication method not yet supported:"+a+". Open a feature request if you want this!")}const s=await this.settings.fetch(r,{method:"POST",body:i(t),headers:n});let c,l,d;if(204!==s.status&&s.headers.has("Content-Type")&&s.headers.get("Content-Type").match(/^application\/(.*\+)?json/)&&(c=await s.json()),s.ok)return c;throw(null==c?void 0:c.error)?(l="OAuth2 error "+c.error+".",c.error_description&&(l+=" "+c.error_description),d=c.error):(l="HTTP Error "+s.status+" "+s.statusText,401===s.status&&this.settings.clientSecret&&(l+=". It's likely that the clientId and/or clientSecret was incorrect"),d=null),new o.OAuth2HttpError(l,d,s,c)}async tokenResponseToOAuth2Token(e){var t;const r=await e;if(!(null==r?void 0:r.access_token))throw console.warn("Invalid OAuth2 Token Response: ",r),new TypeError("We received an invalid token response from an OAuth2 server.");return{accessToken:r.access_token,expiresAt:r.expires_in?Date.now()+1e3*r.expires_in:null,refreshToken:null!==(t=r.refresh_token)&&void 0!==t?t:null}}}},129:(e,t,r)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OAuth2AuthorizationCodeClient=void 0,t.generateCodeVerifier=async function(){const e=a();if(e){const t=new Uint8Array(32);return e.getRandomValues(t),s(t)}{const e=r(483);return new Promise(((t,r)=>{e.randomBytes(32,((e,o)=>{e&&r(e),t(o.toString("base64url"))}))}))}},t.getCodeChallenge=n;const o=r(854);async function n(e){const t=a();if(null==t?void 0:t.subtle)return["S256",s(await t.subtle.digest("SHA-256",i(e)))];{const t=r(483).createHash("sha256");return t.update(i(e)),["S256",t.digest("base64url")]}}function a(){if("undefined"!=typeof window&&window.crypto)return window.crypto;if("undefined"!=typeof self&&self.crypto)return self.crypto;const e=r(483);return e.webcrypto?e.webcrypto:null}function i(e){const t=new Uint8Array(e.length);for(let r=0;r<e.length;r++)t[r]=255&e.charCodeAt(r);return t}function s(e){return btoa(String.fromCharCode(...new Uint8Array(e))).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}t.OAuth2AuthorizationCodeClient=class{constructor(e){this.client=e}async getAuthorizeUri(e){const[t,r]=await Promise.all([e.codeVerifier?n(e.codeVerifier):void 0,this.client.getEndpoint("authorizationEndpoint")]),o=new URLSearchParams({client_id:this.client.settings.clientId,response_type:"code",redirect_uri:e.redirectUri});if(t&&(o.set("code_challenge_method",t[0]),o.set("code_challenge",t[1])),e.state&&o.set("state",e.state),e.scope&&o.set("scope",e.scope.join(" ")),e.resource)for(const t of[].concat(e.resource))o.append("resource",t);if(e.responseMode&&"query"!==e.responseMode&&o.append("response_mode",e.responseMode),e.extraParams)for(const[t,r]of Object.entries(e.extraParams)){if(o.has(t))throw new Error(`Property in extraParams would overwrite standard property: ${t}`);o.set(t,r)}return r+"?"+o.toString()}async getTokenFromCodeRedirect(e,t){const{code:r}=this.validateResponse(e,{state:t.state});return this.getToken({code:r,redirectUri:t.redirectUri,codeVerifier:t.codeVerifier})}validateResponse(e,t){var r;let n=(e=new URL(e)).searchParams;if(!n.has("code")&&!n.has("error")&&e.hash.length>0&&(n=new URLSearchParams(e.hash.slice(1))),n.has("error"))throw new o.OAuth2Error(null!==(r=n.get("error_description"))&&void 0!==r?r:"OAuth2 error",n.get("error"));if(!n.has("code"))throw new Error(`The url did not contain a code parameter ${e}`);if(t.state&&t.state!==n.get("state"))throw new Error(`The "state" parameter in the url did not match the expected value of ${t.state}`);return{code:n.get("code"),scope:n.has("scope")?n.get("scope").split(" "):void 0}}async getToken(e){const t={grant_type:"authorization_code",code:e.code,redirect_uri:e.redirectUri,code_verifier:e.codeVerifier,resource:e.resource};return this.client.tokenResponseToOAuth2Token(this.client.request("tokenEndpoint",t))}}},854:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OAuth2HttpError=t.OAuth2Error=void 0;class r extends Error{constructor(e,t){super(e),this.oauth2Code=t}}t.OAuth2Error=r,t.OAuth2HttpError=class extends r{constructor(e,t,r,o){super(e,t),this.httpCode=r.status,this.response=r,this.parsedBody=o}}},238:(e,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.OAuth2Fetch=void 0,t.OAuth2Fetch=class{constructor(e){this.token=null,this.activeGetStoredToken=null,this.activeRefresh=null,this.refreshTimer=null,void 0===(null==e?void 0:e.scheduleRefresh)&&(e.scheduleRefresh=!0),this.options=e,e.getStoredToken&&(this.activeGetStoredToken=(async()=>{this.token=await e.getStoredToken(),this.activeGetStoredToken=null})()),this.scheduleRefresh()}async fetch(e,t){const r=new Request(e,t);return this.mw()(r,(e=>fetch(e)))}mw(){return async(e,t)=>{const r=await this.getAccessToken();let o=e.clone();o.headers.set("Authorization","Bearer "+r);let n=await t(o);if(!n.ok&&401===n.status){const r=await this.refreshToken();o=e.clone(),o.headers.set("Authorization","Bearer "+r.accessToken),n=await t(o)}return n}}async getToken(){return this.token&&(null===this.token.expiresAt||this.token.expiresAt>Date.now())?this.token:this.refreshToken()}async getAccessToken(){return await this.activeGetStoredToken,(await this.getToken()).accessToken}async refreshToken(){var e,t;if(this.activeRefresh)return this.activeRefresh;const r=this.token;this.activeRefresh=(async()=>{var e,t;let o=null;try{(null==r?void 0:r.refreshToken)&&(o=await this.options.client.refreshToken(r))}catch(e){console.warn("[oauth2] refresh token not accepted, we'll try reauthenticating")}if(o||(o=await this.options.getNewToken()),!o){const r=new Error("Unable to obtain OAuth2 tokens, a full reauth may be needed");throw null===(t=(e=this.options).onError)||void 0===t||t.call(e,r),r}return o})();try{const r=await this.activeRefresh;return this.token=r,null===(t=(e=this.options).storeToken)||void 0===t||t.call(e,r),this.scheduleRefresh(),r}catch(e){throw this.options.onError&&this.options.onError(e),e}finally{this.activeRefresh=null}}scheduleRefresh(){var e;if(!this.options.scheduleRefresh)return;if(this.refreshTimer&&(clearTimeout(this.refreshTimer),this.refreshTimer=null),!(null===(e=this.token)||void 0===e?void 0:e.expiresAt)||!this.token.refreshToken)return;const t=this.token.expiresAt-Date.now();t<12e4||(this.refreshTimer=setTimeout((async()=>{try{await this.refreshToken()}catch(e){console.error("[fetch-mw-oauth2] error while doing a background OAuth2 auto-refresh",e)}}),t-6e4))}}},483:()=>{}},t={};function r(o){var n=t[o];if(void 0!==n)return n.exports;var a=t[o]={exports:{}};return e[o](a,a.exports,r),a.exports}var o={};return(()=>{var e=o;Object.defineProperty(e,"__esModule",{value:!0}),e.OAuth2HttpError=e.OAuth2Error=e.OAuth2Fetch=e.generateCodeVerifier=e.OAuth2AuthorizationCodeClient=e.OAuth2Client=void 0;var t=r(985);Object.defineProperty(e,"OAuth2Client",{enumerable:!0,get:function(){return t.OAuth2Client}});var n=r(129);Object.defineProperty(e,"OAuth2AuthorizationCodeClient",{enumerable:!0,get:function(){return n.OAuth2AuthorizationCodeClient}}),Object.defineProperty(e,"generateCodeVerifier",{enumerable:!0,get:function(){return n.generateCodeVerifier}});var a=r(238);Object.defineProperty(e,"OAuth2Fetch",{enumerable:!0,get:function(){return a.OAuth2Fetch}});var i=r(854);Object.defineProperty(e,"OAuth2Error",{enumerable:!0,get:function(){return i.OAuth2Error}}),Object.defineProperty(e,"OAuth2HttpError",{enumerable:!0,get:function(){return i.OAuth2HttpError}})})(),o})())();var r=t.exports,o=crypto;const n=e=>e instanceof CryptoKey,a=new TextEncoder,i=new TextDecoder;const s=e=>{let t=e;t instanceof Uint8Array&&(t=i.decode(t)),t=t.replace(/-/g,"+").replace(/_/g,"/").replace(/\s/g,"");try{return(e=>{const t=atob(e),r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return r})(t)}catch(e){throw new TypeError("The input to be decoded is not correctly encoded.")}};class c extends Error{static get code(){return"ERR_JOSE_GENERIC"}constructor(e){var t;super(e),this.code="ERR_JOSE_GENERIC",this.name=this.constructor.name,null===(t=Error.captureStackTrace)||void 0===t||t.call(Error,this,this.constructor)}}class l extends c{static get code(){return"ERR_JWT_CLAIM_VALIDATION_FAILED"}constructor(e,t="unspecified",r="unspecified"){super(e),this.code="ERR_JWT_CLAIM_VALIDATION_FAILED",this.claim=t,this.reason=r}}class d extends c{static get code(){return"ERR_JWT_EXPIRED"}constructor(e,t="unspecified",r="unspecified"){super(e),this.code="ERR_JWT_EXPIRED",this.claim=t,this.reason=r}}class h extends c{constructor(){super(...arguments),this.code="ERR_JOSE_ALG_NOT_ALLOWED"}static get code(){return"ERR_JOSE_ALG_NOT_ALLOWED"}}class u extends c{constructor(){super(...arguments),this.code="ERR_JOSE_NOT_SUPPORTED"}static get code(){return"ERR_JOSE_NOT_SUPPORTED"}}class p extends c{constructor(){super(...arguments),this.code="ERR_JWS_INVALID"}static get code(){return"ERR_JWS_INVALID"}}class w extends c{constructor(){super(...arguments),this.code="ERR_JWT_INVALID"}static get code(){return"ERR_JWT_INVALID"}}class f extends c{constructor(){super(...arguments),this.code="ERR_JWS_SIGNATURE_VERIFICATION_FAILED",this.message="signature verification failed"}static get code(){return"ERR_JWS_SIGNATURE_VERIFICATION_FAILED"}}function g(e,t="algorithm.name"){return new TypeError(`CryptoKey does not support this operation, its ${t} must be ${e}`)}function y(e,t){return e.name===t}function m(e){return parseInt(e.name.slice(4),10)}function S(e,t,...r){switch(t){case"HS256":case"HS384":case"HS512":{if(!y(e.algorithm,"HMAC"))throw g("HMAC");const r=parseInt(t.slice(2),10);if(m(e.algorithm.hash)!==r)throw g(`SHA-${r}`,"algorithm.hash");break}case"RS256":case"RS384":case"RS512":{if(!y(e.algorithm,"RSASSA-PKCS1-v1_5"))throw g("RSASSA-PKCS1-v1_5");const r=parseInt(t.slice(2),10);if(m(e.algorithm.hash)!==r)throw g(`SHA-${r}`,"algorithm.hash");break}case"PS256":case"PS384":case"PS512":{if(!y(e.algorithm,"RSA-PSS"))throw g("RSA-PSS");const r=parseInt(t.slice(2),10);if(m(e.algorithm.hash)!==r)throw g(`SHA-${r}`,"algorithm.hash");break}case"EdDSA":if("Ed25519"!==e.algorithm.name&&"Ed448"!==e.algorithm.name)throw g("Ed25519 or Ed448");break;case"ES256":case"ES384":case"ES512":{if(!y(e.algorithm,"ECDSA"))throw g("ECDSA");const r=function(e){switch(e){case"ES256":return"P-256";case"ES384":return"P-384";case"ES512":return"P-521";default:throw new Error("unreachable")}}(t);if(e.algorithm.namedCurve!==r)throw g(r,"algorithm.namedCurve");break}default:throw new TypeError("CryptoKey does not support this operation")}!function(e,t){if(t.length&&!t.some((t=>e.usages.includes(t)))){let e="CryptoKey does not support this operation, its usages must include ";if(t.length>2){const r=t.pop();e+=`one of ${t.join(", ")}, or ${r}.`}else 2===t.length?e+=`one of ${t[0]} or ${t[1]}.`:e+=`${t[0]}.`;throw new TypeError(e)}}(e,r)}function v(e,t,...r){if(r.length>2){const t=r.pop();e+=`one of type ${r.join(", ")}, or ${t}.`}else 2===r.length?e+=`one of type ${r[0]} or ${r[1]}.`:e+=`of type ${r[0]}.`;return null==t?e+=` Received ${t}`:"function"==typeof t&&t.name?e+=` Received function ${t.name}`:"object"==typeof t&&null!=t&&t.constructor&&t.constructor.name&&(e+=` Received an instance of ${t.constructor.name}`),e}var A=(e,...t)=>v("Key must be ",e,...t);function k(e,t,...r){return v(`Key for the ${e} algorithm must be `,t,...r)}var b=e=>n(e);const E=["CryptoKey"];var T=(...e)=>{const t=e.filter(Boolean);if(0===t.length||1===t.length)return!0;let r;for(const e of t){const t=Object.keys(e);if(r&&0!==r.size)for(const e of t){if(r.has(e))return!1;r.add(e)}else r=new Set(t)}return!0};function _(e){if("object"!=typeof(t=e)||null===t||"[object Object]"!==Object.prototype.toString.call(e))return!1;var t;if(null===Object.getPrototypeOf(e))return!0;let r=e;for(;null!==Object.getPrototypeOf(r);)r=Object.getPrototypeOf(r);return Object.getPrototypeOf(e)===r}const C=(e,t,r=0)=>{0===r&&(t.unshift(t.length),t.unshift(6));let o=e.indexOf(t[0],r);if(-1===o)return!1;const n=e.subarray(o,o+t.length);return n.length===t.length&&(n.every(((e,r)=>e===t[r]))||C(e,t,o+1))},O=e=>{switch(!0){case C(e,[42,134,72,206,61,3,1,7]):return"P-256";case C(e,[43,129,4,0,34]):return"P-384";case C(e,[43,129,4,0,35]):return"P-521";case C(e,[43,101,110]):return"X25519";case C(e,[43,101,111]):return"X448";case C(e,[43,101,112]):return"Ed25519";case C(e,[43,101,113]):return"Ed448";default:throw new u("Invalid or unsupported EC Key Curve or OKP Key Sub Type")}},I=(e,t,r)=>(async(e,t,r,n,a)=>{var i;let s,c;const l=new Uint8Array(atob(r.replace(e,"")).split("").map((e=>e.charCodeAt(0)))),d="spki"===t;switch(n){case"PS256":case"PS384":case"PS512":s={name:"RSA-PSS",hash:`SHA-${n.slice(-3)}`},c=d?["verify"]:["sign"];break;case"RS256":case"RS384":case"RS512":s={name:"RSASSA-PKCS1-v1_5",hash:`SHA-${n.slice(-3)}`},c=d?["verify"]:["sign"];break;case"RSA-OAEP":case"RSA-OAEP-256":case"RSA-OAEP-384":case"RSA-OAEP-512":s={name:"RSA-OAEP",hash:`SHA-${parseInt(n.slice(-3),10)||1}`},c=d?["encrypt","wrapKey"]:["decrypt","unwrapKey"];break;case"ES256":s={name:"ECDSA",namedCurve:"P-256"},c=d?["verify"]:["sign"];break;case"ES384":s={name:"ECDSA",namedCurve:"P-384"},c=d?["verify"]:["sign"];break;case"ES512":s={name:"ECDSA",namedCurve:"P-521"},c=d?["verify"]:["sign"];break;case"ECDH-ES":case"ECDH-ES+A128KW":case"ECDH-ES+A192KW":case"ECDH-ES+A256KW":{const e=O(l);s=e.startsWith("P-")?{name:"ECDH",namedCurve:e}:{name:e},c=d?[]:["deriveBits"];break}case"EdDSA":s={name:O(l)},c=d?["verify"]:["sign"];break;default:throw new u('Invalid or unsupported "alg" (Algorithm) value')}return o.subtle.importKey(t,l,s,null!==(i=null==a?void 0:a.extractable)&&void 0!==i&&i,c)})(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\s)/g,"spki",e,t,r);var x=(e,t,r)=>{e.startsWith("HS")||"dir"===e||e.startsWith("PBES2")||/^A\d{3}(?:GCM)?KW$/.test(e)?((e,t)=>{if(!(t instanceof Uint8Array)){if(!b(t))throw new TypeError(k(e,t,...E,"Uint8Array"));if("secret"!==t.type)throw new TypeError(`${E.join(" or ")} instances for symmetric algorithms must be of type "secret"`)}})(e,t):((e,t,r)=>{if(!b(t))throw new TypeError(k(e,t,...E));if("secret"===t.type)throw new TypeError(`${E.join(" or ")} instances for asymmetric algorithms must not be of type "secret"`);if("sign"===r&&"public"===t.type)throw new TypeError(`${E.join(" or ")} instances for asymmetric algorithm signing must be of type "private"`);if("decrypt"===r&&"public"===t.type)throw new TypeError(`${E.join(" or ")} instances for asymmetric algorithm decryption must be of type "private"`);if(t.algorithm&&"verify"===r&&"private"===t.type)throw new TypeError(`${E.join(" or ")} instances for asymmetric algorithm verifying must be of type "public"`);if(t.algorithm&&"encrypt"===r&&"private"===t.type)throw new TypeError(`${E.join(" or ")} instances for asymmetric algorithm encryption must be of type "public"`)})(e,t,r)};var R=(e,t)=>{if(void 0!==t&&(!Array.isArray(t)||t.some((e=>"string"!=typeof e))))throw new TypeError(`"${e}" option must be an array of strings`);if(t)return new Set(t)};var P=async(e,t,r,a)=>{const i=await function(e,t,r){if(n(t))return S(t,e,r),t;if(t instanceof Uint8Array){if(!e.startsWith("HS"))throw new TypeError(A(t,...E));return o.subtle.importKey("raw",t,{hash:`SHA-${e.slice(-3)}`,name:"HMAC"},!1,[r])}throw new TypeError(A(t,...E,"Uint8Array"))}(e,t,"verify");((e,t)=>{if(e.startsWith("RS")||e.startsWith("PS")){const{modulusLength:r}=t.algorithm;if("number"!=typeof r||r<2048)throw new TypeError(`${e} requires key modulusLength to be 2048 bits or larger`)}})(e,i);const s=function(e,t){const r=`SHA-${e.slice(-3)}`;switch(e){case"HS256":case"HS384":case"HS512":return{hash:r,name:"HMAC"};case"PS256":case"PS384":case"PS512":return{hash:r,name:"RSA-PSS",saltLength:e.slice(-3)>>3};case"RS256":case"RS384":case"RS512":return{hash:r,name:"RSASSA-PKCS1-v1_5"};case"ES256":case"ES384":case"ES512":return{hash:r,name:"ECDSA",namedCurve:t.namedCurve};case"EdDSA":return{name:t.name};default:throw new u(`alg ${e} is not supported either by JOSE or your javascript runtime`)}}(e,i.algorithm);try{return await o.subtle.verify(s,i,r,a)}catch(e){return!1}};async function L(e,t,r){var o;if(!_(e))throw new p("Flattened JWS must be an object");if(void 0===e.protected&&void 0===e.header)throw new p('Flattened JWS must have either of the "protected" or "header" members');if(void 0!==e.protected&&"string"!=typeof e.protected)throw new p("JWS Protected Header incorrect type");if(void 0===e.payload)throw new p("JWS Payload missing");if("string"!=typeof e.signature)throw new p("JWS Signature missing or incorrect type");if(void 0!==e.header&&!_(e.header))throw new p("JWS Unprotected Header incorrect type");let n={};if(e.protected)try{const t=s(e.protected);n=JSON.parse(i.decode(t))}catch(e){throw new p("JWS Protected Header is invalid")}if(!T(n,e.header))throw new p("JWS Protected and JWS Unprotected Header Parameter names must be disjoint");const c={...n,...e.header},l=function(e,t,r,o,n){if(void 0!==n.crit&&void 0===o.crit)throw new e('"crit" (Critical) Header Parameter MUST be integrity protected');if(!o||void 0===o.crit)return new Set;if(!Array.isArray(o.crit)||0===o.crit.length||o.crit.some((e=>"string"!=typeof e||0===e.length)))throw new e('"crit" (Critical) Header Parameter MUST be an array of non-empty strings when present');let a;a=void 0!==r?new Map([...Object.entries(r),...t.entries()]):t;for(const t of o.crit){if(!a.has(t))throw new u(`Extension Header Parameter "${t}" is not recognized`);if(void 0===n[t])throw new e(`Extension Header Parameter "${t}" is missing`);if(a.get(t)&&void 0===o[t])throw new e(`Extension Header Parameter "${t}" MUST be integrity protected`)}return new Set(o.crit)}(p,new Map([["b64",!0]]),null==r?void 0:r.crit,n,c);let d=!0;if(l.has("b64")&&(d=n.b64,"boolean"!=typeof d))throw new p('The "b64" (base64url-encode payload) Header Parameter must be a boolean');const{alg:w}=c;if("string"!=typeof w||!w)throw new p('JWS "alg" (Algorithm) Header Parameter missing or invalid');const g=r&&R("algorithms",r.algorithms);if(g&&!g.has(w))throw new h('"alg" (Algorithm) Header Parameter not allowed');if(d){if("string"!=typeof e.payload)throw new p("JWS Payload must be a string")}else if("string"!=typeof e.payload&&!(e.payload instanceof Uint8Array))throw new p("JWS Payload must be a string or an Uint8Array instance");let y=!1;"function"==typeof t&&(t=await t(n,e),y=!0),x(w,t,"verify");const m=function(...e){const t=e.reduce(((e,{length:t})=>e+t),0),r=new Uint8Array(t);let o=0;return e.forEach((e=>{r.set(e,o),o+=e.length})),r}(a.encode(null!==(o=e.protected)&&void 0!==o?o:""),a.encode("."),"string"==typeof e.payload?a.encode(e.payload):e.payload);let S;try{S=s(e.signature)}catch(e){throw new p("Failed to base64url decode the signature")}if(!await P(w,t,S,m))throw new f;let v;if(d)try{v=s(e.payload)}catch(e){throw new p("Failed to base64url decode the payload")}else v="string"==typeof e.payload?a.encode(e.payload):e.payload;const A={payload:v};return void 0!==e.protected&&(A.protectedHeader=n),void 0!==e.header&&(A.unprotectedHeader=e.header),y?{...A,key:t}:A}const D=86400,W=/^(\d+|\d+\.\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;var j=e=>{const t=W.exec(e);if(!t)throw new TypeError("Invalid time period format");const r=parseFloat(t[1]);switch(t[2].toLowerCase()){case"sec":case"secs":case"second":case"seconds":case"s":return Math.round(r);case"minute":case"minutes":case"min":case"mins":case"m":return Math.round(60*r);case"hour":case"hours":case"hr":case"hrs":case"h":return Math.round(3600*r);case"day":case"days":case"d":return Math.round(r*D);case"week":case"weeks":case"w":return Math.round(604800*r);default:return Math.round(31557600*r)}};const $=e=>e.toLowerCase().replace(/^application\//,"");var U=(e,t,r={})=>{const{typ:o}=r;if(o&&("string"!=typeof e.typ||$(e.typ)!==$(o)))throw new l('unexpected "typ" JWT header value',"typ","check_failed");let n;try{n=JSON.parse(i.decode(t))}catch(e){}if(!_(n))throw new w("JWT Claims Set must be a top-level JSON object");const{requiredClaims:a=[],issuer:s,subject:c,audience:h,maxTokenAge:u}=r;void 0!==u&&a.push("iat"),void 0!==h&&a.push("aud"),void 0!==c&&a.push("sub"),void 0!==s&&a.push("iss");for(const e of new Set(a.reverse()))if(!(e in n))throw new l(`missing required "${e}" claim`,e,"missing");if(s&&!(Array.isArray(s)?s:[s]).includes(n.iss))throw new l('unexpected "iss" claim value',"iss","check_failed");if(c&&n.sub!==c)throw new l('unexpected "sub" claim value',"sub","check_failed");if(h&&(p=n.aud,f="string"==typeof h?[h]:h,!("string"==typeof p?f.includes(p):Array.isArray(p)&&f.some(Set.prototype.has.bind(new Set(p))))))throw new l('unexpected "aud" claim value',"aud","check_failed");var p,f;let g;switch(typeof r.clockTolerance){case"string":g=j(r.clockTolerance);break;case"number":g=r.clockTolerance;break;case"undefined":g=0;break;default:throw new TypeError("Invalid clockTolerance option type")}const{currentDate:y}=r,m=(S=y||new Date,Math.floor(S.getTime()/1e3));var S;if((void 0!==n.iat||u)&&"number"!=typeof n.iat)throw new l('"iat" claim must be a number',"iat","invalid");if(void 0!==n.nbf){if("number"!=typeof n.nbf)throw new l('"nbf" claim must be a number',"nbf","invalid");if(n.nbf>m+g)throw new l('"nbf" claim timestamp check failed',"nbf","check_failed")}if(void 0!==n.exp){if("number"!=typeof n.exp)throw new l('"exp" claim must be a number',"exp","invalid");if(n.exp<=m-g)throw new d('"exp" claim timestamp check failed',"exp","check_failed")}if(u){const e=m-n.iat;if(e-g>("number"==typeof u?u:j(u)))throw new d('"iat" claim timestamp check failed (too far in the past)',"iat","check_failed");if(e<0-g)throw new l('"iat" claim timestamp check failed (it should be in the past)',"iat","check_failed")}return n};async function N(e,t,r){var o;const n=await async function(e,t,r){if(e instanceof Uint8Array&&(e=i.decode(e)),"string"!=typeof e)throw new p("Compact JWS must be a string or Uint8Array");const{0:o,1:n,2:a,length:s}=e.split(".");if(3!==s)throw new p("Invalid Compact JWS");const c=await L({payload:n,protected:o,signature:a},t,r),l={payload:c.payload,protectedHeader:c.protectedHeader};return"function"==typeof t?{...l,key:c.key}:l}(e,t,r);if((null===(o=n.protectedHeader.crit)||void 0===o?void 0:o.includes("b64"))&&!1===n.protectedHeader.b64)throw new w("JWTs MUST NOT use unencoded payload");const a={payload:U(n.protectedHeader,n.payload,r),protectedHeader:n.protectedHeader};return"function"==typeof t?{...a,key:n.key}:a}let H,J=!1,M=!1;const K="-----BEGIN PUBLIC KEY-----\nMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzJ5FWVgEIWF00Mru39vG\nWVxIev67e5hMgN0BW3YTdDmgdi0A1TIAYi9cpqpMLX7bROK/8NMg5dNrqOPyTxVY\n2hk0pyVx9C5M9v21GF7wpWciGwe6A1Gst3ncpVbRfxCZxrC/3jK6MDV40j5gL4WK\nzmlTLzU3kbaiSAk9cBwkNBy7+H5oSn7HoPAFvb5kTJwkzgkHVwJ5M5R9vOpWTgc5\nd8hRWfeU4TYI4a/CMg/ZyCqBYimNK2J7KXTw+lbs2rw0QOHZBftEB7SGby9HPVes\nSWzgTp3tVnoHFQJ78txvKTsJMXZKaIRV91TiCEeqx5rt3bTMQmfe8oTii8tiPS3I\nQnsWBHp7dJF0nujIqLn+GR6Fs6DjoRL90ioJsAgeL4NMYJzODLoF8YGcpIhRPXbT\nWNUbKQQTwfa2nDx1ke84X/s2khs1cigGt7XW+eykd96MUqQAymu/cZyvSFiKEt2L\nNgGWzUrdQycP0OLAY0tmQkbW4R2bXL7dzJAncoJV1GlIAQJfsUnYoDC3Wkri9RxD\n17DAh/WoCw0Id6aXyMtASLwamE894YyzDTDB6Bku2Pv7h32D1lysKP4ZRepRa1Aw\nOYso9jcYx/BvXpfkE3K42ZXfwu+TeGA0Yh4Ogo5AE+V5mw9RKm/OVytKxM4px7xt\nj67c57cC8x2siF41jdzXr+0CAwEAAQ==\n-----END PUBLIC KEY-----",z=Object.freeze({localhost:"05e6085b-6ab3-4923-8046-54e80d298327","develop.weerplaza.nl":"0663097b-713b-4d33-9854-b2fbf5257a98","www.weerplaza.nl":"f603a5da-48b6-44d5-a2b2-e9eabf3d0c5a"});function V(e){if(!e||isNaN(parseInt(e)))return!1;return new Date(parseInt(e))<new Date}async function G(e){const t=(new TextEncoder).encode(e),r=await crypto.subtle.digest("SHA-256",t);return[...new Uint8Array(r)].map((e=>e.toString(16).padStart(2,"0"))).join("")}async function B(e){if(!e)throw new Error("Invalid parameters");const t=await fetch(`${siteAccountUrl}api/user-info`,{headers:{Authorization:"Bearer "+e},cache:"force-cache"});if(!t.ok)throw new Error("Failed to fetch user info");const r=await t.json();localStorage.user=JSON.stringify(r);try{const e=await G(JSON.stringify(localStorage.user)+K);localStorage.userHash=e}catch(e){console.error("Failed to hash user info",e)}return r}class F extends EventTarget{get supported(){return M}get ready(){return J}get loggedIn(){return localStorage.hasOwnProperty("authRefreshToken")}getUser(){if(!auth.loggedIn)return null;(async function(e,t){return!(!e||!t)&&e==await G(JSON.stringify(t)+K)})(localStorage.userHash,localStorage.user).then((e=>{e||this.logout()}));try{return JSON.parse(localStorage.user)}catch(e){this.logout()}}constructor(){if(super(),M=z.hasOwnProperty(window.location.hostname),!this.supported)return;const e=z[window.location.hostname];H=new r.OAuth2Client({server:window.siteAccountUrl,clientId:e,tokenEndpoint:"/passport-oauth/token",authorizationEndpoint:"/passport-oauth/authorize",fetch:(...e)=>fetch(...e)})}onInit(e){this.addEventListener("init",e)}async getUserData(){return this.loggedIn?await async function(e){if(!e)return null;V(localStorage.authExpiresAt)&&(e=(await window.auth.refresh()).accessToken);return await fetch(`${window.siteKVStoreUrl}v1/tmc/favorites`,{headers:{Authorization:e}}).then((e=>e.json()))}(localStorage.authAccessToken):null}async setUserData(e){return this.loggedIn?await async function(e,t){if(!e)return null;V(localStorage.authExpiresAt)&&(e=(await window.auth.refresh()).accessToken);const r={method:"POST",headers:{"Content-Type":"application/json",Authorization:e},body:JSON.stringify(t)};return await fetch(`${window.siteKVStoreUrl}v1/tmc/favorites`,r).then((e=>e.json()))}(localStorage.authAccessToken,e):null}getInitials(e){if(!e)throw new Error("Incorrect parameters");let t=new RegExp(/(\p{L}{1})\p{L}+/,"gu"),r=[...e.matchAll(t)]||[];return((r.shift()?.[1]||"")+(r.pop()?.[1]||"")).toUpperCase()}async login(e){if(!this.supported)return!1;if(this.loggedIn)return!1;const t=await r.generateCodeVerifier(),o=new Uint8Array(16);crypto.getRandomValues(o);const n=Array.from(o,(e=>e.toString(16).padStart(2,"0"))).join(""),a={path:e||location.pathname,token:n},i={redirectUri:window.location.origin+"/api/auth/callback",state:window.btoa(JSON.stringify(a)),codeVerifier:t,scope:["*"]};sessionStorage.authConfig=JSON.stringify(i),localStorage.authConfig=JSON.stringify(i);const s=await H.authorizationCode.getAuthorizeUri(i);document.location.href=s}async clearAllStorage(){delete sessionStorage.authConfig,delete localStorage.authAccessToken,delete localStorage.authConfig,delete localStorage.authRefreshToken,delete localStorage.authExpiresAt,delete localStorage.authVerify,delete localStorage.user,delete localStorage.PPID,window.location=window.location.pathname}async logout(){try{(async function(e){try{if(!e)throw new Error("Invalid parameters");const t=await fetch(`${window.siteAccountUrl}api/logout`,{headers:{Authorization:"Bearer "+e}});return await t.json()}catch(e){return null}})(localStorage.authAccessToken).then((()=>{this.clearAllStorage()}))}catch(e){this.clearAllStorage()}}createSingleCallFunction(e){let t=!1,r=null,o=null;return async function(...n){return t||o||(t=!0,r=e(...n).then((e=>e)).finally((()=>{t=!1,o=setTimeout((()=>{o=null}),2e3)}))),r}}async handleRefresh(){const e={accessToken:localStorage.authAccessToken,refreshToken:localStorage.authRefreshToken,expiresAt:localStorage.authExpiresAt};try{const t=await H.refreshToken(e);return t?(localStorage.authAccessToken=t.accessToken,localStorage.authRefreshToken=t.refreshToken,localStorage.authExpiresAt=t.expiresAt,t):null}catch(e){return null}}refresh=this.createSingleCallFunction(this.handleRefresh);async getPaymentLink(){const e=this.user??this.getUser(),t=`${window.location.origin}/verify-payment`;try{const r={name:e.name,email:e.email,appKey:"weerplaza_web",planId:"6",userId:e.user_id,redirectUrl:t,language:"nl"},o=await async function(e,t){if(!e)throw new Error("Invalid parameters");const r={method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${e}`},body:JSON.stringify(t)},o=await fetch(`${window.siteBillingUrl}api/billing/createSubscription`,r);if(o.ok)return await o.json();return null}(localStorage.authAccessToken,r);return o&&o&&o?.paymentLink?o?.paymentLink:null}catch(e){return console.log(e),null}}async verifyPayment(e){const t=await async function(e,t){if(!e)throw new Error("Invalid parameters");if(!t)return null;const r=`${window.siteBillingUrl}api/billing/verifyPayment?userToken=${encodeURIComponent(t)}`,o={method:"GET",headers:{Authorization:`Bearer ${e}`}};try{const e=await fetch(r,o);if(e.ok){const t=await e.json();return t&&t?.success?(await window.auth.refresh(),!0):null}return null}catch{return null}}(localStorage.authAccessToken,e);return t}setConsentDefaults(){void 0!==window.Didomi&&window.Didomi.setCurrentUserStatus({purposes:{load_external_content:{id:"load_external_content",enabled:!0},cookies_measure:{id:"cookies_measure",enabled:!0},functional:{id:"functional",enabled:!0},cookies:{id:"cookies",enabled:!1},select_basic_ads:{id:"select_basic_ads",enabled:!1},create_ads_profile:{id:"create_ads_profile",enabled:!1},select_personalized_ads:{id:"select_personalized_ads",enabled:!1},create_content_profile:{id:"create_content_profile",enabled:!1},select_personalized_content:{id:"select_personalized_content",enabled:!1},measure_ad_performance:{id:"measure_ad_performance",enabled:!1},measure_content_performance:{id:"measure_content_performance",enabled:!1},market_research:{id:"market_research",enabled:!1},improve_products:{id:"improve_products",enabled:!1},device_characteristics:{id:"device_characteristics",enabled:!1},use_limited_data_to_select_content:{id:"use_limited_data_to_select_content",enabled:!1},geolocation_data:{id:"geolocation_data",enabled:!1},"audiencem-hJxaeGrR":{id:"audiencem-hJxaeGrR",enabled:!1},personalisation:{id:"personalisation",enabled:!1}},vendors:{}})}checkForCallback(){const e=new URLSearchParams(location.search).get("state");if(this.loggedIn||null==e)return!1;return async function(e){let t=null;if(sessionStorage.hasOwnProperty("authConfig")?t=sessionStorage.authConfig:(console.warn("No auth config found in sessionStorage try localstorage"),localStorage.hasOwnProperty("authConfig")&&(t=localStorage.authConfig,sessionStorage.authConfig=t)),!t)return console.error("No auth config found in sessionStorage or localstorage"),window.auth.logout(),!1;const r=JSON.parse(t),o=JSON.parse(window.atob(r.state));try{if(o.token!=e.token)throw new Error("CSRF ATTACK!");const t={redirectUri:r.redirectUri,state:r.state,codeVerifier:r.codeVerifier},n=await H.authorizationCode.getTokenFromCodeRedirect(document.location,t);return localStorage.authAccessToken=n.accessToken,localStorage.authRefreshToken=n.refreshToken,localStorage.authExpiresAt=n.expiresAt,localStorage.authVerify=(new Date).getTime(),delete localStorage.authConfig,delete sessionStorage.authConfig,!0}catch(e){return console.warn(e),window.auth.logout(),!1}}(JSON.parse(window.atob(e)))}async init(){if(await this.checkForCallback()){this.user=await B(localStorage.authAccessToken);await this.isPremiumUser()&&this.setConsentDefaults();const e=new URLSearchParams(location.search).get("state"),t=new URLSearchParams(location.search).get("code");if(e||t){const r=new URL(location.href);e&&r.searchParams.delete("state"),t&&r.searchParams.delete("code"),history.replaceState(null,"",r.toString())}}else if(this.user=this.getUser(),this.user){let e=localStorage.authAccessToken;const t=new Date(parseInt(localStorage.authExpiresAt)),r=new Date;if(r.setDate(r.getDate()+3),!t||isNaN(t.getTime()))return void this.logout();if(r>t){const t=await window.auth.refresh();t?(delete localStorage.authVerify,e=t.accessToken):window.auth.logout()}await async function(e,t){const r=localStorage.authVerify,o=(new Date).getTime();if(r&&o-r<18e5)return!0;const n=await B(e);return n?.user_id==t?.user_id?(localStorage.authVerify=o,!0):(window.auth.logout(),!1)}(e,this.user)}J=!0,this.dispatchEvent(new CustomEvent("init",{detail:{user:this.user}}))}async getClaims(){const e=(await this.validate())?.claims;return e}async isPremiumUser(){const e=await this.getClaims();return!!e&&e?.includes(window?.siteIsPremiumClaim)}async validate(e){if(!this.loggedIn)return!1;const t=await async function(e,t,r){if("string"!=typeof e||0!==e.indexOf("-----BEGIN PUBLIC KEY-----"))throw new TypeError('"spki" must be SPKI formatted string');return I(e,t,r)}(K,"RS256"),r=e??localStorage.authAccessToken;try{const{payload:e}=await N(r,t,{clockTolerance:3});return e}catch(e){return this.logout(),null}}}window.auth=new F,auth.init().then((async()=>{if(await(window?.auth?.isPremiumUser())){const e=new CSSStyleSheet;e.replaceSync(".banner, .banner-separator { display: none !important; }"),document.adoptedStyleSheets=[e],window.googletag.cmd.push((function(){window.googletag.destroySlots()})),window.googletag.cmd=[]}}));const X=async()=>{await(window?.auth?.isPremiumUser())&&(window.googletag.cmd.push((function(){window.googletag.destroySlots()})),window.googletag.cmd=[])};window.auth&&(auth.ready?document.addEventListener("DOMContentLoaded",(async()=>X(auth.user))):auth.onInit((e=>X(e.detail.user)))),window.isMobile=()=>window.innerWidth<=767,window.isTablet=()=>window.innerWidth>=768&&window.innerWidth<=1024,window.isDesktop=()=>window.innerWidth>=1025,window.wpApiUrl=window.location.origin.replace("//weerplza.nl","//beta.weerplaza.nl"),window.isTouchDevice=()=>"ontouchstart"in window||navigator.maxTouchPoints,window.getScreenSize=()=>isMobile()?"XS":isTablet()?"MD":isDesktop()?"XL":void 0,window.sanitize=e=>e?.replace(/&/g,"&amp;").replace(/>/g,"&gt;").replace(/</g,"&lt;").replace(/"/g,"&quot;")}();//# sourceMappingURL=site-head.min.js.map