@descope/nextjs-sdk 0.15.56 → 0.15.57
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/constants.js +1 -1
- package/dist/cjs/server/session.js +22 -21
- package/dist/cjs/server/session.js.map +1 -1
- package/dist/cjs/shared/constants.js +1 -1
- package/dist/esm/server/constants.js +1 -1
- package/dist/esm/server/session.js +22 -21
- package/dist/esm/server/session.js.map +1 -1
- package/dist/esm/shared/constants.js +1 -1
- package/package.json +1 -1
|
@@ -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.15.
|
|
6
|
+
'x-descope-sdk-version': "0.15.57"
|
|
7
7
|
};
|
|
8
8
|
const DEFAULT_PUBLIC_ROUTES = {
|
|
9
9
|
signIn: process.env.SIGN_IN_ROUTE || '/sign-in',
|
|
@@ -5,25 +5,10 @@ var headers_js = require('next/headers.js');
|
|
|
5
5
|
var sdk = require('./sdk.js');
|
|
6
6
|
var logger = require('./logger.js');
|
|
7
7
|
|
|
8
|
-
const
|
|
9
|
-
logger.logger.debug('attempting to get session from cookie');
|
|
10
|
-
try {
|
|
11
|
-
const sessionCookie = (await headers_js.cookies()).get(config?.sessionCookieName || descopeSdk.SessionTokenCookieName);
|
|
12
|
-
if (!sessionCookie?.value) {
|
|
13
|
-
logger.logger.debug('Session cookie not found');
|
|
14
|
-
return undefined;
|
|
15
|
-
}
|
|
16
|
-
const sdk$1 = sdk.getGlobalSdk(config);
|
|
17
|
-
return await sdk$1.validateJwt(sessionCookie.value);
|
|
18
|
-
}
|
|
19
|
-
catch (err) {
|
|
20
|
-
logger.logger.debug('Error getting session from cookie', err);
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
};
|
|
8
|
+
const getSessionCookieName = (config) => config?.sessionCookieName || descopeSdk.SessionTokenCookieName;
|
|
24
9
|
// tries to validate the Authorization header,
|
|
25
|
-
// if it doesn't exist or is invalid, it will attempt to
|
|
26
|
-
const getSessionFromAuthorizationOrCookie = async (authorization, config) => {
|
|
10
|
+
// if it doesn't exist or is invalid, it will attempt to validate the session cookie
|
|
11
|
+
const getSessionFromAuthorizationOrCookie = async (authorization, cookieJwt, config) => {
|
|
27
12
|
const sessionJwt = authorization?.split(' ')[1];
|
|
28
13
|
if (sessionJwt) {
|
|
29
14
|
try {
|
|
@@ -34,19 +19,35 @@ const getSessionFromAuthorizationOrCookie = async (authorization, config) => {
|
|
|
34
19
|
logger.logger.debug('Error validating session from Authorization header', err);
|
|
35
20
|
}
|
|
36
21
|
}
|
|
37
|
-
|
|
22
|
+
logger.logger.debug('attempting to get session from cookie');
|
|
23
|
+
if (!cookieJwt) {
|
|
24
|
+
logger.logger.debug('Session cookie not found');
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const sdk$1 = sdk.getGlobalSdk(config);
|
|
29
|
+
return await sdk$1.validateJwt(cookieJwt);
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
logger.logger.debug('Error getting session from cookie', err);
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
38
35
|
};
|
|
39
36
|
// returns the session token if it exists in the Authorization header or cookie
|
|
40
37
|
const session = async (config) => {
|
|
41
38
|
logger.setLogger(config?.logLevel);
|
|
42
39
|
const reqHeaders = await headers_js.headers();
|
|
43
|
-
|
|
40
|
+
const cookieJwt = (await headers_js.cookies()).get(getSessionCookieName(config))?.value;
|
|
41
|
+
return getSessionFromAuthorizationOrCookie(reqHeaders.get('Authorization'), cookieJwt, config);
|
|
44
42
|
};
|
|
45
43
|
// returns the session token if it exists in the request Authorization header or cookie
|
|
46
44
|
const getSession = async (req, config) => {
|
|
47
45
|
logger.setLogger(config?.logLevel);
|
|
48
46
|
const { authorization } = req.headers;
|
|
49
|
-
return getSessionFromAuthorizationOrCookie(typeof authorization === 'string' ? authorization : undefined,
|
|
47
|
+
return getSessionFromAuthorizationOrCookie(typeof authorization === 'string' ? authorization : undefined,
|
|
48
|
+
// Pages Router request - next/headers cookies() is not available here,
|
|
49
|
+
// so the session cookie must be read directly from the request
|
|
50
|
+
req.cookies?.[getSessionCookieName(config)], config);
|
|
50
51
|
};
|
|
51
52
|
|
|
52
53
|
exports.getSession = getSession;
|
|
@@ -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 { 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\t// The name of the refresh token cookie\n\t// Defaults to 'DSR'\n\trefreshTokenCookieName?: string;\n};\n\nconst
|
|
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 { 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\t// The name of the refresh token cookie\n\t// Defaults to 'DSR'\n\trefreshTokenCookieName?: string;\n};\n\nconst getSessionCookieName = (config?: SessionConfig) =>\n\tconfig?.sessionCookieName || descopeSdk.SessionTokenCookieName;\n\n// tries to validate the Authorization header,\n// if it doesn't exist or is invalid, it will attempt to validate the session cookie\nconst getSessionFromAuthorizationOrCookie = async (\n\tauthorization: string | null | undefined,\n\tcookieJwt: string | undefined,\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tconst sessionJwt = authorization?.split(' ')[1];\n\tif (sessionJwt) {\n\t\ttry {\n\t\t\tconst sdk = getGlobalSdk(config);\n\t\t\treturn await sdk.validateJwt(sessionJwt);\n\t\t} catch (err) {\n\t\t\tlogger.debug('Error validating session from Authorization header', err);\n\t\t}\n\t}\n\n\tlogger.debug('attempting to get session from cookie');\n\tif (!cookieJwt) {\n\t\tlogger.debug('Session cookie not found');\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tconst sdk = getGlobalSdk(config);\n\t\treturn await sdk.validateJwt(cookieJwt);\n\t} catch (err) {\n\t\tlogger.debug('Error getting session from cookie', err);\n\t\treturn undefined;\n\t}\n};\n\n// returns the session token if it exists in the Authorization header or cookie\nexport const session = async (\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tsetLogger(config?.logLevel);\n\tconst reqHeaders = await headers();\n\tconst cookieJwt = (await cookies()).get(getSessionCookieName(config))?.value;\n\treturn getSessionFromAuthorizationOrCookie(\n\t\treqHeaders.get('Authorization'),\n\t\tcookieJwt,\n\t\tconfig\n\t);\n};\n\n// returns the session token if it exists in the request Authorization header or cookie\nexport const getSession = async (\n\treq: NextApiRequest,\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tsetLogger(config?.logLevel);\n\tconst { authorization } = req.headers;\n\treturn getSessionFromAuthorizationOrCookie(\n\t\ttypeof authorization === 'string' ? authorization : undefined,\n\t\t// Pages Router request - next/headers cookies() is not available here,\n\t\t// so the session cookie must be read directly from the request\n\t\treq.cookies?.[getSessionCookieName(config)],\n\t\tconfig\n\t);\n};\n"],"names":["sdk","getGlobalSdk","logger","setLogger","headers","cookies"],"mappings":";;;;;;;AAsBA,MAAM,oBAAoB,GAAG,CAAC,MAAsB,KACnD,MAAM,EAAE,iBAAiB,IAAI,UAAU,CAAC,sBAAsB,CAAC;AAEhE;AACA;AACA,MAAM,mCAAmC,GAAG,OAC3C,aAAwC,EACxC,SAA6B,EAC7B,MAAsB,KACsB;IAC5C,MAAM,UAAU,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,UAAU,EAAE;AACf,QAAA,IAAI;AACH,YAAA,MAAMA,KAAG,GAAGC,gBAAY,CAAC,MAAM,CAAC,CAAC;AACjC,YAAA,OAAO,MAAMD,KAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SACzC;QAAC,OAAO,GAAG,EAAE;AACb,YAAAE,aAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE,GAAG,CAAC,CAAC;SACxE;KACD;AAED,IAAAA,aAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACtD,IAAI,CAAC,SAAS,EAAE;AACf,QAAAA,aAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACzC,QAAA,OAAO,SAAS,CAAC;KACjB;AACD,IAAA,IAAI;AACH,QAAA,MAAMF,KAAG,GAAGC,gBAAY,CAAC,MAAM,CAAC,CAAC;AACjC,QAAA,OAAO,MAAMD,KAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;KACxC;IAAC,OAAO,GAAG,EAAE;AACb,QAAAE,aAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;AACvD,QAAA,OAAO,SAAS,CAAC;KACjB;AACF,CAAC,CAAC;AAEF;MACa,OAAO,GAAG,OACtB,MAAsB,KACsB;AAC5C,IAAAC,gBAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5B,IAAA,MAAM,UAAU,GAAG,MAAMC,kBAAO,EAAE,CAAC;AACnC,IAAA,MAAM,SAAS,GAAG,CAAC,MAAMC,kBAAO,EAAE,EAAE,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;AAC7E,IAAA,OAAO,mCAAmC,CACzC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,EAC/B,SAAS,EACT,MAAM,CACN,CAAC;AACH,EAAE;AAEF;AACa,MAAA,UAAU,GAAG,OACzB,GAAmB,EACnB,MAAsB,KACsB;AAC5C,IAAAF,gBAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5B,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;AACtC,IAAA,OAAO,mCAAmC,CACzC,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,SAAS;;;AAG7D,IAAA,GAAG,CAAC,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAC3C,MAAM,CACN,CAAC;AACH;;;;;"}
|
|
@@ -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.15.
|
|
4
|
+
'x-descope-sdk-version': "0.15.57"
|
|
5
5
|
};
|
|
6
6
|
const DEFAULT_PUBLIC_ROUTES = {
|
|
7
7
|
signIn: process.env.SIGN_IN_ROUTE || '/sign-in',
|
|
@@ -3,25 +3,10 @@ import { headers, cookies } from 'next/headers.js';
|
|
|
3
3
|
import { getGlobalSdk } from './sdk.js';
|
|
4
4
|
import { setLogger, logger } from './logger.js';
|
|
5
5
|
|
|
6
|
-
const
|
|
7
|
-
logger.debug('attempting to get session from cookie');
|
|
8
|
-
try {
|
|
9
|
-
const sessionCookie = (await cookies()).get(config?.sessionCookieName || descopeSdk.SessionTokenCookieName);
|
|
10
|
-
if (!sessionCookie?.value) {
|
|
11
|
-
logger.debug('Session cookie not found');
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
const sdk = getGlobalSdk(config);
|
|
15
|
-
return await sdk.validateJwt(sessionCookie.value);
|
|
16
|
-
}
|
|
17
|
-
catch (err) {
|
|
18
|
-
logger.debug('Error getting session from cookie', err);
|
|
19
|
-
return undefined;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
6
|
+
const getSessionCookieName = (config) => config?.sessionCookieName || descopeSdk.SessionTokenCookieName;
|
|
22
7
|
// tries to validate the Authorization header,
|
|
23
|
-
// if it doesn't exist or is invalid, it will attempt to
|
|
24
|
-
const getSessionFromAuthorizationOrCookie = async (authorization, config) => {
|
|
8
|
+
// if it doesn't exist or is invalid, it will attempt to validate the session cookie
|
|
9
|
+
const getSessionFromAuthorizationOrCookie = async (authorization, cookieJwt, config) => {
|
|
25
10
|
const sessionJwt = authorization?.split(' ')[1];
|
|
26
11
|
if (sessionJwt) {
|
|
27
12
|
try {
|
|
@@ -32,19 +17,35 @@ const getSessionFromAuthorizationOrCookie = async (authorization, config) => {
|
|
|
32
17
|
logger.debug('Error validating session from Authorization header', err);
|
|
33
18
|
}
|
|
34
19
|
}
|
|
35
|
-
|
|
20
|
+
logger.debug('attempting to get session from cookie');
|
|
21
|
+
if (!cookieJwt) {
|
|
22
|
+
logger.debug('Session cookie not found');
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const sdk = getGlobalSdk(config);
|
|
27
|
+
return await sdk.validateJwt(cookieJwt);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
logger.debug('Error getting session from cookie', err);
|
|
31
|
+
return undefined;
|
|
32
|
+
}
|
|
36
33
|
};
|
|
37
34
|
// returns the session token if it exists in the Authorization header or cookie
|
|
38
35
|
const session = async (config) => {
|
|
39
36
|
setLogger(config?.logLevel);
|
|
40
37
|
const reqHeaders = await headers();
|
|
41
|
-
|
|
38
|
+
const cookieJwt = (await cookies()).get(getSessionCookieName(config))?.value;
|
|
39
|
+
return getSessionFromAuthorizationOrCookie(reqHeaders.get('Authorization'), cookieJwt, config);
|
|
42
40
|
};
|
|
43
41
|
// returns the session token if it exists in the request Authorization header or cookie
|
|
44
42
|
const getSession = async (req, config) => {
|
|
45
43
|
setLogger(config?.logLevel);
|
|
46
44
|
const { authorization } = req.headers;
|
|
47
|
-
return getSessionFromAuthorizationOrCookie(typeof authorization === 'string' ? authorization : undefined,
|
|
45
|
+
return getSessionFromAuthorizationOrCookie(typeof authorization === 'string' ? authorization : undefined,
|
|
46
|
+
// Pages Router request - next/headers cookies() is not available here,
|
|
47
|
+
// so the session cookie must be read directly from the request
|
|
48
|
+
req.cookies?.[getSessionCookieName(config)], config);
|
|
48
49
|
};
|
|
49
50
|
|
|
50
51
|
export { getSession, session };
|
|
@@ -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 { 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\t// The name of the refresh token cookie\n\t// Defaults to 'DSR'\n\trefreshTokenCookieName?: string;\n};\n\nconst
|
|
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 { 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\t// The name of the refresh token cookie\n\t// Defaults to 'DSR'\n\trefreshTokenCookieName?: string;\n};\n\nconst getSessionCookieName = (config?: SessionConfig) =>\n\tconfig?.sessionCookieName || descopeSdk.SessionTokenCookieName;\n\n// tries to validate the Authorization header,\n// if it doesn't exist or is invalid, it will attempt to validate the session cookie\nconst getSessionFromAuthorizationOrCookie = async (\n\tauthorization: string | null | undefined,\n\tcookieJwt: string | undefined,\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tconst sessionJwt = authorization?.split(' ')[1];\n\tif (sessionJwt) {\n\t\ttry {\n\t\t\tconst sdk = getGlobalSdk(config);\n\t\t\treturn await sdk.validateJwt(sessionJwt);\n\t\t} catch (err) {\n\t\t\tlogger.debug('Error validating session from Authorization header', err);\n\t\t}\n\t}\n\n\tlogger.debug('attempting to get session from cookie');\n\tif (!cookieJwt) {\n\t\tlogger.debug('Session cookie not found');\n\t\treturn undefined;\n\t}\n\ttry {\n\t\tconst sdk = getGlobalSdk(config);\n\t\treturn await sdk.validateJwt(cookieJwt);\n\t} catch (err) {\n\t\tlogger.debug('Error getting session from cookie', err);\n\t\treturn undefined;\n\t}\n};\n\n// returns the session token if it exists in the Authorization header or cookie\nexport const session = async (\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tsetLogger(config?.logLevel);\n\tconst reqHeaders = await headers();\n\tconst cookieJwt = (await cookies()).get(getSessionCookieName(config))?.value;\n\treturn getSessionFromAuthorizationOrCookie(\n\t\treqHeaders.get('Authorization'),\n\t\tcookieJwt,\n\t\tconfig\n\t);\n};\n\n// returns the session token if it exists in the request Authorization header or cookie\nexport const getSession = async (\n\treq: NextApiRequest,\n\tconfig?: SessionConfig\n): Promise<AuthenticationInfo | undefined> => {\n\tsetLogger(config?.logLevel);\n\tconst { authorization } = req.headers;\n\treturn getSessionFromAuthorizationOrCookie(\n\t\ttypeof authorization === 'string' ? authorization : undefined,\n\t\t// Pages Router request - next/headers cookies() is not available here,\n\t\t// so the session cookie must be read directly from the request\n\t\treq.cookies?.[getSessionCookieName(config)],\n\t\tconfig\n\t);\n};\n"],"names":[],"mappings":";;;;;AAsBA,MAAM,oBAAoB,GAAG,CAAC,MAAsB,KACnD,MAAM,EAAE,iBAAiB,IAAI,UAAU,CAAC,sBAAsB,CAAC;AAEhE;AACA;AACA,MAAM,mCAAmC,GAAG,OAC3C,aAAwC,EACxC,SAA6B,EAC7B,MAAsB,KACsB;IAC5C,MAAM,UAAU,GAAG,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,UAAU,EAAE;AACf,QAAA,IAAI;AACH,YAAA,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACjC,YAAA,OAAO,MAAM,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;SACzC;QAAC,OAAO,GAAG,EAAE;AACb,YAAA,MAAM,CAAC,KAAK,CAAC,oDAAoD,EAAE,GAAG,CAAC,CAAC;SACxE;KACD;AAED,IAAA,MAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;IACtD,IAAI,CAAC,SAAS,EAAE;AACf,QAAA,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;AACzC,QAAA,OAAO,SAAS,CAAC;KACjB;AACD,IAAA,IAAI;AACH,QAAA,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;AACjC,QAAA,OAAO,MAAM,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;KACxC;IAAC,OAAO,GAAG,EAAE;AACb,QAAA,MAAM,CAAC,KAAK,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;AACvD,QAAA,OAAO,SAAS,CAAC;KACjB;AACF,CAAC,CAAC;AAEF;MACa,OAAO,GAAG,OACtB,MAAsB,KACsB;AAC5C,IAAA,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5B,IAAA,MAAM,UAAU,GAAG,MAAM,OAAO,EAAE,CAAC;AACnC,IAAA,MAAM,SAAS,GAAG,CAAC,MAAM,OAAO,EAAE,EAAE,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC;AAC7E,IAAA,OAAO,mCAAmC,CACzC,UAAU,CAAC,GAAG,CAAC,eAAe,CAAC,EAC/B,SAAS,EACT,MAAM,CACN,CAAC;AACH,EAAE;AAEF;AACa,MAAA,UAAU,GAAG,OACzB,GAAmB,EACnB,MAAsB,KACsB;AAC5C,IAAA,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC5B,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;AACtC,IAAA,OAAO,mCAAmC,CACzC,OAAO,aAAa,KAAK,QAAQ,GAAG,aAAa,GAAG,SAAS;;;AAG7D,IAAA,GAAG,CAAC,OAAO,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC,EAC3C,MAAM,CACN,CAAC;AACH;;;;"}
|