@frontegg/nextjs 9.0.4 → 9.0.5-alpha.11464183313
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/CHANGELOG.md +8 -0
- package/README.md +21 -6
- package/app/FronteggAppProvider.js +1 -1
- package/app/FronteggAppProvider.js.map +1 -1
- package/app/FronteggAppRouter.d.ts +7 -0
- package/app/FronteggAppRouter.js +25 -0
- package/app/FronteggAppRouter.js.map +1 -1
- package/app/getAppUrlForCustomLoginWithSubdomain.js +1 -1
- package/app/getAppUrlForCustomLoginWithSubdomain.js.map +1 -1
- package/app/helpers.d.ts +8 -2
- package/app/helpers.js +56 -11
- package/app/helpers.js.map +1 -1
- package/index.js +1 -1
- package/package.json +1 -1
- package/sdkVersion.js +1 -1
- package/sdkVersion.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
+
## [9.0.5](https://github.com/frontegg/frontegg-nextjs/compare/v9.0.4...v9.0.5) (2024-10-22)
|
|
4
|
+
|
|
5
|
+
- FR-18356 - Fixed validations localization override type
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### NextJS Wrapper 9.0.5:
|
|
9
|
+
- Add Support for NextJS 15
|
|
10
|
+
|
|
3
11
|
## [9.0.4](https://github.com/frontegg/frontegg-nextjs/compare/v9.0.3...v9.0.4) (2024-10-22)
|
|
4
12
|
|
|
5
13
|
- FR-18356 - Fixed validations localization override type
|
package/README.md
CHANGED
|
@@ -29,7 +29,7 @@ and integrate them into their SaaS portals in up to 5 lines of code.
|
|
|
29
29
|
|
|
30
30
|
To Add Frontegg to your existing Next.JS project, follow below steps:
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Use package manager to install Frontegg Next.JS library.
|
|
33
33
|
|
|
34
34
|
```bash
|
|
35
35
|
npm install --save @frontegg/nextjs
|
|
@@ -41,7 +41,10 @@ To Add Frontegg to your existing Next.JS project, follow below steps:
|
|
|
41
41
|
yarn add --save @frontegg/nextjs
|
|
42
42
|
```
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
|
|
45
|
+
**If you're using the App Directory architecture, you can skip the following Pages architecture steps and refer to the [AppDir guide](#nextjs-appdir-architecture) instead.**
|
|
46
|
+
|
|
47
|
+
1. Wrap the default export with `withFronteggApp` in `./pages/_app.tsx`:
|
|
45
48
|
|
|
46
49
|
```tsx
|
|
47
50
|
// ./pages/_app.tsx
|
|
@@ -58,7 +61,7 @@ To Add Frontegg to your existing Next.JS project, follow below steps:
|
|
|
58
61
|
});
|
|
59
62
|
```
|
|
60
63
|
|
|
61
|
-
|
|
64
|
+
2. Create files for frontegg middleware under `./pages/api/frontegg/[...frontegg-middleware].ts`:
|
|
62
65
|
|
|
63
66
|
```tsx
|
|
64
67
|
// ./pages/api/frontegg/[...frontegg-middleware].ts
|
|
@@ -66,7 +69,7 @@ To Add Frontegg to your existing Next.JS project, follow below steps:
|
|
|
66
69
|
export { fronteggMiddleware as default } from '@frontegg/nextjs/middleware';
|
|
67
70
|
```
|
|
68
71
|
|
|
69
|
-
|
|
72
|
+
3. Create placeholder pages for frontegg router under `./pages/[...frontegg-router].tsx`:
|
|
70
73
|
|
|
71
74
|
```tsx
|
|
72
75
|
// ./pages/[...frontegg-router].tsx
|
|
@@ -238,7 +241,7 @@ export const getServerSideProps: GetServerSideProps = withSSRSession(
|
|
|
238
241
|
);
|
|
239
242
|
```
|
|
240
243
|
|
|
241
|
-
## Next.js
|
|
244
|
+
## Next.js (AppDir architecture)
|
|
242
245
|
### wrapping your application
|
|
243
246
|
```tsx
|
|
244
247
|
// ./app/layout.tsx
|
|
@@ -256,9 +259,21 @@ export default function RootLayout({ children }: { children: React.ReactNode })
|
|
|
256
259
|
}
|
|
257
260
|
```
|
|
258
261
|
|
|
259
|
-
###
|
|
262
|
+
### Routing
|
|
263
|
+
|
|
264
|
+
|
|
260
265
|
```tsx
|
|
261
266
|
// ./app/[...frontegg-router]/page.tsx
|
|
267
|
+
|
|
268
|
+
/**
|
|
269
|
+
* For Next.js 15+ use the following FronteggAppRouterAsync as default export
|
|
270
|
+
*/
|
|
271
|
+
export { FronteggAppRouterAsync as default } from '@frontegg/nextjs/app';
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
/**
|
|
275
|
+
* For Next.js 14 and below use the following FronteggAppRouter as default export
|
|
276
|
+
*/
|
|
262
277
|
export { FronteggAppRouter as default } from '@frontegg/nextjs/app';
|
|
263
278
|
```
|
|
264
279
|
|
|
@@ -25,7 +25,7 @@ const FronteggAppProvider = async options => {
|
|
|
25
25
|
appEnvConfig = (0, _objectWithoutPropertiesLoose2.default)(_config$appEnvConfig, _excluded);
|
|
26
26
|
let userData = await (0, _fetchUserData.default)({
|
|
27
27
|
getSession: _helpers.getAppSession,
|
|
28
|
-
getHeaders: _helpers.
|
|
28
|
+
getHeaders: _helpers.getAppHeaders
|
|
29
29
|
});
|
|
30
30
|
const subDomainAppUrl = await (0, _getAppUrlForCustomLoginWithSubdomain.getAppUrlForCustomLoginWithSubdomain)((_options$customLoginO = options.customLoginOptions) == null ? void 0 : _options$customLoginO.subDomainIndex);
|
|
31
31
|
if (process.env['FRONTEGG_SECURE_JWT_ENABLED'] === 'true' && userData) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FronteggAppProvider.js","names":["_react","_interopRequireDefault","require","_ClientFronteggProvider","_helpers","_config","_fetchUserData","_getAppUrlForCustomLoginWithSubdomain","_helpers2","_jsxRuntime","_excluded","FronteggAppProvider","options","_options$customLoginO","_options$secureJwtEna","_config$appEnvConfig","config","appEnvConfig","envAppUrl","_objectWithoutPropertiesLoose2","default","userData","fetchUserData","getSession","getAppSession","getHeaders","
|
|
1
|
+
{"version":3,"file":"FronteggAppProvider.js","names":["_react","_interopRequireDefault","require","_ClientFronteggProvider","_helpers","_config","_fetchUserData","_getAppUrlForCustomLoginWithSubdomain","_helpers2","_jsxRuntime","_excluded","FronteggAppProvider","options","_options$customLoginO","_options$secureJwtEna","_config$appEnvConfig","config","appEnvConfig","envAppUrl","_objectWithoutPropertiesLoose2","default","userData","fetchUserData","getSession","getAppSession","getHeaders","getAppHeaders","subDomainAppUrl","getAppUrlForCustomLoginWithSubdomain","customLoginOptions","subDomainIndex","process","env","_userData","removeJwtSignatureFrom","session","providerProps","_extends2","secureJwtEnabled","jsx","ClientFronteggProvider","exports"],"sources":["../../../../packages/nextjs/src/app/FronteggAppProvider.tsx"],"sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport { ClientFronteggProvider } from './ClientFronteggProvider';\nimport { getAppHeaders, getAppSession } from './helpers';\nimport config from '../config';\nimport fetchUserData from '../utils/fetchUserData';\nimport { ClientFronteggProviderProps } from '../types';\nimport { getAppUrlForCustomLoginWithSubdomain } from './getAppUrlForCustomLoginWithSubdomain';\nimport { removeJwtSignatureFrom } from '../middleware/helpers';\n\nexport type FronteggAppProviderProps = PropsWithChildren<\n Omit<ClientFronteggProviderProps, 'contextOptions' | 'envAppUrl' | 'envBaseUrl' | 'envClientId'>\n>;\n\nexport const FronteggAppProvider = async (options: FronteggAppProviderProps) => {\n const { envAppUrl, ...appEnvConfig } = config.appEnvConfig;\n let userData = await fetchUserData({ getSession: getAppSession, getHeaders: getAppHeaders });\n const subDomainAppUrl = await getAppUrlForCustomLoginWithSubdomain(options.customLoginOptions?.subDomainIndex);\n\n if (process.env['FRONTEGG_SECURE_JWT_ENABLED'] === 'true' && userData) {\n userData = removeJwtSignatureFrom(userData);\n userData.session = removeJwtSignatureFrom(userData?.session);\n }\n const providerProps = {\n ...appEnvConfig,\n ...userData,\n ...options,\n envAppUrl: subDomainAppUrl ?? envAppUrl,\n secureJwtEnabled: options.secureJwtEnabled ?? false,\n };\n\n return <ClientFronteggProvider {...providerProps} />;\n};\n"],"mappings":";;;;;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,uBAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,OAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,cAAA,GAAAL,sBAAA,CAAAC,OAAA;AAEA,IAAAK,qCAAA,GAAAL,OAAA;AACA,IAAAM,SAAA,GAAAN,OAAA;AAA+D,IAAAO,WAAA,GAAAP,OAAA;AAAA,MAAAQ,SAAA;AAMxD,MAAMC,mBAAmB,GAAG,MAAOC,OAAiC,IAAK;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EAC9E,MAAAC,oBAAA,GAAuCC,eAAM,CAACC,YAAY;IAApD;MAAEC;IAA2B,CAAC,GAAAH,oBAAA;IAAdE,YAAY,OAAAE,8BAAA,CAAAC,OAAA,EAAAL,oBAAA,EAAAL,SAAA;EAClC,IAAIW,QAAQ,GAAG,MAAM,IAAAC,sBAAa,EAAC;IAAEC,UAAU,EAAEC,sBAAa;IAAEC,UAAU,EAAEC;EAAc,CAAC,CAAC;EAC5F,MAAMC,eAAe,GAAG,MAAM,IAAAC,0EAAoC,GAAAf,qBAAA,GAACD,OAAO,CAACiB,kBAAkB,qBAA1BhB,qBAAA,CAA4BiB,cAAc,CAAC;EAE9G,IAAIC,OAAO,CAACC,GAAG,CAAC,6BAA6B,CAAC,KAAK,MAAM,IAAIX,QAAQ,EAAE;IAAA,IAAAY,SAAA;IACrEZ,QAAQ,GAAG,IAAAa,gCAAsB,EAACb,QAAQ,CAAC;IAC3CA,QAAQ,CAACc,OAAO,GAAG,IAAAD,gCAAsB,GAAAD,SAAA,GAACZ,QAAQ,qBAARY,SAAA,CAAUE,OAAO,CAAC;EAC9D;EACA,MAAMC,aAAa,OAAAC,SAAA,CAAAjB,OAAA,MACdH,YAAY,EACZI,QAAQ,EACRT,OAAO;IACVM,SAAS,EAAES,eAAe,WAAfA,eAAe,GAAIT,SAAS;IACvCoB,gBAAgB,GAAAxB,qBAAA,GAAEF,OAAO,CAAC0B,gBAAgB,YAAAxB,qBAAA,GAAI;EAAK,EACpD;EAED,oBAAO,IAAAL,WAAA,CAAA8B,GAAA,EAACpC,uBAAA,CAAAqC,sBAAsB,MAAAH,SAAA,CAAAjB,OAAA,MAAKgB,aAAa,EAAI;AACtD,CAAC;AAACK,OAAA,CAAA9B,mBAAA,GAAAA,mBAAA"}
|
|
@@ -7,4 +7,11 @@ interface FronteggRouterProps {
|
|
|
7
7
|
searchParams?: ParsedUrlQuery;
|
|
8
8
|
}
|
|
9
9
|
export declare function FronteggAppRouter(props: FronteggRouterProps): JSX.Element | null;
|
|
10
|
+
interface FronteggRouterAsyncProps {
|
|
11
|
+
params: Promise<ParsedUrlQuery & {
|
|
12
|
+
'frontegg-router'?: string[];
|
|
13
|
+
}>;
|
|
14
|
+
searchParams?: Promise<ParsedUrlQuery>;
|
|
15
|
+
}
|
|
16
|
+
export declare function FronteggAppRouterAsync(props: FronteggRouterAsyncProps): Promise<JSX.Element | null>;
|
|
10
17
|
export {};
|
package/app/FronteggAppRouter.js
CHANGED
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.FronteggAppRouter = FronteggAppRouter;
|
|
8
|
+
exports.FronteggAppRouterAsync = FronteggAppRouterAsync;
|
|
8
9
|
var _navigation = require("next/navigation");
|
|
9
10
|
var _routing = require("../utils/routing");
|
|
10
11
|
var _FronteggRouterBase = require("../common/FronteggRouterBase");
|
|
@@ -37,4 +38,28 @@ function FronteggAppRouter(props) {
|
|
|
37
38
|
isAppDirEnabled: true
|
|
38
39
|
});
|
|
39
40
|
}
|
|
41
|
+
async function FronteggAppRouterAsync(props) {
|
|
42
|
+
const params = await props.params;
|
|
43
|
+
const searchParams = await props.searchParams;
|
|
44
|
+
const pathArr = params['frontegg-router'] || [];
|
|
45
|
+
let pathname = `/${pathArr.join('/')}`;
|
|
46
|
+
if (!pathname || pathname.startsWith('/_next/data')) {
|
|
47
|
+
if (searchParams) {
|
|
48
|
+
const query = searchParams[Object.keys(searchParams)[0]];
|
|
49
|
+
pathname = `/${Array.isArray(query) ? query.join('/') : query}`;
|
|
50
|
+
} else {
|
|
51
|
+
(0, _navigation.notFound)();
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (!(0, _routing.isAuthRoute)(pathname)) {
|
|
56
|
+
(0, _navigation.notFound)();
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
return /*#__PURE__*/(0, _jsxRuntime.jsx)(_FronteggRouterBase.FronteggRouterBase, {
|
|
60
|
+
pathArr: pathArr,
|
|
61
|
+
queryParams: searchParams,
|
|
62
|
+
isAppDirEnabled: true
|
|
63
|
+
});
|
|
64
|
+
}
|
|
40
65
|
//# sourceMappingURL=FronteggAppRouter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FronteggAppRouter.js","names":["_navigation","require","_routing","_FronteggRouterBase","_react","_interopRequireDefault","_jsxRuntime","FronteggAppRouter","props","params","pathArr","searchParams","pathname","join","startsWith","query","Object","keys","Array","isArray","notFound","isAuthRoute","jsx","FronteggRouterBase","queryParams","isAppDirEnabled"],"sources":["../../../../packages/nextjs/src/app/FronteggAppRouter.tsx"],"sourcesContent":["import { notFound } from 'next/navigation';\nimport { ParsedUrlQuery } from 'querystring';\nimport { isAuthRoute } from '../utils/routing';\nimport { FronteggRouterBase } from '../common/FronteggRouterBase';\nimport React from 'react';\n\ninterface FronteggRouterProps {\n params: ParsedUrlQuery & { 'frontegg-router'?: string[] };\n searchParams?: ParsedUrlQuery;\n}\n\nexport function FronteggAppRouter(props: FronteggRouterProps) {\n const {\n params: { 'frontegg-router': pathArr = [] },\n searchParams,\n } = props;\n\n let pathname = `/${pathArr.join('/')}`;\n if (!pathname || pathname.startsWith('/_next/data')) {\n if (searchParams) {\n const query = searchParams[Object.keys(searchParams)[0]];\n pathname = `/${Array.isArray(query) ? query.join('/') : query}`;\n } else {\n notFound();\n return null;\n }\n }\n\n if (!isAuthRoute(pathname)) {\n notFound();\n return null;\n }\n\n return <FronteggRouterBase pathArr={pathArr} queryParams={searchParams} isAppDirEnabled />;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"FronteggAppRouter.js","names":["_navigation","require","_routing","_FronteggRouterBase","_react","_interopRequireDefault","_jsxRuntime","FronteggAppRouter","props","params","pathArr","searchParams","pathname","join","startsWith","query","Object","keys","Array","isArray","notFound","isAuthRoute","jsx","FronteggRouterBase","queryParams","isAppDirEnabled","FronteggAppRouterAsync"],"sources":["../../../../packages/nextjs/src/app/FronteggAppRouter.tsx"],"sourcesContent":["import { notFound } from 'next/navigation';\nimport { ParsedUrlQuery } from 'querystring';\nimport { isAuthRoute } from '../utils/routing';\nimport { FronteggRouterBase } from '../common/FronteggRouterBase';\nimport React from 'react';\n\ninterface FronteggRouterProps {\n params: ParsedUrlQuery & { 'frontegg-router'?: string[] };\n searchParams?: ParsedUrlQuery;\n}\n\nexport function FronteggAppRouter(props: FronteggRouterProps) {\n const {\n params: { 'frontegg-router': pathArr = [] },\n searchParams,\n } = props;\n\n let pathname = `/${pathArr.join('/')}`;\n if (!pathname || pathname.startsWith('/_next/data')) {\n if (searchParams) {\n const query = searchParams[Object.keys(searchParams)[0]];\n pathname = `/${Array.isArray(query) ? query.join('/') : query}`;\n } else {\n notFound();\n return null;\n }\n }\n\n if (!isAuthRoute(pathname)) {\n notFound();\n return null;\n }\n\n return <FronteggRouterBase pathArr={pathArr} queryParams={searchParams} isAppDirEnabled />;\n}\n\ninterface FronteggRouterAsyncProps {\n params: Promise<ParsedUrlQuery & { 'frontegg-router'?: string[] }>;\n searchParams?: Promise<ParsedUrlQuery>;\n}\nexport async function FronteggAppRouterAsync(props: FronteggRouterAsyncProps) {\n const params = await props.params;\n const searchParams = await props.searchParams;\n\n const pathArr = params['frontegg-router'] || [];\n\n let pathname = `/${pathArr.join('/')}`;\n if (!pathname || pathname.startsWith('/_next/data')) {\n if (searchParams) {\n const query = searchParams[Object.keys(searchParams)[0]];\n pathname = `/${Array.isArray(query) ? query.join('/') : query}`;\n } else {\n notFound();\n return null;\n }\n }\n\n if (!isAuthRoute(pathname)) {\n notFound();\n return null;\n }\n\n return <FronteggRouterBase pathArr={pathArr} queryParams={searchParams} isAppDirEnabled />;\n}\n"],"mappings":";;;;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AAEA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,mBAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAA0B,IAAAK,WAAA,GAAAL,OAAA;AAOnB,SAASM,iBAAiBA,CAACC,KAA0B,EAAE;EAC5D,MAAM;IACJC,MAAM,EAAE;MAAE,iBAAiB,EAAEC,OAAO,GAAG;IAAG,CAAC;IAC3CC;EACF,CAAC,GAAGH,KAAK;EAET,IAAII,QAAQ,GAAI,IAAGF,OAAO,CAACG,IAAI,CAAC,GAAG,CAAE,EAAC;EACtC,IAAI,CAACD,QAAQ,IAAIA,QAAQ,CAACE,UAAU,CAAC,aAAa,CAAC,EAAE;IACnD,IAAIH,YAAY,EAAE;MAChB,MAAMI,KAAK,GAAGJ,YAAY,CAACK,MAAM,CAACC,IAAI,CAACN,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;MACxDC,QAAQ,GAAI,IAAGM,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,GAAGA,KAAK,CAACF,IAAI,CAAC,GAAG,CAAC,GAAGE,KAAM,EAAC;IACjE,CAAC,MAAM;MACL,IAAAK,oBAAQ,GAAE;MACV,OAAO,IAAI;IACb;EACF;EAEA,IAAI,CAAC,IAAAC,oBAAW,EAACT,QAAQ,CAAC,EAAE;IAC1B,IAAAQ,oBAAQ,GAAE;IACV,OAAO,IAAI;EACb;EAEA,oBAAO,IAAAd,WAAA,CAAAgB,GAAA,EAACnB,mBAAA,CAAAoB,kBAAkB;IAACb,OAAO,EAAEA,OAAQ;IAACc,WAAW,EAAEb,YAAa;IAACc,eAAe;EAAA,EAAG;AAC5F;AAMO,eAAeC,sBAAsBA,CAAClB,KAA+B,EAAE;EAC5E,MAAMC,MAAM,GAAG,MAAMD,KAAK,CAACC,MAAM;EACjC,MAAME,YAAY,GAAG,MAAMH,KAAK,CAACG,YAAY;EAE7C,MAAMD,OAAO,GAAGD,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE;EAE/C,IAAIG,QAAQ,GAAI,IAAGF,OAAO,CAACG,IAAI,CAAC,GAAG,CAAE,EAAC;EACtC,IAAI,CAACD,QAAQ,IAAIA,QAAQ,CAACE,UAAU,CAAC,aAAa,CAAC,EAAE;IACnD,IAAIH,YAAY,EAAE;MAChB,MAAMI,KAAK,GAAGJ,YAAY,CAACK,MAAM,CAACC,IAAI,CAACN,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;MACxDC,QAAQ,GAAI,IAAGM,KAAK,CAACC,OAAO,CAACJ,KAAK,CAAC,GAAGA,KAAK,CAACF,IAAI,CAAC,GAAG,CAAC,GAAGE,KAAM,EAAC;IACjE,CAAC,MAAM;MACL,IAAAK,oBAAQ,GAAE;MACV,OAAO,IAAI;IACb;EACF;EAEA,IAAI,CAAC,IAAAC,oBAAW,EAACT,QAAQ,CAAC,EAAE;IAC1B,IAAAQ,oBAAQ,GAAE;IACV,OAAO,IAAI;EACb;EAEA,oBAAO,IAAAd,WAAA,CAAAgB,GAAA,EAACnB,mBAAA,CAAAoB,kBAAkB;IAACb,OAAO,EAAEA,OAAQ;IAACc,WAAW,EAAEb,YAAa;IAACc,eAAe;EAAA,EAAG;AAC5F"}
|
|
@@ -38,7 +38,7 @@ const getAppUrlForCustomLoginWithSubdomain = async subDomainIndex => {
|
|
|
38
38
|
if (subDomainIndex === undefined) {
|
|
39
39
|
return undefined;
|
|
40
40
|
}
|
|
41
|
-
const headers = (0, _helpers.getAppHeaders)();
|
|
41
|
+
const headers = await (0, _helpers.getAppHeaders)();
|
|
42
42
|
const alias = getTenantAliasFromHeaders(headers, subDomainIndex);
|
|
43
43
|
if (!alias) {
|
|
44
44
|
resetGlobalCustomLoginAppUrl();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAppUrlForCustomLoginWithSubdomain.js","names":["_api","require","_utils","_helpers","getTenantAliasFromHeaders","headers","subDomainIndex","_headers$host","_headers$host$split","_headers$host$split$s","host","split","slice","exports","resetGlobalCustomLoginAppUrl","global","customLoginAppUrl","undefined","getAppUrlForCustomLoginWithSubdomain","getAppHeaders","alias","requestHeaders","_extends2","default","CUSTOM_LOGIN_HEADER","res","getPublicSettings","catch","subDomainAppUrl","applicationUrl"],"sources":["../../../../packages/nextjs/src/app/getAppUrlForCustomLoginWithSubdomain.ts"],"sourcesContent":["import { getPublicSettings } from '../api';\nimport { CUSTOM_LOGIN_HEADER } from '../api/utils';\nimport { getAppHeaders } from './helpers';\n\n/**\n * get the tenant alias from the request headers with the host and subdomain index\n * @param headers - the request headers\n * @param subDomainIndex - the subdomain index to specify the tenant sub-domain\n * @returns the alias for custom login with subdomain or undefined if not exist\n */\nexport const getTenantAliasFromHeaders = (headers: Record<string, string>, subDomainIndex: number) => {\n return headers?.host?.split('.')?.slice(0, -2)?.[subDomainIndex];\n};\n\n/**\n * set the global.customLoginAppUrl to undefined in order to allow switching from tenant to vendor app\n */\nexport const resetGlobalCustomLoginAppUrl = () => {\n global.customLoginAppUrl = undefined;\n};\n\n/**\n * get the app url for custom login with subdomain and set it to the global customLoginAppUrl\n * @param subDomainIndex - the index of the subdomain in the host\n * @returns Promise of string or undefined, the app url for custom login with subdomain or undefined if the sub-domain index/app url/alias is not exist\n * @sideEffect - set the global.customLoginAppUrl to the app url for custom login with subdomain */\n\nexport const getAppUrlForCustomLoginWithSubdomain = async (subDomainIndex?: number): Promise<string | undefined> => {\n if (subDomainIndex === undefined) {\n return undefined;\n }\n\n const headers = getAppHeaders();\n const alias = getTenantAliasFromHeaders(headers, subDomainIndex);\n if (!alias) {\n resetGlobalCustomLoginAppUrl();\n return undefined;\n }\n const requestHeaders = { ...headers, [CUSTOM_LOGIN_HEADER]: alias };\n const res = await getPublicSettings(requestHeaders).catch(() => undefined);\n const subDomainAppUrl = res?.applicationUrl;\n if (!subDomainAppUrl) {\n resetGlobalCustomLoginAppUrl();\n return undefined;\n }\n global.customLoginAppUrl = subDomainAppUrl;\n return subDomainAppUrl;\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,yBAAyB,GAAGA,CAACC,OAA+B,EAAEC,cAAsB,KAAK;EAAA,IAAAC,aAAA,EAAAC,mBAAA,EAAAC,qBAAA;EACpG,OAAOJ,OAAO,qBAAAE,aAAA,GAAPF,OAAO,CAAEK,IAAI,sBAAAF,mBAAA,GAAbD,aAAA,CAAeI,KAAK,CAAC,GAAG,CAAC,sBAAAF,qBAAA,GAAzBD,mBAAA,CAA2BI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAvCH,qBAAA,CAA0CH,cAAc,CAAC;AAClE,CAAC;;AAED;AACA;AACA;AAFAO,OAAA,CAAAT,yBAAA,GAAAA,yBAAA;AAGO,MAAMU,4BAA4B,GAAGA,CAAA,KAAM;EAChDC,MAAM,CAACC,iBAAiB,GAAGC,SAAS;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AAJAJ,OAAA,CAAAC,4BAAA,GAAAA,4BAAA;AAMO,MAAMI,oCAAoC,GAAG,MAAOZ,cAAuB,IAAkC;EAClH,IAAIA,cAAc,KAAKW,SAAS,EAAE;IAChC,OAAOA,SAAS;EAClB;EAEA,MAAMZ,OAAO,GAAG,IAAAc,sBAAa,GAAE;
|
|
1
|
+
{"version":3,"file":"getAppUrlForCustomLoginWithSubdomain.js","names":["_api","require","_utils","_helpers","getTenantAliasFromHeaders","headers","subDomainIndex","_headers$host","_headers$host$split","_headers$host$split$s","host","split","slice","exports","resetGlobalCustomLoginAppUrl","global","customLoginAppUrl","undefined","getAppUrlForCustomLoginWithSubdomain","getAppHeaders","alias","requestHeaders","_extends2","default","CUSTOM_LOGIN_HEADER","res","getPublicSettings","catch","subDomainAppUrl","applicationUrl"],"sources":["../../../../packages/nextjs/src/app/getAppUrlForCustomLoginWithSubdomain.ts"],"sourcesContent":["import { getPublicSettings } from '../api';\nimport { CUSTOM_LOGIN_HEADER } from '../api/utils';\nimport { getAppHeaders } from './helpers';\n\n/**\n * get the tenant alias from the request headers with the host and subdomain index\n * @param headers - the request headers\n * @param subDomainIndex - the subdomain index to specify the tenant sub-domain\n * @returns the alias for custom login with subdomain or undefined if not exist\n */\nexport const getTenantAliasFromHeaders = (headers: Record<string, string>, subDomainIndex: number) => {\n return headers?.host?.split('.')?.slice(0, -2)?.[subDomainIndex];\n};\n\n/**\n * set the global.customLoginAppUrl to undefined in order to allow switching from tenant to vendor app\n */\nexport const resetGlobalCustomLoginAppUrl = () => {\n global.customLoginAppUrl = undefined;\n};\n\n/**\n * get the app url for custom login with subdomain and set it to the global customLoginAppUrl\n * @param subDomainIndex - the index of the subdomain in the host\n * @returns Promise of string or undefined, the app url for custom login with subdomain or undefined if the sub-domain index/app url/alias is not exist\n * @sideEffect - set the global.customLoginAppUrl to the app url for custom login with subdomain */\n\nexport const getAppUrlForCustomLoginWithSubdomain = async (subDomainIndex?: number): Promise<string | undefined> => {\n if (subDomainIndex === undefined) {\n return undefined;\n }\n\n const headers = await getAppHeaders();\n const alias = getTenantAliasFromHeaders(headers, subDomainIndex);\n if (!alias) {\n resetGlobalCustomLoginAppUrl();\n return undefined;\n }\n const requestHeaders = { ...headers, [CUSTOM_LOGIN_HEADER]: alias };\n const res = await getPublicSettings(requestHeaders).catch(() => undefined);\n const subDomainAppUrl = res?.applicationUrl;\n if (!subDomainAppUrl) {\n resetGlobalCustomLoginAppUrl();\n return undefined;\n }\n global.customLoginAppUrl = subDomainAppUrl;\n return subDomainAppUrl;\n};\n"],"mappings":";;;;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMG,yBAAyB,GAAGA,CAACC,OAA+B,EAAEC,cAAsB,KAAK;EAAA,IAAAC,aAAA,EAAAC,mBAAA,EAAAC,qBAAA;EACpG,OAAOJ,OAAO,qBAAAE,aAAA,GAAPF,OAAO,CAAEK,IAAI,sBAAAF,mBAAA,GAAbD,aAAA,CAAeI,KAAK,CAAC,GAAG,CAAC,sBAAAF,qBAAA,GAAzBD,mBAAA,CAA2BI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAvCH,qBAAA,CAA0CH,cAAc,CAAC;AAClE,CAAC;;AAED;AACA;AACA;AAFAO,OAAA,CAAAT,yBAAA,GAAAA,yBAAA;AAGO,MAAMU,4BAA4B,GAAGA,CAAA,KAAM;EAChDC,MAAM,CAACC,iBAAiB,GAAGC,SAAS;AACtC,CAAC;;AAED;AACA;AACA;AACA;AACA;AAJAJ,OAAA,CAAAC,4BAAA,GAAAA,4BAAA;AAMO,MAAMI,oCAAoC,GAAG,MAAOZ,cAAuB,IAAkC;EAClH,IAAIA,cAAc,KAAKW,SAAS,EAAE;IAChC,OAAOA,SAAS;EAClB;EAEA,MAAMZ,OAAO,GAAG,MAAM,IAAAc,sBAAa,GAAE;EACrC,MAAMC,KAAK,GAAGhB,yBAAyB,CAACC,OAAO,EAAEC,cAAc,CAAC;EAChE,IAAI,CAACc,KAAK,EAAE;IACVN,4BAA4B,EAAE;IAC9B,OAAOG,SAAS;EAClB;EACA,MAAMI,cAAc,OAAAC,SAAA,CAAAC,OAAA,MAAQlB,OAAO;IAAE,CAACmB,0BAAmB,GAAGJ;EAAK,EAAE;EACnE,MAAMK,GAAG,GAAG,MAAM,IAAAC,sBAAiB,EAACL,cAAc,CAAC,CAACM,KAAK,CAAC,MAAMV,SAAS,CAAC;EAC1E,MAAMW,eAAe,GAAGH,GAAG,oBAAHA,GAAG,CAAEI,cAAc;EAC3C,IAAI,CAACD,eAAe,EAAE;IACpBd,4BAA4B,EAAE;IAC9B,OAAOG,SAAS;EAClB;EACAF,MAAM,CAACC,iBAAiB,GAAGY,eAAe;EAC1C,OAAOA,eAAe;AACxB,CAAC;AAACf,OAAA,CAAAK,oCAAA,GAAAA,oCAAA"}
|
package/app/helpers.d.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { FronteggUserSession, FronteggUserTokens } from '../types';
|
|
2
|
+
/**
|
|
3
|
+
* Support for Next.js 15 breaking changes, where props.params is now a promise-based function
|
|
4
|
+
* for more info: https://nextjs.org/docs/messages/sync-dynamic-apis
|
|
5
|
+
* @param obj
|
|
6
|
+
* @param key
|
|
7
|
+
*/
|
|
8
|
+
export declare function handleOptionalPromiseObject(obj: any, key: string): Promise<any>;
|
|
2
9
|
export declare const getAppSession: () => Promise<import("../types").FronteggNextJSSession | undefined>;
|
|
3
|
-
export declare const getAppHeaders: () => Record<string, string
|
|
4
|
-
export declare const getAppHeadersPromise: () => Promise<Record<string, string>>;
|
|
10
|
+
export declare const getAppHeaders: () => Promise<Record<string, string>>;
|
|
5
11
|
export declare function getAppUserSession(): Promise<FronteggUserSession | undefined>;
|
|
6
12
|
export declare function getAppUserTokens(): Promise<FronteggUserTokens | undefined>;
|
package/app/helpers.js
CHANGED
|
@@ -4,32 +4,77 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.getAppSession = exports.
|
|
7
|
+
exports.getAppSession = exports.getAppHeaders = void 0;
|
|
8
8
|
exports.getAppUserSession = getAppUserSession;
|
|
9
9
|
exports.getAppUserTokens = getAppUserTokens;
|
|
10
|
+
exports.handleOptionalPromiseObject = handleOptionalPromiseObject;
|
|
10
11
|
var _headers = require("next/headers");
|
|
11
12
|
var _cookies = _interopRequireDefault(require("../utils/cookies"));
|
|
12
13
|
var _createSession = _interopRequireDefault(require("../utils/createSession"));
|
|
13
14
|
var _encryption = _interopRequireDefault(require("../utils/encryption"));
|
|
14
|
-
|
|
15
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Support for Next.js 15 breaking changes, where props.params is now a promise-based function
|
|
17
|
+
* for more info: https://nextjs.org/docs/messages/sync-dynamic-apis
|
|
18
|
+
* @param obj
|
|
19
|
+
* @param key
|
|
20
|
+
*/
|
|
21
|
+
async function handleOptionalPromiseObject(obj, key) {
|
|
22
|
+
let value;
|
|
23
|
+
if (typeof obj[key] === 'function') {
|
|
24
|
+
var _obj$key;
|
|
25
|
+
// In case props.params is now a promise-based function
|
|
26
|
+
value = await (obj == null ? void 0 : (_obj$key = obj[key]) == null ? void 0 : _obj$key.call(obj));
|
|
27
|
+
} else {
|
|
28
|
+
// If props.params is still an object
|
|
29
|
+
value = obj == null ? void 0 : obj[key];
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Support for Next.js 15 breaking changes, where cookies() are now promise-based functions
|
|
36
|
+
* for more info: https://nextjs.org/docs/messages/sync-dynamic-apis
|
|
37
|
+
* @param func
|
|
38
|
+
*/
|
|
39
|
+
async function getRequestCookies() {
|
|
40
|
+
let value = (0, _headers.cookies)();
|
|
41
|
+
|
|
42
|
+
// noinspection SuspiciousTypeOfGuard
|
|
43
|
+
if (value instanceof Promise) {
|
|
44
|
+
return await value;
|
|
45
|
+
}
|
|
46
|
+
return value;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Support for Next.js 15 breaking changes, where cookies() are now promise-based functions
|
|
51
|
+
* for more info: https://nextjs.org/docs/messages/sync-dynamic-apis
|
|
52
|
+
* @param func
|
|
53
|
+
*/
|
|
54
|
+
async function getRequestHeaders() {
|
|
55
|
+
let value = (0, _headers.headers)();
|
|
56
|
+
|
|
57
|
+
// noinspection SuspiciousTypeOfGuard
|
|
58
|
+
if (value instanceof Promise) {
|
|
59
|
+
return await value;
|
|
60
|
+
}
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
const getCookie = async () => {
|
|
64
|
+
const allCookies = (await getRequestCookies()).getAll();
|
|
16
65
|
return _cookies.default.parseCookieFromArray(allCookies);
|
|
17
66
|
};
|
|
18
|
-
const getAppSession = () => {
|
|
19
|
-
const cookies = getCookie();
|
|
67
|
+
const getAppSession = async () => {
|
|
68
|
+
const cookies = await getCookie();
|
|
20
69
|
return (0, _createSession.default)(cookies, _encryption.default);
|
|
21
70
|
};
|
|
22
71
|
exports.getAppSession = getAppSession;
|
|
23
|
-
const getAppHeaders = () => {
|
|
72
|
+
const getAppHeaders = async () => {
|
|
24
73
|
const reqHeaders = {};
|
|
25
|
-
(
|
|
74
|
+
(await getRequestHeaders()).forEach((value, key) => reqHeaders[key] = value);
|
|
26
75
|
return reqHeaders;
|
|
27
76
|
};
|
|
28
77
|
exports.getAppHeaders = getAppHeaders;
|
|
29
|
-
const getAppHeadersPromise = async () => {
|
|
30
|
-
return getAppHeaders();
|
|
31
|
-
};
|
|
32
|
-
exports.getAppHeadersPromise = getAppHeadersPromise;
|
|
33
78
|
async function getAppUserSession() {
|
|
34
79
|
const session = await getAppSession();
|
|
35
80
|
return session == null ? void 0 : session.user;
|
package/app/helpers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","names":["_headers","require","_cookies","_interopRequireDefault","_createSession","_encryption","
|
|
1
|
+
{"version":3,"file":"helpers.js","names":["_headers","require","_cookies","_interopRequireDefault","_createSession","_encryption","handleOptionalPromiseObject","obj","key","value","_obj$key","call","getRequestCookies","cookies","Promise","getRequestHeaders","headers","getCookie","allCookies","getAll","CookieManager","parseCookieFromArray","getAppSession","createSession","encryption","exports","getAppHeaders","reqHeaders","forEach","getAppUserSession","session","user","getAppUserTokens","undefined","accessToken","refreshToken"],"sources":["../../../../packages/nextjs/src/app/helpers.ts"],"sourcesContent":["import { cookies, headers } from 'next/headers';\nimport CookieManager from '../utils/cookies';\nimport createSession from '../utils/createSession';\nimport encryption from '../utils/encryption';\nimport { FronteggUserSession, FronteggUserTokens } from '../types';\n\n/**\n * Support for Next.js 15 breaking changes, where props.params is now a promise-based function\n * for more info: https://nextjs.org/docs/messages/sync-dynamic-apis\n * @param obj\n * @param key\n */\nexport async function handleOptionalPromiseObject(obj: any, key: string) {\n let value;\n\n if (typeof obj[key] === 'function') {\n // In case props.params is now a promise-based function\n value = await obj?.[key]?.();\n } else {\n // If props.params is still an object\n value = obj?.[key];\n }\n\n return value;\n}\n\n/**\n * Support for Next.js 15 breaking changes, where cookies() are now promise-based functions\n * for more info: https://nextjs.org/docs/messages/sync-dynamic-apis\n * @param func\n */\nasync function getRequestCookies() {\n let value = cookies();\n\n // noinspection SuspiciousTypeOfGuard\n if (value instanceof Promise) {\n return await value;\n }\n return value;\n}\n\n/**\n * Support for Next.js 15 breaking changes, where cookies() are now promise-based functions\n * for more info: https://nextjs.org/docs/messages/sync-dynamic-apis\n * @param func\n */\nasync function getRequestHeaders() {\n let value = headers();\n\n // noinspection SuspiciousTypeOfGuard\n if (value instanceof Promise) {\n return await value;\n }\n return value;\n}\n\nconst getCookie = async () => {\n const allCookies = (await getRequestCookies()).getAll();\n return CookieManager.parseCookieFromArray(allCookies);\n};\n\nexport const getAppSession = async () => {\n const cookies = await getCookie();\n return createSession(cookies, encryption);\n};\n\nexport const getAppHeaders = async (): Promise<Record<string, string>> => {\n const reqHeaders: Record<string, string> = {};\n (await getRequestHeaders()).forEach((value: string, key: string) => (reqHeaders[key] = value));\n return reqHeaders;\n};\n\nexport async function getAppUserSession(): Promise<FronteggUserSession | undefined> {\n const session = await getAppSession();\n return session?.user;\n}\n\nexport async function getAppUserTokens(): Promise<FronteggUserTokens | undefined> {\n const session = await getAppSession();\n if (!session) {\n return undefined;\n }\n return {\n accessToken: session.accessToken,\n refreshToken: session.refreshToken,\n };\n}\n"],"mappings":";;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,cAAA,GAAAD,sBAAA,CAAAF,OAAA;AACA,IAAAI,WAAA,GAAAF,sBAAA,CAAAF,OAAA;AAGA;AACA;AACA;AACA;AACA;AACA;AACO,eAAeK,2BAA2BA,CAACC,GAAQ,EAAEC,GAAW,EAAE;EACvE,IAAIC,KAAK;EAET,IAAI,OAAOF,GAAG,CAACC,GAAG,CAAC,KAAK,UAAU,EAAE;IAAA,IAAAE,QAAA;IAClC;IACAD,KAAK,GAAG,OAAMF,GAAG,qBAAAG,QAAA,GAAHH,GAAG,CAAGC,GAAG,CAAC,qBAAVE,QAAA,CAAAC,IAAA,CAAAJ,GAAG,CAAW;EAC9B,CAAC,MAAM;IACL;IACAE,KAAK,GAAGF,GAAG,oBAAHA,GAAG,CAAGC,GAAG,CAAC;EACpB;EAEA,OAAOC,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAeG,iBAAiBA,CAAA,EAAG;EACjC,IAAIH,KAAK,GAAG,IAAAI,gBAAO,GAAE;;EAErB;EACA,IAAIJ,KAAK,YAAYK,OAAO,EAAE;IAC5B,OAAO,MAAML,KAAK;EACpB;EACA,OAAOA,KAAK;AACd;;AAEA;AACA;AACA;AACA;AACA;AACA,eAAeM,iBAAiBA,CAAA,EAAG;EACjC,IAAIN,KAAK,GAAG,IAAAO,gBAAO,GAAE;;EAErB;EACA,IAAIP,KAAK,YAAYK,OAAO,EAAE;IAC5B,OAAO,MAAML,KAAK;EACpB;EACA,OAAOA,KAAK;AACd;AAEA,MAAMQ,SAAS,GAAG,MAAAA,CAAA,KAAY;EAC5B,MAAMC,UAAU,GAAG,CAAC,MAAMN,iBAAiB,EAAE,EAAEO,MAAM,EAAE;EACvD,OAAOC,gBAAa,CAACC,oBAAoB,CAACH,UAAU,CAAC;AACvD,CAAC;AAEM,MAAMI,aAAa,GAAG,MAAAA,CAAA,KAAY;EACvC,MAAMT,OAAO,GAAG,MAAMI,SAAS,EAAE;EACjC,OAAO,IAAAM,sBAAa,EAACV,OAAO,EAAEW,mBAAU,CAAC;AAC3C,CAAC;AAACC,OAAA,CAAAH,aAAA,GAAAA,aAAA;AAEK,MAAMI,aAAa,GAAG,MAAAA,CAAA,KAA6C;EACxE,MAAMC,UAAkC,GAAG,CAAC,CAAC;EAC7C,CAAC,MAAMZ,iBAAiB,EAAE,EAAEa,OAAO,CAAC,CAACnB,KAAa,EAAED,GAAW,KAAMmB,UAAU,CAACnB,GAAG,CAAC,GAAGC,KAAM,CAAC;EAC9F,OAAOkB,UAAU;AACnB,CAAC;AAACF,OAAA,CAAAC,aAAA,GAAAA,aAAA;AAEK,eAAeG,iBAAiBA,CAAA,EAA6C;EAClF,MAAMC,OAAO,GAAG,MAAMR,aAAa,EAAE;EACrC,OAAOQ,OAAO,oBAAPA,OAAO,CAAEC,IAAI;AACtB;AAEO,eAAeC,gBAAgBA,CAAA,EAA4C;EAChF,MAAMF,OAAO,GAAG,MAAMR,aAAa,EAAE;EACrC,IAAI,CAACQ,OAAO,EAAE;IACZ,OAAOG,SAAS;EAClB;EACA,OAAO;IACLC,WAAW,EAAEJ,OAAO,CAACI,WAAW;IAChCC,YAAY,EAAEL,OAAO,CAACK;EACxB,CAAC;AACH"}
|
package/index.js
CHANGED
package/package.json
CHANGED
package/sdkVersion.js
CHANGED
package/sdkVersion.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkVersion.js","names":["version","exports","default","_default"],"sources":["../../../packages/nextjs/src/sdkVersion.ts"],"sourcesContent":["export default { version: '9.0.
|
|
1
|
+
{"version":3,"file":"sdkVersion.js","names":["version","exports","default","_default"],"sources":["../../../packages/nextjs/src/sdkVersion.ts"],"sourcesContent":["export default { version: '9.0.5-alpha.11464183313' };\n"],"mappings":";;;;;;eAAe;EAAEA,OAAO,EAAE;AAA0B,CAAC;AAAAC,OAAA,CAAAC,OAAA,GAAAC,QAAA"}
|