@descope/nextjs-sdk 0.14.27 → 0.14.29
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/dist/cjs/server/authMiddleware.js +3 -3
- package/dist/cjs/server/authMiddleware.js.map +1 -1
- package/dist/cjs/server/constants.js +1 -1
- package/dist/cjs/server/session.js +3 -3
- package/dist/cjs/server/session.js.map +1 -1
- package/dist/cjs/shared/DescopeFlows.js +40 -38
- package/dist/cjs/shared/DescopeFlows.js.map +1 -1
- package/dist/cjs/shared/DescopeWidgets.js +16 -15
- package/dist/cjs/shared/DescopeWidgets.js.map +1 -1
- package/dist/cjs/shared/constants.js +1 -1
- package/dist/esm/server/authMiddleware.js +1 -1
- package/dist/esm/server/constants.js +1 -1
- package/dist/esm/server/session.js +1 -1
- package/dist/esm/shared/DescopeFlows.js +40 -38
- package/dist/esm/shared/DescopeFlows.js.map +1 -1
- package/dist/esm/shared/DescopeWidgets.js +16 -15
- package/dist/esm/shared/DescopeWidgets.js.map +1 -1
- package/dist/esm/shared/constants.js +1 -1
- package/dist/types/shared/DescopeFlows.d.ts +19 -141
- package/dist/types/shared/DescopeWidgets.d.ts +14 -60
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var server = require('next/server');
|
|
4
4
|
var descopeSdk = require('@descope/node-sdk');
|
|
5
5
|
var constants = require('./constants.js');
|
|
6
6
|
var sdk = require('./sdk.js');
|
|
@@ -80,13 +80,13 @@ const createAuthMiddleware = (options = {}) => async (req) => {
|
|
|
80
80
|
url.search = searchParams;
|
|
81
81
|
}
|
|
82
82
|
logger.logger.debug(`Auth middleware, Redirecting to ${redirectUrl}`);
|
|
83
|
-
return
|
|
83
|
+
return server.NextResponse.redirect(url);
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
logger.logger.debug('Auth middleware finishes');
|
|
87
87
|
// add the session to the request, if it exists
|
|
88
88
|
const headers = addSessionToHeadersIfExists(req.headers, session);
|
|
89
|
-
return
|
|
89
|
+
return server.NextResponse.next({
|
|
90
90
|
request: {
|
|
91
91
|
headers
|
|
92
92
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authMiddleware.js","sources":["../../../src/server/authMiddleware.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\nimport descopeSdk from '@descope/node-sdk';\nimport type { AuthenticationInfo } from '@descope/node-sdk';\nimport { DEFAULT_PUBLIC_ROUTES, DESCOPE_SESSION_HEADER } from './constants';\nimport { getGlobalSdk } from './sdk';\nimport { mergeSearchParams } from './utils';\nimport { LogLevel } from '../types';\nimport { logger, setLogger } from './logger';\n\ntype MiddlewareOptions = {\n\t// The Descope project ID to use for authentication\n\t// Defaults to process.env.NEXT_PUBLIC_DESCOPE_PROJECT_ID\n\tprojectId?: string;\n\n\t// The base URL to use for authentication\n\t// Defaults to process.env.NEXT_PUBLIC_DESCOPE_BASE_URL\n\tbaseUrl?: string;\n\n\t// The URL to redirect to if the user is not authenticated\n\t// Defaults to process.env.SIGN_IN_ROUTE or '/sign-in' if not provided\n\t// NOTE: In case it contains query parameters that exist in the original URL, they will override the original query parameters. e.g. if the original URL is /page?param1=1¶m2=2 and the redirect URL is /sign-in?param1=3, the final redirect URL will be /sign-in?param1=3¶m2=2\n\tredirectUrl?: string;\n\n\t// An array of public routes that do not require authentication\n\t// In addition to the default public routes:\n\t// - process.env.SIGN_IN_ROUTE or /sign-in if not provided\n\t// - process.env.SIGN_UP_ROUTE or /sign-up if not provided\n\tpublicRoutes?: string[];\n\n\t// An array of private routes that require authentication\n\t// If privateRoutes is defined, routes not listed in this array will default to public routes\n\tprivateRoutes?: string[];\n\n\t// The log level to use for the middleware\n\t// Defaults to 'info'\n\tlogLevel?: LogLevel;\n\n\t// The name of the session cookie to look for the JWT\n\t// Defaults to 'DS'\n\t// Note: The middleware will also look for the JWT in the Authorization header\n\tsessionCookieName?: string;\n};\n\nconst getSessionJwt = (\n\treq: NextRequest,\n\toptions: MiddlewareOptions\n): string | undefined => {\n\tlet jwt = req.headers?.get('Authorization')?.split(' ')[1];\n\tif (jwt) {\n\t\treturn jwt;\n\t}\n\n\tjwt = req.cookies?.get(\n\t\toptions?.sessionCookieName || descopeSdk.SessionTokenCookieName\n\t)?.value;\n\tif (jwt) {\n\t\treturn jwt;\n\t}\n\treturn undefined;\n};\n\nconst matchWildcardRoute = (route: string, path: string) => {\n\tlet regexPattern = route.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n\t// Convert wildcard (*) to match path segments only\n\tregexPattern = regexPattern.replace(/\\*/g, '[^/]*');\n\tconst regex = new RegExp(`^${regexPattern}$`);\n\n\treturn regex.test(path);\n};\n\nconst isPublicRoute = (req: NextRequest, options: MiddlewareOptions) => {\n\t// Ensure publicRoutes and privateRoutes are arrays, defaulting to empty arrays if not defined\n\tconst { publicRoutes = [], privateRoutes = [] } = options;\n\tconst { pathname } = req.nextUrl;\n\n\tconst isDefaultPublicRoute = Object.values(DEFAULT_PUBLIC_ROUTES).includes(\n\t\tpathname\n\t);\n\n\tif (publicRoutes.length > 0) {\n\t\tif (privateRoutes.length > 0) {\n\t\t\tlogger.warn(\n\t\t\t\t'Both publicRoutes and privateRoutes are defined. Ignoring privateRoutes.'\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\tisDefaultPublicRoute ||\n\t\t\tpublicRoutes.some((route) => matchWildcardRoute(route, pathname))\n\t\t);\n\t}\n\n\tif (privateRoutes.length > 0) {\n\t\treturn (\n\t\t\tisDefaultPublicRoute ||\n\t\t\t!privateRoutes.some((route) => matchWildcardRoute(route, pathname))\n\t\t);\n\t}\n\n\t// If no routes are provided, all routes are private\n\treturn isDefaultPublicRoute;\n};\n\nconst addSessionToHeadersIfExists = (\n\theaders: Headers,\n\tsession: AuthenticationInfo | undefined\n): Headers => {\n\tif (session) {\n\t\tconst requestHeaders = new Headers(headers);\n\t\trequestHeaders.set(\n\t\t\tDESCOPE_SESSION_HEADER,\n\t\t\tBuffer.from(JSON.stringify(session)).toString('base64')\n\t\t);\n\t\treturn requestHeaders;\n\t}\n\treturn headers;\n};\n\n// returns a Middleware that checks if the user is authenticated\n// if the user is not authenticated, it redirects to the redirectUrl\n// if the user is authenticated, it adds the session to the headers\nconst createAuthMiddleware =\n\t(options: MiddlewareOptions = {}) =>\n\tasync (req: NextRequest) => {\n\t\tsetLogger(options.logLevel);\n\t\tlogger.debug('Auth middleware starts');\n\n\t\tconst jwt = getSessionJwt(req, options);\n\n\t\t// check if the user is authenticated\n\t\tlet session: AuthenticationInfo | undefined;\n\t\ttry {\n\t\t\tsession = await getGlobalSdk({\n\t\t\t\tprojectId: options.projectId,\n\t\t\t\tbaseUrl: options.baseUrl\n\t\t\t}).validateJwt(jwt);\n\t\t} catch (err) {\n\t\t\tlogger.debug('Auth middleware, Failed to validate JWT', err);\n\t\t\tif (!isPublicRoute(req, options)) {\n\t\t\t\tconst redirectUrl = options.redirectUrl || DEFAULT_PUBLIC_ROUTES.signIn;\n\t\t\t\tconst url = req.nextUrl.clone();\n\t\t\t\t// Create a URL object for redirectUrl. 'http://example.com' is just a placeholder.\n\t\t\t\tconst parsedRedirectUrl = new URL(redirectUrl, 'http://example.com');\n\t\t\t\turl.pathname = parsedRedirectUrl.pathname;\n\n\t\t\t\tconst searchParams = mergeSearchParams(\n\t\t\t\t\turl.search,\n\t\t\t\t\tparsedRedirectUrl.search\n\t\t\t\t);\n\t\t\t\tif (searchParams) {\n\t\t\t\t\turl.search = searchParams;\n\t\t\t\t}\n\t\t\t\tlogger.debug(`Auth middleware, Redirecting to ${redirectUrl}`);\n\t\t\t\treturn NextResponse.redirect(url);\n\t\t\t}\n\t\t}\n\n\t\tlogger.debug('Auth middleware finishes');\n\t\t// add the session to the request, if it exists\n\t\tconst headers = addSessionToHeadersIfExists(req.headers, session);\n\t\treturn NextResponse.next({\n\t\t\trequest: {\n\t\t\t\theaders\n\t\t\t}\n\t\t});\n\t};\n\nexport default createAuthMiddleware;\n"],"names":["DEFAULT_PUBLIC_ROUTES","logger","DESCOPE_SESSION_HEADER","setLogger","getGlobalSdk","mergeSearchParams","NextResponse"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"authMiddleware.js","sources":["../../../src/server/authMiddleware.ts"],"sourcesContent":["import { NextRequest, NextResponse } from 'next/server';\nimport descopeSdk from '@descope/node-sdk';\nimport type { AuthenticationInfo } from '@descope/node-sdk';\nimport { DEFAULT_PUBLIC_ROUTES, DESCOPE_SESSION_HEADER } from './constants';\nimport { getGlobalSdk } from './sdk';\nimport { mergeSearchParams } from './utils';\nimport { LogLevel } from '../types';\nimport { logger, setLogger } from './logger';\n\ntype MiddlewareOptions = {\n\t// The Descope project ID to use for authentication\n\t// Defaults to process.env.NEXT_PUBLIC_DESCOPE_PROJECT_ID\n\tprojectId?: string;\n\n\t// The base URL to use for authentication\n\t// Defaults to process.env.NEXT_PUBLIC_DESCOPE_BASE_URL\n\tbaseUrl?: string;\n\n\t// The URL to redirect to if the user is not authenticated\n\t// Defaults to process.env.SIGN_IN_ROUTE or '/sign-in' if not provided\n\t// NOTE: In case it contains query parameters that exist in the original URL, they will override the original query parameters. e.g. if the original URL is /page?param1=1¶m2=2 and the redirect URL is /sign-in?param1=3, the final redirect URL will be /sign-in?param1=3¶m2=2\n\tredirectUrl?: string;\n\n\t// An array of public routes that do not require authentication\n\t// In addition to the default public routes:\n\t// - process.env.SIGN_IN_ROUTE or /sign-in if not provided\n\t// - process.env.SIGN_UP_ROUTE or /sign-up if not provided\n\tpublicRoutes?: string[];\n\n\t// An array of private routes that require authentication\n\t// If privateRoutes is defined, routes not listed in this array will default to public routes\n\tprivateRoutes?: string[];\n\n\t// The log level to use for the middleware\n\t// Defaults to 'info'\n\tlogLevel?: LogLevel;\n\n\t// The name of the session cookie to look for the JWT\n\t// Defaults to 'DS'\n\t// Note: The middleware will also look for the JWT in the Authorization header\n\tsessionCookieName?: string;\n};\n\nconst getSessionJwt = (\n\treq: NextRequest,\n\toptions: MiddlewareOptions\n): string | undefined => {\n\tlet jwt = req.headers?.get('Authorization')?.split(' ')[1];\n\tif (jwt) {\n\t\treturn jwt;\n\t}\n\n\tjwt = req.cookies?.get(\n\t\toptions?.sessionCookieName || descopeSdk.SessionTokenCookieName\n\t)?.value;\n\tif (jwt) {\n\t\treturn jwt;\n\t}\n\treturn undefined;\n};\n\nconst matchWildcardRoute = (route: string, path: string) => {\n\tlet regexPattern = route.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\n\n\t// Convert wildcard (*) to match path segments only\n\tregexPattern = regexPattern.replace(/\\*/g, '[^/]*');\n\tconst regex = new RegExp(`^${regexPattern}$`);\n\n\treturn regex.test(path);\n};\n\nconst isPublicRoute = (req: NextRequest, options: MiddlewareOptions) => {\n\t// Ensure publicRoutes and privateRoutes are arrays, defaulting to empty arrays if not defined\n\tconst { publicRoutes = [], privateRoutes = [] } = options;\n\tconst { pathname } = req.nextUrl;\n\n\tconst isDefaultPublicRoute = Object.values(DEFAULT_PUBLIC_ROUTES).includes(\n\t\tpathname\n\t);\n\n\tif (publicRoutes.length > 0) {\n\t\tif (privateRoutes.length > 0) {\n\t\t\tlogger.warn(\n\t\t\t\t'Both publicRoutes and privateRoutes are defined. Ignoring privateRoutes.'\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\tisDefaultPublicRoute ||\n\t\t\tpublicRoutes.some((route) => matchWildcardRoute(route, pathname))\n\t\t);\n\t}\n\n\tif (privateRoutes.length > 0) {\n\t\treturn (\n\t\t\tisDefaultPublicRoute ||\n\t\t\t!privateRoutes.some((route) => matchWildcardRoute(route, pathname))\n\t\t);\n\t}\n\n\t// If no routes are provided, all routes are private\n\treturn isDefaultPublicRoute;\n};\n\nconst addSessionToHeadersIfExists = (\n\theaders: Headers,\n\tsession: AuthenticationInfo | undefined\n): Headers => {\n\tif (session) {\n\t\tconst requestHeaders = new Headers(headers);\n\t\trequestHeaders.set(\n\t\t\tDESCOPE_SESSION_HEADER,\n\t\t\tBuffer.from(JSON.stringify(session)).toString('base64')\n\t\t);\n\t\treturn requestHeaders;\n\t}\n\treturn headers;\n};\n\n// returns a Middleware that checks if the user is authenticated\n// if the user is not authenticated, it redirects to the redirectUrl\n// if the user is authenticated, it adds the session to the headers\nconst createAuthMiddleware =\n\t(options: MiddlewareOptions = {}) =>\n\tasync (req: NextRequest) => {\n\t\tsetLogger(options.logLevel);\n\t\tlogger.debug('Auth middleware starts');\n\n\t\tconst jwt = getSessionJwt(req, options);\n\n\t\t// check if the user is authenticated\n\t\tlet session: AuthenticationInfo | undefined;\n\t\ttry {\n\t\t\tsession = await getGlobalSdk({\n\t\t\t\tprojectId: options.projectId,\n\t\t\t\tbaseUrl: options.baseUrl\n\t\t\t}).validateJwt(jwt);\n\t\t} catch (err) {\n\t\t\tlogger.debug('Auth middleware, Failed to validate JWT', err);\n\t\t\tif (!isPublicRoute(req, options)) {\n\t\t\t\tconst redirectUrl = options.redirectUrl || DEFAULT_PUBLIC_ROUTES.signIn;\n\t\t\t\tconst url = req.nextUrl.clone();\n\t\t\t\t// Create a URL object for redirectUrl. 'http://example.com' is just a placeholder.\n\t\t\t\tconst parsedRedirectUrl = new URL(redirectUrl, 'http://example.com');\n\t\t\t\turl.pathname = parsedRedirectUrl.pathname;\n\n\t\t\t\tconst searchParams = mergeSearchParams(\n\t\t\t\t\turl.search,\n\t\t\t\t\tparsedRedirectUrl.search\n\t\t\t\t);\n\t\t\t\tif (searchParams) {\n\t\t\t\t\turl.search = searchParams;\n\t\t\t\t}\n\t\t\t\tlogger.debug(`Auth middleware, Redirecting to ${redirectUrl}`);\n\t\t\t\treturn NextResponse.redirect(url);\n\t\t\t}\n\t\t}\n\n\t\tlogger.debug('Auth middleware finishes');\n\t\t// add the session to the request, if it exists\n\t\tconst headers = addSessionToHeadersIfExists(req.headers, session);\n\t\treturn NextResponse.next({\n\t\t\trequest: {\n\t\t\t\theaders\n\t\t\t}\n\t\t});\n\t};\n\nexport default createAuthMiddleware;\n"],"names":["DEFAULT_PUBLIC_ROUTES","logger","DESCOPE_SESSION_HEADER","setLogger","getGlobalSdk","mergeSearchParams","NextResponse"],"mappings":"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"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
const DESCOPE_SESSION_HEADER = 'x-descope-session';
|
|
4
4
|
const baseHeaders = {
|
|
5
5
|
'x-descope-sdk-name': 'nextjs',
|
|
6
|
-
'x-descope-sdk-version': "0.14.
|
|
6
|
+
'x-descope-sdk-version': "0.14.29"
|
|
7
7
|
};
|
|
8
8
|
const DEFAULT_PUBLIC_ROUTES = {
|
|
9
9
|
signIn: process.env.SIGN_IN_ROUTE || '/sign-in',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var descopeSdk = require('@descope/node-sdk');
|
|
4
|
-
var
|
|
4
|
+
var headers = require('next/headers');
|
|
5
5
|
var constants = require('./constants.js');
|
|
6
6
|
var sdk = require('./sdk.js');
|
|
7
7
|
var logger = require('./logger.js');
|
|
@@ -21,7 +21,7 @@ const extractSession = (descopeSession) => {
|
|
|
21
21
|
const getSessionFromCookie = async (config) => {
|
|
22
22
|
logger.logger.debug('attempting to get session from cookie');
|
|
23
23
|
try {
|
|
24
|
-
const sessionCookie = (await
|
|
24
|
+
const sessionCookie = (await headers.cookies()).get(config?.sessionCookieName || descopeSdk.SessionTokenCookieName);
|
|
25
25
|
if (!sessionCookie?.value) {
|
|
26
26
|
logger.logger.debug('Session cookie not found');
|
|
27
27
|
return undefined;
|
|
@@ -47,7 +47,7 @@ const extractOrGetSession = async (sessionHeader, config) => {
|
|
|
47
47
|
const session = async (config) => {
|
|
48
48
|
logger.setLogger(config?.logLevel);
|
|
49
49
|
// first attempt to get the session from the headers
|
|
50
|
-
const reqHeaders = await
|
|
50
|
+
const reqHeaders = await headers.headers();
|
|
51
51
|
const sessionHeader = reqHeaders.get(constants.DESCOPE_SESSION_HEADER);
|
|
52
52
|
return extractOrGetSession(sessionHeader, config);
|
|
53
53
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sources":["../../../src/server/session.ts"],"sourcesContent":["import descopeSdk, { AuthenticationInfo } from '@descope/node-sdk';\nimport { NextApiRequest } from 'next';\nimport { cookies, headers } from 'next/headers';\nimport { DESCOPE_SESSION_HEADER } from './constants';\nimport { getGlobalSdk, CreateSdkParams } from './sdk';\nimport { LogLevel } from '../types';\nimport { logger, setLogger } from './logger';\n\ntype SessionConfig = CreateSdkParams & {\n\t// The log level to use for the middleware\n\t// Defaults to 'info'\n\tlogLevel?: LogLevel;\n\n\t// The name of the session cookie to look for the JWT\n\t// Defaults to 'DS'\n\t// Note: The middleware will also look for the JWT in the Authorization header\n\tsessionCookieName?: string;\n};\n\nconst extractSession = (\n\tdescopeSession?: string\n): AuthenticationInfo | undefined => {\n\tif (!descopeSession) {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tconst authInfo = JSON.parse(\n\t\t\tBuffer.from(descopeSession, 'base64').toString()\n\t\t) as AuthenticationInfo;\n\t\treturn authInfo;\n\t} catch (err) {\n\t\treturn undefined;\n\t}\n};\n\nconst getSessionFromCookie = async (\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tlogger.debug('attempting to get session from cookie');\n\ttry {\n\t\tconst sessionCookie = (await cookies()).get(\n\t\t\tconfig?.sessionCookieName || descopeSdk.SessionTokenCookieName\n\t\t);\n\t\tif (!sessionCookie?.value) {\n\t\t\tlogger.debug('Session cookie not found');\n\t\t\treturn undefined;\n\t\t}\n\t\tconst sdk = getGlobalSdk(config);\n\t\treturn await sdk.validateJwt(sessionCookie.value);\n\t} catch (err) {\n\t\tlogger.debug('Error getting session from cookie', err);\n\t\treturn undefined;\n\t}\n};\n\n// tries to extract the session header,\n// if it doesn't exist, it will attempt to get the session from the cookie\nconst extractOrGetSession = async (\n\tsessionHeader?: string,\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tconst session = extractSession(sessionHeader);\n\tif (session) {\n\t\treturn session;\n\t}\n\n\treturn getSessionFromCookie(config);\n};\n\n// returns the session token if it exists in the headers\nexport const session = async (\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tsetLogger(config?.logLevel);\n\t// first attempt to get the session from the headers\n\tconst reqHeaders = await headers();\n\tconst sessionHeader = reqHeaders.get(DESCOPE_SESSION_HEADER);\n\treturn extractOrGetSession(sessionHeader, config);\n};\n\n// returns the session token if it exists in the request headers\nexport const getSession = async (\n\treq: NextApiRequest,\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tsetLogger(config?.logLevel);\n\treturn extractOrGetSession(\n\t\treq.headers[DESCOPE_SESSION_HEADER.toLowerCase()] as string,\n\t\tconfig\n\t);\n};\n"],"names":["logger","cookies","sdk","getGlobalSdk","setLogger","headers","DESCOPE_SESSION_HEADER"],"mappings":";;;;;;;;AAmBA,MAAM,cAAc,GAAG,CACtB,cAAuB,KACY;IACnC,IAAI,CAAC,cAAc,EAAE;AACpB,QAAA,OAAO,SAAS,CAAC;KACjB;AACD,IAAA,IAAI;AACH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAC1B,CAAC;AACxB,QAAA,OAAO,QAAQ,CAAC;KAChB;IAAC,OAAO,GAAG,EAAE;AACb,QAAA,OAAO,SAAS,CAAC;KACjB;AACF,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,OAC5B,MAAsB,KACsB;AAC5C,IAAAA,aAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACtD,IAAA,IAAI;AACH,QAAA,MAAM,aAAa,GAAG,CAAC,MAAMC,
|
|
1
|
+
{"version":3,"file":"session.js","sources":["../../../src/server/session.ts"],"sourcesContent":["import descopeSdk, { AuthenticationInfo } from '@descope/node-sdk';\nimport { NextApiRequest } from 'next';\nimport { cookies, headers } from 'next/headers';\nimport { DESCOPE_SESSION_HEADER } from './constants';\nimport { getGlobalSdk, CreateSdkParams } from './sdk';\nimport { LogLevel } from '../types';\nimport { logger, setLogger } from './logger';\n\ntype SessionConfig = CreateSdkParams & {\n\t// The log level to use for the middleware\n\t// Defaults to 'info'\n\tlogLevel?: LogLevel;\n\n\t// The name of the session cookie to look for the JWT\n\t// Defaults to 'DS'\n\t// Note: The middleware will also look for the JWT in the Authorization header\n\tsessionCookieName?: string;\n};\n\nconst extractSession = (\n\tdescopeSession?: string\n): AuthenticationInfo | undefined => {\n\tif (!descopeSession) {\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tconst authInfo = JSON.parse(\n\t\t\tBuffer.from(descopeSession, 'base64').toString()\n\t\t) as AuthenticationInfo;\n\t\treturn authInfo;\n\t} catch (err) {\n\t\treturn undefined;\n\t}\n};\n\nconst getSessionFromCookie = async (\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tlogger.debug('attempting to get session from cookie');\n\ttry {\n\t\tconst sessionCookie = (await cookies()).get(\n\t\t\tconfig?.sessionCookieName || descopeSdk.SessionTokenCookieName\n\t\t);\n\t\tif (!sessionCookie?.value) {\n\t\t\tlogger.debug('Session cookie not found');\n\t\t\treturn undefined;\n\t\t}\n\t\tconst sdk = getGlobalSdk(config);\n\t\treturn await sdk.validateJwt(sessionCookie.value);\n\t} catch (err) {\n\t\tlogger.debug('Error getting session from cookie', err);\n\t\treturn undefined;\n\t}\n};\n\n// tries to extract the session header,\n// if it doesn't exist, it will attempt to get the session from the cookie\nconst extractOrGetSession = async (\n\tsessionHeader?: string,\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tconst session = extractSession(sessionHeader);\n\tif (session) {\n\t\treturn session;\n\t}\n\n\treturn getSessionFromCookie(config);\n};\n\n// returns the session token if it exists in the headers\nexport const session = async (\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tsetLogger(config?.logLevel);\n\t// first attempt to get the session from the headers\n\tconst reqHeaders = await headers();\n\tconst sessionHeader = reqHeaders.get(DESCOPE_SESSION_HEADER);\n\treturn extractOrGetSession(sessionHeader, config);\n};\n\n// returns the session token if it exists in the request headers\nexport const getSession = async (\n\treq: NextApiRequest,\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tsetLogger(config?.logLevel);\n\treturn extractOrGetSession(\n\t\treq.headers[DESCOPE_SESSION_HEADER.toLowerCase()] as string,\n\t\tconfig\n\t);\n};\n"],"names":["logger","cookies","sdk","getGlobalSdk","setLogger","headers","DESCOPE_SESSION_HEADER"],"mappings":";;;;;;;;AAmBA,MAAM,cAAc,GAAG,CACtB,cAAuB,KACY;IACnC,IAAI,CAAC,cAAc,EAAE;AACpB,QAAA,OAAO,SAAS,CAAC;KACjB;AACD,IAAA,IAAI;AACH,QAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAC1B,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAC1B,CAAC;AACxB,QAAA,OAAO,QAAQ,CAAC;KAChB;IAAC,OAAO,GAAG,EAAE;AACb,QAAA,OAAO,SAAS,CAAC;KACjB;AACF,CAAC,CAAC;AAEF,MAAM,oBAAoB,GAAG,OAC5B,MAAsB,KACsB;AAC5C,IAAAA,aAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;AACtD,IAAA,IAAI;AACH,QAAA,MAAM,aAAa,GAAG,CAAC,MAAMC,eAAO,EAAE,EAAE,GAAG,CAC1C,MAAM,EAAE,iBAAiB,IAAI,UAAU,CAAC,sBAAsB,CAC9D,CAAC;AACF,QAAA,IAAI,CAAC,aAAa,EAAE,KAAK,EAAE;AAC1B,YAAAD,aAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACzC,YAAA,OAAO,SAAS,CAAC;SACjB;AACD,QAAA,MAAME,KAAG,GAAGC,gBAAY,CAAC,MAAM,CAAC,CAAC;QACjC,OAAO,MAAMD,KAAG,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAClD;IAAC,OAAO,GAAG,EAAE;AACb,QAAAF,aAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;AACvD,QAAA,OAAO,SAAS,CAAC;KACjB;AACF,CAAC,CAAC;AAEF;AACA;AACA,MAAM,mBAAmB,GAAG,OAC3B,aAAsB,EACtB,MAAsB,KACsB;AAC5C,IAAA,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;IAC9C,IAAI,OAAO,EAAE;AACZ,QAAA,OAAO,OAAO,CAAC;KACf;AAED,IAAA,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;AACrC,CAAC,CAAC;AAEF;MACa,OAAO,GAAG,OACtB,MAAsB,KACsB;AAC5C,IAAAI,gBAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;;AAE5B,IAAA,MAAM,UAAU,GAAG,MAAMC,eAAO,EAAE,CAAC;IACnC,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAACC,gCAAsB,CAAC,CAAC;AAC7D,IAAA,OAAO,mBAAmB,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AACnD,EAAE;AAEF;AACa,MAAA,UAAU,GAAG,OACzB,GAAmB,EACnB,MAAsB,KACsB;AAC5C,IAAAF,gBAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5B,IAAA,OAAO,mBAAmB,CACzB,GAAG,CAAC,OAAO,CAACE,gCAAsB,CAAC,WAAW,EAAE,CAAW,EAC3D,MAAM,CACN,CAAC;AACH;;;;;"}
|
|
@@ -2,46 +2,48 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var React = require('react');
|
|
5
|
-
var dynamic = require('next/dynamic
|
|
6
|
-
var
|
|
5
|
+
var dynamic = require('next/dynamic');
|
|
6
|
+
var navigation = require('next/navigation');
|
|
7
7
|
var constants = require('./constants.js');
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
const
|
|
9
|
+
/**
|
|
10
|
+
* Dynamically loads the underlying Descope React component and wraps it with optional
|
|
11
|
+
* redirect handling (redirectAfterSuccess / redirectAfterError). SSR is disabled.
|
|
12
|
+
* The returned component preserves the original SDK prop surface plus redirect props.
|
|
13
|
+
*/
|
|
14
|
+
function createDescopeWrapper(componentName) {
|
|
15
|
+
return dynamic(() => import('@descope/react-sdk').then((mod) => {
|
|
16
|
+
if (mod.baseHeaders)
|
|
17
|
+
Object.assign(mod.baseHeaders, constants.baseHeaders);
|
|
18
|
+
const Inner = mod[componentName];
|
|
19
|
+
const Wrapped = ({ redirectAfterSuccess = '', redirectAfterError = '', ...rest }) => {
|
|
20
|
+
const router = navigation.useRouter();
|
|
21
|
+
// we purposefully allow index access because we don't know exact handler names ahead; use a mutable copy
|
|
22
|
+
const forwarded = { ...rest };
|
|
23
|
+
if (redirectAfterSuccess) {
|
|
24
|
+
const original = forwarded.onSuccess;
|
|
25
|
+
forwarded.onSuccess = (...args) => {
|
|
26
|
+
original?.(...args);
|
|
27
|
+
router.push(redirectAfterSuccess);
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
if (redirectAfterError) {
|
|
31
|
+
const original = forwarded.onError;
|
|
32
|
+
forwarded.onError = (...args) => {
|
|
33
|
+
original?.(...args);
|
|
34
|
+
router.push(redirectAfterError);
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return React.createElement(Inner, forwarded);
|
|
38
|
+
};
|
|
39
|
+
Wrapped.displayName = `Descope${componentName}`;
|
|
40
|
+
return { default: Wrapped };
|
|
41
|
+
}), { ssr: false });
|
|
42
|
+
}
|
|
43
|
+
const Descope = createDescopeWrapper('Descope');
|
|
44
|
+
const SignInFlow = createDescopeWrapper('SignInFlow');
|
|
45
|
+
const SignUpFlow = createDescopeWrapper('SignUpFlow');
|
|
46
|
+
const SignUpOrInFlow = createDescopeWrapper('SignUpOrInFlow');
|
|
45
47
|
|
|
46
48
|
exports.Descope = Descope;
|
|
47
49
|
exports.SignInFlow = SignInFlow;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DescopeFlows.js","sources":["../../../src/shared/DescopeFlows.tsx"],"sourcesContent":["'use client';\n\n
|
|
1
|
+
{"version":3,"file":"DescopeFlows.js","sources":["../../../src/shared/DescopeFlows.tsx"],"sourcesContent":["'use client';\n\n/* eslint-disable import/exports-last, prefer-arrow/prefer-arrow-functions */\n\nimport React from 'react';\nimport dynamic from 'next/dynamic';\nimport { useRouter } from 'next/navigation';\nimport type {\n\tDescope as DescopeWC,\n\tSignInFlow as SignInFlowWC,\n\tSignUpFlow as SignUpFlowWC,\n\tSignUpOrInFlow as SignUpOrInFlowWC\n} from '@descope/react-sdk';\nimport { baseHeaders as nextBaseHeaders } from './constants';\n\ninterface RedirectAddon {\n\tredirectAfterSuccess?: string;\n\tredirectAfterError?: string;\n}\n\ntype WithRedirect<T> = T & RedirectAddon;\n\nexport type BaseDescopeProps = React.ComponentProps<typeof DescopeWC>;\nexport type BaseSignInFlowProps = React.ComponentProps<typeof SignInFlowWC>;\nexport type BaseSignUpFlowProps = React.ComponentProps<typeof SignUpFlowWC>;\nexport type BaseSignUpOrInFlowProps = React.ComponentProps<\n\ttypeof SignUpOrInFlowWC\n>;\n\nexport interface DescopeProps extends BaseDescopeProps, RedirectAddon {}\nexport interface SignInFlowProps extends BaseSignInFlowProps, RedirectAddon {}\nexport interface SignUpFlowProps extends BaseSignUpFlowProps, RedirectAddon {}\nexport interface SignUpOrInFlowProps\n\textends BaseSignUpOrInFlowProps,\n\t\tRedirectAddon {}\n\ntype AnyFlowProps =\n\t| DescopeProps\n\t| SignInFlowProps\n\t| SignUpFlowProps\n\t| SignUpOrInFlowProps;\n/**\n * Dynamically loads the underlying Descope React component and wraps it with optional\n * redirect handling (redirectAfterSuccess / redirectAfterError). SSR is disabled.\n * The returned component preserves the original SDK prop surface plus redirect props.\n */\nfunction createDescopeWrapper<T extends AnyFlowProps>(\n\tcomponentName: string\n): React.ComponentType<T> {\n\treturn dynamic<T>(\n\t\t() =>\n\t\t\timport('@descope/react-sdk').then((mod: any) => {\n\t\t\t\tif (mod.baseHeaders) Object.assign(mod.baseHeaders, nextBaseHeaders);\n\t\t\t\tconst Inner = mod[componentName] as React.ComponentType<any>;\n\t\t\t\tconst Wrapped: React.FC<WithRedirect<T>> = ({\n\t\t\t\t\tredirectAfterSuccess = '',\n\t\t\t\t\tredirectAfterError = '',\n\t\t\t\t\t...rest\n\t\t\t\t}) => {\n\t\t\t\t\tconst router = useRouter();\n\t\t\t\t\t// we purposefully allow index access because we don't know exact handler names ahead; use a mutable copy\n\t\t\t\t\tconst forwarded = { ...rest } as T;\n\t\t\t\t\tif (redirectAfterSuccess) {\n\t\t\t\t\t\tconst original = forwarded.onSuccess as\n\t\t\t\t\t\t\t| ((...a: any[]) => void)\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tforwarded.onSuccess = (...args: any[]) => {\n\t\t\t\t\t\t\toriginal?.(...args);\n\t\t\t\t\t\t\trouter.push(redirectAfterSuccess);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (redirectAfterError) {\n\t\t\t\t\t\tconst original = forwarded.onError as\n\t\t\t\t\t\t\t| ((...a: any[]) => void)\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tforwarded.onError = (...args: any[]) => {\n\t\t\t\t\t\t\toriginal?.(...args);\n\t\t\t\t\t\t\trouter.push(redirectAfterError);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn React.createElement(Inner, forwarded);\n\t\t\t\t};\n\t\t\t\t(Wrapped as any).displayName = `Descope${componentName}`;\n\t\t\t\treturn { default: Wrapped };\n\t\t\t}),\n\t\t{ ssr: false }\n\t);\n}\n\nexport const Descope = createDescopeWrapper<DescopeProps>('Descope');\nexport const SignInFlow = createDescopeWrapper<SignInFlowProps>('SignInFlow');\nexport const SignUpFlow = createDescopeWrapper<SignUpFlowProps>('SignUpFlow');\nexport const SignUpOrInFlow =\n\tcreateDescopeWrapper<SignUpOrInFlowProps>('SignUpOrInFlow');\n"],"names":[],"mappings":";;;;;;;;AAyCA;;;;AAIG;AACH;AAGC;;;AAIG;AACA;AAKC;;AAEA;;AAEC;AAGA;AACC;AACA;AACD;;;AAGA;AAGA;AACC;AACA;AACD;;;AAGF;AACC;AACD;;AAIJ;;;;;;;;;"}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
5
|
-
var
|
|
4
|
+
var React = require('react');
|
|
5
|
+
var dynamic = require('next/dynamic');
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
7
|
+
function makeWidget(name) {
|
|
8
|
+
return dynamic(() => import('@descope/react-sdk').then((mod) => {
|
|
9
|
+
const Inner = mod[name];
|
|
10
|
+
const Wrapped = (props) => React.createElement(Inner, props);
|
|
11
|
+
Wrapped.displayName = `Descope${name}`;
|
|
12
|
+
return { default: Wrapped };
|
|
13
|
+
}), { ssr: false });
|
|
14
|
+
}
|
|
15
|
+
const UserManagement = makeWidget('UserManagement');
|
|
16
|
+
const RoleManagement = makeWidget('RoleManagement');
|
|
17
|
+
const AccessKeyManagement = makeWidget('AccessKeyManagement');
|
|
18
|
+
const AuditManagement = makeWidget('AuditManagement');
|
|
19
|
+
const UserProfile = makeWidget('UserProfile');
|
|
20
|
+
const ApplicationsPortal = makeWidget('ApplicationsPortal');
|
|
20
21
|
|
|
21
22
|
exports.AccessKeyManagement = AccessKeyManagement;
|
|
22
23
|
exports.ApplicationsPortal = ApplicationsPortal;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DescopeWidgets.js","sources":["../../../src/shared/DescopeWidgets.tsx"],"sourcesContent":["'use client';\n\n
|
|
1
|
+
{"version":3,"file":"DescopeWidgets.js","sources":["../../../src/shared/DescopeWidgets.tsx"],"sourcesContent":["'use client';\n\n/* eslint-disable import/exports-last, prefer-arrow/prefer-arrow-functions */\n\nimport React from 'react';\nimport dynamic from 'next/dynamic';\nimport type {\n\tUserManagement as UserManagementWC,\n\tRoleManagement as RoleManagementWC,\n\tAccessKeyManagement as AccessKeyManagementWC,\n\tAuditManagement as AuditManagementWC,\n\tUserProfile as UserProfileWC,\n\tApplicationsPortal as ApplicationsPortalWC\n} from '@descope/react-sdk';\n\nexport type UserManagementProps = React.ComponentProps<typeof UserManagementWC>;\nexport type RoleManagementProps = React.ComponentProps<typeof RoleManagementWC>;\nexport type AccessKeyManagementProps = React.ComponentProps<\n\ttypeof AccessKeyManagementWC\n>;\nexport type AuditManagementProps = React.ComponentProps<\n\ttypeof AuditManagementWC\n>;\nexport type UserProfileProps = React.ComponentProps<typeof UserProfileWC>;\nexport type ApplicationsPortalProps = React.ComponentProps<\n\ttypeof ApplicationsPortalWC\n>;\n\nfunction makeWidget<T extends Record<string, any>>(name: string) {\n\treturn dynamic<T>(\n\t\t() =>\n\t\t\timport('@descope/react-sdk').then((mod: any) => {\n\t\t\t\tconst Inner = mod[name] as React.ComponentType<any>;\n\t\t\t\tconst Wrapped = (props: T) => React.createElement(Inner, props);\n\t\t\t\t(Wrapped as any).displayName = `Descope${name}`;\n\t\t\t\treturn { default: Wrapped };\n\t\t\t}),\n\t\t{ ssr: false }\n\t);\n}\n\nexport const UserManagement: React.ComponentType<UserManagementProps> =\n\tmakeWidget<UserManagementProps>('UserManagement');\nexport const RoleManagement: React.ComponentType<RoleManagementProps> =\n\tmakeWidget<RoleManagementProps>('RoleManagement');\nexport const AccessKeyManagement: React.ComponentType<AccessKeyManagementProps> =\n\tmakeWidget<AccessKeyManagementProps>('AccessKeyManagement');\nexport const AuditManagement: React.ComponentType<AuditManagementProps> =\n\tmakeWidget<AuditManagementProps>('AuditManagement');\nexport const UserProfile: React.ComponentType<UserProfileProps> =\n\tmakeWidget<UserProfileProps>('UserProfile');\nexport const ApplicationsPortal: React.ComponentType<ApplicationsPortalProps> =\n\tmakeWidget<ApplicationsPortalProps>('ApplicationsPortal');\n"],"names":[],"mappings":";;;;;;AA4BA;AACC;AAGG;AACA;AACC;AACD;;AAIJ;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const DESCOPE_SESSION_HEADER = 'x-descope-session';
|
|
2
2
|
const baseHeaders = {
|
|
3
3
|
'x-descope-sdk-name': 'nextjs',
|
|
4
|
-
'x-descope-sdk-version': "0.14.
|
|
4
|
+
'x-descope-sdk-version': "0.14.29"
|
|
5
5
|
};
|
|
6
6
|
const DEFAULT_PUBLIC_ROUTES = {
|
|
7
7
|
signIn: process.env.SIGN_IN_ROUTE || '/sign-in',
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import descopeSdk from '@descope/node-sdk';
|
|
2
|
-
import { headers, cookies } from 'next/headers
|
|
2
|
+
import { headers, cookies } from 'next/headers';
|
|
3
3
|
import { DESCOPE_SESSION_HEADER } from './constants.js';
|
|
4
4
|
import { getGlobalSdk } from './sdk.js';
|
|
5
5
|
import { setLogger, logger } from './logger.js';
|
|
@@ -1,45 +1,47 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import dynamic from 'next/dynamic
|
|
4
|
-
import { useRouter } from 'next/navigation
|
|
3
|
+
import dynamic from 'next/dynamic';
|
|
4
|
+
import { useRouter } from 'next/navigation';
|
|
5
5
|
import { baseHeaders } from './constants.js';
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
const
|
|
7
|
+
/**
|
|
8
|
+
* Dynamically loads the underlying Descope React component and wraps it with optional
|
|
9
|
+
* redirect handling (redirectAfterSuccess / redirectAfterError). SSR is disabled.
|
|
10
|
+
* The returned component preserves the original SDK prop surface plus redirect props.
|
|
11
|
+
*/
|
|
12
|
+
function createDescopeWrapper(componentName) {
|
|
13
|
+
return dynamic(() => import('@descope/react-sdk').then((mod) => {
|
|
14
|
+
if (mod.baseHeaders)
|
|
15
|
+
Object.assign(mod.baseHeaders, baseHeaders);
|
|
16
|
+
const Inner = mod[componentName];
|
|
17
|
+
const Wrapped = ({ redirectAfterSuccess = '', redirectAfterError = '', ...rest }) => {
|
|
18
|
+
const router = useRouter();
|
|
19
|
+
// we purposefully allow index access because we don't know exact handler names ahead; use a mutable copy
|
|
20
|
+
const forwarded = { ...rest };
|
|
21
|
+
if (redirectAfterSuccess) {
|
|
22
|
+
const original = forwarded.onSuccess;
|
|
23
|
+
forwarded.onSuccess = (...args) => {
|
|
24
|
+
original?.(...args);
|
|
25
|
+
router.push(redirectAfterSuccess);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
if (redirectAfterError) {
|
|
29
|
+
const original = forwarded.onError;
|
|
30
|
+
forwarded.onError = (...args) => {
|
|
31
|
+
original?.(...args);
|
|
32
|
+
router.push(redirectAfterError);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
return React.createElement(Inner, forwarded);
|
|
36
|
+
};
|
|
37
|
+
Wrapped.displayName = `Descope${componentName}`;
|
|
38
|
+
return { default: Wrapped };
|
|
39
|
+
}), { ssr: false });
|
|
40
|
+
}
|
|
41
|
+
const Descope = createDescopeWrapper('Descope');
|
|
42
|
+
const SignInFlow = createDescopeWrapper('SignInFlow');
|
|
43
|
+
const SignUpFlow = createDescopeWrapper('SignUpFlow');
|
|
44
|
+
const SignUpOrInFlow = createDescopeWrapper('SignUpOrInFlow');
|
|
43
45
|
|
|
44
46
|
export { Descope, SignInFlow, SignUpFlow, SignUpOrInFlow };
|
|
45
47
|
//# sourceMappingURL=DescopeFlows.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DescopeFlows.js","sources":["../../../src/shared/DescopeFlows.tsx"],"sourcesContent":["'use client';\n\n
|
|
1
|
+
{"version":3,"file":"DescopeFlows.js","sources":["../../../src/shared/DescopeFlows.tsx"],"sourcesContent":["'use client';\n\n/* eslint-disable import/exports-last, prefer-arrow/prefer-arrow-functions */\n\nimport React from 'react';\nimport dynamic from 'next/dynamic';\nimport { useRouter } from 'next/navigation';\nimport type {\n\tDescope as DescopeWC,\n\tSignInFlow as SignInFlowWC,\n\tSignUpFlow as SignUpFlowWC,\n\tSignUpOrInFlow as SignUpOrInFlowWC\n} from '@descope/react-sdk';\nimport { baseHeaders as nextBaseHeaders } from './constants';\n\ninterface RedirectAddon {\n\tredirectAfterSuccess?: string;\n\tredirectAfterError?: string;\n}\n\ntype WithRedirect<T> = T & RedirectAddon;\n\nexport type BaseDescopeProps = React.ComponentProps<typeof DescopeWC>;\nexport type BaseSignInFlowProps = React.ComponentProps<typeof SignInFlowWC>;\nexport type BaseSignUpFlowProps = React.ComponentProps<typeof SignUpFlowWC>;\nexport type BaseSignUpOrInFlowProps = React.ComponentProps<\n\ttypeof SignUpOrInFlowWC\n>;\n\nexport interface DescopeProps extends BaseDescopeProps, RedirectAddon {}\nexport interface SignInFlowProps extends BaseSignInFlowProps, RedirectAddon {}\nexport interface SignUpFlowProps extends BaseSignUpFlowProps, RedirectAddon {}\nexport interface SignUpOrInFlowProps\n\textends BaseSignUpOrInFlowProps,\n\t\tRedirectAddon {}\n\ntype AnyFlowProps =\n\t| DescopeProps\n\t| SignInFlowProps\n\t| SignUpFlowProps\n\t| SignUpOrInFlowProps;\n/**\n * Dynamically loads the underlying Descope React component and wraps it with optional\n * redirect handling (redirectAfterSuccess / redirectAfterError). SSR is disabled.\n * The returned component preserves the original SDK prop surface plus redirect props.\n */\nfunction createDescopeWrapper<T extends AnyFlowProps>(\n\tcomponentName: string\n): React.ComponentType<T> {\n\treturn dynamic<T>(\n\t\t() =>\n\t\t\timport('@descope/react-sdk').then((mod: any) => {\n\t\t\t\tif (mod.baseHeaders) Object.assign(mod.baseHeaders, nextBaseHeaders);\n\t\t\t\tconst Inner = mod[componentName] as React.ComponentType<any>;\n\t\t\t\tconst Wrapped: React.FC<WithRedirect<T>> = ({\n\t\t\t\t\tredirectAfterSuccess = '',\n\t\t\t\t\tredirectAfterError = '',\n\t\t\t\t\t...rest\n\t\t\t\t}) => {\n\t\t\t\t\tconst router = useRouter();\n\t\t\t\t\t// we purposefully allow index access because we don't know exact handler names ahead; use a mutable copy\n\t\t\t\t\tconst forwarded = { ...rest } as T;\n\t\t\t\t\tif (redirectAfterSuccess) {\n\t\t\t\t\t\tconst original = forwarded.onSuccess as\n\t\t\t\t\t\t\t| ((...a: any[]) => void)\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tforwarded.onSuccess = (...args: any[]) => {\n\t\t\t\t\t\t\toriginal?.(...args);\n\t\t\t\t\t\t\trouter.push(redirectAfterSuccess);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\tif (redirectAfterError) {\n\t\t\t\t\t\tconst original = forwarded.onError as\n\t\t\t\t\t\t\t| ((...a: any[]) => void)\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tforwarded.onError = (...args: any[]) => {\n\t\t\t\t\t\t\toriginal?.(...args);\n\t\t\t\t\t\t\trouter.push(redirectAfterError);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t\treturn React.createElement(Inner, forwarded);\n\t\t\t\t};\n\t\t\t\t(Wrapped as any).displayName = `Descope${componentName}`;\n\t\t\t\treturn { default: Wrapped };\n\t\t\t}),\n\t\t{ ssr: false }\n\t);\n}\n\nexport const Descope = createDescopeWrapper<DescopeProps>('Descope');\nexport const SignInFlow = createDescopeWrapper<SignInFlowProps>('SignInFlow');\nexport const SignUpFlow = createDescopeWrapper<SignUpFlowProps>('SignUpFlow');\nexport const SignUpOrInFlow =\n\tcreateDescopeWrapper<SignUpOrInFlowProps>('SignUpOrInFlow');\n"],"names":[],"mappings":";;;;;;AAyCA;;;;AAIG;AACH;AAGC;;;AAIG;AACA;AAKC;;AAEA;;AAEC;AAGA;AACC;AACA;AACD;;;AAGA;AAGA;AACC;AACA;AACD;;;AAGF;AACC;AACD;;AAIJ;;;;;;"}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import
|
|
3
|
-
import
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import dynamic from 'next/dynamic';
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
5
|
+
function makeWidget(name) {
|
|
6
|
+
return dynamic(() => import('@descope/react-sdk').then((mod) => {
|
|
7
|
+
const Inner = mod[name];
|
|
8
|
+
const Wrapped = (props) => React.createElement(Inner, props);
|
|
9
|
+
Wrapped.displayName = `Descope${name}`;
|
|
10
|
+
return { default: Wrapped };
|
|
11
|
+
}), { ssr: false });
|
|
12
|
+
}
|
|
13
|
+
const UserManagement = makeWidget('UserManagement');
|
|
14
|
+
const RoleManagement = makeWidget('RoleManagement');
|
|
15
|
+
const AccessKeyManagement = makeWidget('AccessKeyManagement');
|
|
16
|
+
const AuditManagement = makeWidget('AuditManagement');
|
|
17
|
+
const UserProfile = makeWidget('UserProfile');
|
|
18
|
+
const ApplicationsPortal = makeWidget('ApplicationsPortal');
|
|
18
19
|
|
|
19
20
|
export { AccessKeyManagement, ApplicationsPortal, AuditManagement, RoleManagement, UserManagement, UserProfile };
|
|
20
21
|
//# sourceMappingURL=DescopeWidgets.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DescopeWidgets.js","sources":["../../../src/shared/DescopeWidgets.tsx"],"sourcesContent":["'use client';\n\n
|
|
1
|
+
{"version":3,"file":"DescopeWidgets.js","sources":["../../../src/shared/DescopeWidgets.tsx"],"sourcesContent":["'use client';\n\n/* eslint-disable import/exports-last, prefer-arrow/prefer-arrow-functions */\n\nimport React from 'react';\nimport dynamic from 'next/dynamic';\nimport type {\n\tUserManagement as UserManagementWC,\n\tRoleManagement as RoleManagementWC,\n\tAccessKeyManagement as AccessKeyManagementWC,\n\tAuditManagement as AuditManagementWC,\n\tUserProfile as UserProfileWC,\n\tApplicationsPortal as ApplicationsPortalWC\n} from '@descope/react-sdk';\n\nexport type UserManagementProps = React.ComponentProps<typeof UserManagementWC>;\nexport type RoleManagementProps = React.ComponentProps<typeof RoleManagementWC>;\nexport type AccessKeyManagementProps = React.ComponentProps<\n\ttypeof AccessKeyManagementWC\n>;\nexport type AuditManagementProps = React.ComponentProps<\n\ttypeof AuditManagementWC\n>;\nexport type UserProfileProps = React.ComponentProps<typeof UserProfileWC>;\nexport type ApplicationsPortalProps = React.ComponentProps<\n\ttypeof ApplicationsPortalWC\n>;\n\nfunction makeWidget<T extends Record<string, any>>(name: string) {\n\treturn dynamic<T>(\n\t\t() =>\n\t\t\timport('@descope/react-sdk').then((mod: any) => {\n\t\t\t\tconst Inner = mod[name] as React.ComponentType<any>;\n\t\t\t\tconst Wrapped = (props: T) => React.createElement(Inner, props);\n\t\t\t\t(Wrapped as any).displayName = `Descope${name}`;\n\t\t\t\treturn { default: Wrapped };\n\t\t\t}),\n\t\t{ ssr: false }\n\t);\n}\n\nexport const UserManagement: React.ComponentType<UserManagementProps> =\n\tmakeWidget<UserManagementProps>('UserManagement');\nexport const RoleManagement: React.ComponentType<RoleManagementProps> =\n\tmakeWidget<RoleManagementProps>('RoleManagement');\nexport const AccessKeyManagement: React.ComponentType<AccessKeyManagementProps> =\n\tmakeWidget<AccessKeyManagementProps>('AccessKeyManagement');\nexport const AuditManagement: React.ComponentType<AuditManagementProps> =\n\tmakeWidget<AuditManagementProps>('AuditManagement');\nexport const UserProfile: React.ComponentType<UserProfileProps> =\n\tmakeWidget<UserProfileProps>('UserProfile');\nexport const ApplicationsPortal: React.ComponentType<ApplicationsPortalProps> =\n\tmakeWidget<ApplicationsPortalProps>('ApplicationsPortal');\n"],"names":[],"mappings":";;;;AA4BA;AACC;AAGG;AACA;AACC;AACD;;AAIJ;;;;;;;;"}
|
|
@@ -1,145 +1,23 @@
|
|
|
1
|
-
import type * as _1 from '@descope/react-sdk/node_modules/@types/react';
|
|
2
|
-
import type * as _2 from '@descope/react-sdk/node_modules/@descope/web-component/dist';
|
|
3
1
|
import React from 'react';
|
|
4
|
-
type
|
|
2
|
+
import type { Descope as DescopeWC, SignInFlow as SignInFlowWC, SignUpFlow as SignUpFlowWC, SignUpOrInFlow as SignUpOrInFlowWC } from '@descope/react-sdk';
|
|
3
|
+
interface RedirectAddon {
|
|
5
4
|
redirectAfterSuccess?: string;
|
|
6
5
|
redirectAfterError?: string;
|
|
7
|
-
}
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
validateOnBlur?: boolean;
|
|
25
|
-
restartOnError?: boolean;
|
|
26
|
-
debug?: boolean;
|
|
27
|
-
telemetryKey?: string;
|
|
28
|
-
redirectUrl?: string;
|
|
29
|
-
outboundAppId?: string;
|
|
30
|
-
outboundAppScopes?: string[];
|
|
31
|
-
errorTransformer?: (error: {
|
|
32
|
-
text: string;
|
|
33
|
-
type: string;
|
|
34
|
-
}) => string;
|
|
35
|
-
form?: Record<string, any>;
|
|
36
|
-
client?: Record<string, any>;
|
|
37
|
-
styleId?: string;
|
|
38
|
-
dismissScreenErrorOnInput?: boolean;
|
|
39
|
-
onScreenUpdate?: (screenName: string, context: Record<string, any>, next: (interactionId: string, form: Record<string, any>) => Promise<unknown>, ref: HTMLElement) => boolean | Promise<boolean>;
|
|
40
|
-
children?: _1.ReactNode;
|
|
41
|
-
externalRequestId?: string;
|
|
42
|
-
} & _1.RefAttributes<HTMLElement> & AdditionalProps>;
|
|
43
|
-
export declare const SignInFlow: React.ComponentType<{
|
|
44
|
-
children?: _1.ReactNode;
|
|
45
|
-
form?: Record<string, any>;
|
|
46
|
-
onSuccess?: (e: CustomEvent<import("@descope/core-js-sdk").JWTResponse>) => void;
|
|
47
|
-
onError?: (e: CustomEvent<{
|
|
48
|
-
errorCode: string;
|
|
49
|
-
errorDescription: string;
|
|
50
|
-
errorMessage?: string;
|
|
51
|
-
retryAfter?: string;
|
|
52
|
-
}>) => void;
|
|
53
|
-
onReady?: (e: CustomEvent<{}>) => void;
|
|
54
|
-
logger?: Partial<any>;
|
|
55
|
-
tenant?: string;
|
|
56
|
-
theme?: _2.ThemeOptions;
|
|
57
|
-
locale?: string;
|
|
58
|
-
nonce?: string;
|
|
59
|
-
autoFocus?: _2.AutoFocusOptions;
|
|
60
|
-
validateOnBlur?: boolean;
|
|
61
|
-
restartOnError?: boolean;
|
|
62
|
-
debug?: boolean;
|
|
63
|
-
telemetryKey?: string;
|
|
64
|
-
redirectUrl?: string;
|
|
65
|
-
outboundAppId?: string;
|
|
66
|
-
outboundAppScopes?: string[];
|
|
67
|
-
errorTransformer?: (error: {
|
|
68
|
-
text: string;
|
|
69
|
-
type: string;
|
|
70
|
-
}) => string;
|
|
71
|
-
client?: Record<string, any>;
|
|
72
|
-
styleId?: string;
|
|
73
|
-
dismissScreenErrorOnInput?: boolean;
|
|
74
|
-
onScreenUpdate?: (screenName: string, context: Record<string, any>, next: (interactionId: string, form: Record<string, any>) => Promise<unknown>, ref: HTMLElement) => boolean | Promise<boolean>;
|
|
75
|
-
externalRequestId?: string;
|
|
76
|
-
} & AdditionalProps>;
|
|
77
|
-
export declare const SignUpFlow: React.ComponentType<{
|
|
78
|
-
children?: _1.ReactNode;
|
|
79
|
-
form?: Record<string, any>;
|
|
80
|
-
onSuccess?: (e: CustomEvent<import("@descope/core-js-sdk").JWTResponse>) => void;
|
|
81
|
-
onError?: (e: CustomEvent<{
|
|
82
|
-
errorCode: string;
|
|
83
|
-
errorDescription: string;
|
|
84
|
-
errorMessage?: string;
|
|
85
|
-
retryAfter?: string;
|
|
86
|
-
}>) => void;
|
|
87
|
-
onReady?: (e: CustomEvent<{}>) => void;
|
|
88
|
-
logger?: Partial<any>;
|
|
89
|
-
tenant?: string;
|
|
90
|
-
theme?: _2.ThemeOptions;
|
|
91
|
-
locale?: string;
|
|
92
|
-
nonce?: string;
|
|
93
|
-
autoFocus?: _2.AutoFocusOptions;
|
|
94
|
-
validateOnBlur?: boolean;
|
|
95
|
-
restartOnError?: boolean;
|
|
96
|
-
debug?: boolean;
|
|
97
|
-
telemetryKey?: string;
|
|
98
|
-
redirectUrl?: string;
|
|
99
|
-
outboundAppId?: string;
|
|
100
|
-
outboundAppScopes?: string[];
|
|
101
|
-
errorTransformer?: (error: {
|
|
102
|
-
text: string;
|
|
103
|
-
type: string;
|
|
104
|
-
}) => string;
|
|
105
|
-
client?: Record<string, any>;
|
|
106
|
-
styleId?: string;
|
|
107
|
-
dismissScreenErrorOnInput?: boolean;
|
|
108
|
-
onScreenUpdate?: (screenName: string, context: Record<string, any>, next: (interactionId: string, form: Record<string, any>) => Promise<unknown>, ref: HTMLElement) => boolean | Promise<boolean>;
|
|
109
|
-
externalRequestId?: string;
|
|
110
|
-
} & AdditionalProps>;
|
|
111
|
-
export declare const SignUpOrInFlow: React.ComponentType<{
|
|
112
|
-
children?: _1.ReactNode;
|
|
113
|
-
form?: Record<string, any>;
|
|
114
|
-
onSuccess?: (e: CustomEvent<import("@descope/core-js-sdk").JWTResponse>) => void;
|
|
115
|
-
onError?: (e: CustomEvent<{
|
|
116
|
-
errorCode: string;
|
|
117
|
-
errorDescription: string;
|
|
118
|
-
errorMessage?: string;
|
|
119
|
-
retryAfter?: string;
|
|
120
|
-
}>) => void;
|
|
121
|
-
onReady?: (e: CustomEvent<{}>) => void;
|
|
122
|
-
logger?: Partial<any>;
|
|
123
|
-
tenant?: string;
|
|
124
|
-
theme?: _2.ThemeOptions;
|
|
125
|
-
locale?: string;
|
|
126
|
-
nonce?: string;
|
|
127
|
-
autoFocus?: _2.AutoFocusOptions;
|
|
128
|
-
validateOnBlur?: boolean;
|
|
129
|
-
restartOnError?: boolean;
|
|
130
|
-
debug?: boolean;
|
|
131
|
-
telemetryKey?: string;
|
|
132
|
-
redirectUrl?: string;
|
|
133
|
-
outboundAppId?: string;
|
|
134
|
-
outboundAppScopes?: string[];
|
|
135
|
-
errorTransformer?: (error: {
|
|
136
|
-
text: string;
|
|
137
|
-
type: string;
|
|
138
|
-
}) => string;
|
|
139
|
-
client?: Record<string, any>;
|
|
140
|
-
styleId?: string;
|
|
141
|
-
dismissScreenErrorOnInput?: boolean;
|
|
142
|
-
onScreenUpdate?: (screenName: string, context: Record<string, any>, next: (interactionId: string, form: Record<string, any>) => Promise<unknown>, ref: HTMLElement) => boolean | Promise<boolean>;
|
|
143
|
-
externalRequestId?: string;
|
|
144
|
-
} & AdditionalProps>;
|
|
6
|
+
}
|
|
7
|
+
export type BaseDescopeProps = React.ComponentProps<typeof DescopeWC>;
|
|
8
|
+
export type BaseSignInFlowProps = React.ComponentProps<typeof SignInFlowWC>;
|
|
9
|
+
export type BaseSignUpFlowProps = React.ComponentProps<typeof SignUpFlowWC>;
|
|
10
|
+
export type BaseSignUpOrInFlowProps = React.ComponentProps<typeof SignUpOrInFlowWC>;
|
|
11
|
+
export interface DescopeProps extends BaseDescopeProps, RedirectAddon {
|
|
12
|
+
}
|
|
13
|
+
export interface SignInFlowProps extends BaseSignInFlowProps, RedirectAddon {
|
|
14
|
+
}
|
|
15
|
+
export interface SignUpFlowProps extends BaseSignUpFlowProps, RedirectAddon {
|
|
16
|
+
}
|
|
17
|
+
export interface SignUpOrInFlowProps extends BaseSignUpOrInFlowProps, RedirectAddon {
|
|
18
|
+
}
|
|
19
|
+
export declare const Descope: React.ComponentType<DescopeProps>;
|
|
20
|
+
export declare const SignInFlow: React.ComponentType<SignInFlowProps>;
|
|
21
|
+
export declare const SignUpFlow: React.ComponentType<SignUpFlowProps>;
|
|
22
|
+
export declare const SignUpOrInFlow: React.ComponentType<SignUpOrInFlowProps>;
|
|
145
23
|
export {};
|
|
@@ -1,60 +1,14 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
export
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export declare const
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
widgetId: string;
|
|
16
|
-
theme?: import("@descope/web-component").ThemeOptions;
|
|
17
|
-
debug?: boolean;
|
|
18
|
-
styleId?: string;
|
|
19
|
-
onReady?: (e: CustomEvent<{}>) => void;
|
|
20
|
-
} & _1.RefAttributes<HTMLElement>>;
|
|
21
|
-
export declare const AccessKeyManagement: ComponentType<{
|
|
22
|
-
logger?: Partial<any>;
|
|
23
|
-
tenant: string;
|
|
24
|
-
widgetId: string;
|
|
25
|
-
theme?: import("@descope/web-component").ThemeOptions;
|
|
26
|
-
debug?: boolean;
|
|
27
|
-
styleId?: string;
|
|
28
|
-
onReady?: (e: CustomEvent<{}>) => void;
|
|
29
|
-
} & _1.RefAttributes<HTMLElement>>;
|
|
30
|
-
export declare const AuditManagement: ComponentType<{
|
|
31
|
-
logger?: Partial<any>;
|
|
32
|
-
tenant: string;
|
|
33
|
-
widgetId: string;
|
|
34
|
-
theme?: import("@descope/web-component").ThemeOptions;
|
|
35
|
-
debug?: boolean;
|
|
36
|
-
styleId?: string;
|
|
37
|
-
onReady?: (e: CustomEvent<{}>) => void;
|
|
38
|
-
} & _1.RefAttributes<HTMLElement>>;
|
|
39
|
-
export declare const UserProfile: ComponentType<Omit<{
|
|
40
|
-
logger?: Partial<any>;
|
|
41
|
-
tenant: string;
|
|
42
|
-
widgetId: string;
|
|
43
|
-
theme?: import("@descope/web-component").ThemeOptions;
|
|
44
|
-
debug?: boolean;
|
|
45
|
-
styleId?: string;
|
|
46
|
-
onReady?: (e: CustomEvent<{}>) => void;
|
|
47
|
-
}, "tenant"> & {
|
|
48
|
-
onLogout?: (e: CustomEvent<any>) => void;
|
|
49
|
-
} & _1.RefAttributes<HTMLElement>>;
|
|
50
|
-
export declare const ApplicationsPortal: ComponentType<Omit<{
|
|
51
|
-
logger?: Partial<any>;
|
|
52
|
-
tenant: string;
|
|
53
|
-
widgetId: string;
|
|
54
|
-
theme?: import("@descope/web-component").ThemeOptions;
|
|
55
|
-
debug?: boolean;
|
|
56
|
-
styleId?: string;
|
|
57
|
-
onReady?: (e: CustomEvent<{}>) => void;
|
|
58
|
-
}, "tenant"> & {
|
|
59
|
-
onLogout?: (e: CustomEvent<any>) => void;
|
|
60
|
-
} & _1.RefAttributes<HTMLElement>>;
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { UserManagement as UserManagementWC, RoleManagement as RoleManagementWC, AccessKeyManagement as AccessKeyManagementWC, AuditManagement as AuditManagementWC, UserProfile as UserProfileWC, ApplicationsPortal as ApplicationsPortalWC } from '@descope/react-sdk';
|
|
3
|
+
export type UserManagementProps = React.ComponentProps<typeof UserManagementWC>;
|
|
4
|
+
export type RoleManagementProps = React.ComponentProps<typeof RoleManagementWC>;
|
|
5
|
+
export type AccessKeyManagementProps = React.ComponentProps<typeof AccessKeyManagementWC>;
|
|
6
|
+
export type AuditManagementProps = React.ComponentProps<typeof AuditManagementWC>;
|
|
7
|
+
export type UserProfileProps = React.ComponentProps<typeof UserProfileWC>;
|
|
8
|
+
export type ApplicationsPortalProps = React.ComponentProps<typeof ApplicationsPortalWC>;
|
|
9
|
+
export declare const UserManagement: React.ComponentType<UserManagementProps>;
|
|
10
|
+
export declare const RoleManagement: React.ComponentType<RoleManagementProps>;
|
|
11
|
+
export declare const AccessKeyManagement: React.ComponentType<AccessKeyManagementProps>;
|
|
12
|
+
export declare const AuditManagement: React.ComponentType<AuditManagementProps>;
|
|
13
|
+
export declare const UserProfile: React.ComponentType<UserProfileProps>;
|
|
14
|
+
export declare const ApplicationsPortal: React.ComponentType<ApplicationsPortalProps>;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@descope/nextjs-sdk",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.29",
|
|
4
4
|
"description": "Descope NextJS SDK",
|
|
5
5
|
"author": "Descope Team <info@descope.com>",
|
|
6
6
|
"homepage": "https://github.com/descope/descope-js",
|
|
@@ -64,9 +64,9 @@
|
|
|
64
64
|
},
|
|
65
65
|
"dependencies": {
|
|
66
66
|
"@descope/node-sdk": "1.7.16",
|
|
67
|
+
"@descope/react-sdk": "2.21.3",
|
|
67
68
|
"@descope/core-js-sdk": "2.50.1",
|
|
68
|
-
"@descope/
|
|
69
|
-
"@descope/web-component": "3.47.9"
|
|
69
|
+
"@descope/web-component": "3.47.11"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
72
|
"@babel/core": "7.26.0",
|