@nebula.js/stardust 7.5.1 → 7.5.2

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.
@@ -1,8 +1,8 @@
1
1
  /*
2
- * @nebula.js/stardust v7.5.1
2
+ * @nebula.js/stardust v7.5.2
3
3
  * Copyright (c) 2026 QlikTech International AB
4
4
  * Released under the MIT license.
5
5
  */
6
6
 
7
- System.register(["./index-L5HtNfzB.js"],function(e){"use strict";var t,o,n,r;return{setters:[function(e){t=e.s,o=e.i,n=e.c,r=e.a}],execute:function(){e({determineAuthType:mt,getAccessToken:async function(e){const t=(await At({method:"GET",...e})).headers?.Authorization;if(0===t.indexOf("Bearer "))return t.substring(7);throw new Error("Unknown format of authorization header returned by remote auth module")},getDefaultHostConfig:jt,getRestCallAuthParams:At,getWebResourceAuthParams:Ct,getWebSocketAuthParams:Tt,handleAuthenticationError:vt,isHostCrossOrigin:wt,isWindows:yt,normalizeHostConfig:qt,onFatalAuthError:xt,onPageRedirectRequested:Ht,onPageRedirectStarted:Lt,registerAuthModule:Pt,registerHostConfig:St,serializeHostConfig:It,setDefaultHostConfig:$t,toValidLocationUrl:kt,toValidWebsocketLocationUrl:bt,unregisterHostConfig:_t});const s=["authType","autoRedirect","authRedirectUserConfirmation","embedRuntimeUrl","host","onAuthFailed"],a=["apikey","oauth2","cookie","windowscookie","reference","anonymous","pfx"],i=async(e={})=>{const t=Rt(e.hostConfig);if("mock-backend-rest-recorder"===t.authType)return t.recordGetPlatform();if("mock-backend"===t?.authType)return t.mockGetPlatform();if("noauth"===t?.authType)return f({isUnknown:!0});let n=o()?window.QlikMain?.PRODUCT_INFO:void 0;if(!n){const{data:t,status:o}=await u(e);if(n=t,404===o)return f({isUnknown:!0});if(!n||o<=399&&o>=300)return f({isQSE:!0,isWindows:!0})}const r=(n.composition?.deploymentType||"").toLowerCase();return"qliksenseserver"===r?f({isQSE:!0,isWindows:!0,meta:l(n)}):"qliksensedesktop"===r?f({isQSD:!0,isWindows:!0,meta:l(n)}):"qliksensemobile"===r?f({isQSE:!0,isWindows:!0,meta:l(n)}):"cloud-console"===r?f({isCloud:!0,isCloudConsole:!0,meta:l(n)}):"fedramp"===n.composition?.provider?f({isCloud:!0,isQCG:!0,meta:l(n)}):f({isCloud:!0,isQCS:!0,meta:l(n)})},c={};const u=async({hostConfig:e,noCache:t}={})=>{const o=`${kt(e)}/resources/autogenerated/product-info.json`;try{if(!(o in c)){const e={};globalThis.QlikMain?.resourceNeedsCredentials(o)&&(e.credentials="include");const t=fetch(o,e).then(async e=>e.ok?{data:await e.json(),status:e.status}:{data:void 0,status:e.status});c[o]=t}const e=await c[o];return(e.status>=400||!e.data)&&delete c[o],e}catch{return delete c[o],{data:void 0,status:500}}finally{t&&delete c[o]}},l=e=>{const t=e.externalUrls;if(!t)return;const o=e.composition?.productName??"Qlik",n=e.composition?.releaseLabel||"-",r="-"===n?o:`${o} (${n})`;return{productId:e.composition?.senseId??"qlik",productLabel:r,version:e.composition?.version,urls:{personalHelpBaseUrl:t.personalHelpBaseUrl,personalUpgradeBase:t.personalUpgradeBase,personalUpgradeUrl:t.personalUpgradeUrl,serverHelpBaseUrl:t.serverHelpBaseUrl,qlikWebPageUrl:t.qlikWebPageUrl}}},f=e=>({isCloud:!1,isQCS:!1,isQCG:!1,isCloudConsole:!1,isWindows:!1,isQSE:!1,isQSD:!1,isUnknown:!1,...e});function h(e,t){const o=new Uint8Array(t);globalThis.crypto.getRandomValues(o);let n="";for(let r=0;r<t;r++)n+=e[o[r]%e.length];return n}function d(e){return h("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-",e)}const p={},g=new Map;function m(e){const t=n(e)||{};return t.host&&(t.host=kt(t)),o()&&kt(t)===window.location.origin&&delete t.host,t.authType&&a.includes(t.authType)&&delete t.authType,t}function w(e,t){if("function"!=typeof t)return t}function y(e){const o=t(m(Rt(e)));return JSON.stringify(o,w)}const k=new Map;function b(e,t){const o=t?.reference||null;if(o&&!k.has(o))throw new it(`Host config with reference "${o}" is not registered. Please register it before using it.`);k.has(e)&&console.warn(`registerHostConfig: Host config with name "${e}" is already registered. Overwriting.`),k.set(e,t)}function T(e){return k.get(e)}function C(){return T("default")||{}}const v=new Map;function A(e){const t=y(e);let o=v.get(t);return o||(o={redirectRequestedListeners:new Set,redirectStartedListeners:new Set},v.set(t,o)),o}function P(e){const t=A(e),o=t.redirectRequestedListeners.size>0||e.authRedirectUserConfirmation;return e.autoRedirect||!o?Promise.resolve():"function"==typeof e.authRedirectUserConfirmation?e.authRedirectUserConfirmation().catch(()=>{}):new Promise(e=>{const o=()=>{for(const e of t.redirectStartedListeners)try{e()}catch(e){console.warn(e)}e()};for(const e of t.redirectRequestedListeners)try{e({proceed:o})}catch(e){console.warn(e)}})}const $="qlik-qmfe-api";function S(e){let t=e.clientId+(e.scope?`_${e.scope}`:"_user_default");return e.subject&&(t+=`_${e.subject}`),e.userId&&(t+=`_${e.userId}`),t}function _(e){return`${e.accessCode}_${e.clientId}`}const I={};function q(e,t,o){localStorage.setItem(`${$}-${e}-${t}`,o)}function E(e,t,o){sessionStorage.setItem(`${$}-${e}-${t}`,o)}function U(e,t,o,n){return e.store(`${$}-${t}-${o}`,n)}function O(e,t){return localStorage.getItem(`qlik-qmfe-api-${e}-${t}`)||void 0}function R(e,t){return sessionStorage.getItem(`qlik-qmfe-api-${e}-${t}`)||void 0}function j(e,t,o){return e.get(`${$}-${t}-${o}`)}function x(e,t){t.forEach(t=>localStorage.removeItem(`${$}-${e}-${t}`))}function H(e,t){t.forEach(t=>sessionStorage.removeItem(`${$}-${e}-${t}`))}function L(e,t){const o=`${$}-${e}-${t}`,n=sessionStorage.getItem(o)||void 0;return sessionStorage.removeItem(o),n}function W(e){return"object"==typeof e&&null!==e&&"function"==typeof e.store&&"function"==typeof e.get&&"function"==typeof e.delete}async function N(e,t){if(!e.clientId)throw new it('A host config with authType set to "oauth2" has to also provide a clientId');return D(S(e),t,e.noCache,e.accessTokenStorage)}async function D(e,t,o,n){return o?t():(I[e]=I[e]||(async()=>{let o=await async function(e,t){let o,n;if("local"===t?(o=O(e,"access-token"),n=O(e,"refresh-token")):"session"===t?(o=R(e,"access-token"),n=R(e,"refresh-token")):W(t)&&(o=await j(t,e,"access-token"),n=await j(t,e,"refresh-token")),o)return{accessToken:o,refreshToken:n}}(e,n);return o||(o=await t(),"local"===n&&o?(o.accessToken&&q(e,"access-token",o.accessToken),o.refreshToken&&q(e,"refresh-token",o.refreshToken)):"session"===n&&o?(o.accessToken&&E(e,"access-token",o.accessToken),o.refreshToken&&E(e,"refresh-token",o.refreshToken)):W(n)&&o&&(o.accessToken&&await U(n,e,"access-token",o.accessToken),o.refreshToken&&await U(n,e,"refresh-token",o.refreshToken)),o)})(),I[e])}function B(e){const t=S(e);delete I[t],o()&&(x(t,["access-token","refresh-token"]),H(t,["access-token","refresh-token"])),W(e.accessTokenStorage)&&function(e,t,o){Promise.all(o.map(o=>e.delete(`${$}-${t}-${o}`)))}(e.accessTokenStorage,t,["access-token","refresh-token"])}function z(e){if("string"==typeof e){const t=globalThis[e];if(!t)throw new Error(`No such function: ${e}`);return t}return e}function M(e){return globalThis[e]}function Q(e){if(e.errors)throw new lt(e.errors)}function F(e){const t=Object.keys(e);return t.sort(),t.map(t=>`${t}=${e[t]}`).join("&")}async function K(e){const t=(new TextEncoder).encode(e),n=await globalThis.crypto.subtle.digest("SHA-256",t);return function(e){let t;if(o()){const o=String.fromCharCode.apply(null,e);t=btoa(o)}else{if(!r())throw new Error("Environment not supported for oauth2 authentication");t=Buffer.from(e).toString("base64")}return t}(Array.from(new Uint8Array(n))).replaceAll(/\+/g,"-").replaceAll(/\//g,"_").replace(/=+$/,"")}async function J(e){const t=e.clientId||"",o=kt(e),n=d(128),r=d(43),s=await K(n),a=e.redirectUri||globalThis.location.href,i=S(e);B(e),E(i,"state",r),E(i,"verifier",n),E(i,"href",globalThis.location.href),E("","client-in-progress",i);const c=`${o}/oauth/authorize?${F({response_type:"code",client_id:t,redirect_uri:a,scope:e.scope||"user_default",state:r,code_challenge:s,code_challenge_method:"S256"})}`;globalThis.location.replace(c)}async function G(e,t,o,n){try{const r=await(await fetch(`${kt(e)}/oauth/token`,{method:"POST",credentials:"include",mode:"cors",headers:{"content-type":"application/json"},redirect:"follow",body:JSON.stringify({grant_type:"authorization_code",scope:e.scope||"user_default",...t?{code:t}:{},redirect_uri:n||globalThis.location.href,...o?{code_verifier:o}:{},client_id:e.clientId})})).json();return Q(r),{accessToken:r.access_token,refreshToken:r.refresh_token,errors:r.errors}}catch(e){return console.error(e),new Promise(()=>{})}}function X(e,t,o,n,r){const s={client_id:e,client_secret:t,scope:o};return n?{...s,grant_type:"urn:qlik:oauth:user-impersonation",user_lookup:{field:"subject",value:n}}:r?{...s,grant_type:"urn:qlik:oauth:user-impersonation",user_lookup:{field:"userId",value:r}}:{...s,grant_type:"client_credentials"}}async function V(e){const{clientId:t,clientSecret:o,performInteractiveLogin:n}=e;if(!t||!o&&!n)throw new it('A host config with authType set to "oauth2" has to provide a clientId and a clientSecret or a performInteractiveLogin function');return await N(e,async()=>{if(e.performInteractiveLogin)return Y(e);if(!e.clientId||!e.clientSecret)throw new it('A host config with authType set to "oauth2" has to provide a clientId and a clientSecret');return async function(e,t,o,n="user_default",r,s){const a=await(await fetch(`${e}/oauth/token`,{method:"POST",mode:"cors",headers:{"content-type":"application/json"},body:JSON.stringify(X(t,o,n,r,s))})).json();return{accessToken:a.access_token,refreshToken:a.refresh_token,errors:a.errors}}(kt(e),e.clientId,e.clientSecret,e.scope,e.subject,e.userId)})}async function Y(e){if(!e.performInteractiveLogin)return oe("No performInteractiveLogin function in hostConfig");let t;try{const o=d(128),n=d(43),{code:r,state:s}=function(e){if("string"==typeof e){let t;try{t=new URL(e)}catch{t=new URL(e,"http://localhost")}const o=new URLSearchParams(t.search);return{code:o.get("code")||"",state:o.get("state")||""}}return e}(await z(e.performInteractiveLogin)({getLoginUrl:async({redirectUri:r})=>(t=r,async function(e,t,o,n){const r=e.clientId||"",s=kt(e),a=await K(n);return`${s}/oauth/authorize?${F({response_type:"code",client_id:r,redirect_uri:t,scope:e.scope||"user_default",state:o,code_challenge:a,code_challenge_method:"S256"})}`}(e,r,n,o))}));return t?n!==s?oe("State returned by custom interactive login function does not match original"):r?await G(e,r,o,t):oe("No code found in response from custom interactive login function"):oe("No redirect uri provided")}catch(e){return{accessToken:void 0,refreshToken:void 0,errors:[{code:"",status:401,title:"Could not perform custom interactive login",detail:String(e)}]}}}!function(e,t){const o=globalThis.location?.hostname?.toLowerCase(),n="localhost"===o,r=o?.endsWith(".qlik-stage.com");(n||r)&&globalThis.QlikMain&&(void 0===globalThis.QlikMain.INTERNAL__DO_NOT_USE.qix&&(globalThis.QlikMain.INTERNAL__DO_NOT_USE.qix={}),globalThis.QlikMain.INTERNAL__DO_NOT_USE.qix[e]=t)}("clearAllAccessTokens",()=>{console.log("Clearing tokens",I),Object.keys(I).forEach(e=>{console.log("Clearing access tokens for",e),x(e,["access-token","refresh-token"]),H(e,["access-token","refresh-token"])}),function(){for(const e in I)delete I[e]}()});let Z=Promise.resolve("");async function ee(e){if(r()){const t=await V(e);return t?(Q(t),t.accessToken||""):""}return o()&&(Z=Z.then(async()=>{const t=await async function(e){const{clientId:t}=e;if(!t)throw new it('A host config with authType set to "oauth2" has to also provide a clientId');const o=await N(e,async()=>{if(e.getAccessToken)try{return{accessToken:"string"==typeof e.getAccessToken?await M(e.getAccessToken)():await e.getAccessToken(),refreshToken:void 0,errors:void 0}}catch{return oe("Could not fetch access token using custom function")}if(e.performInteractiveLogin)return Y(e);const t=S(e),o=L(t,"code"),n=L(t,"verifier");if(o&&n){const t=await G(e,o,n,e.redirectUri);if(t)return t}});return o||(e.performInteractiveLogin||(await P(e),J(e)),new Promise(()=>{}))}(e);return t?(Q(t),t.accessToken||""):""})),Z}async function te(e){const t=await async function(e){return I[S(e)]}(e);if(B(e),t&&t.refreshToken&&e.clientSecret){const o=await N(e,async()=>{if(!t||!t.refreshToken||!e.clientSecret)throw new Error("Trying to refresh tokens without refreshToken or clientSecret");return async function(e,t,o){const n=await(await fetch(`${e}/oauth/token`,{method:"POST",mode:"cors",headers:{"content-type":"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:t,client_secret:o})})).json();return{accessToken:n.access_token,refreshToken:n.refresh_token,errors:n.errors}}(kt(e),t.refreshToken,e.clientSecret)});o&&Q(o)}}function oe(e){return{accessToken:void 0,refreshToken:void 0,errors:[{code:"",status:401,title:e,detail:""}]}}async function ne(e,t,o){const n=await fetch(`${kt(e)}/oauth/token`,{method:"POST",credentials:"include",mode:"cors",headers:{"content-type":"application/json"},redirect:"follow",body:JSON.stringify({subject_token:t,subject_token_type:"urn:ietf:params:oauth:token-type:access_token",grant_type:"urn:ietf:params:oauth:grant-type:token-exchange",purpose:o,redirect_uri:globalThis.location?.href,client_id:e.clientId})});if(200!==n.status)throw await async function(e){const t=await e.text();try{return new lt(JSON.parse(t).errors)}catch{return new lt([{code:"unknown",status:e.status,detail:t,title:"Unknown authentication error"}])}}(n);return(await n.json()).access_token}async function re(e,t){try{return await t()}catch(o){const{retry:n}=await ie({hostConfig:e});if(n)return t();throw o}}function se(){const e=Math.floor(Date.now()/1e3).toString(16);return`${e}${t=40-e.length,h("0123456789abcdef",t)}`;var t}async function ae(e){const{accessCode:t,clientId:n}=e;if(!t||!n)throw new it('A host config with authType set to "anonymous" has to provide both an accessCode and clientId');const r=await async function(e,t){if(!e.accessCode)throw new it('A host config with authType set to "anonymous" has to also provide an accessCode');return D(_(e),t,!1,void 0)}(e,async()=>{const r=kt(e),s=await async function(e){let t;if(o()){const o=_(e);t=O(o,"tracking-code"),t||(t=se()),q(o,"tracking-code",t)}else t=se();return t}(e);return async function(e,t,o,n){const r=await(await fetch(`${e}/oauth/token/anonymous-embed`,{method:"POST",mode:"cors",headers:{"content-type":"application/json"},body:JSON.stringify({eac:t,client_id:o,grant_type:"urn:qlik:oauth:anonymous-embed",tracking_code:n})})).json();return{accessToken:r.access_token,refreshToken:r.refresh_token,errors:r.errors}}(r,t,n,s)});if(!r)return"";if(r.errors)throw new lt(r.errors);return r.accessToken?r.accessToken:""}async function ie({hostConfig:e}){return function(e){const t=_(e);delete I[t],o()&&(x(t,["access-token","refresh-token"]),H(t,["access-token","refresh-token"]))}(e),{preventDefault:!1,retry:!0}}var ce={requiredProps:["clientId","accessCode"],optionalProps:[],getRestCallAuthParams:async function({hostConfig:e}){return{headers:{Authorization:`Bearer ${await ae(e)}`},queryParams:{},credentials:"omit"}},getWebSocketAuthParams:async function({hostConfig:e}){return r()?{headers:{Authorization:`Bearer ${await ae(e)}`}}:{queryParams:{accessToken:await re(e,async()=>ne(e,await ae(e),"websocket"))}}},getWebResourceAuthParams:async function({hostConfig:e}){return{queryParams:{accessToken:await re(e,async()=>ne(e,await ae(e),"websocket"))}}},handleAuthenticationError:ie};var ue={requiredProps:["apiKey"],optionalProps:[],getRestCallAuthParams:function({hostConfig:e}){return Promise.resolve({headers:{Authorization:`Bearer ${e?.apiKey}`},queryParams:{},credentials:"omit"})},getWebSocketAuthParams:async function({hostConfig:e}){if(o())throw new Error("Not supported in browser environment");return Promise.resolve({headers:{Authorization:`Bearer ${e?.apiKey}`}})},handleAuthenticationError:function(){return Promise.resolve({})}},le=class extends Error{status;headers;data;constructor(e,t,o,n){super(e),this.status=t,this.headers=o,this.data=n,this.stack=pe(this.stack)}},fe=class extends Error{contentType;data;constructor(e,t,o){super(e),this.contentType=t,this.data=o,this.stack=pe(this.stack)}};const he=/^.+\/qmfe-api(?:\.js)?:(\d+)(?::\d+)?$/gim,de=e=>{const t=e.match(he);return Boolean(t&&t.length>0)};function pe(e){if(!e)return e;const t=[],o=e.split("\n");o.reverse();for(const e of o){if(de(e))break;t.unshift(e)}return t.join("\n")}function ge(e){return e?Object.entries(e).map(e=>{const[,t]=e;if(void 0!==t)return e.map(e=>encodeURIComponent(decodeURIComponent(e))).join("=")}).filter(Boolean).join("&"):""}const me={};globalThis.__API_CACHE__DO_NOT_USE_OR_YOU_WILL_BE_FIRED=me,globalThis.QlikMain?.INTERNAL__DO_NOT_USE&&(globalThis.QlikMain.INTERNAL__DO_NOT_USE.apiCache=me);function we(e,t,o){if(e?.noCache)return!1;if(!t||void 0===t.value)return!1;if(e?.useCacheIfAfter)return e.useCacheIfAfter.getTime()<=t.lastPulled;const n=Date.now()-t.lastPulled;return"number"==typeof e?.maxCacheAge?n<=e?.maxCacheAge:n<o}function ye({url:e,query:t,headers:o,serializedHostConfig:n}){let r=e;if(t&&Object.keys(t).length>0){const o=ge(t);r=e.includes("?")?r.concat(`&${o}`):r.concat(`?${o}`)}return o&&Object.keys(o).length>0&&(r=r.concat(`+headers=${JSON.stringify(o)}`)),n&&"{}"!==n&&(r=r.concat(`+host-config=${n}`)),r}function ke(e){const t=[];return me[e]&&t.push(me[e]),me[".global"]&&t.push(me[".global"]),t}function be(e,t){const o=Te(t);for(const t in e){const n=Te(t);(o.startsWith(n)||n.startsWith(o))&&delete e[t]}}function Te(e){const t=e.indexOf("?");if(t>=0)return e.substring(0,t);const o=e.indexOf("+headers=");if(o>=0)return e.substring(0,o);const n=e.indexOf("+host-config=");return n>=0?e.substring(0,n):e}function Ce(e){return null==e||e&&(e instanceof Blob||e instanceof Object&&"[object Blob]"===e.toString())||e&&e instanceof ReadableStream||"string"==typeof e?e:JSON.parse(JSON.stringify(e))}function ve(e){return e.then(e=>{const t={data:Ce(e.data),headers:e.headers,status:e.status};return e.next&&(t.next=e.next),e.prev&&(t.prev=e.prev),t})}function Ae(e,t){return"get"!==e&&"GET"!==e&&(!t.endsWith("/api/v1/licenses/allotments")||"post"!==e&&"POST"!==e)}function Pe(e){return e instanceof Error?e.cause?e.message?`${e.message} - ${Pe(e.cause)}`:Pe(e.cause):e.message:String(e)}async function $e(e,t,o,n,r,s,a,i){const{body:c,contentTypeHeader:u,requestOptions:l}=function(e,t){if(!e)return{body:null,contentTypeHeader:{},requestOptions:{}};const o={},n={};let r;switch(t){case"":case"application/json":o["Content-Type"]="application/json",r=JSON.stringify(e);break;case"multipart/form-data":r=function(e){const t="multipart/form-data";if("object"!=typeof e)throw new fe(`Cannot encode ${typeof e} as ${t}, body should be an object.`,t,e);if(Array.isArray(e))throw new fe(`Cannot encode ${typeof e} as ${t}, body should be an object.`,t,e);if(e instanceof FormData)return e;const o=new FormData;return Object.entries(e).forEach(n=>{const[r,s]=n;switch(typeof s){case"boolean":case"number":case"string":o.set(r,`${s}`);break;case"object":if(s instanceof Blob)o.set(r,s);else if(s instanceof Uint8Array){const e=new Blob([s],{type:"application/octet-stream"});o.set(r,e)}else{const e=JSON.stringify(s),t=new Blob([e],{type:"application/json"});o.set(r,t,"")}break;default:throw new fe(`Cannot encode multipart-field "${r}" with value of type ${typeof s}, values must be objects, strings, numbers or boolean.`,t,e)}}),o}(e);break;case"application/octet-stream":o["Content-Type"]=t,n.duplex="half",r=e;break;case"text/plain":if("string"!=typeof e)throw new fe(`Cannot send ${typeof e} as ${t}, body should be a string.`,t,e);o["Content-Type"]=t,r=e;break;default:throw new fe(`Unsupported content-type "${t}", supported are: application/json, multipart/form-data, application/octet-stream and text/plain`,t,e)}return{body:r,contentTypeHeader:o,requestOptions:n}}(o,n??""),f={...u,...s,...r?.headers,...Ee()};!f["User-Agent"]&&i&&(f["User-Agent"]=i);const h={method:e,credentials:a,mode:"cors",headers:f,redirect:await yt(r?.hostConfig)?"manual":"follow",keepalive:r?.keepalive,progress:r?.progress,body:c,...l};let d,p;if(r?.signal)h.signal=r.signal;else if(r?.timeoutMs&&r.timeoutMs>0){const e=new AbortController;d=setTimeout(()=>{e.abort()},r.timeoutMs),h.signal=e.signal}return p=r?.progress?await async function(e,{method:t,headers:o,credentials:n,keepalive:r,body:s,signal:a,progress:i}){const c=new XMLHttpRequest;let u,l;const f=new Promise((e,t)=>{u=e,l=t});if(c.open(t||"GET",e),"object"!=typeof o)throw Error("malformed headers",o);for(const[e,t]of Object.entries(o))c.setRequestHeader(e,t);r&&c.setRequestHeader("Connection","keep-alive"),a&&a.addEventListener("abort",()=>{c.abort(),l()}),c.withCredentials="include"===n,i?.onUpload&&(c.upload.onprogress=e=>{const{loaded:t,total:o,lengthComputable:n}=e;i.onUpload?.({loaded:t,total:n?o:void 0})}),i?.onDownload&&(c.onprogress=e=>{const{loaded:t,total:o,lengthComputable:n}=e;i.onDownload?.({loaded:t,total:n?o:void 0})}),c.onloadend=()=>{const{status:e}=c,t={};for(const e of c.getAllResponseHeaders().split("\r\n")){const[o,n]=e.split(":",2);o&&n&&(t[o]=n)}c.response?u(new Response(c.response,{status:e,headers:t})):u(new Response(void 0,{status:e,headers:t}))};try{const e=s;c.send(e)}catch(e){return Promise.reject(new le(Pe(e),0,new Headers,{}))}return f}(t,h):await async function(e,t){try{return await fetch(e,t)}catch(e){return Promise.reject(new le(Pe(e),0,new Headers,{}))}}(t,h),d&&clearTimeout(d),await async function(e,t){let o;const n=e.headers.get("content-type")?.split(";")[0],r=e.headers.get("content-disposition")?.split(";");if(r&&"attachment"===r[0]){let t="";for(let e=1;e<r.length;e++){const o=r[e].trim();if(0===o.indexOf("filename")){const e=o.indexOf('"'),n=o.lastIndexOf('"');t=o.slice(e+1,n)}}o=Ue(await e.blob(),t)}else switch(n){case"image/png":case"image/jpeg":case"image/x-icon":case"application/offset+octet-stream":case"application/octet-stream":case"application/zip":case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":case"application/pdf":o=Ue(await e.blob());break;case"text/event-stream":o=e.body;break;default:{let n;try{n=await e.text()}catch(o){throw new le(`request to '${t}' failed while reading response body: ${o instanceof Error?o.message:String(o)}`,e.status,e.headers,void 0)}try{o=JSON.parse(n)}catch{o=n}break}}const{status:s,statusText:a,headers:i}=e,c=`request to '${t}' failed with status ${s} ${a}.`;if(s>=300)throw new le(c,s,i,o);if(0===s)throw new le(c,302,i,o);return{status:s,headers:i,data:o}}(p,t)}async function Se({method:e,pathTemplate:t,pathVariables:o,query:n,options:r}){const s=kt(r?.hostConfig),{headers:a,queryParams:i,credentials:c}=await At({hostConfig:r?.hostConfig,method:e}),u=s+function(e,t){let o=e;return t&&Object.keys(t).forEach(e=>{o=o.replace(`{${e}}`,t[e])}),o}(t,o),l=function(e,t){return""!==t?`${e}?${t}`:e}(u,ge({...n,...i})),f=It(r?.hostConfig);return{completeUrl:l,authHeaders:a,credentials:c,cacheKey:ye({url:u,query:n,headers:r?.headers,serializedHostConfig:f})}}function _e(e,t){return Ie(e,t,async()=>{const{authHeaders:o,credentials:n}=await Se(t);return Ie(e,{...t,authHeaders:o,credentials:n,options:{...t.options,noCache:!0}},void 0)})}function Ie(e,t,o){const{method:n,completeUrl:r,body:s,options:a,authHeaders:i,credentials:c,cacheKey:u,contentType:l,userAgent:f}=t,h={method:n,completeUrl:r,cacheKey:u,options:a},d=function(e,t){if(t?.options?.noCache)return;const{method:o,completeUrl:n,cacheKey:r}=t,s=ke(e);if(Ae(o,n))return;let a;for(const e of s)if(r in e){if(a=e[r],a&&void 0!==a.value&&we(t?.options,a,6e5))break;a=void 0}if(!a)return;return a.lastHit=new Date,a.hitCount+=1,a.accessedPaths.add(globalThis.location?globalThis.location.pathname:"node"),ve(a.value)}(e,h);if(d)return d;const p=$e(n,r,s,l,a,i,c,f),g=async function(e,t,o,n){try{return await o}catch(o){const r=o,s=r.data;if(401===r.status||403===r.status&&"CSRF-TOKEN-2"===s?.code||function(e,t){const o=new URL(e,"http://dummy"),n=o.pathname.endsWith("/qps/csrftoken")&&o.searchParams.has("xrfkey");return 301===t||302===t||n&&403===t}(t,r.status)&&await yt(e)){if(globalThis.loggingOut)return qe();const{retry:t,preventDefault:o}=await vt({hostConfig:e,status:r.status,headers:r.headers,errorBody:s,canRetry:!!n});if(t&&n)return n();if(o)return qe()}throw o}}(a?.hostConfig,r,p,o);return function(e,t,o){me[e]||(me[e]={});const{cacheKey:n}=t;if(Ae(t.method,t.completeUrl))return o.then(t=>{const o=ke(e);for(const e of o)be(e,n);return t});const r=me[e],s=o.catch(e=>(delete r[n],Promise.reject(e)));return r[n]={lastPulled:Date.now(),value:s,lastHit:null,hitCount:0,accessedPaths:new Set},ve(s)}(e,h,function(e,{method:t,body:o,options:n,authHeaders:r,credentials:s,value:a}){return a.then(a=>{const i=a.data;if(!i)return a;const c=It(n?.hostConfig),u=i.links?.prev?.href,l=i.links?.next?.href;return u&&(a.prev=a=>_e(e,{method:t,completeUrl:u,body:o,options:a||n,authHeaders:r,credentials:s,cacheKey:ye({url:u,headers:n?.headers,serializedHostConfig:c})})),l&&(a.next=a=>_e(e,{method:t,completeUrl:l,body:o,options:a||n,authHeaders:r,credentials:s,cacheKey:ye({url:l,headers:n?.headers,serializedHostConfig:c})})),a})}(e,{...t,value:g}))}function qe(){return new Promise(()=>{})}function Ee(){if(!o())return{};const e=localStorage.getItem("qmfe-api-service-overrides-header");return e?{"X-Qlik-Overrides":e}:{}}function Ue(e,t){const o=e;return o.download=t?o=>Oe(e,o??t):t=>Oe(e,t),o}async function Oe(e,t){if(o()){const o=document.createElement("a"),n=window.URL.createObjectURL(e);o.href=n,o.download=t,o.click(),window.URL.revokeObjectURL(n)}else{const{writeFileSync:o}=await Promise.resolve().then(function(){return Nt}),n=await e.arrayBuffer();o(t,new Uint8Array(n))}}const Re="qmfe-api/latest";async function je(e,t,n){return(Wt.getInterceptors()||[]).reduce((e,t)=>o=>t(o,e),t=>async function(e,t){if("mock-backend-rest-recorder"===t.options?.hostConfig?.authType)return Promise.resolve(t.options?.hostConfig.recordInvokeFetch(t));if("mock-backend"===t.options?.hostConfig?.authType)return Promise.resolve(t.options?.hostConfig.mockInvokeFetch(t));if(function(e){const t=Rt(e);if(wt(t)){if(0===Object.keys(t).length)throw new it("a host config must be provided when making a cross domain request");if(!t.host)throw new it("A 'host' property must be set in host config when making a cross domain request")}}(t.options?.hostConfig),"noauth"===t.options?.hostConfig?.authType)return console.info("API call blocked: noauth auth module is configured, no API calls should be made"),{status:204,headers:new Headers,data:null};let n;n=t?.userAgent?t.userAgent:o()?`${window.navigator.userAgent} ${Re}`:Re;const{completeUrl:r,authHeaders:s,credentials:a,cacheKey:i}=await Se(t);return _e(e,{...t,method:t.method.toUpperCase(),completeUrl:r,authHeaders:s,credentials:a,cacheKey:i,userAgent:n})}(e,t))(t)}function xe(e){!function(e){me[e]={}}(e)}async function He(e,t){const o=kt(e);let n;n=await yt(e)?"/qps/csrftoken":"/api/v1/csrf-token";const r=async()=>{try{const o=(await je("csrf-token",{method:"get",pathTemplate:n,options:{hostConfig:e,maxCacheAge:5e3,noCache:t}})).headers.get("qlik-csrf-token");return o||""}catch(e){if(404===e.status)return"";throw e}};return t?(Le[o]=r(),Le[o]):(Le[o]=Le[o]||r(),Le[o])}const Le={};function We(e){return!1===e.crossSiteCookies?"same-origin":wt(e)?"include":"same-origin"}async function Ne(e){if("function"==typeof e)return e();if("string"==typeof e){const t=function(e){return globalThis[e]}(e);if("function"!=typeof t)throw new Error(`getAccessToken function "${e}" not found on globalThis. Please make sure it is defined.`);return t()}}var De={requiredProps:[],optionalProps:["webIntegrationId","crossSiteCookies","anonymousMode"],getRestCallAuthParams:async function({hostConfig:e,method:t}){const o={};var n;return"get"!==(n=t)&&"GET"!==n&&(o["qlik-csrf-token"]=await He(e)),e.webIntegrationId&&(o["qlik-web-integration-id"]=e.webIntegrationId),{headers:o,queryParams:{},credentials:We(e)}},getWebSocketAuthParams:async function({hostConfig:e}){if(r()){const t={};return t["qlik-csrf-token"]=await He(e),e.webIntegrationId&&(t["qlik-web-integration-id"]=e.webIntegrationId),{headers:t}}const t={"qlik-csrf-token":await He(e,!0)};return e.webIntegrationId&&(t["qlik-web-integration-id"]=e.webIntegrationId),{queryParams:t}},handleAuthenticationError:async function({hostConfig:e,status:t}){if(function(e){const t=kt(e);delete Le[t],xe("csrf-token")}(e),403===t)return{preventDefault:!1,retry:!0};const o=e.webIntegrationId?`qlik-web-integration-id=${e?.webIntegrationId}&`:"",n=kt(e);return await P(e),globalThis.location.replace(`${n}/login?${o}returnto=${encodeURIComponent(globalThis.location.href)}`),{preventDefault:!0}}};var Be={requiredProps:[],optionalProps:[],getRestCallAuthParams:function(e){return Promise.resolve({headers:{},queryParams:{},credentials:"same-origin"})},getWebSocketAuthParams:function(e){return Promise.resolve({queryParams:{}})},handleAuthenticationError:function(e){return Promise.resolve({})}};var ze={requiredProps:[],optionalProps:[],getRestCallAuthParams:function(){return Promise.resolve({headers:{},queryParams:{},credentials:"same-origin"})},getWebSocketAuthParams:function(){return Promise.resolve({queryParams:{}})},handleAuthenticationError:function(){return Promise.resolve({})}};async function Me(e,t){try{return await t()}catch(o){const{retry:n}=await Qe({hostConfig:e});if(n)return t();throw o}}async function Qe({hostConfig:e}){return e.getAccessToken?(B(e),{preventDefault:!1,retry:!0}):e.performInteractiveLogin?(B(e),{retry:!0}):o()?(await P(e),J(e),{preventDefault:!0}):(await te(e),{preventDefault:!1,retry:!0})}o()&&function(){const e=new URLSearchParams(globalThis.location.search),t=e.get("code")||void 0,o=e.get("state")||void 0;if(e.get("error")){const t=document.createElement("pre");t.innerText=`<code>${JSON.stringify({error:e.get("error"),error_code:e.get("error_code"),error_description:e.get("error_description"),error_detail:e.get("error_detail"),error_uri:e.get("error_uri")})}</code>`,document.body.prepend(t)}const n=L("","client-in-progress");if(n&&t&&o){const e=L(n,"state"),r=L(n,"href");e&&e===o&&r&&(E(n,"code",t),r!==globalThis.location.href&&globalThis.location.replace(r))}}();var Fe={requiredProps:["clientId"],optionalProps:["clientSecret","redirectUri","accessTokenStorage","scope","subject","userId","noCache","getAccessToken","performInteractiveLogin"],getRestCallAuthParams:async function({hostConfig:e}){return{headers:{Authorization:`Bearer ${await ee(e)}`},queryParams:{},credentials:"omit"}},getWebSocketAuthParams:async function({hostConfig:e}){return r()?{headers:{Authorization:`Bearer ${await ee(e)}`}}:{queryParams:{accessToken:await Me(e,async()=>ne(e,await ee(e),"websocket"))}}},getWebResourceAuthParams:async function({hostConfig:e}){return{queryParams:{accessToken:await Me(e,async()=>ne(e,await ee(e),"webresource"))}}},handleAuthenticationError:Qe};var Ke={requiredProps:["reference"],optionalProps:[],getRestCallAuthParams:function(){throw new Error("getRestCallAuthParams should never be called for reference auth module")},getWebSocketAuthParams:function(){throw new Error("getWebSocketAuthParams should never be called for reference auth module")},handleAuthenticationError:function(){throw new Error("handleAuthenticationError should never be called for reference auth module")}};const Je={};function Ge(e){const t=kt(e);return Je[t]=Je[t]||function(){let e="";for(let t=0;t<16;t+=1){const t=Math.floor(62*Math.random());e+=t<10?t:t>9&&t<36?String.fromCharCode(t+55):String.fromCharCode(t+61)}return e}(),Je[t]}var Xe={requiredProps:[],optionalProps:["loginUri","crossSiteCookies","getAccessToken"],getRestCallAuthParams:async function({hostConfig:e}){return{headers:{"X-Qlik-XrfKey":Ge(e)},queryParams:{xrfkey:Ge(e)},credentials:We(e)}},getWebSocketAuthParams:async function({hostConfig:e}){return{queryParams:{xrfkey:Ge(e),"qlik-csrf-token":await He(e,!0)}}},handleAuthenticationError:async function({hostConfig:e}){if(e.loginUri)return await P(e),globalThis.location.replace(e.loginUri.replace("{location}",encodeURIComponent(globalThis.location.href))),{preventDefault:!0};if(e.getAccessToken){const t=await Ne(e.getAccessToken);if(t)return await fetch(`${kt(e)}/qlik-embed/main.js`,{method:"GET",mode:"cors",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},cache:"no-cache"}),{retry:!0}}return{}}};const Ve=new Map;async function Ye(e){let t=function(e){const t=It(e);return Ve.get(t)}(e);if(!t){const o=await Ne(e.getAccessToken);if(!o)throw new Error("Failed to acquire access token");t=(await fetch(`${kt(e)}/qlik-embed/main.js`,{method:"GET",mode:"cors",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`}})).headers.get("Set-Cookie")||void 0,t&&function(e,t){const o=It(e);Ve.set(o,t)}(e,t)}if(!t)throw new Error("Failed to exchange access token for cookie");return t}var Ze={requiredProps:[],optionalProps:["loginUri","crossSiteCookies","getAccessToken"],validateHostConfig:e=>{if("function"==typeof e.getAccessToken)return!0;if("string"==typeof e.getAccessToken){if(!globalThis[e.getAccessToken])throw new it('The "getAccessToken" function name provided does not exist on globalThis.');return!0}throw new it('The "getAccessToken" property must be a function or the name of a globally defined function.')},getRestCallAuthParams:async function({hostConfig:e}){return{queryParams:{xrfkey:Ge(e)},headers:{Cookie:await Ye(e),"X-Qlik-XrfKey":Ge(e)},credentials:We(e)}},getWebSocketAuthParams:async function({hostConfig:e}){return{queryParams:{"qlik-csrf-token":await He(e,!0)},headers:{Cookie:await Ye(e)}}},handleAuthenticationError:async function({hostConfig:e}){return function(e){const t=It(e);Ve.delete(t)}(e),{retry:!0}}};var et={requiredProps:["pfx"],optionalProps:["passphrase","userHeader"],getRestCallAuthParams:function({hostConfig:e}){return Promise.resolve({headers:{},queryParams:{},credentials:"omit",pfxOptions:{pfx:e?.pfx,passphrase:e?.passphrase}})},getWebSocketAuthParams:async function({hostConfig:e}){if(o())throw new Error("Not supported in browser environment");const t=e?.userHeader||"UserDirectory=INTERNAL; UserId=sa_engine";return Promise.resolve({headers:{"X-Qlik-User":t},pfxOptions:{pfx:e?.pfx,passphrase:e?.passphrase||""}})},handleAuthenticationError:function(){return Promise.resolve({})}};const tt={};let ot=Promise.resolve(),nt=!1;function rt(e,t){tt[e.toLowerCase()]=t}async function st(e){const t=Rt(e),o=await at(t);ot&&await ot;let n=function(e){return tt[e.toLowerCase()]}(o);if(n||(ot=(async()=>{n=await async function(e){const t=globalThis[e];if(t){let o;if(o="function"==typeof t?await t():t,o&&o.getRestCallAuthParams&&o.getWebSocketAuthParams&&o.handleAuthenticationError)return o;throw console.error("Not a valid auth module",o),new ct(e)}return Promise.resolve(void 0)}(o),n&&rt(o,n)})(),await ot),!n)throw new ct(o);return n.validateHostConfig?n.validateHostConfig({authType:o,...t}):function(e,{requiredProps:t,optionalProps:o}){const n=[];for(const o of t)e[o]||n.push(o);if(n.length>0)throw new it(`missing required properties in host config; '${n.join("', '")}'`);const r=[...s,...t,...o],a=[];Object.keys(e).forEach(e=>{r.includes(e)||a.push(e)}),a.length>0&&console.warn(`WARNING: unknown properties in host config; '${a.join("', '")}'`)}({authType:o,...t},{requiredProps:n.requiredProps||[],optionalProps:n.optionalProps||[]}),n}async function at(e){return e.authType?e.authType:e.apiKey?"apikey":e.accessCode?"anonymous":e.clientId?"oauth2":e.webIntegrationId?"cookie":e.reference?"reference":e.pfx?"pfx":await yt(e)?"windowscookie":"cookie"}nt||(rt("apikey",ue),rt("cookie",De),rt("none",ze),rt("noauth",Be),rt("oauth2",Fe),rt("anonymous",ce),rt("pfx",et),o()?rt("windowscookie",Xe):rt("windowscookie",Ze),rt("reference",Ke),nt=!0);var it=e("InvalidHostConfigError",class extends Error{constructor(e){super(`Invalid host config: ${e}`),this.name="InvalidHostConfigError"}}),ct=(e("UnexpectedAuthTypeError",class extends Error{constructor(...e){super(`HostConfig is not properly configured. authType is expected to be ${e.map((e,t)=>0===t?`"${e}"`:`or "${e}"`).join(" ")}`),this.name="UnexpectedAuthTypeError"}}),e("InvalidAuthTypeError",class extends Error{constructor(e){super(`Not a valid auth type: ${e}, valid auth types are; '${Object.keys(tt).filter(e=>"qmfeembedframerauthmodule"!==e.toLowerCase()).join("', '")}'`),this.name="InvalidAuthTypeError"}}));function ut({title:e,detail:t,code:o,status:n}){return t?`${e} - ${t} (Status: ${n}, Code: ${o})`:`${e} (Status: ${n}, Code: ${o})`}var lt=e("AuthorizationError",class extends Error{errors;constructor(e){if("object"!=typeof e)return void super("Unknown error");const t=Array.isArray(e)?e:[e];super(t.map(ut).join(", ")),this.errors=t}});const ft=new Map;let ht,dt="";function pt(e){const t=y(e);let o=ft.get(t);return o||(o={listeners:new Set},ft.set(t,o)),o}function gt(e,t){if(e===ht&&t.message===dt)return;ht=e,dt=t.message;let o=!1;const n=pt(e);for(const e of n.listeners)try{o=!0,e(t)}catch(e){console.warn("Error in auth error listener",e)}if(e.onAuthFailed)try{o=!0,e.onAuthFailed(t)}catch(e){console.warn("Error in onAuthFailed callback",e)}o||console.error(t.message)}function mt(e){return at(e)}function wt(e){if(!globalThis.location?.origin)return!0;const t=Rt(e);if(0===Object.keys(t).length)return!1;try{return new URL(kt(t)).origin!==globalThis.location.origin}catch{}return!1}async function yt(e){const t=Rt(e);return"boolean"==typeof t.forceIsWindows?t.forceIsWindows:!(t.host?.endsWith(".qlik-stage.com")||t.host?.endsWith(".qlikcloud.com")||t.host?.endsWith(".qlikcloudgov.com"))&&("cookie"!==t.authType&&("windowscookie"===t.authType||(await i({hostConfig:e})).isWindows))}function kt(e){const t=Rt(e)?.host?.trim();let o;for(o=t?t.toLowerCase().startsWith("https://")||t.toLowerCase().startsWith("http://")?t:`https://${t}`:"";"/"===o[o.length-1];)o=o.substring(0,o.length-1);return o}function bt(e){const t=Rt(e)?.host;let o;for(o=t?t.toLowerCase().startsWith("https://")||t.toLowerCase().startsWith("http://")?t:`https://${t}`:globalThis.location.origin;"/"===o[o.length-1];)o=o.substring(0,o.length-1);return o.replace(Ut,"ws")}async function Tt(e){const t=Rt(e.hostConfig);try{return await(await st(t)).getWebSocketAuthParams({...e,hostConfig:t})}catch(e){throw gt(t,Ot(e)),e}}async function Ct(e){const t=Rt(e.hostConfig);try{return await((await st(t)).getWebResourceAuthParams?.({...e,hostConfig:t}))||{queryParams:{}}}catch(e){throw gt(t,Ot(e)),e}}async function vt(e){const t=Rt(e.hostConfig),o=await(await st(t)).handleAuthenticationError({...e,hostConfig:t}),n=e.canRetry&&o.retry,r=o.preventDefault;if(!n&&!r){const{status:o,errorBody:n}=e;gt(t,function({errorBody:e,status:t}){const o=e;return"object"==typeof o?.errors?{message:new lt(o?.errors).message}:{message:`HTTP ${t}`}}({status:o,errorBody:n}))}return o}async function At(e){const t=Rt(e.hostConfig);try{return await(await st(t)).getRestCallAuthParams({...e,hostConfig:t})}catch(e){throw gt(t,Ot(e)),e}}function Pt(e,t){rt(e,t)}function $t(e){!function(e){b("default",e||{})}(e)}function St(e,t){b(e,t)}function _t(e){!function(e){k.has(e)?k.delete(e):console.warn(`unregisterHostConfig: Host config with name "${e}" not found.`)}(e)}function It(e){return y(e)}function qt(e){return function(e){const t=e||p,o=y(t);let n=g.get(o);return n||(n=m(Rt(t)),g.set(o,n)),n}(e)}globalThis.loggingOut=!1;const Et=e("logout",()=>{globalThis.loggingOut=!0,globalThis.location.href="/logout"}),Ut=/^http/;function Ot(e){return{message:e.message||"Unknown error"}}function Rt(e){if(e?.reference){const t=T(e.reference);if(!t)throw new it(`Host config with name "${e.reference}" not found.`);return t}return e&&Object.keys(e).length>0?e:C()}function jt(){return C()}function xt(e,t){return function(e,t){const o=pt(e);return o.listeners.add(t),()=>{o.listeners.delete(t)}}(e,t)}function Ht(e,t){return function(e,t){const o=A(e);return o.redirectRequestedListeners.add(t),()=>{o.redirectRequestedListeners.delete(t)}}(e,t)}function Lt(e,t){return function(e,t){const o=A(e);return o.redirectStartedListeners.add(t),()=>{o.redirectStartedListeners.delete(t)}}(e,t)}let Wt;Wt=function(){const e=[...Wt?.getInterceptors()||[]];return{addInterceptor:t=>(e.push(t),t),removeInterceptor:t=>{const o=e.indexOf(t);let n;return-1!==o&&(n=e.splice(o,1)[0]),n||null},getInterceptors:()=>e}}();e("default",{determineAuthType:mt,getDefaultHostConfig:jt,getRestCallAuthParams:At,getWebResourceAuthParams:Ct,getWebSocketAuthParams:Tt,handleAuthenticationError:vt,isHostCrossOrigin:wt,isWindows:yt,logout:Et,registerAuthModule:Pt,registerHostConfig:St,serializeHostConfig:It,setDefaultHostConfig:$t,toValidLocationUrl:kt,toValidWebsocketLocationUrl:bt,unregisterHostConfig:_t,normalizeHostConfig:qt,onFatalAuthError:xt,onPageRedirectRequested:Ht,onPageRedirectStarted:Lt});var Nt=Object.freeze({__proto__:null})}}});
8
- //# sourceMappingURL=auth-Cndp79dH-Bm44mhxi.js.map
7
+ System.register(["./index-EMxkNo4T.js"],function(e){"use strict";var t,o,n,r;return{setters:[function(e){t=e.s,o=e.i,n=e.c,r=e.a}],execute:function(){e({determineAuthType:mt,getAccessToken:async function(e){const t=(await At({method:"GET",...e})).headers?.Authorization;if(0===t.indexOf("Bearer "))return t.substring(7);throw new Error("Unknown format of authorization header returned by remote auth module")},getDefaultHostConfig:jt,getRestCallAuthParams:At,getWebResourceAuthParams:Ct,getWebSocketAuthParams:Tt,handleAuthenticationError:vt,isHostCrossOrigin:wt,isWindows:yt,normalizeHostConfig:qt,onFatalAuthError:xt,onPageRedirectRequested:Ht,onPageRedirectStarted:Lt,registerAuthModule:Pt,registerHostConfig:St,serializeHostConfig:It,setDefaultHostConfig:$t,toValidLocationUrl:kt,toValidWebsocketLocationUrl:bt,unregisterHostConfig:_t});const s=["authType","autoRedirect","authRedirectUserConfirmation","embedRuntimeUrl","host","onAuthFailed"],a=["apikey","oauth2","cookie","windowscookie","reference","anonymous","pfx"],i=async(e={})=>{const t=Rt(e.hostConfig);if("mock-backend-rest-recorder"===t.authType)return t.recordGetPlatform();if("mock-backend"===t?.authType)return t.mockGetPlatform();if("noauth"===t?.authType)return f({isUnknown:!0});let n=o()?window.QlikMain?.PRODUCT_INFO:void 0;if(!n){const{data:t,status:o}=await u(e);if(n=t,404===o)return f({isUnknown:!0});if(!n||o<=399&&o>=300)return f({isQSE:!0,isWindows:!0})}const r=(n.composition?.deploymentType||"").toLowerCase();return"qliksenseserver"===r?f({isQSE:!0,isWindows:!0,meta:l(n)}):"qliksensedesktop"===r?f({isQSD:!0,isWindows:!0,meta:l(n)}):"qliksensemobile"===r?f({isQSE:!0,isWindows:!0,meta:l(n)}):"cloud-console"===r?f({isCloud:!0,isCloudConsole:!0,meta:l(n)}):"fedramp"===n.composition?.provider?f({isCloud:!0,isQCG:!0,meta:l(n)}):f({isCloud:!0,isQCS:!0,meta:l(n)})},c={};const u=async({hostConfig:e,noCache:t}={})=>{const o=`${kt(e)}/resources/autogenerated/product-info.json`;try{if(!(o in c)){const e={};globalThis.QlikMain?.resourceNeedsCredentials(o)&&(e.credentials="include");const t=fetch(o,e).then(async e=>e.ok?{data:await e.json(),status:e.status}:{data:void 0,status:e.status});c[o]=t}const e=await c[o];return(e.status>=400||!e.data)&&delete c[o],e}catch{return delete c[o],{data:void 0,status:500}}finally{t&&delete c[o]}},l=e=>{const t=e.externalUrls;if(!t)return;const o=e.composition?.productName??"Qlik",n=e.composition?.releaseLabel||"-",r="-"===n?o:`${o} (${n})`;return{productId:e.composition?.senseId??"qlik",productLabel:r,version:e.composition?.version,urls:{personalHelpBaseUrl:t.personalHelpBaseUrl,personalUpgradeBase:t.personalUpgradeBase,personalUpgradeUrl:t.personalUpgradeUrl,serverHelpBaseUrl:t.serverHelpBaseUrl,qlikWebPageUrl:t.qlikWebPageUrl}}},f=e=>({isCloud:!1,isQCS:!1,isQCG:!1,isCloudConsole:!1,isWindows:!1,isQSE:!1,isQSD:!1,isUnknown:!1,...e});function h(e,t){const o=new Uint8Array(t);globalThis.crypto.getRandomValues(o);let n="";for(let r=0;r<t;r++)n+=e[o[r]%e.length];return n}function d(e){return h("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-",e)}const p={},g=new Map;function m(e){const t=n(e)||{};return t.host&&(t.host=kt(t)),o()&&kt(t)===window.location.origin&&delete t.host,t.authType&&a.includes(t.authType)&&delete t.authType,t}function w(e,t){if("function"!=typeof t)return t}function y(e){const o=t(m(Rt(e)));return JSON.stringify(o,w)}const k=new Map;function b(e,t){const o=t?.reference||null;if(o&&!k.has(o))throw new it(`Host config with reference "${o}" is not registered. Please register it before using it.`);k.has(e)&&console.warn(`registerHostConfig: Host config with name "${e}" is already registered. Overwriting.`),k.set(e,t)}function T(e){return k.get(e)}function C(){return T("default")||{}}const v=new Map;function A(e){const t=y(e);let o=v.get(t);return o||(o={redirectRequestedListeners:new Set,redirectStartedListeners:new Set},v.set(t,o)),o}function P(e){const t=A(e),o=t.redirectRequestedListeners.size>0||e.authRedirectUserConfirmation;return e.autoRedirect||!o?Promise.resolve():"function"==typeof e.authRedirectUserConfirmation?e.authRedirectUserConfirmation().catch(()=>{}):new Promise(e=>{const o=()=>{for(const e of t.redirectStartedListeners)try{e()}catch(e){console.warn(e)}e()};for(const e of t.redirectRequestedListeners)try{e({proceed:o})}catch(e){console.warn(e)}})}const $="qlik-qmfe-api";function S(e){let t=e.clientId+(e.scope?`_${e.scope}`:"_user_default");return e.subject&&(t+=`_${e.subject}`),e.userId&&(t+=`_${e.userId}`),t}function _(e){return`${e.accessCode}_${e.clientId}`}const I={};function q(e,t,o){localStorage.setItem(`${$}-${e}-${t}`,o)}function E(e,t,o){sessionStorage.setItem(`${$}-${e}-${t}`,o)}function U(e,t,o,n){return e.store(`${$}-${t}-${o}`,n)}function O(e,t){return localStorage.getItem(`qlik-qmfe-api-${e}-${t}`)||void 0}function R(e,t){return sessionStorage.getItem(`qlik-qmfe-api-${e}-${t}`)||void 0}function j(e,t,o){return e.get(`${$}-${t}-${o}`)}function x(e,t){t.forEach(t=>localStorage.removeItem(`${$}-${e}-${t}`))}function H(e,t){t.forEach(t=>sessionStorage.removeItem(`${$}-${e}-${t}`))}function L(e,t){const o=`${$}-${e}-${t}`,n=sessionStorage.getItem(o)||void 0;return sessionStorage.removeItem(o),n}function W(e){return"object"==typeof e&&null!==e&&"function"==typeof e.store&&"function"==typeof e.get&&"function"==typeof e.delete}async function N(e,t){if(!e.clientId)throw new it('A host config with authType set to "oauth2" has to also provide a clientId');return D(S(e),t,e.noCache,e.accessTokenStorage)}async function D(e,t,o,n){return o?t():(I[e]=I[e]||(async()=>{let o=await async function(e,t){let o,n;if("local"===t?(o=O(e,"access-token"),n=O(e,"refresh-token")):"session"===t?(o=R(e,"access-token"),n=R(e,"refresh-token")):W(t)&&(o=await j(t,e,"access-token"),n=await j(t,e,"refresh-token")),o)return{accessToken:o,refreshToken:n}}(e,n);return o||(o=await t(),"local"===n&&o?(o.accessToken&&q(e,"access-token",o.accessToken),o.refreshToken&&q(e,"refresh-token",o.refreshToken)):"session"===n&&o?(o.accessToken&&E(e,"access-token",o.accessToken),o.refreshToken&&E(e,"refresh-token",o.refreshToken)):W(n)&&o&&(o.accessToken&&await U(n,e,"access-token",o.accessToken),o.refreshToken&&await U(n,e,"refresh-token",o.refreshToken)),o)})(),I[e])}function B(e){const t=S(e);delete I[t],o()&&(x(t,["access-token","refresh-token"]),H(t,["access-token","refresh-token"])),W(e.accessTokenStorage)&&function(e,t,o){Promise.all(o.map(o=>e.delete(`${$}-${t}-${o}`)))}(e.accessTokenStorage,t,["access-token","refresh-token"])}function z(e){if("string"==typeof e){const t=globalThis[e];if(!t)throw new Error(`No such function: ${e}`);return t}return e}function M(e){return globalThis[e]}function Q(e){if(e.errors)throw new lt(e.errors)}function F(e){const t=Object.keys(e);return t.sort(),t.map(t=>`${t}=${e[t]}`).join("&")}async function K(e){const t=(new TextEncoder).encode(e),n=await globalThis.crypto.subtle.digest("SHA-256",t);return function(e){let t;if(o()){const o=String.fromCharCode.apply(null,e);t=btoa(o)}else{if(!r())throw new Error("Environment not supported for oauth2 authentication");t=Buffer.from(e).toString("base64")}return t}(Array.from(new Uint8Array(n))).replaceAll(/\+/g,"-").replaceAll(/\//g,"_").replace(/=+$/,"")}async function J(e){const t=e.clientId||"",o=kt(e),n=d(128),r=d(43),s=await K(n),a=e.redirectUri||globalThis.location.href,i=S(e);B(e),E(i,"state",r),E(i,"verifier",n),E(i,"href",globalThis.location.href),E("","client-in-progress",i);const c=`${o}/oauth/authorize?${F({response_type:"code",client_id:t,redirect_uri:a,scope:e.scope||"user_default",state:r,code_challenge:s,code_challenge_method:"S256"})}`;globalThis.location.replace(c)}async function G(e,t,o,n){try{const r=await(await fetch(`${kt(e)}/oauth/token`,{method:"POST",credentials:"include",mode:"cors",headers:{"content-type":"application/json"},redirect:"follow",body:JSON.stringify({grant_type:"authorization_code",scope:e.scope||"user_default",...t?{code:t}:{},redirect_uri:n||globalThis.location.href,...o?{code_verifier:o}:{},client_id:e.clientId})})).json();return Q(r),{accessToken:r.access_token,refreshToken:r.refresh_token,errors:r.errors}}catch(e){return console.error(e),new Promise(()=>{})}}function X(e,t,o,n,r){const s={client_id:e,client_secret:t,scope:o};return n?{...s,grant_type:"urn:qlik:oauth:user-impersonation",user_lookup:{field:"subject",value:n}}:r?{...s,grant_type:"urn:qlik:oauth:user-impersonation",user_lookup:{field:"userId",value:r}}:{...s,grant_type:"client_credentials"}}async function V(e){const{clientId:t,clientSecret:o,performInteractiveLogin:n}=e;if(!t||!o&&!n)throw new it('A host config with authType set to "oauth2" has to provide a clientId and a clientSecret or a performInteractiveLogin function');return await N(e,async()=>{if(e.performInteractiveLogin)return Y(e);if(!e.clientId||!e.clientSecret)throw new it('A host config with authType set to "oauth2" has to provide a clientId and a clientSecret');return async function(e,t,o,n="user_default",r,s){const a=await(await fetch(`${e}/oauth/token`,{method:"POST",mode:"cors",headers:{"content-type":"application/json"},body:JSON.stringify(X(t,o,n,r,s))})).json();return{accessToken:a.access_token,refreshToken:a.refresh_token,errors:a.errors}}(kt(e),e.clientId,e.clientSecret,e.scope,e.subject,e.userId)})}async function Y(e){if(!e.performInteractiveLogin)return oe("No performInteractiveLogin function in hostConfig");let t;try{const o=d(128),n=d(43),{code:r,state:s}=function(e){if("string"==typeof e){let t;try{t=new URL(e)}catch{t=new URL(e,"http://localhost")}const o=new URLSearchParams(t.search);return{code:o.get("code")||"",state:o.get("state")||""}}return e}(await z(e.performInteractiveLogin)({getLoginUrl:async({redirectUri:r})=>(t=r,async function(e,t,o,n){const r=e.clientId||"",s=kt(e),a=await K(n);return`${s}/oauth/authorize?${F({response_type:"code",client_id:r,redirect_uri:t,scope:e.scope||"user_default",state:o,code_challenge:a,code_challenge_method:"S256"})}`}(e,r,n,o))}));return t?n!==s?oe("State returned by custom interactive login function does not match original"):r?await G(e,r,o,t):oe("No code found in response from custom interactive login function"):oe("No redirect uri provided")}catch(e){return{accessToken:void 0,refreshToken:void 0,errors:[{code:"",status:401,title:"Could not perform custom interactive login",detail:String(e)}]}}}!function(e,t){const o=globalThis.location?.hostname?.toLowerCase(),n="localhost"===o,r=o?.endsWith(".qlik-stage.com");(n||r)&&globalThis.QlikMain&&(void 0===globalThis.QlikMain.INTERNAL__DO_NOT_USE.qix&&(globalThis.QlikMain.INTERNAL__DO_NOT_USE.qix={}),globalThis.QlikMain.INTERNAL__DO_NOT_USE.qix[e]=t)}("clearAllAccessTokens",()=>{console.log("Clearing tokens",I),Object.keys(I).forEach(e=>{console.log("Clearing access tokens for",e),x(e,["access-token","refresh-token"]),H(e,["access-token","refresh-token"])}),function(){for(const e in I)delete I[e]}()});let Z=Promise.resolve("");async function ee(e){if(r()){const t=await V(e);return t?(Q(t),t.accessToken||""):""}return o()&&(Z=Z.then(async()=>{const t=await async function(e){const{clientId:t}=e;if(!t)throw new it('A host config with authType set to "oauth2" has to also provide a clientId');const o=await N(e,async()=>{if(e.getAccessToken)try{return{accessToken:"string"==typeof e.getAccessToken?await M(e.getAccessToken)():await e.getAccessToken(),refreshToken:void 0,errors:void 0}}catch{return oe("Could not fetch access token using custom function")}if(e.performInteractiveLogin)return Y(e);const t=S(e),o=L(t,"code"),n=L(t,"verifier");if(o&&n){const t=await G(e,o,n,e.redirectUri);if(t)return t}});return o||(e.performInteractiveLogin||(await P(e),J(e)),new Promise(()=>{}))}(e);return t?(Q(t),t.accessToken||""):""})),Z}async function te(e){const t=await async function(e){return I[S(e)]}(e);if(B(e),t&&t.refreshToken&&e.clientSecret){const o=await N(e,async()=>{if(!t||!t.refreshToken||!e.clientSecret)throw new Error("Trying to refresh tokens without refreshToken or clientSecret");return async function(e,t,o){const n=await(await fetch(`${e}/oauth/token`,{method:"POST",mode:"cors",headers:{"content-type":"application/json"},body:JSON.stringify({grant_type:"refresh_token",refresh_token:t,client_secret:o})})).json();return{accessToken:n.access_token,refreshToken:n.refresh_token,errors:n.errors}}(kt(e),t.refreshToken,e.clientSecret)});o&&Q(o)}}function oe(e){return{accessToken:void 0,refreshToken:void 0,errors:[{code:"",status:401,title:e,detail:""}]}}async function ne(e,t,o){const n=await fetch(`${kt(e)}/oauth/token`,{method:"POST",credentials:"include",mode:"cors",headers:{"content-type":"application/json"},redirect:"follow",body:JSON.stringify({subject_token:t,subject_token_type:"urn:ietf:params:oauth:token-type:access_token",grant_type:"urn:ietf:params:oauth:grant-type:token-exchange",purpose:o,redirect_uri:globalThis.location?.href,client_id:e.clientId})});if(200!==n.status)throw await async function(e){const t=await e.text();try{return new lt(JSON.parse(t).errors)}catch{return new lt([{code:"unknown",status:e.status,detail:t,title:"Unknown authentication error"}])}}(n);return(await n.json()).access_token}async function re(e,t){try{return await t()}catch(o){const{retry:n}=await ie({hostConfig:e});if(n)return t();throw o}}function se(){const e=Math.floor(Date.now()/1e3).toString(16);return`${e}${t=40-e.length,h("0123456789abcdef",t)}`;var t}async function ae(e){const{accessCode:t,clientId:n}=e;if(!t||!n)throw new it('A host config with authType set to "anonymous" has to provide both an accessCode and clientId');const r=await async function(e,t){if(!e.accessCode)throw new it('A host config with authType set to "anonymous" has to also provide an accessCode');return D(_(e),t,!1,void 0)}(e,async()=>{const r=kt(e),s=await async function(e){let t;if(o()){const o=_(e);t=O(o,"tracking-code"),t||(t=se()),q(o,"tracking-code",t)}else t=se();return t}(e);return async function(e,t,o,n){const r=await(await fetch(`${e}/oauth/token/anonymous-embed`,{method:"POST",mode:"cors",headers:{"content-type":"application/json"},body:JSON.stringify({eac:t,client_id:o,grant_type:"urn:qlik:oauth:anonymous-embed",tracking_code:n})})).json();return{accessToken:r.access_token,refreshToken:r.refresh_token,errors:r.errors}}(r,t,n,s)});if(!r)return"";if(r.errors)throw new lt(r.errors);return r.accessToken?r.accessToken:""}async function ie({hostConfig:e}){return function(e){const t=_(e);delete I[t],o()&&(x(t,["access-token","refresh-token"]),H(t,["access-token","refresh-token"]))}(e),{preventDefault:!1,retry:!0}}var ce={requiredProps:["clientId","accessCode"],optionalProps:[],getRestCallAuthParams:async function({hostConfig:e}){return{headers:{Authorization:`Bearer ${await ae(e)}`},queryParams:{},credentials:"omit"}},getWebSocketAuthParams:async function({hostConfig:e}){return r()?{headers:{Authorization:`Bearer ${await ae(e)}`}}:{queryParams:{accessToken:await re(e,async()=>ne(e,await ae(e),"websocket"))}}},getWebResourceAuthParams:async function({hostConfig:e}){return{queryParams:{accessToken:await re(e,async()=>ne(e,await ae(e),"websocket"))}}},handleAuthenticationError:ie};var ue={requiredProps:["apiKey"],optionalProps:[],getRestCallAuthParams:function({hostConfig:e}){return Promise.resolve({headers:{Authorization:`Bearer ${e?.apiKey}`},queryParams:{},credentials:"omit"})},getWebSocketAuthParams:async function({hostConfig:e}){if(o())throw new Error("Not supported in browser environment");return Promise.resolve({headers:{Authorization:`Bearer ${e?.apiKey}`}})},handleAuthenticationError:function(){return Promise.resolve({})}},le=class extends Error{status;headers;data;constructor(e,t,o,n){super(e),this.status=t,this.headers=o,this.data=n,this.stack=pe(this.stack)}},fe=class extends Error{contentType;data;constructor(e,t,o){super(e),this.contentType=t,this.data=o,this.stack=pe(this.stack)}};const he=/^.+\/qmfe-api(?:\.js)?:(\d+)(?::\d+)?$/gim,de=e=>{const t=e.match(he);return Boolean(t&&t.length>0)};function pe(e){if(!e)return e;const t=[],o=e.split("\n");o.reverse();for(const e of o){if(de(e))break;t.unshift(e)}return t.join("\n")}function ge(e){return e?Object.entries(e).map(e=>{const[,t]=e;if(void 0!==t)return e.map(e=>encodeURIComponent(decodeURIComponent(e))).join("=")}).filter(Boolean).join("&"):""}const me={};globalThis.__API_CACHE__DO_NOT_USE_OR_YOU_WILL_BE_FIRED=me,globalThis.QlikMain?.INTERNAL__DO_NOT_USE&&(globalThis.QlikMain.INTERNAL__DO_NOT_USE.apiCache=me);function we(e,t,o){if(e?.noCache)return!1;if(!t||void 0===t.value)return!1;if(e?.useCacheIfAfter)return e.useCacheIfAfter.getTime()<=t.lastPulled;const n=Date.now()-t.lastPulled;return"number"==typeof e?.maxCacheAge?n<=e?.maxCacheAge:n<o}function ye({url:e,query:t,headers:o,serializedHostConfig:n}){let r=e;if(t&&Object.keys(t).length>0){const o=ge(t);r=e.includes("?")?r.concat(`&${o}`):r.concat(`?${o}`)}return o&&Object.keys(o).length>0&&(r=r.concat(`+headers=${JSON.stringify(o)}`)),n&&"{}"!==n&&(r=r.concat(`+host-config=${n}`)),r}function ke(e){const t=[];return me[e]&&t.push(me[e]),me[".global"]&&t.push(me[".global"]),t}function be(e,t){const o=Te(t);for(const t in e){const n=Te(t);(o.startsWith(n)||n.startsWith(o))&&delete e[t]}}function Te(e){const t=e.indexOf("?");if(t>=0)return e.substring(0,t);const o=e.indexOf("+headers=");if(o>=0)return e.substring(0,o);const n=e.indexOf("+host-config=");return n>=0?e.substring(0,n):e}function Ce(e){return null==e||e&&(e instanceof Blob||e instanceof Object&&"[object Blob]"===e.toString())||e&&e instanceof ReadableStream||"string"==typeof e?e:JSON.parse(JSON.stringify(e))}function ve(e){return e.then(e=>{const t={data:Ce(e.data),headers:e.headers,status:e.status};return e.next&&(t.next=e.next),e.prev&&(t.prev=e.prev),t})}function Ae(e,t){return"get"!==e&&"GET"!==e&&(!t.endsWith("/api/v1/licenses/allotments")||"post"!==e&&"POST"!==e)}function Pe(e){return e instanceof Error?e.cause?e.message?`${e.message} - ${Pe(e.cause)}`:Pe(e.cause):e.message:String(e)}async function $e(e,t,o,n,r,s,a,i){const{body:c,contentTypeHeader:u,requestOptions:l}=function(e,t){if(!e)return{body:null,contentTypeHeader:{},requestOptions:{}};const o={},n={};let r;switch(t){case"":case"application/json":o["Content-Type"]="application/json",r=JSON.stringify(e);break;case"multipart/form-data":r=function(e){const t="multipart/form-data";if("object"!=typeof e)throw new fe(`Cannot encode ${typeof e} as ${t}, body should be an object.`,t,e);if(Array.isArray(e))throw new fe(`Cannot encode ${typeof e} as ${t}, body should be an object.`,t,e);if(e instanceof FormData)return e;const o=new FormData;return Object.entries(e).forEach(n=>{const[r,s]=n;switch(typeof s){case"boolean":case"number":case"string":o.set(r,`${s}`);break;case"object":if(s instanceof Blob)o.set(r,s);else if(s instanceof Uint8Array){const e=new Blob([s],{type:"application/octet-stream"});o.set(r,e)}else{const e=JSON.stringify(s),t=new Blob([e],{type:"application/json"});o.set(r,t,"")}break;default:throw new fe(`Cannot encode multipart-field "${r}" with value of type ${typeof s}, values must be objects, strings, numbers or boolean.`,t,e)}}),o}(e);break;case"application/octet-stream":o["Content-Type"]=t,n.duplex="half",r=e;break;case"text/plain":if("string"!=typeof e)throw new fe(`Cannot send ${typeof e} as ${t}, body should be a string.`,t,e);o["Content-Type"]=t,r=e;break;default:throw new fe(`Unsupported content-type "${t}", supported are: application/json, multipart/form-data, application/octet-stream and text/plain`,t,e)}return{body:r,contentTypeHeader:o,requestOptions:n}}(o,n??""),f={...u,...s,...r?.headers,...Ee()};!f["User-Agent"]&&i&&(f["User-Agent"]=i);const h={method:e,credentials:a,mode:"cors",headers:f,redirect:await yt(r?.hostConfig)?"manual":"follow",keepalive:r?.keepalive,progress:r?.progress,body:c,...l};let d,p;if(r?.signal)h.signal=r.signal;else if(r?.timeoutMs&&r.timeoutMs>0){const e=new AbortController;d=setTimeout(()=>{e.abort()},r.timeoutMs),h.signal=e.signal}return p=r?.progress?await async function(e,{method:t,headers:o,credentials:n,keepalive:r,body:s,signal:a,progress:i}){const c=new XMLHttpRequest;let u,l;const f=new Promise((e,t)=>{u=e,l=t});if(c.open(t||"GET",e),"object"!=typeof o)throw Error("malformed headers",o);for(const[e,t]of Object.entries(o))c.setRequestHeader(e,t);r&&c.setRequestHeader("Connection","keep-alive"),a&&a.addEventListener("abort",()=>{c.abort(),l()}),c.withCredentials="include"===n,i?.onUpload&&(c.upload.onprogress=e=>{const{loaded:t,total:o,lengthComputable:n}=e;i.onUpload?.({loaded:t,total:n?o:void 0})}),i?.onDownload&&(c.onprogress=e=>{const{loaded:t,total:o,lengthComputable:n}=e;i.onDownload?.({loaded:t,total:n?o:void 0})}),c.onloadend=()=>{const{status:e}=c,t={};for(const e of c.getAllResponseHeaders().split("\r\n")){const[o,n]=e.split(":",2);o&&n&&(t[o]=n)}c.response?u(new Response(c.response,{status:e,headers:t})):u(new Response(void 0,{status:e,headers:t}))};try{const e=s;c.send(e)}catch(e){return Promise.reject(new le(Pe(e),0,new Headers,{}))}return f}(t,h):await async function(e,t){try{return await fetch(e,t)}catch(e){return Promise.reject(new le(Pe(e),0,new Headers,{}))}}(t,h),d&&clearTimeout(d),await async function(e,t){let o;const n=e.headers.get("content-type")?.split(";")[0],r=e.headers.get("content-disposition")?.split(";");if(r&&"attachment"===r[0]){let t="";for(let e=1;e<r.length;e++){const o=r[e].trim();if(0===o.indexOf("filename")){const e=o.indexOf('"'),n=o.lastIndexOf('"');t=o.slice(e+1,n)}}o=Ue(await e.blob(),t)}else switch(n){case"image/png":case"image/jpeg":case"image/x-icon":case"application/offset+octet-stream":case"application/octet-stream":case"application/zip":case"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":case"application/pdf":o=Ue(await e.blob());break;case"text/event-stream":o=e.body;break;default:{let n;try{n=await e.text()}catch(o){throw new le(`request to '${t}' failed while reading response body: ${o instanceof Error?o.message:String(o)}`,e.status,e.headers,void 0)}try{o=JSON.parse(n)}catch{o=n}break}}const{status:s,statusText:a,headers:i}=e,c=`request to '${t}' failed with status ${s} ${a}.`;if(s>=300)throw new le(c,s,i,o);if(0===s)throw new le(c,302,i,o);return{status:s,headers:i,data:o}}(p,t)}async function Se({method:e,pathTemplate:t,pathVariables:o,query:n,options:r}){const s=kt(r?.hostConfig),{headers:a,queryParams:i,credentials:c}=await At({hostConfig:r?.hostConfig,method:e}),u=s+function(e,t){let o=e;return t&&Object.keys(t).forEach(e=>{o=o.replace(`{${e}}`,t[e])}),o}(t,o),l=function(e,t){return""!==t?`${e}?${t}`:e}(u,ge({...n,...i})),f=It(r?.hostConfig);return{completeUrl:l,authHeaders:a,credentials:c,cacheKey:ye({url:u,query:n,headers:r?.headers,serializedHostConfig:f})}}function _e(e,t){return Ie(e,t,async()=>{const{authHeaders:o,credentials:n}=await Se(t);return Ie(e,{...t,authHeaders:o,credentials:n,options:{...t.options,noCache:!0}},void 0)})}function Ie(e,t,o){const{method:n,completeUrl:r,body:s,options:a,authHeaders:i,credentials:c,cacheKey:u,contentType:l,userAgent:f}=t,h={method:n,completeUrl:r,cacheKey:u,options:a},d=function(e,t){if(t?.options?.noCache)return;const{method:o,completeUrl:n,cacheKey:r}=t,s=ke(e);if(Ae(o,n))return;let a;for(const e of s)if(r in e){if(a=e[r],a&&void 0!==a.value&&we(t?.options,a,6e5))break;a=void 0}if(!a)return;return a.lastHit=new Date,a.hitCount+=1,a.accessedPaths.add(globalThis.location?globalThis.location.pathname:"node"),ve(a.value)}(e,h);if(d)return d;const p=$e(n,r,s,l,a,i,c,f),g=async function(e,t,o,n){try{return await o}catch(o){const r=o,s=r.data;if(401===r.status||403===r.status&&"CSRF-TOKEN-2"===s?.code||function(e,t){const o=new URL(e,"http://dummy"),n=o.pathname.endsWith("/qps/csrftoken")&&o.searchParams.has("xrfkey");return 301===t||302===t||n&&403===t}(t,r.status)&&await yt(e)){if(globalThis.loggingOut)return qe();const{retry:t,preventDefault:o}=await vt({hostConfig:e,status:r.status,headers:r.headers,errorBody:s,canRetry:!!n});if(t&&n)return n();if(o)return qe()}throw o}}(a?.hostConfig,r,p,o);return function(e,t,o){me[e]||(me[e]={});const{cacheKey:n}=t;if(Ae(t.method,t.completeUrl))return o.then(t=>{const o=ke(e);for(const e of o)be(e,n);return t});const r=me[e],s=o.catch(e=>(delete r[n],Promise.reject(e)));return r[n]={lastPulled:Date.now(),value:s,lastHit:null,hitCount:0,accessedPaths:new Set},ve(s)}(e,h,function(e,{method:t,body:o,options:n,authHeaders:r,credentials:s,value:a}){return a.then(a=>{const i=a.data;if(!i)return a;const c=It(n?.hostConfig),u=i.links?.prev?.href,l=i.links?.next?.href;return u&&(a.prev=a=>_e(e,{method:t,completeUrl:u,body:o,options:a||n,authHeaders:r,credentials:s,cacheKey:ye({url:u,headers:n?.headers,serializedHostConfig:c})})),l&&(a.next=a=>_e(e,{method:t,completeUrl:l,body:o,options:a||n,authHeaders:r,credentials:s,cacheKey:ye({url:l,headers:n?.headers,serializedHostConfig:c})})),a})}(e,{...t,value:g}))}function qe(){return new Promise(()=>{})}function Ee(){if(!o())return{};const e=localStorage.getItem("qmfe-api-service-overrides-header");return e?{"X-Qlik-Overrides":e}:{}}function Ue(e,t){const o=e;return o.download=t?o=>Oe(e,o??t):t=>Oe(e,t),o}async function Oe(e,t){if(o()){const o=document.createElement("a"),n=window.URL.createObjectURL(e);o.href=n,o.download=t,o.click(),window.URL.revokeObjectURL(n)}else{const{writeFileSync:o}=await Promise.resolve().then(function(){return Nt}),n=await e.arrayBuffer();o(t,new Uint8Array(n))}}const Re="qmfe-api/latest";async function je(e,t,n){return(Wt.getInterceptors()||[]).reduce((e,t)=>o=>t(o,e),t=>async function(e,t){if("mock-backend-rest-recorder"===t.options?.hostConfig?.authType)return Promise.resolve(t.options?.hostConfig.recordInvokeFetch(t));if("mock-backend"===t.options?.hostConfig?.authType)return Promise.resolve(t.options?.hostConfig.mockInvokeFetch(t));if(function(e){const t=Rt(e);if(wt(t)){if(0===Object.keys(t).length)throw new it("a host config must be provided when making a cross domain request");if(!t.host)throw new it("A 'host' property must be set in host config when making a cross domain request")}}(t.options?.hostConfig),"noauth"===t.options?.hostConfig?.authType)return console.info("API call blocked: noauth auth module is configured, no API calls should be made"),{status:204,headers:new Headers,data:null};let n;n=t?.userAgent?t.userAgent:o()?`${window.navigator.userAgent} ${Re}`:Re;const{completeUrl:r,authHeaders:s,credentials:a,cacheKey:i}=await Se(t);return _e(e,{...t,method:t.method.toUpperCase(),completeUrl:r,authHeaders:s,credentials:a,cacheKey:i,userAgent:n})}(e,t))(t)}function xe(e){!function(e){me[e]={}}(e)}async function He(e,t){const o=kt(e);let n;n=await yt(e)?"/qps/csrftoken":"/api/v1/csrf-token";const r=async()=>{try{const o=(await je("csrf-token",{method:"get",pathTemplate:n,options:{hostConfig:e,maxCacheAge:5e3,noCache:t}})).headers.get("qlik-csrf-token");return o||""}catch(e){if(404===e.status)return"";throw e}};return t?(Le[o]=r(),Le[o]):(Le[o]=Le[o]||r(),Le[o])}const Le={};function We(e){return!1===e.crossSiteCookies?"same-origin":wt(e)?"include":"same-origin"}async function Ne(e){if("function"==typeof e)return e();if("string"==typeof e){const t=function(e){return globalThis[e]}(e);if("function"!=typeof t)throw new Error(`getAccessToken function "${e}" not found on globalThis. Please make sure it is defined.`);return t()}}var De={requiredProps:[],optionalProps:["webIntegrationId","crossSiteCookies","anonymousMode"],getRestCallAuthParams:async function({hostConfig:e,method:t}){const o={};var n;return"get"!==(n=t)&&"GET"!==n&&(o["qlik-csrf-token"]=await He(e)),e.webIntegrationId&&(o["qlik-web-integration-id"]=e.webIntegrationId),{headers:o,queryParams:{},credentials:We(e)}},getWebSocketAuthParams:async function({hostConfig:e}){if(r()){const t={};return t["qlik-csrf-token"]=await He(e),e.webIntegrationId&&(t["qlik-web-integration-id"]=e.webIntegrationId),{headers:t}}const t={"qlik-csrf-token":await He(e,!0)};return e.webIntegrationId&&(t["qlik-web-integration-id"]=e.webIntegrationId),{queryParams:t}},handleAuthenticationError:async function({hostConfig:e,status:t}){if(function(e){const t=kt(e);delete Le[t],xe("csrf-token")}(e),403===t)return{preventDefault:!1,retry:!0};const o=e.webIntegrationId?`qlik-web-integration-id=${e?.webIntegrationId}&`:"",n=kt(e);return await P(e),globalThis.location.replace(`${n}/login?${o}returnto=${encodeURIComponent(globalThis.location.href)}`),{preventDefault:!0}}};var Be={requiredProps:[],optionalProps:[],getRestCallAuthParams:function(e){return Promise.resolve({headers:{},queryParams:{},credentials:"same-origin"})},getWebSocketAuthParams:function(e){return Promise.resolve({queryParams:{}})},handleAuthenticationError:function(e){return Promise.resolve({})}};var ze={requiredProps:[],optionalProps:[],getRestCallAuthParams:function(){return Promise.resolve({headers:{},queryParams:{},credentials:"same-origin"})},getWebSocketAuthParams:function(){return Promise.resolve({queryParams:{}})},handleAuthenticationError:function(){return Promise.resolve({})}};async function Me(e,t){try{return await t()}catch(o){const{retry:n}=await Qe({hostConfig:e});if(n)return t();throw o}}async function Qe({hostConfig:e}){return e.getAccessToken?(B(e),{preventDefault:!1,retry:!0}):e.performInteractiveLogin?(B(e),{retry:!0}):o()?(await P(e),J(e),{preventDefault:!0}):(await te(e),{preventDefault:!1,retry:!0})}o()&&function(){const e=new URLSearchParams(globalThis.location.search),t=e.get("code")||void 0,o=e.get("state")||void 0;if(e.get("error")){const t=document.createElement("pre");t.innerText=`<code>${JSON.stringify({error:e.get("error"),error_code:e.get("error_code"),error_description:e.get("error_description"),error_detail:e.get("error_detail"),error_uri:e.get("error_uri")})}</code>`,document.body.prepend(t)}const n=L("","client-in-progress");if(n&&t&&o){const e=L(n,"state"),r=L(n,"href");e&&e===o&&r&&(E(n,"code",t),r!==globalThis.location.href&&globalThis.location.replace(r))}}();var Fe={requiredProps:["clientId"],optionalProps:["clientSecret","redirectUri","accessTokenStorage","scope","subject","userId","noCache","getAccessToken","performInteractiveLogin"],getRestCallAuthParams:async function({hostConfig:e}){return{headers:{Authorization:`Bearer ${await ee(e)}`},queryParams:{},credentials:"omit"}},getWebSocketAuthParams:async function({hostConfig:e}){return r()?{headers:{Authorization:`Bearer ${await ee(e)}`}}:{queryParams:{accessToken:await Me(e,async()=>ne(e,await ee(e),"websocket"))}}},getWebResourceAuthParams:async function({hostConfig:e}){return{queryParams:{accessToken:await Me(e,async()=>ne(e,await ee(e),"webresource"))}}},handleAuthenticationError:Qe};var Ke={requiredProps:["reference"],optionalProps:[],getRestCallAuthParams:function(){throw new Error("getRestCallAuthParams should never be called for reference auth module")},getWebSocketAuthParams:function(){throw new Error("getWebSocketAuthParams should never be called for reference auth module")},handleAuthenticationError:function(){throw new Error("handleAuthenticationError should never be called for reference auth module")}};const Je={};function Ge(e){const t=kt(e);return Je[t]=Je[t]||function(){let e="";for(let t=0;t<16;t+=1){const t=Math.floor(62*Math.random());e+=t<10?t:t>9&&t<36?String.fromCharCode(t+55):String.fromCharCode(t+61)}return e}(),Je[t]}var Xe={requiredProps:[],optionalProps:["loginUri","crossSiteCookies","getAccessToken"],getRestCallAuthParams:async function({hostConfig:e}){return{headers:{"X-Qlik-XrfKey":Ge(e)},queryParams:{xrfkey:Ge(e)},credentials:We(e)}},getWebSocketAuthParams:async function({hostConfig:e}){return{queryParams:{xrfkey:Ge(e),"qlik-csrf-token":await He(e,!0)}}},handleAuthenticationError:async function({hostConfig:e}){if(e.loginUri)return await P(e),globalThis.location.replace(e.loginUri.replace("{location}",encodeURIComponent(globalThis.location.href))),{preventDefault:!0};if(e.getAccessToken){const t=await Ne(e.getAccessToken);if(t)return await fetch(`${kt(e)}/qlik-embed/main.js`,{method:"GET",mode:"cors",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${t}`},cache:"no-cache"}),{retry:!0}}return{}}};const Ve=new Map;async function Ye(e){let t=function(e){const t=It(e);return Ve.get(t)}(e);if(!t){const o=await Ne(e.getAccessToken);if(!o)throw new Error("Failed to acquire access token");t=(await fetch(`${kt(e)}/qlik-embed/main.js`,{method:"GET",mode:"cors",credentials:"include",headers:{"Content-Type":"application/json",Authorization:`Bearer ${o}`}})).headers.get("Set-Cookie")||void 0,t&&function(e,t){const o=It(e);Ve.set(o,t)}(e,t)}if(!t)throw new Error("Failed to exchange access token for cookie");return t}var Ze={requiredProps:[],optionalProps:["loginUri","crossSiteCookies","getAccessToken"],validateHostConfig:e=>{if("function"==typeof e.getAccessToken)return!0;if("string"==typeof e.getAccessToken){if(!globalThis[e.getAccessToken])throw new it('The "getAccessToken" function name provided does not exist on globalThis.');return!0}throw new it('The "getAccessToken" property must be a function or the name of a globally defined function.')},getRestCallAuthParams:async function({hostConfig:e}){return{queryParams:{xrfkey:Ge(e)},headers:{Cookie:await Ye(e),"X-Qlik-XrfKey":Ge(e)},credentials:We(e)}},getWebSocketAuthParams:async function({hostConfig:e}){return{queryParams:{"qlik-csrf-token":await He(e,!0)},headers:{Cookie:await Ye(e)}}},handleAuthenticationError:async function({hostConfig:e}){return function(e){const t=It(e);Ve.delete(t)}(e),{retry:!0}}};var et={requiredProps:["pfx"],optionalProps:["passphrase","userHeader"],getRestCallAuthParams:function({hostConfig:e}){return Promise.resolve({headers:{},queryParams:{},credentials:"omit",pfxOptions:{pfx:e?.pfx,passphrase:e?.passphrase}})},getWebSocketAuthParams:async function({hostConfig:e}){if(o())throw new Error("Not supported in browser environment");const t=e?.userHeader||"UserDirectory=INTERNAL; UserId=sa_engine";return Promise.resolve({headers:{"X-Qlik-User":t},pfxOptions:{pfx:e?.pfx,passphrase:e?.passphrase||""}})},handleAuthenticationError:function(){return Promise.resolve({})}};const tt={};let ot=Promise.resolve(),nt=!1;function rt(e,t){tt[e.toLowerCase()]=t}async function st(e){const t=Rt(e),o=await at(t);ot&&await ot;let n=function(e){return tt[e.toLowerCase()]}(o);if(n||(ot=(async()=>{n=await async function(e){const t=globalThis[e];if(t){let o;if(o="function"==typeof t?await t():t,o&&o.getRestCallAuthParams&&o.getWebSocketAuthParams&&o.handleAuthenticationError)return o;throw console.error("Not a valid auth module",o),new ct(e)}return Promise.resolve(void 0)}(o),n&&rt(o,n)})(),await ot),!n)throw new ct(o);return n.validateHostConfig?n.validateHostConfig({authType:o,...t}):function(e,{requiredProps:t,optionalProps:o}){const n=[];for(const o of t)e[o]||n.push(o);if(n.length>0)throw new it(`missing required properties in host config; '${n.join("', '")}'`);const r=[...s,...t,...o],a=[];Object.keys(e).forEach(e=>{r.includes(e)||a.push(e)}),a.length>0&&console.warn(`WARNING: unknown properties in host config; '${a.join("', '")}'`)}({authType:o,...t},{requiredProps:n.requiredProps||[],optionalProps:n.optionalProps||[]}),n}async function at(e){return e.authType?e.authType:e.apiKey?"apikey":e.accessCode?"anonymous":e.clientId?"oauth2":e.webIntegrationId?"cookie":e.reference?"reference":e.pfx?"pfx":await yt(e)?"windowscookie":"cookie"}nt||(rt("apikey",ue),rt("cookie",De),rt("none",ze),rt("noauth",Be),rt("oauth2",Fe),rt("anonymous",ce),rt("pfx",et),o()?rt("windowscookie",Xe):rt("windowscookie",Ze),rt("reference",Ke),nt=!0);var it=e("InvalidHostConfigError",class extends Error{constructor(e){super(`Invalid host config: ${e}`),this.name="InvalidHostConfigError"}}),ct=(e("UnexpectedAuthTypeError",class extends Error{constructor(...e){super(`HostConfig is not properly configured. authType is expected to be ${e.map((e,t)=>0===t?`"${e}"`:`or "${e}"`).join(" ")}`),this.name="UnexpectedAuthTypeError"}}),e("InvalidAuthTypeError",class extends Error{constructor(e){super(`Not a valid auth type: ${e}, valid auth types are; '${Object.keys(tt).filter(e=>"qmfeembedframerauthmodule"!==e.toLowerCase()).join("', '")}'`),this.name="InvalidAuthTypeError"}}));function ut({title:e,detail:t,code:o,status:n}){return t?`${e} - ${t} (Status: ${n}, Code: ${o})`:`${e} (Status: ${n}, Code: ${o})`}var lt=e("AuthorizationError",class extends Error{errors;constructor(e){if("object"!=typeof e)return void super("Unknown error");const t=Array.isArray(e)?e:[e];super(t.map(ut).join(", ")),this.errors=t}});const ft=new Map;let ht,dt="";function pt(e){const t=y(e);let o=ft.get(t);return o||(o={listeners:new Set},ft.set(t,o)),o}function gt(e,t){if(e===ht&&t.message===dt)return;ht=e,dt=t.message;let o=!1;const n=pt(e);for(const e of n.listeners)try{o=!0,e(t)}catch(e){console.warn("Error in auth error listener",e)}if(e.onAuthFailed)try{o=!0,e.onAuthFailed(t)}catch(e){console.warn("Error in onAuthFailed callback",e)}o||console.error(t.message)}function mt(e){return at(e)}function wt(e){if(!globalThis.location?.origin)return!0;const t=Rt(e);if(0===Object.keys(t).length)return!1;try{return new URL(kt(t)).origin!==globalThis.location.origin}catch{}return!1}async function yt(e){const t=Rt(e);return"boolean"==typeof t.forceIsWindows?t.forceIsWindows:!(t.host?.endsWith(".qlik-stage.com")||t.host?.endsWith(".qlikcloud.com")||t.host?.endsWith(".qlikcloudgov.com"))&&("cookie"!==t.authType&&("windowscookie"===t.authType||(await i({hostConfig:e})).isWindows))}function kt(e){const t=Rt(e)?.host?.trim();let o;for(o=t?t.toLowerCase().startsWith("https://")||t.toLowerCase().startsWith("http://")?t:`https://${t}`:"";"/"===o[o.length-1];)o=o.substring(0,o.length-1);return o}function bt(e){const t=Rt(e)?.host;let o;for(o=t?t.toLowerCase().startsWith("https://")||t.toLowerCase().startsWith("http://")?t:`https://${t}`:globalThis.location.origin;"/"===o[o.length-1];)o=o.substring(0,o.length-1);return o.replace(Ut,"ws")}async function Tt(e){const t=Rt(e.hostConfig);try{return await(await st(t)).getWebSocketAuthParams({...e,hostConfig:t})}catch(e){throw gt(t,Ot(e)),e}}async function Ct(e){const t=Rt(e.hostConfig);try{return await((await st(t)).getWebResourceAuthParams?.({...e,hostConfig:t}))||{queryParams:{}}}catch(e){throw gt(t,Ot(e)),e}}async function vt(e){const t=Rt(e.hostConfig),o=await(await st(t)).handleAuthenticationError({...e,hostConfig:t}),n=e.canRetry&&o.retry,r=o.preventDefault;if(!n&&!r){const{status:o,errorBody:n}=e;gt(t,function({errorBody:e,status:t}){const o=e;return"object"==typeof o?.errors?{message:new lt(o?.errors).message}:{message:`HTTP ${t}`}}({status:o,errorBody:n}))}return o}async function At(e){const t=Rt(e.hostConfig);try{return await(await st(t)).getRestCallAuthParams({...e,hostConfig:t})}catch(e){throw gt(t,Ot(e)),e}}function Pt(e,t){rt(e,t)}function $t(e){!function(e){b("default",e||{})}(e)}function St(e,t){b(e,t)}function _t(e){!function(e){k.has(e)?k.delete(e):console.warn(`unregisterHostConfig: Host config with name "${e}" not found.`)}(e)}function It(e){return y(e)}function qt(e){return function(e){const t=e||p,o=y(t);let n=g.get(o);return n||(n=m(Rt(t)),g.set(o,n)),n}(e)}globalThis.loggingOut=!1;const Et=e("logout",()=>{globalThis.loggingOut=!0,globalThis.location.href="/logout"}),Ut=/^http/;function Ot(e){return{message:e.message||"Unknown error"}}function Rt(e){if(e?.reference){const t=T(e.reference);if(!t)throw new it(`Host config with name "${e.reference}" not found.`);return t}return e&&Object.keys(e).length>0?e:C()}function jt(){return C()}function xt(e,t){return function(e,t){const o=pt(e);return o.listeners.add(t),()=>{o.listeners.delete(t)}}(e,t)}function Ht(e,t){return function(e,t){const o=A(e);return o.redirectRequestedListeners.add(t),()=>{o.redirectRequestedListeners.delete(t)}}(e,t)}function Lt(e,t){return function(e,t){const o=A(e);return o.redirectStartedListeners.add(t),()=>{o.redirectStartedListeners.delete(t)}}(e,t)}let Wt;Wt=function(){const e=[...Wt?.getInterceptors()||[]];return{addInterceptor:t=>(e.push(t),t),removeInterceptor:t=>{const o=e.indexOf(t);let n;return-1!==o&&(n=e.splice(o,1)[0]),n||null},getInterceptors:()=>e}}();e("default",{determineAuthType:mt,getDefaultHostConfig:jt,getRestCallAuthParams:At,getWebResourceAuthParams:Ct,getWebSocketAuthParams:Tt,handleAuthenticationError:vt,isHostCrossOrigin:wt,isWindows:yt,logout:Et,registerAuthModule:Pt,registerHostConfig:St,serializeHostConfig:It,setDefaultHostConfig:$t,toValidLocationUrl:kt,toValidWebsocketLocationUrl:bt,unregisterHostConfig:_t,normalizeHostConfig:qt,onFatalAuthError:xt,onPageRedirectRequested:Ht,onPageRedirectStarted:Lt});var Nt=Object.freeze({__proto__:null})}}});
8
+ //# sourceMappingURL=auth-Cndp79dH-xoUlzOe9.js.map