@descope/core-js-sdk 2.8.0 → 2.8.2

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
@@ -53,11 +53,18 @@ type UserTenant = {
53
53
  roleNames?: string[];
54
54
  tenantName: string;
55
55
  };
56
+ type TemplateOptions = Record<string, string>;
56
57
  /** Login options to be added to the different authentication methods */
57
58
  type LoginOptions = {
58
59
  stepup?: boolean;
59
60
  mfa?: boolean;
60
61
  customClaims?: Record<string, any>;
62
+ templateOptions?: TemplateOptions;
63
+ };
64
+ /** Sign Up options to be added to the different authentication methods */
65
+ type SignUpOptions = {
66
+ customClaims?: Record<string, any>;
67
+ templateOptions?: TemplateOptions;
61
68
  };
62
69
  /** Authentication info result from the various JWT validations */
63
70
  type JWTResponse = {
@@ -231,6 +238,7 @@ type Logger = Pick<Console, 'debug' | 'log' | 'error' | 'warn'>;
231
238
  type UpdateOptions<T extends boolean> = {
232
239
  addToLoginIDs?: T;
233
240
  onMergeUseExisting?: T extends true ? boolean : never;
241
+ templateOptions?: TemplateOptions;
234
242
  };
235
243
 
236
244
  declare enum OAuthProviders {
@@ -247,8 +255,6 @@ declare enum OAuthProviders {
247
255
  type StartFn = (redirectURL?: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<URLResponse>>;
248
256
  type Providers<T> = Record<keyof typeof OAuthProviders, T>;
249
257
 
250
- type EnchantedLinkSignInFn = (loginId: string, uri: string) => Promise<SdkResponse<EnchantedLinkResponse>>;
251
- type EnchantedLinkSignUpFn = (loginId: string, uri: string, user?: User) => Promise<SdkResponse<EnchantedLinkResponse>>;
252
258
  /** Polling configuration for session waiting */
253
259
  type WaitForSessionConfig = {
254
260
  pollingIntervalMs: number;
@@ -403,19 +409,19 @@ declare const _default: ((config: Omit<{
403
409
  email: (loginId: string, code: string) => Promise<SdkResponse<JWTResponse>>;
404
410
  };
405
411
  signIn: Deliveries<{
406
- sms: (loginId: string) => Promise<SdkResponse<MaskedPhone>>;
407
- whatsapp: (loginId: string) => Promise<SdkResponse<MaskedPhone>>;
408
- email: (loginId: string) => Promise<SdkResponse<MaskedEmail>>;
412
+ sms: (loginId: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedPhone>>;
413
+ whatsapp: (loginId: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedPhone>>;
414
+ email: (loginId: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedEmail>>;
409
415
  }>;
410
416
  signUp: Deliveries<{
411
- sms: (loginId: string, user?: User) => Promise<SdkResponse<MaskedPhone>>;
412
- whatsapp: (loginId: string, user?: User) => Promise<SdkResponse<MaskedPhone>>;
413
- email: (loginId: string, user?: User) => Promise<SdkResponse<MaskedEmail>>;
417
+ sms: (loginId: string, user?: User, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedPhone>>;
418
+ whatsapp: (loginId: string, user?: User, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedPhone>>;
419
+ email: (loginId: string, user?: User, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedEmail>>;
414
420
  }>;
415
421
  signUpOrIn: Deliveries<{
416
- sms: (loginId: string) => Promise<SdkResponse<MaskedPhone>>;
417
- whatsapp: (loginId: string) => Promise<SdkResponse<MaskedPhone>>;
418
- email: (loginId: string) => Promise<SdkResponse<MaskedEmail>>;
422
+ sms: (loginId: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedPhone>>;
423
+ whatsapp: (loginId: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedPhone>>;
424
+ email: (loginId: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedEmail>>;
419
425
  }>;
420
426
  update: {
421
427
  email: <T extends boolean>(loginId: string, email: string, token?: string, updateOptions?: UpdateOptions<T>) => Promise<SdkResponse<MaskedEmail>>;
@@ -425,19 +431,19 @@ declare const _default: ((config: Omit<{
425
431
  magicLink: {
426
432
  verify: (token: string) => Promise<SdkResponse<JWTResponse>>;
427
433
  signIn: Deliveries<{
428
- sms: (loginId: string, uri: string) => Promise<SdkResponse<MaskedPhone>>;
429
- whatsapp: (loginId: string, uri: string) => Promise<SdkResponse<MaskedPhone>>;
430
- email: (loginId: string, uri: string) => Promise<SdkResponse<MaskedEmail>>;
434
+ sms: (loginId: string, URI: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedPhone>>;
435
+ whatsapp: (loginId: string, URI: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedPhone>>;
436
+ email: (loginId: string, URI: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<MaskedEmail>>;
431
437
  }>;
432
438
  signUp: Deliveries<{
433
- sms: (loginId: string, uri: string, user?: User) => Promise<SdkResponse<MaskedPhone>>;
434
- whatsapp: (loginId: string, uri: string, user?: User) => Promise<SdkResponse<MaskedPhone>>;
435
- email: (loginId: string, uri: string, user?: User) => Promise<SdkResponse<MaskedEmail>>;
439
+ sms: (loginId: string, URI: string, user?: User, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedPhone>>;
440
+ whatsapp: (loginId: string, URI: string, user?: User, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedPhone>>;
441
+ email: (loginId: string, URI: string, user?: User, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedEmail>>;
436
442
  }>;
437
443
  signUpOrIn: Deliveries<{
438
- sms: (loginId: string, uri: string) => Promise<SdkResponse<MaskedPhone>>;
439
- whatsapp: (loginId: string, uri: string) => Promise<SdkResponse<MaskedPhone>>;
440
- email: (loginId: string, uri: string) => Promise<SdkResponse<MaskedEmail>>;
444
+ sms: (loginId: string, URI?: string, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedPhone>>;
445
+ whatsapp: (loginId: string, URI?: string, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedPhone>>;
446
+ email: (loginId: string, URI?: string, signUpOptions?: SignUpOptions) => Promise<SdkResponse<MaskedEmail>>;
441
447
  }>;
442
448
  update: {
443
449
  email: <T_2 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: UpdateOptions<T_2>) => Promise<SdkResponse<MaskedEmail>>;
@@ -446,9 +452,9 @@ declare const _default: ((config: Omit<{
446
452
  };
447
453
  enchantedLink: {
448
454
  verify: (token: string) => Promise<SdkResponse<never>>;
449
- signIn: EnchantedLinkSignInFn;
450
- signUpOrIn: EnchantedLinkSignInFn;
451
- signUp: EnchantedLinkSignUpFn;
455
+ signIn: (loginId: string, URI?: string, loginOptions?: LoginOptions, token?: string) => Promise<SdkResponse<EnchantedLinkResponse>>;
456
+ signUpOrIn: (loginId: string, URI?: string, signUpOptions?: SignUpOptions) => Promise<SdkResponse<EnchantedLinkResponse>>;
457
+ signUp: (loginId: string, URI?: string, user?: User, signUpOptions?: SignUpOptions) => Promise<SdkResponse<EnchantedLinkResponse>>;
452
458
  waitForSession: (pendingRef: string, config?: WaitForSessionConfig) => Promise<SdkResponse<JWTResponse>>;
453
459
  update: {
454
460
  email: <T_4 extends boolean>(loginId: string, email: string, URI?: string, token?: string, updateOptions?: UpdateOptions<T_4>) => Promise<SdkResponse<EnchantedLinkResponse>>;
@@ -487,7 +493,7 @@ declare const _default: ((config: Omit<{
487
493
  password: {
488
494
  signUp: (loginId: string, password: string, user?: User) => Promise<SdkResponse<JWTResponse>>;
489
495
  signIn: (loginId: string, password: string) => Promise<SdkResponse<JWTResponse>>;
490
- sendReset: (loginId: string, redirectUrl?: string) => Promise<SdkResponse<PasswordResetResponse>>;
496
+ sendReset: (loginId: string, redirectUrl?: string, templateOptions?: TemplateOptions) => Promise<SdkResponse<PasswordResetResponse>>;
491
497
  update: (loginId: string, newPassword: string, token?: string) => Promise<SdkResponse<never>>;
492
498
  replace: (loginId: string, oldPassword: string, newPassword: string) => Promise<SdkResponse<JWTResponse>>;
493
499
  policy: () => Promise<SdkResponse<PasswordPolicyResponse>>;
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"},o={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"},a={start:"/v1/auth/oauth/authorize",exchange:"/v1/auth/oauth/exchange"},r={start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},d={verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/auth/totp/update"},u={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"},c="/v1/auth/refresh",p="/v1/auth/tenant/select",g="/v1/auth/logout",h="/v1/auth/logoutall",v="/v1/auth/me",f={start:"/v1/flow/start",next:"/v1/flow/next"};const m="<region>",I=`https://api.${m}descope.com`,b=1e3,k=6e5,y=()=>{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=>y().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 y().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={}));const j=(...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}),{})),U=e=>void 0===e?void 0:JSON.stringify(e),R=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},P=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:o,cookiePolicy:i,fetch:a})=>{const r=O(s,a),d=async s=>{const a=(null==o?void 0:o.beforeRequest)?o.beforeRequest(s):s,{path:d,body:u,headers:l,queryParams:c,method:p,token:g}=a,h={headers:j(R(t,g),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"2.8.0"},(null==n?void 0:n.baseHeaders)||{},l),method:p,body:U(u)};null!==i&&(h.credentials=i||"include");const v=await r((({path:e,baseUrl:t,queryParams:n,projectId:s})=>{const o=s.slice(1,-27);t=t.replace(m,o?o+".":"");const i=new URL(e,t);return n&&(i.search=new URLSearchParams(n).toString()),i})({path:d,baseUrl:e,queryParams:c,projectId:t}),h);return(null==o?void 0:o.afterRequest)&&await o.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:o}={})=>d({path:e,headers:n,queryParams:s,body:t,method:w.post,token:o}),put:(e,t,{headers:n,queryParams:s,token:o}={})=>d({path:e,headers:n,queryParams:s,body:t,method:w.put,token:o}),delete:(e,{headers:t,queryParams:n,token:s}={})=>d({path:e,headers:t,queryParams:n,body:void 0,method:w.delete,token:s}),hooks:o}};var x={TOO_MANY_REQUESTS:429};function q(e,t,n){var s;let o=$(e);t&&(o=null===(s=null==o?void 0:o.tenants)||void 0===s?void 0:s[t]);const i=null==o?void 0:o[n];return Array.isArray(i)?i:[]}function $(t){if("string"!=typeof t||!t)throw new Error("Invalid token provided");return e(t)}function E(e){const{exp:t}=$(e);return(new Date).getTime()/1e3>t}function S(e){let t=$(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function T(e,t){return q(e,t,"permissions")}function A(e,t){return q(e,t,"roles")}const M=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function L(e,t){var n;const s=await e,o={code:s.status,ok:s.ok,response:s},i=await s.clone().json();return s.ok?o.data=t?t(i):i:(o.error=i,s.status===x.TOO_MANY_REQUESTS&&Object.assign(o.error,{retryAfter:Number.parseInt(null===(n=s.headers)||void 0===n?void 0:n.get("retry-after"))||0})),o}const z=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),H=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),J=e=>t=>e.test(t),N=J(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),C=J(/^\+[1-9]{1}[0-9]{3,14}$/),_=z(N,'"{val}" is not a valid email'),D=z(C,'"{val}" is not a valid phone number'),Z=z((B=1,e=>e.length>=B),"Minimum length is 1");var B;const F=z((e=>"string"==typeof e),"Input is not a string"),K=z((e=>void 0===e),"Input is defined"),Q=(V=[F(),K()],Y="Input is not a string or undefined",(e=Y)=>t=>{const n=V.filter((e=>e(t)));return!(n.length<V.length)&&(e?e.replace("{val}",t):n.join(" OR "))});var V,Y;const G=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>H(...e).validate(n[t]))),t(...n)),W=e=>[F(`"${e}" must be a string`),Z(`"${e}" must not be empty`)],X=e=>[F(`"${e}" must be a string`),_()],ee=e=>[F(`"${e}" must be a string`),D()],te=G(W("accessKey")),ne=e=>({exchange:te((t=>L(e.post(n.exchange,{},{token:t}))))});var se,oe;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(se||(se={})),function(e){e.email="email"}(oe||(oe={}));const ie=Object.assign(Object.assign({},se),oe);var ae;!function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(ae||(ae={}));const re=W("loginId"),de=G(W("token")),ue=G(re),le=G(W("pendingRef")),ce=G(re,X("email")),pe=e=>({verify:de((t=>L(e.post(i.verify,{token:t})))),signIn:ue(((t,n,s,o)=>L(e.post(M(i.signIn,ie.email),{loginId:t,URI:n,loginOptions:s},{token:o})))),signUpOrIn:ue(((t,n)=>L(e.post(M(i.signUpOrIn,ie.email),{loginId:t,URI:n})))),signUp:ue(((t,n,s)=>L(e.post(M(i.signUp,ie.email),{loginId:t,URI:n,user:s})))),waitForSession:le(((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||k,k)}))(n);let r;const d=setInterval((async()=>{const n=await e.post(i.session,{pendingRef:t});n.ok&&(clearInterval(d),r&&clearTimeout(r),s(L(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)=>L(e.post(i.update.email,Object.assign({loginId:t,email:n,URI:s},a),{token:o}))))}}),ge=G(W("flowId")),he=G(W("executionId"),W("stepId"),W("interactionId")),ve=e=>({start:ge(((t,n,s,o,i,a,r)=>L(e.post(f.start,{flowId:t,options:n,conditionInteractionId:s,interactionId:o,version:i,componentsVersion:a,input:r})))),next:he(((t,n,s,o,i,a)=>L(e.post(f.next,{executionId:t,stepId:n,interactionId:s,version:o,componentsVersion:i,input:a}))))}),fe=W("loginId"),me=G(W("token")),Ie=G(fe),be=G(fe,ee("phone")),ke=G(fe,X("email")),ye=e=>({verify:me((t=>L(e.post(o.verify,{token:t})))),signIn:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ie(((t,s,i,a)=>L(e.post(M(o.signIn,n),{loginId:t,URI:s,loginOptions:i},{token:a}))))})),{}),signUp:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ie(((t,s,i)=>L(e.post(M(o.signUp,n),{loginId:t,URI:s,user:i}))))})),{}),signUpOrIn:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ie(((t,s)=>L(e.post(M(o.signUpOrIn,n),{loginId:t,URI:s}))))})),{}),update:{email:ke(((t,n,s,i,a)=>L(e.post(o.update.email,Object.assign({loginId:t,email:n,URI:s},a),{token:i})))),phone:Object.keys(se).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:be(((t,s,i,a,r)=>L(e.post(M(o.update.phone,n),Object.assign({loginId:t,phone:s,URI:i},r),{token:a}))))})),{})}});var Oe;!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"}(Oe||(Oe={}));const we=G(W("code")),je=e=>({start:Object.assign(((t,n,s,o)=>L(e.post(a.start,s||{},{queryParams:Object.assign({provider:t},n&&{redirectURL:n}),token:o}))),Object.keys(Oe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:(t,s,o)=>L(e.post(a.start,s||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:o}))})),{})),exchange:we((t=>L(e.post(a.exchange,{code:t}))))}),Ue=W("loginId"),Re=G(Ue,W("code")),Pe=G(Ue),xe=G(Ue,ee("phone")),qe=G(Ue,X("email")),$e=e=>({verify:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Re(((t,o)=>L(e.post(M(s.verify,n),{code:o,loginId:t}))))})),{}),signIn:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Pe(((t,o,i)=>L(e.post(M(s.signIn,n),{loginId:t,loginOptions:o},{token:i}))))})),{}),signUp:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Pe(((t,o)=>L(e.post(M(s.signUp,n),{loginId:t,user:o}))))})),{}),signUpOrIn:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Pe((t=>L(e.post(M(s.signUpOrIn,n),{loginId:t}))))})),{}),update:{email:qe(((t,n,o,i)=>L(e.post(s.update.email,Object.assign({loginId:t,email:n},i),{token:o})))),phone:Object.keys(se).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:xe(((t,o,i,a)=>L(e.post(M(s.update.phone,n),Object.assign({loginId:t,phone:o},a),{token:i}))))})),{})}}),Ee=G(W("tenant")),Se=G(W("code")),Te=e=>({start:Ee(((t,n,s,o)=>L(e.post(r.start,s||{},{queryParams:{tenant:t,redirectURL:n},token:o})))),exchange:Se((t=>L(e.post(r.exchange,{code:t}))))}),Ae=W("loginId"),Me=G(Ae,W("code")),Le=G(Ae),ze=G(Ae),He=e=>({signUp:Le(((t,n)=>L(e.post(d.signUp,{loginId:t,user:n})))),verify:Me(((t,n,s,o)=>L(e.post(d.verify,{loginId:t,code:n,loginOptions:s},{token:o})))),update:ze(((t,n)=>L(e.post(d.update,{loginId:t},{token:n}))))}),Je=W("loginId"),Ne=W("newPassword"),Ce=G(Je,W("password")),_e=G(Je),De=G(Je,Ne),Ze=G(Je,W("oldPassword"),Ne),Be=e=>({signUp:Ce(((t,n,s)=>L(e.post(l.signUp,{loginId:t,password:n,user:s})))),signIn:Ce(((t,n)=>L(e.post(l.signIn,{loginId:t,password:n})))),sendReset:_e(((t,n)=>L(e.post(l.sendReset,{loginId:t,redirectUrl:n})))),update:De(((t,n,s)=>L(e.post(l.update,{loginId:t,newPassword:n},{token:s})))),replace:Ze(((t,n,s)=>L(e.post(l.replace,{loginId:t,oldPassword:n,newPassword:s})))),policy:()=>L(e.get(l.policy))}),Fe=[F(`"${"loginId"}" must be a string`)];const Ke=W("loginId"),Qe=W("origin"),Ve=G(Ke,Qe,W("name")),Ye=G(Ke,Qe),Ge=G(Fe,Qe),We=G(Ke,Qe,W("token")),Xe=G(W("transactionId"),W("response")),et=e=>({signUp:{start:Ve(((t,n,s)=>L(e.post(u.signUp.start,{user:{loginId:t,name:s},origin:n})))),finish:Xe(((t,n)=>L(e.post(u.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Ge(((t,n,s,o)=>L(e.post(u.signIn.start,{loginId:t,origin:n,loginOptions:s},{token:o})))),finish:Xe(((t,n)=>L(e.post(u.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:Ye(((t,n)=>L(e.post(u.signUpOrIn.start,{loginId:t,origin:n}))))},update:{start:We(((t,n,s)=>L(e.post(u.update.start,{loginId:t,origin:n},{token:s})))),finish:Xe(((t,n)=>L(e.post(u.update.finish,{transactionId:t,response:n}))))}}),tt=G(W("token")),nt=G((e=>[Q(`"${e}" must be string or undefined`)])("token"));var st,ot;var it=G([(st="projectId",ot=W("projectId"),z(((e,n)=>s=>H(...n).validate(t(s,e)))(st,ot))())])((e=>t=>{var n,s;const o=[].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==o?void 0:o.reduce(((e,t)=>t(e)),e),afterRequest:async(e,n)=>{(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:o,baseHeaders:i={},fetch:a})=>{return r=P({baseUrl:n||I,projectId:e,logger:t,hooks:s,cookiePolicy:o,baseConfig:{baseHeaders:i},fetch:a}),{accessKey:ne(r),otp:$e(r),magicLink:ye(r),enchantedLink:pe(r),oauth:je(r),saml:Te(r),totp:He(r),webauthn:et(r),password:Be(r),flow:ve(r),refresh:nt((e=>L(r.post(c,{},{token:e})))),selectTenant:G([F("tenantId")],[Q('"token" must be string or undefined')])(((e,t)=>L(r.post(p,{tenant:e},{token:t})))),logout:nt((e=>L(r.post(g,{},{token:e})))),logoutAll:nt((e=>L(r.post(h,{},{token:e})))),me:nt((e=>L(r.get(v,{token:e})))),isJwtExpired:tt(E),getTenants:tt(S),getJwtPermissions:tt(T),getJwtRoles:tt(A),httpClient:r};var r})));const at=(e,t,n)=>(t.forEach((t=>{const s=t.split(".");let o=s.shift(),i=e;for(;s.length>0;){if(i=i[o],!o||!i)throw Error(`Invalid path "${t}", "${o}" is missing or has no value`);o=s.shift()}if("function"!=typeof i[o])throw Error(`"${t}" is not a function`);const a=i[o];i[o]=n(a)})),e);var rt=Object.assign(it,{DeliveryMethods:ie});export{x as HttpStatusCodes,rt as default,L as transformResponse,at 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"},o={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"},a={start:"/v1/auth/oauth/authorize",exchange:"/v1/auth/oauth/exchange"},r={start:"/v1/auth/saml/authorize",exchange:"/v1/auth/saml/exchange"},d={verify:"/v1/auth/totp/verify",signUp:"/v1/auth/totp/signup",update:"/v1/auth/totp/update"},u={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"},p="/v1/auth/refresh",c="/v1/auth/tenant/select",g="/v1/auth/logout",h="/v1/auth/logoutall",v="/v1/auth/me",f={start:"/v1/flow/start",next:"/v1/flow/next"};const m="<region>",I=`https://api.${m}descope.com`,b=1e3,k=6e5,y=()=>{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=>y().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 y().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={}));const j=(...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}),{})),U=e=>void 0===e?void 0:JSON.stringify(e),R=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},P=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:o,cookiePolicy:i,fetch:a})=>{const r=O(s,a),d=async s=>{const a=(null==o?void 0:o.beforeRequest)?o.beforeRequest(s):s,{path:d,body:u,headers:l,queryParams:p,method:c,token:g}=a,h={headers:j(R(t,g),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"2.8.2"},(null==n?void 0:n.baseHeaders)||{},l),method:c,body:U(u)};null!==i&&(h.credentials=i||"include");const v=await r((({path:e,baseUrl:t,queryParams:n,projectId:s})=>{const o=s.slice(1,-27);t=t.replace(m,o?o+".":"");const i=new URL(e,t);return n&&(i.search=new URLSearchParams(n).toString()),i})({path:d,baseUrl:e,queryParams:p,projectId:t}),h);return(null==o?void 0:o.afterRequest)&&await o.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:o}={})=>d({path:e,headers:n,queryParams:s,body:t,method:w.post,token:o}),put:(e,t,{headers:n,queryParams:s,token:o}={})=>d({path:e,headers:n,queryParams:s,body:t,method:w.put,token:o}),delete:(e,{headers:t,queryParams:n,token:s}={})=>d({path:e,headers:t,queryParams:n,body:void 0,method:w.delete,token:s}),hooks:o}};var x={TOO_MANY_REQUESTS:429};function q(e,t,n){var s;let o=$(e);t&&(o=null===(s=null==o?void 0:o.tenants)||void 0===s?void 0:s[t]);const i=null==o?void 0:o[n];return Array.isArray(i)?i:[]}function $(t){if("string"!=typeof t||!t)throw new Error("Invalid token provided");return e(t)}function E(e){const{exp:t}=$(e);return(new Date).getTime()/1e3>t}function S(e){let t=$(e);const n=Object.keys(null==t?void 0:t.tenants);return Array.isArray(n)?n:[]}function T(e,t){return q(e,t,"permissions")}function A(e,t){return q(e,t,"roles")}const M=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function L(e,t){var n;const s=await e,o={code:s.status,ok:s.ok,response:s},i=await s.clone().json();return s.ok?o.data=t?t(i):i:(o.error=i,s.status===x.TOO_MANY_REQUESTS&&Object.assign(o.error,{retryAfter:Number.parseInt(null===(n=s.headers)||void 0===n?void 0:n.get("retry-after"))||0})),o}const z=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),H=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),J=e=>t=>e.test(t),N=J(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),C=J(/^\+[1-9]{1}[0-9]{3,14}$/),_=z(N,'"{val}" is not a valid email'),D=z(C,'"{val}" is not a valid phone number'),Z=z((B=1,e=>e.length>=B),"Minimum length is 1");var B;const F=z((e=>"string"==typeof e),"Input is not a string"),K=z((e=>void 0===e),"Input is defined"),Q=(V=[F(),K()],Y="Input is not a string or undefined",(e=Y)=>t=>{const n=V.filter((e=>e(t)));return!(n.length<V.length)&&(e?e.replace("{val}",t):n.join(" OR "))});var V,Y;const G=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>H(...e).validate(n[t]))),t(...n)),W=e=>[F(`"${e}" must be a string`),Z(`"${e}" must not be empty`)],X=e=>[F(`"${e}" must be a string`),_()],ee=e=>[F(`"${e}" must be a string`),D()],te=G(W("accessKey")),ne=e=>({exchange:te((t=>L(e.post(n.exchange,{},{token:t}))))});var se,oe;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(se||(se={})),function(e){e.email="email"}(oe||(oe={}));const ie=Object.assign(Object.assign({},se),oe);var ae;!function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(ae||(ae={}));const re=W("loginId"),de=G(W("token")),ue=G(re),le=G(W("pendingRef")),pe=G(re,X("email")),ce=e=>({verify:de((t=>L(e.post(i.verify,{token:t})))),signIn:ue(((t,n,s,o)=>L(e.post(M(i.signIn,ie.email),{loginId:t,URI:n,loginOptions:s},{token:o})))),signUpOrIn:ue(((t,n,s)=>L(e.post(M(i.signUpOrIn,ie.email),{loginId:t,URI:n,loginOptions:s})))),signUp:ue(((t,n,s,o)=>L(e.post(M(i.signUp,ie.email),{loginId:t,URI:n,user:s,loginOptions:o})))),waitForSession:le(((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||k,k)}))(n);let r;const d=setInterval((async()=>{const n=await e.post(i.session,{pendingRef:t});n.ok&&(clearInterval(d),r&&clearTimeout(r),s(L(Promise.resolve(n))))}),o);r=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${a}ms`,errorCode:"0"},ok:!1}),clearInterval(d)}),a)})))),update:{email:pe(((t,n,s,o,a)=>L(e.post(i.update.email,Object.assign({loginId:t,email:n,URI:s},a),{token:o}))))}}),ge=G(W("flowId")),he=G(W("executionId"),W("stepId"),W("interactionId")),ve=e=>({start:ge(((t,n,s,o,i,a,r)=>L(e.post(f.start,{flowId:t,options:n,conditionInteractionId:s,interactionId:o,version:i,componentsVersion:a,input:r})))),next:he(((t,n,s,o,i,a)=>L(e.post(f.next,{executionId:t,stepId:n,interactionId:s,version:o,componentsVersion:i,input:a}))))}),fe=W("loginId"),me=G(W("token")),Ie=G(fe),be=G(fe,ee("phone")),ke=G(fe,X("email")),ye=e=>({verify:me((t=>L(e.post(o.verify,{token:t})))),signIn:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ie(((t,s,i,a)=>L(e.post(M(o.signIn,n),{loginId:t,URI:s,loginOptions:i},{token:a}))))})),{}),signUp:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ie(((t,s,i,a)=>L(e.post(M(o.signUp,n),{loginId:t,URI:s,user:i,loginOptions:a}))))})),{}),signUpOrIn:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ie(((t,s,i)=>L(e.post(M(o.signUpOrIn,n),{loginId:t,URI:s,loginOptions:i}))))})),{}),update:{email:ke(((t,n,s,i,a)=>L(e.post(o.update.email,Object.assign({loginId:t,email:n,URI:s},a),{token:i})))),phone:Object.keys(se).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:be(((t,s,i,a,r)=>L(e.post(M(o.update.phone,n),Object.assign({loginId:t,phone:s,URI:i},r),{token:a}))))})),{})}});var Oe;!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"}(Oe||(Oe={}));const we=G(W("code")),je=e=>({start:Object.assign(((t,n,s,o)=>L(e.post(a.start,s||{},{queryParams:Object.assign({provider:t},n&&{redirectURL:n}),token:o}))),Object.keys(Oe).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:(t,s,o)=>L(e.post(a.start,s||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:o}))})),{})),exchange:we((t=>L(e.post(a.exchange,{code:t}))))}),Ue=W("loginId"),Re=G(Ue,W("code")),Pe=G(Ue),xe=G(Ue,ee("phone")),qe=G(Ue,X("email")),$e=e=>({verify:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Re(((t,o)=>L(e.post(M(s.verify,n),{code:o,loginId:t}))))})),{}),signIn:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Pe(((t,o,i)=>L(e.post(M(s.signIn,n),{loginId:t,loginOptions:o},{token:i}))))})),{}),signUp:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Pe(((t,o,i)=>L(e.post(M(s.signUp,n),{loginId:t,user:o,loginOptions:i}))))})),{}),signUpOrIn:Object.keys(ie).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Pe(((t,o)=>L(e.post(M(s.signUpOrIn,n),{loginId:t,loginOptions:o}))))})),{}),update:{email:qe(((t,n,o,i)=>L(e.post(s.update.email,Object.assign({loginId:t,email:n},i),{token:o})))),phone:Object.keys(se).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:xe(((t,o,i,a)=>L(e.post(M(s.update.phone,n),Object.assign({loginId:t,phone:o},a),{token:i}))))})),{})}}),Ee=G(W("tenant")),Se=G(W("code")),Te=e=>({start:Ee(((t,n,s,o)=>L(e.post(r.start,s||{},{queryParams:{tenant:t,redirectURL:n},token:o})))),exchange:Se((t=>L(e.post(r.exchange,{code:t}))))}),Ae=W("loginId"),Me=G(Ae,W("code")),Le=G(Ae),ze=G(Ae),He=e=>({signUp:Le(((t,n)=>L(e.post(d.signUp,{loginId:t,user:n})))),verify:Me(((t,n,s,o)=>L(e.post(d.verify,{loginId:t,code:n,loginOptions:s},{token:o})))),update:ze(((t,n)=>L(e.post(d.update,{loginId:t},{token:n}))))}),Je=W("loginId"),Ne=W("newPassword"),Ce=G(Je,W("password")),_e=G(Je),De=G(Je,Ne),Ze=G(Je,W("oldPassword"),Ne),Be=e=>({signUp:Ce(((t,n,s)=>L(e.post(l.signUp,{loginId:t,password:n,user:s})))),signIn:Ce(((t,n)=>L(e.post(l.signIn,{loginId:t,password:n})))),sendReset:_e(((t,n,s)=>L(e.post(l.sendReset,{loginId:t,redirectUrl:n,templateOptions:s})))),update:De(((t,n,s)=>L(e.post(l.update,{loginId:t,newPassword:n},{token:s})))),replace:Ze(((t,n,s)=>L(e.post(l.replace,{loginId:t,oldPassword:n,newPassword:s})))),policy:()=>L(e.get(l.policy))}),Fe=[F(`"${"loginId"}" must be a string`)];const Ke=W("loginId"),Qe=W("origin"),Ve=G(Ke,Qe,W("name")),Ye=G(Ke,Qe),Ge=G(Fe,Qe),We=G(Ke,Qe,W("token")),Xe=G(W("transactionId"),W("response")),et=e=>({signUp:{start:Ve(((t,n,s)=>L(e.post(u.signUp.start,{user:{loginId:t,name:s},origin:n})))),finish:Xe(((t,n)=>L(e.post(u.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Ge(((t,n,s,o)=>L(e.post(u.signIn.start,{loginId:t,origin:n,loginOptions:s},{token:o})))),finish:Xe(((t,n)=>L(e.post(u.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:Ye(((t,n)=>L(e.post(u.signUpOrIn.start,{loginId:t,origin:n}))))},update:{start:We(((t,n,s)=>L(e.post(u.update.start,{loginId:t,origin:n},{token:s})))),finish:Xe(((t,n)=>L(e.post(u.update.finish,{transactionId:t,response:n}))))}}),tt=G(W("token")),nt=G((e=>[Q(`"${e}" must be string or undefined`)])("token"));var st,ot;var it=G([(st="projectId",ot=W("projectId"),z(((e,n)=>s=>H(...n).validate(t(s,e)))(st,ot))())])((e=>t=>{var n,s;const o=[].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==o?void 0:o.reduce(((e,t)=>t(e)),e),afterRequest:async(e,n)=>{(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:o,baseHeaders:i={},fetch:a})=>{return r=P({baseUrl:n||I,projectId:e,logger:t,hooks:s,cookiePolicy:o,baseConfig:{baseHeaders:i},fetch:a}),{accessKey:ne(r),otp:$e(r),magicLink:ye(r),enchantedLink:ce(r),oauth:je(r),saml:Te(r),totp:He(r),webauthn:et(r),password:Be(r),flow:ve(r),refresh:nt((e=>L(r.post(p,{},{token:e})))),selectTenant:G([F("tenantId")],[Q('"token" must be string or undefined')])(((e,t)=>L(r.post(c,{tenant:e},{token:t})))),logout:nt((e=>L(r.post(g,{},{token:e})))),logoutAll:nt((e=>L(r.post(h,{},{token:e})))),me:nt((e=>L(r.get(v,{token:e})))),isJwtExpired:tt(E),getTenants:tt(S),getJwtPermissions:tt(T),getJwtRoles:tt(A),httpClient:r};var r})));const at=(e,t,n)=>(t.forEach((t=>{const s=t.split(".");let o=s.shift(),i=e;for(;s.length>0;){if(i=i[o],!o||!i)throw Error(`Invalid path "${t}", "${o}" is missing or has no value`);o=s.shift()}if("function"!=typeof i[o])throw Error(`"${t}" is not a function`);const a=i[o];i[o]=n(a)})),e);var rt=Object.assign(it,{DeliveryMethods:ie});export{x as HttpStatusCodes,rt as default,L as transformResponse,at as wrapWith};
2
2
  //# sourceMappingURL=index.esm.js.map