@frontegg/nextjs 9.2.8-alpha.16120580367 → 9.2.8

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # Change Log
2
2
 
3
+ ## [9.2.8](https://github.com/frontegg/frontegg-nextjs/compare/v9.2.7...v9.2.8) (2025-7-7)
4
+
5
+ - FR-21360 - Fixed CMCComponents React19 compatibility
6
+ - FR-20601 - Fixed metadata sync when using custom signup fields
7
+ - FR-20601 - Fixed custom signup fields visiblity
8
+ - FR-21194 - Fixed translations options to have all supported languages
9
+
10
+
11
+ - FR-21242 - Added customization for select phone number country codes
12
+
13
+
14
+
3
15
  ## [9.2.7](https://github.com/frontegg/frontegg-nextjs/compare/v9.2.6...v9.2.7) (2025-6-23)
4
16
 
5
17
  - FR-20838 - Added search for role in the edit roles dialog of users page
package/api/utils.js CHANGED
@@ -118,10 +118,6 @@ function buildRequestHeaders(headers) {
118
118
  const clientIp = getClientIp(headers[FRONTEGG_FORWARD_IP_HEADER] || headers['cf-connecting-ip'] || headers['x-forwarded-for']);
119
119
  if (clientIp && _config.default.shouldForwardIp) {
120
120
  var _config$sharedSecret;
121
- console.log('inside buildRequestHeaders', process.env.VERCEL);
122
- console.log('headers[FRONTEGG_FORWARD_IP_HEADER]', headers[FRONTEGG_FORWARD_IP_HEADER]);
123
- console.log('headers[cf-connecting-ip]', headers['cf-connecting-ip']);
124
- console.log('headers[x-forwarded-for]', headers['x-forwarded-for']);
125
121
  preparedHeaders[FRONTEGG_FORWARD_IP_HEADER] = clientIp;
126
122
  preparedHeaders[FRONTEGG_HEADERS_VERIFIER_HEADER] = (_config$sharedSecret = _config.default.sharedSecret) != null ? _config$sharedSecret : '';
127
123
  preparedHeaders[FRONTEGG_VENDOR_ID_HEADER] = _config.default.clientId;
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","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_HEADERS_VERIFIER_HEADER","FRONTEGG_APPLICATION_ID_HEADER","FRONTEGG_VENDOR_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","getClientIp","shouldForwardIp","_config$sharedSecret","console","log","process","env","VERCEL","sharedSecret","parseHttpResponse","res","ok","json","isMiddlewarePath","path","isAuthPath","fronteggAuthApiRoutesRegex","find","pathRegex","RegExp","test","isSocialLoginPath","endsWith","rawIp","ip"],"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_HEADERS_VERIFIER_HEADER = 'x-frontegg-headers-verifier';\nexport const FRONTEGG_APPLICATION_ID_HEADER = 'frontegg-requested-application-id';\nexport const FRONTEGG_VENDOR_ID_HEADER = 'frontegg-vendor-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 = getClientIp(\n headers[FRONTEGG_FORWARD_IP_HEADER] || headers['cf-connecting-ip'] || headers['x-forwarded-for']\n );\n\n if (clientIp && config.shouldForwardIp) {\n console.log('inside buildRequestHeaders', process.env.VERCEL);\n console.log('headers[FRONTEGG_FORWARD_IP_HEADER]', headers[FRONTEGG_FORWARD_IP_HEADER]);\n console.log('headers[cf-connecting-ip]', headers['cf-connecting-ip']);\n console.log('headers[x-forwarded-for]', headers['x-forwarded-for']);\n preparedHeaders[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n preparedHeaders[FRONTEGG_HEADERS_VERIFIER_HEADER] = config.sharedSecret ?? '';\n preparedHeaders[FRONTEGG_VENDOR_ID_HEADER] = config.clientId;\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\n/**\n * Extracts the real client IP address from a raw IP string or array.\n *\n * If the input contains multiple IPs (e.g., from the `x-forwarded-for` header),\n * it returns only the first IP, which typically represents the real client.\n *\n * @param rawIp - A single IP string or an array of IPs.\n * @returns The first IP address as a string, or undefined if not available.\n */\nexport function getClientIp(rawIp?: string | string[] | null): string | undefined {\n if (!rawIp) return undefined;\n const ip = Array.isArray(rawIp) ? rawIp[0] : rawIp;\n return ip.split(',')[0].trim();\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_HEADERS_VERIFIER_HEADER","FRONTEGG_APPLICATION_ID_HEADER","FRONTEGG_VENDOR_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","getClientIp","shouldForwardIp","_config$sharedSecret","sharedSecret","parseHttpResponse","res","ok","json","isMiddlewarePath","path","isAuthPath","fronteggAuthApiRoutesRegex","find","pathRegex","RegExp","test","isSocialLoginPath","endsWith","rawIp","ip"],"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_HEADERS_VERIFIER_HEADER = 'x-frontegg-headers-verifier';\nexport const FRONTEGG_APPLICATION_ID_HEADER = 'frontegg-requested-application-id';\nexport const FRONTEGG_VENDOR_ID_HEADER = 'frontegg-vendor-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 = getClientIp(\n headers[FRONTEGG_FORWARD_IP_HEADER] || headers['cf-connecting-ip'] || headers['x-forwarded-for']\n );\n\n if (clientIp && config.shouldForwardIp) {\n preparedHeaders[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n preparedHeaders[FRONTEGG_HEADERS_VERIFIER_HEADER] = config.sharedSecret ?? '';\n preparedHeaders[FRONTEGG_VENDOR_ID_HEADER] = config.clientId;\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\n/**\n * Extracts the real client IP address from a raw IP string or array.\n *\n * If the input contains multiple IPs (e.g., from the `x-forwarded-for` header),\n * it returns only the first IP, which typically represents the real client.\n *\n * @param rawIp - A single IP string or an array of IPs.\n * @returns The first IP address as a string, or undefined if not available.\n */\nexport function getClientIp(rawIp?: string | string[] | null): string | undefined {\n if (!rawIp) return undefined;\n const ip = Array.isArray(rawIp) ? rawIp[0] : rawIp;\n return ip.split(',')[0].trim();\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,7 @@ import { FronteggApp } from '@frontegg/js';
2
2
  import { CMCComponentProps } from '@frontegg/types';
3
3
  import { FC } from 'react';
4
4
  export type RenderableFronteggComponent = keyof Pick<FronteggApp, 'renderChangePasswordForm' | 'renderInviteUserDialog' | 'renderProfilePage' | 'renderUsersTable' | 'renderEditEmailForm'>;
5
- export type FronteggCMCComponentProps<K extends CMCComponentProps> = Pick<K, 'themeOptions' | 'props' | 'localizations' | 'hostStyle'>;
5
+ export type FronteggCMCComponentProps<K extends CMCComponentProps> = Pick<K, 'themeOptions' | 'props' | 'localizations' | 'hostStyle' | 'containerStyle'>;
6
6
  export declare const CMCComponent: FC<FronteggCMCComponentProps<CMCComponentProps> & {
7
7
  renderComponent: RenderableFronteggComponent;
8
8
  }>;
@@ -16,6 +16,7 @@ const CMCComponent = exports.CMCComponent = /*#__PURE__*/(0, _react.memo)(({
16
16
  props,
17
17
  localizations,
18
18
  hostStyle,
19
+ containerStyle,
19
20
  renderComponent
20
21
  }) => {
21
22
  const ref = _react.default.useRef(null);
@@ -27,15 +28,13 @@ const CMCComponent = exports.CMCComponent = /*#__PURE__*/(0, _react.memo)(({
27
28
  let rootRendered = {
28
29
  unmount: () => {}
29
30
  };
30
- console.log({
31
- app
32
- });
33
31
  if (!app[renderComponent]) {
34
32
  throw new Error(`Component ${renderComponent} is not supported`);
35
33
  }
36
34
  app[renderComponent](ref.current, props, {
37
35
  themeOptions,
38
- localizations
36
+ localizations,
37
+ containerStyle
39
38
  }).then(root => rootRendered = root);
40
39
  }, []);
41
40
  return /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
@@ -1 +1 @@
1
- {"version":3,"file":"base.js","names":["_react","_interopRequireWildcard","require","_","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","CMCComponent","exports","memo","themeOptions","props","localizations","hostStyle","renderComponent","ref","React","useRef","app","useContext","AppContext","useLayoutEffect","current","rootRendered","unmount","console","log","Error","then","root","jsx","style","_extends2"],"sources":["../../../../../packages/nextjs/src/common/cmc/base.tsx"],"sourcesContent":["import { FronteggApp } from '@frontegg/js';\nimport React, { memo } from 'react';\nimport { useContext } from 'react';\nimport { CMCComponentProps } from '@frontegg/types';\nimport { FC } from 'react';\nimport { AppContext } from '../..';\n\n\nexport type RenderableFronteggComponent = keyof Pick<FronteggApp, 'renderChangePasswordForm' | 'renderInviteUserDialog' | 'renderProfilePage' | 'renderUsersTable' | 'renderEditEmailForm'>;\nexport type FronteggCMCComponentProps<K extends CMCComponentProps> = Pick<K, 'themeOptions' | 'props' | 'localizations' | 'hostStyle'>\n\nexport const CMCComponent: FC<FronteggCMCComponentProps<CMCComponentProps> & { renderComponent: RenderableFronteggComponent }> = memo(\n ({ themeOptions, props, localizations, hostStyle, renderComponent }) => {\n const ref = React.useRef<HTMLDivElement>(null);\n const app = useContext(AppContext)!;\n React.useLayoutEffect(() => {\n if (!ref.current) {\n return;\n }\n let rootRendered: { unmount: () => void } = {\n unmount: () => { },\n };\n\n console.log({ app });\n if (!app[renderComponent]) {\n throw new Error(`Component ${renderComponent} is not supported`);\n }\n\n app[renderComponent](ref.current, props, {\n themeOptions,\n localizations,\n })\n .then((root) => (rootRendered = root));\n\n }, []);\n\n return <div style={{ ...hostStyle }} ref={ref} />;\n },\n () => true\n);\n\n\n\n\n\n"],"mappings":";;;;;;;;AACA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAIA,IAAAC,CAAA,GAAAD,OAAA;AAAmC,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAM5B,MAAMW,YAAiH,GAAAC,OAAA,CAAAD,YAAA,gBAAG,IAAAE,WAAI,EACjI,CAAC;EAAEC,YAAY;EAAEC,KAAK;EAAEC,aAAa;EAAEC,SAAS;EAAEC;AAAgB,CAAC,KAAK;EACpE,MAAMC,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAiB,IAAI,CAAC;EAC9C,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACC,YAAU,CAAE;EACnCJ,cAAK,CAACK,eAAe,CAAC,MAAM;IACxB,IAAI,CAACN,GAAG,CAACO,OAAO,EAAE;MACd;IACJ;IACA,IAAIC,YAAqC,GAAG;MACxCC,OAAO,EAAEA,CAAA,KAAM,CAAE;IACrB,CAAC;IAEDC,OAAO,CAACC,GAAG,CAAC;MAAER;IAAI,CAAC,CAAC;IACpB,IAAI,CAACA,GAAG,CAACJ,eAAe,CAAC,EAAE;MACvB,MAAM,IAAIa,KAAK,CAAC,aAAab,eAAe,mBAAmB,CAAC;IACpE;IAEAI,GAAG,CAACJ,eAAe,CAAC,CAACC,GAAG,CAACO,OAAO,EAAEX,KAAK,EAAE;MACrCD,YAAY;MACZE;IACJ,CAAC,CAAC,CACGgB,IAAI,CAAEC,IAAI,IAAMN,YAAY,GAAGM,IAAK,CAAC;EAE9C,CAAC,EAAE,EAAE,CAAC;EAEN,oBAAO,IAAA3C,WAAA,CAAA4C,GAAA;IAAKC,KAAK,MAAAC,SAAA,CAAAvC,OAAA,MAAOoB,SAAS,CAAG;IAACE,GAAG,EAAEA;EAAI,CAAE,CAAC;AACrD,CAAC,EACD,MAAM,IACV,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"base.js","names":["_react","_interopRequireWildcard","require","_","_jsxRuntime","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","CMCComponent","exports","memo","themeOptions","props","localizations","hostStyle","containerStyle","renderComponent","ref","React","useRef","app","useContext","AppContext","useLayoutEffect","current","rootRendered","unmount","Error","then","root","jsx","style","_extends2"],"sources":["../../../../../packages/nextjs/src/common/cmc/base.tsx"],"sourcesContent":["import { FronteggApp } from '@frontegg/js';\nimport React, { memo } from 'react';\nimport { useContext } from 'react';\nimport { CMCComponentProps } from '@frontegg/types';\nimport { FC } from 'react';\nimport { AppContext } from '../..';\n\nexport type RenderableFronteggComponent = keyof Pick<\n FronteggApp,\n | 'renderChangePasswordForm'\n | 'renderInviteUserDialog'\n | 'renderProfilePage'\n | 'renderUsersTable'\n | 'renderEditEmailForm'\n>;\nexport type FronteggCMCComponentProps<K extends CMCComponentProps> = Pick<\n K,\n 'themeOptions' | 'props' | 'localizations' | 'hostStyle' | 'containerStyle'\n>;\n\nexport const CMCComponent: FC<\n FronteggCMCComponentProps<CMCComponentProps> & { renderComponent: RenderableFronteggComponent }\n> = memo(\n ({ themeOptions, props, localizations, hostStyle, containerStyle, renderComponent }) => {\n const ref = React.useRef<HTMLDivElement>(null);\n const app = useContext(AppContext)!;\n React.useLayoutEffect(() => {\n if (!ref.current) {\n return;\n }\n let rootRendered: { unmount: () => void } = {\n unmount: () => {},\n };\n\n if (!app[renderComponent]) {\n throw new Error(`Component ${renderComponent} is not supported`);\n }\n\n app[renderComponent](ref.current, props, {\n themeOptions,\n localizations,\n containerStyle,\n }).then((root) => (rootRendered = root));\n }, []);\n\n return <div style={{ ...hostStyle }} ref={ref} />;\n },\n () => true\n);\n"],"mappings":";;;;;;;;AACA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAIA,IAAAC,CAAA,GAAAD,OAAA;AAAmC,IAAAE,WAAA,GAAAF,OAAA;AAAA,SAAAG,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAL,wBAAAK,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAe5B,MAAMW,YAEZ,GAAAC,OAAA,CAAAD,YAAA,gBAAG,IAAAE,WAAI,EACN,CAAC;EAAEC,YAAY;EAAEC,KAAK;EAAEC,aAAa;EAAEC,SAAS;EAAEC,cAAc;EAAEC;AAAgB,CAAC,KAAK;EACtF,MAAMC,GAAG,GAAGC,cAAK,CAACC,MAAM,CAAiB,IAAI,CAAC;EAC9C,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACC,YAAU,CAAE;EACnCJ,cAAK,CAACK,eAAe,CAAC,MAAM;IAC1B,IAAI,CAACN,GAAG,CAACO,OAAO,EAAE;MAChB;IACF;IACA,IAAIC,YAAqC,GAAG;MAC1CC,OAAO,EAAEA,CAAA,KAAM,CAAC;IAClB,CAAC;IAED,IAAI,CAACN,GAAG,CAACJ,eAAe,CAAC,EAAE;MACzB,MAAM,IAAIW,KAAK,CAAC,aAAaX,eAAe,mBAAmB,CAAC;IAClE;IAEAI,GAAG,CAACJ,eAAe,CAAC,CAACC,GAAG,CAACO,OAAO,EAAEZ,KAAK,EAAE;MACvCD,YAAY;MACZE,aAAa;MACbE;IACF,CAAC,CAAC,CAACa,IAAI,CAAEC,IAAI,IAAMJ,YAAY,GAAGI,IAAK,CAAC;EAC1C,CAAC,EAAE,EAAE,CAAC;EAEN,oBAAO,IAAA1C,WAAA,CAAA2C,GAAA;IAAKC,KAAK,MAAAC,SAAA,CAAAtC,OAAA,MAAOoB,SAAS,CAAG;IAACG,GAAG,EAAEA;EAAI,CAAE,CAAC;AACnD,CAAC,EACD,MAAM,IACR,CAAC","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"components.js","names":["_interopRequireDefault","require","Object","defineProperty","exports","value","UsersTable","ProfilePage","InviteUserDialog","EditEmailForm","ChangePasswordForm","_extends2","_react","_base","_jsxRuntime","props","jsx","CMCComponent","default","renderComponent"],"sources":["../../../../../packages/nextjs/src/common/cmc/components.tsx"],"sourcesContent":["'use client';\n\nimport { ChangePasswordFormProps, EditEmailFormProps, InviteUserDialogProps, ProfilePageProps, UsersTableProps } from '@frontegg/types';\nimport React, { FC } from 'react';\nimport { CMCComponent, FronteggCMCComponentProps } from './base';\n\nexport const UsersTable: FC<FronteggCMCComponentProps<UsersTableProps>> = (props) => {\n return <CMCComponent renderComponent=\"renderUsersTable\" {...props} />\n}\n\nexport const InviteUserDialog: FC<FronteggCMCComponentProps<InviteUserDialogProps>> = (props) => {\n return <CMCComponent renderComponent=\"renderInviteUserDialog\" {...props} />\n}\n\nexport const ChangePasswordForm: FC<FronteggCMCComponentProps<ChangePasswordFormProps>> = (props) => {\n return <CMCComponent renderComponent=\"renderChangePasswordForm\" {...props} />\n}\n\nexport const ProfilePage: FC<FronteggCMCComponentProps<ProfilePageProps>> = (props) => {\n return <CMCComponent renderComponent=\"renderProfilePage\" {...props} />\n}\n\nexport const EditEmailForm: FC<FronteggCMCComponentProps<EditEmailFormProps>> = (props) => {\n return <CMCComponent renderComponent=\"renderEditEmailForm\" {...props} />\n}"],"mappings":";AAAA,YAAY;;AAAC,IAAAA,sBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,UAAA,GAAAF,OAAA,CAAAG,WAAA,GAAAH,OAAA,CAAAI,gBAAA,GAAAJ,OAAA,CAAAK,aAAA,GAAAL,OAAA,CAAAM,kBAAA;AAAA,IAAAC,SAAA,GAAAX,sBAAA,CAAAC,OAAA;AAGb,IAAAW,MAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,KAAA,GAAAZ,OAAA;AAAiE,IAAAa,WAAA,GAAAb,OAAA;AAE1D,MAAMK,UAA0D,GAAIS,KAAK,IAAK;EACjF,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAAkB,GAAKJ,KAAK,CAAG,CAAC;AACzE,CAAC;AAAAX,OAAA,CAAAE,UAAA,GAAAA,UAAA;AAEM,MAAME,gBAAsE,GAAIO,KAAK,IAAK;EAC7F,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAAwB,GAAKJ,KAAK,CAAG,CAAC;AAC/E,CAAC;AAAAX,OAAA,CAAAI,gBAAA,GAAAA,gBAAA;AAEM,MAAME,kBAA0E,GAAIK,KAAK,IAAK;EACjG,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAA0B,GAAKJ,KAAK,CAAG,CAAC;AACjF,CAAC;AAAAX,OAAA,CAAAM,kBAAA,GAAAA,kBAAA;AAEM,MAAMH,WAA4D,GAAIQ,KAAK,IAAK;EACnF,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAAmB,GAAKJ,KAAK,CAAG,CAAC;AAC1E,CAAC;AAAAX,OAAA,CAAAG,WAAA,GAAAA,WAAA;AAEM,MAAME,aAAgE,GAAIM,KAAK,IAAK;EACvF,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAAqB,GAAKJ,KAAK,CAAG,CAAC;AAC5E,CAAC;AAAAX,OAAA,CAAAK,aAAA,GAAAA,aAAA","ignoreList":[]}
1
+ {"version":3,"file":"components.js","names":["_interopRequireDefault","require","Object","defineProperty","exports","value","UsersTable","ProfilePage","InviteUserDialog","EditEmailForm","ChangePasswordForm","_extends2","_react","_base","_jsxRuntime","props","jsx","CMCComponent","default","renderComponent"],"sources":["../../../../../packages/nextjs/src/common/cmc/components.tsx"],"sourcesContent":["'use client';\n\nimport {\n ChangePasswordFormProps,\n EditEmailFormProps,\n InviteUserDialogProps,\n ProfilePageProps,\n UsersTableProps,\n} from '@frontegg/types';\nimport React, { FC } from 'react';\nimport { CMCComponent, FronteggCMCComponentProps } from './base';\n\nexport const UsersTable: FC<FronteggCMCComponentProps<UsersTableProps>> = (props) => {\n return <CMCComponent renderComponent='renderUsersTable' {...props} />;\n};\n\nexport const InviteUserDialog: FC<FronteggCMCComponentProps<InviteUserDialogProps>> = (props) => {\n return <CMCComponent renderComponent='renderInviteUserDialog' {...props} />;\n};\n\nexport const ChangePasswordForm: FC<FronteggCMCComponentProps<ChangePasswordFormProps>> = (props) => {\n return <CMCComponent renderComponent='renderChangePasswordForm' {...props} />;\n};\n\nexport const ProfilePage: FC<FronteggCMCComponentProps<ProfilePageProps>> = (props) => {\n return <CMCComponent renderComponent='renderProfilePage' {...props} />;\n};\n\nexport const EditEmailForm: FC<FronteggCMCComponentProps<EditEmailFormProps>> = (props) => {\n return <CMCComponent renderComponent='renderEditEmailForm' {...props} />;\n};\n"],"mappings":";AAAA,YAAY;;AAAC,IAAAA,sBAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,cAAA,CAAAC,OAAA;EAAAC,KAAA;AAAA;AAAAD,OAAA,CAAAE,UAAA,GAAAF,OAAA,CAAAG,WAAA,GAAAH,OAAA,CAAAI,gBAAA,GAAAJ,OAAA,CAAAK,aAAA,GAAAL,OAAA,CAAAM,kBAAA;AAAA,IAAAC,SAAA,GAAAX,sBAAA,CAAAC,OAAA;AASb,IAAAW,MAAA,GAAAZ,sBAAA,CAAAC,OAAA;AACA,IAAAY,KAAA,GAAAZ,OAAA;AAAiE,IAAAa,WAAA,GAAAb,OAAA;AAE1D,MAAMK,UAA0D,GAAIS,KAAK,IAAK;EACnF,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAAkB,GAAKJ,KAAK,CAAG,CAAC;AACvE,CAAC;AAACX,OAAA,CAAAE,UAAA,GAAAA,UAAA;AAEK,MAAME,gBAAsE,GAAIO,KAAK,IAAK;EAC/F,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAAwB,GAAKJ,KAAK,CAAG,CAAC;AAC7E,CAAC;AAACX,OAAA,CAAAI,gBAAA,GAAAA,gBAAA;AAEK,MAAME,kBAA0E,GAAIK,KAAK,IAAK;EACnG,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAA0B,GAAKJ,KAAK,CAAG,CAAC;AAC/E,CAAC;AAACX,OAAA,CAAAM,kBAAA,GAAAA,kBAAA;AAEK,MAAMH,WAA4D,GAAIQ,KAAK,IAAK;EACrF,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAAmB,GAAKJ,KAAK,CAAG,CAAC;AACxE,CAAC;AAACX,OAAA,CAAAG,WAAA,GAAAA,WAAA;AAEK,MAAME,aAAgE,GAAIM,KAAK,IAAK;EACzF,oBAAO,IAAAD,WAAA,CAAAE,GAAA,EAACH,KAAA,CAAAI,YAAY,MAAAN,SAAA,CAAAO,OAAA;IAACC,eAAe,EAAC;EAAqB,GAAKJ,KAAK,CAAG,CAAC;AAC1E,CAAC;AAACX,OAAA,CAAAK,aAAA,GAAAA,aAAA","ignoreList":[]}
package/config/index.d.ts CHANGED
@@ -1,9 +1,8 @@
1
1
  import { AuthPageRoutes } from '@frontegg/redux-store';
2
2
  import { WithFronteggAppOptions } from '../pages';
3
- import { AppEnvConfig, GetClientIpFunction, PasswordsMap } from './types';
3
+ import { AppEnvConfig, PasswordsMap } from './types';
4
4
  declare class Config {
5
5
  fronteggAppOptions: Partial<WithFronteggAppOptions>;
6
- private _getClientIp?;
7
6
  constructor();
8
7
  get isSSGExport(): boolean;
9
8
  get appUrl(): string;
@@ -26,10 +25,7 @@ declare class Config {
26
25
  get password(): PasswordsMap;
27
26
  get isSSL(): boolean;
28
27
  get isHostedLogin(): boolean;
29
- get isVercel(): boolean;
30
28
  get disableInitialPropsRefreshToken(): boolean;
31
- get getClientIp(): GetClientIpFunction | undefined;
32
- set getClientIp(fn: GetClientIpFunction | undefined);
33
29
  get appEnvConfig(): AppEnvConfig;
34
30
  checkHostedLoginConfig(options: WithFronteggAppOptions | undefined): void;
35
31
  }
package/config/index.js CHANGED
@@ -37,7 +37,6 @@ const setupEnvVariables = {
37
37
  class Config {
38
38
  constructor() {
39
39
  this.fronteggAppOptions = {};
40
- this._getClientIp = void 0;
41
40
  if (!this.isSSGExport) {
42
41
  if (typeof window === 'undefined') {
43
42
  this.validatePassword();
@@ -174,19 +173,10 @@ class Config {
174
173
  var _this$fronteggAppOpti3;
175
174
  return (_this$fronteggAppOpti3 = this.fronteggAppOptions.hostedLoginBox) != null ? _this$fronteggAppOpti3 : (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.FRONTEGG_HOSTED_LOGIN, 'false') === 'true';
176
175
  }
177
- get isVercel() {
178
- return (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.VERCEL, setupEnvVariables.VERCEL) === '1';
179
- }
180
176
  get disableInitialPropsRefreshToken() {
181
177
  const disableInitialPropsRefreshToken = (0, _helpers.getEnvOrDefault)(_constants.EnvVariables.DISABLE_INITIAL_PROPS_REFRESH_TOKEN, setupEnvVariables.DISABLE_INITIAL_PROPS_REFRESH_TOKEN);
182
178
  return disableInitialPropsRefreshToken === 'true';
183
179
  }
184
- get getClientIp() {
185
- return this._getClientIp;
186
- }
187
- set getClientIp(fn) {
188
- this._getClientIp = fn;
189
- }
190
180
  get appEnvConfig() {
191
181
  const config = {
192
182
  envAppUrl: this.appUrl,
@@ -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_SHARED_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","FRONTEGG_SSG_EXPORT","DISABLE_INITIAL_PROPS_REFRESH_TOKEN","VERCEL","VERCEL_URL","Config","constructor","fronteggAppOptions","_getClientIp","isSSGExport","window","validatePassword","_getEnvOrDefault","getEnvOrDefault","EnvVariables","appUrl","generateAppUrl","testUrl","baseUrl","FronteggEnvNotFound","endsWith","slice","baseUrlHost","URL","hostname","clientId","_EnvVariables$FRONTEG","getEnv","appId","rewriteCookieByAppId","_setupEnvVariables$FR","clientSecret","_getEnv","e","secureJwtEnabled","InvalidFronteggEnv","sharedSecret","_getEnv2","shouldForwardIp","_setupEnvVariables$FR2","jwtPublicKeyJson","_getEnv3","_setupEnvVariables$FR3","cookieName","_setupEnvVariables$FR4","cookieNameEnv","replace","cookieDomain","_setupEnvVariables$FR5","generateCookieDomain","cookieSameSite","_setupEnvVariables$FR6","sameSite","authRoutes","_this$fronteggAppOpti","_this$fronteggAppOpti2","authOptions","routes","passwordMaps","password","key","Object","keys","match","length","encryptionPasswordEnv","normalizeStringPasswordToMap","isSSL","protocol","isHostedLogin","_this$fronteggAppOpti3","hostedLoginBox","FRONTEGG_HOSTED_LOGIN","isVercel","disableInitialPropsRefreshToken","getClientIp","fn","appEnvConfig","config","envAppUrl","envBaseUrl","envClientId","envAppId","envHostedLoginBox","checkHostedLoginConfig","options","undefined","Error","_default","exports","default"],"sources":["../../../../packages/nextjs/src/config/index.ts"],"sourcesContent":["import { AuthPageRoutes } from '@frontegg/redux-store';\nimport { WithFronteggAppOptions } from '../pages';\nimport { AppEnvConfig, GetClientIpFunction, PasswordsMap } from './types';\nimport { generateAppUrl, generateCookieDomain, getEnv, getEnvOrDefault, normalizeStringPasswordToMap } from './helpers';\nimport { EnvVariables } from './constants';\nimport { FronteggEnvNotFound, 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_SHARED_SECRET: process.env.FRONTEGG_SHARED_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 FRONTEGG_SSG_EXPORT: process.env.FRONTEGG_SSG_EXPORT,\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 private _getClientIp?: GetClientIpFunction;\n\n constructor() {\n if (!this.isSSGExport) {\n if (typeof window === 'undefined') {\n this.validatePassword();\n }\n }\n }\n\n get isSSGExport(): boolean {\n const isSSGExport =\n getEnvOrDefault(EnvVariables.FRONTEGG_SSG_EXPORT, setupEnvVariables.FRONTEGG_SSG_EXPORT) ?? 'false';\n return isSSGExport === 'true';\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 = getEnvOrDefault(EnvVariables.FRONTEGG_BASE_URL, setupEnvVariables.FRONTEGG_BASE_URL);\n if (!baseUrl) {\n throw new FronteggEnvNotFound(EnvVariables.FRONTEGG_BASE_URL);\n }\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 const clientId = getEnv(EnvVariables.FRONTEGG_CLIENT_ID ?? setupEnvVariables.FRONTEGG_CLIENT_ID);\n if (!clientId) {\n throw new FronteggEnvNotFound(EnvVariables.FRONTEGG_CLIENT_ID);\n }\n return clientId;\n }\n\n get appId(): string | undefined {\n return getEnvOrDefault(EnvVariables.FRONTEGG_APP_ID, setupEnvVariables.FRONTEGG_APP_ID);\n }\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;\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 && !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 sharedSecret(): string | undefined {\n let sharedSecret;\n try {\n sharedSecret = getEnv(EnvVariables.FRONTEGG_SHARED_SECRET) ?? setupEnvVariables.FRONTEGG_SHARED_SECRET;\n } catch (e) {\n sharedSecret = setupEnvVariables.FRONTEGG_SHARED_SECRET;\n }\n\n return sharedSecret;\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(): boolean {\n return (\n getEnvOrDefault(\n EnvVariables.FRONTEGG_SECURE_JWT_ENABLED,\n setupEnvVariables.FRONTEGG_SECURE_JWT_ENABLED ?? 'false'\n ) == 'true'\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 = getEnvOrDefault(\n EnvVariables.FRONTEGG_ENCRYPTION_PASSWORD,\n setupEnvVariables.FRONTEGG_ENCRYPTION_PASSWORD\n );\n\n if (!encryptionPasswordEnv) {\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 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 isVercel(): boolean {\n return getEnvOrDefault(EnvVariables.VERCEL, setupEnvVariables.VERCEL) === '1';\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 getClientIp(): GetClientIpFunction | undefined {\n return this._getClientIp;\n }\n\n set getClientIp(fn: GetClientIpFunction | undefined) {\n this._getClientIp = fn;\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 envHostedLoginBox: this.isHostedLogin,\n };\n return config;\n }\n\n checkHostedLoginConfig(options: WithFronteggAppOptions | undefined) {\n // noinspection JSDeprecatedSymbols\n if (options?.hostedLoginBox === undefined) {\n return;\n }\n // noinspection JSDeprecatedSymbols\n if (options.hostedLoginBox != this.isHostedLogin) {\n throw new Error(\n 'There is mismatch between FRONTEGG_HOSTED_LOGIN environment variable and withFronteggOptions, ' +\n 'please remove the hostedLoginBox from withFronteggOptions and use the FRONTEGG_HOSTED_LOGIN environment variable instead.'\n );\n }\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_SHARED_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","FRONTEGG_SSG_EXPORT","DISABLE_INITIAL_PROPS_REFRESH_TOKEN","VERCEL","VERCEL_URL","Config","constructor","fronteggAppOptions","isSSGExport","window","validatePassword","_getEnvOrDefault","getEnvOrDefault","EnvVariables","appUrl","generateAppUrl","testUrl","baseUrl","FronteggEnvNotFound","endsWith","slice","baseUrlHost","URL","hostname","clientId","_EnvVariables$FRONTEG","getEnv","appId","rewriteCookieByAppId","_setupEnvVariables$FR","clientSecret","_getEnv","e","secureJwtEnabled","InvalidFronteggEnv","sharedSecret","_getEnv2","shouldForwardIp","_setupEnvVariables$FR2","jwtPublicKeyJson","_getEnv3","_setupEnvVariables$FR3","cookieName","_setupEnvVariables$FR4","cookieNameEnv","replace","cookieDomain","_setupEnvVariables$FR5","generateCookieDomain","cookieSameSite","_setupEnvVariables$FR6","sameSite","authRoutes","_this$fronteggAppOpti","_this$fronteggAppOpti2","authOptions","routes","passwordMaps","password","key","Object","keys","match","length","encryptionPasswordEnv","normalizeStringPasswordToMap","isSSL","protocol","isHostedLogin","_this$fronteggAppOpti3","hostedLoginBox","FRONTEGG_HOSTED_LOGIN","disableInitialPropsRefreshToken","appEnvConfig","config","envAppUrl","envBaseUrl","envClientId","envAppId","envHostedLoginBox","checkHostedLoginConfig","options","undefined","Error","_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 { FronteggEnvNotFound, 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_SHARED_SECRET: process.env.FRONTEGG_SHARED_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 FRONTEGG_SSG_EXPORT: process.env.FRONTEGG_SSG_EXPORT,\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 (!this.isSSGExport) {\n if (typeof window === 'undefined') {\n this.validatePassword();\n }\n }\n }\n\n get isSSGExport(): boolean {\n const isSSGExport =\n getEnvOrDefault(EnvVariables.FRONTEGG_SSG_EXPORT, setupEnvVariables.FRONTEGG_SSG_EXPORT) ?? 'false';\n return isSSGExport === 'true';\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 = getEnvOrDefault(EnvVariables.FRONTEGG_BASE_URL, setupEnvVariables.FRONTEGG_BASE_URL);\n if (!baseUrl) {\n throw new FronteggEnvNotFound(EnvVariables.FRONTEGG_BASE_URL);\n }\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 const clientId = getEnv(EnvVariables.FRONTEGG_CLIENT_ID ?? setupEnvVariables.FRONTEGG_CLIENT_ID);\n if (!clientId) {\n throw new FronteggEnvNotFound(EnvVariables.FRONTEGG_CLIENT_ID);\n }\n return clientId;\n }\n\n get appId(): string | undefined {\n return getEnvOrDefault(EnvVariables.FRONTEGG_APP_ID, setupEnvVariables.FRONTEGG_APP_ID);\n }\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;\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 && !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 sharedSecret(): string | undefined {\n let sharedSecret;\n try {\n sharedSecret = getEnv(EnvVariables.FRONTEGG_SHARED_SECRET) ?? setupEnvVariables.FRONTEGG_SHARED_SECRET;\n } catch (e) {\n sharedSecret = setupEnvVariables.FRONTEGG_SHARED_SECRET;\n }\n\n return sharedSecret;\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(): boolean {\n return (\n getEnvOrDefault(\n EnvVariables.FRONTEGG_SECURE_JWT_ENABLED,\n setupEnvVariables.FRONTEGG_SECURE_JWT_ENABLED ?? 'false'\n ) == 'true'\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 = getEnvOrDefault(\n EnvVariables.FRONTEGG_ENCRYPTION_PASSWORD,\n setupEnvVariables.FRONTEGG_ENCRYPTION_PASSWORD\n );\n\n if (!encryptionPasswordEnv) {\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 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 envHostedLoginBox: this.isHostedLogin,\n };\n return config;\n }\n\n checkHostedLoginConfig(options: WithFronteggAppOptions | undefined) {\n // noinspection JSDeprecatedSymbols\n if (options?.hostedLoginBox === undefined) {\n return;\n }\n // noinspection JSDeprecatedSymbols\n if (options.hostedLoginBox != this.isHostedLogin) {\n throw new Error(\n 'There is mismatch between FRONTEGG_HOSTED_LOGIN environment variable and withFronteggOptions, ' +\n 'please remove the hostedLoginBox from withFronteggOptions and use the FRONTEGG_HOSTED_LOGIN environment variable instead.'\n );\n }\n }\n}\n\nexport { EnvVariables } from './constants';\nexport default new Config();\n"],"mappings":"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","ignoreList":[]}
package/config/types.d.ts CHANGED
@@ -8,8 +8,6 @@ export type PasswordsMap = {
8
8
  /**
9
9
  * PropTypes passed by FronteggProvider to the ClientSide Frontegg components.
10
10
  */
11
- import { NextApiRequest } from 'next';
12
- export type GetClientIpFunction = (req: NextApiRequest) => string | undefined;
13
11
  export interface AppEnvConfig {
14
12
  /** {@link EnvVariables.FRONTEGG_APP_URL} */
15
13
  envAppUrl: string;
@@ -23,6 +21,4 @@ export interface AppEnvConfig {
23
21
  secureJwtEnabled?: boolean;
24
22
  /** {@link EnvVariables.FRONTEGG_HOSTED_LOGIN} */
25
23
  envHostedLoginBox?: boolean;
26
- /** Custom function to resolve client IP */
27
- getClientIp?: GetClientIpFunction;
28
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../packages/nextjs/src/config/types.ts"],"sourcesContent":["/**\n * PasswordMap used for JWT encryption, you can create multiple passwords\n * to be used for encrypting session cookie as round-robin strategy.\n */\nexport type PasswordsMap = { [id: string]: string };\n\n/**\n * PropTypes passed by FronteggProvider to the ClientSide Frontegg components.\n */\nimport { NextApiRequest } from 'next';\n\nexport type GetClientIpFunction = (req: NextApiRequest) => string | undefined;\n\nexport interface AppEnvConfig {\n /** {@link EnvVariables.FRONTEGG_APP_URL} */\n envAppUrl: string;\n /** {@link EnvVariables.FRONTEGG_BASE_URL} */\n envBaseUrl: string;\n /** {@link EnvVariables.FRONTEGG_CLIENT_ID} */\n envClientId: string;\n /** {@link EnvVariables.FRONTEGG_APP_ID} */\n envAppId?: string;\n\n /** {@link EnvVariables.FRONTEGG_SECURE_JWT_ENABLED} */\n secureJwtEnabled?: boolean;\n /** {@link EnvVariables.FRONTEGG_HOSTED_LOGIN} */\n envHostedLoginBox?: boolean;\n /** Custom function to resolve client IP */\n getClientIp?: GetClientIpFunction;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../packages/nextjs/src/config/types.ts"],"sourcesContent":["/**\n * PasswordMap used for JWT encryption, you can create multiple passwords\n * to be used for encrypting session cookie as round-robin strategy.\n */\nexport type PasswordsMap = { [id: string]: string };\n\n/**\n * PropTypes passed by FronteggProvider to the ClientSide Frontegg components.\n */\nexport interface AppEnvConfig {\n /** {@link EnvVariables.FRONTEGG_APP_URL} */\n envAppUrl: string;\n /** {@link EnvVariables.FRONTEGG_BASE_URL} */\n envBaseUrl: string;\n /** {@link EnvVariables.FRONTEGG_CLIENT_ID} */\n envClientId: string;\n /** {@link EnvVariables.FRONTEGG_APP_ID} */\n envAppId?: string;\n\n /** {@link EnvVariables.FRONTEGG_SECURE_JWT_ENABLED} */\n secureJwtEnabled?: boolean;\n /** {@link EnvVariables.FRONTEGG_HOSTED_LOGIN} */\n envHostedLoginBox?: boolean;\n}\n"],"mappings":"","ignoreList":[]}
@@ -195,19 +195,14 @@ const handleHostedLoginCallback = async (req, pathname, searchParams) => {
195
195
  let clientIp = undefined;
196
196
  if (typeof ((_req$headers = req.headers) == null ? void 0 : _req$headers.get) === 'function') {
197
197
  var _socket;
198
- console.log('req.headers.get(cf-connecting-ip)', req.headers.get('cf-connecting-ip'));
199
- console.log('req.headers.get(x-forwarded-for)', req.headers.get('x-forwarded-for'));
200
198
  clientIp = (0, _utils.getClientIp)(req.headers.get('cf-connecting-ip') || req.headers.get('x-forwarded-for')) || ((_socket = req.socket) == null ? void 0 : _socket.remoteAddress);
201
199
  } else if (typeof req.headers === 'object') {
202
200
  var _socket2;
203
201
  let requestHeaders = (0, _extends2.default)({}, req.headers);
204
- console.log('requestHeaders[cf-connecting-ip]', requestHeaders['cf-connecting-ip']);
205
- console.log('requestHeaders[x-forwarded-for]', requestHeaders['x-forwarded-for']);
206
202
  clientIp = (0, _utils.getClientIp)(requestHeaders['cf-connecting-ip'] || requestHeaders['x-forwarded-for']) || ((_socket2 = req.socket) == null ? void 0 : _socket2.remoteAddress);
207
203
  }
208
204
  if (clientIp && _config.default.shouldForwardIp) {
209
205
  var _config$sharedSecret;
210
- console.log('inside handleHostedLoginCallback', process.env.VERCEL);
211
206
  headers[_utils.FRONTEGG_FORWARD_IP_HEADER] = clientIp;
212
207
  headers[_utils.FRONTEGG_HEADERS_VERIFIER_HEADER] = (_config$sharedSecret = _config.default.sharedSecret) != null ? _config$sharedSecret : '';
213
208
  headers[_utils.FRONTEGG_VENDOR_ID_HEADER] = _config.default.clientId;
@@ -1 +1 @@
1
- {"version":3,"file":"getSessionOnEdge.js","names":["_cookies","_interopRequireDefault","require","_createSession","_encryptionEdge","_api","_server","_config","_jwt","_utils","_fronteggLogger","_refreshAccessTokenIfNeededOnEdge","_redirectToLogin","_shouldBypassMiddleware","logger","fronteggLogger","child","tag","handleSessionOnEdge","params","request","pathname","searchParams","headers","isHostedLoginCallback","handleHostedLoginCallback","shouldByPassMiddleware","NextResponse","next","edgeSession","checkSessionOnEdge","redirectToLogin","forwardedHeaders","exports","GET_SESSION_ON_EDGE_DEPRECATED_WARN","getSessionOnEdge","req","disableWarning","cookies","CookieManager","getSessionCookieFromRequest","info","createSession","encryptionEdge","sessionCookies","existingSession","debug","session","refreshAccessTokenIfNeededOnEdge","createSessionFromAccessTokenEdge","data","_data$accessToken","_data$refreshToken","accessToken","access_token","refreshToken","refresh_token","payload","decodedJwt","JwtManager","verify","expiresIn","Math","floor","exp","Date","now","tokens","sealTokens","_searchParams$get","_req$headers","code","get","clientIp","undefined","_socket","console","log","getClientIp","socket","remoteAddress","_socket2","requestHeaders","_extends2","default","config","shouldForwardIp","_config$sharedSecret","process","env","VERCEL","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_HEADERS_VERIFIER_HEADER","sharedSecret","FRONTEGG_VENDOR_ID_HEADER","clientId","response","api","exchangeHostedLoginToken","buildRequestHeaders","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 { FronteggEdgeSession, FronteggNextJSSession } from '../types';\nimport CookieManager from '../utils/cookies';\nimport createSession from '../utils/createSession';\nimport encryptionEdge from '../utils/encryption-edge';\nimport api from '../api';\nimport { type NextRequest, NextResponse } from 'next/server';\nimport config from '../config';\nimport JwtManager from '../utils/jwt';\nimport {\n buildRequestHeaders,\n FRONTEGG_HEADERS_VERIFIER_HEADER,\n FRONTEGG_FORWARD_IP_HEADER,\n getClientIp,\n FRONTEGG_VENDOR_ID_HEADER,\n} from '../api/utils';\nimport fronteggLogger from '../utils/fronteggLogger';\nimport { refreshAccessTokenIfNeededOnEdge } from './refreshAccessTokenIfNeededOnEdge';\nimport { redirectToLogin } from './redirectToLogin';\nimport { shouldByPassMiddleware } from './shouldBypassMiddleware';\n\nconst logger = fronteggLogger.child({ tag: 'EdgeRuntime.getSessionOnEdge' });\n\nexport type HandleSessionOnEdge = {\n request: IncomingMessage | Request;\n pathname: string;\n headers: NextRequest['headers'];\n searchParams: URLSearchParams;\n};\n\nexport const handleSessionOnEdge = async (params: HandleSessionOnEdge): Promise<NextResponse> => {\n const { request, pathname, searchParams, headers } = params;\n\n if (isHostedLoginCallback(pathname, searchParams)) {\n return handleHostedLoginCallback(request, pathname, searchParams);\n }\n\n if (shouldByPassMiddleware(pathname, headers /*, options: optional bypass configuration */)) {\n return NextResponse.next();\n }\n\n const edgeSession = await checkSessionOnEdge(request);\n if (!edgeSession) {\n return redirectToLogin(pathname, searchParams);\n }\n if (edgeSession.headers) {\n return NextResponse.next({\n headers: edgeSession.headers,\n request: {\n headers: edgeSession.forwardedHeaders,\n },\n });\n }\n return NextResponse.next();\n};\n\nconst GET_SESSION_ON_EDGE_DEPRECATED_WARN = `Deprecation Notice: getSessionOnEdge has been deprecated. Please use handleSessionOnEdge instead. For example:\n\nfile: middleware.ts\n\\`\\`\\`ts\n import { NextRequest } from 'next/server';\n import { handleSessionOnEdge } from '@frontegg/nextjs/edge';\n \n export const middleware = async (request: NextRequest) => {\n const { pathname, searchParams } = request.nextUrl;\n const headers = request.headers;\n \n // Additional logic if needed\n \n return handleSessionOnEdge({ request, pathname, searchParams, headers });\n };\n \n \n export const config = {\n matcher: '/(.*)',\n };\n\n\\`\\`\\`\n\nAlternatively, to manually verify the session, you can use checkSessionOnEdge. Note that this method does not redirect to the login page if the session is invalid.\n`;\n\n/**\n * getSessionOnEdge is deprecated, please use handleSessionOnEdge instead example:\n *\n * ```ts\n * import { NextRequest } from 'next/server';\n * import { handleSessionOnEdge } from '@frontegg/nextjs/edge';\n *\n * export const middleware = async (request: NextRequest) => {\n * const { pathname, searchParams } = request.nextUrl;\n * const headers = request.headers;\n *\n * // Additional logic if needed\n *\n * return handleSessionOnEdge({ request, pathname, searchParams, headers });\n * };\n *\n * export const config = {\n * matcher: '/(.*)',\n * };\n * ```\n * @deprecated\n */\n\nexport const getSessionOnEdge = (\n req: IncomingMessage | Request,\n disableWarning = false\n): Promise<FronteggNextJSSession | undefined> => {\n const logger = fronteggLogger.child({ tag: 'EdgeRuntime.getSessionOnEdge' });\n const cookies = CookieManager.getSessionCookieFromRequest(req);\n if (!disableWarning) {\n logger.info(GET_SESSION_ON_EDGE_DEPRECATED_WARN);\n }\n return createSession(cookies, encryptionEdge);\n};\n\n/**\n * Check session on edge and return session if exists this method does not redirect to login page\n * Example:\n *\n * ```ts\n * import { NextRequest } from 'next/server';\n * import { handleSessionOnEdge } from '@frontegg/nextjs/edge';\n *\n * export const middleware = async (request: NextRequest) => {\n * const { pathname, searchParams } = request.nextUrl;\n * const headers = request.headers;\n *\n * // Additional logic if needed\n *\n * // check if it's a hosted login callback\n * if (isHostedLoginCallback(pathname, searchParams)) {\n * return handleHostedLoginCallback(request, pathname, searchParams);\n * }\n *\n * // check if we should bypass the middleware\n * if (shouldByPassMiddleware(pathname)) {\n * return NextResponse.next();\n * }\n *\n * // check session\n * const session = await checkSessionOnEdge(request);\n *\n * if (!session) {\n * return redirectToLogin(pathname);\n * }\n *\n * // if headers are present forward them to the next response / request\n * if (session.headers) {\n * return NextResponse.next({\n * headers: edgeSession.headers,\n * request:{\n * headers: edgeSession.forwardedHeaders\n * }\n * });\n * }\n * return NextResponse.next();\n * };\n * ```\n *\n *\n * @param req\n */\nexport const checkSessionOnEdge = async (req: IncomingMessage | Request): Promise<FronteggEdgeSession | undefined> => {\n const sessionCookies = CookieManager.getSessionCookieFromRequest(req);\n let existingSession = await createSession(sessionCookies, encryptionEdge);\n if (existingSession) {\n logger.debug('session resolved from session cookie');\n return {\n session: existingSession,\n };\n }\n\n logger.debug('Failed to resolve session from cookie, going to refresh token');\n return refreshAccessTokenIfNeededOnEdge(req);\n};\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 encryptionEdge.sealTokens(tokens, decodedJwt.exp);\n return [session, decodedJwt, refreshToken];\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 console.log('req.headers.get(cf-connecting-ip)', req.headers.get('cf-connecting-ip'));\n console.log('req.headers.get(x-forwarded-for)', req.headers.get('x-forwarded-for'));\n clientIp =\n getClientIp(req.headers.get('cf-connecting-ip') || 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 console.log('requestHeaders[cf-connecting-ip]', requestHeaders['cf-connecting-ip']);\n console.log('requestHeaders[x-forwarded-for]', requestHeaders['x-forwarded-for']);\n clientIp =\n getClientIp(requestHeaders['cf-connecting-ip'] || requestHeaders['x-forwarded-for']) ||\n (req as any).socket?.remoteAddress;\n }\n\n if (clientIp && config.shouldForwardIp) {\n console.log('inside handleHostedLoginCallback', process.env.VERCEL);\n\n headers[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n headers[FRONTEGG_HEADERS_VERIFIER_HEADER] = config.sharedSecret ?? '';\n headers[FRONTEGG_VENDOR_ID_HEADER] = config.clientId;\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;AACA,IAAAO,MAAA,GAAAP,OAAA;AAOA,IAAAQ,eAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,iCAAA,GAAAT,OAAA;AACA,IAAAU,gBAAA,GAAAV,OAAA;AACA,IAAAW,uBAAA,GAAAX,OAAA;AAEA,MAAMY,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;EAAEC,GAAG,EAAE;AAA+B,CAAC,CAAC;AASrE,MAAMC,mBAAmB,GAAG,MAAOC,MAA2B,IAA4B;EAC/F,MAAM;IAAEC,OAAO;IAAEC,QAAQ;IAAEC,YAAY;IAAEC;EAAQ,CAAC,GAAGJ,MAAM;EAE3D,IAAIK,qBAAqB,CAACH,QAAQ,EAAEC,YAAY,CAAC,EAAE;IACjD,OAAOG,yBAAyB,CAACL,OAAO,EAAEC,QAAQ,EAAEC,YAAY,CAAC;EACnE;EAEA,IAAI,IAAAI,8CAAsB,EAACL,QAAQ,EAAEE,OAAO,CAAC,6CAA6C,CAAC,EAAE;IAC3F,OAAOI,oBAAY,CAACC,IAAI,CAAC,CAAC;EAC5B;EAEA,MAAMC,WAAW,GAAG,MAAMC,kBAAkB,CAACV,OAAO,CAAC;EACrD,IAAI,CAACS,WAAW,EAAE;IAChB,OAAO,IAAAE,gCAAe,EAACV,QAAQ,EAAEC,YAAY,CAAC;EAChD;EACA,IAAIO,WAAW,CAACN,OAAO,EAAE;IACvB,OAAOI,oBAAY,CAACC,IAAI,CAAC;MACvBL,OAAO,EAAEM,WAAW,CAACN,OAAO;MAC5BH,OAAO,EAAE;QACPG,OAAO,EAAEM,WAAW,CAACG;MACvB;IACF,CAAC,CAAC;EACJ;EACA,OAAOL,oBAAY,CAACC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAACK,OAAA,CAAAf,mBAAA,GAAAA,mBAAA;AAEF,MAAMgB,mCAAmC,GAAG;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMC,gBAAgB,GAAGA,CAC9BC,GAA8B,EAC9BC,cAAc,GAAG,KAAK,KACyB;EAC/C,MAAMvB,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;IAAEC,GAAG,EAAE;EAA+B,CAAC,CAAC;EAC5E,MAAMqB,OAAO,GAAGC,gBAAa,CAACC,2BAA2B,CAACJ,GAAG,CAAC;EAC9D,IAAI,CAACC,cAAc,EAAE;IACnBvB,MAAM,CAAC2B,IAAI,CAACP,mCAAmC,CAAC;EAClD;EACA,OAAO,IAAAQ,sBAAa,EAACJ,OAAO,EAAEK,uBAAc,CAAC;AAC/C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA9CAV,OAAA,CAAAE,gBAAA,GAAAA,gBAAA;AA+CO,MAAML,kBAAkB,GAAG,MAAOM,GAA8B,IAA+C;EACpH,MAAMQ,cAAc,GAAGL,gBAAa,CAACC,2BAA2B,CAACJ,GAAG,CAAC;EACrE,IAAIS,eAAe,GAAG,MAAM,IAAAH,sBAAa,EAACE,cAAc,EAAED,uBAAc,CAAC;EACzE,IAAIE,eAAe,EAAE;IACnB/B,MAAM,CAACgC,KAAK,CAAC,sCAAsC,CAAC;IACpD,OAAO;MACLC,OAAO,EAAEF;IACX,CAAC;EACH;EAEA/B,MAAM,CAACgC,KAAK,CAAC,+DAA+D,CAAC;EAC7E,OAAO,IAAAE,kEAAgC,EAACZ,GAAG,CAAC;AAC9C,CAAC;AAACH,OAAA,CAAAH,kBAAA,GAAAA,kBAAA;AAEF,eAAemB,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,CAAC,CAAC,IAAI,IAAI,CAAC;EAE9E,MAAMC,MAAM,GAAG;IAAEd,WAAW;IAAEE;EAAa,CAAC;EAC5C,MAAMR,OAAO,GAAG,MAAMJ,uBAAc,CAACyB,UAAU,CAACD,MAAM,EAAET,UAAU,CAACM,GAAG,CAAC;EACvE,OAAO,CAACjB,OAAO,EAAEW,UAAU,EAAEH,YAAY,CAAC;AAC5C;AAEO,MAAM9B,yBAAyB,GAAG,MAAAA,CACvCW,GAA8B,EAC9Bf,QAAgB,EAChBC,YAA6B,KACH;EAAA,IAAA+C,iBAAA,EAAAC,YAAA;EAC1B,IAAI,CAAC9C,qBAAqB,CAACH,QAAQ,EAAEC,YAAY,CAAC,EAAE;IAClD,OAAOK,oBAAY,CAACC,IAAI,CAAC,CAAC;EAC5B;EAEA,MAAM2C,IAAI,IAAAF,iBAAA,GAAG/C,YAAY,CAACkD,GAAG,CAAC,MAAM,CAAC,YAAAH,iBAAA,GAAI,EAAE;EAE3C,IAAI9C,OAA+B,GAAG,CAAC,CAAC;EACxC,IAAIkD,QAA4B,GAAGC,SAAS;EAC5C,IAAI,SAAAJ,YAAA,GAAOlC,GAAG,CAACb,OAAO,qBAAX+C,YAAA,CAAaE,GAAG,MAAK,UAAU,EAAE;IAAA,IAAAG,OAAA;IAC1CC,OAAO,CAACC,GAAG,CAAC,mCAAmC,EAAEzC,GAAG,CAACb,OAAO,CAACiD,GAAG,CAAC,kBAAkB,CAAC,CAAC;IACrFI,OAAO,CAACC,GAAG,CAAC,kCAAkC,EAAEzC,GAAG,CAACb,OAAO,CAACiD,GAAG,CAAC,iBAAiB,CAAC,CAAC;IACnFC,QAAQ,GACN,IAAAK,kBAAW,EAAC1C,GAAG,CAACb,OAAO,CAACiD,GAAG,CAAC,kBAAkB,CAAC,IAAIpC,GAAG,CAACb,OAAO,CAACiD,GAAG,CAAC,iBAAiB,CAAC,CAAC,MAAAG,OAAA,GACrFvC,GAAG,CAAS2C,MAAM,qBAAnBJ,OAAA,CAAqBK,aAAa;EACtC,CAAC,MAAM,IAAI,OAAO5C,GAAG,CAACb,OAAO,KAAK,QAAQ,EAAE;IAAA,IAAA0D,QAAA;IAC1C,IAAIC,cAAmB,OAAAC,SAAA,CAAAC,OAAA,MAAQhD,GAAG,CAACb,OAAO,CAAE;IAC5CqD,OAAO,CAACC,GAAG,CAAC,kCAAkC,EAAEK,cAAc,CAAC,kBAAkB,CAAC,CAAC;IACnFN,OAAO,CAACC,GAAG,CAAC,iCAAiC,EAAEK,cAAc,CAAC,iBAAiB,CAAC,CAAC;IACjFT,QAAQ,GACN,IAAAK,kBAAW,EAACI,cAAc,CAAC,kBAAkB,CAAC,IAAIA,cAAc,CAAC,iBAAiB,CAAC,CAAC,MAAAD,QAAA,GACnF7C,GAAG,CAAS2C,MAAM,qBAAnBE,QAAA,CAAqBD,aAAa;EACtC;EAEA,IAAIP,QAAQ,IAAIY,eAAM,CAACC,eAAe,EAAE;IAAA,IAAAC,oBAAA;IACtCX,OAAO,CAACC,GAAG,CAAC,kCAAkC,EAAEW,OAAO,CAACC,GAAG,CAACC,MAAM,CAAC;IAEnEnE,OAAO,CAACoE,iCAA0B,CAAC,GAAGlB,QAAQ;IAC9ClD,OAAO,CAACqE,uCAAgC,CAAC,IAAAL,oBAAA,GAAGF,eAAM,CAACQ,YAAY,YAAAN,oBAAA,GAAI,EAAE;IACrEhE,OAAO,CAACuE,gCAAyB,CAAC,GAAGT,eAAM,CAACU,QAAQ;EACtD;EAEA,MAAMC,QAAQ,GAAG,MAAMC,YAAG,CAACC,wBAAwB,CACjD,IAAAC,0BAAmB,EAAC5E,OAAO,CAAC,EAC5BgD,IAAI,EACJc,eAAM,CAACU,QAAQ,EACfV,eAAM,CAACe,YACT,CAAC;EAED,MAAMlD,IAAI,GAAG,MAAM8C,QAAQ,CAACK,IAAI,CAAC,CAAC;EAElC,MAAM,CAACtD,OAAO,EAAEW,UAAU,EAAEH,YAAY,CAAC,GAAG,MAAMN,gCAAgC,CAACC,IAAI,CAAC;EAExF,IAAI,CAACH,OAAO,EAAE;IACZ,OAAOpB,oBAAY,CAAC2E,QAAQ,CAACjB,eAAM,CAACkB,MAAM,CAAC;EAC7C;EACA,MAAMC,SAAS,GAAGnB,eAAM,CAACoB,KAAK;EAC9B,MAAMC,WAAW,GAAGnE,gBAAa,CAACoE,MAAM,CAAC;IACvCC,KAAK,EAAE7D,OAAO;IACd8D,OAAO,EAAE,IAAI5C,IAAI,CAACP,UAAU,CAACM,GAAG,GAAG,IAAI,CAAC;IACxC8C,MAAM,EAAEN;EACV,CAAC,CAAC;EAEF,IAAIO,UAAU,GAAG,cAAc1B,eAAM,CAACU,QAAQ,CAACiB,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;EACjE,IAAI3B,eAAM,CAAC4B,oBAAoB,IAAI5B,eAAM,CAAC6B,KAAK,EAAE;IAC/CH,UAAU,GAAG,cAAc1B,eAAM,CAAC6B,KAAK,CAACF,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;EAC5D;EACA,MAAMG,aAAa,GAAG5E,gBAAa,CAACoE,MAAM,CAAC;IACzCI,UAAU;IACVH,KAAK,EAAErD,YAAY,WAAZA,YAAY,GAAI,EAAE;IACzBsD,OAAO,EAAE,IAAI5C,IAAI,CAACP,UAAU,CAACM,GAAG,GAAG,IAAI,CAAC;IACxC8C,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,OAAO3F,oBAAY,CAAC2E,QAAQ,CAACjB,eAAM,CAACkB,MAAM,EAAE;IAC1ChF,OAAO,EAAE,CAAC,GAAG6F,oBAAoB,EAAE,GAAGG,oBAAoB;EAC5D,CAAC,CAAC;AACJ,CAAC;AAACtF,OAAA,CAAAR,yBAAA,GAAAA,yBAAA;AAEK,MAAMD,qBAAqB,GAAGA,CAACH,QAAgB,EAAEC,YAA6B,KAAc;EACjG,IAAI+D,eAAM,CAACmC,gBAAgB,EAAE;IAC3B,IAAInG,QAAQ,CAACoG,UAAU,CAAC,iBAAiB,CAAC,EAAE;MAC1C,OAAOnG,YAAY,CAACkD,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;IACzC;EACF;EACA,OAAO,KAAK;AACd,CAAC;AAACvC,OAAA,CAAAT,qBAAA,GAAAA,qBAAA","ignoreList":[]}
1
+ {"version":3,"file":"getSessionOnEdge.js","names":["_cookies","_interopRequireDefault","require","_createSession","_encryptionEdge","_api","_server","_config","_jwt","_utils","_fronteggLogger","_refreshAccessTokenIfNeededOnEdge","_redirectToLogin","_shouldBypassMiddleware","logger","fronteggLogger","child","tag","handleSessionOnEdge","params","request","pathname","searchParams","headers","isHostedLoginCallback","handleHostedLoginCallback","shouldByPassMiddleware","NextResponse","next","edgeSession","checkSessionOnEdge","redirectToLogin","forwardedHeaders","exports","GET_SESSION_ON_EDGE_DEPRECATED_WARN","getSessionOnEdge","req","disableWarning","cookies","CookieManager","getSessionCookieFromRequest","info","createSession","encryptionEdge","sessionCookies","existingSession","debug","session","refreshAccessTokenIfNeededOnEdge","createSessionFromAccessTokenEdge","data","_data$accessToken","_data$refreshToken","accessToken","access_token","refreshToken","refresh_token","payload","decodedJwt","JwtManager","verify","expiresIn","Math","floor","exp","Date","now","tokens","sealTokens","_searchParams$get","_req$headers","code","get","clientIp","undefined","_socket","getClientIp","socket","remoteAddress","_socket2","requestHeaders","_extends2","default","config","shouldForwardIp","_config$sharedSecret","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_HEADERS_VERIFIER_HEADER","sharedSecret","FRONTEGG_VENDOR_ID_HEADER","clientId","response","api","exchangeHostedLoginToken","buildRequestHeaders","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 { FronteggEdgeSession, FronteggNextJSSession } from '../types';\nimport CookieManager from '../utils/cookies';\nimport createSession from '../utils/createSession';\nimport encryptionEdge from '../utils/encryption-edge';\nimport api from '../api';\nimport { type NextRequest, NextResponse } from 'next/server';\nimport config from '../config';\nimport JwtManager from '../utils/jwt';\nimport {\n buildRequestHeaders,\n FRONTEGG_HEADERS_VERIFIER_HEADER,\n FRONTEGG_FORWARD_IP_HEADER,\n getClientIp,\n FRONTEGG_VENDOR_ID_HEADER,\n} from '../api/utils';\nimport fronteggLogger from '../utils/fronteggLogger';\nimport { refreshAccessTokenIfNeededOnEdge } from './refreshAccessTokenIfNeededOnEdge';\nimport { redirectToLogin } from './redirectToLogin';\nimport { shouldByPassMiddleware } from './shouldBypassMiddleware';\n\nconst logger = fronteggLogger.child({ tag: 'EdgeRuntime.getSessionOnEdge' });\n\nexport type HandleSessionOnEdge = {\n request: IncomingMessage | Request;\n pathname: string;\n headers: NextRequest['headers'];\n searchParams: URLSearchParams;\n};\n\nexport const handleSessionOnEdge = async (params: HandleSessionOnEdge): Promise<NextResponse> => {\n const { request, pathname, searchParams, headers } = params;\n\n if (isHostedLoginCallback(pathname, searchParams)) {\n return handleHostedLoginCallback(request, pathname, searchParams);\n }\n\n if (shouldByPassMiddleware(pathname, headers /*, options: optional bypass configuration */)) {\n return NextResponse.next();\n }\n\n const edgeSession = await checkSessionOnEdge(request);\n if (!edgeSession) {\n return redirectToLogin(pathname, searchParams);\n }\n if (edgeSession.headers) {\n return NextResponse.next({\n headers: edgeSession.headers,\n request: {\n headers: edgeSession.forwardedHeaders,\n },\n });\n }\n return NextResponse.next();\n};\n\nconst GET_SESSION_ON_EDGE_DEPRECATED_WARN = `Deprecation Notice: getSessionOnEdge has been deprecated. Please use handleSessionOnEdge instead. For example:\n\nfile: middleware.ts\n\\`\\`\\`ts\n import { NextRequest } from 'next/server';\n import { handleSessionOnEdge } from '@frontegg/nextjs/edge';\n \n export const middleware = async (request: NextRequest) => {\n const { pathname, searchParams } = request.nextUrl;\n const headers = request.headers;\n \n // Additional logic if needed\n \n return handleSessionOnEdge({ request, pathname, searchParams, headers });\n };\n \n \n export const config = {\n matcher: '/(.*)',\n };\n\n\\`\\`\\`\n\nAlternatively, to manually verify the session, you can use checkSessionOnEdge. Note that this method does not redirect to the login page if the session is invalid.\n`;\n\n/**\n * getSessionOnEdge is deprecated, please use handleSessionOnEdge instead example:\n *\n * ```ts\n * import { NextRequest } from 'next/server';\n * import { handleSessionOnEdge } from '@frontegg/nextjs/edge';\n *\n * export const middleware = async (request: NextRequest) => {\n * const { pathname, searchParams } = request.nextUrl;\n * const headers = request.headers;\n *\n * // Additional logic if needed\n *\n * return handleSessionOnEdge({ request, pathname, searchParams, headers });\n * };\n *\n * export const config = {\n * matcher: '/(.*)',\n * };\n * ```\n * @deprecated\n */\n\nexport const getSessionOnEdge = (\n req: IncomingMessage | Request,\n disableWarning = false\n): Promise<FronteggNextJSSession | undefined> => {\n const logger = fronteggLogger.child({ tag: 'EdgeRuntime.getSessionOnEdge' });\n const cookies = CookieManager.getSessionCookieFromRequest(req);\n if (!disableWarning) {\n logger.info(GET_SESSION_ON_EDGE_DEPRECATED_WARN);\n }\n return createSession(cookies, encryptionEdge);\n};\n\n/**\n * Check session on edge and return session if exists this method does not redirect to login page\n * Example:\n *\n * ```ts\n * import { NextRequest } from 'next/server';\n * import { handleSessionOnEdge } from '@frontegg/nextjs/edge';\n *\n * export const middleware = async (request: NextRequest) => {\n * const { pathname, searchParams } = request.nextUrl;\n * const headers = request.headers;\n *\n * // Additional logic if needed\n *\n * // check if it's a hosted login callback\n * if (isHostedLoginCallback(pathname, searchParams)) {\n * return handleHostedLoginCallback(request, pathname, searchParams);\n * }\n *\n * // check if we should bypass the middleware\n * if (shouldByPassMiddleware(pathname)) {\n * return NextResponse.next();\n * }\n *\n * // check session\n * const session = await checkSessionOnEdge(request);\n *\n * if (!session) {\n * return redirectToLogin(pathname);\n * }\n *\n * // if headers are present forward them to the next response / request\n * if (session.headers) {\n * return NextResponse.next({\n * headers: edgeSession.headers,\n * request:{\n * headers: edgeSession.forwardedHeaders\n * }\n * });\n * }\n * return NextResponse.next();\n * };\n * ```\n *\n *\n * @param req\n */\nexport const checkSessionOnEdge = async (req: IncomingMessage | Request): Promise<FronteggEdgeSession | undefined> => {\n const sessionCookies = CookieManager.getSessionCookieFromRequest(req);\n let existingSession = await createSession(sessionCookies, encryptionEdge);\n if (existingSession) {\n logger.debug('session resolved from session cookie');\n return {\n session: existingSession,\n };\n }\n\n logger.debug('Failed to resolve session from cookie, going to refresh token');\n return refreshAccessTokenIfNeededOnEdge(req);\n};\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 encryptionEdge.sealTokens(tokens, decodedJwt.exp);\n return [session, decodedJwt, refreshToken];\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 getClientIp(req.headers.get('cf-connecting-ip') || 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 getClientIp(requestHeaders['cf-connecting-ip'] || requestHeaders['x-forwarded-for']) ||\n (req as any).socket?.remoteAddress;\n }\n\n if (clientIp && config.shouldForwardIp) {\n headers[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n headers[FRONTEGG_HEADERS_VERIFIER_HEADER] = config.sharedSecret ?? '';\n headers[FRONTEGG_VENDOR_ID_HEADER] = config.clientId;\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;AACA,IAAAO,MAAA,GAAAP,OAAA;AAOA,IAAAQ,eAAA,GAAAT,sBAAA,CAAAC,OAAA;AACA,IAAAS,iCAAA,GAAAT,OAAA;AACA,IAAAU,gBAAA,GAAAV,OAAA;AACA,IAAAW,uBAAA,GAAAX,OAAA;AAEA,MAAMY,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;EAAEC,GAAG,EAAE;AAA+B,CAAC,CAAC;AASrE,MAAMC,mBAAmB,GAAG,MAAOC,MAA2B,IAA4B;EAC/F,MAAM;IAAEC,OAAO;IAAEC,QAAQ;IAAEC,YAAY;IAAEC;EAAQ,CAAC,GAAGJ,MAAM;EAE3D,IAAIK,qBAAqB,CAACH,QAAQ,EAAEC,YAAY,CAAC,EAAE;IACjD,OAAOG,yBAAyB,CAACL,OAAO,EAAEC,QAAQ,EAAEC,YAAY,CAAC;EACnE;EAEA,IAAI,IAAAI,8CAAsB,EAACL,QAAQ,EAAEE,OAAO,CAAC,6CAA6C,CAAC,EAAE;IAC3F,OAAOI,oBAAY,CAACC,IAAI,CAAC,CAAC;EAC5B;EAEA,MAAMC,WAAW,GAAG,MAAMC,kBAAkB,CAACV,OAAO,CAAC;EACrD,IAAI,CAACS,WAAW,EAAE;IAChB,OAAO,IAAAE,gCAAe,EAACV,QAAQ,EAAEC,YAAY,CAAC;EAChD;EACA,IAAIO,WAAW,CAACN,OAAO,EAAE;IACvB,OAAOI,oBAAY,CAACC,IAAI,CAAC;MACvBL,OAAO,EAAEM,WAAW,CAACN,OAAO;MAC5BH,OAAO,EAAE;QACPG,OAAO,EAAEM,WAAW,CAACG;MACvB;IACF,CAAC,CAAC;EACJ;EACA,OAAOL,oBAAY,CAACC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAACK,OAAA,CAAAf,mBAAA,GAAAA,mBAAA;AAEF,MAAMgB,mCAAmC,GAAG;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEO,MAAMC,gBAAgB,GAAGA,CAC9BC,GAA8B,EAC9BC,cAAc,GAAG,KAAK,KACyB;EAC/C,MAAMvB,MAAM,GAAGC,uBAAc,CAACC,KAAK,CAAC;IAAEC,GAAG,EAAE;EAA+B,CAAC,CAAC;EAC5E,MAAMqB,OAAO,GAAGC,gBAAa,CAACC,2BAA2B,CAACJ,GAAG,CAAC;EAC9D,IAAI,CAACC,cAAc,EAAE;IACnBvB,MAAM,CAAC2B,IAAI,CAACP,mCAAmC,CAAC;EAClD;EACA,OAAO,IAAAQ,sBAAa,EAACJ,OAAO,EAAEK,uBAAc,CAAC;AAC/C,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AA9CAV,OAAA,CAAAE,gBAAA,GAAAA,gBAAA;AA+CO,MAAML,kBAAkB,GAAG,MAAOM,GAA8B,IAA+C;EACpH,MAAMQ,cAAc,GAAGL,gBAAa,CAACC,2BAA2B,CAACJ,GAAG,CAAC;EACrE,IAAIS,eAAe,GAAG,MAAM,IAAAH,sBAAa,EAACE,cAAc,EAAED,uBAAc,CAAC;EACzE,IAAIE,eAAe,EAAE;IACnB/B,MAAM,CAACgC,KAAK,CAAC,sCAAsC,CAAC;IACpD,OAAO;MACLC,OAAO,EAAEF;IACX,CAAC;EACH;EAEA/B,MAAM,CAACgC,KAAK,CAAC,+D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","ignoreList":[]}
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license Frontegg v9.2.8-alpha.16120580367
1
+ /** @license Frontegg v9.2.8
2
2
  *
3
3
  * This source code is licensed under the MIT license found in the
4
4
  * LICENSE file in the root directory of this source tree.
@@ -13,17 +13,17 @@ var _pages = require("../pages");
13
13
  var _config = _interopRequireDefault(require("../config"));
14
14
  var _cookies = _interopRequireDefault(require("../utils/cookies"));
15
15
  var _common = require("../common");
16
- const middlewarePromise = (req, res, options) => new Promise(async resolve => {
16
+ const middlewarePromise = (req, res) => new Promise(async resolve => {
17
17
  var _req$url;
18
18
  const fronteggUrlPath = (0, _helpers.rewritePath)((_req$url = req.url) != null ? _req$url : '/', _constants.fronteggPathRewrite);
19
19
  const rewriteUrl = (0, _helpers.rewritePath)(fronteggUrlPath != null ? fronteggUrlPath : '/', _constants.fronteggSSOPathRewrite);
20
20
  req.url = rewriteUrl;
21
21
  res.on('close', () => resolve());
22
- const proxyOptions = {
22
+ const options = {
23
23
  target: process.env['FRONTEGG_BASE_URL']
24
24
  };
25
25
  if (process.env['FRONTEGG_TEST_URL'] && req.url == '/frontegg/middleware-test') {
26
- proxyOptions.target = process.env['FRONTEGG_TEST_URL'];
26
+ options.target = process.env['FRONTEGG_TEST_URL'];
27
27
  }
28
28
  const headers = {};
29
29
  if (process.env['FRONTEGG_SECURE_JWT_ENABLED'] === 'true') {
@@ -39,10 +39,7 @@ const middlewarePromise = (req, res, options) => new Promise(async resolve => {
39
39
  headers['authorization'] = 'Bearer ' + tokens.accessToken;
40
40
  }
41
41
  }
42
- if (options != null && options.getClientIp) {
43
- _config.default.getClientIp = options.getClientIp;
44
- }
45
- _FronteggProxy.FronteggProxy.web(req, res, (0, _extends2.default)({}, proxyOptions, {
42
+ _FronteggProxy.FronteggProxy.web(req, res, (0, _extends2.default)({}, options, {
46
43
  headers
47
44
  }));
48
45
  });
@@ -80,7 +77,4 @@ FronteggApiMiddleware.cors = options => async (req, res) => {
80
77
  }
81
78
  return middlewarePromise(req, res);
82
79
  };
83
- FronteggApiMiddleware.withOptions = options => async (req, res) => {
84
- return await middlewarePromise(req, res, options);
85
- };
86
80
  //# sourceMappingURL=FronteggApiMiddleware.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FronteggApiMiddleware.js","names":["_FronteggProxy","require","_constants","_helpers","_pages","_config","_interopRequireDefault","_cookies","_common","middlewarePromise","req","res","options","Promise","resolve","_req$url","fronteggUrlPath","rewritePath","url","fronteggPathRewrite","rewriteUrl","fronteggSSOPathRewrite","on","proxyOptions","target","process","env","headers","session","getSession","accessToken","config","isHostedLogin","isFronteggLogoutUrl","sessionCookie","CookieManager","getSessionCookieFromRequest","tokens","getTokensFromCookie","getClientIp","FronteggProxy","web","_extends2","default","FronteggApiMiddleware","exports","cors","_req$headers$host","allowedOrigins","allowedMethods","allowedHeaders","allowCredentials","isInternalRequest","host","_req$headers$origin","origin","combinedHeaders","Array","from","Set","defaultFronteggHeaders","includes","setHeader","removeHeader","join","withOptions"],"sources":["../../../../packages/nextjs/src/middleware/FronteggApiMiddleware.ts"],"sourcesContent":["import type { NextApiRequest, NextApiResponse } from 'next';\nimport { FronteggProxy } from './FronteggProxy';\nimport { fronteggSSOPathRewrite, fronteggPathRewrite, defaultFronteggHeaders } from './constants';\nimport { isInternalRequest, rewritePath } from './helpers';\nimport { getSession } from '../pages';\nimport { CorsOptions, FronteggApiMiddlewareType, FronteggMiddlewareOptions } from './types';\nimport config from '../config';\nimport { isFronteggLogoutUrl } from './helpers';\nimport CookieManager from '../utils/cookies';\nimport { getTokensFromCookie } from '../common';\n\nconst middlewarePromise = (req: NextApiRequest, res: NextApiResponse, options?: FronteggMiddlewareOptions) =>\n new Promise<void>(async (resolve) => {\n const fronteggUrlPath = rewritePath(req.url ?? '/', fronteggPathRewrite);\n const rewriteUrl = rewritePath(fronteggUrlPath ?? '/', fronteggSSOPathRewrite);\n req.url = rewriteUrl;\n res.on('close', () => resolve());\n const proxyOptions = {\n target: process.env['FRONTEGG_BASE_URL'],\n };\n if (process.env['FRONTEGG_TEST_URL'] && req.url == '/frontegg/middleware-test') {\n proxyOptions.target = process.env['FRONTEGG_TEST_URL'];\n }\n const headers: Record<string, string> = {};\n if (process.env['FRONTEGG_SECURE_JWT_ENABLED'] === 'true') {\n const session = await getSession(req);\n if (session?.accessToken) {\n headers['authorization'] = 'Bearer ' + session.accessToken;\n }\n }\n\n if (config.isHostedLogin && isFronteggLogoutUrl(req.url || '') && !headers['authorization']) {\n const sessionCookie = CookieManager.getSessionCookieFromRequest(req);\n const tokens = await getTokensFromCookie(sessionCookie);\n if (tokens?.accessToken) {\n headers['authorization'] = 'Bearer ' + tokens.accessToken;\n }\n }\n\n if (options?.getClientIp) {\n config.getClientIp = options.getClientIp;\n }\n\n FronteggProxy.web(req, res, {\n ...proxyOptions,\n headers,\n });\n });\n\n/**\n * Next.js HTTP Proxy Middleware\n * @see https://nextjs.org/docs/api-routes/api-middlewares\n * @param {NextApiRequest} req - NextJS api request passed from api routing\n * @param {NextApiResponse} res - NextJS api response passed from api routing\n */\nconst FronteggApiMiddleware: FronteggApiMiddlewareType = (async (\n req: NextApiRequest,\n res: NextApiResponse\n): Promise<void> => {\n return await middlewarePromise(req, res);\n}) as FronteggApiMiddlewareType;\n\nFronteggApiMiddleware.cors =\n (options: CorsOptions) =>\n async (req: NextApiRequest, res: NextApiResponse): Promise<void> => {\n const {\n allowedOrigins = ['*'],\n allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n allowedHeaders = ['Content-Type', 'Authorization'],\n allowCredentials = true,\n } = options;\n\n if (isInternalRequest(req.headers.host ?? '')) {\n const origin = req.headers.origin ?? '';\n const combinedHeaders = Array.from(new Set([...defaultFronteggHeaders, ...allowedHeaders]));\n\n if (allowedOrigins.includes(origin)) {\n res.setHeader('Access-Control-Allow-Origin', origin);\n } else {\n res.removeHeader('Access-Control-Allow-Origin');\n }\n\n res.setHeader('Access-Control-Allow-Methods', allowedMethods.join(','));\n res.setHeader('Access-Control-Allow-Headers', combinedHeaders.join(','));\n res.setHeader('Access-Control-Allow-Credentials', allowCredentials ? 'true' : 'false');\n }\n\n return middlewarePromise(req, res);\n };\n\nFronteggApiMiddleware.withOptions =\n (options: FronteggMiddlewareOptions) =>\n async (req: NextApiRequest, res: NextApiResponse): Promise<void> => {\n return await middlewarePromise(req, res, options);\n };\n\nexport { FronteggApiMiddleware };\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"FronteggApiMiddleware.js","names":["_FronteggProxy","require","_constants","_helpers","_pages","_config","_interopRequireDefault","_cookies","_common","middlewarePromise","req","res","Promise","resolve","_req$url","fronteggUrlPath","rewritePath","url","fronteggPathRewrite","rewriteUrl","fronteggSSOPathRewrite","on","options","target","process","env","headers","session","getSession","accessToken","config","isHostedLogin","isFronteggLogoutUrl","sessionCookie","CookieManager","getSessionCookieFromRequest","tokens","getTokensFromCookie","FronteggProxy","web","_extends2","default","FronteggApiMiddleware","exports","cors","_req$headers$host","allowedOrigins","allowedMethods","allowedHeaders","allowCredentials","isInternalRequest","host","_req$headers$origin","origin","combinedHeaders","Array","from","Set","defaultFronteggHeaders","includes","setHeader","removeHeader","join"],"sources":["../../../../packages/nextjs/src/middleware/FronteggApiMiddleware.ts"],"sourcesContent":["import type { NextApiRequest, NextApiResponse } from 'next';\nimport { FronteggProxy } from './FronteggProxy';\nimport { fronteggSSOPathRewrite, fronteggPathRewrite, defaultFronteggHeaders } from './constants';\nimport { isInternalRequest, rewritePath } from './helpers';\nimport { getSession } from '../pages';\nimport { CorsOptions, FronteggApiMiddlewareType } from './types';\nimport config from '../config';\nimport { isFronteggLogoutUrl } from './helpers';\nimport CookieManager from '../utils/cookies';\nimport { getTokensFromCookie } from '../common';\n\nconst middlewarePromise = (req: NextApiRequest, res: NextApiResponse) =>\n new Promise<void>(async (resolve) => {\n const fronteggUrlPath = rewritePath(req.url ?? '/', fronteggPathRewrite);\n const rewriteUrl = rewritePath(fronteggUrlPath ?? '/', fronteggSSOPathRewrite);\n req.url = rewriteUrl;\n res.on('close', () => resolve());\n const options = {\n target: process.env['FRONTEGG_BASE_URL'],\n };\n if (process.env['FRONTEGG_TEST_URL'] && req.url == '/frontegg/middleware-test') {\n options.target = process.env['FRONTEGG_TEST_URL'];\n }\n const headers: Record<string, string> = {};\n if (process.env['FRONTEGG_SECURE_JWT_ENABLED'] === 'true') {\n const session = await getSession(req);\n if (session?.accessToken) {\n headers['authorization'] = 'Bearer ' + session.accessToken;\n }\n }\n\n if (config.isHostedLogin && isFronteggLogoutUrl(req.url || '') && !headers['authorization']) {\n const sessionCookie = CookieManager.getSessionCookieFromRequest(req);\n const tokens = await getTokensFromCookie(sessionCookie);\n if (tokens?.accessToken) {\n headers['authorization'] = 'Bearer ' + tokens.accessToken;\n }\n }\n FronteggProxy.web(req, res, {\n ...options,\n headers,\n });\n });\n\n/**\n * Next.js HTTP Proxy Middleware\n * @see https://nextjs.org/docs/api-routes/api-middlewares\n * @param {NextApiRequest} req - NextJS api request passed from api routing\n * @param {NextApiResponse} res - NextJS api response passed from api routing\n */\nconst FronteggApiMiddleware: FronteggApiMiddlewareType = (async (\n req: NextApiRequest,\n res: NextApiResponse\n): Promise<void> => {\n return await middlewarePromise(req, res);\n}) as FronteggApiMiddlewareType;\n\nFronteggApiMiddleware.cors =\n (options: CorsOptions) =>\n async (req: NextApiRequest, res: NextApiResponse): Promise<void> => {\n const {\n allowedOrigins = ['*'],\n allowedMethods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n allowedHeaders = ['Content-Type', 'Authorization'],\n allowCredentials = true,\n } = options;\n\n if (isInternalRequest(req.headers.host ?? '')) {\n const origin = req.headers.origin ?? '';\n const combinedHeaders = Array.from(new Set([...defaultFronteggHeaders, ...allowedHeaders]));\n\n if (allowedOrigins.includes(origin)) {\n res.setHeader('Access-Control-Allow-Origin', origin);\n } else {\n res.removeHeader('Access-Control-Allow-Origin');\n }\n\n res.setHeader('Access-Control-Allow-Methods', allowedMethods.join(','));\n res.setHeader('Access-Control-Allow-Headers', combinedHeaders.join(','));\n res.setHeader('Access-Control-Allow-Credentials', allowCredentials ? 'true' : 'false');\n }\n\n return middlewarePromise(req, res);\n };\n\nexport { FronteggApiMiddleware };\n"],"mappings":";;;;;;;;AACA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AACA,IAAAE,QAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AAEA,IAAAI,OAAA,GAAAC,sBAAA,CAAAL,OAAA;AAEA,IAAAM,QAAA,GAAAD,sBAAA,CAAAL,OAAA;AACA,IAAAO,OAAA,GAAAP,OAAA;AAEA,MAAMQ,iBAAiB,GAAGA,CAACC,GAAmB,EAAEC,GAAoB,KAClE,IAAIC,OAAO,CAAO,MAAOC,OAAO,IAAK;EAAA,IAAAC,QAAA;EACnC,MAAMC,eAAe,GAAG,IAAAC,oBAAW,GAAAF,QAAA,GAACJ,GAAG,CAACO,GAAG,YAAAH,QAAA,GAAI,GAAG,EAAEI,8BAAmB,CAAC;EACxE,MAAMC,UAAU,GAAG,IAAAH,oBAAW,EAACD,eAAe,WAAfA,eAAe,GAAI,GAAG,EAAEK,iCAAsB,CAAC;EAC9EV,GAAG,CAACO,GAAG,GAAGE,UAAU;EACpBR,GAAG,CAACU,EAAE,CAAC,OAAO,EAAE,MAAMR,OAAO,CAAC,CAAC,CAAC;EAChC,MAAMS,OAAO,GAAG;IACdC,MAAM,EAAEC,OAAO,CAACC,GAAG,CAAC,mBAAmB;EACzC,CAAC;EACD,IAAID,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC,IAAIf,GAAG,CAACO,GAAG,IAAI,2BAA2B,EAAE;IAC9EK,OAAO,CAACC,MAAM,GAAGC,OAAO,CAACC,GAAG,CAAC,mBAAmB,CAAC;EACnD;EACA,MAAMC,OAA+B,GAAG,CAAC,CAAC;EAC1C,IAAIF,OAAO,CAACC,GAAG,CAAC,6BAA6B,CAAC,KAAK,MAAM,EAAE;IACzD,MAAME,OAAO,GAAG,MAAM,IAAAC,iBAAU,EAAClB,GAAG,CAAC;IACrC,IAAIiB,OAAO,YAAPA,OAAO,CAAEE,WAAW,EAAE;MACxBH,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAGC,OAAO,CAACE,WAAW;IAC5D;EACF;EAEA,IAAIC,eAAM,CAACC,aAAa,IAAI,IAAAC,4BAAmB,EAACtB,GAAG,CAACO,GAAG,IAAI,EAAE,CAAC,IAAI,CAACS,OAAO,CAAC,eAAe,CAAC,EAAE;IAC3F,MAAMO,aAAa,GAAGC,gBAAa,CAACC,2BAA2B,CAACzB,GAAG,CAAC;IACpE,MAAM0B,MAAM,GAAG,MAAM,IAAAC,2BAAmB,EAACJ,aAAa,CAAC;IACvD,IAAIG,MAAM,YAANA,MAAM,CAAEP,WAAW,EAAE;MACvBH,OAAO,CAAC,eAAe,CAAC,GAAG,SAAS,GAAGU,MAAM,CAACP,WAAW;IAC3D;EACF;EACAS,4BAAa,CAACC,GAAG,CAAC7B,GAAG,EAAEC,GAAG,MAAA6B,SAAA,CAAAC,OAAA,MACrBnB,OAAO;IACVI;EAAO,EACR,CAAC;AACJ,CAAC,CAAC;;AAEJ;AACA;AACA;AACA;AACA;AACA;AACA,MAAMgB,qBAAgD,GAAI,MAAAA,CACxDhC,GAAmB,EACnBC,GAAoB,KACF;EAClB,OAAO,MAAMF,iBAAiB,CAACC,GAAG,EAAEC,GAAG,CAAC;AAC1C,CAA+B;AAACgC,OAAA,CAAAD,qBAAA,GAAAA,qBAAA;AAEhCA,qBAAqB,CAACE,IAAI,GACvBtB,OAAoB,IACrB,OAAOZ,GAAmB,EAAEC,GAAoB,KAAoB;EAAA,IAAAkC,iBAAA;EAClE,MAAM;IACJC,cAAc,GAAG,CAAC,GAAG,CAAC;IACtBC,cAAc,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,CAAC;IACrEC,cAAc,GAAG,CAAC,cAAc,EAAE,eAAe,CAAC;IAClDC,gBAAgB,GAAG;EACrB,CAAC,GAAG3B,OAAO;EAEX,IAAI,IAAA4B,0BAAiB,GAAAL,iBAAA,GAACnC,GAAG,CAACgB,OAAO,CAACyB,IAAI,YAAAN,iBAAA,GAAI,EAAE,CAAC,EAAE;IAAA,IAAAO,mBAAA;IAC7C,MAAMC,MAAM,IAAAD,mBAAA,GAAG1C,GAAG,CAACgB,OAAO,CAAC2B,MAAM,YAAAD,mBAAA,GAAI,EAAE;IACvC,MAAME,eAAe,GAAGC,KAAK,CAACC,IAAI,CAAC,IAAIC,GAAG,CAAC,CAAC,GAAGC,iCAAsB,EAAE,GAAGV,cAAc,CAAC,CAAC,CAAC;IAE3F,IAAIF,cAAc,CAACa,QAAQ,CAACN,MAAM,CAAC,EAAE;MACnC1C,GAAG,CAACiD,SAAS,CAAC,6BAA6B,EAAEP,MAAM,CAAC;IACtD,CAAC,MAAM;MACL1C,GAAG,CAACkD,YAAY,CAAC,6BAA6B,CAAC;IACjD;IAEAlD,GAAG,CAACiD,SAAS,CAAC,8BAA8B,EAAEb,cAAc,CAACe,IAAI,CAAC,GAAG,CAAC,CAAC;IACvEnD,GAAG,CAACiD,SAAS,CAAC,8BAA8B,EAAEN,eAAe,CAACQ,IAAI,CAAC,GAAG,CAAC,CAAC;IACxEnD,GAAG,CAACiD,SAAS,CAAC,kCAAkC,EAAEX,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAC;EACxF;EAEA,OAAOxC,iBAAiB,CAACC,GAAG,EAAEC,GAAG,CAAC;AACpC,CAAC","ignoreList":[]}
@@ -54,18 +54,7 @@ const ProxyRequestCallback = (proxyReq, req) => {
54
54
  * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
55
55
  */
56
56
  proxyReq.setHeader('Accept-Encoding', 'identity');
57
- let clientIp;
58
-
59
- // if (config.isVercel) {
60
- // clientIp = getClientIp(req.headers['cf-connecting-ip'] || req.headers['x-forwarded-for']);
61
- // } else if (config.getClientIp) {
62
- // clientIp = config.getClientIp(req);
63
- // }
64
-
65
- if (_config.default.getClientIp) {
66
- console.log('config.getClientIp(req)', _config.default.getClientIp(req));
67
- clientIp = _config.default.getClientIp(req);
68
- }
57
+ const clientIp = (0, _utils.getClientIp)(req.headers['cf-connecting-ip'] || req.headers['x-forwarded-for']);
69
58
  if (clientIp && _config.default.shouldForwardIp) {
70
59
  var _config$sharedSecret;
71
60
  proxyReq.setHeader(_utils.FRONTEGG_FORWARD_IP_HEADER, clientIp);
@@ -1 +1 @@
1
- {"version":3,"file":"ProxyRequestCallback.js","names":["_package","_interopRequireDefault","require","_sdkVersion","_config","_cookies","_fronteggLogger","_utils","_constants","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","getClientIp","console","log","shouldForwardIp","_config$sharedSecret","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_HEADERS_VERIFIER_HEADER","sharedSecret","FRONTEGG_VENDOR_ID_HEADER","headersToRemove","map","header","removeHeader","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 {\n FRONTEGG_HEADERS_VERIFIER_HEADER,\n FRONTEGG_FORWARD_IP_HEADER,\n getClientIp,\n FRONTEGG_VENDOR_ID_HEADER,\n} from '../api/utils';\nimport { headersToRemove } from './constants';\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 /**\n * Request uncompressed responses to avoid handling compression in middleware.\n * This ensures consistent behavior across different environments and simplifies response processing.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding\n */\n proxyReq.setHeader('Accept-Encoding', 'identity');\n\n let clientIp: string | undefined;\n\n // if (config.isVercel) {\n // clientIp = getClientIp(req.headers['cf-connecting-ip'] || req.headers['x-forwarded-for']);\n // } else if (config.getClientIp) {\n // clientIp = config.getClientIp(req);\n // }\n\n if (config.getClientIp) {\n console.log('config.getClientIp(req)', config.getClientIp(req));\n clientIp = config.getClientIp(req);\n }\n\n if (clientIp && config.shouldForwardIp) {\n proxyReq.setHeader(FRONTEGG_FORWARD_IP_HEADER, clientIp);\n proxyReq.setHeader(FRONTEGG_HEADERS_VERIFIER_HEADER, config.sharedSecret ?? '');\n proxyReq.setHeader(FRONTEGG_VENDOR_ID_HEADER, config.clientId);\n }\n\n headersToRemove.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":[]}
1
+ {"version":3,"file":"ProxyRequestCallback.js","names":["_package","_interopRequireDefault","require","_sdkVersion","_config","_cookies","_fronteggLogger","_utils","_constants","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","getClientIp","shouldForwardIp","_config$sharedSecret","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_HEADERS_VERIFIER_HEADER","sharedSecret","FRONTEGG_VENDOR_ID_HEADER","headersToRemove","map","header","removeHeader","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 {\n FRONTEGG_HEADERS_VERIFIER_HEADER,\n FRONTEGG_FORWARD_IP_HEADER,\n getClientIp,\n FRONTEGG_VENDOR_ID_HEADER,\n} from '../api/utils';\nimport { headersToRemove } from './constants';\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 /**\n * Request uncompressed responses to avoid handling compression in middleware.\n * This ensures consistent behavior across different environments and simplifies response processing.\n * @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding\n */\n proxyReq.setHeader('Accept-Encoding', 'identity');\n\n const clientIp = getClientIp(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_HEADERS_VERIFIER_HEADER, config.sharedSecret ?? '');\n proxyReq.setHeader(FRONTEGG_VENDOR_ID_HEADER, config.clientId);\n }\n\n headersToRemove.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":[]}
@@ -1,15 +1,10 @@
1
1
  import type { NextApiRequest, NextApiResponse } from 'next';
2
- export type GetClientIpFunction = (req: NextApiRequest) => string | undefined;
3
2
  export type CorsOptions = {
4
3
  allowedOrigins?: string[];
5
4
  allowedMethods?: string[];
6
5
  allowedHeaders?: string[];
7
6
  allowCredentials?: boolean;
8
7
  };
9
- export type FronteggMiddlewareOptions = {
10
- getClientIp?: GetClientIpFunction;
11
- };
12
8
  export type FronteggApiMiddlewareType = ((req: NextApiRequest, res: NextApiResponse) => Promise<void>) & {
13
9
  cors: (options: CorsOptions) => (req: NextApiRequest, res: NextApiResponse) => Promise<void>;
14
- withOptions: (options: FronteggMiddlewareOptions) => (req: NextApiRequest, res: NextApiResponse) => Promise<void>;
15
10
  };
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../packages/nextjs/src/middleware/types.ts"],"sourcesContent":["import type { NextApiRequest, NextApiResponse } from 'next';\n\nexport type GetClientIpFunction = (req: NextApiRequest) => string | undefined;\n\nexport type CorsOptions = {\n allowedOrigins?: string[];\n allowedMethods?: string[];\n allowedHeaders?: string[];\n allowCredentials?: boolean;\n};\n\nexport type FronteggMiddlewareOptions = {\n getClientIp?: GetClientIpFunction;\n};\n\nexport type FronteggApiMiddlewareType = ((req: NextApiRequest, res: NextApiResponse) => Promise<void>) & {\n cors: (options: CorsOptions) => (req: NextApiRequest, res: NextApiResponse) => Promise<void>;\n withOptions: (options: FronteggMiddlewareOptions) => (req: NextApiRequest, res: NextApiResponse) => Promise<void>;\n};\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../packages/nextjs/src/middleware/types.ts"],"sourcesContent":["import type { NextApiRequest, NextApiResponse } from 'next';\n\nexport type CorsOptions = {\n allowedOrigins?: string[];\n allowedMethods?: string[];\n allowedHeaders?: string[];\n allowCredentials?: boolean;\n};\n\nexport type FronteggApiMiddlewareType = ((req: NextApiRequest, res: NextApiResponse) => Promise<void>) & {\n cors: (options: CorsOptions) => (req: NextApiRequest, res: NextApiResponse) => Promise<void>;\n};\n"],"mappings":"","ignoreList":[]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@frontegg/nextjs",
3
3
  "libName": "FronteggNextJs",
4
- "version": "9.2.8-alpha.16120580367",
4
+ "version": "9.2.8",
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.78.0",
31
- "@frontegg/react-hooks": "7.78.0",
30
+ "@frontegg/js": "7.80.0",
31
+ "@frontegg/react-hooks": "7.80.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
@@ -5,6 +5,6 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _default = exports.default = {
8
- version: '9.2.8-alpha.16120580367'
8
+ version: '9.2.8'
9
9
  };
10
10
  //# sourceMappingURL=sdkVersion.js.map
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.2.8-alpha.16120580367' };\n"],"mappings":";;;;;;iCAAe;EAAEA,OAAO,EAAE;AAA0B,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"sdkVersion.js","names":["version"],"sources":["../../../packages/nextjs/src/sdkVersion.ts"],"sourcesContent":["export default { version: '9.2.8' };\n"],"mappings":";;;;;;iCAAe;EAAEA,OAAO,EAAE;AAAQ,CAAC","ignoreList":[]}
@@ -37,11 +37,6 @@ async function fetchUserData(options) {
37
37
  headers[_utils.FRONTEGG_APPLICATION_ID_HEADER] = _config.default.appId;
38
38
  }
39
39
  if (_config.default.shouldForwardIp) {
40
- console.log('inside fetchUserData', process.env.VERCEL);
41
- console.log('reqHeaders[cf-connecting-ip]', reqHeaders['cf-connecting-ip']);
42
- console.log('reqHeaders[x-vercel-proxied-for]', reqHeaders['x-vercel-proxied-for']);
43
- console.log('reqHeaders[x-real-ip]', reqHeaders['x-real-ip']);
44
- console.log('reqHeaders[x-forwarded-for]', reqHeaders['x-forwarded-for']);
45
40
  logger.debug('Retrieving forwarded IP...');
46
41
  const clientIp = (0, _utils.getClientIp)(reqHeaders['cf-connecting-ip'] || reqHeaders['x-vercel-proxied-for'] || reqHeaders['x-real-ip'] || reqHeaders['x-forwarded-for']);
47
42
  if (clientIp) {
@@ -1 +1 @@
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","console","log","process","env","VERCEL","debug","clientIp","getClientIp","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, getClientIp } 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 console.log('inside fetchUserData', process.env.VERCEL);\n console.log('reqHeaders[cf-connecting-ip]', reqHeaders['cf-connecting-ip']);\n console.log('reqHeaders[x-vercel-proxied-for]', reqHeaders['x-vercel-proxied-for']);\n console.log('reqHeaders[x-real-ip]', reqHeaders['x-real-ip']);\n console.log('reqHeaders[x-forwarded-for]', reqHeaders['x-forwarded-for']);\n logger.debug('Retrieving forwarded IP...');\n const clientIp = getClientIp(\n reqHeaders['cf-connecting-ip'] ||\n reqHeaders['x-vercel-proxied-for'] ||\n reqHeaders['x-real-ip'] ||\n reqHeaders['x-forwarded-for']\n );\n\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":"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","ignoreList":[]}
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","getClientIp","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, getClientIp } 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 const clientIp = getClientIp(\n reqHeaders['cf-connecting-ip'] ||\n reqHeaders['x-vercel-proxied-for'] ||\n reqHeaders['x-real-ip'] ||\n reqHeaders['x-forwarded-for']\n );\n\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":"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","ignoreList":[]}
@@ -78,9 +78,6 @@ async function refreshAccessTokenIfNeeded(ctx) {
78
78
  const clientIp = (0, _utils.getClientIp)(nextJsRequest.headers['cf-connecting-ip'] || nextJsRequest.headers['x-forwarded-for']) || ((_nextJsRequest$socket = nextJsRequest.socket) == null ? void 0 : _nextJsRequest$socket.remoteAddress);
79
79
  if (clientIp && _config.default.shouldForwardIp) {
80
80
  var _config$sharedSecret;
81
- console.log('inside refreshAccessTokenIfNeeded', process.env.VERCEL);
82
- console.log('nextJsRequest.headers[cf-connecting-ip]', nextJsRequest.headers['cf-connecting-ip']);
83
- console.log('nextJsRequest.headers[x-forwarded-for]', nextJsRequest.headers['x-forwarded-for']);
84
81
  nextJsRequest.headers[_utils.FRONTEGG_FORWARD_IP_HEADER] = clientIp;
85
82
  nextJsRequest.headers[_utils.FRONTEGG_HEADERS_VERIFIER_HEADER] = (_config$sharedSecret = _config.default.sharedSecret) != null ? _config$sharedSecret : '';
86
83
  nextJsRequest.headers[_utils.FRONTEGG_VENDOR_ID_HEADER] = _config.default.clientId;
@@ -1 +1 @@
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","_nextJsRequest$socket","_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","isHostedLogin","isOauthCallback","removeCookies","isSecured","isSSL","cookieDomain","isSamlCallback","clientIp","getClientIp","headers","socket","remoteAddress","shouldForwardIp","_config$sharedSecret","console","log","process","env","VERCEL","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_HEADERS_VERIFIER_HEADER","sharedSecret","FRONTEGG_VENDOR_ID_HEADER","clientId","response","refreshAccessTokenHostedLogin","refreshAccessTokenEmbedded","ok","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 {\n FRONTEGG_HEADERS_VERIFIER_HEADER,\n FRONTEGG_FORWARD_IP_HEADER,\n getClientIp,\n FRONTEGG_VENDOR_ID_HEADER,\n} 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 (config.isHostedLogin) {\n // hosted login bypassed urls\n if (isOauthCallback(url)) {\n logger.debug(`abandon refreshToken for HostedLogin Callback ${url}`);\n CookieManager.removeCookies({\n isSecured: config.isSSL,\n cookieDomain: config.cookieDomain,\n res: nextJsResponse,\n req: nextJsRequest,\n });\n }\n } else {\n // embedded login bypassed urls\n if (isSamlCallback(url)) {\n logger.debug(`abandon refreshToken for Saml Callback ${url}`);\n return null;\n }\n }\n\n const clientIp =\n getClientIp(nextJsRequest.headers['cf-connecting-ip'] || nextJsRequest.headers['x-forwarded-for']) ||\n nextJsRequest.socket?.remoteAddress;\n\n if (clientIp && config.shouldForwardIp) {\n console.log('inside refreshAccessTokenIfNeeded', process.env.VERCEL);\n console.log('nextJsRequest.headers[cf-connecting-ip]', nextJsRequest.headers['cf-connecting-ip']);\n console.log('nextJsRequest.headers[x-forwarded-for]', nextJsRequest.headers['x-forwarded-for']);\n nextJsRequest.headers[FRONTEGG_FORWARD_IP_HEADER] = clientIp;\n nextJsRequest.headers[FRONTEGG_HEADERS_VERIFIER_HEADER] = config.sharedSecret ?? '';\n nextJsRequest.headers[FRONTEGG_VENDOR_ID_HEADER] = config.clientId;\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
+ {"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","_nextJsRequest$socket","_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","isHostedLogin","isOauthCallback","removeCookies","isSecured","isSSL","cookieDomain","isSamlCallback","clientIp","getClientIp","headers","socket","remoteAddress","shouldForwardIp","_config$sharedSecret","FRONTEGG_FORWARD_IP_HEADER","FRONTEGG_HEADERS_VERIFIER_HEADER","sharedSecret","FRONTEGG_VENDOR_ID_HEADER","clientId","response","refreshAccessTokenHostedLogin","refreshAccessTokenEmbedded","ok","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 {\n FRONTEGG_HEADERS_VERIFIER_HEADER,\n FRONTEGG_FORWARD_IP_HEADER,\n getClientIp,\n FRONTEGG_VENDOR_ID_HEADER,\n} 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 (config.isHostedLogin) {\n // hosted login bypassed urls\n if (isOauthCallback(url)) {\n logger.debug(`abandon refreshToken for HostedLogin Callback ${url}`);\n CookieManager.removeCookies({\n isSecured: config.isSSL,\n cookieDomain: config.cookieDomain,\n res: nextJsResponse,\n req: nextJsRequest,\n });\n }\n } else {\n // embedded login bypassed urls\n if (isSamlCallback(url)) {\n logger.debug(`abandon refreshToken for Saml Callback ${url}`);\n return null;\n }\n }\n\n const clientIp =\n getClientIp(nextJsRequest.headers['cf-connecting-ip'] || 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_HEADERS_VERIFIER_HEADER] = config.sharedSecret ?? '';\n nextJsRequest.headers[FRONTEGG_VENDOR_ID_HEADER] = config.clientId;\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":[]}