@frontegg/nextjs 9.0.5-alpha.11464183313 → 9.0.5-alpha.11469892684
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/api/utils.js +24 -1
- package/api/utils.js.map +1 -1
- package/common/FronteggBaseProvider.js +4 -2
- package/common/FronteggBaseProvider.js.map +1 -1
- package/common/hooks.js +5 -2
- package/common/hooks.js.map +1 -1
- package/config/constants.d.ts +21 -0
- package/config/constants.js +4 -0
- package/config/constants.js.map +1 -1
- package/config/index.d.ts +3 -0
- package/config/index.js +37 -5
- package/config/index.js.map +1 -1
- package/edge/getSessionOnEdge.js +22 -5
- package/edge/getSessionOnEdge.js.map +1 -1
- package/index.js +1 -1
- package/middleware/ProxyRequestCallback.js +13 -13
- package/middleware/ProxyRequestCallback.js.map +1 -1
- package/no-ssr/FronteggProviderNoSSR.js +1 -1
- package/no-ssr/FronteggProviderNoSSR.js.map +1 -1
- package/package.json +1 -1
- package/pages/withFronteggApp/withFronteggApp.js +3 -1
- package/pages/withFronteggApp/withFronteggApp.js.map +1 -1
- package/sdkVersion.js +1 -1
- package/sdkVersion.js.map +1 -1
- package/types/index.d.ts +1 -0
- package/types/index.js.map +1 -1
- package/utils/cookies/helpers.js +7 -1
- package/utils/cookies/helpers.js.map +1 -1
- package/utils/cookies/index.js +32 -4
- package/utils/cookies/index.js.map +1 -1
- package/utils/fetchUserData/index.js +4 -0
- package/utils/fetchUserData/index.js.map +1 -1
- package/utils/initializeFronteggApp/index.js +2 -1
- package/utils/initializeFronteggApp/index.js.map +1 -1
- package/utils/refreshAccessTokenIfNeeded/helpers.js +6 -0
- package/utils/refreshAccessTokenIfNeeded/helpers.js.map +1 -1
- package/utils/refreshAccessTokenIfNeeded/index.js +5 -4
- package/utils/refreshAccessTokenIfNeeded/index.js.map +1 -1
package/README.md
CHANGED
|
@@ -129,8 +129,14 @@ FRONTEGG_CLIENT_SECRET='{YOUR_APPLICATION_CLIENT_SECRET}'
|
|
|
129
129
|
# node -e "console.log(crypto.randomBytes(32).toString('hex'))"
|
|
130
130
|
FRONTEGG_ENCRYPTION_PASSWORD='{SESSION_ENCRYPTION_PASSWORD}'
|
|
131
131
|
|
|
132
|
-
# The stateless
|
|
133
|
-
|
|
132
|
+
# The stateless cookie name for storing the encrypted JWT
|
|
133
|
+
# value as session cookies for supporting getServerSideProps and ServerComponents
|
|
134
|
+
FRONTEGG_COOKIE_NAME='FRONTEGG_COOKIE_NAME'
|
|
135
|
+
|
|
136
|
+
# Specifies the domain for storing the encrypted JWT as session cookies,
|
|
137
|
+
# enabling support for `getServerSideProps` and `ServerComponents`.
|
|
138
|
+
# If not provided, the domain will be the same as the `APP_URL` environment variable.
|
|
139
|
+
FRONTEGG_COOKIE_DOMAIN='FRONTEGG_COOKIE_DOMAIN'
|
|
134
140
|
|
|
135
141
|
# The JWT public key generated by Frontegg to verify JWT before creating a session.
|
|
136
142
|
# Retrieve it by visiting: https://[YOUR_FRONTEGG_DOMAIN]/.well-known/jwks.json.
|
package/api/utils.js
CHANGED
|
@@ -66,6 +66,7 @@ function removeInvalidHeaders(headers) {
|
|
|
66
66
|
* These header is used to identify the tenant for login per tenant feature
|
|
67
67
|
*/
|
|
68
68
|
const CUSTOM_LOGIN_HEADER = 'frontegg-login-alias';
|
|
69
|
+
|
|
69
70
|
/**
|
|
70
71
|
* Build fetch request headers, remove invalid http headers
|
|
71
72
|
* @param headers - Incoming request headers
|
|
@@ -75,9 +76,24 @@ function buildRequestHeaders(headers) {
|
|
|
75
76
|
let cookie = headers['cookie'];
|
|
76
77
|
if (cookie != null && typeof cookie === 'string') {
|
|
77
78
|
cookie = cookie.replace(/fe_session-[^=]*=[^;]*$/, '').replace(/fe_session-[^=]*=[^;]*;/, '');
|
|
79
|
+
if (_config.default.rewriteCookieByAppId && _config.default.appId) {
|
|
80
|
+
cookie = cookie.split(';').filter(cookieStr => !cookieStr.trim().startsWith(`fe_refresh_${_config.default.clientId.replace('-', '')}`)).join(';');
|
|
81
|
+
cookie = cookie.replace(`fe_refresh_${_config.default.appId.replace('-', '')}`, `fe_refresh_${_config.default.clientId.replace('-', '')}`);
|
|
82
|
+
}
|
|
78
83
|
}
|
|
79
84
|
if (cookie != null && typeof cookie === 'object') {
|
|
80
|
-
cookie = Object.entries(cookie).
|
|
85
|
+
cookie = Object.entries(cookie).filter(([key]) => {
|
|
86
|
+
if (_config.default.rewriteCookieByAppId && _config.default.appId) {
|
|
87
|
+
return key !== `fe_refresh_${_config.default.clientId.replace('-', '')}`;
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}).map(([key, value]) => {
|
|
91
|
+
if (_config.default.rewriteCookieByAppId && _config.default.appId && key === `fe_refresh_${_config.default.appId.replace('-', '')}`) {
|
|
92
|
+
return `fe_refresh_${_config.default.clientId.replace('-', '')}=${value}`;
|
|
93
|
+
} else {
|
|
94
|
+
return `${key}=${value}`;
|
|
95
|
+
}
|
|
96
|
+
}).join('; ');
|
|
81
97
|
}
|
|
82
98
|
const preparedHeaders = {
|
|
83
99
|
authorization: headers['authorization'],
|
|
@@ -92,6 +108,13 @@ function buildRequestHeaders(headers) {
|
|
|
92
108
|
'x-frontegg-framework': `next@${_package.default.version}`,
|
|
93
109
|
'x-frontegg-sdk': `@frontegg/nextjs@${_sdkVersion.default.version}`
|
|
94
110
|
};
|
|
111
|
+
if (headers['frontegg-requested-application-id']) {
|
|
112
|
+
preparedHeaders['frontegg-requested-application-id'] = headers['frontegg-requested-application-id'];
|
|
113
|
+
}
|
|
114
|
+
const clientIp = headers['cf-connecting-ip'] || headers['x-original-forwarded-for'] || headers['x-forwarded-for'];
|
|
115
|
+
if (clientIp) {
|
|
116
|
+
preparedHeaders['x-original-forwarded-for'] = clientIp;
|
|
117
|
+
}
|
|
95
118
|
if (headers[CUSTOM_LOGIN_HEADER]) {
|
|
96
119
|
preparedHeaders[CUSTOM_LOGIN_HEADER] = headers[CUSTOM_LOGIN_HEADER];
|
|
97
120
|
}
|
package/api/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_config","_interopRequireDefault","require","_sdkVersion","_package","_restApi","_constants","Get","url","credentials","headers","fetch","method","exports","Post","body","removeInvalidHeaders","newHeaders","_extends2","default","Object","keys","forEach","key","val","Array","isArray","headerCharRegex","exec","undefined","length","CUSTOM_LOGIN_HEADER","buildRequestHeaders","cookie","replace","entries","map","value","join","preparedHeaders","authorization","accept","origin","config","baseUrl","nextjsPkg","version","sdkVersion","parseHttpResponse","res","ok","json","isMiddlewarePath","path","isAuthPath","fronteggAuthApiRoutesRegex","find","pathRegex","RegExp","test","isSocialLoginPath","endsWith"],"sources":["../../../../packages/nextjs/src/api/utils.ts"],"sourcesContent":["import config from '../config';\nimport sdkVersion from '../sdkVersion';\nimport nextjsPkg from 'next/package.json';\nimport { fronteggAuthApiRoutesRegex } from '@frontegg/rest-api';\nimport { headerCharRegex } from '../utils/common/constants';\n\ninterface GetRequestOptions {\n url: string;\n credentials?: RequestCredentials;\n headers?: HeadersInit;\n}\n\nexport const Get = ({ url, credentials = 'include', headers }: GetRequestOptions) =>\n fetch(url, { method: 'GET', credentials, headers });\n\ninterface PostRequestOptions extends GetRequestOptions {\n body: string;\n}\n\nexport const Post = ({ url, credentials = 'include', headers, body }: PostRequestOptions) =>\n fetch(url, { method: 'POST', credentials, headers, body });\n\n/**\n * NodeJS 18 start using undici as http request handler,\n * undici http request does not accept invalid headers\n * for more details see:\n * https://github.com/nodejs/undici/blob/2b260c997ad4efe4ed2064b264b4b546a59e7a67/lib/core/request.js#L282\n * @param headers\n */\nexport function removeInvalidHeaders(headers: Record<string, string>) {\n const newHeaders = { ...headers };\n Object.keys(newHeaders).forEach((key: string) => {\n const val: any = headers[key];\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n delete newHeaders[key];\n } else if (headerCharRegex.exec(val) !== null) {\n delete newHeaders[key];\n } else if (val === undefined || val === null) {\n delete newHeaders[key];\n } else if (key.length === 10 && key === 'connection') {\n delete newHeaders[key];\n }\n });\n return newHeaders;\n}\n\n/**\n * These header is used to identify the tenant for login per tenant feature\n */\nexport const CUSTOM_LOGIN_HEADER = 'frontegg-login-alias';\n/**\n * Build fetch request headers, remove invalid http headers\n * @param headers - Incoming request headers\n */\nexport function buildRequestHeaders(headers: Record<string, any>): Record<string, string> {\n let cookie = headers['cookie'];\n if (cookie != null && typeof cookie === 'string') {\n cookie = cookie.replace(/fe_session-[^=]*=[^;]*$/, '').replace(/fe_session-[^=]*=[^;]*;/, '');\n }\n if (cookie != null && typeof cookie === 'object') {\n cookie = Object.entries(cookie)\n .map(([key, value]) => `${key}=${value}`)\n .join('; ');\n }\n\n const preparedHeaders: Record<string, string> = {\n authorization: headers['authorization'],\n 'accept-encoding': headers['accept-encoding'],\n 'accept-language': headers['accept-language'],\n accept: headers['accept'],\n 'content-type': 'application/json',\n origin: config.baseUrl,\n cookie,\n 'user-agent': headers['user-agent'],\n 'cache-control': headers['cache-control'],\n 'x-frontegg-framework': `next@${nextjsPkg.version}`,\n 'x-frontegg-sdk': `@frontegg/nextjs@${sdkVersion.version}`,\n };\n\n if (headers[CUSTOM_LOGIN_HEADER]) {\n preparedHeaders[CUSTOM_LOGIN_HEADER] = headers[CUSTOM_LOGIN_HEADER];\n }\n return removeInvalidHeaders({ ...preparedHeaders });\n}\n\n/**\n * Return parsed json response if http status code = 200\n * @param res\n */\nexport const parseHttpResponse = async <T>(res: Response): Promise<T | undefined> => {\n if (!res.ok) {\n return undefined;\n }\n return await res.json();\n};\n\n/**\n * Checks if the given path should be forwarded to the Next.js server middleware.\n *\n *\n * @param {string} path - The path to check for authentication API routes.\n * @returns {boolean} Returns true if the path is a frontegg authentication API route or ends with '/postlogin' or '/prelogin'; otherwise, returns false.\n */\nexport function isMiddlewarePath(path: string): boolean {\n let isAuthPath =\n fronteggAuthApiRoutesRegex.find((pathRegex) => {\n if (typeof pathRegex === 'string') {\n return pathRegex === path;\n } else {\n return new RegExp(pathRegex).test(path);\n }\n }) != null;\n\n // if(!isAuthPath){\n // isAuthPath = /^\\/identity\\/resources\\/auth\\/v[0-9]*\\/user\\/sso\\/[^\\/]*\\/postlogin$/g.test(path)\n // }\n // if(!isAuthPath){\n // isAuthPath = /^\\/identity\\/resources\\/auth\\/v[0-9]*\\/passwordless\\/[^\\/]*\\/prelogin$/g.test(path)\n // }\n // if(!isAuthPath){\n // isAuthPath = /^\\/identity\\/resources\\/auth\\/v[0-9]*\\/[^\\/]*\\/prelogin$/g.test(path)\n // }\n\n if (!isAuthPath) {\n const isSocialLoginPath = /^\\/identity\\/resources\\/auth\\/v[0-9]*\\/user\\/sso\\/default\\/[^\\/]*\\/prelogin$/.test(path);\n isAuthPath = (path.endsWith('/postlogin') || path.endsWith('/prelogin')) && !isSocialLoginPath;\n }\n\n return isAuthPath;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_config","_interopRequireDefault","require","_sdkVersion","_package","_restApi","_constants","Get","url","credentials","headers","fetch","method","exports","Post","body","removeInvalidHeaders","newHeaders","_extends2","default","Object","keys","forEach","key","val","Array","isArray","headerCharRegex","exec","undefined","length","CUSTOM_LOGIN_HEADER","buildRequestHeaders","cookie","replace","config","rewriteCookieByAppId","appId","split","filter","cookieStr","trim","startsWith","clientId","join","entries","map","value","preparedHeaders","authorization","accept","origin","baseUrl","nextjsPkg","version","sdkVersion","clientIp","parseHttpResponse","res","ok","json","isMiddlewarePath","path","isAuthPath","fronteggAuthApiRoutesRegex","find","pathRegex","RegExp","test","isSocialLoginPath","endsWith"],"sources":["../../../../packages/nextjs/src/api/utils.ts"],"sourcesContent":["import config from '../config';\nimport sdkVersion from '../sdkVersion';\nimport nextjsPkg from 'next/package.json';\nimport { fronteggAuthApiRoutesRegex } from '@frontegg/rest-api';\nimport { headerCharRegex } from '../utils/common/constants';\n\ninterface GetRequestOptions {\n url: string;\n credentials?: RequestCredentials;\n headers?: HeadersInit;\n}\n\nexport const Get = ({ url, credentials = 'include', headers }: GetRequestOptions) =>\n fetch(url, { method: 'GET', credentials, headers });\n\ninterface PostRequestOptions extends GetRequestOptions {\n body: string;\n}\n\nexport const Post = ({ url, credentials = 'include', headers, body }: PostRequestOptions) =>\n fetch(url, { method: 'POST', credentials, headers, body });\n\n/**\n * NodeJS 18 start using undici as http request handler,\n * undici http request does not accept invalid headers\n * for more details see:\n * https://github.com/nodejs/undici/blob/2b260c997ad4efe4ed2064b264b4b546a59e7a67/lib/core/request.js#L282\n * @param headers\n */\nexport function removeInvalidHeaders(headers: Record<string, string>) {\n const newHeaders = { ...headers };\n Object.keys(newHeaders).forEach((key: string) => {\n const val: any = headers[key];\n if (val && typeof val === 'object' && !Array.isArray(val)) {\n delete newHeaders[key];\n } else if (headerCharRegex.exec(val) !== null) {\n delete newHeaders[key];\n } else if (val === undefined || val === null) {\n delete newHeaders[key];\n } else if (key.length === 10 && key === 'connection') {\n delete newHeaders[key];\n }\n });\n return newHeaders;\n}\n\n/**\n * These header is used to identify the tenant for login per tenant feature\n */\nexport const CUSTOM_LOGIN_HEADER = 'frontegg-login-alias';\n\n/**\n * Build fetch request headers, remove invalid http headers\n * @param headers - Incoming request headers\n */\nexport function buildRequestHeaders(headers: Record<string, any>): Record<string, string> {\n let cookie = headers['cookie'];\n if (cookie != null && typeof cookie === 'string') {\n cookie = cookie.replace(/fe_session-[^=]*=[^;]*$/, '').replace(/fe_session-[^=]*=[^;]*;/, '');\n\n if (config.rewriteCookieByAppId && config.appId) {\n cookie = cookie\n .split(';')\n .filter((cookieStr: string) => !cookieStr.trim().startsWith(`fe_refresh_${config.clientId.replace('-', '')}`))\n .join(';');\n cookie = cookie.replace(\n `fe_refresh_${config.appId.replace('-', '')}`,\n `fe_refresh_${config.clientId.replace('-', '')}`\n );\n }\n }\n if (cookie != null && typeof cookie === 'object') {\n cookie = Object.entries(cookie)\n .filter(([key]) => {\n if (config.rewriteCookieByAppId && config.appId) {\n return key !== `fe_refresh_${config.clientId.replace('-', '')}`;\n }\n return true;\n })\n .map(([key, value]) => {\n if (config.rewriteCookieByAppId && config.appId && key === `fe_refresh_${config.appId.replace('-', '')}`) {\n return `fe_refresh_${config.clientId.replace('-', '')}=${value}`;\n } else {\n return `${key}=${value}`;\n }\n })\n .join('; ');\n }\n\n const preparedHeaders: Record<string, string> = {\n authorization: headers['authorization'],\n 'accept-encoding': headers['accept-encoding'],\n 'accept-language': headers['accept-language'],\n accept: headers['accept'],\n 'content-type': 'application/json',\n origin: config.baseUrl,\n cookie,\n 'user-agent': headers['user-agent'],\n 'cache-control': headers['cache-control'],\n 'x-frontegg-framework': `next@${nextjsPkg.version}`,\n 'x-frontegg-sdk': `@frontegg/nextjs@${sdkVersion.version}`,\n };\n\n if (headers['frontegg-requested-application-id']) {\n preparedHeaders['frontegg-requested-application-id'] = headers['frontegg-requested-application-id'];\n }\n\n const clientIp = headers['cf-connecting-ip'] || headers['x-original-forwarded-for'] || headers['x-forwarded-for'];\n if (clientIp) {\n preparedHeaders['x-original-forwarded-for'] = clientIp;\n }\n\n if (headers[CUSTOM_LOGIN_HEADER]) {\n preparedHeaders[CUSTOM_LOGIN_HEADER] = headers[CUSTOM_LOGIN_HEADER];\n }\n return removeInvalidHeaders({ ...preparedHeaders });\n}\n\n/**\n * Return parsed json response if http status code = 200\n * @param res\n */\nexport const parseHttpResponse = async <T>(res: Response): Promise<T | undefined> => {\n if (!res.ok) {\n return undefined;\n }\n return await res.json();\n};\n\n/**\n * Checks if the given path should be forwarded to the Next.js server middleware.\n *\n *\n * @param {string} path - The path to check for authentication API routes.\n * @returns {boolean} Returns true if the path is a frontegg authentication API route or ends with '/postlogin' or '/prelogin'; otherwise, returns false.\n */\nexport function isMiddlewarePath(path: string): boolean {\n let isAuthPath =\n fronteggAuthApiRoutesRegex.find((pathRegex) => {\n if (typeof pathRegex === 'string') {\n return pathRegex === path;\n } else {\n return new RegExp(pathRegex).test(path);\n }\n }) != null;\n\n // if(!isAuthPath){\n // isAuthPath = /^\\/identity\\/resources\\/auth\\/v[0-9]*\\/user\\/sso\\/[^\\/]*\\/postlogin$/g.test(path)\n // }\n // if(!isAuthPath){\n // isAuthPath = /^\\/identity\\/resources\\/auth\\/v[0-9]*\\/passwordless\\/[^\\/]*\\/prelogin$/g.test(path)\n // }\n // if(!isAuthPath){\n // isAuthPath = /^\\/identity\\/resources\\/auth\\/v[0-9]*\\/[^\\/]*\\/prelogin$/g.test(path)\n // }\n\n if (!isAuthPath) {\n const isSocialLoginPath = /^\\/identity\\/resources\\/auth\\/v[0-9]*\\/user\\/sso\\/default\\/[^\\/]*\\/prelogin$/.test(path);\n isAuthPath = (path.endsWith('/postlogin') || path.endsWith('/prelogin')) && !isSocialLoginPath;\n }\n\n return isAuthPath;\n}\n"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ const _excluded = ["router", "appName"];
|
|
|
21
21
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
22
22
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
23
23
|
const Connector = _ref => {
|
|
24
|
-
var _props$basename, _props$authOptions;
|
|
24
|
+
var _props$basename, _props$authOptions, _session$accessToken;
|
|
25
25
|
let {
|
|
26
26
|
router,
|
|
27
27
|
appName = 'default'
|
|
@@ -45,7 +45,9 @@ const Connector = _ref => {
|
|
|
45
45
|
appName,
|
|
46
46
|
storeHolder: storeHolder.current
|
|
47
47
|
}), [props]);
|
|
48
|
-
_restApi.ContextHolder.setOnRedirectTo(onRedirectTo);
|
|
48
|
+
_restApi.ContextHolder.for(appName).setOnRedirectTo(onRedirectTo);
|
|
49
|
+
_restApi.ContextHolder.for(appName).setAccessToken((_session$accessToken = session == null ? void 0 : session.accessToken) != null ? _session$accessToken : null);
|
|
50
|
+
_restApi.ContextHolder.for(appName).setUser(session == null ? void 0 : session['user']);
|
|
49
51
|
(0, _useRequestAuthorizeSSR.default)({
|
|
50
52
|
app,
|
|
51
53
|
user,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FronteggBaseProvider.js","names":["_interopRequireDefault","require","Object","defineProperty","exports","value","FronteggBaseProvider","_extends2","_objectWithoutPropertiesLoose2","_react","_interopRequireWildcard","_reactHooks","_restApi","_AppContext","_initializeFronteggApp","_useRequestAuthorizeSSR","_useOnRedirectTo","_config","_jsxRuntime","_excluded","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Connector","_ref","_props$basename","_props$authOptions","router","appName","props","isSSR","window","user","session","tenants","activeTenant","baseName","basename","storeHolder","useRef","onRedirectTo","useOnRedirectTo","authOptions","routes","app","useMemo","initializeFronteggApp","options","current","ContextHolder","setOnRedirectTo","useRequestAuthorizeSSR","jsx","Provider","children","FronteggStoreProvider","alwaysVisibleChildren","CustomComponentRegister","themeOptions","config","fronteggAppOptions","framework"],"sources":["../../../../packages/nextjs/src/common/FronteggBaseProvider.tsx"],"sourcesContent":["'use client';\n\nimport React, { FC, useMemo, useRef } from 'react';\nimport { FronteggStoreProvider, CustomComponentRegister } from '@frontegg/react-hooks';\nimport { ContextHolder } from '@frontegg/rest-api';\nimport type { FronteggProviderProps } from '../types';\nimport AppContext from './AppContext';\nimport initializeFronteggApp from '../utils/initializeFronteggApp';\nimport useRequestAuthorizeSSR from './useRequestAuthorizeSSR';\nimport useOnRedirectTo from '../utils/useOnRedirectTo';\nimport config from '../config';\n\nconst Connector: FC<FronteggProviderProps> = ({ router, appName = 'default', ...props }) => {\n const isSSR = typeof window === 'undefined';\n const { user, session, tenants, activeTenant } = props;\n const baseName = props.basename ?? '';\n const storeHolder = useRef({});\n\n const onRedirectTo = useOnRedirectTo(baseName, router, props.authOptions?.routes);\n\n const app = useMemo(\n () =>\n initializeFronteggApp({\n options: { ...props, basename: baseName },\n onRedirectTo,\n appName,\n storeHolder: storeHolder.current,\n }),\n [props]\n );\n ContextHolder.setOnRedirectTo(onRedirectTo);\n\n useRequestAuthorizeSSR({ app, user, tenants, activeTenant, session });\n return (\n <AppContext.Provider value={app}>\n <FronteggStoreProvider\n {...({ ...props, app } as any)}\n alwaysVisibleChildren={!isSSR && <CustomComponentRegister app={app} themeOptions={props.themeOptions} />}\n >\n {props.children}\n </FronteggStoreProvider>\n </AppContext.Provider>\n );\n};\n\nexport const FronteggBaseProvider: FC<FronteggProviderProps> = (props) => {\n config.fronteggAppOptions = props ?? {};\n\n return (\n <Connector {...props} framework={'nextjs'}>\n {props.children}\n </Connector>\n );\n};\n"],"mappings":";AAAA,YAAY;;AAAC,IAAAA,sBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,oBAAA;AAAA,IAAAC,SAAA,GAAAP,sBAAA,CAAAC,OAAA;AAAA,IAAAO,8BAAA,GAAAR,sBAAA,CAAAC,OAAA;AAEb,IAAAQ,MAAA,GAAAC,uBAAA,CAAAT,OAAA;AACA,IAAAU,WAAA,GAAAV,OAAA;AACA,IAAAW,QAAA,GAAAX,OAAA;AAEA,IAAAY,WAAA,GAAAb,sBAAA,CAAAC,OAAA;AACA,IAAAa,sBAAA,GAAAd,sBAAA,CAAAC,OAAA;AACA,IAAAc,uBAAA,GAAAf,sBAAA,CAAAC,OAAA;AACA,IAAAe,gBAAA,GAAAhB,sBAAA,CAAAC,OAAA;AACA,IAAAgB,OAAA,GAAAjB,sBAAA,CAAAC,OAAA;AAA+B,IAAAiB,WAAA,GAAAjB,OAAA;AAAA,MAAAkB,SAAA;AAAA,SAAAC,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAX,wBAAAe,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAA9B,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAA+B,wBAAA,WAAAC,GAAA,IAAAT,GAAA,QAAAS,GAAA,kBAAAhC,MAAA,CAAAiC,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAZ,GAAA,EAAAS,GAAA,SAAAI,IAAA,GAAAN,qBAAA,GAAA9B,MAAA,CAAA+B,wBAAA,CAAAR,GAAA,EAAAS,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAR,GAAA,IAAAQ,IAAA,CAAAC,GAAA,KAAArC,MAAA,CAAAC,cAAA,CAAA4B,MAAA,EAAAG,GAAA,EAAAI,IAAA,YAAAP,MAAA,CAAAG,GAAA,IAAAT,GAAA,CAAAS,GAAA,SAAAH,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAW,GAAA,CAAAd,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAE/B,MAAMS,SAAoC,GAAGC,IAAA,IAA+C;EAAA,IAAAC,eAAA,EAAAC,kBAAA;EAAA,IAA9C;MAAEC,MAAM;MAAEC,OAAO,GAAG;IAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"FronteggBaseProvider.js","names":["_interopRequireDefault","require","Object","defineProperty","exports","value","FronteggBaseProvider","_extends2","_objectWithoutPropertiesLoose2","_react","_interopRequireWildcard","_reactHooks","_restApi","_AppContext","_initializeFronteggApp","_useRequestAuthorizeSSR","_useOnRedirectTo","_config","_jsxRuntime","_excluded","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Connector","_ref","_props$basename","_props$authOptions","_session$accessToken","router","appName","props","isSSR","window","user","session","tenants","activeTenant","baseName","basename","storeHolder","useRef","onRedirectTo","useOnRedirectTo","authOptions","routes","app","useMemo","initializeFronteggApp","options","current","ContextHolder","for","setOnRedirectTo","setAccessToken","accessToken","setUser","useRequestAuthorizeSSR","jsx","Provider","children","FronteggStoreProvider","alwaysVisibleChildren","CustomComponentRegister","themeOptions","config","fronteggAppOptions","framework"],"sources":["../../../../packages/nextjs/src/common/FronteggBaseProvider.tsx"],"sourcesContent":["'use client';\n\nimport React, { FC, useMemo, useRef } from 'react';\nimport { FronteggStoreProvider, CustomComponentRegister } from '@frontegg/react-hooks';\nimport { ContextHolder, IUserProfile } from '@frontegg/rest-api';\nimport type { FronteggProviderProps } from '../types';\nimport AppContext from './AppContext';\nimport initializeFronteggApp from '../utils/initializeFronteggApp';\nimport useRequestAuthorizeSSR from './useRequestAuthorizeSSR';\nimport useOnRedirectTo from '../utils/useOnRedirectTo';\nimport config from '../config';\n\nconst Connector: FC<FronteggProviderProps> = ({ router, appName = 'default', ...props }) => {\n const isSSR = typeof window === 'undefined';\n const { user, session, tenants, activeTenant } = props;\n const baseName = props.basename ?? '';\n const storeHolder = useRef({});\n\n const onRedirectTo = useOnRedirectTo(baseName, router, props.authOptions?.routes);\n\n const app = useMemo(\n () =>\n initializeFronteggApp({\n options: { ...props, basename: baseName },\n onRedirectTo,\n appName,\n storeHolder: storeHolder.current,\n }),\n [props]\n );\n ContextHolder.for(appName).setOnRedirectTo(onRedirectTo);\n\n ContextHolder.for(appName).setAccessToken(session?.accessToken ?? null);\n ContextHolder.for(appName).setUser(session?.['user'] as any);\n useRequestAuthorizeSSR({ app, user, tenants, activeTenant, session });\n return (\n <AppContext.Provider value={app}>\n <FronteggStoreProvider\n {...({ ...props, app } as any)}\n alwaysVisibleChildren={!isSSR && <CustomComponentRegister app={app} themeOptions={props.themeOptions} />}\n >\n {props.children}\n </FronteggStoreProvider>\n </AppContext.Provider>\n );\n};\n\nexport const FronteggBaseProvider: FC<FronteggProviderProps> = (props) => {\n config.fronteggAppOptions = props ?? {};\n\n return (\n <Connector {...props} framework={'nextjs'}>\n {props.children}\n </Connector>\n );\n};\n"],"mappings":"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"}
|
package/common/hooks.js
CHANGED
|
@@ -15,12 +15,15 @@ var _urls = require("../api/urls");
|
|
|
15
15
|
*/
|
|
16
16
|
|
|
17
17
|
const useLogoutHostedLogin = () => {
|
|
18
|
+
const {
|
|
19
|
+
appName
|
|
20
|
+
} = (0, _reactHooks.useRootState)();
|
|
18
21
|
const {
|
|
19
22
|
logout
|
|
20
23
|
} = (0, _reactHooks.useLoginActions)();
|
|
21
24
|
return redirectUrl => {
|
|
22
|
-
var _ContextHolder$
|
|
23
|
-
const contextBaseUrl = (_ContextHolder$
|
|
25
|
+
var _ContextHolder$for$ge;
|
|
26
|
+
const contextBaseUrl = (_ContextHolder$for$ge = _restApi.ContextHolder.for(appName).getContext()) == null ? void 0 : _ContextHolder$for$ge.baseUrl;
|
|
24
27
|
const baseUrl = typeof contextBaseUrl === 'function' ? contextBaseUrl('') : contextBaseUrl;
|
|
25
28
|
const finalRedirectUrl = redirectUrl != null ? redirectUrl : window.location.href;
|
|
26
29
|
const logoutRoute = (0, _urls.buildLogoutRoute)(finalRedirectUrl, baseUrl).asPath;
|
package/common/hooks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","names":["_reactHooks","require","_restApi","_urls","useLogoutHostedLogin","logout","useLoginActions","redirectUrl","_ContextHolder$
|
|
1
|
+
{"version":3,"file":"hooks.js","names":["_reactHooks","require","_restApi","_urls","useLogoutHostedLogin","appName","useRootState","logout","useLoginActions","redirectUrl","_ContextHolder$for$ge","contextBaseUrl","ContextHolder","for","getContext","baseUrl","finalRedirectUrl","window","location","href","logoutRoute","buildLogoutRoute","asPath","exports"],"sources":["../../../../packages/nextjs/src/common/hooks.ts"],"sourcesContent":["import { useLoginActions, useRootState } from '@frontegg/react-hooks';\nimport { ContextHolder } from '@frontegg/rest-api';\nimport { buildLogoutRoute } from '../api/urls';\n\n/**\n * Hook to logout client side for hosted login\n * @returns {Function} logout function to be used in the client side for hosted login\n * @param redirectUrl - The URL to redirect to after successful logout will be window.location.href by default.\n * @deprecated use `const { logout } = useLoginActions();`\n */\n\nexport const useLogoutHostedLogin = () => {\n const { appName } = useRootState();\n const { logout } = useLoginActions();\n\n return (redirectUrl?: string) => {\n const contextBaseUrl = ContextHolder.for(appName).getContext()?.baseUrl;\n const baseUrl = typeof contextBaseUrl === 'function' ? contextBaseUrl('') : contextBaseUrl;\n const finalRedirectUrl = redirectUrl ?? window.location.href;\n const logoutRoute = buildLogoutRoute(finalRedirectUrl, baseUrl).asPath;\n logout(() => {\n window.location.href = logoutRoute;\n });\n };\n};\n"],"mappings":";;;;;;AAAA,IAAAA,WAAA,GAAAC,OAAA;AACA,IAAAC,QAAA,GAAAD,OAAA;AACA,IAAAE,KAAA,GAAAF,OAAA;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMG,oBAAoB,GAAGA,CAAA,KAAM;EACxC,MAAM;IAAEC;EAAQ,CAAC,GAAG,IAAAC,wBAAY,GAAE;EAClC,MAAM;IAAEC;EAAO,CAAC,GAAG,IAAAC,2BAAe,GAAE;EAEpC,OAAQC,WAAoB,IAAK;IAAA,IAAAC,qBAAA;IAC/B,MAAMC,cAAc,IAAAD,qBAAA,GAAGE,sBAAa,CAACC,GAAG,CAACR,OAAO,CAAC,CAACS,UAAU,EAAE,qBAAvCJ,qBAAA,CAAyCK,OAAO;IACvE,MAAMA,OAAO,GAAG,OAAOJ,cAAc,KAAK,UAAU,GAAGA,cAAc,CAAC,EAAE,CAAC,GAAGA,cAAc;IAC1F,MAAMK,gBAAgB,GAAGP,WAAW,WAAXA,WAAW,GAAIQ,MAAM,CAACC,QAAQ,CAACC,IAAI;IAC5D,MAAMC,WAAW,GAAG,IAAAC,sBAAgB,EAACL,gBAAgB,EAAED,OAAO,CAAC,CAACO,MAAM;IACtEf,MAAM,CAAC,MAAM;MACXU,MAAM,CAACC,QAAQ,CAACC,IAAI,GAAGC,WAAW;IACpC,CAAC,CAAC;EACJ,CAAC;AACH,CAAC;AAACG,OAAA,CAAAnB,oBAAA,GAAAA,oBAAA"}
|
package/config/constants.d.ts
CHANGED
|
@@ -21,6 +21,17 @@ export declare enum EnvVariables {
|
|
|
21
21
|
* - For Prod environment [visit](https://portal.frontegg.com/production/settings/general)
|
|
22
22
|
*/
|
|
23
23
|
FRONTEGG_CLIENT_ID = "FRONTEGG_CLIENT_ID",
|
|
24
|
+
/**
|
|
25
|
+
* Your Frontegg application ID, get it by visit:
|
|
26
|
+
* - For Dev environment [visit](https://portal.frontegg.com/development/applications)
|
|
27
|
+
* - For Prod environment [visit](https://portal.frontegg.com/production/applications)
|
|
28
|
+
*/
|
|
29
|
+
FRONTEGG_APP_ID = "FRONTEGG_APP_ID",
|
|
30
|
+
/**
|
|
31
|
+
* Rewrite the cookie name by the Frontegg application ID
|
|
32
|
+
* to support multiple Frontegg applications with same domain
|
|
33
|
+
*/
|
|
34
|
+
FRONTEGG_REWRITE_COOKIE_BY_APP_ID = "FRONTEGG_REWRITE_COOKIE_BY_APP_ID",
|
|
24
35
|
/**
|
|
25
36
|
* Your Frontegg application's Client Secret, get it by visit:
|
|
26
37
|
* - For Dev environment [visit](https://portal.frontegg.com/development/settings/general)
|
|
@@ -51,6 +62,16 @@ export declare enum EnvVariables {
|
|
|
51
62
|
* value as session cookies for supporting getServerSideProps and ServerComponents
|
|
52
63
|
*/
|
|
53
64
|
FRONTEGG_COOKIE_NAME = "FRONTEGG_COOKIE_NAME",
|
|
65
|
+
/**
|
|
66
|
+
* The stateless cookie domain for storing the encrypted JWT
|
|
67
|
+
* value as session cookies for supporting getServerSideProps and ServerComponents
|
|
68
|
+
*/
|
|
69
|
+
FRONTEGG_COOKIE_DOMAIN = "FRONTEGG_COOKIE_DOMAIN",
|
|
70
|
+
/**
|
|
71
|
+
* The stateless cookie same site value for storing the encrypted JWT
|
|
72
|
+
* default is none, you can set it to 'lax' or 'strict' for more security
|
|
73
|
+
*/
|
|
74
|
+
FRONTEGG_COOKIE_SAME_SITE = "FRONTEGG_COOKIE_SAME_SITE",
|
|
54
75
|
/**
|
|
55
76
|
* When `true`, the initial props will not refresh access token if it's valid.
|
|
56
77
|
*/
|
package/config/constants.js
CHANGED
|
@@ -9,10 +9,14 @@ let EnvVariables = /*#__PURE__*/function (EnvVariables) {
|
|
|
9
9
|
EnvVariables["FRONTEGG_BASE_URL"] = "FRONTEGG_BASE_URL";
|
|
10
10
|
EnvVariables["FRONTEGG_TEST_URL"] = "FRONTEGG_TEST_URL";
|
|
11
11
|
EnvVariables["FRONTEGG_CLIENT_ID"] = "FRONTEGG_CLIENT_ID";
|
|
12
|
+
EnvVariables["FRONTEGG_APP_ID"] = "FRONTEGG_APP_ID";
|
|
13
|
+
EnvVariables["FRONTEGG_REWRITE_COOKIE_BY_APP_ID"] = "FRONTEGG_REWRITE_COOKIE_BY_APP_ID";
|
|
12
14
|
EnvVariables["FRONTEGG_CLIENT_SECRET"] = "FRONTEGG_CLIENT_SECRET";
|
|
13
15
|
EnvVariables["FRONTEGG_ENCRYPTION_PASSWORD"] = "FRONTEGG_ENCRYPTION_PASSWORD";
|
|
14
16
|
EnvVariables["FRONTEGG_JWT_PUBLIC_KEY"] = "FRONTEGG_JWT_PUBLIC_KEY";
|
|
15
17
|
EnvVariables["FRONTEGG_COOKIE_NAME"] = "FRONTEGG_COOKIE_NAME";
|
|
18
|
+
EnvVariables["FRONTEGG_COOKIE_DOMAIN"] = "FRONTEGG_COOKIE_DOMAIN";
|
|
19
|
+
EnvVariables["FRONTEGG_COOKIE_SAME_SITE"] = "FRONTEGG_COOKIE_SAME_SITE";
|
|
16
20
|
EnvVariables["DISABLE_INITIAL_PROPS_REFRESH_TOKEN"] = "DISABLE_INITIAL_PROPS_REFRESH_TOKEN";
|
|
17
21
|
EnvVariables["FRONTEGG_SECURE_JWT_ENABLED"] = "FRONTEGG_SECURE_JWT_ENABLED";
|
|
18
22
|
EnvVariables["FRONTEGG_HOSTED_LOGIN"] = "FRONTEGG_HOSTED_LOGIN";
|
package/config/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","names":["EnvVariables","exports"],"sources":["../../../../packages/nextjs/src/config/constants.ts"],"sourcesContent":["export enum EnvVariables {\n /**\n * The AppUrl is to tell Frontegg your application's app url\n * for generating cookies and proxy http requests\n */\n FRONTEGG_APP_URL = 'FRONTEGG_APP_URL',\n /**\n * The Frontegg domain is your unique URL to connect to the Frontegg gateway, get it by visit:\n * - For Dev environment [visit](https://portal.frontegg.com/development/settings/domains)\n * - For Prod environment [visit](https://portal.frontegg.com/production/settings/domains)\n */\n FRONTEGG_BASE_URL = 'FRONTEGG_BASE_URL',\n /**\n * The Frontegg test domain used for testing proxy middleware\n * @private for Frontegg\n */\n FRONTEGG_TEST_URL = 'FRONTEGG_TEST_URL',\n\n /**\n * Your Frontegg application's Client ID, get it by visit:\n * - For Dev environment [visit](https://portal.frontegg.com/development/settings/general)\n * - For Prod environment [visit](https://portal.frontegg.com/production/settings/general)\n */\n FRONTEGG_CLIENT_ID = 'FRONTEGG_CLIENT_ID',\n\n /**\n * Your Frontegg application's Client Secret, get it by visit:\n * - For Dev environment [visit](https://portal.frontegg.com/development/settings/general)\n * - For Prod environment [visit](https://portal.frontegg.com/production/settings/general)\n */\n FRONTEGG_CLIENT_SECRET = 'FRONTEGG_CLIENT_SECRET',\n\n /**\n * The stateless session encryption password, used to encrypt\n * JWT before sending it to the client side.\n *\n * For quick password generation use the following command:\n *\n * ```sh\n * node -e \"console.log(crypto.randomBytes(32).toString('hex'))\"\n * ```\n */\n FRONTEGG_ENCRYPTION_PASSWORD = 'FRONTEGG_ENCRYPTION_PASSWORD',\n\n /**\n * The JWT public key generated by frontegg, to verify JWT before create session,\n * get it by visit: https://[YOUR_FRONTEGG_FOMAIN]/.well-known/jwks.json.\n *\n * Then: Copy and Paste the first key from the response:\n * {keys: [{__KEY__}]}\n */\n FRONTEGG_JWT_PUBLIC_KEY = 'FRONTEGG_JWT_PUBLIC_KEY',\n\n /**\n * The stateless cookie name for storing the encrypted JWT\n * value as session cookies for supporting getServerSideProps and ServerComponents\n */\n FRONTEGG_COOKIE_NAME = 'FRONTEGG_COOKIE_NAME',\n\n /**\n * When `true`, the initial props will not refresh access token if it's valid.\n */\n DISABLE_INITIAL_PROPS_REFRESH_TOKEN = 'DISABLE_INITIAL_PROPS_REFRESH_TOKEN',\n\n /**\n * Enable secure JWT by removing the signature from the JWT token.\n * In order to enable this feature, you need to provide {@link EnvVariables.FRONTEGG_CLIENT_SECRET}\n */\n FRONTEGG_SECURE_JWT_ENABLED = 'FRONTEGG_SECURE_JWT_ENABLED',\n\n /**\n * The Frontegg Hosted Login URL, used to redirect the user to the Frontegg login page\n * set to 'true' to enable the hosted login feature\n */\n FRONTEGG_HOSTED_LOGIN = 'FRONTEGG_HOSTED_LOGIN',\n\n /**\n * Forward client IP address to Frontegg gateway, used to detect the client's IP address\n * when the Next.js application using frontegg middleware proxy service\n * In order to enable this feature, you need to provide {@link EnvVariables.FRONTEGG_CLIENT_SECRET}\n */\n FRONTEGG_FORWARD_IP = 'FRONTEGG_FORWARD_IP',\n /**\n * This Env variable assign automatically when deploying you Next.js application\n * to Vercel deployments service, and will be used to detect to dynamically configure\n * the {@link EnvVariables.FRONTEGG_APP_URL}\n *\n * @see [Vercel Environment Variables](https://vercel.com/docs/concepts/projects/environment-variables#system-environment-variables)\n */\n VERCEL = 'VERCEL',\n VERCEL_URL = 'VERCEL_URL',\n}\n"],"mappings":";;;;;;IAAYA,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAAAC,OAAA,CAAAD,YAAA,GAAAA,YAAA"}
|
|
1
|
+
{"version":3,"file":"constants.js","names":["EnvVariables","exports"],"sources":["../../../../packages/nextjs/src/config/constants.ts"],"sourcesContent":["export enum EnvVariables {\n /**\n * The AppUrl is to tell Frontegg your application's app url\n * for generating cookies and proxy http requests\n */\n FRONTEGG_APP_URL = 'FRONTEGG_APP_URL',\n /**\n * The Frontegg domain is your unique URL to connect to the Frontegg gateway, get it by visit:\n * - For Dev environment [visit](https://portal.frontegg.com/development/settings/domains)\n * - For Prod environment [visit](https://portal.frontegg.com/production/settings/domains)\n */\n FRONTEGG_BASE_URL = 'FRONTEGG_BASE_URL',\n /**\n * The Frontegg test domain used for testing proxy middleware\n * @private for Frontegg\n */\n FRONTEGG_TEST_URL = 'FRONTEGG_TEST_URL',\n\n /**\n * Your Frontegg application's Client ID, get it by visit:\n * - For Dev environment [visit](https://portal.frontegg.com/development/settings/general)\n * - For Prod environment [visit](https://portal.frontegg.com/production/settings/general)\n */\n FRONTEGG_CLIENT_ID = 'FRONTEGG_CLIENT_ID',\n\n /**\n * Your Frontegg application ID, get it by visit:\n * - For Dev environment [visit](https://portal.frontegg.com/development/applications)\n * - For Prod environment [visit](https://portal.frontegg.com/production/applications)\n */\n FRONTEGG_APP_ID = 'FRONTEGG_APP_ID',\n\n /**\n * Rewrite the cookie name by the Frontegg application ID\n * to support multiple Frontegg applications with same domain\n */\n FRONTEGG_REWRITE_COOKIE_BY_APP_ID = 'FRONTEGG_REWRITE_COOKIE_BY_APP_ID',\n\n /**\n * Your Frontegg application's Client Secret, get it by visit:\n * - For Dev environment [visit](https://portal.frontegg.com/development/settings/general)\n * - For Prod environment [visit](https://portal.frontegg.com/production/settings/general)\n */\n FRONTEGG_CLIENT_SECRET = 'FRONTEGG_CLIENT_SECRET',\n\n /**\n * The stateless session encryption password, used to encrypt\n * JWT before sending it to the client side.\n *\n * For quick password generation use the following command:\n *\n * ```sh\n * node -e \"console.log(crypto.randomBytes(32).toString('hex'))\"\n * ```\n */\n FRONTEGG_ENCRYPTION_PASSWORD = 'FRONTEGG_ENCRYPTION_PASSWORD',\n\n /**\n * The JWT public key generated by frontegg, to verify JWT before create session,\n * get it by visit: https://[YOUR_FRONTEGG_FOMAIN]/.well-known/jwks.json.\n *\n * Then: Copy and Paste the first key from the response:\n * {keys: [{__KEY__}]}\n */\n FRONTEGG_JWT_PUBLIC_KEY = 'FRONTEGG_JWT_PUBLIC_KEY',\n\n /**\n * The stateless cookie name for storing the encrypted JWT\n * value as session cookies for supporting getServerSideProps and ServerComponents\n */\n FRONTEGG_COOKIE_NAME = 'FRONTEGG_COOKIE_NAME',\n\n /**\n * The stateless cookie domain for storing the encrypted JWT\n * value as session cookies for supporting getServerSideProps and ServerComponents\n */\n FRONTEGG_COOKIE_DOMAIN = 'FRONTEGG_COOKIE_DOMAIN',\n\n /**\n * The stateless cookie same site value for storing the encrypted JWT\n * default is none, you can set it to 'lax' or 'strict' for more security\n */\n FRONTEGG_COOKIE_SAME_SITE = 'FRONTEGG_COOKIE_SAME_SITE',\n\n /**\n * When `true`, the initial props will not refresh access token if it's valid.\n */\n DISABLE_INITIAL_PROPS_REFRESH_TOKEN = 'DISABLE_INITIAL_PROPS_REFRESH_TOKEN',\n\n /**\n * Enable secure JWT by removing the signature from the JWT token.\n * In order to enable this feature, you need to provide {@link EnvVariables.FRONTEGG_CLIENT_SECRET}\n */\n FRONTEGG_SECURE_JWT_ENABLED = 'FRONTEGG_SECURE_JWT_ENABLED',\n\n /**\n * The Frontegg Hosted Login URL, used to redirect the user to the Frontegg login page\n * set to 'true' to enable the hosted login feature\n */\n FRONTEGG_HOSTED_LOGIN = 'FRONTEGG_HOSTED_LOGIN',\n\n /**\n * Forward client IP address to Frontegg gateway, used to detect the client's IP address\n * when the Next.js application using frontegg middleware proxy service\n * In order to enable this feature, you need to provide {@link EnvVariables.FRONTEGG_CLIENT_SECRET}\n */\n FRONTEGG_FORWARD_IP = 'FRONTEGG_FORWARD_IP',\n /**\n * This Env variable assign automatically when deploying you Next.js application\n * to Vercel deployments service, and will be used to detect to dynamically configure\n * the {@link EnvVariables.FRONTEGG_APP_URL}\n *\n * @see [Vercel Environment Variables](https://vercel.com/docs/concepts/projects/environment-variables#system-environment-variables)\n */\n VERCEL = 'VERCEL',\n VERCEL_URL = 'VERCEL_URL',\n}\n"],"mappings":";;;;;;IAAYA,YAAY,0BAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAAAC,OAAA,CAAAD,YAAA,GAAAA,YAAA"}
|
package/config/index.d.ts
CHANGED
|
@@ -9,11 +9,14 @@ declare class Config {
|
|
|
9
9
|
get baseUrl(): string;
|
|
10
10
|
get baseUrlHost(): string;
|
|
11
11
|
get clientId(): string;
|
|
12
|
+
get appId(): string | undefined;
|
|
13
|
+
get rewriteCookieByAppId(): boolean;
|
|
12
14
|
get clientSecret(): string | undefined;
|
|
13
15
|
get jwtPublicKeyJson(): string | undefined;
|
|
14
16
|
get secureJwtEnabled(): string | undefined;
|
|
15
17
|
get cookieName(): string;
|
|
16
18
|
get cookieDomain(): string;
|
|
19
|
+
get cookieSameSite(): 'lax' | 'strict' | 'none';
|
|
17
20
|
get authRoutes(): Partial<AuthPageRoutes>;
|
|
18
21
|
private validatePassword;
|
|
19
22
|
get password(): PasswordsMap;
|
package/config/index.js
CHANGED
|
@@ -18,9 +18,13 @@ const setupEnvVariables = {
|
|
|
18
18
|
FRONTEGG_BASE_URL: process.env.FRONTEGG_BASE_URL,
|
|
19
19
|
FRONTEGG_TEST_URL: process.env.FRONTEGG_TEST_URL,
|
|
20
20
|
FRONTEGG_CLIENT_ID: process.env.FRONTEGG_CLIENT_ID,
|
|
21
|
+
FRONTEGG_APP_ID: process.env.FRONTEGG_APP_ID,
|
|
22
|
+
FRONTEGG_REWRITE_COOKIE_BY_APP_ID: process.env.FRONTEGG_REWRITE_COOKIE_BY_APP_ID,
|
|
21
23
|
FRONTEGG_CLIENT_SECRET: process.env.FRONTEGG_CLIENT_SECRET,
|
|
22
24
|
FRONTEGG_ENCRYPTION_PASSWORD: process.env.FRONTEGG_ENCRYPTION_PASSWORD,
|
|
23
25
|
FRONTEGG_COOKIE_NAME: process.env.FRONTEGG_COOKIE_NAME,
|
|
26
|
+
FRONTEGG_COOKIE_DOMAIN: process.env.FRONTEGG_COOKIE_DOMAIN,
|
|
27
|
+
FRONTEGG_COOKIE_SAME_SITE: process.env.FRONTEGG_COOKIE_SAME_SITE,
|
|
24
28
|
FRONTEGG_JWT_PUBLIC_KEY: process.env.FRONTEGG_JWT_PUBLIC_KEY,
|
|
25
29
|
FRONTEGG_SECURE_JWT_ENABLED: process.env.FRONTEGG_SECURE_JWT_ENABLED,
|
|
26
30
|
DISABLE_INITIAL_PROPS_REFRESH_TOKEN: process.env.DISABLE_INITIAL_PROPS_REFRESH_TOKEN,
|
|
@@ -55,6 +59,13 @@ class Config {
|
|
|
55
59
|
var _getEnv2;
|
|
56
60
|
return (_getEnv2 = (0, _helpers.getEnv)(_constants.EnvVariables.FRONTEGG_CLIENT_ID)) != null ? _getEnv2 : setupEnvVariables.FRONTEGG_CLIENT_ID;
|
|
57
61
|
}
|
|
62
|
+
get appId() {
|
|
63
|
+
return (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_APP_ID, setupEnvVariables.FRONTEGG_APP_ID);
|
|
64
|
+
}
|
|
65
|
+
get rewriteCookieByAppId() {
|
|
66
|
+
var _setupEnvVariables$FR;
|
|
67
|
+
return (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_REWRITE_COOKIE_BY_APP_ID, (_setupEnvVariables$FR = setupEnvVariables.FRONTEGG_REWRITE_COOKIE_BY_APP_ID) != null ? _setupEnvVariables$FR : 'false') === 'true';
|
|
68
|
+
}
|
|
58
69
|
get clientSecret() {
|
|
59
70
|
let clientSecret = undefined;
|
|
60
71
|
try {
|
|
@@ -80,12 +91,33 @@ class Config {
|
|
|
80
91
|
}
|
|
81
92
|
}
|
|
82
93
|
get cookieName() {
|
|
83
|
-
var _setupEnvVariables$
|
|
84
|
-
const cookieNameEnv = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_NAME, (_setupEnvVariables$
|
|
85
|
-
|
|
94
|
+
var _setupEnvVariables$FR2;
|
|
95
|
+
const cookieNameEnv = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_NAME, (_setupEnvVariables$FR2 = setupEnvVariables.FRONTEGG_COOKIE_NAME) != null ? _setupEnvVariables$FR2 : 'fe_session');
|
|
96
|
+
if (this.rewriteCookieByAppId && this.appId) {
|
|
97
|
+
return `${cookieNameEnv}-${this.appId.replace(/-/g, '')}`;
|
|
98
|
+
} else {
|
|
99
|
+
return `${cookieNameEnv}-${this.clientId.replace(/-/g, '')}`;
|
|
100
|
+
}
|
|
86
101
|
}
|
|
87
102
|
get cookieDomain() {
|
|
88
|
-
|
|
103
|
+
var _setupEnvVariables$FR3;
|
|
104
|
+
return (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_DOMAIN, (_setupEnvVariables$FR3 = setupEnvVariables.FRONTEGG_COOKIE_DOMAIN) != null ? _setupEnvVariables$FR3 : (0, _helpers.generateCookieDomain)(this.appUrl));
|
|
105
|
+
}
|
|
106
|
+
get cookieSameSite() {
|
|
107
|
+
var _setupEnvVariables$FR4;
|
|
108
|
+
let sameSite = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_SAME_SITE, (_setupEnvVariables$FR4 = setupEnvVariables.FRONTEGG_COOKIE_SAME_SITE) != null ? _setupEnvVariables$FR4 : 'none');
|
|
109
|
+
switch (sameSite) {
|
|
110
|
+
case 'true':
|
|
111
|
+
return 'strict';
|
|
112
|
+
case 'false':
|
|
113
|
+
return 'none';
|
|
114
|
+
case 'lax':
|
|
115
|
+
case 'strict':
|
|
116
|
+
case 'none':
|
|
117
|
+
return sameSite;
|
|
118
|
+
default:
|
|
119
|
+
return 'none';
|
|
120
|
+
}
|
|
89
121
|
}
|
|
90
122
|
get authRoutes() {
|
|
91
123
|
var _this$fronteggAppOpti, _this$fronteggAppOpti2, _this$fronteggAppOpti3;
|
|
@@ -127,9 +159,9 @@ class Config {
|
|
|
127
159
|
envAppUrl: this.appUrl,
|
|
128
160
|
envBaseUrl: this.baseUrl,
|
|
129
161
|
envClientId: this.clientId,
|
|
162
|
+
envAppId: this.appId,
|
|
130
163
|
secureJwtEnabled: this.secureJwtEnabled
|
|
131
164
|
};
|
|
132
|
-
console.log('this.appEnvConfig', config);
|
|
133
165
|
return config;
|
|
134
166
|
}
|
|
135
167
|
}
|
package/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_helpers","require","_constants","_errors","setupEnvVariables","FRONTEGG_APP_URL","process","env","FRONTEGG_BASE_URL","FRONTEGG_TEST_URL","FRONTEGG_CLIENT_ID","FRONTEGG_CLIENT_SECRET","FRONTEGG_ENCRYPTION_PASSWORD","FRONTEGG_COOKIE_NAME","FRONTEGG_JWT_PUBLIC_KEY","FRONTEGG_SECURE_JWT_ENABLED","DISABLE_INITIAL_PROPS_REFRESH_TOKEN","VERCEL","VERCEL_URL","Config","constructor","fronteggAppOptions","window","validatePassword","appUrl","generateAppUrl","testUrl","getEnvOrDefault","EnvVariables","baseUrl","_getEnv","getEnv","endsWith","slice","baseUrlHost","URL","hostname","clientId","_getEnv2","clientSecret","undefined","_getEnv3","e","secureJwtEnabled","InvalidFronteggEnv","jwtPublicKeyJson","_getEnv4","cookieName","_setupEnvVariables$FR","cookieNameEnv","replace","cookieDomain","generateCookieDomain","authRoutes","_this$fronteggAppOpti","_this$fronteggAppOpti2","_this$fronteggAppOpti3","authOptions","routes","passwordMaps","password","key","Object","keys","match","length","_getEnv5","encryptionPasswordEnv","normalizeStringPasswordToMap","isSSL","protocol","isHostedLogin","_this$fronteggAppOpti4","hostedLoginBox","FRONTEGG_HOSTED_LOGIN","isForwardIpEnabled","disableInitialPropsRefreshToken","appEnvConfig","config","envAppUrl","envBaseUrl","envClientId","console","log","_default","exports","default"],"sources":["../../../../packages/nextjs/src/config/index.ts"],"sourcesContent":["import { AuthPageRoutes } from '@frontegg/redux-store';\nimport { WithFronteggAppOptions } from '../pages';\nimport { AppEnvConfig, PasswordsMap } from './types';\nimport { generateAppUrl, generateCookieDomain, getEnv, getEnvOrDefault, normalizeStringPasswordToMap } from './helpers';\nimport { EnvVariables } from './constants';\nimport { InvalidFronteggEnv } from '../utils/errors';\n\nconst setupEnvVariables = {\n FRONTEGG_APP_URL: process.env.FRONTEGG_APP_URL,\n FRONTEGG_BASE_URL: process.env.FRONTEGG_BASE_URL,\n FRONTEGG_TEST_URL: process.env.FRONTEGG_TEST_URL,\n FRONTEGG_CLIENT_ID: process.env.FRONTEGG_CLIENT_ID,\n FRONTEGG_CLIENT_SECRET: process.env.FRONTEGG_CLIENT_SECRET,\n FRONTEGG_ENCRYPTION_PASSWORD: process.env.FRONTEGG_ENCRYPTION_PASSWORD,\n FRONTEGG_COOKIE_NAME: process.env.FRONTEGG_COOKIE_NAME,\n FRONTEGG_JWT_PUBLIC_KEY: process.env.FRONTEGG_JWT_PUBLIC_KEY,\n FRONTEGG_SECURE_JWT_ENABLED: process.env.FRONTEGG_SECURE_JWT_ENABLED,\n DISABLE_INITIAL_PROPS_REFRESH_TOKEN: process.env.DISABLE_INITIAL_PROPS_REFRESH_TOKEN,\n VERCEL: process.env.VERCEL,\n VERCEL_URL: process.env.VERCEL_URL,\n};\n\nclass Config {\n public fronteggAppOptions: Partial<WithFronteggAppOptions> = {};\n\n constructor() {\n if (typeof window === 'undefined') {\n this.validatePassword();\n }\n }\n\n get appUrl(): string {\n return generateAppUrl();\n }\n\n get testUrl(): string | undefined {\n return getEnvOrDefault(EnvVariables.FRONTEGG_TEST_URL, setupEnvVariables.FRONTEGG_TEST_URL);\n }\n\n get baseUrl(): string {\n const baseUrl = getEnv(EnvVariables.FRONTEGG_BASE_URL) ?? setupEnvVariables.FRONTEGG_BASE_URL;\n if (baseUrl.endsWith('/')) {\n return baseUrl.slice(0, -1);\n }\n return baseUrl;\n }\n\n get baseUrlHost(): string {\n return new URL(this.baseUrl).hostname;\n }\n\n get clientId(): string {\n return getEnv(EnvVariables.FRONTEGG_CLIENT_ID) ?? setupEnvVariables.FRONTEGG_CLIENT_ID;\n }\n\n get clientSecret(): string | undefined {\n let clientSecret = undefined;\n try {\n clientSecret = getEnv(EnvVariables.FRONTEGG_CLIENT_SECRET) ?? setupEnvVariables.FRONTEGG_CLIENT_SECRET;\n } catch (e) {\n clientSecret = setupEnvVariables.FRONTEGG_CLIENT_SECRET;\n }\n\n if (this.secureJwtEnabled === 'true' && !clientSecret) {\n throw new InvalidFronteggEnv(\n EnvVariables.FRONTEGG_CLIENT_SECRET,\n 'Client secret is required when secure JWT is enabled'\n );\n }\n return clientSecret;\n }\n\n get jwtPublicKeyJson(): string | undefined {\n return getEnv(EnvVariables.FRONTEGG_JWT_PUBLIC_KEY);\n }\n\n get secureJwtEnabled(): string | undefined {\n try {\n return getEnv(EnvVariables.FRONTEGG_SECURE_JWT_ENABLED) ?? setupEnvVariables.FRONTEGG_SECURE_JWT_ENABLED;\n } catch (e) {\n return setupEnvVariables.FRONTEGG_SECURE_JWT_ENABLED;\n }\n }\n\n get cookieName(): string {\n const cookieNameEnv = getEnvOrDefault(\n EnvVariables.FRONTEGG_COOKIE_NAME,\n setupEnvVariables.FRONTEGG_COOKIE_NAME ?? 'fe_session'\n );\n return `${cookieNameEnv}-${this.clientId.replace(/-/g, '')}`;\n }\n\n get cookieDomain(): string {\n return generateCookieDomain(this.appUrl);\n }\n\n get authRoutes(): Partial<AuthPageRoutes> {\n return this.fronteggAppOptions?.authOptions?.routes ?? {};\n }\n\n private validatePassword() {\n const passwordMaps = this.password;\n for (let key of Object.keys(passwordMaps)) {\n const password = passwordMaps[key];\n if (!password.match(/[0-9A-Fa-f]{6}/g) || password.length !== 64) {\n throw new InvalidFronteggEnv(\n EnvVariables.FRONTEGG_ENCRYPTION_PASSWORD,\n `Hex string.\\n\\nFor quick password generation use the following command:\\nnode -e \"console.log(crypto.randomBytes(32).toString('hex'))\"`\n );\n }\n }\n }\n\n get password(): PasswordsMap {\n const encryptionPasswordEnv =\n getEnv(EnvVariables.FRONTEGG_ENCRYPTION_PASSWORD) ?? setupEnvVariables.FRONTEGG_ENCRYPTION_PASSWORD;\n\n return normalizeStringPasswordToMap(encryptionPasswordEnv);\n }\n\n get isSSL(): boolean {\n return new URL(this.appUrl).protocol === 'https:';\n }\n\n get isHostedLogin(): boolean {\n return (\n this.fronteggAppOptions.hostedLoginBox ?? getEnvOrDefault(EnvVariables.FRONTEGG_HOSTED_LOGIN, 'false') === 'true'\n );\n }\n\n get isForwardIpEnabled(): boolean {\n if (this.clientSecret) {\n return getEnvOrDefault(EnvVariables.FRONTEGG_HOSTED_LOGIN, 'false') === 'true';\n }\n return false;\n }\n\n get disableInitialPropsRefreshToken(): boolean {\n const disableInitialPropsRefreshToken = getEnvOrDefault(\n EnvVariables.DISABLE_INITIAL_PROPS_REFRESH_TOKEN,\n setupEnvVariables.DISABLE_INITIAL_PROPS_REFRESH_TOKEN\n );\n return disableInitialPropsRefreshToken === 'true';\n }\n\n get appEnvConfig(): AppEnvConfig {\n const config = {\n envAppUrl: this.appUrl,\n envBaseUrl: this.baseUrl,\n envClientId: this.clientId,\n secureJwtEnabled: this.secureJwtEnabled,\n };\n console.log('this.appEnvConfig', config);\n return config;\n }\n}\n\nexport { EnvVariables } from './constants';\nexport default new Config();\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_helpers","require","_constants","_errors","setupEnvVariables","FRONTEGG_APP_URL","process","env","FRONTEGG_BASE_URL","FRONTEGG_TEST_URL","FRONTEGG_CLIENT_ID","FRONTEGG_APP_ID","FRONTEGG_REWRITE_COOKIE_BY_APP_ID","FRONTEGG_CLIENT_SECRET","FRONTEGG_ENCRYPTION_PASSWORD","FRONTEGG_COOKIE_NAME","FRONTEGG_COOKIE_DOMAIN","FRONTEGG_COOKIE_SAME_SITE","FRONTEGG_JWT_PUBLIC_KEY","FRONTEGG_SECURE_JWT_ENABLED","DISABLE_INITIAL_PROPS_REFRESH_TOKEN","VERCEL","VERCEL_URL","Config","constructor","fronteggAppOptions","window","validatePassword","appUrl","generateAppUrl","testUrl","getEnvOrDefault","EnvVariables","baseUrl","_getEnv","getEnv","endsWith","slice","baseUrlHost","URL","hostname","clientId","_getEnv2","appId","rewriteCookieByAppId","_setupEnvVariables$FR","clientSecret","undefined","_getEnv3","e","secureJwtEnabled","InvalidFronteggEnv","jwtPublicKeyJson","_getEnv4","cookieName","_setupEnvVariables$FR2","cookieNameEnv","replace","cookieDomain","_setupEnvVariables$FR3","generateCookieDomain","cookieSameSite","_setupEnvVariables$FR4","sameSite","authRoutes","_this$fronteggAppOpti","_this$fronteggAppOpti2","_this$fronteggAppOpti3","authOptions","routes","passwordMaps","password","key","Object","keys","match","length","_getEnv5","encryptionPasswordEnv","normalizeStringPasswordToMap","isSSL","protocol","isHostedLogin","_this$fronteggAppOpti4","hostedLoginBox","FRONTEGG_HOSTED_LOGIN","isForwardIpEnabled","disableInitialPropsRefreshToken","appEnvConfig","config","envAppUrl","envBaseUrl","envClientId","envAppId","_default","exports","default"],"sources":["../../../../packages/nextjs/src/config/index.ts"],"sourcesContent":["import { AuthPageRoutes } from '@frontegg/redux-store';\nimport { WithFronteggAppOptions } from '../pages';\nimport { AppEnvConfig, PasswordsMap } from './types';\nimport { generateAppUrl, generateCookieDomain, getEnv, getEnvOrDefault, normalizeStringPasswordToMap } from './helpers';\nimport { EnvVariables } from './constants';\nimport { InvalidFronteggEnv } from '../utils/errors';\n\nconst setupEnvVariables = {\n FRONTEGG_APP_URL: process.env.FRONTEGG_APP_URL,\n FRONTEGG_BASE_URL: process.env.FRONTEGG_BASE_URL,\n FRONTEGG_TEST_URL: process.env.FRONTEGG_TEST_URL,\n FRONTEGG_CLIENT_ID: process.env.FRONTEGG_CLIENT_ID,\n FRONTEGG_APP_ID: process.env.FRONTEGG_APP_ID,\n FRONTEGG_REWRITE_COOKIE_BY_APP_ID: process.env.FRONTEGG_REWRITE_COOKIE_BY_APP_ID,\n FRONTEGG_CLIENT_SECRET: process.env.FRONTEGG_CLIENT_SECRET,\n FRONTEGG_ENCRYPTION_PASSWORD: process.env.FRONTEGG_ENCRYPTION_PASSWORD,\n FRONTEGG_COOKIE_NAME: process.env.FRONTEGG_COOKIE_NAME,\n FRONTEGG_COOKIE_DOMAIN: process.env.FRONTEGG_COOKIE_DOMAIN,\n FRONTEGG_COOKIE_SAME_SITE: process.env.FRONTEGG_COOKIE_SAME_SITE,\n FRONTEGG_JWT_PUBLIC_KEY: process.env.FRONTEGG_JWT_PUBLIC_KEY,\n FRONTEGG_SECURE_JWT_ENABLED: process.env.FRONTEGG_SECURE_JWT_ENABLED,\n DISABLE_INITIAL_PROPS_REFRESH_TOKEN: process.env.DISABLE_INITIAL_PROPS_REFRESH_TOKEN,\n VERCEL: process.env.VERCEL,\n VERCEL_URL: process.env.VERCEL_URL,\n};\n\nclass Config {\n public fronteggAppOptions: Partial<WithFronteggAppOptions> = {};\n\n constructor() {\n if (typeof window === 'undefined') {\n this.validatePassword();\n }\n }\n\n get appUrl(): string {\n return generateAppUrl();\n }\n\n get testUrl(): string | undefined {\n return getEnvOrDefault(EnvVariables.FRONTEGG_TEST_URL, setupEnvVariables.FRONTEGG_TEST_URL);\n }\n\n get baseUrl(): string {\n const baseUrl = getEnv(EnvVariables.FRONTEGG_BASE_URL) ?? setupEnvVariables.FRONTEGG_BASE_URL;\n if (baseUrl.endsWith('/')) {\n return baseUrl.slice(0, -1);\n }\n return baseUrl;\n }\n\n get baseUrlHost(): string {\n return new URL(this.baseUrl).hostname;\n }\n\n get clientId(): string {\n return getEnv(EnvVariables.FRONTEGG_CLIENT_ID) ?? setupEnvVariables.FRONTEGG_CLIENT_ID;\n }\n\n get appId(): string | undefined {\n return getEnvOrDefault(EnvVariables.FRONTEGG_APP_ID, setupEnvVariables.FRONTEGG_APP_ID);\n }\n get rewriteCookieByAppId(): boolean {\n return (\n getEnvOrDefault(\n EnvVariables.FRONTEGG_REWRITE_COOKIE_BY_APP_ID,\n setupEnvVariables.FRONTEGG_REWRITE_COOKIE_BY_APP_ID ?? 'false'\n ) === 'true'\n );\n }\n\n get clientSecret(): string | undefined {\n let clientSecret = undefined;\n try {\n clientSecret = getEnv(EnvVariables.FRONTEGG_CLIENT_SECRET) ?? setupEnvVariables.FRONTEGG_CLIENT_SECRET;\n } catch (e) {\n clientSecret = setupEnvVariables.FRONTEGG_CLIENT_SECRET;\n }\n\n if (this.secureJwtEnabled === 'true' && !clientSecret) {\n throw new InvalidFronteggEnv(\n EnvVariables.FRONTEGG_CLIENT_SECRET,\n 'Client secret is required when secure JWT is enabled'\n );\n }\n return clientSecret;\n }\n\n get jwtPublicKeyJson(): string | undefined {\n return getEnv(EnvVariables.FRONTEGG_JWT_PUBLIC_KEY);\n }\n\n get secureJwtEnabled(): string | undefined {\n try {\n return getEnv(EnvVariables.FRONTEGG_SECURE_JWT_ENABLED) ?? setupEnvVariables.FRONTEGG_SECURE_JWT_ENABLED;\n } catch (e) {\n return setupEnvVariables.FRONTEGG_SECURE_JWT_ENABLED;\n }\n }\n\n get cookieName(): string {\n const cookieNameEnv = getEnvOrDefault(\n EnvVariables.FRONTEGG_COOKIE_NAME,\n setupEnvVariables.FRONTEGG_COOKIE_NAME ?? 'fe_session'\n );\n\n if (this.rewriteCookieByAppId && this.appId) {\n return `${cookieNameEnv}-${this.appId.replace(/-/g, '')}`;\n } else {\n return `${cookieNameEnv}-${this.clientId.replace(/-/g, '')}`;\n }\n }\n\n get cookieDomain(): string {\n return getEnvOrDefault(\n EnvVariables.FRONTEGG_COOKIE_DOMAIN,\n setupEnvVariables.FRONTEGG_COOKIE_DOMAIN ?? generateCookieDomain(this.appUrl)\n );\n }\n\n get cookieSameSite(): 'lax' | 'strict' | 'none' {\n let sameSite = getEnvOrDefault(\n EnvVariables.FRONTEGG_COOKIE_SAME_SITE,\n setupEnvVariables.FRONTEGG_COOKIE_SAME_SITE ?? 'none'\n );\n switch (sameSite) {\n case 'true':\n return 'strict';\n case 'false':\n return 'none';\n case 'lax':\n case 'strict':\n case 'none':\n return sameSite;\n default:\n return 'none';\n }\n }\n\n get authRoutes(): Partial<AuthPageRoutes> {\n return this.fronteggAppOptions?.authOptions?.routes ?? {};\n }\n\n private validatePassword() {\n const passwordMaps = this.password;\n for (let key of Object.keys(passwordMaps)) {\n const password = passwordMaps[key];\n if (!password.match(/[0-9A-Fa-f]{6}/g) || password.length !== 64) {\n throw new InvalidFronteggEnv(\n EnvVariables.FRONTEGG_ENCRYPTION_PASSWORD,\n `Hex string.\\n\\nFor quick password generation use the following command:\\nnode -e \"console.log(crypto.randomBytes(32).toString('hex'))\"`\n );\n }\n }\n }\n\n get password(): PasswordsMap {\n const encryptionPasswordEnv =\n getEnv(EnvVariables.FRONTEGG_ENCRYPTION_PASSWORD) ?? setupEnvVariables.FRONTEGG_ENCRYPTION_PASSWORD;\n\n return normalizeStringPasswordToMap(encryptionPasswordEnv);\n }\n\n get isSSL(): boolean {\n return new URL(this.appUrl).protocol === 'https:';\n }\n\n get isHostedLogin(): boolean {\n return (\n this.fronteggAppOptions.hostedLoginBox ?? getEnvOrDefault(EnvVariables.FRONTEGG_HOSTED_LOGIN, 'false') === 'true'\n );\n }\n\n get isForwardIpEnabled(): boolean {\n if (this.clientSecret) {\n return getEnvOrDefault(EnvVariables.FRONTEGG_HOSTED_LOGIN, 'false') === 'true';\n }\n return false;\n }\n\n get disableInitialPropsRefreshToken(): boolean {\n const disableInitialPropsRefreshToken = getEnvOrDefault(\n EnvVariables.DISABLE_INITIAL_PROPS_REFRESH_TOKEN,\n setupEnvVariables.DISABLE_INITIAL_PROPS_REFRESH_TOKEN\n );\n return disableInitialPropsRefreshToken === 'true';\n }\n\n get appEnvConfig(): AppEnvConfig {\n const config = {\n envAppUrl: this.appUrl,\n envBaseUrl: this.baseUrl,\n envClientId: this.clientId,\n envAppId: this.appId,\n secureJwtEnabled: this.secureJwtEnabled,\n };\n return config;\n }\n}\n\nexport { EnvVariables } from './constants';\nexport default new Config();\n"],"mappings":"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"}
|
package/edge/getSessionOnEdge.js
CHANGED
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
7
|
exports.isHostedLoginCallback = exports.handleHostedLoginCallback = exports.getSessionOnEdge = void 0;
|
|
8
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
8
9
|
var _cookies = _interopRequireDefault(require("../utils/cookies"));
|
|
9
10
|
var _createSession = _interopRequireDefault(require("../utils/createSession"));
|
|
10
11
|
var _encryptionEdge = _interopRequireDefault(require("../utils/encryption-edge"));
|
|
@@ -12,6 +13,7 @@ var _api = _interopRequireDefault(require("../api"));
|
|
|
12
13
|
var _server = require("next/server");
|
|
13
14
|
var _config = _interopRequireDefault(require("../config"));
|
|
14
15
|
var _jwt = _interopRequireDefault(require("../utils/jwt"));
|
|
16
|
+
var _utils = require("../api/utils");
|
|
15
17
|
async function createSessionFromAccessTokenEdge(data) {
|
|
16
18
|
var _data$accessToken, _data$refreshToken;
|
|
17
19
|
const accessToken = (_data$accessToken = data.accessToken) != null ? _data$accessToken : data.access_token;
|
|
@@ -33,14 +35,25 @@ const getSessionOnEdge = req => {
|
|
|
33
35
|
};
|
|
34
36
|
exports.getSessionOnEdge = getSessionOnEdge;
|
|
35
37
|
const handleHostedLoginCallback = async (req, pathname, searchParams) => {
|
|
36
|
-
var _searchParams$get;
|
|
38
|
+
var _searchParams$get, _req$headers;
|
|
37
39
|
if (!isHostedLoginCallback(pathname, searchParams)) {
|
|
38
40
|
return _server.NextResponse.next();
|
|
39
41
|
}
|
|
40
42
|
const code = (_searchParams$get = searchParams.get('code')) != null ? _searchParams$get : '';
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
43
|
+
let headers = {};
|
|
44
|
+
let clientIp = undefined;
|
|
45
|
+
if (typeof ((_req$headers = req.headers) == null ? void 0 : _req$headers.get) === 'function') {
|
|
46
|
+
var _socket;
|
|
47
|
+
clientIp = req.headers.get('cf-connecting-ip') || req.headers.get('x-original-forwarded-for') || req.headers.get('x-forwarded-for') || ((_socket = req.socket) == null ? void 0 : _socket.remoteAddress);
|
|
48
|
+
} else if (typeof req.headers === 'object') {
|
|
49
|
+
var _socket2;
|
|
50
|
+
let requestHeaders = (0, _extends2.default)({}, req.headers);
|
|
51
|
+
clientIp = requestHeaders['cf-connecting-ip'] || requestHeaders['x-original-forwarded-for'] || requestHeaders['x-forwarded-for'] || ((_socket2 = req.socket) == null ? void 0 : _socket2.remoteAddress);
|
|
52
|
+
}
|
|
53
|
+
if (clientIp) {
|
|
54
|
+
headers['x-original-forwarded-for'] = clientIp;
|
|
55
|
+
}
|
|
56
|
+
const response = await _api.default.exchangeHostedLoginToken((0, _utils.buildRequestHeaders)(headers), code, _config.default.clientId, _config.default.clientSecret);
|
|
44
57
|
const data = await response.json();
|
|
45
58
|
const [session, decodedJwt, refreshToken] = await createSessionFromAccessTokenEdge(data);
|
|
46
59
|
if (!session) {
|
|
@@ -52,8 +65,12 @@ const handleHostedLoginCallback = async (req, pathname, searchParams) => {
|
|
|
52
65
|
expires: new Date(decodedJwt.exp * 1000),
|
|
53
66
|
secure: isSecured
|
|
54
67
|
});
|
|
68
|
+
let cookieName = `fe_refresh_${_config.default.clientId.replace('-', '')}`;
|
|
69
|
+
if (_config.default.rewriteCookieByAppId && _config.default.appId) {
|
|
70
|
+
cookieName = `fe_refresh_${_config.default.appId.replace('-', '')}`;
|
|
71
|
+
}
|
|
55
72
|
const refreshCookie = _cookies.default.create({
|
|
56
|
-
cookieName
|
|
73
|
+
cookieName,
|
|
57
74
|
value: refreshToken != null ? refreshToken : '',
|
|
58
75
|
expires: new Date(decodedJwt.exp * 1000),
|
|
59
76
|
secure: isSecured
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getSessionOnEdge.js","names":["_cookies","_interopRequireDefault","require","_createSession","_encryptionEdge","_api","_server","_config","_jwt","createSessionFromAccessTokenEdge","data","_data$accessToken","_data$refreshToken","accessToken","access_token","refreshToken","refresh_token","payload","decodedJwt","JwtManager","verify","expiresIn","Math","floor","exp","Date","now","tokens","session","encryptionUtils","sealTokens","getSessionOnEdge","req","cookies","CookieManager","getSessionCookieFromRequest","createSession","encryptionEdge","exports","handleHostedLoginCallback","pathname","searchParams","_searchParams$get","isHostedLoginCallback","NextResponse","next","code","get","response","api","exchangeHostedLoginToken","config","clientId","clientSecret","json","redirect","appUrl","isSecured","isSSL","cookieValue","create","value","expires","secure","
|
|
1
|
+
{"version":3,"file":"getSessionOnEdge.js","names":["_cookies","_interopRequireDefault","require","_createSession","_encryptionEdge","_api","_server","_config","_jwt","_utils","createSessionFromAccessTokenEdge","data","_data$accessToken","_data$refreshToken","accessToken","access_token","refreshToken","refresh_token","payload","decodedJwt","JwtManager","verify","expiresIn","Math","floor","exp","Date","now","tokens","session","encryptionUtils","sealTokens","getSessionOnEdge","req","cookies","CookieManager","getSessionCookieFromRequest","createSession","encryptionEdge","exports","handleHostedLoginCallback","pathname","searchParams","_searchParams$get","_req$headers","isHostedLoginCallback","NextResponse","next","code","get","headers","clientIp","undefined","_socket","socket","remoteAddress","_socket2","requestHeaders","_extends2","default","response","api","exchangeHostedLoginToken","buildRequestHeaders","config","clientId","clientSecret","json","redirect","appUrl","isSecured","isSSL","cookieValue","create","value","expires","secure","cookieName","replace","rewriteCookieByAppId","appId","refreshCookie","sessionCookieHeaders","map","cookie","refreshCookieHeaders","secureJwtEnabled","startsWith"],"sources":["../../../../packages/nextjs/src/edge/getSessionOnEdge.ts"],"sourcesContent":["import type { IncomingMessage } from 'http';\nimport { FronteggNextJSSession } from '../types';\nimport CookieManager from '../utils/cookies';\nimport createSession from '../utils/createSession';\nimport encryptionEdge from '../utils/encryption-edge';\nimport api from '../api';\nimport { NextResponse } from 'next/server';\nimport config from '../config';\nimport JwtManager from '../utils/jwt';\nimport encryptionUtils from '../utils/encryption-edge';\nimport Cookies from '../utils/cookies';\nimport { buildRequestHeaders } from '../api/utils';\n\nasync function createSessionFromAccessTokenEdge(data: any): Promise<[string, any, string] | []> {\n const accessToken = data.accessToken ?? data.access_token;\n const refreshToken = data.refreshToken ?? data.refresh_token;\n const { payload: decodedJwt }: any = await JwtManager.verify(accessToken);\n decodedJwt.expiresIn = Math.floor((decodedJwt.exp * 1000 - Date.now()) / 1000);\n\n const tokens = { accessToken, refreshToken };\n const session = await encryptionUtils.sealTokens(tokens, decodedJwt.exp);\n return [session, decodedJwt, refreshToken];\n}\n\nexport const getSessionOnEdge = (req: IncomingMessage | Request): Promise<FronteggNextJSSession | undefined> => {\n const cookies = CookieManager.getSessionCookieFromRequest(req);\n return createSession(cookies, encryptionEdge);\n};\n\nexport const handleHostedLoginCallback = async (\n req: IncomingMessage | Request,\n pathname: string,\n searchParams: URLSearchParams\n): Promise<NextResponse> => {\n if (!isHostedLoginCallback(pathname, searchParams)) {\n return NextResponse.next();\n }\n\n const code = searchParams.get('code') ?? '';\n\n let headers: Record<string, string> = {};\n let clientIp: string | undefined = undefined;\n if (typeof req.headers?.get === 'function') {\n clientIp =\n req.headers.get('cf-connecting-ip') ||\n req.headers.get('x-original-forwarded-for') ||\n req.headers.get('x-forwarded-for') ||\n (req as any).socket?.remoteAddress;\n } else if (typeof req.headers === 'object') {\n let requestHeaders: any = { ...req.headers };\n clientIp =\n requestHeaders['cf-connecting-ip'] ||\n requestHeaders['x-original-forwarded-for'] ||\n requestHeaders['x-forwarded-for'] ||\n (req as any).socket?.remoteAddress;\n }\n\n if (clientIp) {\n headers['x-original-forwarded-for'] = clientIp;\n }\n\n const response = await api.exchangeHostedLoginToken(\n buildRequestHeaders(headers),\n code,\n config.clientId,\n config.clientSecret!\n );\n\n const data = await response.json();\n\n const [session, decodedJwt, refreshToken] = await createSessionFromAccessTokenEdge(data);\n\n if (!session) {\n return NextResponse.redirect(config.appUrl);\n }\n const isSecured = config.isSSL;\n const cookieValue = CookieManager.create({\n value: session,\n expires: new Date(decodedJwt.exp * 1000),\n secure: isSecured,\n });\n\n let cookieName = `fe_refresh_${config.clientId.replace('-', '')}`;\n if (config.rewriteCookieByAppId && config.appId) {\n cookieName = `fe_refresh_${config.appId.replace('-', '')}`;\n }\n const refreshCookie = CookieManager.create({\n cookieName,\n value: refreshToken ?? '',\n expires: new Date(decodedJwt.exp * 1000),\n secure: isSecured,\n });\n const sessionCookieHeaders: [string, string][] = cookieValue.map((cookie) => ['set-cookie', cookie]);\n const refreshCookieHeaders: [string, string][] = refreshCookie.map((cookie) => ['set-cookie', cookie]);\n\n return NextResponse.redirect(config.appUrl, {\n headers: [...sessionCookieHeaders, ...refreshCookieHeaders],\n });\n};\n\nexport const isHostedLoginCallback = (pathname: string, searchParams: URLSearchParams): boolean => {\n if (config.secureJwtEnabled) {\n if (pathname.startsWith('/oauth/callback')) {\n return searchParams.get('code') != null;\n }\n }\n return false;\n};\n"],"mappings":";;;;;;;;AAEA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,cAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,eAAA,GAAAH,sBAAA,CAAAC,OAAA;AACA,IAAAG,IAAA,GAAAJ,sBAAA,CAAAC,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,OAAA,GAAAN,sBAAA,CAAAC,OAAA;AACA,IAAAM,IAAA,GAAAP,sBAAA,CAAAC,OAAA;AAGA,IAAAO,MAAA,GAAAP,OAAA;AAEA,eAAeQ,gCAAgCA,CAACC,IAAS,EAAuC;EAAA,IAAAC,iBAAA,EAAAC,kBAAA;EAC9F,MAAMC,WAAW,IAAAF,iBAAA,GAAGD,IAAI,CAACG,WAAW,YAAAF,iBAAA,GAAID,IAAI,CAACI,YAAY;EACzD,MAAMC,YAAY,IAAAH,kBAAA,GAAGF,IAAI,CAACK,YAAY,YAAAH,kBAAA,GAAIF,IAAI,CAACM,aAAa;EAC5D,MAAM;IAAEC,OAAO,EAAEC;EAAgB,CAAC,GAAG,MAAMC,YAAU,CAACC,MAAM,CAACP,WAAW,CAAC;EACzEK,UAAU,CAACG,SAAS,GAAGC,IAAI,CAACC,KAAK,CAAC,CAACL,UAAU,CAACM,GAAG,GAAG,IAAI,GAAGC,IAAI,CAACC,GAAG,EAAE,IAAI,IAAI,CAAC;EAE9E,MAAMC,MAAM,GAAG;IAAEd,WAAW;IAAEE;EAAa,CAAC;EAC5C,MAAMa,OAAO,GAAG,MAAMC,uBAAe,CAACC,UAAU,CAACH,MAAM,EAAET,UAAU,CAACM,GAAG,CAAC;EACxE,OAAO,CAACI,OAAO,EAAEV,UAAU,EAAEH,YAAY,CAAC;AAC5C;AAEO,MAAMgB,gBAAgB,GAAIC,GAA8B,IAAiD;EAC9G,MAAMC,OAAO,GAAGC,gBAAa,CAACC,2BAA2B,CAACH,GAAG,CAAC;EAC9D,OAAO,IAAAI,sBAAa,EAACH,OAAO,EAAEI,uBAAc,CAAC;AAC/C,CAAC;AAACC,OAAA,CAAAP,gBAAA,GAAAA,gBAAA;AAEK,MAAMQ,yBAAyB,GAAG,MAAAA,CACvCP,GAA8B,EAC9BQ,QAAgB,EAChBC,YAA6B,KACH;EAAA,IAAAC,iBAAA,EAAAC,YAAA;EAC1B,IAAI,CAACC,qBAAqB,CAACJ,QAAQ,EAAEC,YAAY,CAAC,EAAE;IAClD,OAAOI,oBAAY,CAACC,IAAI,EAAE;EAC5B;EAEA,MAAMC,IAAI,IAAAL,iBAAA,GAAGD,YAAY,CAACO,GAAG,CAAC,MAAM,CAAC,YAAAN,iBAAA,GAAI,EAAE;EAE3C,IAAIO,OAA+B,GAAG,CAAC,CAAC;EACxC,IAAIC,QAA4B,GAAGC,SAAS;EAC5C,IAAI,SAAAR,YAAA,GAAOX,GAAG,CAACiB,OAAO,qBAAXN,YAAA,CAAaK,GAAG,MAAK,UAAU,EAAE;IAAA,IAAAI,OAAA;IAC1CF,QAAQ,GACNlB,GAAG,CAACiB,OAAO,CAACD,GAAG,CAAC,kBAAkB,CAAC,IACnChB,GAAG,CAACiB,OAAO,CAACD,GAAG,CAAC,0BAA0B,CAAC,IAC3ChB,GAAG,CAACiB,OAAO,CAACD,GAAG,CAAC,iBAAiB,CAAC,MAAAI,OAAA,GACjCpB,GAAG,CAASqB,MAAM,qBAAnBD,OAAA,CAAqBE,aAAa;EACtC,CAAC,MAAM,IAAI,OAAOtB,GAAG,CAACiB,OAAO,KAAK,QAAQ,EAAE;IAAA,IAAAM,QAAA;IAC1C,IAAIC,cAAmB,OAAAC,SAAA,CAAAC,OAAA,MAAQ1B,GAAG,CAACiB,OAAO,CAAE;IAC5CC,QAAQ,GACNM,cAAc,CAAC,kBAAkB,CAAC,IAClCA,cAAc,CAAC,0BAA0B,CAAC,IAC1CA,cAAc,CAAC,iBAAiB,CAAC,MAAAD,QAAA,GAChCvB,GAAG,CAASqB,MAAM,qBAAnBE,QAAA,CAAqBD,aAAa;EACtC;EAEA,IAAIJ,QAAQ,EAAE;IACZD,OAAO,CAAC,0BAA0B,CAAC,GAAGC,QAAQ;EAChD;EAEA,MAAMS,QAAQ,GAAG,MAAMC,YAAG,CAACC,wBAAwB,CACjD,IAAAC,0BAAmB,EAACb,OAAO,CAAC,EAC5BF,IAAI,EACJgB,eAAM,CAACC,QAAQ,EACfD,eAAM,CAACE,YAAY,CACpB;EAED,MAAMvD,IAAI,GAAG,MAAMiD,QAAQ,CAACO,IAAI,EAAE;EAElC,MAAM,CAACtC,OAAO,EAAEV,UAAU,EAAEH,YAAY,CAAC,GAAG,MAAMN,gCAAgC,CAACC,IAAI,CAAC;EAExF,IAAI,CAACkB,OAAO,EAAE;IACZ,OAAOiB,oBAAY,CAACsB,QAAQ,CAACJ,eAAM,CAACK,MAAM,CAAC;EAC7C;EACA,MAAMC,SAAS,GAAGN,eAAM,CAACO,KAAK;EAC9B,MAAMC,WAAW,GAAGrC,gBAAa,CAACsC,MAAM,CAAC;IACvCC,KAAK,EAAE7C,OAAO;IACd8C,OAAO,EAAE,IAAIjD,IAAI,CAACP,UAAU,CAACM,GAAG,GAAG,IAAI,CAAC;IACxCmD,MAAM,EAAEN;EACV,CAAC,CAAC;EAEF,IAAIO,UAAU,GAAI,cAAab,eAAM,CAACC,QAAQ,CAACa,OAAO,CAAC,GAAG,EAAE,EAAE,CAAE,EAAC;EACjE,IAAId,eAAM,CAACe,oBAAoB,IAAIf,eAAM,CAACgB,KAAK,EAAE;IAC/CH,UAAU,GAAI,cAAab,eAAM,CAACgB,KAAK,CAACF,OAAO,CAAC,GAAG,EAAE,EAAE,CAAE,EAAC;EAC5D;EACA,MAAMG,aAAa,GAAG9C,gBAAa,CAACsC,MAAM,CAAC;IACzCI,UAAU;IACVH,KAAK,EAAE1D,YAAY,WAAZA,YAAY,GAAI,EAAE;IACzB2D,OAAO,EAAE,IAAIjD,IAAI,CAACP,UAAU,CAACM,GAAG,GAAG,IAAI,CAAC;IACxCmD,MAAM,EAAEN;EACV,CAAC,CAAC;EACF,MAAMY,oBAAwC,GAAGV,WAAW,CAACW,GAAG,CAAEC,MAAM,IAAK,CAAC,YAAY,EAAEA,MAAM,CAAC,CAAC;EACpG,MAAMC,oBAAwC,GAAGJ,aAAa,CAACE,GAAG,CAAEC,MAAM,IAAK,CAAC,YAAY,EAAEA,MAAM,CAAC,CAAC;EAEtG,OAAOtC,oBAAY,CAACsB,QAAQ,CAACJ,eAAM,CAACK,MAAM,EAAE;IAC1CnB,OAAO,EAAE,CAAC,GAAGgC,oBAAoB,EAAE,GAAGG,oBAAoB;EAC5D,CAAC,CAAC;AACJ,CAAC;AAAC9C,OAAA,CAAAC,yBAAA,GAAAA,yBAAA;AAEK,MAAMK,qBAAqB,GAAGA,CAACJ,QAAgB,EAAEC,YAA6B,KAAc;EACjG,IAAIsB,eAAM,CAACsB,gBAAgB,EAAE;IAC3B,IAAI7C,QAAQ,CAAC8C,UAAU,CAAC,iBAAiB,CAAC,EAAE;MAC1C,OAAO7C,YAAY,CAACO,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;IACzC;EACF;EACA,OAAO,KAAK;AACd,CAAC;AAACV,OAAA,CAAAM,qBAAA,GAAAA,qBAAA"}
|
package/index.js
CHANGED
|
@@ -32,23 +32,23 @@ const ProxyRequestCallback = (proxyReq, req) => {
|
|
|
32
32
|
return cookieName.startsWith('fe_') && !cookieName.startsWith(_config.default.cookieName);
|
|
33
33
|
});
|
|
34
34
|
logger.debug(`${req.url} | proxy FronteggCookies (${fronteggCookiesNames.join(', ')})`);
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
let modifiedCookies = ``;
|
|
36
|
+
fronteggCookiesNames.forEach(requestCookieName => {
|
|
37
|
+
let cookieName = requestCookieName;
|
|
38
|
+
if (_config.default.rewriteCookieByAppId && _config.default.appId) {
|
|
39
|
+
cookieName = requestCookieName.replace(_config.default.appId, _config.default.clientId).replace(_config.default.appId.replace(/-/g, ''), _config.default.clientId.replace(/-/g, '')).replace(_config.default.appId.replace('-', ''), _config.default.clientId.replace('-', ''));
|
|
40
|
+
logger.debug(`cookieName ${requestCookieName} replaced with appId ${cookieName}`);
|
|
41
|
+
}
|
|
42
|
+
logger.debug(`PROXY_ADDING_COOKIE ${cookieName}, ${allCookies[requestCookieName]}`);
|
|
43
|
+
modifiedCookies += `${cookieName}=${allCookies[requestCookieName]}; `;
|
|
37
44
|
});
|
|
45
|
+
proxyReq.setHeader('cookie', modifiedCookies);
|
|
38
46
|
proxyReq.setHeader('x-frontegg-framework', (_req$headers$xFronte = req.headers['x-frontegg-framework']) != null ? _req$headers$xFronte : `next@${_package.default.version}`);
|
|
39
47
|
proxyReq.setHeader('x-frontegg-sdk', (_req$headers$xFronte2 = req.headers['x-frontegg-sdk']) != null ? _req$headers$xFronte2 : `@frontegg/nextjs@${_sdkVersion.default.version}`);
|
|
40
48
|
proxyReq.setHeader('x-frontegg-middleware', 'true');
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (xForwardedFor) {
|
|
45
|
-
proxyReq.setHeader('x-forwarded-for', xForwardedFor);
|
|
46
|
-
}
|
|
47
|
-
if (xOriginalForwardedFor) {
|
|
48
|
-
proxyReq.setHeader('x-original-forwarded-for', xOriginalForwardedFor);
|
|
49
|
-
}
|
|
50
|
-
if (cfConnectionIp) {
|
|
51
|
-
proxyReq.setHeader('cf-connecting-ip', cfConnectionIp);
|
|
49
|
+
const clientIp = req.headers['cf-connecting-ip'] || req.headers['x-original-forwarded-for'] || req.headers['x-forwarded-for'];
|
|
50
|
+
if (clientIp) {
|
|
51
|
+
proxyReq.setHeader('x-original-forwarded-for', clientIp);
|
|
52
52
|
}
|
|
53
53
|
if ((0, _helpers.isRefreshTokenRequest)(req.url)) {
|
|
54
54
|
logger.debug(`${req.url} | removing Authorization header`);
|