@frontegg/nextjs 9.0.5-alpha.11558217463 → 9.0.5-alpha.11586806364
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +6 -1
- package/api/utils.d.ts +4 -1
- package/api/utils.js +12 -7
- package/api/utils.js.map +1 -1
- package/config/index.d.ts +1 -1
- package/config/index.js +17 -17
- package/config/index.js.map +1 -1
- package/edge/getSessionOnEdge.js +6 -4
- package/edge/getSessionOnEdge.js.map +1 -1
- package/index.js +1 -1
- package/middleware/ProxyRequestCallback.js +6 -3
- package/middleware/ProxyRequestCallback.js.map +1 -1
- package/package.json +3 -3
- package/sdkVersion.js +1 -1
- package/sdkVersion.js.map +1 -1
- package/utils/fetchUserData/index.js +10 -1
- package/utils/fetchUserData/index.js.map +1 -1
- package/utils/refreshAccessTokenIfNeeded/index.js +7 -1
- package/utils/refreshAccessTokenIfNeeded/index.js.map +1 -1
- package/utils/useOnRedirectTo/index.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
# Change Log
|
|
2
2
|
|
|
3
|
-
## [9.0.5](https://github.com/frontegg/frontegg-nextjs/compare/v9.0.4...v9.0.5) (2024-10-
|
|
3
|
+
## [9.0.5](https://github.com/frontegg/frontegg-nextjs/compare/v9.0.4...v9.0.5) (2024-10-30)
|
|
4
|
+
|
|
5
|
+
- FR-18436 - Fixed activate account with empty redirect bug
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
- FR-17943 - Added code pages
|
|
4
9
|
|
|
5
10
|
- FR-18427 - Added Support for triggering MFA after native passkeys / iOS apple login
|
|
6
11
|
- FR-18211 - Fixed email overlapping roles field
|
package/api/utils.d.ts
CHANGED
|
@@ -19,9 +19,12 @@ export declare function removeInvalidHeaders(headers: Record<string, string>): {
|
|
|
19
19
|
[x: string]: string;
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
|
-
* These
|
|
22
|
+
* These headers are used to identify the tenant for login per tenant feature
|
|
23
23
|
*/
|
|
24
24
|
export declare const CUSTOM_LOGIN_HEADER = "frontegg-login-alias";
|
|
25
|
+
export declare const FRONTEGG_FORWARD_IP_HEADER = "x-frontegg-forwarded-for";
|
|
26
|
+
export declare const FRONTEGG_CLIENT_SECRET_HEADER = "x-frontegg-client-secret";
|
|
27
|
+
export declare const FRONTEGG_APPLICATION_ID_HEADER = "frontegg-requested-application-id";
|
|
25
28
|
/**
|
|
26
29
|
* Build fetch request headers, remove invalid http headers
|
|
27
30
|
* @param headers - Incoming request headers
|
package/api/utils.js
CHANGED
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.Post = exports.Get = exports.CUSTOM_LOGIN_HEADER = void 0;
|
|
7
|
+
exports.Post = exports.Get = exports.FRONTEGG_FORWARD_IP_HEADER = exports.FRONTEGG_CLIENT_SECRET_HEADER = exports.FRONTEGG_APPLICATION_ID_HEADER = exports.CUSTOM_LOGIN_HEADER = void 0;
|
|
8
8
|
exports.buildRequestHeaders = buildRequestHeaders;
|
|
9
9
|
exports.isMiddlewarePath = isMiddlewarePath;
|
|
10
10
|
exports.parseHttpResponse = void 0;
|
|
@@ -63,9 +63,12 @@ function removeInvalidHeaders(headers) {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
/**
|
|
66
|
-
* These
|
|
66
|
+
* These headers are used to identify the tenant for login per tenant feature
|
|
67
67
|
*/
|
|
68
68
|
const CUSTOM_LOGIN_HEADER = exports.CUSTOM_LOGIN_HEADER = 'frontegg-login-alias';
|
|
69
|
+
const FRONTEGG_FORWARD_IP_HEADER = exports.FRONTEGG_FORWARD_IP_HEADER = 'x-frontegg-forwarded-for';
|
|
70
|
+
const FRONTEGG_CLIENT_SECRET_HEADER = exports.FRONTEGG_CLIENT_SECRET_HEADER = 'x-frontegg-client-secret';
|
|
71
|
+
const FRONTEGG_APPLICATION_ID_HEADER = exports.FRONTEGG_APPLICATION_ID_HEADER = 'frontegg-requested-application-id';
|
|
69
72
|
|
|
70
73
|
/**
|
|
71
74
|
* Build fetch request headers, remove invalid http headers
|
|
@@ -107,12 +110,14 @@ function buildRequestHeaders(headers) {
|
|
|
107
110
|
'x-frontegg-framework': `next@${_package.default.version}`,
|
|
108
111
|
'x-frontegg-sdk': `@frontegg/nextjs@${_sdkVersion.default.version}`
|
|
109
112
|
};
|
|
110
|
-
if (headers[
|
|
111
|
-
preparedHeaders[
|
|
113
|
+
if (headers[FRONTEGG_APPLICATION_ID_HEADER]) {
|
|
114
|
+
preparedHeaders[FRONTEGG_APPLICATION_ID_HEADER] = headers[FRONTEGG_APPLICATION_ID_HEADER];
|
|
112
115
|
}
|
|
113
|
-
const clientIp = headers[
|
|
114
|
-
if (clientIp) {
|
|
115
|
-
|
|
116
|
+
const clientIp = headers[FRONTEGG_FORWARD_IP_HEADER] || headers['cf-connecting-ip'] || headers['x-forwarded-for'];
|
|
117
|
+
if (clientIp && _config.default.shouldForwardIp) {
|
|
118
|
+
var _config$clientSecret;
|
|
119
|
+
preparedHeaders[FRONTEGG_FORWARD_IP_HEADER] = clientIp;
|
|
120
|
+
preparedHeaders[FRONTEGG_CLIENT_SECRET_HEADER] = (_config$clientSecret = _config.default.clientSecret) != null ? _config$clientSecret : '';
|
|
116
121
|
}
|
|
117
122
|
if (headers[CUSTOM_LOGIN_HEADER]) {
|
|
118
123
|
preparedHeaders[CUSTOM_LOGIN_HEADER] = headers[CUSTOM_LOGIN_HEADER];
|
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","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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","ignoreList":[]}
|
|
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","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_CLIENT_SECRET_HEADER","FRONTEGG_APPLICATION_ID_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","shouldForwardIp","_config$clientSecret","clientSecret","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 headers are used to identify the tenant for login per tenant feature\n */\nexport const CUSTOM_LOGIN_HEADER = 'frontegg-login-alias';\nexport const FRONTEGG_FORWARD_IP_HEADER = 'x-frontegg-forwarded-for';\nexport const FRONTEGG_CLIENT_SECRET_HEADER = 'x-frontegg-client-secret';\nexport const FRONTEGG_APPLICATION_ID_HEADER = 'frontegg-requested-application-id';\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_APPLICATION_ID_HEADER]) {\n preparedHeaders[FRONTEGG_APPLICATION_ID_HEADER] = headers[FRONTEGG_APPLICATION_ID_HEADER];\n }\n\n const clientIp = headers[FRONTEGG_FORWARD_IP_HEADER] || headers['cf-connecting-ip'] || headers['x-forwarded-for'];\n if (clientIp && config.shouldForwardIp) {\n preparedHeaders[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n preparedHeaders[FRONTEGG_CLIENT_SECRET_HEADER] = config.clientSecret ?? '';\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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","ignoreList":[]}
|
package/config/index.d.ts
CHANGED
|
@@ -12,6 +12,7 @@ declare class Config {
|
|
|
12
12
|
get appId(): string | undefined;
|
|
13
13
|
get rewriteCookieByAppId(): boolean;
|
|
14
14
|
get clientSecret(): string | undefined;
|
|
15
|
+
get shouldForwardIp(): boolean;
|
|
15
16
|
get jwtPublicKeyJson(): string | undefined;
|
|
16
17
|
get secureJwtEnabled(): string | undefined;
|
|
17
18
|
get cookieName(): string;
|
|
@@ -22,7 +23,6 @@ declare class Config {
|
|
|
22
23
|
get password(): PasswordsMap;
|
|
23
24
|
get isSSL(): boolean;
|
|
24
25
|
get isHostedLogin(): boolean;
|
|
25
|
-
get isForwardIpEnabled(): boolean;
|
|
26
26
|
get disableInitialPropsRefreshToken(): boolean;
|
|
27
27
|
get appEnvConfig(): AppEnvConfig;
|
|
28
28
|
}
|
package/config/index.js
CHANGED
|
@@ -27,6 +27,7 @@ const setupEnvVariables = {
|
|
|
27
27
|
FRONTEGG_COOKIE_SAME_SITE: process.env.FRONTEGG_COOKIE_SAME_SITE,
|
|
28
28
|
FRONTEGG_JWT_PUBLIC_KEY: process.env.FRONTEGG_JWT_PUBLIC_KEY,
|
|
29
29
|
FRONTEGG_SECURE_JWT_ENABLED: process.env.FRONTEGG_SECURE_JWT_ENABLED,
|
|
30
|
+
FRONTEGG_FORWARD_IP: process.env.FRONTEGG_FORWARD_IP,
|
|
30
31
|
DISABLE_INITIAL_PROPS_REFRESH_TOKEN: process.env.DISABLE_INITIAL_PROPS_REFRESH_TOKEN,
|
|
31
32
|
VERCEL: process.env.VERCEL,
|
|
32
33
|
VERCEL_URL: process.env.VERCEL_URL
|
|
@@ -79,20 +80,25 @@ class Config {
|
|
|
79
80
|
}
|
|
80
81
|
return clientSecret;
|
|
81
82
|
}
|
|
83
|
+
get shouldForwardIp() {
|
|
84
|
+
var _setupEnvVariables$FR2;
|
|
85
|
+
return (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_FORWARD_IP, (_setupEnvVariables$FR2 = setupEnvVariables.FRONTEGG_FORWARD_IP) != null ? _setupEnvVariables$FR2 : 'false') === 'true';
|
|
86
|
+
}
|
|
82
87
|
get jwtPublicKeyJson() {
|
|
83
|
-
|
|
88
|
+
var _getEnv4;
|
|
89
|
+
return (_getEnv4 = (0, _helpers.getEnv)(_constants.EnvVariables.FRONTEGG_JWT_PUBLIC_KEY)) != null ? _getEnv4 : setupEnvVariables.FRONTEGG_JWT_PUBLIC_KEY;
|
|
84
90
|
}
|
|
85
91
|
get secureJwtEnabled() {
|
|
86
92
|
try {
|
|
87
|
-
var
|
|
88
|
-
return (
|
|
93
|
+
var _getEnv5;
|
|
94
|
+
return (_getEnv5 = (0, _helpers.getEnv)(_constants.EnvVariables.FRONTEGG_SECURE_JWT_ENABLED)) != null ? _getEnv5 : setupEnvVariables.FRONTEGG_SECURE_JWT_ENABLED;
|
|
89
95
|
} catch (e) {
|
|
90
96
|
return setupEnvVariables.FRONTEGG_SECURE_JWT_ENABLED;
|
|
91
97
|
}
|
|
92
98
|
}
|
|
93
99
|
get cookieName() {
|
|
94
|
-
var _setupEnvVariables$
|
|
95
|
-
const cookieNameEnv = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_NAME, (_setupEnvVariables$
|
|
100
|
+
var _setupEnvVariables$FR3;
|
|
101
|
+
const cookieNameEnv = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_NAME, (_setupEnvVariables$FR3 = setupEnvVariables.FRONTEGG_COOKIE_NAME) != null ? _setupEnvVariables$FR3 : 'fe_session');
|
|
96
102
|
if (this.rewriteCookieByAppId && this.appId) {
|
|
97
103
|
return `${cookieNameEnv}-${this.appId.replace(/-/g, '')}`;
|
|
98
104
|
} else {
|
|
@@ -100,12 +106,12 @@ class Config {
|
|
|
100
106
|
}
|
|
101
107
|
}
|
|
102
108
|
get cookieDomain() {
|
|
103
|
-
var _setupEnvVariables$
|
|
104
|
-
return (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_DOMAIN, (_setupEnvVariables$
|
|
109
|
+
var _setupEnvVariables$FR4;
|
|
110
|
+
return (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_DOMAIN, (_setupEnvVariables$FR4 = setupEnvVariables.FRONTEGG_COOKIE_DOMAIN) != null ? _setupEnvVariables$FR4 : (0, _helpers.generateCookieDomain)(this.appUrl));
|
|
105
111
|
}
|
|
106
112
|
get cookieSameSite() {
|
|
107
|
-
var _setupEnvVariables$
|
|
108
|
-
let sameSite = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_SAME_SITE, (_setupEnvVariables$
|
|
113
|
+
var _setupEnvVariables$FR5;
|
|
114
|
+
let sameSite = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_COOKIE_SAME_SITE, (_setupEnvVariables$FR5 = setupEnvVariables.FRONTEGG_COOKIE_SAME_SITE) != null ? _setupEnvVariables$FR5 : 'none');
|
|
109
115
|
switch (sameSite) {
|
|
110
116
|
case 'true':
|
|
111
117
|
return 'strict';
|
|
@@ -133,8 +139,8 @@ class Config {
|
|
|
133
139
|
}
|
|
134
140
|
}
|
|
135
141
|
get password() {
|
|
136
|
-
var
|
|
137
|
-
const encryptionPasswordEnv = (
|
|
142
|
+
var _getEnv6;
|
|
143
|
+
const encryptionPasswordEnv = (_getEnv6 = (0, _helpers.getEnv)(_constants.EnvVariables.FRONTEGG_ENCRYPTION_PASSWORD)) != null ? _getEnv6 : setupEnvVariables.FRONTEGG_ENCRYPTION_PASSWORD;
|
|
138
144
|
return (0, _helpers.normalizeStringPasswordToMap)(encryptionPasswordEnv);
|
|
139
145
|
}
|
|
140
146
|
get isSSL() {
|
|
@@ -144,12 +150,6 @@ class Config {
|
|
|
144
150
|
var _this$fronteggAppOpti3;
|
|
145
151
|
return (_this$fronteggAppOpti3 = this.fronteggAppOptions.hostedLoginBox) != null ? _this$fronteggAppOpti3 : (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_HOSTED_LOGIN, 'false') === 'true';
|
|
146
152
|
}
|
|
147
|
-
get isForwardIpEnabled() {
|
|
148
|
-
if (this.clientSecret) {
|
|
149
|
-
return (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_HOSTED_LOGIN, 'false') === 'true';
|
|
150
|
-
}
|
|
151
|
-
return false;
|
|
152
|
-
}
|
|
153
153
|
get disableInitialPropsRefreshToken() {
|
|
154
154
|
const disableInitialPropsRefreshToken = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.DISABLE_INITIAL_PROPS_REFRESH_TOKEN, setupEnvVariables.DISABLE_INITIAL_PROPS_REFRESH_TOKEN);
|
|
155
155
|
return disableInitialPropsRefreshToken === 'true';
|
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_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","authOptions","routes","passwordMaps","password","key","Object","keys","match","length","_getEnv5","encryptionPasswordEnv","normalizeStringPasswordToMap","isSSL","protocol","isHostedLogin","_this$fronteggAppOpti3","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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","ignoreList":[]}
|
|
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","FRONTEGG_FORWARD_IP","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","shouldForwardIp","_setupEnvVariables$FR2","jwtPublicKeyJson","_getEnv4","_getEnv5","cookieName","_setupEnvVariables$FR3","cookieNameEnv","replace","cookieDomain","_setupEnvVariables$FR4","generateCookieDomain","cookieSameSite","_setupEnvVariables$FR5","sameSite","authRoutes","_this$fronteggAppOpti","_this$fronteggAppOpti2","authOptions","routes","passwordMaps","password","key","Object","keys","match","length","_getEnv6","encryptionPasswordEnv","normalizeStringPasswordToMap","isSSL","protocol","isHostedLogin","_this$fronteggAppOpti3","hostedLoginBox","FRONTEGG_HOSTED_LOGIN","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 FRONTEGG_FORWARD_IP: process.env.FRONTEGG_FORWARD_IP,\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 shouldForwardIp(): boolean {\n return (\n getEnvOrDefault(EnvVariables.FRONTEGG_FORWARD_IP, setupEnvVariables.FRONTEGG_FORWARD_IP ?? 'false') === 'true'\n );\n }\n\n get jwtPublicKeyJson(): string | undefined {\n return getEnv(EnvVariables.FRONTEGG_JWT_PUBLIC_KEY) ?? setupEnvVariables.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 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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","ignoreList":[]}
|
package/edge/getSessionOnEdge.js
CHANGED
|
@@ -44,14 +44,16 @@ const handleHostedLoginCallback = async (req, pathname, searchParams) => {
|
|
|
44
44
|
let clientIp = undefined;
|
|
45
45
|
if (typeof ((_req$headers = req.headers) == null ? void 0 : _req$headers.get) === 'function') {
|
|
46
46
|
var _socket;
|
|
47
|
-
clientIp = req.headers.get('cf-connecting-ip') || req.headers.get('x-
|
|
47
|
+
clientIp = req.headers.get('cf-connecting-ip') || req.headers.get('x-forwarded-for') || ((_socket = req.socket) == null ? void 0 : _socket.remoteAddress);
|
|
48
48
|
} else if (typeof req.headers === 'object') {
|
|
49
49
|
var _socket2;
|
|
50
50
|
let requestHeaders = (0, _extends2.default)({}, req.headers);
|
|
51
|
-
clientIp = requestHeaders['cf-connecting-ip'] || requestHeaders['x-
|
|
51
|
+
clientIp = requestHeaders['cf-connecting-ip'] || requestHeaders['x-forwarded-for'] || ((_socket2 = req.socket) == null ? void 0 : _socket2.remoteAddress);
|
|
52
52
|
}
|
|
53
|
-
if (clientIp) {
|
|
54
|
-
|
|
53
|
+
if (clientIp && _config.default.shouldForwardIp) {
|
|
54
|
+
var _config$clientSecret;
|
|
55
|
+
headers[_utils.FRONTEGG_FORWARD_IP_HEADER] = clientIp;
|
|
56
|
+
headers[_utils.FRONTEGG_CLIENT_SECRET_HEADER] = (_config$clientSecret = _config.default.clientSecret) != null ? _config$clientSecret : '';
|
|
55
57
|
}
|
|
56
58
|
const response = await _api.default.exchangeHostedLoginToken((0, _utils.buildRequestHeaders)(headers), code, _config.default.clientId, _config.default.clientSecret);
|
|
57
59
|
const data = await response.json();
|
|
@@ -1 +1 @@
|
|
|
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","
|
|
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","config","shouldForwardIp","_config$clientSecret","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_CLIENT_SECRET_HEADER","clientSecret","response","api","exchangeHostedLoginToken","buildRequestHeaders","clientId","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 { buildRequestHeaders, FRONTEGG_CLIENT_SECRET_HEADER, FRONTEGG_FORWARD_IP_HEADER } 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') || req.headers.get('x-forwarded-for') || (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'] || requestHeaders['x-forwarded-for'] || (req as any).socket?.remoteAddress;\n }\n\n if (clientIp && config.shouldForwardIp) {\n headers[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n headers[FRONTEGG_CLIENT_SECRET_HEADER] = config.clientSecret ?? '';\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":"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","ignoreList":[]}
|
package/index.js
CHANGED
|
@@ -11,6 +11,7 @@ var _config = _interopRequireDefault(require("../config"));
|
|
|
11
11
|
var _cookies = _interopRequireDefault(require("../utils/cookies"));
|
|
12
12
|
var _fronteggLogger = _interopRequireDefault(require("../utils/fronteggLogger"));
|
|
13
13
|
var _helpers = require("../utils/refreshAccessTokenIfNeeded/helpers");
|
|
14
|
+
var _utils = require("../api/utils");
|
|
14
15
|
const logger = _fronteggLogger.default.child({
|
|
15
16
|
tag: 'FronteggApiMiddleware.ProxyRequestCallback'
|
|
16
17
|
});
|
|
@@ -46,9 +47,11 @@ const ProxyRequestCallback = (proxyReq, req) => {
|
|
|
46
47
|
proxyReq.setHeader('x-frontegg-framework', (_req$headers$xFronte = req.headers['x-frontegg-framework']) != null ? _req$headers$xFronte : `next@${_package.default.version}`);
|
|
47
48
|
proxyReq.setHeader('x-frontegg-sdk', (_req$headers$xFronte2 = req.headers['x-frontegg-sdk']) != null ? _req$headers$xFronte2 : `@frontegg/nextjs@${_sdkVersion.default.version}`);
|
|
48
49
|
proxyReq.setHeader('x-frontegg-middleware', 'true');
|
|
49
|
-
const clientIp = req.headers['cf-connecting-ip'] || req.headers['x-
|
|
50
|
-
if (clientIp) {
|
|
51
|
-
|
|
50
|
+
const clientIp = req.headers['cf-connecting-ip'] || req.headers['x-forwarded-for'];
|
|
51
|
+
if (clientIp && _config.default.shouldForwardIp) {
|
|
52
|
+
var _config$clientSecret;
|
|
53
|
+
proxyReq.setHeader(_utils.FRONTEGG_FORWARD_IP_HEADER, `${clientIp}`);
|
|
54
|
+
proxyReq.setHeader(_utils.FRONTEGG_CLIENT_SECRET_HEADER, (_config$clientSecret = _config.default.clientSecret) != null ? _config$clientSecret : '');
|
|
52
55
|
}
|
|
53
56
|
if ((0, _helpers.isRefreshTokenRequest)(req.url)) {
|
|
54
57
|
logger.debug(`${req.url} | removing Authorization header`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProxyRequestCallback.js","names":["_package","_interopRequireDefault","require","_sdkVersion","_config","_cookies","_fronteggLogger","_helpers","logger","fronteggLogger","child","tag","ProxyRequestCallback","proxyReq","req","_req$headers$xFronte","_req$headers$xFronte2","info","url","debug","allCookies","CookieManager","parseCookieHeader","fronteggCookiesNames","Object","keys","filter","cookieName","startsWith","config","join","modifiedCookies","forEach","requestCookieName","rewriteCookieByAppId","appId","replace","clientId","setHeader","headers","NextJsPkg","version","sdkVersion","clientIp","isRefreshTokenRequest","removeHeader","map","header","method","body","bodyData","JSON","stringify","Buffer","byteLength","write","e","error","_default","exports","default"],"sources":["../../../../packages/nextjs/src/middleware/ProxyRequestCallback.ts"],"sourcesContent":["import NextJsPkg from 'next/package.json';\nimport { ProxyReqCallback } from 'http-proxy';\nimport { ClientRequest } from 'http';\nimport { NextApiRequest } from 'next';\nimport sdkVersion from '../sdkVersion';\nimport config from '../config';\nimport CookieManager from '../utils/cookies';\nimport fronteggLogger from '../utils/fronteggLogger';\nimport { isRefreshTokenRequest } from '../utils/refreshAccessTokenIfNeeded/helpers';\n\nconst logger = fronteggLogger.child({ tag: 'FronteggApiMiddleware.ProxyRequestCallback' });\n/**\n * Proxy request callback fired on before each request to Frontegg services,\n * to transport frontegg cookies.\n *\n * @param {ClientRequest} proxyReq - Proxy request to be sent\n * @param {NextApiRequest} req - Next.js incoming request\n */\nconst ProxyRequestCallback: ProxyReqCallback<ClientRequest, NextApiRequest> = (proxyReq, req) => {\n try {\n logger.info(`${req.url} | Going to proxy request`);\n logger.debug(`${req.url} | parsing request cookies`);\n const allCookies = CookieManager.parseCookieHeader(req);\n logger.debug(`${req.url} | found ${allCookies} cookies`);\n const fronteggCookiesNames = Object.keys(allCookies).filter((cookieName) => {\n return cookieName.startsWith('fe_') && !cookieName.startsWith(config.cookieName);\n });\n\n logger.debug(`${req.url} | proxy FronteggCookies (${fronteggCookiesNames.join(', ')})`);\n let modifiedCookies = ``;\n\n fronteggCookiesNames.forEach((requestCookieName: string) => {\n let cookieName = requestCookieName;\n if (config.rewriteCookieByAppId && config.appId) {\n cookieName = requestCookieName\n .replace(config.appId, config.clientId)\n .replace(config.appId.replace(/-/g, ''), config.clientId.replace(/-/g, ''))\n .replace(config.appId.replace('-', ''), config.clientId.replace('-', ''));\n\n logger.debug(`cookieName ${requestCookieName} replaced with appId ${cookieName}`);\n }\n\n logger.debug(`PROXY_ADDING_COOKIE ${cookieName}, ${allCookies[requestCookieName]}`);\n modifiedCookies += `${cookieName}=${allCookies[requestCookieName]}; `;\n });\n proxyReq.setHeader('cookie', modifiedCookies);\n\n proxyReq.setHeader('x-frontegg-framework', req.headers['x-frontegg-framework'] ?? `next@${NextJsPkg.version}`);\n proxyReq.setHeader('x-frontegg-sdk', req.headers['x-frontegg-sdk'] ?? `@frontegg/nextjs@${sdkVersion.version}`);\n proxyReq.setHeader('x-frontegg-middleware', 'true');\n\n const clientIp
|
|
1
|
+
{"version":3,"file":"ProxyRequestCallback.js","names":["_package","_interopRequireDefault","require","_sdkVersion","_config","_cookies","_fronteggLogger","_helpers","_utils","logger","fronteggLogger","child","tag","ProxyRequestCallback","proxyReq","req","_req$headers$xFronte","_req$headers$xFronte2","info","url","debug","allCookies","CookieManager","parseCookieHeader","fronteggCookiesNames","Object","keys","filter","cookieName","startsWith","config","join","modifiedCookies","forEach","requestCookieName","rewriteCookieByAppId","appId","replace","clientId","setHeader","headers","NextJsPkg","version","sdkVersion","clientIp","shouldForwardIp","_config$clientSecret","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_CLIENT_SECRET_HEADER","clientSecret","isRefreshTokenRequest","removeHeader","map","header","method","body","bodyData","JSON","stringify","Buffer","byteLength","write","e","error","_default","exports","default"],"sources":["../../../../packages/nextjs/src/middleware/ProxyRequestCallback.ts"],"sourcesContent":["import NextJsPkg from 'next/package.json';\nimport { ProxyReqCallback } from 'http-proxy';\nimport { ClientRequest } from 'http';\nimport { NextApiRequest } from 'next';\nimport sdkVersion from '../sdkVersion';\nimport config from '../config';\nimport CookieManager from '../utils/cookies';\nimport fronteggLogger from '../utils/fronteggLogger';\nimport { isRefreshTokenRequest } from '../utils/refreshAccessTokenIfNeeded/helpers';\nimport { FRONTEGG_CLIENT_SECRET_HEADER, FRONTEGG_FORWARD_IP_HEADER } from '../api/utils';\n\nconst logger = fronteggLogger.child({ tag: 'FronteggApiMiddleware.ProxyRequestCallback' });\n/**\n * Proxy request callback fired on before each request to Frontegg services,\n * to transport frontegg cookies.\n *\n * @param {ClientRequest} proxyReq - Proxy request to be sent\n * @param {NextApiRequest} req - Next.js incoming request\n */\nconst ProxyRequestCallback: ProxyReqCallback<ClientRequest, NextApiRequest> = (proxyReq, req) => {\n try {\n logger.info(`${req.url} | Going to proxy request`);\n logger.debug(`${req.url} | parsing request cookies`);\n const allCookies = CookieManager.parseCookieHeader(req);\n logger.debug(`${req.url} | found ${allCookies} cookies`);\n const fronteggCookiesNames = Object.keys(allCookies).filter((cookieName) => {\n return cookieName.startsWith('fe_') && !cookieName.startsWith(config.cookieName);\n });\n\n logger.debug(`${req.url} | proxy FronteggCookies (${fronteggCookiesNames.join(', ')})`);\n let modifiedCookies = ``;\n\n fronteggCookiesNames.forEach((requestCookieName: string) => {\n let cookieName = requestCookieName;\n if (config.rewriteCookieByAppId && config.appId) {\n cookieName = requestCookieName\n .replace(config.appId, config.clientId)\n .replace(config.appId.replace(/-/g, ''), config.clientId.replace(/-/g, ''))\n .replace(config.appId.replace('-', ''), config.clientId.replace('-', ''));\n\n logger.debug(`cookieName ${requestCookieName} replaced with appId ${cookieName}`);\n }\n\n logger.debug(`PROXY_ADDING_COOKIE ${cookieName}, ${allCookies[requestCookieName]}`);\n modifiedCookies += `${cookieName}=${allCookies[requestCookieName]}; `;\n });\n proxyReq.setHeader('cookie', modifiedCookies);\n\n proxyReq.setHeader('x-frontegg-framework', req.headers['x-frontegg-framework'] ?? `next@${NextJsPkg.version}`);\n proxyReq.setHeader('x-frontegg-sdk', req.headers['x-frontegg-sdk'] ?? `@frontegg/nextjs@${sdkVersion.version}`);\n proxyReq.setHeader('x-frontegg-middleware', 'true');\n\n const clientIp = req.headers['cf-connecting-ip'] || req.headers['x-forwarded-for'];\n\n if (clientIp && config.shouldForwardIp) {\n proxyReq.setHeader(FRONTEGG_FORWARD_IP_HEADER, `${clientIp}`);\n proxyReq.setHeader(FRONTEGG_CLIENT_SECRET_HEADER, config.clientSecret ?? '');\n }\n\n if (isRefreshTokenRequest(req.url!)) {\n logger.debug(`${req.url} | removing Authorization header`);\n proxyReq.removeHeader('authorization');\n }\n\n [\n 'x-invoke-path',\n 'x-invoke-query',\n 'x-middleware-invoke',\n 'x-middleware-next',\n 'transfer-encoding',\n 'cache-control',\n ].map((header) => proxyReq.removeHeader(header));\n\n logger.debug(`${req.url} | check if request has body`);\n if (req.method !== 'GET' && req.body) {\n logger.debug(`${req.url} | writing request body to proxyReq`);\n const bodyData = JSON.stringify(req.body);\n // in case if content-type is application/x-www-form-urlencoded -> we need to change to application/json\n proxyReq.setHeader('Content-Type', 'application/json');\n proxyReq.setHeader('Content-Length', Buffer.byteLength(bodyData));\n // stream the content\n proxyReq.write(bodyData);\n }\n } catch (e) {\n logger.error(`${req.url} | Failed to proxy request`, e);\n }\n};\n\nexport default ProxyRequestCallback;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frontegg/nextjs",
|
|
3
3
|
"libName": "FronteggNextJs",
|
|
4
|
-
"version": "9.0.5-alpha.
|
|
4
|
+
"version": "9.0.5-alpha.11586806364",
|
|
5
5
|
"author": "Frontegg LTD",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -27,8 +27,8 @@
|
|
|
27
27
|
"lint-json": "eslint -c .eslintrc.json -o ./lint-report.json --format json --no-color ./src/**/*.{ts,tsx}"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@frontegg/js": "7.
|
|
31
|
-
"@frontegg/react-hooks": "7.
|
|
30
|
+
"@frontegg/js": "7.17.0",
|
|
31
|
+
"@frontegg/react-hooks": "7.17.0",
|
|
32
32
|
"http-proxy": "^1.18.1",
|
|
33
33
|
"iron-session": "^6.3.1",
|
|
34
34
|
"jose": "^4.12.2"
|
package/sdkVersion.js
CHANGED
package/sdkVersion.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sdkVersion.js","names":["version"],"sources":["../../../packages/nextjs/src/sdkVersion.ts"],"sourcesContent":["export default { version: '9.0.5-alpha.
|
|
1
|
+
{"version":3,"file":"sdkVersion.js","names":["version"],"sources":["../../../packages/nextjs/src/sdkVersion.ts"],"sourcesContent":["export default { version: '9.0.5-alpha.11586806364' };\n"],"mappings":";;;;;;iCAAe;EAAEA,OAAO,EAAE;AAA0B,CAAC","ignoreList":[]}
|
|
@@ -10,6 +10,7 @@ var _api = require("../../api");
|
|
|
10
10
|
var _common = require("../common");
|
|
11
11
|
var _fronteggLogger = _interopRequireDefault(require("../fronteggLogger"));
|
|
12
12
|
var _config = _interopRequireDefault(require("../../config"));
|
|
13
|
+
var _utils = require("../../api/utils");
|
|
13
14
|
const FULFILLED_STATUS = 'fulfilled';
|
|
14
15
|
async function fetchUserData(options) {
|
|
15
16
|
const {
|
|
@@ -33,7 +34,15 @@ async function fetchUserData(options) {
|
|
|
33
34
|
authorization: `Bearer ${accessToken}`
|
|
34
35
|
});
|
|
35
36
|
if (_config.default.appId) {
|
|
36
|
-
headers[
|
|
37
|
+
headers[_utils.FRONTEGG_APPLICATION_ID_HEADER] = _config.default.appId;
|
|
38
|
+
}
|
|
39
|
+
if (_config.default.shouldForwardIp) {
|
|
40
|
+
logger.debug('Retrieving forwarded IP...');
|
|
41
|
+
let clientIp = reqHeaders['cf-connecting-ip'] || reqHeaders['x-vercel-proxied-for'] || reqHeaders['x-real-ip'] || reqHeaders['x-forwarded-for'];
|
|
42
|
+
clientIp = Array.isArray(clientIp) ? clientIp[0] : clientIp;
|
|
43
|
+
if (clientIp) {
|
|
44
|
+
headers[_utils.FRONTEGG_FORWARD_IP_HEADER] = clientIp;
|
|
45
|
+
}
|
|
37
46
|
}
|
|
38
47
|
logger.debug('Retrieving user data...');
|
|
39
48
|
const [baseUserResult, tenantsResult, entitlementsResult, meAuthorizationResult] = await Promise.allSettled([(0, _api.getMe)(headers), (0, _api.getTenants)(headers), (0, _api.getEntitlements)(headers), (0, _api.getMeAuthorization)(headers)]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_api","require","_common","_fronteggLogger","_interopRequireDefault","_config","FULFILLED_STATUS","fetchUserData","options","getSession","getHeaders","logger","fronteggLogger","child","tag","session","info","accessToken","reqHeaders","headers","_extends2","default","authorization","config","appId","debug","baseUserResult","tenantsResult","entitlementsResult","meAuthorizationResult","Promise","allSettled","getMe","getTenants","getEntitlements","getMeAuthorization","status","baseUser","value","tenantsResponse","meAuthorizationResponse","entitlementsResponse","undefined","user","entitlements","expiresIn","calculateExpiresInFromExp","exp","tenants","activeTenant","e"],"sources":["../../../../../packages/nextjs/src/utils/fetchUserData/index.ts"],"sourcesContent":["import { AllUserData, FronteggNextJSSession } from '../../types';\nimport { getTenants, getMe, getMeAuthorization, getEntitlements } from '../../api';\nimport { calculateExpiresInFromExp } from '../common';\nimport fronteggLogger from '../fronteggLogger';\nimport config from '../../config';\n\nconst FULFILLED_STATUS = 'fulfilled';\n\ntype FetchUserDataOptions = {\n getSession: () => Promise<FronteggNextJSSession | undefined | null>;\n getHeaders: () => Promise<Record<string, string | string[] | undefined>>;\n};\n\nexport default async function fetchUserData(options: FetchUserDataOptions): Promise<AllUserData> {\n const { getSession, getHeaders } = options;\n\n const logger = fronteggLogger.child({ tag: 'fetchUserData.getAllUserData' });\n try {\n const session = await getSession();\n if (!session) {\n logger.info('No session found');\n return {};\n }\n\n const { accessToken } = session;\n const reqHeaders = await getHeaders();\n const headers: Record<string, string> = { ...reqHeaders, authorization: `Bearer ${accessToken}` };\n\n if (config.appId) {\n headers['
|
|
1
|
+
{"version":3,"file":"index.js","names":["_api","require","_common","_fronteggLogger","_interopRequireDefault","_config","_utils","FULFILLED_STATUS","fetchUserData","options","getSession","getHeaders","logger","fronteggLogger","child","tag","session","info","accessToken","reqHeaders","headers","_extends2","default","authorization","config","appId","FRONTEGG_APPLICATION_ID_HEADER","shouldForwardIp","debug","clientIp","Array","isArray","FRONTEGG_FORWARD_IP_HEADER","baseUserResult","tenantsResult","entitlementsResult","meAuthorizationResult","Promise","allSettled","getMe","getTenants","getEntitlements","getMeAuthorization","status","baseUser","value","tenantsResponse","meAuthorizationResponse","entitlementsResponse","undefined","user","entitlements","expiresIn","calculateExpiresInFromExp","exp","tenants","activeTenant","e"],"sources":["../../../../../packages/nextjs/src/utils/fetchUserData/index.ts"],"sourcesContent":["import { AllUserData, FronteggNextJSSession } from '../../types';\nimport { getTenants, getMe, getMeAuthorization, getEntitlements } from '../../api';\nimport { calculateExpiresInFromExp } from '../common';\nimport fronteggLogger from '../fronteggLogger';\nimport config from '../../config';\nimport { FRONTEGG_APPLICATION_ID_HEADER, FRONTEGG_FORWARD_IP_HEADER } from '../../api/utils';\n\nconst FULFILLED_STATUS = 'fulfilled';\n\ntype FetchUserDataOptions = {\n getSession: () => Promise<FronteggNextJSSession | undefined | null>;\n getHeaders: () => Promise<Record<string, string | string[] | undefined>>;\n};\n\nexport default async function fetchUserData(options: FetchUserDataOptions): Promise<AllUserData> {\n const { getSession, getHeaders } = options;\n\n const logger = fronteggLogger.child({ tag: 'fetchUserData.getAllUserData' });\n try {\n const session = await getSession();\n if (!session) {\n logger.info('No session found');\n return {};\n }\n\n const { accessToken } = session;\n const reqHeaders = await getHeaders();\n const headers: Record<string, string> = { ...reqHeaders, authorization: `Bearer ${accessToken}` };\n\n if (config.appId) {\n headers[FRONTEGG_APPLICATION_ID_HEADER] = config.appId;\n }\n\n if (config.shouldForwardIp) {\n logger.debug('Retrieving forwarded IP...');\n let clientIp =\n reqHeaders['cf-connecting-ip'] ||\n reqHeaders['x-vercel-proxied-for'] ||\n reqHeaders['x-real-ip'] ||\n reqHeaders['x-forwarded-for'];\n clientIp = Array.isArray(clientIp) ? clientIp[0] : clientIp;\n if (clientIp) {\n headers[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n }\n }\n\n logger.debug('Retrieving user data...');\n const [baseUserResult, tenantsResult, entitlementsResult, meAuthorizationResult] = await Promise.allSettled([\n getMe(headers),\n getTenants(headers),\n getEntitlements(headers),\n getMeAuthorization(headers),\n ]);\n\n logger.debug(\n 'Retrieved user data:',\n 'baseUserResult: ',\n baseUserResult.status,\n 'tenantsResult:',\n tenantsResult.status,\n 'entitlements:',\n entitlementsResult.status\n );\n\n const baseUser = baseUserResult.status === FULFILLED_STATUS ? baseUserResult.value : null;\n const tenantsResponse = tenantsResult.status === FULFILLED_STATUS ? tenantsResult.value : null;\n const meAuthorizationResponse =\n meAuthorizationResult.status === FULFILLED_STATUS ? meAuthorizationResult.value : null;\n const entitlementsResponse = entitlementsResult.status === FULFILLED_STATUS ? entitlementsResult.value : undefined;\n\n if (!baseUser || !tenantsResponse) {\n logger.info('No base user or tenants found');\n return {};\n }\n\n const user = {\n ...session.user,\n ...baseUser!,\n ...meAuthorizationResponse,\n entitlements: entitlementsResponse,\n expiresIn: calculateExpiresInFromExp(session.user.exp),\n };\n\n logger.info('Retrieved all user data successfully');\n\n const { tenants, activeTenant } = tenantsResponse;\n return { user, session, tenants, activeTenant };\n } catch (e: any) {\n // logger.error(e.message, e);\n return {};\n }\n}\n"],"mappings":";;;;;;;;AACA,IAAAA,IAAA,GAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AACA,IAAAE,eAAA,GAAAC,sBAAA,CAAAH,OAAA;AACA,IAAAI,OAAA,GAAAD,sBAAA,CAAAH,OAAA;AACA,IAAAK,MAAA,GAAAL,OAAA;AAEA,MAAMM,gBAAgB,GAAG,WAAW;AAOrB,eAAeC,aAAaA,CAACC,OAA6B,EAAwB;EAC/F,MAAM;IAAEC,UAAU;IAAEC;EAAW,CAAC,GAAGF,OAAO;EAE1C,MAAMG,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;IAAEC,GAAG,EAAE;EAA+B,CAAC,CAAC;EAC5E,IAAI;IACF,MAAMC,OAAO,GAAG,MAAMN,UAAU,CAAC,CAAC;IAClC,IAAI,CAACM,OAAO,EAAE;MACZJ,MAAM,CAACK,IAAI,CAAC,kBAAkB,CAAC;MAC/B,OAAO,CAAC,CAAC;IACX;IAEA,MAAM;MAAEC;IAAY,CAAC,GAAGF,OAAO;IAC/B,MAAMG,UAAU,GAAG,MAAMR,UAAU,CAAC,CAAC;IACrC,MAAMS,OAA+B,OAAAC,SAAA,CAAAC,OAAA,MAAQH,UAAU;MAAEI,aAAa,EAAE,UAAUL,WAAW;IAAE,EAAE;IAEjG,IAAIM,eAAM,CAACC,KAAK,EAAE;MAChBL,OAAO,CAACM,qCAA8B,CAAC,GAAGF,eAAM,CAACC,KAAK;IACxD;IAEA,IAAID,eAAM,CAACG,eAAe,EAAE;MAC1Bf,MAAM,CAACgB,KAAK,CAAC,4BAA4B,CAAC;MAC1C,IAAIC,QAAQ,GACVV,UAAU,CAAC,kBAAkB,CAAC,IAC9BA,UAAU,CAAC,sBAAsB,CAAC,IAClCA,UAAU,CAAC,WAAW,CAAC,IACvBA,UAAU,CAAC,iBAAiB,CAAC;MAC/BU,QAAQ,GAAGC,KAAK,CAACC,OAAO,CAACF,QAAQ,CAAC,GAAGA,QAAQ,CAAC,CAAC,CAAC,GAAGA,QAAQ;MAC3D,IAAIA,QAAQ,EAAE;QACZT,OAAO,CAACY,iCAA0B,CAAC,GAAGH,QAAQ;MAChD;IACF;IAEAjB,MAAM,CAACgB,KAAK,CAAC,yBAAyB,CAAC;IACvC,MAAM,CAACK,cAAc,EAAEC,aAAa,EAAEC,kBAAkB,EAAEC,qBAAqB,CAAC,GAAG,MAAMC,OAAO,CAACC,UAAU,CAAC,CAC1G,IAAAC,UAAK,EAACnB,OAAO,CAAC,EACd,IAAAoB,eAAU,EAACpB,OAAO,CAAC,EACnB,IAAAqB,oBAAe,EAACrB,OAAO,CAAC,EACxB,IAAAsB,uBAAkB,EAACtB,OAAO,CAAC,CAC5B,CAAC;IAEFR,MAAM,CAACgB,KAAK,CACV,sBAAsB,EACtB,kBAAkB,EAClBK,cAAc,CAACU,MAAM,EACrB,gBAAgB,EAChBT,aAAa,CAACS,MAAM,EACpB,eAAe,EACfR,kBAAkB,CAACQ,MACrB,CAAC;IAED,MAAMC,QAAQ,GAAGX,cAAc,CAACU,MAAM,KAAKpC,gBAAgB,GAAG0B,cAAc,CAACY,KAAK,GAAG,IAAI;IACzF,MAAMC,eAAe,GAAGZ,aAAa,CAACS,MAAM,KAAKpC,gBAAgB,GAAG2B,aAAa,CAACW,KAAK,GAAG,IAAI;IAC9F,MAAME,uBAAuB,GAC3BX,qBAAqB,CAACO,MAAM,KAAKpC,gBAAgB,GAAG6B,qBAAqB,CAACS,KAAK,GAAG,IAAI;IACxF,MAAMG,oBAAoB,GAAGb,kBAAkB,CAACQ,MAAM,KAAKpC,gBAAgB,GAAG4B,kBAAkB,CAACU,KAAK,GAAGI,SAAS;IAElH,IAAI,CAACL,QAAQ,IAAI,CAACE,eAAe,EAAE;MACjClC,MAAM,CAACK,IAAI,CAAC,+BAA+B,CAAC;MAC5C,OAAO,CAAC,CAAC;IACX;IAEA,MAAMiC,IAAI,OAAA7B,SAAA,CAAAC,OAAA,MACLN,OAAO,CAACkC,IAAI,EACZN,QAAQ,EACRG,uBAAuB;MAC1BI,YAAY,EAAEH,oBAAoB;MAClCI,SAAS,EAAE,IAAAC,iCAAyB,EAACrC,OAAO,CAACkC,IAAI,CAACI,GAAG;IAAC,EACvD;IAED1C,MAAM,CAACK,IAAI,CAAC,sCAAsC,CAAC;IAEnD,MAAM;MAAEsC,OAAO;MAAEC;IAAa,CAAC,GAAGV,eAAe;IACjD,OAAO;MAAEI,IAAI;MAAElC,OAAO;MAAEuC,OAAO;MAAEC;IAAa,CAAC;EACjD,CAAC,CAAC,OAAOC,CAAM,EAAE;IACf;IACA,OAAO,CAAC,CAAC;EACX;AACF","ignoreList":[]}
|
|
@@ -18,6 +18,7 @@ var _helpers = require("./helpers");
|
|
|
18
18
|
var _fronteggLogger = _interopRequireDefault(require("../fronteggLogger"));
|
|
19
19
|
var _encryption = _interopRequireDefault(require("../encryption"));
|
|
20
20
|
var _createSession = _interopRequireDefault(require("../createSession"));
|
|
21
|
+
var _utils = require("../../api/utils");
|
|
21
22
|
/**
|
|
22
23
|
* Refreshes the access token for the current session.
|
|
23
24
|
*
|
|
@@ -61,7 +62,12 @@ async function refreshAccessTokenIfNeeded(ctx) {
|
|
|
61
62
|
logger.debug(`abandon refreshToken for url='/oauth/callback'`);
|
|
62
63
|
return null;
|
|
63
64
|
}
|
|
64
|
-
|
|
65
|
+
const clientIp = nextJsRequest.headers['cf-connecting-ip'] || nextJsRequest.headers['x-forwarded-for'] || nextJsRequest.socket.remoteAddress;
|
|
66
|
+
if (clientIp && _config.default.shouldForwardIp) {
|
|
67
|
+
var _config$clientSecret;
|
|
68
|
+
nextJsRequest.headers[_utils.FRONTEGG_FORWARD_IP_HEADER] = clientIp;
|
|
69
|
+
nextJsRequest.headers[_utils.FRONTEGG_CLIENT_SECRET_HEADER] = (_config$clientSecret = _config.default.clientSecret) != null ? _config$clientSecret : '';
|
|
70
|
+
}
|
|
65
71
|
let response;
|
|
66
72
|
if (_config.default.isHostedLogin) {
|
|
67
73
|
response = await (0, _helpers.refreshAccessTokenHostedLogin)(nextJsRequest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_common","require","_config","_interopRequireDefault","_cookies","_helpers","_fronteggLogger","_encryption","_createSession","refreshAccessTokenIfNeeded","ctx","logger","fronteggLogger","child","tag","info","pathname","nextJsRequest","req","nextJsResponse","res","url","debug","hasSetSessionCookie","getHeader","cookies","CookieManager","getSessionCookieFromRedirectedResponse","session","createSession","encryption","getForwardedSession","_ref","_ref2","_response$headers$raw","_response$headers","_response$headers$raw2","_response$headers2","_response$headers2$ge","_response$headers3","_response$headers3$ge","_CookieManager$modify","_data$accessToken","isRuntimeNextRequest","config","disableInitialPropsRefreshToken","getSessionCookieFromRequest","isOauthCallback","isSamlCallback","headers","socket","remoteAddress","response","isHostedLogin","refreshAccessTokenHostedLogin","refreshAccessTokenEmbedded","isSecured","isSSL","ok","removeCookies","cookieDomain","data","json","cookieHeader","raw","call","getSetCookie","get","newSetCookie","modifySetCookie","decodedJwt","refreshToken","createSessionFromAccessToken","cookieValue","create","value","expires","Date","exp","secure","push","setHeader","fronteggSession","accessToken","access_token","user","saveForwardedSession","e","error"],"sources":["../../../../../packages/nextjs/src/utils/refreshAccessTokenIfNeeded/index.ts"],"sourcesContent":["import type { NextPageContext } from 'next/dist/shared/lib/utils';\nimport type { FronteggNextJSSession } from '../../types';\nimport { createSessionFromAccessToken } from '../../common';\nimport config from '../../config';\nimport CookieManager from '../cookies';\nimport {\n isOauthCallback,\n hasSetSessionCookie,\n isRuntimeNextRequest,\n isSamlCallback,\n refreshAccessTokenEmbedded,\n refreshAccessTokenHostedLogin,\n saveForwardedSession,\n getForwardedSession,\n} from './helpers';\nimport fronteggLogger from '../fronteggLogger';\nimport encryption from '../encryption';\nimport createSession from '../createSession';\n\nexport { isRuntimeNextRequest };\n/**\n * Refreshes the access token for the current session.\n *\n * @param {NextPageContext} ctx - The Next.js Page Context object.\n * @returns {Promise<FronteggNextJSSession | null>} A Promise that resolves to the updated session object, or `null` if the refresh failed.\n */\nexport default async function refreshAccessTokenIfNeeded(ctx: NextPageContext): Promise<FronteggNextJSSession | null> {\n const logger = fronteggLogger.child({ tag: 'refreshAccessTokenIfNeeded' });\n\n logger.info(`Refreshing token by for PageContext ${ctx.pathname}`);\n const nextJsRequest = ctx.req;\n const nextJsResponse = ctx.res;\n const url = nextJsRequest?.url;\n if (!nextJsResponse || !nextJsRequest || !url) {\n logger.debug(`abandon refreshToken due to PageContext.req = null`);\n return null;\n }\n\n if (hasSetSessionCookie(nextJsResponse.getHeader('set-cookie'))) {\n const cookies = CookieManager.getSessionCookieFromRedirectedResponse(nextJsResponse);\n const session = await createSession(cookies, encryption);\n logger.debug('Abandon refreshToken due to a previous redirect to /_error or other server-side redirect.');\n return session ?? getForwardedSession(nextJsResponse);\n }\n\n try {\n logger.info(`Check if should request made from first application load`);\n\n if (isRuntimeNextRequest(url) || config.disableInitialPropsRefreshToken) {\n logger.debug(`Detect runtime next.js request, resolving existing session from cookies if exists`);\n\n const cookies = CookieManager.getSessionCookieFromRequest(nextJsRequest);\n const session = await createSession(cookies, encryption);\n\n if (session) {\n logger.debug(`session resolved from session cookie`);\n return session;\n } else {\n logger.info('Failed to resolve session from cookie, going to refresh token');\n }\n }\n\n if (isOauthCallback(url) || isSamlCallback(url)) {\n /* Prevent refresh token due to oauth login callback */\n logger.debug(`abandon refreshToken for url='/oauth/callback'`);\n return null;\n }\n\n nextJsRequest.headers['x-original-forwarded-for'] =\n nextJsRequest.headers['cf-connecting-ip'] ||\n nextJsRequest.headers['x-forwarded-for'] ||\n nextJsRequest.socket.remoteAddress;\n\n let response: Response | null;\n if (config.isHostedLogin) {\n response = await refreshAccessTokenHostedLogin(nextJsRequest);\n } else {\n response = await refreshAccessTokenEmbedded(nextJsRequest);\n }\n\n const isSecured = config.isSSL;\n if (response === null || !response.ok) {\n CookieManager.removeCookies({\n cookieDomain: config.cookieDomain,\n isSecured,\n req: nextJsRequest,\n res: nextJsResponse,\n });\n return null;\n }\n\n const data = await response.json();\n\n const cookieHeader: string[] =\n // @ts-ignore the first argument \"raw\" will only work before nextjs 13.4 and the second argument \"getSetCookie\" will only work after\n response.headers?.raw?.()['set-cookie'] ??\n // @ts-ignore the first argument \"raw\" will only work before nextjs 13.4 and the second argument \"getSetCookie\" will only work after\n response.headers?.getSetCookie?.() ??\n response.headers?.get?.('set-cookie') ??\n [];\n\n const newSetCookie = CookieManager.modifySetCookie(cookieHeader, isSecured) ?? [];\n const [session, decodedJwt, refreshToken] = await createSessionFromAccessToken(data);\n\n if (!session) {\n return null;\n }\n const cookieValue = CookieManager.create({\n value: session,\n expires: new Date(decodedJwt.exp * 1000),\n secure: isSecured,\n req: nextJsRequest,\n });\n newSetCookie.push(...cookieValue);\n nextJsResponse.setHeader('set-cookie', newSetCookie);\n\n const fronteggSession = {\n accessToken: data.accessToken ?? data.access_token,\n user: decodedJwt,\n refreshToken,\n };\n\n saveForwardedSession(nextJsResponse, fronteggSession);\n return fronteggSession;\n } catch (e) {\n logger.error('[refreshToken] Failed to create session e', e);\n return null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"index.js","names":["_common","require","_config","_interopRequireDefault","_cookies","_helpers","_fronteggLogger","_encryption","_createSession","_utils","refreshAccessTokenIfNeeded","ctx","logger","fronteggLogger","child","tag","info","pathname","nextJsRequest","req","nextJsResponse","res","url","debug","hasSetSessionCookie","getHeader","cookies","CookieManager","getSessionCookieFromRedirectedResponse","session","createSession","encryption","getForwardedSession","_ref","_ref2","_response$headers$raw","_response$headers","_response$headers$raw2","_response$headers2","_response$headers2$ge","_response$headers3","_response$headers3$ge","_CookieManager$modify","_data$accessToken","isRuntimeNextRequest","config","disableInitialPropsRefreshToken","getSessionCookieFromRequest","isOauthCallback","isSamlCallback","clientIp","headers","socket","remoteAddress","shouldForwardIp","_config$clientSecret","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_CLIENT_SECRET_HEADER","clientSecret","response","isHostedLogin","refreshAccessTokenHostedLogin","refreshAccessTokenEmbedded","isSecured","isSSL","ok","removeCookies","cookieDomain","data","json","cookieHeader","raw","call","getSetCookie","get","newSetCookie","modifySetCookie","decodedJwt","refreshToken","createSessionFromAccessToken","cookieValue","create","value","expires","Date","exp","secure","push","setHeader","fronteggSession","accessToken","access_token","user","saveForwardedSession","e","error"],"sources":["../../../../../packages/nextjs/src/utils/refreshAccessTokenIfNeeded/index.ts"],"sourcesContent":["import type { NextPageContext } from 'next/dist/shared/lib/utils';\nimport type { FronteggNextJSSession } from '../../types';\nimport { createSessionFromAccessToken } from '../../common';\nimport config from '../../config';\nimport CookieManager from '../cookies';\nimport {\n isOauthCallback,\n hasSetSessionCookie,\n isRuntimeNextRequest,\n isSamlCallback,\n refreshAccessTokenEmbedded,\n refreshAccessTokenHostedLogin,\n saveForwardedSession,\n getForwardedSession,\n} from './helpers';\nimport fronteggLogger from '../fronteggLogger';\nimport encryption from '../encryption';\nimport createSession from '../createSession';\nimport { FRONTEGG_CLIENT_SECRET_HEADER, FRONTEGG_FORWARD_IP_HEADER } from '../../api/utils';\n\nexport { isRuntimeNextRequest };\n/**\n * Refreshes the access token for the current session.\n *\n * @param {NextPageContext} ctx - The Next.js Page Context object.\n * @returns {Promise<FronteggNextJSSession | null>} A Promise that resolves to the updated session object, or `null` if the refresh failed.\n */\nexport default async function refreshAccessTokenIfNeeded(ctx: NextPageContext): Promise<FronteggNextJSSession | null> {\n const logger = fronteggLogger.child({ tag: 'refreshAccessTokenIfNeeded' });\n\n logger.info(`Refreshing token by for PageContext ${ctx.pathname}`);\n const nextJsRequest = ctx.req;\n const nextJsResponse = ctx.res;\n const url = nextJsRequest?.url;\n if (!nextJsResponse || !nextJsRequest || !url) {\n logger.debug(`abandon refreshToken due to PageContext.req = null`);\n return null;\n }\n\n if (hasSetSessionCookie(nextJsResponse.getHeader('set-cookie'))) {\n const cookies = CookieManager.getSessionCookieFromRedirectedResponse(nextJsResponse);\n const session = await createSession(cookies, encryption);\n logger.debug('Abandon refreshToken due to a previous redirect to /_error or other server-side redirect.');\n return session ?? getForwardedSession(nextJsResponse);\n }\n\n try {\n logger.info(`Check if should request made from first application load`);\n\n if (isRuntimeNextRequest(url) || config.disableInitialPropsRefreshToken) {\n logger.debug(`Detect runtime next.js request, resolving existing session from cookies if exists`);\n\n const cookies = CookieManager.getSessionCookieFromRequest(nextJsRequest);\n const session = await createSession(cookies, encryption);\n\n if (session) {\n logger.debug(`session resolved from session cookie`);\n return session;\n } else {\n logger.info('Failed to resolve session from cookie, going to refresh token');\n }\n }\n\n if (isOauthCallback(url) || isSamlCallback(url)) {\n /* Prevent refresh token due to oauth login callback */\n logger.debug(`abandon refreshToken for url='/oauth/callback'`);\n return null;\n }\n\n const clientIp =\n nextJsRequest.headers['cf-connecting-ip'] ||\n nextJsRequest.headers['x-forwarded-for'] ||\n nextJsRequest.socket.remoteAddress;\n\n if (clientIp && config.shouldForwardIp) {\n nextJsRequest.headers[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n nextJsRequest.headers[FRONTEGG_CLIENT_SECRET_HEADER] = config.clientSecret ?? '';\n }\n\n let response: Response | null;\n if (config.isHostedLogin) {\n response = await refreshAccessTokenHostedLogin(nextJsRequest);\n } else {\n response = await refreshAccessTokenEmbedded(nextJsRequest);\n }\n\n const isSecured = config.isSSL;\n if (response === null || !response.ok) {\n CookieManager.removeCookies({\n cookieDomain: config.cookieDomain,\n isSecured,\n req: nextJsRequest,\n res: nextJsResponse,\n });\n return null;\n }\n\n const data = await response.json();\n\n const cookieHeader: string[] =\n // @ts-ignore the first argument \"raw\" will only work before nextjs 13.4 and the second argument \"getSetCookie\" will only work after\n response.headers?.raw?.()['set-cookie'] ??\n // @ts-ignore the first argument \"raw\" will only work before nextjs 13.4 and the second argument \"getSetCookie\" will only work after\n response.headers?.getSetCookie?.() ??\n response.headers?.get?.('set-cookie') ??\n [];\n\n const newSetCookie = CookieManager.modifySetCookie(cookieHeader, isSecured) ?? [];\n const [session, decodedJwt, refreshToken] = await createSessionFromAccessToken(data);\n\n if (!session) {\n return null;\n }\n const cookieValue = CookieManager.create({\n value: session,\n expires: new Date(decodedJwt.exp * 1000),\n secure: isSecured,\n req: nextJsRequest,\n });\n newSetCookie.push(...cookieValue);\n nextJsResponse.setHeader('set-cookie', newSetCookie);\n\n const fronteggSession = {\n accessToken: data.accessToken ?? data.access_token,\n user: decodedJwt,\n refreshToken,\n };\n\n saveForwardedSession(nextJsResponse, fronteggSession);\n return fronteggSession;\n } catch (e) {\n logger.error('[refreshToken] Failed to create session e', e);\n return null;\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["_react","require","_reduxStore","useOnRedirectTo","baseName","router","routes","isAuthRouteRef","useRef","onRedirectTo","_path","opts","useMemo","current","path","isAuthRoute","isSSR","window","undefined","startsWith","substring","length","preserveQueryParams","location","search","refresh","Cypress","push","href","replace","_default","exports","default"],"sources":["../../../../../packages/nextjs/src/utils/useOnRedirectTo/index.ts"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"index.js","names":["_react","require","_reduxStore","useOnRedirectTo","baseName","router","routes","isAuthRouteRef","useRef","onRedirectTo","_path","opts","useMemo","current","path","isAuthRoute","isSSR","window","undefined","startsWith","substring","length","preserveQueryParams","location","search","refresh","Cypress","push","href","replace","_default","exports","default"],"sources":["../../../../../packages/nextjs/src/utils/useOnRedirectTo/index.ts"],"sourcesContent":["import { useMemo, useRef } from 'react';\nimport { RedirectOptions } from '@frontegg/rest-api';\nimport type { NextRouter } from 'next/router';\nimport type { AppRouterInstance } from 'next/dist/shared/lib/app-router-context';\nimport { isAuthRoute, AuthPageRoutes } from '@frontegg/redux-store';\n\nconst useOnRedirectTo = (\n baseName: string,\n router: AppRouterInstance | NextRouter,\n routes?: Partial<AuthPageRoutes>\n) => {\n const isAuthRouteRef = useRef<(path: string) => boolean>(() => false);\n const onRedirectTo = useRef((_path: string, opts?: RedirectOptions) => {});\n\n useMemo(() => {\n isAuthRouteRef.current = (path) => isAuthRoute(path, routes);\n }, [routes]);\n\n onRedirectTo.current = (_path: string, opts?: RedirectOptions) => {\n const isSSR = typeof window == undefined;\n let path = _path;\n if (path.startsWith(baseName)) {\n path = path.substring(baseName.length);\n }\n if (opts?.preserveQueryParams || isAuthRouteRef.current(path)) {\n path = `${path}${window.location.search}`;\n }\n if (opts?.refresh && !isSSR) {\n // @ts-ignore\n window.Cypress ? router.push(path) : (window.location.href = path);\n } else {\n opts?.replace ? router.replace(path) : router.push(path);\n }\n };\n\n return onRedirectTo.current;\n};\n\nexport default useOnRedirectTo;\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,WAAA,GAAAD,OAAA;AAEA,MAAME,eAAe,GAAGA,CACtBC,QAAgB,EAChBC,MAAsC,EACtCC,MAAgC,KAC7B;EACH,MAAMC,cAAc,GAAG,IAAAC,aAAM,EAA4B,MAAM,KAAK,CAAC;EACrE,MAAMC,YAAY,GAAG,IAAAD,aAAM,EAAC,CAACE,KAAa,EAAEC,IAAsB,KAAK,CAAC,CAAC,CAAC;EAE1E,IAAAC,cAAO,EAAC,MAAM;IACZL,cAAc,CAACM,OAAO,GAAIC,IAAI,IAAK,IAAAC,uBAAW,EAACD,IAAI,EAAER,MAAM,CAAC;EAC9D,CAAC,EAAE,CAACA,MAAM,CAAC,CAAC;EAEZG,YAAY,CAACI,OAAO,GAAG,CAACH,KAAa,EAAEC,IAAsB,KAAK;IAChE,MAAMK,KAAK,GAAG,OAAOC,MAAM,IAAIC,SAAS;IACxC,IAAIJ,IAAI,GAAGJ,KAAK;IAChB,IAAII,IAAI,CAACK,UAAU,CAACf,QAAQ,CAAC,EAAE;MAC7BU,IAAI,GAAGA,IAAI,CAACM,SAAS,CAAChB,QAAQ,CAACiB,MAAM,CAAC;IACxC;IACA,IAAIV,IAAI,YAAJA,IAAI,CAAEW,mBAAmB,IAAIf,cAAc,CAACM,OAAO,CAACC,IAAI,CAAC,EAAE;MAC7DA,IAAI,GAAG,GAAGA,IAAI,GAAGG,MAAM,CAACM,QAAQ,CAACC,MAAM,EAAE;IAC3C;IACA,IAAIb,IAAI,YAAJA,IAAI,CAAEc,OAAO,IAAI,CAACT,KAAK,EAAE;MAC3B;MACAC,MAAM,CAACS,OAAO,GAAGrB,MAAM,CAACsB,IAAI,CAACb,IAAI,CAAC,GAAIG,MAAM,CAACM,QAAQ,CAACK,IAAI,GAAGd,IAAK;IACpE,CAAC,MAAM;MACLH,IAAI,YAAJA,IAAI,CAAEkB,OAAO,GAAGxB,MAAM,CAACwB,OAAO,CAACf,IAAI,CAAC,GAAGT,MAAM,CAACsB,IAAI,CAACb,IAAI,CAAC;IAC1D;EACF,CAAC;EAED,OAAOL,YAAY,CAACI,OAAO;AAC7B,CAAC;AAAC,IAAAiB,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa7B,eAAe","ignoreList":[]}
|