@descope/core-js-sdk 1.0.2 → 1.0.4
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/README.md +3 -3
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.d.ts +93 -12
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +85 -95
package/dist/index.d.ts
CHANGED
|
@@ -12,6 +12,12 @@ declare type LastAuth = {
|
|
|
12
12
|
loginId?: string;
|
|
13
13
|
};
|
|
14
14
|
declare type AuthMethod = 'magiclink' | 'enchantedlink' | 'otp' | 'totp' | 'oauth' | 'saml' | 'webauthn';
|
|
15
|
+
declare type MaskedPhone = {
|
|
16
|
+
maskedPhone: string;
|
|
17
|
+
};
|
|
18
|
+
declare type MaskedEmail = {
|
|
19
|
+
maskedEmail: string;
|
|
20
|
+
};
|
|
15
21
|
/** User base details from Descope API */
|
|
16
22
|
declare type User = {
|
|
17
23
|
email?: string;
|
|
@@ -68,7 +74,10 @@ declare type EnchantedLinkResponse = {
|
|
|
68
74
|
pendingRef: string;
|
|
69
75
|
/** Link id, on which link the user should click */
|
|
70
76
|
linkId: string;
|
|
77
|
+
/** Email to which the link was sent to */
|
|
78
|
+
maskedEmail: string;
|
|
71
79
|
};
|
|
80
|
+
declare type MaskedAddress<T> = T extends DeliveryMethods.email ? MaskedEmail : T extends DeliveryMethods.sms ? MaskedPhone : T extends DeliveryMethods.whatsapp ? MaskedPhone : never;
|
|
72
81
|
/** URL response to redirect user in case of OAuth or SSO */
|
|
73
82
|
declare type URLResponse = {
|
|
74
83
|
url: string;
|
|
@@ -79,6 +88,21 @@ declare type TOTPResponse = {
|
|
|
79
88
|
image: string;
|
|
80
89
|
key: string;
|
|
81
90
|
};
|
|
91
|
+
/** Password reset response with details according to response method */
|
|
92
|
+
declare type PasswordResetResponse = {
|
|
93
|
+
resetMethod: string;
|
|
94
|
+
pendingRef?: string;
|
|
95
|
+
linkId?: string;
|
|
96
|
+
maskedEmail: string;
|
|
97
|
+
};
|
|
98
|
+
/** A subset of the password policy that can be checked on the client side for better UX */
|
|
99
|
+
declare type PasswordPolicyResponse = {
|
|
100
|
+
minLength: number;
|
|
101
|
+
lowercase: boolean;
|
|
102
|
+
uppercase: boolean;
|
|
103
|
+
number: boolean;
|
|
104
|
+
nonAlphanumeric: boolean;
|
|
105
|
+
};
|
|
82
106
|
/** All delivery methods currently supported */
|
|
83
107
|
declare enum DeliveryMethods {
|
|
84
108
|
email = "email",
|
|
@@ -167,9 +191,9 @@ declare type WaitForSessionConfig = {
|
|
|
167
191
|
timeoutMs: number;
|
|
168
192
|
};
|
|
169
193
|
|
|
170
|
-
declare type SignInFn = (loginId: string, uri: string) => Promise<SdkResponse<
|
|
171
|
-
declare type SignUpFn = (loginId: string, uri: string, user?: User) => Promise<SdkResponse<
|
|
172
|
-
declare type UpdatePhoneFn = (loginId: string, phone: string) => Promise<SdkResponse<
|
|
194
|
+
declare type SignInFn<T> = (loginId: string, uri: string) => Promise<SdkResponse<MaskedAddress<T>>>;
|
|
195
|
+
declare type SignUpFn<T> = (loginId: string, uri: string, user?: User) => Promise<SdkResponse<MaskedAddress<T>>>;
|
|
196
|
+
declare type UpdatePhoneFn = (loginId: string, phone: string) => Promise<SdkResponse<MaskedAddress<DeliveryMethods.sms>>>;
|
|
173
197
|
|
|
174
198
|
/** Request configuration including headers, query params and token */
|
|
175
199
|
declare type HttpClientReqConfig = {
|
|
@@ -231,7 +255,10 @@ declare enum OAuthProviders {
|
|
|
231
255
|
declare function transformResponse<T extends ResponseData, S extends ResponseData = T>(response: Promise<Response>, transform?: (data: T) => S): Promise<SdkResponse<S>>;
|
|
232
256
|
|
|
233
257
|
declare type IsObject<T> = T extends Array<any> ? false : T extends Function ? false : T extends object ? true : false;
|
|
234
|
-
declare type Tail<T extends ReadonlyArray<string>> = T extends readonly [
|
|
258
|
+
declare type Tail<T extends ReadonlyArray<string>> = T extends readonly [
|
|
259
|
+
head: any,
|
|
260
|
+
...tail: infer Tail_
|
|
261
|
+
] ? Tail_ : never;
|
|
235
262
|
declare type Head<T extends ReadonlyArray<string>> = T extends readonly [] ? never : T[0];
|
|
236
263
|
declare type SdkResponseType<F extends SdkFn<ResponseData>> = F extends SdkFn<infer U> ? U : never;
|
|
237
264
|
declare type SdkFnWrapperInternal<F extends SdkFn<ResponseData>, R extends ResponseData> = (fn: (...args: Parameters<F>) => ReturnType<F>) => (...args: Parameters<F>) => Promise<SdkResponse<R extends Record<string, never> ? SdkResponseType<F> : SdkResponseType<F> & R>>;
|
|
@@ -340,19 +367,65 @@ declare const _default: ((config: Omit<{
|
|
|
340
367
|
};
|
|
341
368
|
otp: {
|
|
342
369
|
verify: Deliveries<(loginId: string, code: string) => Promise<SdkResponse<JWTResponse>>>;
|
|
343
|
-
signIn:
|
|
344
|
-
|
|
345
|
-
|
|
370
|
+
signIn: {
|
|
371
|
+
email: (loginId: string) => Promise<SdkResponse<{
|
|
372
|
+
maskedEmail: string;
|
|
373
|
+
}>>;
|
|
374
|
+
sms: (loginId: string) => Promise<SdkResponse<{
|
|
375
|
+
maskedPhone: string;
|
|
376
|
+
}>>;
|
|
377
|
+
whatsapp: (loginId: string) => Promise<SdkResponse<{
|
|
378
|
+
maskedPhone: string;
|
|
379
|
+
}>>;
|
|
380
|
+
};
|
|
381
|
+
signUp: {
|
|
382
|
+
email: (loginId: string, user?: User) => Promise<SdkResponse<{
|
|
383
|
+
maskedEmail: string;
|
|
384
|
+
}>>;
|
|
385
|
+
sms: (loginId: string, user?: User) => Promise<SdkResponse<{
|
|
386
|
+
maskedPhone: string;
|
|
387
|
+
}>>;
|
|
388
|
+
whatsapp: (loginId: string, user?: User) => Promise<SdkResponse<{
|
|
389
|
+
maskedPhone: string;
|
|
390
|
+
}>>;
|
|
391
|
+
};
|
|
392
|
+
signUpOrIn: {
|
|
393
|
+
email: (loginId: string) => Promise<SdkResponse<{
|
|
394
|
+
maskedEmail: string;
|
|
395
|
+
}>>;
|
|
396
|
+
sms: (loginId: string) => Promise<SdkResponse<{
|
|
397
|
+
maskedPhone: string;
|
|
398
|
+
}>>;
|
|
399
|
+
whatsapp: (loginId: string) => Promise<SdkResponse<{
|
|
400
|
+
maskedPhone: string;
|
|
401
|
+
}>>;
|
|
402
|
+
};
|
|
346
403
|
update: {
|
|
347
|
-
email: (loginId: string, email: string, token?: string) => Promise<SdkResponse<
|
|
348
|
-
|
|
404
|
+
email: (loginId: string, email: string, token?: string) => Promise<SdkResponse<{
|
|
405
|
+
maskedEmail: string;
|
|
406
|
+
}>>;
|
|
407
|
+
phone: Deliveries<(loginId: string, phone: string) => Promise<SdkResponse<{
|
|
408
|
+
maskedPhone: string;
|
|
409
|
+
}>>>;
|
|
349
410
|
};
|
|
350
411
|
};
|
|
351
412
|
magicLink: {
|
|
352
413
|
verify: (token: string) => Promise<SdkResponse<JWTResponse>>;
|
|
353
|
-
signIn:
|
|
354
|
-
|
|
355
|
-
|
|
414
|
+
signIn: {
|
|
415
|
+
email: SignInFn<DeliveryMethods.email>;
|
|
416
|
+
sms: SignInFn<DeliveryMethods.sms>;
|
|
417
|
+
whatsapp: SignInFn<DeliveryMethods.whatsapp>;
|
|
418
|
+
};
|
|
419
|
+
signUp: {
|
|
420
|
+
email: SignUpFn<DeliveryMethods.email>;
|
|
421
|
+
sms: SignUpFn<DeliveryMethods.sms>;
|
|
422
|
+
whatsapp: SignUpFn<DeliveryMethods.whatsapp>;
|
|
423
|
+
};
|
|
424
|
+
signUpOrIn: {
|
|
425
|
+
email: SignInFn<DeliveryMethods.email>;
|
|
426
|
+
sms: SignInFn<DeliveryMethods.sms>;
|
|
427
|
+
whatsapp: SignInFn<DeliveryMethods.whatsapp>;
|
|
428
|
+
};
|
|
356
429
|
update: {
|
|
357
430
|
email: (loginId: string, email: string, URI?: string, token?: string) => Promise<SdkResponse<never>>;
|
|
358
431
|
phone: Deliveries<UpdatePhoneFn>;
|
|
@@ -443,6 +516,14 @@ declare const _default: ((config: Omit<{
|
|
|
443
516
|
finish: (transactionId: string, response: string) => Promise<SdkResponse<ResponseData>>;
|
|
444
517
|
};
|
|
445
518
|
};
|
|
519
|
+
password: {
|
|
520
|
+
signUp: (loginId: string, password: string, user?: User) => Promise<SdkResponse<JWTResponse>>;
|
|
521
|
+
signIn: (loginId: string, password: string) => Promise<SdkResponse<JWTResponse>>;
|
|
522
|
+
sendReset: (loginId: string, redirectUrl?: string) => Promise<SdkResponse<PasswordResetResponse>>;
|
|
523
|
+
update: (loginId: string, newPassword: string, token?: string) => Promise<SdkResponse<never>>;
|
|
524
|
+
replace: (loginId: string, oldPassword: string, newPassword: string) => Promise<SdkResponse<never>>;
|
|
525
|
+
policy: () => Promise<SdkResponse<PasswordPolicyResponse>>;
|
|
526
|
+
};
|
|
446
527
|
flow: {
|
|
447
528
|
start: (flowId: string, options?: Options, conditionInteractionId?: string, interactionId?: string, input?: FlowInput) => Promise<SdkResponse<FlowResponse>>;
|
|
448
529
|
next: (executionId: string, stepId: string, interactionId: string, input?: FlowInput) => Promise<SdkResponse<FlowResponse>>;
|
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"},u={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="/v1/auth/refresh",c="/v1/auth/logout",p="/v1/auth/logoutall",g="/v1/auth/me",h={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;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=>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 I=(...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}),{})),b=e=>void 0===e?void 0:JSON.stringify(e),k=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},y=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:o,cookiePolicy:i,fetch:a})=>{const r=f(s,a),u=async s=>{const a=(null==o?void 0:o.beforeRequest)?o.beforeRequest(s):s,{path:u,body:d,headers:l,queryParams:c,method:p,token:g}=a,h=await r((({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:I(k(t,g),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"1.0.2"},(null==n?void 0:n.baseHeaders)||{},l),method:p,body:b(d),credentials:i||"include"});return(null==o?void 0:o.afterRequest)&&await o.afterRequest(s,null==h?void 0:h.clone()),h};return{get:(e,{headers:t,queryParams:n,token:s}={})=>u({path:e,headers:t,queryParams:n,body:void 0,method:m.get,token:s}),post:(e,t,{headers:n,queryParams:s,token:o}={})=>u({path:e,headers:n,queryParams:s,body:t,method:m.post,token:o}),put:(e,t,{headers:n,queryParams:s,token:o}={})=>u({path:e,headers:n,queryParams:s,body:t,method:m.put,token:o}),delete:(e,t,{headers:n,queryParams:s,token:o}={})=>u({path:e,headers:n,queryParams:s,body:t,method:m.delete,token:o}),hooks:o}};var O={TOO_MANY_REQUESTS:429};function w(e,t,n){var s;let o=j(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 j(t){if("string"!=typeof t||!t)throw new Error("Invalid token provided");return e(t)}function U(e){const{exp:t}=j(e);return(new Date).getTime()/1e3>t}function R(e,t){return w(e,t,"permissions")}function x(e,t){return w(e,t,"roles")}const P=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function q(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===O.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 E=(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)}),S=e=>t=>e.test(t),M=S(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),T=S(/^\+[1-9]{1}[0-9]{3,14}$/),A=E(M,'"{val}" is not a valid email'),L=E(T,'"{val}" is not a valid phone number'),z=E((H=1,e=>e.length>=H),"Minimum length is 1");var H;const J=E((e=>"string"==typeof e),"Input is not a string"),N=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>$(...e).validate(n[t]))),t(...n)),C=e=>[J(`"${e}" must be a string`),z(`"${e}" must not be empty`)],_=e=>[J(`"${e}" must be a string`),A()],D=e=>[J(`"${e}" must be a string`),L()],Z=N(C("accessKey")),B=e=>({exchange:Z((t=>q(e.post(n.exchange,{},{token:t}))))});var F,K,Q,Y;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(F||(F={})),function(e){e.email="email",e.sms="sms",e.whatsapp="whatsapp"}(K||(K={})),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"}(Y||(Y={}));const G=C("loginId"),V=N(C("token")),W=N(G),X=N(C("pendingRef")),ee=N(G,_("email")),te=e=>({verify:V((t=>q(e.post(i.verify,{token:t})))),signIn:W(((t,n,s,o)=>q(e.post(P(i.signIn,K.email),{loginId:t,URI:n,loginOptions:s},{token:o})))),signUpOrIn:W(((t,n)=>q(e.post(P(i.signUpOrIn,K.email),{loginId:t,URI:n})))),signUp:W(((t,n,s)=>q(e.post(P(i.signUp,K.email),{loginId:t,URI:n,user:s})))),waitForSession:X(((t,n)=>new Promise((s=>{const{pollingIntervalMs:o,timeoutMs:a}=(({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(q(Promise.resolve(n))))}),o);r=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${a}ms`,errorCode:"0"},ok:!1}),clearInterval(u)}),a)})))),update:{email:ee(((t,n,s,o)=>q(e.post(i.update.email,{loginId:t,email:n,URI:s},{token:o}))))}}),ne=N(C("flowId")),se=N(C("executionId"),C("stepId"),C("interactionId")),oe=e=>({start:ne(((t,n,s,o,i)=>q(e.post(h.start,{flowId:t,options:n,conditionInteractionId:s,interactionId:o,input:i})))),next:se(((t,n,s,o)=>q(e.post(h.next,{executionId:t,stepId:n,interactionId:s,input:o}))))}),ie=C("loginId"),ae=N(C("token")),re=N(ie),ue=N(ie,D("phone")),de=N(ie,_("email")),le=e=>({verify:ae((t=>q(e.post(o.verify,{token:t})))),signIn:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:re(((t,s,i,a)=>q(e.post(P(o.signIn,n),{loginId:t,URI:s,loginOptions:i},{token:a}))))})),{}),signUp:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:re(((t,s,i)=>q(e.post(P(o.signUp,n),{loginId:t,URI:s,user:i}))))})),{}),signUpOrIn:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:re(((t,s)=>q(e.post(P(o.signUpOrIn,n),{loginId:t,URI:s}))))})),{}),update:{email:de(((t,n,s,i)=>q(e.post(o.update.email,{loginId:t,email:n,URI:s},{token:i})))),phone:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ue(((t,s,i,a)=>q(e.post(P(o.update.phone,n),{loginId:t,phone:s,URI:i},{token:a}))))})),{})}});var ce;!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"}(ce||(ce={}));const pe=N(C("code")),ge=e=>({start:Object.keys(ce).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:async(t,{redirect:s=!1}={},o,i)=>{const r=await e.post(a.start,o||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i});if(!s||!r.ok)return q(Promise.resolve(r));const{url:u}=await r.json();window.location.href=u}})),{}),exchange:pe((t=>q(e.post(a.exchange,{code:t}))))});var he;!function(e){e.signUp="signup",e.signIn="signin",e.verify="verify",e.updatePhone="updatePhone"}(he||(he={}));const ve=C("loginId"),fe=N(ve,C("code")),me=N(ve),Ie=N(ve,D("phone")),be=N(ve,_("email")),ke=e=>({verify:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:fe(((t,o)=>q(e.post(P(s.verify,n),{code:o,loginId:t}))))})),{}),signIn:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:me(((t,o,i)=>q(e.post(P(s.signIn,n),{loginId:t,loginOptions:o},{token:i}))))})),{}),signUp:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:me(((t,o)=>q(e.post(P(s.signUp,n),{loginId:t,user:o}))))})),{}),signUpOrIn:Object.keys(K).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:me((t=>q(e.post(P(s.signUpOrIn,n),{loginId:t}))))})),{}),update:{email:be(((t,n,o)=>q(e.post(s.update.email,{loginId:t,email:n},{token:o})))),phone:Object.keys(F).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:Ie(((t,o,i)=>q(e.post(P(s.update.phone,n),{loginId:t,phone:o},{token:i}))))})),{})}}),ye=N(C("tenant")),Oe=N(C("code")),we=e=>({start:ye((async(t,n,{redirect:s=!1}={},o,i)=>{const a=await e.post(r.start,o||{},{queryParams:{tenant:t,redirectURL:n},token:i});if(!s||!a.ok)return q(Promise.resolve(a));const{url:u}=await a.json();window.location.href=u})),exchange:Oe((t=>q(e.post(r.exchange,{code:t}))))}),je=C("loginId"),Ue=N(je,C("code")),Re=N(je),xe=N(je),Pe=e=>({signUp:Re(((t,n)=>q(e.post(u.signUp,{loginId:t,user:n})))),verify:Ue(((t,n,s,o)=>q(e.post(u.verify,{loginId:t,code:n,loginOptions:s},{token:o})))),update:xe(((t,n)=>q(e.post(u.update,{loginId:t},{token:n}))))}),qe=[J(`"${"loginId"}" must be a string`)];const Ee=C("loginId"),$e=C("origin"),Se=N(Ee,$e,C("name")),Me=N(Ee,$e),Te=N(qe,$e),Ae=N(Ee,$e,C("token")),Le=N(C("transactionId"),C("response")),ze=e=>({signUp:{start:Se(((t,n,s)=>q(e.post(d.signUp.start,{user:{loginId:t,name:s},origin:n})))),finish:Le(((t,n)=>q(e.post(d.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Te(((t,n,s,o)=>q(e.post(d.signIn.start,{loginId:t,origin:n,loginOptions:s},{token:o})))),finish:Le(((t,n)=>q(e.post(d.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:Me(((t,n)=>q(e.post(d.signUpOrIn.start,{loginId:t,origin:n}))))},update:{start:Ae(((t,n,s)=>q(e.post(d.update.start,{loginId:t,origin:n},{token:s})))),finish:Le(((t,n)=>q(e.post(d.update.finish,{transactionId:t,response:n}))))}}),He=N(C("token"));var Je,Ne;var Ce=N([(Je="projectId",Ne=C("projectId"),E(((e,n)=>s=>$(...n).validate(t(s,e)))(Je,Ne))())])((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=y({baseUrl:n||"https://api.descope.com",projectId:e,logger:t,hooks:s,cookiePolicy:o,baseConfig:{baseHeaders:i},fetch:a}),{accessKey:B(r),otp:ke(r),magicLink:le(r),enchantedLink:te(r),oauth:ge(r),saml:we(r),totp:Pe(r),webauthn:ze(r),flow:oe(r),refresh:e=>q(r.post(l,{},{token:e})),logout:e=>q(r.post(c,{},{token:e})),logoutAll:e=>q(r.post(p,{},{token:e})),me:e=>q(r.get(g,{token:e})),isJwtExpired:He(U),getJwtPermissions:He(R),getJwtRoles:He(x),httpClient:r};var r})));const _e=(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),De=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,s)=>{var o;return n[s]=[].concat((null===(o=e.hooks)||void 0===o?void 0:o[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:K});export{O as HttpStatusCodes,De as addHooksToConfig,Ze as default,q as transformResponse,_e 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/logout",g="/v1/auth/logoutall",h="/v1/auth/me",v={start:"/v1/flow/start",next:"/v1/flow/next"};const f=1e3,m=6e5,I=()=>{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")}},y=(e,t)=>{const 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=>I().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)),I().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 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}),{})),w=e=>void 0===e?void 0:JSON.stringify(e),O=(e,t="")=>{let n=e;return t&&(n=n+":"+t),{Authorization:`Bearer ${n}`}},U=({baseUrl:e,projectId:t,baseConfig:n,logger:s,hooks:o,cookiePolicy:i,fetch:a})=>{const r=y(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=await r((({path:e,baseUrl:t,queryParams:n})=>{const s=new URL(e,t);return n&&(s.search=new URLSearchParams(n).toString()),s})({path:d,baseUrl:e,queryParams:p}),{headers:k(O(t,g),{"x-descope-sdk-name":"core-js","x-descope-sdk-version":"1.0.4"},(null==n?void 0:n.baseHeaders)||{},l),method:c,body:w(u),credentials:i||"include"});return(null==o?void 0:o.afterRequest)&&await o.afterRequest(s,null==h?void 0:h.clone()),h};return{get:(e,{headers:t,queryParams:n,token:s}={})=>d({path:e,headers:t,queryParams:n,body:void 0,method:b.get,token:s}),post:(e,t,{headers:n,queryParams:s,token:o}={})=>d({path:e,headers:n,queryParams:s,body:t,method:b.post,token:o}),put:(e,t,{headers:n,queryParams:s,token:o}={})=>d({path:e,headers:n,queryParams:s,body:t,method:b.put,token:o}),delete:(e,t,{headers:n,queryParams:s,token:o}={})=>d({path:e,headers:n,queryParams:s,body:t,method:b.delete,token:o}),hooks:o}};var j={TOO_MANY_REQUESTS:429};function P(e,t,n){var s;let o=R(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 R(t){if("string"!=typeof t||!t)throw new Error("Invalid token provided");return e(t)}function x(e){const{exp:t}=R(e);return(new Date).getTime()/1e3>t}function q(e,t){return P(e,t,"permissions")}function E(e,t){return P(e,t,"roles")}const $=(...e)=>e.join("/").replace(/\/{2,}/g,"/");async function S(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===j.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 M=(e,t)=>(n=t)=>t=>!e(t)&&n.replace("{val}",t),T=(...e)=>({validate:t=>(e.forEach((e=>{const n=e(t);if(n)throw new Error(n)})),!0)}),A=e=>t=>e.test(t),L=A(/^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)*$/),z=A(/^\+[1-9]{1}[0-9]{3,14}$/),H=M(L,'"{val}" is not a valid email'),J=M(z,'"{val}" is not a valid phone number'),N=M((C=1,e=>e.length>=C),"Minimum length is 1");var C;const _=M((e=>"string"==typeof e),"Input is not a string"),D=(...e)=>t=>(...n)=>(e.forEach(((e,t)=>T(...e).validate(n[t]))),t(...n)),Z=e=>[_(`"${e}" must be a string`),N(`"${e}" must not be empty`)],B=e=>[_(`"${e}" must be a string`),H()],F=e=>[_(`"${e}" must be a string`),J()],K=D(Z("accessKey")),Q=e=>({exchange:K((t=>S(e.post(n.exchange,{},{token:t}))))});var Y,G,V,W;!function(e){e.sms="sms",e.whatsapp="whatsapp"}(Y||(Y={})),function(e){e.email="email",e.sms="sms",e.whatsapp="whatsapp"}(G||(G={})),function(e){e.waiting="waiting",e.running="running",e.completed="completed",e.failed="failed"}(V||(V={})),function(e){e.signUp="signup",e.signIn="signin",e.verify="verify"}(W||(W={}));const X=Z("loginId"),ee=D(Z("token")),te=D(X),ne=D(Z("pendingRef")),se=D(X,B("email")),oe=e=>({verify:ee((t=>S(e.post(i.verify,{token:t})))),signIn:te(((t,n,s,o)=>S(e.post($(i.signIn,G.email),{loginId:t,URI:n,loginOptions:s},{token:o})))),signUpOrIn:te(((t,n)=>S(e.post($(i.signUpOrIn,G.email),{loginId:t,URI:n})))),signUp:te(((t,n,s)=>S(e.post($(i.signUp,G.email),{loginId:t,URI:n,user:s})))),waitForSession:ne(((t,n)=>new Promise((s=>{const{pollingIntervalMs:o,timeoutMs:a}=(({pollingIntervalMs:e=1e3,timeoutMs:t=6e5}={})=>({pollingIntervalMs:Math.max(e||f,f),timeoutMs:Math.min(t||m,m)}))(n);let r;const d=setInterval((async()=>{const n=await e.post(i.session,{pendingRef:t});n.ok&&(clearInterval(d),r&&clearTimeout(r),s(S(Promise.resolve(n))))}),o);r=setTimeout((()=>{s({error:{errorDescription:`Session polling timeout exceeded: ${a}ms`,errorCode:"0"},ok:!1}),clearInterval(d)}),a)})))),update:{email:se(((t,n,s,o)=>S(e.post(i.update.email,{loginId:t,email:n,URI:s},{token:o}))))}}),ie=D(Z("flowId")),ae=D(Z("executionId"),Z("stepId"),Z("interactionId")),re=e=>({start:ie(((t,n,s,o,i)=>S(e.post(v.start,{flowId:t,options:n,conditionInteractionId:s,interactionId:o,input:i})))),next:ae(((t,n,s,o)=>S(e.post(v.next,{executionId:t,stepId:n,interactionId:s,input:o}))))}),de=Z("loginId"),ue=D(Z("token")),le=D(de),pe=D(de,F("phone")),ce=D(de,B("email")),ge=e=>({verify:ue((t=>S(e.post(o.verify,{token:t})))),signIn:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:le(((t,s,i,a)=>S(e.post($(o.signIn,n),{loginId:t,URI:s,loginOptions:i},{token:a}))))})),{}),signUp:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:le(((t,s,i)=>S(e.post($(o.signUp,n),{loginId:t,URI:s,user:i}))))})),{}),signUpOrIn:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:le(((t,s)=>S(e.post($(o.signUpOrIn,n),{loginId:t,URI:s}))))})),{}),update:{email:ce(((t,n,s,i)=>S(e.post(o.update.email,{loginId:t,email:n,URI:s},{token:i})))),phone:Object.keys(Y).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:pe(((t,s,i,a)=>S(e.post($(o.update.phone,n),{loginId:t,phone:s,URI:i},{token:a}))))})),{})}});var he;!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"}(he||(he={}));const ve=D(Z("code")),fe=e=>({start:Object.keys(he).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:async(t,{redirect:s=!1}={},o,i)=>{const r=await e.post(a.start,o||{},{queryParams:Object.assign({provider:n},t&&{redirectURL:t}),token:i});if(!s||!r.ok)return S(Promise.resolve(r));const{url:d}=await r.json();window.location.href=d}})),{}),exchange:ve((t=>S(e.post(a.exchange,{code:t}))))});var me;!function(e){e.signUp="signup",e.signIn="signin",e.verify="verify",e.updatePhone="updatePhone"}(me||(me={}));const Ie=Z("loginId"),ye=D(Ie,Z("code")),be=D(Ie),ke=D(Ie,F("phone")),we=D(Ie,B("email")),Oe=e=>({verify:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ye(((t,o)=>S(e.post($(s.verify,n),{code:o,loginId:t}))))})),{}),signIn:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:be(((t,o,i)=>S(e.post($(s.signIn,n),{loginId:t,loginOptions:o},{token:i}))))})),{}),signUp:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:be(((t,o)=>S(e.post($(s.signUp,n),{loginId:t,user:o}))))})),{}),signUpOrIn:Object.keys(G).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:be((t=>S(e.post($(s.signUpOrIn,n),{loginId:t}))))})),{}),update:{email:we(((t,n,o)=>S(e.post(s.update.email,{loginId:t,email:n},{token:o})))),phone:Object.keys(Y).reduce(((t,n)=>Object.assign(Object.assign({},t),{[n]:ke(((t,o,i)=>S(e.post($(s.update.phone,n),{loginId:t,phone:o},{token:i}))))})),{})}}),Ue=D(Z("tenant")),je=D(Z("code")),Pe=e=>({start:Ue((async(t,n,{redirect:s=!1}={},o,i)=>{const a=await e.post(r.start,o||{},{queryParams:{tenant:t,redirectURL:n},token:i});if(!s||!a.ok)return S(Promise.resolve(a));const{url:d}=await a.json();window.location.href=d})),exchange:je((t=>S(e.post(r.exchange,{code:t}))))}),Re=Z("loginId"),xe=D(Re,Z("code")),qe=D(Re),Ee=D(Re),$e=e=>({signUp:qe(((t,n)=>S(e.post(d.signUp,{loginId:t,user:n})))),verify:xe(((t,n,s,o)=>S(e.post(d.verify,{loginId:t,code:n,loginOptions:s},{token:o})))),update:Ee(((t,n)=>S(e.post(d.update,{loginId:t},{token:n}))))}),Se=Z("loginId"),Me=Z("newPassword"),Te=D(Se,Z("password")),Ae=D(Se),Le=D(Se,Me),ze=D(Se,Z("oldPassword"),Me),He=e=>({signUp:Te(((t,n,s)=>S(e.post(l.signUp,{loginId:t,password:n,user:s})))),signIn:Te(((t,n)=>S(e.post(l.signIn,{loginId:t,password:n})))),sendReset:Ae(((t,n)=>S(e.post(l.sendReset,{loginId:t,redirectUrl:n})))),update:Le(((t,n,s)=>S(e.post(l.update,{loginId:t,newPassword:n},{token:s})))),replace:ze(((t,n,s)=>S(e.post(l.replace,{loginId:t,oldPassword:n,newPassword:s})))),policy:()=>S(e.get(l.policy))}),Je=[_(`"${"loginId"}" must be a string`)];const Ne=Z("loginId"),Ce=Z("origin"),_e=D(Ne,Ce,Z("name")),De=D(Ne,Ce),Ze=D(Je,Ce),Be=D(Ne,Ce,Z("token")),Fe=D(Z("transactionId"),Z("response")),Ke=e=>({signUp:{start:_e(((t,n,s)=>S(e.post(u.signUp.start,{user:{loginId:t,name:s},origin:n})))),finish:Fe(((t,n)=>S(e.post(u.signUp.finish,{transactionId:t,response:n}))))},signIn:{start:Ze(((t,n,s,o)=>S(e.post(u.signIn.start,{loginId:t,origin:n,loginOptions:s},{token:o})))),finish:Fe(((t,n)=>S(e.post(u.signIn.finish,{transactionId:t,response:n}))))},signUpOrIn:{start:De(((t,n)=>S(e.post(u.signUpOrIn.start,{loginId:t,origin:n}))))},update:{start:Be(((t,n,s)=>S(e.post(u.update.start,{loginId:t,origin:n},{token:s})))),finish:Fe(((t,n)=>S(e.post(u.update.finish,{transactionId:t,response:n}))))}}),Qe=D(Z("token"));var Ye,Ge;var Ve=D([(Ye="projectId",Ge=Z("projectId"),M(((e,n)=>s=>T(...n).validate(t(s,e)))(Ye,Ge))())])((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=U({baseUrl:n||"https://api.descope.com",projectId:e,logger:t,hooks:s,cookiePolicy:o,baseConfig:{baseHeaders:i},fetch:a}),{accessKey:Q(r),otp:Oe(r),magicLink:ge(r),enchantedLink:oe(r),oauth:fe(r),saml:Pe(r),totp:$e(r),webauthn:Ke(r),password:He(r),flow:re(r),refresh:e=>S(r.post(p,{},{token:e})),logout:e=>S(r.post(c,{},{token:e})),logoutAll:e=>S(r.post(g,{},{token:e})),me:e=>S(r.get(h,{token:e})),isJwtExpired:Qe(x),getJwtPermissions:Qe(q),getJwtRoles:Qe(E),httpClient:r};var r})));const We=(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),Xe=(e,t)=>{var n;return["beforeRequest","afterRequest"].reduce(((n,s)=>{var o;return n[s]=[].concat((null===(o=e.hooks)||void 0===o?void 0:o[s])||[]).concat((null==t?void 0:t[s])||[]),n}),null!==(n=e.hooks)&&void 0!==n?n:e.hooks={}),e};var et=Object.assign(Ve,{DeliveryMethods:G});export{j as HttpStatusCodes,Xe as addHooksToConfig,et as default,S as transformResponse,We as wrapWith};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|