@descope/core-js-sdk 2.12.2 → 2.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  type JSONSerializable = string | number | boolean | null | Array<JSONSerializable>;
2
2
  type FlowInput = Record<string, JSONSerializable>;
3
3
 
4
+ type NOTPResponse = {
5
+ pendingRef: string;
6
+ redirectUrl: string;
7
+ QRCode: string;
8
+ };
9
+
4
10
  type DeviceInfo = {
5
11
  webAuthnSupport?: boolean;
6
12
  };
@@ -192,6 +198,7 @@ type FlowResponse = {
192
198
  samlResponse: string;
193
199
  relayState: string;
194
200
  };
201
+ openInNewTabUrl?: string;
195
202
  webauthn?: {
196
203
  transactionId: string;
197
204
  options: string;
@@ -248,6 +255,11 @@ type DeliveriesPhone<T extends Record<DeliveryPhone, SdkFn$1> | SdkFn$1> = {
248
255
  };
249
256
  /** Logger type that supports the given levels (debug, log, error) */
250
257
  type Logger = Pick<Console, 'debug' | 'log' | 'error' | 'warn'>;
258
+ /** Polling configuration for session waiting */
259
+ type WaitForSessionConfig = {
260
+ pollingIntervalMs: number;
261
+ timeoutMs: number;
262
+ };
251
263
  type UpdateOptions<T extends boolean> = {
252
264
  addToLoginIDs?: T;
253
265
  onMergeUseExisting?: T extends true ? boolean : never;
@@ -268,12 +280,6 @@ declare enum OAuthProviders {
268
280
  type StartFn = (redirectURL?: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<URLResponse>>;
269
281
  type Providers<T> = Record<keyof typeof OAuthProviders, T>;
270
282
 
271
- /** Polling configuration for session waiting */
272
- type WaitForSessionConfig = {
273
- pollingIntervalMs: number;
274
- timeoutMs: number;
275
- };
276
-
277
283
  /** Request configuration including headers, query params and token */
278
284
  type HttpClientReqConfig = {
279
285
  headers?: HeadersInit;
@@ -378,6 +384,15 @@ type SdkFnWrapper<Z extends ResponseData> = <A extends any[], R extends Response
378
384
  */
379
385
  declare const wrapWith: <Obj extends object, Paths extends readonly SdkFnsPaths<Obj>[], WrapperData extends ResponseData>(obj: Obj, paths: Paths, wrapper: SdkFnWrapper<WrapperData>) => ReplacePaths<Obj, Paths, WrapperData>;
380
386
 
387
+ /** Polling configuration with defaults and normalizing checks */
388
+ declare const normalizeWaitForSessionConfig: ({ pollingIntervalMs, timeoutMs, }?: {
389
+ pollingIntervalMs?: number;
390
+ timeoutMs?: number;
391
+ }) => {
392
+ pollingIntervalMs: number;
393
+ timeoutMs: number;
394
+ };
395
+
381
396
  declare const _default$1: {
382
397
  TOO_MANY_REQUESTS: number;
383
398
  };
@@ -495,6 +510,12 @@ declare const _default: ((config: Omit<{
495
510
  verify: (loginId: string, code: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<JWTResponse>>;
496
511
  update: (loginId: string, token?: string) => Promise<SdkResponse<TOTPResponse>>;
497
512
  };
513
+ notp: {
514
+ signUpOrIn: (loginId?: string, signUpOptions?: SignUpOptions) => Promise<SdkResponse<NOTPResponse>>;
515
+ signUp: (loginId?: string, user?: User, signUpOptions?: SignUpOptions) => Promise<SdkResponse<NOTPResponse>>;
516
+ signIn: (loginId?: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<NOTPResponse>>;
517
+ waitForSession: (pendingRef: string, config?: WaitForSessionConfig) => Promise<SdkResponse<JWTResponse>>;
518
+ };
498
519
  webauthn: {
499
520
  signUp: {
500
521
  start: (loginId: string, origin: string, name: string) => Promise<SdkResponse<WebAuthnStartResponse>>;
@@ -549,4 +570,4 @@ type DeliveryMethod = keyof typeof DeliveryMethods;
549
570
  /** Type to restrict to valid OAuth providers */
550
571
  type OAuthProvider = keyof typeof OAuthProviders;
551
572
 
552
- export { type AccessKeyLoginOptions, type DeliveryMethod, type EnchantedLinkResponse, type ExchangeAccessKeyResponse, type FlowAction, type FlowResponse, FlowStatus, HTTPMethods, _default$1 as HttpStatusCodes, type JWTResponse, type LoginOptions, type OAuthProvider, type RequestConfig, type ResponseData, type SdkFnWrapper, type SdkResponse, type TOTPResponse, type URLResponse, type UserHistoryResponse, type UserResponse, _default as default, transformResponse, wrapWith };
573
+ export { type AccessKeyLoginOptions, type DeliveryMethod, type EnchantedLinkResponse, type ExchangeAccessKeyResponse, type FlowAction, type FlowResponse, FlowStatus, HTTPMethods, _default$1 as HttpStatusCodes, type JWTResponse, type LoginOptions, type OAuthProvider, type RequestConfig, type ResponseData, type SdkFnWrapper, type SdkResponse, type TOTPResponse, type URLResponse, type UserHistoryResponse, type UserResponse, _default as default, normalizeWaitForSessionConfig, transformResponse, wrapWith };
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import e from"jwt-decode";var t={exchange:"/v1/auth/accesskey/exchange"},n={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"},s={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",startNative:"v1/auth/oauth/native/start",finishNative:"v1/auth/oauth/native/finish"},a={start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},r={verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/auth/totp/update"},d={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"}},l={signUp:"/v1/auth/password/signup",signIn:"/v1/auth/password/signin",sendReset:"/v1/auth/password/reset",update:"/v1/auth/password/update",replace:"/v1/auth/password/replace",policy:"/v1/auth/password/policy"},u="/v1/auth/refresh",p="/v1/auth/tenant/select",c="/v1/auth/logout",g="/v1/auth/logoutall",h="/v1/auth/me",v="/v1/auth/me/history",f={start:"/v1/flow/start",next:"/v1/flow/next"};const m="<region>",I=`https://api.${m}descope.com`,b=1e3,y=6e5,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")}},O=(e,t)=>{const n=(e=>async(...t)=>{const n=await e(...t),s=await n.text();return n.text=()=>Promise.resolve(s),n.json=()=>Promise.resolve(JSON.parse(s)),n.clone=()=>n,n})(t||fetch);return n||null==e||e.warn("Fetch is not defined, you will not be able to send http requests, if you are running in a test, make sure fetch is defined globally"),e?async(...t)=>{if(!n)throw Error("Cannot send http request, fetch is not defined, if you are running in a test, make sure fetch is defined globally");e.log((e=>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.text();return k().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})(s)),s}:n};var w;!function(e){e.get="GET",e.delete="DELETE",e.post="POST",e.put="PUT"}(w||(w={}));var j={TOO_MANY_REQUESTS:429};function U(e,t,n){var s;let i=R(e);t&&(i=null===(s=null==i?void 0:i.tenants)||void 0===s?void 0:s[t]);const o=null==i?void 0:i[n];return Array.isArray(o)?o:[]}function R(t){if("string"!=typeof t||!t)throw new Error("Invalid token provided");return e(t)}function P(e){const{exp:t}=R(e);return(new Date).getTime()/1e3>t}function x(e){let t=R(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function q(e,t){return U(e,t,"permissions")}function $(e,t){return U(e,t,"roles")}const E=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function A(e,t){var n;const s=await e,i={code:s.status,ok:s.ok,response:s},o=await s.clone().json();return s.ok?i.data=t?t(o):o:(i.error=o,s.status===j.TOO_MANY_REQUESTS&&Object.assign(i.error,{retryAfter:Number.parseInt(null===(n=s.headers)||void 0===n?void 0:n.get("retry-after"))||0})),i}const S=(...e)=>new Headers(e.reduce(((e,t)=>{const n=(e=>Array.isArray(e)?e:e instanceof Headers?Array.from(e.entries()):e?Object.entries(e):[])(t);return n.reduce(((t,[n,s])=>(e[n]=s,e)),e),e}),{})),T=e=>void 0===e?void 0:JSON.stringify(e),M=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},N=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:i,cookiePolicy:o,fetch:a})=>{const r=O(s,a),d=async s=>{const a=(null==i?void 0:i.beforeRequest)?i.beforeRequest(s):s,{path:d,body:l,headers:u,queryParams:p,method:c,token:g}=a,h={headers:S(M(t,g),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"2.12.2"},(null==n?void 0:n.baseHeaders)||{},u),method:c,body:T(l)};null!==o&&(h.credentials=o||"include");const v=await r((({path:e,baseUrl:t,queryParams:n,projectId:s})=>{const i=s.slice(1,-27);t=t.replace(m,i?i+".":"");const o=new URL(t);return o.pathname=E(o.pathname,e),n&&(o.search=new URLSearchParams(n).toString()),o})({path:d,baseUrl:e,queryParams:p,projectId:t}),h);return(null==i?void 0:i.afterRequest)&&await i.afterRequest(s,null==v?void 0:v.clone()),v};return{get:(e,{headers:t,queryParams:n,token:s}={})=>d({path:e,headers:t,queryParams:n,body:void 0,method:w.get,token:s}),post:(e,t,{headers:n,queryParams:s,token:i}={})=>d({path:e,headers:n,queryParams:s,body:t,method:w.post,token:i}),put:(e,t,{headers:n,queryParams:s,token:i}={})=>d({path:e,headers:n,queryParams:s,body:t,method:w.put,token:i}),delete:(e,{headers:t,queryParams:n,token:s}={})=>d({path:e,headers:t,queryParams:n,body:void 0,method:w.delete,token:s}),hooks:i}},L=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),z=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),H=e=>t=>e.test(t),J=H(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),C=H(/^\+[1-9]{1}[0-9]{3,14}$/),_=(e,t)=>n=>z(...t).validate(((e,t,n)=>{const s=(Array.isArray(t)?t.join("."):String(t)).replace(/\[\\?("|')?(\w|d)+\\?("|')?\]/g,((e,t,n)=>"."+n)).split("."),i=s.length;let o=0,a=e===Object(e)?e:void 0;for(;null!=a&&o<i;)a=a[s[o++]];return o&&o===i&&void 0!==a?a:n})(n,e)),D=L(J,'"{val}" is not a valid email'),Z=L(C,'"{val}" is not a valid phone number'),B=L((F=1,e=>e.length>=F),"Minimum length is 1");var F;const K=L((e=>"string"==typeof e),"Input is not a string"),Q=L((e=>void 0===e),"Input is defined"),V=(Y=[K(),Q()],G="Input is not a string or undefined",(e=G)=>t=>{const n=Y.filter((e=>e(t)));return!(n.length<Y.length)&&(e?e.replace("{val}",t):n.join(" OR "))});var Y,G;const W=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>z(...e).validate(n[t]))),t(...n)),X=e=>[K(`"${e}" must be a string`),B(`"${e}" must not be empty`)],ee=e=>[K(`"${e}" must be a string`),D()],te=e=>[K(`"${e}" must be a string`),Z()],ne=W(X("accessKey")),se=e=>({exchange:ne(((n,s)=>A(e.post(t.exchange,{loginOptions:s},{token:n}))))});var ie,oe;!function(e){e.sms="sms",e.voice="voice",e.whatsapp="whatsapp"}(ie||(ie={})),function(e){e.email="email"}(oe||(oe={}));const ae=Object.assign(Object.assign({},ie),oe);var re;!function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(re||(re={}));const de=X("loginId"),le=W(X("token")),ue=W(de),pe=W(X("pendingRef")),ce=W(de,ee("email")),ge=e=>({verify:le((t=>A(e.post(i.verify,{token:t})))),signIn:ue(((t,n,s,o)=>A(e.post(E(i.signIn,ae.email),{loginId:t,URI:n,loginOptions:s},{token:o})))),signUpOrIn:ue(((t,n,s)=>A(e.post(E(i.signUpOrIn,ae.email),{loginId:t,URI:n,loginOptions:s})))),signUp:ue(((t,n,s,o)=>A(e.post(E(i.signUp,ae.email),{loginId:t,URI:n,user:s,loginOptions:o})))),waitForSession:pe(((t,n)=>new Promise((s=>{const{pollingIntervalMs:o,timeoutMs:a}=(({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||b,b),timeoutMs:Math.min(t||y,y)}))(n);let r;const d=setInterval((async()=>{const n=await e.post(i.session,{pendingRef:t});n.ok&&(clearInterval(d),r&&clearTimeout(r),s(A(Promise.resolve(n))))}),o);r=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${a}ms`,errorCode:"0"},ok:!1}),clearInterval(d)}),a)})))),update:{email:ce(((t,n,s,o,a)=>A(e.post(i.update.email,Object.assign({loginId:t,email:n,URI:s},a),{token:o}))))}}),he=W(X("flowId")),ve=W(X("executionId"),X("stepId"),X("interactionId")),fe=e=>({start:he(((t,n,s,i,o,a,r)=>A(e.post(f.start,{flowId:t,options:n,conditionInteractionId:s,interactionId:i,version:o,componentsVersion:a,input:r})))),next:ve(((t,n,s,i,o,a)=>A(e.post(f.next,{executionId:t,stepId:n,interactionId:s,version:i,componentsVersion:o,input:a}))))}),me=X("loginId"),Ie=W(X("token")),be=W(me),ye=W(me,te("phone")),ke=W(me,ee("email")),Oe=Object.keys(ae).filter((e=>e!==ie.voice)),we=e=>({verify:Ie((t=>A(e.post(s.verify,{token:t})))),signIn:Oe.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:be(((t,i,o,a)=>A(e.post(E(s.signIn,n),{loginId:t,URI:i,loginOptions:o},{token:a}))))})),{}),signUp:Oe.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:be(((t,i,o,a)=>A(e.post(E(s.signUp,n),{loginId:t,URI:i,user:o,loginOptions:a}))))})),{}),signUpOrIn:Oe.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:be(((t,i,o)=>A(e.post(E(s.signUpOrIn,n),{loginId:t,URI:i,loginOptions:o}))))})),{}),update:{email:ke(((t,n,i,o,a)=>A(e.post(s.update.email,Object.assign({loginId:t,email:n,URI:i},a),{token:o})))),phone:Object.keys(ie).filter((e=>e!==ie.voice)).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ye(((t,i,o,a,r)=>A(e.post(E(s.update.phone,n),Object.assign({loginId:t,phone:i,URI:o},r),{token:a}))))})),{})}});var je;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple",e.discord="discord",e.linkedin="linkedin",e.slack="slack"}(je||(je={}));const Ue=W(X("code")),Re=e=>({start:Object.assign(((t,n,s,i)=>A(e.post(o.start,s||{},{queryParams:Object.assign({provider:t},n&&{redirectURL:n}),token:i}))),Object.keys(je).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:(t,s,i)=>A(e.post(o.start,s||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i}))})),{})),exchange:Ue((t=>A(e.post(o.exchange,{code:t})))),startNative:(t,n)=>A(e.post(o.startNative,{provider:t,loginOptions:n})),finishNative:(t,n,s,i,a)=>A(e.post(o.finishNative,{provider:t,stateId:n,user:s,code:i,idToken:a}))}),Pe=X("loginId"),xe=W(Pe,X("code")),qe=W(Pe),$e=W(Pe,te("phone")),Ee=W(Pe,ee("email")),Ae=e=>({verify:Object.keys(ae).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:xe(((t,i)=>A(e.post(E(n.verify,s),{code:i,loginId:t}))))})),{}),signIn:Object.keys(ae).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:qe(((t,i,o)=>A(e.post(E(n.signIn,s),{loginId:t,loginOptions:i},{token:o}))))})),{}),signUp:Object.keys(ae).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:qe(((t,i,o)=>A(e.post(E(n.signUp,s),{loginId:t,user:i,loginOptions:o}))))})),{}),signUpOrIn:Object.keys(ae).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:qe(((t,i)=>A(e.post(E(n.signUpOrIn,s),{loginId:t,loginOptions:i}))))})),{}),update:{email:Ee(((t,s,i,o)=>A(e.post(n.update.email,Object.assign({loginId:t,email:s},o),{token:i})))),phone:Object.keys(ie).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:$e(((t,i,o,a)=>A(e.post(E(n.update.phone,s),Object.assign({loginId:t,phone:i},a),{token:o}))))})),{})}}),Se=W(X("tenant")),Te=W(X("code")),Me=e=>({start:Se(((t,n,s,i)=>A(e.post(a.start,s||{},{queryParams:{tenant:t,redirectURL:n},token:i})))),exchange:Te((t=>A(e.post(a.exchange,{code:t}))))}),Ne=X("loginId"),Le=W(Ne,X("code")),ze=W(Ne),He=W(Ne),Je=e=>({signUp:ze(((t,n)=>A(e.post(r.signUp,{loginId:t,user:n})))),verify:Le(((t,n,s,i)=>A(e.post(r.verify,{loginId:t,code:n,loginOptions:s},{token:i})))),update:He(((t,n)=>A(e.post(r.update,{loginId:t},{token:n}))))}),Ce=X("loginId"),_e=X("newPassword"),De=W(Ce,X("password")),Ze=W(Ce),Be=W(Ce,_e),Fe=W(Ce,X("oldPassword"),_e),Ke=e=>({signUp:De(((t,n,s)=>A(e.post(l.signUp,{loginId:t,password:n,user:s})))),signIn:De(((t,n)=>A(e.post(l.signIn,{loginId:t,password:n})))),sendReset:Ze(((t,n,s)=>A(e.post(l.sendReset,{loginId:t,redirectUrl:n,templateOptions:s})))),update:Be(((t,n,s)=>A(e.post(l.update,{loginId:t,newPassword:n},{token:s})))),replace:Fe(((t,n,s)=>A(e.post(l.replace,{loginId:t,oldPassword:n,newPassword:s})))),policy:()=>A(e.get(l.policy))}),Qe=[K(`"${"loginId"}" must be a string`)];const Ve=X("loginId"),Ye=X("origin"),Ge=W(Ve,Ye,X("name")),We=W(Ve,Ye),Xe=W(Qe,Ye),et=W(Ve,Ye,X("token")),tt=W(X("transactionId"),X("response")),nt=e=>({signUp:{start:Ge(((t,n,s)=>A(e.post(d.signUp.start,{user:{loginId:t,name:s},origin:n})))),finish:tt(((t,n)=>A(e.post(d.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Xe(((t,n,s,i)=>A(e.post(d.signIn.start,{loginId:t,origin:n,loginOptions:s},{token:i})))),finish:tt(((t,n)=>A(e.post(d.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:We(((t,n)=>A(e.post(d.signUpOrIn.start,{loginId:t,origin:n}))))},update:{start:et(((t,n,s)=>A(e.post(d.update.start,{loginId:t,origin:n},{token:s})))),finish:tt(((t,n)=>A(e.post(d.update.finish,{transactionId:t,response:n}))))}}),st=W(X("token")),it=W((e=>[V(`"${e}" must be string or undefined`)])("token"));var ot,at;var rt=W([(ot="projectId",at=X("projectId"),L(_(ot,at))())])((e=>t=>e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>{var n;const s=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]);return null==s?void 0:s.reduce(((e,t)=>t(e)),e)},afterRequest:async(e,n)=>{var s;const i=[].concat((null===(s=t.hooks)||void 0===s?void 0:s.afterRequest)||[]);(await Promise.allSettled(null==i?void 0:i.map((t=>t(e,null==n?void 0:n.clone()))))).forEach((e=>{var n;return"rejected"===e.status&&(null===(n=t.logger)||void 0===n?void 0:n.error(e.reason))}))}}})))((({projectId:e,logger:t,baseUrl:n,hooks:s,cookiePolicy:i,baseHeaders:o={},fetch:a})=>{return r=N({baseUrl:n||I,projectId:e,logger:t,hooks:s,cookiePolicy:i,baseConfig:{baseHeaders:o},fetch:a}),{accessKey:se(r),otp:Ae(r),magicLink:we(r),enchantedLink:ge(r),oauth:Re(r),saml:Me(r),totp:Je(r),webauthn:nt(r),password:Ke(r),flow:fe(r),refresh:it((e=>A(r.post(u,{},{token:e})))),selectTenant:W([K("tenantId")],[V('"token" must be string or undefined')])(((e,t)=>A(r.post(p,{tenant:e},{token:t})))),logout:it((e=>A(r.post(c,{},{token:e})))),logoutAll:it((e=>A(r.post(g,{},{token:e})))),me:it((e=>A(r.get(h,{token:e})))),history:it((e=>A(r.get(v,{token:e})))),isJwtExpired:st(P),getTenants:st(x),getJwtPermissions:st(q),getJwtRoles:st($),httpClient:r};var r})));const dt=(e,t,n)=>(t.forEach((t=>{const s=t.split(".");let i=s.shift(),o=e;for(;s.length>0;){if(o=o[i],!i||!o)throw Error(`Invalid path "${t}", "${i}" is missing or has no value`);i=s.shift()}if("function"!=typeof o[i])throw Error(`"${t}" is not a function`);const a=o[i];o[i]=n(a)})),e);var lt=Object.assign(rt,{DeliveryMethods:ae});export{j as HttpStatusCodes,lt as default,A as transformResponse,dt as wrapWith};
1
+ import e from"jwt-decode";var t={exchange:"/v1/auth/accesskey/exchange"},n={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"},s={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",startNative:"v1/auth/oauth/native/start",finishNative:"v1/auth/oauth/native/finish"},a={start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},r={verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/auth/totp/update"},p={signIn:"/v1/auth/notp/whatsapp/signin",signUp:"/v1/auth/notp/whatsapp/signup",signUpOrIn:"/v1/auth/notp/whatsapp/signup-in",session:"/v1/auth/notp/pending-session"},d={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"}},l={signUp:"/v1/auth/password/signup",signIn:"/v1/auth/password/signin",sendReset:"/v1/auth/password/reset",update:"/v1/auth/password/update",replace:"/v1/auth/password/replace",policy:"/v1/auth/password/policy"},u="/v1/auth/refresh",g="/v1/auth/tenant/select",c="/v1/auth/logout",h="/v1/auth/logoutall",v="/v1/auth/me",f="/v1/auth/me/history",I={start:"/v1/flow/start",next:"/v1/flow/next"};const m="<region>",b=`https://api.${m}descope.com`,k=1e3,y=6e5,O=()=>{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")}},w=(e,t)=>{const n=(e=>async(...t)=>{const n=await e(...t),s=await n.text();return n.text=()=>Promise.resolve(s),n.json=()=>Promise.resolve(JSON.parse(s)),n.clone=()=>n,n})(t||fetch);return n||null==e||e.warn("Fetch is not defined, you will not be able to send http requests, if you are running in a test, make sure fetch is defined globally"),e?async(...t)=>{if(!n)throw Error("Cannot send http request, fetch is not defined, if you are running in a test, make sure fetch is defined globally");e.log((e=>O().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.text();return O().title("Response").url(e.url.toString()).status(`${e.status} ${e.statusText}`).headers(e.headers).body(t).build()})(s)),s}:n};var j;!function(e){e.get="GET",e.delete="DELETE",e.post="POST",e.put="PUT"}(j||(j={}));var U={TOO_MANY_REQUESTS:429};function R(e,t,n){var s;let i=P(e);t&&(i=null===(s=null==i?void 0:i.tenants)||void 0===s?void 0:s[t]);const o=null==i?void 0:i[n];return Array.isArray(o)?o:[]}function P(t){if("string"!=typeof t||!t)throw new Error("Invalid token provided");return e(t)}function x(e){const{exp:t}=P(e);return(new Date).getTime()/1e3>t}function q(e){let t=P(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function $(e,t){return R(e,t,"permissions")}function E(e,t){return R(e,t,"roles")}const S=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function T(e,t){var n;const s=await e,i={code:s.status,ok:s.ok,response:s},o=await s.clone().json();return s.ok?i.data=t?t(o):o:(i.error=o,s.status===U.TOO_MANY_REQUESTS&&Object.assign(i.error,{retryAfter:Number.parseInt(null===(n=s.headers)||void 0===n?void 0:n.get("retry-after"))||0})),i}const A=(...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}),{})),M=e=>void 0===e?void 0:JSON.stringify(e),N=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},L=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:i,cookiePolicy:o,fetch:a})=>{const r=w(s,a),p=async s=>{const a=(null==i?void 0:i.beforeRequest)?i.beforeRequest(s):s,{path:p,body:d,headers:l,queryParams:u,method:g,token:c}=a,h={headers:A(N(t,c),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"2.14.0"},(null==n?void 0:n.baseHeaders)||{},l),method:g,body:M(d)};null!==o&&(h.credentials=o||"include");const v=await r((({path:e,baseUrl:t,queryParams:n,projectId:s})=>{const i=s.slice(1,-27);t=t.replace(m,i?i+".":"");const o=new URL(t);return o.pathname=S(o.pathname,e),n&&(o.search=new URLSearchParams(n).toString()),o})({path:p,baseUrl:e,queryParams:u,projectId:t}),h);return(null==i?void 0:i.afterRequest)&&await i.afterRequest(s,null==v?void 0:v.clone()),v};return{get:(e,{headers:t,queryParams:n,token:s}={})=>p({path:e,headers:t,queryParams:n,body:void 0,method:j.get,token:s}),post:(e,t,{headers:n,queryParams:s,token:i}={})=>p({path:e,headers:n,queryParams:s,body:t,method:j.post,token:i}),put:(e,t,{headers:n,queryParams:s,token:i}={})=>p({path:e,headers:n,queryParams:s,body:t,method:j.put,token:i}),delete:(e,{headers:t,queryParams:n,token:s}={})=>p({path:e,headers:t,queryParams:n,body:void 0,method:j.delete,token:s}),hooks:i}},z=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),C=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),H=e=>t=>e.test(t),J=H(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),D=H(/^\+[1-9]{1}[0-9]{3,14}$/),_=(e,t)=>n=>C(...t).validate(((e,t,n)=>{const s=(Array.isArray(t)?t.join("."):String(t)).replace(/\[\\?("|')?(\w|d)+\\?("|')?\]/g,((e,t,n)=>"."+n)).split("."),i=s.length;let o=0,a=e===Object(e)?e:void 0;for(;null!=a&&o<i;)a=a[s[o++]];return o&&o===i&&void 0!==a?a:n})(n,e)),F=z(J,'"{val}" is not a valid email'),Z=z(D,'"{val}" is not a valid phone number'),B=z((K=1,e=>e.length>=K),"Minimum length is 1");var K;const Q=z((e=>"string"==typeof e),"Input is not a string"),V=z((e=>void 0===e),"Input is defined"),Y=(G=[Q(),V()],W="Input is not a string or undefined",(e=W)=>t=>{const n=G.filter((e=>e(t)));return!(n.length<G.length)&&(e?e.replace("{val}",t):n.join(" OR "))});var G,W;const X=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>C(...e).validate(n[t]))),t(...n)),ee=e=>[Q(`"${e}" must be a string`)],te=e=>[Q(`"${e}" must be a string`),B(`"${e}" must not be empty`)],ne=e=>[Q(`"${e}" must be a string`),F()],se=e=>[Q(`"${e}" must be a string`),Z()],ie=X(te("accessKey")),oe=e=>({exchange:ie(((n,s)=>T(e.post(t.exchange,{loginOptions:s},{token:n}))))}),ae=(e,t,n)=>(t.forEach((t=>{const s=t.split(".");let i=s.shift(),o=e;for(;s.length>0;){if(o=o[i],!i||!o)throw Error(`Invalid path "${t}", "${i}" is missing or has no value`);i=s.shift()}if("function"!=typeof o[i])throw Error(`"${t}" is not a function`);const a=o[i];o[i]=n(a)})),e),re=({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||k,k),timeoutMs:Math.min(t||y,y)});var pe,de;!function(e){e.sms="sms",e.voice="voice",e.whatsapp="whatsapp"}(pe||(pe={})),function(e){e.email="email"}(de||(de={}));const le=Object.assign(Object.assign({},pe),de);var ue;!function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(ue||(ue={}));const ge=te("loginId"),ce=X(te("token")),he=X(ge),ve=X(te("pendingRef")),fe=X(ge,ne("email")),Ie=e=>({verify:ce((t=>T(e.post(i.verify,{token:t})))),signIn:he(((t,n,s,o)=>T(e.post(S(i.signIn,le.email),{loginId:t,URI:n,loginOptions:s},{token:o})))),signUpOrIn:he(((t,n,s)=>T(e.post(S(i.signUpOrIn,le.email),{loginId:t,URI:n,loginOptions:s})))),signUp:he(((t,n,s,o)=>T(e.post(S(i.signUp,le.email),{loginId:t,URI:n,user:s,loginOptions:o})))),waitForSession:ve(((t,n)=>new Promise((s=>{const{pollingIntervalMs:o,timeoutMs:a}=re(n);let r;const p=setInterval((async()=>{const n=await e.post(i.session,{pendingRef:t});n.ok&&(clearInterval(p),r&&clearTimeout(r),s(T(Promise.resolve(n))))}),o);r=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${a}ms`,errorCode:"0"},ok:!1}),clearInterval(p)}),a)})))),update:{email:fe(((t,n,s,o,a)=>T(e.post(i.update.email,Object.assign({loginId:t,email:n,URI:s},a),{token:o}))))}}),me=X(te("flowId")),be=X(te("executionId"),te("stepId"),te("interactionId")),ke=e=>({start:me(((t,n,s,i,o,a,r)=>T(e.post(I.start,{flowId:t,options:n,conditionInteractionId:s,interactionId:i,version:o,componentsVersion:a,input:r})))),next:be(((t,n,s,i,o,a)=>T(e.post(I.next,{executionId:t,stepId:n,interactionId:s,version:i,componentsVersion:o,input:a}))))}),ye=te("loginId"),Oe=X(te("token")),we=X(ye),je=X(ye,se("phone")),Ue=X(ye,ne("email")),Re=Object.keys(le).filter((e=>e!==pe.voice)),Pe=e=>({verify:Oe((t=>T(e.post(s.verify,{token:t})))),signIn:Re.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:we(((t,i,o,a)=>T(e.post(S(s.signIn,n),{loginId:t,URI:i,loginOptions:o},{token:a}))))})),{}),signUp:Re.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:we(((t,i,o,a)=>T(e.post(S(s.signUp,n),{loginId:t,URI:i,user:o,loginOptions:a}))))})),{}),signUpOrIn:Re.reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:we(((t,i,o)=>T(e.post(S(s.signUpOrIn,n),{loginId:t,URI:i,loginOptions:o}))))})),{}),update:{email:Ue(((t,n,i,o,a)=>T(e.post(s.update.email,Object.assign({loginId:t,email:n,URI:i},a),{token:o})))),phone:Object.keys(pe).filter((e=>e!==pe.voice)).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:je(((t,i,o,a,r)=>T(e.post(S(s.update.phone,n),Object.assign({loginId:t,phone:i,URI:o},r),{token:a}))))})),{})}});var xe;!function(e){e.facebook="facebook",e.github="github",e.google="google",e.microsoft="microsoft",e.gitlab="gitlab",e.apple="apple",e.discord="discord",e.linkedin="linkedin",e.slack="slack"}(xe||(xe={}));const qe=X(te("code")),$e=e=>({start:Object.assign(((t,n,s,i)=>T(e.post(o.start,s||{},{queryParams:Object.assign({provider:t},n&&{redirectURL:n}),token:i}))),Object.keys(xe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:(t,s,i)=>T(e.post(o.start,s||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i}))})),{})),exchange:qe((t=>T(e.post(o.exchange,{code:t})))),startNative:(t,n)=>T(e.post(o.startNative,{provider:t,loginOptions:n})),finishNative:(t,n,s,i,a)=>T(e.post(o.finishNative,{provider:t,stateId:n,user:s,code:i,idToken:a}))}),Ee=te("loginId"),Se=X(Ee,te("code")),Te=X(Ee),Ae=X(Ee,se("phone")),Me=X(Ee,ne("email")),Ne=e=>({verify:Object.keys(le).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:Se(((t,i)=>T(e.post(S(n.verify,s),{code:i,loginId:t}))))})),{}),signIn:Object.keys(le).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:Te(((t,i,o)=>T(e.post(S(n.signIn,s),{loginId:t,loginOptions:i},{token:o}))))})),{}),signUp:Object.keys(le).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:Te(((t,i,o)=>T(e.post(S(n.signUp,s),{loginId:t,user:i,loginOptions:o}))))})),{}),signUpOrIn:Object.keys(le).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:Te(((t,i)=>T(e.post(S(n.signUpOrIn,s),{loginId:t,loginOptions:i}))))})),{}),update:{email:Me(((t,s,i,o)=>T(e.post(n.update.email,Object.assign({loginId:t,email:s},o),{token:i})))),phone:Object.keys(pe).reduce(((t,s)=>Object.assign(Object.assign({},t),{[s]:Ae(((t,i,o,a)=>T(e.post(S(n.update.phone,s),Object.assign({loginId:t,phone:i},a),{token:o}))))})),{})}}),Le=X(te("tenant")),ze=X(te("code")),Ce=e=>({start:Le(((t,n,s,i)=>T(e.post(a.start,s||{},{queryParams:{tenant:t,redirectURL:n},token:i})))),exchange:ze((t=>T(e.post(a.exchange,{code:t}))))}),He=te("loginId"),Je=X(He,te("code")),De=X(He),_e=X(He),Fe=e=>({signUp:De(((t,n)=>T(e.post(r.signUp,{loginId:t,user:n})))),verify:Je(((t,n,s,i)=>T(e.post(r.verify,{loginId:t,code:n,loginOptions:s},{token:i})))),update:_e(((t,n)=>T(e.post(r.update,{loginId:t},{token:n}))))}),Ze=te("loginId"),Be=te("newPassword"),Ke=X(Ze,te("password")),Qe=X(Ze),Ve=X(Ze,Be),Ye=X(Ze,te("oldPassword"),Be),Ge=e=>({signUp:Ke(((t,n,s)=>T(e.post(l.signUp,{loginId:t,password:n,user:s})))),signIn:Ke(((t,n)=>T(e.post(l.signIn,{loginId:t,password:n})))),sendReset:Qe(((t,n,s)=>T(e.post(l.sendReset,{loginId:t,redirectUrl:n,templateOptions:s})))),update:Ve(((t,n,s)=>T(e.post(l.update,{loginId:t,newPassword:n},{token:s})))),replace:Ye(((t,n,s)=>T(e.post(l.replace,{loginId:t,oldPassword:n,newPassword:s})))),policy:()=>T(e.get(l.policy))}),We=ee("loginId"),Xe=te("loginId"),et=te("origin"),tt=X(Xe,et,te("name")),nt=X(Xe,et),st=X(We,et),it=X(Xe,et,te("token")),ot=X(te("transactionId"),te("response")),at=e=>({signUp:{start:tt(((t,n,s)=>T(e.post(d.signUp.start,{user:{loginId:t,name:s},origin:n})))),finish:ot(((t,n)=>T(e.post(d.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:st(((t,n,s,i)=>T(e.post(d.signIn.start,{loginId:t,origin:n,loginOptions:s},{token:i})))),finish:ot(((t,n)=>T(e.post(d.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:nt(((t,n)=>T(e.post(d.signUpOrIn.start,{loginId:t,origin:n}))))},update:{start:it(((t,n,s)=>T(e.post(d.update.start,{loginId:t,origin:n},{token:s})))),finish:ot(((t,n)=>T(e.post(d.update.finish,{transactionId:t,response:n}))))}}),rt=ee("loginId"),pt=X(rt),dt=X(te("pendingRef")),lt=e=>({signUpOrIn:pt(((t,n)=>T(e.post(p.signUpOrIn,{loginId:t,loginOptions:n})))),signUp:pt(((t,n,s)=>T(e.post(p.signUp,{loginId:t,user:n,loginOptions:s})))),signIn:pt(((t,n,s)=>T(e.post(p.signIn,{loginId:t,loginOptions:n},{token:s})))),waitForSession:dt(((t,n)=>new Promise((s=>{const{pollingIntervalMs:i,timeoutMs:o}=re(n);let a;const r=setInterval((async()=>{const n=await e.post(p.session,{pendingRef:t});n.ok&&(clearInterval(r),a&&clearTimeout(a),s(T(Promise.resolve(n))))}),i);a=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${o}ms`,errorCode:"0"},ok:!1}),clearInterval(r)}),o)}))))}),ut=X(te("token")),gt=X([Y(`"${"token"}" must be string or undefined`)]);var ct,ht;var vt=X([(ct="projectId",ht=te("projectId"),z(_(ct,ht))())])((e=>t=>e(Object.assign(Object.assign({},t),{hooks:{beforeRequest:e=>{var n;const s=[].concat((null===(n=t.hooks)||void 0===n?void 0:n.beforeRequest)||[]);return null==s?void 0:s.reduce(((e,t)=>t(e)),e)},afterRequest:async(e,n)=>{var s;const i=[].concat((null===(s=t.hooks)||void 0===s?void 0:s.afterRequest)||[]);(await Promise.allSettled(null==i?void 0:i.map((t=>t(e,null==n?void 0:n.clone()))))).forEach((e=>{var n;return"rejected"===e.status&&(null===(n=t.logger)||void 0===n?void 0:n.error(e.reason))}))}}})))((({projectId:e,logger:t,baseUrl:n,hooks:s,cookiePolicy:i,baseHeaders:o={},fetch:a})=>{return r=L({baseUrl:n||b,projectId:e,logger:t,hooks:s,cookiePolicy:i,baseConfig:{baseHeaders:o},fetch:a}),{accessKey:oe(r),otp:Ne(r),magicLink:Pe(r),enchantedLink:Ie(r),oauth:$e(r),saml:Ce(r),totp:Fe(r),notp:lt(r),webauthn:at(r),password:Ge(r),flow:ke(r),refresh:gt((e=>T(r.post(u,{},{token:e})))),selectTenant:X([Q("tenantId")],[Y('"token" must be string or undefined')])(((e,t)=>T(r.post(g,{tenant:e},{token:t})))),logout:gt((e=>T(r.post(c,{},{token:e})))),logoutAll:gt((e=>T(r.post(h,{},{token:e})))),me:gt((e=>T(r.get(v,{token:e})))),history:gt((e=>T(r.get(f,{token:e})))),isJwtExpired:ut(x),getTenants:ut(q),getJwtPermissions:ut($),getJwtRoles:ut(E),httpClient:r};var r}))),ft=Object.assign(vt,{DeliveryMethods:le});export{U as HttpStatusCodes,ft as default,re as normalizeWaitForSessionConfig,T as transformResponse,ae as wrapWith};
2
2
  //# sourceMappingURL=index.esm.js.map