@descope/react-sdk 1.0.3 → 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 CHANGED
@@ -99,28 +99,30 @@ This can be helpful to implement application-specific logic. Examples:
99
99
  - Logout button
100
100
 
101
101
  ```js
102
- import { useDescope, useSession, useUser } from '@descope/react-sdk'
102
+ import { useDescope, useSession, useUser } from '@descope/react-sdk';
103
103
 
104
104
  const App = () => {
105
- // NOTE - `useDescope`, `useSession`, `useUser` should be used inside `AuthProvider` context,
106
- // and will throw an exception if this requirement is not met
107
- const { isAuthenticated, isSessionLoading } = useSession()
108
- const { user, isUserLoading } = useUser()
109
- const sdk = useDescope()
110
-
111
- if(isSessionLoading || isUserLoading){
112
- return <p>Loading...</p>
113
- }
114
-
115
- if(isAuthenticated){
116
- return (
117
- <p>Hello ${user.name}</p>
118
- <button onClick={sdk.logout}>Logout</div>
119
- )
120
- }
121
-
122
- return <p>You are not logged in</p>
123
- }
105
+ // NOTE - `useDescope`, `useSession`, `useUser` should be used inside `AuthProvider` context,
106
+ // and will throw an exception if this requirement is not met
107
+ const { isAuthenticated, isSessionLoading } = useSession();
108
+ const { user, isUserLoading } = useUser();
109
+ const sdk = useDescope();
110
+
111
+ if (isSessionLoading || isUserLoading) {
112
+ return <p>Loading...</p>;
113
+ }
114
+
115
+ if (isAuthenticated) {
116
+ return (
117
+ <>
118
+ <p>Hello {user.name}</p>
119
+ <button onClick={sdk.logout}>Logout</button>
120
+ </>
121
+ );
122
+ }
123
+
124
+ return <p>You are not logged in</p>;
125
+ };
124
126
  ```
125
127
 
126
128
  **For more SDK usage examples refer to [docs](https://docs.descope.com/build/guides/client_sdks/)**
@@ -173,7 +175,7 @@ const Component = () => {
173
175
  {...}
174
176
  {
175
177
  // button that triggers an API that may use session token
176
- <button onClick={onClick}>Click Me</div>
178
+ <button onClick={onClick}>Click Me</button>
177
179
  }
178
180
  )
179
181
  }
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=r(e),n=r(t);const u=o.default.createContext(void 0),i=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)},a=e=>(...t)=>{let r;try{r=e(...t)}catch(e){console.error(e)}return r},c={"x-descope-sdk-name":"react","x-descope-sdk-version":"1.0.3"},d="undefined"!=typeof window;let l;const f=e=>{const t=n.default({...e,persistTokens:d,autoRefresh:d});return l=t,t};l=f({projectId:"temp pid"});const p=()=>d?l?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),h=()=>d?l?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),m=a(((e=p(),t)=>l?.getJwtPermissions(e,t))),k=a(((e=p(),t)=>l?.getJwtRoles(e,t)));const b=({projectId:t,baseUrl:r,sessionTokenViaCookie:s,children:n})=>{const[a,d]=e.useState(),[l,p]=e.useState(),[h,m]=e.useState(!1),[k,b]=e.useState(!1),g=(({projectId:t,baseUrl:r,sessionTokenViaCookie:s})=>e.useMemo((()=>{if(t)return f({projectId:t,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:c,persistToken:!0,autoRefresh:!0})}),[t,r,s]))({projectId:t,baseUrl:r,sessionTokenViaCookie:s});e.useEffect((()=>{if(g){const e=g.onSessionTokenChange(p),t=g.onUserChange(d);return()=>{e(),t()}}}),[g]);const w=e.useCallback((()=>{b(!0),i(g?.refresh)().then((()=>{b(!1)}))}),[g]),y=e.useCallback((()=>{m(!0),i(g.me)().then((()=>{m(!1)}))}),[g]),S=e.useMemo((()=>({fetchUser:y,user:a,isUserLoading:h,fetchSession:w,session:l,isSessionLoading:k,projectId:t,baseUrl:r,setUser:d,setSession:p,sdk:g})),[y,a,h,w,l,k,t,r,d,p,g]);return o.default.createElement(u.Provider,{value:S},n)};b.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const g=e.lazy((async()=>((await Promise.resolve().then((function(){return s(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:c},{default:({projectId:e,flowId:t,baseUrl:r,innerRef:s,tenant:n,theme:u,debug:i,telemetryKey:a,redirectUrl:c,autoFocus:d})=>o.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":r,ref:s,tenant:n,theme:u,debug:i,telemetryKey:a,"redirect-url":c,"auto-focus":d})}))),w=o.default.forwardRef((({flowId:t,onSuccess:r,onError:s,tenant:n,theme:i,debug:a,telemetryKey:c,redirectUrl:d,autoFocus:l},f)=>{const[p,h]=e.useState(null);e.useImperativeHandle(f,(()=>p));const{projectId:m,baseUrl:k,sdk:b}=o.default.useContext(u),w=e.useCallback((async e=>{await b.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[r]);return e.useEffect((()=>{const e=p;return e?.addEventListener("success",w),s&&e?.addEventListener("error",s),()=>{s&&e?.removeEventListener("error",s),e?.removeEventListener("success",w)}}),[p,s,w]),o.default.createElement("form",null,o.default.createElement(e.Suspense,{fallback:null},o.default.createElement(g,{projectId:m,flowId:t,baseUrl:k,innerRef:h,tenant:n,theme:i,debug:a,telemetryKey:c,redirectUrl:d,autoFocus:l})))}));w.defaultProps={onError:void 0,onSuccess:void 0};var y=()=>{const t=e.useContext(u);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};const S=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,v={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],v);if("function"==typeof e[t])return()=>{throw Error(S("function"))};throw Error(S("attribute"))}};exports.AuthProvider=b,exports.Descope=w,exports.SignInFlow=e=>o.default.createElement(w,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>o.default.createElement(w,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>o.default.createElement(w,{...e,flowId:"sign-up-or-in"}),exports.getJwtPermissions=m,exports.getJwtRoles=k,exports.getRefreshToken=h,exports.getSessionToken=p,exports.refresh=(e=h())=>l?.refresh(e),exports.useDescope=()=>{const{sdk:t}=y();return e.useMemo((()=>t||new Proxy(f({projectId:"dummy"}),v)),[t])},exports.useSession=()=>{const{session:t,isSessionLoading:r,fetchSession:s}=y(),o=e.useRef(r);return e.useMemo((()=>{o.current=r}),[r]),e.useMemo((()=>{t||r||(o.current=!0)}),[s]),e.useEffect((()=>{t||r||s()}),[s]),{isSessionLoading:o.current,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:r,isUserLoading:s,session:o}=y(),[n,u]=e.useState(!1),i=e.useRef(s),a=e.useMemo((()=>!t&&!s&&o&&!n),[r,o,n]);return e.useMemo((()=>{i.current=s}),[s]),e.useMemo((()=>{a&&(i.current=!0)}),[a]),e.useEffect((()=>{a&&(u(!0),r())}),[a]),{isUserLoading:i.current,user:t}};
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@descope/web-js-sdk");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}function s(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach((function(r){if("default"!==r){var s=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,s.get?s:{enumerable:!0,get:function(){return e[r]}})}})),t.default=e,Object.freeze(t)}var o=r(e),n=r(t);const u=o.default.createContext(void 0),i=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)},a=e=>(...t)=>{let r;try{r=e(...t)}catch(e){console.error(e)}return r},c={"x-descope-sdk-name":"react","x-descope-sdk-version":"1.0.4"},d="undefined"!=typeof window;let l;const f=e=>{const t=n.default({...e,persistTokens:d,autoRefresh:d});return l=t,t};l=f({projectId:"temp pid"});const p=()=>d?l?.getSessionToken():(console.warn("Get session token is not supported in SSR"),""),h=()=>d?l?.getRefreshToken():(console.warn("Get refresh token is not supported in SSR"),""),m=a(((e=p(),t)=>l?.getJwtPermissions(e,t))),k=a(((e=p(),t)=>l?.getJwtRoles(e,t)));const b=({projectId:t,baseUrl:r,sessionTokenViaCookie:s,children:n})=>{const[a,d]=e.useState(),[l,p]=e.useState(),[h,m]=e.useState(!1),[k,b]=e.useState(!1),g=(({projectId:t,baseUrl:r,sessionTokenViaCookie:s})=>e.useMemo((()=>{if(t)return f({projectId:t,baseUrl:r,sessionTokenViaCookie:s,baseHeaders:c,persistToken:!0,autoRefresh:!0})}),[t,r,s]))({projectId:t,baseUrl:r,sessionTokenViaCookie:s});e.useEffect((()=>{if(g){const e=g.onSessionTokenChange(p),t=g.onUserChange(d);return()=>{e(),t()}}}),[g]);const w=e.useCallback((()=>{b(!0),i(g?.refresh)().then((()=>{b(!1)}))}),[g]),y=e.useCallback((()=>{m(!0),i(g.me)().then((()=>{m(!1)}))}),[g]),S=e.useMemo((()=>({fetchUser:y,user:a,isUserLoading:h,fetchSession:w,session:l,isSessionLoading:k,projectId:t,baseUrl:r,setUser:d,setSession:p,sdk:g})),[y,a,h,w,l,k,t,r,d,p,g]);return o.default.createElement(u.Provider,{value:S},n)};b.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const g=e.lazy((async()=>((await Promise.resolve().then((function(){return s(require("@descope/web-component"))}))).default.sdkConfigOverrides={baseHeaders:c},{default:({projectId:e,flowId:t,baseUrl:r,innerRef:s,tenant:n,theme:u,debug:i,telemetryKey:a,redirectUrl:c,autoFocus:d})=>o.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":r,ref:s,tenant:n,theme:u,debug:i,telemetryKey:a,"redirect-url":c,"auto-focus":d})}))),w=o.default.forwardRef((({flowId:t,onSuccess:r,onError:s,tenant:n,theme:i,debug:a,telemetryKey:c,redirectUrl:d,autoFocus:l},f)=>{const[p,h]=e.useState(null);e.useImperativeHandle(f,(()=>p));const{projectId:m,baseUrl:k,sdk:b}=o.default.useContext(u),w=e.useCallback((async e=>{await b.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail))),r&&r(e)}),[r]);return e.useEffect((()=>{const e=p;return e?.addEventListener("success",w),s&&e?.addEventListener("error",s),()=>{s&&e?.removeEventListener("error",s),e?.removeEventListener("success",w)}}),[p,s,w]),o.default.createElement("form",null,o.default.createElement(e.Suspense,{fallback:null},o.default.createElement(g,{projectId:m,flowId:t,baseUrl:k,innerRef:h,tenant:n,theme:i,debug:a,telemetryKey:c,redirectUrl:d,autoFocus:l})))}));w.defaultProps={onError:void 0,onSuccess:void 0};var y=()=>{const t=e.useContext(u);if(!t)throw Error("You can only use this hook in the context of <AuthProvider />");return t};const S=e=>`You can only use this ${e} after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`,v={get(e,t){if("object"==typeof e[t]&&null!==e[t])return new Proxy(e[t],v);if("function"==typeof e[t])return()=>{throw Error(S("function"))};throw Error(S("attribute"))}};exports.AuthProvider=b,exports.Descope=w,exports.SignInFlow=e=>o.default.createElement(w,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>o.default.createElement(w,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>o.default.createElement(w,{...e,flowId:"sign-up-or-in"}),exports.getJwtPermissions=m,exports.getJwtRoles=k,exports.getRefreshToken=h,exports.getSessionToken=p,exports.refresh=(e=h())=>l?.refresh(e),exports.useDescope=()=>{const{sdk:t}=y();return e.useMemo((()=>t||new Proxy(f({projectId:"dummy"}),v)),[t])},exports.useSession=()=>{const{session:t,isSessionLoading:r,fetchSession:s}=y(),o=e.useRef(r);return e.useMemo((()=>{o.current=r}),[r]),e.useMemo((()=>{t||r||(o.current=!0)}),[s]),e.useEffect((()=>{t||r||s()}),[s]),{isSessionLoading:o.current,sessionToken:t,isAuthenticated:!!t}},exports.useUser=()=>{const{user:t,fetchUser:r,isUserLoading:s,session:o}=y(),[n,u]=e.useState(!1),i=e.useRef(s),a=e.useMemo((()=>!t&&!s&&o&&!n),[r,o,n]);return e.useMemo((()=>{i.current=s}),[s]),e.useMemo((()=>{a&&(i.current=!0)}),[a]),e.useEffect((()=>{a&&(u(!0),r())}),[a]),{isUserLoading:i.current,user:t}};
2
2
  //# sourceMappingURL=index.cjs.js.map
@@ -1,3 +1,3 @@
1
- /// <reference types="react" />
2
- declare const App: () => JSX.Element;
1
+ import React from 'react';
2
+ declare const App: () => React.JSX.Element;
3
3
  export default App;
@@ -1,3 +1,3 @@
1
- /// <reference types="react" />
2
- declare const Home: () => JSX.Element;
1
+ import React from 'react';
2
+ declare const Home: () => React.JSX.Element;
3
3
  export default Home;
@@ -1,3 +1,3 @@
1
- /// <reference types="react" />
2
- declare const Login: () => JSX.Element;
1
+ import React from 'react';
2
+ declare const Login: () => React.JSX.Element;
3
3
  export default Login;
@@ -1,3 +1,3 @@
1
- /// <reference types="react" />
2
- declare const StepUp: () => JSX.Element;
1
+ import React from 'react';
2
+ declare const StepUp: () => React.JSX.Element;
3
3
  export default StepUp;