@descope/core-js-sdk 0.0.41-alpha.37 → 0.0.41-alpha.38
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 +31 -23
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("jwt-decode"),t=require("lodash.get");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e),a=n(t),i={exchange:"/v1/auth/accesskey/exchange"},o={verify:"/v1/auth/otp/verify",signIn:"/v1/auth/otp/signin",signUp:"/v1/auth/otp/signup",update:{email:"/v1/auth/otp/update/email",phone:"/v1/auth/otp/update/phone"},signUpOrIn:"/v1/auth/otp/signup-in"},r={verify:"/v1/auth/magiclink/verify",signIn:"/v1/auth/magiclink/signin",signUp:"/v1/auth/magiclink/signup",update:{email:"/v1/auth/magiclink/update/email",phone:"/v1/auth/magiclink/update/phone"},signUpOrIn:"/v1/auth/magiclink/signup-in"},u={verify:"/v1/auth/enchantedlink/verify",signIn:"/v1/auth/enchantedlink/signin",signUp:"/v1/auth/enchantedlink/signup",session:"/v1/auth/enchantedlink/pending-session",update:{email:"/v1/auth/enchantedlink/update/email"},signUpOrIn:"/v1/auth/enchantedlink/signup-in"},p={start:"/v1/auth/oauth/authorize",exchange:"/v1/auth/oauth/exchange"},d={start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},c={verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/user/totp/update"},l={signUp:{start:"/v1/auth/webauthn/signup/start",finish:"/v1/auth/webauthn/signup/finish"},signIn:{start:"/v1/auth/webauthn/signin/start",finish:"/v1/auth/webauthn/signin/finish"},signUpOrIn:{start:"/v1/auth/webauthn/signup-in/start"},update:{start:"v1/auth/webauthn/update/start",finish:"/v1/auth/webauthn/update/finish"}},h="/v1/auth/refresh",g="/v1/auth/logout",f="/v1/auth/logoutall",v="/v1/auth/me",m={start:"/v1/flow/start",next:"/v1/flow/next"};const k=()=>{const e={};return{headers(t){const n="function"==typeof t.entries?Object.fromEntries(t.entries()):t;return e.Headers=JSON.stringify(n),this},body(t){return e.Body=t,this},url(t){return e.Url=t.toString(),this},method(t){return e.Method=t,this},title(t){return e.Title=t,this},status(t){return e.Status=t,this},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}},I=(e,t)=>{const n=t||fetch;if(!n)throw new Error("fetch is not defined");return e?async(...t)=>{e.log((e=>k().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const s=await n(...t);return e[s.ok?"log":"error"](await(async e=>{const t=await(e.clone?e.clone().text():e.text());return e.text=()=>Promise.resolve(t),e.json=()=>Promise.resolve(JSON.parse(t)),k().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})(s)),s}:n};var b;!function(e){e.get="GET",e.delete="DELETE",e.post="POST",e.put="PUT"}(b||(b={}));const y=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,s])=>(e[n]=s,e)),e),e}),{})),O=e=>void 0===e?void 0:JSON.stringify(e),x=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},w=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:a,cookiePolicy:i})=>{const o=I(s),r=async s=>{const r=(null==a?void 0:a.beforeRequest)?a.beforeRequest(s):s,{path:u,body:p,headers:d,queryParams:c,method:l,token:h}=r,g=await o((({path:e,baseUrl:t,queryParams:n})=>{const s=new URL(e,t);return n&&(s.search=new URLSearchParams(n).toString()),s})({path:u,baseUrl:e,queryParams:c}),{headers:y(x(t,h),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"0.0.41-alpha.37"},(null==n?void 0:n.baseHeaders)||{},d),method:l,body:O(p),credentials:i||"include"});return(null==a?void 0:a.afterRequest)&&a.afterRequest(s,null==g?void 0:g.clone()),g};return{get:(e,{headers:t,queryParams:n,token:s}={})=>r({path:e,headers:t,queryParams:n,body:void 0,method:b.get,token:s}),post:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:b.post,token:a}),put:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:b.put,token:a}),delete:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:b.delete,token:a}),hooks:a}};function j(e,t,n){var s;let a=U(e);t&&(a=null===(s=a.tenants)||void 0===s?void 0:s[t]);const i=a[n];return Array.isArray(i)?i:[]}function U(e){if("string"!=typeof e||!e)throw new Error("Invalid token provided");return s.default(e)}function P(e){const{exp:t}=U(e);return(new Date).getTime()/1e3>t}function R(e,t){return j(e,t,"permissions")}function q(e,t){return j(e,t,"roles")}const $=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function E(e,t){const n=await e,s={code:n.status,ok:n.ok,response:n},a=await n.clone().json();return n.ok?s.data=t?t(a):a:s.error=a,s}const M=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),S=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),T=e=>t=>e.test(t),A=T(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),L=T(/^\+[1-9]{1}[0-9]{3,14}$/),z=M(A,'"{val}" is not a valid email'),J=M(L,'"{val}" is not a valid phone number'),H=M((C=1,e=>e.length>=C),"Minimum length is 1");var C;const D=M((e=>"string"==typeof e),"Input is not a string"),N=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>S(...e).validate(n[t]))),t(...n)),Z=e=>[D(`"${e}" must be a string`),H(`"${e}" must not be empty`)],_=e=>[D(`"${e}" must be a string`),z()],B=e=>[D(`"${e}" must be a string`),J()],K=N(Z("accessKey")),F=e=>({exchange:K((t=>E(e.post(i.exchange,{},{token:t}))))});var G,W,Q,V,X;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(G||(G={})),function(e){e.email="email",e.sms="sms",e.whatsapp="whatsapp"}(W||(W={})),function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(Q||(Q={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify"}(V||(V={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify",e.updatePhone="updatePhone"}(X||(X={}));const Y=Z("identifier"),ee=N(Y,Z("code")),te=N(Y),ne=N(Y,B("phone")),se=N(Y,_("email")),ae=e=>({verify:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ee(((t,s)=>E(e.post($(o.verify,n),{code:s,externalId:t}))))})),{}),signIn:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:te(((t,s,a)=>E(e.post($(o.signIn,n),{externalId:t,loginOptions:s},{token:a}))))})),{}),signUp:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:te(((t,s)=>E(e.post($(o.signUp,n),{externalId:t,user:s}))))})),{}),signUpOrIn:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:te((t=>E(e.post($(o.signUpOrIn,n),{externalId:t}))))})),{}),update:{email:se(((t,n,s)=>E(e.post(o.update.email,{externalId:t,email:n},{token:s})))),phone:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ne(((t,s,a)=>E(e.post($(o.update.phone,n),{externalId:t,phone:s},{token:a}))))})),{})}}),ie=Z("identifier"),oe=Z("uri"),re=N(Z("token")),ue=N(ie,oe),pe=N(ie,B("phone"),oe),de=N(ie,_("email"),oe),ce=e=>({verify:re((t=>E(e.post(r.verify,{token:t})))),signIn:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ue(((t,s,a,i)=>E(e.post($(r.signIn,n),{externalId:t,URI:s,loginOptions:a},{token:i}))))})),{}),signUp:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ue(((t,s,a)=>E(e.post($(r.signUp,n),{externalId:t,URI:s,user:a}))))})),{}),signUpOrIn:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ue(((t,s)=>E(e.post($(r.signUpOrIn,n),{externalId:t,URI:s}))))})),{}),update:{email:de(((t,n,s,a)=>E(e.post(r.update.email,{externalId:t,email:n,URI:s},{token:a})))),phone:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:pe(((t,s,a,i)=>E(e.post($(r.update.phone,n),{externalId:t,phone:s,URI:a},{token:i}))))})),{})}}),le=Z("identifier"),he=Z("uri"),ge=N(Z("token")),fe=N(le,he),ve=N(Z("pendingRef")),me=N(le,_("email"),he),ke=e=>({verify:ge((t=>E(e.post(u.verify,{token:t})))),signIn:fe(((t,n,s,a)=>E(e.post($(u.signIn,W.email),{externalId:t,URI:n,loginOptions:s},{token:a})))),signUpOrIn:fe(((t,n)=>E(e.post($(u.signUpOrIn,W.email),{externalId:t,URI:n})))),signUp:fe(((t,n,s)=>E(e.post($(u.signUp,W.email),{externalId:t,URI:n,user:s})))),waitForSession:ve(((t,n)=>new Promise((s=>{const{pollingIntervalMs:a,timeoutMs:i}=(({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||1e3,1e3),timeoutMs:Math.min(t||6e5,6e5)}))(n);let o;const r=setInterval((async()=>{const n=await e.post(u.session,{pendingRef:t});n.ok&&(clearInterval(r),o&&clearTimeout(o),s(E(Promise.resolve(n))))}),a);o=setTimeout((()=>{s({error:{message:`Session polling timeout exceeded: ${i}ms`,errorCode:"0"},ok:!1}),clearInterval(r)}),i)})))),update:{email:me(((t,n,s,a)=>E(e.post(u.update.email,{externalId:t,email:n,URI:s},{token:a}))))}});var Ie;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple"}(Ie||(Ie={}));const be=N(Z("code")),ye=e=>({start:Object.keys(Ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:async(t,{redirect:s=!1}={},a,i)=>{const o=await e.post(p.start,a||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i});if(!s||!o.ok)return E(Promise.resolve(o));const{url:r}=await o.json();window.location.href=r}})),{}),exchange:be((t=>E(e.post(p.exchange,{code:t}))))}),Oe=N(Z("flowId")),xe=N(Z("executionId"),Z("stepId"),Z("interactionId")),we=e=>({start:Oe(((t,n,s,a)=>E(e.post(m.start,{flowId:t,options:n,interactionId:s,input:a})))),next:xe(((t,n,s,a)=>E(e.post(m.next,{executionId:t,stepId:n,interactionId:s,input:a}))))}),je=N(Z("tenant")),Ue=N(Z("code")),Pe=e=>({start:je((async(t,n,{redirect:s=!1}={},a,i)=>{const o=await e.post(d.start,a||{},{queryParams:{tenant:t,redirectURL:n},token:i});if(!s||!o.ok)return E(Promise.resolve(o));const{url:r}=await o.json();window.location.href=r})),exchange:Ue((t=>E(e.post(d.exchange,{code:t}))))}),Re=Z("identifier"),qe=N(Re,Z("code")),$e=N(Re),Ee=N(Re),Me=e=>({signUp:$e(((t,n)=>E(e.post(c.signUp,{externalId:t,user:n})))),verify:qe(((t,n,s,a)=>E(e.post(c.verify,{externalId:t,code:n,loginOptions:s},{token:a})))),update:Ee(((t,n)=>E(e.post(c.update,{externalId:t},{token:n}))))}),Se=Z("identifier"),Te=Z("origin"),Ae=N(Se,Te,Z("name")),Le=N(Se,Te),ze=N(Se,Te,Z("token")),Je=N(Z("transactionId"),Z("response")),He=e=>({signUp:{start:Ae(((t,n,s)=>E(e.post(l.signUp.start,{user:{externalId:t,name:s},origin:n})))),finish:Je(((t,n)=>E(e.post(l.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Le(((t,n,s,a)=>E(e.post(l.signIn.start,{externalId:t,origin:n,loginOptions:s},{token:a})))),finish:Je(((t,n)=>E(e.post(l.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:Le(((t,n)=>E(e.post(l.signUpOrIn.start,{externalId:t,origin:n}))))},update:{start:ze(((t,n,s)=>E(e.post(l.update.start,{externalId:t,origin:n},{token:s})))),finish:Je(((t,n)=>E(e.post(l.update.finish,{transactionId:t,response:n}))))}}),Ce=N(Z("token"));var De,Ne;let Ze=N([(De="projectId",Ne=Z("projectId"),M(((e,t)=>n=>S(...t).validate(a.default(n,e)))(De,Ne))())])((e=>t=>{var n,s;const a=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]),i=[].concat((null===(s=t.hooks)||void 0===s?void 0:s.afterRequest)||[]);return e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>null==a?void 0:a.reduce(((e,t)=>t(e)),e),afterRequest:(e,t)=>{null==i||i.forEach((n=>n(e,null==t?void 0:t.clone())))}}}))})((({projectId:e,logger:t,baseUrl:n,hooks:s,cookiePolicy:a})=>{return i=w({baseUrl:n||"https://api.descope.com",projectId:e,logger:t,hooks:s,cookiePolicy:a}),{accessKey:F(i),otp:ae(i),magicLink:ce(i),enchantedLink:ke(i),oauth:ye(i),saml:Pe(i),totp:Me(i),webauthn:He(i),flow:we(i),refresh:e=>E(i.post(h,{},{token:e})),logout:e=>E(i.post(g,{},{token:e})),logoutAll:e=>E(i.post(f,{},{token:e})),me:e=>E(i.get(v,{token:e})),isJwtExpired:Ce(P),getJwtPermissions:Ce(R),getJwtRoles:Ce(q),httpClient:i};var i})));var _e=Object.assign(Ze,{DeliveryMethods:W});exports.addHooksToConfig=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,s)=>{var a;return n[s]=[].concat((null===(a=e.hooks)||void 0===a?void 0:a[s])||[]).concat((null==t?void 0:t[s])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},exports.default=_e,exports.transformResponse=E,exports.wrapWith=(e,t,n)=>(t.forEach((t=>{const s=t.split(".");let a=s.shift(),i=e;for(;s.length>0;){if(i=i[a],!a||!i)throw Error(`Invalid path "${t}", "${a}" is missing or has no value`);a=s.shift()}if("function"!=typeof i[a])throw Error(`"${t}" is not a function`);const o=i[a];i[a]=n(o)})),e);
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("jwt-decode"),t=require("lodash.get");function n(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=n(e),a=n(t),i={exchange:"/v1/auth/accesskey/exchange"},o={verify:"/v1/auth/otp/verify",signIn:"/v1/auth/otp/signin",signUp:"/v1/auth/otp/signup",update:{email:"/v1/auth/otp/update/email",phone:"/v1/auth/otp/update/phone"},signUpOrIn:"/v1/auth/otp/signup-in"},r={verify:"/v1/auth/magiclink/verify",signIn:"/v1/auth/magiclink/signin",signUp:"/v1/auth/magiclink/signup",update:{email:"/v1/auth/magiclink/update/email",phone:"/v1/auth/magiclink/update/phone"},signUpOrIn:"/v1/auth/magiclink/signup-in"},u={verify:"/v1/auth/enchantedlink/verify",signIn:"/v1/auth/enchantedlink/signin",signUp:"/v1/auth/enchantedlink/signup",session:"/v1/auth/enchantedlink/pending-session",update:{email:"/v1/auth/enchantedlink/update/email"},signUpOrIn:"/v1/auth/enchantedlink/signup-in"},p={start:"/v1/auth/oauth/authorize",exchange:"/v1/auth/oauth/exchange"},d={start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},c={verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/user/totp/update"},l={signUp:{start:"/v1/auth/webauthn/signup/start",finish:"/v1/auth/webauthn/signup/finish"},signIn:{start:"/v1/auth/webauthn/signin/start",finish:"/v1/auth/webauthn/signin/finish"},signUpOrIn:{start:"/v1/auth/webauthn/signup-in/start"},update:{start:"v1/auth/webauthn/update/start",finish:"/v1/auth/webauthn/update/finish"}},h="/v1/auth/refresh",g="/v1/auth/logout",v="/v1/auth/logoutall",f="/v1/auth/me",m={start:"/v1/flow/start",next:"/v1/flow/next"};const k=()=>{const e={};return{headers(t){const n="function"==typeof t.entries?Object.fromEntries(t.entries()):t;return e.Headers=JSON.stringify(n),this},body(t){return e.Body=t,this},url(t){return e.Url=t.toString(),this},method(t){return e.Method=t,this},title(t){return e.Title=t,this},status(t){return e.Status=t,this},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}},I=(e,t)=>{const n=t||fetch;if(!n)throw new Error("fetch is not defined");return e?async(...t)=>{e.log((e=>k().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const s=await n(...t);return e[s.ok?"log":"error"](await(async e=>{const t=await(e.clone?e.clone().text():e.text());return e.text=()=>Promise.resolve(t),e.json=()=>Promise.resolve(JSON.parse(t)),k().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})(s)),s}:n};var b;!function(e){e.get="GET",e.delete="DELETE",e.post="POST",e.put="PUT"}(b||(b={}));const y=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,s])=>(e[n]=s,e)),e),e}),{})),O=e=>void 0===e?void 0:JSON.stringify(e),x=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},w=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:a,cookiePolicy:i})=>{const o=I(s),r=async s=>{const r=(null==a?void 0:a.beforeRequest)?a.beforeRequest(s):s,{path:u,body:p,headers:d,queryParams:c,method:l,token:h}=r,g=await o((({path:e,baseUrl:t,queryParams:n})=>{const s=new URL(e,t);return n&&(s.search=new URLSearchParams(n).toString()),s})({path:u,baseUrl:e,queryParams:c}),{headers:y(x(t,h),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"0.0.41-alpha.38"},(null==n?void 0:n.baseHeaders)||{},d),method:l,body:O(p),credentials:i||"include"});return(null==a?void 0:a.afterRequest)&&a.afterRequest(s,null==g?void 0:g.clone()),g};return{get:(e,{headers:t,queryParams:n,token:s}={})=>r({path:e,headers:t,queryParams:n,body:void 0,method:b.get,token:s}),post:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:b.post,token:a}),put:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:b.put,token:a}),delete:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:b.delete,token:a}),hooks:a}};function j(e,t,n){var s;let a=U(e);t&&(a=null===(s=a.tenants)||void 0===s?void 0:s[t]);const i=a[n];return Array.isArray(i)?i:[]}function U(e){if("string"!=typeof e||!e)throw new Error("Invalid token provided");return s.default(e)}function P(e){const{exp:t}=U(e);return(new Date).getTime()/1e3>t}function R(e,t){return j(e,t,"permissions")}function q(e,t){return j(e,t,"roles")}const $=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function E(e,t){const n=await e,s={code:n.status,ok:n.ok,response:n},a=await n.clone().json();return n.ok?s.data=t?t(a):a:s.error=a,s}const M=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),S=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),T=e=>t=>e.test(t),A=T(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),L=T(/^\+[1-9]{1}[0-9]{3,14}$/),z=M(A,'"{val}" is not a valid email'),J=M(L,'"{val}" is not a valid phone number'),H=M((C=1,e=>e.length>=C),"Minimum length is 1");var C;const D=M((e=>"string"==typeof e),"Input is not a string"),N=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>S(...e).validate(n[t]))),t(...n)),Z=e=>[D(`"${e}" must be a string`),H(`"${e}" must not be empty`)],_=e=>[D(`"${e}" must be a string`),z()],B=e=>[D(`"${e}" must be a string`),J()],K=N(Z("accessKey")),F=e=>({exchange:K((t=>E(e.post(i.exchange,{},{token:t}))))});var G,W,Q,V,X;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(G||(G={})),function(e){e.email="email",e.sms="sms",e.whatsapp="whatsapp"}(W||(W={})),function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(Q||(Q={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify"}(V||(V={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify",e.updatePhone="updatePhone"}(X||(X={}));const Y=Z("identifier"),ee=N(Y,Z("code")),te=N(Y),ne=N(Y,B("phone")),se=N(Y,_("email")),ae=e=>({verify:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ee(((t,s)=>E(e.post($(o.verify,n),{code:s,externalId:t}))))})),{}),signIn:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:te(((t,s,a)=>E(e.post($(o.signIn,n),{externalId:t,loginOptions:s},{token:a}))))})),{}),signUp:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:te(((t,s)=>E(e.post($(o.signUp,n),{externalId:t,user:s}))))})),{}),signUpOrIn:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:te((t=>E(e.post($(o.signUpOrIn,n),{externalId:t}))))})),{}),update:{email:se(((t,n,s)=>E(e.post(o.update.email,{externalId:t,email:n},{token:s})))),phone:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ne(((t,s,a)=>E(e.post($(o.update.phone,n),{externalId:t,phone:s},{token:a}))))})),{})}}),ie=Z("identifier"),oe=Z("uri"),re=N(Z("token")),ue=N(ie,oe),pe=N(ie,B("phone"),oe),de=N(ie,_("email"),oe),ce=e=>({verify:re((t=>E(e.post(r.verify,{token:t})))),signIn:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ue(((t,s,a,i)=>E(e.post($(r.signIn,n),{externalId:t,URI:s,loginOptions:a},{token:i}))))})),{}),signUp:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ue(((t,s,a)=>E(e.post($(r.signUp,n),{externalId:t,URI:s,user:a}))))})),{}),signUpOrIn:Object.keys(W).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ue(((t,s)=>E(e.post($(r.signUpOrIn,n),{externalId:t,URI:s}))))})),{}),update:{email:de(((t,n,s,a)=>E(e.post(r.update.email,{externalId:t,email:n,URI:s},{token:a})))),phone:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:pe(((t,s,a,i)=>E(e.post($(r.update.phone,n),{externalId:t,phone:s,URI:a},{token:i}))))})),{})}}),le=Z("identifier"),he=Z("uri"),ge=N(Z("token")),ve=N(le,he),fe=N(Z("pendingRef")),me=N(le,_("email"),he),ke=e=>({verify:ge((t=>E(e.post(u.verify,{token:t})))),signIn:ve(((t,n,s,a)=>E(e.post($(u.signIn,W.email),{externalId:t,URI:n,loginOptions:s},{token:a})))),signUpOrIn:ve(((t,n)=>E(e.post($(u.signUpOrIn,W.email),{externalId:t,URI:n})))),signUp:ve(((t,n,s)=>E(e.post($(u.signUp,W.email),{externalId:t,URI:n,user:s})))),waitForSession:fe(((t,n)=>new Promise((s=>{const{pollingIntervalMs:a,timeoutMs:i}=(({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||1e3,1e3),timeoutMs:Math.min(t||6e5,6e5)}))(n);let o;const r=setInterval((async()=>{const n=await e.post(u.session,{pendingRef:t});n.ok&&(clearInterval(r),o&&clearTimeout(o),s(E(Promise.resolve(n))))}),a);o=setTimeout((()=>{s({error:{message:`Session polling timeout exceeded: ${i}ms`,errorCode:"0"},ok:!1}),clearInterval(r)}),i)})))),update:{email:me(((t,n,s,a)=>E(e.post(u.update.email,{externalId:t,email:n,URI:s},{token:a}))))}});var Ie;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple"}(Ie||(Ie={}));const be=N(Z("code")),ye=e=>({start:Object.keys(Ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:async(t,{redirect:s=!1}={},a,i)=>{const o=await e.post(p.start,a||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i});if(!s||!o.ok)return E(Promise.resolve(o));const{url:r}=await o.json();window.location.href=r}})),{}),exchange:be((t=>E(e.post(p.exchange,{code:t}))))}),Oe=N(Z("flowId")),xe=N(Z("executionId"),Z("stepId"),Z("interactionId")),we=e=>({start:Oe(((t,n,s,a)=>E(e.post(m.start,{flowId:t,options:n,interactionId:s,input:a})))),next:xe(((t,n,s,a)=>E(e.post(m.next,{executionId:t,stepId:n,interactionId:s,input:a}))))}),je=N(Z("tenant")),Ue=N(Z("code")),Pe=e=>({start:je((async(t,n,{redirect:s=!1}={},a,i)=>{const o=await e.post(d.start,a||{},{queryParams:{tenant:t,redirectURL:n},token:i});if(!s||!o.ok)return E(Promise.resolve(o));const{url:r}=await o.json();window.location.href=r})),exchange:Ue((t=>E(e.post(d.exchange,{code:t}))))}),Re=Z("identifier"),qe=N(Re,Z("code")),$e=N(Re),Ee=N(Re),Me=e=>({signUp:$e(((t,n)=>E(e.post(c.signUp,{externalId:t,user:n})))),verify:qe(((t,n,s,a)=>E(e.post(c.verify,{externalId:t,code:n,loginOptions:s},{token:a})))),update:Ee(((t,n)=>E(e.post(c.update,{externalId:t},{token:n}))))}),Se=Z("identifier"),Te=Z("origin"),Ae=N(Se,Te,Z("name")),Le=N(Se,Te),ze=N(Se,Te,Z("token")),Je=N(Z("transactionId"),Z("response")),He=e=>({signUp:{start:Ae(((t,n,s)=>E(e.post(l.signUp.start,{user:{externalId:t,name:s},origin:n})))),finish:Je(((t,n)=>E(e.post(l.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Le(((t,n,s,a)=>E(e.post(l.signIn.start,{externalId:t,origin:n,loginOptions:s},{token:a})))),finish:Je(((t,n)=>E(e.post(l.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:Le(((t,n)=>E(e.post(l.signUpOrIn.start,{externalId:t,origin:n}))))},update:{start:ze(((t,n,s)=>E(e.post(l.update.start,{externalId:t,origin:n},{token:s})))),finish:Je(((t,n)=>E(e.post(l.update.finish,{transactionId:t,response:n}))))}}),Ce=N(Z("token"));var De,Ne;var Ze=N([(De="projectId",Ne=Z("projectId"),M(((e,t)=>n=>S(...t).validate(a.default(n,e)))(De,Ne))())])((e=>t=>{var n,s;const a=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]),i=[].concat((null===(s=t.hooks)||void 0===s?void 0:s.afterRequest)||[]);return e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>null==a?void 0:a.reduce(((e,t)=>t(e)),e),afterRequest:(e,t)=>{null==i||i.forEach((n=>n(e,null==t?void 0:t.clone())))}}}))})((({projectId:e,logger:t,baseUrl:n,hooks:s,cookiePolicy:a})=>{return i=w({baseUrl:n||"https://api.descope.com",projectId:e,logger:t,hooks:s,cookiePolicy:a}),{accessKey:F(i),otp:ae(i),magicLink:ce(i),enchantedLink:ke(i),oauth:ye(i),saml:Pe(i),totp:Me(i),webauthn:He(i),flow:we(i),refresh:e=>E(i.post(h,{},{token:e})),logout:e=>E(i.post(g,{},{token:e})),logoutAll:e=>E(i.post(v,{},{token:e})),me:e=>E(i.get(f,{token:e})),isJwtExpired:Ce(P),getJwtPermissions:Ce(R),getJwtRoles:Ce(q),httpClient:i};var i})));var _e=Object.assign(Ze,{DeliveryMethods:W});exports.addHooksToConfig=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,s)=>{var a;return n[s]=[].concat((null===(a=e.hooks)||void 0===a?void 0:a[s])||[]).concat((null==t?void 0:t[s])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e},exports.default=_e,exports.transformResponse=E,exports.wrapWith=(e,t,n)=>(t.forEach((t=>{const s=t.split(".");let a=s.shift(),i=e;for(;s.length>0;){if(i=i[a],!a||!i)throw Error(`Invalid path "${t}", "${a}" is missing or has no value`);a=s.shift()}if("function"!=typeof i[a])throw Error(`"${t}" is not a function`);const o=i[a];i[a]=n(o)})),e);
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/constants/apiPaths.ts","../../src/constants/index.ts","../../src/httpClient/helpers/createFetchLogger.ts","../../src/httpClient/types.ts","../../src/httpClient/urlBuilder.ts","../../src/httpClient/utils.ts","../../src/httpClient/index.ts","../../src/sdk/helpers/index.ts","../../src/sdk/validations/core.ts","../../src/sdk/validations/validators.ts","../../src/sdk/validations/index.ts","../../src/sdk/accesskey.ts","../../src/sdk/types.ts","../../src/sdk/otp.ts","../../src/sdk/magicLink/validations.ts","../../src/sdk/magicLink/index.ts","../../src/sdk/enchantedLink/validations.ts","../../src/sdk/enchantedLink/index.ts","../../src/sdk/oauth/types.ts","../../src/sdk/oauth/index.ts","../../src/sdk/flow.ts","../../src/sdk/saml.ts","../../src/sdk/totp.ts","../../src/sdk/webauthn.ts","../../src/sdk/index.ts","../../src/index.ts","../../src/utils/index.ts","../../src/utils/wrapWith/index.ts"],"sourcesContent":["/** API paths for the Descope service APIs */\nexport default {\n\taccessKey: {\n\t\texchange: '/v1/auth/accesskey/exchange'\n\t},\n\totp: {\n\t\tverify: '/v1/auth/otp/verify',\n\t\tsignIn: '/v1/auth/otp/signin',\n\t\tsignUp: '/v1/auth/otp/signup',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/otp/update/email',\n\t\t\tphone: '/v1/auth/otp/update/phone'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/otp/signup-in'\n\t},\n\tmagicLink: {\n\t\tverify: '/v1/auth/magiclink/verify',\n\t\tsignIn: '/v1/auth/magiclink/signin',\n\t\tsignUp: '/v1/auth/magiclink/signup',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/magiclink/update/email',\n\t\t\tphone: '/v1/auth/magiclink/update/phone'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/magiclink/signup-in'\n\t},\n\tenchantedLink: {\n\t\tverify: '/v1/auth/enchantedlink/verify',\n\t\tsignIn: '/v1/auth/enchantedlink/signin',\n\t\tsignUp: '/v1/auth/enchantedlink/signup',\n\t\tsession: '/v1/auth/enchantedlink/pending-session',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/enchantedlink/update/email'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/enchantedlink/signup-in'\n\t},\n\toauth: {\n\t\tstart: '/v1/auth/oauth/authorize',\n\t\texchange: '/v1/auth/oauth/exchange'\n\t},\n\tsaml: {\n\t\tstart: '/v1/auth/saml/authorize',\n\t\texchange: '/v1/auth/saml/exchange'\n\t},\n\ttotp: {\n\t\tverify: '/v1/auth/totp/verify',\n\t\tsignUp: '/v1/auth/totp/signup',\n\t\tupdate: '/v1/user/totp/update'\n\t},\n\twebauthn: {\n\t\tsignUp: {\n\t\t\tstart: '/v1/auth/webauthn/signup/start',\n\t\t\tfinish: '/v1/auth/webauthn/signup/finish'\n\t\t},\n\t\tsignIn: {\n\t\t\tstart: '/v1/auth/webauthn/signin/start',\n\t\t\tfinish: '/v1/auth/webauthn/signin/finish'\n\t\t},\n\t\tsignUpOrIn: {\n\t\t\tstart: '/v1/auth/webauthn/signup-in/start'\n\t\t},\n\t\tupdate: {\n\t\t\tstart: 'v1/auth/webauthn/update/start',\n\t\t\tfinish: '/v1/auth/webauthn/update/finish'\n\t\t}\n\t},\n\trefresh: '/v1/auth/refresh',\n\tlogout: '/v1/auth/logout',\n\tlogoutAll: '/v1/auth/logoutall',\n\tme: '/v1/auth/me',\n\tflow: {\n\t\tstart: '/v1/flow/start',\n\t\tnext: '/v1/flow/next'\n\t}\n};\n","/** Default Descope API URL */\nexport const DEFAULT_BASE_API_URL = 'https://api.descope.com';\n\n/** Default magic link polling interval for checking if the user clicked on the magic link */\nexport const ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS = 1000; // 1 second\n/** Default maximum time we are willing to wait for the magic link to be clicked */\nexport const ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS = 1000 * 60 * 10; // 10 minutes\n\n/** API paths to the Descope service */\nexport { default as apiPaths } from './apiPaths';\n","import { Logger } from '../../sdk/types';\n\n/** Build a log message around HTTP calls */\nconst httpLogBuilder = () => {\n\tconst msg: {\n\t\tTitle?: string;\n\t\tUrl?: string;\n\t\tMethod?: string;\n\t\tHeaders?: string;\n\t\tBody?: string;\n\t\tStatus?: string;\n\t} = {};\n\n\treturn {\n\t\theaders(headers: HeadersInit) {\n\t\t\tconst headersObj =\n\t\t\t\ttypeof headers.entries === 'function' ? Object.fromEntries(headers.entries()) : headers;\n\t\t\tmsg.Headers = JSON.stringify(headersObj);\n\n\t\t\treturn this;\n\t\t},\n\n\t\tbody(body: string) {\n\t\t\tmsg.Body = body;\n\t\t\treturn this;\n\t\t},\n\n\t\turl(url: URL | string) {\n\t\t\tmsg.Url = url.toString();\n\t\t\treturn this;\n\t\t},\n\n\t\tmethod(method: string) {\n\t\t\tmsg.Method = method;\n\t\t\treturn this;\n\t\t},\n\n\t\ttitle(title: string) {\n\t\t\tmsg.Title = title;\n\t\t\treturn this;\n\t\t},\n\n\t\tstatus(status: string) {\n\t\t\tmsg.Status = status;\n\t\t\treturn this;\n\t\t},\n\n\t\tbuild() {\n\t\t\treturn Object.keys(msg)\n\t\t\t\t.flatMap((key) => (msg[key] ? [`${key !== 'Title' ? `${key}: ` : ''}${msg[key]}`] : []))\n\t\t\t\t.join('\\n');\n\t\t}\n\t};\n};\n\ntype Fetch = typeof fetch;\n\n/** Log the request object */\nconst buildRequestLog = (args: Parameters<Fetch>) =>\n\thttpLogBuilder()\n\t\t.title('Request')\n\t\t.url(args[0])\n\t\t.method(args[1].method)\n\t\t.headers(args[1].headers)\n\t\t.body(args[1].body)\n\t\t.build();\n\n/** Log the response object */\nconst buildResponseLog = async (resp: Response) => {\n\tconst respBody = await (resp.clone ? resp.clone().text() : resp.text());\n\t// eslint-disable-next-line no-param-reassign\n\tresp.text = () => Promise.resolve(respBody);\n\t// eslint-disable-next-line no-param-reassign\n\tresp.json = () => Promise.resolve(JSON.parse(respBody));\n\n\treturn httpLogBuilder()\n\t\t.title('Response')\n\t\t.url(resp.url.toString())\n\t\t.status(`${resp.status} ${resp.statusText}`)\n\t\t.headers(resp.headers)\n\t\t.body(respBody)\n\t\t.build();\n};\n\n/**\n * Create a fetch with a logger wrapped around it if a logger is given\n * @param logger Logger to send the logs to\n * @param receivedFetch Fetch to be used or built-in fetch if not provided\n *\n */\nconst createFetchLogger = (logger: Logger, receivedFetch?: Fetch) => {\n\tconst fetchInternal = receivedFetch || fetch;\n\tif (!fetchInternal) throw new Error('fetch is not defined');\n\n\tif (!logger) return fetchInternal;\n\n\treturn async (...args: Parameters<Fetch>) => {\n\t\tlogger.log(buildRequestLog(args));\n\t\tconst resp = await fetchInternal(...args);\n\t\tlogger[resp.ok ? 'log' : 'error'](await buildResponseLog(resp));\n\n\t\treturn resp;\n\t};\n};\n\nexport default createFetchLogger;\n","import { Logger } from '../sdk/types';\n\n/** Request configuration including headers, query params and token */\ntype HttpClientReqConfig = {\n\theaders?: HeadersInit;\n\tqueryParams?: { [key: string]: string };\n\ttoken?: string;\n};\n\n/** HTTP methods we use in the client */\nexport enum HTTPMethods {\n\tget = 'GET',\n\tdelete = 'DELETE',\n\tpost = 'POST',\n\tput = 'PUT'\n}\n\n/** HTTP Client type that implements the HTTP method calls. Descopers can provide their own HTTP client although required only in rare cases. */\nexport type HttpClient = {\n\tget: (path: string, config?: HttpClientReqConfig) => Promise<Response>;\n\tpost: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\tput: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\tdelete: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\thooks?: Hooks;\n};\n\n/** Parameters for the HTTP client. Defaults should work for most cases. */\nexport type CreateHttpClientConfig = {\n\tbaseUrl: string;\n\tprojectId: string;\n\tbaseConfig?: { baseHeaders: HeadersInit };\n\tlogger?: Logger;\n\thooks?: Hooks;\n\tcookiePolicy?: RequestCredentials;\n};\n\n/** For before-request hook allows overriding parts of the request */\nexport type RequestConfig = {\n\tpath: string;\n\theaders?: HeadersInit;\n\tqueryParams?: { [key: string]: string };\n\tbody?: any;\n\tmethod: HTTPMethods;\n\ttoken?: string;\n};\n\nexport type BeforeRequest = (config: RequestConfig) => RequestConfig;\nexport type AfterRequest = (req: RequestConfig, res: Response) => void;\n\n/** Hooks before and after the request is made */\nexport type Hooks = {\n\tbeforeRequest?: BeforeRequest;\n\tafterRequest?: AfterRequest;\n};\n","/** Build URL with given parts */\nexport const urlBuilder = ({\n\tpath,\n\tbaseUrl,\n\tqueryParams\n}: {\n\tpath: string;\n\tbaseUrl: string;\n\tqueryParams: ConstructorParameters<typeof URLSearchParams>[0];\n}) => {\n\tconst url = new URL(path, baseUrl);\n\tif (queryParams) url.search = new URLSearchParams(queryParams).toString();\n\n\treturn url;\n};\n","/* eslint-disable no-nested-ternary */\n\nconst getSrcArr = (source: HeadersInit) => {\n\tif (Array.isArray(source)) return source;\n\tif (source instanceof Headers) return Array.from(source.entries());\n\tif (!source) return [];\n\treturn Object.entries(source);\n};\n\n/** Merge the given list of headers into a single Headers object */\nexport const mergeHeaders = (...sources: HeadersInit[]) =>\n\tnew Headers(\n\t\tsources.reduce((acc: Record<string, string>, source) => {\n\t\t\tconst srcArr = getSrcArr(source);\n\t\t\tsrcArr.reduce((_, [key, value]) => {\n\t\t\t\tacc[key] = value;\n\n\t\t\t\treturn acc;\n\t\t\t}, acc);\n\n\t\t\treturn acc;\n\t\t}, {})\n\t);\n\n/** Serialize the body to JSON */\nexport const serializeBody = (body: Record<string, any>) =>\n\tbody === undefined ? undefined : JSON.stringify(body);\n","import createFetchLogger from './helpers/createFetchLogger';\nimport { CreateHttpClientConfig, HttpClient, HTTPMethods, RequestConfig } from './types';\nimport { urlBuilder } from './urlBuilder';\nimport { mergeHeaders, serializeBody } from './utils';\n\n/**\n * Create a Bearer authorization header with concatenated projectId and token\n * @param projectId The project id to use in the header\n * @param token Token to be concatenated. Defaults to empty.\n */\nconst createAuthorizationHeader = (projectId: string, token = '') => {\n\tlet bearer = projectId;\n\tif (token) {\n\t\tbearer = bearer + ':' + token;\n\t}\n\treturn {\n\t\tAuthorization: `Bearer ${bearer}`\n\t};\n};\n\ndeclare const BUILD_VERSION: string;\n\n/**\n * Create descope custom headers\n */\nconst createDescopeHeaders = () => {\n\treturn {\n\t\t'x-descope-sdk-name': 'core-js',\n\t\t'x-descope-sdk-version': BUILD_VERSION\n\t};\n};\n\n/**\n * Create the HTTP client used to send HTTP requests to the Descope API\n *\n * @param CreateHttpClientConfig Configuration for the client\n */\nconst createHttpClient = ({\n\tbaseUrl,\n\tprojectId,\n\tbaseConfig,\n\tlogger,\n\thooks,\n\tcookiePolicy\n}: CreateHttpClientConfig): HttpClient => {\n\tconst fetchWithLogger = createFetchLogger(logger);\n\n\tconst sendRequest = async (config: RequestConfig) => {\n\t\tconst requestConfig = hooks?.beforeRequest ? hooks.beforeRequest(config) : config;\n\n\t\tconst { path, body, headers, queryParams, method, token } = requestConfig;\n\n\t\tconst res = await fetchWithLogger(urlBuilder({ path, baseUrl, queryParams }), {\n\t\t\theaders: mergeHeaders(\n\t\t\t\tcreateAuthorizationHeader(projectId, token),\n\t\t\t\tcreateDescopeHeaders(),\n\t\t\t\tbaseConfig?.baseHeaders || {},\n\t\t\t\theaders\n\t\t\t),\n\t\t\tmethod,\n\t\t\tbody: serializeBody(body),\n\t\t\tcredentials: cookiePolicy || 'include'\n\t\t});\n\n\t\tif (hooks?.afterRequest) {\n\t\t\thooks.afterRequest(config, res?.clone());\n\t\t}\n\n\t\treturn res;\n\t};\n\n\treturn {\n\t\tget: (path: string, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body: undefined, method: HTTPMethods.get, token }),\n\t\tpost: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.post, token }),\n\t\tput: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.put, token }),\n\t\tdelete: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.delete, token }),\n\t\thooks\n\t};\n};\n\nexport default createHttpClient;\nexport type { HttpClient };\n","import jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { ResponseData, SdkResponse } from '../types';\n\nfunction getJwtAuthorizationItems(token: string, tenant: string, claim: string): string[] {\n\tlet claims: any = parseJwt(token);\n\tif (tenant) {\n\t\tclaims = claims.tenants?.[tenant];\n\t}\n\tconst items = claims[claim];\n\treturn Array.isArray(items) ? items : [];\n}\n\nfunction parseJwt(token: string): JwtPayload {\n\tif (typeof token !== 'string' || !token) throw new Error('Invalid token provided');\n\treturn jwtDecode(token);\n}\n\n/**\n * Checks if the given JWT is still valid but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function isJwtExpired(token: string): boolean {\n\tconst { exp } = parseJwt(token);\n\tconst currentTime = new Date().getTime() / 1000;\n\treturn currentTime > exp;\n}\n\n/**\n * Returns the list of permissions granted in the given JWT but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function getJwtPermissions(token: string, tenant?: string): string[] {\n\treturn getJwtAuthorizationItems(token, tenant, 'permissions');\n}\n\n/**\n * Returns the list of roles specified in the given JWT but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function getJwtRoles(token: string, tenant?: string): string[] {\n\treturn getJwtAuthorizationItems(token, tenant, 'roles');\n}\n\n/** Joins path parts making sure there is only one path separator between parts */\nexport const pathJoin = (...args: string[]) => args.join('/').replace(/\\/{2,}/g, '/');\n\n/** Transform the Promise Response to our internal SdkResponse implementation\n * @param response The Response promise from fetch\n * @param transform Optionally transform the response JSON to another type\n */\nexport async function transformResponse<T extends ResponseData, S extends ResponseData = T>(\n\tresponse: Promise<Response>,\n\ttransform?: (data: T) => S\n): Promise<SdkResponse<S>> {\n\tconst resp = await response;\n\n\tconst ret: SdkResponse<S> = {\n\t\tcode: resp.status,\n\t\tok: resp.ok,\n\t\tresponse: resp\n\t};\n\n\tconst data = await resp.clone().json();\n\n\tif (!resp.ok) {\n\t\tret.error = data;\n\t} else if (transform) {\n\t\tret.data = transform(data);\n\t} else {\n\t\tret.data = <S>data;\n\t}\n\n\treturn ret;\n}\n","import { Validator, ValidationRule, MakeValidator } from './types';\n\nexport const createValidator =\n\t(rule: ValidationRule, defaultMsg?: string): MakeValidator =>\n\t(msg = defaultMsg) =>\n\t(val) =>\n\t\t!rule(val) ? msg.replace('{val}', val) : false;\n\nexport const createValidation = (...validators: Validator[]) => ({\n\tvalidate: (val: any) => {\n\t\tvalidators.forEach((validator) => {\n\t\t\tconst errMsg = validator(val);\n\t\t\tif (errMsg) throw new Error(errMsg);\n\t\t});\n\n\t\treturn true;\n\t}\n});\n","import get from 'lodash.get';\nimport { createValidation, createValidator } from './core';\nimport { Validator } from './types';\n\nconst regexMatch = (regex: RegExp) => (val: any) => regex.test(val);\n\nconst validateString = (val: any) => typeof val === 'string';\nconst validateEmail = regexMatch(\n\t/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/\n);\nconst validatePhone = regexMatch(/^\\+[1-9]{1}[0-9]{3,14}$/);\nconst validateMinLength = (min: number) => (val: any) => val.length >= min;\n// const validatePlainObject = (val: any) => !!val && Object.getPrototypeOf(val) === Object.prototype;\nconst validatePathValue = (path: string, rules: Validator[]) => (val: any) =>\n\tcreateValidation(...rules).validate(get(val, path));\n\nexport const isEmail = createValidator(validateEmail, '\"{val}\" is not a valid email');\nexport const isPhone = createValidator(validatePhone, '\"{val}\" is not a valid phone number');\nexport const isNotEmpty = createValidator(validateMinLength(1), 'Minimum length is 1');\nexport const isString = createValidator(validateString, 'Input is not a string');\n// export const isPlainObject = createValidator(validatePlainObject, 'Input is not a plain object');\nexport const hasPathValue = (path: string, rules: Validator[]) =>\n\tcreateValidator(validatePathValue(path, rules))();\n","import { createValidation } from './core';\nimport { Validator } from './types';\nimport { isEmail, isNotEmpty, isPhone, isString } from './validators';\n\n/**\n *\n * @params each parameter is an array of validators, those validators will be verified against the wrapped function argument which in the same place\n * @throws if any of the validators fails, an error with the relevant message will be thrown\n */\nexport const withValidations =\n\t(...argsRules: Validator[][]) =>\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\targsRules.forEach((rulesArr, i) => createValidation(...rulesArr).validate(args[i]));\n\n\t\treturn fn(...args);\n\t};\n\nexport const stringNonEmpty = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisNotEmpty(`\"${fieldName}\" must not be empty`)\n];\nexport const stringEmail = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisEmail()\n];\nexport const stringPhone = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisPhone()\n];\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { ExchangeAccessKeyResponse, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('accessKey'));\n\nconst withAccessKeys = (httpClient: HttpClient) => ({\n\texchange: withExchangeValidations(\n\t\t(accessKey: string): Promise<SdkResponse<ExchangeAccessKeyResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.accessKey.exchange, {}, { token: accessKey }))\n\t)\n});\n\nexport default withAccessKeys;\n","type SdkFn = (...args: any[]) => Promise<SdkResponse<ResponseData>>;\n\ntype DeviceInfo = {\n\twebAuthnSupport?: boolean;\n};\n\ntype LocalUser = {\n\tauthMethod?: AuthMethod;\n\toauthProvider?: string;\n\texternalId?: string;\n};\n\ntype AuthMethod = 'otp' | 'magiclink' | 'social' | 'sso' | 'webauthn' | 'totp';\n\n/** User base details from Descope API */\nexport type User = {\n\temail?: string;\n\tname?: string;\n\tphone?: string;\n};\n\n/** User extended details from Descope API */\nexport type UserResponse = User & {\n\texternalIds: string[];\n\tuserId: string;\n\tverifiedEmail?: boolean;\n\tverifiedPhone?: boolean;\n};\n\n/** Login options to be added to the different authentication methods */\nexport type LoginOptions = {\n\tstepup?: boolean;\n\tmfa?: boolean;\n\tcustomClaims?: Record<string, any>;\n};\n\n/** Authentication info result from the various JWT validations */\nexport type JWTResponse = {\n\tsessionJwt: string;\n\trefreshJwt?: string;\n\tcookieDomain?: string;\n\tcookiePath?: string;\n\tcookieMaxAge?: number;\n\tcookieExpiration?: number;\n\tuser?: UserResponse;\n\tfirstSeen?: boolean;\n};\n\n/** Authentication info result from exchanging access keys for a session */\nexport type ExchangeAccessKeyResponse = {\n\tkeyId: string;\n\tsessionJwt: string;\n\texpiration: number;\n};\n\n/** The response returned from the various start webauthn functions */\nexport type WebAuthnStartResponse = {\n\ttransactionId: string;\n\toptions: string;\n\tcreate: boolean;\n};\n\n/** Enchanted link response */\nexport type EnchantedLinkResponse = {\n\t/** Pending reference URL to poll while waiting for user to click magic link */\n\tpendingRef: string;\n\t/** Link id, on which link the user should click */\n\tlinkId: string;\n};\n\n/** URL response to redirect user in case of OAuth or SSO */\nexport type URLResponse = {\n\turl: string;\n};\n\n/** TOTP response with the TOTP details */\nexport type TOTPResponse = {\n\tprovisioningURL: string;\n\timage: string;\n\tkey: string;\n};\n\n/** Phone delivery methods which are currently supported */\nexport enum DeliveryPhone {\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\n/** All delivery methods currently supported */\nexport enum DeliveryMethods {\n\temail = 'email',\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\n/** All flow execution statuses\n * - waiting - flow execution is waiting for user interaction\n * - running - flow execution is currently running\n * - completed - flow execution completed successfully\n * - failed - flow execution failed\n */\nexport enum FlowStatus {\n\twaiting = 'waiting',\n\trunning = 'running',\n\tcompleted = 'completed',\n\tfailed = 'failed'\n}\n\n/** All flow response action\n * - screen - next action is to render screen\n * - poll - next action is poll for next after timeout\n * - redirect - next action is to redirect (redirection details in 'redirect' attribute)\n * - webauthnCreate/webauthnGet - next action is to prompt webauthn (details in 'webauthn' attribute)\n * - none - no next action\n */\nexport type FlowAction = 'screen' | 'poll' | 'redirect' | 'webauthnCreate' | 'webauthnGet' | 'none';\n\n/** Flow response with flow execution details */\nexport type FlowResponse = {\n\t// current execution identifier\n\texecutionId: string;\n\t// current step identifier\n\tstepId: string;\n\t// flow execution status\n\tstatus: FlowStatus;\n\t// the next required action\n\taction: FlowAction;\n\t// screen data - if action is 'screen'\n\tscreen?: {\n\t\t// screen identifier\n\t\tid: string;\n\t\t// extra dynamic state required for rendering screen\n\t\tstate: Record<string, any>;\n\t};\n\t// redirect data - if action is 'redirect'\n\tredirect?: {\n\t\turl: string;\n\t};\n\t// webauthn data - if action is one of 'webauthnCreate', 'webauthnGet'\n\twebauthn?: {\n\t\ttransactionId: string;\n\t\toptions: string;\n\t\tcreate: boolean;\n\t};\n\t// authentication information response, if response is authenticated\n\tauthInfo?: JWTResponse;\n};\n\nexport type Options = {\n\tredirectUrl?: string;\n\ttenant?: string;\n\tdeviceInfo?: DeviceInfo;\n\tlastUser?: LocalUser;\n};\n\nexport type ResponseData = Record<string, any>;\n\n/**\n * Response from our SDK calls which includes the result (ok, code, error).\n * The relevant data is provided in the more specific interfaces extending SdkResponse.\n */\nexport type SdkResponse<T extends ResponseData> = {\n\tcode?: number;\n\tok: boolean;\n\tresponse?: Response;\n\terror?: {\n\t\tmessage: string;\n\t\terrorCode: string;\n\t\terrorDescription?: string;\n\t};\n\tdata?: T;\n};\n\n/** Different delivery method */\nexport type Deliveries<T extends SdkFn> = Record<DeliveryMethods, T>;\n\n/** The different routes (actions) we can do */\nexport enum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify'\n}\n\n/** Logger type that supports the given levels (debug, log, error) */\nexport type Logger = Pick<Console, 'debug' | 'log' | 'error'>;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { pathJoin, transformResponse } from './helpers';\nimport {\n\tDeliveryMethods,\n\tDeliveries,\n\tUser,\n\tSdkResponse,\n\tJWTResponse,\n\tDeliveryPhone,\n\tLoginOptions\n} from './types';\nimport { stringEmail, stringNonEmpty, stringPhone, withValidations } from './validations';\n\nenum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify',\n\tupdatePhone = 'updatePhone'\n}\n\ntype VerifyFn = (identifier: string, code: string) => Promise<SdkResponse<JWTResponse>>;\ntype SignInFn = (identifier: string) => Promise<SdkResponse<never>>;\ntype SignUpFn = (identifier: string, user?: User) => Promise<SdkResponse<never>>;\ntype UpdatePhoneFn = (identifier: string, phone: string) => Promise<SdkResponse<never>>;\n\ntype Otp = {\n\t[Routes.verify]: Deliveries<VerifyFn>;\n\t[Routes.signIn]: Deliveries<SignInFn>;\n\t[Routes.signUp]: Deliveries<SignUpFn>;\n\t[Routes.updatePhone]: Deliveries<UpdatePhoneFn>;\n};\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignValidations = withValidations(identifierValidations);\nconst withUpdatePhoneValidations = withValidations(identifierValidations, stringPhone('phone'));\nconst withUpdateEmailValidations = withValidations(identifierValidations, stringEmail('email'));\n\nconst withOtp = (httpClient: HttpClient) => ({\n\tverify: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withVerifyValidations(\n\t\t\t\t(externalId: string, code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.verify, delivery), { code, externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.verify],\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(\n\t\t\t\t\texternalId: string,\n\t\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\t\ttoken?: string\n\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\tpathJoin(apiPaths.otp.signIn, delivery),\n\t\t\t\t\t\t\t{ externalId, loginOptions },\n\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, user?: User): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUp, delivery), { externalId, user })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUpOrIn, delivery), { externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, token?: string): Promise<SdkResponse<never>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.otp.update.email, { externalId: identifier, email }, { token })\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, token?: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.otp.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as Otp[Routes.updatePhone]\n\t}\n});\n\nexport default withOtp;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(\n\tidentifierValidations,\n\tstringPhone('phone'),\n\turiValidations\n);\nexport const withUpdateEmailValidations = withValidations(\n\tidentifierValidations,\n\tstringEmail('email'),\n\turiValidations\n);\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport {\n\tDeliveryMethods,\n\tDeliveryPhone,\n\tSdkResponse,\n\tJWTResponse,\n\tUser,\n\tLoginOptions\n} from '../types';\nimport { MagicLink, Routes } from './types';\nimport {\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations,\n\twithUpdatePhoneValidations\n} from './validations';\n\nconst withMagicLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.magicLink.verify, { token }))\n\t),\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(\n\t\t\t\t\texternalId: string,\n\t\t\t\t\tURI: string,\n\t\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\t\ttoken?: string\n\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.signIn, delivery),\n\t\t\t\t\t\t\t{ externalId, URI, loginOptions },\n\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUp, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tuser\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUpOrIn, delivery), { externalId, URI })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\temail: string,\n\t\t\t\turi: string,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.magicLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(\n\t\t\t\t\t\texternalId: string,\n\t\t\t\t\t\tphone: string,\n\t\t\t\t\t\turi: string,\n\t\t\t\t\t\ttoken?: string\n\t\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone, URI: uri },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as MagicLink[Routes.updatePhone]\n\t}\n});\n\nexport default withMagicLink;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(\n\tidentifierValidations,\n\tstringPhone('phone'),\n\turiValidations\n);\nexport const withUpdateEmailValidations = withValidations(\n\tidentifierValidations,\n\tstringEmail('email'),\n\turiValidations\n);\n","import {\n\tapiPaths,\n\tENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS,\n\tENCHANTED_LINK_MIN_POLLING_INTERVAL_MS\n} from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport {\n\tDeliveryMethods,\n\tSdkResponse,\n\tJWTResponse,\n\tEnchantedLinkResponse,\n\tUser,\n\tLoginOptions\n} from '../types';\nimport { EnchantedLink, Routes, WaitForSessionConfig } from './types';\nimport {\n\twithWaitForSessionValidations,\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations\n} from './validations';\n\n/** Polling configuration with defaults and normalizing checks */\nconst normalizeWaitForSessionConfig = ({\n\tpollingIntervalMs = ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS,\n\ttimeoutMs = ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS\n} = {}) => ({\n\tpollingIntervalMs: Math.max(\n\t\tpollingIntervalMs || ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS,\n\t\tENCHANTED_LINK_MIN_POLLING_INTERVAL_MS\n\t),\n\ttimeoutMs: Math.min(\n\t\ttimeoutMs || ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS,\n\t\tENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS\n\t)\n});\n\nconst withEnchantedLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse<never>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.enchantedLink.verify, { token }))\n\t),\n\n\tsignIn: withSignValidations(\n\t\t(\n\t\t\texternalId: string,\n\t\t\tURI: string,\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(\n\t\t\t\t\tpathJoin(apiPaths.enchantedLink.signIn, DeliveryMethods.email),\n\t\t\t\t\t{\n\t\t\t\t\t\texternalId,\n\t\t\t\t\t\tURI,\n\t\t\t\t\t\tloginOptions\n\t\t\t\t\t},\n\t\t\t\t\t{ token }\n\t\t\t\t)\n\t\t\t)\n\t) as EnchantedLink[Routes.signIn],\n\n\tsignUpOrIn: withSignValidations(\n\t\t(externalId: string, URI: string): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(pathJoin(apiPaths.enchantedLink.signUpOrIn, DeliveryMethods.email), {\n\t\t\t\t\texternalId,\n\t\t\t\t\tURI\n\t\t\t\t})\n\t\t\t)\n\t) as EnchantedLink[Routes.signIn],\n\n\tsignUp: withSignValidations(\n\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(pathJoin(apiPaths.enchantedLink.signUp, DeliveryMethods.email), {\n\t\t\t\t\texternalId,\n\t\t\t\t\tURI,\n\t\t\t\t\tuser\n\t\t\t\t})\n\t\t\t)\n\t) as EnchantedLink[Routes.signUp],\n\n\twaitForSession: withWaitForSessionValidations(\n\t\t(pendingRef: string, config?: WaitForSessionConfig): Promise<SdkResponse<JWTResponse>> =>\n\t\t\tnew Promise((resolve) => {\n\t\t\t\tconst { pollingIntervalMs, timeoutMs } = normalizeWaitForSessionConfig(config);\n\t\t\t\tlet timeout: NodeJS.Timeout;\n\t\t\t\tconst interval = setInterval(async () => {\n\t\t\t\t\tconst resp = await httpClient.post(apiPaths.enchantedLink.session, { pendingRef });\n\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\t\tresolve(transformResponse(Promise.resolve(resp)));\n\t\t\t\t\t}\n\t\t\t\t}, pollingIntervalMs);\n\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: `Session polling timeout exceeded: ${timeoutMs}ms`,\n\t\t\t\t\t\t\terrorCode: '0'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tok: false\n\t\t\t\t\t});\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t}, timeoutMs);\n\t\t\t})\n\t),\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\temail: string,\n\t\t\t\turi: string,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.enchantedLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withEnchantedLink;\n","import { SdkResponse, URLResponse, JWTResponse } from '../types';\n\nenum OAuthProviders {\n\tfacebook = 'facebook',\n\tgithub = 'github',\n\tgoogle = 'google',\n\tmicrosoft = 'microsoft',\n\tgitlab = 'gitlab',\n\tapple = 'apple'\n}\n\ntype StartFn = <B extends { redirect: boolean }>(\n\tredirectURL?: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse<URLResponse>>;\ntype VerifyFn = (code: string) => Promise<SdkResponse<JWTResponse>>;\n\ntype Providers<T> = Record<keyof typeof OAuthProviders, T>;\n\nexport type Oauth = {\n\tstart: Providers<StartFn>;\n\tverify: Providers<VerifyFn>;\n};\n\nexport { OAuthProviders };\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { SdkResponse, URLResponse, JWTResponse, LoginOptions } from '../types';\nimport { transformResponse } from '../helpers';\nimport { Oauth, OAuthProviders } from './types';\nimport { stringNonEmpty, withValidations } from '../validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\nconst withOauth = (httpClient: HttpClient) => ({\n\tstart: Object.keys(OAuthProviders).reduce(\n\t\t(acc, provider) => ({\n\t\t\t...acc,\n\t\t\t// eslint-disable-next-line consistent-return\n\t\t\t[provider]: async (\n\t\t\t\tredirectUrl?: string,\n\t\t\t\t{ redirect = false } = {},\n\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\ttoken?: string\n\t\t\t) => {\n\t\t\t\tconst resp = await httpClient.post(apiPaths.oauth.start, loginOptions || {}, {\n\t\t\t\t\tqueryParams: { provider, ...(redirectUrl && { redirectURL: redirectUrl }) },\n\t\t\t\t\ttoken\n\t\t\t\t});\n\t\t\t\tif (!redirect || !resp.ok)\n\t\t\t\t\treturn transformResponse<SdkResponse<URLResponse>>(Promise.resolve(resp));\n\n\t\t\t\tconst { url } = await resp.json();\n\t\t\t\twindow.location.href = url;\n\t\t\t}\n\t\t}),\n\t\t{}\n\t) as Oauth['start'],\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.oauth.exchange, { code }))\n\t)\n});\n\nexport default withOauth;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { FlowResponse, Options, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('flowId'));\nconst withNextValidations = withValidations(\n\tstringNonEmpty('executionId'),\n\tstringNonEmpty('stepId'),\n\tstringNonEmpty('interactionId')\n);\n\nconst withFlow = (httpClient: HttpClient) => ({\n\tstart: withStartValidations(\n\t\t(\n\t\t\tflowId: string,\n\t\t\toptions?: Options,\n\t\t\tinteractionId?: string,\n\t\t\tinput?: Record<string, FormDataEntryValue>\n\t\t): Promise<SdkResponse<FlowResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.flow.start, { flowId, options, interactionId, input })\n\t\t\t)\n\t),\n\tnext: withNextValidations(\n\t\t(\n\t\t\texecutionId: string,\n\t\t\tstepId: string,\n\t\t\tinteractionId: string,\n\t\t\tinput?: Record<string, FormDataEntryValue>\n\t\t): Promise<SdkResponse<FlowResponse>> => {\n\t\t\treturn transformResponse(\n\t\t\t\thttpClient.post(apiPaths.flow.next, { executionId, stepId, interactionId, input })\n\t\t\t);\n\t\t}\n\t)\n});\n\nexport default withFlow;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { SdkResponse, URLResponse, JWTResponse, LoginOptions } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('tenant'));\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\ntype StartFn = <B extends { redirect: boolean }>(\n\ttenantNameOrEmail: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse<URLResponse>>;\n\nconst withSaml = (httpClient: HttpClient) => ({\n\t// eslint-disable-next-line consistent-return\n\tstart: withStartValidations(\n\t\tasync (\n\t\t\ttenantNameOrEmail: string,\n\t\t\tredirectUrl?: string,\n\t\t\t{ redirect = false } = {},\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t) => {\n\t\t\tconst resp = await httpClient.post(apiPaths.saml.start, loginOptions || {}, {\n\t\t\t\tqueryParams: { tenant: tenantNameOrEmail, redirectURL: redirectUrl },\n\t\t\t\ttoken\n\t\t\t});\n\n\t\t\tif (!redirect || !resp.ok) return transformResponse(Promise.resolve(resp));\n\n\t\t\tconst { url } = await resp.json();\n\t\t\twindow.location.href = url;\n\t\t}\n\t) as StartFn,\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.saml.exchange, { code }))\n\t)\n});\n\nexport default withSaml;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { User, SdkResponse, JWTResponse, TOTPResponse, LoginOptions } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignUpValidations = withValidations(identifierValidations);\nconst withUpdateValidations = withValidations(identifierValidations);\n\nconst withTotp = (httpClient: HttpClient) => ({\n\tsignUp: withSignUpValidations(\n\t\t(identifier: string, user?: User): Promise<SdkResponse<TOTPResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.totp.signUp, { externalId: identifier, user }))\n\t),\n\n\tverify: withVerifyValidations(\n\t\t(\n\t\t\tidentifier: string,\n\t\t\tcode: string,\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(\n\t\t\t\t\tapiPaths.totp.verify,\n\t\t\t\t\t{ externalId: identifier, code, loginOptions },\n\t\t\t\t\t{ token }\n\t\t\t\t)\n\t\t\t)\n\t),\n\n\tupdate: withUpdateValidations(\n\t\t(identifier: string, token?: string): Promise<SdkResponse<TOTPResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.totp.update, { externalId: identifier }, { token })\n\t\t\t)\n\t)\n});\n\nexport default withTotp;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport {\n\tSdkResponse,\n\tResponseData,\n\tLoginOptions,\n\tJWTResponse,\n\tWebAuthnStartResponse\n} from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst originValidations = stringNonEmpty('origin');\n\nconst withSignUpStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('name')\n);\nconst withSignInStartValidations = withValidations(identifierValidations, originValidations);\nconst withUpdateStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('token')\n);\nconst withFinishValidations = withValidations(\n\tstringNonEmpty('transactionId'),\n\tstringNonEmpty('response')\n);\n\nconst withWebauthn = (httpClient: HttpClient) => ({\n\tsignUp: {\n\t\tstart: withSignUpStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\tname: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.start, {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\texternalId: identifier,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t},\n\t\t\t\t\t\torigin\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.signIn.start,\n\t\t\t\t\t\t{ externalId: identifier, origin, loginOptions },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signIn.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignUpOrIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(identifier: string, origin: string): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUpOrIn.start, { externalId: identifier, origin })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tupdate: {\n\t\tstart: withUpdateStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\ttoken: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.update.start,\n\t\t\t\t\t\t{ externalId: identifier, origin },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<ResponseData>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.update.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withWebauthn;\n","import withAccessKeys from './accesskey';\nimport withOtp from './otp';\nimport { HttpClient } from '../httpClient';\nimport { isJwtExpired, getJwtPermissions, getJwtRoles, transformResponse } from './helpers';\nimport { stringNonEmpty, withValidations } from './validations';\nimport withMagicLink from './magicLink';\nimport withEnchantedLink from './enchantedLink';\nimport { apiPaths } from '../constants';\nimport withOauth from './oauth';\nimport withFlow from './flow';\nimport withSaml from './saml';\nimport withTotp from './totp';\nimport withWebauthn from './webauthn';\nimport { UserResponse, JWTResponse } from './types';\n\nconst withJwtValidations = withValidations(stringNonEmpty('token'));\n\n/** Returns Descope SDK with all available operations */\nexport default (httpClient: HttpClient) => ({\n\taccessKey: withAccessKeys(httpClient),\n\totp: withOtp(httpClient),\n\tmagicLink: withMagicLink(httpClient),\n\tenchantedLink: withEnchantedLink(httpClient),\n\toauth: withOauth(httpClient),\n\tsaml: withSaml(httpClient),\n\ttotp: withTotp(httpClient),\n\twebauthn: withWebauthn(httpClient),\n\tflow: withFlow(httpClient),\n\trefresh: (token?: string) =>\n\t\ttransformResponse<JWTResponse>(httpClient.post(apiPaths.refresh, {}, { token })),\n\tlogout: (token?: string) =>\n\t\ttransformResponse<never>(httpClient.post(apiPaths.logout, {}, { token })),\n\tlogoutAll: (token?: string) =>\n\t\ttransformResponse<never>(httpClient.post(apiPaths.logoutAll, {}, { token })),\n\tme: (token?: string) => transformResponse<UserResponse>(httpClient.get(apiPaths.me, { token })),\n\tisJwtExpired: withJwtValidations(isJwtExpired),\n\tgetJwtPermissions: withJwtValidations(getJwtPermissions),\n\tgetJwtRoles: withJwtValidations(getJwtRoles),\n\thttpClient\n});\n","import { DEFAULT_BASE_API_URL } from './constants';\nimport createHttpClient from './httpClient';\nimport { AfterRequest, BeforeRequest, HTTPMethods, RequestConfig } from './httpClient/types';\nimport createSdk from './sdk';\nimport { OAuthProviders } from './sdk/oauth/types';\nimport { DeliveryMethods } from './sdk/types';\nimport { stringNonEmpty, withValidations } from './sdk/validations';\nimport { hasPathValue } from './sdk/validations/validators';\nimport { SdkConfig } from './types';\n\n/** Validate we have non-empty project id */\nconst withSdkConfigValidations = withValidations([\n\thasPathValue('projectId', stringNonEmpty('projectId'))\n]);\n\n/** Add the ability to pass multiple hooks instead of one when creating an SDK instance */\nconst withMultipleHooks =\n\t<T extends object>(createSdk: (config: SdkConfig) => T) =>\n\t(\n\t\tconfig: Omit<SdkConfig, 'hooks'> & {\n\t\t\thooks?: {\n\t\t\t\tbeforeRequest?: BeforeRequest | BeforeRequest[];\n\t\t\t\tafterRequest?: AfterRequest | AfterRequest[];\n\t\t\t};\n\t\t}\n\t) => {\n\t\tconst beforeRequestHooks = [].concat(config.hooks?.beforeRequest || []);\n\t\tconst afterRequestHooks = [].concat(config.hooks?.afterRequest || []);\n\n\t\tconst beforeRequest: BeforeRequest = (config) =>\n\t\t\tbeforeRequestHooks?.reduce((acc, fn) => fn(acc), config);\n\t\tconst afterRequest: AfterRequest = (req, res) => {\n\t\t\tafterRequestHooks?.forEach((fn) => fn(req, res?.clone()));\n\t\t};\n\n\t\treturn createSdk({ ...config, hooks: { beforeRequest, afterRequest } });\n\t};\n\n/** Descope SDK client */\nlet initSdk = withSdkConfigValidations(\n\twithMultipleHooks(({ projectId, logger, baseUrl, hooks, cookiePolicy }: SdkConfig) =>\n\t\tcreateSdk(\n\t\t\tcreateHttpClient({\n\t\t\t\tbaseUrl: baseUrl || DEFAULT_BASE_API_URL,\n\t\t\t\tprojectId,\n\t\t\t\tlogger,\n\t\t\t\thooks,\n\t\t\t\tcookiePolicy\n\t\t\t})\n\t\t)\n\t)\n);\n\n/** Descope SDK client with delivery methods enum.\n *\n * Please see full documentation at {@link https://docs.descope.com/guides Descope Docs}\n * @example Usage\n *\n * ```js\n * import descopeSdk from '@descope/core-js-sdk';\n *\n * const myProjectId = 'xxx';\n * const sdk = descopeSdk({ projectId: myProjectId });\n *\n * const userIdentifier = 'identifier';\n * sdk.otp.signIn.email(userIdentifier);\n * const jwtResponse = sdk.otp.verify.email(userIdentifier, codeFromEmail);\n * ```\n */\nexport default Object.assign(initSdk, { DeliveryMethods });\n\nexport { transformResponse } from './sdk/helpers';\nexport type {\n\tEnchantedLinkResponse,\n\tExchangeAccessKeyResponse,\n\tFlowAction,\n\tFlowResponse,\n\tFlowStatus,\n\tJWTResponse,\n\tResponseData,\n\tSdkResponse,\n\tTOTPResponse,\n\tURLResponse,\n\tUserResponse\n} from './sdk/types';\nexport * from './utils';\nexport type { SdkFnWrapper } from './utils';\nexport type { HTTPMethods, RequestConfig };\n\n/** Type to restrict to valid delivery methods */\nexport type DeliveryMethod = keyof typeof DeliveryMethods;\n/** Type to restrict to valid OAuth providers */\nexport type OAuthProvider = keyof typeof OAuthProviders;\n","import { SdkConfig } from '../types';\n\nexport { default as wrapWith } from './wrapWith';\nexport type { SdkFnWrapper } from './wrapWith/types';\n\n/**\n * Add hooks to an existing core-sdk config\n */\nexport const addHooksToConfig = <Config extends SdkConfig>(\n\tconfig: Config,\n\thooks: Config['hooks']\n): Config => {\n\t['beforeRequest', 'afterRequest'].reduce((acc, key) => {\n\t\tacc[key] = [].concat(config.hooks?.[key] || []).concat(hooks?.[key] || []);\n\n\t\treturn acc;\n\t}, (config.hooks ??= {}));\n\n\treturn config;\n};\n","/* eslint-disable import/exports-last */\nimport { ResponseData } from '../../sdk/types';\nimport { SdkFnWrapper, ReplacePaths, SdkFnsPaths } from './types';\n\n/**\n * A wrapper function that allows to wrap multiple Sdk function\n * @param obj: The Sdk instance you want to wrap\n * @param paths: A readonly list of paths of the functions you want to wrap\n * @param wrapper: Your wrapper function, it should gets an Sdk function and return a new Sdk function\n * @returns a mutated instance of the Sdk with updated type definitions based on your wrapper return type\n *\n * Usage example:\n *\n * // Assuming this is our SDK instance\n * const sdk = {\n * me: (token) => {...}\n * flow: {\n * start: (...params) => {...}\n * next: (...params) => {...}\n * }\n * ...\n * }\n *\n * // This is our wrapper\n * const wrapper = (sdkFn) => async (...args) => {\n * const sdkResponse = await sdkFn(...args)\n *\n * // Modify return value\n * return {...sdkResponse, data: {...sdkResponse.data, myCustomAttribute: 'hello'}}\n * }\n *\n * // And those are the paths we want to wrap\n * const paths = ['flow.start', 'flow.next'] as const // You MUST add as const!\n *\n * // We can wrap our SDK functions with the wrapper we created in this way\n * const newlyTypedSdk = wrapWith(sdk, paths, wrapper)\n *\n * Now the 2 wrapped functions will have the updated type based on the wrapper return value\n */\n\nconst wrapWith = <\n\tObj extends object,\n\tPaths extends ReadonlyArray<SdkFnsPaths<Obj>>,\n\tWrapperData extends ResponseData\n>(\n\tobj: Obj,\n\tpaths: Paths,\n\twrapper: SdkFnWrapper<WrapperData>\n): ReplacePaths<Obj, Paths, WrapperData> => {\n\tpaths.forEach((path) => {\n\t\tconst sections = path.split('.');\n\t\tlet section = sections.shift();\n\t\tlet currentRef: Record<string, any> = obj;\n\n\t\twhile (sections.length > 0) {\n\t\t\tcurrentRef = currentRef[section];\n\n\t\t\tif (!section || !currentRef) {\n\t\t\t\tthrow Error(`Invalid path \"${path}\", \"${section}\" is missing or has no value`);\n\t\t\t}\n\n\t\t\tsection = sections.shift();\n\t\t}\n\n\t\tif (typeof currentRef[section] !== 'function') {\n\t\t\tthrow Error(`\"${path}\" is not a function`);\n\t\t}\n\t\tconst origFn = currentRef[section];\n\t\tcurrentRef[section] = wrapper(origFn);\n\t});\n\n\treturn obj as any;\n};\n\nexport default wrapWith;\n"],"names":["apiPaths","exchange","verify","signIn","signUp","update","email","phone","signUpOrIn","session","start","finish","next","httpLogBuilder","msg","headers","headersObj","entries","Object","fromEntries","Headers","JSON","stringify","this","body","Body","url","Url","toString","method","Method","title","Title","status","Status","build","keys","flatMap","key","join","createFetchLogger","logger","receivedFetch","fetchInternal","fetch","Error","async","args","log","buildRequestLog","resp","ok","respBody","clone","text","Promise","resolve","json","parse","statusText","buildResponseLog","HTTPMethods","mergeHeaders","sources","reduce","acc","source","srcArr","Array","isArray","from","getSrcArr","_","value","serializeBody","undefined","createAuthorizationHeader","projectId","token","bearer","Authorization","createHttpClient","baseUrl","baseConfig","hooks","cookiePolicy","fetchWithLogger","sendRequest","config","requestConfig","beforeRequest","path","queryParams","res","URL","search","URLSearchParams","urlBuilder","baseHeaders","credentials","afterRequest","get","post","put","delete","getJwtAuthorizationItems","tenant","claim","claims","parseJwt","tenants","_a","items","jwtDecode","isJwtExpired","exp","Date","getTime","getJwtPermissions","getJwtRoles","pathJoin","replace","transformResponse","response","transform","ret","code","data","error","createValidator","rule","defaultMsg","val","createValidation","validators","validate","forEach","validator","errMsg","regexMatch","regex","test","validateEmail","validatePhone","isEmail","isPhone","isNotEmpty","min","length","isString","withValidations","argsRules","fn","rulesArr","i","stringNonEmpty","fieldName","stringEmail","stringPhone","withExchangeValidations","withAccessKeys","httpClient","accessKey","DeliveryPhone","DeliveryMethods","FlowStatus","Routes","identifierValidations","withVerifyValidations","withSignValidations","withUpdatePhoneValidations","withUpdateEmailValidations","withOtp","delivery","assign","externalId","loginOptions","user","identifier","uriValidations","withMagicLink","URI","uri","withWaitForSessionValidations","withEnchantedLink","waitForSession","pendingRef","pollingIntervalMs","timeoutMs","Math","max","normalizeWaitForSessionConfig","timeout","interval","setInterval","clearInterval","clearTimeout","setTimeout","message","errorCode","OAuthProviders","withOauth","provider","redirectUrl","redirect","redirectURL","window","location","href","withStartValidations","withNextValidations","withFlow","flowId","options","interactionId","input","executionId","stepId","withSaml","tenantNameOrEmail","withSignUpValidations","withUpdateValidations","withTotp","originValidations","withSignUpStartValidations","withSignInStartValidations","withUpdateStartValidations","withFinishValidations","withWebauthn","origin","name","transactionId","withJwtValidations","rules","initSdk","validatePathValue","withSdkConfigValidations","createSdk","beforeRequestHooks","concat","afterRequestHooks","_b","req","withMultipleHooks","otp","magicLink","enchantedLink","oauth","saml","totp","webauthn","flow","refresh","logout","logoutAll","me","index","obj","paths","wrapper","sections","split","section","shift","currentRef","origFn"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/constants/apiPaths.ts","../../src/constants/index.ts","../../src/httpClient/helpers/createFetchLogger.ts","../../src/httpClient/types.ts","../../src/httpClient/urlBuilder.ts","../../src/httpClient/utils.ts","../../src/httpClient/index.ts","../../src/sdk/helpers/index.ts","../../src/sdk/validations/core.ts","../../src/sdk/validations/validators.ts","../../src/sdk/validations/index.ts","../../src/sdk/accesskey.ts","../../src/sdk/types.ts","../../src/sdk/otp.ts","../../src/sdk/magicLink/validations.ts","../../src/sdk/magicLink/index.ts","../../src/sdk/enchantedLink/validations.ts","../../src/sdk/enchantedLink/index.ts","../../src/sdk/oauth/types.ts","../../src/sdk/oauth/index.ts","../../src/sdk/flow.ts","../../src/sdk/saml.ts","../../src/sdk/totp.ts","../../src/sdk/webauthn.ts","../../src/sdk/index.ts","../../src/createSdk.ts","../../src/index.ts","../../src/utils/index.ts","../../src/utils/wrapWith/index.ts"],"sourcesContent":["/** API paths for the Descope service APIs */\nexport default {\n\taccessKey: {\n\t\texchange: '/v1/auth/accesskey/exchange'\n\t},\n\totp: {\n\t\tverify: '/v1/auth/otp/verify',\n\t\tsignIn: '/v1/auth/otp/signin',\n\t\tsignUp: '/v1/auth/otp/signup',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/otp/update/email',\n\t\t\tphone: '/v1/auth/otp/update/phone'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/otp/signup-in'\n\t},\n\tmagicLink: {\n\t\tverify: '/v1/auth/magiclink/verify',\n\t\tsignIn: '/v1/auth/magiclink/signin',\n\t\tsignUp: '/v1/auth/magiclink/signup',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/magiclink/update/email',\n\t\t\tphone: '/v1/auth/magiclink/update/phone'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/magiclink/signup-in'\n\t},\n\tenchantedLink: {\n\t\tverify: '/v1/auth/enchantedlink/verify',\n\t\tsignIn: '/v1/auth/enchantedlink/signin',\n\t\tsignUp: '/v1/auth/enchantedlink/signup',\n\t\tsession: '/v1/auth/enchantedlink/pending-session',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/enchantedlink/update/email'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/enchantedlink/signup-in'\n\t},\n\toauth: {\n\t\tstart: '/v1/auth/oauth/authorize',\n\t\texchange: '/v1/auth/oauth/exchange'\n\t},\n\tsaml: {\n\t\tstart: '/v1/auth/saml/authorize',\n\t\texchange: '/v1/auth/saml/exchange'\n\t},\n\ttotp: {\n\t\tverify: '/v1/auth/totp/verify',\n\t\tsignUp: '/v1/auth/totp/signup',\n\t\tupdate: '/v1/user/totp/update'\n\t},\n\twebauthn: {\n\t\tsignUp: {\n\t\t\tstart: '/v1/auth/webauthn/signup/start',\n\t\t\tfinish: '/v1/auth/webauthn/signup/finish'\n\t\t},\n\t\tsignIn: {\n\t\t\tstart: '/v1/auth/webauthn/signin/start',\n\t\t\tfinish: '/v1/auth/webauthn/signin/finish'\n\t\t},\n\t\tsignUpOrIn: {\n\t\t\tstart: '/v1/auth/webauthn/signup-in/start'\n\t\t},\n\t\tupdate: {\n\t\t\tstart: 'v1/auth/webauthn/update/start',\n\t\t\tfinish: '/v1/auth/webauthn/update/finish'\n\t\t}\n\t},\n\trefresh: '/v1/auth/refresh',\n\tlogout: '/v1/auth/logout',\n\tlogoutAll: '/v1/auth/logoutall',\n\tme: '/v1/auth/me',\n\tflow: {\n\t\tstart: '/v1/flow/start',\n\t\tnext: '/v1/flow/next'\n\t}\n};\n","/** Default Descope API URL */\nexport const DEFAULT_BASE_API_URL = 'https://api.descope.com';\n\n/** Default magic link polling interval for checking if the user clicked on the magic link */\nexport const ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS = 1000; // 1 second\n/** Default maximum time we are willing to wait for the magic link to be clicked */\nexport const ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS = 1000 * 60 * 10; // 10 minutes\n\n/** API paths to the Descope service */\nexport { default as apiPaths } from './apiPaths';\n","import { Logger } from '../../sdk/types';\n\n/** Build a log message around HTTP calls */\nconst httpLogBuilder = () => {\n\tconst msg: {\n\t\tTitle?: string;\n\t\tUrl?: string;\n\t\tMethod?: string;\n\t\tHeaders?: string;\n\t\tBody?: string;\n\t\tStatus?: string;\n\t} = {};\n\n\treturn {\n\t\theaders(headers: HeadersInit) {\n\t\t\tconst headersObj =\n\t\t\t\ttypeof headers.entries === 'function' ? Object.fromEntries(headers.entries()) : headers;\n\t\t\tmsg.Headers = JSON.stringify(headersObj);\n\n\t\t\treturn this;\n\t\t},\n\n\t\tbody(body: string) {\n\t\t\tmsg.Body = body;\n\t\t\treturn this;\n\t\t},\n\n\t\turl(url: URL | string) {\n\t\t\tmsg.Url = url.toString();\n\t\t\treturn this;\n\t\t},\n\n\t\tmethod(method: string) {\n\t\t\tmsg.Method = method;\n\t\t\treturn this;\n\t\t},\n\n\t\ttitle(title: string) {\n\t\t\tmsg.Title = title;\n\t\t\treturn this;\n\t\t},\n\n\t\tstatus(status: string) {\n\t\t\tmsg.Status = status;\n\t\t\treturn this;\n\t\t},\n\n\t\tbuild() {\n\t\t\treturn Object.keys(msg)\n\t\t\t\t.flatMap((key) => (msg[key] ? [`${key !== 'Title' ? `${key}: ` : ''}${msg[key]}`] : []))\n\t\t\t\t.join('\\n');\n\t\t}\n\t};\n};\n\ntype Fetch = typeof fetch;\n\n/** Log the request object */\nconst buildRequestLog = (args: Parameters<Fetch>) =>\n\thttpLogBuilder()\n\t\t.title('Request')\n\t\t.url(args[0])\n\t\t.method(args[1].method)\n\t\t.headers(args[1].headers)\n\t\t.body(args[1].body)\n\t\t.build();\n\n/** Log the response object */\nconst buildResponseLog = async (resp: Response) => {\n\tconst respBody = await (resp.clone ? resp.clone().text() : resp.text());\n\t// eslint-disable-next-line no-param-reassign\n\tresp.text = () => Promise.resolve(respBody);\n\t// eslint-disable-next-line no-param-reassign\n\tresp.json = () => Promise.resolve(JSON.parse(respBody));\n\n\treturn httpLogBuilder()\n\t\t.title('Response')\n\t\t.url(resp.url.toString())\n\t\t.status(`${resp.status} ${resp.statusText}`)\n\t\t.headers(resp.headers)\n\t\t.body(respBody)\n\t\t.build();\n};\n\n/**\n * Create a fetch with a logger wrapped around it if a logger is given\n * @param logger Logger to send the logs to\n * @param receivedFetch Fetch to be used or built-in fetch if not provided\n *\n */\nconst createFetchLogger = (logger: Logger, receivedFetch?: Fetch) => {\n\tconst fetchInternal = receivedFetch || fetch;\n\tif (!fetchInternal) throw new Error('fetch is not defined');\n\n\tif (!logger) return fetchInternal;\n\n\treturn async (...args: Parameters<Fetch>) => {\n\t\tlogger.log(buildRequestLog(args));\n\t\tconst resp = await fetchInternal(...args);\n\t\tlogger[resp.ok ? 'log' : 'error'](await buildResponseLog(resp));\n\n\t\treturn resp;\n\t};\n};\n\nexport default createFetchLogger;\n","import { Logger } from '../sdk/types';\n\n/** Request configuration including headers, query params and token */\ntype HttpClientReqConfig = {\n\theaders?: HeadersInit;\n\tqueryParams?: { [key: string]: string };\n\ttoken?: string;\n};\n\n/** HTTP methods we use in the client */\nexport enum HTTPMethods {\n\tget = 'GET',\n\tdelete = 'DELETE',\n\tpost = 'POST',\n\tput = 'PUT'\n}\n\n/** HTTP Client type that implements the HTTP method calls. Descopers can provide their own HTTP client although required only in rare cases. */\nexport type HttpClient = {\n\tget: (path: string, config?: HttpClientReqConfig) => Promise<Response>;\n\tpost: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\tput: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\tdelete: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\thooks?: Hooks;\n};\n\n/** Parameters for the HTTP client. Defaults should work for most cases. */\nexport type CreateHttpClientConfig = {\n\tbaseUrl: string;\n\tprojectId: string;\n\tbaseConfig?: { baseHeaders: HeadersInit };\n\tlogger?: Logger;\n\thooks?: Hooks;\n\tcookiePolicy?: RequestCredentials;\n};\n\n/** For before-request hook allows overriding parts of the request */\nexport type RequestConfig = {\n\tpath: string;\n\theaders?: HeadersInit;\n\tqueryParams?: { [key: string]: string };\n\tbody?: any;\n\tmethod: HTTPMethods;\n\ttoken?: string;\n};\n\nexport type BeforeRequest = (config: RequestConfig) => RequestConfig;\nexport type AfterRequest = (req: RequestConfig, res: Response) => void;\n\n/** Hooks before and after the request is made */\nexport type Hooks = {\n\tbeforeRequest?: BeforeRequest;\n\tafterRequest?: AfterRequest;\n};\n","/** Build URL with given parts */\nexport const urlBuilder = ({\n\tpath,\n\tbaseUrl,\n\tqueryParams\n}: {\n\tpath: string;\n\tbaseUrl: string;\n\tqueryParams: ConstructorParameters<typeof URLSearchParams>[0];\n}) => {\n\tconst url = new URL(path, baseUrl);\n\tif (queryParams) url.search = new URLSearchParams(queryParams).toString();\n\n\treturn url;\n};\n","/* eslint-disable no-nested-ternary */\n\nconst getSrcArr = (source: HeadersInit) => {\n\tif (Array.isArray(source)) return source;\n\tif (source instanceof Headers) return Array.from(source.entries());\n\tif (!source) return [];\n\treturn Object.entries(source);\n};\n\n/** Merge the given list of headers into a single Headers object */\nexport const mergeHeaders = (...sources: HeadersInit[]) =>\n\tnew Headers(\n\t\tsources.reduce((acc: Record<string, string>, source) => {\n\t\t\tconst srcArr = getSrcArr(source);\n\t\t\tsrcArr.reduce((_, [key, value]) => {\n\t\t\t\tacc[key] = value;\n\n\t\t\t\treturn acc;\n\t\t\t}, acc);\n\n\t\t\treturn acc;\n\t\t}, {})\n\t);\n\n/** Serialize the body to JSON */\nexport const serializeBody = (body: Record<string, any>) =>\n\tbody === undefined ? undefined : JSON.stringify(body);\n","import createFetchLogger from './helpers/createFetchLogger';\nimport { CreateHttpClientConfig, HttpClient, HTTPMethods, RequestConfig } from './types';\nimport { urlBuilder } from './urlBuilder';\nimport { mergeHeaders, serializeBody } from './utils';\n\n/**\n * Create a Bearer authorization header with concatenated projectId and token\n * @param projectId The project id to use in the header\n * @param token Token to be concatenated. Defaults to empty.\n */\nconst createAuthorizationHeader = (projectId: string, token = '') => {\n\tlet bearer = projectId;\n\tif (token) {\n\t\tbearer = bearer + ':' + token;\n\t}\n\treturn {\n\t\tAuthorization: `Bearer ${bearer}`\n\t};\n};\n\ndeclare const BUILD_VERSION: string;\n\n/**\n * Create descope custom headers\n */\nconst createDescopeHeaders = () => {\n\treturn {\n\t\t'x-descope-sdk-name': 'core-js',\n\t\t'x-descope-sdk-version': BUILD_VERSION\n\t};\n};\n\n/**\n * Create the HTTP client used to send HTTP requests to the Descope API\n *\n * @param CreateHttpClientConfig Configuration for the client\n */\nconst createHttpClient = ({\n\tbaseUrl,\n\tprojectId,\n\tbaseConfig,\n\tlogger,\n\thooks,\n\tcookiePolicy\n}: CreateHttpClientConfig): HttpClient => {\n\tconst fetchWithLogger = createFetchLogger(logger);\n\n\tconst sendRequest = async (config: RequestConfig) => {\n\t\tconst requestConfig = hooks?.beforeRequest ? hooks.beforeRequest(config) : config;\n\n\t\tconst { path, body, headers, queryParams, method, token } = requestConfig;\n\n\t\tconst res = await fetchWithLogger(urlBuilder({ path, baseUrl, queryParams }), {\n\t\t\theaders: mergeHeaders(\n\t\t\t\tcreateAuthorizationHeader(projectId, token),\n\t\t\t\tcreateDescopeHeaders(),\n\t\t\t\tbaseConfig?.baseHeaders || {},\n\t\t\t\theaders\n\t\t\t),\n\t\t\tmethod,\n\t\t\tbody: serializeBody(body),\n\t\t\tcredentials: cookiePolicy || 'include'\n\t\t});\n\n\t\tif (hooks?.afterRequest) {\n\t\t\thooks.afterRequest(config, res?.clone());\n\t\t}\n\n\t\treturn res;\n\t};\n\n\treturn {\n\t\tget: (path: string, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body: undefined, method: HTTPMethods.get, token }),\n\t\tpost: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.post, token }),\n\t\tput: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.put, token }),\n\t\tdelete: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.delete, token }),\n\t\thooks\n\t};\n};\n\nexport default createHttpClient;\nexport type { HttpClient };\n","import jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { ResponseData, SdkResponse } from '../types';\n\nfunction getJwtAuthorizationItems(token: string, tenant: string, claim: string): string[] {\n\tlet claims: any = parseJwt(token);\n\tif (tenant) {\n\t\tclaims = claims.tenants?.[tenant];\n\t}\n\tconst items = claims[claim];\n\treturn Array.isArray(items) ? items : [];\n}\n\nfunction parseJwt(token: string): JwtPayload {\n\tif (typeof token !== 'string' || !token) throw new Error('Invalid token provided');\n\treturn jwtDecode(token);\n}\n\n/**\n * Checks if the given JWT is still valid but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function isJwtExpired(token: string): boolean {\n\tconst { exp } = parseJwt(token);\n\tconst currentTime = new Date().getTime() / 1000;\n\treturn currentTime > exp;\n}\n\n/**\n * Returns the list of permissions granted in the given JWT but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function getJwtPermissions(token: string, tenant?: string): string[] {\n\treturn getJwtAuthorizationItems(token, tenant, 'permissions');\n}\n\n/**\n * Returns the list of roles specified in the given JWT but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function getJwtRoles(token: string, tenant?: string): string[] {\n\treturn getJwtAuthorizationItems(token, tenant, 'roles');\n}\n\n/** Joins path parts making sure there is only one path separator between parts */\nexport const pathJoin = (...args: string[]) => args.join('/').replace(/\\/{2,}/g, '/');\n\n/** Transform the Promise Response to our internal SdkResponse implementation\n * @param response The Response promise from fetch\n * @param transform Optionally transform the response JSON to another type\n */\nexport async function transformResponse<T extends ResponseData, S extends ResponseData = T>(\n\tresponse: Promise<Response>,\n\ttransform?: (data: T) => S\n): Promise<SdkResponse<S>> {\n\tconst resp = await response;\n\n\tconst ret: SdkResponse<S> = {\n\t\tcode: resp.status,\n\t\tok: resp.ok,\n\t\tresponse: resp\n\t};\n\n\tconst data = await resp.clone().json();\n\n\tif (!resp.ok) {\n\t\tret.error = data;\n\t} else if (transform) {\n\t\tret.data = transform(data);\n\t} else {\n\t\tret.data = <S>data;\n\t}\n\n\treturn ret;\n}\n","import { Validator, ValidationRule, MakeValidator } from './types';\n\nexport const createValidator =\n\t(rule: ValidationRule, defaultMsg?: string): MakeValidator =>\n\t(msg = defaultMsg) =>\n\t(val) =>\n\t\t!rule(val) ? msg.replace('{val}', val) : false;\n\nexport const createValidation = (...validators: Validator[]) => ({\n\tvalidate: (val: any) => {\n\t\tvalidators.forEach((validator) => {\n\t\t\tconst errMsg = validator(val);\n\t\t\tif (errMsg) throw new Error(errMsg);\n\t\t});\n\n\t\treturn true;\n\t}\n});\n","import get from 'lodash.get';\nimport { createValidation, createValidator } from './core';\nimport { Validator } from './types';\n\nconst regexMatch = (regex: RegExp) => (val: any) => regex.test(val);\n\nconst validateString = (val: any) => typeof val === 'string';\nconst validateEmail = regexMatch(\n\t/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/\n);\nconst validatePhone = regexMatch(/^\\+[1-9]{1}[0-9]{3,14}$/);\nconst validateMinLength = (min: number) => (val: any) => val.length >= min;\n// const validatePlainObject = (val: any) => !!val && Object.getPrototypeOf(val) === Object.prototype;\nconst validatePathValue = (path: string, rules: Validator[]) => (val: any) =>\n\tcreateValidation(...rules).validate(get(val, path));\n\nexport const isEmail = createValidator(validateEmail, '\"{val}\" is not a valid email');\nexport const isPhone = createValidator(validatePhone, '\"{val}\" is not a valid phone number');\nexport const isNotEmpty = createValidator(validateMinLength(1), 'Minimum length is 1');\nexport const isString = createValidator(validateString, 'Input is not a string');\n// export const isPlainObject = createValidator(validatePlainObject, 'Input is not a plain object');\nexport const hasPathValue = (path: string, rules: Validator[]) =>\n\tcreateValidator(validatePathValue(path, rules))();\n","import { createValidation } from './core';\nimport { Validator } from './types';\nimport { isEmail, isNotEmpty, isPhone, isString } from './validators';\n\n/**\n *\n * @params each parameter is an array of validators, those validators will be verified against the wrapped function argument which in the same place\n * @throws if any of the validators fails, an error with the relevant message will be thrown\n */\nexport const withValidations =\n\t(...argsRules: Validator[][]) =>\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\targsRules.forEach((rulesArr, i) => createValidation(...rulesArr).validate(args[i]));\n\n\t\treturn fn(...args);\n\t};\n\nexport const stringNonEmpty = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisNotEmpty(`\"${fieldName}\" must not be empty`)\n];\nexport const stringEmail = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisEmail()\n];\nexport const stringPhone = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisPhone()\n];\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { ExchangeAccessKeyResponse, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('accessKey'));\n\nconst withAccessKeys = (httpClient: HttpClient) => ({\n\texchange: withExchangeValidations(\n\t\t(accessKey: string): Promise<SdkResponse<ExchangeAccessKeyResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.accessKey.exchange, {}, { token: accessKey }))\n\t)\n});\n\nexport default withAccessKeys;\n","type SdkFn = (...args: any[]) => Promise<SdkResponse<ResponseData>>;\n\ntype DeviceInfo = {\n\twebAuthnSupport?: boolean;\n};\n\ntype LocalUser = {\n\tauthMethod?: AuthMethod;\n\toauthProvider?: string;\n\texternalId?: string;\n};\n\ntype AuthMethod = 'otp' | 'magiclink' | 'social' | 'sso' | 'webauthn' | 'totp';\n\n/** User base details from Descope API */\nexport type User = {\n\temail?: string;\n\tname?: string;\n\tphone?: string;\n};\n\n/** User extended details from Descope API */\nexport type UserResponse = User & {\n\texternalIds: string[];\n\tuserId: string;\n\tverifiedEmail?: boolean;\n\tverifiedPhone?: boolean;\n};\n\n/** Login options to be added to the different authentication methods */\nexport type LoginOptions = {\n\tstepup?: boolean;\n\tmfa?: boolean;\n\tcustomClaims?: Record<string, any>;\n};\n\n/** Authentication info result from the various JWT validations */\nexport type JWTResponse = {\n\tsessionJwt: string;\n\trefreshJwt?: string;\n\tcookieDomain?: string;\n\tcookiePath?: string;\n\tcookieMaxAge?: number;\n\tcookieExpiration?: number;\n\tuser?: UserResponse;\n\tfirstSeen?: boolean;\n};\n\n/** Authentication info result from exchanging access keys for a session */\nexport type ExchangeAccessKeyResponse = {\n\tkeyId: string;\n\tsessionJwt: string;\n\texpiration: number;\n};\n\n/** The response returned from the various start webauthn functions */\nexport type WebAuthnStartResponse = {\n\ttransactionId: string;\n\toptions: string;\n\tcreate: boolean;\n};\n\n/** Enchanted link response */\nexport type EnchantedLinkResponse = {\n\t/** Pending reference URL to poll while waiting for user to click magic link */\n\tpendingRef: string;\n\t/** Link id, on which link the user should click */\n\tlinkId: string;\n};\n\n/** URL response to redirect user in case of OAuth or SSO */\nexport type URLResponse = {\n\turl: string;\n};\n\n/** TOTP response with the TOTP details */\nexport type TOTPResponse = {\n\tprovisioningURL: string;\n\timage: string;\n\tkey: string;\n};\n\n/** Phone delivery methods which are currently supported */\nexport enum DeliveryPhone {\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\n/** All delivery methods currently supported */\nexport enum DeliveryMethods {\n\temail = 'email',\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\n/** All flow execution statuses\n * - waiting - flow execution is waiting for user interaction\n * - running - flow execution is currently running\n * - completed - flow execution completed successfully\n * - failed - flow execution failed\n */\nexport enum FlowStatus {\n\twaiting = 'waiting',\n\trunning = 'running',\n\tcompleted = 'completed',\n\tfailed = 'failed'\n}\n\n/** All flow response action\n * - screen - next action is to render screen\n * - poll - next action is poll for next after timeout\n * - redirect - next action is to redirect (redirection details in 'redirect' attribute)\n * - webauthnCreate/webauthnGet - next action is to prompt webauthn (details in 'webauthn' attribute)\n * - none - no next action\n */\nexport type FlowAction = 'screen' | 'poll' | 'redirect' | 'webauthnCreate' | 'webauthnGet' | 'none';\n\n/** Flow response with flow execution details */\nexport type FlowResponse = {\n\t// current execution identifier\n\texecutionId: string;\n\t// current step identifier\n\tstepId: string;\n\t// flow execution status\n\tstatus: FlowStatus;\n\t// the next required action\n\taction: FlowAction;\n\t// screen data - if action is 'screen'\n\tscreen?: {\n\t\t// screen identifier\n\t\tid: string;\n\t\t// extra dynamic state required for rendering screen\n\t\tstate: Record<string, any>;\n\t};\n\t// redirect data - if action is 'redirect'\n\tredirect?: {\n\t\turl: string;\n\t};\n\t// webauthn data - if action is one of 'webauthnCreate', 'webauthnGet'\n\twebauthn?: {\n\t\ttransactionId: string;\n\t\toptions: string;\n\t\tcreate: boolean;\n\t};\n\t// authentication information response, if response is authenticated\n\tauthInfo?: JWTResponse;\n};\n\nexport type Options = {\n\tredirectUrl?: string;\n\ttenant?: string;\n\tdeviceInfo?: DeviceInfo;\n\tlastUser?: LocalUser;\n};\n\nexport type ResponseData = Record<string, any>;\n\n/**\n * Response from our SDK calls which includes the result (ok, code, error).\n * The relevant data is provided in the more specific interfaces extending SdkResponse.\n */\nexport type SdkResponse<T extends ResponseData> = {\n\tcode?: number;\n\tok: boolean;\n\tresponse?: Response;\n\terror?: {\n\t\tmessage: string;\n\t\terrorCode: string;\n\t\terrorDescription?: string;\n\t};\n\tdata?: T;\n};\n\n/** Different delivery method */\nexport type Deliveries<T extends SdkFn> = Record<DeliveryMethods, T>;\n\n/** The different routes (actions) we can do */\nexport enum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify'\n}\n\n/** Logger type that supports the given levels (debug, log, error) */\nexport type Logger = Pick<Console, 'debug' | 'log' | 'error'>;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { pathJoin, transformResponse } from './helpers';\nimport {\n\tDeliveryMethods,\n\tDeliveries,\n\tUser,\n\tSdkResponse,\n\tJWTResponse,\n\tDeliveryPhone,\n\tLoginOptions\n} from './types';\nimport { stringEmail, stringNonEmpty, stringPhone, withValidations } from './validations';\n\nenum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify',\n\tupdatePhone = 'updatePhone'\n}\n\ntype VerifyFn = (identifier: string, code: string) => Promise<SdkResponse<JWTResponse>>;\ntype SignInFn = (identifier: string) => Promise<SdkResponse<never>>;\ntype SignUpFn = (identifier: string, user?: User) => Promise<SdkResponse<never>>;\ntype UpdatePhoneFn = (identifier: string, phone: string) => Promise<SdkResponse<never>>;\n\ntype Otp = {\n\t[Routes.verify]: Deliveries<VerifyFn>;\n\t[Routes.signIn]: Deliveries<SignInFn>;\n\t[Routes.signUp]: Deliveries<SignUpFn>;\n\t[Routes.updatePhone]: Deliveries<UpdatePhoneFn>;\n};\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignValidations = withValidations(identifierValidations);\nconst withUpdatePhoneValidations = withValidations(identifierValidations, stringPhone('phone'));\nconst withUpdateEmailValidations = withValidations(identifierValidations, stringEmail('email'));\n\nconst withOtp = (httpClient: HttpClient) => ({\n\tverify: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withVerifyValidations(\n\t\t\t\t(externalId: string, code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.verify, delivery), { code, externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.verify],\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(\n\t\t\t\t\texternalId: string,\n\t\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\t\ttoken?: string\n\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\tpathJoin(apiPaths.otp.signIn, delivery),\n\t\t\t\t\t\t\t{ externalId, loginOptions },\n\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, user?: User): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUp, delivery), { externalId, user })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUpOrIn, delivery), { externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, token?: string): Promise<SdkResponse<never>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.otp.update.email, { externalId: identifier, email }, { token })\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, token?: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.otp.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as Otp[Routes.updatePhone]\n\t}\n});\n\nexport default withOtp;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(\n\tidentifierValidations,\n\tstringPhone('phone'),\n\turiValidations\n);\nexport const withUpdateEmailValidations = withValidations(\n\tidentifierValidations,\n\tstringEmail('email'),\n\turiValidations\n);\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport {\n\tDeliveryMethods,\n\tDeliveryPhone,\n\tSdkResponse,\n\tJWTResponse,\n\tUser,\n\tLoginOptions\n} from '../types';\nimport { MagicLink, Routes } from './types';\nimport {\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations,\n\twithUpdatePhoneValidations\n} from './validations';\n\nconst withMagicLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.magicLink.verify, { token }))\n\t),\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(\n\t\t\t\t\texternalId: string,\n\t\t\t\t\tURI: string,\n\t\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\t\ttoken?: string\n\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.signIn, delivery),\n\t\t\t\t\t\t\t{ externalId, URI, loginOptions },\n\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUp, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tuser\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUpOrIn, delivery), { externalId, URI })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\temail: string,\n\t\t\t\turi: string,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.magicLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(\n\t\t\t\t\t\texternalId: string,\n\t\t\t\t\t\tphone: string,\n\t\t\t\t\t\turi: string,\n\t\t\t\t\t\ttoken?: string\n\t\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone, URI: uri },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as MagicLink[Routes.updatePhone]\n\t}\n});\n\nexport default withMagicLink;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(\n\tidentifierValidations,\n\tstringPhone('phone'),\n\turiValidations\n);\nexport const withUpdateEmailValidations = withValidations(\n\tidentifierValidations,\n\tstringEmail('email'),\n\turiValidations\n);\n","import {\n\tapiPaths,\n\tENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS,\n\tENCHANTED_LINK_MIN_POLLING_INTERVAL_MS\n} from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport {\n\tDeliveryMethods,\n\tSdkResponse,\n\tJWTResponse,\n\tEnchantedLinkResponse,\n\tUser,\n\tLoginOptions\n} from '../types';\nimport { EnchantedLink, Routes, WaitForSessionConfig } from './types';\nimport {\n\twithWaitForSessionValidations,\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations\n} from './validations';\n\n/** Polling configuration with defaults and normalizing checks */\nconst normalizeWaitForSessionConfig = ({\n\tpollingIntervalMs = ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS,\n\ttimeoutMs = ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS\n} = {}) => ({\n\tpollingIntervalMs: Math.max(\n\t\tpollingIntervalMs || ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS,\n\t\tENCHANTED_LINK_MIN_POLLING_INTERVAL_MS\n\t),\n\ttimeoutMs: Math.min(\n\t\ttimeoutMs || ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS,\n\t\tENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS\n\t)\n});\n\nconst withEnchantedLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse<never>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.enchantedLink.verify, { token }))\n\t),\n\n\tsignIn: withSignValidations(\n\t\t(\n\t\t\texternalId: string,\n\t\t\tURI: string,\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(\n\t\t\t\t\tpathJoin(apiPaths.enchantedLink.signIn, DeliveryMethods.email),\n\t\t\t\t\t{\n\t\t\t\t\t\texternalId,\n\t\t\t\t\t\tURI,\n\t\t\t\t\t\tloginOptions\n\t\t\t\t\t},\n\t\t\t\t\t{ token }\n\t\t\t\t)\n\t\t\t)\n\t) as EnchantedLink[Routes.signIn],\n\n\tsignUpOrIn: withSignValidations(\n\t\t(externalId: string, URI: string): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(pathJoin(apiPaths.enchantedLink.signUpOrIn, DeliveryMethods.email), {\n\t\t\t\t\texternalId,\n\t\t\t\t\tURI\n\t\t\t\t})\n\t\t\t)\n\t) as EnchantedLink[Routes.signIn],\n\n\tsignUp: withSignValidations(\n\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(pathJoin(apiPaths.enchantedLink.signUp, DeliveryMethods.email), {\n\t\t\t\t\texternalId,\n\t\t\t\t\tURI,\n\t\t\t\t\tuser\n\t\t\t\t})\n\t\t\t)\n\t) as EnchantedLink[Routes.signUp],\n\n\twaitForSession: withWaitForSessionValidations(\n\t\t(pendingRef: string, config?: WaitForSessionConfig): Promise<SdkResponse<JWTResponse>> =>\n\t\t\tnew Promise((resolve) => {\n\t\t\t\tconst { pollingIntervalMs, timeoutMs } = normalizeWaitForSessionConfig(config);\n\t\t\t\tlet timeout: NodeJS.Timeout;\n\t\t\t\tconst interval = setInterval(async () => {\n\t\t\t\t\tconst resp = await httpClient.post(apiPaths.enchantedLink.session, { pendingRef });\n\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\t\tresolve(transformResponse(Promise.resolve(resp)));\n\t\t\t\t\t}\n\t\t\t\t}, pollingIntervalMs);\n\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: `Session polling timeout exceeded: ${timeoutMs}ms`,\n\t\t\t\t\t\t\terrorCode: '0'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tok: false\n\t\t\t\t\t});\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t}, timeoutMs);\n\t\t\t})\n\t),\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\temail: string,\n\t\t\t\turi: string,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.enchantedLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withEnchantedLink;\n","import { SdkResponse, URLResponse, JWTResponse } from '../types';\n\nenum OAuthProviders {\n\tfacebook = 'facebook',\n\tgithub = 'github',\n\tgoogle = 'google',\n\tmicrosoft = 'microsoft',\n\tgitlab = 'gitlab',\n\tapple = 'apple'\n}\n\ntype StartFn = <B extends { redirect: boolean }>(\n\tredirectURL?: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse<URLResponse>>;\ntype VerifyFn = (code: string) => Promise<SdkResponse<JWTResponse>>;\n\ntype Providers<T> = Record<keyof typeof OAuthProviders, T>;\n\nexport type Oauth = {\n\tstart: Providers<StartFn>;\n\tverify: Providers<VerifyFn>;\n};\n\nexport { OAuthProviders };\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { SdkResponse, URLResponse, JWTResponse, LoginOptions } from '../types';\nimport { transformResponse } from '../helpers';\nimport { Oauth, OAuthProviders } from './types';\nimport { stringNonEmpty, withValidations } from '../validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\nconst withOauth = (httpClient: HttpClient) => ({\n\tstart: Object.keys(OAuthProviders).reduce(\n\t\t(acc, provider) => ({\n\t\t\t...acc,\n\t\t\t// eslint-disable-next-line consistent-return\n\t\t\t[provider]: async (\n\t\t\t\tredirectUrl?: string,\n\t\t\t\t{ redirect = false } = {},\n\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\ttoken?: string\n\t\t\t) => {\n\t\t\t\tconst resp = await httpClient.post(apiPaths.oauth.start, loginOptions || {}, {\n\t\t\t\t\tqueryParams: { provider, ...(redirectUrl && { redirectURL: redirectUrl }) },\n\t\t\t\t\ttoken\n\t\t\t\t});\n\t\t\t\tif (!redirect || !resp.ok)\n\t\t\t\t\treturn transformResponse<SdkResponse<URLResponse>>(Promise.resolve(resp));\n\n\t\t\t\tconst { url } = await resp.json();\n\t\t\t\twindow.location.href = url;\n\t\t\t}\n\t\t}),\n\t\t{}\n\t) as Oauth['start'],\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.oauth.exchange, { code }))\n\t)\n});\n\nexport default withOauth;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { FlowResponse, Options, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('flowId'));\nconst withNextValidations = withValidations(\n\tstringNonEmpty('executionId'),\n\tstringNonEmpty('stepId'),\n\tstringNonEmpty('interactionId')\n);\n\nconst withFlow = (httpClient: HttpClient) => ({\n\tstart: withStartValidations(\n\t\t(\n\t\t\tflowId: string,\n\t\t\toptions?: Options,\n\t\t\tinteractionId?: string,\n\t\t\tinput?: Record<string, FormDataEntryValue>\n\t\t): Promise<SdkResponse<FlowResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.flow.start, { flowId, options, interactionId, input })\n\t\t\t)\n\t),\n\tnext: withNextValidations(\n\t\t(\n\t\t\texecutionId: string,\n\t\t\tstepId: string,\n\t\t\tinteractionId: string,\n\t\t\tinput?: Record<string, FormDataEntryValue>\n\t\t): Promise<SdkResponse<FlowResponse>> => {\n\t\t\treturn transformResponse(\n\t\t\t\thttpClient.post(apiPaths.flow.next, { executionId, stepId, interactionId, input })\n\t\t\t);\n\t\t}\n\t)\n});\n\nexport default withFlow;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { SdkResponse, URLResponse, JWTResponse, LoginOptions } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('tenant'));\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\ntype StartFn = <B extends { redirect: boolean }>(\n\ttenantNameOrEmail: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse<URLResponse>>;\n\nconst withSaml = (httpClient: HttpClient) => ({\n\t// eslint-disable-next-line consistent-return\n\tstart: withStartValidations(\n\t\tasync (\n\t\t\ttenantNameOrEmail: string,\n\t\t\tredirectUrl?: string,\n\t\t\t{ redirect = false } = {},\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t) => {\n\t\t\tconst resp = await httpClient.post(apiPaths.saml.start, loginOptions || {}, {\n\t\t\t\tqueryParams: { tenant: tenantNameOrEmail, redirectURL: redirectUrl },\n\t\t\t\ttoken\n\t\t\t});\n\n\t\t\tif (!redirect || !resp.ok) return transformResponse(Promise.resolve(resp));\n\n\t\t\tconst { url } = await resp.json();\n\t\t\twindow.location.href = url;\n\t\t}\n\t) as StartFn,\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.saml.exchange, { code }))\n\t)\n});\n\nexport default withSaml;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { User, SdkResponse, JWTResponse, TOTPResponse, LoginOptions } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignUpValidations = withValidations(identifierValidations);\nconst withUpdateValidations = withValidations(identifierValidations);\n\nconst withTotp = (httpClient: HttpClient) => ({\n\tsignUp: withSignUpValidations(\n\t\t(identifier: string, user?: User): Promise<SdkResponse<TOTPResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.totp.signUp, { externalId: identifier, user }))\n\t),\n\n\tverify: withVerifyValidations(\n\t\t(\n\t\t\tidentifier: string,\n\t\t\tcode: string,\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(\n\t\t\t\t\tapiPaths.totp.verify,\n\t\t\t\t\t{ externalId: identifier, code, loginOptions },\n\t\t\t\t\t{ token }\n\t\t\t\t)\n\t\t\t)\n\t),\n\n\tupdate: withUpdateValidations(\n\t\t(identifier: string, token?: string): Promise<SdkResponse<TOTPResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.totp.update, { externalId: identifier }, { token })\n\t\t\t)\n\t)\n});\n\nexport default withTotp;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport {\n\tSdkResponse,\n\tResponseData,\n\tLoginOptions,\n\tJWTResponse,\n\tWebAuthnStartResponse\n} from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst originValidations = stringNonEmpty('origin');\n\nconst withSignUpStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('name')\n);\nconst withSignInStartValidations = withValidations(identifierValidations, originValidations);\nconst withUpdateStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('token')\n);\nconst withFinishValidations = withValidations(\n\tstringNonEmpty('transactionId'),\n\tstringNonEmpty('response')\n);\n\nconst withWebauthn = (httpClient: HttpClient) => ({\n\tsignUp: {\n\t\tstart: withSignUpStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\tname: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.start, {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\texternalId: identifier,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t},\n\t\t\t\t\t\torigin\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.signIn.start,\n\t\t\t\t\t\t{ externalId: identifier, origin, loginOptions },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signIn.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignUpOrIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(identifier: string, origin: string): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUpOrIn.start, { externalId: identifier, origin })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tupdate: {\n\t\tstart: withUpdateStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\ttoken: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.update.start,\n\t\t\t\t\t\t{ externalId: identifier, origin },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<ResponseData>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.update.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withWebauthn;\n","import withAccessKeys from './accesskey';\nimport withOtp from './otp';\nimport { HttpClient } from '../httpClient';\nimport { isJwtExpired, getJwtPermissions, getJwtRoles, transformResponse } from './helpers';\nimport { stringNonEmpty, withValidations } from './validations';\nimport withMagicLink from './magicLink';\nimport withEnchantedLink from './enchantedLink';\nimport { apiPaths } from '../constants';\nimport withOauth from './oauth';\nimport withFlow from './flow';\nimport withSaml from './saml';\nimport withTotp from './totp';\nimport withWebauthn from './webauthn';\nimport { UserResponse, JWTResponse } from './types';\n\nconst withJwtValidations = withValidations(stringNonEmpty('token'));\n\n/** Returns Descope SDK with all available operations */\nexport default (httpClient: HttpClient) => ({\n\taccessKey: withAccessKeys(httpClient),\n\totp: withOtp(httpClient),\n\tmagicLink: withMagicLink(httpClient),\n\tenchantedLink: withEnchantedLink(httpClient),\n\toauth: withOauth(httpClient),\n\tsaml: withSaml(httpClient),\n\ttotp: withTotp(httpClient),\n\twebauthn: withWebauthn(httpClient),\n\tflow: withFlow(httpClient),\n\trefresh: (token?: string) =>\n\t\ttransformResponse<JWTResponse>(httpClient.post(apiPaths.refresh, {}, { token })),\n\tlogout: (token?: string) =>\n\t\ttransformResponse<never>(httpClient.post(apiPaths.logout, {}, { token })),\n\tlogoutAll: (token?: string) =>\n\t\ttransformResponse<never>(httpClient.post(apiPaths.logoutAll, {}, { token })),\n\tme: (token?: string) => transformResponse<UserResponse>(httpClient.get(apiPaths.me, { token })),\n\tisJwtExpired: withJwtValidations(isJwtExpired),\n\tgetJwtPermissions: withJwtValidations(getJwtPermissions),\n\tgetJwtRoles: withJwtValidations(getJwtRoles),\n\thttpClient\n});\n","import { DEFAULT_BASE_API_URL } from './constants';\nimport createHttpClient from './httpClient';\nimport { AfterRequest, BeforeRequest, Hooks } from './httpClient/types';\nimport createSdk from './sdk';\nimport { Logger } from './sdk/types';\nimport { stringNonEmpty, withValidations } from './sdk/validations';\nimport { hasPathValue } from './sdk/validations/validators';\n\ntype SdkConfig = {\n\tprojectId: string;\n\tlogger?: Logger;\n\tbaseUrl?: string;\n\thooks?: Hooks;\n\tcookiePolicy?: RequestCredentials;\n};\n\n/** Validate we have non-empty project id */\nconst withSdkConfigValidations = withValidations([\n\thasPathValue('projectId', stringNonEmpty('projectId'))\n]);\n\n/** Add the ability to pass multiple hooks instead of one when creating an SDK instance */\nconst withMultipleHooks =\n\t<T extends object>(createSdk: (config: SdkConfig) => T) =>\n\t(\n\t\tconfig: Omit<SdkConfig, 'hooks'> & {\n\t\t\thooks?: {\n\t\t\t\tbeforeRequest?: BeforeRequest | BeforeRequest[];\n\t\t\t\tafterRequest?: AfterRequest | AfterRequest[];\n\t\t\t};\n\t\t}\n\t) => {\n\t\tconst beforeRequestHooks = [].concat(config.hooks?.beforeRequest || []);\n\t\tconst afterRequestHooks = [].concat(config.hooks?.afterRequest || []);\n\n\t\tconst beforeRequest: BeforeRequest = (config) =>\n\t\t\tbeforeRequestHooks?.reduce((acc, fn) => fn(acc), config);\n\t\tconst afterRequest: AfterRequest = (req, res) => {\n\t\t\tafterRequestHooks?.forEach((fn) => fn(req, res?.clone()));\n\t\t};\n\n\t\treturn createSdk({ ...config, hooks: { beforeRequest, afterRequest } });\n\t};\n\n/** Descope SDK client */\nexport default withSdkConfigValidations(\n\twithMultipleHooks(({ projectId, logger, baseUrl, hooks, cookiePolicy }: SdkConfig) =>\n\t\tcreateSdk(\n\t\t\tcreateHttpClient({\n\t\t\t\tbaseUrl: baseUrl || DEFAULT_BASE_API_URL,\n\t\t\t\tprojectId,\n\t\t\t\tlogger,\n\t\t\t\thooks,\n\t\t\t\tcookiePolicy\n\t\t\t})\n\t\t)\n\t)\n);\n","import createSdk from './createSdk';\nimport { HTTPMethods, RequestConfig } from './httpClient/types';\nimport { OAuthProviders } from './sdk/oauth/types';\nimport { DeliveryMethods } from './sdk/types';\n\n/** Descope SDK client with delivery methods enum.\n *\n * Please see full documentation at {@link https://docs.descope.com/guides Descope Docs}\n * @example Usage\n *\n * ```js\n * import descopeSdk from '@descope/core-js-sdk';\n *\n * const myProjectId = 'xxx';\n * const sdk = descopeSdk({ projectId: myProjectId });\n *\n * const userIdentifier = 'identifier';\n * sdk.otp.signIn.email(userIdentifier);\n * const jwtResponse = sdk.otp.verify.email(userIdentifier, codeFromEmail);\n * ```\n */\nexport default Object.assign(createSdk, { DeliveryMethods });\n\nexport { transformResponse } from './sdk/helpers';\nexport type {\n\tEnchantedLinkResponse,\n\tExchangeAccessKeyResponse,\n\tFlowAction,\n\tFlowResponse,\n\tFlowStatus,\n\tJWTResponse,\n\tResponseData,\n\tSdkResponse,\n\tTOTPResponse,\n\tURLResponse,\n\tUserResponse\n} from './sdk/types';\nexport * from './utils';\nexport type { SdkFnWrapper } from './utils';\nexport type { HTTPMethods, RequestConfig };\n\n/** Type to restrict to valid delivery methods */\nexport type DeliveryMethod = keyof typeof DeliveryMethods;\n/** Type to restrict to valid OAuth providers */\nexport type OAuthProvider = keyof typeof OAuthProviders;\n","import { SdkConfig } from '../types';\n\nexport { default as wrapWith } from './wrapWith';\nexport type { SdkFnWrapper } from './wrapWith/types';\n\n/**\n * Add hooks to an existing core-sdk config\n */\nexport const addHooksToConfig = <Config extends SdkConfig>(\n\tconfig: Config,\n\thooks: Config['hooks']\n): Config => {\n\t['beforeRequest', 'afterRequest'].reduce((acc, key) => {\n\t\tacc[key] = [].concat(config.hooks?.[key] || []).concat(hooks?.[key] || []);\n\n\t\treturn acc;\n\t}, (config.hooks ??= {}));\n\n\treturn config;\n};\n","/* eslint-disable import/exports-last */\nimport { ResponseData } from '../../sdk/types';\nimport { SdkFnWrapper, ReplacePaths, SdkFnsPaths } from './types';\n\n/**\n * A wrapper function that allows to wrap multiple Sdk function\n * @param obj: The Sdk instance you want to wrap\n * @param paths: A readonly list of paths of the functions you want to wrap\n * @param wrapper: Your wrapper function, it should gets an Sdk function and return a new Sdk function\n * @returns a mutated instance of the Sdk with updated type definitions based on your wrapper return type\n *\n * Usage example:\n *\n * // Assuming this is our SDK instance\n * const sdk = {\n * me: (token) => {...}\n * flow: {\n * start: (...params) => {...}\n * next: (...params) => {...}\n * }\n * ...\n * }\n *\n * // This is our wrapper\n * const wrapper = (sdkFn) => async (...args) => {\n * const sdkResponse = await sdkFn(...args)\n *\n * // Modify return value\n * return {...sdkResponse, data: {...sdkResponse.data, myCustomAttribute: 'hello'}}\n * }\n *\n * // And those are the paths we want to wrap\n * const paths = ['flow.start', 'flow.next'] as const // You MUST add as const!\n *\n * // We can wrap our SDK functions with the wrapper we created in this way\n * const newlyTypedSdk = wrapWith(sdk, paths, wrapper)\n *\n * Now the 2 wrapped functions will have the updated type based on the wrapper return value\n */\n\nconst wrapWith = <\n\tObj extends object,\n\tPaths extends ReadonlyArray<SdkFnsPaths<Obj>>,\n\tWrapperData extends ResponseData\n>(\n\tobj: Obj,\n\tpaths: Paths,\n\twrapper: SdkFnWrapper<WrapperData>\n): ReplacePaths<Obj, Paths, WrapperData> => {\n\tpaths.forEach((path) => {\n\t\tconst sections = path.split('.');\n\t\tlet section = sections.shift();\n\t\tlet currentRef: Record<string, any> = obj;\n\n\t\twhile (sections.length > 0) {\n\t\t\tcurrentRef = currentRef[section];\n\n\t\t\tif (!section || !currentRef) {\n\t\t\t\tthrow Error(`Invalid path \"${path}\", \"${section}\" is missing or has no value`);\n\t\t\t}\n\n\t\t\tsection = sections.shift();\n\t\t}\n\n\t\tif (typeof currentRef[section] !== 'function') {\n\t\t\tthrow Error(`\"${path}\" is not a function`);\n\t\t}\n\t\tconst origFn = currentRef[section];\n\t\tcurrentRef[section] = wrapper(origFn);\n\t});\n\n\treturn obj as any;\n};\n\nexport default wrapWith;\n"],"names":["apiPaths","exchange","verify","signIn","signUp","update","email","phone","signUpOrIn","session","start","finish","next","httpLogBuilder","msg","headers","headersObj","entries","Object","fromEntries","Headers","JSON","stringify","this","body","Body","url","Url","toString","method","Method","title","Title","status","Status","build","keys","flatMap","key","join","createFetchLogger","logger","receivedFetch","fetchInternal","fetch","Error","async","args","log","buildRequestLog","resp","ok","respBody","clone","text","Promise","resolve","json","parse","statusText","buildResponseLog","HTTPMethods","mergeHeaders","sources","reduce","acc","source","srcArr","Array","isArray","from","getSrcArr","_","value","serializeBody","undefined","createAuthorizationHeader","projectId","token","bearer","Authorization","createHttpClient","baseUrl","baseConfig","hooks","cookiePolicy","fetchWithLogger","sendRequest","config","requestConfig","beforeRequest","path","queryParams","res","URL","search","URLSearchParams","urlBuilder","baseHeaders","credentials","afterRequest","get","post","put","delete","getJwtAuthorizationItems","tenant","claim","claims","parseJwt","tenants","_a","items","jwtDecode","isJwtExpired","exp","Date","getTime","getJwtPermissions","getJwtRoles","pathJoin","replace","transformResponse","response","transform","ret","code","data","error","createValidator","rule","defaultMsg","val","createValidation","validators","validate","forEach","validator","errMsg","regexMatch","regex","test","validateEmail","validatePhone","isEmail","isPhone","isNotEmpty","min","length","isString","withValidations","argsRules","fn","rulesArr","i","stringNonEmpty","fieldName","stringEmail","stringPhone","withExchangeValidations","withAccessKeys","httpClient","accessKey","DeliveryPhone","DeliveryMethods","FlowStatus","Routes","identifierValidations","withVerifyValidations","withSignValidations","withUpdatePhoneValidations","withUpdateEmailValidations","withOtp","delivery","assign","externalId","loginOptions","user","identifier","uriValidations","withMagicLink","URI","uri","withWaitForSessionValidations","withEnchantedLink","waitForSession","pendingRef","pollingIntervalMs","timeoutMs","Math","max","normalizeWaitForSessionConfig","timeout","interval","setInterval","clearInterval","clearTimeout","setTimeout","message","errorCode","OAuthProviders","withOauth","provider","redirectUrl","redirect","redirectURL","window","location","href","withStartValidations","withNextValidations","withFlow","flowId","options","interactionId","input","executionId","stepId","withSaml","tenantNameOrEmail","withSignUpValidations","withUpdateValidations","withTotp","originValidations","withSignUpStartValidations","withSignInStartValidations","withUpdateStartValidations","withFinishValidations","withWebauthn","origin","name","transactionId","withJwtValidations","rules","createSdk","validatePathValue","withSdkConfigValidations","beforeRequestHooks","concat","afterRequestHooks","_b","req","withMultipleHooks","otp","magicLink","enchantedLink","oauth","saml","totp","webauthn","flow","refresh","logout","logoutAll","me","index","obj","paths","wrapper","sections","split","section","shift","currentRef","origFn"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -140,6 +140,18 @@ declare type Deliveries<T extends SdkFn$1> = Record<DeliveryMethods, T>;
|
|
|
140
140
|
/** Logger type that supports the given levels (debug, log, error) */
|
|
141
141
|
declare type Logger = Pick<Console, 'debug' | 'log' | 'error'>;
|
|
142
142
|
|
|
143
|
+
declare type EnchantedLinkSignInFn = (identifier: string, uri: string) => Promise<SdkResponse<EnchantedLinkResponse>>;
|
|
144
|
+
declare type EnchantedLinkSignUpFn = (identifier: string, uri: string, user?: User) => Promise<SdkResponse<EnchantedLinkResponse>>;
|
|
145
|
+
/** Polling configuration for session waiting */
|
|
146
|
+
declare type WaitForSessionConfig = {
|
|
147
|
+
pollingIntervalMs: number;
|
|
148
|
+
timeoutMs: number;
|
|
149
|
+
};
|
|
150
|
+
|
|
151
|
+
declare type SignInFn = (identifier: string, uri: string) => Promise<SdkResponse<never>>;
|
|
152
|
+
declare type SignUpFn = (identifier: string, uri: string, user?: User) => Promise<SdkResponse<never>>;
|
|
153
|
+
declare type UpdatePhoneFn = (identifier: string, phone: string) => Promise<SdkResponse<never>>;
|
|
154
|
+
|
|
143
155
|
/** Request configuration including headers, query params and token */
|
|
144
156
|
declare type HttpClientReqConfig = {
|
|
145
157
|
headers?: HeadersInit;
|
|
@@ -182,18 +194,6 @@ declare type Hooks = {
|
|
|
182
194
|
afterRequest?: AfterRequest;
|
|
183
195
|
};
|
|
184
196
|
|
|
185
|
-
declare type EnchantedLinkSignInFn = (identifier: string, uri: string) => Promise<SdkResponse<EnchantedLinkResponse>>;
|
|
186
|
-
declare type EnchantedLinkSignUpFn = (identifier: string, uri: string, user?: User) => Promise<SdkResponse<EnchantedLinkResponse>>;
|
|
187
|
-
/** Polling configuration for session waiting */
|
|
188
|
-
declare type WaitForSessionConfig = {
|
|
189
|
-
pollingIntervalMs: number;
|
|
190
|
-
timeoutMs: number;
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
declare type SignInFn = (identifier: string, uri: string) => Promise<SdkResponse<never>>;
|
|
194
|
-
declare type SignUpFn = (identifier: string, uri: string, user?: User) => Promise<SdkResponse<never>>;
|
|
195
|
-
declare type UpdatePhoneFn = (identifier: string, phone: string) => Promise<SdkResponse<never>>;
|
|
196
|
-
|
|
197
197
|
declare enum OAuthProviders {
|
|
198
198
|
facebook = "facebook",
|
|
199
199
|
github = "github",
|
|
@@ -203,14 +203,6 @@ declare enum OAuthProviders {
|
|
|
203
203
|
apple = "apple"
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
-
declare type SdkConfig = {
|
|
207
|
-
projectId: string;
|
|
208
|
-
logger?: Logger;
|
|
209
|
-
baseUrl?: string;
|
|
210
|
-
hooks?: Hooks;
|
|
211
|
-
cookiePolicy?: RequestCredentials;
|
|
212
|
-
};
|
|
213
|
-
|
|
214
206
|
/** Transform the Promise Response to our internal SdkResponse implementation
|
|
215
207
|
* @param response The Response promise from fetch
|
|
216
208
|
* @param transform Optionally transform the response JSON to another type
|
|
@@ -273,7 +265,18 @@ declare const wrapWith: <Obj extends object, Paths extends readonly SdkFnsPaths<
|
|
|
273
265
|
/**
|
|
274
266
|
* Add hooks to an existing core-sdk config
|
|
275
267
|
*/
|
|
276
|
-
declare const addHooksToConfig: <Config extends
|
|
268
|
+
declare const addHooksToConfig: <Config extends Omit<{
|
|
269
|
+
projectId: string;
|
|
270
|
+
logger?: Logger;
|
|
271
|
+
baseUrl?: string;
|
|
272
|
+
hooks?: Hooks;
|
|
273
|
+
cookiePolicy?: RequestCredentials;
|
|
274
|
+
}, "hooks"> & {
|
|
275
|
+
hooks?: {
|
|
276
|
+
beforeRequest?: BeforeRequest | BeforeRequest[];
|
|
277
|
+
afterRequest?: AfterRequest | AfterRequest[];
|
|
278
|
+
};
|
|
279
|
+
}>(config: Config, hooks: Config["hooks"]) => Config;
|
|
277
280
|
|
|
278
281
|
/** Descope SDK client with delivery methods enum.
|
|
279
282
|
*
|
|
@@ -291,7 +294,13 @@ declare const addHooksToConfig: <Config extends SdkConfig>(config: Config, hooks
|
|
|
291
294
|
* const jwtResponse = sdk.otp.verify.email(userIdentifier, codeFromEmail);
|
|
292
295
|
* ```
|
|
293
296
|
*/
|
|
294
|
-
declare const _default: ((config: Omit<
|
|
297
|
+
declare const _default: ((config: Omit<{
|
|
298
|
+
projectId: string;
|
|
299
|
+
logger?: Logger;
|
|
300
|
+
baseUrl?: string;
|
|
301
|
+
hooks?: Hooks;
|
|
302
|
+
cookiePolicy?: RequestCredentials;
|
|
303
|
+
}, "hooks"> & {
|
|
295
304
|
hooks?: {
|
|
296
305
|
beforeRequest?: BeforeRequest | BeforeRequest[];
|
|
297
306
|
afterRequest?: AfterRequest | AfterRequest[];
|
|
@@ -366,7 +375,6 @@ declare const _default: ((config: Omit<SdkConfig, "hooks"> & {
|
|
|
366
375
|
exchange: (code: string) => Promise<SdkResponse<JWTResponse>>;
|
|
367
376
|
};
|
|
368
377
|
saml: {
|
|
369
|
-
/** Add the ability to pass multiple hooks instead of one when creating an SDK instance */
|
|
370
378
|
start: <B_1 extends {
|
|
371
379
|
redirect: boolean;
|
|
372
380
|
}>(tenantNameOrEmail: string, config?: B_1) => Promise<B_1 extends {
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"jwt-decode";import t from"lodash.get";var n={exchange:"/v1/auth/accesskey/exchange"},s={verify:"/v1/auth/otp/verify",signIn:"/v1/auth/otp/signin",signUp:"/v1/auth/otp/signup",update:{email:"/v1/auth/otp/update/email",phone:"/v1/auth/otp/update/phone"},signUpOrIn:"/v1/auth/otp/signup-in"},a={verify:"/v1/auth/magiclink/verify",signIn:"/v1/auth/magiclink/signin",signUp:"/v1/auth/magiclink/signup",update:{email:"/v1/auth/magiclink/update/email",phone:"/v1/auth/magiclink/update/phone"},signUpOrIn:"/v1/auth/magiclink/signup-in"},i={verify:"/v1/auth/enchantedlink/verify",signIn:"/v1/auth/enchantedlink/signin",signUp:"/v1/auth/enchantedlink/signup",session:"/v1/auth/enchantedlink/pending-session",update:{email:"/v1/auth/enchantedlink/update/email"},signUpOrIn:"/v1/auth/enchantedlink/signup-in"},o={start:"/v1/auth/oauth/authorize",exchange:"/v1/auth/oauth/exchange"},r={start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},u={verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/user/totp/update"},c={signUp:{start:"/v1/auth/webauthn/signup/start",finish:"/v1/auth/webauthn/signup/finish"},signIn:{start:"/v1/auth/webauthn/signin/start",finish:"/v1/auth/webauthn/signin/finish"},signUpOrIn:{start:"/v1/auth/webauthn/signup-in/start"},update:{start:"v1/auth/webauthn/update/start",finish:"/v1/auth/webauthn/update/finish"}},p="/v1/auth/refresh",d="/v1/auth/logout",l="/v1/auth/logoutall",h="/v1/auth/me",g={start:"/v1/flow/start",next:"/v1/flow/next"};const v=()=>{const e={};return{headers(t){const n="function"==typeof t.entries?Object.fromEntries(t.entries()):t;return e.Headers=JSON.stringify(n),this},body(t){return e.Body=t,this},url(t){return e.Url=t.toString(),this},method(t){return e.Method=t,this},title(t){return e.Title=t,this},status(t){return e.Status=t,this},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}},f=(e,t)=>{const n=t||fetch;if(!n)throw new Error("fetch is not defined");return e?async(...t)=>{e.log((e=>v().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const s=await n(...t);return e[s.ok?"log":"error"](await(async e=>{const t=await(e.clone?e.clone().text():e.text());return e.text=()=>Promise.resolve(t),e.json=()=>Promise.resolve(JSON.parse(t)),v().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})(s)),s}:n};var m;!function(e){e.get="GET",e.delete="DELETE",e.post="POST",e.put="PUT"}(m||(m={}));const k=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,s])=>(e[n]=s,e)),e),e}),{})),I=e=>void 0===e?void 0:JSON.stringify(e),b=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},y=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:a,cookiePolicy:i})=>{const o=f(s),r=async s=>{const r=(null==a?void 0:a.beforeRequest)?a.beforeRequest(s):s,{path:u,body:c,headers:p,queryParams:d,method:l,token:h}=r,g=await o((({path:e,baseUrl:t,queryParams:n})=>{const s=new URL(e,t);return n&&(s.search=new URLSearchParams(n).toString()),s})({path:u,baseUrl:e,queryParams:d}),{headers:k(b(t,h),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"0.0.41-alpha.37"},(null==n?void 0:n.baseHeaders)||{},p),method:l,body:I(c),credentials:i||"include"});return(null==a?void 0:a.afterRequest)&&a.afterRequest(s,null==g?void 0:g.clone()),g};return{get:(e,{headers:t,queryParams:n,token:s}={})=>r({path:e,headers:t,queryParams:n,body:void 0,method:m.get,token:s}),post:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:m.post,token:a}),put:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:m.put,token:a}),delete:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:m.delete,token:a}),hooks:a}};function O(e,t,n){var s;let a=w(e);t&&(a=null===(s=a.tenants)||void 0===s?void 0:s[t]);const i=a[n];return Array.isArray(i)?i:[]}function w(t){if("string"!=typeof t||!t)throw new Error("Invalid token provided");return e(t)}function x(e){const{exp:t}=w(e);return(new Date).getTime()/1e3>t}function j(e,t){return O(e,t,"permissions")}function U(e,t){return O(e,t,"roles")}const P=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function R(e,t){const n=await e,s={code:n.status,ok:n.ok,response:n},a=await n.clone().json();return n.ok?s.data=t?t(a):a:s.error=a,s}const q=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),$=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),E=e=>t=>e.test(t),M=E(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),S=E(/^\+[1-9]{1}[0-9]{3,14}$/),A=q(M,'"{val}" is not a valid email'),T=q(S,'"{val}" is not a valid phone number'),L=q((z=1,e=>e.length>=z),"Minimum length is 1");var z;const J=q((e=>"string"==typeof e),"Input is not a string"),H=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>$(...e).validate(n[t]))),t(...n)),C=e=>[J(`"${e}" must be a string`),L(`"${e}" must not be empty`)],D=e=>[J(`"${e}" must be a string`),A()],N=e=>[J(`"${e}" must be a string`),T()],Z=H(C("accessKey")),B=e=>({exchange:Z((t=>R(e.post(n.exchange,{},{token:t}))))});var K,F,G,_,Q;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(K||(K={})),function(e){e.email="email",e.sms="sms",e.whatsapp="whatsapp"}(F||(F={})),function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(G||(G={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify"}(_||(_={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify",e.updatePhone="updatePhone"}(Q||(Q={}));const V=C("identifier"),W=H(V,C("code")),X=H(V),Y=H(V,N("phone")),ee=H(V,D("email")),te=e=>({verify:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:W(((t,a)=>R(e.post(P(s.verify,n),{code:a,externalId:t}))))})),{}),signIn:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:X(((t,a,i)=>R(e.post(P(s.signIn,n),{externalId:t,loginOptions:a},{token:i}))))})),{}),signUp:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:X(((t,a)=>R(e.post(P(s.signUp,n),{externalId:t,user:a}))))})),{}),signUpOrIn:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:X((t=>R(e.post(P(s.signUpOrIn,n),{externalId:t}))))})),{}),update:{email:ee(((t,n,a)=>R(e.post(s.update.email,{externalId:t,email:n},{token:a})))),phone:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Y(((t,a,i)=>R(e.post(P(s.update.phone,n),{externalId:t,phone:a},{token:i}))))})),{})}}),ne=C("identifier"),se=C("uri"),ae=H(C("token")),ie=H(ne,se),oe=H(ne,N("phone"),se),re=H(ne,D("email"),se),ue=e=>({verify:ae((t=>R(e.post(a.verify,{token:t})))),signIn:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ie(((t,s,i,o)=>R(e.post(P(a.signIn,n),{externalId:t,URI:s,loginOptions:i},{token:o}))))})),{}),signUp:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ie(((t,s,i)=>R(e.post(P(a.signUp,n),{externalId:t,URI:s,user:i}))))})),{}),signUpOrIn:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ie(((t,s)=>R(e.post(P(a.signUpOrIn,n),{externalId:t,URI:s}))))})),{}),update:{email:re(((t,n,s,i)=>R(e.post(a.update.email,{externalId:t,email:n,URI:s},{token:i})))),phone:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:oe(((t,s,i,o)=>R(e.post(P(a.update.phone,n),{externalId:t,phone:s,URI:i},{token:o}))))})),{})}}),ce=C("identifier"),pe=C("uri"),de=H(C("token")),le=H(ce,pe),he=H(C("pendingRef")),ge=H(ce,D("email"),pe),ve=e=>({verify:de((t=>R(e.post(i.verify,{token:t})))),signIn:le(((t,n,s,a)=>R(e.post(P(i.signIn,F.email),{externalId:t,URI:n,loginOptions:s},{token:a})))),signUpOrIn:le(((t,n)=>R(e.post(P(i.signUpOrIn,F.email),{externalId:t,URI:n})))),signUp:le(((t,n,s)=>R(e.post(P(i.signUp,F.email),{externalId:t,URI:n,user:s})))),waitForSession:he(((t,n)=>new Promise((s=>{const{pollingIntervalMs:a,timeoutMs:o}=(({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||1e3,1e3),timeoutMs:Math.min(t||6e5,6e5)}))(n);let r;const u=setInterval((async()=>{const n=await e.post(i.session,{pendingRef:t});n.ok&&(clearInterval(u),r&&clearTimeout(r),s(R(Promise.resolve(n))))}),a);r=setTimeout((()=>{s({error:{message:`Session polling timeout exceeded: ${o}ms`,errorCode:"0"},ok:!1}),clearInterval(u)}),o)})))),update:{email:ge(((t,n,s,a)=>R(e.post(i.update.email,{externalId:t,email:n,URI:s},{token:a}))))}});var fe;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple"}(fe||(fe={}));const me=H(C("code")),ke=e=>({start:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:async(t,{redirect:s=!1}={},a,i)=>{const r=await e.post(o.start,a||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i});if(!s||!r.ok)return R(Promise.resolve(r));const{url:u}=await r.json();window.location.href=u}})),{}),exchange:me((t=>R(e.post(o.exchange,{code:t}))))}),Ie=H(C("flowId")),be=H(C("executionId"),C("stepId"),C("interactionId")),ye=e=>({start:Ie(((t,n,s,a)=>R(e.post(g.start,{flowId:t,options:n,interactionId:s,input:a})))),next:be(((t,n,s,a)=>R(e.post(g.next,{executionId:t,stepId:n,interactionId:s,input:a}))))}),Oe=H(C("tenant")),we=H(C("code")),xe=e=>({start:Oe((async(t,n,{redirect:s=!1}={},a,i)=>{const o=await e.post(r.start,a||{},{queryParams:{tenant:t,redirectURL:n},token:i});if(!s||!o.ok)return R(Promise.resolve(o));const{url:u}=await o.json();window.location.href=u})),exchange:we((t=>R(e.post(r.exchange,{code:t}))))}),je=C("identifier"),Ue=H(je,C("code")),Pe=H(je),Re=H(je),qe=e=>({signUp:Pe(((t,n)=>R(e.post(u.signUp,{externalId:t,user:n})))),verify:Ue(((t,n,s,a)=>R(e.post(u.verify,{externalId:t,code:n,loginOptions:s},{token:a})))),update:Re(((t,n)=>R(e.post(u.update,{externalId:t},{token:n}))))}),$e=C("identifier"),Ee=C("origin"),Me=H($e,Ee,C("name")),Se=H($e,Ee),Ae=H($e,Ee,C("token")),Te=H(C("transactionId"),C("response")),Le=e=>({signUp:{start:Me(((t,n,s)=>R(e.post(c.signUp.start,{user:{externalId:t,name:s},origin:n})))),finish:Te(((t,n)=>R(e.post(c.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Se(((t,n,s,a)=>R(e.post(c.signIn.start,{externalId:t,origin:n,loginOptions:s},{token:a})))),finish:Te(((t,n)=>R(e.post(c.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:Se(((t,n)=>R(e.post(c.signUpOrIn.start,{externalId:t,origin:n}))))},update:{start:Ae(((t,n,s)=>R(e.post(c.update.start,{externalId:t,origin:n},{token:s})))),finish:Te(((t,n)=>R(e.post(c.update.finish,{transactionId:t,response:n}))))}}),ze=H(C("token"));const Je=(e,t,n)=>(t.forEach((t=>{const s=t.split(".");let a=s.shift(),i=e;for(;s.length>0;){if(i=i[a],!a||!i)throw Error(`Invalid path "${t}", "${a}" is missing or has no value`);a=s.shift()}if("function"!=typeof i[a])throw Error(`"${t}" is not a function`);const o=i[a];i[a]=n(o)})),e),He=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,s)=>{var a;return n[s]=[].concat((null===(a=e.hooks)||void 0===a?void 0:a[s])||[]).concat((null==t?void 0:t[s])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e};var Ce,De;let Ne=H([(Ce="projectId",De=C("projectId"),q(((e,n)=>s=>$(...n).validate(t(s,e)))(Ce,De))())])((e=>t=>{var n,s;const a=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]),i=[].concat((null===(s=t.hooks)||void 0===s?void 0:s.afterRequest)||[]);return e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>null==a?void 0:a.reduce(((e,t)=>t(e)),e),afterRequest:(e,t)=>{null==i||i.forEach((n=>n(e,null==t?void 0:t.clone())))}}}))})((({projectId:e,logger:t,baseUrl:n,hooks:s,cookiePolicy:a})=>{return i=y({baseUrl:n||"https://api.descope.com",projectId:e,logger:t,hooks:s,cookiePolicy:a}),{accessKey:B(i),otp:te(i),magicLink:ue(i),enchantedLink:ve(i),oauth:ke(i),saml:xe(i),totp:qe(i),webauthn:Le(i),flow:ye(i),refresh:e=>R(i.post(p,{},{token:e})),logout:e=>R(i.post(d,{},{token:e})),logoutAll:e=>R(i.post(l,{},{token:e})),me:e=>R(i.get(h,{token:e})),isJwtExpired:ze(x),getJwtPermissions:ze(j),getJwtRoles:ze(U),httpClient:i};var i})));var Ze=Object.assign(Ne,{DeliveryMethods:F});export{He as addHooksToConfig,Ze as default,R as transformResponse,Je as wrapWith};
|
|
1
|
+
import e from"jwt-decode";import t from"lodash.get";var n={exchange:"/v1/auth/accesskey/exchange"},s={verify:"/v1/auth/otp/verify",signIn:"/v1/auth/otp/signin",signUp:"/v1/auth/otp/signup",update:{email:"/v1/auth/otp/update/email",phone:"/v1/auth/otp/update/phone"},signUpOrIn:"/v1/auth/otp/signup-in"},a={verify:"/v1/auth/magiclink/verify",signIn:"/v1/auth/magiclink/signin",signUp:"/v1/auth/magiclink/signup",update:{email:"/v1/auth/magiclink/update/email",phone:"/v1/auth/magiclink/update/phone"},signUpOrIn:"/v1/auth/magiclink/signup-in"},i={verify:"/v1/auth/enchantedlink/verify",signIn:"/v1/auth/enchantedlink/signin",signUp:"/v1/auth/enchantedlink/signup",session:"/v1/auth/enchantedlink/pending-session",update:{email:"/v1/auth/enchantedlink/update/email"},signUpOrIn:"/v1/auth/enchantedlink/signup-in"},o={start:"/v1/auth/oauth/authorize",exchange:"/v1/auth/oauth/exchange"},r={start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},u={verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/user/totp/update"},c={signUp:{start:"/v1/auth/webauthn/signup/start",finish:"/v1/auth/webauthn/signup/finish"},signIn:{start:"/v1/auth/webauthn/signin/start",finish:"/v1/auth/webauthn/signin/finish"},signUpOrIn:{start:"/v1/auth/webauthn/signup-in/start"},update:{start:"v1/auth/webauthn/update/start",finish:"/v1/auth/webauthn/update/finish"}},p="/v1/auth/refresh",d="/v1/auth/logout",l="/v1/auth/logoutall",h="/v1/auth/me",g={start:"/v1/flow/start",next:"/v1/flow/next"};const v=()=>{const e={};return{headers(t){const n="function"==typeof t.entries?Object.fromEntries(t.entries()):t;return e.Headers=JSON.stringify(n),this},body(t){return e.Body=t,this},url(t){return e.Url=t.toString(),this},method(t){return e.Method=t,this},title(t){return e.Title=t,this},status(t){return e.Status=t,this},build:()=>Object.keys(e).flatMap((t=>e[t]?[`${"Title"!==t?`${t}: `:""}${e[t]}`]:[])).join("\n")}},f=(e,t)=>{const n=t||fetch;if(!n)throw new Error("fetch is not defined");return e?async(...t)=>{e.log((e=>v().title("Request").url(e[0]).method(e[1].method).headers(e[1].headers).body(e[1].body).build())(t));const s=await n(...t);return e[s.ok?"log":"error"](await(async e=>{const t=await(e.clone?e.clone().text():e.text());return e.text=()=>Promise.resolve(t),e.json=()=>Promise.resolve(JSON.parse(t)),v().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})(s)),s}:n};var m;!function(e){e.get="GET",e.delete="DELETE",e.post="POST",e.put="PUT"}(m||(m={}));const k=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,s])=>(e[n]=s,e)),e),e}),{})),I=e=>void 0===e?void 0:JSON.stringify(e),b=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},y=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:a,cookiePolicy:i})=>{const o=f(s),r=async s=>{const r=(null==a?void 0:a.beforeRequest)?a.beforeRequest(s):s,{path:u,body:c,headers:p,queryParams:d,method:l,token:h}=r,g=await o((({path:e,baseUrl:t,queryParams:n})=>{const s=new URL(e,t);return n&&(s.search=new URLSearchParams(n).toString()),s})({path:u,baseUrl:e,queryParams:d}),{headers:k(b(t,h),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"0.0.41-alpha.38"},(null==n?void 0:n.baseHeaders)||{},p),method:l,body:I(c),credentials:i||"include"});return(null==a?void 0:a.afterRequest)&&a.afterRequest(s,null==g?void 0:g.clone()),g};return{get:(e,{headers:t,queryParams:n,token:s}={})=>r({path:e,headers:t,queryParams:n,body:void 0,method:m.get,token:s}),post:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:m.post,token:a}),put:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:m.put,token:a}),delete:(e,t,{headers:n,queryParams:s,token:a}={})=>r({path:e,headers:n,queryParams:s,body:t,method:m.delete,token:a}),hooks:a}};function O(e,t,n){var s;let a=w(e);t&&(a=null===(s=a.tenants)||void 0===s?void 0:s[t]);const i=a[n];return Array.isArray(i)?i:[]}function w(t){if("string"!=typeof t||!t)throw new Error("Invalid token provided");return e(t)}function x(e){const{exp:t}=w(e);return(new Date).getTime()/1e3>t}function j(e,t){return O(e,t,"permissions")}function U(e,t){return O(e,t,"roles")}const P=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function R(e,t){const n=await e,s={code:n.status,ok:n.ok,response:n},a=await n.clone().json();return n.ok?s.data=t?t(a):a:s.error=a,s}const q=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),$=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),E=e=>t=>e.test(t),M=E(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),S=E(/^\+[1-9]{1}[0-9]{3,14}$/),A=q(M,'"{val}" is not a valid email'),T=q(S,'"{val}" is not a valid phone number'),L=q((z=1,e=>e.length>=z),"Minimum length is 1");var z;const J=q((e=>"string"==typeof e),"Input is not a string"),H=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>$(...e).validate(n[t]))),t(...n)),C=e=>[J(`"${e}" must be a string`),L(`"${e}" must not be empty`)],D=e=>[J(`"${e}" must be a string`),A()],N=e=>[J(`"${e}" must be a string`),T()],Z=H(C("accessKey")),B=e=>({exchange:Z((t=>R(e.post(n.exchange,{},{token:t}))))});var K,F,G,_,Q;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(K||(K={})),function(e){e.email="email",e.sms="sms",e.whatsapp="whatsapp"}(F||(F={})),function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(G||(G={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify"}(_||(_={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify",e.updatePhone="updatePhone"}(Q||(Q={}));const V=C("identifier"),W=H(V,C("code")),X=H(V),Y=H(V,N("phone")),ee=H(V,D("email")),te=e=>({verify:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:W(((t,a)=>R(e.post(P(s.verify,n),{code:a,externalId:t}))))})),{}),signIn:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:X(((t,a,i)=>R(e.post(P(s.signIn,n),{externalId:t,loginOptions:a},{token:i}))))})),{}),signUp:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:X(((t,a)=>R(e.post(P(s.signUp,n),{externalId:t,user:a}))))})),{}),signUpOrIn:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:X((t=>R(e.post(P(s.signUpOrIn,n),{externalId:t}))))})),{}),update:{email:ee(((t,n,a)=>R(e.post(s.update.email,{externalId:t,email:n},{token:a})))),phone:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Y(((t,a,i)=>R(e.post(P(s.update.phone,n),{externalId:t,phone:a},{token:i}))))})),{})}}),ne=C("identifier"),se=C("uri"),ae=H(C("token")),ie=H(ne,se),oe=H(ne,N("phone"),se),re=H(ne,D("email"),se),ue=e=>({verify:ae((t=>R(e.post(a.verify,{token:t})))),signIn:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ie(((t,s,i,o)=>R(e.post(P(a.signIn,n),{externalId:t,URI:s,loginOptions:i},{token:o}))))})),{}),signUp:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ie(((t,s,i)=>R(e.post(P(a.signUp,n),{externalId:t,URI:s,user:i}))))})),{}),signUpOrIn:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ie(((t,s)=>R(e.post(P(a.signUpOrIn,n),{externalId:t,URI:s}))))})),{}),update:{email:re(((t,n,s,i)=>R(e.post(a.update.email,{externalId:t,email:n,URI:s},{token:i})))),phone:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:oe(((t,s,i,o)=>R(e.post(P(a.update.phone,n),{externalId:t,phone:s,URI:i},{token:o}))))})),{})}}),ce=C("identifier"),pe=C("uri"),de=H(C("token")),le=H(ce,pe),he=H(C("pendingRef")),ge=H(ce,D("email"),pe),ve=e=>({verify:de((t=>R(e.post(i.verify,{token:t})))),signIn:le(((t,n,s,a)=>R(e.post(P(i.signIn,F.email),{externalId:t,URI:n,loginOptions:s},{token:a})))),signUpOrIn:le(((t,n)=>R(e.post(P(i.signUpOrIn,F.email),{externalId:t,URI:n})))),signUp:le(((t,n,s)=>R(e.post(P(i.signUp,F.email),{externalId:t,URI:n,user:s})))),waitForSession:he(((t,n)=>new Promise((s=>{const{pollingIntervalMs:a,timeoutMs:o}=(({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||1e3,1e3),timeoutMs:Math.min(t||6e5,6e5)}))(n);let r;const u=setInterval((async()=>{const n=await e.post(i.session,{pendingRef:t});n.ok&&(clearInterval(u),r&&clearTimeout(r),s(R(Promise.resolve(n))))}),a);r=setTimeout((()=>{s({error:{message:`Session polling timeout exceeded: ${o}ms`,errorCode:"0"},ok:!1}),clearInterval(u)}),o)})))),update:{email:ge(((t,n,s,a)=>R(e.post(i.update.email,{externalId:t,email:n,URI:s},{token:a}))))}});var fe;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple"}(fe||(fe={}));const me=H(C("code")),ke=e=>({start:Object.keys(fe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:async(t,{redirect:s=!1}={},a,i)=>{const r=await e.post(o.start,a||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i});if(!s||!r.ok)return R(Promise.resolve(r));const{url:u}=await r.json();window.location.href=u}})),{}),exchange:me((t=>R(e.post(o.exchange,{code:t}))))}),Ie=H(C("flowId")),be=H(C("executionId"),C("stepId"),C("interactionId")),ye=e=>({start:Ie(((t,n,s,a)=>R(e.post(g.start,{flowId:t,options:n,interactionId:s,input:a})))),next:be(((t,n,s,a)=>R(e.post(g.next,{executionId:t,stepId:n,interactionId:s,input:a}))))}),Oe=H(C("tenant")),we=H(C("code")),xe=e=>({start:Oe((async(t,n,{redirect:s=!1}={},a,i)=>{const o=await e.post(r.start,a||{},{queryParams:{tenant:t,redirectURL:n},token:i});if(!s||!o.ok)return R(Promise.resolve(o));const{url:u}=await o.json();window.location.href=u})),exchange:we((t=>R(e.post(r.exchange,{code:t}))))}),je=C("identifier"),Ue=H(je,C("code")),Pe=H(je),Re=H(je),qe=e=>({signUp:Pe(((t,n)=>R(e.post(u.signUp,{externalId:t,user:n})))),verify:Ue(((t,n,s,a)=>R(e.post(u.verify,{externalId:t,code:n,loginOptions:s},{token:a})))),update:Re(((t,n)=>R(e.post(u.update,{externalId:t},{token:n}))))}),$e=C("identifier"),Ee=C("origin"),Me=H($e,Ee,C("name")),Se=H($e,Ee),Ae=H($e,Ee,C("token")),Te=H(C("transactionId"),C("response")),Le=e=>({signUp:{start:Me(((t,n,s)=>R(e.post(c.signUp.start,{user:{externalId:t,name:s},origin:n})))),finish:Te(((t,n)=>R(e.post(c.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Se(((t,n,s,a)=>R(e.post(c.signIn.start,{externalId:t,origin:n,loginOptions:s},{token:a})))),finish:Te(((t,n)=>R(e.post(c.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:Se(((t,n)=>R(e.post(c.signUpOrIn.start,{externalId:t,origin:n}))))},update:{start:Ae(((t,n,s)=>R(e.post(c.update.start,{externalId:t,origin:n},{token:s})))),finish:Te(((t,n)=>R(e.post(c.update.finish,{transactionId:t,response:n}))))}}),ze=H(C("token"));var Je,He;var Ce=H([(Je="projectId",He=C("projectId"),q(((e,n)=>s=>$(...n).validate(t(s,e)))(Je,He))())])((e=>t=>{var n,s;const a=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]),i=[].concat((null===(s=t.hooks)||void 0===s?void 0:s.afterRequest)||[]);return e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>null==a?void 0:a.reduce(((e,t)=>t(e)),e),afterRequest:(e,t)=>{null==i||i.forEach((n=>n(e,null==t?void 0:t.clone())))}}}))})((({projectId:e,logger:t,baseUrl:n,hooks:s,cookiePolicy:a})=>{return i=y({baseUrl:n||"https://api.descope.com",projectId:e,logger:t,hooks:s,cookiePolicy:a}),{accessKey:B(i),otp:te(i),magicLink:ue(i),enchantedLink:ve(i),oauth:ke(i),saml:xe(i),totp:qe(i),webauthn:Le(i),flow:ye(i),refresh:e=>R(i.post(p,{},{token:e})),logout:e=>R(i.post(d,{},{token:e})),logoutAll:e=>R(i.post(l,{},{token:e})),me:e=>R(i.get(h,{token:e})),isJwtExpired:ze(x),getJwtPermissions:ze(j),getJwtRoles:ze(U),httpClient:i};var i})));const De=(e,t,n)=>(t.forEach((t=>{const s=t.split(".");let a=s.shift(),i=e;for(;s.length>0;){if(i=i[a],!a||!i)throw Error(`Invalid path "${t}", "${a}" is missing or has no value`);a=s.shift()}if("function"!=typeof i[a])throw Error(`"${t}" is not a function`);const o=i[a];i[a]=n(o)})),e),Ne=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,s)=>{var a;return n[s]=[].concat((null===(a=e.hooks)||void 0===a?void 0:a[s])||[]).concat((null==t?void 0:t[s])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e};var Ze=Object.assign(Ce,{DeliveryMethods:F});export{Ne as addHooksToConfig,Ze as default,R as transformResponse,De as wrapWith};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/constants/apiPaths.ts","../src/constants/index.ts","../src/httpClient/helpers/createFetchLogger.ts","../src/httpClient/types.ts","../src/httpClient/urlBuilder.ts","../src/httpClient/utils.ts","../src/httpClient/index.ts","../src/sdk/helpers/index.ts","../src/sdk/validations/core.ts","../src/sdk/validations/validators.ts","../src/sdk/validations/index.ts","../src/sdk/accesskey.ts","../src/sdk/types.ts","../src/sdk/otp.ts","../src/sdk/magicLink/validations.ts","../src/sdk/magicLink/index.ts","../src/sdk/enchantedLink/validations.ts","../src/sdk/enchantedLink/index.ts","../src/sdk/oauth/types.ts","../src/sdk/oauth/index.ts","../src/sdk/flow.ts","../src/sdk/saml.ts","../src/sdk/totp.ts","../src/sdk/webauthn.ts","../src/sdk/index.ts","../src/utils/wrapWith/index.ts","../src/utils/index.ts","../src/index.ts"],"sourcesContent":["/** API paths for the Descope service APIs */\nexport default {\n\taccessKey: {\n\t\texchange: '/v1/auth/accesskey/exchange'\n\t},\n\totp: {\n\t\tverify: '/v1/auth/otp/verify',\n\t\tsignIn: '/v1/auth/otp/signin',\n\t\tsignUp: '/v1/auth/otp/signup',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/otp/update/email',\n\t\t\tphone: '/v1/auth/otp/update/phone'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/otp/signup-in'\n\t},\n\tmagicLink: {\n\t\tverify: '/v1/auth/magiclink/verify',\n\t\tsignIn: '/v1/auth/magiclink/signin',\n\t\tsignUp: '/v1/auth/magiclink/signup',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/magiclink/update/email',\n\t\t\tphone: '/v1/auth/magiclink/update/phone'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/magiclink/signup-in'\n\t},\n\tenchantedLink: {\n\t\tverify: '/v1/auth/enchantedlink/verify',\n\t\tsignIn: '/v1/auth/enchantedlink/signin',\n\t\tsignUp: '/v1/auth/enchantedlink/signup',\n\t\tsession: '/v1/auth/enchantedlink/pending-session',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/enchantedlink/update/email'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/enchantedlink/signup-in'\n\t},\n\toauth: {\n\t\tstart: '/v1/auth/oauth/authorize',\n\t\texchange: '/v1/auth/oauth/exchange'\n\t},\n\tsaml: {\n\t\tstart: '/v1/auth/saml/authorize',\n\t\texchange: '/v1/auth/saml/exchange'\n\t},\n\ttotp: {\n\t\tverify: '/v1/auth/totp/verify',\n\t\tsignUp: '/v1/auth/totp/signup',\n\t\tupdate: '/v1/user/totp/update'\n\t},\n\twebauthn: {\n\t\tsignUp: {\n\t\t\tstart: '/v1/auth/webauthn/signup/start',\n\t\t\tfinish: '/v1/auth/webauthn/signup/finish'\n\t\t},\n\t\tsignIn: {\n\t\t\tstart: '/v1/auth/webauthn/signin/start',\n\t\t\tfinish: '/v1/auth/webauthn/signin/finish'\n\t\t},\n\t\tsignUpOrIn: {\n\t\t\tstart: '/v1/auth/webauthn/signup-in/start'\n\t\t},\n\t\tupdate: {\n\t\t\tstart: 'v1/auth/webauthn/update/start',\n\t\t\tfinish: '/v1/auth/webauthn/update/finish'\n\t\t}\n\t},\n\trefresh: '/v1/auth/refresh',\n\tlogout: '/v1/auth/logout',\n\tlogoutAll: '/v1/auth/logoutall',\n\tme: '/v1/auth/me',\n\tflow: {\n\t\tstart: '/v1/flow/start',\n\t\tnext: '/v1/flow/next'\n\t}\n};\n","/** Default Descope API URL */\nexport const DEFAULT_BASE_API_URL = 'https://api.descope.com';\n\n/** Default magic link polling interval for checking if the user clicked on the magic link */\nexport const ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS = 1000; // 1 second\n/** Default maximum time we are willing to wait for the magic link to be clicked */\nexport const ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS = 1000 * 60 * 10; // 10 minutes\n\n/** API paths to the Descope service */\nexport { default as apiPaths } from './apiPaths';\n","import { Logger } from '../../sdk/types';\n\n/** Build a log message around HTTP calls */\nconst httpLogBuilder = () => {\n\tconst msg: {\n\t\tTitle?: string;\n\t\tUrl?: string;\n\t\tMethod?: string;\n\t\tHeaders?: string;\n\t\tBody?: string;\n\t\tStatus?: string;\n\t} = {};\n\n\treturn {\n\t\theaders(headers: HeadersInit) {\n\t\t\tconst headersObj =\n\t\t\t\ttypeof headers.entries === 'function' ? Object.fromEntries(headers.entries()) : headers;\n\t\t\tmsg.Headers = JSON.stringify(headersObj);\n\n\t\t\treturn this;\n\t\t},\n\n\t\tbody(body: string) {\n\t\t\tmsg.Body = body;\n\t\t\treturn this;\n\t\t},\n\n\t\turl(url: URL | string) {\n\t\t\tmsg.Url = url.toString();\n\t\t\treturn this;\n\t\t},\n\n\t\tmethod(method: string) {\n\t\t\tmsg.Method = method;\n\t\t\treturn this;\n\t\t},\n\n\t\ttitle(title: string) {\n\t\t\tmsg.Title = title;\n\t\t\treturn this;\n\t\t},\n\n\t\tstatus(status: string) {\n\t\t\tmsg.Status = status;\n\t\t\treturn this;\n\t\t},\n\n\t\tbuild() {\n\t\t\treturn Object.keys(msg)\n\t\t\t\t.flatMap((key) => (msg[key] ? [`${key !== 'Title' ? `${key}: ` : ''}${msg[key]}`] : []))\n\t\t\t\t.join('\\n');\n\t\t}\n\t};\n};\n\ntype Fetch = typeof fetch;\n\n/** Log the request object */\nconst buildRequestLog = (args: Parameters<Fetch>) =>\n\thttpLogBuilder()\n\t\t.title('Request')\n\t\t.url(args[0])\n\t\t.method(args[1].method)\n\t\t.headers(args[1].headers)\n\t\t.body(args[1].body)\n\t\t.build();\n\n/** Log the response object */\nconst buildResponseLog = async (resp: Response) => {\n\tconst respBody = await (resp.clone ? resp.clone().text() : resp.text());\n\t// eslint-disable-next-line no-param-reassign\n\tresp.text = () => Promise.resolve(respBody);\n\t// eslint-disable-next-line no-param-reassign\n\tresp.json = () => Promise.resolve(JSON.parse(respBody));\n\n\treturn httpLogBuilder()\n\t\t.title('Response')\n\t\t.url(resp.url.toString())\n\t\t.status(`${resp.status} ${resp.statusText}`)\n\t\t.headers(resp.headers)\n\t\t.body(respBody)\n\t\t.build();\n};\n\n/**\n * Create a fetch with a logger wrapped around it if a logger is given\n * @param logger Logger to send the logs to\n * @param receivedFetch Fetch to be used or built-in fetch if not provided\n *\n */\nconst createFetchLogger = (logger: Logger, receivedFetch?: Fetch) => {\n\tconst fetchInternal = receivedFetch || fetch;\n\tif (!fetchInternal) throw new Error('fetch is not defined');\n\n\tif (!logger) return fetchInternal;\n\n\treturn async (...args: Parameters<Fetch>) => {\n\t\tlogger.log(buildRequestLog(args));\n\t\tconst resp = await fetchInternal(...args);\n\t\tlogger[resp.ok ? 'log' : 'error'](await buildResponseLog(resp));\n\n\t\treturn resp;\n\t};\n};\n\nexport default createFetchLogger;\n","import { Logger } from '../sdk/types';\n\n/** Request configuration including headers, query params and token */\ntype HttpClientReqConfig = {\n\theaders?: HeadersInit;\n\tqueryParams?: { [key: string]: string };\n\ttoken?: string;\n};\n\n/** HTTP methods we use in the client */\nexport enum HTTPMethods {\n\tget = 'GET',\n\tdelete = 'DELETE',\n\tpost = 'POST',\n\tput = 'PUT'\n}\n\n/** HTTP Client type that implements the HTTP method calls. Descopers can provide their own HTTP client although required only in rare cases. */\nexport type HttpClient = {\n\tget: (path: string, config?: HttpClientReqConfig) => Promise<Response>;\n\tpost: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\tput: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\tdelete: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\thooks?: Hooks;\n};\n\n/** Parameters for the HTTP client. Defaults should work for most cases. */\nexport type CreateHttpClientConfig = {\n\tbaseUrl: string;\n\tprojectId: string;\n\tbaseConfig?: { baseHeaders: HeadersInit };\n\tlogger?: Logger;\n\thooks?: Hooks;\n\tcookiePolicy?: RequestCredentials;\n};\n\n/** For before-request hook allows overriding parts of the request */\nexport type RequestConfig = {\n\tpath: string;\n\theaders?: HeadersInit;\n\tqueryParams?: { [key: string]: string };\n\tbody?: any;\n\tmethod: HTTPMethods;\n\ttoken?: string;\n};\n\nexport type BeforeRequest = (config: RequestConfig) => RequestConfig;\nexport type AfterRequest = (req: RequestConfig, res: Response) => void;\n\n/** Hooks before and after the request is made */\nexport type Hooks = {\n\tbeforeRequest?: BeforeRequest;\n\tafterRequest?: AfterRequest;\n};\n","/** Build URL with given parts */\nexport const urlBuilder = ({\n\tpath,\n\tbaseUrl,\n\tqueryParams\n}: {\n\tpath: string;\n\tbaseUrl: string;\n\tqueryParams: ConstructorParameters<typeof URLSearchParams>[0];\n}) => {\n\tconst url = new URL(path, baseUrl);\n\tif (queryParams) url.search = new URLSearchParams(queryParams).toString();\n\n\treturn url;\n};\n","/* eslint-disable no-nested-ternary */\n\nconst getSrcArr = (source: HeadersInit) => {\n\tif (Array.isArray(source)) return source;\n\tif (source instanceof Headers) return Array.from(source.entries());\n\tif (!source) return [];\n\treturn Object.entries(source);\n};\n\n/** Merge the given list of headers into a single Headers object */\nexport const mergeHeaders = (...sources: HeadersInit[]) =>\n\tnew Headers(\n\t\tsources.reduce((acc: Record<string, string>, source) => {\n\t\t\tconst srcArr = getSrcArr(source);\n\t\t\tsrcArr.reduce((_, [key, value]) => {\n\t\t\t\tacc[key] = value;\n\n\t\t\t\treturn acc;\n\t\t\t}, acc);\n\n\t\t\treturn acc;\n\t\t}, {})\n\t);\n\n/** Serialize the body to JSON */\nexport const serializeBody = (body: Record<string, any>) =>\n\tbody === undefined ? undefined : JSON.stringify(body);\n","import createFetchLogger from './helpers/createFetchLogger';\nimport { CreateHttpClientConfig, HttpClient, HTTPMethods, RequestConfig } from './types';\nimport { urlBuilder } from './urlBuilder';\nimport { mergeHeaders, serializeBody } from './utils';\n\n/**\n * Create a Bearer authorization header with concatenated projectId and token\n * @param projectId The project id to use in the header\n * @param token Token to be concatenated. Defaults to empty.\n */\nconst createAuthorizationHeader = (projectId: string, token = '') => {\n\tlet bearer = projectId;\n\tif (token) {\n\t\tbearer = bearer + ':' + token;\n\t}\n\treturn {\n\t\tAuthorization: `Bearer ${bearer}`\n\t};\n};\n\ndeclare const BUILD_VERSION: string;\n\n/**\n * Create descope custom headers\n */\nconst createDescopeHeaders = () => {\n\treturn {\n\t\t'x-descope-sdk-name': 'core-js',\n\t\t'x-descope-sdk-version': BUILD_VERSION\n\t};\n};\n\n/**\n * Create the HTTP client used to send HTTP requests to the Descope API\n *\n * @param CreateHttpClientConfig Configuration for the client\n */\nconst createHttpClient = ({\n\tbaseUrl,\n\tprojectId,\n\tbaseConfig,\n\tlogger,\n\thooks,\n\tcookiePolicy\n}: CreateHttpClientConfig): HttpClient => {\n\tconst fetchWithLogger = createFetchLogger(logger);\n\n\tconst sendRequest = async (config: RequestConfig) => {\n\t\tconst requestConfig = hooks?.beforeRequest ? hooks.beforeRequest(config) : config;\n\n\t\tconst { path, body, headers, queryParams, method, token } = requestConfig;\n\n\t\tconst res = await fetchWithLogger(urlBuilder({ path, baseUrl, queryParams }), {\n\t\t\theaders: mergeHeaders(\n\t\t\t\tcreateAuthorizationHeader(projectId, token),\n\t\t\t\tcreateDescopeHeaders(),\n\t\t\t\tbaseConfig?.baseHeaders || {},\n\t\t\t\theaders\n\t\t\t),\n\t\t\tmethod,\n\t\t\tbody: serializeBody(body),\n\t\t\tcredentials: cookiePolicy || 'include'\n\t\t});\n\n\t\tif (hooks?.afterRequest) {\n\t\t\thooks.afterRequest(config, res?.clone());\n\t\t}\n\n\t\treturn res;\n\t};\n\n\treturn {\n\t\tget: (path: string, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body: undefined, method: HTTPMethods.get, token }),\n\t\tpost: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.post, token }),\n\t\tput: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.put, token }),\n\t\tdelete: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.delete, token }),\n\t\thooks\n\t};\n};\n\nexport default createHttpClient;\nexport type { HttpClient };\n","import jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { ResponseData, SdkResponse } from '../types';\n\nfunction getJwtAuthorizationItems(token: string, tenant: string, claim: string): string[] {\n\tlet claims: any = parseJwt(token);\n\tif (tenant) {\n\t\tclaims = claims.tenants?.[tenant];\n\t}\n\tconst items = claims[claim];\n\treturn Array.isArray(items) ? items : [];\n}\n\nfunction parseJwt(token: string): JwtPayload {\n\tif (typeof token !== 'string' || !token) throw new Error('Invalid token provided');\n\treturn jwtDecode(token);\n}\n\n/**\n * Checks if the given JWT is still valid but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function isJwtExpired(token: string): boolean {\n\tconst { exp } = parseJwt(token);\n\tconst currentTime = new Date().getTime() / 1000;\n\treturn currentTime > exp;\n}\n\n/**\n * Returns the list of permissions granted in the given JWT but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function getJwtPermissions(token: string, tenant?: string): string[] {\n\treturn getJwtAuthorizationItems(token, tenant, 'permissions');\n}\n\n/**\n * Returns the list of roles specified in the given JWT but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function getJwtRoles(token: string, tenant?: string): string[] {\n\treturn getJwtAuthorizationItems(token, tenant, 'roles');\n}\n\n/** Joins path parts making sure there is only one path separator between parts */\nexport const pathJoin = (...args: string[]) => args.join('/').replace(/\\/{2,}/g, '/');\n\n/** Transform the Promise Response to our internal SdkResponse implementation\n * @param response The Response promise from fetch\n * @param transform Optionally transform the response JSON to another type\n */\nexport async function transformResponse<T extends ResponseData, S extends ResponseData = T>(\n\tresponse: Promise<Response>,\n\ttransform?: (data: T) => S\n): Promise<SdkResponse<S>> {\n\tconst resp = await response;\n\n\tconst ret: SdkResponse<S> = {\n\t\tcode: resp.status,\n\t\tok: resp.ok,\n\t\tresponse: resp\n\t};\n\n\tconst data = await resp.clone().json();\n\n\tif (!resp.ok) {\n\t\tret.error = data;\n\t} else if (transform) {\n\t\tret.data = transform(data);\n\t} else {\n\t\tret.data = <S>data;\n\t}\n\n\treturn ret;\n}\n","import { Validator, ValidationRule, MakeValidator } from './types';\n\nexport const createValidator =\n\t(rule: ValidationRule, defaultMsg?: string): MakeValidator =>\n\t(msg = defaultMsg) =>\n\t(val) =>\n\t\t!rule(val) ? msg.replace('{val}', val) : false;\n\nexport const createValidation = (...validators: Validator[]) => ({\n\tvalidate: (val: any) => {\n\t\tvalidators.forEach((validator) => {\n\t\t\tconst errMsg = validator(val);\n\t\t\tif (errMsg) throw new Error(errMsg);\n\t\t});\n\n\t\treturn true;\n\t}\n});\n","import get from 'lodash.get';\nimport { createValidation, createValidator } from './core';\nimport { Validator } from './types';\n\nconst regexMatch = (regex: RegExp) => (val: any) => regex.test(val);\n\nconst validateString = (val: any) => typeof val === 'string';\nconst validateEmail = regexMatch(\n\t/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/\n);\nconst validatePhone = regexMatch(/^\\+[1-9]{1}[0-9]{3,14}$/);\nconst validateMinLength = (min: number) => (val: any) => val.length >= min;\n// const validatePlainObject = (val: any) => !!val && Object.getPrototypeOf(val) === Object.prototype;\nconst validatePathValue = (path: string, rules: Validator[]) => (val: any) =>\n\tcreateValidation(...rules).validate(get(val, path));\n\nexport const isEmail = createValidator(validateEmail, '\"{val}\" is not a valid email');\nexport const isPhone = createValidator(validatePhone, '\"{val}\" is not a valid phone number');\nexport const isNotEmpty = createValidator(validateMinLength(1), 'Minimum length is 1');\nexport const isString = createValidator(validateString, 'Input is not a string');\n// export const isPlainObject = createValidator(validatePlainObject, 'Input is not a plain object');\nexport const hasPathValue = (path: string, rules: Validator[]) =>\n\tcreateValidator(validatePathValue(path, rules))();\n","import { createValidation } from './core';\nimport { Validator } from './types';\nimport { isEmail, isNotEmpty, isPhone, isString } from './validators';\n\n/**\n *\n * @params each parameter is an array of validators, those validators will be verified against the wrapped function argument which in the same place\n * @throws if any of the validators fails, an error with the relevant message will be thrown\n */\nexport const withValidations =\n\t(...argsRules: Validator[][]) =>\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\targsRules.forEach((rulesArr, i) => createValidation(...rulesArr).validate(args[i]));\n\n\t\treturn fn(...args);\n\t};\n\nexport const stringNonEmpty = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisNotEmpty(`\"${fieldName}\" must not be empty`)\n];\nexport const stringEmail = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisEmail()\n];\nexport const stringPhone = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisPhone()\n];\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { ExchangeAccessKeyResponse, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('accessKey'));\n\nconst withAccessKeys = (httpClient: HttpClient) => ({\n\texchange: withExchangeValidations(\n\t\t(accessKey: string): Promise<SdkResponse<ExchangeAccessKeyResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.accessKey.exchange, {}, { token: accessKey }))\n\t)\n});\n\nexport default withAccessKeys;\n","type SdkFn = (...args: any[]) => Promise<SdkResponse<ResponseData>>;\n\ntype DeviceInfo = {\n\twebAuthnSupport?: boolean;\n};\n\ntype LocalUser = {\n\tauthMethod?: AuthMethod;\n\toauthProvider?: string;\n\texternalId?: string;\n};\n\ntype AuthMethod = 'otp' | 'magiclink' | 'social' | 'sso' | 'webauthn' | 'totp';\n\n/** User base details from Descope API */\nexport type User = {\n\temail?: string;\n\tname?: string;\n\tphone?: string;\n};\n\n/** User extended details from Descope API */\nexport type UserResponse = User & {\n\texternalIds: string[];\n\tuserId: string;\n\tverifiedEmail?: boolean;\n\tverifiedPhone?: boolean;\n};\n\n/** Login options to be added to the different authentication methods */\nexport type LoginOptions = {\n\tstepup?: boolean;\n\tmfa?: boolean;\n\tcustomClaims?: Record<string, any>;\n};\n\n/** Authentication info result from the various JWT validations */\nexport type JWTResponse = {\n\tsessionJwt: string;\n\trefreshJwt?: string;\n\tcookieDomain?: string;\n\tcookiePath?: string;\n\tcookieMaxAge?: number;\n\tcookieExpiration?: number;\n\tuser?: UserResponse;\n\tfirstSeen?: boolean;\n};\n\n/** Authentication info result from exchanging access keys for a session */\nexport type ExchangeAccessKeyResponse = {\n\tkeyId: string;\n\tsessionJwt: string;\n\texpiration: number;\n};\n\n/** The response returned from the various start webauthn functions */\nexport type WebAuthnStartResponse = {\n\ttransactionId: string;\n\toptions: string;\n\tcreate: boolean;\n};\n\n/** Enchanted link response */\nexport type EnchantedLinkResponse = {\n\t/** Pending reference URL to poll while waiting for user to click magic link */\n\tpendingRef: string;\n\t/** Link id, on which link the user should click */\n\tlinkId: string;\n};\n\n/** URL response to redirect user in case of OAuth or SSO */\nexport type URLResponse = {\n\turl: string;\n};\n\n/** TOTP response with the TOTP details */\nexport type TOTPResponse = {\n\tprovisioningURL: string;\n\timage: string;\n\tkey: string;\n};\n\n/** Phone delivery methods which are currently supported */\nexport enum DeliveryPhone {\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\n/** All delivery methods currently supported */\nexport enum DeliveryMethods {\n\temail = 'email',\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\n/** All flow execution statuses\n * - waiting - flow execution is waiting for user interaction\n * - running - flow execution is currently running\n * - completed - flow execution completed successfully\n * - failed - flow execution failed\n */\nexport enum FlowStatus {\n\twaiting = 'waiting',\n\trunning = 'running',\n\tcompleted = 'completed',\n\tfailed = 'failed'\n}\n\n/** All flow response action\n * - screen - next action is to render screen\n * - poll - next action is poll for next after timeout\n * - redirect - next action is to redirect (redirection details in 'redirect' attribute)\n * - webauthnCreate/webauthnGet - next action is to prompt webauthn (details in 'webauthn' attribute)\n * - none - no next action\n */\nexport type FlowAction = 'screen' | 'poll' | 'redirect' | 'webauthnCreate' | 'webauthnGet' | 'none';\n\n/** Flow response with flow execution details */\nexport type FlowResponse = {\n\t// current execution identifier\n\texecutionId: string;\n\t// current step identifier\n\tstepId: string;\n\t// flow execution status\n\tstatus: FlowStatus;\n\t// the next required action\n\taction: FlowAction;\n\t// screen data - if action is 'screen'\n\tscreen?: {\n\t\t// screen identifier\n\t\tid: string;\n\t\t// extra dynamic state required for rendering screen\n\t\tstate: Record<string, any>;\n\t};\n\t// redirect data - if action is 'redirect'\n\tredirect?: {\n\t\turl: string;\n\t};\n\t// webauthn data - if action is one of 'webauthnCreate', 'webauthnGet'\n\twebauthn?: {\n\t\ttransactionId: string;\n\t\toptions: string;\n\t\tcreate: boolean;\n\t};\n\t// authentication information response, if response is authenticated\n\tauthInfo?: JWTResponse;\n};\n\nexport type Options = {\n\tredirectUrl?: string;\n\ttenant?: string;\n\tdeviceInfo?: DeviceInfo;\n\tlastUser?: LocalUser;\n};\n\nexport type ResponseData = Record<string, any>;\n\n/**\n * Response from our SDK calls which includes the result (ok, code, error).\n * The relevant data is provided in the more specific interfaces extending SdkResponse.\n */\nexport type SdkResponse<T extends ResponseData> = {\n\tcode?: number;\n\tok: boolean;\n\tresponse?: Response;\n\terror?: {\n\t\tmessage: string;\n\t\terrorCode: string;\n\t\terrorDescription?: string;\n\t};\n\tdata?: T;\n};\n\n/** Different delivery method */\nexport type Deliveries<T extends SdkFn> = Record<DeliveryMethods, T>;\n\n/** The different routes (actions) we can do */\nexport enum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify'\n}\n\n/** Logger type that supports the given levels (debug, log, error) */\nexport type Logger = Pick<Console, 'debug' | 'log' | 'error'>;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { pathJoin, transformResponse } from './helpers';\nimport {\n\tDeliveryMethods,\n\tDeliveries,\n\tUser,\n\tSdkResponse,\n\tJWTResponse,\n\tDeliveryPhone,\n\tLoginOptions\n} from './types';\nimport { stringEmail, stringNonEmpty, stringPhone, withValidations } from './validations';\n\nenum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify',\n\tupdatePhone = 'updatePhone'\n}\n\ntype VerifyFn = (identifier: string, code: string) => Promise<SdkResponse<JWTResponse>>;\ntype SignInFn = (identifier: string) => Promise<SdkResponse<never>>;\ntype SignUpFn = (identifier: string, user?: User) => Promise<SdkResponse<never>>;\ntype UpdatePhoneFn = (identifier: string, phone: string) => Promise<SdkResponse<never>>;\n\ntype Otp = {\n\t[Routes.verify]: Deliveries<VerifyFn>;\n\t[Routes.signIn]: Deliveries<SignInFn>;\n\t[Routes.signUp]: Deliveries<SignUpFn>;\n\t[Routes.updatePhone]: Deliveries<UpdatePhoneFn>;\n};\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignValidations = withValidations(identifierValidations);\nconst withUpdatePhoneValidations = withValidations(identifierValidations, stringPhone('phone'));\nconst withUpdateEmailValidations = withValidations(identifierValidations, stringEmail('email'));\n\nconst withOtp = (httpClient: HttpClient) => ({\n\tverify: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withVerifyValidations(\n\t\t\t\t(externalId: string, code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.verify, delivery), { code, externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.verify],\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(\n\t\t\t\t\texternalId: string,\n\t\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\t\ttoken?: string\n\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\tpathJoin(apiPaths.otp.signIn, delivery),\n\t\t\t\t\t\t\t{ externalId, loginOptions },\n\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, user?: User): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUp, delivery), { externalId, user })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUpOrIn, delivery), { externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, token?: string): Promise<SdkResponse<never>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.otp.update.email, { externalId: identifier, email }, { token })\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, token?: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.otp.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as Otp[Routes.updatePhone]\n\t}\n});\n\nexport default withOtp;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(\n\tidentifierValidations,\n\tstringPhone('phone'),\n\turiValidations\n);\nexport const withUpdateEmailValidations = withValidations(\n\tidentifierValidations,\n\tstringEmail('email'),\n\turiValidations\n);\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport {\n\tDeliveryMethods,\n\tDeliveryPhone,\n\tSdkResponse,\n\tJWTResponse,\n\tUser,\n\tLoginOptions\n} from '../types';\nimport { MagicLink, Routes } from './types';\nimport {\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations,\n\twithUpdatePhoneValidations\n} from './validations';\n\nconst withMagicLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.magicLink.verify, { token }))\n\t),\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(\n\t\t\t\t\texternalId: string,\n\t\t\t\t\tURI: string,\n\t\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\t\ttoken?: string\n\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.signIn, delivery),\n\t\t\t\t\t\t\t{ externalId, URI, loginOptions },\n\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUp, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tuser\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUpOrIn, delivery), { externalId, URI })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\temail: string,\n\t\t\t\turi: string,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.magicLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(\n\t\t\t\t\t\texternalId: string,\n\t\t\t\t\t\tphone: string,\n\t\t\t\t\t\turi: string,\n\t\t\t\t\t\ttoken?: string\n\t\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone, URI: uri },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as MagicLink[Routes.updatePhone]\n\t}\n});\n\nexport default withMagicLink;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(\n\tidentifierValidations,\n\tstringPhone('phone'),\n\turiValidations\n);\nexport const withUpdateEmailValidations = withValidations(\n\tidentifierValidations,\n\tstringEmail('email'),\n\turiValidations\n);\n","import {\n\tapiPaths,\n\tENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS,\n\tENCHANTED_LINK_MIN_POLLING_INTERVAL_MS\n} from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport {\n\tDeliveryMethods,\n\tSdkResponse,\n\tJWTResponse,\n\tEnchantedLinkResponse,\n\tUser,\n\tLoginOptions\n} from '../types';\nimport { EnchantedLink, Routes, WaitForSessionConfig } from './types';\nimport {\n\twithWaitForSessionValidations,\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations\n} from './validations';\n\n/** Polling configuration with defaults and normalizing checks */\nconst normalizeWaitForSessionConfig = ({\n\tpollingIntervalMs = ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS,\n\ttimeoutMs = ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS\n} = {}) => ({\n\tpollingIntervalMs: Math.max(\n\t\tpollingIntervalMs || ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS,\n\t\tENCHANTED_LINK_MIN_POLLING_INTERVAL_MS\n\t),\n\ttimeoutMs: Math.min(\n\t\ttimeoutMs || ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS,\n\t\tENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS\n\t)\n});\n\nconst withEnchantedLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse<never>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.enchantedLink.verify, { token }))\n\t),\n\n\tsignIn: withSignValidations(\n\t\t(\n\t\t\texternalId: string,\n\t\t\tURI: string,\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(\n\t\t\t\t\tpathJoin(apiPaths.enchantedLink.signIn, DeliveryMethods.email),\n\t\t\t\t\t{\n\t\t\t\t\t\texternalId,\n\t\t\t\t\t\tURI,\n\t\t\t\t\t\tloginOptions\n\t\t\t\t\t},\n\t\t\t\t\t{ token }\n\t\t\t\t)\n\t\t\t)\n\t) as EnchantedLink[Routes.signIn],\n\n\tsignUpOrIn: withSignValidations(\n\t\t(externalId: string, URI: string): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(pathJoin(apiPaths.enchantedLink.signUpOrIn, DeliveryMethods.email), {\n\t\t\t\t\texternalId,\n\t\t\t\t\tURI\n\t\t\t\t})\n\t\t\t)\n\t) as EnchantedLink[Routes.signIn],\n\n\tsignUp: withSignValidations(\n\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(pathJoin(apiPaths.enchantedLink.signUp, DeliveryMethods.email), {\n\t\t\t\t\texternalId,\n\t\t\t\t\tURI,\n\t\t\t\t\tuser\n\t\t\t\t})\n\t\t\t)\n\t) as EnchantedLink[Routes.signUp],\n\n\twaitForSession: withWaitForSessionValidations(\n\t\t(pendingRef: string, config?: WaitForSessionConfig): Promise<SdkResponse<JWTResponse>> =>\n\t\t\tnew Promise((resolve) => {\n\t\t\t\tconst { pollingIntervalMs, timeoutMs } = normalizeWaitForSessionConfig(config);\n\t\t\t\tlet timeout: NodeJS.Timeout;\n\t\t\t\tconst interval = setInterval(async () => {\n\t\t\t\t\tconst resp = await httpClient.post(apiPaths.enchantedLink.session, { pendingRef });\n\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\t\tresolve(transformResponse(Promise.resolve(resp)));\n\t\t\t\t\t}\n\t\t\t\t}, pollingIntervalMs);\n\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: `Session polling timeout exceeded: ${timeoutMs}ms`,\n\t\t\t\t\t\t\terrorCode: '0'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tok: false\n\t\t\t\t\t});\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t}, timeoutMs);\n\t\t\t})\n\t),\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\temail: string,\n\t\t\t\turi: string,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.enchantedLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withEnchantedLink;\n","import { SdkResponse, URLResponse, JWTResponse } from '../types';\n\nenum OAuthProviders {\n\tfacebook = 'facebook',\n\tgithub = 'github',\n\tgoogle = 'google',\n\tmicrosoft = 'microsoft',\n\tgitlab = 'gitlab',\n\tapple = 'apple'\n}\n\ntype StartFn = <B extends { redirect: boolean }>(\n\tredirectURL?: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse<URLResponse>>;\ntype VerifyFn = (code: string) => Promise<SdkResponse<JWTResponse>>;\n\ntype Providers<T> = Record<keyof typeof OAuthProviders, T>;\n\nexport type Oauth = {\n\tstart: Providers<StartFn>;\n\tverify: Providers<VerifyFn>;\n};\n\nexport { OAuthProviders };\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { SdkResponse, URLResponse, JWTResponse, LoginOptions } from '../types';\nimport { transformResponse } from '../helpers';\nimport { Oauth, OAuthProviders } from './types';\nimport { stringNonEmpty, withValidations } from '../validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\nconst withOauth = (httpClient: HttpClient) => ({\n\tstart: Object.keys(OAuthProviders).reduce(\n\t\t(acc, provider) => ({\n\t\t\t...acc,\n\t\t\t// eslint-disable-next-line consistent-return\n\t\t\t[provider]: async (\n\t\t\t\tredirectUrl?: string,\n\t\t\t\t{ redirect = false } = {},\n\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\ttoken?: string\n\t\t\t) => {\n\t\t\t\tconst resp = await httpClient.post(apiPaths.oauth.start, loginOptions || {}, {\n\t\t\t\t\tqueryParams: { provider, ...(redirectUrl && { redirectURL: redirectUrl }) },\n\t\t\t\t\ttoken\n\t\t\t\t});\n\t\t\t\tif (!redirect || !resp.ok)\n\t\t\t\t\treturn transformResponse<SdkResponse<URLResponse>>(Promise.resolve(resp));\n\n\t\t\t\tconst { url } = await resp.json();\n\t\t\t\twindow.location.href = url;\n\t\t\t}\n\t\t}),\n\t\t{}\n\t) as Oauth['start'],\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.oauth.exchange, { code }))\n\t)\n});\n\nexport default withOauth;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { FlowResponse, Options, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('flowId'));\nconst withNextValidations = withValidations(\n\tstringNonEmpty('executionId'),\n\tstringNonEmpty('stepId'),\n\tstringNonEmpty('interactionId')\n);\n\nconst withFlow = (httpClient: HttpClient) => ({\n\tstart: withStartValidations(\n\t\t(\n\t\t\tflowId: string,\n\t\t\toptions?: Options,\n\t\t\tinteractionId?: string,\n\t\t\tinput?: Record<string, FormDataEntryValue>\n\t\t): Promise<SdkResponse<FlowResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.flow.start, { flowId, options, interactionId, input })\n\t\t\t)\n\t),\n\tnext: withNextValidations(\n\t\t(\n\t\t\texecutionId: string,\n\t\t\tstepId: string,\n\t\t\tinteractionId: string,\n\t\t\tinput?: Record<string, FormDataEntryValue>\n\t\t): Promise<SdkResponse<FlowResponse>> => {\n\t\t\treturn transformResponse(\n\t\t\t\thttpClient.post(apiPaths.flow.next, { executionId, stepId, interactionId, input })\n\t\t\t);\n\t\t}\n\t)\n});\n\nexport default withFlow;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { SdkResponse, URLResponse, JWTResponse, LoginOptions } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('tenant'));\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\ntype StartFn = <B extends { redirect: boolean }>(\n\ttenantNameOrEmail: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse<URLResponse>>;\n\nconst withSaml = (httpClient: HttpClient) => ({\n\t// eslint-disable-next-line consistent-return\n\tstart: withStartValidations(\n\t\tasync (\n\t\t\ttenantNameOrEmail: string,\n\t\t\tredirectUrl?: string,\n\t\t\t{ redirect = false } = {},\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t) => {\n\t\t\tconst resp = await httpClient.post(apiPaths.saml.start, loginOptions || {}, {\n\t\t\t\tqueryParams: { tenant: tenantNameOrEmail, redirectURL: redirectUrl },\n\t\t\t\ttoken\n\t\t\t});\n\n\t\t\tif (!redirect || !resp.ok) return transformResponse(Promise.resolve(resp));\n\n\t\t\tconst { url } = await resp.json();\n\t\t\twindow.location.href = url;\n\t\t}\n\t) as StartFn,\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.saml.exchange, { code }))\n\t)\n});\n\nexport default withSaml;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { User, SdkResponse, JWTResponse, TOTPResponse, LoginOptions } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignUpValidations = withValidations(identifierValidations);\nconst withUpdateValidations = withValidations(identifierValidations);\n\nconst withTotp = (httpClient: HttpClient) => ({\n\tsignUp: withSignUpValidations(\n\t\t(identifier: string, user?: User): Promise<SdkResponse<TOTPResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.totp.signUp, { externalId: identifier, user }))\n\t),\n\n\tverify: withVerifyValidations(\n\t\t(\n\t\t\tidentifier: string,\n\t\t\tcode: string,\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(\n\t\t\t\t\tapiPaths.totp.verify,\n\t\t\t\t\t{ externalId: identifier, code, loginOptions },\n\t\t\t\t\t{ token }\n\t\t\t\t)\n\t\t\t)\n\t),\n\n\tupdate: withUpdateValidations(\n\t\t(identifier: string, token?: string): Promise<SdkResponse<TOTPResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.totp.update, { externalId: identifier }, { token })\n\t\t\t)\n\t)\n});\n\nexport default withTotp;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport {\n\tSdkResponse,\n\tResponseData,\n\tLoginOptions,\n\tJWTResponse,\n\tWebAuthnStartResponse\n} from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst originValidations = stringNonEmpty('origin');\n\nconst withSignUpStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('name')\n);\nconst withSignInStartValidations = withValidations(identifierValidations, originValidations);\nconst withUpdateStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('token')\n);\nconst withFinishValidations = withValidations(\n\tstringNonEmpty('transactionId'),\n\tstringNonEmpty('response')\n);\n\nconst withWebauthn = (httpClient: HttpClient) => ({\n\tsignUp: {\n\t\tstart: withSignUpStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\tname: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.start, {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\texternalId: identifier,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t},\n\t\t\t\t\t\torigin\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.signIn.start,\n\t\t\t\t\t\t{ externalId: identifier, origin, loginOptions },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signIn.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignUpOrIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(identifier: string, origin: string): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUpOrIn.start, { externalId: identifier, origin })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tupdate: {\n\t\tstart: withUpdateStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\ttoken: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.update.start,\n\t\t\t\t\t\t{ externalId: identifier, origin },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<ResponseData>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.update.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withWebauthn;\n","import withAccessKeys from './accesskey';\nimport withOtp from './otp';\nimport { HttpClient } from '../httpClient';\nimport { isJwtExpired, getJwtPermissions, getJwtRoles, transformResponse } from './helpers';\nimport { stringNonEmpty, withValidations } from './validations';\nimport withMagicLink from './magicLink';\nimport withEnchantedLink from './enchantedLink';\nimport { apiPaths } from '../constants';\nimport withOauth from './oauth';\nimport withFlow from './flow';\nimport withSaml from './saml';\nimport withTotp from './totp';\nimport withWebauthn from './webauthn';\nimport { UserResponse, JWTResponse } from './types';\n\nconst withJwtValidations = withValidations(stringNonEmpty('token'));\n\n/** Returns Descope SDK with all available operations */\nexport default (httpClient: HttpClient) => ({\n\taccessKey: withAccessKeys(httpClient),\n\totp: withOtp(httpClient),\n\tmagicLink: withMagicLink(httpClient),\n\tenchantedLink: withEnchantedLink(httpClient),\n\toauth: withOauth(httpClient),\n\tsaml: withSaml(httpClient),\n\ttotp: withTotp(httpClient),\n\twebauthn: withWebauthn(httpClient),\n\tflow: withFlow(httpClient),\n\trefresh: (token?: string) =>\n\t\ttransformResponse<JWTResponse>(httpClient.post(apiPaths.refresh, {}, { token })),\n\tlogout: (token?: string) =>\n\t\ttransformResponse<never>(httpClient.post(apiPaths.logout, {}, { token })),\n\tlogoutAll: (token?: string) =>\n\t\ttransformResponse<never>(httpClient.post(apiPaths.logoutAll, {}, { token })),\n\tme: (token?: string) => transformResponse<UserResponse>(httpClient.get(apiPaths.me, { token })),\n\tisJwtExpired: withJwtValidations(isJwtExpired),\n\tgetJwtPermissions: withJwtValidations(getJwtPermissions),\n\tgetJwtRoles: withJwtValidations(getJwtRoles),\n\thttpClient\n});\n","/* eslint-disable import/exports-last */\nimport { ResponseData } from '../../sdk/types';\nimport { SdkFnWrapper, ReplacePaths, SdkFnsPaths } from './types';\n\n/**\n * A wrapper function that allows to wrap multiple Sdk function\n * @param obj: The Sdk instance you want to wrap\n * @param paths: A readonly list of paths of the functions you want to wrap\n * @param wrapper: Your wrapper function, it should gets an Sdk function and return a new Sdk function\n * @returns a mutated instance of the Sdk with updated type definitions based on your wrapper return type\n *\n * Usage example:\n *\n * // Assuming this is our SDK instance\n * const sdk = {\n * me: (token) => {...}\n * flow: {\n * start: (...params) => {...}\n * next: (...params) => {...}\n * }\n * ...\n * }\n *\n * // This is our wrapper\n * const wrapper = (sdkFn) => async (...args) => {\n * const sdkResponse = await sdkFn(...args)\n *\n * // Modify return value\n * return {...sdkResponse, data: {...sdkResponse.data, myCustomAttribute: 'hello'}}\n * }\n *\n * // And those are the paths we want to wrap\n * const paths = ['flow.start', 'flow.next'] as const // You MUST add as const!\n *\n * // We can wrap our SDK functions with the wrapper we created in this way\n * const newlyTypedSdk = wrapWith(sdk, paths, wrapper)\n *\n * Now the 2 wrapped functions will have the updated type based on the wrapper return value\n */\n\nconst wrapWith = <\n\tObj extends object,\n\tPaths extends ReadonlyArray<SdkFnsPaths<Obj>>,\n\tWrapperData extends ResponseData\n>(\n\tobj: Obj,\n\tpaths: Paths,\n\twrapper: SdkFnWrapper<WrapperData>\n): ReplacePaths<Obj, Paths, WrapperData> => {\n\tpaths.forEach((path) => {\n\t\tconst sections = path.split('.');\n\t\tlet section = sections.shift();\n\t\tlet currentRef: Record<string, any> = obj;\n\n\t\twhile (sections.length > 0) {\n\t\t\tcurrentRef = currentRef[section];\n\n\t\t\tif (!section || !currentRef) {\n\t\t\t\tthrow Error(`Invalid path \"${path}\", \"${section}\" is missing or has no value`);\n\t\t\t}\n\n\t\t\tsection = sections.shift();\n\t\t}\n\n\t\tif (typeof currentRef[section] !== 'function') {\n\t\t\tthrow Error(`\"${path}\" is not a function`);\n\t\t}\n\t\tconst origFn = currentRef[section];\n\t\tcurrentRef[section] = wrapper(origFn);\n\t});\n\n\treturn obj as any;\n};\n\nexport default wrapWith;\n","import { SdkConfig } from '../types';\n\nexport { default as wrapWith } from './wrapWith';\nexport type { SdkFnWrapper } from './wrapWith/types';\n\n/**\n * Add hooks to an existing core-sdk config\n */\nexport const addHooksToConfig = <Config extends SdkConfig>(\n\tconfig: Config,\n\thooks: Config['hooks']\n): Config => {\n\t['beforeRequest', 'afterRequest'].reduce((acc, key) => {\n\t\tacc[key] = [].concat(config.hooks?.[key] || []).concat(hooks?.[key] || []);\n\n\t\treturn acc;\n\t}, (config.hooks ??= {}));\n\n\treturn config;\n};\n","import { DEFAULT_BASE_API_URL } from './constants';\nimport createHttpClient from './httpClient';\nimport { AfterRequest, BeforeRequest, HTTPMethods, RequestConfig } from './httpClient/types';\nimport createSdk from './sdk';\nimport { OAuthProviders } from './sdk/oauth/types';\nimport { DeliveryMethods } from './sdk/types';\nimport { stringNonEmpty, withValidations } from './sdk/validations';\nimport { hasPathValue } from './sdk/validations/validators';\nimport { SdkConfig } from './types';\n\n/** Validate we have non-empty project id */\nconst withSdkConfigValidations = withValidations([\n\thasPathValue('projectId', stringNonEmpty('projectId'))\n]);\n\n/** Add the ability to pass multiple hooks instead of one when creating an SDK instance */\nconst withMultipleHooks =\n\t<T extends object>(createSdk: (config: SdkConfig) => T) =>\n\t(\n\t\tconfig: Omit<SdkConfig, 'hooks'> & {\n\t\t\thooks?: {\n\t\t\t\tbeforeRequest?: BeforeRequest | BeforeRequest[];\n\t\t\t\tafterRequest?: AfterRequest | AfterRequest[];\n\t\t\t};\n\t\t}\n\t) => {\n\t\tconst beforeRequestHooks = [].concat(config.hooks?.beforeRequest || []);\n\t\tconst afterRequestHooks = [].concat(config.hooks?.afterRequest || []);\n\n\t\tconst beforeRequest: BeforeRequest = (config) =>\n\t\t\tbeforeRequestHooks?.reduce((acc, fn) => fn(acc), config);\n\t\tconst afterRequest: AfterRequest = (req, res) => {\n\t\t\tafterRequestHooks?.forEach((fn) => fn(req, res?.clone()));\n\t\t};\n\n\t\treturn createSdk({ ...config, hooks: { beforeRequest, afterRequest } });\n\t};\n\n/** Descope SDK client */\nlet initSdk = withSdkConfigValidations(\n\twithMultipleHooks(({ projectId, logger, baseUrl, hooks, cookiePolicy }: SdkConfig) =>\n\t\tcreateSdk(\n\t\t\tcreateHttpClient({\n\t\t\t\tbaseUrl: baseUrl || DEFAULT_BASE_API_URL,\n\t\t\t\tprojectId,\n\t\t\t\tlogger,\n\t\t\t\thooks,\n\t\t\t\tcookiePolicy\n\t\t\t})\n\t\t)\n\t)\n);\n\n/** Descope SDK client with delivery methods enum.\n *\n * Please see full documentation at {@link https://docs.descope.com/guides Descope Docs}\n * @example Usage\n *\n * ```js\n * import descopeSdk from '@descope/core-js-sdk';\n *\n * const myProjectId = 'xxx';\n * const sdk = descopeSdk({ projectId: myProjectId });\n *\n * const userIdentifier = 'identifier';\n * sdk.otp.signIn.email(userIdentifier);\n * const jwtResponse = sdk.otp.verify.email(userIdentifier, codeFromEmail);\n * ```\n */\nexport default Object.assign(initSdk, { DeliveryMethods });\n\nexport { transformResponse } from './sdk/helpers';\nexport type {\n\tEnchantedLinkResponse,\n\tExchangeAccessKeyResponse,\n\tFlowAction,\n\tFlowResponse,\n\tFlowStatus,\n\tJWTResponse,\n\tResponseData,\n\tSdkResponse,\n\tTOTPResponse,\n\tURLResponse,\n\tUserResponse\n} from './sdk/types';\nexport * from './utils';\nexport type { SdkFnWrapper } from './utils';\nexport type { HTTPMethods, RequestConfig };\n\n/** Type to restrict to valid delivery methods */\nexport type DeliveryMethod = keyof typeof DeliveryMethods;\n/** Type to restrict to valid OAuth providers */\nexport type OAuthProvider = keyof typeof OAuthProviders;\n"],"names":["apiPaths","exchange","verify","signIn","signUp","update","email","phone","signUpOrIn","session","start","finish","next","httpLogBuilder","msg","headers","headersObj","entries","Object","fromEntries","Headers","JSON","stringify","this","body","Body","url","Url","toString","method","Method","title","Title","status","Status","build","keys","flatMap","key","join","createFetchLogger","logger","receivedFetch","fetchInternal","fetch","Error","async","args","log","buildRequestLog","resp","ok","respBody","clone","text","Promise","resolve","json","parse","statusText","buildResponseLog","HTTPMethods","mergeHeaders","sources","reduce","acc","source","srcArr","Array","isArray","from","getSrcArr","_","value","serializeBody","undefined","createAuthorizationHeader","projectId","token","bearer","Authorization","createHttpClient","baseUrl","baseConfig","hooks","cookiePolicy","fetchWithLogger","sendRequest","config","requestConfig","beforeRequest","path","queryParams","res","URL","search","URLSearchParams","urlBuilder","baseHeaders","credentials","afterRequest","get","post","put","delete","getJwtAuthorizationItems","tenant","claim","claims","parseJwt","tenants","_a","items","jwtDecode","isJwtExpired","exp","Date","getTime","getJwtPermissions","getJwtRoles","pathJoin","replace","transformResponse","response","transform","ret","code","data","error","createValidator","rule","defaultMsg","val","createValidation","validators","validate","forEach","validator","errMsg","regexMatch","regex","test","validateEmail","validatePhone","isEmail","isPhone","isNotEmpty","min","length","isString","withValidations","argsRules","fn","rulesArr","i","stringNonEmpty","fieldName","stringEmail","stringPhone","withExchangeValidations","withAccessKeys","httpClient","accessKey","DeliveryPhone","DeliveryMethods","FlowStatus","Routes","identifierValidations","withVerifyValidations","withSignValidations","withUpdatePhoneValidations","withUpdateEmailValidations","withOtp","delivery","assign","externalId","loginOptions","user","identifier","uriValidations","withMagicLink","URI","uri","withWaitForSessionValidations","withEnchantedLink","waitForSession","pendingRef","pollingIntervalMs","timeoutMs","Math","max","normalizeWaitForSessionConfig","timeout","interval","setInterval","clearInterval","clearTimeout","setTimeout","message","errorCode","OAuthProviders","withOauth","provider","redirectUrl","redirect","redirectURL","window","location","href","withStartValidations","withNextValidations","withFlow","flowId","options","interactionId","input","executionId","stepId","withSaml","tenantNameOrEmail","withSignUpValidations","withUpdateValidations","withTotp","originValidations","withSignUpStartValidations","withSignInStartValidations","withUpdateStartValidations","withFinishValidations","withWebauthn","origin","name","transactionId","withJwtValidations","wrapWith","obj","paths","wrapper","sections","split","section","shift","currentRef","origFn","addHooksToConfig","concat","rules","initSdk","validatePathValue","withSdkConfigValidations","createSdk","beforeRequestHooks","afterRequestHooks","_b","req","withMultipleHooks","otp","magicLink","enchantedLink","oauth","saml","totp","webauthn","flow","refresh","logout","logoutAll","me","index"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/constants/apiPaths.ts","../src/constants/index.ts","../src/httpClient/helpers/createFetchLogger.ts","../src/httpClient/types.ts","../src/httpClient/urlBuilder.ts","../src/httpClient/utils.ts","../src/httpClient/index.ts","../src/sdk/helpers/index.ts","../src/sdk/validations/core.ts","../src/sdk/validations/validators.ts","../src/sdk/validations/index.ts","../src/sdk/accesskey.ts","../src/sdk/types.ts","../src/sdk/otp.ts","../src/sdk/magicLink/validations.ts","../src/sdk/magicLink/index.ts","../src/sdk/enchantedLink/validations.ts","../src/sdk/enchantedLink/index.ts","../src/sdk/oauth/types.ts","../src/sdk/oauth/index.ts","../src/sdk/flow.ts","../src/sdk/saml.ts","../src/sdk/totp.ts","../src/sdk/webauthn.ts","../src/sdk/index.ts","../src/createSdk.ts","../src/utils/wrapWith/index.ts","../src/utils/index.ts","../src/index.ts"],"sourcesContent":["/** API paths for the Descope service APIs */\nexport default {\n\taccessKey: {\n\t\texchange: '/v1/auth/accesskey/exchange'\n\t},\n\totp: {\n\t\tverify: '/v1/auth/otp/verify',\n\t\tsignIn: '/v1/auth/otp/signin',\n\t\tsignUp: '/v1/auth/otp/signup',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/otp/update/email',\n\t\t\tphone: '/v1/auth/otp/update/phone'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/otp/signup-in'\n\t},\n\tmagicLink: {\n\t\tverify: '/v1/auth/magiclink/verify',\n\t\tsignIn: '/v1/auth/magiclink/signin',\n\t\tsignUp: '/v1/auth/magiclink/signup',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/magiclink/update/email',\n\t\t\tphone: '/v1/auth/magiclink/update/phone'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/magiclink/signup-in'\n\t},\n\tenchantedLink: {\n\t\tverify: '/v1/auth/enchantedlink/verify',\n\t\tsignIn: '/v1/auth/enchantedlink/signin',\n\t\tsignUp: '/v1/auth/enchantedlink/signup',\n\t\tsession: '/v1/auth/enchantedlink/pending-session',\n\t\tupdate: {\n\t\t\temail: '/v1/auth/enchantedlink/update/email'\n\t\t},\n\t\tsignUpOrIn: '/v1/auth/enchantedlink/signup-in'\n\t},\n\toauth: {\n\t\tstart: '/v1/auth/oauth/authorize',\n\t\texchange: '/v1/auth/oauth/exchange'\n\t},\n\tsaml: {\n\t\tstart: '/v1/auth/saml/authorize',\n\t\texchange: '/v1/auth/saml/exchange'\n\t},\n\ttotp: {\n\t\tverify: '/v1/auth/totp/verify',\n\t\tsignUp: '/v1/auth/totp/signup',\n\t\tupdate: '/v1/user/totp/update'\n\t},\n\twebauthn: {\n\t\tsignUp: {\n\t\t\tstart: '/v1/auth/webauthn/signup/start',\n\t\t\tfinish: '/v1/auth/webauthn/signup/finish'\n\t\t},\n\t\tsignIn: {\n\t\t\tstart: '/v1/auth/webauthn/signin/start',\n\t\t\tfinish: '/v1/auth/webauthn/signin/finish'\n\t\t},\n\t\tsignUpOrIn: {\n\t\t\tstart: '/v1/auth/webauthn/signup-in/start'\n\t\t},\n\t\tupdate: {\n\t\t\tstart: 'v1/auth/webauthn/update/start',\n\t\t\tfinish: '/v1/auth/webauthn/update/finish'\n\t\t}\n\t},\n\trefresh: '/v1/auth/refresh',\n\tlogout: '/v1/auth/logout',\n\tlogoutAll: '/v1/auth/logoutall',\n\tme: '/v1/auth/me',\n\tflow: {\n\t\tstart: '/v1/flow/start',\n\t\tnext: '/v1/flow/next'\n\t}\n};\n","/** Default Descope API URL */\nexport const DEFAULT_BASE_API_URL = 'https://api.descope.com';\n\n/** Default magic link polling interval for checking if the user clicked on the magic link */\nexport const ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS = 1000; // 1 second\n/** Default maximum time we are willing to wait for the magic link to be clicked */\nexport const ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS = 1000 * 60 * 10; // 10 minutes\n\n/** API paths to the Descope service */\nexport { default as apiPaths } from './apiPaths';\n","import { Logger } from '../../sdk/types';\n\n/** Build a log message around HTTP calls */\nconst httpLogBuilder = () => {\n\tconst msg: {\n\t\tTitle?: string;\n\t\tUrl?: string;\n\t\tMethod?: string;\n\t\tHeaders?: string;\n\t\tBody?: string;\n\t\tStatus?: string;\n\t} = {};\n\n\treturn {\n\t\theaders(headers: HeadersInit) {\n\t\t\tconst headersObj =\n\t\t\t\ttypeof headers.entries === 'function' ? Object.fromEntries(headers.entries()) : headers;\n\t\t\tmsg.Headers = JSON.stringify(headersObj);\n\n\t\t\treturn this;\n\t\t},\n\n\t\tbody(body: string) {\n\t\t\tmsg.Body = body;\n\t\t\treturn this;\n\t\t},\n\n\t\turl(url: URL | string) {\n\t\t\tmsg.Url = url.toString();\n\t\t\treturn this;\n\t\t},\n\n\t\tmethod(method: string) {\n\t\t\tmsg.Method = method;\n\t\t\treturn this;\n\t\t},\n\n\t\ttitle(title: string) {\n\t\t\tmsg.Title = title;\n\t\t\treturn this;\n\t\t},\n\n\t\tstatus(status: string) {\n\t\t\tmsg.Status = status;\n\t\t\treturn this;\n\t\t},\n\n\t\tbuild() {\n\t\t\treturn Object.keys(msg)\n\t\t\t\t.flatMap((key) => (msg[key] ? [`${key !== 'Title' ? `${key}: ` : ''}${msg[key]}`] : []))\n\t\t\t\t.join('\\n');\n\t\t}\n\t};\n};\n\ntype Fetch = typeof fetch;\n\n/** Log the request object */\nconst buildRequestLog = (args: Parameters<Fetch>) =>\n\thttpLogBuilder()\n\t\t.title('Request')\n\t\t.url(args[0])\n\t\t.method(args[1].method)\n\t\t.headers(args[1].headers)\n\t\t.body(args[1].body)\n\t\t.build();\n\n/** Log the response object */\nconst buildResponseLog = async (resp: Response) => {\n\tconst respBody = await (resp.clone ? resp.clone().text() : resp.text());\n\t// eslint-disable-next-line no-param-reassign\n\tresp.text = () => Promise.resolve(respBody);\n\t// eslint-disable-next-line no-param-reassign\n\tresp.json = () => Promise.resolve(JSON.parse(respBody));\n\n\treturn httpLogBuilder()\n\t\t.title('Response')\n\t\t.url(resp.url.toString())\n\t\t.status(`${resp.status} ${resp.statusText}`)\n\t\t.headers(resp.headers)\n\t\t.body(respBody)\n\t\t.build();\n};\n\n/**\n * Create a fetch with a logger wrapped around it if a logger is given\n * @param logger Logger to send the logs to\n * @param receivedFetch Fetch to be used or built-in fetch if not provided\n *\n */\nconst createFetchLogger = (logger: Logger, receivedFetch?: Fetch) => {\n\tconst fetchInternal = receivedFetch || fetch;\n\tif (!fetchInternal) throw new Error('fetch is not defined');\n\n\tif (!logger) return fetchInternal;\n\n\treturn async (...args: Parameters<Fetch>) => {\n\t\tlogger.log(buildRequestLog(args));\n\t\tconst resp = await fetchInternal(...args);\n\t\tlogger[resp.ok ? 'log' : 'error'](await buildResponseLog(resp));\n\n\t\treturn resp;\n\t};\n};\n\nexport default createFetchLogger;\n","import { Logger } from '../sdk/types';\n\n/** Request configuration including headers, query params and token */\ntype HttpClientReqConfig = {\n\theaders?: HeadersInit;\n\tqueryParams?: { [key: string]: string };\n\ttoken?: string;\n};\n\n/** HTTP methods we use in the client */\nexport enum HTTPMethods {\n\tget = 'GET',\n\tdelete = 'DELETE',\n\tpost = 'POST',\n\tput = 'PUT'\n}\n\n/** HTTP Client type that implements the HTTP method calls. Descopers can provide their own HTTP client although required only in rare cases. */\nexport type HttpClient = {\n\tget: (path: string, config?: HttpClientReqConfig) => Promise<Response>;\n\tpost: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\tput: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\tdelete: (path: string, body?: any, config?: HttpClientReqConfig) => Promise<Response>;\n\thooks?: Hooks;\n};\n\n/** Parameters for the HTTP client. Defaults should work for most cases. */\nexport type CreateHttpClientConfig = {\n\tbaseUrl: string;\n\tprojectId: string;\n\tbaseConfig?: { baseHeaders: HeadersInit };\n\tlogger?: Logger;\n\thooks?: Hooks;\n\tcookiePolicy?: RequestCredentials;\n};\n\n/** For before-request hook allows overriding parts of the request */\nexport type RequestConfig = {\n\tpath: string;\n\theaders?: HeadersInit;\n\tqueryParams?: { [key: string]: string };\n\tbody?: any;\n\tmethod: HTTPMethods;\n\ttoken?: string;\n};\n\nexport type BeforeRequest = (config: RequestConfig) => RequestConfig;\nexport type AfterRequest = (req: RequestConfig, res: Response) => void;\n\n/** Hooks before and after the request is made */\nexport type Hooks = {\n\tbeforeRequest?: BeforeRequest;\n\tafterRequest?: AfterRequest;\n};\n","/** Build URL with given parts */\nexport const urlBuilder = ({\n\tpath,\n\tbaseUrl,\n\tqueryParams\n}: {\n\tpath: string;\n\tbaseUrl: string;\n\tqueryParams: ConstructorParameters<typeof URLSearchParams>[0];\n}) => {\n\tconst url = new URL(path, baseUrl);\n\tif (queryParams) url.search = new URLSearchParams(queryParams).toString();\n\n\treturn url;\n};\n","/* eslint-disable no-nested-ternary */\n\nconst getSrcArr = (source: HeadersInit) => {\n\tif (Array.isArray(source)) return source;\n\tif (source instanceof Headers) return Array.from(source.entries());\n\tif (!source) return [];\n\treturn Object.entries(source);\n};\n\n/** Merge the given list of headers into a single Headers object */\nexport const mergeHeaders = (...sources: HeadersInit[]) =>\n\tnew Headers(\n\t\tsources.reduce((acc: Record<string, string>, source) => {\n\t\t\tconst srcArr = getSrcArr(source);\n\t\t\tsrcArr.reduce((_, [key, value]) => {\n\t\t\t\tacc[key] = value;\n\n\t\t\t\treturn acc;\n\t\t\t}, acc);\n\n\t\t\treturn acc;\n\t\t}, {})\n\t);\n\n/** Serialize the body to JSON */\nexport const serializeBody = (body: Record<string, any>) =>\n\tbody === undefined ? undefined : JSON.stringify(body);\n","import createFetchLogger from './helpers/createFetchLogger';\nimport { CreateHttpClientConfig, HttpClient, HTTPMethods, RequestConfig } from './types';\nimport { urlBuilder } from './urlBuilder';\nimport { mergeHeaders, serializeBody } from './utils';\n\n/**\n * Create a Bearer authorization header with concatenated projectId and token\n * @param projectId The project id to use in the header\n * @param token Token to be concatenated. Defaults to empty.\n */\nconst createAuthorizationHeader = (projectId: string, token = '') => {\n\tlet bearer = projectId;\n\tif (token) {\n\t\tbearer = bearer + ':' + token;\n\t}\n\treturn {\n\t\tAuthorization: `Bearer ${bearer}`\n\t};\n};\n\ndeclare const BUILD_VERSION: string;\n\n/**\n * Create descope custom headers\n */\nconst createDescopeHeaders = () => {\n\treturn {\n\t\t'x-descope-sdk-name': 'core-js',\n\t\t'x-descope-sdk-version': BUILD_VERSION\n\t};\n};\n\n/**\n * Create the HTTP client used to send HTTP requests to the Descope API\n *\n * @param CreateHttpClientConfig Configuration for the client\n */\nconst createHttpClient = ({\n\tbaseUrl,\n\tprojectId,\n\tbaseConfig,\n\tlogger,\n\thooks,\n\tcookiePolicy\n}: CreateHttpClientConfig): HttpClient => {\n\tconst fetchWithLogger = createFetchLogger(logger);\n\n\tconst sendRequest = async (config: RequestConfig) => {\n\t\tconst requestConfig = hooks?.beforeRequest ? hooks.beforeRequest(config) : config;\n\n\t\tconst { path, body, headers, queryParams, method, token } = requestConfig;\n\n\t\tconst res = await fetchWithLogger(urlBuilder({ path, baseUrl, queryParams }), {\n\t\t\theaders: mergeHeaders(\n\t\t\t\tcreateAuthorizationHeader(projectId, token),\n\t\t\t\tcreateDescopeHeaders(),\n\t\t\t\tbaseConfig?.baseHeaders || {},\n\t\t\t\theaders\n\t\t\t),\n\t\t\tmethod,\n\t\t\tbody: serializeBody(body),\n\t\t\tcredentials: cookiePolicy || 'include'\n\t\t});\n\n\t\tif (hooks?.afterRequest) {\n\t\t\thooks.afterRequest(config, res?.clone());\n\t\t}\n\n\t\treturn res;\n\t};\n\n\treturn {\n\t\tget: (path: string, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body: undefined, method: HTTPMethods.get, token }),\n\t\tpost: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.post, token }),\n\t\tput: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.put, token }),\n\t\tdelete: (path, body, { headers, queryParams, token } = {}) =>\n\t\t\tsendRequest({ path, headers, queryParams, body, method: HTTPMethods.delete, token }),\n\t\thooks\n\t};\n};\n\nexport default createHttpClient;\nexport type { HttpClient };\n","import jwtDecode, { JwtPayload } from 'jwt-decode';\nimport { ResponseData, SdkResponse } from '../types';\n\nfunction getJwtAuthorizationItems(token: string, tenant: string, claim: string): string[] {\n\tlet claims: any = parseJwt(token);\n\tif (tenant) {\n\t\tclaims = claims.tenants?.[tenant];\n\t}\n\tconst items = claims[claim];\n\treturn Array.isArray(items) ? items : [];\n}\n\nfunction parseJwt(token: string): JwtPayload {\n\tif (typeof token !== 'string' || !token) throw new Error('Invalid token provided');\n\treturn jwtDecode(token);\n}\n\n/**\n * Checks if the given JWT is still valid but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function isJwtExpired(token: string): boolean {\n\tconst { exp } = parseJwt(token);\n\tconst currentTime = new Date().getTime() / 1000;\n\treturn currentTime > exp;\n}\n\n/**\n * Returns the list of permissions granted in the given JWT but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function getJwtPermissions(token: string, tenant?: string): string[] {\n\treturn getJwtAuthorizationItems(token, tenant, 'permissions');\n}\n\n/**\n * Returns the list of roles specified in the given JWT but DOES NOT check for signature\n *\n * @param token JWT token\n */\nexport function getJwtRoles(token: string, tenant?: string): string[] {\n\treturn getJwtAuthorizationItems(token, tenant, 'roles');\n}\n\n/** Joins path parts making sure there is only one path separator between parts */\nexport const pathJoin = (...args: string[]) => args.join('/').replace(/\\/{2,}/g, '/');\n\n/** Transform the Promise Response to our internal SdkResponse implementation\n * @param response The Response promise from fetch\n * @param transform Optionally transform the response JSON to another type\n */\nexport async function transformResponse<T extends ResponseData, S extends ResponseData = T>(\n\tresponse: Promise<Response>,\n\ttransform?: (data: T) => S\n): Promise<SdkResponse<S>> {\n\tconst resp = await response;\n\n\tconst ret: SdkResponse<S> = {\n\t\tcode: resp.status,\n\t\tok: resp.ok,\n\t\tresponse: resp\n\t};\n\n\tconst data = await resp.clone().json();\n\n\tif (!resp.ok) {\n\t\tret.error = data;\n\t} else if (transform) {\n\t\tret.data = transform(data);\n\t} else {\n\t\tret.data = <S>data;\n\t}\n\n\treturn ret;\n}\n","import { Validator, ValidationRule, MakeValidator } from './types';\n\nexport const createValidator =\n\t(rule: ValidationRule, defaultMsg?: string): MakeValidator =>\n\t(msg = defaultMsg) =>\n\t(val) =>\n\t\t!rule(val) ? msg.replace('{val}', val) : false;\n\nexport const createValidation = (...validators: Validator[]) => ({\n\tvalidate: (val: any) => {\n\t\tvalidators.forEach((validator) => {\n\t\t\tconst errMsg = validator(val);\n\t\t\tif (errMsg) throw new Error(errMsg);\n\t\t});\n\n\t\treturn true;\n\t}\n});\n","import get from 'lodash.get';\nimport { createValidation, createValidator } from './core';\nimport { Validator } from './types';\n\nconst regexMatch = (regex: RegExp) => (val: any) => regex.test(val);\n\nconst validateString = (val: any) => typeof val === 'string';\nconst validateEmail = regexMatch(\n\t/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/\n);\nconst validatePhone = regexMatch(/^\\+[1-9]{1}[0-9]{3,14}$/);\nconst validateMinLength = (min: number) => (val: any) => val.length >= min;\n// const validatePlainObject = (val: any) => !!val && Object.getPrototypeOf(val) === Object.prototype;\nconst validatePathValue = (path: string, rules: Validator[]) => (val: any) =>\n\tcreateValidation(...rules).validate(get(val, path));\n\nexport const isEmail = createValidator(validateEmail, '\"{val}\" is not a valid email');\nexport const isPhone = createValidator(validatePhone, '\"{val}\" is not a valid phone number');\nexport const isNotEmpty = createValidator(validateMinLength(1), 'Minimum length is 1');\nexport const isString = createValidator(validateString, 'Input is not a string');\n// export const isPlainObject = createValidator(validatePlainObject, 'Input is not a plain object');\nexport const hasPathValue = (path: string, rules: Validator[]) =>\n\tcreateValidator(validatePathValue(path, rules))();\n","import { createValidation } from './core';\nimport { Validator } from './types';\nimport { isEmail, isNotEmpty, isPhone, isString } from './validators';\n\n/**\n *\n * @params each parameter is an array of validators, those validators will be verified against the wrapped function argument which in the same place\n * @throws if any of the validators fails, an error with the relevant message will be thrown\n */\nexport const withValidations =\n\t(...argsRules: Validator[][]) =>\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\targsRules.forEach((rulesArr, i) => createValidation(...rulesArr).validate(args[i]));\n\n\t\treturn fn(...args);\n\t};\n\nexport const stringNonEmpty = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisNotEmpty(`\"${fieldName}\" must not be empty`)\n];\nexport const stringEmail = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisEmail()\n];\nexport const stringPhone = (fieldName: string) => [\n\tisString(`\"${fieldName}\" must be a string`),\n\tisPhone()\n];\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { ExchangeAccessKeyResponse, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('accessKey'));\n\nconst withAccessKeys = (httpClient: HttpClient) => ({\n\texchange: withExchangeValidations(\n\t\t(accessKey: string): Promise<SdkResponse<ExchangeAccessKeyResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.accessKey.exchange, {}, { token: accessKey }))\n\t)\n});\n\nexport default withAccessKeys;\n","type SdkFn = (...args: any[]) => Promise<SdkResponse<ResponseData>>;\n\ntype DeviceInfo = {\n\twebAuthnSupport?: boolean;\n};\n\ntype LocalUser = {\n\tauthMethod?: AuthMethod;\n\toauthProvider?: string;\n\texternalId?: string;\n};\n\ntype AuthMethod = 'otp' | 'magiclink' | 'social' | 'sso' | 'webauthn' | 'totp';\n\n/** User base details from Descope API */\nexport type User = {\n\temail?: string;\n\tname?: string;\n\tphone?: string;\n};\n\n/** User extended details from Descope API */\nexport type UserResponse = User & {\n\texternalIds: string[];\n\tuserId: string;\n\tverifiedEmail?: boolean;\n\tverifiedPhone?: boolean;\n};\n\n/** Login options to be added to the different authentication methods */\nexport type LoginOptions = {\n\tstepup?: boolean;\n\tmfa?: boolean;\n\tcustomClaims?: Record<string, any>;\n};\n\n/** Authentication info result from the various JWT validations */\nexport type JWTResponse = {\n\tsessionJwt: string;\n\trefreshJwt?: string;\n\tcookieDomain?: string;\n\tcookiePath?: string;\n\tcookieMaxAge?: number;\n\tcookieExpiration?: number;\n\tuser?: UserResponse;\n\tfirstSeen?: boolean;\n};\n\n/** Authentication info result from exchanging access keys for a session */\nexport type ExchangeAccessKeyResponse = {\n\tkeyId: string;\n\tsessionJwt: string;\n\texpiration: number;\n};\n\n/** The response returned from the various start webauthn functions */\nexport type WebAuthnStartResponse = {\n\ttransactionId: string;\n\toptions: string;\n\tcreate: boolean;\n};\n\n/** Enchanted link response */\nexport type EnchantedLinkResponse = {\n\t/** Pending reference URL to poll while waiting for user to click magic link */\n\tpendingRef: string;\n\t/** Link id, on which link the user should click */\n\tlinkId: string;\n};\n\n/** URL response to redirect user in case of OAuth or SSO */\nexport type URLResponse = {\n\turl: string;\n};\n\n/** TOTP response with the TOTP details */\nexport type TOTPResponse = {\n\tprovisioningURL: string;\n\timage: string;\n\tkey: string;\n};\n\n/** Phone delivery methods which are currently supported */\nexport enum DeliveryPhone {\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\n/** All delivery methods currently supported */\nexport enum DeliveryMethods {\n\temail = 'email',\n\tsms = 'sms',\n\twhatsapp = 'whatsapp'\n}\n\n/** All flow execution statuses\n * - waiting - flow execution is waiting for user interaction\n * - running - flow execution is currently running\n * - completed - flow execution completed successfully\n * - failed - flow execution failed\n */\nexport enum FlowStatus {\n\twaiting = 'waiting',\n\trunning = 'running',\n\tcompleted = 'completed',\n\tfailed = 'failed'\n}\n\n/** All flow response action\n * - screen - next action is to render screen\n * - poll - next action is poll for next after timeout\n * - redirect - next action is to redirect (redirection details in 'redirect' attribute)\n * - webauthnCreate/webauthnGet - next action is to prompt webauthn (details in 'webauthn' attribute)\n * - none - no next action\n */\nexport type FlowAction = 'screen' | 'poll' | 'redirect' | 'webauthnCreate' | 'webauthnGet' | 'none';\n\n/** Flow response with flow execution details */\nexport type FlowResponse = {\n\t// current execution identifier\n\texecutionId: string;\n\t// current step identifier\n\tstepId: string;\n\t// flow execution status\n\tstatus: FlowStatus;\n\t// the next required action\n\taction: FlowAction;\n\t// screen data - if action is 'screen'\n\tscreen?: {\n\t\t// screen identifier\n\t\tid: string;\n\t\t// extra dynamic state required for rendering screen\n\t\tstate: Record<string, any>;\n\t};\n\t// redirect data - if action is 'redirect'\n\tredirect?: {\n\t\turl: string;\n\t};\n\t// webauthn data - if action is one of 'webauthnCreate', 'webauthnGet'\n\twebauthn?: {\n\t\ttransactionId: string;\n\t\toptions: string;\n\t\tcreate: boolean;\n\t};\n\t// authentication information response, if response is authenticated\n\tauthInfo?: JWTResponse;\n};\n\nexport type Options = {\n\tredirectUrl?: string;\n\ttenant?: string;\n\tdeviceInfo?: DeviceInfo;\n\tlastUser?: LocalUser;\n};\n\nexport type ResponseData = Record<string, any>;\n\n/**\n * Response from our SDK calls which includes the result (ok, code, error).\n * The relevant data is provided in the more specific interfaces extending SdkResponse.\n */\nexport type SdkResponse<T extends ResponseData> = {\n\tcode?: number;\n\tok: boolean;\n\tresponse?: Response;\n\terror?: {\n\t\tmessage: string;\n\t\terrorCode: string;\n\t\terrorDescription?: string;\n\t};\n\tdata?: T;\n};\n\n/** Different delivery method */\nexport type Deliveries<T extends SdkFn> = Record<DeliveryMethods, T>;\n\n/** The different routes (actions) we can do */\nexport enum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify'\n}\n\n/** Logger type that supports the given levels (debug, log, error) */\nexport type Logger = Pick<Console, 'debug' | 'log' | 'error'>;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { pathJoin, transformResponse } from './helpers';\nimport {\n\tDeliveryMethods,\n\tDeliveries,\n\tUser,\n\tSdkResponse,\n\tJWTResponse,\n\tDeliveryPhone,\n\tLoginOptions\n} from './types';\nimport { stringEmail, stringNonEmpty, stringPhone, withValidations } from './validations';\n\nenum Routes {\n\tsignUp = 'signup',\n\tsignIn = 'signin',\n\tverify = 'verify',\n\tupdatePhone = 'updatePhone'\n}\n\ntype VerifyFn = (identifier: string, code: string) => Promise<SdkResponse<JWTResponse>>;\ntype SignInFn = (identifier: string) => Promise<SdkResponse<never>>;\ntype SignUpFn = (identifier: string, user?: User) => Promise<SdkResponse<never>>;\ntype UpdatePhoneFn = (identifier: string, phone: string) => Promise<SdkResponse<never>>;\n\ntype Otp = {\n\t[Routes.verify]: Deliveries<VerifyFn>;\n\t[Routes.signIn]: Deliveries<SignInFn>;\n\t[Routes.signUp]: Deliveries<SignUpFn>;\n\t[Routes.updatePhone]: Deliveries<UpdatePhoneFn>;\n};\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignValidations = withValidations(identifierValidations);\nconst withUpdatePhoneValidations = withValidations(identifierValidations, stringPhone('phone'));\nconst withUpdateEmailValidations = withValidations(identifierValidations, stringEmail('email'));\n\nconst withOtp = (httpClient: HttpClient) => ({\n\tverify: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withVerifyValidations(\n\t\t\t\t(externalId: string, code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.verify, delivery), { code, externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.verify],\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(\n\t\t\t\t\texternalId: string,\n\t\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\t\ttoken?: string\n\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\tpathJoin(apiPaths.otp.signIn, delivery),\n\t\t\t\t\t\t\t{ externalId, loginOptions },\n\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, user?: User): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUp, delivery), { externalId, user })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.otp.signUpOrIn, delivery), { externalId })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as Otp[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(identifier: string, email: string, token?: string): Promise<SdkResponse<never>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.otp.update.email, { externalId: identifier, email }, { token })\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(externalId: string, phone: string, token?: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.otp.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as Otp[Routes.updatePhone]\n\t}\n});\n\nexport default withOtp;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(\n\tidentifierValidations,\n\tstringPhone('phone'),\n\turiValidations\n);\nexport const withUpdateEmailValidations = withValidations(\n\tidentifierValidations,\n\tstringEmail('email'),\n\turiValidations\n);\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport {\n\tDeliveryMethods,\n\tDeliveryPhone,\n\tSdkResponse,\n\tJWTResponse,\n\tUser,\n\tLoginOptions\n} from '../types';\nimport { MagicLink, Routes } from './types';\nimport {\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations,\n\twithUpdatePhoneValidations\n} from './validations';\n\nconst withMagicLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.magicLink.verify, { token }))\n\t),\n\n\tsignIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(\n\t\t\t\t\texternalId: string,\n\t\t\t\t\tURI: string,\n\t\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\t\ttoken?: string\n\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.signIn, delivery),\n\t\t\t\t\t\t\t{ externalId, URI, loginOptions },\n\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tsignUp: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUp, delivery), {\n\t\t\t\t\t\t\texternalId,\n\t\t\t\t\t\t\tURI,\n\t\t\t\t\t\t\tuser\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signUp],\n\n\tsignUpOrIn: Object.keys(DeliveryMethods).reduce(\n\t\t(acc, delivery) => ({\n\t\t\t...acc,\n\t\t\t[delivery]: withSignValidations(\n\t\t\t\t(externalId: string, URI: string): Promise<SdkResponse<never>> =>\n\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\thttpClient.post(pathJoin(apiPaths.magicLink.signUpOrIn, delivery), { externalId, URI })\n\t\t\t\t\t)\n\t\t\t)\n\t\t}),\n\t\t{}\n\t) as MagicLink[Routes.signIn],\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\temail: string,\n\t\t\t\turi: string,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.magicLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\t\tphone: Object.keys(DeliveryPhone).reduce(\n\t\t\t(acc, delivery) => ({\n\t\t\t\t...acc,\n\t\t\t\t[delivery]: withUpdatePhoneValidations(\n\t\t\t\t\t(\n\t\t\t\t\t\texternalId: string,\n\t\t\t\t\t\tphone: string,\n\t\t\t\t\t\turi: string,\n\t\t\t\t\t\ttoken?: string\n\t\t\t\t\t): Promise<SdkResponse<never>> =>\n\t\t\t\t\t\ttransformResponse(\n\t\t\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\t\t\tpathJoin(apiPaths.magicLink.update.phone, delivery),\n\t\t\t\t\t\t\t\t{ externalId, phone, URI: uri },\n\t\t\t\t\t\t\t\t{ token }\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}),\n\t\t\t{}\n\t\t) as MagicLink[Routes.updatePhone]\n\t}\n});\n\nexport default withMagicLink;\n","import { stringNonEmpty, withValidations, stringPhone, stringEmail } from '../validations';\n\nexport const identifierValidations = stringNonEmpty('identifier');\nexport const uriValidations = stringNonEmpty('uri');\nexport const withVerifyValidations = withValidations(stringNonEmpty('token'));\nexport const withSignValidations = withValidations(identifierValidations, uriValidations);\nexport const withWaitForSessionValidations = withValidations(stringNonEmpty('pendingRef'));\nexport const withUpdatePhoneValidations = withValidations(\n\tidentifierValidations,\n\tstringPhone('phone'),\n\turiValidations\n);\nexport const withUpdateEmailValidations = withValidations(\n\tidentifierValidations,\n\tstringEmail('email'),\n\turiValidations\n);\n","import {\n\tapiPaths,\n\tENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS,\n\tENCHANTED_LINK_MIN_POLLING_INTERVAL_MS\n} from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { pathJoin, transformResponse } from '../helpers';\nimport {\n\tDeliveryMethods,\n\tSdkResponse,\n\tJWTResponse,\n\tEnchantedLinkResponse,\n\tUser,\n\tLoginOptions\n} from '../types';\nimport { EnchantedLink, Routes, WaitForSessionConfig } from './types';\nimport {\n\twithWaitForSessionValidations,\n\twithSignValidations,\n\twithVerifyValidations,\n\twithUpdateEmailValidations\n} from './validations';\n\n/** Polling configuration with defaults and normalizing checks */\nconst normalizeWaitForSessionConfig = ({\n\tpollingIntervalMs = ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS,\n\ttimeoutMs = ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS\n} = {}) => ({\n\tpollingIntervalMs: Math.max(\n\t\tpollingIntervalMs || ENCHANTED_LINK_MIN_POLLING_INTERVAL_MS,\n\t\tENCHANTED_LINK_MIN_POLLING_INTERVAL_MS\n\t),\n\ttimeoutMs: Math.min(\n\t\ttimeoutMs || ENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS,\n\t\tENCHANTED_LINK_MAX_POLLING_TIMEOUT_MS\n\t)\n});\n\nconst withEnchantedLink = (httpClient: HttpClient) => ({\n\tverify: withVerifyValidations(\n\t\t(token: string): Promise<SdkResponse<never>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.enchantedLink.verify, { token }))\n\t),\n\n\tsignIn: withSignValidations(\n\t\t(\n\t\t\texternalId: string,\n\t\t\tURI: string,\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(\n\t\t\t\t\tpathJoin(apiPaths.enchantedLink.signIn, DeliveryMethods.email),\n\t\t\t\t\t{\n\t\t\t\t\t\texternalId,\n\t\t\t\t\t\tURI,\n\t\t\t\t\t\tloginOptions\n\t\t\t\t\t},\n\t\t\t\t\t{ token }\n\t\t\t\t)\n\t\t\t)\n\t) as EnchantedLink[Routes.signIn],\n\n\tsignUpOrIn: withSignValidations(\n\t\t(externalId: string, URI: string): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(pathJoin(apiPaths.enchantedLink.signUpOrIn, DeliveryMethods.email), {\n\t\t\t\t\texternalId,\n\t\t\t\t\tURI\n\t\t\t\t})\n\t\t\t)\n\t) as EnchantedLink[Routes.signIn],\n\n\tsignUp: withSignValidations(\n\t\t(externalId: string, URI: string, user?: User): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(pathJoin(apiPaths.enchantedLink.signUp, DeliveryMethods.email), {\n\t\t\t\t\texternalId,\n\t\t\t\t\tURI,\n\t\t\t\t\tuser\n\t\t\t\t})\n\t\t\t)\n\t) as EnchantedLink[Routes.signUp],\n\n\twaitForSession: withWaitForSessionValidations(\n\t\t(pendingRef: string, config?: WaitForSessionConfig): Promise<SdkResponse<JWTResponse>> =>\n\t\t\tnew Promise((resolve) => {\n\t\t\t\tconst { pollingIntervalMs, timeoutMs } = normalizeWaitForSessionConfig(config);\n\t\t\t\tlet timeout: NodeJS.Timeout;\n\t\t\t\tconst interval = setInterval(async () => {\n\t\t\t\t\tconst resp = await httpClient.post(apiPaths.enchantedLink.session, { pendingRef });\n\t\t\t\t\tif (resp.ok) {\n\t\t\t\t\t\tclearInterval(interval);\n\t\t\t\t\t\tif (timeout) clearTimeout(timeout);\n\t\t\t\t\t\tresolve(transformResponse(Promise.resolve(resp)));\n\t\t\t\t\t}\n\t\t\t\t}, pollingIntervalMs);\n\n\t\t\t\ttimeout = setTimeout(() => {\n\t\t\t\t\tresolve({\n\t\t\t\t\t\terror: {\n\t\t\t\t\t\t\tmessage: `Session polling timeout exceeded: ${timeoutMs}ms`,\n\t\t\t\t\t\t\terrorCode: '0'\n\t\t\t\t\t\t},\n\t\t\t\t\t\tok: false\n\t\t\t\t\t});\n\t\t\t\t\tclearInterval(interval);\n\t\t\t\t}, timeoutMs);\n\t\t\t})\n\t),\n\n\tupdate: {\n\t\temail: withUpdateEmailValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\temail: string,\n\t\t\t\turi: string,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<EnchantedLinkResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.enchantedLink.update.email,\n\t\t\t\t\t\t{ externalId: identifier, email, URI: uri },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withEnchantedLink;\n","import { SdkResponse, URLResponse, JWTResponse } from '../types';\n\nenum OAuthProviders {\n\tfacebook = 'facebook',\n\tgithub = 'github',\n\tgoogle = 'google',\n\tmicrosoft = 'microsoft',\n\tgitlab = 'gitlab',\n\tapple = 'apple'\n}\n\ntype StartFn = <B extends { redirect: boolean }>(\n\tredirectURL?: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse<URLResponse>>;\ntype VerifyFn = (code: string) => Promise<SdkResponse<JWTResponse>>;\n\ntype Providers<T> = Record<keyof typeof OAuthProviders, T>;\n\nexport type Oauth = {\n\tstart: Providers<StartFn>;\n\tverify: Providers<VerifyFn>;\n};\n\nexport { OAuthProviders };\n","import { apiPaths } from '../../constants';\nimport { HttpClient } from '../../httpClient';\nimport { SdkResponse, URLResponse, JWTResponse, LoginOptions } from '../types';\nimport { transformResponse } from '../helpers';\nimport { Oauth, OAuthProviders } from './types';\nimport { stringNonEmpty, withValidations } from '../validations';\n\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\nconst withOauth = (httpClient: HttpClient) => ({\n\tstart: Object.keys(OAuthProviders).reduce(\n\t\t(acc, provider) => ({\n\t\t\t...acc,\n\t\t\t// eslint-disable-next-line consistent-return\n\t\t\t[provider]: async (\n\t\t\t\tredirectUrl?: string,\n\t\t\t\t{ redirect = false } = {},\n\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\ttoken?: string\n\t\t\t) => {\n\t\t\t\tconst resp = await httpClient.post(apiPaths.oauth.start, loginOptions || {}, {\n\t\t\t\t\tqueryParams: { provider, ...(redirectUrl && { redirectURL: redirectUrl }) },\n\t\t\t\t\ttoken\n\t\t\t\t});\n\t\t\t\tif (!redirect || !resp.ok)\n\t\t\t\t\treturn transformResponse<SdkResponse<URLResponse>>(Promise.resolve(resp));\n\n\t\t\t\tconst { url } = await resp.json();\n\t\t\t\twindow.location.href = url;\n\t\t\t}\n\t\t}),\n\t\t{}\n\t) as Oauth['start'],\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.oauth.exchange, { code }))\n\t)\n});\n\nexport default withOauth;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { FlowResponse, Options, SdkResponse } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('flowId'));\nconst withNextValidations = withValidations(\n\tstringNonEmpty('executionId'),\n\tstringNonEmpty('stepId'),\n\tstringNonEmpty('interactionId')\n);\n\nconst withFlow = (httpClient: HttpClient) => ({\n\tstart: withStartValidations(\n\t\t(\n\t\t\tflowId: string,\n\t\t\toptions?: Options,\n\t\t\tinteractionId?: string,\n\t\t\tinput?: Record<string, FormDataEntryValue>\n\t\t): Promise<SdkResponse<FlowResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.flow.start, { flowId, options, interactionId, input })\n\t\t\t)\n\t),\n\tnext: withNextValidations(\n\t\t(\n\t\t\texecutionId: string,\n\t\t\tstepId: string,\n\t\t\tinteractionId: string,\n\t\t\tinput?: Record<string, FormDataEntryValue>\n\t\t): Promise<SdkResponse<FlowResponse>> => {\n\t\t\treturn transformResponse(\n\t\t\t\thttpClient.post(apiPaths.flow.next, { executionId, stepId, interactionId, input })\n\t\t\t);\n\t\t}\n\t)\n});\n\nexport default withFlow;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { SdkResponse, URLResponse, JWTResponse, LoginOptions } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst withStartValidations = withValidations(stringNonEmpty('tenant'));\nconst withExchangeValidations = withValidations(stringNonEmpty('code'));\n\ntype StartFn = <B extends { redirect: boolean }>(\n\ttenantNameOrEmail: string,\n\tconfig?: B\n) => Promise<B extends { redirect: true } ? undefined : SdkResponse<URLResponse>>;\n\nconst withSaml = (httpClient: HttpClient) => ({\n\t// eslint-disable-next-line consistent-return\n\tstart: withStartValidations(\n\t\tasync (\n\t\t\ttenantNameOrEmail: string,\n\t\t\tredirectUrl?: string,\n\t\t\t{ redirect = false } = {},\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t) => {\n\t\t\tconst resp = await httpClient.post(apiPaths.saml.start, loginOptions || {}, {\n\t\t\t\tqueryParams: { tenant: tenantNameOrEmail, redirectURL: redirectUrl },\n\t\t\t\ttoken\n\t\t\t});\n\n\t\t\tif (!redirect || !resp.ok) return transformResponse(Promise.resolve(resp));\n\n\t\t\tconst { url } = await resp.json();\n\t\t\twindow.location.href = url;\n\t\t}\n\t) as StartFn,\n\texchange: withExchangeValidations(\n\t\t(code: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.saml.exchange, { code }))\n\t)\n});\n\nexport default withSaml;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport { User, SdkResponse, JWTResponse, TOTPResponse, LoginOptions } from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst withVerifyValidations = withValidations(identifierValidations, stringNonEmpty('code'));\nconst withSignUpValidations = withValidations(identifierValidations);\nconst withUpdateValidations = withValidations(identifierValidations);\n\nconst withTotp = (httpClient: HttpClient) => ({\n\tsignUp: withSignUpValidations(\n\t\t(identifier: string, user?: User): Promise<SdkResponse<TOTPResponse>> =>\n\t\t\ttransformResponse(httpClient.post(apiPaths.totp.signUp, { externalId: identifier, user }))\n\t),\n\n\tverify: withVerifyValidations(\n\t\t(\n\t\t\tidentifier: string,\n\t\t\tcode: string,\n\t\t\tloginOptions?: LoginOptions,\n\t\t\ttoken?: string\n\t\t): Promise<SdkResponse<JWTResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(\n\t\t\t\t\tapiPaths.totp.verify,\n\t\t\t\t\t{ externalId: identifier, code, loginOptions },\n\t\t\t\t\t{ token }\n\t\t\t\t)\n\t\t\t)\n\t),\n\n\tupdate: withUpdateValidations(\n\t\t(identifier: string, token?: string): Promise<SdkResponse<TOTPResponse>> =>\n\t\t\ttransformResponse(\n\t\t\t\thttpClient.post(apiPaths.totp.update, { externalId: identifier }, { token })\n\t\t\t)\n\t)\n});\n\nexport default withTotp;\n","import { apiPaths } from '../constants';\nimport { HttpClient } from '../httpClient';\nimport { transformResponse } from './helpers';\nimport {\n\tSdkResponse,\n\tResponseData,\n\tLoginOptions,\n\tJWTResponse,\n\tWebAuthnStartResponse\n} from './types';\nimport { stringNonEmpty, withValidations } from './validations';\n\nconst identifierValidations = stringNonEmpty('identifier');\nconst originValidations = stringNonEmpty('origin');\n\nconst withSignUpStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('name')\n);\nconst withSignInStartValidations = withValidations(identifierValidations, originValidations);\nconst withUpdateStartValidations = withValidations(\n\tidentifierValidations,\n\toriginValidations,\n\tstringNonEmpty('token')\n);\nconst withFinishValidations = withValidations(\n\tstringNonEmpty('transactionId'),\n\tstringNonEmpty('response')\n);\n\nconst withWebauthn = (httpClient: HttpClient) => ({\n\tsignUp: {\n\t\tstart: withSignUpStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\tname: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.start, {\n\t\t\t\t\t\tuser: {\n\t\t\t\t\t\t\texternalId: identifier,\n\t\t\t\t\t\t\tname\n\t\t\t\t\t\t},\n\t\t\t\t\t\torigin\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUp.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\tloginOptions?: LoginOptions,\n\t\t\t\ttoken?: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.signIn.start,\n\t\t\t\t\t\t{ externalId: identifier, origin, loginOptions },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<JWTResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signIn.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tsignUpOrIn: {\n\t\tstart: withSignInStartValidations(\n\t\t\t(identifier: string, origin: string): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.signUpOrIn.start, { externalId: identifier, origin })\n\t\t\t\t)\n\t\t)\n\t},\n\n\tupdate: {\n\t\tstart: withUpdateStartValidations(\n\t\t\t(\n\t\t\t\tidentifier: string,\n\t\t\t\torigin: string,\n\t\t\t\ttoken: string\n\t\t\t): Promise<SdkResponse<WebAuthnStartResponse>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(\n\t\t\t\t\t\tapiPaths.webauthn.update.start,\n\t\t\t\t\t\t{ externalId: identifier, origin },\n\t\t\t\t\t\t{ token }\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t),\n\n\t\tfinish: withFinishValidations(\n\t\t\t(transactionId: string, response: string): Promise<SdkResponse<ResponseData>> =>\n\t\t\t\ttransformResponse(\n\t\t\t\t\thttpClient.post(apiPaths.webauthn.update.finish, { transactionId, response })\n\t\t\t\t)\n\t\t)\n\t}\n});\n\nexport default withWebauthn;\n","import withAccessKeys from './accesskey';\nimport withOtp from './otp';\nimport { HttpClient } from '../httpClient';\nimport { isJwtExpired, getJwtPermissions, getJwtRoles, transformResponse } from './helpers';\nimport { stringNonEmpty, withValidations } from './validations';\nimport withMagicLink from './magicLink';\nimport withEnchantedLink from './enchantedLink';\nimport { apiPaths } from '../constants';\nimport withOauth from './oauth';\nimport withFlow from './flow';\nimport withSaml from './saml';\nimport withTotp from './totp';\nimport withWebauthn from './webauthn';\nimport { UserResponse, JWTResponse } from './types';\n\nconst withJwtValidations = withValidations(stringNonEmpty('token'));\n\n/** Returns Descope SDK with all available operations */\nexport default (httpClient: HttpClient) => ({\n\taccessKey: withAccessKeys(httpClient),\n\totp: withOtp(httpClient),\n\tmagicLink: withMagicLink(httpClient),\n\tenchantedLink: withEnchantedLink(httpClient),\n\toauth: withOauth(httpClient),\n\tsaml: withSaml(httpClient),\n\ttotp: withTotp(httpClient),\n\twebauthn: withWebauthn(httpClient),\n\tflow: withFlow(httpClient),\n\trefresh: (token?: string) =>\n\t\ttransformResponse<JWTResponse>(httpClient.post(apiPaths.refresh, {}, { token })),\n\tlogout: (token?: string) =>\n\t\ttransformResponse<never>(httpClient.post(apiPaths.logout, {}, { token })),\n\tlogoutAll: (token?: string) =>\n\t\ttransformResponse<never>(httpClient.post(apiPaths.logoutAll, {}, { token })),\n\tme: (token?: string) => transformResponse<UserResponse>(httpClient.get(apiPaths.me, { token })),\n\tisJwtExpired: withJwtValidations(isJwtExpired),\n\tgetJwtPermissions: withJwtValidations(getJwtPermissions),\n\tgetJwtRoles: withJwtValidations(getJwtRoles),\n\thttpClient\n});\n","import { DEFAULT_BASE_API_URL } from './constants';\nimport createHttpClient from './httpClient';\nimport { AfterRequest, BeforeRequest, Hooks } from './httpClient/types';\nimport createSdk from './sdk';\nimport { Logger } from './sdk/types';\nimport { stringNonEmpty, withValidations } from './sdk/validations';\nimport { hasPathValue } from './sdk/validations/validators';\n\ntype SdkConfig = {\n\tprojectId: string;\n\tlogger?: Logger;\n\tbaseUrl?: string;\n\thooks?: Hooks;\n\tcookiePolicy?: RequestCredentials;\n};\n\n/** Validate we have non-empty project id */\nconst withSdkConfigValidations = withValidations([\n\thasPathValue('projectId', stringNonEmpty('projectId'))\n]);\n\n/** Add the ability to pass multiple hooks instead of one when creating an SDK instance */\nconst withMultipleHooks =\n\t<T extends object>(createSdk: (config: SdkConfig) => T) =>\n\t(\n\t\tconfig: Omit<SdkConfig, 'hooks'> & {\n\t\t\thooks?: {\n\t\t\t\tbeforeRequest?: BeforeRequest | BeforeRequest[];\n\t\t\t\tafterRequest?: AfterRequest | AfterRequest[];\n\t\t\t};\n\t\t}\n\t) => {\n\t\tconst beforeRequestHooks = [].concat(config.hooks?.beforeRequest || []);\n\t\tconst afterRequestHooks = [].concat(config.hooks?.afterRequest || []);\n\n\t\tconst beforeRequest: BeforeRequest = (config) =>\n\t\t\tbeforeRequestHooks?.reduce((acc, fn) => fn(acc), config);\n\t\tconst afterRequest: AfterRequest = (req, res) => {\n\t\t\tafterRequestHooks?.forEach((fn) => fn(req, res?.clone()));\n\t\t};\n\n\t\treturn createSdk({ ...config, hooks: { beforeRequest, afterRequest } });\n\t};\n\n/** Descope SDK client */\nexport default withSdkConfigValidations(\n\twithMultipleHooks(({ projectId, logger, baseUrl, hooks, cookiePolicy }: SdkConfig) =>\n\t\tcreateSdk(\n\t\t\tcreateHttpClient({\n\t\t\t\tbaseUrl: baseUrl || DEFAULT_BASE_API_URL,\n\t\t\t\tprojectId,\n\t\t\t\tlogger,\n\t\t\t\thooks,\n\t\t\t\tcookiePolicy\n\t\t\t})\n\t\t)\n\t)\n);\n","/* eslint-disable import/exports-last */\nimport { ResponseData } from '../../sdk/types';\nimport { SdkFnWrapper, ReplacePaths, SdkFnsPaths } from './types';\n\n/**\n * A wrapper function that allows to wrap multiple Sdk function\n * @param obj: The Sdk instance you want to wrap\n * @param paths: A readonly list of paths of the functions you want to wrap\n * @param wrapper: Your wrapper function, it should gets an Sdk function and return a new Sdk function\n * @returns a mutated instance of the Sdk with updated type definitions based on your wrapper return type\n *\n * Usage example:\n *\n * // Assuming this is our SDK instance\n * const sdk = {\n * me: (token) => {...}\n * flow: {\n * start: (...params) => {...}\n * next: (...params) => {...}\n * }\n * ...\n * }\n *\n * // This is our wrapper\n * const wrapper = (sdkFn) => async (...args) => {\n * const sdkResponse = await sdkFn(...args)\n *\n * // Modify return value\n * return {...sdkResponse, data: {...sdkResponse.data, myCustomAttribute: 'hello'}}\n * }\n *\n * // And those are the paths we want to wrap\n * const paths = ['flow.start', 'flow.next'] as const // You MUST add as const!\n *\n * // We can wrap our SDK functions with the wrapper we created in this way\n * const newlyTypedSdk = wrapWith(sdk, paths, wrapper)\n *\n * Now the 2 wrapped functions will have the updated type based on the wrapper return value\n */\n\nconst wrapWith = <\n\tObj extends object,\n\tPaths extends ReadonlyArray<SdkFnsPaths<Obj>>,\n\tWrapperData extends ResponseData\n>(\n\tobj: Obj,\n\tpaths: Paths,\n\twrapper: SdkFnWrapper<WrapperData>\n): ReplacePaths<Obj, Paths, WrapperData> => {\n\tpaths.forEach((path) => {\n\t\tconst sections = path.split('.');\n\t\tlet section = sections.shift();\n\t\tlet currentRef: Record<string, any> = obj;\n\n\t\twhile (sections.length > 0) {\n\t\t\tcurrentRef = currentRef[section];\n\n\t\t\tif (!section || !currentRef) {\n\t\t\t\tthrow Error(`Invalid path \"${path}\", \"${section}\" is missing or has no value`);\n\t\t\t}\n\n\t\t\tsection = sections.shift();\n\t\t}\n\n\t\tif (typeof currentRef[section] !== 'function') {\n\t\t\tthrow Error(`\"${path}\" is not a function`);\n\t\t}\n\t\tconst origFn = currentRef[section];\n\t\tcurrentRef[section] = wrapper(origFn);\n\t});\n\n\treturn obj as any;\n};\n\nexport default wrapWith;\n","import { SdkConfig } from '../types';\n\nexport { default as wrapWith } from './wrapWith';\nexport type { SdkFnWrapper } from './wrapWith/types';\n\n/**\n * Add hooks to an existing core-sdk config\n */\nexport const addHooksToConfig = <Config extends SdkConfig>(\n\tconfig: Config,\n\thooks: Config['hooks']\n): Config => {\n\t['beforeRequest', 'afterRequest'].reduce((acc, key) => {\n\t\tacc[key] = [].concat(config.hooks?.[key] || []).concat(hooks?.[key] || []);\n\n\t\treturn acc;\n\t}, (config.hooks ??= {}));\n\n\treturn config;\n};\n","import createSdk from './createSdk';\nimport { HTTPMethods, RequestConfig } from './httpClient/types';\nimport { OAuthProviders } from './sdk/oauth/types';\nimport { DeliveryMethods } from './sdk/types';\n\n/** Descope SDK client with delivery methods enum.\n *\n * Please see full documentation at {@link https://docs.descope.com/guides Descope Docs}\n * @example Usage\n *\n * ```js\n * import descopeSdk from '@descope/core-js-sdk';\n *\n * const myProjectId = 'xxx';\n * const sdk = descopeSdk({ projectId: myProjectId });\n *\n * const userIdentifier = 'identifier';\n * sdk.otp.signIn.email(userIdentifier);\n * const jwtResponse = sdk.otp.verify.email(userIdentifier, codeFromEmail);\n * ```\n */\nexport default Object.assign(createSdk, { DeliveryMethods });\n\nexport { transformResponse } from './sdk/helpers';\nexport type {\n\tEnchantedLinkResponse,\n\tExchangeAccessKeyResponse,\n\tFlowAction,\n\tFlowResponse,\n\tFlowStatus,\n\tJWTResponse,\n\tResponseData,\n\tSdkResponse,\n\tTOTPResponse,\n\tURLResponse,\n\tUserResponse\n} from './sdk/types';\nexport * from './utils';\nexport type { SdkFnWrapper } from './utils';\nexport type { HTTPMethods, RequestConfig };\n\n/** Type to restrict to valid delivery methods */\nexport type DeliveryMethod = keyof typeof DeliveryMethods;\n/** Type to restrict to valid OAuth providers */\nexport type OAuthProvider = keyof typeof OAuthProviders;\n"],"names":["apiPaths","exchange","verify","signIn","signUp","update","email","phone","signUpOrIn","session","start","finish","next","httpLogBuilder","msg","headers","headersObj","entries","Object","fromEntries","Headers","JSON","stringify","this","body","Body","url","Url","toString","method","Method","title","Title","status","Status","build","keys","flatMap","key","join","createFetchLogger","logger","receivedFetch","fetchInternal","fetch","Error","async","args","log","buildRequestLog","resp","ok","respBody","clone","text","Promise","resolve","json","parse","statusText","buildResponseLog","HTTPMethods","mergeHeaders","sources","reduce","acc","source","srcArr","Array","isArray","from","getSrcArr","_","value","serializeBody","undefined","createAuthorizationHeader","projectId","token","bearer","Authorization","createHttpClient","baseUrl","baseConfig","hooks","cookiePolicy","fetchWithLogger","sendRequest","config","requestConfig","beforeRequest","path","queryParams","res","URL","search","URLSearchParams","urlBuilder","baseHeaders","credentials","afterRequest","get","post","put","delete","getJwtAuthorizationItems","tenant","claim","claims","parseJwt","tenants","_a","items","jwtDecode","isJwtExpired","exp","Date","getTime","getJwtPermissions","getJwtRoles","pathJoin","replace","transformResponse","response","transform","ret","code","data","error","createValidator","rule","defaultMsg","val","createValidation","validators","validate","forEach","validator","errMsg","regexMatch","regex","test","validateEmail","validatePhone","isEmail","isPhone","isNotEmpty","min","length","isString","withValidations","argsRules","fn","rulesArr","i","stringNonEmpty","fieldName","stringEmail","stringPhone","withExchangeValidations","withAccessKeys","httpClient","accessKey","DeliveryPhone","DeliveryMethods","FlowStatus","Routes","identifierValidations","withVerifyValidations","withSignValidations","withUpdatePhoneValidations","withUpdateEmailValidations","withOtp","delivery","assign","externalId","loginOptions","user","identifier","uriValidations","withMagicLink","URI","uri","withWaitForSessionValidations","withEnchantedLink","waitForSession","pendingRef","pollingIntervalMs","timeoutMs","Math","max","normalizeWaitForSessionConfig","timeout","interval","setInterval","clearInterval","clearTimeout","setTimeout","message","errorCode","OAuthProviders","withOauth","provider","redirectUrl","redirect","redirectURL","window","location","href","withStartValidations","withNextValidations","withFlow","flowId","options","interactionId","input","executionId","stepId","withSaml","tenantNameOrEmail","withSignUpValidations","withUpdateValidations","withTotp","originValidations","withSignUpStartValidations","withSignInStartValidations","withUpdateStartValidations","withFinishValidations","withWebauthn","origin","name","transactionId","withJwtValidations","rules","createSdk","validatePathValue","withSdkConfigValidations","beforeRequestHooks","concat","afterRequestHooks","_b","req","withMultipleHooks","otp","magicLink","enchantedLink","oauth","saml","totp","webauthn","flow","refresh","logout","logoutAll","me","wrapWith","obj","paths","wrapper","sections","split","section","shift","currentRef","origFn","addHooksToConfig","index"],"mappings":"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"}
|