@frontegg/nextjs 6.7.8-alpha.3738952319 → 6.7.9-alpha.3741489660

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.
Files changed (64) hide show
  1. package/CHANGELOG.md +97 -0
  2. package/FronteggBaseProvider-5529ded6.js +119 -0
  3. package/FronteggBaseProvider-5529ded6.js.map +1 -0
  4. package/FronteggClientProviderNext13-65bb4cd0.js +19 -0
  5. package/FronteggClientProviderNext13-65bb4cd0.js.map +1 -0
  6. package/FronteggConfig-7ae86562.js +123 -0
  7. package/FronteggConfig-7ae86562.js.map +1 -0
  8. package/FronteggProvider.d.ts +3 -12
  9. package/FronteggProviderNoSSR.d.ts +2 -4
  10. package/README.md +56 -4
  11. package/api-70f0e81e.js +58 -0
  12. package/api-70f0e81e.js.map +1 -0
  13. package/client/FronteggAppRouter.d.ts +10 -0
  14. package/client/FronteggClientProviderNext13.d.ts +3 -0
  15. package/client/index.d.ts +2 -0
  16. package/client/index.js +63 -0
  17. package/client/index.js.map +1 -0
  18. package/{FronteggConfig.d.ts → common/FronteggConfig.d.ts} +1 -1
  19. package/{api.d.ts → common/api.d.ts} +0 -0
  20. package/{AppContext.d.ts → common/client/AppContext.d.ts} +0 -0
  21. package/common/client/ExpireInListener.d.ts +1 -0
  22. package/common/client/FronteggBaseProvider.d.ts +3 -0
  23. package/common/client/createOrGetFronteggApp.d.ts +11 -0
  24. package/common/client/hooks/index.d.ts +1 -0
  25. package/common/client/hooks/useRequestAuthorizeSSR.d.ts +9 -0
  26. package/common/client/index.d.ts +4 -0
  27. package/{consts.d.ts → common/consts.d.ts} +0 -0
  28. package/common/getMeAndTenants.d.ts +2 -0
  29. package/{helpers.d.ts → common/helpers.d.ts} +7 -9
  30. package/common/index.d.ts +6 -0
  31. package/common/index.js +12 -0
  32. package/common/index.js.map +1 -0
  33. package/common/types.d.ts +74 -0
  34. package/common/utils/createGetSession.d.ts +7 -0
  35. package/common/utils/getCookieFromRequest.d.ts +2 -0
  36. package/common/utils/index.d.ts +3 -0
  37. package/common/utils/parseCookie.d.ts +1 -0
  38. package/consts-873fdf4e.js +9 -0
  39. package/consts-873fdf4e.js.map +1 -0
  40. package/createGetSession-81b1748e.js +50 -0
  41. package/createGetSession-81b1748e.js.map +1 -0
  42. package/edge/getSessionOnEdge.d.ts +2 -0
  43. package/edge/index.d.ts +1 -0
  44. package/edge/index.js +29 -0
  45. package/edge/index.js.map +1 -0
  46. package/getCookieFromRequest-624c37b5.js +28 -0
  47. package/getCookieFromRequest-624c37b5.js.map +1 -0
  48. package/helpers-dbf29bd5.js +189 -0
  49. package/helpers-dbf29bd5.js.map +1 -0
  50. package/index.d.ts +1 -2
  51. package/index.js +599 -0
  52. package/index.js.map +1 -0
  53. package/package.json +15 -9
  54. package/refreshToken.d.ts +3 -0
  55. package/server/FronteggProviderNext13.d.ts +3 -0
  56. package/server/getSessionNext13.d.ts +4 -0
  57. package/server/index.d.ts +2 -0
  58. package/server/index.js +87 -0
  59. package/server/index.js.map +1 -0
  60. package/session.d.ts +4 -8
  61. package/withFronteggApp.d.ts +10 -8
  62. package/index.cjs.js +0 -2747
  63. package/index.esm.js +0 -2691
  64. package/types.d.ts +0 -53
package/CHANGELOG.md ADDED
@@ -0,0 +1,97 @@
1
+ # Change Log
2
+
3
+ ## [6.7.9](https://github.com/frontegg/frontegg-nextjs/compare/v6.7.8...v6.7.9) (2022-12-20)
4
+
5
+
6
+
7
+ ## [6.7.8](https://github.com/frontegg/frontegg-nextjs/compare/v6.7.7...v6.7.8) (2022-12-20)
8
+
9
+ - Fixed mfa input on mobile
10
+ - Enabled scim without roles
11
+ - Fixed menu component for dark theme
12
+ - Added api navigation icon
13
+ - Added tests for mfa
14
+ - Added apple social login types
15
+ - Added support for Hiding Invoices
16
+
17
+
18
+ ## [6.7.7](https://github.com/frontegg/frontegg-nextjs/compare/v6.7.6...v6.7.7) (2022-12-13)
19
+
20
+ - Fixed MFA flow issues
21
+ - Added support for subscriptions billing collection
22
+ - Fixed the issue of the OTC screen submit button is disabled on mobile devices
23
+ - Added SCIM section in admin portal under FF
24
+
25
+ ## [6.7.6](https://github.com/frontegg/frontegg-nextjs/compare/v6.7.5...v6.7.6) (2022-12-12)
26
+ # v6.7.6
27
+ • Fixed ignoring urlPrefix issue
28
+ • Added the ability to Invite a user by bulk API in the admin portal
29
+ • Fixed OTC digits are not visible on mobile devices
30
+ • Added MFA devices management section in the admin portal under FF
31
+ • Fixed the ability to copy invite link for dynamic base URL as well
32
+ • Added new abilities to MFA flows under FF
33
+ • Added support for providing an external CDN to load fonts in Frontegg components
34
+ • Update hide fields API according to new security tabs naming
35
+ • Changed max length for secret fields to 100 characters
36
+ • Added support for customizing invite user dialog fields
37
+ • Fixed creating custom webhook on the Admin Portal is sent with the event ID and not with the event Key
38
+
39
+ ### NextJS Wrapper 6.7.6:
40
+ - Improved SSR support for `withFronteggApp` function
41
+
42
+ ## [6.7.5](https://github.com/frontegg/frontegg-nextjs/compare/v6.7.4...v6.7.5) (2022-11-28)
43
+
44
+ # v6.7.5
45
+ - Update hide fields API according to new security tabs naming
46
+ - Changed max length for secret fields to 100 characters
47
+ - Added support for customizing invite user dialog fields
48
+ - Added support for admin portal pre-defined theme options (dark, vivid, modern, and classic themes)
49
+ - Added support for customizing admin portal navigation hover color
50
+ - Fixed typo of Andorra country in countries dropdown
51
+ - Fixed select popup alignment issue
52
+ - Changed no local authentication feature to also hide the sign-up form when there is no local authentication option (use only social logins and SSO for signing up)
53
+ - Added mock for feature flags API for admin portal preview mode
54
+ - Fixed resend invitation and activate your account API calls
55
+ - Fixed creating custom webhook on the Admin Portal is sent with the event ID and not with the event Key
56
+ - Added support for customizing fields and tabs in the admin portal
57
+
58
+ ### NextJS Wrapper 6.7.5:
59
+ - Updated next readme to include hosted login box integration
60
+
61
+ ## [6.7.4](https://github.com/frontegg/frontegg-nextjs/compare/v6.7.3...v6.7.4) (2022-11-15)
62
+
63
+ - Fixed redirect to the app after signing up without forced email verification
64
+ - Fixed admin portal dark theme
65
+ - Added the ability to customize fields and tabs in the admin portal
66
+ - Fixed cleaning up error messages on sign up page when re-visiting the page
67
+ - Fixed resizing the login box when the logo is null
68
+ - Fix the ReCaptcha timeout issue
69
+
70
+ ## [6.7.3](https://github.com/frontegg/frontegg-nextjs/compare/v6.7.2...v6.7.3) (2022-11-11)
71
+
72
+ - FR-9186 - support ssr with session and refresh token
73
+ - FR-9614 - Add support for innerThemeProvider for admin portal pages and tabs
74
+
75
+ - FR-9186 - fix pipeline
76
+ ### AdminPortal 6.36.0:
77
+ -
78
+
79
+ ### AdminPortal 6.35.0:
80
+ -
81
+ ### AdminPortal 6.34.0:
82
+ -
83
+
84
+ ### NextJS Wrapper 6.7.3:
85
+ - FR-9544 - remove console logs
86
+ - FR-9544 - Add support for keep session a live
87
+ - FR-9187 - split cookie if exceeds length of 4096
88
+
89
+ ## [6.7.2](https://github.com/frontegg/frontegg-nextjs/compare/v6.7.1...v6.7.2) (2022-10-26)
90
+
91
+ ### AdminPortal 6.34.0:
92
+ -
93
+
94
+ ### NextJS Wrapper 6.7.2:
95
+ - FR-9186 - Fix Changelog
96
+ - FR-9186 - Generate changelog for pre-release / releases based on AdminPortal and LoginBox changes
97
+
@@ -0,0 +1,119 @@
1
+ 'use client';
2
+ import { __assign, __rest } from 'tslib';
3
+ import { useAuthUserOrNull, useAuthActions, FronteggStoreProvider } from '@frontegg/react-hooks';
4
+ import { fronteggAuthApiRoutes, ContextHolder } from '@frontegg/rest-api';
5
+ import React, { createContext, useEffect, useRef, useCallback, useMemo } from 'react';
6
+ import { AppHolder, initialize } from '@frontegg/js';
7
+ import { createFronteggStore } from '@frontegg/redux-store';
8
+
9
+ var AppContext = createContext(null);
10
+
11
+ var createOrGetFronteggApp = function (_a) {
12
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k;
13
+ var options = _a.options, onRedirectTo = _a.onRedirectTo, appName = _a.appName, user = _a.user, tenants = _a.tenants, storeHolder = _a.storeHolder;
14
+ var _l = (_b = options.session) !== null && _b !== void 0 ? _b : {}, accessToken = _l.accessToken, refreshToken = _l.refreshToken;
15
+ var contextOptions = __assign(__assign({ requestCredentials: 'include' }, options.contextOptions), { baseUrl: function (path) {
16
+ if (fronteggAuthApiRoutes.indexOf(path) !== -1 ||
17
+ path.endsWith('/postlogin') ||
18
+ path.endsWith('/prelogin') ||
19
+ path === '/oauth/token') {
20
+ return options.envAppUrl + "/api";
21
+ }
22
+ else {
23
+ return options.envBaseUrl;
24
+ }
25
+ }, clientId: options.envClientId });
26
+ var tenantsState = tenants
27
+ ? __assign({ tenantTree: null, subTenants: [], tenants: tenants, loading: false }, (_c = options.authOptions) === null || _c === void 0 ? void 0 : _c.tenantsState) : undefined;
28
+ var userData = user
29
+ ? __assign(__assign(__assign({}, user), { accessToken: accessToken !== null && accessToken !== void 0 ? accessToken : '', refreshToken: refreshToken !== null && refreshToken !== void 0 ? refreshToken : undefined }), (_d = options.authOptions) === null || _d === void 0 ? void 0 : _d.user) : null;
30
+ var authOptions = __assign(__assign({}, options.authOptions), { onRedirectTo: onRedirectTo, isLoading: false, isAuthenticated: !!options.session, hostedLoginBox: (_e = options.hostedLoginBox) !== null && _e !== void 0 ? _e : false, disableSilentRefresh: (_g = (_f = options.authOptions) === null || _f === void 0 ? void 0 : _f.disableSilentRefresh) !== null && _g !== void 0 ? _g : false, user: userData, tenantsState: tenantsState });
31
+ var sharedStore = createFronteggStore({ context: contextOptions }, storeHolder.current, options.previewMode, authOptions, {
32
+ auth: authOptions !== null && authOptions !== void 0 ? authOptions : {},
33
+ audits: (_h = options.auditsOptions) !== null && _h !== void 0 ? _h : {},
34
+ }, false, options.urlStrategy);
35
+ var createdApp;
36
+ try {
37
+ createdApp = AppHolder.getInstance(appName !== null && appName !== void 0 ? appName : 'default');
38
+ createdApp.store = sharedStore;
39
+ }
40
+ catch (e) {
41
+ createdApp = initialize(__assign(__assign({}, options), { store: sharedStore, hostedLoginBox: (_j = options.hostedLoginBox) !== null && _j !== void 0 ? _j : false, customLoginBox: (_k = options.customLoginBox) !== null && _k !== void 0 ? _k : false, basename: options.basename, authOptions: authOptions,
42
+ contextOptions: contextOptions,
43
+ onRedirectTo: onRedirectTo }), appName !== null && appName !== void 0 ? appName : 'default');
44
+ }
45
+ return createdApp;
46
+ };
47
+
48
+ var ExpireInListener = function () {
49
+ var user = useAuthUserOrNull();
50
+ var actions = useAuthActions();
51
+ useEffect(function () {
52
+ if (user && (user === null || user === void 0 ? void 0 : user.expiresIn) == null) {
53
+ actions.setUser(__assign(__assign({}, user), { expiresIn: Math.floor((user['exp'] * 1000 - Date.now()) / 1000) }));
54
+ }
55
+ }, [actions, user]);
56
+ // eslint-disable-next-line react/jsx-no-useless-fragment
57
+ return React.createElement(React.Fragment, null);
58
+ };
59
+
60
+ var useRequestAuthorizeSSR = function (_a) {
61
+ var app = _a.app, accessToken = _a.accessToken, user = _a.user, tenants = _a.tenants, refreshToken = _a.refreshToken;
62
+ useEffect(function () {
63
+ app === null || app === void 0 ? void 0 : app.store.dispatch({
64
+ type: 'auth/requestAuthorizeSSR',
65
+ payload: {
66
+ accessToken: accessToken,
67
+ user: user ? __assign(__assign({}, user), { refreshToken: refreshToken }) : null,
68
+ tenants: tenants,
69
+ },
70
+ });
71
+ }, [app]);
72
+ };
73
+
74
+ var Connector = function (_a) {
75
+ var _b, _c;
76
+ var router = _a.router, _d = _a.appName, appName = _d === void 0 ? 'default' : _d, user = _a.user, tenants = _a.tenants, props = __rest(_a, ["router", "appName", "user", "tenants"]);
77
+ var isSSR = typeof window === 'undefined';
78
+ var _e = (_b = props.session) !== null && _b !== void 0 ? _b : {}, accessToken = _e.accessToken, refreshToken = _e.refreshToken;
79
+ var baseName = (_c = props.basename) !== null && _c !== void 0 ? _c : '';
80
+ var storeHolder = useRef({});
81
+ var onRedirectTo = useCallback(function (_path, opts) {
82
+ var path = _path;
83
+ if (path.startsWith(baseName)) {
84
+ path = path.substring(baseName.length);
85
+ }
86
+ if (opts === null || opts === void 0 ? void 0 : opts.preserveQueryParams) {
87
+ path = "" + path + window.location.search;
88
+ }
89
+ if ((opts === null || opts === void 0 ? void 0 : opts.refresh) && !isSSR) {
90
+ // @ts-ignore
91
+ window.Cypress ? router.push(path) : (window.location.href = path);
92
+ }
93
+ else {
94
+ (opts === null || opts === void 0 ? void 0 : opts.replace) ? router.replace(path) : router.push(path);
95
+ }
96
+ }, []);
97
+ var app = useMemo(function () {
98
+ return createOrGetFronteggApp({
99
+ options: __assign(__assign({}, props), { basename: baseName }),
100
+ user: user,
101
+ tenants: tenants,
102
+ onRedirectTo: onRedirectTo,
103
+ appName: appName,
104
+ storeHolder: storeHolder,
105
+ });
106
+ }, [props]);
107
+ ContextHolder.setOnRedirectTo(onRedirectTo);
108
+ useRequestAuthorizeSSR({ app: app, accessToken: accessToken, user: user, tenants: tenants, refreshToken: refreshToken });
109
+ return (React.createElement(AppContext.Provider, { value: app },
110
+ React.createElement(FronteggStoreProvider, __assign({}, __assign(__assign({}, props), { app: app })), props.children)));
111
+ };
112
+ var FronteggBaseProvider = function (props) {
113
+ return (React.createElement(Connector, __assign({}, props, { framework: 'nextjs' }),
114
+ React.createElement(ExpireInListener, null),
115
+ props.children));
116
+ };
117
+
118
+ export { AppContext as A, ExpireInListener as E, FronteggBaseProvider as F };
119
+ //# sourceMappingURL=FronteggBaseProvider-5529ded6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FronteggBaseProvider-5529ded6.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
1
+ 'use client';
2
+ import { __rest, __assign } from 'tslib';
3
+ import { F as FronteggBaseProvider } from './FronteggBaseProvider-5529ded6.js';
4
+ import '@frontegg/js';
5
+ import '@frontegg/redux-store';
6
+ import '@frontegg/rest-api';
7
+ import React from 'react';
8
+ import '@frontegg/react-hooks';
9
+ import { useRouter } from 'next/navigation';
10
+
11
+ var FronteggClientProviderNext13 = function (_a) {
12
+ var children = _a.children, basename = _a.basename, props = __rest(_a, ["children", "basename"]);
13
+ var router = useRouter();
14
+ var basePath = process.env.__NEXT_ROUTER_BASEPATH || '';
15
+ return (React.createElement(FronteggBaseProvider, __assign({ router: router, basename: basename !== null && basename !== void 0 ? basename : basePath }, props), children));
16
+ };
17
+
18
+ export { FronteggClientProviderNext13 as F };
19
+ //# sourceMappingURL=FronteggClientProviderNext13-65bb4cd0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FronteggClientProviderNext13-65bb4cd0.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
1
+ import { __awaiter, __generator } from 'tslib';
2
+ import { importJWK } from 'jose';
3
+
4
+ function normalizeStringPasswordToMap(password) {
5
+ return typeof password === 'string' ? { 1: password } : password;
6
+ }
7
+ var FronteggConfig = /** @class */ (function () {
8
+ function FronteggConfig() {
9
+ var _a, _b, _c;
10
+ this.authRoutes = {};
11
+ this.fronteggAppOptions = {};
12
+ this._clientId = (_a = process.env['FRONTEGG_CLIENT_ID']) !== null && _a !== void 0 ? _a : '';
13
+ this._cookieName = (_b = process.env['FRONTEGG_COOKIE_NAME']) !== null && _b !== void 0 ? _b : "fe_next_session";
14
+ this._password = (_c = process.env['FRONTEGG_ENCRYPTION_PASSWORD']) !== null && _c !== void 0 ? _c : '';
15
+ this._passwordsAsMap = normalizeStringPasswordToMap(this._password);
16
+ }
17
+ Object.defineProperty(FronteggConfig.prototype, "cookieName", {
18
+ get: function () {
19
+ return this._cookieName + "-" + this._clientId.replace(/-/g, '');
20
+ },
21
+ enumerable: false,
22
+ configurable: true
23
+ });
24
+ Object.defineProperty(FronteggConfig.prototype, "password", {
25
+ get: function () {
26
+ return this._password;
27
+ },
28
+ enumerable: false,
29
+ configurable: true
30
+ });
31
+ Object.defineProperty(FronteggConfig.prototype, "clientId", {
32
+ get: function () {
33
+ return this._clientId;
34
+ },
35
+ enumerable: false,
36
+ configurable: true
37
+ });
38
+ Object.defineProperty(FronteggConfig.prototype, "baseUrlHost", {
39
+ get: function () {
40
+ var _a;
41
+ return new URL((_a = process.env['FRONTEGG_BASE_URL']) !== null && _a !== void 0 ? _a : '').hostname;
42
+ },
43
+ enumerable: false,
44
+ configurable: true
45
+ });
46
+ FronteggConfig.prototype.getEnvAppUrl = function () {
47
+ var url = undefined;
48
+ if (process.env['FRONTEGG_APP_URL']) {
49
+ url = process.env['FRONTEGG_APP_URL'];
50
+ }
51
+ else if (process.env['VERCEL'] && process.env['VERCEL_URL']) {
52
+ url = process.env['VERCEL_URL'];
53
+ }
54
+ if (url && !url.startsWith('http')) {
55
+ var protocol = url.startsWith('localhost') ? 'http://' : 'https://';
56
+ url = "" + protocol + url;
57
+ }
58
+ return url;
59
+ };
60
+ Object.defineProperty(FronteggConfig.prototype, "appUrl", {
61
+ get: function () {
62
+ var _a;
63
+ return (_a = this.getEnvAppUrl()) !== null && _a !== void 0 ? _a : 'http://localhost:3000';
64
+ },
65
+ enumerable: false,
66
+ configurable: true
67
+ });
68
+ Object.defineProperty(FronteggConfig.prototype, "appEnvConfig", {
69
+ get: function () {
70
+ return {
71
+ envAppUrl: this.getEnvAppUrl(),
72
+ envBaseUrl: process.env['FRONTEGG_BASE_URL'],
73
+ envClientId: process.env['FRONTEGG_CLIENT_ID'],
74
+ };
75
+ },
76
+ enumerable: false,
77
+ configurable: true
78
+ });
79
+ Object.defineProperty(FronteggConfig.prototype, "cookieDomain", {
80
+ get: function () {
81
+ var _a;
82
+ return new URL((_a = this.getEnvAppUrl()) !== null && _a !== void 0 ? _a : '').hostname.replace(/:(\d)+$/, '');
83
+ },
84
+ enumerable: false,
85
+ configurable: true
86
+ });
87
+ FronteggConfig.prototype.getJwtPublicKey = function () {
88
+ return __awaiter(this, void 0, void 0, function () {
89
+ var response, data, publicKey, _a;
90
+ return __generator(this, function (_b) {
91
+ switch (_b.label) {
92
+ case 0:
93
+ if (!!this._jwtPublicKey) return [3 /*break*/, 4];
94
+ return [4 /*yield*/, fetch(process.env['FRONTEGG_BASE_URL'] + "/.well-known/jwks.json")];
95
+ case 1:
96
+ response = _b.sent();
97
+ return [4 /*yield*/, response.json()];
98
+ case 2:
99
+ data = _b.sent();
100
+ publicKey = data.keys.find(function (key) { return key.kty === 'RSA'; });
101
+ _a = this;
102
+ return [4 /*yield*/, importJWK(publicKey)];
103
+ case 3:
104
+ _a._jwtPublicKey = _b.sent();
105
+ _b.label = 4;
106
+ case 4: return [2 /*return*/, this._jwtPublicKey];
107
+ }
108
+ });
109
+ });
110
+ };
111
+ Object.defineProperty(FronteggConfig.prototype, "passwordsAsMap", {
112
+ get: function () {
113
+ return this._passwordsAsMap;
114
+ },
115
+ enumerable: false,
116
+ configurable: true
117
+ });
118
+ return FronteggConfig;
119
+ }());
120
+ var FronteggConfig$1 = new FronteggConfig();
121
+
122
+ export { FronteggConfig$1 as F };
123
+ //# sourceMappingURL=FronteggConfig-7ae86562.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FronteggConfig-7ae86562.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,12 +1,3 @@
1
- import { FC, ReactNode } from 'react';
2
- import { FronteggAppOptions } from '@frontegg/types';
3
- import { MeAndTenants, FronteggNextJSSession } from './types';
4
- export declare type FronteggProviderProps = Omit<FronteggAppOptions, 'contextOptions'> & MeAndTenants & {
5
- children?: ReactNode;
6
- session?: FronteggNextJSSession;
7
- envAppUrl: string;
8
- envBaseUrl: string;
9
- envClientId: string;
10
- contextOptions?: Omit<FronteggAppOptions['contextOptions'], 'baseUrl'>;
11
- };
12
- export declare const FronteggProvider: FC<FronteggProviderProps>;
1
+ import { FC } from 'react';
2
+ import { FronteggProviderProps } from './common';
3
+ export declare const FronteggProvider: FC<Omit<FronteggProviderProps, 'router'>>;
@@ -1,6 +1,4 @@
1
- import { FC, ReactNode } from 'react';
2
1
  import { FronteggAppOptions } from '@frontegg/types';
3
- export declare type FronteggProviderNoSSRProps = FronteggAppOptions & {
4
- children?: ReactNode;
5
- };
2
+ import { FC, PropsWithChildren } from 'react';
3
+ export declare type FronteggProviderNoSSRProps = PropsWithChildren<FronteggAppOptions>;
6
4
  export declare const FronteggProviderNoSSR: FC<FronteggProviderNoSSRProps>;
package/README.md CHANGED
@@ -228,6 +228,57 @@ export const getServerSideProps: GetServerSideProps = withSSRSession(
228
228
  );
229
229
  ```
230
230
 
231
+ ## Next.js 13
232
+ ### wrapping your application
233
+ ```ts
234
+ // app/layout.tsx
235
+ import { FronteggAppProvider } from '@frontegg/nextjs/server';
236
+
237
+ export default function RootLayout({ children }: { children: React.ReactNode }) {
238
+ return (
239
+ <FronteggAppProvider hostedLoginBox>
240
+ <html>
241
+ <head></head>
242
+ <body>{children}</body>
243
+ </html>
244
+ </FronteggAppProvider>
245
+ );
246
+ }
247
+ ```
248
+
249
+ ### routing
250
+ ```ts
251
+ // app/[...frontegg-router]/page.tsx
252
+ export { FronteggAppRouter as default } from '@frontegg/nextjs/client';
253
+ ```
254
+
255
+ ### server component
256
+ ```ts
257
+ // app/ServerComponent.tsx
258
+ import { getUserSession } from '@frontegg/nextjs/server';
259
+
260
+ export const ServerComponent = async () => {
261
+ const userSession = await getUserSession();
262
+ return (
263
+ <div>
264
+ user session server side: {JSON.stringify(userSession)}
265
+ </div>
266
+ );
267
+ };
268
+ ```
269
+
270
+ ### client component
271
+ ```ts
272
+ // app/ClientComponent.tsx
273
+ 'use client';
274
+ import { useAuthUserOrNull } from '@frontegg/nextjs';
275
+
276
+ export const ClientComponent = () => {
277
+ const user = useAuthUserOrNull();
278
+ return <div>user session client side: {JSON.stringify(user)}</div>;
279
+ };
280
+ ```
281
+
231
282
  ## Next.js middlewares usage
232
283
 
233
284
  To prevent access unauthenticated user to all routes, use [Next.js middlewares](https://nextjs.org/docs/advanced-features/middleware).
@@ -238,16 +289,17 @@ To prevent access unauthenticated user to all routes, use [Next.js middlewares](
238
289
  // /middleware.ts
239
290
  import { NextResponse } from "next/server";
240
291
  import type { NextRequest } from "next/server";
241
- import { getSession } from '@frontegg/nextjs';
292
+ import { getSession } from '@frontegg/nextjs/edge';
242
293
 
243
294
  export const middleware = async (request: NextRequest) => {
244
295
  const session = await getSession(request);
296
+ const isAuthRoute = [...your auth routes]
245
297
 
246
298
  console.log("middleware session", session);
247
-
248
- if(!session){
299
+
300
+ if(!session && isAuthRoute){
249
301
  // redirect unauthenticated user to /account/login page
250
- return NextResponse.redirect(new URL('/account/login', req.url))
302
+ return NextResponse.redirect(new URL('/account/login', request))
251
303
  }
252
304
 
253
305
  return NextResponse.next();
@@ -0,0 +1,58 @@
1
+ import { __awaiter, __generator } from 'tslib';
2
+ import { fronteggUsersUrl, fronteggTenantsUrl } from '@frontegg/rest-api';
3
+
4
+ var BASE_URL = process.env['FRONTEGG_BASE_URL'] + "/frontegg";
5
+ var Get = function (_a) {
6
+ var url = _a.url, _b = _a.credentials, credentials = _b === void 0 ? 'include' : _b, headers = _a.headers;
7
+ return fetch(url, { method: 'GET', credentials: credentials, headers: headers });
8
+ };
9
+ var extractHeaders = function (headers) { return ({
10
+ 'accept-encoding': headers['accept-encoding'],
11
+ 'accept-language': headers['accept-language'],
12
+ cookie: headers['cookie'],
13
+ accept: headers['accept'],
14
+ 'user-agent': headers['user-agent'],
15
+ // connection: headers['connection'],
16
+ 'cache-control': headers['cache-control'],
17
+ Authorization: headers['Authorization'],
18
+ }); };
19
+ var parseResponse = function (res) { return __awaiter(void 0, void 0, void 0, function () {
20
+ var resText;
21
+ return __generator(this, function (_a) {
22
+ switch (_a.label) {
23
+ case 0:
24
+ if (!res.ok) {
25
+ return [2 /*return*/, undefined];
26
+ }
27
+ return [4 /*yield*/, res.text()];
28
+ case 1:
29
+ resText = _a.sent();
30
+ return [2 /*return*/, JSON.parse(resText)];
31
+ }
32
+ });
33
+ }); };
34
+ var getUsers = function (headers) { return __awaiter(void 0, void 0, void 0, function () {
35
+ var res;
36
+ return __generator(this, function (_a) {
37
+ switch (_a.label) {
38
+ case 0: return [4 /*yield*/, Get({ url: "" + BASE_URL + fronteggUsersUrl, headers: extractHeaders(headers) })];
39
+ case 1:
40
+ res = _a.sent();
41
+ return [2 /*return*/, parseResponse(res)];
42
+ }
43
+ });
44
+ }); };
45
+ var getTenants = function (headers) { return __awaiter(void 0, void 0, void 0, function () {
46
+ var res;
47
+ return __generator(this, function (_a) {
48
+ switch (_a.label) {
49
+ case 0: return [4 /*yield*/, Get({ url: "" + BASE_URL + fronteggTenantsUrl, headers: extractHeaders(headers) })];
50
+ case 1:
51
+ res = _a.sent();
52
+ return [2 /*return*/, parseResponse(res)];
53
+ }
54
+ });
55
+ }); };
56
+
57
+ export { getTenants as a, getUsers as g };
58
+ //# sourceMappingURL=api-70f0e81e.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-70f0e81e.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -0,0 +1,10 @@
1
+ /// <reference types="node" />
2
+ import { ParsedUrlQuery } from 'querystring';
3
+ declare type FronteggRouterProps = {
4
+ params: ParsedUrlQuery & {
5
+ 'frontegg-router'?: string[];
6
+ };
7
+ searchParams: ParsedUrlQuery;
8
+ };
9
+ export declare function FronteggAppRouter({ params: { 'frontegg-router': pathArr }, searchParams }: FronteggRouterProps): string;
10
+ export {};
@@ -0,0 +1,3 @@
1
+ import { FronteggProviderProps } from '../common';
2
+ import { FC } from 'react';
3
+ export declare const FronteggClientProviderNext13: FC<Omit<FronteggProviderProps, 'router'>>;
@@ -0,0 +1,2 @@
1
+ export * from './FronteggAppRouter';
2
+ export * from './FronteggClientProviderNext13';
@@ -0,0 +1,63 @@
1
+ 'use client';
2
+ import { __assign, __spreadArrays } from 'tslib';
3
+ import { F as FronteggConfig } from '../FronteggConfig-7ae86562.js';
4
+ import '../api-70f0e81e.js';
5
+ import 'cookie';
6
+ import 'iron-session';
7
+ import 'jose';
8
+ import { useLoginWithRedirect, useLoginActions } from '@frontegg/react-hooks';
9
+ import '@frontegg/rest-api';
10
+ import { useContext, useEffect } from 'react';
11
+ import { A as AppContext } from '../FronteggBaseProvider-5529ded6.js';
12
+ import '@frontegg/js';
13
+ import { authInitialState } from '@frontegg/redux-store';
14
+ import { useRouter, notFound } from 'next/navigation';
15
+ export { F as FronteggClientProviderNext13 } from '../FronteggClientProviderNext13-65bb4cd0.js';
16
+
17
+ function FronteggAppRouter(_a) {
18
+ var _b = _a.params["frontegg-router"], pathArr = _b === void 0 ? [] : _b, searchParams = _a.searchParams;
19
+ var routesObj = __assign(__assign({}, authInitialState.routes), FronteggConfig.authRoutes);
20
+ var routesArr = Object.keys(routesObj).reduce(function (p, key) { return __spreadArrays(p, [routesObj[key]]); }, []);
21
+ var app = useContext(AppContext);
22
+ var replace = useRouter().replace;
23
+ var loginWithRedirect = useLoginWithRedirect();
24
+ var logout = useLoginActions().logout;
25
+ var pathname = "/" + pathArr.join('/');
26
+ if (!pathname || pathname.startsWith('/_next/data')) {
27
+ var query = searchParams[Object.keys(searchParams)[0]];
28
+ pathname = "/" + (Array.isArray(query) ? query.join('/') : query);
29
+ }
30
+ if (routesArr.indexOf(pathname) === -1) {
31
+ notFound();
32
+ }
33
+ if (FronteggConfig.fronteggAppOptions.hostedLoginBox &&
34
+ routesObj.loginUrl !== pathname &&
35
+ routesObj.logoutUrl !== pathname &&
36
+ routesObj.hostedLoginRedirectUrl !== pathname) {
37
+ notFound();
38
+ }
39
+ useEffect(function () {
40
+ if (!app) {
41
+ return;
42
+ }
43
+ if (app.options.hostedLoginBox) {
44
+ if (pathname === routesObj.loginUrl) {
45
+ if (searchParams.redirectUrl) {
46
+ localStorage.setItem('FRONTEGG_AFTER_AUTH_REDIRECT_URL', "" + window.location.origin + searchParams.redirectUrl);
47
+ }
48
+ loginWithRedirect();
49
+ }
50
+ else if (pathname === routesObj.logoutUrl) {
51
+ var _baseUrl = app.options.contextOptions.baseUrl;
52
+ var baseUrl_1 = typeof _baseUrl === 'string' ? _baseUrl : _baseUrl('');
53
+ logout(function () {
54
+ window.location.href = baseUrl_1 + "/oauth/logout?post_logout_redirect_uri=" + encodeURIComponent(window.location.origin);
55
+ });
56
+ }
57
+ }
58
+ }, [app, searchParams, loginWithRedirect, logout, replace]);
59
+ return '';
60
+ }
61
+
62
+ export { FronteggAppRouter };
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
@@ -1,7 +1,7 @@
1
+ import { AppEnvConfig } from './types';
1
2
  import { KeyLike } from 'jose';
2
3
  import { AuthPageRoutes } from '@frontegg/redux-store';
3
4
  import { FronteggAppOptions } from '@frontegg/types';
4
- import { AppEnvConfig } from './types';
5
5
  export declare type PasswordsMap = {
6
6
  [id: string]: string;
7
7
  };
File without changes
@@ -0,0 +1 @@
1
+ export declare const ExpireInListener: () => JSX.Element;
@@ -0,0 +1,3 @@
1
+ import { FC } from 'react';
2
+ import { FronteggProviderProps } from '../types';
3
+ export declare const FronteggBaseProvider: FC<FronteggProviderProps>;
@@ -0,0 +1,11 @@
1
+ import { FronteggApp } from '@frontegg/js';
2
+ import { AuthState } from '@frontegg/redux-store';
3
+ import { FronteggProviderOptions, MeAndTenantsResponse } from '../types';
4
+ declare type CreateOrGetFronteggAppParams = {
5
+ options: FronteggProviderOptions;
6
+ onRedirectTo: AuthState['onRedirectTo'];
7
+ appName?: string;
8
+ storeHolder: any;
9
+ } & MeAndTenantsResponse;
10
+ export declare const createOrGetFronteggApp: ({ options, onRedirectTo, appName, user, tenants, storeHolder, }: CreateOrGetFronteggAppParams) => FronteggApp;
11
+ export {};