UNPKG

@descope/web-js-sdk

Version:
3 lines 52.1 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Descope=t()}(this,(function(){"use strict";var e=function(){return e=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e},e.apply(this,arguments)};function t(e,t){var n={};for(var o in e)Object.prototype.hasOwnProperty.call(e,o)&&t.indexOf(o)<0&&(n[o]=e[o]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(o=Object.getOwnPropertySymbols(e);r<o.length;r++)t.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(e,o[r])&&(n[o[r]]=e[o[r]])}return n}"function"==typeof SuppressedError&&SuppressedError;class n extends Error{}function o(e){let t=e.replace(/-/g,"+").replace(/_/g,"/");switch(t.length%4){case 0:break;case 2:t+="==";break;case 3:t+="=";break;default:throw new Error("base64 string is not of the correct length")}try{return function(e){return decodeURIComponent(atob(e).replace(/(.)/g,((e,t)=>{let n=t.charCodeAt(0).toString(16).toUpperCase();return n.length<2&&(n="0"+n),"%"+n})))}(t)}catch(e){return atob(t)}}function r(e,t){if("string"!=typeof e)throw new n("Invalid token specified: must be a string");t||(t={});const r=!0===t.header?0:1,i=e.split(".")[r];if("string"!=typeof i)throw new n(`Invalid token specified: missing part #${r+1}`);let s;try{s=o(i)}catch(e){throw new n(`Invalid token specified: invalid base64 for part #${r+1} (${e.message})`)}try{return JSON.parse(s)}catch(e){throw new n(`Invalid token specified: invalid json for part #${r+1} (${e.message})`)}}n.prototype.name="InvalidTokenError";const i="3.2.0",s="undefined"!=typeof window,a=Math.pow(2,31)-1,c=`https://descopecdn.com/npm/oidc-client-ts@${i}/dist/browser/oidc-client-ts.min.js`,l=`https://cdn.jsdelivr.net/npm/oidc-client-ts@${i}/dist/browser/oidc-client-ts.min.js`;const d=["/v1/auth/refresh","/v1/auth/try-refresh","/v1/auth/me","/v1/auth/me/tenants","/v1/auth/me/history"];let u;const p=e=>{try{return r(e).exp}catch(e){return null}},g=e=>{const{refresh_expire_in:t,refresh_token:n}=e;return t?Math.floor(Date.now()/1e3)+t:p(n)},h=e=>{const{expires_in:t,expires_at:n,access_token:o}=e;return n||(t?Math.floor(Date.now()/1e3)+t:o?p(o):void 0)},v=e=>{const{access_token:n,id_token:o,refresh_token:r,refresh_expire_in:i}=e,s=t(e,["access_token","id_token","refresh_token","refresh_expire_in"]);return Object.assign({sessionJwt:e.sessionJwt||n,idToken:o,refreshJwt:e.refreshJwt||r,sessionExpiration:e.sessionExpiration||h(e),cookieExpiration:e.cookieExpiration||g(e)},s)},f=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,o)=>{var r;return n[o]=[].concat((null===(r=e.hooks)||void 0===r?void 0:r[o])||[]).concat((null==t?void 0:t[o])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},w=async e=>{if(!(null==e?void 0:e.ok))return{};const t=await(null==e?void 0:e.clone().json()),n=(null==t?void 0:t.authInfo)||t||{};return v(n)},m=()=>s&&!!window.descopeBridge,y=(e,t)=>{if(!((null==t?void 0:t.status)>=400&&(null==t?void 0:t.status)<500))return!1;const n=(null==e?void 0:e.path)||"";return d.includes(n)},b=void 0!==u||s&&void 0!==window.localStorage,I=(e,t)=>{var n,o;return null===(o=null===(n=u||s&&window.localStorage)||void 0===n?void 0:n.setItem)||void 0===o?void 0:o.call(n,e,t)},k=e=>{var t,n;return null===(n=null===(t=u||s&&window.localStorage)||void 0===t?void 0:t.getItem)||void 0===n?void 0:n.call(t,e)},O=e=>{var t,n;return null===(n=null===(t=u||s&&window.localStorage)||void 0===t?void 0:t.removeItem)||void 0===n?void 0:n.call(t,e)},j=e=>{var t,n,o,r,i;return null!==(i=null!==(n=null===(t=null==u?void 0:u.key)||void 0===t?void 0:t.call(u,e))&&void 0!==n?n:s&&(null===(r=null===(o=window.localStorage)||void 0===o?void 0:o.key)||void 0===r?void 0:r.call(o,e)))&&void 0!==i?i:null};var S={accessKey:{exchange:"/v1/auth/accesskey/exchange"},otp:{verify:"/v1/auth/otp/verify",signIn:"/v1/auth/otp/signin",signUp:"/v1/auth/otp/signup",update:{email:"/v1/auth/otp/update/email",phone:"/v1/auth/otp/update/phone"},signUpOrIn:"/v1/auth/otp/signup-in"},magicLink:{verify:"/v1/auth/magiclink/verify",signIn:"/v1/auth/magiclink/signin",signUp:"/v1/auth/magiclink/signup",update:{email:"/v1/auth/magiclink/update/email",phone:"/v1/auth/magiclink/update/phone"},signUpOrIn:"/v1/auth/magiclink/signup-in"},enchantedLink:{verify:"/v1/auth/enchantedlink/verify",signIn:"/v1/auth/enchantedlink/signin",signUp:"/v1/auth/enchantedlink/signup",session:"/v1/auth/enchantedlink/pending-session",update:{email:"/v1/auth/enchantedlink/update/email"},signUpOrIn:"/v1/auth/enchantedlink/signup-in"},oauth:{start:"/v1/auth/oauth/authorize",exchange:"/v1/auth/oauth/exchange",startNative:"v1/auth/oauth/native/start",finishNative:"v1/auth/oauth/native/finish",oneTap:{getOneTapClientId:"/v1/auth/onetap/clientid/{provider}",exchangeOneTapIDToken:"/v1/auth/onetap/idtoken/exchange",verifyOneTapIDToken:"/v1/auth/onetap/idtoken/verify"}},outbound:{connect:"/v1/outbound/oauth/connect"},saml:{start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},totp:{verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/auth/totp/update"},notp:{signIn:"/v1/auth/notp/whatsapp/signin",signUp:"/v1/auth/notp/whatsapp/signup",signUpOrIn:"/v1/auth/notp/whatsapp/signup-in",session:"/v1/auth/notp/pending-session"},webauthn:{signUp:{start:"/v1/auth/webauthn/signup/start",finish:"/v1/auth/webauthn/signup/finish"},signIn:{start:"/v1/auth/webauthn/signin/start",finish:"/v1/auth/webauthn/signin/finish"},signUpOrIn:{start:"/v1/auth/webauthn/signup-in/start"},update:{start:"v1/auth/webauthn/update/start",finish:"/v1/auth/webauthn/update/finish"}},password:{signUp:"/v1/auth/password/signup",signIn:"/v1/auth/password/signin",sendReset:"/v1/auth/password/reset",update:"/v1/auth/password/update",replace:"/v1/auth/password/replace",policy:"/v1/auth/password/policy"},refresh:"/v1/auth/refresh",tryRefresh:"/v1/auth/try-refresh",selectTenant:"/v1/auth/tenant/select",logout:"/v1/auth/logout",logoutAll:"/v1/auth/logoutall",me:"/v1/auth/me",myTenants:"/v1/auth/me/tenants",history:"/v1/auth/me/history",flow:{start:"/v1/flow/start",next:"/v1/flow/next"}};const U="<region>",T=`https://api.${U}descope.com`,x=6e5,R="dct",C=()=>{const e={};return{headers(t){const n="function"==typeof t.entries?Object.fromEntries(t.entries()):t;return e.Headers=JSON.stringify(n),this},body(t){return e.Body=t,this},url(t){return e.Url=t.toString(),this},method(t){return e.Method=t,this},title(t){return e.Title=t,this},status(t){return e.Status=t,this},retries(t){return e.Retries=t,this},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}},E=[521,524],P=e=>async(...t)=>{let n=await e(...t);E.includes(n.status)&&(n=await e(...t),n.retries=1);const o=await n.text();return n.text=()=>Promise.resolve(o),n.json=()=>Promise.resolve(JSON.parse(o)),n.clone=()=>n,n},$=(e,t)=>{const n=t||fetch;return n||null==e||e.warn("Fetch is not defined, you will not be able to send http requests, if you are running in a test, make sure fetch is defined globally"),e?async(...t)=>{if(!n)throw Error("Cannot send http request, fetch is not defined, if you are running in a test, make sure fetch is defined globally");e.log((e=>C().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const o=await P(n)(...t);return e[o.ok?"log":"error"](await(async e=>{const t=await e.text();return C().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).retries(e.retries).build()})(o)),o}:P(n)};let _;const D=()=>{if(_)return _;const e=new Date,t=`${e.getUTCFullYear().toString()}-${(e.getUTCMonth()+1).toString().padStart(2,"0")}-${e.getUTCDate().toString().padStart(2,"0")}-${e.getUTCHours().toString().padStart(2,"0")}:${e.getUTCMinutes().toString().padStart(2,"0")}:${e.getUTCSeconds().toString().padStart(2,"0")}:${e.getUTCMilliseconds().toString()}`,n=Math.floor(1e3+9e3*Math.random());return _=`${t}-${n}`,_};var A,L;(L=A||(A={})).get="GET",L.delete="DELETE",L.post="POST",L.put="PUT",L.patch="PATCH";const q=({path:e,baseUrl:t,queryParams:n,projectId:o})=>{const r=o.slice(1,-27);t=t.replace(U,r?r+".":"");let i=e?`${t.replace(/\/$/,"")}/${null==e?void 0:e.replace(/^\//,"")}`:t;if(n){const e=Object.keys(n);e.forEach(((t,o)=>{i=`${i}${0===o?"?":""}${t}=${encodeURIComponent(n[t])}${o===e.length-1?"":"&"}`}))}return i},N=(...e)=>new Headers(e.reduce(((e,t)=>((e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t).forEach((([t,n])=>{e[t]="function"==typeof n?n():n})),e)),{})),J={"Content-Type":"application/json"},K=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},M=(e,t)=>{const n={"x-descope-sdk-session-id":D(),"x-descope-sdk-name":"core-js","x-descope-sdk-version":"2.57.0","x-descope-project-id":e};return t&&(n["x-descope-refresh-cookie-name"]=t),n},V=e=>{try{e=JSON.parse(e)}catch(e){return!1}return"object"==typeof e&&null!==e};var F=e=>{var t;return(({baseUrl:e,projectId:t,baseConfig:n,refreshCookieName:o,logger:r,hooks:i,cookiePolicy:s,fetch:a})=>{const c=e||T,l=$(r,a),d=async e=>{var r;const a=(null==i?void 0:i.beforeRequest)?i.beforeRequest(e):e,{path:d,body:u,headers:p,queryParams:g,method:h,token:v}=a,f=(e=>void 0===e?void 0:JSON.stringify(e))(u),w={headers:N(K(t,v),M(t,o),(null==n?void 0:n.baseHeaders)||{},V(f)?J:{},p),method:h,body:f};null!==s&&(w.credentials=s||"include");const m=await l(q({path:d,baseUrl:c,queryParams:g,projectId:t}),w);if((null==i?void 0:i.afterRequest)&&await i.afterRequest(e,null==m?void 0:m.clone()),null==i?void 0:i.transformResponse){const e=await m.json(),t=((null===(r=m.headers)||void 0===r?void 0:r.get("set-cookie"))||"").split(";").reduce(((e,t)=>{const[n,o]=t.split("=");return Object.assign(Object.assign({},e),{[n.trim()]:o})}),{}),n=Object.assign(Object.assign({},m),{json:()=>Promise.resolve(e),cookies:t});return n.clone=()=>n,i.transformResponse(n)}return m};return{get:(e,{headers:t,queryParams:n,token:o}={})=>d({path:e,headers:t,queryParams:n,body:void 0,method:A.get,token:o}),post:(e,t,{headers:n,queryParams:o,token:r}={})=>d({path:e,headers:n,queryParams:o,body:t,method:A.post,token:r}),patch:(e,t,{headers:n,queryParams:o,token:r}={})=>d({path:e,headers:n,queryParams:o,body:t,method:A.patch,token:r}),put:(e,t,{headers:n,queryParams:o,token:r}={})=>d({path:e,headers:n,queryParams:o,body:t,method:A.put,token:r}),delete:(e,{headers:t,queryParams:n,token:o}={})=>d({path:e,headers:t,queryParams:n,body:void 0,method:A.delete,token:o}),hooks:i,buildUrl:(e,n)=>q({projectId:t,baseUrl:c,path:e,queryParams:n})}})(Object.assign(Object.assign({},e),{hooks:{beforeRequest:t=>{var n;const o=[].concat((null===(n=e.hooks)||void 0===n?void 0:n.beforeRequest)||[]);return null==o?void 0:o.reduce(((e,t)=>t(e)),t)},afterRequest:async(t,n)=>{var o;const r=[].concat((null===(o=e.hooks)||void 0===o?void 0:o.afterRequest)||[]);0!=r.length&&(await Promise.allSettled(null==r?void 0:r.map((e=>e(t,null==n?void 0:n.clone()))))).forEach((t=>{var n;return"rejected"===t.status&&(null===(n=e.logger)||void 0===n?void 0:n.error(t.reason))}))},transformResponse:null===(t=e.hooks)||void 0===t?void 0:t.transformResponse}}))},H=429;function B(e,t,n){var o;let r=z(e);if(t){if(!(null==r?void 0:r.tenants)&&(null==r?void 0:r[R])===t)return(null==r?void 0:r[n])||[];r=null===(o=null==r?void 0:r.tenants)||void 0===o?void 0:o[t]}const i=null==r?void 0:r[n];return Array.isArray(i)?i:[]}function z(e){if("string"!=typeof e||!e)throw new Error("Invalid token provided");return r(e)}function Z(e){const{exp:t}=z(e);return(new Date).getTime()/1e3>t}function G(e){let t=z(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function W(e,t){return B(e,t,"permissions")}function X(e,t){return B(e,t,"roles")}const Y=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function Q(e,t){var n;const o=await e,r={code:o.status,ok:o.ok,response:o},i=await o.clone().json();return o.ok?r.data=i:(r.error=i,o.status===H&&Object.assign(r.error,{retryAfter:Number.parseInt(null===(n=o.headers)||void 0===n?void 0:n.get("retry-after"))||0})),r}function ee(e){var t;return(null===(t=z(e))||void 0===t?void 0:t[R])||""}const te=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),ne=(e,t)=>(n=t)=>t=>{const o=e.filter((e=>e(t)));return!(o.length<e.length)&&(n?n.replace("{val}",t):o.join(" OR "))},oe=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),re=e=>t=>e.test(t),ie=re(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),se=re(/^\+[1-9]{1}[0-9]{3,14}$/),ae=te(ie,'"{val}" is not a valid email'),ce=te(se,'"{val}" is not a valid phone number'),le=te((e=>e.length>=1),"Minimum length is 1");const de=te((e=>"string"==typeof e),"Input is not a string"),ue=te((e=>Array.isArray(e)),"Input is not an array"),pe=te((e=>"boolean"==typeof e),"Input is not a boolean"),ge=te((e=>void 0===e),"Input is defined"),he=ne([de(),ge()],"Input is not a string or undefined"),ve=ne([ue(),pe()],"Input is not an array or boolean"),fe=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>oe(...e).validate(n[t]))),t(...n)),we=e=>[de(`"${e}" must be a string`)],me=e=>[he(`"${e}" must be string or undefined`)],ye=e=>[de(`"${e}" must be a string`),le(`"${e}" must not be empty`)],be=e=>[de(`"${e}" must be a string`),ae()],Ie=e=>[de(`"${e}" must be a string`),ce()],ke=fe(ye("accessKey")),Oe=e=>({exchange:ke(((t,n)=>Q(e.post(S.accessKey.exchange,{loginOptions:n},{token:t}))))}),je=(e,t,n)=>(t.forEach((t=>{const o=t.split(".");let r=o.shift(),i=e;for(;o.length>0;){if(i=i[r],!r||!i)throw Error(`Invalid path "${t}", "${r}" is missing or has no value`);r=o.shift()}if("function"!=typeof i[r])throw Error(`"${t}" is not a function`);const s=i[r];i[r]=n(s)})),e),Se=({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||1e3,1e3),timeoutMs:Math.min(t||x,x)});var Ue,Te;!function(e){e.sms="sms",e.voice="voice",e.whatsapp="whatsapp",e.im="im"}(Ue||(Ue={})),function(e){e.email="email"}(Te||(Te={}));const xe=Object.assign(Object.assign({},Ue),Te);var Re;!function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(Re||(Re={}));const Ce=ye("loginId"),Ee=fe(ye("token")),Pe=fe(Ce),$e=fe(ye("pendingRef")),_e=fe(Ce,be("email")),De=e=>({verify:Ee((t=>Q(e.post(S.enchantedLink.verify,{token:t})))),signIn:Pe(((n,o,r={},i)=>{var{providerId:s}=r,a=t(r,["providerId"]);return Q(e.post(Y(S.enchantedLink.signIn,xe.email),{loginId:n,URI:o,loginOptions:a,providerId:s},{token:i}))})),signUpOrIn:Pe(((n,o,r={})=>{var{providerId:i}=r,s=t(r,["providerId"]);return Q(e.post(Y(S.enchantedLink.signUpOrIn,xe.email),{loginId:n,URI:o,loginOptions:s,providerId:i}))})),signUp:Pe(((n,o,r,i={})=>{var{providerId:s}=i,a=t(i,["providerId"]);return Q(e.post(Y(S.enchantedLink.signUp,xe.email),{loginId:n,URI:o,user:r,loginOptions:a,providerId:s}))})),waitForSession:$e(((t,n)=>new Promise((o=>{const{pollingIntervalMs:r,timeoutMs:i}=Se(n);let s;const a=setInterval((async()=>{const n=await e.post(S.enchantedLink.session,{pendingRef:t});n.ok&&(clearInterval(a),s&&clearTimeout(s),o(Q(Promise.resolve(n))))}),r);s=setTimeout((()=>{o({error:{errorDescription:`Session polling timeout exceeded: ${i}ms`,errorCode:"0"},ok:!1}),clearInterval(a)}),i)})))),update:{email:_e(((t,n,o,r,i)=>Q(e.post(S.enchantedLink.update.email,Object.assign({loginId:t,email:n,URI:o},i),{token:r}))))}}),Ae=fe(ye("flowId")),Le=fe(ye("executionId"),ye("stepId"),ye("interactionId")),qe=e=>({start:Ae(((t,n,o,r,i,s,a,c=!1)=>Q(e.post(S.flow.start,{flowId:t,options:n,conditionInteractionId:o,interactionId:r,componentsVersion:i,flowVersions:s,input:a,isCustomScreen:c})))),next:Le(((t,n,o,r,i,s,a=!1)=>Q(e.post(S.flow.next,{executionId:t,stepId:n,interactionId:o,version:r,componentsVersion:i,input:s,isCustomScreen:a}))))}),Ne=ye("loginId"),Je=fe(ye("token")),Ke=fe(Ne),Me=fe(Ne,Ie("phone")),Ve=fe(Ne,be("email")),Fe=Object.keys(xe).filter((e=>e!==Ue.voice&&e!==Ue.im)),He=e=>({verify:Je((t=>Q(e.post(S.magicLink.verify,{token:t})))),signIn:Fe.reduce(((n,o)=>Object.assign(Object.assign({},n),{[o]:Ke(((n,r,i={},s)=>{var{providerId:a}=i,c=t(i,["providerId"]);return Q(e.post(Y(S.magicLink.signIn,o),{loginId:n,URI:r,loginOptions:c,providerId:a},{token:s}))}))})),{}),signUp:Fe.reduce(((n,o)=>Object.assign(Object.assign({},n),{[o]:Ke(((n,r,i,s={})=>{var{providerId:a}=s,c=t(s,["providerId"]);return Q(e.post(Y(S.magicLink.signUp,o),{loginId:n,URI:r,user:i,loginOptions:c,providerId:a}))}))})),{}),signUpOrIn:Fe.reduce(((n,o)=>Object.assign(Object.assign({},n),{[o]:Ke(((n,r,i={})=>{var{providerId:s}=i,a=t(i,["providerId"]);return Q(e.post(Y(S.magicLink.signUpOrIn,o),{loginId:n,URI:r,loginOptions:a,providerId:s}))}))})),{}),update:{email:Ve(((t,n,o,r,i)=>Q(e.post(S.magicLink.update.email,Object.assign({loginId:t,email:n,URI:o},i),{token:r})))),phone:Object.keys(Ue).filter((e=>e!==Ue.voice)).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Me(((t,o,r,i,s)=>Q(e.post(Y(S.magicLink.update.phone,n),Object.assign({loginId:t,phone:o,URI:r},s),{token:i}))))})),{})}});var Be;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple",e.discord="discord",e.linkedin="linkedin",e.slack="slack"}(Be||(Be={}));const ze=fe(ye("code")),Ze=e=>({start:Object.assign(((t,n,o,r,i)=>Q(e.post(S.oauth.start,o||{},{queryParams:Object.assign(Object.assign({provider:t},n&&{redirectURL:n}),i&&{loginHint:i}),token:r}))),Object.keys(Be).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:(t,o,r,i)=>Q(e.post(S.oauth.start,o||{},{queryParams:Object.assign(Object.assign({provider:n},t&&{redirectURL:t}),i&&{loginHint:i}),token:r}))})),{})),exchange:ze((t=>Q(e.post(S.oauth.exchange,{code:t})))),startNative:(t,n,o)=>Q(e.post(S.oauth.startNative,{provider:t,loginOptions:n,implicit:o})),finishNative:(t,n,o,r,i)=>Q(e.post(S.oauth.finishNative,{provider:t,stateId:n,user:o,code:r,idToken:i})),getOneTapClientId:t=>Q(e.get(S.oauth.oneTap.getOneTapClientId.replace("{provider}",t))),verifyOneTapIDToken:(t,n,o,r)=>Q(e.post(S.oauth.oneTap.verifyOneTapIDToken,{provider:t,idToken:n,nonce:o,loginOptions:r})),exchangeOneTapIDToken:(t,n,o,r)=>Q(e.post(S.oauth.oneTap.exchangeOneTapIDToken,{provider:t,idToken:n,nonce:o,loginOptions:r}))}),Ge=ye("appId"),We=fe(Ge),Xe=e=>({connect:We(((t,n,o)=>{const r=null==n?void 0:n.tenantId,i=null==n?void 0:n.tenantLevel;return null==n||delete n.tenantId,null==n||delete n.tenantLevel,Q(e.post(S.outbound.connect,{appId:t,tenantId:r,tenantLevel:i,options:n},{token:o}))}))}),Ye=ye("loginId"),Qe=fe(Ye,ye("code")),et=fe(Ye),tt=fe(Ye,Ie("phone")),nt=fe(Ye,be("email")),ot=e=>({verify:Object.keys(xe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Qe(((t,o)=>Q(e.post(Y(S.otp.verify,n),{code:o,loginId:t}))))})),{}),signIn:Object.keys(xe).reduce(((n,o)=>Object.assign(Object.assign({},n),{[o]:et(((n,r={},i)=>{var{providerId:s}=r,a=t(r,["providerId"]);return Q(e.post(Y(S.otp.signIn,o),{loginId:n,loginOptions:a,providerId:s},{token:i}))}))})),{}),signUp:Object.keys(xe).reduce(((n,o)=>Object.assign(Object.assign({},n),{[o]:et(((n,r,i={})=>{var{providerId:s}=i,a=t(i,["providerId"]);return Q(e.post(Y(S.otp.signUp,o),{loginId:n,user:r,loginOptions:a,providerId:s}))}))})),{}),signUpOrIn:Object.keys(xe).reduce(((n,o)=>Object.assign(Object.assign({},n),{[o]:et(((n,r={})=>{var{providerId:i}=r,s=t(r,["providerId"]);return Q(e.post(Y(S.otp.signUpOrIn,o),{loginId:n,loginOptions:s,providerId:i}))}))})),{}),update:{email:nt(((t,n,o,r)=>Q(e.post(S.otp.update.email,Object.assign({loginId:t,email:n},r),{token:o})))),phone:Object.keys(Ue).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:tt(((t,o,r,i)=>Q(e.post(Y(S.otp.update.phone,n),Object.assign({loginId:t,phone:o},i),{token:r}))))})),{})}}),rt=fe(ye("tenant")),it=fe(ye("code")),st=e=>({start:rt(((t,n,o,r,i,s,a,c)=>Q(e.post(S.saml.start,o||{},Object.assign({queryParams:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({tenant:t},n&&{redirectURL:n}),i&&{ssoId:i}),s&&{forceAuthn:"true"}),a&&{loginHint:a}),c&&{initiatedEmail:t})},r&&{token:r}))))),exchange:it((t=>Q(e.post(S.saml.exchange,{code:t}))))}),at=ye("loginId"),ct=fe(at,ye("code")),lt=fe(at),dt=fe(at),ut=e=>({signUp:lt(((t,n)=>Q(e.post(S.totp.signUp,{loginId:t,user:n})))),verify:ct(((t,n,o,r)=>Q(e.post(S.totp.verify,{loginId:t,code:n,loginOptions:o},{token:r})))),update:dt(((t,n)=>Q(e.post(S.totp.update,{loginId:t},{token:n}))))}),pt=ye("loginId"),gt=ye("newPassword"),ht=fe(pt,ye("password")),vt=fe(pt),ft=fe(pt,gt),wt=fe(pt,ye("oldPassword"),gt),mt=e=>({signUp:ht(((n,o,r,i={})=>{var{providerId:s}=i,a=t(i,["providerId"]);return Q(e.post(S.password.signUp,{loginId:n,password:o,user:r,loginOptions:a,providerId:s}))})),signIn:ht(((n,o,r={})=>{var{providerId:i}=r,s=t(r,["providerId"]);return Q(e.post(S.password.signIn,{loginId:n,password:o,loginOptions:s,providerId:i}))})),sendReset:vt(((t,n,o)=>Q(e.post(S.password.sendReset,{loginId:t,redirectUrl:n,templateOptions:o})))),update:ft(((t,n,o)=>Q(e.post(S.password.update,{loginId:t,newPassword:n},{token:o})))),replace:wt(((t,n,o)=>Q(e.post(S.password.replace,{loginId:t,oldPassword:n,newPassword:o})))),policy:()=>Q(e.get(S.password.policy))}),yt=we("loginId"),bt=ye("loginId"),It=ye("origin"),kt=fe(bt,It,ye("name")),Ot=fe(bt,It),jt=fe(yt,It),St=fe(bt,It,me("token")),Ut=fe(ye("transactionId"),ye("response")),Tt=e=>({signUp:{start:kt(((t,n,o,r)=>Q(e.post(S.webauthn.signUp.start,{user:{loginId:t,name:o},origin:n,passkeyOptions:r})))),finish:Ut(((t,n)=>Q(e.post(S.webauthn.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:jt(((t,n,o,r,i)=>Q(e.post(S.webauthn.signIn.start,{loginId:t,origin:n,loginOptions:o,passkeyOptions:i},{token:r})))),finish:Ut(((t,n)=>Q(e.post(S.webauthn.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:Ot(((t,n,o)=>Q(e.post(S.webauthn.signUpOrIn.start,{loginId:t,origin:n,passkeyOptions:o}))))},update:{start:St(((t,n,o,r)=>Q(e.post(S.webauthn.update.start,{loginId:t,origin:n,passkeyOptions:r},{token:o})))),finish:Ut(((t,n)=>Q(e.post(S.webauthn.update.finish,{transactionId:t,response:n}))))}}),xt=we("loginId"),Rt=fe(xt),Ct=fe(ye("pendingRef")),Et=e=>({signUpOrIn:Rt(((n,o={})=>{var{providerId:r}=o,i=t(o,["providerId"]);return Q(e.post(S.notp.signUpOrIn,{loginId:n,loginOptions:i,providerId:r}))})),signUp:Rt(((n,o,r={})=>{var{providerId:i}=r,s=t(r,["providerId"]);return Q(e.post(S.notp.signUp,{loginId:n,user:o,providerId:i,loginOptions:s}))})),signIn:Rt(((n,o={},r)=>{var{providerId:i}=o,s=t(o,["providerId"]);return Q(e.post(S.notp.signIn,{loginId:n,loginOptions:s,providerId:i},{token:r}))})),waitForSession:Ct(((t,n)=>new Promise((o=>{const{pollingIntervalMs:r,timeoutMs:i}=Se(n);let s;const a=setInterval((async()=>{const n=await e.post(S.notp.session,{pendingRef:t});n.ok&&(clearInterval(a),s&&clearTimeout(s),o(Q(Promise.resolve(n))))}),r);s=setTimeout((()=>{o({error:{errorDescription:`Session polling timeout exceeded: ${i}ms`,errorCode:"0"},ok:!1}),clearInterval(a)}),i)}))))}),Pt=fe(ye("token")),$t=fe(me("token"));var _t,Dt=fe([(_t=ye("projectId"),te(((e,t)=>n=>oe(...t).validate(((e,t)=>{const n=(Array.isArray(t)?t.join("."):String(t)).replace(/\[\\?("|')?(\w|d)+\\?("|')?\]/g,((e,t,n)=>"."+n)).split("."),o=n.length;let r=0,i=e===Object(e)?e:void 0;for(;null!=i&&r<o;)i=i[n[r++]];return r&&r===o&&void 0!==i?i:void 0})(n,e)))("projectId",_t))())])((e=>{const{projectId:t,logger:n,baseUrl:o,cookiePolicy:r,baseHeaders:i={},refreshCookieName:s,fetch:a}=e;return c=F({baseUrl:o,projectId:t,logger:n,hooks:{get beforeRequest(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.beforeRequest},get afterRequest(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.afterRequest},get transformResponse(){var t;return null===(t=e.hooks)||void 0===t?void 0:t.transformResponse}},cookiePolicy:r,baseConfig:{baseHeaders:i},refreshCookieName:s,fetch:a}),{accessKey:Oe(c),otp:ot(c),magicLink:He(c),enchantedLink:De(c),oauth:Ze(c),outbound:Xe(c),saml:st(c),totp:ut(c),notp:Et(c),webauthn:Tt(c),password:mt(c),flow:qe(c),refresh:$t(((e,t,n,o)=>{const r={};n&&(r.externalToken=n);const i=o?S.tryRefresh:S.refresh;return Q(c.post(i,r,{token:e,queryParams:t}))})),selectTenant:fe([de("tenantId")],[he('"token" must be string or undefined')])(((e,t)=>Q(c.post(S.selectTenant,{tenant:e},{token:t})))),logout:$t((e=>Q(c.post(S.logout,{},{token:e})))),logoutAll:$t((e=>Q(c.post(S.logoutAll,{},{token:e})))),me:$t((e=>Q(c.get(S.me,{token:e})))),myTenants:fe([ve('"tenants" must a string array or a boolean')],[he('"token" must be string or undefined')])(((e,t)=>{const n={};return"boolean"==typeof e?n.dct=e:n.ids=e,Q(c.post(S.myTenants,n,{token:t}))})),history:$t((e=>Q(c.get(S.history,{token:e})))),isJwtExpired:Pt(Z),getTenants:Pt(G),getJwtPermissions:Pt(W),getJwtRoles:Pt(X),getCurrentTenant:Pt(ee),httpClient:c};var c})),At=Object.assign(Dt,{DeliveryMethods:xe});const Lt=(...e)=>{console.debug(...e)},qt=(...e)=>{console.warn(...e)},Nt=(e,t)=>{let n;var o;return t>0?(n=1e3*t,Lt(`Using provided nextRefreshSeconds: ${t}s`)):n=((o=e)?o.getTime()-(new Date).getTime():0)-2e4,n>a&&(Lt(`Timeout is too large (${n}ms), setting it to ${a}ms`),n=a),n}; /*! js-cookie v3.0.5 | MIT */ function Jt(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)e[o]=n[o]}return e}var Kt=function e(t,n){function o(e,o,r){if("undefined"!=typeof document){"number"==typeof(r=Jt({},n,r)).expires&&(r.expires=new Date(Date.now()+864e5*r.expires)),r.expires&&(r.expires=r.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var i="";for(var s in r)r[s]&&(i+="; "+s,!0!==r[s]&&(i+="="+r[s].split(";")[0]));return document.cookie=e+"="+t.write(o,e)+i}}return Object.create({set:o,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var n=document.cookie?document.cookie.split("; "):[],o={},r=0;r<n.length;r++){var i=n[r].split("="),s=i.slice(1).join("=");try{var a=decodeURIComponent(i[0]);if(o[a]=t.read(s,a),e===a)break}catch(e){}}return e?o[e]:o}},remove:function(e,t){o(e,"",Jt({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,Jt({},this.attributes,t))},withConverter:function(t){return e(Jt({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(n)},converter:{value:Object.freeze(t)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"});const Mt="DS",Vt="DSR",Ft="DSI";function Ht(e,t,n){if(t){const{cookieDomain:o,cookiePath:r,cookieSameSite:i,cookieExpiration:s,cookieSecure:a}=n,c=new Date(1e3*s),l=Bt(o);Kt.set(e,t,{path:r,domain:l?o:void 0,expires:c,sameSite:i,secure:a})}}function Bt(e){const t=window.location.hostname.split("."),n=null==e?void 0:e.split(".");return t.slice(-(null==n?void 0:n.length)).join(".")===e}const zt=e=>(null==e?void 0:e.cookieName)||Mt,Zt=e=>(null==e?void 0:e.cookieName)||Vt;function Gt(e="",t){return Kt.get(Zt(t))||k(`${e}${Vt}`)||""}function Wt(e="",t){return Kt.get(zt(t))||k(`${e}${Mt}`)||""}function Xt(e=""){return k(`${e}${Ft}`)||""}function Yt(e="",t,n,o){O(`${e}${Vt}`),O(`${e}${Mt}`),O(`${e}${Ft}`);const r=zt(t);Kt.remove(r,null==o?void 0:o.session);const i=Zt(n);Kt.remove(i,null==o?void 0:o.refresh)}const Qt=(e,t)=>n=>{const o=Object.assign(n,{token:n.token||Gt(e,t)}),r=function(e=""){return k(`${e}DTD`)||""}(e);return r&&(o.headers=Object.assign(Object.assign({},o.headers||{}),{"x-descope-trusted-device-token":r})),o},en=s&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://api.descope.com",tn="vsid",nn="vrid";var on={default:"endpoint"},rn="Blocked by CSP",sn="The endpoint parameter is not a valid URL",an="Failed to load the JS script of the agent",cn="9319";function ln(e,t){var n,o,r,i,s,a=[],c=(n=function(e){var t=function(e,t,n){if(n||2===arguments.length)for(var o,r=0,i=t.length;r<i;r++)!o&&r in t||(o||(o=Array.prototype.slice.call(t,0,r)),o[r]=t[r]);return e.concat(o||Array.prototype.slice.call(t))}([],e,!0);return{current:function(){return t[0]},postpone:function(){var e=t.shift();void 0!==e&&t.push(e)},exclude:function(){t.shift()}}}(e),i=0,o=function(){return Math.random()*Math.min(3e3,100*Math.pow(2,i++))},r=new Set,[n.current(),function(e,t){var i,s=t instanceof Error?t.message:"";if(s===rn||s===sn)n.exclude(),i=0;else if(s===cn)n.exclude();else if(s===an){var a=Date.now()-e.getTime()<50,c=n.current();c&&a&&!r.has(c)&&(r.add(c),i=0),n.postpone()}else n.postpone();var l=n.current();return void 0===l?void 0:[l,null!=i?i:e.getTime()+o()-Date.now()]}]),l=c[0],d=c[1];if(void 0===l)return Promise.reject(new TypeError("The list of script URL patterns is empty"));var u=function(e){var n=new Date,o=function(t){return a.push({url:e,startedAt:n,finishedAt:new Date,error:t})},r=t(e);return r.then((function(){return o()}),o),r.catch((function(e){if(null!=s||(s=e),a.length>=5)throw s;var t=d(n,e);if(!t)throw s;var o,r=t[0],i=t[1];return(o=i,new Promise((function(e){return setTimeout(e,o)}))).then((function(){return u(r)}))}))};return u(l).then((function(e){return[e,a]}))}var dn="https://fpnpmcdn.net/v<version>/<apiKey>/loader_v<loaderVersion>.js",un=dn;function pn(n){var o;n.scriptUrlPattern;var r=n.token,i=n.apiKey,s=void 0===i?r:i,a=t(n,["scriptUrlPattern","token","apiKey"]),c=null!==(o=function(e,t){return function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,t)?e[t]:void 0}(n,"scriptUrlPattern"))&&void 0!==o?o:dn,l=function(){var e=[],t=function(){e.push({time:new Date,state:document.visibilityState})},n=function(e,t,n,o){return e.addEventListener(t,n,o),function(){return e.removeEventListener(t,n,o)}}(document,"visibilitychange",t);return t(),[e,n]}(),d=l[0],u=l[1];return Promise.resolve().then((function(){if(!s||"string"!=typeof s)throw new Error("API key required");var e=function(e,t){return(Array.isArray(e)?e:[e]).map((function(e){return function(e,t){var n=encodeURIComponent;return e.replace(/<[^<>]+>/g,(function(e){return"<version>"===e?"3":"<apiKey>"===e?n(t):"<loaderVersion>"===e?n("3.11.6"):e}))}(String(e),t)}))}(c,s);return ln(e,gn)})).catch((function(e){throw u(),function(e){return e instanceof Error&&e.message===cn?new Error(an):e}(e)})).then((function(t){var n=t[0],o=t[1];return u(),n.load(e(e({},a),{ldi:{attempts:o,visibilityStates:d}}))}))}function gn(e){return function(e,t,n){var o,r=document,i="securitypolicyviolation",s=function(t){var n=new URL(e,location.href),r=t.blockedURI;r!==n.href&&r!==n.protocol.slice(0,-1)&&r!==n.origin||(o=t,a())};r.addEventListener(i,s);var a=function(){return r.removeEventListener(i,s)};return Promise.resolve().then(t).then((function(e){return a(),e}),(function(e){return new Promise((function(e){var t=new MessageChannel;t.port1.onmessage=function(){return e()},t.port2.postMessage(null)})).then((function(){if(a(),o)return n(o);throw e}))}))}(e,(function(){return function(e){return new Promise((function(t,n){if(function(e){if(URL.prototype)try{return new URL(e,location.href),!1}catch(e){if(e instanceof Error&&"TypeError"===e.name)return!0;throw e}}(e))throw new Error(sn);var o=document.createElement("script"),r=function(){var e;return null===(e=o.parentNode)||void 0===e?void 0:e.removeChild(o)},i=document.head||document.getElementsByTagName("head")[0];o.onload=function(){r(),t()},o.onerror=function(){r(),n(new Error(an))},o.async=!0,o.src=e,i.appendChild(o)}))}(e)}),(function(){throw new Error(rn)})).then(hn)}function hn(){var e=window,t="__fpjs_p_l_b",n=e[t];if(function(e,t){var n,o=null===(n=Object.getOwnPropertyDescriptor)||void 0===n?void 0:n.call(Object,e,t);(null==o?void 0:o.configurable)?delete e[t]:o&&!o.writable||(e[t]=void 0)}(e,t),"function"!=typeof(null==n?void 0:n.load))throw new Error(cn);return n}const vn=(e=!1)=>{const t=k("fp");if(!t)return null;const n=JSON.parse(t);return(new Date).getTime()>n.expiry&&!e?null:n.value},fn=async(e,t=en)=>{try{if(vn())return;const n=(Date.now().toString(36)+Math.random().toString(36).substring(2)+Math.random().toString(36).substring(2)).substring(0,27),o=new URL(t);o.pathname="/fXj8gt3x8VulJBna/x96Emn69oZwcd7I6";const r=new URL(t);r.pathname="/fXj8gt3x8VulJBna/w78aRZnnDZ3Aqw0I";const i=r.toString()+"?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>",s=pn({apiKey:e,endpoint:[o.toString(),on],scriptUrlPattern:[i,un]}),a=await s,{requestId:c}=await a.get({linkedId:n}),l=((e,t)=>({[tn]:e,[nn]:t}))(n,c);(e=>{const t={value:e,expiry:(new Date).getTime()+864e5};I("fp",JSON.stringify(t))})(l)}catch(e){console.warn("Could not load fingerprint",e)}},wn=e=>{const t=vn(!0);return t&&e.body&&(e.body.fpData=t),e},mn="descopeFlowNonce",yn="X-Descope-Flow-Nonce",bn="/v1/flow/start",In="/v1/flow/next",kn=(e,t=mn)=>`${t}${e}`,On=(e,t=mn)=>{try{const n=kn(e,t);O(n)}catch(e){console.error("Error removing flow nonce:",e)}},jn=e=>{var t;return(null===(t=/.*\|#\|(.*)/.exec(e))||void 0===t?void 0:t[1])||null},Sn=e=>{var t;return e.path===In&&(null===(t=e.body)||void 0===t?void 0:t.executionId)?jn(e.body.executionId):null},Un="dls_last_user_login_id",Tn="dls_last_user_display_name",xn=e=>I(Un,e),Rn=()=>k(Un),Cn=()=>k(Tn),En=e=>async(...t)=>{var n;t[1]=t[1]||{};const[,o={}]=t,r=Rn(),i=Cn();r&&(null!==(n=o.lastAuth)&&void 0!==n||(o.lastAuth={}),o.lastAuth.loginId=r,o.lastAuth.name=i);return await e(...t)},Pn=e=>t=>async(...n)=>{const o=await t(...n);return e||(O(Un),O(Tn)),o};function $n(){const e=[];return{pub:t=>{e.forEach((e=>e(t)))},sub:t=>{const n=e.push(t)-1;return()=>e.splice(n,1)}}}const _n=(e,t,n,o)=>r=>async(...i)=>{const s=await r(...i);return Yt(e,t,n,null==o?void 0:o()),s};async function Dn(e){const t=function(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=Kn(n.publicKey.challenge),n.publicKey.user.id=Kn(n.publicKey.user.id),null===(t=n.publicKey.excludeCredentials)||void 0===t||t.forEach((e=>{e.id=Kn(e.id)})),n}(e),n=await navigator.credentials.create(t);return o=n,JSON.stringify({id:o.id,rawId:Mn(o.rawId),type:o.type,response:{attestationObject:Mn(o.response.attestationObject),clientDataJSON:Mn(o.response.clientDataJSON)}});var o}async function An(e){const t=Nn(e);return Jn(await navigator.credentials.get(t))}async function Ln(e,t){const n=Nn(e);n.signal=t.signal,n.mediation="conditional";return Jn(await navigator.credentials.get(n))}async function qn(e=!1){var t,n;if(!s)return Promise.resolve(!1);if(m()){const e=null===(n=null===(t=window.descopeBridge)||void 0===t?void 0:t.hostInfo)||void 0===n?void 0:n.webauthn;if("boolean"==typeof e)return e}const o=!!(window.PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return o&&e&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():o}function Nn(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=Kn(n.publicKey.challenge),null===(t=n.publicKey.allowCredentials)||void 0===t||t.forEach((e=>{e.id=Kn(e.id)})),n}function Jn(e){return JSON.stringify({id:e.id,rawId:Mn(e.rawId),type:e.type,response:{authenticatorData:Mn(e.response.authenticatorData),clientDataJSON:Mn(e.response.clientDataJSON),signature:Mn(e.response.signature),userHandle:e.response.userHandle?Mn(e.response.userHandle):void 0}})}function Kn(e){const t=e.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(t),(e=>e.charCodeAt(0))).buffer}function Mn(e){return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var Vn,Fn=(Vn=e=>({async signUp(t,n,o){const r=await e.webauthn.signUp.start(t,window.location.origin,n,o);if(!r.ok)return r;const i=await Dn(r.data.options);return await e.webauthn.signUp.finish(r.data.transactionId,i)},async signIn(t,n){const o=await e.webauthn.signIn.start(t,window.location.origin,void 0,void 0,n);if(!o.ok)return o;const r=await An(o.data.options);return await e.webauthn.signIn.finish(o.data.transactionId,r)},async signUpOrIn(t,n){var o;const r=await e.webauthn.signUpOrIn.start(t,window.location.origin,n);if(!r.ok)return r;if(null===(o=r.data)||void 0===o?void 0:o.create){const t=await Dn(r.data.options);return await e.webauthn.signUp.finish(r.data.transactionId,t)}{const t=await An(r.data.options);return await e.webauthn.signIn.finish(r.data.transactionId,t)}},async update(t,n,o){const r=await e.webauthn.update.start(t,window.location.origin,n,o);if(!r.ok)return r;const i=await Dn(r.data.options);return await e.webauthn.update.finish(r.data.transactionId,i)},helpers:{create:Dn,get:An,isSupported:qn,conditional:Ln}}),(...e)=>{const t=Vn(...e);return Object.assign(t.signUp,e[0].webauthn.signUp),Object.assign(t.signIn,e[0].webauthn.signIn),Object.assign(t.signUpOrIn,e[0].webauthn.signUpOrIn),Object.assign(t.update,e[0].webauthn.update),t});const Hn={config:"/fedcm/config"},Bn=()=>{if(window.crypto&&window.crypto.getRandomValues){const e=new Uint8Array(16);return window.crypto.getRandomValues(e),Array.from(e,(e=>e.toString(16).padStart(2,"0"))).join("")}return Math.random().toString(36).substring(2)};async function zn(e,t){var n;try{await Zn(e,t)}catch(e){null===(n=null==t?void 0:t.onFailed)||void 0===n||n.call(t,e)}}async function Zn(e,t){var n,o;const r=await async function(e,t="google",n,o,r){const i=Bn(),s=await async function(){return new Promise(((e,t)=>{if(window.google)return void e(window.google.accounts.id);let n=document.getElementById("google-gsi-client-script");n||(n=document.createElement("script"),document.head.appendChild(n),n.async=!0,n.defer=!0,n.id="google-gsi-client-script",n.src="https://accounts.google.com/gsi/client"),n.onload=function(){window.google?e(window.google.accounts.id):t("Failed to load Google GSI client script - not loaded properly")},n.onerror=function(){t("Failed to load Google GSI client script - failed to load")}}))}(),a=await e.oauth.getOneTapClientId(t);if(!a.ok)throw new Error("Failed to get OneTap client ID for provider "+t);const c=a.data.clientId;return new Promise((e=>{var a,l;const d=n=>{e({provider:t,nonce:i,credential:null==n?void 0:n.credential})};s.initialize(Object.assign(Object.assign({},n),{itp_support:null===(a=null==n?void 0:n.itp_support)||void 0===a||a,use_fedcm_for_prompt:null===(l=null==n?void 0:n.use_fedcm_for_prompt)||void 0===l||l,client_id:c,callback:d,nonce:i})),s.prompt((e=>{var t,n;if(r&&(null==e?void 0:e.isDismissedMoment())){const n=null===(t=e.getDismissedReason)||void 0===t?void 0:t.call(e);return null==r||r(n),void d()}if(o&&(null==e?void 0:e.isSkippedMoment())){const t=null===(n=e.getSkippedReason)||void 0===n?void 0:n.call(e);return null==o||o(t),void d()}}))}))}(e,t.provider,t.oneTapConfig,t.onSkipped,t.onDismissed);if(!r.credential)return null;if(null==t?void 0:t.onCodeReceived){const o=await e.oauth.verifyOneTapIDToken(r.provider,r.credential,r.nonce,null==t?void 0:t.loginOptions);if(!o.ok||!o.data)throw new Error("Failed to verify OneTap client ID for provider "+r.provider);null===(n=null==t?void 0:t.onCodeReceived)||void 0===n||n.call(t,o.data.code)}else{const n=await e.oauth.exchangeOneTapIDToken(r.provider,r.credential,r.nonce,null==t?void 0:t.loginOptions);if(!n.ok||!n.data)throw new Error("Failed to exchange OneTap client ID for provider "+r.provider);null===(o=null==t?void 0:t.onAuthenticated)||void 0===o||o.call(t,n.data)}}var Gn=e=>Object.assign(Object.assign({},e.flow),{start:async(...t)=>{const n=await qn(),o=Object.assign(Object.assign({location:window.location.href},t[1]),{deviceInfo:{webAuthnSupport:n},startOptionsVersion:1});return t[1]=o,e.flow.start(...t)}});let Wn;const Xn=(e,t)=>new Promise(((n,o)=>{if(!e.length)return o(new Error("No URLs provided to loadScriptWithFallback"));const r=t();if(r)return n(r);const i=e.shift(),s=document.createElement("script");s.src=i,s.id=(e=>{let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t|=0;return Math.abs(t).toString(16)})(i),s.onload=()=>{const e=t();if(e)return n(e);throw new Error("Could not get entry after loading script from URL")},s.addEventListener("error",(()=>{Xn(e,t),s.setAttribute("data-error","true")})),document.body.appendChild(s)}));const Yn=async(e,t,n)=>{Wn||(Wn=(async()=>{try{return require("oidc-client-ts")}catch(e){return Xn([c,l],(()=>window.oidc))}})());const{OidcClient:o,WebStorageStateStore:r}=await Wn;if(!o)throw new Error("oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`");const i=(null==n?void 0:n.redirectUri)||window.location.href;let s,a,d,u;if(null==n?void 0:n.issuer){if(!n.clientId)throw new Error("clientId is required when providing a custom issuer/authority");s=n.issuer,a=n.clientId,d=`${a}_user`,u="openid"}else(null==n?void 0:n.applicationId)?(s=e.httpClient.buildUrl(t),s=`${s}/${n.applicationId}`,a=t,d=`${a}_user`,u="openid email roles descope.custom_claims offline_access"):(s=e.httpClient.buildUrl(t),a=t,d=`${a}_user`,u="openid email roles descope.custom_claims offline_access");const p={authority:s,client_id:a,redirect_uri:i,response_type:"code",scope:(null==n?void 0:n.scope)||u,stateStore:new r({store:window.localStorage,prefix:a}),loadUserInfo:!0,fetchRequestCredentials:"same-origin"};return(null==n?void 0:n.redirectUri)&&(p.redirect_uri=n.redirectUri),{client:new o(p),stateUserKey:d}},Qn=(e,t,n)=>{const o=async()=>{let o,r;return o&&r||({client:o,stateUserKey:r}=await Yn(e,t,n)),{client:o,stateUserKey:r}},r=async(t="")=>{var n;const{client:r,stateUserKey:i}=await o(),s=await r.processSigninResponse(t||window.location.href);var a;return await(null===(n=e.httpClient.hooks)||void 0===n?void 0:n.afterRequest({},new Response(JSON.stringify(s)))),I(i,JSON.stringify({id_token:(a=s).id_token,session_state:a.session_state,profile:a.profile})),(()=>{const e=new URL(window.location.href);e.searchParams.delete("code"),e.searchParams.delete("state"),window.history.replaceState({},document.title,e.toString())})(),s};return{loginWithRedirect:async(e={},t=!1)=>{const{client:n}=await o(),r=await n.createSigninRequest(e),{url:i}=r;return t||(window.location.href=i),{ok:!0,data:r}},finishLogin:r,finishLoginIfNeed:async(e="")=>{if(window.location.search.includes("code")&&window.location.search.includes("state"))return await r(e)},refreshToken:async t=>{var n;const{client:r,stateUserKey:i}=await o(),s=(e=>{const t=k(e);return t?JSON.parse(t):null})(i);if(!s)throw new Error("User not found in storage to refresh token");let a=t;if(!a){const t={};e.httpClient.hooks.beforeRequest(t),a=t.token}const c=await r.useRefreshToken({state:{refresh_token:a,session_state:s.session_state,profile:s.profile}});return await(null===(n=e.httpClient.hooks)||void 0===n?void 0:n.afterRequest({},new Response(JSON.stringify(c)))),c},logout:async(e,t=!1)=>{const{client:n,stateUserKey:r}=await o();e||(e={}),e.id_token_hint=e.id_token_hint||Xt(),e.post_logout_redirect_uri=e.post_logout_redirect_uri||window.location.href;const i=await n.createSignoutRequest(e),{url:s}=i;return O(r),t||window.location.replace(s),i}}},eo=function(...e){return t=>e.reduce(((e,t)=>t(e)),t)}((e=>t=>{var n;return n=t.customStorage,u=n,e(t)}),(e=>n=>{var{fpKey:o,fpLoad:r}=n,i=t(n,["fpKey","fpLoad"]);return s?(o&&r&&fn(o).catch((()=>null)),e(f(i,{beforeRequest:wn}))):e(i)}),(e=>n=>{var{autoRefresh:o}=n,i=t(n,["autoRefresh"]);if(!o||m())return e(i);const{clearAllTimers:a,setTimer:c}=(()=>{const e=[];return{clearAllTimers:()=>{for(;e.length;)clearTimeout(e.pop())},setTimer:(t,n)=>{e.push(setTimeout(t,n))}}})();let l,d;s&&document.addEventListener("visibilitychange",(()=>{"visible"===document.visibilityState&&l&&new Date>l&&(Lt("Expiration time passed, refreshing session"),u.refresh(Gt()||d))}));const u=e(f(i,{afterRequest:async(e,t)=>{const{sessionJwt:n,refreshJwt:o,sessionExpiration:i,nextRefreshSeconds:p}=await w(t);if(y(e,t))Lt("Session invalidated, canceling all timers"),a();else if(n||i){if(l=((e,t)=>{if(t)return new Date(1e3*t);Lt("Could not extract expiration time from session token, trying to decode the token");try{const t=r(e);if(t.exp)return new Date(1e3*t.exp)}catch(e){return null}})(n,i),!l)return void Lt("Could not extract expiration time from session token");d=o;const e=Nt(l,p);if(a(),e<=2e4)return void Lt("Session is too close to expiration, not setting refresh timer");const t=new Date(Date.now()+e).toLocaleTimeString("en-US",{hour12:!1});Lt(`Setting refresh timer for ${t}. (${e}ms)`),c((()=>{s&&"hidden"===document.visibilityState?Lt("Skipping refresh due to timer - document is hidden"):(Lt("Refreshing session due to timer"),u.refresh(Gt()||o))}),e)}}}));return je(u,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return Lt("Clearing all timers"),a(),n}))}),(e=>t=>e(Object.assign(Object.assign({},t),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.45.0"},t.baseHeaders)}))),(e=>t=>{const n=$n(),o=$n(),r=$n(),i=$n(),s=e(f(t,{afterRequest:async(e,t)=>{if(y(e,t))Lt("Session invalidated, notifying subscribers with empty values"),o.pub(null),r.pub(null),n.pub(null),i.pub(null);else{const e=await(async e=>{const t=await w(e);return(null==t?void 0:t.user)||((null==t?void 0:t.hasOwnProperty("userId"))?t:void 0)})(t);e&&r.pub(e);const{sessionJwt:s,sessionExpiration:a,claims:c}=await w(t);s&&o.pub(s),c&&i.pub(c),(a||s)&&n.pub(a||42)}}})),a=je(s,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const s=await e(...t);return o.pub(null),r.pub(null),n.pub(null),i.pub(null),s}));return Object.assign(a,{onSessionTokenChange:o.sub,onUserChange:r.sub,onClaimsChange:i.sub,onIsAuthenticatedChange:e=>n.sub((t=>{e(!!t)}))})}),(e=>n=>{const{enableFlowNonce:o=!0,nonceStoragePrefix:r=mn}=n,i=t(n,["enableFlowNonce","nonceStoragePrefix"]);if(!o)return e(i);((e=mn)=>{try{if(!b)return;for(let r=0;r<(t=void 0,n=void 0,o=void 0,null!==(o=null!==(t=null==u?void 0:u.length)&&void 0!==t?t:s&&(null===(n=window.localStorage)||void 0===n?void 0:n.length))&&void 0!==o?o:0);r++){const t=j(r);if(t&&t.startsWith(e)){const e=k(t);if(e)try{JSON.parse(e).expiry<Date.now()&&O(t)}catch(e){O(t)}}}}catch(e){console.error("Error cleaning up expired nonces:",e)}var t,n,o})(r);return e(f(i,{afterRequest:async(e,t)=>{if(e.path!==bn&&e.path!==In)return;const{nonce:n,executionId:o}=await(async(e,t)=>{try{const n=t.headers.get(yn);let o=await t.clone().json().then((e=>(null==e?void 0:e.executionId)||null)).catch((()=>null));return o||(o=Sn(e)),{nonce:n,executionId:jn(o)}}catch(e){return{nonce:null,executionId:null}}})(e,t);if(n&&o){((e,t,n,o=mn)=>{try{const r=kn(e,o),i=n?172800:10800,s={value:t,expiry:Date.now()+1e3*i,isStart:n};I(r,JSON.stringify(s))}catch(e){console.error("Error setting flow nonce:",e)}})(o,n,e.path===bn,r)}},beforeRequest:e=>{if(e.path===In){const t=Sn(e);if(t){const n=((e,t=mn)=>{try{const n=kn(e,t),o=k(n);if(!o)return null;const r=JSON.parse(o);return r.expiry<Date.now()?(On(e,t),null):r.value}catch(e){return console.error("Error getting flow nonce:",e),null}})(t,r);n&&(e.headers=e.headers||{},e.headers[yn]=n)}}return e}}))}),(e=>n=>{var{storeLastAuthenticatedUser:o=!0,keepLastAuthenticatedUserAfterLogout:r=!1}=n,i=t(n,["storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout"]);if(!o)return Object.assign(e(i),{getLastUserLoginId:Rn,getLastUserDisplayName:Cn});const s=e(f(i,{afterRequest:async(e,t)=>{var n;const{userInfo:o,lastAuth:r}=await(async e=>{if(!(null==e?void 0:e.ok))return{userInfo:void 0,lastAuth:void 0};const t=await(null==e?void 0:e.clone().json()),n=v((null==t?void 0:t.authInfo)||t||{});return{userInfo:(null==n?void 0:n.user)||((null==n?void 0:n.hasOwnProperty("userId"))?n:void 0),lastAuth:t.lastAuth}})(t),i=null===(n=null==o?void 0:o.loginIds)||void 0===n?void 0:n[0],s=null==o?void 0:o.name;i?(xn(i),(e=>{I(Tn,e)})(s)):(null==r?void 0:r.loginId)&&xn(r.loginId)}}));let a=je(s,["flow.start"],En);return a=je(a,["logout","logoutAll"],Pn(r)),Object.assign(a,{getLastUserLoginId:Rn,getLastUserDisplayName:Cn})}),(e=>n=>{var{persistTokens:o,sessionTokenViaCookie:r,refreshTokenViaCookie:i,storagePrefix:a}=n,c=t(n,["persistTokens","sessionTokenViaCookie","refreshTokenViaCookie","storagePrefix"]);if(!o||!s)return e(c);let l;const d=e(f(c,{beforeRequest:Qt(a,i),afterRequest:async(e,t)=>{if(y(e,t))Lt("Session invalidated, clearing persisted tokens"),Yt(a,r,i,l);else{const e=((e={},t=!1,n="",o=!1)=>{var r,i,s,a;const{sessionJwt:c,refreshJwt:l,trustedDeviceJwt:d}=e;let u;if(l)if(o){O(`${n}${Vt}`);const t=o.sameSite||"Strict",s=null===(r=o.secure)||void 0===r||r,a=null!==(i=o.domain)&&void 0!==i?i:e.cookieDomain,c=Zt(o);s&&"https:"!==window.location.protocol&&qt("Refresh token cookie is configured with secure=true but the page is not using HTTPS. The cookie will not be set. To fix this, pass refreshTokenViaCookie: { secure: process.env['NODE_ENV'] !== 'development' }");const d=Object.assign(Object.assign({},e),{cookieSameSite:t,cookieSecure:s,cookieDomain:a});Ht(c,l,d);const p=Bt(a);u=Object.assign(Object.assign({},u),{refresh:{path:d.cookiePath,domain:p?a:void 0}})}else{const e=Zt(o);Kt.remove(e),I(`${n}${Vt}`,l)}if(c)if(t){const n=t.sameSite||"Strict",o=null===(s=t.secure)||void 0===s||s,r=null!==(a=t.domain)&&void 0!==a?a:e.cookieDomain,i=zt(t);o&&"https:"!==window.location.protocol&&qt("Session token cookie is configured with secure=true but the page is not using HTTPS. The cookie will not be set. To fix this, pass sessionTokenViaCookie: { secure: process.env['NODE_ENV'] !== 'development' }");const l=Object.assign(Object.assign({},e),{cookieSameSite:n,cookieSecure:o,cookieDomain:r});Ht(i,c,l);const d=Bt(r);u=Object.assign(Object.assign({},u),{session:{path:l.cookiePath,domain:d?r:void 0}})}else I(`${n}${Mt}`,c);return