@descope/web-js-sdk 1.31.0 → 1.31.1
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.
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/index.d.ts +36 -0
- package/dist/index.esm.js +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +2 -2
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("tslib"),t=require("jwt-decode"),n=require("@descope/core-js-sdk"),o=require("js-cookie"),i=require("@fingerprintjs/fingerprintjs-pro");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=r(n),s=r(o);const c=e=>{try{return t.jwtDecode(e).exp}catch(e){return null}},l=e=>{const{refresh_expire_in:t,refresh_token:n}=e;return t?Math.floor(Date.now()/1e3)+t:c(n)},d=e=>{const{expires_in:t,expires_at:n,access_token:o}=e;return n||(t?Math.floor(Date.now()/1e3)+t:o?c(o):void 0)},u=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,o)=>{var i;return n[o]=[].concat((null===(i=e.hooks)||void 0===i?void 0:i[o])||[]).concat((null==t?void 0:t[o])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},p=async t=>{if(!(null==t?void 0:t.ok))return{};const n=await(null==t?void 0:t.clone().json());return(t=>{const{access_token:n,id_token:o,refresh_token:i,refresh_expire_in:r}=t,a=e.__rest(t,["access_token","id_token","refresh_token","refresh_expire_in"]);return Object.assign({sessionJwt:t.sessionJwt||n,idToken:o,refreshJwt:t.refreshJwt||i,sessionExpiration:t.sessionExpiration||d(t),cookieExpiration:t.cookieExpiration||l(t)},a)})((null==n?void 0:n.authInfo)||n||{})},g=async e=>{const t=await p(e);return(null==t?void 0:t.user)||((null==t?void 0:t.hasOwnProperty("userId"))?t:void 0)},f="undefined"!=typeof localStorage,w=(e,t)=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.setItem(e,t)),h=e=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem(e)),v=e=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.removeItem(e)),m=(...e)=>{console.debug(...e)},y="3.2.0",b="undefined"!=typeof window,S=Math.pow(2,31)-1,k=`https://descopecdn.com/npm/oidc-client-ts@${y}/dist/browser/oidc-client-ts.min.js`,_=`https://cdn.jsdelivr.net/npm/oidc-client-ts@${y}/dist/browser/oidc-client-ts.min.js`,I=e=>{let t=((n=e)?n.getTime()-(new Date).getTime():0)-2e4;var n;return t>S&&(m(`Timeout is too large (${t}ms), setting it to ${S}ms`),t=S),t},O="DS",U="DSR",x="DSI";function j(e,t,n){if(t){const{cookieDomain:o,cookiePath:i,cookieSameSite:r,cookieExpiration:a,cookieSecure:c}=n,l=new Date(1e3*a),d=function(e){const t=window.location.hostname.split("."),n=e.split(".");return t.slice(-n.length).join(".")===e}(o);s.default.set(e,t,{path:i,domain:d?o:void 0,expires:l,sameSite:r,secure:c})}}function C(e=""){return h(`${e}${U}`)||""}function R(e=""){return s.default.get(O)||h(`${e}${O}`)||""}function T(e=""){return h(`${e}${x}`)||""}function D(e=""){v(`${e}${U}`),v(`${e}${O}`),v(`${e}${x}`),s.default.remove(O)}const E=b&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://api.descope.com",A="vsid",J="vrid",L="fp",$=(e=!1)=>{const t=localStorage.getItem(L);if(!t)return null;const n=JSON.parse(t);return(new Date).getTime()>n.expiry&&!e?null:n.value},K=async(e,t=E)=>{try{if($())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 a=r.toString()+"?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>",s=i.load({apiKey:e,endpoint:[o.toString(),i.defaultEndpoint],scriptUrlPattern:[a,i.defaultScriptUrlPattern]}),c=await s,{requestId:l}=await c.get({linkedId:n}),d=((e,t)=>({[A]:e,[J]:t}))(n,l);(e=>{const t={value:e,expiry:(new Date).getTime()+864e5};localStorage.setItem(L,JSON.stringify(t))})(d)}catch(e){console.warn("Could not load fingerprint",e)}},q=e=>{const t=$(!0);return t&&e.body&&(e.body.fpData=t),e},P="dls_last_user_login_id",N="dls_last_user_display_name",V=()=>h(P),F=()=>h(N),M=e=>async(...t)=>{var n;t[1]=t[1]||{};const[,o={}]=t,i=V(),r=F();i&&(null!==(n=o.lastAuth)&&void 0!==n||(o.lastAuth={}),o.lastAuth.loginId=i,o.lastAuth.name=r);return await e(...t)},W=e=>t=>async(...n)=>{const o=await t(...n);return e||(v(P),v(N)),o};function H(){const e=[];return{pub:t=>{e.forEach((e=>e(t)))},sub:t=>{const n=e.push(t)-1;return()=>e.splice(n,1)}}}const G=e=>t=>async(...n)=>{const o=await t(...n);return D(e),o};async function B(e){const t=function(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=ee(n.publicKey.challenge),n.publicKey.user.id=ee(n.publicKey.user.id),null===(t=n.publicKey.excludeCredentials)||void 0===t||t.forEach((e=>{e.id=ee(e.id)})),n}(e),n=await navigator.credentials.create(t);return o=n,JSON.stringify({id:o.id,rawId:te(o.rawId),type:o.type,response:{attestationObject:te(o.response.attestationObject),clientDataJSON:te(o.response.clientDataJSON)}});var o}async function Z(e){const t=z(e);return Q(await navigator.credentials.get(t))}async function X(e,t){const n=z(e);n.signal=t.signal,n.mediation="conditional";return Q(await navigator.credentials.get(n))}async function Y(e=!1){if(!b)return Promise.resolve(!1);const t=!!(window.PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return t&&e&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():t}function z(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=ee(n.publicKey.challenge),null===(t=n.publicKey.allowCredentials)||void 0===t||t.forEach((e=>{e.id=ee(e.id)})),n}function Q(e){return JSON.stringify({id:e.id,rawId:te(e.rawId),type:e.type,response:{authenticatorData:te(e.response.authenticatorData),clientDataJSON:te(e.response.clientDataJSON),signature:te(e.response.signature),userHandle:e.response.userHandle?te(e.response.userHandle):void 0}})}function ee(e){const t=e.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(t),(e=>e.charCodeAt(0))).buffer}function te(e){return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var ne,oe=(ne=e=>({async signUp(t,n,o){const i=await e.webauthn.signUp.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await B(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,r)},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 i=await Z(o.data.options);return await e.webauthn.signIn.finish(o.data.transactionId,i)},async signUpOrIn(t,n){var o;const i=await e.webauthn.signUpOrIn.start(t,window.location.origin,n);if(!i.ok)return i;if(null===(o=i.data)||void 0===o?void 0:o.create){const t=await B(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,t)}{const t=await Z(i.data.options);return await e.webauthn.signIn.finish(i.data.transactionId,t)}},async update(t,n,o){const i=await e.webauthn.update.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await B(i.data.options);return await e.webauthn.update.finish(i.data.transactionId,r)},helpers:{create:B,get:Z,isSupported:Y,conditional:X}}),(...e)=>{const t=ne(...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 ie={config:"/fedcm/config"},re=()=>{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 ae(e,t){var n,o,i;try{const i=await async function(e,t="google",n,o,i){const r=re(),a=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")}}))}(),s=await e.oauth.getOneTapClientId(t);if(!s.ok)throw new Error("Failed to get OneTap client ID for provider "+t);const c=s.data.clientId;return new Promise((e=>{var s,l;const d=n=>{e({provider:t,nonce:r,credential:null==n?void 0:n.credential})};a.initialize(Object.assign(Object.assign({},n),{itp_support:null===(s=null==n?void 0:n.itp_support)||void 0===s||s,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:r})),a.prompt((e=>{var t,n;if(i&&(null==e?void 0:e.isDismissedMoment())){const n=null===(t=e.getDismissedReason)||void 0===t?void 0:t.call(e);return null==i||i(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(!i.credential)return null;if(null==t?void 0:t.onCodeReceived){const o=await e.oauth.verifyOneTapIDToken(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!o.ok||!o.data)throw new Error("Failed to verify OneTap client ID for provider "+i.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(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!n.ok||!n.data)throw new Error("Failed to exchange OneTap client ID for provider "+i.provider);null===(o=null==t?void 0:t.onAuthenticated)||void 0===o||o.call(t,n.data)}}catch(e){null===(i=null==t?void 0:t.onFailed)||void 0===i||i.call(t,e)}}var se=e=>Object.assign(Object.assign({},e.flow),{start:async(...t)=>{const n=await Y(),o=Object.assign(Object.assign({location:window.location.href},t[1]),{deviceInfo:{webAuthnSupport:n},startOptionsVersion:1});return t[1]=o,e.flow.start(...t)}});const ce=()=>window.location.search.includes("code")&&window.location.search.includes("state");let le;const de=(e,t)=>new Promise(((n,o)=>{if(!e.length)return o(new Error("No URLs provided to loadScriptWithFallback"));const i=t();if(i)return n(i);const r=e.shift(),a=document.createElement("script");a.src=r,a.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)})(r),a.onload=()=>{const e=t();if(e)return n(e);throw new Error("Could not get entry after loading script from URL")},a.addEventListener("error",(()=>{de(e,t),a.setAttribute("data-error","true")})),document.body.appendChild(a)}));const ue=async(e,t,n)=>{le||(le=(async()=>{try{return require("oidc-client-ts")}catch(e){return de([k,_],(()=>window.oidc))}})());const{OidcClient:o,WebStorageStateStore:i}=await le;if(!o)throw new Error("oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`");const r=t,a=(null==n?void 0:n.redirectUri)||window.location.href,s=(null==n?void 0:n.scope)||"openid email roles descope.custom_claims offline_access",c=`${r}_user`;let l=e.httpClient.buildUrl(t);(null==n?void 0:n.applicationId)&&(l=`${l}/${n.applicationId}`);const d={authority:l,client_id:t,redirect_uri:a,response_type:"code",scope:s,stateStore:new i({store:window.localStorage,prefix:r}),loadUserInfo:!0,fetchRequestCredentials:"same-origin"};return(null==n?void 0:n.redirectUri)&&(d.redirect_uri=n.redirectUri),(null==n?void 0:n.scope)&&(d.scope=n.scope),{client:new o(d),stateUserKey:c}},pe=(e,t,n)=>{const o=async()=>{let o,i;return o&&i||({client:o,stateUserKey:i}=await ue(e,t,n)),{client:o,stateUserKey:i}},i=async(t="")=>{var n;const{client:i,stateUserKey:r}=await o(),a=await i.processSigninResponse(t||window.location.href);var s;return await(null===(n=e.httpClient.hooks)||void 0===n?void 0:n.afterRequest({},new Response(JSON.stringify(a)))),window.localStorage.setItem(r,JSON.stringify({id_token:(s=a).id_token,session_state:s.session_state,profile:s.profile})),(()=>{const e=new URL(window.location.href);e.searchParams.delete("code"),e.searchParams.delete("state"),window.history.replaceState({},document.title,e.toString())})(),a};return{loginWithRedirect:async(e={},t=!1)=>{const{client:n}=await o(),i=await n.createSigninRequest(e),{url:r}=i;return t||(window.location.href=r),{ok:!0,data:i}},finishLogin:i,finishLoginIfNeed:async(e="")=>{if(ce())return await i(e)},refreshToken:async t=>{var n;const{client:i,stateUserKey:r}=await o(),a=(e=>{const t=window.localStorage.getItem(e);return t?JSON.parse(t):null})(r);if(!a)throw new Error("User not found in storage to refresh token");let s=t;if(!s){const t={};e.httpClient.hooks.beforeRequest(t),s=t.token}const c=await i.useRefreshToken({state:{refresh_token:s,session_state:a.session_state,profile:a.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:i}=await o();e||(e={}),e.id_token_hint=e.id_token_hint||T(),e.post_logout_redirect_uri=e.post_logout_redirect_uri||window.location.href;const r=await n.createSignoutRequest(e),{url:a}=r;return window.localStorage.removeItem(i),t||window.location.replace(a),r}}},ge=function(...e){return t=>e.reduce(((e,t)=>t(e)),t)}((t=>n=>{var{fpKey:o,fpLoad:i}=n,r=e.__rest(n,["fpKey","fpLoad"]);return b?(o&&i&&K(o).catch((()=>null)),t(u(r,{beforeRequest:q}))):t(r)}),(o=>i=>{var{autoRefresh:r}=i,a=e.__rest(i,["autoRefresh"]);if(!r)return o(a);const{clearAllTimers:s,setTimer:c}=(()=>{const e=[];return{clearAllTimers:()=>{for(;e.length;)clearTimeout(e.pop())},setTimer:(t,n)=>{e.push(setTimeout(t,n))}}})();let l,d;b&&document.addEventListener("visibilitychange",(()=>{"visible"===document.visibilityState&&l&&new Date>l&&(m("Expiration time passed, refreshing session"),g.refresh(C()||d))}));const g=o(u(a,{afterRequest:async(e,n)=>{const{sessionJwt:o,refreshJwt:i,sessionExpiration:r}=await p(n);if(401===(null==n?void 0:n.status))m("Received 401, canceling all timers"),s();else if(o||r){if(l=((e,n)=>{if(n)return new Date(1e3*n);m("Could not extract expiration time from session token, trying to decode the token");try{const n=t.jwtDecode(e);if(n.exp)return new Date(1e3*n.exp)}catch(e){return null}})(o,r),!l)return void m("Could not extract expiration time from session token");d=i;const e=I(l);if(s(),e<=2e4)return void m("Session is too close to expiration, not setting refresh timer");const n=new Date(Date.now()+e).toLocaleTimeString("en-US",{hour12:!1});m(`Setting refresh timer for ${n}. (${e}ms)`),c((()=>{m("Refreshing session due to timer"),g.refresh(C()||i)}),e)}}}));return n.wrapWith(g,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return m("Clearing all timers"),s(),n}))}),(e=>t=>e(Object.assign(Object.assign({},t),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.31.0"},t.baseHeaders)}))),(e=>t=>{const o=H(),i=H(),r=H(),a=e(u(t,{afterRequest:async(e,t)=>{if(401===(null==t?void 0:t.status))i.pub(null),r.pub(null),o.pub(null);else{const e=await g(t);e&&r.pub(e);const{sessionJwt:n,sessionExpiration:a}=await p(t);n&&i.pub(n),(a||n)&&o.pub(a||42)}}})),s=n.wrapWith(a,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return i.pub(null),r.pub(null),o.pub(null),n}));return Object.assign(s,{onSessionTokenChange:i.sub,onUserChange:r.sub,onIsAuthenticatedChange:e=>o.sub((t=>{e(!!t)}))})}),(t=>o=>{var{storeLastAuthenticatedUser:i=!0,keepLastAuthenticatedUserAfterLogout:r=!1}=o,a=e.__rest(o,["storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout"]);if(!i)return Object.assign(t(a),{getLastUserLoginId:V,getLastUserDisplayName:F});const s=t(u(a,{afterRequest:async(e,t)=>{var n;const o=await g(t),i=null===(n=null==o?void 0:o.loginIds)||void 0===n?void 0:n[0],r=null==o?void 0:o.name;i&&((e=>{w(P,e)})(i),(e=>{w(N,e)})(r))}}));let c=n.wrapWith(s,["flow.start"],M);return c=n.wrapWith(c,["logout","logoutAll"],W(r)),Object.assign(c,{getLastUserLoginId:V,getLastUserDisplayName:F})}),(t=>o=>{var{persistTokens:i,sessionTokenViaCookie:r,storagePrefix:a}=o,s=e.__rest(o,["persistTokens","sessionTokenViaCookie","storagePrefix"]);if(!i||!b)return t(s);const c=t(u(s,{beforeRequest:(l=a,e=>Object.assign(e,{token:e.token||C(l)})),afterRequest:async(e,t)=>{const n=/^\/v\d+\/mgmt\//.test(e.path);401===(null==t?void 0:t.status)?n||D(a):((e={},t=!1,n="")=>{var o;const{sessionJwt:i,refreshJwt:r}=e;if(r&&w(`${n}${U}`,r),i)if(t){const n=t.sameSite||"Strict",r=null===(o=t.secure)||void 0===o||o;j(O,i,Object.assign(Object.assign({},e),{cookieSameSite:n,cookieSecure:r}))}else w(`${n}${O}`,i);e.idToken&&w(`${n}${x}`,e.idToken)})(await p(t),r,a)}}));var l;const d=n.wrapWith(c,["logout","logoutAll","oidc.logout"],G(a));return Object.assign(d,{getRefreshToken:()=>C(a),getSessionToken:()=>R(a),getIdToken:()=>T(a)})}))((e=>{const t=a.default(e),n=pe(t,e.projectId,e.oidcConfig);return Object.assign(Object.assign({},t),{refresh:async o=>{var i;if(e.oidcConfig)try{return await n.refreshToken(o),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161001",errorDescription:e.toString()}})}const r=R(),a=C();let s="";if(e.getExternalToken)try{s=await(null===(i=e.getExternalToken)||void 0===i?void 0:i.call(e))}catch(e){m("Error getting external token while refreshing",e)}return t.refresh(o,{dcs:r?"t":"f",dcr:a?"t":"f"},s)},logout:async o=>{if(e.oidcConfig)try{return await n.logout({id_token_hint:o}),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161000",errorDescription:e.toString()}})}return t.logout(o)},flow:se(t),webauthn:oe(t),fedcm:(o=t,i=e.projectId,{onetap:{requestExchangeCode(e){ae(o,e)},requestAuthentication(e){ae(o,e)}},oneTap(e,t,n,i,r){ae(o,{provider:e,oneTapConfig:t,loginOptions:n,onSkipped:i,onDismissed:r})},async launch(e){var t;const n={identity:{context:e||"signin",providers:[{configURL:o.httpClient.buildUrl(i+ie.config),clientId:i}]}},r=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(n));return o.refresh(r.token)},isSupported:()=>b&&"IdentityCredential"in window,async isLoggedIn(e){var t;const n=o.httpClient.buildUrl(i+ie.config);try{const o={identity:{context:e||"signin",providers:[{configURL:n,clientId:i}]}},r=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(o));return!!r&&!!r.token}catch(e){return!1}}}),oidc:n});var o,i}));exports.REFRESH_TOKEN_KEY=U,exports.SESSION_TOKEN_KEY=O,exports.clearFingerprintData=()=>{localStorage.removeItem(L)},exports.default=ge,exports.ensureFingerprintIds=K,exports.hasOidcParamsInUrl=ce;
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("tslib"),t=require("jwt-decode"),n=require("@descope/core-js-sdk"),o=require("js-cookie"),i=require("@fingerprintjs/fingerprintjs-pro");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=r(n),s=r(o);const c=e=>{try{return t.jwtDecode(e).exp}catch(e){return null}},l=e=>{const{refresh_expire_in:t,refresh_token:n}=e;return t?Math.floor(Date.now()/1e3)+t:c(n)},d=e=>{const{expires_in:t,expires_at:n,access_token:o}=e;return n||(t?Math.floor(Date.now()/1e3)+t:o?c(o):void 0)},u=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,o)=>{var i;return n[o]=[].concat((null===(i=e.hooks)||void 0===i?void 0:i[o])||[]).concat((null==t?void 0:t[o])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},p=async t=>{if(!(null==t?void 0:t.ok))return{};const n=await(null==t?void 0:t.clone().json());return(t=>{const{access_token:n,id_token:o,refresh_token:i,refresh_expire_in:r}=t,a=e.__rest(t,["access_token","id_token","refresh_token","refresh_expire_in"]);return Object.assign({sessionJwt:t.sessionJwt||n,idToken:o,refreshJwt:t.refreshJwt||i,sessionExpiration:t.sessionExpiration||d(t),cookieExpiration:t.cookieExpiration||l(t)},a)})((null==n?void 0:n.authInfo)||n||{})},g=async e=>{const t=await p(e);return(null==t?void 0:t.user)||((null==t?void 0:t.hasOwnProperty("userId"))?t:void 0)},f="undefined"!=typeof localStorage,w=(e,t)=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.setItem(e,t)),h=e=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem(e)),v=e=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.removeItem(e)),m=(...e)=>{console.debug(...e)},y="3.2.0",b="undefined"!=typeof window,S=Math.pow(2,31)-1,k=`https://descopecdn.com/npm/oidc-client-ts@${y}/dist/browser/oidc-client-ts.min.js`,_=`https://cdn.jsdelivr.net/npm/oidc-client-ts@${y}/dist/browser/oidc-client-ts.min.js`,I=e=>{let t=((n=e)?n.getTime()-(new Date).getTime():0)-2e4;var n;return t>S&&(m(`Timeout is too large (${t}ms), setting it to ${S}ms`),t=S),t},O="DS",U="DSR",x="DSI";function j(e,t,n){if(t){const{cookieDomain:o,cookiePath:i,cookieSameSite:r,cookieExpiration:a,cookieSecure:c}=n,l=new Date(1e3*a),d=function(e){const t=window.location.hostname.split("."),n=e.split(".");return t.slice(-n.length).join(".")===e}(o);s.default.set(e,t,{path:i,domain:d?o:void 0,expires:l,sameSite:r,secure:c})}}function C(e=""){return h(`${e}${U}`)||""}function R(e=""){return s.default.get(O)||h(`${e}${O}`)||""}function T(e=""){return h(`${e}${x}`)||""}function D(e=""){v(`${e}${U}`),v(`${e}${O}`),v(`${e}${x}`),s.default.remove(O)}const E=b&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://api.descope.com",A="vsid",J="vrid",L="fp",$=(e=!1)=>{const t=localStorage.getItem(L);if(!t)return null;const n=JSON.parse(t);return(new Date).getTime()>n.expiry&&!e?null:n.value},K=async(e,t=E)=>{try{if($())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 a=r.toString()+"?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>",s=i.load({apiKey:e,endpoint:[o.toString(),i.defaultEndpoint],scriptUrlPattern:[a,i.defaultScriptUrlPattern]}),c=await s,{requestId:l}=await c.get({linkedId:n}),d=((e,t)=>({[A]:e,[J]:t}))(n,l);(e=>{const t={value:e,expiry:(new Date).getTime()+864e5};localStorage.setItem(L,JSON.stringify(t))})(d)}catch(e){console.warn("Could not load fingerprint",e)}},q=e=>{const t=$(!0);return t&&e.body&&(e.body.fpData=t),e},P="dls_last_user_login_id",N="dls_last_user_display_name",V=()=>h(P),F=()=>h(N),M=e=>async(...t)=>{var n;t[1]=t[1]||{};const[,o={}]=t,i=V(),r=F();i&&(null!==(n=o.lastAuth)&&void 0!==n||(o.lastAuth={}),o.lastAuth.loginId=i,o.lastAuth.name=r);return await e(...t)},W=e=>t=>async(...n)=>{const o=await t(...n);return e||(v(P),v(N)),o};function H(){const e=[];return{pub:t=>{e.forEach((e=>e(t)))},sub:t=>{const n=e.push(t)-1;return()=>e.splice(n,1)}}}const G=e=>t=>async(...n)=>{const o=await t(...n);return D(e),o};async function B(e){const t=function(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=ee(n.publicKey.challenge),n.publicKey.user.id=ee(n.publicKey.user.id),null===(t=n.publicKey.excludeCredentials)||void 0===t||t.forEach((e=>{e.id=ee(e.id)})),n}(e),n=await navigator.credentials.create(t);return o=n,JSON.stringify({id:o.id,rawId:te(o.rawId),type:o.type,response:{attestationObject:te(o.response.attestationObject),clientDataJSON:te(o.response.clientDataJSON)}});var o}async function Z(e){const t=z(e);return Q(await navigator.credentials.get(t))}async function X(e,t){const n=z(e);n.signal=t.signal,n.mediation="conditional";return Q(await navigator.credentials.get(n))}async function Y(e=!1){if(!b)return Promise.resolve(!1);const t=!!(window.PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return t&&e&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():t}function z(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=ee(n.publicKey.challenge),null===(t=n.publicKey.allowCredentials)||void 0===t||t.forEach((e=>{e.id=ee(e.id)})),n}function Q(e){return JSON.stringify({id:e.id,rawId:te(e.rawId),type:e.type,response:{authenticatorData:te(e.response.authenticatorData),clientDataJSON:te(e.response.clientDataJSON),signature:te(e.response.signature),userHandle:e.response.userHandle?te(e.response.userHandle):void 0}})}function ee(e){const t=e.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(t),(e=>e.charCodeAt(0))).buffer}function te(e){return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var ne,oe=(ne=e=>({async signUp(t,n,o){const i=await e.webauthn.signUp.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await B(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,r)},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 i=await Z(o.data.options);return await e.webauthn.signIn.finish(o.data.transactionId,i)},async signUpOrIn(t,n){var o;const i=await e.webauthn.signUpOrIn.start(t,window.location.origin,n);if(!i.ok)return i;if(null===(o=i.data)||void 0===o?void 0:o.create){const t=await B(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,t)}{const t=await Z(i.data.options);return await e.webauthn.signIn.finish(i.data.transactionId,t)}},async update(t,n,o){const i=await e.webauthn.update.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await B(i.data.options);return await e.webauthn.update.finish(i.data.transactionId,r)},helpers:{create:B,get:Z,isSupported:Y,conditional:X}}),(...e)=>{const t=ne(...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 ie={config:"/fedcm/config"},re=()=>{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 ae(e,t){var n,o,i;try{const i=await async function(e,t="google",n,o,i){const r=re(),a=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")}}))}(),s=await e.oauth.getOneTapClientId(t);if(!s.ok)throw new Error("Failed to get OneTap client ID for provider "+t);const c=s.data.clientId;return new Promise((e=>{var s,l;const d=n=>{e({provider:t,nonce:r,credential:null==n?void 0:n.credential})};a.initialize(Object.assign(Object.assign({},n),{itp_support:null===(s=null==n?void 0:n.itp_support)||void 0===s||s,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:r})),a.prompt((e=>{var t,n;if(i&&(null==e?void 0:e.isDismissedMoment())){const n=null===(t=e.getDismissedReason)||void 0===t?void 0:t.call(e);return null==i||i(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(!i.credential)return null;if(null==t?void 0:t.onCodeReceived){const o=await e.oauth.verifyOneTapIDToken(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!o.ok||!o.data)throw new Error("Failed to verify OneTap client ID for provider "+i.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(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!n.ok||!n.data)throw new Error("Failed to exchange OneTap client ID for provider "+i.provider);null===(o=null==t?void 0:t.onAuthenticated)||void 0===o||o.call(t,n.data)}}catch(e){null===(i=null==t?void 0:t.onFailed)||void 0===i||i.call(t,e)}}var se=e=>Object.assign(Object.assign({},e.flow),{start:async(...t)=>{const n=await Y(),o=Object.assign(Object.assign({location:window.location.href},t[1]),{deviceInfo:{webAuthnSupport:n},startOptionsVersion:1});return t[1]=o,e.flow.start(...t)}});const ce=()=>window.location.search.includes("code")&&window.location.search.includes("state");let le;const de=(e,t)=>new Promise(((n,o)=>{if(!e.length)return o(new Error("No URLs provided to loadScriptWithFallback"));const i=t();if(i)return n(i);const r=e.shift(),a=document.createElement("script");a.src=r,a.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)})(r),a.onload=()=>{const e=t();if(e)return n(e);throw new Error("Could not get entry after loading script from URL")},a.addEventListener("error",(()=>{de(e,t),a.setAttribute("data-error","true")})),document.body.appendChild(a)}));const ue=async(e,t,n)=>{le||(le=(async()=>{try{return require("oidc-client-ts")}catch(e){return de([k,_],(()=>window.oidc))}})());const{OidcClient:o,WebStorageStateStore:i}=await le;if(!o)throw new Error("oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`");const r=t,a=(null==n?void 0:n.redirectUri)||window.location.href,s=(null==n?void 0:n.scope)||"openid email roles descope.custom_claims offline_access",c=`${r}_user`;let l=e.httpClient.buildUrl(t);(null==n?void 0:n.applicationId)&&(l=`${l}/${n.applicationId}`);const d={authority:l,client_id:t,redirect_uri:a,response_type:"code",scope:s,stateStore:new i({store:window.localStorage,prefix:r}),loadUserInfo:!0,fetchRequestCredentials:"same-origin"};return(null==n?void 0:n.redirectUri)&&(d.redirect_uri=n.redirectUri),(null==n?void 0:n.scope)&&(d.scope=n.scope),{client:new o(d),stateUserKey:c}},pe=(e,t,n)=>{const o=async()=>{let o,i;return o&&i||({client:o,stateUserKey:i}=await ue(e,t,n)),{client:o,stateUserKey:i}},i=async(t="")=>{var n;const{client:i,stateUserKey:r}=await o(),a=await i.processSigninResponse(t||window.location.href);var s;return await(null===(n=e.httpClient.hooks)||void 0===n?void 0:n.afterRequest({},new Response(JSON.stringify(a)))),window.localStorage.setItem(r,JSON.stringify({id_token:(s=a).id_token,session_state:s.session_state,profile:s.profile})),(()=>{const e=new URL(window.location.href);e.searchParams.delete("code"),e.searchParams.delete("state"),window.history.replaceState({},document.title,e.toString())})(),a};return{loginWithRedirect:async(e={},t=!1)=>{const{client:n}=await o(),i=await n.createSigninRequest(e),{url:r}=i;return t||(window.location.href=r),{ok:!0,data:i}},finishLogin:i,finishLoginIfNeed:async(e="")=>{if(ce())return await i(e)},refreshToken:async t=>{var n;const{client:i,stateUserKey:r}=await o(),a=(e=>{const t=window.localStorage.getItem(e);return t?JSON.parse(t):null})(r);if(!a)throw new Error("User not found in storage to refresh token");let s=t;if(!s){const t={};e.httpClient.hooks.beforeRequest(t),s=t.token}const c=await i.useRefreshToken({state:{refresh_token:s,session_state:a.session_state,profile:a.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:i}=await o();e||(e={}),e.id_token_hint=e.id_token_hint||T(),e.post_logout_redirect_uri=e.post_logout_redirect_uri||window.location.href;const r=await n.createSignoutRequest(e),{url:a}=r;return window.localStorage.removeItem(i),t||window.location.replace(a),r}}},ge=function(...e){return t=>e.reduce(((e,t)=>t(e)),t)}((t=>n=>{var{fpKey:o,fpLoad:i}=n,r=e.__rest(n,["fpKey","fpLoad"]);return b?(o&&i&&K(o).catch((()=>null)),t(u(r,{beforeRequest:q}))):t(r)}),(o=>i=>{var{autoRefresh:r}=i,a=e.__rest(i,["autoRefresh"]);if(!r)return o(a);const{clearAllTimers:s,setTimer:c}=(()=>{const e=[];return{clearAllTimers:()=>{for(;e.length;)clearTimeout(e.pop())},setTimer:(t,n)=>{e.push(setTimeout(t,n))}}})();let l,d;b&&document.addEventListener("visibilitychange",(()=>{"visible"===document.visibilityState&&l&&new Date>l&&(m("Expiration time passed, refreshing session"),g.refresh(C()||d))}));const g=o(u(a,{afterRequest:async(e,n)=>{const{sessionJwt:o,refreshJwt:i,sessionExpiration:r}=await p(n);if(401===(null==n?void 0:n.status))m("Received 401, canceling all timers"),s();else if(o||r){if(l=((e,n)=>{if(n)return new Date(1e3*n);m("Could not extract expiration time from session token, trying to decode the token");try{const n=t.jwtDecode(e);if(n.exp)return new Date(1e3*n.exp)}catch(e){return null}})(o,r),!l)return void m("Could not extract expiration time from session token");d=i;const e=I(l);if(s(),e<=2e4)return void m("Session is too close to expiration, not setting refresh timer");const n=new Date(Date.now()+e).toLocaleTimeString("en-US",{hour12:!1});m(`Setting refresh timer for ${n}. (${e}ms)`),c((()=>{m("Refreshing session due to timer"),g.refresh(C()||i)}),e)}}}));return n.wrapWith(g,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return m("Clearing all timers"),s(),n}))}),(e=>t=>e(Object.assign(Object.assign({},t),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.31.1"},t.baseHeaders)}))),(e=>t=>{const o=H(),i=H(),r=H(),a=e(u(t,{afterRequest:async(e,t)=>{if(401===(null==t?void 0:t.status))i.pub(null),r.pub(null),o.pub(null);else{const e=await g(t);e&&r.pub(e);const{sessionJwt:n,sessionExpiration:a}=await p(t);n&&i.pub(n),(a||n)&&o.pub(a||42)}}})),s=n.wrapWith(a,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return i.pub(null),r.pub(null),o.pub(null),n}));return Object.assign(s,{onSessionTokenChange:i.sub,onUserChange:r.sub,onIsAuthenticatedChange:e=>o.sub((t=>{e(!!t)}))})}),(t=>o=>{var{storeLastAuthenticatedUser:i=!0,keepLastAuthenticatedUserAfterLogout:r=!1}=o,a=e.__rest(o,["storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout"]);if(!i)return Object.assign(t(a),{getLastUserLoginId:V,getLastUserDisplayName:F});const s=t(u(a,{afterRequest:async(e,t)=>{var n;const o=await g(t),i=null===(n=null==o?void 0:o.loginIds)||void 0===n?void 0:n[0],r=null==o?void 0:o.name;i&&((e=>{w(P,e)})(i),(e=>{w(N,e)})(r))}}));let c=n.wrapWith(s,["flow.start"],M);return c=n.wrapWith(c,["logout","logoutAll"],W(r)),Object.assign(c,{getLastUserLoginId:V,getLastUserDisplayName:F})}),(t=>o=>{var{persistTokens:i,sessionTokenViaCookie:r,storagePrefix:a}=o,s=e.__rest(o,["persistTokens","sessionTokenViaCookie","storagePrefix"]);if(!i||!b)return t(s);const c=t(u(s,{beforeRequest:(l=a,e=>Object.assign(e,{token:e.token||C(l)})),afterRequest:async(e,t)=>{const n=/^\/v\d+\/mgmt\//.test(e.path);401===(null==t?void 0:t.status)?n||D(a):((e={},t=!1,n="")=>{var o;const{sessionJwt:i,refreshJwt:r}=e;if(r&&w(`${n}${U}`,r),i)if(t){const n=t.sameSite||"Strict",r=null===(o=t.secure)||void 0===o||o;j(O,i,Object.assign(Object.assign({},e),{cookieSameSite:n,cookieSecure:r}))}else w(`${n}${O}`,i);e.idToken&&w(`${n}${x}`,e.idToken)})(await p(t),r,a)}}));var l;const d=n.wrapWith(c,["logout","logoutAll","oidc.logout"],G(a));return Object.assign(d,{getRefreshToken:()=>C(a),getSessionToken:()=>R(a),getIdToken:()=>T(a)})}))((e=>{const t=a.default(e),n=pe(t,e.projectId,e.oidcConfig);return Object.assign(Object.assign({},t),{refresh:async o=>{var i;if(e.oidcConfig)try{return await n.refreshToken(o),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161001",errorDescription:e.toString()}})}const r=R(),a=C();let s="";if(e.getExternalToken)try{s=await(null===(i=e.getExternalToken)||void 0===i?void 0:i.call(e))}catch(e){m("Error getting external token while refreshing",e)}return t.refresh(o,{dcs:r?"t":"f",dcr:a?"t":"f"},s)},logout:async o=>{if(e.oidcConfig)try{return await n.logout({id_token_hint:o}),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161000",errorDescription:e.toString()}})}return t.logout(o)},flow:se(t),webauthn:oe(t),fedcm:(o=t,i=e.projectId,{onetap:{requestExchangeCode(e){ae(o,e)},requestAuthentication(e){ae(o,e)}},oneTap(e,t,n,i,r){ae(o,{provider:e,oneTapConfig:t,loginOptions:n,onSkipped:i,onDismissed:r})},async launch(e){var t;const n={identity:{context:e||"signin",providers:[{configURL:o.httpClient.buildUrl(i+ie.config),clientId:i}]}},r=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(n));return o.refresh(r.token)},isSupported:()=>b&&"IdentityCredential"in window,async isLoggedIn(e){var t;const n=o.httpClient.buildUrl(i+ie.config);try{const o={identity:{context:e||"signin",providers:[{configURL:n,clientId:i}]}},r=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(o));return!!r&&!!r.token}catch(e){return!1}}}),oidc:n});var o,i}));exports.REFRESH_TOKEN_KEY=U,exports.SESSION_TOKEN_KEY=O,exports.clearFingerprintData=()=>{localStorage.removeItem(L)},exports.default=ge,exports.ensureFingerprintIds=K,exports.hasOidcParamsInUrl=ce;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
package/dist/index.d.ts
CHANGED
|
@@ -613,6 +613,12 @@ declare const decoratedCreateSdk: <A extends CookieConfig>({ persistTokens: isPe
|
|
|
613
613
|
}>>;
|
|
614
614
|
exchangeOneTapIDToken: (provider: string, idToken: string, nonce: string, loginOptions?: _descope_core_js_sdk.LoginOptions) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
615
615
|
};
|
|
616
|
+
outbound: {
|
|
617
|
+
connect: (appId: string, options?: {
|
|
618
|
+
redirectURL?: string;
|
|
619
|
+
scopes?: string[];
|
|
620
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
621
|
+
};
|
|
616
622
|
saml: {
|
|
617
623
|
start: (tenantIdOrEmail: string, redirectUrl?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string, ssoId?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
618
624
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
@@ -1260,6 +1266,12 @@ declare const decoratedCreateSdk: <A extends CookieConfig>({ persistTokens: isPe
|
|
|
1260
1266
|
}>>;
|
|
1261
1267
|
exchangeOneTapIDToken: (provider: string, idToken: string, nonce: string, loginOptions?: _descope_core_js_sdk.LoginOptions) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
1262
1268
|
};
|
|
1269
|
+
outbound: {
|
|
1270
|
+
connect: (appId: string, options?: {
|
|
1271
|
+
redirectURL?: string;
|
|
1272
|
+
scopes?: string[];
|
|
1273
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
1274
|
+
};
|
|
1263
1275
|
saml: {
|
|
1264
1276
|
start: (tenantIdOrEmail: string, redirectUrl?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string, ssoId?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
1265
1277
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
@@ -1907,6 +1919,12 @@ declare const decoratedCreateSdk: <A extends CookieConfig>({ persistTokens: isPe
|
|
|
1907
1919
|
}>>;
|
|
1908
1920
|
exchangeOneTapIDToken: (provider: string, idToken: string, nonce: string, loginOptions?: _descope_core_js_sdk.LoginOptions) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
1909
1921
|
};
|
|
1922
|
+
outbound: {
|
|
1923
|
+
connect: (appId: string, options?: {
|
|
1924
|
+
redirectURL?: string;
|
|
1925
|
+
scopes?: string[];
|
|
1926
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
1927
|
+
};
|
|
1910
1928
|
saml: {
|
|
1911
1929
|
start: (tenantIdOrEmail: string, redirectUrl?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string, ssoId?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
1912
1930
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
@@ -2561,6 +2579,12 @@ declare const decoratedCreateSdk: <A extends CookieConfig>({ persistTokens: isPe
|
|
|
2561
2579
|
}>>;
|
|
2562
2580
|
exchangeOneTapIDToken: (provider: string, idToken: string, nonce: string, loginOptions?: _descope_core_js_sdk.LoginOptions) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
2563
2581
|
};
|
|
2582
|
+
outbound: {
|
|
2583
|
+
connect: (appId: string, options?: {
|
|
2584
|
+
redirectURL?: string;
|
|
2585
|
+
scopes?: string[];
|
|
2586
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
2587
|
+
};
|
|
2564
2588
|
saml: {
|
|
2565
2589
|
start: (tenantIdOrEmail: string, redirectUrl?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string, ssoId?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
2566
2590
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
@@ -3208,6 +3232,12 @@ declare const decoratedCreateSdk: <A extends CookieConfig>({ persistTokens: isPe
|
|
|
3208
3232
|
}>>;
|
|
3209
3233
|
exchangeOneTapIDToken: (provider: string, idToken: string, nonce: string, loginOptions?: _descope_core_js_sdk.LoginOptions) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
3210
3234
|
};
|
|
3235
|
+
outbound: {
|
|
3236
|
+
connect: (appId: string, options?: {
|
|
3237
|
+
redirectURL?: string;
|
|
3238
|
+
scopes?: string[];
|
|
3239
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
3240
|
+
};
|
|
3211
3241
|
saml: {
|
|
3212
3242
|
start: (tenantIdOrEmail: string, redirectUrl?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string, ssoId?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
3213
3243
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
@@ -3855,6 +3885,12 @@ declare const decoratedCreateSdk: <A extends CookieConfig>({ persistTokens: isPe
|
|
|
3855
3885
|
}>>;
|
|
3856
3886
|
exchangeOneTapIDToken: (provider: string, idToken: string, nonce: string, loginOptions?: _descope_core_js_sdk.LoginOptions) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
3857
3887
|
};
|
|
3888
|
+
outbound: {
|
|
3889
|
+
connect: (appId: string, options?: {
|
|
3890
|
+
redirectURL?: string;
|
|
3891
|
+
scopes?: string[];
|
|
3892
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
3893
|
+
};
|
|
3858
3894
|
saml: {
|
|
3859
3895
|
start: (tenantIdOrEmail: string, redirectUrl?: string, loginOptions?: _descope_core_js_sdk.LoginOptions, token?: string, ssoId?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
3860
3896
|
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{__rest as e}from"tslib";import{jwtDecode as t}from"jwt-decode";import n,{wrapWith as o}from"@descope/core-js-sdk";import i from"js-cookie";import{load as r,defaultEndpoint as a,defaultScriptUrlPattern as s}from"@fingerprintjs/fingerprintjs-pro";const c=e=>{try{return t(e).exp}catch(e){return null}},l=e=>{const{refresh_expire_in:t,refresh_token:n}=e;return t?Math.floor(Date.now()/1e3)+t:c(n)},d=e=>{const{expires_in:t,expires_at:n,access_token:o}=e;return n||(t?Math.floor(Date.now()/1e3)+t:o?c(o):void 0)},u=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,o)=>{var i;return n[o]=[].concat((null===(i=e.hooks)||void 0===i?void 0:i[o])||[]).concat((null==t?void 0:t[o])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},p=async t=>{if(!(null==t?void 0:t.ok))return{};const n=await(null==t?void 0:t.clone().json());return(t=>{const{access_token:n,id_token:o,refresh_token:i,refresh_expire_in:r}=t,a=e(t,["access_token","id_token","refresh_token","refresh_expire_in"]);return Object.assign({sessionJwt:t.sessionJwt||n,idToken:o,refreshJwt:t.refreshJwt||i,sessionExpiration:t.sessionExpiration||d(t),cookieExpiration:t.cookieExpiration||l(t)},a)})((null==n?void 0:n.authInfo)||n||{})},g=async e=>{const t=await p(e);return(null==t?void 0:t.user)||((null==t?void 0:t.hasOwnProperty("userId"))?t:void 0)},f="undefined"!=typeof localStorage,w=(e,t)=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.setItem(e,t)),h=e=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem(e)),v=e=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.removeItem(e)),m=(...e)=>{console.debug(...e)},y="3.2.0",b="undefined"!=typeof window,k=Math.pow(2,31)-1,S=`https://descopecdn.com/npm/oidc-client-ts@${y}/dist/browser/oidc-client-ts.min.js`,I=`https://cdn.jsdelivr.net/npm/oidc-client-ts@${y}/dist/browser/oidc-client-ts.min.js`,_=e=>{let t=((n=e)?n.getTime()-(new Date).getTime():0)-2e4;var n;return t>k&&(m(`Timeout is too large (${t}ms), setting it to ${k}ms`),t=k),t},O="DS",U="DSR",x="DSI";function j(e,t,n){if(t){const{cookieDomain:o,cookiePath:r,cookieSameSite:a,cookieExpiration:s,cookieSecure:c}=n,l=new Date(1e3*s),d=function(e){const t=window.location.hostname.split("."),n=e.split(".");return t.slice(-n.length).join(".")===e}(o);i.set(e,t,{path:r,domain:d?o:void 0,expires:l,sameSite:a,secure:c})}}function C(e=""){return h(`${e}${U}`)||""}function R(e=""){return i.get(O)||h(`${e}${O}`)||""}function T(e=""){return h(`${e}${x}`)||""}function D(e=""){v(`${e}${U}`),v(`${e}${O}`),v(`${e}${x}`),i.remove(O)}const A=b&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://api.descope.com",E="vsid",J="vrid",L="fp",$=(e=!1)=>{const t=localStorage.getItem(L);if(!t)return null;const n=JSON.parse(t);return(new Date).getTime()>n.expiry&&!e?null:n.value},K=async(e,t=A)=>{try{if($())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 i=new URL(t);i.pathname="/fXj8gt3x8VulJBna/w78aRZnnDZ3Aqw0I";const c=i.toString()+"?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>",l=r({apiKey:e,endpoint:[o.toString(),a],scriptUrlPattern:[c,s]}),d=await l,{requestId:u}=await d.get({linkedId:n}),p=((e,t)=>({[E]:e,[J]:t}))(n,u);(e=>{const t={value:e,expiry:(new Date).getTime()+864e5};localStorage.setItem(L,JSON.stringify(t))})(p)}catch(e){console.warn("Could not load fingerprint",e)}},P=()=>{localStorage.removeItem(L)},q=e=>{const t=$(!0);return t&&e.body&&(e.body.fpData=t),e},N="dls_last_user_login_id",V="dls_last_user_display_name",M=()=>h(N),F=()=>h(V),H=e=>async(...t)=>{var n;t[1]=t[1]||{};const[,o={}]=t,i=M(),r=F();i&&(null!==(n=o.lastAuth)&&void 0!==n||(o.lastAuth={}),o.lastAuth.loginId=i,o.lastAuth.name=r);return await e(...t)},G=e=>t=>async(...n)=>{const o=await t(...n);return e||(v(N),v(V)),o};function B(){const e=[];return{pub:t=>{e.forEach((e=>e(t)))},sub:t=>{const n=e.push(t)-1;return()=>e.splice(n,1)}}}const W=e=>t=>async(...n)=>{const o=await t(...n);return D(e),o};async function Z(e){const t=function(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=te(n.publicKey.challenge),n.publicKey.user.id=te(n.publicKey.user.id),null===(t=n.publicKey.excludeCredentials)||void 0===t||t.forEach((e=>{e.id=te(e.id)})),n}(e),n=await navigator.credentials.create(t);return o=n,JSON.stringify({id:o.id,rawId:ne(o.rawId),type:o.type,response:{attestationObject:ne(o.response.attestationObject),clientDataJSON:ne(o.response.clientDataJSON)}});var o}async function X(e){const t=Y(e);return ee(await navigator.credentials.get(t))}async function z(e,t){const n=Y(e);n.signal=t.signal,n.mediation="conditional";return ee(await navigator.credentials.get(n))}async function Q(e=!1){if(!b)return Promise.resolve(!1);const t=!!(window.PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return t&&e&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():t}function Y(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=te(n.publicKey.challenge),null===(t=n.publicKey.allowCredentials)||void 0===t||t.forEach((e=>{e.id=te(e.id)})),n}function ee(e){return JSON.stringify({id:e.id,rawId:ne(e.rawId),type:e.type,response:{authenticatorData:ne(e.response.authenticatorData),clientDataJSON:ne(e.response.clientDataJSON),signature:ne(e.response.signature),userHandle:e.response.userHandle?ne(e.response.userHandle):void 0}})}function te(e){const t=e.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(t),(e=>e.charCodeAt(0))).buffer}function ne(e){return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var oe,ie=(oe=e=>({async signUp(t,n,o){const i=await e.webauthn.signUp.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await Z(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,r)},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 i=await X(o.data.options);return await e.webauthn.signIn.finish(o.data.transactionId,i)},async signUpOrIn(t,n){var o;const i=await e.webauthn.signUpOrIn.start(t,window.location.origin,n);if(!i.ok)return i;if(null===(o=i.data)||void 0===o?void 0:o.create){const t=await Z(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,t)}{const t=await X(i.data.options);return await e.webauthn.signIn.finish(i.data.transactionId,t)}},async update(t,n,o){const i=await e.webauthn.update.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await Z(i.data.options);return await e.webauthn.update.finish(i.data.transactionId,r)},helpers:{create:Z,get:X,isSupported:Q,conditional:z}}),(...e)=>{const t=oe(...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 re={config:"/fedcm/config"},ae=()=>{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 se(e,t){var n,o,i;try{const i=await async function(e,t="google",n,o,i){const r=ae(),a=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")}}))}(),s=await e.oauth.getOneTapClientId(t);if(!s.ok)throw new Error("Failed to get OneTap client ID for provider "+t);const c=s.data.clientId;return new Promise((e=>{var s,l;const d=n=>{e({provider:t,nonce:r,credential:null==n?void 0:n.credential})};a.initialize(Object.assign(Object.assign({},n),{itp_support:null===(s=null==n?void 0:n.itp_support)||void 0===s||s,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:r})),a.prompt((e=>{var t,n;if(i&&(null==e?void 0:e.isDismissedMoment())){const n=null===(t=e.getDismissedReason)||void 0===t?void 0:t.call(e);return null==i||i(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(!i.credential)return null;if(null==t?void 0:t.onCodeReceived){const o=await e.oauth.verifyOneTapIDToken(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!o.ok||!o.data)throw new Error("Failed to verify OneTap client ID for provider "+i.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(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!n.ok||!n.data)throw new Error("Failed to exchange OneTap client ID for provider "+i.provider);null===(o=null==t?void 0:t.onAuthenticated)||void 0===o||o.call(t,n.data)}}catch(e){null===(i=null==t?void 0:t.onFailed)||void 0===i||i.call(t,e)}}var ce=e=>Object.assign(Object.assign({},e.flow),{start:async(...t)=>{const n=await Q(),o=Object.assign(Object.assign({location:window.location.href},t[1]),{deviceInfo:{webAuthnSupport:n},startOptionsVersion:1});return t[1]=o,e.flow.start(...t)}});const le=()=>window.location.search.includes("code")&&window.location.search.includes("state");let de;const ue=(e,t)=>new Promise(((n,o)=>{if(!e.length)return o(new Error("No URLs provided to loadScriptWithFallback"));const i=t();if(i)return n(i);const r=e.shift(),a=document.createElement("script");a.src=r,a.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)})(r),a.onload=()=>{const e=t();if(e)return n(e);throw new Error("Could not get entry after loading script from URL")},a.addEventListener("error",(()=>{ue(e,t),a.setAttribute("data-error","true")})),document.body.appendChild(a)}));const pe=async(e,t,n)=>{de||(de=(async()=>{try{return require("oidc-client-ts")}catch(e){return ue([S,I],(()=>window.oidc))}})());const{OidcClient:o,WebStorageStateStore:i}=await de;if(!o)throw new Error("oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`");const r=t,a=(null==n?void 0:n.redirectUri)||window.location.href,s=(null==n?void 0:n.scope)||"openid email roles descope.custom_claims offline_access",c=`${r}_user`;let l=e.httpClient.buildUrl(t);(null==n?void 0:n.applicationId)&&(l=`${l}/${n.applicationId}`);const d={authority:l,client_id:t,redirect_uri:a,response_type:"code",scope:s,stateStore:new i({store:window.localStorage,prefix:r}),loadUserInfo:!0,fetchRequestCredentials:"same-origin"};return(null==n?void 0:n.redirectUri)&&(d.redirect_uri=n.redirectUri),(null==n?void 0:n.scope)&&(d.scope=n.scope),{client:new o(d),stateUserKey:c}},ge=(e,t,n)=>{const o=async()=>{let o,i;return o&&i||({client:o,stateUserKey:i}=await pe(e,t,n)),{client:o,stateUserKey:i}},i=async(t="")=>{var n;const{client:i,stateUserKey:r}=await o(),a=await i.processSigninResponse(t||window.location.href);var s;return await(null===(n=e.httpClient.hooks)||void 0===n?void 0:n.afterRequest({},new Response(JSON.stringify(a)))),window.localStorage.setItem(r,JSON.stringify({id_token:(s=a).id_token,session_state:s.session_state,profile:s.profile})),(()=>{const e=new URL(window.location.href);e.searchParams.delete("code"),e.searchParams.delete("state"),window.history.replaceState({},document.title,e.toString())})(),a};return{loginWithRedirect:async(e={},t=!1)=>{const{client:n}=await o(),i=await n.createSigninRequest(e),{url:r}=i;return t||(window.location.href=r),{ok:!0,data:i}},finishLogin:i,finishLoginIfNeed:async(e="")=>{if(le())return await i(e)},refreshToken:async t=>{var n;const{client:i,stateUserKey:r}=await o(),a=(e=>{const t=window.localStorage.getItem(e);return t?JSON.parse(t):null})(r);if(!a)throw new Error("User not found in storage to refresh token");let s=t;if(!s){const t={};e.httpClient.hooks.beforeRequest(t),s=t.token}const c=await i.useRefreshToken({state:{refresh_token:s,session_state:a.session_state,profile:a.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:i}=await o();e||(e={}),e.id_token_hint=e.id_token_hint||T(),e.post_logout_redirect_uri=e.post_logout_redirect_uri||window.location.href;const r=await n.createSignoutRequest(e),{url:a}=r;return window.localStorage.removeItem(i),t||window.location.replace(a),r}}},fe=function(...e){return t=>e.reduce(((e,t)=>t(e)),t)}((t=>n=>{var{fpKey:o,fpLoad:i}=n,r=e(n,["fpKey","fpLoad"]);return b?(o&&i&&K(o).catch((()=>null)),t(u(r,{beforeRequest:q}))):t(r)}),(n=>i=>{var{autoRefresh:r}=i,a=e(i,["autoRefresh"]);if(!r)return n(a);const{clearAllTimers:s,setTimer:c}=(()=>{const e=[];return{clearAllTimers:()=>{for(;e.length;)clearTimeout(e.pop())},setTimer:(t,n)=>{e.push(setTimeout(t,n))}}})();let l,d;b&&document.addEventListener("visibilitychange",(()=>{"visible"===document.visibilityState&&l&&new Date>l&&(m("Expiration time passed, refreshing session"),g.refresh(C()||d))}));const g=n(u(a,{afterRequest:async(e,n)=>{const{sessionJwt:o,refreshJwt:i,sessionExpiration:r}=await p(n);if(401===(null==n?void 0:n.status))m("Received 401, canceling all timers"),s();else if(o||r){if(l=((e,n)=>{if(n)return new Date(1e3*n);m("Could not extract expiration time from session token, trying to decode the token");try{const n=t(e);if(n.exp)return new Date(1e3*n.exp)}catch(e){return null}})(o,r),!l)return void m("Could not extract expiration time from session token");d=i;const e=_(l);if(s(),e<=2e4)return void m("Session is too close to expiration, not setting refresh timer");const n=new Date(Date.now()+e).toLocaleTimeString("en-US",{hour12:!1});m(`Setting refresh timer for ${n}. (${e}ms)`),c((()=>{m("Refreshing session due to timer"),g.refresh(C()||i)}),e)}}}));return o(g,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return m("Clearing all timers"),s(),n}))}),(e=>t=>e(Object.assign(Object.assign({},t),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.31.0"},t.baseHeaders)}))),(e=>t=>{const n=B(),i=B(),r=B(),a=e(u(t,{afterRequest:async(e,t)=>{if(401===(null==t?void 0:t.status))i.pub(null),r.pub(null),n.pub(null);else{const e=await g(t);e&&r.pub(e);const{sessionJwt:o,sessionExpiration:a}=await p(t);o&&i.pub(o),(a||o)&&n.pub(a||42)}}})),s=o(a,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const o=await e(...t);return i.pub(null),r.pub(null),n.pub(null),o}));return Object.assign(s,{onSessionTokenChange:i.sub,onUserChange:r.sub,onIsAuthenticatedChange:e=>n.sub((t=>{e(!!t)}))})}),(t=>n=>{var{storeLastAuthenticatedUser:i=!0,keepLastAuthenticatedUserAfterLogout:r=!1}=n,a=e(n,["storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout"]);if(!i)return Object.assign(t(a),{getLastUserLoginId:M,getLastUserDisplayName:F});const s=t(u(a,{afterRequest:async(e,t)=>{var n;const o=await g(t),i=null===(n=null==o?void 0:o.loginIds)||void 0===n?void 0:n[0],r=null==o?void 0:o.name;i&&((e=>{w(N,e)})(i),(e=>{w(V,e)})(r))}}));let c=o(s,["flow.start"],H);return c=o(c,["logout","logoutAll"],G(r)),Object.assign(c,{getLastUserLoginId:M,getLastUserDisplayName:F})}),(t=>n=>{var{persistTokens:i,sessionTokenViaCookie:r,storagePrefix:a}=n,s=e(n,["persistTokens","sessionTokenViaCookie","storagePrefix"]);if(!i||!b)return t(s);const c=t(u(s,{beforeRequest:(l=a,e=>Object.assign(e,{token:e.token||C(l)})),afterRequest:async(e,t)=>{const n=/^\/v\d+\/mgmt\//.test(e.path);401===(null==t?void 0:t.status)?n||D(a):((e={},t=!1,n="")=>{var o;const{sessionJwt:i,refreshJwt:r}=e;if(r&&w(`${n}${U}`,r),i)if(t){const n=t.sameSite||"Strict",r=null===(o=t.secure)||void 0===o||o;j(O,i,Object.assign(Object.assign({},e),{cookieSameSite:n,cookieSecure:r}))}else w(`${n}${O}`,i);e.idToken&&w(`${n}${x}`,e.idToken)})(await p(t),r,a)}}));var l;const d=o(c,["logout","logoutAll","oidc.logout"],W(a));return Object.assign(d,{getRefreshToken:()=>C(a),getSessionToken:()=>R(a),getIdToken:()=>T(a)})}))((e=>{const t=n(e),o=ge(t,e.projectId,e.oidcConfig);return Object.assign(Object.assign({},t),{refresh:async n=>{var i;if(e.oidcConfig)try{return await o.refreshToken(n),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161001",errorDescription:e.toString()}})}const r=R(),a=C();let s="";if(e.getExternalToken)try{s=await(null===(i=e.getExternalToken)||void 0===i?void 0:i.call(e))}catch(e){m("Error getting external token while refreshing",e)}return t.refresh(n,{dcs:r?"t":"f",dcr:a?"t":"f"},s)},logout:async n=>{if(e.oidcConfig)try{return await o.logout({id_token_hint:n}),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161000",errorDescription:e.toString()}})}return t.logout(n)},flow:ce(t),webauthn:ie(t),fedcm:(i=t,r=e.projectId,{onetap:{requestExchangeCode(e){se(i,e)},requestAuthentication(e){se(i,e)}},oneTap(e,t,n,o,r){se(i,{provider:e,oneTapConfig:t,loginOptions:n,onSkipped:o,onDismissed:r})},async launch(e){var t;const n={identity:{context:e||"signin",providers:[{configURL:i.httpClient.buildUrl(r+re.config),clientId:r}]}},o=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(n));return i.refresh(o.token)},isSupported:()=>b&&"IdentityCredential"in window,async isLoggedIn(e){var t;const n=i.httpClient.buildUrl(r+re.config);try{const o={identity:{context:e||"signin",providers:[{configURL:n,clientId:r}]}},i=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(o));return!!i&&!!i.token}catch(e){return!1}}}),oidc:o});var i,r}));export{U as REFRESH_TOKEN_KEY,O as SESSION_TOKEN_KEY,P as clearFingerprintData,fe as default,K as ensureFingerprintIds,le as hasOidcParamsInUrl};
|
|
1
|
+
import{__rest as e}from"tslib";import{jwtDecode as t}from"jwt-decode";import n,{wrapWith as o}from"@descope/core-js-sdk";import i from"js-cookie";import{load as r,defaultEndpoint as a,defaultScriptUrlPattern as s}from"@fingerprintjs/fingerprintjs-pro";const c=e=>{try{return t(e).exp}catch(e){return null}},l=e=>{const{refresh_expire_in:t,refresh_token:n}=e;return t?Math.floor(Date.now()/1e3)+t:c(n)},d=e=>{const{expires_in:t,expires_at:n,access_token:o}=e;return n||(t?Math.floor(Date.now()/1e3)+t:o?c(o):void 0)},u=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,o)=>{var i;return n[o]=[].concat((null===(i=e.hooks)||void 0===i?void 0:i[o])||[]).concat((null==t?void 0:t[o])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},p=async t=>{if(!(null==t?void 0:t.ok))return{};const n=await(null==t?void 0:t.clone().json());return(t=>{const{access_token:n,id_token:o,refresh_token:i,refresh_expire_in:r}=t,a=e(t,["access_token","id_token","refresh_token","refresh_expire_in"]);return Object.assign({sessionJwt:t.sessionJwt||n,idToken:o,refreshJwt:t.refreshJwt||i,sessionExpiration:t.sessionExpiration||d(t),cookieExpiration:t.cookieExpiration||l(t)},a)})((null==n?void 0:n.authInfo)||n||{})},g=async e=>{const t=await p(e);return(null==t?void 0:t.user)||((null==t?void 0:t.hasOwnProperty("userId"))?t:void 0)},f="undefined"!=typeof localStorage,w=(e,t)=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.setItem(e,t)),h=e=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem(e)),v=e=>f&&(null===localStorage||void 0===localStorage?void 0:localStorage.removeItem(e)),m=(...e)=>{console.debug(...e)},y="3.2.0",b="undefined"!=typeof window,k=Math.pow(2,31)-1,S=`https://descopecdn.com/npm/oidc-client-ts@${y}/dist/browser/oidc-client-ts.min.js`,I=`https://cdn.jsdelivr.net/npm/oidc-client-ts@${y}/dist/browser/oidc-client-ts.min.js`,_=e=>{let t=((n=e)?n.getTime()-(new Date).getTime():0)-2e4;var n;return t>k&&(m(`Timeout is too large (${t}ms), setting it to ${k}ms`),t=k),t},O="DS",U="DSR",x="DSI";function j(e,t,n){if(t){const{cookieDomain:o,cookiePath:r,cookieSameSite:a,cookieExpiration:s,cookieSecure:c}=n,l=new Date(1e3*s),d=function(e){const t=window.location.hostname.split("."),n=e.split(".");return t.slice(-n.length).join(".")===e}(o);i.set(e,t,{path:r,domain:d?o:void 0,expires:l,sameSite:a,secure:c})}}function C(e=""){return h(`${e}${U}`)||""}function R(e=""){return i.get(O)||h(`${e}${O}`)||""}function T(e=""){return h(`${e}${x}`)||""}function D(e=""){v(`${e}${U}`),v(`${e}${O}`),v(`${e}${x}`),i.remove(O)}const A=b&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://api.descope.com",E="vsid",J="vrid",L="fp",$=(e=!1)=>{const t=localStorage.getItem(L);if(!t)return null;const n=JSON.parse(t);return(new Date).getTime()>n.expiry&&!e?null:n.value},K=async(e,t=A)=>{try{if($())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 i=new URL(t);i.pathname="/fXj8gt3x8VulJBna/w78aRZnnDZ3Aqw0I";const c=i.toString()+"?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>",l=r({apiKey:e,endpoint:[o.toString(),a],scriptUrlPattern:[c,s]}),d=await l,{requestId:u}=await d.get({linkedId:n}),p=((e,t)=>({[E]:e,[J]:t}))(n,u);(e=>{const t={value:e,expiry:(new Date).getTime()+864e5};localStorage.setItem(L,JSON.stringify(t))})(p)}catch(e){console.warn("Could not load fingerprint",e)}},P=()=>{localStorage.removeItem(L)},q=e=>{const t=$(!0);return t&&e.body&&(e.body.fpData=t),e},N="dls_last_user_login_id",V="dls_last_user_display_name",M=()=>h(N),F=()=>h(V),H=e=>async(...t)=>{var n;t[1]=t[1]||{};const[,o={}]=t,i=M(),r=F();i&&(null!==(n=o.lastAuth)&&void 0!==n||(o.lastAuth={}),o.lastAuth.loginId=i,o.lastAuth.name=r);return await e(...t)},G=e=>t=>async(...n)=>{const o=await t(...n);return e||(v(N),v(V)),o};function B(){const e=[];return{pub:t=>{e.forEach((e=>e(t)))},sub:t=>{const n=e.push(t)-1;return()=>e.splice(n,1)}}}const W=e=>t=>async(...n)=>{const o=await t(...n);return D(e),o};async function Z(e){const t=function(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=te(n.publicKey.challenge),n.publicKey.user.id=te(n.publicKey.user.id),null===(t=n.publicKey.excludeCredentials)||void 0===t||t.forEach((e=>{e.id=te(e.id)})),n}(e),n=await navigator.credentials.create(t);return o=n,JSON.stringify({id:o.id,rawId:ne(o.rawId),type:o.type,response:{attestationObject:ne(o.response.attestationObject),clientDataJSON:ne(o.response.clientDataJSON)}});var o}async function X(e){const t=Y(e);return ee(await navigator.credentials.get(t))}async function z(e,t){const n=Y(e);n.signal=t.signal,n.mediation="conditional";return ee(await navigator.credentials.get(n))}async function Q(e=!1){if(!b)return Promise.resolve(!1);const t=!!(window.PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return t&&e&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():t}function Y(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=te(n.publicKey.challenge),null===(t=n.publicKey.allowCredentials)||void 0===t||t.forEach((e=>{e.id=te(e.id)})),n}function ee(e){return JSON.stringify({id:e.id,rawId:ne(e.rawId),type:e.type,response:{authenticatorData:ne(e.response.authenticatorData),clientDataJSON:ne(e.response.clientDataJSON),signature:ne(e.response.signature),userHandle:e.response.userHandle?ne(e.response.userHandle):void 0}})}function te(e){const t=e.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(t),(e=>e.charCodeAt(0))).buffer}function ne(e){return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var oe,ie=(oe=e=>({async signUp(t,n,o){const i=await e.webauthn.signUp.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await Z(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,r)},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 i=await X(o.data.options);return await e.webauthn.signIn.finish(o.data.transactionId,i)},async signUpOrIn(t,n){var o;const i=await e.webauthn.signUpOrIn.start(t,window.location.origin,n);if(!i.ok)return i;if(null===(o=i.data)||void 0===o?void 0:o.create){const t=await Z(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,t)}{const t=await X(i.data.options);return await e.webauthn.signIn.finish(i.data.transactionId,t)}},async update(t,n,o){const i=await e.webauthn.update.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await Z(i.data.options);return await e.webauthn.update.finish(i.data.transactionId,r)},helpers:{create:Z,get:X,isSupported:Q,conditional:z}}),(...e)=>{const t=oe(...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 re={config:"/fedcm/config"},ae=()=>{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 se(e,t){var n,o,i;try{const i=await async function(e,t="google",n,o,i){const r=ae(),a=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")}}))}(),s=await e.oauth.getOneTapClientId(t);if(!s.ok)throw new Error("Failed to get OneTap client ID for provider "+t);const c=s.data.clientId;return new Promise((e=>{var s,l;const d=n=>{e({provider:t,nonce:r,credential:null==n?void 0:n.credential})};a.initialize(Object.assign(Object.assign({},n),{itp_support:null===(s=null==n?void 0:n.itp_support)||void 0===s||s,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:r})),a.prompt((e=>{var t,n;if(i&&(null==e?void 0:e.isDismissedMoment())){const n=null===(t=e.getDismissedReason)||void 0===t?void 0:t.call(e);return null==i||i(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(!i.credential)return null;if(null==t?void 0:t.onCodeReceived){const o=await e.oauth.verifyOneTapIDToken(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!o.ok||!o.data)throw new Error("Failed to verify OneTap client ID for provider "+i.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(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!n.ok||!n.data)throw new Error("Failed to exchange OneTap client ID for provider "+i.provider);null===(o=null==t?void 0:t.onAuthenticated)||void 0===o||o.call(t,n.data)}}catch(e){null===(i=null==t?void 0:t.onFailed)||void 0===i||i.call(t,e)}}var ce=e=>Object.assign(Object.assign({},e.flow),{start:async(...t)=>{const n=await Q(),o=Object.assign(Object.assign({location:window.location.href},t[1]),{deviceInfo:{webAuthnSupport:n},startOptionsVersion:1});return t[1]=o,e.flow.start(...t)}});const le=()=>window.location.search.includes("code")&&window.location.search.includes("state");let de;const ue=(e,t)=>new Promise(((n,o)=>{if(!e.length)return o(new Error("No URLs provided to loadScriptWithFallback"));const i=t();if(i)return n(i);const r=e.shift(),a=document.createElement("script");a.src=r,a.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)})(r),a.onload=()=>{const e=t();if(e)return n(e);throw new Error("Could not get entry after loading script from URL")},a.addEventListener("error",(()=>{ue(e,t),a.setAttribute("data-error","true")})),document.body.appendChild(a)}));const pe=async(e,t,n)=>{de||(de=(async()=>{try{return require("oidc-client-ts")}catch(e){return ue([S,I],(()=>window.oidc))}})());const{OidcClient:o,WebStorageStateStore:i}=await de;if(!o)throw new Error("oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`");const r=t,a=(null==n?void 0:n.redirectUri)||window.location.href,s=(null==n?void 0:n.scope)||"openid email roles descope.custom_claims offline_access",c=`${r}_user`;let l=e.httpClient.buildUrl(t);(null==n?void 0:n.applicationId)&&(l=`${l}/${n.applicationId}`);const d={authority:l,client_id:t,redirect_uri:a,response_type:"code",scope:s,stateStore:new i({store:window.localStorage,prefix:r}),loadUserInfo:!0,fetchRequestCredentials:"same-origin"};return(null==n?void 0:n.redirectUri)&&(d.redirect_uri=n.redirectUri),(null==n?void 0:n.scope)&&(d.scope=n.scope),{client:new o(d),stateUserKey:c}},ge=(e,t,n)=>{const o=async()=>{let o,i;return o&&i||({client:o,stateUserKey:i}=await pe(e,t,n)),{client:o,stateUserKey:i}},i=async(t="")=>{var n;const{client:i,stateUserKey:r}=await o(),a=await i.processSigninResponse(t||window.location.href);var s;return await(null===(n=e.httpClient.hooks)||void 0===n?void 0:n.afterRequest({},new Response(JSON.stringify(a)))),window.localStorage.setItem(r,JSON.stringify({id_token:(s=a).id_token,session_state:s.session_state,profile:s.profile})),(()=>{const e=new URL(window.location.href);e.searchParams.delete("code"),e.searchParams.delete("state"),window.history.replaceState({},document.title,e.toString())})(),a};return{loginWithRedirect:async(e={},t=!1)=>{const{client:n}=await o(),i=await n.createSigninRequest(e),{url:r}=i;return t||(window.location.href=r),{ok:!0,data:i}},finishLogin:i,finishLoginIfNeed:async(e="")=>{if(le())return await i(e)},refreshToken:async t=>{var n;const{client:i,stateUserKey:r}=await o(),a=(e=>{const t=window.localStorage.getItem(e);return t?JSON.parse(t):null})(r);if(!a)throw new Error("User not found in storage to refresh token");let s=t;if(!s){const t={};e.httpClient.hooks.beforeRequest(t),s=t.token}const c=await i.useRefreshToken({state:{refresh_token:s,session_state:a.session_state,profile:a.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:i}=await o();e||(e={}),e.id_token_hint=e.id_token_hint||T(),e.post_logout_redirect_uri=e.post_logout_redirect_uri||window.location.href;const r=await n.createSignoutRequest(e),{url:a}=r;return window.localStorage.removeItem(i),t||window.location.replace(a),r}}},fe=function(...e){return t=>e.reduce(((e,t)=>t(e)),t)}((t=>n=>{var{fpKey:o,fpLoad:i}=n,r=e(n,["fpKey","fpLoad"]);return b?(o&&i&&K(o).catch((()=>null)),t(u(r,{beforeRequest:q}))):t(r)}),(n=>i=>{var{autoRefresh:r}=i,a=e(i,["autoRefresh"]);if(!r)return n(a);const{clearAllTimers:s,setTimer:c}=(()=>{const e=[];return{clearAllTimers:()=>{for(;e.length;)clearTimeout(e.pop())},setTimer:(t,n)=>{e.push(setTimeout(t,n))}}})();let l,d;b&&document.addEventListener("visibilitychange",(()=>{"visible"===document.visibilityState&&l&&new Date>l&&(m("Expiration time passed, refreshing session"),g.refresh(C()||d))}));const g=n(u(a,{afterRequest:async(e,n)=>{const{sessionJwt:o,refreshJwt:i,sessionExpiration:r}=await p(n);if(401===(null==n?void 0:n.status))m("Received 401, canceling all timers"),s();else if(o||r){if(l=((e,n)=>{if(n)return new Date(1e3*n);m("Could not extract expiration time from session token, trying to decode the token");try{const n=t(e);if(n.exp)return new Date(1e3*n.exp)}catch(e){return null}})(o,r),!l)return void m("Could not extract expiration time from session token");d=i;const e=_(l);if(s(),e<=2e4)return void m("Session is too close to expiration, not setting refresh timer");const n=new Date(Date.now()+e).toLocaleTimeString("en-US",{hour12:!1});m(`Setting refresh timer for ${n}. (${e}ms)`),c((()=>{m("Refreshing session due to timer"),g.refresh(C()||i)}),e)}}}));return o(g,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return m("Clearing all timers"),s(),n}))}),(e=>t=>e(Object.assign(Object.assign({},t),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.31.1"},t.baseHeaders)}))),(e=>t=>{const n=B(),i=B(),r=B(),a=e(u(t,{afterRequest:async(e,t)=>{if(401===(null==t?void 0:t.status))i.pub(null),r.pub(null),n.pub(null);else{const e=await g(t);e&&r.pub(e);const{sessionJwt:o,sessionExpiration:a}=await p(t);o&&i.pub(o),(a||o)&&n.pub(a||42)}}})),s=o(a,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const o=await e(...t);return i.pub(null),r.pub(null),n.pub(null),o}));return Object.assign(s,{onSessionTokenChange:i.sub,onUserChange:r.sub,onIsAuthenticatedChange:e=>n.sub((t=>{e(!!t)}))})}),(t=>n=>{var{storeLastAuthenticatedUser:i=!0,keepLastAuthenticatedUserAfterLogout:r=!1}=n,a=e(n,["storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout"]);if(!i)return Object.assign(t(a),{getLastUserLoginId:M,getLastUserDisplayName:F});const s=t(u(a,{afterRequest:async(e,t)=>{var n;const o=await g(t),i=null===(n=null==o?void 0:o.loginIds)||void 0===n?void 0:n[0],r=null==o?void 0:o.name;i&&((e=>{w(N,e)})(i),(e=>{w(V,e)})(r))}}));let c=o(s,["flow.start"],H);return c=o(c,["logout","logoutAll"],G(r)),Object.assign(c,{getLastUserLoginId:M,getLastUserDisplayName:F})}),(t=>n=>{var{persistTokens:i,sessionTokenViaCookie:r,storagePrefix:a}=n,s=e(n,["persistTokens","sessionTokenViaCookie","storagePrefix"]);if(!i||!b)return t(s);const c=t(u(s,{beforeRequest:(l=a,e=>Object.assign(e,{token:e.token||C(l)})),afterRequest:async(e,t)=>{const n=/^\/v\d+\/mgmt\//.test(e.path);401===(null==t?void 0:t.status)?n||D(a):((e={},t=!1,n="")=>{var o;const{sessionJwt:i,refreshJwt:r}=e;if(r&&w(`${n}${U}`,r),i)if(t){const n=t.sameSite||"Strict",r=null===(o=t.secure)||void 0===o||o;j(O,i,Object.assign(Object.assign({},e),{cookieSameSite:n,cookieSecure:r}))}else w(`${n}${O}`,i);e.idToken&&w(`${n}${x}`,e.idToken)})(await p(t),r,a)}}));var l;const d=o(c,["logout","logoutAll","oidc.logout"],W(a));return Object.assign(d,{getRefreshToken:()=>C(a),getSessionToken:()=>R(a),getIdToken:()=>T(a)})}))((e=>{const t=n(e),o=ge(t,e.projectId,e.oidcConfig);return Object.assign(Object.assign({},t),{refresh:async n=>{var i;if(e.oidcConfig)try{return await o.refreshToken(n),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161001",errorDescription:e.toString()}})}const r=R(),a=C();let s="";if(e.getExternalToken)try{s=await(null===(i=e.getExternalToken)||void 0===i?void 0:i.call(e))}catch(e){m("Error getting external token while refreshing",e)}return t.refresh(n,{dcs:r?"t":"f",dcr:a?"t":"f"},s)},logout:async n=>{if(e.oidcConfig)try{return await o.logout({id_token_hint:n}),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161000",errorDescription:e.toString()}})}return t.logout(n)},flow:ce(t),webauthn:ie(t),fedcm:(i=t,r=e.projectId,{onetap:{requestExchangeCode(e){se(i,e)},requestAuthentication(e){se(i,e)}},oneTap(e,t,n,o,r){se(i,{provider:e,oneTapConfig:t,loginOptions:n,onSkipped:o,onDismissed:r})},async launch(e){var t;const n={identity:{context:e||"signin",providers:[{configURL:i.httpClient.buildUrl(r+re.config),clientId:r}]}},o=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(n));return i.refresh(o.token)},isSupported:()=>b&&"IdentityCredential"in window,async isLoggedIn(e){var t;const n=i.httpClient.buildUrl(r+re.config);try{const o={identity:{context:e||"signin",providers:[{configURL:n,clientId:r}]}},i=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(o));return!!i&&!!i.token}catch(e){return!1}}}),oidc:o});var i,r}));export{U as REFRESH_TOKEN_KEY,O as SESSION_TOKEN_KEY,P as clearFingerprintData,fe as default,K as ensureFingerprintIds,le as hasOidcParamsInUrl};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!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 i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);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 i=0;for(o=Object.getOwnPropertySymbols(e);i<o.length;i++)t.indexOf(o[i])<0&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(n[o[i]]=e[o[i]])}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 i(e,t){if("string"!=typeof e)throw new n("Invalid token specified: must be a string");t||(t={});const i=!0===t.header?0:1,r=e.split(".")[i];if("string"!=typeof r)throw new n(`Invalid token specified: missing part #${i+1}`);let s;try{s=o(r)}catch(e){throw new n(`Invalid token specified: invalid base64 for part #${i+1} (${e.message})`)}try{return JSON.parse(s)}catch(e){throw new n(`Invalid token specified: invalid json for part #${i+1} (${e.message})`)}}n.prototype.name="InvalidTokenError";const r=e=>{try{return i(e).exp}catch(e){return null}},s=e=>{const{refresh_expire_in:t,refresh_token:n}=e;return t?Math.floor(Date.now()/1e3)+t:r(n)},a=e=>{const{expires_in:t,expires_at:n,access_token:o}=e;return n||(t?Math.floor(Date.now()/1e3)+t:o?r(o):void 0)},c=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,o)=>{var i;return n[o]=[].concat((null===(i=e.hooks)||void 0===i?void 0:i[o])||[]).concat((null==t?void 0:t[o])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},l=async e=>{if(!(null==e?void 0:e.ok))return{};const n=await(null==e?void 0:e.clone().json());return(e=>{const{access_token:n,id_token:o,refresh_token:i,refresh_expire_in:r}=e,c=t(e,["access_token","id_token","refresh_token","refresh_expire_in"]);return Object.assign({sessionJwt:e.sessionJwt||n,idToken:o,refreshJwt:e.refreshJwt||i,sessionExpiration:e.sessionExpiration||a(e),cookieExpiration:e.cookieExpiration||s(e)},c)})((null==n?void 0:n.authInfo)||n||{})},u=async e=>{const t=await l(e);return(null==t?void 0:t.user)||((null==t?void 0:t.hasOwnProperty("userId"))?t:void 0)},d="undefined"!=typeof localStorage,p=(e,t)=>d&&(null===localStorage||void 0===localStorage?void 0:localStorage.setItem(e,t)),g=e=>d&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem(e)),h=e=>d&&(null===localStorage||void 0===localStorage?void 0:localStorage.removeItem(e));var f={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"}},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",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 v="<region>",w=`https://api.${v}descope.com`,m=6e5,y="dct",b=()=>{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},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}};let k;const I=()=>{if(k)return k;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 k=`${t}-${n}`,k};var O,U;(U=O||(O={})).get="GET",U.delete="DELETE",U.post="POST",U.put="PUT",U.patch="PATCH";const j=({path:e,baseUrl:t,queryParams:n,projectId:o})=>{const i=o.slice(1,-27);t=t.replace(v,i?i+".":"");let r=e?`${t.replace(/\/$/,"")}/${null==e?void 0:e.replace(/^\//,"")}`:t;if(n){const e=Object.keys(n);e.forEach(((t,o)=>{r=`${r}${0===o?"?":""}${t}=${encodeURIComponent(n[t])}${o===e.length-1?"":"&"}`}))}return r},S=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,o])=>(e[n]=o,e)),e),e}),{})),T={"Content-Type":"application/json"},x=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},R=e=>{const t={"x-descope-sdk-session-id":I(),"x-descope-sdk-name":"core-js","x-descope-sdk-version":"2.42.0"};return e&&(t["x-descope-refresh-cookie-name"]=e),t},C=e=>{try{e=JSON.parse(e)}catch(e){return!1}return"object"==typeof e&&null!==e},E=({baseUrl:e,projectId:t,baseConfig:n,refreshCookieName:o,logger:i,hooks:r,cookiePolicy:s,fetch:a})=>{const c=((e,t)=>{const n=(e=>async(...t)=>{const n=await e(...t),o=await n.text();return n.text=()=>Promise.resolve(o),n.json=()=>Promise.resolve(JSON.parse(o)),n.clone=()=>n,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=>b().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const o=await n(...t);return e[o.ok?"log":"error"](await(async e=>{const t=await e.text();return b().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})(o)),o}:n})(i,a),l=async i=>{var a;const l=(null==r?void 0:r.beforeRequest)?r.beforeRequest(i):i,{path:u,body:d,headers:p,queryParams:g,method:h,token:f}=l,v=(e=>void 0===e?void 0:JSON.stringify(e))(d),w={headers:S(x(t,f),R(o),(null==n?void 0:n.baseHeaders)||{},C(v)?T:{},p),method:h,body:v};null!==s&&(w.credentials=s||"include");const m=await c(j({path:u,baseUrl:e,queryParams:g,projectId:t}),w);if((null==r?void 0:r.afterRequest)&&await r.afterRequest(i,null==m?void 0:m.clone()),null==r?void 0:r.transformResponse){const e=await m.json(),t=((null===(a=m.headers)||void 0===a?void 0:a.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,r.transformResponse(n)}return m};return{get:(e,{headers:t,queryParams:n,token:o}={})=>l({path:e,headers:t,queryParams:n,body:void 0,method:O.get,token:o}),post:(e,t,{headers:n,queryParams:o,token:i}={})=>l({path:e,headers:n,queryParams:o,body:t,method:O.post,token:i}),patch:(e,t,{headers:n,queryParams:o,token:i}={})=>l({path:e,headers:n,queryParams:o,body:t,method:O.patch,token:i}),put:(e,t,{headers:n,queryParams:o,token:i}={})=>l({path:e,headers:n,queryParams:o,body:t,method:O.put,token:i}),delete:(e,{headers:t,queryParams:n,token:o}={})=>l({path:e,headers:t,queryParams:n,body:void 0,method:O.delete,token:o}),hooks:r,buildUrl:(n,o)=>j({projectId:t,baseUrl:e,path:n,queryParams:o})}};var P=429;function _(e,t,n){var o;let i=$(e);if(t){if(!(null==i?void 0:i.tenants)&&(null==i?void 0:i[y])===t)return(null==i?void 0:i[n])||[];i=null===(o=null==i?void 0:i.tenants)||void 0===o?void 0:o[t]}const r=null==i?void 0:i[n];return Array.isArray(r)?r:[]}function $(e){if("string"!=typeof e||!e)throw new Error("Invalid token provided");return i(e)}function A(e){const{exp:t}=$(e);return(new Date).getTime()/1e3>t}function D(e){let t=$(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function L(e,t){return _(e,t,"permissions")}function q(e,t){return _(e,t,"roles")}const N=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function J(e,t){var n;const o=await e,i={code:o.status,ok:o.ok,response:o},r=await o.clone().json();return o.ok?i.data=r:(i.error=r,o.status===P&&Object.assign(i.error,{retryAfter:Number.parseInt(null===(n=o.headers)||void 0===n?void 0:n.get("retry-after"))||0})),i}function K(e){var t;return(null===(t=$(e))||void 0===t?void 0:t[y])||""}const M=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),F=(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 "))},V=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),H=e=>t=>e.test(t),B=H(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),z=H(/^\+[1-9]{1}[0-9]{3,14}$/),Z=M(B,'"{val}" is not a valid email'),G=M(z,'"{val}" is not a valid phone number'),W=M((e=>e.length>=1),"Minimum length is 1");const Y=M((e=>"string"==typeof e),"Input is not a string"),X=M((e=>Array.isArray(e)),"Input is not an array"),Q=M((e=>"boolean"==typeof e),"Input is not a boolean"),ee=M((e=>void 0===e),"Input is defined"),te=F([Y(),ee()],"Input is not a string or undefined"),ne=F([X(),Q()],"Input is not an array or boolean"),oe=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>V(...e).validate(n[t]))),t(...n)),ie=e=>[Y(`"${e}" must be a string`)],re=e=>[te(`"${e}" must be string or undefined`)],se=e=>[Y(`"${e}" must be a string`),W(`"${e}" must not be empty`)],ae=e=>[Y(`"${e}" must be a string`),Z()],ce=e=>[Y(`"${e}" must be a string`),G()],le=oe(se("accessKey")),ue=e=>({exchange:le(((t,n)=>J(e.post(f.accessKey.exchange,{loginOptions:n},{token:t}))))}),de=(e,t,n)=>(t.forEach((t=>{const o=t.split(".");let i=o.shift(),r=e;for(;o.length>0;){if(r=r[i],!i||!r)throw Error(`Invalid path "${t}", "${i}" is missing or has no value`);i=o.shift()}if("function"!=typeof r[i])throw Error(`"${t}" is not a function`);const s=r[i];r[i]=n(s)})),e),pe=({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||1e3,1e3),timeoutMs:Math.min(t||m,m)});var ge,he;!function(e){e.sms="sms",e.voice="voice",e.whatsapp="whatsapp"}(ge||(ge={})),function(e){e.email="email"}(he||(he={}));const fe=Object.assign(Object.assign({},ge),he);var ve;!function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(ve||(ve={}));const we=se("loginId"),me=oe(se("token")),ye=oe(we),be=oe(se("pendingRef")),ke=oe(we,ae("email")),Ie=e=>({verify:me((t=>J(e.post(f.enchantedLink.verify,{token:t})))),signIn:ye(((t,n,o,i)=>J(e.post(N(f.enchantedLink.signIn,fe.email),{loginId:t,URI:n,loginOptions:o},{token:i})))),signUpOrIn:ye(((t,n,o)=>J(e.post(N(f.enchantedLink.signUpOrIn,fe.email),{loginId:t,URI:n,loginOptions:o})))),signUp:ye(((t,n,o,i)=>J(e.post(N(f.enchantedLink.signUp,fe.email),{loginId:t,URI:n,user:o,loginOptions:i})))),waitForSession:be(((t,n)=>new Promise((o=>{const{pollingIntervalMs:i,timeoutMs:r}=pe(n);let s;const a=setInterval((async()=>{const n=await e.post(f.enchantedLink.session,{pendingRef:t});n.ok&&(clearInterval(a),s&&clearTimeout(s),o(J(Promise.resolve(n))))}),i);s=setTimeout((()=>{o({error:{errorDescription:`Session polling timeout exceeded: ${r}ms`,errorCode:"0"},ok:!1}),clearInterval(a)}),r)})))),update:{email:ke(((t,n,o,i,r)=>J(e.post(f.enchantedLink.update.email,Object.assign({loginId:t,email:n,URI:o},r),{token:i}))))}}),Oe=oe(se("flowId")),Ue=oe(se("executionId"),se("stepId"),se("interactionId")),je=e=>({start:Oe(((t,n,o,i,r,s,a)=>J(e.post(f.flow.start,{flowId:t,options:n,conditionInteractionId:o,interactionId:i,componentsVersion:r,flowVersions:s,input:a})))),next:Ue(((t,n,o,i,r,s)=>J(e.post(f.flow.next,{executionId:t,stepId:n,interactionId:o,version:i,componentsVersion:r,input:s}))))}),Se=se("loginId"),Te=oe(se("token")),xe=oe(Se),Re=oe(Se,ce("phone")),Ce=oe(Se,ae("email")),Ee=Object.keys(fe).filter((e=>e!==ge.voice)),Pe=e=>({verify:Te((t=>J(e.post(f.magicLink.verify,{token:t})))),signIn:Ee.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:xe(((t,o,i,r)=>J(e.post(N(f.magicLink.signIn,n),{loginId:t,URI:o,loginOptions:i},{token:r}))))})),{}),signUp:Ee.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:xe(((t,o,i,r)=>J(e.post(N(f.magicLink.signUp,n),{loginId:t,URI:o,user:i,loginOptions:r}))))})),{}),signUpOrIn:Ee.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:xe(((t,o,i)=>J(e.post(N(f.magicLink.signUpOrIn,n),{loginId:t,URI:o,loginOptions:i}))))})),{}),update:{email:Ce(((t,n,o,i,r)=>J(e.post(f.magicLink.update.email,Object.assign({loginId:t,email:n,URI:o},r),{token:i})))),phone:Object.keys(ge).filter((e=>e!==ge.voice)).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Re(((t,o,i,r,s)=>J(e.post(N(f.magicLink.update.phone,n),Object.assign({loginId:t,phone:o,URI:i},s),{token:r}))))})),{})}});var _e;!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"}(_e||(_e={}));const $e=oe(se("code")),Ae=e=>({start:Object.assign(((t,n,o,i)=>J(e.post(f.oauth.start,o||{},{queryParams:Object.assign({provider:t},n&&{redirectURL:n}),token:i}))),Object.keys(_e).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:(t,o,i)=>J(e.post(f.oauth.start,o||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i}))})),{})),exchange:$e((t=>J(e.post(f.oauth.exchange,{code:t})))),startNative:(t,n,o)=>J(e.post(f.oauth.startNative,{provider:t,loginOptions:n,implicit:o})),finishNative:(t,n,o,i,r)=>J(e.post(f.oauth.finishNative,{provider:t,stateId:n,user:o,code:i,idToken:r})),getOneTapClientId:t=>J(e.get(f.oauth.oneTap.getOneTapClientId.replace("{provider}",t))),verifyOneTapIDToken:(t,n,o,i)=>J(e.post(f.oauth.oneTap.verifyOneTapIDToken,{provider:t,idToken:n,nonce:o,loginOptions:i})),exchangeOneTapIDToken:(t,n,o,i)=>J(e.post(f.oauth.oneTap.exchangeOneTapIDToken,{provider:t,idToken:n,nonce:o,loginOptions:i}))}),De=se("loginId"),Le=oe(De,se("code")),qe=oe(De),Ne=oe(De,ce("phone")),Je=oe(De,ae("email")),Ke=e=>({verify:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Le(((t,o)=>J(e.post(N(f.otp.verify,n),{code:o,loginId:t}))))})),{}),signIn:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:qe(((t,o,i)=>J(e.post(N(f.otp.signIn,n),{loginId:t,loginOptions:o},{token:i}))))})),{}),signUp:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:qe(((t,o,i)=>J(e.post(N(f.otp.signUp,n),{loginId:t,user:o,loginOptions:i}))))})),{}),signUpOrIn:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:qe(((t,o)=>J(e.post(N(f.otp.signUpOrIn,n),{loginId:t,loginOptions:o}))))})),{}),update:{email:Je(((t,n,o,i)=>J(e.post(f.otp.update.email,Object.assign({loginId:t,email:n},i),{token:o})))),phone:Object.keys(ge).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ne(((t,o,i,r)=>J(e.post(N(f.otp.update.phone,n),Object.assign({loginId:t,phone:o},r),{token:i}))))})),{})}}),Me=oe(se("tenant")),Fe=oe(se("code")),Ve=e=>({start:Me(((t,n,o,i,r)=>J(e.post(f.saml.start,o||{},Object.assign({queryParams:Object.assign(Object.assign({tenant:t},n&&{redirectURL:n}),r&&{ssoId:r})},i&&{token:i}))))),exchange:Fe((t=>J(e.post(f.saml.exchange,{code:t}))))}),He=se("loginId"),Be=oe(He,se("code")),ze=oe(He),Ze=oe(He),Ge=e=>({signUp:ze(((t,n)=>J(e.post(f.totp.signUp,{loginId:t,user:n})))),verify:Be(((t,n,o,i)=>J(e.post(f.totp.verify,{loginId:t,code:n,loginOptions:o},{token:i})))),update:Ze(((t,n)=>J(e.post(f.totp.update,{loginId:t},{token:n}))))}),We=se("loginId"),Ye=se("newPassword"),Xe=oe(We,se("password")),Qe=oe(We),et=oe(We,Ye),tt=oe(We,se("oldPassword"),Ye),nt=e=>({signUp:Xe(((t,n,o,i)=>J(e.post(f.password.signUp,{loginId:t,password:n,user:o,loginOptions:i})))),signIn:Xe(((t,n,o)=>J(e.post(f.password.signIn,{loginId:t,password:n,loginOptions:o})))),sendReset:Qe(((t,n,o)=>J(e.post(f.password.sendReset,{loginId:t,redirectUrl:n,templateOptions:o})))),update:et(((t,n,o)=>J(e.post(f.password.update,{loginId:t,newPassword:n},{token:o})))),replace:tt(((t,n,o)=>J(e.post(f.password.replace,{loginId:t,oldPassword:n,newPassword:o})))),policy:()=>J(e.get(f.password.policy))}),ot=ie("loginId"),it=se("loginId"),rt=se("origin"),st=oe(it,rt,se("name")),at=oe(it,rt),ct=oe(ot,rt),lt=oe(it,rt,re("token")),ut=oe(se("transactionId"),se("response")),dt=e=>({signUp:{start:st(((t,n,o,i)=>J(e.post(f.webauthn.signUp.start,{user:{loginId:t,name:o},origin:n,passkeyOptions:i})))),finish:ut(((t,n)=>J(e.post(f.webauthn.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:ct(((t,n,o,i,r)=>J(e.post(f.webauthn.signIn.start,{loginId:t,origin:n,loginOptions:o,passkeyOptions:r},{token:i})))),finish:ut(((t,n)=>J(e.post(f.webauthn.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:at(((t,n,o)=>J(e.post(f.webauthn.signUpOrIn.start,{loginId:t,origin:n,passkeyOptions:o}))))},update:{start:lt(((t,n,o,i)=>J(e.post(f.webauthn.update.start,{loginId:t,origin:n,passkeyOptions:i},{token:o})))),finish:ut(((t,n)=>J(e.post(f.webauthn.update.finish,{transactionId:t,response:n}))))}}),pt=ie("loginId"),gt=oe(pt),ht=oe(se("pendingRef")),ft=e=>({signUpOrIn:gt(((t,n)=>J(e.post(f.notp.signUpOrIn,{loginId:t,loginOptions:n})))),signUp:gt(((t,n,o)=>J(e.post(f.notp.signUp,{loginId:t,user:n,loginOptions:o})))),signIn:gt(((t,n,o)=>J(e.post(f.notp.signIn,{loginId:t,loginOptions:n},{token:o})))),waitForSession:ht(((t,n)=>new Promise((o=>{const{pollingIntervalMs:i,timeoutMs:r}=pe(n);let s;const a=setInterval((async()=>{const n=await e.post(f.notp.session,{pendingRef:t});n.ok&&(clearInterval(a),s&&clearTimeout(s),o(J(Promise.resolve(n))))}),i);s=setTimeout((()=>{o({error:{errorDescription:`Session polling timeout exceeded: ${r}ms`,errorCode:"0"},ok:!1}),clearInterval(a)}),r)}))))}),vt=oe(se("token")),wt=oe(re("token"));var mt,yt=oe([(mt=se("projectId"),M(((e,t)=>n=>V(...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 i=0,r=e===Object(e)?e:void 0;for(;null!=r&&i<o;)r=r[n[i++]];return i&&i===o&&void 0!==r?r:void 0})(n,e)))("projectId",mt))())])((e=>t=>{var n;return e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>{var n;const o=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]);return null==o?void 0:o.reduce(((e,t)=>t(e)),e)},afterRequest:async(e,n)=>{var o;const i=[].concat((null===(o=t.hooks)||void 0===o?void 0:o.afterRequest)||[]);0!=i.length&&(await Promise.allSettled(null==i?void 0:i.map((t=>t(e,null==n?void 0:n.clone()))))).forEach((e=>{var n;return"rejected"===e.status&&(null===(n=t.logger)||void 0===n?void 0:n.error(e.reason))}))},transformResponse:null===(n=t.hooks)||void 0===n?void 0:n.transformResponse}}))})((({projectId:e,logger:t,baseUrl:n,hooks:o,cookiePolicy:i,baseHeaders:r={},refreshCookieName:s,fetch:a})=>{return c=E({baseUrl:n||w,projectId:e,logger:t,hooks:o,cookiePolicy:i,baseConfig:{baseHeaders:r},refreshCookieName:s,fetch:a}),{accessKey:ue(c),otp:Ke(c),magicLink:Pe(c),enchantedLink:Ie(c),oauth:Ae(c),saml:Ve(c),totp:Ge(c),notp:ft(c),webauthn:dt(c),password:nt(c),flow:je(c),refresh:wt(((e,t,n)=>{const o={};return n&&(o.externalToken=n),J(c.post(f.refresh,o,{token:e,queryParams:t}))})),selectTenant:oe([Y("tenantId")],[te('"token" must be string or undefined')])(((e,t)=>J(c.post(f.selectTenant,{tenant:e},{token:t})))),logout:wt((e=>J(c.post(f.logout,{},{token:e})))),logoutAll:wt((e=>J(c.post(f.logoutAll,{},{token:e})))),me:wt((e=>J(c.get(f.me,{token:e})))),myTenants:oe([ne('"tenants" must a string array or a boolean')],[te('"token" must be string or undefined')])(((e,t)=>{const n={};return"boolean"==typeof e?n.dct=e:n.ids=e,J(c.post(f.myTenants,n,{token:t}))})),history:wt((e=>J(c.get(f.history,{token:e})))),isJwtExpired:vt(A),getTenants:vt(D),getJwtPermissions:vt(L),getJwtRoles:vt(q),getCurrentTenant:vt(K),httpClient:c};var c}))),bt=Object.assign(yt,{DeliveryMethods:fe});const kt=(...e)=>{console.debug(...e)},It="3.2.0",Ot="undefined"!=typeof window,Ut=Math.pow(2,31)-1,jt=`https://descopecdn.com/npm/oidc-client-ts@${It}/dist/browser/oidc-client-ts.min.js`,St=`https://cdn.jsdelivr.net/npm/oidc-client-ts@${It}/dist/browser/oidc-client-ts.min.js`,Tt=e=>{let t=((n=e)?n.getTime()-(new Date).getTime():0)-2e4;var n;return t>Ut&&(kt(`Timeout is too large (${t}ms), setting it to ${Ut}ms`),t=Ut),t};
|
|
1
|
+
!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 i in t=arguments[n])Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);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 i=0;for(o=Object.getOwnPropertySymbols(e);i<o.length;i++)t.indexOf(o[i])<0&&Object.prototype.propertyIsEnumerable.call(e,o[i])&&(n[o[i]]=e[o[i]])}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 i(e,t){if("string"!=typeof e)throw new n("Invalid token specified: must be a string");t||(t={});const i=!0===t.header?0:1,r=e.split(".")[i];if("string"!=typeof r)throw new n(`Invalid token specified: missing part #${i+1}`);let s;try{s=o(r)}catch(e){throw new n(`Invalid token specified: invalid base64 for part #${i+1} (${e.message})`)}try{return JSON.parse(s)}catch(e){throw new n(`Invalid token specified: invalid json for part #${i+1} (${e.message})`)}}n.prototype.name="InvalidTokenError";const r=e=>{try{return i(e).exp}catch(e){return null}},s=e=>{const{refresh_expire_in:t,refresh_token:n}=e;return t?Math.floor(Date.now()/1e3)+t:r(n)},a=e=>{const{expires_in:t,expires_at:n,access_token:o}=e;return n||(t?Math.floor(Date.now()/1e3)+t:o?r(o):void 0)},c=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,o)=>{var i;return n[o]=[].concat((null===(i=e.hooks)||void 0===i?void 0:i[o])||[]).concat((null==t?void 0:t[o])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},l=async e=>{if(!(null==e?void 0:e.ok))return{};const n=await(null==e?void 0:e.clone().json());return(e=>{const{access_token:n,id_token:o,refresh_token:i,refresh_expire_in:r}=e,c=t(e,["access_token","id_token","refresh_token","refresh_expire_in"]);return Object.assign({sessionJwt:e.sessionJwt||n,idToken:o,refreshJwt:e.refreshJwt||i,sessionExpiration:e.sessionExpiration||a(e),cookieExpiration:e.cookieExpiration||s(e)},c)})((null==n?void 0:n.authInfo)||n||{})},u=async e=>{const t=await l(e);return(null==t?void 0:t.user)||((null==t?void 0:t.hasOwnProperty("userId"))?t:void 0)},d="undefined"!=typeof localStorage,p=(e,t)=>d&&(null===localStorage||void 0===localStorage?void 0:localStorage.setItem(e,t)),g=e=>d&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem(e)),h=e=>d&&(null===localStorage||void 0===localStorage?void 0:localStorage.removeItem(e));var f={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",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 v="<region>",w=`https://api.${v}descope.com`,m=6e5,y="dct",b=()=>{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},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}};let k;const I=()=>{if(k)return k;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 k=`${t}-${n}`,k};var O,U;(U=O||(O={})).get="GET",U.delete="DELETE",U.post="POST",U.put="PUT",U.patch="PATCH";const j=({path:e,baseUrl:t,queryParams:n,projectId:o})=>{const i=o.slice(1,-27);t=t.replace(v,i?i+".":"");let r=e?`${t.replace(/\/$/,"")}/${null==e?void 0:e.replace(/^\//,"")}`:t;if(n){const e=Object.keys(n);e.forEach(((t,o)=>{r=`${r}${0===o?"?":""}${t}=${encodeURIComponent(n[t])}${o===e.length-1?"":"&"}`}))}return r},S=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,o])=>(e[n]=o,e)),e),e}),{})),T={"Content-Type":"application/json"},x=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},R=e=>{const t={"x-descope-sdk-session-id":I(),"x-descope-sdk-name":"core-js","x-descope-sdk-version":"2.43.0"};return e&&(t["x-descope-refresh-cookie-name"]=e),t},C=e=>{try{e=JSON.parse(e)}catch(e){return!1}return"object"==typeof e&&null!==e},E=({baseUrl:e,projectId:t,baseConfig:n,refreshCookieName:o,logger:i,hooks:r,cookiePolicy:s,fetch:a})=>{const c=((e,t)=>{const n=(e=>async(...t)=>{const n=await e(...t),o=await n.text();return n.text=()=>Promise.resolve(o),n.json=()=>Promise.resolve(JSON.parse(o)),n.clone=()=>n,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=>b().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const o=await n(...t);return e[o.ok?"log":"error"](await(async e=>{const t=await e.text();return b().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})(o)),o}:n})(i,a),l=async i=>{var a;const l=(null==r?void 0:r.beforeRequest)?r.beforeRequest(i):i,{path:u,body:d,headers:p,queryParams:g,method:h,token:f}=l,v=(e=>void 0===e?void 0:JSON.stringify(e))(d),w={headers:S(x(t,f),R(o),(null==n?void 0:n.baseHeaders)||{},C(v)?T:{},p),method:h,body:v};null!==s&&(w.credentials=s||"include");const m=await c(j({path:u,baseUrl:e,queryParams:g,projectId:t}),w);if((null==r?void 0:r.afterRequest)&&await r.afterRequest(i,null==m?void 0:m.clone()),null==r?void 0:r.transformResponse){const e=await m.json(),t=((null===(a=m.headers)||void 0===a?void 0:a.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,r.transformResponse(n)}return m};return{get:(e,{headers:t,queryParams:n,token:o}={})=>l({path:e,headers:t,queryParams:n,body:void 0,method:O.get,token:o}),post:(e,t,{headers:n,queryParams:o,token:i}={})=>l({path:e,headers:n,queryParams:o,body:t,method:O.post,token:i}),patch:(e,t,{headers:n,queryParams:o,token:i}={})=>l({path:e,headers:n,queryParams:o,body:t,method:O.patch,token:i}),put:(e,t,{headers:n,queryParams:o,token:i}={})=>l({path:e,headers:n,queryParams:o,body:t,method:O.put,token:i}),delete:(e,{headers:t,queryParams:n,token:o}={})=>l({path:e,headers:t,queryParams:n,body:void 0,method:O.delete,token:o}),hooks:r,buildUrl:(n,o)=>j({projectId:t,baseUrl:e,path:n,queryParams:o})}};var P=429;function _(e,t,n){var o;let i=$(e);if(t){if(!(null==i?void 0:i.tenants)&&(null==i?void 0:i[y])===t)return(null==i?void 0:i[n])||[];i=null===(o=null==i?void 0:i.tenants)||void 0===o?void 0:o[t]}const r=null==i?void 0:i[n];return Array.isArray(r)?r:[]}function $(e){if("string"!=typeof e||!e)throw new Error("Invalid token provided");return i(e)}function A(e){const{exp:t}=$(e);return(new Date).getTime()/1e3>t}function D(e){let t=$(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function L(e,t){return _(e,t,"permissions")}function q(e,t){return _(e,t,"roles")}const N=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function J(e,t){var n;const o=await e,i={code:o.status,ok:o.ok,response:o},r=await o.clone().json();return o.ok?i.data=r:(i.error=r,o.status===P&&Object.assign(i.error,{retryAfter:Number.parseInt(null===(n=o.headers)||void 0===n?void 0:n.get("retry-after"))||0})),i}function K(e){var t;return(null===(t=$(e))||void 0===t?void 0:t[y])||""}const M=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),F=(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 "))},V=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),H=e=>t=>e.test(t),B=H(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),z=H(/^\+[1-9]{1}[0-9]{3,14}$/),Z=M(B,'"{val}" is not a valid email'),G=M(z,'"{val}" is not a valid phone number'),W=M((e=>e.length>=1),"Minimum length is 1");const Y=M((e=>"string"==typeof e),"Input is not a string"),X=M((e=>Array.isArray(e)),"Input is not an array"),Q=M((e=>"boolean"==typeof e),"Input is not a boolean"),ee=M((e=>void 0===e),"Input is defined"),te=F([Y(),ee()],"Input is not a string or undefined"),ne=F([X(),Q()],"Input is not an array or boolean"),oe=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>V(...e).validate(n[t]))),t(...n)),ie=e=>[Y(`"${e}" must be a string`)],re=e=>[te(`"${e}" must be string or undefined`)],se=e=>[Y(`"${e}" must be a string`),W(`"${e}" must not be empty`)],ae=e=>[Y(`"${e}" must be a string`),Z()],ce=e=>[Y(`"${e}" must be a string`),G()],le=oe(se("accessKey")),ue=e=>({exchange:le(((t,n)=>J(e.post(f.accessKey.exchange,{loginOptions:n},{token:t}))))}),de=(e,t,n)=>(t.forEach((t=>{const o=t.split(".");let i=o.shift(),r=e;for(;o.length>0;){if(r=r[i],!i||!r)throw Error(`Invalid path "${t}", "${i}" is missing or has no value`);i=o.shift()}if("function"!=typeof r[i])throw Error(`"${t}" is not a function`);const s=r[i];r[i]=n(s)})),e),pe=({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||1e3,1e3),timeoutMs:Math.min(t||m,m)});var ge,he;!function(e){e.sms="sms",e.voice="voice",e.whatsapp="whatsapp"}(ge||(ge={})),function(e){e.email="email"}(he||(he={}));const fe=Object.assign(Object.assign({},ge),he);var ve;!function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(ve||(ve={}));const we=se("loginId"),me=oe(se("token")),ye=oe(we),be=oe(se("pendingRef")),ke=oe(we,ae("email")),Ie=e=>({verify:me((t=>J(e.post(f.enchantedLink.verify,{token:t})))),signIn:ye(((t,n,o,i)=>J(e.post(N(f.enchantedLink.signIn,fe.email),{loginId:t,URI:n,loginOptions:o},{token:i})))),signUpOrIn:ye(((t,n,o)=>J(e.post(N(f.enchantedLink.signUpOrIn,fe.email),{loginId:t,URI:n,loginOptions:o})))),signUp:ye(((t,n,o,i)=>J(e.post(N(f.enchantedLink.signUp,fe.email),{loginId:t,URI:n,user:o,loginOptions:i})))),waitForSession:be(((t,n)=>new Promise((o=>{const{pollingIntervalMs:i,timeoutMs:r}=pe(n);let s;const a=setInterval((async()=>{const n=await e.post(f.enchantedLink.session,{pendingRef:t});n.ok&&(clearInterval(a),s&&clearTimeout(s),o(J(Promise.resolve(n))))}),i);s=setTimeout((()=>{o({error:{errorDescription:`Session polling timeout exceeded: ${r}ms`,errorCode:"0"},ok:!1}),clearInterval(a)}),r)})))),update:{email:ke(((t,n,o,i,r)=>J(e.post(f.enchantedLink.update.email,Object.assign({loginId:t,email:n,URI:o},r),{token:i}))))}}),Oe=oe(se("flowId")),Ue=oe(se("executionId"),se("stepId"),se("interactionId")),je=e=>({start:Oe(((t,n,o,i,r,s,a)=>J(e.post(f.flow.start,{flowId:t,options:n,conditionInteractionId:o,interactionId:i,componentsVersion:r,flowVersions:s,input:a})))),next:Ue(((t,n,o,i,r,s)=>J(e.post(f.flow.next,{executionId:t,stepId:n,interactionId:o,version:i,componentsVersion:r,input:s}))))}),Se=se("loginId"),Te=oe(se("token")),xe=oe(Se),Re=oe(Se,ce("phone")),Ce=oe(Se,ae("email")),Ee=Object.keys(fe).filter((e=>e!==ge.voice)),Pe=e=>({verify:Te((t=>J(e.post(f.magicLink.verify,{token:t})))),signIn:Ee.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:xe(((t,o,i,r)=>J(e.post(N(f.magicLink.signIn,n),{loginId:t,URI:o,loginOptions:i},{token:r}))))})),{}),signUp:Ee.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:xe(((t,o,i,r)=>J(e.post(N(f.magicLink.signUp,n),{loginId:t,URI:o,user:i,loginOptions:r}))))})),{}),signUpOrIn:Ee.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:xe(((t,o,i)=>J(e.post(N(f.magicLink.signUpOrIn,n),{loginId:t,URI:o,loginOptions:i}))))})),{}),update:{email:Ce(((t,n,o,i,r)=>J(e.post(f.magicLink.update.email,Object.assign({loginId:t,email:n,URI:o},r),{token:i})))),phone:Object.keys(ge).filter((e=>e!==ge.voice)).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Re(((t,o,i,r,s)=>J(e.post(N(f.magicLink.update.phone,n),Object.assign({loginId:t,phone:o,URI:i},s),{token:r}))))})),{})}});var _e;!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"}(_e||(_e={}));const $e=oe(se("code")),Ae=e=>({start:Object.assign(((t,n,o,i)=>J(e.post(f.oauth.start,o||{},{queryParams:Object.assign({provider:t},n&&{redirectURL:n}),token:i}))),Object.keys(_e).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:(t,o,i)=>J(e.post(f.oauth.start,o||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i}))})),{})),exchange:$e((t=>J(e.post(f.oauth.exchange,{code:t})))),startNative:(t,n,o)=>J(e.post(f.oauth.startNative,{provider:t,loginOptions:n,implicit:o})),finishNative:(t,n,o,i,r)=>J(e.post(f.oauth.finishNative,{provider:t,stateId:n,user:o,code:i,idToken:r})),getOneTapClientId:t=>J(e.get(f.oauth.oneTap.getOneTapClientId.replace("{provider}",t))),verifyOneTapIDToken:(t,n,o,i)=>J(e.post(f.oauth.oneTap.verifyOneTapIDToken,{provider:t,idToken:n,nonce:o,loginOptions:i})),exchangeOneTapIDToken:(t,n,o,i)=>J(e.post(f.oauth.oneTap.exchangeOneTapIDToken,{provider:t,idToken:n,nonce:o,loginOptions:i}))}),De=se("appId"),Le=oe(De),qe=e=>({connect:Le(((t,n,o)=>J(e.post(f.outbound.connect,{appId:t,options:n},{token:o}))))}),Ne=se("loginId"),Je=oe(Ne,se("code")),Ke=oe(Ne),Me=oe(Ne,ce("phone")),Fe=oe(Ne,ae("email")),Ve=e=>({verify:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Je(((t,o)=>J(e.post(N(f.otp.verify,n),{code:o,loginId:t}))))})),{}),signIn:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ke(((t,o,i)=>J(e.post(N(f.otp.signIn,n),{loginId:t,loginOptions:o},{token:i}))))})),{}),signUp:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ke(((t,o,i)=>J(e.post(N(f.otp.signUp,n),{loginId:t,user:o,loginOptions:i}))))})),{}),signUpOrIn:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ke(((t,o)=>J(e.post(N(f.otp.signUpOrIn,n),{loginId:t,loginOptions:o}))))})),{}),update:{email:Fe(((t,n,o,i)=>J(e.post(f.otp.update.email,Object.assign({loginId:t,email:n},i),{token:o})))),phone:Object.keys(ge).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Me(((t,o,i,r)=>J(e.post(N(f.otp.update.phone,n),Object.assign({loginId:t,phone:o},r),{token:i}))))})),{})}}),He=oe(se("tenant")),Be=oe(se("code")),ze=e=>({start:He(((t,n,o,i,r)=>J(e.post(f.saml.start,o||{},Object.assign({queryParams:Object.assign(Object.assign({tenant:t},n&&{redirectURL:n}),r&&{ssoId:r})},i&&{token:i}))))),exchange:Be((t=>J(e.post(f.saml.exchange,{code:t}))))}),Ze=se("loginId"),Ge=oe(Ze,se("code")),We=oe(Ze),Ye=oe(Ze),Xe=e=>({signUp:We(((t,n)=>J(e.post(f.totp.signUp,{loginId:t,user:n})))),verify:Ge(((t,n,o,i)=>J(e.post(f.totp.verify,{loginId:t,code:n,loginOptions:o},{token:i})))),update:Ye(((t,n)=>J(e.post(f.totp.update,{loginId:t},{token:n}))))}),Qe=se("loginId"),et=se("newPassword"),tt=oe(Qe,se("password")),nt=oe(Qe),ot=oe(Qe,et),it=oe(Qe,se("oldPassword"),et),rt=e=>({signUp:tt(((t,n,o,i)=>J(e.post(f.password.signUp,{loginId:t,password:n,user:o,loginOptions:i})))),signIn:tt(((t,n,o)=>J(e.post(f.password.signIn,{loginId:t,password:n,loginOptions:o})))),sendReset:nt(((t,n,o)=>J(e.post(f.password.sendReset,{loginId:t,redirectUrl:n,templateOptions:o})))),update:ot(((t,n,o)=>J(e.post(f.password.update,{loginId:t,newPassword:n},{token:o})))),replace:it(((t,n,o)=>J(e.post(f.password.replace,{loginId:t,oldPassword:n,newPassword:o})))),policy:()=>J(e.get(f.password.policy))}),st=ie("loginId"),at=se("loginId"),ct=se("origin"),lt=oe(at,ct,se("name")),ut=oe(at,ct),dt=oe(st,ct),pt=oe(at,ct,re("token")),gt=oe(se("transactionId"),se("response")),ht=e=>({signUp:{start:lt(((t,n,o,i)=>J(e.post(f.webauthn.signUp.start,{user:{loginId:t,name:o},origin:n,passkeyOptions:i})))),finish:gt(((t,n)=>J(e.post(f.webauthn.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:dt(((t,n,o,i,r)=>J(e.post(f.webauthn.signIn.start,{loginId:t,origin:n,loginOptions:o,passkeyOptions:r},{token:i})))),finish:gt(((t,n)=>J(e.post(f.webauthn.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:ut(((t,n,o)=>J(e.post(f.webauthn.signUpOrIn.start,{loginId:t,origin:n,passkeyOptions:o}))))},update:{start:pt(((t,n,o,i)=>J(e.post(f.webauthn.update.start,{loginId:t,origin:n,passkeyOptions:i},{token:o})))),finish:gt(((t,n)=>J(e.post(f.webauthn.update.finish,{transactionId:t,response:n}))))}}),ft=ie("loginId"),vt=oe(ft),wt=oe(se("pendingRef")),mt=e=>({signUpOrIn:vt(((t,n)=>J(e.post(f.notp.signUpOrIn,{loginId:t,loginOptions:n})))),signUp:vt(((t,n,o)=>J(e.post(f.notp.signUp,{loginId:t,user:n,loginOptions:o})))),signIn:vt(((t,n,o)=>J(e.post(f.notp.signIn,{loginId:t,loginOptions:n},{token:o})))),waitForSession:wt(((t,n)=>new Promise((o=>{const{pollingIntervalMs:i,timeoutMs:r}=pe(n);let s;const a=setInterval((async()=>{const n=await e.post(f.notp.session,{pendingRef:t});n.ok&&(clearInterval(a),s&&clearTimeout(s),o(J(Promise.resolve(n))))}),i);s=setTimeout((()=>{o({error:{errorDescription:`Session polling timeout exceeded: ${r}ms`,errorCode:"0"},ok:!1}),clearInterval(a)}),r)}))))}),yt=oe(se("token")),bt=oe(re("token"));var kt,It=oe([(kt=se("projectId"),M(((e,t)=>n=>V(...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 i=0,r=e===Object(e)?e:void 0;for(;null!=r&&i<o;)r=r[n[i++]];return i&&i===o&&void 0!==r?r:void 0})(n,e)))("projectId",kt))())])((e=>t=>{var n;return e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>{var n;const o=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]);return null==o?void 0:o.reduce(((e,t)=>t(e)),e)},afterRequest:async(e,n)=>{var o;const i=[].concat((null===(o=t.hooks)||void 0===o?void 0:o.afterRequest)||[]);0!=i.length&&(await Promise.allSettled(null==i?void 0:i.map((t=>t(e,null==n?void 0:n.clone()))))).forEach((e=>{var n;return"rejected"===e.status&&(null===(n=t.logger)||void 0===n?void 0:n.error(e.reason))}))},transformResponse:null===(n=t.hooks)||void 0===n?void 0:n.transformResponse}}))})((({projectId:e,logger:t,baseUrl:n,hooks:o,cookiePolicy:i,baseHeaders:r={},refreshCookieName:s,fetch:a})=>{return c=E({baseUrl:n||w,projectId:e,logger:t,hooks:o,cookiePolicy:i,baseConfig:{baseHeaders:r},refreshCookieName:s,fetch:a}),{accessKey:ue(c),otp:Ve(c),magicLink:Pe(c),enchantedLink:Ie(c),oauth:Ae(c),outbound:qe(c),saml:ze(c),totp:Xe(c),notp:mt(c),webauthn:ht(c),password:rt(c),flow:je(c),refresh:bt(((e,t,n)=>{const o={};return n&&(o.externalToken=n),J(c.post(f.refresh,o,{token:e,queryParams:t}))})),selectTenant:oe([Y("tenantId")],[te('"token" must be string or undefined')])(((e,t)=>J(c.post(f.selectTenant,{tenant:e},{token:t})))),logout:bt((e=>J(c.post(f.logout,{},{token:e})))),logoutAll:bt((e=>J(c.post(f.logoutAll,{},{token:e})))),me:bt((e=>J(c.get(f.me,{token:e})))),myTenants:oe([ne('"tenants" must a string array or a boolean')],[te('"token" must be string or undefined')])(((e,t)=>{const n={};return"boolean"==typeof e?n.dct=e:n.ids=e,J(c.post(f.myTenants,n,{token:t}))})),history:bt((e=>J(c.get(f.history,{token:e})))),isJwtExpired:yt(A),getTenants:yt(D),getJwtPermissions:yt(L),getJwtRoles:yt(q),getCurrentTenant:yt(K),httpClient:c};var c}))),Ot=Object.assign(It,{DeliveryMethods:fe});const Ut=(...e)=>{console.debug(...e)},jt="3.2.0",St="undefined"!=typeof window,Tt=Math.pow(2,31)-1,xt=`https://descopecdn.com/npm/oidc-client-ts@${jt}/dist/browser/oidc-client-ts.min.js`,Rt=`https://cdn.jsdelivr.net/npm/oidc-client-ts@${jt}/dist/browser/oidc-client-ts.min.js`,Ct=e=>{let t=((n=e)?n.getTime()-(new Date).getTime():0)-2e4;var n;return t>Tt&&(Ut(`Timeout is too large (${t}ms), setting it to ${Tt}ms`),t=Tt),t};
|
|
2
2
|
/*! js-cookie v3.0.5 | MIT */
|
|
3
|
-
function xt(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 Rt=function e(t,n){function o(e,o,i){if("undefined"!=typeof document){"number"==typeof(i=xt({},n,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var r="";for(var s in i)i[s]&&(r+="; "+s,!0!==i[s]&&(r+="="+i[s].split(";")[0]));return document.cookie=e+"="+t.write(o,e)+r}}return Object.create({set:o,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var n=document.cookie?document.cookie.split("; "):[],o={},i=0;i<n.length;i++){var r=n[i].split("="),s=r.slice(1).join("=");try{var a=decodeURIComponent(r[0]);if(o[a]=t.read(s,a),e===a)break}catch(e){}}return e?o[e]:o}},remove:function(e,t){o(e,"",xt({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,xt({},this.attributes,t))},withConverter:function(t){return e(xt({},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 Ct="DS",Et="DSR",Pt="DSI";function _t(e,t,n){if(t){const{cookieDomain:o,cookiePath:i,cookieSameSite:r,cookieExpiration:s,cookieSecure:a}=n,c=new Date(1e3*s),l=function(e){const t=window.location.hostname.split("."),n=e.split(".");return t.slice(-n.length).join(".")===e}(o);Rt.set(e,t,{path:i,domain:l?o:void 0,expires:c,sameSite:r,secure:a})}}function $t(e=""){return g(`${e}${Et}`)||""}function At(e=""){return Rt.get(Ct)||g(`${e}${Ct}`)||""}function Dt(e=""){return g(`${e}${Pt}`)||""}function Lt(e=""){h(`${e}${Et}`),h(`${e}${Ct}`),h(`${e}${Pt}`),Rt.remove(Ct)}const qt=Ot&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://api.descope.com",Nt="vsid",Jt="vrid";var Kt={default:"endpoint"},Mt="Blocked by CSP",Ft="The endpoint parameter is not a valid URL",Vt="Failed to load the JS script of the agent",Ht="9319";function Bt(e,t){var n,o,i,r,s,a=[],c=(n=function(e){var t=function(e,t,n){if(n||2===arguments.length)for(var o,i=0,r=t.length;i<r;i++)!o&&i in t||(o||(o=Array.prototype.slice.call(t,0,i)),o[i]=t[i]);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),r=0,o=function(){return Math.random()*Math.min(3e3,100*Math.pow(2,r++))},i=new Set,[n.current(),function(e,t){var r,s=t instanceof Error?t.message:"";if(s===Mt||s===Ft)n.exclude(),r=0;else if(s===Ht)n.exclude();else if(s===Vt){var a=Date.now()-e.getTime()<50,c=n.current();c&&a&&!i.has(c)&&(i.add(c),r=0),n.postpone()}else n.postpone();var l=n.current();return void 0===l?void 0:[l,null!=r?r:e.getTime()+o()-Date.now()]}]),l=c[0],u=c[1];if(void 0===l)return Promise.reject(new TypeError("The list of script URL patterns is empty"));var d=function(e){var n=new Date,o=function(t){return a.push({url:e,startedAt:n,finishedAt:new Date,error:t})},i=t(e);return i.then((function(){return o()}),o),i.catch((function(e){if(null!=s||(s=e),a.length>=5)throw s;var t=u(n,e);if(!t)throw s;var o,i=t[0],r=t[1];return(o=r,new Promise((function(e){return setTimeout(e,o)}))).then((function(){return d(i)}))}))};return d(l).then((function(e){return[e,a]}))}var zt="https://fpnpmcdn.net/v<version>/<apiKey>/loader_v<loaderVersion>.js",Zt=zt;function Gt(n){var o;n.scriptUrlPattern;var i=n.token,r=n.apiKey,s=void 0===r?i:r,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:zt,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]}(),u=l[0],d=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 Bt(e,Wt)})).catch((function(e){throw d(),function(e){return e instanceof Error&&e.message===Ht?new Error(Vt):e}(e)})).then((function(t){var n=t[0],o=t[1];return d(),n.load(e(e({},a),{ldi:{attempts:o,visibilityStates:u}}))}))}function Wt(e){return function(e,t,n){var o,i=document,r="securitypolicyviolation",s=function(t){var n=new URL(e,location.href),i=t.blockedURI;i!==n.href&&i!==n.protocol.slice(0,-1)&&i!==n.origin||(o=t,a())};i.addEventListener(r,s);var a=function(){return i.removeEventListener(r,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(Ft);var o=document.createElement("script"),i=function(){var e;return null===(e=o.parentNode)||void 0===e?void 0:e.removeChild(o)},r=document.head||document.getElementsByTagName("head")[0];o.onload=function(){i(),t()},o.onerror=function(){i(),n(new Error(Vt))},o.async=!0,o.src=e,r.appendChild(o)}))}(e)}),(function(){throw new Error(Mt)})).then(Yt)}function Yt(){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(Ht);return n}const Xt=(e=!1)=>{const t=localStorage.getItem("fp");if(!t)return null;const n=JSON.parse(t);return(new Date).getTime()>n.expiry&&!e?null:n.value},Qt=async(e,t=qt)=>{try{if(Xt())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 i=new URL(t);i.pathname="/fXj8gt3x8VulJBna/w78aRZnnDZ3Aqw0I";const r=i.toString()+"?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>",s=Gt({apiKey:e,endpoint:[o.toString(),Kt],scriptUrlPattern:[r,Zt]}),a=await s,{requestId:c}=await a.get({linkedId:n}),l=((e,t)=>({[Nt]:e,[Jt]:t}))(n,c);(e=>{const t={value:e,expiry:(new Date).getTime()+864e5};localStorage.setItem("fp",JSON.stringify(t))})(l)}catch(e){console.warn("Could not load fingerprint",e)}},en=e=>{const t=Xt(!0);return t&&e.body&&(e.body.fpData=t),e},tn="dls_last_user_login_id",nn="dls_last_user_display_name",on=()=>g(tn),rn=()=>g(nn),sn=e=>async(...t)=>{var n;t[1]=t[1]||{};const[,o={}]=t,i=on(),r=rn();i&&(null!==(n=o.lastAuth)&&void 0!==n||(o.lastAuth={}),o.lastAuth.loginId=i,o.lastAuth.name=r);return await e(...t)},an=e=>t=>async(...n)=>{const o=await t(...n);return e||(h(tn),h(nn)),o};function cn(){const e=[];return{pub:t=>{e.forEach((e=>e(t)))},sub:t=>{const n=e.push(t)-1;return()=>e.splice(n,1)}}}const ln=e=>t=>async(...n)=>{const o=await t(...n);return Lt(e),o};async function un(e){const t=function(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=vn(n.publicKey.challenge),n.publicKey.user.id=vn(n.publicKey.user.id),null===(t=n.publicKey.excludeCredentials)||void 0===t||t.forEach((e=>{e.id=vn(e.id)})),n}(e),n=await navigator.credentials.create(t);return o=n,JSON.stringify({id:o.id,rawId:wn(o.rawId),type:o.type,response:{attestationObject:wn(o.response.attestationObject),clientDataJSON:wn(o.response.clientDataJSON)}});var o}async function dn(e){const t=hn(e);return fn(await navigator.credentials.get(t))}async function pn(e,t){const n=hn(e);n.signal=t.signal,n.mediation="conditional";return fn(await navigator.credentials.get(n))}async function gn(e=!1){if(!Ot)return Promise.resolve(!1);const t=!!(window.PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return t&&e&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():t}function hn(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=vn(n.publicKey.challenge),null===(t=n.publicKey.allowCredentials)||void 0===t||t.forEach((e=>{e.id=vn(e.id)})),n}function fn(e){return JSON.stringify({id:e.id,rawId:wn(e.rawId),type:e.type,response:{authenticatorData:wn(e.response.authenticatorData),clientDataJSON:wn(e.response.clientDataJSON),signature:wn(e.response.signature),userHandle:e.response.userHandle?wn(e.response.userHandle):void 0}})}function vn(e){const t=e.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(t),(e=>e.charCodeAt(0))).buffer}function wn(e){return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var mn,yn=(mn=e=>({async signUp(t,n,o){const i=await e.webauthn.signUp.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await un(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,r)},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 i=await dn(o.data.options);return await e.webauthn.signIn.finish(o.data.transactionId,i)},async signUpOrIn(t,n){var o;const i=await e.webauthn.signUpOrIn.start(t,window.location.origin,n);if(!i.ok)return i;if(null===(o=i.data)||void 0===o?void 0:o.create){const t=await un(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,t)}{const t=await dn(i.data.options);return await e.webauthn.signIn.finish(i.data.transactionId,t)}},async update(t,n,o){const i=await e.webauthn.update.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await un(i.data.options);return await e.webauthn.update.finish(i.data.transactionId,r)},helpers:{create:un,get:dn,isSupported:gn,conditional:pn}}),(...e)=>{const t=mn(...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 bn={config:"/fedcm/config"},kn=()=>{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 In(e,t){var n,o,i;try{const i=await async function(e,t="google",n,o,i){const r=kn(),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 u=n=>{e({provider:t,nonce:r,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:u,nonce:r})),s.prompt((e=>{var t,n;if(i&&(null==e?void 0:e.isDismissedMoment())){const n=null===(t=e.getDismissedReason)||void 0===t?void 0:t.call(e);return null==i||i(n),void u()}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 u()}}))}))}(e,t.provider,t.oneTapConfig,t.onSkipped,t.onDismissed);if(!i.credential)return null;if(null==t?void 0:t.onCodeReceived){const o=await e.oauth.verifyOneTapIDToken(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!o.ok||!o.data)throw new Error("Failed to verify OneTap client ID for provider "+i.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(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!n.ok||!n.data)throw new Error("Failed to exchange OneTap client ID for provider "+i.provider);null===(o=null==t?void 0:t.onAuthenticated)||void 0===o||o.call(t,n.data)}}catch(e){null===(i=null==t?void 0:t.onFailed)||void 0===i||i.call(t,e)}}var On=e=>Object.assign(Object.assign({},e.flow),{start:async(...t)=>{const n=await gn(),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 Un;const jn=(e,t)=>new Promise(((n,o)=>{if(!e.length)return o(new Error("No URLs provided to loadScriptWithFallback"));const i=t();if(i)return n(i);const r=e.shift(),s=document.createElement("script");s.src=r,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)})(r),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",(()=>{jn(e,t),s.setAttribute("data-error","true")})),document.body.appendChild(s)}));const Sn=async(e,t,n)=>{Un||(Un=(async()=>{try{return require("oidc-client-ts")}catch(e){return jn([jt,St],(()=>window.oidc))}})());const{OidcClient:o,WebStorageStateStore:i}=await Un;if(!o)throw new Error("oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`");const r=t,s=(null==n?void 0:n.redirectUri)||window.location.href,a=(null==n?void 0:n.scope)||"openid email roles descope.custom_claims offline_access",c=`${r}_user`;let l=e.httpClient.buildUrl(t);(null==n?void 0:n.applicationId)&&(l=`${l}/${n.applicationId}`);const u={authority:l,client_id:t,redirect_uri:s,response_type:"code",scope:a,stateStore:new i({store:window.localStorage,prefix:r}),loadUserInfo:!0,fetchRequestCredentials:"same-origin"};return(null==n?void 0:n.redirectUri)&&(u.redirect_uri=n.redirectUri),(null==n?void 0:n.scope)&&(u.scope=n.scope),{client:new o(u),stateUserKey:c}},Tn=(e,t,n)=>{const o=async()=>{let o,i;return o&&i||({client:o,stateUserKey:i}=await Sn(e,t,n)),{client:o,stateUserKey:i}},i=async(t="")=>{var n;const{client:i,stateUserKey:r}=await o(),s=await i.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)))),window.localStorage.setItem(r,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(),i=await n.createSigninRequest(e),{url:r}=i;return t||(window.location.href=r),{ok:!0,data:i}},finishLogin:i,finishLoginIfNeed:async(e="")=>{if(window.location.search.includes("code")&&window.location.search.includes("state"))return await i(e)},refreshToken:async t=>{var n;const{client:i,stateUserKey:r}=await o(),s=(e=>{const t=window.localStorage.getItem(e);return t?JSON.parse(t):null})(r);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 i.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:i}=await o();e||(e={}),e.id_token_hint=e.id_token_hint||Dt(),e.post_logout_redirect_uri=e.post_logout_redirect_uri||window.location.href;const r=await n.createSignoutRequest(e),{url:s}=r;return window.localStorage.removeItem(i),t||window.location.replace(s),r}}},xn=function(...e){return t=>e.reduce(((e,t)=>t(e)),t)}((e=>n=>{var{fpKey:o,fpLoad:i}=n,r=t(n,["fpKey","fpLoad"]);return Ot?(o&&i&&Qt(o).catch((()=>null)),e(c(r,{beforeRequest:en}))):e(r)}),(e=>n=>{var{autoRefresh:o}=n,r=t(n,["autoRefresh"]);if(!o)return e(r);const{clearAllTimers:s,setTimer:a}=(()=>{const e=[];return{clearAllTimers:()=>{for(;e.length;)clearTimeout(e.pop())},setTimer:(t,n)=>{e.push(setTimeout(t,n))}}})();let u,d;Ot&&document.addEventListener("visibilitychange",(()=>{"visible"===document.visibilityState&&u&&new Date>u&&(kt("Expiration time passed, refreshing session"),p.refresh($t()||d))}));const p=e(c(r,{afterRequest:async(e,t)=>{const{sessionJwt:n,refreshJwt:o,sessionExpiration:r}=await l(t);if(401===(null==t?void 0:t.status))kt("Received 401, canceling all timers"),s();else if(n||r){if(u=((e,t)=>{if(t)return new Date(1e3*t);kt("Could not extract expiration time from session token, trying to decode the token");try{const t=i(e);if(t.exp)return new Date(1e3*t.exp)}catch(e){return null}})(n,r),!u)return void kt("Could not extract expiration time from session token");d=o;const e=Tt(u);if(s(),e<=2e4)return void kt("Session is too close to expiration, not setting refresh timer");const t=new Date(Date.now()+e).toLocaleTimeString("en-US",{hour12:!1});kt(`Setting refresh timer for ${t}. (${e}ms)`),a((()=>{kt("Refreshing session due to timer"),p.refresh($t()||o)}),e)}}}));return de(p,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return kt("Clearing all timers"),s(),n}))}),(e=>t=>e(Object.assign(Object.assign({},t),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.31.0"},t.baseHeaders)}))),(e=>t=>{const n=cn(),o=cn(),i=cn(),r=e(c(t,{afterRequest:async(e,t)=>{if(401===(null==t?void 0:t.status))o.pub(null),i.pub(null),n.pub(null);else{const e=await u(t);e&&i.pub(e);const{sessionJwt:r,sessionExpiration:s}=await l(t);r&&o.pub(r),(s||r)&&n.pub(s||42)}}})),s=de(r,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const r=await e(...t);return o.pub(null),i.pub(null),n.pub(null),r}));return Object.assign(s,{onSessionTokenChange:o.sub,onUserChange:i.sub,onIsAuthenticatedChange:e=>n.sub((t=>{e(!!t)}))})}),(e=>n=>{var{storeLastAuthenticatedUser:o=!0,keepLastAuthenticatedUserAfterLogout:i=!1}=n,r=t(n,["storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout"]);if(!o)return Object.assign(e(r),{getLastUserLoginId:on,getLastUserDisplayName:rn});const s=e(c(r,{afterRequest:async(e,t)=>{var n;const o=await u(t),i=null===(n=null==o?void 0:o.loginIds)||void 0===n?void 0:n[0],r=null==o?void 0:o.name;i&&((e=>{p(tn,e)})(i),(e=>{p(nn,e)})(r))}}));let a=de(s,["flow.start"],sn);return a=de(a,["logout","logoutAll"],an(i)),Object.assign(a,{getLastUserLoginId:on,getLastUserDisplayName:rn})}),(e=>n=>{var{persistTokens:o,sessionTokenViaCookie:i,storagePrefix:r}=n,s=t(n,["persistTokens","sessionTokenViaCookie","storagePrefix"]);if(!o||!Ot)return e(s);const a=e(c(s,{beforeRequest:(u=r,e=>Object.assign(e,{token:e.token||$t(u)})),afterRequest:async(e,t)=>{const n=/^\/v\d+\/mgmt\//.test(e.path);401===(null==t?void 0:t.status)?n||Lt(r):((e={},t=!1,n="")=>{var o;const{sessionJwt:i,refreshJwt:r}=e;if(r&&p(`${n}${Et}`,r),i)if(t){const n=t.sameSite||"Strict",r=null===(o=t.secure)||void 0===o||o;_t(Ct,i,Object.assign(Object.assign({},e),{cookieSameSite:n,cookieSecure:r}))}else p(`${n}${Ct}`,i);e.idToken&&p(`${n}${Pt}`,e.idToken)})(await l(t),i,r)}}));var u;const d=de(a,["logout","logoutAll","oidc.logout"],ln(r));return Object.assign(d,{getRefreshToken:()=>$t(r),getSessionToken:()=>At(r),getIdToken:()=>Dt(r)})}))((e=>{const t=bt(e),n=Tn(t,e.projectId,e.oidcConfig);return Object.assign(Object.assign({},t),{refresh:async o=>{var i;if(e.oidcConfig)try{return await n.refreshToken(o),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161001",errorDescription:e.toString()}})}const r=At(),s=$t();let a="";if(e.getExternalToken)try{a=await(null===(i=e.getExternalToken)||void 0===i?void 0:i.call(e))}catch(e){kt("Error getting external token while refreshing",e)}return t.refresh(o,{dcs:r?"t":"f",dcr:s?"t":"f"},a)},logout:async o=>{if(e.oidcConfig)try{return await n.logout({id_token_hint:o}),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161000",errorDescription:e.toString()}})}return t.logout(o)},flow:On(t),webauthn:yn(t),fedcm:(o=t,i=e.projectId,{onetap:{requestExchangeCode(e){In(o,e)},requestAuthentication(e){In(o,e)}},oneTap(e,t,n,i,r){In(o,{provider:e,oneTapConfig:t,loginOptions:n,onSkipped:i,onDismissed:r})},async launch(e){var t;const n={identity:{context:e||"signin",providers:[{configURL:o.httpClient.buildUrl(i+bn.config),clientId:i}]}},r=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(n));return o.refresh(r.token)},isSupported:()=>Ot&&"IdentityCredential"in window,async isLoggedIn(e){var t;const n=o.httpClient.buildUrl(i+bn.config);try{const o={identity:{context:e||"signin",providers:[{configURL:n,clientId:i}]}},r=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(o));return!!r&&!!r.token}catch(e){return!1}}}),oidc:n});var o,i}));return xn.REFRESH_TOKEN_KEY=Et,xn.SESSION_TOKEN_KEY=Ct,xn}));
|
|
3
|
+
function Et(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 Pt=function e(t,n){function o(e,o,i){if("undefined"!=typeof document){"number"==typeof(i=Et({},n,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),e=encodeURIComponent(e).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape);var r="";for(var s in i)i[s]&&(r+="; "+s,!0!==i[s]&&(r+="="+i[s].split(";")[0]));return document.cookie=e+"="+t.write(o,e)+r}}return Object.create({set:o,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var n=document.cookie?document.cookie.split("; "):[],o={},i=0;i<n.length;i++){var r=n[i].split("="),s=r.slice(1).join("=");try{var a=decodeURIComponent(r[0]);if(o[a]=t.read(s,a),e===a)break}catch(e){}}return e?o[e]:o}},remove:function(e,t){o(e,"",Et({},t,{expires:-1}))},withAttributes:function(t){return e(this.converter,Et({},this.attributes,t))},withConverter:function(t){return e(Et({},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 _t="DS",$t="DSR",At="DSI";function Dt(e,t,n){if(t){const{cookieDomain:o,cookiePath:i,cookieSameSite:r,cookieExpiration:s,cookieSecure:a}=n,c=new Date(1e3*s),l=function(e){const t=window.location.hostname.split("."),n=e.split(".");return t.slice(-n.length).join(".")===e}(o);Pt.set(e,t,{path:i,domain:l?o:void 0,expires:c,sameSite:r,secure:a})}}function Lt(e=""){return g(`${e}${$t}`)||""}function qt(e=""){return Pt.get(_t)||g(`${e}${_t}`)||""}function Nt(e=""){return g(`${e}${At}`)||""}function Jt(e=""){h(`${e}${$t}`),h(`${e}${_t}`),h(`${e}${At}`),Pt.remove(_t)}const Kt=St&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://api.descope.com",Mt="vsid",Ft="vrid";var Vt={default:"endpoint"},Ht="Blocked by CSP",Bt="The endpoint parameter is not a valid URL",zt="Failed to load the JS script of the agent",Zt="9319";function Gt(e,t){var n,o,i,r,s,a=[],c=(n=function(e){var t=function(e,t,n){if(n||2===arguments.length)for(var o,i=0,r=t.length;i<r;i++)!o&&i in t||(o||(o=Array.prototype.slice.call(t,0,i)),o[i]=t[i]);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),r=0,o=function(){return Math.random()*Math.min(3e3,100*Math.pow(2,r++))},i=new Set,[n.current(),function(e,t){var r,s=t instanceof Error?t.message:"";if(s===Ht||s===Bt)n.exclude(),r=0;else if(s===Zt)n.exclude();else if(s===zt){var a=Date.now()-e.getTime()<50,c=n.current();c&&a&&!i.has(c)&&(i.add(c),r=0),n.postpone()}else n.postpone();var l=n.current();return void 0===l?void 0:[l,null!=r?r:e.getTime()+o()-Date.now()]}]),l=c[0],u=c[1];if(void 0===l)return Promise.reject(new TypeError("The list of script URL patterns is empty"));var d=function(e){var n=new Date,o=function(t){return a.push({url:e,startedAt:n,finishedAt:new Date,error:t})},i=t(e);return i.then((function(){return o()}),o),i.catch((function(e){if(null!=s||(s=e),a.length>=5)throw s;var t=u(n,e);if(!t)throw s;var o,i=t[0],r=t[1];return(o=r,new Promise((function(e){return setTimeout(e,o)}))).then((function(){return d(i)}))}))};return d(l).then((function(e){return[e,a]}))}var Wt="https://fpnpmcdn.net/v<version>/<apiKey>/loader_v<loaderVersion>.js",Yt=Wt;function Xt(n){var o;n.scriptUrlPattern;var i=n.token,r=n.apiKey,s=void 0===r?i:r,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:Wt,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]}(),u=l[0],d=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 Gt(e,Qt)})).catch((function(e){throw d(),function(e){return e instanceof Error&&e.message===Zt?new Error(zt):e}(e)})).then((function(t){var n=t[0],o=t[1];return d(),n.load(e(e({},a),{ldi:{attempts:o,visibilityStates:u}}))}))}function Qt(e){return function(e,t,n){var o,i=document,r="securitypolicyviolation",s=function(t){var n=new URL(e,location.href),i=t.blockedURI;i!==n.href&&i!==n.protocol.slice(0,-1)&&i!==n.origin||(o=t,a())};i.addEventListener(r,s);var a=function(){return i.removeEventListener(r,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(Bt);var o=document.createElement("script"),i=function(){var e;return null===(e=o.parentNode)||void 0===e?void 0:e.removeChild(o)},r=document.head||document.getElementsByTagName("head")[0];o.onload=function(){i(),t()},o.onerror=function(){i(),n(new Error(zt))},o.async=!0,o.src=e,r.appendChild(o)}))}(e)}),(function(){throw new Error(Ht)})).then(en)}function en(){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(Zt);return n}const tn=(e=!1)=>{const t=localStorage.getItem("fp");if(!t)return null;const n=JSON.parse(t);return(new Date).getTime()>n.expiry&&!e?null:n.value},nn=async(e,t=Kt)=>{try{if(tn())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 i=new URL(t);i.pathname="/fXj8gt3x8VulJBna/w78aRZnnDZ3Aqw0I";const r=i.toString()+"?apiKey=<apiKey>&version=<version>&loaderVersion=<loaderVersion>",s=Xt({apiKey:e,endpoint:[o.toString(),Vt],scriptUrlPattern:[r,Yt]}),a=await s,{requestId:c}=await a.get({linkedId:n}),l=((e,t)=>({[Mt]:e,[Ft]:t}))(n,c);(e=>{const t={value:e,expiry:(new Date).getTime()+864e5};localStorage.setItem("fp",JSON.stringify(t))})(l)}catch(e){console.warn("Could not load fingerprint",e)}},on=e=>{const t=tn(!0);return t&&e.body&&(e.body.fpData=t),e},rn="dls_last_user_login_id",sn="dls_last_user_display_name",an=()=>g(rn),cn=()=>g(sn),ln=e=>async(...t)=>{var n;t[1]=t[1]||{};const[,o={}]=t,i=an(),r=cn();i&&(null!==(n=o.lastAuth)&&void 0!==n||(o.lastAuth={}),o.lastAuth.loginId=i,o.lastAuth.name=r);return await e(...t)},un=e=>t=>async(...n)=>{const o=await t(...n);return e||(h(rn),h(sn)),o};function dn(){const e=[];return{pub:t=>{e.forEach((e=>e(t)))},sub:t=>{const n=e.push(t)-1;return()=>e.splice(n,1)}}}const pn=e=>t=>async(...n)=>{const o=await t(...n);return Jt(e),o};async function gn(e){const t=function(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=yn(n.publicKey.challenge),n.publicKey.user.id=yn(n.publicKey.user.id),null===(t=n.publicKey.excludeCredentials)||void 0===t||t.forEach((e=>{e.id=yn(e.id)})),n}(e),n=await navigator.credentials.create(t);return o=n,JSON.stringify({id:o.id,rawId:bn(o.rawId),type:o.type,response:{attestationObject:bn(o.response.attestationObject),clientDataJSON:bn(o.response.clientDataJSON)}});var o}async function hn(e){const t=wn(e);return mn(await navigator.credentials.get(t))}async function fn(e,t){const n=wn(e);n.signal=t.signal,n.mediation="conditional";return mn(await navigator.credentials.get(n))}async function vn(e=!1){if(!St)return Promise.resolve(!1);const t=!!(window.PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return t&&e&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():t}function wn(e){var t;const n=JSON.parse(e);return n.publicKey.challenge=yn(n.publicKey.challenge),null===(t=n.publicKey.allowCredentials)||void 0===t||t.forEach((e=>{e.id=yn(e.id)})),n}function mn(e){return JSON.stringify({id:e.id,rawId:bn(e.rawId),type:e.type,response:{authenticatorData:bn(e.response.authenticatorData),clientDataJSON:bn(e.response.clientDataJSON),signature:bn(e.response.signature),userHandle:e.response.userHandle?bn(e.response.userHandle):void 0}})}function yn(e){const t=e.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(t),(e=>e.charCodeAt(0))).buffer}function bn(e){return btoa(String.fromCharCode.apply(null,new Uint8Array(e))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var kn,In=(kn=e=>({async signUp(t,n,o){const i=await e.webauthn.signUp.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await gn(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,r)},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 i=await hn(o.data.options);return await e.webauthn.signIn.finish(o.data.transactionId,i)},async signUpOrIn(t,n){var o;const i=await e.webauthn.signUpOrIn.start(t,window.location.origin,n);if(!i.ok)return i;if(null===(o=i.data)||void 0===o?void 0:o.create){const t=await gn(i.data.options);return await e.webauthn.signUp.finish(i.data.transactionId,t)}{const t=await hn(i.data.options);return await e.webauthn.signIn.finish(i.data.transactionId,t)}},async update(t,n,o){const i=await e.webauthn.update.start(t,window.location.origin,n,o);if(!i.ok)return i;const r=await gn(i.data.options);return await e.webauthn.update.finish(i.data.transactionId,r)},helpers:{create:gn,get:hn,isSupported:vn,conditional:fn}}),(...e)=>{const t=kn(...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 On={config:"/fedcm/config"},Un=()=>{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 jn(e,t){var n,o,i;try{const i=await async function(e,t="google",n,o,i){const r=Un(),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 u=n=>{e({provider:t,nonce:r,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:u,nonce:r})),s.prompt((e=>{var t,n;if(i&&(null==e?void 0:e.isDismissedMoment())){const n=null===(t=e.getDismissedReason)||void 0===t?void 0:t.call(e);return null==i||i(n),void u()}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 u()}}))}))}(e,t.provider,t.oneTapConfig,t.onSkipped,t.onDismissed);if(!i.credential)return null;if(null==t?void 0:t.onCodeReceived){const o=await e.oauth.verifyOneTapIDToken(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!o.ok||!o.data)throw new Error("Failed to verify OneTap client ID for provider "+i.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(i.provider,i.credential,i.nonce,null==t?void 0:t.loginOptions);if(!n.ok||!n.data)throw new Error("Failed to exchange OneTap client ID for provider "+i.provider);null===(o=null==t?void 0:t.onAuthenticated)||void 0===o||o.call(t,n.data)}}catch(e){null===(i=null==t?void 0:t.onFailed)||void 0===i||i.call(t,e)}}var Sn=e=>Object.assign(Object.assign({},e.flow),{start:async(...t)=>{const n=await vn(),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 Tn;const xn=(e,t)=>new Promise(((n,o)=>{if(!e.length)return o(new Error("No URLs provided to loadScriptWithFallback"));const i=t();if(i)return n(i);const r=e.shift(),s=document.createElement("script");s.src=r,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)})(r),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 Rn=async(e,t,n)=>{Tn||(Tn=(async()=>{try{return require("oidc-client-ts")}catch(e){return xn([xt,Rt],(()=>window.oidc))}})());const{OidcClient:o,WebStorageStateStore:i}=await Tn;if(!o)throw new Error("oidc-client-ts is not installed. Please install it by running `npm install oidc-client-ts`");const r=t,s=(null==n?void 0:n.redirectUri)||window.location.href,a=(null==n?void 0:n.scope)||"openid email roles descope.custom_claims offline_access",c=`${r}_user`;let l=e.httpClient.buildUrl(t);(null==n?void 0:n.applicationId)&&(l=`${l}/${n.applicationId}`);const u={authority:l,client_id:t,redirect_uri:s,response_type:"code",scope:a,stateStore:new i({store:window.localStorage,prefix:r}),loadUserInfo:!0,fetchRequestCredentials:"same-origin"};return(null==n?void 0:n.redirectUri)&&(u.redirect_uri=n.redirectUri),(null==n?void 0:n.scope)&&(u.scope=n.scope),{client:new o(u),stateUserKey:c}},Cn=(e,t,n)=>{const o=async()=>{let o,i;return o&&i||({client:o,stateUserKey:i}=await Rn(e,t,n)),{client:o,stateUserKey:i}},i=async(t="")=>{var n;const{client:i,stateUserKey:r}=await o(),s=await i.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)))),window.localStorage.setItem(r,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(),i=await n.createSigninRequest(e),{url:r}=i;return t||(window.location.href=r),{ok:!0,data:i}},finishLogin:i,finishLoginIfNeed:async(e="")=>{if(window.location.search.includes("code")&&window.location.search.includes("state"))return await i(e)},refreshToken:async t=>{var n;const{client:i,stateUserKey:r}=await o(),s=(e=>{const t=window.localStorage.getItem(e);return t?JSON.parse(t):null})(r);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 i.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:i}=await o();e||(e={}),e.id_token_hint=e.id_token_hint||Nt(),e.post_logout_redirect_uri=e.post_logout_redirect_uri||window.location.href;const r=await n.createSignoutRequest(e),{url:s}=r;return window.localStorage.removeItem(i),t||window.location.replace(s),r}}},En=function(...e){return t=>e.reduce(((e,t)=>t(e)),t)}((e=>n=>{var{fpKey:o,fpLoad:i}=n,r=t(n,["fpKey","fpLoad"]);return St?(o&&i&&nn(o).catch((()=>null)),e(c(r,{beforeRequest:on}))):e(r)}),(e=>n=>{var{autoRefresh:o}=n,r=t(n,["autoRefresh"]);if(!o)return e(r);const{clearAllTimers:s,setTimer:a}=(()=>{const e=[];return{clearAllTimers:()=>{for(;e.length;)clearTimeout(e.pop())},setTimer:(t,n)=>{e.push(setTimeout(t,n))}}})();let u,d;St&&document.addEventListener("visibilitychange",(()=>{"visible"===document.visibilityState&&u&&new Date>u&&(Ut("Expiration time passed, refreshing session"),p.refresh(Lt()||d))}));const p=e(c(r,{afterRequest:async(e,t)=>{const{sessionJwt:n,refreshJwt:o,sessionExpiration:r}=await l(t);if(401===(null==t?void 0:t.status))Ut("Received 401, canceling all timers"),s();else if(n||r){if(u=((e,t)=>{if(t)return new Date(1e3*t);Ut("Could not extract expiration time from session token, trying to decode the token");try{const t=i(e);if(t.exp)return new Date(1e3*t.exp)}catch(e){return null}})(n,r),!u)return void Ut("Could not extract expiration time from session token");d=o;const e=Ct(u);if(s(),e<=2e4)return void Ut("Session is too close to expiration, not setting refresh timer");const t=new Date(Date.now()+e).toLocaleTimeString("en-US",{hour12:!1});Ut(`Setting refresh timer for ${t}. (${e}ms)`),a((()=>{Ut("Refreshing session due to timer"),p.refresh(Lt()||o)}),e)}}}));return de(p,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const n=await e(...t);return Ut("Clearing all timers"),s(),n}))}),(e=>t=>e(Object.assign(Object.assign({},t),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.31.1"},t.baseHeaders)}))),(e=>t=>{const n=dn(),o=dn(),i=dn(),r=e(c(t,{afterRequest:async(e,t)=>{if(401===(null==t?void 0:t.status))o.pub(null),i.pub(null),n.pub(null);else{const e=await u(t);e&&i.pub(e);const{sessionJwt:r,sessionExpiration:s}=await l(t);r&&o.pub(r),(s||r)&&n.pub(s||42)}}})),s=de(r,["logout","logoutAll","oidc.logout"],(e=>async(...t)=>{const r=await e(...t);return o.pub(null),i.pub(null),n.pub(null),r}));return Object.assign(s,{onSessionTokenChange:o.sub,onUserChange:i.sub,onIsAuthenticatedChange:e=>n.sub((t=>{e(!!t)}))})}),(e=>n=>{var{storeLastAuthenticatedUser:o=!0,keepLastAuthenticatedUserAfterLogout:i=!1}=n,r=t(n,["storeLastAuthenticatedUser","keepLastAuthenticatedUserAfterLogout"]);if(!o)return Object.assign(e(r),{getLastUserLoginId:an,getLastUserDisplayName:cn});const s=e(c(r,{afterRequest:async(e,t)=>{var n;const o=await u(t),i=null===(n=null==o?void 0:o.loginIds)||void 0===n?void 0:n[0],r=null==o?void 0:o.name;i&&((e=>{p(rn,e)})(i),(e=>{p(sn,e)})(r))}}));let a=de(s,["flow.start"],ln);return a=de(a,["logout","logoutAll"],un(i)),Object.assign(a,{getLastUserLoginId:an,getLastUserDisplayName:cn})}),(e=>n=>{var{persistTokens:o,sessionTokenViaCookie:i,storagePrefix:r}=n,s=t(n,["persistTokens","sessionTokenViaCookie","storagePrefix"]);if(!o||!St)return e(s);const a=e(c(s,{beforeRequest:(u=r,e=>Object.assign(e,{token:e.token||Lt(u)})),afterRequest:async(e,t)=>{const n=/^\/v\d+\/mgmt\//.test(e.path);401===(null==t?void 0:t.status)?n||Jt(r):((e={},t=!1,n="")=>{var o;const{sessionJwt:i,refreshJwt:r}=e;if(r&&p(`${n}${$t}`,r),i)if(t){const n=t.sameSite||"Strict",r=null===(o=t.secure)||void 0===o||o;Dt(_t,i,Object.assign(Object.assign({},e),{cookieSameSite:n,cookieSecure:r}))}else p(`${n}${_t}`,i);e.idToken&&p(`${n}${At}`,e.idToken)})(await l(t),i,r)}}));var u;const d=de(a,["logout","logoutAll","oidc.logout"],pn(r));return Object.assign(d,{getRefreshToken:()=>Lt(r),getSessionToken:()=>qt(r),getIdToken:()=>Nt(r)})}))((e=>{const t=Ot(e),n=Cn(t,e.projectId,e.oidcConfig);return Object.assign(Object.assign({},t),{refresh:async o=>{var i;if(e.oidcConfig)try{return await n.refreshToken(o),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161001",errorDescription:e.toString()}})}const r=qt(),s=Lt();let a="";if(e.getExternalToken)try{a=await(null===(i=e.getExternalToken)||void 0===i?void 0:i.call(e))}catch(e){Ut("Error getting external token while refreshing",e)}return t.refresh(o,{dcs:r?"t":"f",dcr:s?"t":"f"},a)},logout:async o=>{if(e.oidcConfig)try{return await n.logout({id_token_hint:o}),Promise.resolve({ok:!0})}catch(e){return Promise.resolve({ok:!1,error:{errorCode:"J161000",errorDescription:e.toString()}})}return t.logout(o)},flow:Sn(t),webauthn:In(t),fedcm:(o=t,i=e.projectId,{onetap:{requestExchangeCode(e){jn(o,e)},requestAuthentication(e){jn(o,e)}},oneTap(e,t,n,i,r){jn(o,{provider:e,oneTapConfig:t,loginOptions:n,onSkipped:i,onDismissed:r})},async launch(e){var t;const n={identity:{context:e||"signin",providers:[{configURL:o.httpClient.buildUrl(i+On.config),clientId:i}]}},r=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(n));return o.refresh(r.token)},isSupported:()=>St&&"IdentityCredential"in window,async isLoggedIn(e){var t;const n=o.httpClient.buildUrl(i+On.config);try{const o={identity:{context:e||"signin",providers:[{configURL:n,clientId:i}]}},r=await(null===(t=navigator.credentials)||void 0===t?void 0:t.get(o));return!!r&&!!r.token}catch(e){return!1}}}),oidc:n});var o,i}));return En.REFRESH_TOKEN_KEY=$t,En.SESSION_TOKEN_KEY=_t,En}));
|
|
4
4
|
//# sourceMappingURL=index.umd.js.map
|