@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 +23 -21
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/examples/app/App.d.ts +2 -2
- package/dist/examples/app/Home.d.ts +2 -2
- package/dist/examples/app/Login.d.ts +2 -2
- package/dist/examples/app/StepUp.d.ts +2 -2
- package/dist/index.d.ts +150 -141
- package/dist/index.esm.js +1 -1
- package/dist/index.umd.js +4 -0
- package/dist/index.umd.js.map +1 -0
- package/package.json +21 -15
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
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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</
|
|
178
|
+
<button onClick={onClick}>Click Me</button>
|
|
177
179
|
}
|
|
178
180
|
)
|
|
179
181
|
}
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
2
|
-
declare const StepUp: () => JSX.Element;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
declare const StepUp: () => React.JSX.Element;
|
|
3
3
|
export default StepUp;
|