@descope/react-sdk 0.0.52-alpha.31 → 0.0.52-alpha.33

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 CHANGED
@@ -209,6 +209,8 @@ DESCOPE_DEBUG_MODE=<debug-mode>
209
209
  DESCOPE_THEME=<theme>
210
210
  # Optional - Telemetry key provided by Descope Inc
211
211
  DESCOPE_TELEMETRY_KEY=<telemetry-key>
212
+ # Optional - Step-Up flow id. If exists, The home page of a logged-in user will show a step-up button
213
+ DESCOPE_STEP_UP_FLOW_ID=step-up
212
214
  ```
213
215
 
214
216
  - Run `npm run start`
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(s){if("default"!==s){var o=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(t,s,o.get?o:{enumerable:!0,get:function(){return e[s]}})}})),t.default=e,Object.freeze(t)}var r=s(e),n=s(t);const i=r.default.createContext(void 0),a={"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.31"},u=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},l=e=>(...t)=>{let s;try{s=e(...t)}catch(e){console.error(e)}return s};let c;const d=e=>{const t=n.default({...e,persistTokens:!0,autoRefresh:!0});return c=t,t};c=d({projectId:"temp pid"});const f=()=>c?.getSessionToken(),p=l(((e=f(),t)=>c?.getJwtPermissions(e,t))),g=l(((e=f(),t)=>c?.getJwtRoles(e,t)));const h=({projectId:t,baseUrl:s,sessionTokenViaCookie:o,children:n})=>{const[l,c]=e.useState(),[f,p]=e.useState(),[g,h]=e.useState(!1),[k,b]=e.useState(!1),m=(({projectId:t,baseUrl:s,sessionTokenViaCookie:o})=>e.useMemo((()=>{if(t)return d({projectId:t,baseUrl:s,sessionTokenViaCookie:o,baseHeaders:a,persistToken:!0,autoRefresh:!0})}),[t,s,o]))({projectId:t,baseUrl:s,sessionTokenViaCookie:o});e.useEffect((()=>{if(m){const e=m.onSessionTokenChange(p),t=m.onUserChange(c);return()=>{e(),t()}}}),[m]);const v=e.useCallback((()=>{b(!0),u(m?.refresh)().then((()=>{b(!1)}))}),[m]),w=e.useCallback((()=>{h(!0),u(m.me)().then((()=>{h(!1)}))}),[m]),S=e.useCallback(u(m?.logoutAll),[m]),y=e.useCallback(u(m?.logout),[m]),E=e.useMemo((()=>({fetchUser:w,user:l,isUserLoading:g,fetchSession:v,session:f,isSessionLoading:k,logout:y,logoutAll:S,projectId:t,baseUrl:s,setUser:c,setSession:p,sdk:m})),[w,l,g,v,f,k,y,S,t,s,c,p,m]);return r.default.createElement(i.Provider,{value:E},n)};h.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const k=e.lazy((async()=>((await Promise.resolve().then((function(){return o(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:a},{default:({projectId:e,flowId:t,baseUrl:s,innerRef:o,tenant:n,theme:i,debug:a,telemetryKey:u})=>r.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":s,ref:o,tenant:n,theme:i,debug:a,telemetryKey:u})}))),b=r.default.forwardRef((({flowId:t,onSuccess:s,onError:o,tenant:n,theme:a,debug:u,telemetryKey:l},c)=>{const[d,f]=e.useState(null);e.useImperativeHandle(c,(()=>d));const{projectId:p,baseUrl:g,setUser:h,setSession:b,sdk:m}=r.default.useContext(i),v=e.useCallback((async e=>{h(e.detail?.user);const t=e.detail?.sessionJwt;b(t),await m.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),s&&s(e)}),[h,b,s]);return e.useEffect((()=>{const e=d;return e?.addEventListener("success",v),o&&e?.addEventListener("error",o),()=>{o&&e?.removeEventListener("error",o),e?.removeEventListener("success",v)}}),[d,o,v]),r.default.createElement("form",null,r.default.createElement(e.Suspense,{fallback:null},r.default.createElement(k,{projectId:p,flowId:t,baseUrl:g,innerRef:f,tenant:n,theme:a,debug:u,telemetryKey:l})))}));b.defaultProps={onError:void 0,onSuccess:void 0};var m=()=>{const t=e.useContext(i);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};exports.AuthProvider=h,exports.Descope=b,exports.SignInFlow=e=>r.default.createElement(b,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>r.default.createElement(b,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>r.default.createElement(b,{...e,flowId:"sign-up-or-in"}),exports.getJwtPermissions=p,exports.getJwtRoles=g,exports.getRefreshToken=()=>c?.getRefreshToken(),exports.getSessionToken=f,exports.useDescope=()=>{const{logout:t,logoutAll:s}=m();return e.useMemo((()=>({logoutAll:s,logout:t})),[s,t])},exports.useSession=()=>{const{session:t,isSessionLoading:s,fetchSession:o}=m();return e.useEffect((()=>{t||s||o()}),[o]),{isSessionLoading:s,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:s,isUserLoading:o,session:r,isSessionLoading:n}=m(),[i,a]=e.useState(!1);return e.useEffect((()=>{t||o||!r||n||i||(a(!0),s())}),[n,s,r,i]),{isUserLoading:o,user:t}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function s(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function o(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(s){if("default"!==s){var o=Object.getOwnPropertyDescriptor(e,s);Object.defineProperty(t,s,o.get?o:{enumerable:!0,get:function(){return e[s]}})}})),t.default=e,Object.freeze(t)}var r=s(e),n=s(t);const i=r.default.createContext(void 0),a={"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.33"},u=e=>(...t)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...t)},l=e=>(...t)=>{let s;try{s=e(...t)}catch(e){console.error(e)}return s};let c;const d=e=>{const t=n.default({...e,persistTokens:!0,autoRefresh:!0});return c=t,t};c=d({projectId:"temp pid"});const f=()=>c?.getSessionToken(),p=l(((e=f(),t)=>c?.getJwtPermissions(e,t))),g=l(((e=f(),t)=>c?.getJwtRoles(e,t)));const h=({projectId:t,baseUrl:s,sessionTokenViaCookie:o,children:n})=>{const[l,c]=e.useState(),[f,p]=e.useState(),[g,h]=e.useState(!1),[k,b]=e.useState(!1),m=(({projectId:t,baseUrl:s,sessionTokenViaCookie:o})=>e.useMemo((()=>{if(t)return d({projectId:t,baseUrl:s,sessionTokenViaCookie:o,baseHeaders:a,persistToken:!0,autoRefresh:!0})}),[t,s,o]))({projectId:t,baseUrl:s,sessionTokenViaCookie:o});e.useEffect((()=>{if(m){const e=m.onSessionTokenChange(p),t=m.onUserChange(c);return()=>{e(),t()}}}),[m]);const v=e.useCallback((()=>{b(!0),u(m?.refresh)().then((()=>{b(!1)}))}),[m]),w=e.useCallback((()=>{h(!0),u(m.me)().then((()=>{h(!1)}))}),[m]),S=e.useCallback(u(m?.logoutAll),[m]),y=e.useCallback(u(m?.logout),[m]),E=e.useMemo((()=>({fetchUser:w,user:l,isUserLoading:g,fetchSession:v,session:f,isSessionLoading:k,logout:y,logoutAll:S,projectId:t,baseUrl:s,setUser:c,setSession:p,sdk:m})),[w,l,g,v,f,k,y,S,t,s,c,p,m]);return r.default.createElement(i.Provider,{value:E},n)};h.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const k=e.lazy((async()=>((await Promise.resolve().then((function(){return o(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:a},{default:({projectId:e,flowId:t,baseUrl:s,innerRef:o,tenant:n,theme:i,debug:a,telemetryKey:u})=>r.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":s,ref:o,tenant:n,theme:i,debug:a,telemetryKey:u})}))),b=r.default.forwardRef((({flowId:t,onSuccess:s,onError:o,tenant:n,theme:a,debug:u,telemetryKey:l},c)=>{const[d,f]=e.useState(null);e.useImperativeHandle(c,(()=>d));const{projectId:p,baseUrl:g,setUser:h,setSession:b,sdk:m}=r.default.useContext(i),v=e.useCallback((async e=>{h(e.detail?.user);const t=e.detail?.sessionJwt;b(t),await m.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),s&&s(e)}),[h,b,s]);return e.useEffect((()=>{const e=d;return e?.addEventListener("success",v),o&&e?.addEventListener("error",o),()=>{o&&e?.removeEventListener("error",o),e?.removeEventListener("success",v)}}),[d,o,v]),r.default.createElement("form",null,r.default.createElement(e.Suspense,{fallback:null},r.default.createElement(k,{projectId:p,flowId:t,baseUrl:g,innerRef:f,tenant:n,theme:a,debug:u,telemetryKey:l})))}));b.defaultProps={onError:void 0,onSuccess:void 0};var m=()=>{const t=e.useContext(i);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};exports.AuthProvider=h,exports.Descope=b,exports.SignInFlow=e=>r.default.createElement(b,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>r.default.createElement(b,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>r.default.createElement(b,{...e,flowId:"sign-up-or-in"}),exports.getJwtPermissions=p,exports.getJwtRoles=g,exports.getRefreshToken=()=>c?.getRefreshToken(),exports.getSessionToken=f,exports.useDescope=()=>{const{logout:t,logoutAll:s}=m();return e.useMemo((()=>({logoutAll:s,logout:t})),[s,t])},exports.useSession=()=>{const{session:t,isSessionLoading:s,fetchSession:o}=m();return e.useEffect((()=>{t||s||o()}),[o]),{isSessionLoading:s,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:s,isUserLoading:o,session:r,isSessionLoading:n}=m(),[i,a]=e.useState(!1);return e.useEffect((()=>{t||o||!r||n||i||(a(!0),s())}),[n,s,r,i]),{isUserLoading:o,user:t}};
2
2
  //# sourceMappingURL=index.cjs.js.map
package/dist/index.esm.js CHANGED
@@ -1,2 +1,2 @@
1
- import e,{useMemo as o,useState as s,useEffect as t,useCallback as n,lazy as r,useImperativeHandle as i,Suspense as a,useContext as c}from"react";import l from"@descope/web-js-sdk";const d=e.createContext(void 0),u={"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.31"},f=e=>(...o)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...o)},p=e=>(...o)=>{let s;try{s=e(...o)}catch(e){console.error(e)}return s};let h;const g=e=>{const o=l({...e,persistTokens:!0,autoRefresh:!0});return h=o,o};h=g({projectId:"temp pid"});const m=()=>h?.getSessionToken(),k=p(((e=m(),o)=>h?.getJwtPermissions(e,o))),b=p(((e=m(),o)=>h?.getJwtRoles(e,o))),w=()=>h?.getRefreshToken();const v=({projectId:r,baseUrl:i,sessionTokenViaCookie:a,children:c})=>{const[l,p]=s(),[h,m]=s(),[k,b]=s(!1),[w,v]=s(!1),U=(({projectId:e,baseUrl:s,sessionTokenViaCookie:t})=>o((()=>{if(e)return g({projectId:e,baseUrl:s,sessionTokenViaCookie:t,baseHeaders:u,persistToken:!0,autoRefresh:!0})}),[e,s,t]))({projectId:r,baseUrl:i,sessionTokenViaCookie:a});t((()=>{if(U){const e=U.onSessionTokenChange(m),o=U.onUserChange(p);return()=>{e(),o()}}}),[U]);const E=n((()=>{v(!0),f(U?.refresh)().then((()=>{v(!1)}))}),[U]),I=n((()=>{b(!0),f(U.me)().then((()=>{b(!1)}))}),[U]),y=n(f(U?.logoutAll),[U]),S=n(f(U?.logout),[U]),j=o((()=>({fetchUser:I,user:l,isUserLoading:k,fetchSession:E,session:h,isSessionLoading:w,logout:S,logoutAll:y,projectId:r,baseUrl:i,setUser:p,setSession:m,sdk:U})),[I,l,k,E,h,w,S,y,r,i,p,m,U]);return e.createElement(d.Provider,{value:j},c)};v.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const U=r((async()=>((await import("@descope/web-component")).default.sdkConfigOverrides={baseHeaders:u},{default:({projectId:o,flowId:s,baseUrl:t,innerRef:n,tenant:r,theme:i,debug:a,telemetryKey:c})=>e.createElement("descope-wc",{"project-id":o,"flow-id":s,"base-url":t,ref:n,tenant:r,theme:i,debug:a,telemetryKey:c})}))),E=e.forwardRef((({flowId:o,onSuccess:r,onError:c,tenant:l,theme:u,debug:f,telemetryKey:p},h)=>{const[g,m]=s(null);i(h,(()=>g));const{projectId:k,baseUrl:b,setUser:w,setSession:v,sdk:E}=e.useContext(d),I=n((async e=>{w(e.detail?.user);const o=e.detail?.sessionJwt;v(o),await E.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[w,v,r]);return t((()=>{const e=g;return e?.addEventListener("success",I),c&&e?.addEventListener("error",c),()=>{c&&e?.removeEventListener("error",c),e?.removeEventListener("success",I)}}),[g,c,I]),e.createElement("form",null,e.createElement(a,{fallback:null},e.createElement(U,{projectId:k,flowId:o,baseUrl:b,innerRef:m,tenant:l,theme:u,debug:f,telemetryKey:p})))}));E.defaultProps={onError:void 0,onSuccess:void 0};const I=o=>e.createElement(E,{...o,flowId:"sign-in"}),y=o=>e.createElement(E,{...o,flowId:"sign-up"}),S=o=>e.createElement(E,{...o,flowId:"sign-up-or-in"});var j=()=>{const e=c(d);if(!e)throw Error("You can only use this hook in the context of <AuthProvider />");return e};const C=()=>{const{logout:e,logoutAll:s}=j();return o((()=>({logoutAll:s,logout:e})),[s,e])},L=()=>{const{session:e,isSessionLoading:o,fetchSession:s}=j();return t((()=>{e||o||s()}),[s]),{isSessionLoading:o,sessionToken:e,isAuthenticated:!!e}},T=()=>{const{user:e,fetchUser:o,isUserLoading:n,session:r,isSessionLoading:i}=j(),[a,c]=s(!1);return t((()=>{e||n||!r||i||a||(c(!0),o())}),[i,o,r,a]),{isUserLoading:n,user:e}};export{v as AuthProvider,E as Descope,I as SignInFlow,y as SignUpFlow,S as SignUpOrInFlow,k as getJwtPermissions,b as getJwtRoles,w as getRefreshToken,m as getSessionToken,C as useDescope,L as useSession,T as useUser};
1
+ import e,{useMemo as o,useState as s,useEffect as t,useCallback as n,lazy as r,useImperativeHandle as i,Suspense as a,useContext as c}from"react";import l from"@descope/web-js-sdk";const d=e.createContext(void 0),u={"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.33"},f=e=>(...o)=>{if(!e)throw Error("You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component");return e(...o)},p=e=>(...o)=>{let s;try{s=e(...o)}catch(e){console.error(e)}return s};let h;const g=e=>{const o=l({...e,persistTokens:!0,autoRefresh:!0});return h=o,o};h=g({projectId:"temp pid"});const m=()=>h?.getSessionToken(),k=p(((e=m(),o)=>h?.getJwtPermissions(e,o))),b=p(((e=m(),o)=>h?.getJwtRoles(e,o))),w=()=>h?.getRefreshToken();const v=({projectId:r,baseUrl:i,sessionTokenViaCookie:a,children:c})=>{const[l,p]=s(),[h,m]=s(),[k,b]=s(!1),[w,v]=s(!1),U=(({projectId:e,baseUrl:s,sessionTokenViaCookie:t})=>o((()=>{if(e)return g({projectId:e,baseUrl:s,sessionTokenViaCookie:t,baseHeaders:u,persistToken:!0,autoRefresh:!0})}),[e,s,t]))({projectId:r,baseUrl:i,sessionTokenViaCookie:a});t((()=>{if(U){const e=U.onSessionTokenChange(m),o=U.onUserChange(p);return()=>{e(),o()}}}),[U]);const E=n((()=>{v(!0),f(U?.refresh)().then((()=>{v(!1)}))}),[U]),I=n((()=>{b(!0),f(U.me)().then((()=>{b(!1)}))}),[U]),y=n(f(U?.logoutAll),[U]),S=n(f(U?.logout),[U]),j=o((()=>({fetchUser:I,user:l,isUserLoading:k,fetchSession:E,session:h,isSessionLoading:w,logout:S,logoutAll:y,projectId:r,baseUrl:i,setUser:p,setSession:m,sdk:U})),[I,l,k,E,h,w,S,y,r,i,p,m,U]);return e.createElement(d.Provider,{value:j},c)};v.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const U=r((async()=>((await import("@descope/web-component")).default.sdkConfigOverrides={baseHeaders:u},{default:({projectId:o,flowId:s,baseUrl:t,innerRef:n,tenant:r,theme:i,debug:a,telemetryKey:c})=>e.createElement("descope-wc",{"project-id":o,"flow-id":s,"base-url":t,ref:n,tenant:r,theme:i,debug:a,telemetryKey:c})}))),E=e.forwardRef((({flowId:o,onSuccess:r,onError:c,tenant:l,theme:u,debug:f,telemetryKey:p},h)=>{const[g,m]=s(null);i(h,(()=>g));const{projectId:k,baseUrl:b,setUser:w,setSession:v,sdk:E}=e.useContext(d),I=n((async e=>{w(e.detail?.user);const o=e.detail?.sessionJwt;v(o),await E.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[w,v,r]);return t((()=>{const e=g;return e?.addEventListener("success",I),c&&e?.addEventListener("error",c),()=>{c&&e?.removeEventListener("error",c),e?.removeEventListener("success",I)}}),[g,c,I]),e.createElement("form",null,e.createElement(a,{fallback:null},e.createElement(U,{projectId:k,flowId:o,baseUrl:b,innerRef:m,tenant:l,theme:u,debug:f,telemetryKey:p})))}));E.defaultProps={onError:void 0,onSuccess:void 0};const I=o=>e.createElement(E,{...o,flowId:"sign-in"}),y=o=>e.createElement(E,{...o,flowId:"sign-up"}),S=o=>e.createElement(E,{...o,flowId:"sign-up-or-in"});var j=()=>{const e=c(d);if(!e)throw Error("You can only use this hook in the context of <AuthProvider />");return e};const C=()=>{const{logout:e,logoutAll:s}=j();return o((()=>({logoutAll:s,logout:e})),[s,e])},L=()=>{const{session:e,isSessionLoading:o,fetchSession:s}=j();return t((()=>{e||o||s()}),[s]),{isSessionLoading:o,sessionToken:e,isAuthenticated:!!e}},T=()=>{const{user:e,fetchUser:o,isUserLoading:n,session:r,isSessionLoading:i}=j(),[a,c]=s(!1);return t((()=>{e||n||!r||i||a||(c(!0),o())}),[i,o,r,a]),{isUserLoading:n,user:e}};export{v as AuthProvider,E as Descope,I as SignInFlow,y as SignUpFlow,S as SignUpOrInFlow,k as getJwtPermissions,b as getJwtRoles,w as getRefreshToken,m as getSessionToken,C as useDescope,L as useSession,T as useUser};
2
2
  //# sourceMappingURL=index.esm.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@descope/react-sdk",
3
- "version": "0.0.52-alpha.31",
3
+ "version": "0.0.52-alpha.33",
4
4
  "description": "Descope React SDK",
5
5
  "repository": {
6
6
  "type": "git",
@@ -35,7 +35,7 @@
35
35
  ]
36
36
  },
37
37
  "dependencies": {
38
- "@descope/web-component": "0.1.0-alpha.40",
38
+ "@descope/web-component": "0.1.0-alpha.42",
39
39
  "react-router-dom": "6.7.0"
40
40
  },
41
41
  "devDependencies": {
@@ -74,7 +74,7 @@
74
74
  "eslint-plugin-promise": "6.1.1",
75
75
  "eslint-plugin-react": "7.32.1",
76
76
  "eslint-plugin-react-hooks": "4.6.0",
77
- "eslint-plugin-testing-library": "5.9.1",
77
+ "eslint-plugin-testing-library": "5.10.0",
78
78
  "husky": "^8.0.1",
79
79
  "jest": "^27.3.1",
80
80
  "jest-extended": "^3.2.2",