@descope/web-js-sdk 1.0.20 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.d.ts +132 -32
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +2 -2
- package/dist/index.umd.js.map +1 -1
- package/package.json +4 -4
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("tslib"),e=require("@descope/core-js-sdk"),n=require("@fingerprintjs/fingerprintjs-pro"),a=require("js-cookie");function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var r=i(e),o=i(a);const s=(t,e)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,a)=>{var i;return n[a]=[].concat((null===(i=t.hooks)||void 0===i?void 0:i[a])||[]).concat((null==e?void 0:e[a])||[]),n}),null!==(n=t.hooks)&&void 0!==n?n:t.hooks={}),t},l=async t=>{if(!(null==t?void 0:t.ok))return{};const e=await(null==t?void 0:t.clone().json());return(null==e?void 0:e.authInfo)||e||{}},c=async t=>{const e=await l(t);return(null==e?void 0:e.user)||((null==e?void 0:e.hasOwnProperty("userId"))?e:void 0)},u="undefined"!=typeof localStorage,d=(t,e)=>u&&(null===localStorage||void 0===localStorage?void 0:localStorage.setItem(t,e)),g=t=>u&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem(t)),p=t=>u&&(null===localStorage||void 0===localStorage?void 0:localStorage.removeItem(t)),f="undefined"!=typeof window,w=f&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://fp.descope.com",b=(t="",e="")=>({vsid:t,vrid:e}),h=(t=!1)=>{const e=localStorage.getItem("fp");if(!e)return null;const n=JSON.parse(e);return(new Date).getTime()>n.expiry&&!t?null:n.value},v=async t=>{try{if(h())return;const e=(Date.now().toString(36)+Math.random().toString(36).substring(2)+Math.random().toString(36).substring(2)).substring(0,27),a=n.load({apiKey:t,endpoint:w}),i=await a,{requestId:r}=await i.get({linkedId:e});(t=>{const e={value:t,expiry:(new Date).getTime()+864e5};localStorage.setItem("fp",JSON.stringify(e))})(b(e,r))}catch(t){global.FB_DEBUG&&console.error(t)}},y=t=>(t.body&&(t.body.fpData=h(!0)||b()),t),S="dls_last_user_login_id",O="dls_last_user_display_name",m=()=>g(S),I=()=>g(O),k=t=>async(...e)=>{var n;e[1]=e[1]||{};const[,a={}]=e,i=m(),r=I();i&&(null!==(n=a.lastAuth)&&void 0!==n||(a.lastAuth={}),a.lastAuth.loginId=i,a.lastAuth.name=r);return await t(...e)},j=t=>async(...e)=>{const n=await t(...e);return p(S),p(O),n};function _(){const t=[];return{pub:e=>{t.forEach((t=>t(e)))},sub:e=>{const n=t.push(e)-1;return()=>t.splice(n,1)}}}const U="DS",A="DSR";const D=(e={},n)=>{var{refreshJwt:a,sessionJwt:i}=e,r=t.__rest(e,["refreshJwt","sessionJwt"]);void 0===n&&(n=!1),a&&d(A,a),i&&(n?function(t,e,{cookiePath:n,cookieDomain:a,cookieExpiration:i}){if(e){const r=new Date(1e3*i);o.default.set(t,e,{path:n,domain:a,expires:r,sameSite:"Strict",secure:!0})}}(U,i,r):d(U,i))};function J(){return g(A)||""}function T(){return o.default.get(U)||g(U)||""}function K(){p(A),p(U),o.default.remove(U)}const q=t=>Object.assign(t,{token:t.token||J()}),C=t=>async(...e)=>{const n=await t(...e);return K(),n};async function N(t){const e=function(t){var e;const n=JSON.parse(t);return n.publicKey.challenge=L(n.publicKey.challenge),n.publicKey.user.id=L(n.publicKey.user.id),null===(e=n.publicKey.excludeCredentials)||void 0===e||e.forEach((t=>{t.id=L(t.id)})),n}(t),n=await navigator.credentials.create(e);return a=n,JSON.stringify({id:a.id,rawId:W(a.rawId),type:a.type,response:{attestationObject:W(a.response.attestationObject),clientDataJSON:W(a.response.clientDataJSON)}});var a}async function R(t){const e=E(t);return H(await navigator.credentials.get(e))}async function x(t,e){const n=E(t);n.signal=e.signal,n.mediation="conditional";return H(await navigator.credentials.get(n))}async function P(t=!1){if(!f)return Promise.resolve(!1);const e=!!(PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return e&&t&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():e}function E(t){var e;const n=JSON.parse(t);return n.publicKey.challenge=L(n.publicKey.challenge),null===(e=n.publicKey.allowCredentials)||void 0===e||e.forEach((t=>{t.id=L(t.id)})),n}function H(t){return JSON.stringify({id:t.id,rawId:W(t.rawId),type:t.type,response:{authenticatorData:W(t.response.authenticatorData),clientDataJSON:W(t.response.clientDataJSON),signature:W(t.response.signature),userHandle:t.response.userHandle?W(t.response.userHandle):void 0}})}function L(t){const e=t.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(e),(t=>t.charCodeAt(0))).buffer}function W(t){return btoa(String.fromCharCode.apply(null,new Uint8Array(t))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var V,M=(V=t=>({async signUp(e,n){const a=await t.webauthn.signUp.start(e,window.location.origin,n);if(!a.ok)return a;const i=await N(a.data.options);return await t.webauthn.signUp.finish(a.data.transactionId,i)},async signIn(e){const n=await t.webauthn.signIn.start(e,window.location.origin);if(!n.ok)return n;const a=await R(n.data.options);return await t.webauthn.signIn.finish(n.data.transactionId,a)},async signUpOrIn(e){var n;const a=await t.webauthn.signUpOrIn.start(e,window.location.origin);if(!a.ok)return a;if(null===(n=a.data)||void 0===n?void 0:n.create){const e=await N(a.data.options);return await t.webauthn.signUp.finish(a.data.transactionId,e)}{const e=await R(a.data.options);return await t.webauthn.signIn.finish(a.data.transactionId,e)}},async update(e,n){const a=await t.webauthn.update.start(e,window.location.origin,n);if(!a.ok)return a;const i=await N(a.data.options);return await t.webauthn.update.finish(a.data.transactionId,i)},helpers:{create:N,get:R,isSupported:P,conditional:x}}),(...t)=>{const e=V(...t);return Object.assign(e.signUp,t[0].webauthn.signUp),Object.assign(e.signIn,t[0].webauthn.signIn),Object.assign(e.signUpOrIn,t[0].webauthn.signUpOrIn),Object.assign(e.update,t[0].webauthn.update),e}),B=t=>Object.assign(Object.assign({},t.flow),{start:async(...e)=>{const n=await P(),a=Object.assign(Object.assign({redirectUrl:window.location.href},e[1]),{deviceInfo:{webAuthnSupport:n}});return e[1]=a,t.flow.start(...e)}});const F=function(...t){return e=>t.reduce(((t,e)=>e(t)),e)}((e=>n=>{var{fpKey:a,fpLoad:i}=n,r=t.__rest(n,["fpKey","fpLoad"]);return a?(f?i&&v(a).catch((()=>null)):console.warn("Fingerprint is a client side only capability and will not work when running in the server"),e(s(r,{beforeRequest:y}))):e(Object.assign({},r))}),(n=>a=>{var{autoRefresh:i}=a,r=t.__rest(a,["autoRefresh"]);if(!i)return n(r);const{clearAllTimers:o,setTimer:c}=(()=>{const t=[];return{clearAllTimers:()=>{for(;t.length;)clearTimeout(t.pop())},setTimer:(e,n)=>{t.push(setTimeout(e,n))}}})(),u=n(s(r,{afterRequest:async(t,e)=>{const{refreshJwt:n,sessionJwt:a}=await l(e);if(401===(null==e?void 0:e.status))o();else if(a){const t=((i=(t=>{const e=t.split(".");try{if(3===e.length){const t=JSON.parse(window.atob(e[1]));if(t.exp)return new Date(1e3*t.exp)}}catch(t){}return null})(a))?i.getTime()-(new Date).getTime():0)-2e4;o(),c((()=>u.refresh(n)),t)}var i}}));return e.wrapWith(u,["logout","logoutAll"],(t=>async(...e)=>{const n=await t(...e);return o(),n}))}),(t=>e=>t(Object.assign(Object.assign({},e),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.0
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("tslib"),e=require("@descope/core-js-sdk"),n=require("@fingerprintjs/fingerprintjs-pro"),a=require("js-cookie");function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var r=i(e),o=i(a);const s=(t,e)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,a)=>{var i;return n[a]=[].concat((null===(i=t.hooks)||void 0===i?void 0:i[a])||[]).concat((null==e?void 0:e[a])||[]),n}),null!==(n=t.hooks)&&void 0!==n?n:t.hooks={}),t},l=async t=>{if(!(null==t?void 0:t.ok))return{};const e=await(null==t?void 0:t.clone().json());return(null==e?void 0:e.authInfo)||e||{}},c=async t=>{const e=await l(t);return(null==e?void 0:e.user)||((null==e?void 0:e.hasOwnProperty("userId"))?e:void 0)},u="undefined"!=typeof localStorage,d=(t,e)=>u&&(null===localStorage||void 0===localStorage?void 0:localStorage.setItem(t,e)),g=t=>u&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem(t)),p=t=>u&&(null===localStorage||void 0===localStorage?void 0:localStorage.removeItem(t)),f="undefined"!=typeof window,w=f&&(null===localStorage||void 0===localStorage?void 0:localStorage.getItem("fingerprint.endpoint.url"))||"https://fp.descope.com",b=(t="",e="")=>({vsid:t,vrid:e}),h=(t=!1)=>{const e=localStorage.getItem("fp");if(!e)return null;const n=JSON.parse(e);return(new Date).getTime()>n.expiry&&!t?null:n.value},v=async t=>{try{if(h())return;const e=(Date.now().toString(36)+Math.random().toString(36).substring(2)+Math.random().toString(36).substring(2)).substring(0,27),a=n.load({apiKey:t,endpoint:w}),i=await a,{requestId:r}=await i.get({linkedId:e});(t=>{const e={value:t,expiry:(new Date).getTime()+864e5};localStorage.setItem("fp",JSON.stringify(e))})(b(e,r))}catch(t){global.FB_DEBUG&&console.error(t)}},y=t=>(t.body&&(t.body.fpData=h(!0)||b()),t),S="dls_last_user_login_id",O="dls_last_user_display_name",m=()=>g(S),I=()=>g(O),k=t=>async(...e)=>{var n;e[1]=e[1]||{};const[,a={}]=e,i=m(),r=I();i&&(null!==(n=a.lastAuth)&&void 0!==n||(a.lastAuth={}),a.lastAuth.loginId=i,a.lastAuth.name=r);return await t(...e)},j=t=>async(...e)=>{const n=await t(...e);return p(S),p(O),n};function _(){const t=[];return{pub:e=>{t.forEach((t=>t(e)))},sub:e=>{const n=t.push(e)-1;return()=>t.splice(n,1)}}}const U="DS",A="DSR";const D=(e={},n)=>{var{refreshJwt:a,sessionJwt:i}=e,r=t.__rest(e,["refreshJwt","sessionJwt"]);void 0===n&&(n=!1),a&&d(A,a),i&&(n?function(t,e,{cookiePath:n,cookieDomain:a,cookieExpiration:i}){if(e){const r=new Date(1e3*i);o.default.set(t,e,{path:n,domain:a,expires:r,sameSite:"Strict",secure:!0})}}(U,i,r):d(U,i))};function J(){return g(A)||""}function T(){return o.default.get(U)||g(U)||""}function K(){p(A),p(U),o.default.remove(U)}const q=t=>Object.assign(t,{token:t.token||J()}),C=t=>async(...e)=>{const n=await t(...e);return K(),n};async function N(t){const e=function(t){var e;const n=JSON.parse(t);return n.publicKey.challenge=L(n.publicKey.challenge),n.publicKey.user.id=L(n.publicKey.user.id),null===(e=n.publicKey.excludeCredentials)||void 0===e||e.forEach((t=>{t.id=L(t.id)})),n}(t),n=await navigator.credentials.create(e);return a=n,JSON.stringify({id:a.id,rawId:W(a.rawId),type:a.type,response:{attestationObject:W(a.response.attestationObject),clientDataJSON:W(a.response.clientDataJSON)}});var a}async function R(t){const e=E(t);return H(await navigator.credentials.get(e))}async function x(t,e){const n=E(t);n.signal=e.signal,n.mediation="conditional";return H(await navigator.credentials.get(n))}async function P(t=!1){if(!f)return Promise.resolve(!1);const e=!!(PublicKeyCredential&&navigator.credentials&&navigator.credentials.create&&navigator.credentials.get);return e&&t&&PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable?PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable():e}function E(t){var e;const n=JSON.parse(t);return n.publicKey.challenge=L(n.publicKey.challenge),null===(e=n.publicKey.allowCredentials)||void 0===e||e.forEach((t=>{t.id=L(t.id)})),n}function H(t){return JSON.stringify({id:t.id,rawId:W(t.rawId),type:t.type,response:{authenticatorData:W(t.response.authenticatorData),clientDataJSON:W(t.response.clientDataJSON),signature:W(t.response.signature),userHandle:t.response.userHandle?W(t.response.userHandle):void 0}})}function L(t){const e=t.replace(/_/g,"/").replace(/-/g,"+");return Uint8Array.from(atob(e),(t=>t.charCodeAt(0))).buffer}function W(t){return btoa(String.fromCharCode.apply(null,new Uint8Array(t))).replace(/\//g,"_").replace(/\+/g,"-").replace(/=/g,"")}var V,M=(V=t=>({async signUp(e,n){const a=await t.webauthn.signUp.start(e,window.location.origin,n);if(!a.ok)return a;const i=await N(a.data.options);return await t.webauthn.signUp.finish(a.data.transactionId,i)},async signIn(e){const n=await t.webauthn.signIn.start(e,window.location.origin);if(!n.ok)return n;const a=await R(n.data.options);return await t.webauthn.signIn.finish(n.data.transactionId,a)},async signUpOrIn(e){var n;const a=await t.webauthn.signUpOrIn.start(e,window.location.origin);if(!a.ok)return a;if(null===(n=a.data)||void 0===n?void 0:n.create){const e=await N(a.data.options);return await t.webauthn.signUp.finish(a.data.transactionId,e)}{const e=await R(a.data.options);return await t.webauthn.signIn.finish(a.data.transactionId,e)}},async update(e,n){const a=await t.webauthn.update.start(e,window.location.origin,n);if(!a.ok)return a;const i=await N(a.data.options);return await t.webauthn.update.finish(a.data.transactionId,i)},helpers:{create:N,get:R,isSupported:P,conditional:x}}),(...t)=>{const e=V(...t);return Object.assign(e.signUp,t[0].webauthn.signUp),Object.assign(e.signIn,t[0].webauthn.signIn),Object.assign(e.signUpOrIn,t[0].webauthn.signUpOrIn),Object.assign(e.update,t[0].webauthn.update),e}),B=t=>Object.assign(Object.assign({},t.flow),{start:async(...e)=>{const n=await P(),a=Object.assign(Object.assign({redirectUrl:window.location.href},e[1]),{deviceInfo:{webAuthnSupport:n}});return e[1]=a,t.flow.start(...e)}});const F=function(...t){return e=>t.reduce(((t,e)=>e(t)),e)}((e=>n=>{var{fpKey:a,fpLoad:i}=n,r=t.__rest(n,["fpKey","fpLoad"]);return a?(f?i&&v(a).catch((()=>null)):console.warn("Fingerprint is a client side only capability and will not work when running in the server"),e(s(r,{beforeRequest:y}))):e(Object.assign({},r))}),(n=>a=>{var{autoRefresh:i}=a,r=t.__rest(a,["autoRefresh"]);if(!i)return n(r);const{clearAllTimers:o,setTimer:c}=(()=>{const t=[];return{clearAllTimers:()=>{for(;t.length;)clearTimeout(t.pop())},setTimer:(e,n)=>{t.push(setTimeout(e,n))}}})(),u=n(s(r,{afterRequest:async(t,e)=>{const{refreshJwt:n,sessionJwt:a}=await l(e);if(401===(null==e?void 0:e.status))o();else if(a){const t=((i=(t=>{const e=t.split(".");try{if(3===e.length){const t=JSON.parse(window.atob(e[1]));if(t.exp)return new Date(1e3*t.exp)}}catch(t){}return null})(a))?i.getTime()-(new Date).getTime():0)-2e4;o(),c((()=>u.refresh(n)),t)}var i}}));return e.wrapWith(u,["logout","logoutAll"],(t=>async(...e)=>{const n=await t(...e);return o(),n}))}),(t=>e=>t(Object.assign(Object.assign({},e),{baseHeaders:Object.assign({"x-descope-sdk-name":"web-js","x-descope-sdk-version":"1.1.0"},e.baseHeaders)}))),(t=>n=>{const a=_(),i=_(),r=t(s(n,{afterRequest:async(t,e)=>{if(401===(null==e?void 0:e.status))a.pub(null),i.pub(null);else{const t=await c(e);t&&i.pub(t);const{sessionJwt:n}=await l(e);n&&a.pub(n)}}})),o=e.wrapWith(r,["logout","logoutAll"],(t=>async(...e)=>{const n=await t(...e);return a.pub(null),i.pub(null),n}));return Object.assign(o,{onSessionTokenChange:a.sub,onUserChange:i.sub})}),(t=>n=>{const a=t(s(n,{afterRequest:async(t,e)=>{var n;const a=await c(e),i=null===(n=null==a?void 0:a.loginIds)||void 0===n?void 0:n[0],r=null==a?void 0:a.name;i&&((t=>{d(S,t)})(i),(t=>{d(O,t)})(r))}}));let i=e.wrapWith(a,["flow.start"],k);return i=e.wrapWith(i,["logout","logoutAll"],j),Object.assign(i,{getLastUserLoginId:m,getLastUserDisplayName:I})}),(n=>a=>{var{persistTokens:i,sessionTokenViaCookie:r}=a,o=t.__rest(a,["persistTokens","sessionTokenViaCookie"]);if(!i||!f)return i&&console.warn("Storing auth tokens in local storage and cookies are a client side only capabilities and will not be done when running in the server"),n(o);const c=n(s(o,{beforeRequest:q,afterRequest:async(t,e)=>{401===(null==e?void 0:e.status)?K():D(await l(e),r)}})),u=e.wrapWith(c,["logout","logoutAll"],C);return Object.assign(u,{getRefreshToken:J,getSessionToken:T})}))(((...t)=>{const e=r.default(...t);return Object.assign(Object.assign({},e),{flow:B(e),webauthn:M(e)})}));exports.default=F;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/enhancers/helpers/index.ts","../../src/constants.ts","../../src/enhancers/withFingerprint/constants.ts","../../src/enhancers/withFingerprint/helpers.ts","../../src/enhancers/withFingerprint/index.ts","../../src/enhancers/withLastLoggedInUser/constants.ts","../../src/enhancers/withLastLoggedInUser/helpers.ts","../../src/enhancers/withLastLoggedInUser/index.ts","../../src/enhancers/withNotifications/helpers.ts","../../src/enhancers/withNotifications/index.ts","../../src/enhancers/withPersistTokens/constants.ts","../../src/enhancers/withPersistTokens/helpers.ts","../../src/enhancers/withPersistTokens/index.ts","../../src/sdk/webauthn.ts","../../src/sdk/flow.ts","../../src/sdk/index.ts","../../src/index.ts","../../src/enhancers/helpers/compose.ts","../../src/enhancers/withAutoRefresh/index.ts","../../src/enhancers/withAutoRefresh/helpers.ts","../../src/enhancers/withAnalytics.ts"],"sourcesContent":["import { JWTResponse, UserResponse } from '@descope/core-js-sdk';\nimport { CoreSdkConfig } from '../../types';\n\n/**\n * Add hooks to an existing core-sdk config\n */\nexport const addHooks = <Config extends CoreSdkConfig>(\n config: Config,\n hooks: Config['hooks']\n): Config => {\n ['beforeRequest', 'afterRequest'].reduce((acc, key) => {\n acc[key] = [].concat(config.hooks?.[key] || []).concat(hooks?.[key] || []);\n\n return acc;\n }, (config.hooks ??= {}));\n\n return config;\n};\n\nexport { compose } from './compose';\n\n/**\n * Extract auth info (JWT response) from fetch response\n * We assume that the auth info is under a \"authInfo\" attribute (flow response)\n * Or the body itself (other auth methods response)\n */\nexport const getAuthInfoFromResponse = async (\n res: Response\n): Promise<Partial<JWTResponse>> => {\n if (!res?.ok) return {};\n const body = await res?.clone().json();\n return body?.authInfo || body || {};\n};\n\n/**\n * Extract user from fetch response\n * User my exist under \"user\" attribute (auth methods response)\n * Or the body itself (when calling \"me\")\n */\nexport const getUserFromResponse = async (\n res: Response\n): Promise<UserResponse> | undefined => {\n const authInfo = await getAuthInfoFromResponse(res);\n\n return (\n authInfo?.user ||\n (authInfo?.hasOwnProperty('userId')\n ? (authInfo as UserResponse)\n : undefined)\n );\n};\n\nexport const isLocalStorage = typeof localStorage !== 'undefined';\n\nexport const setLocalStorage = (key: string, value: string) =>\n isLocalStorage && localStorage?.setItem(key, value);\nexport const getLocalStorage = (key: string) =>\n isLocalStorage && localStorage?.getItem(key);\nexport const removeLocalStorage = (key: string) =>\n isLocalStorage && localStorage?.removeItem(key);\n","// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n","import { IS_BROWSER } from '../../constants';\n\nconst FINGERPRINT_PUBLIC_KEY = 'fingerprint.public.key';\nconst FINGERPRINT_ENDPOINT_URL = 'fingerprint.endpoint.url';\n\n/** Fingerprint.js custom API endpoint */\nexport const FP_EP_URL =\n (IS_BROWSER && localStorage?.getItem(FINGERPRINT_ENDPOINT_URL)) ||\n 'https://fp.descope.com';\n/** Fingerprint visitor data */\nexport const FP_BODY_DATA = 'fpData';\n/** Session ID for visitor */\nexport const VISITOR_SESSION_ID_PARAM = 'vsid';\n/** Request ID for visitor */\nexport const VISITOR_REQUEST_ID_PARAM = 'vrid';\n/** FP storage key */\nexport const FP_STORAGE_KEY = 'fp';\n// Storage FP Keys TTL is 24 hours\nexport const STORAGE_TTL_MS = 24 * 60 * 60 * 1000;\n","import { load } from '@fingerprintjs/fingerprintjs-pro';\nimport {\n FP_EP_URL,\n FP_STORAGE_KEY,\n STORAGE_TTL_MS,\n VISITOR_REQUEST_ID_PARAM,\n VISITOR_SESSION_ID_PARAM,\n} from './constants';\nimport { FingerprintObject } from './types';\n\nconst createFingerprintObject = (\n sessionId: string = '',\n requestId: string = ''\n): FingerprintObject => ({\n [VISITOR_SESSION_ID_PARAM]: sessionId,\n [VISITOR_REQUEST_ID_PARAM]: requestId,\n});\n\n/** Generate UUID based on current time and some randomness */\nconst generateUUID = () => {\n // return alphanumeric, sortable uuid of 27 characters\n return (\n Date.now().toString(36) +\n Math.random().toString(36).substring(2) + // removing '0.' prefix\n Math.random().toString(36).substring(2)\n ).substring(0, 27);\n};\n\n// Set FP data to storage with expiration\n// We set the request id and session id together so they will have the same TTL\n// This implementation is based on https://www.sohamkamani.com/javascript/localstorage-with-ttl-expiry/\nconst setFPToStorage = (value: FingerprintObject) => {\n const now = new Date();\n // `item` is an object which contains the value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + STORAGE_TTL_MS,\n };\n localStorage.setItem(FP_STORAGE_KEY, JSON.stringify(item));\n};\n\n// Get Fingerprint from storage, will return null if not exists, of if expired\nconst getFPFromStorage = (returnExpired = false): FingerprintObject => {\n const itemStr = localStorage.getItem(FP_STORAGE_KEY);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n // compare the expiry time of the item with the current time\n // return null if needed\n if (now.getTime() > item.expiry && !returnExpired) {\n return null;\n }\n return item.value;\n};\n\n/**\n * Ensure fingerprint ids (request id, session id) exist.\n * If not, It will generate and load them into to browser storage.\n * NOTE: Using fingerprintJS data has cost, use considerably.\n * @param fpKey FingerprintJS API key\n */\nexport const ensureFingerprintIds = async (fpKey: string) => {\n try {\n if (getFPFromStorage()) {\n // FP is already in storage, no need to\n return;\n }\n\n const sessionId = generateUUID();\n const agentP = load({ apiKey: fpKey, endpoint: FP_EP_URL });\n const agent = await agentP;\n const { requestId } = await agent.get({ linkedId: sessionId });\n const fpData = createFingerprintObject(sessionId, requestId);\n setFPToStorage(fpData);\n } catch (ex) {\n // istanbul ignore next\n if (global.FB_DEBUG) {\n // eslint-disable-next-line no-console\n console.error(ex);\n }\n }\n};\n\n/**\n * Get Fingerprint data (request ids) from storage, or create empty object\n * If data is expired, return it anyway\n */\nexport const getFingerprintData = (): FingerprintObject => {\n // get from storage, fallback to default\n return getFPFromStorage(true) || createFingerprintObject();\n};\n","import { IS_BROWSER } from '../../constants';\nimport { CreateWebSdk } from '../../sdk';\nimport { BeforeRequestHook } from '../../types';\nimport { addHooks } from '../helpers';\nimport { FP_BODY_DATA } from './constants';\nimport { ensureFingerprintIds, getFingerprintData } from './helpers';\nimport { FingerprintOptions } from './types';\n\nconst beforeRequest: BeforeRequestHook = (config) => {\n if (config.body) {\n config.body[FP_BODY_DATA] = getFingerprintData();\n }\n\n return config;\n};\n\n/**\n * Add fingerprint data to outgoing requests\n */\nexport const withFingerprint =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({ fpKey, fpLoad, ...config }: Parameters<T>[0] & FingerprintOptions) => {\n // relevant only if fpKey was provided\n if (!fpKey) {\n return createSdk({\n ...config,\n });\n }\n if (!IS_BROWSER) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Fingerprint is a client side only capability and will not work when running in the server'\n );\n } else if (fpLoad) {\n ensureFingerprintIds(fpKey).catch(() => null);\n }\n\n return createSdk(addHooks(config, { beforeRequest }));\n };\n","/** Login Id of the last user logged in */\nexport const LOCAL_STORAGE_LAST_USER_LOGIN_ID = 'dls_last_user_login_id';\n\n/** Display name of the last user logged in */\nexport const LOCAL_STORAGE_LAST_USER_DISPLAY_NAME =\n 'dls_last_user_display_name';\n","import {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport {\n LOCAL_STORAGE_LAST_USER_LOGIN_ID,\n LOCAL_STORAGE_LAST_USER_DISPLAY_NAME,\n} from './constants';\n\nexport const setLastUserLoginId = (loginId: string) => {\n return setLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID, loginId);\n};\n\nexport const getLastUserLoginId = () => {\n return getLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID);\n};\n\nexport const removeLastUserLoginId = () => {\n return removeLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID);\n};\n\nexport const setLastUserDisplayName = (displayName: string) => {\n return setLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME, displayName);\n};\n\nexport const getLastUserDisplayName = () => {\n return getLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME);\n};\n\nexport const removeLastUserDisplayName = () => {\n return removeLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME);\n};\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook, CoreSdk } from '../../types';\nimport { addHooks, getUserFromResponse } from '../helpers';\nimport {\n getLastUserLoginId,\n removeLastUserLoginId,\n setLastUserLoginId,\n getLastUserDisplayName,\n removeLastUserDisplayName,\n setLastUserDisplayName,\n} from './helpers';\n\n/**\n * Adds last logged in user to flow start request\n */\n// eslint-disable-next-line import/exports-last\nexport const withLastLoggedInUser =\n <T extends CreateWebSdk>(createSdk: T) =>\n (\n config: Parameters<T>[0]\n ): ReturnType<T> & {\n getLastUserLoginId: typeof getLastUserLoginId;\n getLastUserDisplayName: typeof getLastUserDisplayName;\n } => {\n const afterRequest: AfterRequestHook = async (_req, res) => {\n const userDetails = await getUserFromResponse(res);\n const loginId = userDetails?.loginIds?.[0];\n const displayName = userDetails?.name;\n if (loginId) {\n setLastUserLoginId(loginId);\n setLastUserDisplayName(displayName);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n let wrappedSdk = wrapWith(sdk, ['flow.start'], startWrapper);\n wrappedSdk = wrapWith(wrappedSdk, ['logout', 'logoutAll'], logoutWrapper);\n return Object.assign(wrappedSdk, {\n getLastUserLoginId,\n getLastUserDisplayName,\n }) as any;\n };\n\nconst startWrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n args[1] = args[1] || {};\n const [, options = {}] = args as unknown as Parameters<\n CoreSdk['flow']['start']\n >;\n const loginId = getLastUserLoginId();\n const displayName = getLastUserDisplayName();\n\n if (loginId) {\n options.lastAuth ??= {};\n options.lastAuth.loginId = loginId;\n options.lastAuth.name = displayName;\n }\n\n const resp = await fn(...args);\n\n return resp;\n };\n\nconst logoutWrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n removeLastUserLoginId();\n removeLastUserDisplayName();\n\n return resp;\n };\n","// create publisher/subscriber instances\nexport function createPubSub<T extends any>() {\n const cbs = [];\n\n const sub = (cb: (data: T) => void) => {\n const idx = cbs.push(cb) - 1;\n return () => cbs.splice(idx, 1);\n };\n\n const pub = (data: T) => {\n cbs.forEach((cb) => cb(data));\n };\n\n return { pub, sub };\n}\n","import { SdkFnWrapper, UserResponse, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk, WebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n getUserFromResponse,\n} from '../helpers';\nimport { createPubSub } from './helpers';\n\n/**\n * Adds 2 event functions to the sdk,\n * onSessionTokenChange: Gets a callback and call it whenever there is a change in session token\n * onUserChange: Gets a callback and call it whenever there is a change in current logged in user\n */\nexport const withNotifications =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]) => {\n const sessionPS = createPubSub<string | null>();\n const userPS = createPubSub<UserResponse | null>();\n\n const afterRequest: AfterRequestHook = async (_req, res) => {\n if (res?.status === 401) {\n sessionPS.pub(null);\n userPS.pub(null);\n } else {\n const userDetails = await getUserFromResponse(res);\n if (userDetails) userPS.pub(userDetails);\n\n const { sessionJwt } = await getAuthInfoFromResponse(res);\n if (sessionJwt) sessionPS.pub(sessionJwt);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n sessionPS.pub(null);\n userPS.pub(null);\n\n return resp;\n };\n\n const wrappedSdk = wrapWith(sdk, ['logout', 'logoutAll'], wrapper);\n\n return Object.assign(wrappedSdk, {\n onSessionTokenChange: sessionPS.sub,\n onUserChange: userPS.sub,\n });\n };\n","/** Default name for the session cookie name / local storage key */\nexport const SESSION_TOKEN_KEY = 'DS';\n/** Default name for the refresh local storage key */\nexport const REFRESH_TOKEN_KEY = 'DSR';\n","import { JWTResponse } from '@descope/core-js-sdk';\nimport Cookies from 'js-cookie';\nimport { BeforeRequestHook } from '../../types';\nimport { REFRESH_TOKEN_KEY, SESSION_TOKEN_KEY } from './constants';\nimport {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\n\n/**\n * Store the session JWT as a cookie on the given domain and path with the given expiration.\n * This is useful so that the application backend will automatically get the cookie for the session\n * @param name cookie name\n * @param value The JWT to store as a cookie\n * @param cookieParams configuration that is usually returned from the JWT\n */\nfunction setJwtTokenCookie(\n name: string,\n value: string,\n { cookiePath, cookieDomain, cookieExpiration }: Partial<JWTResponse>\n) {\n if (value) {\n const expires = new Date(cookieExpiration * 1000); // we are getting response from the server in seconds instead of ms\n Cookies.set(name, value, {\n path: cookiePath,\n domain: cookieDomain,\n expires,\n sameSite: 'Strict',\n secure: true,\n });\n }\n}\n\nexport const persistTokens = (\n { refreshJwt, sessionJwt, ...cookieParams } = {} as Partial<JWTResponse>,\n sessionTokenViaCookie = false\n) => {\n // persist refresh token\n refreshJwt && setLocalStorage(REFRESH_TOKEN_KEY, refreshJwt);\n\n // persist session token\n if (sessionJwt) {\n sessionTokenViaCookie\n ? setJwtTokenCookie(SESSION_TOKEN_KEY, sessionJwt, cookieParams)\n : setLocalStorage(SESSION_TOKEN_KEY, sessionJwt);\n }\n};\n\n/** Return the refresh token from the localStorage. Not for production usage because refresh token will not be saved in localStorage. */\nexport function getRefreshToken() {\n return getLocalStorage(REFRESH_TOKEN_KEY) || '';\n}\n\n/**\n * Return the session token. first try to get from cookie, and fallback to local storage\n * See sessionTokenViaCookie option for more details about session token location\n */\nexport function getSessionToken(): string {\n return (\n Cookies.get(SESSION_TOKEN_KEY) || getLocalStorage(SESSION_TOKEN_KEY) || ''\n );\n}\n\n/** Remove both the localStorage refresh JWT and the session cookie */\nexport function clearTokens() {\n removeLocalStorage(REFRESH_TOKEN_KEY);\n removeLocalStorage(SESSION_TOKEN_KEY);\n Cookies.remove(SESSION_TOKEN_KEY);\n}\n\nexport const beforeRequest: BeforeRequestHook = (config) =>\n Object.assign(config, { token: config.token || getRefreshToken() });\n","/* eslint-disable import/exports-last */\nimport { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { IS_BROWSER } from '../../constants';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport { addHooks, getAuthInfoFromResponse } from '../helpers';\nimport {\n beforeRequest,\n clearTokens,\n getRefreshToken,\n getSessionToken,\n persistTokens,\n} from './helpers';\nimport { PersistTokensOptions } from './types';\n\n/**\n * Persist authentication tokens in cookie/storage\n */\nexport const withPersistTokens =\n <T extends CreateWebSdk>(createSdk: T) =>\n <A extends boolean>({\n persistTokens: isPersistTokens,\n sessionTokenViaCookie,\n ...config\n }: Parameters<T>[0] & PersistTokensOptions<A>): A extends true\n ? ReturnType<T> & {\n getRefreshToken: typeof getRefreshToken;\n getSessionToken: typeof getSessionToken;\n }\n : ReturnType<T> => {\n if (!isPersistTokens || !IS_BROWSER) {\n if (isPersistTokens) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Storing auth tokens in local storage and cookies are a client side only capabilities and will not be done when running in the server'\n );\n }\n return createSdk(config) as any;\n }\n\n const afterRequest: AfterRequestHook = async (_req, res) => {\n if (res?.status === 401) {\n clearTokens();\n } else {\n persistTokens(\n await getAuthInfoFromResponse(res),\n sessionTokenViaCookie\n );\n }\n };\n\n const sdk = createSdk(addHooks(config, { beforeRequest, afterRequest }));\n\n const wrappedSdk = wrapWith(sdk, ['logout', 'logoutAll'], wrapper);\n\n return Object.assign(wrappedSdk, {\n getRefreshToken,\n getSessionToken,\n }) as any;\n };\n\nconst wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n clearTokens();\n\n return resp;\n };\n\nexport default withPersistTokens;\n","import { JWTResponse, SdkResponse, ResponseData } from '@descope/core-js-sdk';\nimport { IS_BROWSER } from '../constants';\nimport { CoreSdk } from '../types';\n\ntype CreateWebauthn = typeof createWebAuthn;\n\nconst withCoreFns =\n <I extends Parameters<CreateWebauthn>, O extends ReturnType<CreateWebauthn>>(\n creator: (...args: I) => O\n ) =>\n (...args: I) => {\n const obj = creator(...args);\n\n Object.assign(obj.signUp, args[0].webauthn.signUp);\n Object.assign(obj.signIn, args[0].webauthn.signIn);\n Object.assign(obj.signUpOrIn, args[0].webauthn.signUpOrIn);\n Object.assign(obj.update, args[0].webauthn.update);\n\n return obj as {\n [K in keyof O]: K extends keyof I[0]['webauthn']\n ? O[K] & I[0]['webauthn'][K]\n : O[K];\n };\n };\n\n/** Constructs a higher level WebAuthn API that wraps the functions from code-js-sdk */\nconst createWebAuthn = (sdk: CoreSdk) => ({\n async signUp(identifier: string, name: string) {\n const startResponse = await sdk.webauthn.signUp.start(\n identifier,\n window.location.origin,\n name\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signUp.finish(\n startResponse.data.transactionId,\n createResponse\n );\n return finishResponse;\n },\n\n async signIn(identifier: string) {\n const startResponse = await sdk.webauthn.signIn.start(\n identifier,\n window.location.origin\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n const getResponse = await get(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signIn.finish(\n startResponse.data.transactionId,\n getResponse\n );\n return finishResponse;\n },\n\n async signUpOrIn(identifier: string) {\n const startResponse = await sdk.webauthn.signUpOrIn.start(\n identifier,\n window.location.origin\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n if (startResponse.data?.create) {\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signUp.finish(\n startResponse.data.transactionId,\n createResponse\n );\n return finishResponse;\n } else {\n const getResponse = await get(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signIn.finish(\n startResponse.data.transactionId,\n getResponse\n );\n return finishResponse;\n }\n },\n\n async update(identifier: string, token: string) {\n const startResponse = await sdk.webauthn.update.start(\n identifier,\n window.location.origin,\n token\n );\n if (!startResponse.ok) {\n return startResponse as SdkResponse<ResponseData>;\n }\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.update.finish(\n startResponse.data.transactionId,\n createResponse\n );\n return finishResponse;\n },\n\n /** Helper functions for working with WebAuthn browser APIs using JSON data */\n helpers: {\n /** Wraps the navigation.credentials.create call to translate JSON inputs and outputs */\n create,\n /** Wraps the navigation.credentials.get call to translate JSON inputs and outputs */\n get,\n /** Checks if the browser supports WebAuthn, and can optionally require in\n * addition that the browser supports WebAuthn with built-in biometrics */\n isSupported,\n conditional,\n },\n});\n\n// Helpers functions\n\nasync function create(options: string): Promise<string> {\n const createOptions = decodeCreateOptions(options);\n const createResponse = (await navigator.credentials.create(\n createOptions\n )) as AttestationPublicKeyCredential;\n return encodeCreateResponse(createResponse);\n}\n\nasync function get(options: string): Promise<string> {\n const getOptions = decodeGetOptions(options);\n const getResponse = (await navigator.credentials.get(\n getOptions\n )) as AssertionPublicKeyCredential;\n return encodeGetResponse(getResponse);\n}\n\n/**\n * This function should be used in passkeys autofill (conditional UI)\n * It handles the call to \"navigator.credentials.get\" and adds the required options\n * @param options webauthn start options\n * @param abort: AbortController instance\n * @returns encoded \"navigator.credentials.get\" response\n */\nasync function conditional(\n options: string,\n abort: AbortController\n): Promise<string> {\n const getOptions = decodeGetOptions(options);\n getOptions.signal = abort.signal;\n getOptions.mediation = 'conditional' as any;\n const getResponse = (await navigator.credentials.get(\n getOptions\n )) as AssertionPublicKeyCredential;\n return encodeGetResponse(getResponse);\n}\n\n// eslint-disable-next-line import/exports-last\nexport async function isSupported(\n requirePlatformAuthenticator: boolean = false\n): Promise<boolean> {\n if (!IS_BROWSER) {\n return Promise.resolve(false);\n }\n const supported = !!(\n PublicKeyCredential &&\n navigator.credentials &&\n navigator.credentials.create &&\n navigator.credentials.get\n );\n if (\n supported &&\n requirePlatformAuthenticator &&\n PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable\n ) {\n return PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\n }\n return supported;\n}\n\n// Conversion of data structures for Create/Attestation/Register ceremony\n\ntype AttestationPublicKeyCredential = PublicKeyCredential & {\n response: AuthenticatorAttestationResponse;\n};\n\nfunction decodeCreateOptions(value: string): CredentialCreationOptions {\n const options = JSON.parse(value);\n options.publicKey.challenge = decodeBase64Url(options.publicKey.challenge);\n options.publicKey.user.id = decodeBase64Url(options.publicKey.user.id);\n options.publicKey.excludeCredentials?.forEach((item: any) => {\n item.id = decodeBase64Url(item.id);\n });\n return options;\n}\n\nfunction encodeCreateResponse(\n credential: AttestationPublicKeyCredential\n): string {\n return JSON.stringify({\n id: credential.id,\n rawId: encodeBase64Url(credential.rawId),\n type: credential.type,\n response: {\n attestationObject: encodeBase64Url(credential.response.attestationObject),\n clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n },\n });\n}\n\n// Conversion of data structures for Get/Assertion/Login ceremony\n\ntype AssertionPublicKeyCredential = PublicKeyCredential & {\n response: AuthenticatorAssertionResponse;\n};\n\nfunction decodeGetOptions(value: string): CredentialRequestOptions {\n const options = JSON.parse(value);\n options.publicKey.challenge = decodeBase64Url(options.publicKey.challenge);\n options.publicKey.allowCredentials?.forEach((item: any) => {\n item.id = decodeBase64Url(item.id);\n });\n return options;\n}\n\nfunction encodeGetResponse(credential: AssertionPublicKeyCredential): string {\n return JSON.stringify({\n id: credential.id,\n rawId: encodeBase64Url(credential.rawId),\n type: credential.type,\n response: {\n authenticatorData: encodeBase64Url(credential.response.authenticatorData),\n clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n signature: encodeBase64Url(credential.response.signature),\n userHandle: credential.response.userHandle\n ? encodeBase64Url(credential.response.userHandle)\n : undefined,\n },\n });\n}\n\n// Conversion between ArrayBuffers and Base64Url strings\n\nfunction decodeBase64Url(value: string): ArrayBufferLike {\n const base64 = value.replace(/_/g, '/').replace(/-/g, '+');\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)).buffer;\n}\n\nfunction encodeBase64Url(value: ArrayBufferLike): string {\n const base64 = btoa(String.fromCharCode.apply(null, new Uint8Array(value)));\n return base64.replace(/\\//g, '_').replace(/\\+/g, '-').replace(/=/g, '');\n}\n\n// Exports\nexport default withCoreFns(createWebAuthn);\n","import { CoreSdk, ReplaceParam } from '../types';\nimport { isSupported } from './webauthn';\n\ntype CoreSdkFlowStartArgs = Parameters<CoreSdk['flow']['start']>;\ntype Options = Pick<CoreSdkFlowStartArgs[1], 'tenant' | 'redirectUrl'> & {\n lastAuth?: Omit<CoreSdkFlowStartArgs[1]['lastAuth'], 'loginId' | 'name'>;\n};\n\nexport default (coreSdk: CoreSdk) => ({\n ...coreSdk.flow,\n // wrap start fn and adds more data to the start options\n start: async (...args: ReplaceParam<CoreSdkFlowStartArgs, '1', Options>) => {\n const webAuthnSupport = await isSupported();\n const decoratedOptions = {\n redirectUrl: window.location.href,\n ...args[1],\n deviceInfo: {\n webAuthnSupport,\n },\n };\n\n args[1] = decoratedOptions;\n\n return coreSdk.flow.start(...args);\n },\n});\n","import createCoreSdk from '@descope/core-js-sdk';\nimport createWebAuthn from './webauthn';\nimport withFlow from './flow';\n\nconst createSdk = (...args: Parameters<typeof createCoreSdk>) => {\n const coreSdk = createCoreSdk(...args);\n\n return {\n ...coreSdk,\n flow: withFlow(coreSdk),\n webauthn: createWebAuthn(coreSdk),\n };\n};\n\nexport default createSdk;\n\nexport type CreateWebSdk = typeof createSdk;\nexport type WebSdk = ReturnType<CreateWebSdk>;\n","import { compose } from './enhancers/helpers';\nimport { withAnalytics } from './enhancers/withAnalytics';\nimport { withAutoRefresh } from './enhancers/withAutoRefresh';\nimport { withFingerprint } from './enhancers/withFingerprint';\nimport { withLastLoggedInUser } from './enhancers/withLastLoggedInUser';\nimport { withNotifications } from './enhancers/withNotifications';\nimport withPersistTokens from './enhancers/withPersistTokens';\nimport createSdk from './sdk';\n\nconst decoratedCreateSdk = compose(\n withFingerprint,\n withAutoRefresh,\n withAnalytics,\n withNotifications,\n withLastLoggedInUser, // must be one before last due to TS types\n withPersistTokens // must be last due to TS known limitation https://github.com/microsoft/TypeScript/issues/30727\n)(createSdk);\n\nexport type { UserResponse } from './types';\n\nexport default decoratedCreateSdk;\n","import { CreateWebSdk, WebSdk } from '../../sdk';\n\ntype Fn = (arg: any) => any;\n\nexport function compose<Input, A1>(\n fn1: (input: Input) => A1\n): (input: Input) => A1;\n\nexport function compose<Input, A1, A2>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2\n): (input: Input) => A2;\n\nexport function compose<Input, A1, A2, A3>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3\n): (input: Input) => A3;\n\nexport function compose<Input, A1, A2, A3, A4>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4\n): (input: Input) => A4;\n\nexport function compose<Input, A1, A2, A3, A4, A5>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5\n): (input: Input) => A5;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6\n): (input: Input) => A6;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7\n): (input: Input) => A7;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8\n): (input: Input) => A8;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8, A9>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n fn9: (input: A8) => A9\n): (input: Input) => A9;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n fn9: (input: A8) => A9,\n fn10: (input: A9) => A10\n): (input: Input) => A10;\n\n/**\n * Currently there is no way to create a compose function in Typescript without using overloading\n * This function currently support up to 10 wrappers\n * If needed you can add more by duplicating the type and add more parameters\n */\n\nexport function compose(...args: Fn[]) {\n return (data: any) => args.reduce((acc, elem) => elem(acc), data) as any;\n}\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport { addHooks, getAuthInfoFromResponse } from '../helpers';\nimport {\n createTimerFunctions,\n getTokenExpiration,\n millisecondsUntilDate,\n} from './helpers';\nimport { AutoRefreshOptions } from './types';\n\n// The amount of time (ms) to trigger the refresh before session expires\nconst REFRESH_THRESHOLD = 20 * 1000; // 20 sec\n\n/**\n * Automatically refresh the session token before it expires\n * It uses the the refresh token that is extracted from API response to do that\n */\nexport const withAutoRefresh =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({ autoRefresh, ...config }: Parameters<T>[0] & AutoRefreshOptions) => {\n if (!autoRefresh) return createSdk(config);\n\n // if we hold a single timer id, there might be a case where we override it before canceling the timer, this might cause many calls to refresh\n // in order to prevent it, we hold a list of timers and cancel all of them when a new timer is set, which means we should have one active timer only at a time\n const { clearAllTimers, setTimer } = createTimerFunctions();\n\n const afterRequest: AfterRequestHook = async (_req, res) => {\n const { refreshJwt, sessionJwt } = await getAuthInfoFromResponse(res);\n\n // if we got 401 we want to cancel all timers\n if (res?.status === 401) {\n clearAllTimers();\n } else if (sessionJwt) {\n const timeout =\n millisecondsUntilDate(getTokenExpiration(sessionJwt)) -\n REFRESH_THRESHOLD;\n clearAllTimers();\n setTimer(() => sdk.refresh(refreshJwt), timeout);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n clearAllTimers();\n\n return resp;\n };\n\n return wrapWith(sdk, ['logout', 'logoutAll'], wrapper);\n };\n","/**\n * Get the JWT expiration WITHOUT VALIDATING the JWT\n * @param token The JWT to extract expiration from\n * @returns The Date for when the JWT expires or null if there is an issue\n */\nexport const getTokenExpiration = (token: string) => {\n const parts = token.split('.');\n try {\n if (parts.length === 3) {\n const claims = JSON.parse(window.atob(parts[1]));\n if (claims.exp) {\n return new Date(claims.exp * 1000);\n }\n }\n } catch (e) {}\n return null;\n};\n\nexport const millisecondsUntilDate = (date: Date) =>\n date ? date.getTime() - new Date().getTime() : 0;\n\nexport const createTimerFunctions = () => {\n const timerIds: NodeJS.Timeout[] = [];\n\n const clearAllTimers = () => {\n while (timerIds.length) {\n clearTimeout(timerIds.pop());\n }\n };\n\n const setTimer = (cb: () => void, timeout: number) => {\n timerIds.push(setTimeout(cb, timeout));\n };\n\n return { clearAllTimers, setTimer };\n};\n","import { CreateWebSdk } from '../sdk';\nimport { BeforeRequestHook } from '../types';\nimport { addHooks } from './helpers';\n\n// this is replaced in build time\ndeclare const BUILD_VERSION: string;\n/**\n * Adds analytics headers to requests\n */\nexport const withAnalytics =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]) =>\n createSdk({\n ...config,\n baseHeaders: {\n 'x-descope-sdk-name': 'web-js',\n 'x-descope-sdk-version': BUILD_VERSION,\n ...config.baseHeaders,\n },\n });\n"],"names":["addHooks","config","hooks","reduce","acc","key","concat","_a","getAuthInfoFromResponse","async","res","ok","body","clone","json","authInfo","getUserFromResponse","user","hasOwnProperty","undefined","isLocalStorage","localStorage","setLocalStorage","value","setItem","getLocalStorage","getItem","removeLocalStorage","removeItem","IS_BROWSER","window","FP_EP_URL","createFingerprintObject","sessionId","requestId","vsid","vrid","getFPFromStorage","returnExpired","itemStr","item","JSON","parse","Date","getTime","expiry","ensureFingerprintIds","fpKey","now","toString","Math","random","substring","agentP","load","apiKey","endpoint","agent","get","linkedId","stringify","setFPToStorage","ex","global","FB_DEBUG","console","error","beforeRequest","LOCAL_STORAGE_LAST_USER_LOGIN_ID","LOCAL_STORAGE_LAST_USER_DISPLAY_NAME","getLastUserLoginId","getLastUserDisplayName","startWrapper","fn","args","options","loginId","displayName","lastAuth","name","logoutWrapper","resp","createPubSub","cbs","pub","data","forEach","cb","sub","idx","push","splice","SESSION_TOKEN_KEY","REFRESH_TOKEN_KEY","persistTokens","sessionTokenViaCookie","refreshJwt","sessionJwt","cookieParams","__rest","cookiePath","cookieDomain","cookieExpiration","expires","Cookies","set","path","domain","sameSite","secure","setJwtTokenCookie","getRefreshToken","getSessionToken","clearTokens","remove","Object","assign","token","wrapper","create","createOptions","publicKey","challenge","decodeBase64Url","id","excludeCredentials","decodeCreateOptions","createResponse","navigator","credentials","credential","rawId","encodeBase64Url","type","response","attestationObject","clientDataJSON","getOptions","decodeGetOptions","encodeGetResponse","conditional","abort","signal","mediation","isSupported","requirePlatformAuthenticator","Promise","resolve","supported","PublicKeyCredential","isUserVerifyingPlatformAuthenticatorAvailable","allowCredentials","authenticatorData","signature","userHandle","base64","replace","Uint8Array","from","atob","c","charCodeAt","buffer","btoa","String","fromCharCode","apply","creator","createWebAuthn$1","sdk","identifier","startResponse","webauthn","signUp","start","location","origin","finish","transactionId","signIn","getResponse","signUpOrIn","update","helpers","obj","withFlow","coreSdk","flow","webAuthnSupport","decoratedOptions","redirectUrl","href","deviceInfo","decoratedCreateSdk","elem","compose","createSdk","fpLoad","catch","warn","autoRefresh","clearAllTimers","setTimer","timerIds","length","clearTimeout","pop","timeout","setTimeout","createTimerFunctions","afterRequest","_req","status","date","parts","split","claims","exp","e","getTokenExpiration","refresh","wrapWith","baseHeaders","sessionPS","userPS","userDetails","wrappedSdk","onSessionTokenChange","onUserChange","loginIds","setLastUserLoginId","setLastUserDisplayName","isPersistTokens","createCoreSdk","createWebAuthn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/enhancers/helpers/index.ts","../../src/constants.ts","../../src/enhancers/withFingerprint/constants.ts","../../src/enhancers/withFingerprint/helpers.ts","../../src/enhancers/withFingerprint/index.ts","../../src/enhancers/withLastLoggedInUser/constants.ts","../../src/enhancers/withLastLoggedInUser/helpers.ts","../../src/enhancers/withLastLoggedInUser/index.ts","../../src/enhancers/withNotifications/helpers.ts","../../src/enhancers/withNotifications/index.ts","../../src/enhancers/withPersistTokens/constants.ts","../../src/enhancers/withPersistTokens/helpers.ts","../../src/enhancers/withPersistTokens/index.ts","../../src/sdk/webauthn.ts","../../src/sdk/flow.ts","../../src/sdk/index.ts","../../src/index.ts","../../src/enhancers/helpers/compose.ts","../../src/enhancers/withAutoRefresh/index.ts","../../src/enhancers/withAutoRefresh/helpers.ts","../../src/enhancers/withAnalytics.ts"],"sourcesContent":["import { JWTResponse, UserResponse } from '@descope/core-js-sdk';\nimport { CoreSdkConfig } from '../../types';\n\n/**\n * Add hooks to an existing core-sdk config\n */\nexport const addHooks = <Config extends CoreSdkConfig>(\n config: Config,\n hooks: Config['hooks']\n): Config => {\n ['beforeRequest', 'afterRequest'].reduce((acc, key) => {\n acc[key] = [].concat(config.hooks?.[key] || []).concat(hooks?.[key] || []);\n\n return acc;\n }, (config.hooks ??= {}));\n\n return config;\n};\n\nexport { compose } from './compose';\n\n/**\n * Extract auth info (JWT response) from fetch response\n * We assume that the auth info is under a \"authInfo\" attribute (flow response)\n * Or the body itself (other auth methods response)\n */\nexport const getAuthInfoFromResponse = async (\n res: Response\n): Promise<Partial<JWTResponse>> => {\n if (!res?.ok) return {};\n const body = await res?.clone().json();\n return body?.authInfo || body || {};\n};\n\n/**\n * Extract user from fetch response\n * User my exist under \"user\" attribute (auth methods response)\n * Or the body itself (when calling \"me\")\n */\nexport const getUserFromResponse = async (\n res: Response\n): Promise<UserResponse> | undefined => {\n const authInfo = await getAuthInfoFromResponse(res);\n\n return (\n authInfo?.user ||\n (authInfo?.hasOwnProperty('userId')\n ? (authInfo as UserResponse)\n : undefined)\n );\n};\n\nexport const isLocalStorage = typeof localStorage !== 'undefined';\n\nexport const setLocalStorage = (key: string, value: string) =>\n isLocalStorage && localStorage?.setItem(key, value);\nexport const getLocalStorage = (key: string) =>\n isLocalStorage && localStorage?.getItem(key);\nexport const removeLocalStorage = (key: string) =>\n isLocalStorage && localStorage?.removeItem(key);\n","// This sdk can be used in SSR apps\nexport const IS_BROWSER = typeof window !== 'undefined';\n","import { IS_BROWSER } from '../../constants';\n\nconst FINGERPRINT_PUBLIC_KEY = 'fingerprint.public.key';\nconst FINGERPRINT_ENDPOINT_URL = 'fingerprint.endpoint.url';\n\n/** Fingerprint.js custom API endpoint */\nexport const FP_EP_URL =\n (IS_BROWSER && localStorage?.getItem(FINGERPRINT_ENDPOINT_URL)) ||\n 'https://fp.descope.com';\n/** Fingerprint visitor data */\nexport const FP_BODY_DATA = 'fpData';\n/** Session ID for visitor */\nexport const VISITOR_SESSION_ID_PARAM = 'vsid';\n/** Request ID for visitor */\nexport const VISITOR_REQUEST_ID_PARAM = 'vrid';\n/** FP storage key */\nexport const FP_STORAGE_KEY = 'fp';\n// Storage FP Keys TTL is 24 hours\nexport const STORAGE_TTL_MS = 24 * 60 * 60 * 1000;\n","import { load } from '@fingerprintjs/fingerprintjs-pro';\nimport {\n FP_EP_URL,\n FP_STORAGE_KEY,\n STORAGE_TTL_MS,\n VISITOR_REQUEST_ID_PARAM,\n VISITOR_SESSION_ID_PARAM,\n} from './constants';\nimport { FingerprintObject } from './types';\n\nconst createFingerprintObject = (\n sessionId: string = '',\n requestId: string = ''\n): FingerprintObject => ({\n [VISITOR_SESSION_ID_PARAM]: sessionId,\n [VISITOR_REQUEST_ID_PARAM]: requestId,\n});\n\n/** Generate UUID based on current time and some randomness */\nconst generateUUID = () => {\n // return alphanumeric, sortable uuid of 27 characters\n return (\n Date.now().toString(36) +\n Math.random().toString(36).substring(2) + // removing '0.' prefix\n Math.random().toString(36).substring(2)\n ).substring(0, 27);\n};\n\n// Set FP data to storage with expiration\n// We set the request id and session id together so they will have the same TTL\n// This implementation is based on https://www.sohamkamani.com/javascript/localstorage-with-ttl-expiry/\nconst setFPToStorage = (value: FingerprintObject) => {\n const now = new Date();\n // `item` is an object which contains the value\n // as well as the time when it's supposed to expire\n const item = {\n value,\n expiry: now.getTime() + STORAGE_TTL_MS,\n };\n localStorage.setItem(FP_STORAGE_KEY, JSON.stringify(item));\n};\n\n// Get Fingerprint from storage, will return null if not exists, of if expired\nconst getFPFromStorage = (returnExpired = false): FingerprintObject => {\n const itemStr = localStorage.getItem(FP_STORAGE_KEY);\n // if the item doesn't exist, return null\n if (!itemStr) {\n return null;\n }\n const item = JSON.parse(itemStr);\n const now = new Date();\n // compare the expiry time of the item with the current time\n // return null if needed\n if (now.getTime() > item.expiry && !returnExpired) {\n return null;\n }\n return item.value;\n};\n\n/**\n * Ensure fingerprint ids (request id, session id) exist.\n * If not, It will generate and load them into to browser storage.\n * NOTE: Using fingerprintJS data has cost, use considerably.\n * @param fpKey FingerprintJS API key\n */\nexport const ensureFingerprintIds = async (fpKey: string) => {\n try {\n if (getFPFromStorage()) {\n // FP is already in storage, no need to\n return;\n }\n\n const sessionId = generateUUID();\n const agentP = load({ apiKey: fpKey, endpoint: FP_EP_URL });\n const agent = await agentP;\n const { requestId } = await agent.get({ linkedId: sessionId });\n const fpData = createFingerprintObject(sessionId, requestId);\n setFPToStorage(fpData);\n } catch (ex) {\n // istanbul ignore next\n if (global.FB_DEBUG) {\n // eslint-disable-next-line no-console\n console.error(ex);\n }\n }\n};\n\n/**\n * Get Fingerprint data (request ids) from storage, or create empty object\n * If data is expired, return it anyway\n */\nexport const getFingerprintData = (): FingerprintObject => {\n // get from storage, fallback to default\n return getFPFromStorage(true) || createFingerprintObject();\n};\n","import { IS_BROWSER } from '../../constants';\nimport { CreateWebSdk } from '../../sdk';\nimport { BeforeRequestHook } from '../../types';\nimport { addHooks } from '../helpers';\nimport { FP_BODY_DATA } from './constants';\nimport { ensureFingerprintIds, getFingerprintData } from './helpers';\nimport { FingerprintOptions } from './types';\n\nconst beforeRequest: BeforeRequestHook = (config) => {\n if (config.body) {\n config.body[FP_BODY_DATA] = getFingerprintData();\n }\n\n return config;\n};\n\n/**\n * Add fingerprint data to outgoing requests\n */\nexport const withFingerprint =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({ fpKey, fpLoad, ...config }: Parameters<T>[0] & FingerprintOptions) => {\n // relevant only if fpKey was provided\n if (!fpKey) {\n return createSdk({\n ...config,\n });\n }\n if (!IS_BROWSER) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Fingerprint is a client side only capability and will not work when running in the server'\n );\n } else if (fpLoad) {\n ensureFingerprintIds(fpKey).catch(() => null);\n }\n\n return createSdk(addHooks(config, { beforeRequest }));\n };\n","/** Login Id of the last user logged in */\nexport const LOCAL_STORAGE_LAST_USER_LOGIN_ID = 'dls_last_user_login_id';\n\n/** Display name of the last user logged in */\nexport const LOCAL_STORAGE_LAST_USER_DISPLAY_NAME =\n 'dls_last_user_display_name';\n","import {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\nimport {\n LOCAL_STORAGE_LAST_USER_LOGIN_ID,\n LOCAL_STORAGE_LAST_USER_DISPLAY_NAME,\n} from './constants';\n\nexport const setLastUserLoginId = (loginId: string) => {\n return setLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID, loginId);\n};\n\nexport const getLastUserLoginId = () => {\n return getLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID);\n};\n\nexport const removeLastUserLoginId = () => {\n return removeLocalStorage(LOCAL_STORAGE_LAST_USER_LOGIN_ID);\n};\n\nexport const setLastUserDisplayName = (displayName: string) => {\n return setLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME, displayName);\n};\n\nexport const getLastUserDisplayName = () => {\n return getLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME);\n};\n\nexport const removeLastUserDisplayName = () => {\n return removeLocalStorage(LOCAL_STORAGE_LAST_USER_DISPLAY_NAME);\n};\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook, CoreSdk } from '../../types';\nimport { addHooks, getUserFromResponse } from '../helpers';\nimport {\n getLastUserLoginId,\n removeLastUserLoginId,\n setLastUserLoginId,\n getLastUserDisplayName,\n removeLastUserDisplayName,\n setLastUserDisplayName,\n} from './helpers';\n\n/**\n * Adds last logged in user to flow start request\n */\n// eslint-disable-next-line import/exports-last\nexport const withLastLoggedInUser =\n <T extends CreateWebSdk>(createSdk: T) =>\n (\n config: Parameters<T>[0]\n ): ReturnType<T> & {\n getLastUserLoginId: typeof getLastUserLoginId;\n getLastUserDisplayName: typeof getLastUserDisplayName;\n } => {\n const afterRequest: AfterRequestHook = async (_req, res) => {\n const userDetails = await getUserFromResponse(res);\n const loginId = userDetails?.loginIds?.[0];\n const displayName = userDetails?.name;\n if (loginId) {\n setLastUserLoginId(loginId);\n setLastUserDisplayName(displayName);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n let wrappedSdk = wrapWith(sdk, ['flow.start'], startWrapper);\n wrappedSdk = wrapWith(wrappedSdk, ['logout', 'logoutAll'], logoutWrapper);\n return Object.assign(wrappedSdk, {\n getLastUserLoginId,\n getLastUserDisplayName,\n }) as any;\n };\n\nconst startWrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n args[1] = args[1] || {};\n const [, options = {}] = args as unknown as Parameters<\n CoreSdk['flow']['start']\n >;\n const loginId = getLastUserLoginId();\n const displayName = getLastUserDisplayName();\n\n if (loginId) {\n options.lastAuth ??= {};\n options.lastAuth.loginId = loginId;\n options.lastAuth.name = displayName;\n }\n\n const resp = await fn(...args);\n\n return resp;\n };\n\nconst logoutWrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n removeLastUserLoginId();\n removeLastUserDisplayName();\n\n return resp;\n };\n","// create publisher/subscriber instances\nexport function createPubSub<T extends any>() {\n const cbs = [];\n\n const sub = (cb: (data: T) => void) => {\n const idx = cbs.push(cb) - 1;\n return () => cbs.splice(idx, 1);\n };\n\n const pub = (data: T) => {\n cbs.forEach((cb) => cb(data));\n };\n\n return { pub, sub };\n}\n","import { SdkFnWrapper, UserResponse, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk, WebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport {\n addHooks,\n getAuthInfoFromResponse,\n getUserFromResponse,\n} from '../helpers';\nimport { createPubSub } from './helpers';\n\n/**\n * Adds 2 event functions to the sdk,\n * onSessionTokenChange: Gets a callback and call it whenever there is a change in session token\n * onUserChange: Gets a callback and call it whenever there is a change in current logged in user\n */\nexport const withNotifications =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]) => {\n const sessionPS = createPubSub<string | null>();\n const userPS = createPubSub<UserResponse | null>();\n\n const afterRequest: AfterRequestHook = async (_req, res) => {\n if (res?.status === 401) {\n sessionPS.pub(null);\n userPS.pub(null);\n } else {\n const userDetails = await getUserFromResponse(res);\n if (userDetails) userPS.pub(userDetails);\n\n const { sessionJwt } = await getAuthInfoFromResponse(res);\n if (sessionJwt) sessionPS.pub(sessionJwt);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n sessionPS.pub(null);\n userPS.pub(null);\n\n return resp;\n };\n\n const wrappedSdk = wrapWith(sdk, ['logout', 'logoutAll'], wrapper);\n\n return Object.assign(wrappedSdk, {\n onSessionTokenChange: sessionPS.sub,\n onUserChange: userPS.sub,\n });\n };\n","/** Default name for the session cookie name / local storage key */\nexport const SESSION_TOKEN_KEY = 'DS';\n/** Default name for the refresh local storage key */\nexport const REFRESH_TOKEN_KEY = 'DSR';\n","import { JWTResponse } from '@descope/core-js-sdk';\nimport Cookies from 'js-cookie';\nimport { BeforeRequestHook } from '../../types';\nimport { REFRESH_TOKEN_KEY, SESSION_TOKEN_KEY } from './constants';\nimport {\n getLocalStorage,\n removeLocalStorage,\n setLocalStorage,\n} from '../helpers';\n\n/**\n * Store the session JWT as a cookie on the given domain and path with the given expiration.\n * This is useful so that the application backend will automatically get the cookie for the session\n * @param name cookie name\n * @param value The JWT to store as a cookie\n * @param cookieParams configuration that is usually returned from the JWT\n */\nfunction setJwtTokenCookie(\n name: string,\n value: string,\n { cookiePath, cookieDomain, cookieExpiration }: Partial<JWTResponse>\n) {\n if (value) {\n const expires = new Date(cookieExpiration * 1000); // we are getting response from the server in seconds instead of ms\n Cookies.set(name, value, {\n path: cookiePath,\n domain: cookieDomain,\n expires,\n sameSite: 'Strict',\n secure: true,\n });\n }\n}\n\nexport const persistTokens = (\n { refreshJwt, sessionJwt, ...cookieParams } = {} as Partial<JWTResponse>,\n sessionTokenViaCookie = false\n) => {\n // persist refresh token\n refreshJwt && setLocalStorage(REFRESH_TOKEN_KEY, refreshJwt);\n\n // persist session token\n if (sessionJwt) {\n sessionTokenViaCookie\n ? setJwtTokenCookie(SESSION_TOKEN_KEY, sessionJwt, cookieParams)\n : setLocalStorage(SESSION_TOKEN_KEY, sessionJwt);\n }\n};\n\n/** Return the refresh token from the localStorage. Not for production usage because refresh token will not be saved in localStorage. */\nexport function getRefreshToken() {\n return getLocalStorage(REFRESH_TOKEN_KEY) || '';\n}\n\n/**\n * Return the session token. first try to get from cookie, and fallback to local storage\n * See sessionTokenViaCookie option for more details about session token location\n */\nexport function getSessionToken(): string {\n return (\n Cookies.get(SESSION_TOKEN_KEY) || getLocalStorage(SESSION_TOKEN_KEY) || ''\n );\n}\n\n/** Remove both the localStorage refresh JWT and the session cookie */\nexport function clearTokens() {\n removeLocalStorage(REFRESH_TOKEN_KEY);\n removeLocalStorage(SESSION_TOKEN_KEY);\n Cookies.remove(SESSION_TOKEN_KEY);\n}\n\nexport const beforeRequest: BeforeRequestHook = (config) =>\n Object.assign(config, { token: config.token || getRefreshToken() });\n","/* eslint-disable import/exports-last */\nimport { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { IS_BROWSER } from '../../constants';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport { addHooks, getAuthInfoFromResponse } from '../helpers';\nimport {\n beforeRequest,\n clearTokens,\n getRefreshToken,\n getSessionToken,\n persistTokens,\n} from './helpers';\nimport { PersistTokensOptions } from './types';\n\n/**\n * Persist authentication tokens in cookie/storage\n */\nexport const withPersistTokens =\n <T extends CreateWebSdk>(createSdk: T) =>\n <A extends boolean>({\n persistTokens: isPersistTokens,\n sessionTokenViaCookie,\n ...config\n }: Parameters<T>[0] & PersistTokensOptions<A>): A extends true\n ? ReturnType<T> & {\n getRefreshToken: typeof getRefreshToken;\n getSessionToken: typeof getSessionToken;\n }\n : ReturnType<T> => {\n if (!isPersistTokens || !IS_BROWSER) {\n if (isPersistTokens) {\n // eslint-disable-next-line no-console\n console.warn(\n 'Storing auth tokens in local storage and cookies are a client side only capabilities and will not be done when running in the server'\n );\n }\n return createSdk(config) as any;\n }\n\n const afterRequest: AfterRequestHook = async (_req, res) => {\n if (res?.status === 401) {\n clearTokens();\n } else {\n persistTokens(\n await getAuthInfoFromResponse(res),\n sessionTokenViaCookie\n );\n }\n };\n\n const sdk = createSdk(addHooks(config, { beforeRequest, afterRequest }));\n\n const wrappedSdk = wrapWith(sdk, ['logout', 'logoutAll'], wrapper);\n\n return Object.assign(wrappedSdk, {\n getRefreshToken,\n getSessionToken,\n }) as any;\n };\n\nconst wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n clearTokens();\n\n return resp;\n };\n\nexport default withPersistTokens;\n","import { JWTResponse, SdkResponse, ResponseData } from '@descope/core-js-sdk';\nimport { IS_BROWSER } from '../constants';\nimport { CoreSdk } from '../types';\n\ntype CreateWebauthn = typeof createWebAuthn;\n\nconst withCoreFns =\n <I extends Parameters<CreateWebauthn>, O extends ReturnType<CreateWebauthn>>(\n creator: (...args: I) => O\n ) =>\n (...args: I) => {\n const obj = creator(...args);\n\n Object.assign(obj.signUp, args[0].webauthn.signUp);\n Object.assign(obj.signIn, args[0].webauthn.signIn);\n Object.assign(obj.signUpOrIn, args[0].webauthn.signUpOrIn);\n Object.assign(obj.update, args[0].webauthn.update);\n\n return obj as {\n [K in keyof O]: K extends keyof I[0]['webauthn']\n ? O[K] & I[0]['webauthn'][K]\n : O[K];\n };\n };\n\n/** Constructs a higher level WebAuthn API that wraps the functions from code-js-sdk */\nconst createWebAuthn = (sdk: CoreSdk) => ({\n async signUp(identifier: string, name: string) {\n const startResponse = await sdk.webauthn.signUp.start(\n identifier,\n window.location.origin,\n name\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signUp.finish(\n startResponse.data.transactionId,\n createResponse\n );\n return finishResponse;\n },\n\n async signIn(identifier: string) {\n const startResponse = await sdk.webauthn.signIn.start(\n identifier,\n window.location.origin\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n const getResponse = await get(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signIn.finish(\n startResponse.data.transactionId,\n getResponse\n );\n return finishResponse;\n },\n\n async signUpOrIn(identifier: string) {\n const startResponse = await sdk.webauthn.signUpOrIn.start(\n identifier,\n window.location.origin\n );\n if (!startResponse.ok) {\n return startResponse as unknown as SdkResponse<JWTResponse>;\n }\n if (startResponse.data?.create) {\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signUp.finish(\n startResponse.data.transactionId,\n createResponse\n );\n return finishResponse;\n } else {\n const getResponse = await get(startResponse.data.options);\n const finishResponse = await sdk.webauthn.signIn.finish(\n startResponse.data.transactionId,\n getResponse\n );\n return finishResponse;\n }\n },\n\n async update(identifier: string, token: string) {\n const startResponse = await sdk.webauthn.update.start(\n identifier,\n window.location.origin,\n token\n );\n if (!startResponse.ok) {\n return startResponse as SdkResponse<ResponseData>;\n }\n const createResponse = await create(startResponse.data.options);\n const finishResponse = await sdk.webauthn.update.finish(\n startResponse.data.transactionId,\n createResponse\n );\n return finishResponse;\n },\n\n /** Helper functions for working with WebAuthn browser APIs using JSON data */\n helpers: {\n /** Wraps the navigation.credentials.create call to translate JSON inputs and outputs */\n create,\n /** Wraps the navigation.credentials.get call to translate JSON inputs and outputs */\n get,\n /** Checks if the browser supports WebAuthn, and can optionally require in\n * addition that the browser supports WebAuthn with built-in biometrics */\n isSupported,\n conditional,\n },\n});\n\n// Helpers functions\n\nasync function create(options: string): Promise<string> {\n const createOptions = decodeCreateOptions(options);\n const createResponse = (await navigator.credentials.create(\n createOptions\n )) as AttestationPublicKeyCredential;\n return encodeCreateResponse(createResponse);\n}\n\nasync function get(options: string): Promise<string> {\n const getOptions = decodeGetOptions(options);\n const getResponse = (await navigator.credentials.get(\n getOptions\n )) as AssertionPublicKeyCredential;\n return encodeGetResponse(getResponse);\n}\n\n/**\n * This function should be used in passkeys autofill (conditional UI)\n * It handles the call to \"navigator.credentials.get\" and adds the required options\n * @param options webauthn start options\n * @param abort: AbortController instance\n * @returns encoded \"navigator.credentials.get\" response\n */\nasync function conditional(\n options: string,\n abort: AbortController\n): Promise<string> {\n const getOptions = decodeGetOptions(options);\n getOptions.signal = abort.signal;\n getOptions.mediation = 'conditional' as any;\n const getResponse = (await navigator.credentials.get(\n getOptions\n )) as AssertionPublicKeyCredential;\n return encodeGetResponse(getResponse);\n}\n\n// eslint-disable-next-line import/exports-last\nexport async function isSupported(\n requirePlatformAuthenticator: boolean = false\n): Promise<boolean> {\n if (!IS_BROWSER) {\n return Promise.resolve(false);\n }\n const supported = !!(\n PublicKeyCredential &&\n navigator.credentials &&\n navigator.credentials.create &&\n navigator.credentials.get\n );\n if (\n supported &&\n requirePlatformAuthenticator &&\n PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable\n ) {\n return PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();\n }\n return supported;\n}\n\n// Conversion of data structures for Create/Attestation/Register ceremony\n\ntype AttestationPublicKeyCredential = PublicKeyCredential & {\n response: AuthenticatorAttestationResponse;\n};\n\nfunction decodeCreateOptions(value: string): CredentialCreationOptions {\n const options = JSON.parse(value);\n options.publicKey.challenge = decodeBase64Url(options.publicKey.challenge);\n options.publicKey.user.id = decodeBase64Url(options.publicKey.user.id);\n options.publicKey.excludeCredentials?.forEach((item: any) => {\n item.id = decodeBase64Url(item.id);\n });\n return options;\n}\n\nfunction encodeCreateResponse(\n credential: AttestationPublicKeyCredential\n): string {\n return JSON.stringify({\n id: credential.id,\n rawId: encodeBase64Url(credential.rawId),\n type: credential.type,\n response: {\n attestationObject: encodeBase64Url(credential.response.attestationObject),\n clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n },\n });\n}\n\n// Conversion of data structures for Get/Assertion/Login ceremony\n\ntype AssertionPublicKeyCredential = PublicKeyCredential & {\n response: AuthenticatorAssertionResponse;\n};\n\nfunction decodeGetOptions(value: string): CredentialRequestOptions {\n const options = JSON.parse(value);\n options.publicKey.challenge = decodeBase64Url(options.publicKey.challenge);\n options.publicKey.allowCredentials?.forEach((item: any) => {\n item.id = decodeBase64Url(item.id);\n });\n return options;\n}\n\nfunction encodeGetResponse(credential: AssertionPublicKeyCredential): string {\n return JSON.stringify({\n id: credential.id,\n rawId: encodeBase64Url(credential.rawId),\n type: credential.type,\n response: {\n authenticatorData: encodeBase64Url(credential.response.authenticatorData),\n clientDataJSON: encodeBase64Url(credential.response.clientDataJSON),\n signature: encodeBase64Url(credential.response.signature),\n userHandle: credential.response.userHandle\n ? encodeBase64Url(credential.response.userHandle)\n : undefined,\n },\n });\n}\n\n// Conversion between ArrayBuffers and Base64Url strings\n\nfunction decodeBase64Url(value: string): ArrayBufferLike {\n const base64 = value.replace(/_/g, '/').replace(/-/g, '+');\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0)).buffer;\n}\n\nfunction encodeBase64Url(value: ArrayBufferLike): string {\n const base64 = btoa(String.fromCharCode.apply(null, new Uint8Array(value)));\n return base64.replace(/\\//g, '_').replace(/\\+/g, '-').replace(/=/g, '');\n}\n\n// Exports\nexport default withCoreFns(createWebAuthn);\n","import { CoreSdk, ReplaceParam } from '../types';\nimport { isSupported } from './webauthn';\n\ntype CoreSdkFlowStartArgs = Parameters<CoreSdk['flow']['start']>;\ntype Options = Pick<\n CoreSdkFlowStartArgs[1],\n 'tenant' | 'redirectUrl' | 'redirectAuth'\n> & {\n lastAuth?: Omit<CoreSdkFlowStartArgs[1]['lastAuth'], 'loginId' | 'name'>;\n};\n\nexport default (coreSdk: CoreSdk) => ({\n ...coreSdk.flow,\n // wrap start fn and adds more data to the start options\n start: async (...args: ReplaceParam<CoreSdkFlowStartArgs, '1', Options>) => {\n const webAuthnSupport = await isSupported();\n const decoratedOptions = {\n redirectUrl: window.location.href,\n ...args[1],\n deviceInfo: {\n webAuthnSupport,\n },\n };\n\n args[1] = decoratedOptions;\n\n return coreSdk.flow.start(...args);\n },\n});\n","import createCoreSdk from '@descope/core-js-sdk';\nimport createWebAuthn from './webauthn';\nimport withFlow from './flow';\n\nconst createSdk = (...args: Parameters<typeof createCoreSdk>) => {\n const coreSdk = createCoreSdk(...args);\n\n return {\n ...coreSdk,\n flow: withFlow(coreSdk),\n webauthn: createWebAuthn(coreSdk),\n };\n};\n\nexport default createSdk;\n\nexport type CreateWebSdk = typeof createSdk;\nexport type WebSdk = ReturnType<CreateWebSdk>;\n","import { compose } from './enhancers/helpers';\nimport { withAnalytics } from './enhancers/withAnalytics';\nimport { withAutoRefresh } from './enhancers/withAutoRefresh';\nimport { withFingerprint } from './enhancers/withFingerprint';\nimport { withLastLoggedInUser } from './enhancers/withLastLoggedInUser';\nimport { withNotifications } from './enhancers/withNotifications';\nimport withPersistTokens from './enhancers/withPersistTokens';\nimport createSdk from './sdk';\n\nconst decoratedCreateSdk = compose(\n withFingerprint,\n withAutoRefresh,\n withAnalytics,\n withNotifications,\n withLastLoggedInUser, // must be one before last due to TS types\n withPersistTokens // must be last due to TS known limitation https://github.com/microsoft/TypeScript/issues/30727\n)(createSdk);\n\nexport type { UserResponse } from './types';\n\nexport default decoratedCreateSdk;\n","import { CreateWebSdk, WebSdk } from '../../sdk';\n\ntype Fn = (arg: any) => any;\n\nexport function compose<Input, A1>(\n fn1: (input: Input) => A1\n): (input: Input) => A1;\n\nexport function compose<Input, A1, A2>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2\n): (input: Input) => A2;\n\nexport function compose<Input, A1, A2, A3>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3\n): (input: Input) => A3;\n\nexport function compose<Input, A1, A2, A3, A4>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4\n): (input: Input) => A4;\n\nexport function compose<Input, A1, A2, A3, A4, A5>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5\n): (input: Input) => A5;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6\n): (input: Input) => A6;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7\n): (input: Input) => A7;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8\n): (input: Input) => A8;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8, A9>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n fn9: (input: A8) => A9\n): (input: Input) => A9;\n\nexport function compose<Input, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10>(\n fn1: (input: Input) => A1,\n fn2: (input: A1) => A2,\n fn3: (input: A2) => A3,\n fn4: (input: A3) => A4,\n fn5: (input: A4) => A5,\n fn6: (input: A5) => A6,\n fn7: (input: A6) => A7,\n fn8: (input: A7) => A8,\n fn9: (input: A8) => A9,\n fn10: (input: A9) => A10\n): (input: Input) => A10;\n\n/**\n * Currently there is no way to create a compose function in Typescript without using overloading\n * This function currently support up to 10 wrappers\n * If needed you can add more by duplicating the type and add more parameters\n */\n\nexport function compose(...args: Fn[]) {\n return (data: any) => args.reduce((acc, elem) => elem(acc), data) as any;\n}\n","import { SdkFnWrapper, wrapWith } from '@descope/core-js-sdk';\nimport { CreateWebSdk } from '../../sdk';\nimport { AfterRequestHook } from '../../types';\nimport { addHooks, getAuthInfoFromResponse } from '../helpers';\nimport {\n createTimerFunctions,\n getTokenExpiration,\n millisecondsUntilDate,\n} from './helpers';\nimport { AutoRefreshOptions } from './types';\n\n// The amount of time (ms) to trigger the refresh before session expires\nconst REFRESH_THRESHOLD = 20 * 1000; // 20 sec\n\n/**\n * Automatically refresh the session token before it expires\n * It uses the the refresh token that is extracted from API response to do that\n */\nexport const withAutoRefresh =\n <T extends CreateWebSdk>(createSdk: T) =>\n ({ autoRefresh, ...config }: Parameters<T>[0] & AutoRefreshOptions) => {\n if (!autoRefresh) return createSdk(config);\n\n // if we hold a single timer id, there might be a case where we override it before canceling the timer, this might cause many calls to refresh\n // in order to prevent it, we hold a list of timers and cancel all of them when a new timer is set, which means we should have one active timer only at a time\n const { clearAllTimers, setTimer } = createTimerFunctions();\n\n const afterRequest: AfterRequestHook = async (_req, res) => {\n const { refreshJwt, sessionJwt } = await getAuthInfoFromResponse(res);\n\n // if we got 401 we want to cancel all timers\n if (res?.status === 401) {\n clearAllTimers();\n } else if (sessionJwt) {\n const timeout =\n millisecondsUntilDate(getTokenExpiration(sessionJwt)) -\n REFRESH_THRESHOLD;\n clearAllTimers();\n setTimer(() => sdk.refresh(refreshJwt), timeout);\n }\n };\n\n const sdk = createSdk(addHooks(config, { afterRequest }));\n\n const wrapper: SdkFnWrapper<{}> =\n (fn) =>\n async (...args) => {\n const resp = await fn(...args);\n\n clearAllTimers();\n\n return resp;\n };\n\n return wrapWith(sdk, ['logout', 'logoutAll'], wrapper);\n };\n","/**\n * Get the JWT expiration WITHOUT VALIDATING the JWT\n * @param token The JWT to extract expiration from\n * @returns The Date for when the JWT expires or null if there is an issue\n */\nexport const getTokenExpiration = (token: string) => {\n const parts = token.split('.');\n try {\n if (parts.length === 3) {\n const claims = JSON.parse(window.atob(parts[1]));\n if (claims.exp) {\n return new Date(claims.exp * 1000);\n }\n }\n } catch (e) {}\n return null;\n};\n\nexport const millisecondsUntilDate = (date: Date) =>\n date ? date.getTime() - new Date().getTime() : 0;\n\nexport const createTimerFunctions = () => {\n const timerIds: NodeJS.Timeout[] = [];\n\n const clearAllTimers = () => {\n while (timerIds.length) {\n clearTimeout(timerIds.pop());\n }\n };\n\n const setTimer = (cb: () => void, timeout: number) => {\n timerIds.push(setTimeout(cb, timeout));\n };\n\n return { clearAllTimers, setTimer };\n};\n","import { CreateWebSdk } from '../sdk';\nimport { BeforeRequestHook } from '../types';\nimport { addHooks } from './helpers';\n\n// this is replaced in build time\ndeclare const BUILD_VERSION: string;\n/**\n * Adds analytics headers to requests\n */\nexport const withAnalytics =\n <T extends CreateWebSdk>(createSdk: T) =>\n (config: Parameters<T>[0]) =>\n createSdk({\n ...config,\n baseHeaders: {\n 'x-descope-sdk-name': 'web-js',\n 'x-descope-sdk-version': BUILD_VERSION,\n ...config.baseHeaders,\n },\n });\n"],"names":["addHooks","config","hooks","reduce","acc","key","concat","_a","getAuthInfoFromResponse","async","res","ok","body","clone","json","authInfo","getUserFromResponse","user","hasOwnProperty","undefined","isLocalStorage","localStorage","setLocalStorage","value","setItem","getLocalStorage","getItem","removeLocalStorage","removeItem","IS_BROWSER","window","FP_EP_URL","createFingerprintObject","sessionId","requestId","vsid","vrid","getFPFromStorage","returnExpired","itemStr","item","JSON","parse","Date","getTime","expiry","ensureFingerprintIds","fpKey","now","toString","Math","random","substring","agentP","load","apiKey","endpoint","agent","get","linkedId","stringify","setFPToStorage","ex","global","FB_DEBUG","console","error","beforeRequest","LOCAL_STORAGE_LAST_USER_LOGIN_ID","LOCAL_STORAGE_LAST_USER_DISPLAY_NAME","getLastUserLoginId","getLastUserDisplayName","startWrapper","fn","args","options","loginId","displayName","lastAuth","name","logoutWrapper","resp","createPubSub","cbs","pub","data","forEach","cb","sub","idx","push","splice","SESSION_TOKEN_KEY","REFRESH_TOKEN_KEY","persistTokens","sessionTokenViaCookie","refreshJwt","sessionJwt","cookieParams","__rest","cookiePath","cookieDomain","cookieExpiration","expires","Cookies","set","path","domain","sameSite","secure","setJwtTokenCookie","getRefreshToken","getSessionToken","clearTokens","remove","Object","assign","token","wrapper","create","createOptions","publicKey","challenge","decodeBase64Url","id","excludeCredentials","decodeCreateOptions","createResponse","navigator","credentials","credential","rawId","encodeBase64Url","type","response","attestationObject","clientDataJSON","getOptions","decodeGetOptions","encodeGetResponse","conditional","abort","signal","mediation","isSupported","requirePlatformAuthenticator","Promise","resolve","supported","PublicKeyCredential","isUserVerifyingPlatformAuthenticatorAvailable","allowCredentials","authenticatorData","signature","userHandle","base64","replace","Uint8Array","from","atob","c","charCodeAt","buffer","btoa","String","fromCharCode","apply","creator","createWebAuthn$1","sdk","identifier","startResponse","webauthn","signUp","start","location","origin","finish","transactionId","signIn","getResponse","signUpOrIn","update","helpers","obj","withFlow","coreSdk","flow","webAuthnSupport","decoratedOptions","redirectUrl","href","deviceInfo","decoratedCreateSdk","elem","compose","createSdk","fpLoad","catch","warn","autoRefresh","clearAllTimers","setTimer","timerIds","length","clearTimeout","pop","timeout","setTimeout","createTimerFunctions","afterRequest","_req","status","date","parts","split","claims","exp","e","getTokenExpiration","refresh","wrapWith","baseHeaders","sessionPS","userPS","userDetails","wrappedSdk","onSessionTokenChange","onUserChange","loginIds","setLastUserLoginId","setLastUserDisplayName","isPersistTokens","createCoreSdk","createWebAuthn"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -73,7 +73,11 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
73
73
|
name?: string;
|
|
74
74
|
loginId?: string;
|
|
75
75
|
};
|
|
76
|
-
|
|
76
|
+
redirectAuth?: {
|
|
77
|
+
callbackUrl: string;
|
|
78
|
+
codeChallenge: string;
|
|
79
|
+
};
|
|
80
|
+
}, "tenant" | "redirectUrl" | "redirectAuth"> & {
|
|
77
81
|
lastAuth?: Omit<{
|
|
78
82
|
authMethod?: "webauthn" | "otp" | "oauth" | "saml" | "totp" | "magiclink" | "enchantedlink";
|
|
79
83
|
oauthProvider?: string;
|
|
@@ -185,14 +189,23 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
185
189
|
}>>;
|
|
186
190
|
};
|
|
187
191
|
update: {
|
|
188
|
-
email: (loginId: string, email: string, token?: string
|
|
192
|
+
email: <T extends boolean>(loginId: string, email: string, token?: string, updateOptions?: {
|
|
193
|
+
addToLoginIDs?: T;
|
|
194
|
+
onMergeUseExisting?: T extends true ? boolean : never;
|
|
195
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
189
196
|
maskedEmail: string;
|
|
190
197
|
}>>;
|
|
191
198
|
phone: {
|
|
192
|
-
sms: (loginId: string, phone: string, token?: string
|
|
199
|
+
sms: <T_1 extends boolean>(loginId: string, phone: string, token?: string, updateOptions?: {
|
|
200
|
+
addToLoginIDs?: T_1;
|
|
201
|
+
onMergeUseExisting?: T_1 extends true ? boolean : never;
|
|
202
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
193
203
|
maskedPhone: string;
|
|
194
204
|
}>>;
|
|
195
|
-
whatsapp: (loginId: string, phone: string, token?: string
|
|
205
|
+
whatsapp: <T_1 extends boolean>(loginId: string, phone: string, token?: string, updateOptions?: {
|
|
206
|
+
addToLoginIDs?: T_1;
|
|
207
|
+
onMergeUseExisting?: T_1 extends true ? boolean : never;
|
|
208
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
196
209
|
maskedPhone: string;
|
|
197
210
|
}>>;
|
|
198
211
|
};
|
|
@@ -246,14 +259,23 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
246
259
|
}>>;
|
|
247
260
|
};
|
|
248
261
|
update: {
|
|
249
|
-
email: (loginId: string, email: string, URI?: string, token?: string
|
|
262
|
+
email: <T_2 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: {
|
|
263
|
+
addToLoginIDs?: T_2;
|
|
264
|
+
onMergeUseExisting?: T_2 extends true ? boolean : never;
|
|
265
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
250
266
|
maskedEmail: string;
|
|
251
267
|
}>>;
|
|
252
268
|
phone: {
|
|
253
|
-
sms: (loginId: string, phone: string, URI?: string, token?: string
|
|
269
|
+
sms: <T_3 extends boolean>(loginId: string, phone: string, URI?: string, token?: string, updateOptions?: {
|
|
270
|
+
addToLoginIDs?: T_3;
|
|
271
|
+
onMergeUseExisting?: T_3 extends true ? boolean : never;
|
|
272
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
254
273
|
maskedPhone: string;
|
|
255
274
|
}>>;
|
|
256
|
-
whatsapp: (loginId: string, phone: string, URI?: string, token?: string
|
|
275
|
+
whatsapp: <T_3 extends boolean>(loginId: string, phone: string, URI?: string, token?: string, updateOptions?: {
|
|
276
|
+
addToLoginIDs?: T_3;
|
|
277
|
+
onMergeUseExisting?: T_3 extends true ? boolean : never;
|
|
278
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
257
279
|
maskedPhone: string;
|
|
258
280
|
}>>;
|
|
259
281
|
};
|
|
@@ -273,7 +295,10 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
273
295
|
timeoutMs: number;
|
|
274
296
|
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
275
297
|
update: {
|
|
276
|
-
email: (loginId: string, email: string, URI?: string, token?: string
|
|
298
|
+
email: <T_4 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: {
|
|
299
|
+
addToLoginIDs?: T_4;
|
|
300
|
+
onMergeUseExisting?: T_4 extends true ? boolean : never;
|
|
301
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
277
302
|
};
|
|
278
303
|
};
|
|
279
304
|
oauth: {
|
|
@@ -404,7 +429,11 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
404
429
|
name?: string;
|
|
405
430
|
loginId?: string;
|
|
406
431
|
};
|
|
407
|
-
|
|
432
|
+
redirectAuth?: {
|
|
433
|
+
callbackUrl: string;
|
|
434
|
+
codeChallenge: string;
|
|
435
|
+
};
|
|
436
|
+
}, "tenant" | "redirectUrl" | "redirectAuth"> & {
|
|
408
437
|
lastAuth?: Omit<{
|
|
409
438
|
authMethod?: "webauthn" | "otp" | "oauth" | "saml" | "totp" | "magiclink" | "enchantedlink";
|
|
410
439
|
oauthProvider?: string;
|
|
@@ -516,14 +545,23 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
516
545
|
}>>;
|
|
517
546
|
};
|
|
518
547
|
update: {
|
|
519
|
-
email: (loginId: string, email: string, token?: string
|
|
548
|
+
email: <T extends boolean>(loginId: string, email: string, token?: string, updateOptions?: {
|
|
549
|
+
addToLoginIDs?: T;
|
|
550
|
+
onMergeUseExisting?: T extends true ? boolean : never;
|
|
551
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
520
552
|
maskedEmail: string;
|
|
521
553
|
}>>;
|
|
522
554
|
phone: {
|
|
523
|
-
sms: (loginId: string, phone: string, token?: string
|
|
555
|
+
sms: <T_1 extends boolean>(loginId: string, phone: string, token?: string, updateOptions?: {
|
|
556
|
+
addToLoginIDs?: T_1;
|
|
557
|
+
onMergeUseExisting?: T_1 extends true ? boolean : never;
|
|
558
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
524
559
|
maskedPhone: string;
|
|
525
560
|
}>>;
|
|
526
|
-
whatsapp: (loginId: string, phone: string, token?: string
|
|
561
|
+
whatsapp: <T_1 extends boolean>(loginId: string, phone: string, token?: string, updateOptions?: {
|
|
562
|
+
addToLoginIDs?: T_1;
|
|
563
|
+
onMergeUseExisting?: T_1 extends true ? boolean : never;
|
|
564
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
527
565
|
maskedPhone: string;
|
|
528
566
|
}>>;
|
|
529
567
|
};
|
|
@@ -577,14 +615,23 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
577
615
|
}>>;
|
|
578
616
|
};
|
|
579
617
|
update: {
|
|
580
|
-
email: (loginId: string, email: string, URI?: string, token?: string
|
|
618
|
+
email: <T_2 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: {
|
|
619
|
+
addToLoginIDs?: T_2;
|
|
620
|
+
onMergeUseExisting?: T_2 extends true ? boolean : never;
|
|
621
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
581
622
|
maskedEmail: string;
|
|
582
623
|
}>>;
|
|
583
624
|
phone: {
|
|
584
|
-
sms: (loginId: string, phone: string, URI?: string, token?: string
|
|
625
|
+
sms: <T_3 extends boolean>(loginId: string, phone: string, URI?: string, token?: string, updateOptions?: {
|
|
626
|
+
addToLoginIDs?: T_3;
|
|
627
|
+
onMergeUseExisting?: T_3 extends true ? boolean : never;
|
|
628
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
585
629
|
maskedPhone: string;
|
|
586
630
|
}>>;
|
|
587
|
-
whatsapp: (loginId: string, phone: string, URI?: string, token?: string
|
|
631
|
+
whatsapp: <T_3 extends boolean>(loginId: string, phone: string, URI?: string, token?: string, updateOptions?: {
|
|
632
|
+
addToLoginIDs?: T_3;
|
|
633
|
+
onMergeUseExisting?: T_3 extends true ? boolean : never;
|
|
634
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
588
635
|
maskedPhone: string;
|
|
589
636
|
}>>;
|
|
590
637
|
};
|
|
@@ -604,7 +651,10 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
604
651
|
timeoutMs: number;
|
|
605
652
|
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
606
653
|
update: {
|
|
607
|
-
email: (loginId: string, email: string, URI?: string, token?: string
|
|
654
|
+
email: <T_4 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: {
|
|
655
|
+
addToLoginIDs?: T_4;
|
|
656
|
+
onMergeUseExisting?: T_4 extends true ? boolean : never;
|
|
657
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
608
658
|
};
|
|
609
659
|
};
|
|
610
660
|
oauth: {
|
|
@@ -744,7 +794,11 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
744
794
|
name?: string;
|
|
745
795
|
loginId?: string;
|
|
746
796
|
};
|
|
747
|
-
|
|
797
|
+
redirectAuth?: {
|
|
798
|
+
callbackUrl: string;
|
|
799
|
+
codeChallenge: string;
|
|
800
|
+
};
|
|
801
|
+
}, "tenant" | "redirectUrl" | "redirectAuth"> & {
|
|
748
802
|
lastAuth?: Omit<{
|
|
749
803
|
authMethod?: "webauthn" | "otp" | "oauth" | "saml" | "totp" | "magiclink" | "enchantedlink";
|
|
750
804
|
oauthProvider?: string;
|
|
@@ -856,14 +910,23 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
856
910
|
}>>;
|
|
857
911
|
};
|
|
858
912
|
update: {
|
|
859
|
-
email: (loginId: string, email: string, token?: string
|
|
913
|
+
email: <T extends boolean>(loginId: string, email: string, token?: string, updateOptions?: {
|
|
914
|
+
addToLoginIDs?: T;
|
|
915
|
+
onMergeUseExisting?: T extends true ? boolean : never;
|
|
916
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
860
917
|
maskedEmail: string;
|
|
861
918
|
}>>;
|
|
862
919
|
phone: {
|
|
863
|
-
sms: (loginId: string, phone: string, token?: string
|
|
920
|
+
sms: <T_1 extends boolean>(loginId: string, phone: string, token?: string, updateOptions?: {
|
|
921
|
+
addToLoginIDs?: T_1;
|
|
922
|
+
onMergeUseExisting?: T_1 extends true ? boolean : never;
|
|
923
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
864
924
|
maskedPhone: string;
|
|
865
925
|
}>>;
|
|
866
|
-
whatsapp: (loginId: string, phone: string, token?: string
|
|
926
|
+
whatsapp: <T_1 extends boolean>(loginId: string, phone: string, token?: string, updateOptions?: {
|
|
927
|
+
addToLoginIDs?: T_1;
|
|
928
|
+
onMergeUseExisting?: T_1 extends true ? boolean : never;
|
|
929
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
867
930
|
maskedPhone: string;
|
|
868
931
|
}>>;
|
|
869
932
|
};
|
|
@@ -917,14 +980,23 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
917
980
|
}>>;
|
|
918
981
|
};
|
|
919
982
|
update: {
|
|
920
|
-
email: (loginId: string, email: string, URI?: string, token?: string
|
|
983
|
+
email: <T_2 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: {
|
|
984
|
+
addToLoginIDs?: T_2;
|
|
985
|
+
onMergeUseExisting?: T_2 extends true ? boolean : never;
|
|
986
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
921
987
|
maskedEmail: string;
|
|
922
988
|
}>>;
|
|
923
989
|
phone: {
|
|
924
|
-
sms: (loginId: string, phone: string, URI?: string, token?: string
|
|
990
|
+
sms: <T_3 extends boolean>(loginId: string, phone: string, URI?: string, token?: string, updateOptions?: {
|
|
991
|
+
addToLoginIDs?: T_3;
|
|
992
|
+
onMergeUseExisting?: T_3 extends true ? boolean : never;
|
|
993
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
925
994
|
maskedPhone: string;
|
|
926
995
|
}>>;
|
|
927
|
-
whatsapp: (loginId: string, phone: string, URI?: string, token?: string
|
|
996
|
+
whatsapp: <T_3 extends boolean>(loginId: string, phone: string, URI?: string, token?: string, updateOptions?: {
|
|
997
|
+
addToLoginIDs?: T_3;
|
|
998
|
+
onMergeUseExisting?: T_3 extends true ? boolean : never;
|
|
999
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
928
1000
|
maskedPhone: string;
|
|
929
1001
|
}>>;
|
|
930
1002
|
};
|
|
@@ -944,7 +1016,10 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
944
1016
|
timeoutMs: number;
|
|
945
1017
|
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
946
1018
|
update: {
|
|
947
|
-
email: (loginId: string, email: string, URI?: string, token?: string
|
|
1019
|
+
email: <T_4 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: {
|
|
1020
|
+
addToLoginIDs?: T_4;
|
|
1021
|
+
onMergeUseExisting?: T_4 extends true ? boolean : never;
|
|
1022
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
948
1023
|
};
|
|
949
1024
|
};
|
|
950
1025
|
oauth: {
|
|
@@ -1075,7 +1150,11 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
1075
1150
|
name?: string;
|
|
1076
1151
|
loginId?: string;
|
|
1077
1152
|
};
|
|
1078
|
-
|
|
1153
|
+
redirectAuth?: {
|
|
1154
|
+
callbackUrl: string;
|
|
1155
|
+
codeChallenge: string;
|
|
1156
|
+
};
|
|
1157
|
+
}, "tenant" | "redirectUrl" | "redirectAuth"> & {
|
|
1079
1158
|
lastAuth?: Omit<{
|
|
1080
1159
|
authMethod?: "webauthn" | "otp" | "oauth" | "saml" | "totp" | "magiclink" | "enchantedlink";
|
|
1081
1160
|
oauthProvider?: string;
|
|
@@ -1187,14 +1266,23 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
1187
1266
|
}>>;
|
|
1188
1267
|
};
|
|
1189
1268
|
update: {
|
|
1190
|
-
email: (loginId: string, email: string, token?: string
|
|
1269
|
+
email: <T extends boolean>(loginId: string, email: string, token?: string, updateOptions?: {
|
|
1270
|
+
addToLoginIDs?: T;
|
|
1271
|
+
onMergeUseExisting?: T extends true ? boolean : never;
|
|
1272
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
1191
1273
|
maskedEmail: string;
|
|
1192
1274
|
}>>;
|
|
1193
1275
|
phone: {
|
|
1194
|
-
sms: (loginId: string, phone: string, token?: string
|
|
1276
|
+
sms: <T_1 extends boolean>(loginId: string, phone: string, token?: string, updateOptions?: {
|
|
1277
|
+
addToLoginIDs?: T_1;
|
|
1278
|
+
onMergeUseExisting?: T_1 extends true ? boolean : never;
|
|
1279
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
1195
1280
|
maskedPhone: string;
|
|
1196
1281
|
}>>;
|
|
1197
|
-
whatsapp: (loginId: string, phone: string, token?: string
|
|
1282
|
+
whatsapp: <T_1 extends boolean>(loginId: string, phone: string, token?: string, updateOptions?: {
|
|
1283
|
+
addToLoginIDs?: T_1;
|
|
1284
|
+
onMergeUseExisting?: T_1 extends true ? boolean : never;
|
|
1285
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
1198
1286
|
maskedPhone: string;
|
|
1199
1287
|
}>>;
|
|
1200
1288
|
};
|
|
@@ -1248,14 +1336,23 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
1248
1336
|
}>>;
|
|
1249
1337
|
};
|
|
1250
1338
|
update: {
|
|
1251
|
-
email: (loginId: string, email: string, URI?: string, token?: string
|
|
1339
|
+
email: <T_2 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: {
|
|
1340
|
+
addToLoginIDs?: T_2;
|
|
1341
|
+
onMergeUseExisting?: T_2 extends true ? boolean : never;
|
|
1342
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
1252
1343
|
maskedEmail: string;
|
|
1253
1344
|
}>>;
|
|
1254
1345
|
phone: {
|
|
1255
|
-
sms: (loginId: string, phone: string, URI?: string, token?: string
|
|
1346
|
+
sms: <T_3 extends boolean>(loginId: string, phone: string, URI?: string, token?: string, updateOptions?: {
|
|
1347
|
+
addToLoginIDs?: T_3;
|
|
1348
|
+
onMergeUseExisting?: T_3 extends true ? boolean : never;
|
|
1349
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
1256
1350
|
maskedPhone: string;
|
|
1257
1351
|
}>>;
|
|
1258
|
-
whatsapp: (loginId: string, phone: string, URI?: string, token?: string
|
|
1352
|
+
whatsapp: <T_3 extends boolean>(loginId: string, phone: string, URI?: string, token?: string, updateOptions?: {
|
|
1353
|
+
addToLoginIDs?: T_3;
|
|
1354
|
+
onMergeUseExisting?: T_3 extends true ? boolean : never;
|
|
1355
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<{
|
|
1259
1356
|
maskedPhone: string;
|
|
1260
1357
|
}>>;
|
|
1261
1358
|
};
|
|
@@ -1275,7 +1372,10 @@ declare const decoratedCreateSdk: <A extends boolean>({ persistTokens: isPersist
|
|
|
1275
1372
|
timeoutMs: number;
|
|
1276
1373
|
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
1277
1374
|
update: {
|
|
1278
|
-
email: (loginId: string, email: string, URI?: string, token?: string
|
|
1375
|
+
email: <T_4 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: {
|
|
1376
|
+
addToLoginIDs?: T_4;
|
|
1377
|
+
onMergeUseExisting?: T_4 extends true ? boolean : never;
|
|
1378
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
1279
1379
|
};
|
|
1280
1380
|
};
|
|
1281
1381
|
oauth: {
|