@descope/react-sdk 0.0.52-alpha.24 → 0.0.52-alpha.25
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 +58 -20
- package/dist/cjs/index.cjs.js +1 -1
- package/dist/cjs/index.cjs.js.map +1 -1
- package/dist/index.d.ts +484 -8
- package/dist/index.esm.js +1 -1
- package/dist/index.esm.js.map +1 -1
- package/package.json +9 -8
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ import { AuthProvider } from '@descope/react-sdk';
|
|
|
20
20
|
|
|
21
21
|
const AppRoot = () => {
|
|
22
22
|
return (
|
|
23
|
-
<AuthProvider projectId="
|
|
23
|
+
<AuthProvider projectId="my-project-id">
|
|
24
24
|
<App />
|
|
25
25
|
</AuthProvider>
|
|
26
26
|
);
|
|
@@ -59,11 +59,14 @@ const App = () => {
|
|
|
59
59
|
return (
|
|
60
60
|
{...}
|
|
61
61
|
<Descope
|
|
62
|
-
flowId="
|
|
62
|
+
flowId="my-flow-id"
|
|
63
63
|
onSuccess={(e) => console.log('Logged in!')}
|
|
64
|
-
onError={(e) => console.log('Could not logged in
|
|
64
|
+
onError={(e) => console.log('Could not logged in')}
|
|
65
65
|
// theme can be "light" or "dark". If empty, Descope will use the OS theme
|
|
66
66
|
// theme="light"
|
|
67
|
+
|
|
68
|
+
// debug can be set to true to enable debug mode
|
|
69
|
+
// debug={true}
|
|
67
70
|
/>
|
|
68
71
|
)
|
|
69
72
|
}
|
|
@@ -110,33 +113,42 @@ When developing a full-stack application, it is common to have private server AP
|
|
|
110
113
|
|
|
111
114
|
Note: Descope also provides server-side SDKs in various languages (NodeJS, Go, Python, etc). Descope's server SDKs have out-of-the-box session validation API that supports the options described bellow. To read more about session validation, Read [this section](https://docs.descope.com/guides/gettingstarted/#session-validation) in Descope documentation.
|
|
112
115
|
|
|
113
|
-
|
|
116
|
+
There are 2 ways to achieve that:
|
|
114
117
|
|
|
115
|
-
|
|
118
|
+
1. Using `getSessionToken` to get the token, and pass it on the `Authorization` Header (Recommended)
|
|
119
|
+
2. Passing `sessionTokenViaCookie` boolean prop to the `AuthProvider` component (Use cautiously, session token may grow, especially in cases of using authorization, or adding custom claim)
|
|
116
120
|
|
|
117
|
-
|
|
121
|
+
##### 1. Using `getSessionToken` to get the token
|
|
118
122
|
|
|
119
|
-
|
|
123
|
+
An example for api function, and passing the token on the `Authorization` header:
|
|
120
124
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
125
|
+
```js
|
|
126
|
+
import { getSessionToken } from '@descope/react-sdk';
|
|
127
|
+
|
|
128
|
+
// fetch data using back
|
|
129
|
+
// Note: Descope backend SDKs support extracting session token from the Authorization header
|
|
130
|
+
export const fetchData = async () => {
|
|
131
|
+
const sessionToken = getSessionToken();
|
|
132
|
+
const res = await fetch('/path/to/server/api', {
|
|
133
|
+
headers: {
|
|
134
|
+
Authorization: `Bearer ${sessionToken}`
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
// ... use res
|
|
138
|
+
};
|
|
139
|
+
```
|
|
124
140
|
|
|
125
|
-
An example for
|
|
141
|
+
An example for component that uses `fetchData` function from above
|
|
126
142
|
|
|
127
143
|
```js
|
|
128
|
-
|
|
144
|
+
// Component code
|
|
145
|
+
import { fetchData } from 'path/to/api/file'
|
|
129
146
|
import { useCallback } from 'react'
|
|
130
147
|
|
|
131
|
-
const
|
|
132
|
-
const { sessionToken } = useAuth()
|
|
133
|
-
|
|
148
|
+
const Component = () => {
|
|
134
149
|
const onClick = useCallback(() => {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
headers: { Authorization: `Bearer ${sessionToken}` }
|
|
138
|
-
})
|
|
139
|
-
},[sessionToken])
|
|
150
|
+
fetchData()
|
|
151
|
+
},[])
|
|
140
152
|
return (
|
|
141
153
|
{...}
|
|
142
154
|
{
|
|
@@ -147,6 +159,28 @@ const App = () => {
|
|
|
147
159
|
}
|
|
148
160
|
```
|
|
149
161
|
|
|
162
|
+
##### 2. Passing `sessionTokenViaCookie` boolean prop to the `AuthProvider`
|
|
163
|
+
|
|
164
|
+
Passing `sessionTokenViaCookie` prop to `AuthProvider` component. Descope SDK will automatically store session token on the `DS` cookie.
|
|
165
|
+
|
|
166
|
+
Note: Use this option if session token will stay small (less than 1k). Session token can grow, especially in cases of using authorization, or adding custom claims
|
|
167
|
+
|
|
168
|
+
Example:
|
|
169
|
+
|
|
170
|
+
```js
|
|
171
|
+
import { AuthProvider } from '@descope/react-sdk';
|
|
172
|
+
|
|
173
|
+
const AppRoot = () => {
|
|
174
|
+
return (
|
|
175
|
+
<AuthProvider projectId="my-project-id" sessionTokenViaCookie>
|
|
176
|
+
<App />
|
|
177
|
+
</AuthProvider>
|
|
178
|
+
);
|
|
179
|
+
};
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Now, whenever you call `fetch`, the cookie will automatically be sent with the request. Descope backend SDKs also support extracting the token from the `DS` cookie.
|
|
183
|
+
|
|
150
184
|
## Run a local example
|
|
151
185
|
|
|
152
186
|
There is a simple app that uses Descope React SDK, with two routes
|
|
@@ -169,6 +203,10 @@ DESCOPE_PROJECT_ID=<project-id>
|
|
|
169
203
|
DESCOPE_FLOW_ID=<flow-id>
|
|
170
204
|
# Optional - Descope base url, e.g. http://localhost:8000
|
|
171
205
|
DESCOPE_BASE_URL=<base-url>
|
|
206
|
+
# Optional - Debug mode
|
|
207
|
+
DESCOPE_DEBUG_MODE=<debug-mode>
|
|
208
|
+
# Optional - Theme, can be "light" or "dark". If empty, Descope will use the OS theme
|
|
209
|
+
DESCOPE_THEME=<theme>
|
|
172
210
|
```
|
|
173
211
|
|
|
174
212
|
- Run `npm run start`
|
package/dist/cjs/index.cjs.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("@descope/web-js-sdk")
|
|
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);let u;const a=e=>{const t=n.default({...e,persistTokens:!0,autoRefresh:!0});return u=t,t};u=a({projectId:"temp pid"});const l=r.default.createContext(void 0),i=({projectId:t,baseUrl:s,sessionTokenViaCookie:o,children:n})=>{const[u,i]=e.useState({}),[c,d]=e.useState(""),f=e.useMemo((()=>{if(t)return a({projectId:t,baseUrl:s,sessionTokenViaCookie:o,hooks:{beforeRequest:e=>{const t=e;return t.headers={...t.headers,"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.25"},t}},persistToken:!0,autoRefresh:!0})}),[t,s]);e.useEffect((()=>{if(!f)return;const e=f.onSessionTokenChange(d),t=f.onUserChange(i);return f.refresh(),()=>{e?.(),t?.()}}),[f]);const p=e.useMemo((()=>({sdk:f,projectId:t,baseUrl:s,user:u,sessionToken:c,setUser:i,setSessionToken:d})),[c,u,t,s]);return r.default.createElement(l.Provider,{value:p},n)};i.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const c=e.lazy((async()=>(await Promise.resolve().then((function(){return o(require("@descope/web-component"))})),{default:({projectId:e,flowId:t,baseUrl:s,innerRef:o,tenant:n,theme:u,debug:a})=>r.default.createElement("descope-wc",{"project-id":e,"flow-id":t,"base-url":s,ref:o,tenant:n,theme:u,debug:a})}))),d=r.default.forwardRef((({flowId:t,onSuccess:s,onError:o,tenant:n,theme:u,debug:a},i)=>{const[d,f]=e.useState(null);e.useImperativeHandle(i,(()=>d));const{projectId:p,baseUrl:k,setUser:b,setSessionToken:h,sdk:g}=r.default.useContext(l),m=e.useCallback((e=>{b(e.detail?.user);const t=e.detail?.sessionJwt;h(t),s&&s(e),g.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail)))}),[b,h,s]);return e.useEffect((()=>{const e=d;return e?.addEventListener("success",m),o&&e?.addEventListener("error",o),()=>{o&&e?.removeEventListener("error",o),e?.removeEventListener("success",m)}}),[d,o,m]),r.default.createElement(e.Suspense,{fallback:null},r.default.createElement(c,{projectId:p,flowId:t,baseUrl:k,innerRef:f,tenant:n,theme:u,debug:a}))}));d.defaultProps={onError:void 0,onSuccess:void 0};const f=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)};exports.AuthProvider=i,exports.Descope=d,exports.SignInFlow=e=>r.default.createElement(d,{...e,flowId:"sign-in"}),exports.SignUpFlow=e=>r.default.createElement(d,{...e,flowId:"sign-up"}),exports.SignUpOrInFlow=e=>r.default.createElement(d,{...e,flowId:"sign-up-or-in"}),exports.getSessionToken=()=>u?.getSessionToken(),exports.useAuth=()=>{const t=r.default.useContext(l);if(!t)throw Error("You can only use 'useAuth' in the context of <AuthProvider />");const{user:s,sessionToken:o,sdk:n}=t,u=e.useCallback(f(n?.logoutAll),[n]),a=e.useCallback(f(n?.logout),[n]),i=e.useCallback(f(n?.me),[n]),c=e.useCallback(f(n?.getJwtPermissions),[n]),d=e.useCallback(f(n?.getJwtRoles),[n]),p=e.useCallback(f(n?.getRefreshToken),[n]);return e.useMemo((()=>({authenticated:!!o,user:s,sessionToken:o,logoutAll:u,logout:a,me:i,getJwtPermissions:c,getJwtRoles:d,getRefreshToken:p})),[s,o,n])};
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../src/lib/hooks/authContext.ts","../../src/lib/components/AuthProvider.tsx","../../src/lib/components/Descope.tsx","../../src/lib/hooks/useAuth.ts","../../src/lib/components/DefaultFlows.tsx"],"sourcesContent":["import React from 'react';\nimport { IAuthContext } from '../types';\n\nconst AuthContext = React.createContext<IAuthContext>(undefined);\n\nexport default AuthContext;\n","// '@descope/web-js-sdk' is a dependency of '@descope/web-component'\n// and we want to use the same version that is used there\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport createSdk from '@descope/web-js-sdk';\nimport React, { FC, useEffect, useMemo, useState } from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { IAuthContext } from '../types';\n\ndeclare const BUILD_VERSION: string;\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState({});\n\tconst [sessionToken, setSessionToken] = useState('');\n\n\tconst sdk = useMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\thooks: {\n\t\t\t\tbeforeRequest: (config) => {\n\t\t\t\t\tconst conf = config;\n\t\t\t\t\tconf.headers = {\n\t\t\t\t\t\t...conf.headers,\n\t\t\t\t\t\t'x-descope-sdk-name': 'react',\n\t\t\t\t\t\t'x-descope-sdk-version': BUILD_VERSION\n\t\t\t\t\t};\n\t\t\t\t\treturn conf;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}, [projectId, baseUrl]);\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSessionToken);\n\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\t\treturn () => {\n\t\t\tunsubscribeSessionToken?.();\n\t\t\tunsubscribeUser?.();\n\t\t};\n\t}, [sdk]);\n\n\tconst value = useMemo<IAuthContext>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tsetUser,\n\t\t\tsetSessionToken\n\t\t}),\n\t\t[sessionToken, user, projectId, baseUrl]\n\t);\n\treturn <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { DescopeProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tawait import('@descope/web-component');\n\treturn {\n\t\tdefault: ({ projectId, flowId, baseUrl, innerRef, tenant, theme }) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSessionToken } =\n\t\t\tReact.useContext(AuthContext);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSessionToken(sessionJwt);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[setUser, setSessionToken, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<DescopeWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\tflowId={flowId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React, { useCallback, useMemo } from 'react';\nimport { IAuth } from '../types';\nimport AuthContext from './authContext';\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nconst withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nconst useAuth = (): IAuth => {\n\tconst ctx = React.useContext(AuthContext);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use 'useAuth' in the context of <AuthProvider />`\n\t\t);\n\t}\n\tconst { user, sessionToken, sdk } = ctx;\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst me = useCallback(withValidation(sdk?.me), [sdk]);\n\n\tconst getJwtPermissions = useCallback(\n\t\twithValidation(sdk?.getJwtPermissions),\n\t\t[sdk]\n\t);\n\n\tconst getJwtRoles = useCallback(withValidation(sdk?.getJwtRoles), [sdk]);\n\n\tconst getRefreshToken = useCallback(withValidation(sdk?.getRefreshToken), [\n\t\tsdk\n\t]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tauthenticated: !!sessionToken,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tlogoutAll,\n\t\t\tlogout,\n\t\t\tme,\n\t\t\tgetJwtPermissions,\n\t\t\tgetJwtRoles,\n\t\t\t/**\n\t\t\t * Returns refresh token. Use this function when:\n\t\t\t * 1. You need to pass refresh token to another party (For example, in SSR)\n\t\t\t * 2. Descope project's configuration is set to manage token response in BODY (in contrast to manage response in COOKIES)\n\t\t\t * NOTE: Use carefully! Refresh token is sensitive token with relativity long expiration. Prefer using this function only for testing, and to manage token response in COOKIES)\n\t\t\t */\n\t\t\tgetRefreshToken\n\t\t}),\n\t\t[user, sessionToken, sdk]\n\t);\n};\n\nexport default useAuth;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n"],"names":["AuthContext","React","createContext","undefined","AuthProvider","projectId","baseUrl","children","user","setUser","useState","sessionToken","setSessionToken","sdk","useMemo","createSdk","hooks","beforeRequest","config","conf","headers","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","Promise","resolve","then","_interopNamespace","require","default","flowId","innerRef","tenant","theme","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","useCallback","e","detail","sessionJwt","ele","addEventListener","removeEventListener","Suspense","fallback","withValidation","fn","args","Error","props","ctx","logoutAll","logout","me","getJwtPermissions","getJwtRoles","getRefreshToken","authenticated"],"mappings":"qfAGA,MAAMA,EAAcC,EAAAA,QAAMC,mBAA4BC,GCahDC,EAAuC,EAC5CC,YACAC,UACAC,eAEA,MAAOC,EAAMC,GAAWC,EAAQA,SAAC,CAAE,IAC5BC,EAAcC,GAAmBF,EAAQA,SAAC,IAE3CG,EAAMC,EAAAA,SAAQ,KACnB,GAAKT,EAGL,OAAOU,UAAU,CAChBV,YACAC,UACAU,MAAO,CACNC,cAAgBC,IACf,MAAMC,EAAOD,EAMb,OALAC,EAAKC,QAAU,IACXD,EAAKC,QACR,qBAAsB,QACtB,wBAAyB,mBAEnBD,CAAI,IAGZ,GACA,CAACd,EAAWC,IAEfe,EAAAA,WAAU,KACT,IAAKR,EACJ,OAGD,MAAMS,EAA0BT,EAAIU,qBAAqBX,GACnDY,EAAkBX,EAAIY,aAAahB,GACzC,MAAO,KACNa,MACAE,KAAmB,CACnB,GACC,CAACX,IAEJ,MAAMa,EAAQZ,EAAAA,SACb,KAAO,CACND,MACAR,YACAC,UACAE,OACAG,eACAF,UACAG,qBAED,CAACD,EAAcH,EAAMH,EAAWC,IAEjC,OAAOL,EAAA,QAAA0B,cAAC3B,EAAY4B,SAAQ,CAACF,MAAOA,GAAQnB,EAAgC,EAG7EH,EAAayB,aAAe,CAC3BvB,QAAS,GACTC,cAAUJ,GC/DX,MAAM2B,EAAYC,EAAIA,MAACC,gBAChBC,QAAAC,UAAAC,MAAA,WAAA,OAAAC,EAAAC,QAAO,0BAAwB,IAC9B,CACNC,QAAS,EAAGjC,YAAWkC,SAAQjC,UAASkC,WAAUC,SAAQC,WACzDzC,UACa0B,cAAA,aAAA,CAAA,aAAAtB,YACHkC,EAAM,WACLjC,EACVqC,IAAKH,EACLC,OAAQA,EACRC,MAAOA,QAMLE,EAAU3C,EAAK,QAAC4C,YACrB,EAAGN,SAAQO,YAAWC,UAASN,SAAQC,SAASC,KAC/C,MAAOH,EAAUQ,GAAetC,EAAQA,SAAC,MAEzCuC,sBAAoBN,GAAK,IAAMH,IAE/B,MAAMnC,UAAEA,EAASC,QAAEA,EAAOG,QAAEA,EAAOG,gBAAEA,GACpCX,EAAK,QAACiD,WAAWlD,GAEZmD,EAAgBC,eACpBC,IACA5C,EAAQ4C,EAAEC,QAAQ9C,MAClB,MAAM+C,EAAaF,EAAEC,QAAQC,WAC7B3C,EAAgB2C,GACZT,GACHA,EAAUO,EACV,GAEF,CAAC5C,EAASG,EAAiBkC,IAe5B,OAZAzB,EAAAA,WAAU,KACT,MAAMmC,EAAMhB,EAIZ,OAHAgB,GAAKC,iBAAiB,UAAWN,GAC7BJ,GAASS,GAAKC,iBAAiB,QAASV,GAErC,KACFA,GAASS,GAAKE,oBAAoB,QAASX,GAE/CS,GAAKE,oBAAoB,UAAWP,EAAc,CAClD,GACC,CAACX,EAAUO,EAASI,IAGtBlD,EAAC,QAAA0B,cAAAgC,EAAQA,SAAC,CAAAC,SAAU,MACnB3D,EAAA,QAAA0B,cAACG,EAAS,CACTzB,UAAWA,EACXkC,OAAQA,EACRjC,QAASA,EACTkC,SAAUQ,EACVP,OAAQA,EACRC,MAAOA,IAGR,IAIJE,EAAQf,aAAe,CACtBkB,aAAS5C,EACT2C,eAAW3C,SCrEN0D,EACqBC,GAC1B,IAAIC,KACH,IAAKD,EACJ,MAAME,MACL,0HAGF,OAAOF,KAAMC,EAAK,8DCbOE,GAC1BhE,wBAAC2C,EAAO,IAAKqB,EAAO1B,OAAO,+BAGD0B,GAC1BhE,wBAAC2C,EAAO,IAAKqB,EAAO1B,OAAO,mCAGG0B,GAC9BhE,EAAAA,sBAAC2C,EAAO,IAAKqB,EAAO1B,OAAO,kCDOZ,KACf,MAAM2B,EAAMjE,EAAAA,QAAMiD,WAAWlD,GAC7B,IAAKkE,EACJ,MAAMF,MACL,iEAGF,MAAMxD,KAAEA,EAAIG,aAAEA,EAAYE,IAAEA,GAAQqD,EAE9BC,EAAYf,EAAWA,YAACS,EAAehD,GAAKsD,WAAY,CAACtD,IAEzDuD,EAAShB,EAAWA,YAACS,EAAehD,GAAKuD,QAAS,CAACvD,IAEnDwD,EAAKjB,EAAWA,YAACS,EAAehD,GAAKwD,IAAK,CAACxD,IAE3CyD,EAAoBlB,EAAWA,YACpCS,EAAehD,GAAKyD,mBACpB,CAACzD,IAGI0D,EAAcnB,EAAWA,YAACS,EAAehD,GAAK0D,aAAc,CAAC1D,IAE7D2D,EAAkBpB,EAAWA,YAACS,EAAehD,GAAK2D,iBAAkB,CACzE3D,IAGD,OAAOC,EAAOA,SACb,KAAO,CACN2D,gBAAiB9D,EACjBH,OACAG,eACAwD,YACAC,SACAC,KACAC,oBACAC,cAOAC,qBAED,CAAChE,EAAMG,EAAcE,GACrB"}
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../src/lib/sdk.ts","../../src/lib/hooks/authContext.ts","../../src/lib/components/AuthProvider.tsx","../../src/lib/components/Descope.tsx","../../src/lib/hooks/useAuth.ts","../../src/lib/components/DefaultFlows.tsx"],"sourcesContent":["import createSdk from '@descope/web-js-sdk';\n\nlet sdkInstance;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\n\nexport default createSdkWrapper;\n","import React from 'react';\nimport { IAuthContext } from '../types';\n\nconst AuthContext = React.createContext<IAuthContext>(undefined);\n\nexport default AuthContext;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport createSdk from '../sdk';\nimport AuthContext from '../hooks/authContext';\nimport { IAuthContext } from '../types';\n\ndeclare const BUILD_VERSION: string;\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState({});\n\tconst [sessionToken, setSessionToken] = useState('');\n\n\tconst sdk = useMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\thooks: {\n\t\t\t\tbeforeRequest: (config) => {\n\t\t\t\t\tconst conf = config;\n\t\t\t\t\tconf.headers = {\n\t\t\t\t\t\t...conf.headers,\n\t\t\t\t\t\t'x-descope-sdk-name': 'react',\n\t\t\t\t\t\t'x-descope-sdk-version': BUILD_VERSION\n\t\t\t\t\t};\n\t\t\t\t\treturn conf;\n\t\t\t\t}\n\t\t\t},\n\t\t\tpersistToken: true,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl]);\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSessionToken);\n\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\t\t// we are calling refresh once after creating the SDK instance\n\t\t// so if refresh token exists, the user will be logged in automatically\n\t\tsdk.refresh();\n\t\treturn () => {\n\t\t\tunsubscribeSessionToken?.();\n\t\t\tunsubscribeUser?.();\n\t\t};\n\t}, [sdk]);\n\n\tconst value = useMemo<IAuthContext>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tsetUser,\n\t\t\tsetSessionToken\n\t\t}),\n\t\t[sessionToken, user, projectId, baseUrl]\n\t);\n\treturn <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { DescopeProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tawait import('@descope/web-component');\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSessionToken, sdk } =\n\t\t\tReact.useContext(AuthContext);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSessionToken(sessionJwt);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t},\n\t\t\t[setUser, setSessionToken, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<DescopeWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\tflowId={flowId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React, { useCallback, useMemo } from 'react';\nimport { IAuth } from '../types';\nimport AuthContext from './authContext';\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nconst withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nconst useAuth = (): IAuth => {\n\tconst ctx = React.useContext(AuthContext);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use 'useAuth' in the context of <AuthProvider />`\n\t\t);\n\t}\n\tconst { user, sessionToken, sdk } = ctx;\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst me = useCallback(withValidation(sdk?.me), [sdk]);\n\n\tconst getJwtPermissions = useCallback(\n\t\twithValidation(sdk?.getJwtPermissions),\n\t\t[sdk]\n\t);\n\n\tconst getJwtRoles = useCallback(withValidation(sdk?.getJwtRoles), [sdk]);\n\n\tconst getRefreshToken = useCallback(withValidation(sdk?.getRefreshToken), [\n\t\tsdk\n\t]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tauthenticated: !!sessionToken,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tlogoutAll,\n\t\t\tlogout,\n\t\t\tme,\n\t\t\tgetJwtPermissions,\n\t\t\tgetJwtRoles,\n\t\t\t/**\n\t\t\t * Returns refresh token. Use this function when:\n\t\t\t * 1. You need to pass refresh token to another party (For example, in SSR)\n\t\t\t * 2. Descope project's configuration is set to manage token response in BODY (in contrast to manage response in COOKIES)\n\t\t\t * NOTE: Use carefully! Refresh token is sensitive token with relativity long expiration. Prefer using this function only for testing, and to manage token response in COOKIES)\n\t\t\t */\n\t\t\tgetRefreshToken\n\t\t}),\n\t\t[user, sessionToken, sdk]\n\t);\n};\n\nexport default useAuth;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n"],"names":["sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","AuthContext","React","createContext","undefined","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","sessionToken","setSessionToken","useMemo","hooks","beforeRequest","conf","headers","persistToken","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","refresh","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","Promise","resolve","then","_interopNamespace","require","default","flowId","innerRef","tenant","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","useCallback","e","detail","sessionJwt","httpClient","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","withValidation","fn","args","Error","props","getSessionToken","ctx","logoutAll","logout","me","getJwtPermissions","getJwtRoles","getRefreshToken","authenticated"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,15 +1,490 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
2
|
import React, { FC, DOMAttributes } from 'react';
|
|
3
3
|
import DescopeWc from '@descope/web-component';
|
|
4
|
-
import
|
|
4
|
+
import * as _descope_core_js_sdk from '@descope/core-js-sdk';
|
|
5
5
|
|
|
6
6
|
interface IAuthProviderProps {
|
|
7
7
|
projectId: string;
|
|
8
8
|
baseUrl?: string;
|
|
9
|
+
sessionTokenViaCookie?: boolean;
|
|
9
10
|
children?: JSX.Element;
|
|
10
11
|
}
|
|
11
12
|
declare const AuthProvider: FC<IAuthProviderProps>;
|
|
12
13
|
|
|
14
|
+
declare const createSdkWrapper: <P extends Omit<{
|
|
15
|
+
projectId: string;
|
|
16
|
+
logger?: {
|
|
17
|
+
debug: {
|
|
18
|
+
(...data: any[]): void;
|
|
19
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
20
|
+
};
|
|
21
|
+
log: {
|
|
22
|
+
(...data: any[]): void;
|
|
23
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
24
|
+
};
|
|
25
|
+
error: {
|
|
26
|
+
(...data: any[]): void;
|
|
27
|
+
(message?: any, ...optionalParams: any[]): void;
|
|
28
|
+
};
|
|
29
|
+
};
|
|
30
|
+
baseUrl?: string;
|
|
31
|
+
hooks?: {
|
|
32
|
+
beforeRequest?: (config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig;
|
|
33
|
+
afterRequest?: (req: _descope_core_js_sdk.RequestConfig, res: Response) => void;
|
|
34
|
+
};
|
|
35
|
+
cookiePolicy?: RequestCredentials;
|
|
36
|
+
}, "hooks"> & {
|
|
37
|
+
hooks?: {
|
|
38
|
+
beforeRequest?: ((config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig) | ((config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig)[];
|
|
39
|
+
afterRequest?: ((req: _descope_core_js_sdk.RequestConfig, res: Response) => void) | ((req: _descope_core_js_sdk.RequestConfig, res: Response) => void)[];
|
|
40
|
+
};
|
|
41
|
+
} & {
|
|
42
|
+
fpKey?: string;
|
|
43
|
+
fpLoad?: boolean;
|
|
44
|
+
} & {
|
|
45
|
+
autoRefresh?: boolean;
|
|
46
|
+
} & {
|
|
47
|
+
persistTokens?: boolean;
|
|
48
|
+
sessionTokenViaCookie?: boolean;
|
|
49
|
+
}>(config: P) => (({
|
|
50
|
+
flow: {
|
|
51
|
+
start: (flowId: string, options?: {
|
|
52
|
+
tenant?: string;
|
|
53
|
+
}, interactionId?: string, input?: Record<string, FormDataEntryValue>) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.FlowResponse>>;
|
|
54
|
+
next: (executionId: string, stepId: string, interactionId: string, input?: Record<string, FormDataEntryValue>) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.FlowResponse>>;
|
|
55
|
+
};
|
|
56
|
+
webauthn: {
|
|
57
|
+
signUp(identifier: string, name: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
58
|
+
signIn(identifier: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
59
|
+
signUpOrIn(identifier: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
60
|
+
update(identifier: string, token: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>;
|
|
61
|
+
helpers: {
|
|
62
|
+
create: (options: string) => Promise<string>;
|
|
63
|
+
get: (options: string) => Promise<string>;
|
|
64
|
+
isSupported: (requirePlatformAuthenticator?: boolean) => Promise<boolean>;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
accessKey: {
|
|
68
|
+
exchange: (accessKey: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ExchangeAccessKeyResponse>>;
|
|
69
|
+
};
|
|
70
|
+
otp: {
|
|
71
|
+
verify: {
|
|
72
|
+
email: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
73
|
+
sms: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
74
|
+
whatsapp: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
75
|
+
};
|
|
76
|
+
signIn: {
|
|
77
|
+
email: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
78
|
+
sms: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
79
|
+
whatsapp: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
80
|
+
};
|
|
81
|
+
signUp: {
|
|
82
|
+
email: (identifier: string, user?: {
|
|
83
|
+
email?: string;
|
|
84
|
+
name?: string;
|
|
85
|
+
phone?: string;
|
|
86
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
87
|
+
sms: (identifier: string, user?: {
|
|
88
|
+
email?: string;
|
|
89
|
+
name?: string;
|
|
90
|
+
phone?: string;
|
|
91
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
92
|
+
whatsapp: (identifier: string, user?: {
|
|
93
|
+
email?: string;
|
|
94
|
+
name?: string;
|
|
95
|
+
phone?: string;
|
|
96
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
97
|
+
};
|
|
98
|
+
signUpOrIn: {
|
|
99
|
+
email: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
100
|
+
sms: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
101
|
+
whatsapp: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
102
|
+
};
|
|
103
|
+
update: {
|
|
104
|
+
email: (identifier: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
105
|
+
phone: {
|
|
106
|
+
email: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
107
|
+
sms: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
108
|
+
whatsapp: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
magicLink: {
|
|
113
|
+
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
114
|
+
signIn: {
|
|
115
|
+
email: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
116
|
+
sms: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
117
|
+
whatsapp: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
118
|
+
};
|
|
119
|
+
signUp: {
|
|
120
|
+
email: (identifier: string, uri: string, user?: {
|
|
121
|
+
email?: string;
|
|
122
|
+
name?: string;
|
|
123
|
+
phone?: string;
|
|
124
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
125
|
+
sms: (identifier: string, uri: string, user?: {
|
|
126
|
+
email?: string;
|
|
127
|
+
name?: string;
|
|
128
|
+
phone?: string;
|
|
129
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
130
|
+
whatsapp: (identifier: string, uri: string, user?: {
|
|
131
|
+
email?: string;
|
|
132
|
+
name?: string;
|
|
133
|
+
phone?: string;
|
|
134
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
135
|
+
};
|
|
136
|
+
signUpOrIn: {
|
|
137
|
+
email: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
138
|
+
sms: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
139
|
+
whatsapp: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
140
|
+
};
|
|
141
|
+
update: {
|
|
142
|
+
email: (identifier: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
143
|
+
phone: {
|
|
144
|
+
email: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
145
|
+
sms: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
146
|
+
whatsapp: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
147
|
+
};
|
|
148
|
+
};
|
|
149
|
+
};
|
|
150
|
+
enchantedLink: {
|
|
151
|
+
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
152
|
+
signIn: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
153
|
+
signUpOrIn: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
154
|
+
signUp: (identifier: string, uri: string, user?: {
|
|
155
|
+
email?: string;
|
|
156
|
+
name?: string;
|
|
157
|
+
phone?: string;
|
|
158
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
159
|
+
waitForSession: (pendingRef: string, config?: {
|
|
160
|
+
pollingIntervalMs: number;
|
|
161
|
+
timeoutMs: number;
|
|
162
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
163
|
+
update: {
|
|
164
|
+
email: (identifier: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
165
|
+
};
|
|
166
|
+
};
|
|
167
|
+
oauth: {
|
|
168
|
+
start: {
|
|
169
|
+
facebook: <B extends {
|
|
170
|
+
redirect: boolean;
|
|
171
|
+
}>(redirectURL?: string, config?: B) => Promise<B extends {
|
|
172
|
+
redirect: true;
|
|
173
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
174
|
+
github: <B_1 extends {
|
|
175
|
+
redirect: boolean;
|
|
176
|
+
}>(redirectURL?: string, config?: B_1) => Promise<B_1 extends {
|
|
177
|
+
redirect: true;
|
|
178
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
179
|
+
google: <B_2 extends {
|
|
180
|
+
redirect: boolean;
|
|
181
|
+
}>(redirectURL?: string, config?: B_2) => Promise<B_2 extends {
|
|
182
|
+
redirect: true;
|
|
183
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
184
|
+
microsoft: <B_3 extends {
|
|
185
|
+
redirect: boolean;
|
|
186
|
+
}>(redirectURL?: string, config?: B_3) => Promise<B_3 extends {
|
|
187
|
+
redirect: true;
|
|
188
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
189
|
+
gitlab: <B_4 extends {
|
|
190
|
+
redirect: boolean;
|
|
191
|
+
}>(redirectURL?: string, config?: B_4) => Promise<B_4 extends {
|
|
192
|
+
redirect: true;
|
|
193
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
194
|
+
apple: <B_5 extends {
|
|
195
|
+
redirect: boolean;
|
|
196
|
+
}>(redirectURL?: string, config?: B_5) => Promise<B_5 extends {
|
|
197
|
+
redirect: true;
|
|
198
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
199
|
+
};
|
|
200
|
+
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
201
|
+
};
|
|
202
|
+
saml: {
|
|
203
|
+
start: <B_1_1 extends {
|
|
204
|
+
redirect: boolean;
|
|
205
|
+
}>(tenantNameOrEmail: string, config?: B_1_1) => Promise<B_1_1 extends {
|
|
206
|
+
redirect: true;
|
|
207
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
208
|
+
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
209
|
+
};
|
|
210
|
+
totp: {
|
|
211
|
+
signUp: (identifier: string, user?: {
|
|
212
|
+
email?: string;
|
|
213
|
+
name?: string;
|
|
214
|
+
phone?: string;
|
|
215
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
216
|
+
verify: (identifier: string, code: string, loginOptions?: {
|
|
217
|
+
stepup?: boolean;
|
|
218
|
+
mfa?: boolean;
|
|
219
|
+
customClaims?: Record<string, any>;
|
|
220
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
221
|
+
update: (identifier: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
222
|
+
};
|
|
223
|
+
refresh: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
224
|
+
logout: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
225
|
+
logoutAll: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
226
|
+
me: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.UserResponse>>;
|
|
227
|
+
isJwtExpired: (token: string) => boolean;
|
|
228
|
+
getJwtPermissions: (token: string, tenant?: string) => string[];
|
|
229
|
+
getJwtRoles: (token: string, tenant?: string) => string[];
|
|
230
|
+
httpClient: {
|
|
231
|
+
get: (path: string, config?: {
|
|
232
|
+
headers?: HeadersInit;
|
|
233
|
+
queryParams?: {
|
|
234
|
+
[key: string]: string;
|
|
235
|
+
};
|
|
236
|
+
token?: string;
|
|
237
|
+
}) => Promise<Response>;
|
|
238
|
+
post: (path: string, body?: any, config?: {
|
|
239
|
+
headers?: HeadersInit;
|
|
240
|
+
queryParams?: {
|
|
241
|
+
[key: string]: string;
|
|
242
|
+
};
|
|
243
|
+
token?: string;
|
|
244
|
+
}) => Promise<Response>;
|
|
245
|
+
put: (path: string, body?: any, config?: {
|
|
246
|
+
headers?: HeadersInit;
|
|
247
|
+
queryParams?: {
|
|
248
|
+
[key: string]: string;
|
|
249
|
+
};
|
|
250
|
+
token?: string;
|
|
251
|
+
}) => Promise<Response>;
|
|
252
|
+
delete: (path: string, body?: any, config?: {
|
|
253
|
+
headers?: HeadersInit;
|
|
254
|
+
queryParams?: {
|
|
255
|
+
[key: string]: string;
|
|
256
|
+
};
|
|
257
|
+
token?: string;
|
|
258
|
+
}) => Promise<Response>;
|
|
259
|
+
hooks?: {
|
|
260
|
+
beforeRequest?: (config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig;
|
|
261
|
+
afterRequest?: (req: _descope_core_js_sdk.RequestConfig, res: Response) => void;
|
|
262
|
+
};
|
|
263
|
+
};
|
|
264
|
+
} | {
|
|
265
|
+
flow: {
|
|
266
|
+
start: (flowId: string, options?: {
|
|
267
|
+
tenant?: string;
|
|
268
|
+
}, interactionId?: string, input?: Record<string, FormDataEntryValue>) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.FlowResponse>>;
|
|
269
|
+
next: (executionId: string, stepId: string, interactionId: string, input?: Record<string, FormDataEntryValue>) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.FlowResponse>>;
|
|
270
|
+
};
|
|
271
|
+
webauthn: {
|
|
272
|
+
signUp(identifier: string, name: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
273
|
+
signIn(identifier: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
274
|
+
signUpOrIn(identifier: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
275
|
+
update(identifier: string, token: string): Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ResponseData>>;
|
|
276
|
+
helpers: {
|
|
277
|
+
create: (options: string) => Promise<string>;
|
|
278
|
+
get: (options: string) => Promise<string>;
|
|
279
|
+
isSupported: (requirePlatformAuthenticator?: boolean) => Promise<boolean>;
|
|
280
|
+
};
|
|
281
|
+
};
|
|
282
|
+
accessKey: {
|
|
283
|
+
exchange: (accessKey: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.ExchangeAccessKeyResponse>>;
|
|
284
|
+
};
|
|
285
|
+
otp: {
|
|
286
|
+
verify: {
|
|
287
|
+
email: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
288
|
+
sms: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
289
|
+
whatsapp: (identifier: string, code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
290
|
+
};
|
|
291
|
+
signIn: {
|
|
292
|
+
email: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
293
|
+
sms: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
294
|
+
whatsapp: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
295
|
+
};
|
|
296
|
+
signUp: {
|
|
297
|
+
email: (identifier: string, user?: {
|
|
298
|
+
email?: string;
|
|
299
|
+
name?: string;
|
|
300
|
+
phone?: string;
|
|
301
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
302
|
+
sms: (identifier: string, user?: {
|
|
303
|
+
email?: string;
|
|
304
|
+
name?: string;
|
|
305
|
+
phone?: string;
|
|
306
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
307
|
+
whatsapp: (identifier: string, user?: {
|
|
308
|
+
email?: string;
|
|
309
|
+
name?: string;
|
|
310
|
+
phone?: string;
|
|
311
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
312
|
+
};
|
|
313
|
+
signUpOrIn: {
|
|
314
|
+
email: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
315
|
+
sms: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
316
|
+
whatsapp: (identifier: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
317
|
+
};
|
|
318
|
+
update: {
|
|
319
|
+
email: (identifier: string, email: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
320
|
+
phone: {
|
|
321
|
+
email: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
322
|
+
sms: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
323
|
+
whatsapp: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
324
|
+
};
|
|
325
|
+
};
|
|
326
|
+
};
|
|
327
|
+
magicLink: {
|
|
328
|
+
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
329
|
+
signIn: {
|
|
330
|
+
email: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
331
|
+
sms: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
332
|
+
whatsapp: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
333
|
+
};
|
|
334
|
+
signUp: {
|
|
335
|
+
email: (identifier: string, uri: string, user?: {
|
|
336
|
+
email?: string;
|
|
337
|
+
name?: string;
|
|
338
|
+
phone?: string;
|
|
339
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
340
|
+
sms: (identifier: string, uri: string, user?: {
|
|
341
|
+
email?: string;
|
|
342
|
+
name?: string;
|
|
343
|
+
phone?: string;
|
|
344
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
345
|
+
whatsapp: (identifier: string, uri: string, user?: {
|
|
346
|
+
email?: string;
|
|
347
|
+
name?: string;
|
|
348
|
+
phone?: string;
|
|
349
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
350
|
+
};
|
|
351
|
+
signUpOrIn: {
|
|
352
|
+
email: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
353
|
+
sms: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
354
|
+
whatsapp: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
355
|
+
};
|
|
356
|
+
update: {
|
|
357
|
+
email: (identifier: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
358
|
+
phone: {
|
|
359
|
+
email: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
360
|
+
sms: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
361
|
+
whatsapp: (identifier: string, phone: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
362
|
+
};
|
|
363
|
+
};
|
|
364
|
+
};
|
|
365
|
+
enchantedLink: {
|
|
366
|
+
verify: (token: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
367
|
+
signIn: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
368
|
+
signUpOrIn: (identifier: string, uri: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
369
|
+
signUp: (identifier: string, uri: string, user?: {
|
|
370
|
+
email?: string;
|
|
371
|
+
name?: string;
|
|
372
|
+
phone?: string;
|
|
373
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
374
|
+
waitForSession: (pendingRef: string, config?: {
|
|
375
|
+
pollingIntervalMs: number;
|
|
376
|
+
timeoutMs: number;
|
|
377
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
378
|
+
update: {
|
|
379
|
+
email: (identifier: string, email: string, uri: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.EnchantedLinkResponse>>;
|
|
380
|
+
};
|
|
381
|
+
};
|
|
382
|
+
oauth: {
|
|
383
|
+
start: {
|
|
384
|
+
facebook: <B_6 extends {
|
|
385
|
+
redirect: boolean;
|
|
386
|
+
}>(redirectURL?: string, config?: B_6) => Promise<B_6 extends {
|
|
387
|
+
redirect: true;
|
|
388
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
389
|
+
github: <B_1_2 extends {
|
|
390
|
+
redirect: boolean;
|
|
391
|
+
}>(redirectURL?: string, config?: B_1_2) => Promise<B_1_2 extends {
|
|
392
|
+
redirect: true;
|
|
393
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
394
|
+
google: <B_2_1 extends {
|
|
395
|
+
redirect: boolean;
|
|
396
|
+
}>(redirectURL?: string, config?: B_2_1) => Promise<B_2_1 extends {
|
|
397
|
+
redirect: true;
|
|
398
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
399
|
+
microsoft: <B_3_1 extends {
|
|
400
|
+
redirect: boolean;
|
|
401
|
+
}>(redirectURL?: string, config?: B_3_1) => Promise<B_3_1 extends {
|
|
402
|
+
redirect: true;
|
|
403
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
404
|
+
gitlab: <B_4_1 extends {
|
|
405
|
+
redirect: boolean;
|
|
406
|
+
}>(redirectURL?: string, config?: B_4_1) => Promise<B_4_1 extends {
|
|
407
|
+
redirect: true;
|
|
408
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
409
|
+
apple: <B_5_1 extends {
|
|
410
|
+
redirect: boolean;
|
|
411
|
+
}>(redirectURL?: string, config?: B_5_1) => Promise<B_5_1 extends {
|
|
412
|
+
redirect: true;
|
|
413
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
414
|
+
};
|
|
415
|
+
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
416
|
+
};
|
|
417
|
+
saml: {
|
|
418
|
+
start: <B_1_3 extends {
|
|
419
|
+
redirect: boolean;
|
|
420
|
+
}>(tenantNameOrEmail: string, config?: B_1_3) => Promise<B_1_3 extends {
|
|
421
|
+
redirect: true;
|
|
422
|
+
} ? undefined : _descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.URLResponse>>;
|
|
423
|
+
exchange: (code: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
424
|
+
};
|
|
425
|
+
totp: {
|
|
426
|
+
signUp: (identifier: string, user?: {
|
|
427
|
+
email?: string;
|
|
428
|
+
name?: string;
|
|
429
|
+
phone?: string;
|
|
430
|
+
}) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
431
|
+
verify: (identifier: string, code: string, loginOptions?: {
|
|
432
|
+
stepup?: boolean;
|
|
433
|
+
mfa?: boolean;
|
|
434
|
+
customClaims?: Record<string, any>;
|
|
435
|
+
}, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
436
|
+
update: (identifier: string, token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.TOTPResponse>>;
|
|
437
|
+
};
|
|
438
|
+
refresh: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.JWTResponse>>;
|
|
439
|
+
logout: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
440
|
+
logoutAll: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<never>>;
|
|
441
|
+
me: (token?: string) => Promise<_descope_core_js_sdk.SdkResponse<_descope_core_js_sdk.UserResponse>>;
|
|
442
|
+
isJwtExpired: (token: string) => boolean;
|
|
443
|
+
getJwtPermissions: (token: string, tenant?: string) => string[];
|
|
444
|
+
getJwtRoles: (token: string, tenant?: string) => string[];
|
|
445
|
+
httpClient: {
|
|
446
|
+
get: (path: string, config?: {
|
|
447
|
+
headers?: HeadersInit;
|
|
448
|
+
queryParams?: {
|
|
449
|
+
[key: string]: string;
|
|
450
|
+
};
|
|
451
|
+
token?: string;
|
|
452
|
+
}) => Promise<Response>;
|
|
453
|
+
post: (path: string, body?: any, config?: {
|
|
454
|
+
headers?: HeadersInit;
|
|
455
|
+
queryParams?: {
|
|
456
|
+
[key: string]: string;
|
|
457
|
+
};
|
|
458
|
+
token?: string;
|
|
459
|
+
}) => Promise<Response>;
|
|
460
|
+
put: (path: string, body?: any, config?: {
|
|
461
|
+
headers?: HeadersInit;
|
|
462
|
+
queryParams?: {
|
|
463
|
+
[key: string]: string;
|
|
464
|
+
};
|
|
465
|
+
token?: string;
|
|
466
|
+
}) => Promise<Response>;
|
|
467
|
+
delete: (path: string, body?: any, config?: {
|
|
468
|
+
headers?: HeadersInit;
|
|
469
|
+
queryParams?: {
|
|
470
|
+
[key: string]: string;
|
|
471
|
+
};
|
|
472
|
+
token?: string;
|
|
473
|
+
}) => Promise<Response>;
|
|
474
|
+
hooks?: {
|
|
475
|
+
beforeRequest?: (config: _descope_core_js_sdk.RequestConfig) => _descope_core_js_sdk.RequestConfig;
|
|
476
|
+
afterRequest?: (req: _descope_core_js_sdk.RequestConfig, res: Response) => void;
|
|
477
|
+
};
|
|
478
|
+
};
|
|
479
|
+
}) & {
|
|
480
|
+
onSessionTokenChange: (cb: (data: string) => void) => () => any[];
|
|
481
|
+
onUserChange: (cb: (data: _descope_core_js_sdk.UserResponse) => void) => () => any[];
|
|
482
|
+
}) & {
|
|
483
|
+
getRefreshToken: () => string;
|
|
484
|
+
getSessionToken: () => string;
|
|
485
|
+
};
|
|
486
|
+
declare const getSessionToken: () => any;
|
|
487
|
+
|
|
13
488
|
declare global {
|
|
14
489
|
namespace JSX {
|
|
15
490
|
interface IntrinsicElements {
|
|
@@ -17,15 +492,15 @@ declare global {
|
|
|
17
492
|
}
|
|
18
493
|
}
|
|
19
494
|
}
|
|
20
|
-
|
|
21
|
-
|
|
495
|
+
type Sdk = ReturnType<typeof createSdkWrapper>;
|
|
496
|
+
type CustomEvents<K extends string> = {
|
|
22
497
|
[key in K]: (event: CustomEvent) => void;
|
|
23
498
|
};
|
|
24
|
-
|
|
499
|
+
type CustomElement<T, K extends string = ''> = Partial<T & DOMAttributes<T> & {
|
|
25
500
|
children: React.ReactChild;
|
|
26
501
|
ref: React.Ref<HTMLElement>;
|
|
27
502
|
} & CustomEvents<`on${K}`>>;
|
|
28
|
-
|
|
503
|
+
type DescopeCustomElement = CustomElement<DescopeWc, 'success' | 'error'>;
|
|
29
504
|
declare enum UserStatus {
|
|
30
505
|
enabled = "enabled",
|
|
31
506
|
disabled = "disabled",
|
|
@@ -60,15 +535,16 @@ interface IAuth {
|
|
|
60
535
|
getJwtPermissions: Sdk['getJwtPermissions'];
|
|
61
536
|
getRefreshToken: Sdk['getRefreshToken'];
|
|
62
537
|
}
|
|
63
|
-
|
|
538
|
+
type DescopeTheme = 'light' | 'dark';
|
|
64
539
|
interface DescopeProps {
|
|
65
540
|
flowId: string;
|
|
66
541
|
onSuccess?: DescopeCustomElement['onsuccess'];
|
|
67
542
|
onError?: DescopeCustomElement['onerror'];
|
|
68
543
|
tenant?: string;
|
|
69
544
|
theme?: DescopeTheme;
|
|
545
|
+
debug?: boolean;
|
|
70
546
|
}
|
|
71
|
-
|
|
547
|
+
type DefaultFlowProps = Omit<DescopeProps, 'flowId'>;
|
|
72
548
|
|
|
73
549
|
declare const SignInFlow: (props: DefaultFlowProps) => JSX.Element;
|
|
74
550
|
declare const SignUpFlow: (props: DefaultFlowProps) => JSX.Element;
|
|
@@ -78,4 +554,4 @@ declare const Descope: React.ForwardRefExoticComponent<DescopeProps & React.RefA
|
|
|
78
554
|
|
|
79
555
|
declare const useAuth: () => IAuth;
|
|
80
556
|
|
|
81
|
-
export { AuthProvider, Descope, SignInFlow, SignUpFlow, SignUpOrInFlow, useAuth };
|
|
557
|
+
export { AuthProvider, Descope, SignInFlow, SignUpFlow, SignUpOrInFlow, getSessionToken, useAuth };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e
|
|
1
|
+
import e,{useState as t,useMemo as o,useEffect as s,lazy as n,useImperativeHandle as r,useCallback as i,Suspense as c}from"react";import a from"@descope/web-js-sdk";let d;const l=e=>{const t=a({...e,persistTokens:!0,autoRefresh:!0});return d=t,t};d=l({projectId:"temp pid"});const u=()=>d?.getSessionToken(),f=e.createContext(void 0),p=({projectId:n,baseUrl:r,sessionTokenViaCookie:i,children:c})=>{const[a,d]=t({}),[u,p]=t(""),k=o((()=>{if(n)return l({projectId:n,baseUrl:r,sessionTokenViaCookie:i,hooks:{beforeRequest:e=>{const t=e;return t.headers={...t.headers,"x-descope-sdk-name":"react","x-descope-sdk-version":"0.0.52-alpha.25"},t}},persistToken:!0,autoRefresh:!0})}),[n,r]);s((()=>{if(!k)return;const e=k.onSessionTokenChange(p),t=k.onUserChange(d);return k.refresh(),()=>{e?.(),t?.()}}),[k]);const h=o((()=>({sdk:k,projectId:n,baseUrl:r,user:a,sessionToken:u,setUser:d,setSessionToken:p})),[u,a,n,r]);return e.createElement(f.Provider,{value:h},c)};p.defaultProps={baseUrl:"",children:void 0,sessionTokenViaCookie:!1};const k=n((async()=>(await import("@descope/web-component"),{default:({projectId:t,flowId:o,baseUrl:s,innerRef:n,tenant:r,theme:i,debug:c})=>e.createElement("descope-wc",{"project-id":t,"flow-id":o,"base-url":s,ref:n,tenant:r,theme:i,debug:c})}))),h=e.forwardRef((({flowId:o,onSuccess:n,onError:a,tenant:d,theme:l,debug:u},p)=>{const[h,m]=t(null);r(p,(()=>h));const{projectId:g,baseUrl:w,setUser:b,setSessionToken:v,sdk:E}=e.useContext(f),I=i((e=>{b(e.detail?.user);const t=e.detail?.sessionJwt;v(t),n&&n(e),E.httpClient.hooks.afterRequest({},new Response(JSON.stringify(e.detail)))}),[b,v,n]);return s((()=>{const e=h;return e?.addEventListener("success",I),a&&e?.addEventListener("error",a),()=>{a&&e?.removeEventListener("error",a),e?.removeEventListener("success",I)}}),[h,a,I]),e.createElement(c,{fallback:null},e.createElement(k,{projectId:g,flowId:o,baseUrl:w,innerRef:m,tenant:d,theme:l,debug:u}))}));h.defaultProps={onError:void 0,onSuccess:void 0};const m=t=>e.createElement(h,{...t,flowId:"sign-in"}),g=t=>e.createElement(h,{...t,flowId:"sign-up"}),w=t=>e.createElement(h,{...t,flowId:"sign-up-or-in"}),b=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)},v=()=>{const t=e.useContext(f);if(!t)throw Error("You can only use 'useAuth' in the context of <AuthProvider />");const{user:s,sessionToken:n,sdk:r}=t,c=i(b(r?.logoutAll),[r]),a=i(b(r?.logout),[r]),d=i(b(r?.me),[r]),l=i(b(r?.getJwtPermissions),[r]),u=i(b(r?.getJwtRoles),[r]),p=i(b(r?.getRefreshToken),[r]);return o((()=>({authenticated:!!n,user:s,sessionToken:n,logoutAll:c,logout:a,me:d,getJwtPermissions:l,getJwtRoles:u,getRefreshToken:p})),[s,n,r])};export{p as AuthProvider,h as Descope,m as SignInFlow,g as SignUpFlow,w as SignUpOrInFlow,u as getSessionToken,v as useAuth};
|
|
2
2
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/lib/hooks/authContext.ts","../src/lib/components/AuthProvider.tsx","../src/lib/components/Descope.tsx","../src/lib/components/DefaultFlows.tsx","../src/lib/hooks/useAuth.ts"],"sourcesContent":["import React from 'react';\nimport { IAuthContext } from '../types';\n\nconst AuthContext = React.createContext<IAuthContext>(undefined);\n\nexport default AuthContext;\n","// '@descope/web-js-sdk' is a dependency of '@descope/web-component'\n// and we want to use the same version that is used there\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport createSdk from '@descope/web-js-sdk';\nimport React, { FC, useEffect, useMemo, useState } from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { IAuthContext } from '../types';\n\ndeclare const BUILD_VERSION: string;\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState({});\n\tconst [sessionToken, setSessionToken] = useState('');\n\n\tconst sdk = useMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\thooks: {\n\t\t\t\tbeforeRequest: (config) => {\n\t\t\t\t\tconst conf = config;\n\t\t\t\t\tconf.headers = {\n\t\t\t\t\t\t...conf.headers,\n\t\t\t\t\t\t'x-descope-sdk-name': 'react',\n\t\t\t\t\t\t'x-descope-sdk-version': BUILD_VERSION\n\t\t\t\t\t};\n\t\t\t\t\treturn conf;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}, [projectId, baseUrl]);\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSessionToken);\n\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\t\treturn () => {\n\t\t\tunsubscribeSessionToken?.();\n\t\t\tunsubscribeUser?.();\n\t\t};\n\t}, [sdk]);\n\n\tconst value = useMemo<IAuthContext>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tsetUser,\n\t\t\tsetSessionToken\n\t\t}),\n\t\t[sessionToken, user, projectId, baseUrl]\n\t);\n\treturn <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { DescopeProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tawait import('@descope/web-component');\n\treturn {\n\t\tdefault: ({ projectId, flowId, baseUrl, innerRef, tenant, theme }) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSessionToken } =\n\t\t\tReact.useContext(AuthContext);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSessionToken(sessionJwt);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t},\n\t\t\t[setUser, setSessionToken, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<DescopeWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\tflowId={flowId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import React, { useCallback, useMemo } from 'react';\nimport { IAuth } from '../types';\nimport AuthContext from './authContext';\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nconst withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nconst useAuth = (): IAuth => {\n\tconst ctx = React.useContext(AuthContext);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use 'useAuth' in the context of <AuthProvider />`\n\t\t);\n\t}\n\tconst { user, sessionToken, sdk } = ctx;\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst me = useCallback(withValidation(sdk?.me), [sdk]);\n\n\tconst getJwtPermissions = useCallback(\n\t\twithValidation(sdk?.getJwtPermissions),\n\t\t[sdk]\n\t);\n\n\tconst getJwtRoles = useCallback(withValidation(sdk?.getJwtRoles), [sdk]);\n\n\tconst getRefreshToken = useCallback(withValidation(sdk?.getRefreshToken), [\n\t\tsdk\n\t]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tauthenticated: !!sessionToken,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tlogoutAll,\n\t\t\tlogout,\n\t\t\tme,\n\t\t\tgetJwtPermissions,\n\t\t\tgetJwtRoles,\n\t\t\t/**\n\t\t\t * Returns refresh token. Use this function when:\n\t\t\t * 1. You need to pass refresh token to another party (For example, in SSR)\n\t\t\t * 2. Descope project's configuration is set to manage token response in BODY (in contrast to manage response in COOKIES)\n\t\t\t * NOTE: Use carefully! Refresh token is sensitive token with relativity long expiration. Prefer using this function only for testing, and to manage token response in COOKIES)\n\t\t\t */\n\t\t\tgetRefreshToken\n\t\t}),\n\t\t[user, sessionToken, sdk]\n\t);\n};\n\nexport default useAuth;\n"],"names":["AuthContext","React","createContext","undefined","AuthProvider","projectId","baseUrl","children","user","setUser","useState","sessionToken","setSessionToken","sdk","useMemo","createSdk","hooks","beforeRequest","config","conf","headers","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","import","default","flowId","innerRef","tenant","theme","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","useCallback","e","detail","sessionJwt","ele","addEventListener","removeEventListener","Suspense","fallback","SignInFlow","props","SignUpFlow","SignUpOrInFlow","withValidation","fn","args","Error","useAuth","ctx","logoutAll","logout","me","getJwtPermissions","getJwtRoles","getRefreshToken","authenticated"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/lib/sdk.ts","../src/lib/hooks/authContext.ts","../src/lib/components/AuthProvider.tsx","../src/lib/components/Descope.tsx","../src/lib/components/DefaultFlows.tsx","../src/lib/hooks/useAuth.ts"],"sourcesContent":["import createSdk from '@descope/web-js-sdk';\n\nlet sdkInstance;\n\nconst createSdkWrapper = <P extends Parameters<typeof createSdk>[0]>(\n\tconfig: P\n) => {\n\tconst sdk = createSdk({\n\t\t...config,\n\t\tpersistTokens: true,\n\t\tautoRefresh: true\n\t});\n\tsdkInstance = sdk;\n\n\treturn sdk;\n};\n\n/**\n * We want to make sure the getSessionToken fn is used only when persistTokens is on\n *\n * So we are keeping the SDK init in a single place,\n * and we are creating a temp instance in order to export the getSessionToken\n * even before the SDK was init\n */\nsdkInstance = createSdkWrapper({ projectId: 'temp pid' });\n\nexport const getSessionToken = () => sdkInstance?.getSessionToken();\n\nexport default createSdkWrapper;\n","import React from 'react';\nimport { IAuthContext } from '../types';\n\nconst AuthContext = React.createContext<IAuthContext>(undefined);\n\nexport default AuthContext;\n","import React, { FC, useEffect, useMemo, useState } from 'react';\nimport createSdk from '../sdk';\nimport AuthContext from '../hooks/authContext';\nimport { IAuthContext } from '../types';\n\ndeclare const BUILD_VERSION: string;\n\ninterface IAuthProviderProps {\n\tprojectId: string;\n\tbaseUrl?: string;\n\t// If true, session token (jwt) will be stored on cookie. Otherwise, the session token will be\n\t// stored on local storage and can accessed with getSessionToken function\n\t// Use this option if session token will stay small (less than 1k)\n\t// NOTE: Session token can grow, especially in cases of using authorization, or adding custom claims\n\tsessionTokenViaCookie?: boolean;\n\tchildren?: JSX.Element;\n}\n\nconst AuthProvider: FC<IAuthProviderProps> = ({\n\tprojectId,\n\tbaseUrl,\n\tsessionTokenViaCookie,\n\tchildren\n}) => {\n\tconst [user, setUser] = useState({});\n\tconst [sessionToken, setSessionToken] = useState('');\n\n\tconst sdk = useMemo(() => {\n\t\tif (!projectId) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn createSdk({\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tsessionTokenViaCookie,\n\t\t\thooks: {\n\t\t\t\tbeforeRequest: (config) => {\n\t\t\t\t\tconst conf = config;\n\t\t\t\t\tconf.headers = {\n\t\t\t\t\t\t...conf.headers,\n\t\t\t\t\t\t'x-descope-sdk-name': 'react',\n\t\t\t\t\t\t'x-descope-sdk-version': BUILD_VERSION\n\t\t\t\t\t};\n\t\t\t\t\treturn conf;\n\t\t\t\t}\n\t\t\t},\n\t\t\tpersistToken: true,\n\t\t\tautoRefresh: true\n\t\t});\n\t}, [projectId, baseUrl]);\n\n\tuseEffect(() => {\n\t\tif (!sdk) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst unsubscribeSessionToken = sdk.onSessionTokenChange(setSessionToken);\n\t\tconst unsubscribeUser = sdk.onUserChange(setUser);\n\t\t// we are calling refresh once after creating the SDK instance\n\t\t// so if refresh token exists, the user will be logged in automatically\n\t\tsdk.refresh();\n\t\treturn () => {\n\t\t\tunsubscribeSessionToken?.();\n\t\t\tunsubscribeUser?.();\n\t\t};\n\t}, [sdk]);\n\n\tconst value = useMemo<IAuthContext>(\n\t\t() => ({\n\t\t\tsdk,\n\t\t\tprojectId,\n\t\t\tbaseUrl,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tsetUser,\n\t\t\tsetSessionToken\n\t\t}),\n\t\t[sessionToken, user, projectId, baseUrl]\n\t);\n\treturn <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n};\n\nAuthProvider.defaultProps = {\n\tbaseUrl: '',\n\tchildren: undefined,\n\tsessionTokenViaCookie: false\n};\n\nexport default AuthProvider;\n","import React, {\n\tlazy,\n\tSuspense,\n\tuseCallback,\n\tuseEffect,\n\tuseImperativeHandle,\n\tuseState\n} from 'react';\nimport AuthContext from '../hooks/authContext';\nimport { DescopeProps } from '../types';\n\n// web-component code uses browser API, but can be used in SSR apps, hence the lazy loading\nconst DescopeWC = lazy(async () => {\n\tawait import('@descope/web-component');\n\treturn {\n\t\tdefault: ({\n\t\t\tprojectId,\n\t\t\tflowId,\n\t\t\tbaseUrl,\n\t\t\tinnerRef,\n\t\t\ttenant,\n\t\t\ttheme,\n\t\t\tdebug\n\t\t}) => (\n\t\t\t<descope-wc\n\t\t\t\tproject-id={projectId}\n\t\t\t\tflow-id={flowId}\n\t\t\t\tbase-url={baseUrl}\n\t\t\t\tref={innerRef}\n\t\t\t\ttenant={tenant}\n\t\t\t\ttheme={theme}\n\t\t\t\tdebug={debug}\n\t\t\t/>\n\t\t)\n\t};\n});\n\nconst Descope = React.forwardRef<HTMLElement, DescopeProps>(\n\t({ flowId, onSuccess, onError, tenant, theme, debug }, ref) => {\n\t\tconst [innerRef, setInnerRef] = useState(null);\n\n\t\tuseImperativeHandle(ref, () => innerRef);\n\n\t\tconst { projectId, baseUrl, setUser, setSessionToken, sdk } =\n\t\t\tReact.useContext(AuthContext);\n\n\t\tconst handleSuccess = useCallback(\n\t\t\t(e: CustomEvent) => {\n\t\t\t\tsetUser(e.detail?.user);\n\t\t\t\tconst sessionJwt = e.detail?.sessionJwt;\n\t\t\t\tsetSessionToken(sessionJwt);\n\t\t\t\tif (onSuccess) {\n\t\t\t\t\tonSuccess(e);\n\t\t\t\t}\n\t\t\t\t// In order to make sure all the after-hooks are running with the success response\n\t\t\t\t// we are generating a fake response with the success data and calling the http client after hook fn with it\n\t\t\t\tsdk.httpClient.hooks.afterRequest(\n\t\t\t\t\t{} as any,\n\t\t\t\t\tnew Response(JSON.stringify(e.detail))\n\t\t\t\t);\n\t\t\t},\n\t\t\t[setUser, setSessionToken, onSuccess]\n\t\t);\n\n\t\tuseEffect(() => {\n\t\t\tconst ele = innerRef;\n\t\t\tele?.addEventListener('success', handleSuccess);\n\t\t\tif (onError) ele?.addEventListener('error', onError);\n\n\t\t\treturn () => {\n\t\t\t\tif (onError) ele?.removeEventListener('error', onError);\n\n\t\t\t\tele?.removeEventListener('success', handleSuccess);\n\t\t\t};\n\t\t}, [innerRef, onError, handleSuccess]);\n\n\t\treturn (\n\t\t\t<Suspense fallback={null}>\n\t\t\t\t<DescopeWC\n\t\t\t\t\tprojectId={projectId}\n\t\t\t\t\tflowId={flowId}\n\t\t\t\t\tbaseUrl={baseUrl}\n\t\t\t\t\tinnerRef={setInnerRef}\n\t\t\t\t\ttenant={tenant}\n\t\t\t\t\ttheme={theme}\n\t\t\t\t\tdebug={debug}\n\t\t\t\t/>\n\t\t\t</Suspense>\n\t\t);\n\t}\n);\n\nDescope.defaultProps = {\n\tonError: undefined,\n\tonSuccess: undefined\n};\n\nexport default Descope;\n","import React from 'react';\nimport { DefaultFlowProps } from '../types';\nimport Descope from './Descope';\n\nexport const SignInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-in\" />\n);\n\nexport const SignUpFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up\" />\n);\n\nexport const SignUpOrInFlow = (props: DefaultFlowProps) => (\n\t<Descope {...props} flowId=\"sign-up-or-in\" />\n);\n","import React, { useCallback, useMemo } from 'react';\nimport { IAuth } from '../types';\nimport AuthContext from './authContext';\n\n/**\n * Wrap a function with a validation that it exists\n * @param fn The function to wrap with the validation\n * @throws if function does not exist, an error with the relevant message will be thrown\n */\nconst withValidation =\n\t<T extends Array<any>, U>(fn: (...args: T) => U) =>\n\t(...args: T): U => {\n\t\tif (!fn) {\n\t\t\tthrow Error(\n\t\t\t\t`You can only use this function after sdk initialization. Make sure to supply 'projectId' to <AuthProvider /> component`\n\t\t\t);\n\t\t}\n\t\treturn fn(...args);\n\t};\n\nconst useAuth = (): IAuth => {\n\tconst ctx = React.useContext(AuthContext);\n\tif (!ctx) {\n\t\tthrow Error(\n\t\t\t`You can only use 'useAuth' in the context of <AuthProvider />`\n\t\t);\n\t}\n\tconst { user, sessionToken, sdk } = ctx;\n\n\tconst logoutAll = useCallback(withValidation(sdk?.logoutAll), [sdk]);\n\n\tconst logout = useCallback(withValidation(sdk?.logout), [sdk]);\n\n\tconst me = useCallback(withValidation(sdk?.me), [sdk]);\n\n\tconst getJwtPermissions = useCallback(\n\t\twithValidation(sdk?.getJwtPermissions),\n\t\t[sdk]\n\t);\n\n\tconst getJwtRoles = useCallback(withValidation(sdk?.getJwtRoles), [sdk]);\n\n\tconst getRefreshToken = useCallback(withValidation(sdk?.getRefreshToken), [\n\t\tsdk\n\t]);\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\tauthenticated: !!sessionToken,\n\t\t\tuser,\n\t\t\tsessionToken,\n\t\t\tlogoutAll,\n\t\t\tlogout,\n\t\t\tme,\n\t\t\tgetJwtPermissions,\n\t\t\tgetJwtRoles,\n\t\t\t/**\n\t\t\t * Returns refresh token. Use this function when:\n\t\t\t * 1. You need to pass refresh token to another party (For example, in SSR)\n\t\t\t * 2. Descope project's configuration is set to manage token response in BODY (in contrast to manage response in COOKIES)\n\t\t\t * NOTE: Use carefully! Refresh token is sensitive token with relativity long expiration. Prefer using this function only for testing, and to manage token response in COOKIES)\n\t\t\t */\n\t\t\tgetRefreshToken\n\t\t}),\n\t\t[user, sessionToken, sdk]\n\t);\n};\n\nexport default useAuth;\n"],"names":["sdkInstance","createSdkWrapper","config","sdk","createSdk","persistTokens","autoRefresh","projectId","getSessionToken","AuthContext","React","createContext","undefined","AuthProvider","baseUrl","sessionTokenViaCookie","children","user","setUser","useState","sessionToken","setSessionToken","useMemo","hooks","beforeRequest","conf","headers","persistToken","useEffect","unsubscribeSessionToken","onSessionTokenChange","unsubscribeUser","onUserChange","refresh","value","createElement","Provider","defaultProps","DescopeWC","lazy","async","import","default","flowId","innerRef","tenant","theme","debug","ref","Descope","forwardRef","onSuccess","onError","setInnerRef","useImperativeHandle","useContext","handleSuccess","useCallback","e","detail","sessionJwt","httpClient","afterRequest","Response","JSON","stringify","ele","addEventListener","removeEventListener","Suspense","fallback","SignInFlow","props","SignUpFlow","SignUpOrInFlow","withValidation","fn","args","Error","useAuth","ctx","logoutAll","logout","me","getJwtPermissions","getJwtRoles","getRefreshToken","authenticated"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descope/react-sdk",
|
|
3
|
-
"version": "0.0.52-alpha.
|
|
3
|
+
"version": "0.0.52-alpha.25",
|
|
4
4
|
"main": "dist/cjs/index.cjs.js",
|
|
5
5
|
"module": "dist/index.esm.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -19,11 +19,11 @@
|
|
|
19
19
|
"dist"
|
|
20
20
|
],
|
|
21
21
|
"dependencies": {
|
|
22
|
-
"@descope/web-component": "0.1.0-alpha.
|
|
23
|
-
"react-router-dom": "6.
|
|
22
|
+
"@descope/web-component": "0.1.0-alpha.24",
|
|
23
|
+
"react-router-dom": "6.5.0"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@babel/core": "7.20.
|
|
26
|
+
"@babel/core": "7.20.5",
|
|
27
27
|
"@babel/preset-env": "7.20.2",
|
|
28
28
|
"@babel/preset-react": "7.18.6",
|
|
29
29
|
"@babel/preset-typescript": "7.18.6",
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
"@testing-library/react": "13.4.0",
|
|
37
37
|
"@testing-library/user-event": "14.4.3",
|
|
38
38
|
"@types/jest": "^27.0.2",
|
|
39
|
-
"@types/react": "18.0.
|
|
39
|
+
"@types/react": "18.0.26",
|
|
40
40
|
"@types/react-dom": "18.0.9",
|
|
41
41
|
"@types/react-router-dom": "^5.3.3",
|
|
42
42
|
"babel-jest": "27.5.1",
|
|
43
|
-
"eslint": "8.
|
|
43
|
+
"eslint": "8.30.0",
|
|
44
44
|
"eslint-config-airbnb": "19.0.4",
|
|
45
45
|
"eslint-config-airbnb-typescript": "17.0.0",
|
|
46
46
|
"eslint-config-prettier": "8.5.0",
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
"eslint-plugin-jest-dom": "4.0.3",
|
|
52
52
|
"eslint-plugin-jest-formatting": "3.1.0",
|
|
53
53
|
"eslint-plugin-jsx-a11y": "6.6.1",
|
|
54
|
-
"eslint-plugin-n": "15.
|
|
54
|
+
"eslint-plugin-n": "15.6.0",
|
|
55
55
|
"eslint-plugin-no-only-tests": "2.6.0",
|
|
56
56
|
"eslint-plugin-prefer-arrow": "1.2.3",
|
|
57
57
|
"eslint-plugin-prettier": "4.2.1",
|
|
@@ -81,7 +81,8 @@
|
|
|
81
81
|
},
|
|
82
82
|
"peerDependencies": {
|
|
83
83
|
"@types/react": ">=16",
|
|
84
|
-
"react": ">=16"
|
|
84
|
+
"react": ">=16",
|
|
85
|
+
"@descope/web-js-sdk": "0.1.0-alpha.17"
|
|
85
86
|
},
|
|
86
87
|
"scripts": {
|
|
87
88
|
"start": "npm run build && rollup -c rollup.config.app.js -w",
|